<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
  
  <xsd:simpleType name="AxisType">
    <xsd:restriction base="xsd:string">
      <xsd:enumeration value="Category"/>
      <xsd:enumeration value="Date"/>
      <xsd:enumeration value="Number"/>
    </xsd:restriction>
  </xsd:simpleType>
  
  <!-- Supported calendar types -->
  <xsd:simpleType name="CalendarType">
    <xsd:restriction base="xsd:string">
      <!-- Gregorian calendar -->
      <xsd:enumeration value="Gregorian"/>
      <!-- Japanese imperial calendar -->
      <xsd:enumeration value="JapaneseImperial"/>
    </xsd:restriction>
  </xsd:simpleType>
  
  <xsd:simpleType name="ChartOrientation">
    <xsd:restriction base="xsd:string">
      <xsd:enumeration value="Horizontal"/>
      <xsd:enumeration value="Vertical"/>
    </xsd:restriction>
  </xsd:simpleType>
  
  <xsd:simpleType name="ChartType">
    <xsd:restriction base="xsd:string">
      <xsd:enumeration value="Area"/>
      <xsd:enumeration value="Bar"/>
      <xsd:enumeration value="Donut"/>
      <xsd:enumeration value="Line"/>
      <xsd:enumeration value="Pie"/>
      <xsd:enumeration value="StackedBar"/>
      <xsd:enumeration value="TimeSeries"/>
      <xsd:enumeration value="XYLine"/>
    </xsd:restriction>
  </xsd:simpleType>
  
  <xsd:simpleType name="DateTimeType">
    <xsd:restriction base="xsd:string">
      <xsd:enumeration value="long"/>
      <xsd:enumeration value="medium"/>
      <xsd:enumeration value="short"/>
    </xsd:restriction>
  </xsd:simpleType>
  
  <!-- Default wizard button type -->
  <xsd:simpleType name="DefaultButtonType">
    <xsd:restriction base="xsd:string">
      <!-- Cancel button is default -->
      <xsd:enumeration value="cancel"/>
      <!-- Finish button is default -->
      <xsd:enumeration value="finish"/>
      <!-- Next button is default -->
      <xsd:enumeration value="next"/>
      <!-- No default button -->
      <xsd:enumeration value="none"/>
      <!-- Prev button is default -->
      <xsd:enumeration value="prev"/>
    </xsd:restriction>
  </xsd:simpleType>
  
  <xsd:simpleType name="Download">
    <xsd:restriction base="xsd:string">
      <!-- Download as an attachment -->
      <xsd:enumeration value="attachment"/>
      <!-- Do not download -->
      <xsd:enumeration value="false"/>
      <!-- Download as an inline view -->
      <xsd:enumeration value="inline"/>
      <!-- Download using the configured default disposition, inline or attachment -->
      <xsd:enumeration value="true"/>
    </xsd:restriction>
  </xsd:simpleType>
  
  <!-- Request Type for Embedded Widgets -->
  <xsd:simpleType name="EmbeddedWidgetRequestType">
    <xsd:restriction base="xsd:string">
      <!-- GET requests to get the external resource. -->
      <xsd:enumeration value="GET"/>
      <!-- POST request used to submit an form to the external resource -->
      <xsd:enumeration value="POST"/>
    </xsd:restriction>
  </xsd:simpleType>
  
  <!-- Input format types -->
  <xsd:simpleType name="FormatType">
    <xsd:restriction base="xsd:string">
      <!-- Formatted to look like an amount of money -->
      <xsd:enumeration value="currency"/>
      <!-- Formatted to look like an email address, including a "mailto:" link -->
      <xsd:enumeration value="email"/>
      <!-- Formatted as a number with full precision (no rounding) -->
      <xsd:enumeration value="exactNumber"/>
      <!-- No special formatting applied -->
      <xsd:enumeration value="general"/>
      <!-- Formatted as a number of whole units, with grouping separators -->
      <xsd:enumeration value="integerNumber"/>
      <!-- Formatted to look like a percentage -->
      <xsd:enumeration value="percentagePoints"/>
      <!-- Formatted as a phone number -->
      <xsd:enumeration value="phoneNumber"/>
    </xsd:restriction>
  </xsd:simpleType>
  
  <xsd:simpleType name="HeadingLevel">
    <xsd:restriction base="xsd:string">
      <xsd:enumeration value="1"/>
      <xsd:enumeration value="2"/>
      <xsd:enumeration value="3"/>
    </xsd:restriction>
  </xsd:simpleType>
  
  <xsd:simpleType name="HttpMethod">
    <xsd:restriction base="xsd:string">
      <xsd:enumeration value="GET"/>
      <xsd:enumeration value="POST"/>
    </xsd:restriction>
  </xsd:simpleType>
  
  <!-- Different types of Icons -->
  <xsd:simpleType name="IconTypeEnum">
    <xsd:restriction base="xsd:string">
      <!-- The icon field will be added as a CSS class to the gw-icon div. customIconClass with
           a blank icon field will still cause an empty gw-icon div to be used. -->
      <xsd:enumeration value="customIconClass"/>
      <!-- The Icon field represents the name of a glyph in the customer custom font based icon
           library. -->
      <xsd:enumeration value="customerFontGlyph"/>
      <!-- The Icon field represents the name of a glyph in the default Guidewire font based
           icon library. -->
      <xsd:enumeration value="gwFontGlyph"/>
      <!-- Legacy. The Icon field represents a PNG Image File name -->
      <xsd:enumeration value="pngFileName"/>
      <!-- The Icon field represents an SVG File Name -->
      <xsd:enumeration value="svgFileName"/>
    </xsd:restriction>
  </xsd:simpleType>
  
  <xsd:simpleType name="ImageStyle">
    <xsd:restriction base="xsd:string">
      <!-- The image will have a thick black matte section. -->
      <xsd:enumeration value="BlackMatte"/>
      <!-- The image will have a custom css class requiring the theme to have a custom SASS class
           added to style the image]. -->
      <xsd:enumeration value="Custom"/>
      <!-- The image will have no additional style. -->
      <xsd:enumeration value="None"/>
      <!-- The image will have rounded corners. -->
      <xsd:enumeration value="Rounded"/>
      <!-- The image will have rounded corners and a drop shadow. -->
      <xsd:enumeration value="RoundedAndRaised"/>
      <!-- The image will have a thick white matte section. -->
      <xsd:enumeration value="WhiteMatte"/>
    </xsd:restriction>
  </xsd:simpleType>
  
  <!-- Enumerates the options for the type of characters allowed by the input -->
  <xsd:simpleType name="InputRestrictionType">
    <xsd:restriction base="xsd:string">
      <!-- All characters allowed. Alphabetic. Numeric. Special. -->
      <xsd:enumeration value="all"/>
      <!-- Only upper and lowercase A through Z characters allowed. -->
      <xsd:enumeration value="alphabeticAToZ"/>
      <!-- Same as alphabeticAToZ, but with additional name characters like whitespace ( ), period
           (.), hyphen (-) and apostrophe ('). -->
      <xsd:enumeration value="alphabeticAToZNameChars"/>
      <!-- Combination of alphabeticAToZ and numeric. -->
      <xsd:enumeration value="alphabeticAToZNumeric"/>
      <!-- Only characters allowed by the unicode escape property \p{L}. This essentially allows
           any standard word in any language supported by the Unicode standard. -->
      <xsd:enumeration value="alphabeticGlobal"/>
      <!-- Same as alphabeticGlobal, but with additional name characters like space ( ), period
           (.), hyphen (-) and apostrophe ('). -->
      <xsd:enumeration value="alphabeticGlobalNameChars"/>
      <!-- Combination of alphabeticGlobal and numeric. -->
      <xsd:enumeration value="alphabeticGlobalNumeric"/>
      <!-- Exists only to allow the customer to add custom per character validation. Either by
           overriding this option via the gwClientValidation.userRestrictionTypeCustomerOverrides
           map. Or by the server configuration option CustomPerCharacterRegex1 -->
      <xsd:enumeration value="customPerCharacterRegex1"/>
      <!-- Same purpose as customPerCharacterRegex1. -->
      <xsd:enumeration value="customPerCharacterRegex2"/>
      <!-- Only numeric characters 0 through 9 and period (.) and comma (,) and minus (-) -->
      <xsd:enumeration value="decimal"/>
      <!-- Allow the input to determine its own inputRestrictionType, based on other sensible
           properties like formatType. -->
      <xsd:enumeration value="defaultForType"/>
      <!-- Same as numerals, but with the addition of the minus sign (-). Will also trigger comma
           separators being added during input mode. Commonly used for unit based entry that
           could be negative. Like number of accounts gained or lost. -->
      <xsd:enumeration value="integer"/>
      <!-- Only numeric characters allowed. 0 through 9. Commonly used for values like an account
           number or a social security number. Also frequently used with an input mask to provide
           things like hyphen separators: ###-##-#### -->
      <xsd:enumeration value="numerals"/>
      <!-- Same as integer, but with the addition of plus (+), space ( ) and open and closed
           parenthesis. -->
      <xsd:enumeration value="phone"/>
    </xsd:restriction>
  </xsd:simpleType>
  
  <xsd:simpleType name="LabelOrientation">
    <xsd:restriction base="xsd:string">
      <xsd:enumeration value="Down45"/>
      <xsd:enumeration value="Horizontal"/>
      <xsd:enumeration value="Up45"/>
      <xsd:enumeration value="Vertical"/>
    </xsd:restriction>
  </xsd:simpleType>
  
  <!-- Layout format types -->
  <xsd:simpleType name="LayoutType">
    <xsd:restriction base="xsd:string">
      <!-- Table formatting applied -->
      <xsd:enumeration value="table"/>
    </xsd:restriction>
  </xsd:simpleType>
  
  <!-- Supported legend positions for charts. -->
  <xsd:simpleType name="LegendPosition">
    <xsd:restriction base="xsd:string">
      <xsd:enumeration value="bottom"/>
      <xsd:enumeration value="left"/>
      <xsd:enumeration value="right"/>
      <xsd:enumeration value="top"/>
    </xsd:restriction>
  </xsd:simpleType>
  
  <!-- Style class of a widget -->
  <xsd:simpleType name="LinkStyleClass">
    <xsd:restriction base="xsd:string">
      <!-- !!Deprecated. -->
      <xsd:enumeration value="archived"/>
      <!-- Makes a link look like a normal button -->
      <xsd:enumeration value="bigButton"/>
      <!-- Makes the text bold for a Link element -->
      <xsd:enumeration value="bold"/>
      <!-- Makes a link look like a small button -->
      <xsd:enumeration value="miniButton"/>
      <!-- Link with no spacing before and after -->
      <xsd:enumeration value="noSpaceLink"/>
      <!-- none -->
      <xsd:enumeration value="none"/>
      <!-- !!Deprecated. -->
      <xsd:enumeration value="stretch"/>
    </xsd:restriction>
  </xsd:simpleType>
  
  <!-- Different styles for ListViews -->
  <xsd:simpleType name="ListViewStyleEnum">
    <xsd:restriction base="xsd:string">
      <!-- The ListView is styled as a grid of cells. -->
      <xsd:enumeration value="gridStyle"/>
      <!-- The ListView has a minimal style. -->
      <xsd:enumeration value="minimalStyle"/>
      <!-- The ListView is styled to appear as a list of rows. -->
      <xsd:enumeration value="rowListStyle"/>
    </xsd:restriction>
  </xsd:simpleType>
  
  <!-- Values for the CSS Property 'object-fit' -->
  <xsd:simpleType name="ObjectFit">
    <xsd:restriction base="xsd:string">
      <!-- The image is scaled to maintain its aspect ratio while fitting within the defined
           dimensions. This can result in either horizontal or vertical 'letter-boxing'. -->
      <xsd:enumeration value="contain"/>
      <!-- The image is sized to maintain its aspect ratio while filling out the defined dimensions.
           This can result in the image being clipped. -->
      <xsd:enumeration value="cover"/>
      <!-- The image is sized to fill the element's content box. This can result in the image
           being stretched. -->
      <xsd:enumeration value="fill"/>
      <!-- The image is not resized. -->
      <xsd:enumeration value="none"/>
      <!-- The image is sized as if 'none' or 'contain' were specified; choosing whichever would
           result in a smaller image size. -->
      <xsd:enumeration value="scale-down"/>
    </xsd:restriction>
  </xsd:simpleType>
  
  <!-- Alignment of a widget -->
  <xsd:simpleType name="WidgetAlignment">
    <xsd:restriction base="xsd:string">
      <xsd:enumeration value="center"/>
      <xsd:enumeration value="left"/>
      <xsd:enumeration value="right"/>
    </xsd:restriction>
  </xsd:simpleType>
  
  <!-- Sorting direction: ascending or descending -->
  <xsd:simpleType name="WidgetSortDirection">
    <xsd:restriction base="xsd:string">
      <!-- Ascending order, as in "A", "B", "C" -->
      <xsd:enumeration value="ascending"/>
      <!-- Descending order, as in "C", "B", "A" -->
      <xsd:enumeration value="descending"/>
    </xsd:restriction>
  </xsd:simpleType>
  
  <xsd:simpleType name="WidgetSpacing">
    <xsd:restriction base="xsd:string">
      <!-- The spacing will be larger than the standard spacing. -->
      <xsd:enumeration value="large"/>
      <!-- The spacing will be as small as possible. -->
      <xsd:enumeration value="none"/>
      <!-- The spacing will be standard for the theme. -->
      <xsd:enumeration value="normal"/>
    </xsd:restriction>
  </xsd:simpleType>
  
  <!-- Vertical alignment of a widget -->
  <xsd:simpleType name="WidgetVerticalAlignment">
    <xsd:restriction base="xsd:string">
      <xsd:enumeration value="bottom"/>
      <xsd:enumeration value="middle"/>
      <xsd:enumeration value="top"/>
    </xsd:restriction>
  </xsd:simpleType>
  
  <!-- Wrap types -->
  <xsd:simpleType name="WrapType">
    <xsd:restriction base="xsd:string">
      <!-- Default value defers to format type to determine whether to wrap or not -->
      <xsd:enumeration value="default"/>
      <!-- Do not wrap contents -->
      <xsd:enumeration value="false"/>
      <!-- Wrap contents -->
      <xsd:enumeration value="true"/>
    </xsd:restriction>
  </xsd:simpleType>
  
  <xsd:element name="AbstractTableLayout">
    <xsd:complexType>
      <xsd:choice minOccurs="0" maxOccurs="unbounded">
        <xsd:element ref="Expose" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element ref="ExposeIterator" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element ref="ExposeRowTree" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element ref="Layout" minOccurs="0" maxOccurs="1"/>
        <xsd:element ref="ReferencedWidget" minOccurs="0" maxOccurs="unbounded"/>
      </xsd:choice>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- If true, the Widget will have a border around it. Purely a visual effect. -->
      <xsd:attribute name="border" type="xsd:boolean" default="false"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- (Optional) reference ID of the widget.  This does not have to be globally unique;
           it only has to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string"/>
      <!-- If true, independent of 'panel inner spacing', the container will left indent its
           children by a fixed amount. This is useful for displaying nested data throughout a
           page. Purely a visual effect. -->
      <xsd:attribute name="leftIndent" type="xsd:boolean" default="false"/>
      <!-- The style of the Panel. In general, this refers to the background color, but some
           styles can change other aspects such as font color, spacing, or filters. -->
      <xsd:attribute name="panelStyle" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- Tile, a basic element of a dashboard -->
  <xsd:element name="AbstractTile">
    <xsd:complexType>
      <xsd:choice minOccurs="0" maxOccurs="unbounded">
        <xsd:element ref="Require" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element ref="TileActions" minOccurs="0" maxOccurs="1"/>
        <xsd:element ref="Variable" minOccurs="0" maxOccurs="unbounded"/>
      </xsd:choice>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- Reference ID of the widget.  This does not have to be globally unique; it only has
           to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <!-- The title of the tile.  The title is shown on the top of the tile. -->
      <xsd:attribute name="title" type="xsd:string" use="required"/>
      <!-- The view more action.  The 'View more' link is shown in the tile footer. -->
      <xsd:attribute name="viewMoreAction" type="xsd:string"/>
      <!-- The view more label of the tile.  By default 'View More' -->
      <xsd:attribute name="viewMoreLabel" type="xsd:string" default="DisplayKey.get(&quot;Web.Tile.ViewMore&quot;)"/>
      <!-- An expression that indicates if the view more link is visible. -->
      <xsd:attribute name="viewMoreVisible" type="xsd:string"/>
      <!-- Boolean expression which, if false, completely hides the widget and all its children -->
      <xsd:attribute name="visible" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- An element containing accelerated action links in the left menu bar -->
  <xsd:element name="AcceleratedMenuActions">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="Require" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="Variable" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:choice>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="AddMenuItem"/>
          <xsd:element ref="AddMenuItemIterator"/>
          <xsd:element ref="MenuItem"/>
          <xsd:element ref="MenuItemDivider"/>
          <xsd:element ref="MenuItemIterator"/>
          <xsd:element ref="MenuItemSetRef"/>
          <xsd:element ref="MenuItemTree"/>
          <xsd:element ref="PickerMenuItem"/>
          <xsd:element ref="SearchItem"/>
        </xsd:choice>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="Link"/>
          <xsd:element ref="LinkIterator"/>
          <xsd:element ref="PickerLink"/>
        </xsd:choice>
        <xsd:element ref="Code" minOccurs="0" maxOccurs="1"/>
      </xsd:sequence>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- Color of the icon. If not set will default to its font color. -->
      <xsd:attribute name="iconColor" type="xsd:string"/>
      <!-- (Optional) reference ID of the widget.  This does not have to be globally unique;
           it only has to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string"/>
      <!-- An optional String which, if specified, means that any element dynamically including
           this widget must specify the same mode.  There is also a special mode "default" you
           can use which means "Use this widget if no widget with the specified mode exists".
            You can also have this widget match more than one mode by separating mode strings
           with a | character. -->
      <xsd:attribute name="mode" type="xsd:string"/>
      <!-- An optional title for this widget, if set, generates a title bar that can collapse
           and expand this widget -->
      <xsd:attribute name="title" type="xsd:string"/>
      <!-- An optional title icon for this widget, if set, generates a title bar that can collapse
           and expand this widget -->
      <xsd:attribute name="titleIcon" type="xsd:string"/>
      <!-- An enumeration of icon types that determine what the 'titleIcon' property on the widget
           is referring to. -->
      <xsd:attribute name="titleIconType" type="IconTypeEnum"/>
      <!-- Boolean expression which, if false, completely hides the widget and all its children -->
      <xsd:attribute name="visible" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- A button to add new entries for the nearest iterator control after. This button is
       only visible when the associated iterator control enables "add" (i.e., with "toAdd",
       "toCreateAndAdd" or "pickLocation" defined). If you want to add both "add" and "remove"
       buttons to the iterator, you can use &lt;IteratorButtons&gt; instead. -->
  <xsd:element name="AddButton">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="AddMenuItem"/>
          <xsd:element ref="AddMenuItemIterator"/>
        </xsd:choice>
      </xsd:sequence>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- An optional Gosu expression used to convert a picked value into a value that can be
           added to the iterator. The picked value is available as the special symbol "PickedValue" -->
      <xsd:attribute name="conversionExpression" type="xsd:string"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- A very special expression defining what flags (see ToolbarFlag) must be checked for
           the toolbar button to be available (= not grayed out).  All processing of flags happens
           on the browser-side.  The flags syntax is a comma-separated list of <i>predicates</i>
           (with no space after each comma), and all <i>predicates</i> must be satisfied for
           the button to be available.  Each <i>predicate</i> consists of a <i>operator</i> followed
           by a space and then the name of a ToolbarFlag.  For instance, flags="one Foo,no Bar"
           means "only available if there is exactly one Foo checkbox checked and no Bar checkboxes
           checked".  The available <i>operators</i> are: one, two, any, all, no, exists (same
           as any). -->
      <xsd:attribute name="flags" type="xsd:string"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- The name of a .png file, or .svg file, or font glyph. The Widget's iconType determines
           which one. -->
      <xsd:attribute name="icon" type="xsd:string"/>
      <!-- Color of the icon. If not set will default to its font color. -->
      <xsd:attribute name="iconColor" type="xsd:string"/>
      <!-- An enumeration of icon types that determine what the 'icon' property on the widget
           is referring to. -->
      <xsd:attribute name="iconType" type="IconTypeEnum"/>
      <!-- Reference ID of the widget.  This does not have to be globally unique; it only has
           to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <!-- The id of the iterator/list view widget this button applies to.  If the value is a
           list view then the first iterator widget child is used. -->
      <xsd:attribute name="iterator" type="xsd:string"/>
      <!-- Label for this element -->
      <xsd:attribute name="label" type="xsd:string"/>
      <!-- Specifies the picker popup to use when adding new elements to the iterator, as a Gosu
           statement of the format "[popup name].push(...)" -->
      <xsd:attribute name="pickLocation" type="xsd:string"/>
      <!-- Keyboard shortcut character in the form of "Q" or "ShiftQ"; the "Alt" key is implicit -->
      <xsd:attribute name="shortcut" type="xsd:string"/>
      <!-- An optional attribute, if set, defer sub menu generation until user tries to open
           the menu. DO NOT set this flag unless the sub menu of this widget is very expensive
           to generate. Setting this flag will reduce time to load the page, however require
           fetching additional info from server in the background, when the menu gets opened
           for the first time after page loaded. -->
      <xsd:attribute name="subMenuOnDemand" type="xsd:boolean" default="false"/>
      <!-- An optional Gosu expresssion to override the default "toCreateAndAdd" behavior defined
           by the associated iterator. The return type must match the entry type of the iterator.
           When the iterator is not under a List-Detail-Panel, this expression can alternatively
           returns an array of entry data, in which case multiple new entries will be added at
           the same time.The list of checked entry data under the associated Iterator is exposed
           to this expression as "CheckedValues", which can be used to copy from a selected row
           when creating a new row. See the same attribute on RowIterator for more info. -->
      <xsd:attribute name="toCreateAndAdd" type="xsd:string"/>
      <!-- A Gosu expression which, if defined, is evaluated to create help info if the user
           hovers the mouse over the button -->
      <xsd:attribute name="tooltip" type="xsd:string"/>
      <!-- Boolean expression which, if false, completely hides the widget and all its children -->
      <xsd:attribute name="visible" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- A menu item to add new entries for the specified iterator. -->
  <xsd:element name="AddMenuItem">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="AddMenuItem"/>
          <xsd:element ref="AddMenuItemIterator"/>
        </xsd:choice>
      </xsd:sequence>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- An optional Gosu expression used to convert a picked value into a value that can be
           added to the iterator. The picked value is available as the special symbol "PickedValue" -->
      <xsd:attribute name="conversionExpression" type="xsd:string"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- The name of a .png file, or .svg file, or font glyph. The Widget's iconType determines
           which one. -->
      <xsd:attribute name="icon" type="xsd:string"/>
      <!-- Color of the icon. If not set will default to its font color. -->
      <xsd:attribute name="iconColor" type="xsd:string"/>
      <!-- An enumeration of icon types that determine what the 'icon' property on the widget
           is referring to. -->
      <xsd:attribute name="iconType" type="IconTypeEnum"/>
      <!-- Reference ID of the widget.  This does not have to be globally unique; it only has
           to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <!-- The id of the iterator/list view widget this button applies to.  If the value is a
           list view then the first iterator widget child is used. -->
      <xsd:attribute name="iterator" type="xsd:string"/>
      <!-- Label for this element -->
      <xsd:attribute name="label" type="xsd:string"/>
      <!-- Specifies the picker popup to use when adding new elements to the iterator, as a Gosu
           statement of the format "[popup name].push(...)" -->
      <xsd:attribute name="pickLocation" type="xsd:string"/>
      <!-- An optional attribute, if set, defer sub menu generation until user tries to open
           the menu. DO NOT set this flag unless the sub menu of this widget is very expensive
           to generate. Setting this flag will reduce time to load the page, however require
           fetching additional info from server in the background, when the menu gets opened
           for the first time after page loaded. -->
      <xsd:attribute name="subMenuOnDemand" type="xsd:boolean" default="false"/>
      <!-- An optional Gosu expresssion to override the default "toCreateAndAdd" behavior defined
           by the associated iterator. The return type must match the entry type of the iterator.
           When the iterator is not under a List-Detail-Panel, this expression can alternatively
           returns an array of entry data, in which case multiple new entries will be added at
           the same time.The list of checked entry data under the associated Iterator is exposed
           to this expression as "CheckedValues", which can be used to copy from a selected row
           when creating a new row. See the same attribute on RowIterator for more info. -->
      <xsd:attribute name="toCreateAndAdd" type="xsd:string"/>
      <!-- Boolean expression which, if false, completely hides the widget and all its children -->
      <xsd:attribute name="visible" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- Creates as many copies of its AddMenuItem content as there are components in the array
       referenced by "value".  Supplies the component value to the created content as "elementName".
       Used inside an AddButton. -->
  <xsd:element name="AddMenuItemIterator">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="IteratorSort" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:choice minOccurs="1" maxOccurs="unbounded">
          <xsd:element ref="AddMenuItem"/>
          <xsd:element ref="AddMenuItemIterator"/>
        </xsd:choice>
      </xsd:sequence>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- As each element in the array result of "value" is displayed, it is exposed as a symbol
           with the name "elementName", which the contents of this iterator can refer to -->
      <xsd:attribute name="elementName" type="xsd:string" use="required"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- (Optional) reference ID of the widget.  This does not have to be globally unique;
           it only has to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string"/>
      <!-- Lets you manually specify the type of element exposed as "elementName".  This is useful
           if you have special knowledge about the type of element returned by "value": for example,
           if the field referred to returns an array of Contacts but you happen to know that
           they are guaranteed to all be Persons -->
      <xsd:attribute name="type" type="xsd:string"/>
      <!-- A Gosu expression that evaluates to the elements over which to iterate. Must evaluate
           to an Object array or a IQueryBeanResult. -->
      <xsd:attribute name="value" type="xsd:string" use="required"/>
      <!-- The type of the value expression. -->
      <xsd:attribute name="valueType" type="xsd:string" use="required"/>
      <!-- Boolean expression which, if false, completely hides the widget and all its children -->
      <xsd:attribute name="visible" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <xsd:element name="AddressAutoFillInput">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="LayoutConfig" minOccurs="0" maxOccurs="1"/>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="AddMenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="AddMenuItemIterator" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemDivider" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemIterator" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemSetRef" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemTree" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PickerMenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PostOnChange" minOccurs="0" maxOccurs="1"/>
          <xsd:element ref="Reflect" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="SearchItem" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:choice>
      </xsd:sequence>
      <!-- An optional action to take when the user clicks the value of this widget when the
           value is not being edited. See ActionBase for list of available action prefixes. When
           specified, the value of this widget will be rendered as a link when the value is not
           being edited. -->
      <xsd:attribute name="action" type="xsd:string"/>
      <!-- An optional boolean expression controlling whether the action should be available
           in this specific context when in read-only mode.  This is ignored if in edit mode
           or if the action is null.  This attribute will be deprecated in a future release,
           please use the 'available' attribute instead.  To disable action in readonly mode,
           you can set available=&quot;CurrentLocation.InEditMode || &lt;action-available-condition&gt;&quot; -->
      <xsd:attribute name="actionAvailable" type="xsd:string"/>
      <!-- Alignment of the widget ("left", "right", or "center") -->
      <xsd:attribute name="align" type="WidgetAlignment"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- Optional. Expression that returns an gw.api.contact.AutocompleteHandler which produces
           auto complete suggestions for this widget. USE WITH CAUTION: If specified, the handler
           will be called at server side on each user key stroke. -->
      <xsd:attribute name="autoComplete" type="xsd:string"/>
      <!-- An optional attribute to specify additional arguments to pass to the "autoComplete"
           handler, if exists.
         (You don't need to specify the id of this widget as part
           of this attribute, because the value of this widget
         is passed to the handler
           by default; If the id of this widget is specified, the argument value passed to the

                   handler will be null, since the value of this widget has not been fully specified
           when the handler is invoked.)
         Refers to the "id" attribute of other value
           widget on page. Multiple ids can be separated by ",".
         If specified, the latest
           value of these widgets will be passed to the autoComplete handler
         when retrieving
           auto complete info. -->
      <xsd:attribute name="autoCompleteArgIds" type="xsd:string"/>
      <!-- If specified, delays autocomplete functionality until the user has entered the specified
           number of characters. -->
      <xsd:attribute name="autoCompleteTriggerChars" type="xsd:integer"/>
      <!-- Boolean expression which, if false, grays out the widget and all its children -->
      <xsd:attribute name="available" type="xsd:string"/>
      <!-- If true then the label is displayed in bold text. -->
      <xsd:attribute name="boldLabel" type="xsd:boolean" default="false"/>
      <!-- If true then the value is displayed in bold text when read-only. -->
      <xsd:attribute name="boldValue" type="xsd:boolean" default="false"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- The confirmation message to show when "showConfirmMessage" is set. If not specified,
           a standard message will be used. -->
      <xsd:attribute name="confirmMessage" type="xsd:string"/>
      <!-- A Gosu expression used to convert the value picked from a popup before set it into
           the model value of this widget. The picked value will be exposed as a symbol with
           the name "PickedValue" -->
      <xsd:attribute name="conversionExpression" type="xsd:string"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- Boolean expression which, if false, makes this widget and all its children read-only -->
      <xsd:attribute name="editable" type="xsd:string" default="false"/>
      <!-- If true, enables html markup in the autocomplete suggestions for this text input by
           means of the following special tags: [i]italic[/i] - makes text italic, [b]bold[/b]
           - makes text bold and [hl]highlighted[/hl] - highlights the text -->
      <xsd:attribute name="enableAutoCompleteMarkup" type="xsd:boolean" default="false"/>
      <!-- If true, instead of showing a hierarchical menu, the widget will show a single menu
           with sub-menus grouped under headers. -->
      <xsd:attribute name="flatten" type="xsd:boolean" default="false"/>
      <!-- An optional boolean expression, if returns true, this widget will get focus when start
           editing the containing location. -->
      <xsd:attribute name="focusOnStartEditing" type="xsd:string"/>
      <!-- An optional expression that returns a format pattern, which must conform to the number
           format defined in java.text.DecimalFormat. When the underlying data type is not a
           Number, only the prefix and suffix of the pattern will be applied. For example, "#.#%"
           formats the Number value as percentage with up to 1 decimal digit. -->
      <xsd:attribute name="format" type="xsd:string"/>
      <!-- How the value is formatted; options include "general", "currency", and "email".  See
           the formatType enumeration. -->
      <xsd:attribute name="formatType" type="FormatType"/>
      <!-- A Gosu expression which, if defined, is evaluated to create help info that guides
           the user to edit this widget. The help info will show up if the user hovers the mouse
           over or focuses on the widget, when the widget is in edit mode. -->
      <xsd:attribute name="helpText" type="xsd:string"/>
      <!-- If false, menu items under this input will be shown even when the input is not editable. -->
      <xsd:attribute name="hideChildrenIfReadOnly" type="xsd:boolean" default="true"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- Reference ID of the widget.  This does not have to be globally unique; it only has
           to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <!-- A Gosu expression that converts the presentation value to a model value. The presentation
           value string is exposed to this expression as the symbol "VALUE". -->
      <xsd:attribute name="inputConversion" type="xsd:string"/>
      <!-- A gosu expression that returns a string to use as the input mask. If not specified,
           the input mask (if any) specified on the value's field validator will be used. This
           field should only be necessary in cases where the data type has no mask or where the
           mask needs to be conditional. The input mask returned should be of the same format
           as a mask specified using the input-mask attribute on a field validator (use # for
           wildcards). A mask that contains no wildcards will just be used as a placeholder value.
           The input mask is recalculated on every render, which means that if the mask is conditional
           and dependent on other data on this page that it can change from one request to the
           next. -->
      <xsd:attribute name="inputMask" type="xsd:string"/>
      <!-- Label to render. -->
      <xsd:attribute name="label" type="xsd:string"/>
      <!-- Boolean expression which, if true, causes the label portion of the Input to be rendered
           above the value -->
      <xsd:attribute name="labelAbove" type="xsd:string" default="false"/>
      <!-- Custom extension CSS style class to apply to the label. -->
      <xsd:attribute name="labelStyleClass" type="xsd:string"/>
      <!-- The maximum number of characters allowed for an input field. -->
      <xsd:attribute name="maxChars" type="xsd:integer" default="0"/>
      <!-- The number of child MenuItems to show in each column.  If not specified, all children
           will be shown in a single column. -->
      <xsd:attribute name="numEntriesPerColumn" type="xsd:integer" default="0"/>
      <!-- Gosu expression to be executed after the value is set from a picker. -->
      <xsd:attribute name="onPick" type="xsd:string"/>
      <!-- A Gosu expression that converts the model value to a presentation value. The model
           value is exposed to this expression as the symbol "VALUE". The return type of this
           expression must be String. -->
      <xsd:attribute name="outputConversion" type="xsd:string"/>
      <!-- A Gosu expression that returns a regular expression string to validate the user input.
            If not specified, the regular expression (if any) specified on the value's field
           validator will be used.  This field should only be necessary in cases where the data
           type has no regular expression or where it needs to be conditional. The value returned
           should be of the same format as a regular expression specified on a field validator.
            This property is recalculated on every render, which means that if the regular expression
           is conditional and dependent on other data on this page that it can change from one
           request to the next. -->
      <xsd:attribute name="regex" type="xsd:string"/>
      <!-- A Gosu expression used to validate user value before setting it to the model. This
           expression can access any symbols available to this widget, and a "VALUE" symbol that
           represents the user value. If this expression returns null, the user value will be
           set into the model. Otherwise, an error message containing the result of the expression
           will be displayed on the page, the value will not be set into the model, and no actions
           can be performed until the error is corrected. -->
      <xsd:attribute name="requestValidationExpression" type="xsd:string"/>
      <!-- If true, then the cell must be filled out by the user -->
      <xsd:attribute name="required" type="xsd:string"/>
      <!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * Deprecated.
           DO NOT USE.                                           * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
           Consider using "onChange/onPick/inputConversion/outputConversion" where available.
           If specified and the Input is editable, then any new value of the Input is written
           to this expression (Gosu by default) instead of to "value".  The new value is exposed
           as the symbol "VALUE".  For instance if your value expression is "Foo.getSomething()"
           then it can't be written to since it's not an L-value; so you could specify a setter
           expression along the lines of "Foo.setSomething(VALUE)" Warning: if you use this attribute
           many pebbles features will not work, including but not limited to: * Correct automatic
           detection of the state of the updated data * Correct automatic detection of the editability
           of the data * Correct automatic detection of the maximum size of a text input -->
      <xsd:attribute name="setter" type="xsd:string"/>
      <!-- Optional keyboard shortcut character in the form of "Q" or "ShiftQ"; the "Alt" key
           is implicit. This is only applicable when this widget has an "action" specified and
           the value is not being edited. -->
      <xsd:attribute name="shortcut" type="xsd:string"/>
      <!-- Boolean expression which determines whether or not to show a confirmation message
           when the field value is changed directly from the UI. It's NOT applicable when the
           value is changed indirectly, for example, as a result of client reflection. -->
      <xsd:attribute name="showConfirmMessage" type="xsd:string"/>
      <!-- An optional attribute, if set, defer sub menu generation until user tries to open
           the menu. DO NOT set this flag unless the sub menu of this widget is very expensive
           to generate. Setting this flag will reduce time to load the page, however require
           fetching additional info from server in the background, when the menu gets opened
           for the first time after page loaded. -->
      <xsd:attribute name="subMenuOnDemand" type="xsd:boolean" default="false"/>
      <!-- A helpful description of what fields are being autofilled by other fields when the
           user hovers the mouse over the autofill button -->
      <xsd:attribute name="tooltip" type="xsd:string"/>
      <!-- If set to a type other than 'all', will prevent the user from inputting certain types
           of characters on the client on a per character basis. Defaults to 'defaultForType'.
           Can be used in conjunction with the Input Mask property. For instance, a US phone
           number client mask could be implemented by setting this property to 'numeric' and
           the input mask to '+1(###)###-####. Some value widgets, like passwords or dates, may
           modify or ignore this property. This property has no effect on server or database
           level validation of data or input; meaning, an authenticated user could choose to
           manually submit a form with invalid data that would bypass this check. For database
           level validation see the 'regex' property. -->
      <xsd:attribute name="userInputRestriction" type="InputRestrictionType" default="defaultForType"/>
      <!-- A Gosu expression to run before committing the record. This expression can refer to
           any symbols available to this widget. If this expression returns null, the validation
           is considered successful; otherwise, the result of this expression will be displayed
           as an error and the record will not be committed. -->
      <xsd:attribute name="validationExpression" type="xsd:string"/>
      <!-- The value this Input binds to as an Expression.  If the Input is editable then this
           value is both read from and written to (unless "setter" is defined). -->
      <xsd:attribute name="value" type="xsd:string" use="required"/>
      <!-- CSS max-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionMaxWidth" type="xsd:string"/>
      <!-- CSS min-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionMinWidth" type="xsd:string"/>
      <!-- CSS width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionWidth" type="xsd:string"/>
      <!-- The type of the value expression. -->
      <xsd:attribute name="valueType" type="xsd:string" default="java.lang.String"/>
      <!-- If used instead of "editable", specifies whether the Input is editable when data is
           being created -->
      <xsd:attribute name="visible" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <xsd:element name="AddressAutoFillRangeInput">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="LayoutConfig" minOccurs="0" maxOccurs="1"/>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="AddMenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="AddMenuItemIterator" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemDivider" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemIterator" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemSetRef" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemTree" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PickerMenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PostOnChange" minOccurs="0" maxOccurs="1"/>
          <xsd:element ref="Reflect" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="SearchItem" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:choice>
      </xsd:sequence>
      <!-- An optional action to take when the user clicks the value of this widget when the
           value is not being edited. See ActionBase for list of available action prefixes. When
           specified, the value of this widget will be rendered as a link when the value is not
           being edited. -->
      <xsd:attribute name="action" type="xsd:string"/>
      <!-- An optional boolean expression controlling whether the action should be available
           in this specific context when in read-only mode.  This is ignored if in edit mode
           or if the action is null.  This attribute will be deprecated in a future release,
           please use the 'available' attribute instead.  To disable action in readonly mode,
           you can set available=&quot;CurrentLocation.InEditMode || &lt;action-available-condition&gt;&quot; -->
      <xsd:attribute name="actionAvailable" type="xsd:string"/>
      <!-- Alignment of the widget ("left", "right", or "center") -->
      <xsd:attribute name="align" type="WidgetAlignment"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- Boolean expression which, if false, grays out the widget and all its children -->
      <xsd:attribute name="available" type="xsd:string"/>
      <!-- If true then the label is displayed in bold text. -->
      <xsd:attribute name="boldLabel" type="xsd:boolean" default="false"/>
      <!-- If true then the value is displayed in bold text when read-only. -->
      <xsd:attribute name="boldValue" type="xsd:boolean" default="false"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- The confirmation message to show when "showConfirmMessage" is set. If not specified,
           a standard message will be used. -->
      <xsd:attribute name="confirmMessage" type="xsd:string"/>
      <!-- A Gosu expression used to convert the value picked from a popup before set it into
           the model value of this widget. The picked value will be exposed as a symbol with
           the name "PickedValue" -->
      <xsd:attribute name="conversionExpression" type="xsd:string"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- Boolean expression which, if false, makes this widget and all its children read-only -->
      <xsd:attribute name="editable" type="xsd:string" default="false"/>
      <!-- Optional Gosu expression for filtering the value range of the widget. You can write
           this either as a boolean expression over a "VALUE" symbol (i.e. "Libraries.MyLib.isOkValue(VALUE)"),
           or as a more complex expression that takes a "VALUES" array symbol and returns a List
           (i.e. "Libraries.MyLib.filterValues(VALUES)") which is more powerful and efficient
           but harder to write. -->
      <xsd:attribute name="filter" type="xsd:string"/>
      <!-- If true, instead of showing a hierarchical menu, the widget will show a single menu
           with sub-menus grouped under headers. -->
      <xsd:attribute name="flatten" type="xsd:boolean" default="false"/>
      <!-- An optional boolean expression, if returns true, this widget will get focus when start
           editing the containing location. -->
      <xsd:attribute name="focusOnStartEditing" type="xsd:string"/>
      <!-- How the value is formatted; options include "general", "currency", and "email".  See
           the formatType enumeration. -->
      <xsd:attribute name="formatType" type="FormatType"/>
      <!-- A Gosu expression which, if defined, is evaluated to create help info that guides
           the user to edit this widget. The help info will show up if the user hovers the mouse
           over or focuses on the widget, when the widget is in edit mode. -->
      <xsd:attribute name="helpText" type="xsd:string"/>
      <!-- If false, menu items under this input will be shown even when the input is not editable. -->
      <xsd:attribute name="hideChildrenIfReadOnly" type="xsd:boolean" default="true"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- Reference ID of the widget.  This does not have to be globally unique; it only has
           to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <xsd:attribute name="inputConversion" type="xsd:string"/>
      <!-- Label to render. -->
      <xsd:attribute name="label" type="xsd:string"/>
      <!-- Boolean expression which, if true, causes the label portion of the Input to be rendered
           above the value -->
      <xsd:attribute name="labelAbove" type="xsd:string" default="false"/>
      <!-- Custom extension CSS style class to apply to the label. -->
      <xsd:attribute name="labelStyleClass" type="xsd:string"/>
      <!-- Indicates that this input is a multiselect.  If true, the value expression should
           refer to an array. -->
      <xsd:attribute name="multiSelect" type="xsd:boolean" default="false"/>
      <!-- Label expression for the "New..." option. The default label defined for the application
           will be used if this attribute is not specified. -->
      <xsd:attribute name="newLabel" type="xsd:string" default="DisplayKey.get(&quot;Java.NameValueView.New&quot;)"/>
      <!-- Value expression that returns a new instance for the input value. The "New..." option
           will be available when this attribute is specifed. -->
      <xsd:attribute name="newValue" type="xsd:string"/>
      <!-- Label expression for the "none selected" option -->
      <xsd:attribute name="noneSelectedLabel" type="xsd:string" default="DisplayKey.get(&quot;Java.NameValueView.NoneSelected&quot;)"/>
      <!-- The number of child MenuItems to show in each column.  If not specified, all children
           will be shown in a single column. -->
      <xsd:attribute name="numEntriesPerColumn" type="xsd:integer" default="0"/>
      <!-- The number of rows to show in a multi-select input.  This attribute is invalid on
           a single-select input. -->
      <xsd:attribute name="numRows" type="xsd:integer"/>
      <!-- Gosu expression to be executed after the value is set from a picker. -->
      <xsd:attribute name="onPick" type="xsd:string"/>
      <!-- Optional Gosu expression used to determine the label displayed for each element of
           the value range. Defaults to the element's display name or string representation if
           not present. The element value is exposed as "VALUE". -->
      <xsd:attribute name="optionLabel" type="xsd:string"/>
      <!-- A Gosu expression used to validate user value before setting it to the model. This
           expression can access any symbols available to this widget, and a "VALUE" symbol that
           represents the user value. If this expression returns null, the user value will be
           set into the model. Otherwise, an error message containing the result of the expression
           will be displayed on the page, the value will not be set into the model, and no actions
           can be performed until the error is corrected. -->
      <xsd:attribute name="requestValidationExpression" type="xsd:string"/>
      <!-- If true, then the cell must be filled out by the user -->
      <xsd:attribute name="required" type="xsd:string"/>
      <!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * Deprecated.
           DO NOT USE.                                           * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
           Consider using "onChange/onPick/inputConversion/outputConversion" where available.
           If specified and the Input is editable, then any new value of the Input is written
           to this expression (Gosu by default) instead of to "value".  The new value is exposed
           as the symbol "VALUE".  For instance if your value expression is "Foo.getSomething()"
           then it can't be written to since it's not an L-value; so you could specify a setter
           expression along the lines of "Foo.setSomething(VALUE)" Warning: if you use this attribute
           many pebbles features will not work, including but not limited to: * Correct automatic
           detection of the state of the updated data * Correct automatic detection of the editability
           of the data * Correct automatic detection of the maximum size of a text input -->
      <xsd:attribute name="setter" type="xsd:string"/>
      <!-- Optional keyboard shortcut character in the form of "Q" or "ShiftQ"; the "Alt" key
           is implicit. This is only applicable when this widget has an "action" specified and
           the value is not being edited. -->
      <xsd:attribute name="shortcut" type="xsd:string"/>
      <!-- Boolean expression which determines whether or not to show a confirmation message
           when the field value is changed directly from the UI. It's NOT applicable when the
           value is changed indirectly, for example, as a result of client reflection. -->
      <xsd:attribute name="showConfirmMessage" type="xsd:string"/>
      <!-- If true, the input will be rendered as a "shuttle" input, allowing the user to select
           options by moving them from one list to another. -->
      <xsd:attribute name="shuttleList" type="xsd:boolean" default="false"/>
      <!-- If true, attempts to sort the results of valueRange -->
      <xsd:attribute name="sortValueRange" type="xsd:boolean" default="true"/>
      <!-- An optional attribute, if set, defer sub menu generation until user tries to open
           the menu. DO NOT set this flag unless the sub menu of this widget is very expensive
           to generate. Setting this flag will reduce time to load the page, however require
           fetching additional info from server in the background, when the menu gets opened
           for the first time after page loaded. -->
      <xsd:attribute name="subMenuOnDemand" type="xsd:boolean" default="false"/>
      <!-- A Gosu expression to run before committing the record. This expression can refer to
           any symbols available to this widget. If this expression returns null, the validation
           is considered successful; otherwise, the result of this expression will be displayed
           as an error and the record will not be committed. -->
      <xsd:attribute name="validationExpression" type="xsd:string"/>
      <!-- The value this Input binds to as an Expression.  If the Input is editable then this
           value is both read from and written to (unless "setter" is defined). -->
      <xsd:attribute name="value" type="xsd:string" use="required"/>
      <!-- Gosu expression defining the range of possible values for this element. Should evaluate
           to a List, an array, or a IQueryBeanResult -->
      <xsd:attribute name="valueRange" type="xsd:string" use="required"/>
      <!-- CSS max-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionMaxWidth" type="xsd:string"/>
      <!-- CSS min-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionMinWidth" type="xsd:string"/>
      <!-- CSS width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionWidth" type="xsd:string"/>
      <!-- The type of the value expression. -->
      <xsd:attribute name="valueType" type="xsd:string" default="java.lang.String"/>
      <!-- If used instead of "editable", specifies whether the Input is editable when data is
           being created -->
      <xsd:attribute name="visible" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <xsd:element name="AddressAutoFillTextInput">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="LayoutConfig" minOccurs="0" maxOccurs="1"/>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="AddMenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="AddMenuItemIterator" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemDivider" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemIterator" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemSetRef" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemTree" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PickerMenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PostOnChange" minOccurs="0" maxOccurs="1"/>
          <xsd:element ref="Reflect" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="SearchItem" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:choice>
      </xsd:sequence>
      <!-- An optional action to take when the user clicks the value of this widget when the
           value is not being edited. See ActionBase for list of available action prefixes. When
           specified, the value of this widget will be rendered as a link when the value is not
           being edited. -->
      <xsd:attribute name="action" type="xsd:string"/>
      <!-- An optional boolean expression controlling whether the action should be available
           in this specific context when in read-only mode.  This is ignored if in edit mode
           or if the action is null.  This attribute will be deprecated in a future release,
           please use the 'available' attribute instead.  To disable action in readonly mode,
           you can set available=&quot;CurrentLocation.InEditMode || &lt;action-available-condition&gt;&quot; -->
      <xsd:attribute name="actionAvailable" type="xsd:string"/>
      <!-- Alignment of the widget ("left", "right", or "center") -->
      <xsd:attribute name="align" type="WidgetAlignment"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- Boolean expression which, if false, grays out the widget and all its children -->
      <xsd:attribute name="available" type="xsd:string"/>
      <!-- If true then the label is displayed in bold text. -->
      <xsd:attribute name="boldLabel" type="xsd:boolean" default="false"/>
      <!-- If true then the value is displayed in bold text when read-only. -->
      <xsd:attribute name="boldValue" type="xsd:boolean" default="false"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- The confirmation message to show when "showConfirmMessage" is set. If not specified,
           a standard message will be used. -->
      <xsd:attribute name="confirmMessage" type="xsd:string"/>
      <!-- A Gosu expression used to convert the value picked from a popup before set it into
           the model value of this widget. The picked value will be exposed as a symbol with
           the name "PickedValue" -->
      <xsd:attribute name="conversionExpression" type="xsd:string"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- Boolean expression which, if false, makes this widget and all its children read-only -->
      <xsd:attribute name="editable" type="xsd:string" default="false"/>
      <!-- If true, instead of showing a hierarchical menu, the widget will show a single menu
           with sub-menus grouped under headers. -->
      <xsd:attribute name="flatten" type="xsd:boolean" default="false"/>
      <!-- An optional boolean expression, if returns true, this widget will get focus when start
           editing the containing location. -->
      <xsd:attribute name="focusOnStartEditing" type="xsd:string"/>
      <!-- How the value is formatted; options include "general", "currency", and "email".  See
           the formatType enumeration. -->
      <xsd:attribute name="formatType" type="FormatType"/>
      <!-- A Gosu expression which, if defined, is evaluated to create help info that guides
           the user to edit this widget. The help info will show up if the user hovers the mouse
           over or focuses on the widget, when the widget is in edit mode. -->
      <xsd:attribute name="helpText" type="xsd:string"/>
      <!-- If false, menu items under this input will be shown even when the input is not editable. -->
      <xsd:attribute name="hideChildrenIfReadOnly" type="xsd:boolean" default="true"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- Reference ID of the widget.  This does not have to be globally unique; it only has
           to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <!-- A Gosu expression that converts the presentation value to a model value. The presentation
           value string is exposed to this expression as the symbol "VALUE". -->
      <xsd:attribute name="inputConversion" type="xsd:string"/>
      <!-- Label to render. -->
      <xsd:attribute name="label" type="xsd:string"/>
      <!-- Boolean expression which, if true, causes the label portion of the Input to be rendered
           above the value -->
      <xsd:attribute name="labelAbove" type="xsd:string" default="false"/>
      <!-- Custom extension CSS style class to apply to the label. -->
      <xsd:attribute name="labelStyleClass" type="xsd:string"/>
      <!-- The number of child MenuItems to show in each column.  If not specified, all children
           will be shown in a single column. -->
      <xsd:attribute name="numEntriesPerColumn" type="xsd:integer" default="0"/>
      <!-- Gosu expression to be executed after the value is set from a picker. -->
      <xsd:attribute name="onPick" type="xsd:string"/>
      <!-- A Gosu expression that converts the model value to a presentation value. The model
           value is exposed to this expression as the symbol "VALUE". The return type of this
           expression must be String. -->
      <xsd:attribute name="outputConversion" type="xsd:string"/>
      <!-- A Gosu expression used to validate user value before setting it to the model. This
           expression can access any symbols available to this widget, and a "VALUE" symbol that
           represents the user value. If this expression returns null, the user value will be
           set into the model. Otherwise, an error message containing the result of the expression
           will be displayed on the page, the value will not be set into the model, and no actions
           can be performed until the error is corrected. -->
      <xsd:attribute name="requestValidationExpression" type="xsd:string"/>
      <!-- If true, then the cell must be filled out by the user -->
      <xsd:attribute name="required" type="xsd:string"/>
      <!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * Deprecated.
           DO NOT USE.                                           * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
           Consider using "onChange/onPick/inputConversion/outputConversion" where available.
           If specified and the Input is editable, then any new value of the Input is written
           to this expression (Gosu by default) instead of to "value".  The new value is exposed
           as the symbol "VALUE".  For instance if your value expression is "Foo.getSomething()"
           then it can't be written to since it's not an L-value; so you could specify a setter
           expression along the lines of "Foo.setSomething(VALUE)" Warning: if you use this attribute
           many pebbles features will not work, including but not limited to: * Correct automatic
           detection of the state of the updated data * Correct automatic detection of the editability
           of the data * Correct automatic detection of the maximum size of a text input -->
      <xsd:attribute name="setter" type="xsd:string"/>
      <!-- Optional keyboard shortcut character in the form of "Q" or "ShiftQ"; the "Alt" key
           is implicit. This is only applicable when this widget has an "action" specified and
           the value is not being edited. -->
      <xsd:attribute name="shortcut" type="xsd:string"/>
      <!-- Boolean expression which determines whether or not to show a confirmation message
           when the field value is changed directly from the UI. It's NOT applicable when the
           value is changed indirectly, for example, as a result of client reflection. -->
      <xsd:attribute name="showConfirmMessage" type="xsd:string"/>
      <!-- An optional attribute, if set, defer sub menu generation until user tries to open
           the menu. DO NOT set this flag unless the sub menu of this widget is very expensive
           to generate. Setting this flag will reduce time to load the page, however require
           fetching additional info from server in the background, when the menu gets opened
           for the first time after page loaded. -->
      <xsd:attribute name="subMenuOnDemand" type="xsd:boolean" default="false"/>
      <!-- A Gosu expression to run before committing the record. This expression can refer to
           any symbols available to this widget. If this expression returns null, the validation
           is considered successful; otherwise, the result of this expression will be displayed
           as an error and the record will not be committed. -->
      <xsd:attribute name="validationExpression" type="xsd:string"/>
      <!-- The value this Input binds to as an Expression.  If the Input is editable then this
           value is both read from and written to (unless "setter" is defined). -->
      <xsd:attribute name="value" type="xsd:string" use="required"/>
      <!-- CSS max-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionMaxWidth" type="xsd:string"/>
      <!-- CSS min-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionMinWidth" type="xsd:string"/>
      <!-- CSS width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionWidth" type="xsd:string"/>
      <!-- The type of the value expression. -->
      <xsd:attribute name="valueType" type="xsd:string" default="java.lang.String"/>
      <!-- If used instead of "editable", specifies whether the Input is editable when data is
           being created -->
      <xsd:attribute name="visible" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- A ListView cell specialized for an AddressBook Contact. -->
  <xsd:element name="AddressBookContactCell">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="Reflect" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element ref="ColumnFooter" minOccurs="0" maxOccurs="1"/>
        <xsd:element ref="PostOnChange" minOccurs="0" maxOccurs="1"/>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="AddMenuItem"/>
          <xsd:element ref="AddMenuItemIterator"/>
          <xsd:element ref="MenuItem"/>
          <xsd:element ref="MenuItemDivider"/>
          <xsd:element ref="MenuItemIterator"/>
          <xsd:element ref="MenuItemSetRef"/>
          <xsd:element ref="MenuItemTree"/>
          <xsd:element ref="PickerMenuItem"/>
          <xsd:element ref="SearchItem"/>
        </xsd:choice>
      </xsd:sequence>
      <!-- An optional action to take when the user clicks the value of this widget when the
           value is not being edited. See ActionBase for details. When specified, the value of
           this widget will be rendered as a link when the value is not being edited. -->
      <xsd:attribute name="action" type="xsd:string"/>
      <!-- An optional boolean expression controlling whether the action should be available
           in this specific context when in read-only mode.  This is ignored if in edit mode
           or if the action is null.  This attribute will be deprecated in a future release,
           please use the 'available' attribute instead.  To disable action in readonly mode,
           you can set available=&quot;CurrentLocation.InEditMode || &lt;action-available-condition&gt;&quot; -->
      <xsd:attribute name="actionAvailable" type="xsd:string"/>
      <!-- Specifies the alignment of this cell. Valid values: "left", "right", or "center".
           If no value is specified, the default alignment is determined by the value type ("center"
           for boolean values; "right" for numeric values; "left" for other value types). -->
      <xsd:attribute name="align" type="WidgetAlignment"/>
      <!-- Specify if the contact is editable when the link is clicked -->
      <xsd:attribute name="allowEditContact" type="xsd:string" default="true"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- Boolean expression which, if false, grays out the widget and all its children -->
      <xsd:attribute name="available" type="xsd:string"/>
      <!-- If true, renders the cell contents in bold text. Defaults to false. -->
      <xsd:attribute name="bold" type="xsd:boolean" default="false"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- The HTML colspan attribute, lets this cell span across multiple columns of other rows.
           Useful for generating a "group header" row above a RowIterator. The default value
           is 1. A value greater than 1 is only allowed when the containing row is not iterated
           by a RowIterator. -->
      <xsd:attribute name="colspan" type="xsd:integer"/>
      <!-- The confirmation message to show when "showConfirmMessage" is set. If not specified,
           a standard message will be used. -->
      <xsd:attribute name="confirmMessage" type="xsd:string"/>
      <!-- A Gosu expression used to convert the value picked from a popup before set it into
           the model value of this widget. The picked value will be exposed as a symbol with
           the name "PickedValue" -->
      <xsd:attribute name="conversionExpression" type="xsd:string"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- Boolean expression which, if false, makes this widget and all its children read-only -->
      <xsd:attribute name="editable" type="xsd:string" default="false"/>
      <!-- If true, allows the user to sort the values in the column by clicking on the header.
            Only applicable when the containing row is iterated by a RowIterator. -->
      <xsd:attribute name="enableSort" type="xsd:boolean" default="true"/>
      <!-- If true, this cell will the last cell in the row to be navigated to via the ENTER
           key. Only applicable when "CellNavOnEnter" or "QuickAddOnEnter" is set. Normally not
           specified. Default to false. -->
      <xsd:attribute name="endOfCellNav" type="xsd:boolean" default="false"/>
      <!-- If true, instead of showing a hierarchical menu, the widget will show a single menu
           with sub-menus grouped under headers. -->
      <xsd:attribute name="flatten" type="xsd:boolean" default="false"/>
      <!-- An optional boolean expression, if returns true, this widget will get focus when start
           editing the containing location. -->
      <xsd:attribute name="focusOnStartEditing" type="xsd:string"/>
      <!-- An expression that returns a GWColor instance. Legacy: this method can instead return
           a string corresponding to a CSS Specification Level 3 color name. See GWColor for
           more details. -->
      <xsd:attribute name="fontColor" type="xsd:string"/>
      <!-- An optional expression. If specified, a footer cell with the specified value will
           be rendered for this column. Only applicable when the containing Row is iterated by
           a RowIterator. Not allowed when "footerSumValue" is specified. -->
      <xsd:attribute name="footerLabel" type="xsd:string"/>
      <!-- An optional expression, if specified, will be used as format pattern for the footer
           sum value. Normally not specified, so that the "format" and\or "formatType" of the
           cell value will be applied to footer sum value. Only applicable when "footerSumValue"
           is specified. The result of this expression must conform to the number format defined
           in java.text.DecimalFormat. -->
      <xsd:attribute name="footerSumFormat" type="xsd:string"/>
      <!-- An optional Numeric expression. If specified, a footer cell that sums the specified
           value for all cells in this column will be rendered. Pagination of the list does not
           affect the sum value. Only applicable when the containing row is iterated by a RowIterator.
           Not allowed when "footerLabel" is specified. -->
      <xsd:attribute name="footerSumValue" type="xsd:string"/>
      <!-- Forces the "type" of this Contact column to be that specified by the expression (default
           gosu). If unspecified, the "type" of this Contact column is determined by the type
           of the value expression. Note that one can coerce the type of the value expression
           statically by casting it, as in "Foo.Contact as Person". Therefore, this attribute
           is really only useful when you want to force to a type that's determined dynamically. -->
      <xsd:attribute name="forceContactSubtype" type="xsd:string"/>
      <!-- How the value is formatted; options include "general", "currency", and "email".  See
           the formatType enumeration. -->
      <xsd:attribute name="formatType" type="FormatType"/>
      <!-- If true, the ListView will be grouped by this cell upon entering the page. Only one
           grouped cell is allowed at any given time and it is only applicable when the column
           is sortable. -->
      <xsd:attribute name="groupedOnEnter" type="xsd:string"/>
      <!-- If true, this Cell and any other grow-enabled Cell will expand to fill remaining space
           in the ListViewPanel. Only applicable when the ListView is set to stretch. -->
      <xsd:attribute name="grow" type="xsd:boolean" default="false"/>
      <!-- If true, generates a checkbox at the beginning of this cell. This checkbox can be
           used to check this entry in the nearest containing Iterator. Defaults to false. Only
           allowed if this cell is inside a CellIterator or under a Row inside a RowIterator. -->
      <xsd:attribute name="hasCheckBox" type="xsd:boolean" default="false"/>
      <!-- CSS height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="height" type="xsd:string"/>
      <!-- A Gosu expression which, if defined, is evaluated to create help info that guides
           the user to edit this widget. The help info will show up if the user hovers the mouse
           over or focuses on the widget, when the widget is in edit mode. -->
      <xsd:attribute name="helpText" type="xsd:string"/>
      <!-- If false, menu items under this input will be shown even when the input is not editable. -->
      <xsd:attribute name="hideChildrenIfReadOnly" type="xsd:boolean" default="true"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- Refers to an image file. If defined, makes this an icon cell. The "value" attribute
           should be a boolean expression describing whether the icon is visible in a given row. -->
      <xsd:attribute name="icon" type="xsd:string"/>
      <!-- Color of the icon. If not set will default to its font color. -->
      <xsd:attribute name="iconColor" type="xsd:string"/>
      <!-- The ALT text for any icon generated in the content cells -->
      <xsd:attribute name="iconLabel" type="xsd:string"/>
      <!-- An enumeration of icon types that determine what the 'icon' property on the widget
           is referring to. -->
      <xsd:attribute name="iconType" type="IconTypeEnum"/>
      <!-- Reference ID of the widget.  This does not have to be globally unique; it only has
           to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <!-- A Gosu expression that converts the presentation value to a model value. The presentation
           value string is exposed to this expression as the symbol "VALUE". -->
      <xsd:attribute name="inputConversion" type="xsd:string"/>
      <!-- An optional expression. If specified, a header cell with the specified value will
           be rendered for this column. Only applicable when the containing row is iterated by
           a RowIterator. -->
      <xsd:attribute name="label" type="xsd:string"/>
      <!-- Custom extension CSS style class to apply to the header. -->
      <xsd:attribute name="labelStyleClass" type="xsd:string"/>
      <!-- CSS max-height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="maxHeight" type="xsd:string"/>
      <!-- CSS max-width value. Can be `px`, or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="maxWidth" type="xsd:string"/>
      <!-- CSS min-height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="minHeight" type="xsd:string"/>
      <!-- CSS min-width value. Can be `px`, or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="minWidth" type="xsd:string"/>
      <!-- The ID of a MenuItemSet pcf file that will be included in the picker menu. This MenuItemSet
           pcf file contains a MenuItem for which you want to create new contacts. The default
           "NewContactPickerMenuItemSet" contains all subtypes of entity.Contact. To hide the
           NewContact menu completely set newContactMenu="BlankNewContactPickerMenuItemSet()".
           Available alternative is the NewPersonOnlyPickerMenuItemSet. It can also be a custom
           MenuItemSet pcf file. The default prototype of a newContactMenu menu item set is the
           following: SOME_MENUITEMSET(requiredContactType : Type, parentContact : Contact) If
           the menu item set is given without any parameter list (e.g. newContactMenu="NewPersonOnlyPickerMenuItemSet"),
           then the values obtained (or defaulted) from forceContactSubtype and parentContact
           are passed to the menu item set. If the menu item set contains a parameter list (e.g.
           newContactMenu="SomeOtherPickerMenuItemSet(entity.Company, 123, 456)"), then the specified
           parameter list will be passed down to the menu item set -->
      <xsd:attribute name="newContactMenu" type="xsd:string"/>
      <!-- The number of child MenuItems to show in each column.  If not specified, all children
           will be shown in a single column. -->
      <xsd:attribute name="numEntriesPerColumn" type="xsd:integer" default="0"/>
      <!-- Gosu expression to be executed after the value is set from a picker. -->
      <xsd:attribute name="onPick" type="xsd:string"/>
      <!-- A Gosu expression that converts the model value to a presentation value. The model
           value is exposed to this expression as the symbol "VALUE". The return type of this
           expression must be String. -->
      <xsd:attribute name="outputConversion" type="xsd:string"/>
      <!-- Specify the contact which would become the "parent" of the returned contact from this
           picker. If none is specified, then it is set to null by default. The main purpose
           of the parentContact is for passing down to the menu item set as mentioned below -->
      <xsd:attribute name="parentContact" type="xsd:string"/>
      <!-- Relative width when printing to PDF. All widths are relative to the widths of the
           other columns in the ListView -->
      <xsd:attribute name="printWidth" type="xsd:string" default="1"/>
      <!-- A Gosu expression used to validate user value before setting it to the model. This
           expression can access any symbols available to this widget, and a "VALUE" symbol that
           represents the user value. If this expression returns null, the user value will be
           set into the model. Otherwise, an error message containing the result of the expression
           will be displayed on the page, the value will not be set into the model, and no actions
           can be performed until the error is corrected. -->
      <xsd:attribute name="requestValidationExpression" type="xsd:string"/>
      <!-- If true, then the cell must be filled out by the user -->
      <xsd:attribute name="required" type="xsd:string"/>
      <!-- Overrides the location of the search page. -->
      <xsd:attribute name="searchLocation" type="xsd:string"/>
      <!-- Overrides the action on "none selected" option in the drop down menu. The default
           behavior for the "none selected" is setting the value expression of this widget to
           null. However, if the value expression is not a simple property (e.g. a function),
           then this attribute can be used to override the "none selected" action correctly (e.g.
           if "setter" is provided for this widget, then "setNoneSelected" should also be provided.
           ) -->
      <xsd:attribute name="setNoneSelected" type="xsd:string"/>
      <!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * Deprecated.
           DO NOT USE.                                           * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
           Consider using "onChange/onPick/inputConversion/outputConversion" where available.
           If specified and the Input is editable, then any new value of the Input is written
           to this expression (Gosu by default) instead of to "value".  The new value is exposed
           as the symbol "VALUE".  For instance if your value expression is "Foo.getSomething()"
           then it can't be written to since it's not an L-value; so you could specify a setter
           expression along the lines of "Foo.setSomething(VALUE)" Warning: if you use this attribute
           many pebbles features will not work, including but not limited to: * Correct automatic
           detection of the state of the updated data * Correct automatic detection of the editability
           of the data * Correct automatic detection of the maximum size of a text input -->
      <xsd:attribute name="setter" type="xsd:string"/>
      <!-- Boolean expression which determines whether or not to show a confirmation message
           when the field value is changed directly from the UI. It's NOT applicable when the
           value is changed indirectly, for example, as a result of client reflection. -->
      <xsd:attribute name="showConfirmMessage" type="xsd:string"/>
      <!-- If true, shows the icon defined by "icon" in the header cell for this column. The
           default value is true. -->
      <xsd:attribute name="showHeaderIcon" type="xsd:boolean" default="true"/>
      <!-- An optional comma-separated sequence of Expressions, each of which is assumed to be
           a dot-delimited path, the value by which this column will be sorted if the user clicks
           on the header cell. -->
      <xsd:attribute name="sortBy" type="xsd:string"/>
      <!-- Either "ascending" or "descending" -->
      <xsd:attribute name="sortDirection" type="WidgetSortDirection" default="ascending"/>
      <!-- The priority of sorting relative to other sorting elements like IteratorSort and Cell.
           The lower the number, the higher the priority.  The highest priority is "1" -->
      <xsd:attribute name="sortOrder" type="xsd:integer" default="0"/>
      <!-- CSS style class for the cell content; for instance, "miniButton" makes a link appear
           as a small button -->
      <xsd:attribute name="styleClass" type="LinkStyleClass"/>
      <!-- An optional attribute, if set, defer sub menu generation until user tries to open
           the menu. DO NOT set this flag unless the sub menu of this widget is very expensive
           to generate. Setting this flag will reduce time to load the page, however require
           fetching additional info from server in the background, when the menu gets opened
           for the first time after page loaded. -->
      <xsd:attribute name="subMenuOnDemand" type="xsd:boolean" default="false"/>
      <!-- Extra "alt" text to show when the user hovers the mouse over the header cell of this
           column. -->
      <xsd:attribute name="tooltip" type="xsd:string"/>
      <!-- If true, validate before commit that the value of this column is unique across all
           rows in the current page. Only meaningful when this column is editable. -->
      <xsd:attribute name="unique" type="xsd:boolean" default="false"/>
      <!-- A Gosu expression to run before committing the record. This expression can refer to
           any symbols available to this widget. If this expression returns null, the validation
           is considered successful; otherwise, the result of this expression will be displayed
           as an error and the record will not be committed. -->
      <xsd:attribute name="validationExpression" type="xsd:string"/>
      <!-- The label of this cell to be used when it has validation issues. Not needed when this
           cell has a "label". Required if the cell is editable but does not have a "label". -->
      <xsd:attribute name="validationLabel" type="xsd:string"/>
      <!-- The value this element binds to.  If the element is editable then this value is both
           read from and written to (unless "setter" is defined). -->
      <xsd:attribute name="value" type="xsd:string"/>
      <!-- The type of the value expression. -->
      <xsd:attribute name="valueType" type="xsd:string" default="entity.Contact"/>
      <!-- Boolean expression which, if false, hides the <i>contents</i> of the cell (its "ValueWidget"),
           but not the cell itself.  Needed since hiding the actual cell usually screws up the
           layout -->
      <xsd:attribute name="valueVisible" type="xsd:string"/>
      <!-- Specifies the vertical alignment of this cell. Valid values: "top", "middle", or "bottom".
           If no value is specified, the default alignment is determined by the cell type ("top"
           for Text Areas and Format Cells, "middle" for buttons and icons). -->
      <xsd:attribute name="verticalAlign" type="WidgetVerticalAlignment"/>
      <!-- Boolean expression which, if false, completely hides the widget and all its children -->
      <xsd:attribute name="visible" type="xsd:string"/>
      <!-- CSS width value. Can be `px`, or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="width" type="xsd:string"/>
      <!-- If default, defers to FormatType to decide whether to wrap or not.  If true, allows
           cell content to wrap. -->
      <xsd:attribute name="wrap" type="WrapType" default="default"/>
      <!-- If true, allows Header Cell text content to wrap. Defaults to true. -->
      <xsd:attribute name="wrapLabel" type="xsd:boolean" default="false"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- A ContactInput specialized for Contact fields on the AddressBook. This input has a
       pre-defined AddressBookContactDetails page, AddressBookPicker page, NewAddressBookContact
       page, and NewAddressBookContact menu -->
  <xsd:element name="AddressBookContactInput">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="LayoutConfig" minOccurs="0" maxOccurs="1"/>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="AddMenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="AddMenuItemIterator" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemDivider" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemIterator" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemSetRef" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemTree" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PickerMenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PostOnChange" minOccurs="0" maxOccurs="1"/>
          <xsd:element ref="Reflect" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="SearchItem" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:choice>
      </xsd:sequence>
      <xsd:attribute name="action" type="xsd:string"/>
      <!-- An optional boolean expression controlling whether the action should be available
           in this specific context when in read-only mode.  This is ignored if in edit mode
           or if the action is null.  This attribute will be deprecated in a future release,
           please use the 'available' attribute instead.  To disable action in readonly mode,
           you can set available=&quot;CurrentLocation.InEditMode || &lt;action-available-condition&gt;&quot; -->
      <xsd:attribute name="actionAvailable" type="xsd:string"/>
      <!-- Alignment of the widget ("left", "right", or "center") -->
      <xsd:attribute name="align" type="WidgetAlignment"/>
      <xsd:attribute name="allowEditContact" type="xsd:string"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- Boolean expression which, if false, grays out the widget and all its children -->
      <xsd:attribute name="available" type="xsd:string"/>
      <!-- If true then the label is displayed in bold text. -->
      <xsd:attribute name="boldLabel" type="xsd:boolean" default="false"/>
      <!-- If true then the value is displayed in bold text when read-only. -->
      <xsd:attribute name="boldValue" type="xsd:boolean" default="false"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- The confirmation message to show when "showConfirmMessage" is set. If not specified,
           a standard message will be used. -->
      <xsd:attribute name="confirmMessage" type="xsd:string"/>
      <!-- A Gosu expression used to convert the value picked from a popup before set it into
           the model value of this widget. The picked value will be exposed as a symbol with
           the name "PickedValue" -->
      <xsd:attribute name="conversionExpression" type="xsd:string"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- Boolean expression which, if false, makes this widget and all its children read-only -->
      <xsd:attribute name="editable" type="xsd:string" default="false"/>
      <!-- If true, instead of showing a hierarchical menu, the widget will show a single menu
           with sub-menus grouped under headers. -->
      <xsd:attribute name="flatten" type="xsd:boolean" default="false"/>
      <!-- An optional boolean expression, if returns true, this widget will get focus when start
           editing the containing location. -->
      <xsd:attribute name="focusOnStartEditing" type="xsd:string"/>
      <!-- Forces the "type" of this Contact input to be that specified by the expression (default
           gosu). If unspecified, the "type" of this Contact column is determined by the type
           of the value expression. Note that one can coerce the type of the value expression
           statically by casting it, as in "Foo.Contact as Person". Therefore, this attribute
           is really only useful when you want to force to a type that's determined dynamically. -->
      <xsd:attribute name="forceContactSubtype" type="xsd:string"/>
      <!-- How the value is formatted; options include "general", "currency", and "email".  See
           the formatType enumeration. -->
      <xsd:attribute name="formatType" type="FormatType"/>
      <!-- A Gosu expression which, if defined, is evaluated to create help info that guides
           the user to edit this widget. The help info will show up if the user hovers the mouse
           over or focuses on the widget, when the widget is in edit mode. -->
      <xsd:attribute name="helpText" type="xsd:string"/>
      <!-- If false, menu items under this input will be shown even when the input is not editable. -->
      <xsd:attribute name="hideChildrenIfReadOnly" type="xsd:boolean" default="true"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- Reference ID of the widget.  This does not have to be globally unique; it only has
           to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <!-- A Gosu expression that converts the presentation value to a model value. The presentation
           value string is exposed to this expression as the symbol "VALUE". -->
      <xsd:attribute name="inputConversion" type="xsd:string"/>
      <!-- Label to render. -->
      <xsd:attribute name="label" type="xsd:string"/>
      <!-- Boolean expression which, if true, causes the label portion of the Input to be rendered
           above the value -->
      <xsd:attribute name="labelAbove" type="xsd:string" default="false"/>
      <!-- Custom extension CSS style class to apply to the label. -->
      <xsd:attribute name="labelStyleClass" type="xsd:string"/>
      <!-- The ID of a MenuItemSet pcf file that will be included in the picker menu. This MenuItemSet
           pcf file contains a MenuItem for which you want to create new contacts. The default
           "NewContactPickerMenuItemSet" contains all subtypes of entity.Contact. To hide the
           NewContact menu completely set newContactMenu="BlankNewContactPickerMenuItemSet()".
           Available alternative is the NewPersonOnlyPickerMenuItemSet. It can also be a custom
           MenuItemSet pcf file. The default prototype of a newContactMenu menu item set is the
           following: SOME_MENUITEMSET(requiredContactType : Type, parentContact : Contact) If
           the menu item set is given without any parameter list (e.g. newContactMenu="NewPersonOnlyPickerMenuItemSet"),
           then the values obtained (or defaulted) from forceContactSubtype and parentContact
           are passed to the menu item set. If the menu item set contains a parameter list (e.g.
           newContactMenu="SomeOtherPickerMenuItemSet(entity.Company, 123, 456)"), then the specified
           parameter list will be passed down to the menu item set -->
      <xsd:attribute name="newContactMenu" type="xsd:string"/>
      <!-- The number of child MenuItems to show in each column.  If not specified, all children
           will be shown in a single column. -->
      <xsd:attribute name="numEntriesPerColumn" type="xsd:integer" default="0"/>
      <!-- Gosu expression to be executed after the value is set from a picker. -->
      <xsd:attribute name="onPick" type="xsd:string"/>
      <!-- A Gosu expression that converts the model value to a presentation value. The model
           value is exposed to this expression as the symbol "VALUE". The return type of this
           expression must be String. -->
      <xsd:attribute name="outputConversion" type="xsd:string"/>
      <!-- Specify the contact which would become the "parent" of the returned contact from this
           picker. If none is specified, then it is set to null by default. The main purpose
           of the parentContact is for passing down to the menu item set as mentioned below -->
      <xsd:attribute name="parentContact" type="xsd:string"/>
      <!-- A Gosu expression used to validate user value before setting it to the model. This
           expression can access any symbols available to this widget, and a "VALUE" symbol that
           represents the user value. If this expression returns null, the user value will be
           set into the model. Otherwise, an error message containing the result of the expression
           will be displayed on the page, the value will not be set into the model, and no actions
           can be performed until the error is corrected. -->
      <xsd:attribute name="requestValidationExpression" type="xsd:string"/>
      <!-- If true, then the cell must be filled out by the user -->
      <xsd:attribute name="required" type="xsd:string"/>
      <!-- Overrides the location of the search page. -->
      <xsd:attribute name="searchLocation" type="xsd:string"/>
      <!-- Overrides the action on "none selected" option in the drop down menu. The default
           behavior for the "none selected" is setting the value expression of this widget to
           null. However, if the value expression is not a simple property (e.g. a function),
           then this attribute can be used to override the "none selected" action correctly (e.g.
           if "setter" is provided for this widget, then "setNoneSelected" should also be provided.
           ) -->
      <xsd:attribute name="setNoneSelected" type="xsd:string"/>
      <!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * Deprecated.
           DO NOT USE.                                           * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
           Consider using "onChange/onPick/inputConversion/outputConversion" where available.
           If specified and the Input is editable, then any new value of the Input is written
           to this expression (Gosu by default) instead of to "value".  The new value is exposed
           as the symbol "VALUE".  For instance if your value expression is "Foo.getSomething()"
           then it can't be written to since it's not an L-value; so you could specify a setter
           expression along the lines of "Foo.setSomething(VALUE)" Warning: if you use this attribute
           many pebbles features will not work, including but not limited to: * Correct automatic
           detection of the state of the updated data * Correct automatic detection of the editability
           of the data * Correct automatic detection of the maximum size of a text input -->
      <xsd:attribute name="setter" type="xsd:string"/>
      <!-- Optional keyboard shortcut character in the form of "Q" or "ShiftQ"; the "Alt" key
           is implicit. This is only applicable when this widget has an "action" specified and
           the value is not being edited. -->
      <xsd:attribute name="shortcut" type="xsd:string"/>
      <!-- Boolean expression which determines whether or not to show a confirmation message
           when the field value is changed directly from the UI. It's NOT applicable when the
           value is changed indirectly, for example, as a result of client reflection. -->
      <xsd:attribute name="showConfirmMessage" type="xsd:string"/>
      <!-- If false, hide the AddressBook search menu item. -->
      <xsd:attribute name="showSearchInMenu" type="xsd:boolean" default="true"/>
      <!-- An optional attribute, if set, defer sub menu generation until user tries to open
           the menu. DO NOT set this flag unless the sub menu of this widget is very expensive
           to generate. Setting this flag will reduce time to load the page, however require
           fetching additional info from server in the background, when the menu gets opened
           for the first time after page loaded. -->
      <xsd:attribute name="subMenuOnDemand" type="xsd:boolean" default="false"/>
      <!-- A Gosu expression to run before committing the record. This expression can refer to
           any symbols available to this widget. If this expression returns null, the validation
           is considered successful; otherwise, the result of this expression will be displayed
           as an error and the record will not be committed. -->
      <xsd:attribute name="validationExpression" type="xsd:string"/>
      <!-- The value this Input binds to as an Expression.  If the Input is editable then this
           value is both read from and written to (unless "setter" is defined). -->
      <xsd:attribute name="value" type="xsd:string" use="required"/>
      <!-- CSS max-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionMaxWidth" type="xsd:string"/>
      <!-- CSS min-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionMinWidth" type="xsd:string"/>
      <!-- CSS width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionWidth" type="xsd:string"/>
      <!-- The type of the value expression. -->
      <xsd:attribute name="valueType" type="xsd:string" default="entity.Contact"/>
      <!-- If used instead of "editable", specifies whether the Input is editable when data is
           being created -->
      <xsd:attribute name="visible" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- A single line for displaying a notification as a link with a dismiss button -->
  <xsd:element name="AlertBar">
    <xsd:complexType>
      <xsd:choice minOccurs="0" maxOccurs="unbounded"/>
      <!-- Action performed by this widget.  By default, this is a Gosu expression.  Other types
           of actions can be specified by using the following prefixes: http: causes the browser
           to follow the specified plain http link https: causes the browser to follow the specified
           plain https link javascript: causes the browser to execute the specified javascript
           logout: logs out of the application -->
      <xsd:attribute name="action" type="xsd:string"/>
      <!-- Default to true. If set to false, there would be no dismiss button for the user to
           dismiss the alert. -->
      <xsd:attribute name="allowDismiss" type="xsd:boolean" default="true"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- Boolean expression which, if false, grays out the widget and all its children and
           makes them unclickable -->
      <xsd:attribute name="available" type="xsd:string"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- Confirmation message to show before performing the action -->
      <xsd:attribute name="confirmMessage" type="xsd:string"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- Binds a boolean variable to the dismissed state of the alert, allowing the alert to
           be dismissed/re-shown programatically. -->
      <xsd:attribute name="dismissed" type="xsd:string"/>
      <!-- Should be 'true', 'inline' or 'attachment' if the action taken by this widget is to
           download a file. -->
      <xsd:attribute name="download" type="Download"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- Reference ID of the widget.  This does not have to be globally unique; it only has
           to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <!-- Label to render. -->
      <xsd:attribute name="label" type="xsd:string"/>
      <!-- Default text answer to the prompt message -->
      <xsd:attribute name="promptDefault" type="xsd:string"/>
      <!-- Question to ask the user before performing the action. The answer is exposed to the
           action as "web.WebUtil.ActionEventParameter". -->
      <xsd:attribute name="promptQuestion" type="xsd:string"/>
      <!-- Keyboard shortcut character in the form of "Q" or "ShiftQ"; the "Alt" key is implicit -->
      <xsd:attribute name="shortcut" type="xsd:string"/>
      <!-- Gosu expression which determines whether or not the confirmation message should be
           shown -->
      <xsd:attribute name="showConfirmMessage" type="xsd:string" default="true"/>
      <!-- Boolean expression which, if false, completely hides the widget and all its children -->
      <xsd:attribute name="visible" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- An alternative version of the GroupCell.  This contains a two menu buttons next to
       the cell, one of which searches via the GroupSearchPopup and the other of which selects
       a group via the OrganizationGroupTreePopup. -->
  <xsd:element name="AltGroupCell">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="Reflect" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element ref="ColumnFooter" minOccurs="0" maxOccurs="1"/>
        <xsd:element ref="PostOnChange" minOccurs="0" maxOccurs="1"/>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="AddMenuItem"/>
          <xsd:element ref="AddMenuItemIterator"/>
          <xsd:element ref="MenuItem"/>
          <xsd:element ref="MenuItemDivider"/>
          <xsd:element ref="MenuItemIterator"/>
          <xsd:element ref="MenuItemSetRef"/>
          <xsd:element ref="MenuItemTree"/>
          <xsd:element ref="PickerMenuItem"/>
          <xsd:element ref="SearchItem"/>
        </xsd:choice>
      </xsd:sequence>
      <!-- An optional action to take when the user clicks the value of this widget when the
           value is not being edited. See ActionBase for details. When specified, the value of
           this widget will be rendered as a link when the value is not being edited. -->
      <xsd:attribute name="action" type="xsd:string"/>
      <!-- An optional boolean expression controlling whether the action should be available
           in this specific context when in read-only mode.  This is ignored if in edit mode
           or if the action is null.  This attribute will be deprecated in a future release,
           please use the 'available' attribute instead.  To disable action in readonly mode,
           you can set available=&quot;CurrentLocation.InEditMode || &lt;action-available-condition&gt;&quot; -->
      <xsd:attribute name="actionAvailable" type="xsd:string"/>
      <!-- Specifies the alignment of this cell. Valid values: "left", "right", or "center".
           If no value is specified, the default alignment is determined by the value type ("center"
           for boolean values; "right" for numeric values; "left" for other value types). -->
      <xsd:attribute name="align" type="WidgetAlignment"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- Boolean expression which, if false, grays out the widget and all its children -->
      <xsd:attribute name="available" type="xsd:string"/>
      <!-- If true, renders the cell contents in bold text. Defaults to false. -->
      <xsd:attribute name="bold" type="xsd:boolean" default="false"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- The HTML colspan attribute, lets this cell span across multiple columns of other rows.
           Useful for generating a "group header" row above a RowIterator. The default value
           is 1. A value greater than 1 is only allowed when the containing row is not iterated
           by a RowIterator. -->
      <xsd:attribute name="colspan" type="xsd:integer"/>
      <!-- The confirmation message to show when "showConfirmMessage" is set. If not specified,
           a standard message will be used. -->
      <xsd:attribute name="confirmMessage" type="xsd:string"/>
      <!-- A Gosu expression used to convert the value picked from a popup before set it into
           the model value of this widget. The picked value will be exposed as a symbol with
           the name "PickedValue" -->
      <xsd:attribute name="conversionExpression" type="xsd:string"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- Boolean expression which, if false, makes this widget and all its children read-only -->
      <xsd:attribute name="editable" type="xsd:string" default="false"/>
      <!-- If true, allows the user to sort the values in the column by clicking on the header.
            Only applicable when the containing row is iterated by a RowIterator. -->
      <xsd:attribute name="enableSort" type="xsd:boolean" default="true"/>
      <!-- If true, this cell will the last cell in the row to be navigated to via the ENTER
           key. Only applicable when "CellNavOnEnter" or "QuickAddOnEnter" is set. Normally not
           specified. Default to false. -->
      <xsd:attribute name="endOfCellNav" type="xsd:boolean" default="false"/>
      <!-- If true, instead of showing a hierarchical menu, the widget will show a single menu
           with sub-menus grouped under headers. -->
      <xsd:attribute name="flatten" type="xsd:boolean" default="false"/>
      <!-- An optional boolean expression, if returns true, this widget will get focus when start
           editing the containing location. -->
      <xsd:attribute name="focusOnStartEditing" type="xsd:string"/>
      <!-- An expression that returns a GWColor instance. Legacy: this method can instead return
           a string corresponding to a CSS Specification Level 3 color name. See GWColor for
           more details. -->
      <xsd:attribute name="fontColor" type="xsd:string"/>
      <!-- An optional expression. If specified, a footer cell with the specified value will
           be rendered for this column. Only applicable when the containing Row is iterated by
           a RowIterator. Not allowed when "footerSumValue" is specified. -->
      <xsd:attribute name="footerLabel" type="xsd:string"/>
      <!-- An optional expression, if specified, will be used as format pattern for the footer
           sum value. Normally not specified, so that the "format" and\or "formatType" of the
           cell value will be applied to footer sum value. Only applicable when "footerSumValue"
           is specified. The result of this expression must conform to the number format defined
           in java.text.DecimalFormat. -->
      <xsd:attribute name="footerSumFormat" type="xsd:string"/>
      <!-- An optional Numeric expression. If specified, a footer cell that sums the specified
           value for all cells in this column will be rendered. Pagination of the list does not
           affect the sum value. Only applicable when the containing row is iterated by a RowIterator.
           Not allowed when "footerLabel" is specified. -->
      <xsd:attribute name="footerSumValue" type="xsd:string"/>
      <!-- How the value is formatted; options include "general", "currency", and "email".  See
           the formatType enumeration. -->
      <xsd:attribute name="formatType" type="FormatType"/>
      <!-- If true, the ListView will be grouped by this cell upon entering the page. Only one
           grouped cell is allowed at any given time and it is only applicable when the column
           is sortable. -->
      <xsd:attribute name="groupedOnEnter" type="xsd:string"/>
      <!-- If true, this Cell and any other grow-enabled Cell will expand to fill remaining space
           in the ListViewPanel. Only applicable when the ListView is set to stretch. -->
      <xsd:attribute name="grow" type="xsd:boolean" default="false"/>
      <!-- If true, generates a checkbox at the beginning of this cell. This checkbox can be
           used to check this entry in the nearest containing Iterator. Defaults to false. Only
           allowed if this cell is inside a CellIterator or under a Row inside a RowIterator. -->
      <xsd:attribute name="hasCheckBox" type="xsd:boolean" default="false"/>
      <!-- CSS height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="height" type="xsd:string"/>
      <!-- A Gosu expression which, if defined, is evaluated to create help info that guides
           the user to edit this widget. The help info will show up if the user hovers the mouse
           over or focuses on the widget, when the widget is in edit mode. -->
      <xsd:attribute name="helpText" type="xsd:string"/>
      <!-- If false, menu items under this input will be shown even when the input is not editable. -->
      <xsd:attribute name="hideChildrenIfReadOnly" type="xsd:boolean" default="true"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- Refers to an image file. If defined, makes this an icon cell. The "value" attribute
           should be a boolean expression describing whether the icon is visible in a given row. -->
      <xsd:attribute name="icon" type="xsd:string"/>
      <!-- Color of the icon. If not set will default to its font color. -->
      <xsd:attribute name="iconColor" type="xsd:string"/>
      <!-- The ALT text for any icon generated in the content cells -->
      <xsd:attribute name="iconLabel" type="xsd:string"/>
      <!-- An enumeration of icon types that determine what the 'icon' property on the widget
           is referring to. -->
      <xsd:attribute name="iconType" type="IconTypeEnum"/>
      <!-- Reference ID of the widget.  This does not have to be globally unique; it only has
           to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <!-- A Gosu expression that converts the presentation value to a model value. The presentation
           value string is exposed to this expression as the symbol "VALUE". -->
      <xsd:attribute name="inputConversion" type="xsd:string"/>
      <!-- An optional expression. If specified, a header cell with the specified value will
           be rendered for this column. Only applicable when the containing row is iterated by
           a RowIterator. -->
      <xsd:attribute name="label" type="xsd:string"/>
      <!-- Custom extension CSS style class to apply to the header. -->
      <xsd:attribute name="labelStyleClass" type="xsd:string"/>
      <!-- CSS max-height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="maxHeight" type="xsd:string"/>
      <!-- CSS max-width value. Can be `px`, or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="maxWidth" type="xsd:string"/>
      <!-- CSS min-height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="minHeight" type="xsd:string"/>
      <!-- CSS min-width value. Can be `px`, or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="minWidth" type="xsd:string"/>
      <!-- The number of child MenuItems to show in each column.  If not specified, all children
           will be shown in a single column. -->
      <xsd:attribute name="numEntriesPerColumn" type="xsd:integer" default="0"/>
      <!-- Gosu expression to be executed after the value is set from a picker. -->
      <xsd:attribute name="onPick" type="xsd:string"/>
      <!-- A Gosu expression that converts the model value to a presentation value. The model
           value is exposed to this expression as the symbol "VALUE". The return type of this
           expression must be String. -->
      <xsd:attribute name="outputConversion" type="xsd:string"/>
      <!-- Relative width when printing to PDF. All widths are relative to the widths of the
           other columns in the ListView -->
      <xsd:attribute name="printWidth" type="xsd:string" default="1"/>
      <!-- A Gosu expression used to validate user value before setting it to the model. This
           expression can access any symbols available to this widget, and a "VALUE" symbol that
           represents the user value. If this expression returns null, the user value will be
           set into the model. Otherwise, an error message containing the result of the expression
           will be displayed on the page, the value will not be set into the model, and no actions
           can be performed until the error is corrected. -->
      <xsd:attribute name="requestValidationExpression" type="xsd:string"/>
      <!-- If true, then the cell must be filled out by the user -->
      <xsd:attribute name="required" type="xsd:string"/>
      <!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * Deprecated.
           DO NOT USE.                                           * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
           Consider using "onChange/onPick/inputConversion/outputConversion" where available.
           If specified and the Input is editable, then any new value of the Input is written
           to this expression (Gosu by default) instead of to "value".  The new value is exposed
           as the symbol "VALUE".  For instance if your value expression is "Foo.getSomething()"
           then it can't be written to since it's not an L-value; so you could specify a setter
           expression along the lines of "Foo.setSomething(VALUE)" Warning: if you use this attribute
           many pebbles features will not work, including but not limited to: * Correct automatic
           detection of the state of the updated data * Correct automatic detection of the editability
           of the data * Correct automatic detection of the maximum size of a text input -->
      <xsd:attribute name="setter" type="xsd:string"/>
      <!-- Boolean expression which determines whether or not to show a confirmation message
           when the field value is changed directly from the UI. It's NOT applicable when the
           value is changed indirectly, for example, as a result of client reflection. -->
      <xsd:attribute name="showConfirmMessage" type="xsd:string"/>
      <!-- If true, shows the icon defined by "icon" in the header cell for this column. The
           default value is true. -->
      <xsd:attribute name="showHeaderIcon" type="xsd:boolean" default="true"/>
      <!-- An optional comma-separated sequence of Expressions, each of which is assumed to be
           a dot-delimited path, the value by which this column will be sorted if the user clicks
           on the header cell. -->
      <xsd:attribute name="sortBy" type="xsd:string"/>
      <!-- Either "ascending" or "descending" -->
      <xsd:attribute name="sortDirection" type="WidgetSortDirection" default="ascending"/>
      <!-- The priority of sorting relative to other sorting elements like IteratorSort and Cell.
           The lower the number, the higher the priority.  The highest priority is "1" -->
      <xsd:attribute name="sortOrder" type="xsd:integer" default="0"/>
      <!-- CSS style class for the cell content; for instance, "miniButton" makes a link appear
           as a small button -->
      <xsd:attribute name="styleClass" type="LinkStyleClass"/>
      <!-- An optional attribute, if set, defer sub menu generation until user tries to open
           the menu. DO NOT set this flag unless the sub menu of this widget is very expensive
           to generate. Setting this flag will reduce time to load the page, however require
           fetching additional info from server in the background, when the menu gets opened
           for the first time after page loaded. -->
      <xsd:attribute name="subMenuOnDemand" type="xsd:boolean" default="false"/>
      <!-- Extra "alt" text to show when the user hovers the mouse over the header cell of this
           column. -->
      <xsd:attribute name="tooltip" type="xsd:string"/>
      <!-- If true, validate before commit that the value of this column is unique across all
           rows in the current page. Only meaningful when this column is editable. -->
      <xsd:attribute name="unique" type="xsd:boolean" default="false"/>
      <!-- A Gosu expression to run before committing the record. This expression can refer to
           any symbols available to this widget. If this expression returns null, the validation
           is considered successful; otherwise, the result of this expression will be displayed
           as an error and the record will not be committed. -->
      <xsd:attribute name="validationExpression" type="xsd:string"/>
      <!-- The label of this cell to be used when it has validation issues. Not needed when this
           cell has a "label". Required if the cell is editable but does not have a "label". -->
      <xsd:attribute name="validationLabel" type="xsd:string"/>
      <!-- The value this element binds to.  If the element is editable then this value is both
           read from and written to (unless "setter" is defined). -->
      <xsd:attribute name="value" type="xsd:string"/>
      <!-- The type of the value expression. -->
      <xsd:attribute name="valueType" type="xsd:string" default="entity.Group"/>
      <!-- Boolean expression which, if false, hides the <i>contents</i> of the cell (its "ValueWidget"),
           but not the cell itself.  Needed since hiding the actual cell usually screws up the
           layout -->
      <xsd:attribute name="valueVisible" type="xsd:string"/>
      <!-- Specifies the vertical alignment of this cell. Valid values: "top", "middle", or "bottom".
           If no value is specified, the default alignment is determined by the cell type ("top"
           for Text Areas and Format Cells, "middle" for buttons and icons). -->
      <xsd:attribute name="verticalAlign" type="WidgetVerticalAlignment"/>
      <!-- Boolean expression which, if false, completely hides the widget and all its children -->
      <xsd:attribute name="visible" type="xsd:string"/>
      <!-- CSS width value. Can be `px`, or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="width" type="xsd:string"/>
      <!-- If default, defers to FormatType to decide whether to wrap or not.  If true, allows
           cell content to wrap. -->
      <xsd:attribute name="wrap" type="WrapType" default="default"/>
      <!-- If true, allows Header Cell text content to wrap. Defaults to true. -->
      <xsd:attribute name="wrapLabel" type="xsd:boolean" default="false"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- An alternative version of the GroupInput.  This contains a two menu buttons next to
       the input, one of which searches via the GroupSearchPopup and the other of which selects
       a group via the OrganizationGroupTreePopup. -->
  <xsd:element name="AltGroupInput">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="LayoutConfig" minOccurs="0" maxOccurs="1"/>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="AddMenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="AddMenuItemIterator" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemDivider" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemIterator" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemSetRef" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemTree" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PickerMenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PostOnChange" minOccurs="0" maxOccurs="1"/>
          <xsd:element ref="Reflect" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="SearchItem" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:choice>
      </xsd:sequence>
      <!-- An optional action to take when the user clicks the value of this widget when the
           value is not being edited. See ActionBase for list of available action prefixes. When
           specified, the value of this widget will be rendered as a link when the value is not
           being edited. -->
      <xsd:attribute name="action" type="xsd:string"/>
      <!-- An optional boolean expression controlling whether the action should be available
           in this specific context when in read-only mode.  This is ignored if in edit mode
           or if the action is null.  This attribute will be deprecated in a future release,
           please use the 'available' attribute instead.  To disable action in readonly mode,
           you can set available=&quot;CurrentLocation.InEditMode || &lt;action-available-condition&gt;&quot; -->
      <xsd:attribute name="actionAvailable" type="xsd:string"/>
      <!-- Alignment of the widget ("left", "right", or "center") -->
      <xsd:attribute name="align" type="WidgetAlignment"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- Boolean expression which, if false, grays out the widget and all its children -->
      <xsd:attribute name="available" type="xsd:string"/>
      <!-- If true then the label is displayed in bold text. -->
      <xsd:attribute name="boldLabel" type="xsd:boolean" default="false"/>
      <!-- If true then the value is displayed in bold text when read-only. -->
      <xsd:attribute name="boldValue" type="xsd:boolean" default="false"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- The confirmation message to show when "showConfirmMessage" is set. If not specified,
           a standard message will be used. -->
      <xsd:attribute name="confirmMessage" type="xsd:string"/>
      <!-- A Gosu expression used to convert the value picked from a popup before set it into
           the model value of this widget. The picked value will be exposed as a symbol with
           the name "PickedValue" -->
      <xsd:attribute name="conversionExpression" type="xsd:string"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- Boolean expression which, if false, makes this widget and all its children read-only -->
      <xsd:attribute name="editable" type="xsd:string" default="false"/>
      <!-- If true, instead of showing a hierarchical menu, the widget will show a single menu
           with sub-menus grouped under headers. -->
      <xsd:attribute name="flatten" type="xsd:boolean" default="false"/>
      <!-- An optional boolean expression, if returns true, this widget will get focus when start
           editing the containing location. -->
      <xsd:attribute name="focusOnStartEditing" type="xsd:string"/>
      <!-- How the value is formatted; options include "general", "currency", and "email".  See
           the formatType enumeration. -->
      <xsd:attribute name="formatType" type="FormatType"/>
      <!-- A Gosu expression which, if defined, is evaluated to create help info that guides
           the user to edit this widget. The help info will show up if the user hovers the mouse
           over or focuses on the widget, when the widget is in edit mode. -->
      <xsd:attribute name="helpText" type="xsd:string"/>
      <!-- If false, menu items under this input will be shown even when the input is not editable. -->
      <xsd:attribute name="hideChildrenIfReadOnly" type="xsd:boolean" default="true"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- Reference ID of the widget.  This does not have to be globally unique; it only has
           to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <!-- A Gosu expression that converts the presentation value to a model value. The presentation
           value string is exposed to this expression as the symbol "VALUE". -->
      <xsd:attribute name="inputConversion" type="xsd:string"/>
      <!-- Label to render. -->
      <xsd:attribute name="label" type="xsd:string"/>
      <!-- Boolean expression which, if true, causes the label portion of the Input to be rendered
           above the value -->
      <xsd:attribute name="labelAbove" type="xsd:string" default="false"/>
      <!-- Custom extension CSS style class to apply to the label. -->
      <xsd:attribute name="labelStyleClass" type="xsd:string"/>
      <!-- The number of child MenuItems to show in each column.  If not specified, all children
           will be shown in a single column. -->
      <xsd:attribute name="numEntriesPerColumn" type="xsd:integer" default="0"/>
      <!-- Gosu expression to be executed after the value is set from a picker. -->
      <xsd:attribute name="onPick" type="xsd:string"/>
      <!-- A Gosu expression that converts the model value to a presentation value. The model
           value is exposed to this expression as the symbol "VALUE". The return type of this
           expression must be String. -->
      <xsd:attribute name="outputConversion" type="xsd:string"/>
      <!-- A Gosu expression used to validate user value before setting it to the model. This
           expression can access any symbols available to this widget, and a "VALUE" symbol that
           represents the user value. If this expression returns null, the user value will be
           set into the model. Otherwise, an error message containing the result of the expression
           will be displayed on the page, the value will not be set into the model, and no actions
           can be performed until the error is corrected. -->
      <xsd:attribute name="requestValidationExpression" type="xsd:string"/>
      <!-- If true, then the cell must be filled out by the user -->
      <xsd:attribute name="required" type="xsd:string"/>
      <!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * Deprecated.
           DO NOT USE.                                           * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
           Consider using "onChange/onPick/inputConversion/outputConversion" where available.
           If specified and the Input is editable, then any new value of the Input is written
           to this expression (Gosu by default) instead of to "value".  The new value is exposed
           as the symbol "VALUE".  For instance if your value expression is "Foo.getSomething()"
           then it can't be written to since it's not an L-value; so you could specify a setter
           expression along the lines of "Foo.setSomething(VALUE)" Warning: if you use this attribute
           many pebbles features will not work, including but not limited to: * Correct automatic
           detection of the state of the updated data * Correct automatic detection of the editability
           of the data * Correct automatic detection of the maximum size of a text input -->
      <xsd:attribute name="setter" type="xsd:string"/>
      <!-- Optional keyboard shortcut character in the form of "Q" or "ShiftQ"; the "Alt" key
           is implicit. This is only applicable when this widget has an "action" specified and
           the value is not being edited. -->
      <xsd:attribute name="shortcut" type="xsd:string"/>
      <!-- Boolean expression which determines whether or not to show a confirmation message
           when the field value is changed directly from the UI. It's NOT applicable when the
           value is changed indirectly, for example, as a result of client reflection. -->
      <xsd:attribute name="showConfirmMessage" type="xsd:string"/>
      <!-- An optional attribute, if set, defer sub menu generation until user tries to open
           the menu. DO NOT set this flag unless the sub menu of this widget is very expensive
           to generate. Setting this flag will reduce time to load the page, however require
           fetching additional info from server in the background, when the menu gets opened
           for the first time after page loaded. -->
      <xsd:attribute name="subMenuOnDemand" type="xsd:boolean" default="false"/>
      <!-- A Gosu expression to run before committing the record. This expression can refer to
           any symbols available to this widget. If this expression returns null, the validation
           is considered successful; otherwise, the result of this expression will be displayed
           as an error and the record will not be committed. -->
      <xsd:attribute name="validationExpression" type="xsd:string"/>
      <!-- The value this Input binds to as an Expression.  If the Input is editable then this
           value is both read from and written to (unless "setter" is defined). -->
      <xsd:attribute name="value" type="xsd:string" use="required"/>
      <!-- CSS max-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionMaxWidth" type="xsd:string"/>
      <!-- CSS min-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionMinWidth" type="xsd:string"/>
      <!-- CSS width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionWidth" type="xsd:string"/>
      <!-- The type of the value expression. -->
      <xsd:attribute name="valueType" type="xsd:string" default="entity.Group"/>
      <!-- If used instead of "editable", specifies whether the Input is editable when data is
           being created -->
      <xsd:attribute name="visible" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- An alternative version of the UserCell.  This contains a single menu button next to
       the user cell that navigates to the UserSearchPopup. -->
  <xsd:element name="AltUserCell">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="Reflect" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element ref="ColumnFooter" minOccurs="0" maxOccurs="1"/>
        <xsd:element ref="PostOnChange" minOccurs="0" maxOccurs="1"/>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="AddMenuItem"/>
          <xsd:element ref="AddMenuItemIterator"/>
          <xsd:element ref="MenuItem"/>
          <xsd:element ref="MenuItemDivider"/>
          <xsd:element ref="MenuItemIterator"/>
          <xsd:element ref="MenuItemSetRef"/>
          <xsd:element ref="MenuItemTree"/>
          <xsd:element ref="PickerMenuItem"/>
          <xsd:element ref="SearchItem"/>
        </xsd:choice>
      </xsd:sequence>
      <!-- An optional action to take when the user clicks the value of this widget when the
           value is not being edited. See ActionBase for details. When specified, the value of
           this widget will be rendered as a link when the value is not being edited. -->
      <xsd:attribute name="action" type="xsd:string"/>
      <!-- An optional boolean expression controlling whether the action should be available
           in this specific context when in read-only mode.  This is ignored if in edit mode
           or if the action is null.  This attribute will be deprecated in a future release,
           please use the 'available' attribute instead.  To disable action in readonly mode,
           you can set available=&quot;CurrentLocation.InEditMode || &lt;action-available-condition&gt;&quot; -->
      <xsd:attribute name="actionAvailable" type="xsd:string"/>
      <!-- Specifies the alignment of this cell. Valid values: "left", "right", or "center".
           If no value is specified, the default alignment is determined by the value type ("center"
           for boolean values; "right" for numeric values; "left" for other value types). -->
      <xsd:attribute name="align" type="WidgetAlignment"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- Boolean expression which, if false, grays out the widget and all its children -->
      <xsd:attribute name="available" type="xsd:string"/>
      <!-- If true, renders the cell contents in bold text. Defaults to false. -->
      <xsd:attribute name="bold" type="xsd:boolean" default="false"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- The HTML colspan attribute, lets this cell span across multiple columns of other rows.
           Useful for generating a "group header" row above a RowIterator. The default value
           is 1. A value greater than 1 is only allowed when the containing row is not iterated
           by a RowIterator. -->
      <xsd:attribute name="colspan" type="xsd:integer"/>
      <!-- The confirmation message to show when "showConfirmMessage" is set. If not specified,
           a standard message will be used. -->
      <xsd:attribute name="confirmMessage" type="xsd:string"/>
      <!-- A Gosu expression used to convert the value picked from a popup before set it into
           the model value of this widget. The picked value will be exposed as a symbol with
           the name "PickedValue" -->
      <xsd:attribute name="conversionExpression" type="xsd:string"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- Boolean expression which, if false, makes this widget and all its children read-only -->
      <xsd:attribute name="editable" type="xsd:string" default="false"/>
      <!-- If true, allows the user to sort the values in the column by clicking on the header.
            Only applicable when the containing row is iterated by a RowIterator. -->
      <xsd:attribute name="enableSort" type="xsd:boolean" default="true"/>
      <!-- If true, this cell will the last cell in the row to be navigated to via the ENTER
           key. Only applicable when "CellNavOnEnter" or "QuickAddOnEnter" is set. Normally not
           specified. Default to false. -->
      <xsd:attribute name="endOfCellNav" type="xsd:boolean" default="false"/>
      <!-- If true, instead of showing a hierarchical menu, the widget will show a single menu
           with sub-menus grouped under headers. -->
      <xsd:attribute name="flatten" type="xsd:boolean" default="false"/>
      <!-- An optional boolean expression, if returns true, this widget will get focus when start
           editing the containing location. -->
      <xsd:attribute name="focusOnStartEditing" type="xsd:string"/>
      <!-- An expression that returns a GWColor instance. Legacy: this method can instead return
           a string corresponding to a CSS Specification Level 3 color name. See GWColor for
           more details. -->
      <xsd:attribute name="fontColor" type="xsd:string"/>
      <!-- An optional expression. If specified, a footer cell with the specified value will
           be rendered for this column. Only applicable when the containing Row is iterated by
           a RowIterator. Not allowed when "footerSumValue" is specified. -->
      <xsd:attribute name="footerLabel" type="xsd:string"/>
      <!-- An optional expression, if specified, will be used as format pattern for the footer
           sum value. Normally not specified, so that the "format" and\or "formatType" of the
           cell value will be applied to footer sum value. Only applicable when "footerSumValue"
           is specified. The result of this expression must conform to the number format defined
           in java.text.DecimalFormat. -->
      <xsd:attribute name="footerSumFormat" type="xsd:string"/>
      <!-- An optional Numeric expression. If specified, a footer cell that sums the specified
           value for all cells in this column will be rendered. Pagination of the list does not
           affect the sum value. Only applicable when the containing row is iterated by a RowIterator.
           Not allowed when "footerLabel" is specified. -->
      <xsd:attribute name="footerSumValue" type="xsd:string"/>
      <!-- How the value is formatted; options include "general", "currency", and "email".  See
           the formatType enumeration. -->
      <xsd:attribute name="formatType" type="FormatType"/>
      <!-- If true, the ListView will be grouped by this cell upon entering the page. Only one
           grouped cell is allowed at any given time and it is only applicable when the column
           is sortable. -->
      <xsd:attribute name="groupedOnEnter" type="xsd:string"/>
      <!-- If true, this Cell and any other grow-enabled Cell will expand to fill remaining space
           in the ListViewPanel. Only applicable when the ListView is set to stretch. -->
      <xsd:attribute name="grow" type="xsd:boolean" default="false"/>
      <!-- If true, generates a checkbox at the beginning of this cell. This checkbox can be
           used to check this entry in the nearest containing Iterator. Defaults to false. Only
           allowed if this cell is inside a CellIterator or under a Row inside a RowIterator. -->
      <xsd:attribute name="hasCheckBox" type="xsd:boolean" default="false"/>
      <!-- CSS height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="height" type="xsd:string"/>
      <!-- A Gosu expression which, if defined, is evaluated to create help info that guides
           the user to edit this widget. The help info will show up if the user hovers the mouse
           over or focuses on the widget, when the widget is in edit mode. -->
      <xsd:attribute name="helpText" type="xsd:string"/>
      <!-- If false, menu items under this input will be shown even when the input is not editable. -->
      <xsd:attribute name="hideChildrenIfReadOnly" type="xsd:boolean" default="true"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- Refers to an image file. If defined, makes this an icon cell. The "value" attribute
           should be a boolean expression describing whether the icon is visible in a given row. -->
      <xsd:attribute name="icon" type="xsd:string"/>
      <!-- Color of the icon. If not set will default to its font color. -->
      <xsd:attribute name="iconColor" type="xsd:string"/>
      <!-- The ALT text for any icon generated in the content cells -->
      <xsd:attribute name="iconLabel" type="xsd:string"/>
      <!-- An enumeration of icon types that determine what the 'icon' property on the widget
           is referring to. -->
      <xsd:attribute name="iconType" type="IconTypeEnum"/>
      <!-- Reference ID of the widget.  This does not have to be globally unique; it only has
           to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <!-- A Gosu expression that converts the presentation value to a model value. The presentation
           value string is exposed to this expression as the symbol "VALUE". -->
      <xsd:attribute name="inputConversion" type="xsd:string"/>
      <!-- An optional expression. If specified, a header cell with the specified value will
           be rendered for this column. Only applicable when the containing row is iterated by
           a RowIterator. -->
      <xsd:attribute name="label" type="xsd:string"/>
      <!-- Custom extension CSS style class to apply to the header. -->
      <xsd:attribute name="labelStyleClass" type="xsd:string"/>
      <!-- CSS max-height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="maxHeight" type="xsd:string"/>
      <!-- CSS max-width value. Can be `px`, or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="maxWidth" type="xsd:string"/>
      <!-- CSS min-height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="minHeight" type="xsd:string"/>
      <!-- CSS min-width value. Can be `px`, or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="minWidth" type="xsd:string"/>
      <!-- The number of child MenuItems to show in each column.  If not specified, all children
           will be shown in a single column. -->
      <xsd:attribute name="numEntriesPerColumn" type="xsd:integer" default="0"/>
      <!-- Gosu expression to be executed after the value is set from a picker. -->
      <xsd:attribute name="onPick" type="xsd:string"/>
      <!-- A Gosu expression that converts the model value to a presentation value. The model
           value is exposed to this expression as the symbol "VALUE". The return type of this
           expression must be String. -->
      <xsd:attribute name="outputConversion" type="xsd:string"/>
      <!-- Relative width when printing to PDF. All widths are relative to the widths of the
           other columns in the ListView -->
      <xsd:attribute name="printWidth" type="xsd:string" default="1"/>
      <!-- A Gosu expression used to validate user value before setting it to the model. This
           expression can access any symbols available to this widget, and a "VALUE" symbol that
           represents the user value. If this expression returns null, the user value will be
           set into the model. Otherwise, an error message containing the result of the expression
           will be displayed on the page, the value will not be set into the model, and no actions
           can be performed until the error is corrected. -->
      <xsd:attribute name="requestValidationExpression" type="xsd:string"/>
      <!-- If true, then the cell must be filled out by the user -->
      <xsd:attribute name="required" type="xsd:string"/>
      <!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * Deprecated.
           DO NOT USE.                                           * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
           Consider using "onChange/onPick/inputConversion/outputConversion" where available.
           If specified and the Input is editable, then any new value of the Input is written
           to this expression (Gosu by default) instead of to "value".  The new value is exposed
           as the symbol "VALUE".  For instance if your value expression is "Foo.getSomething()"
           then it can't be written to since it's not an L-value; so you could specify a setter
           expression along the lines of "Foo.setSomething(VALUE)" Warning: if you use this attribute
           many pebbles features will not work, including but not limited to: * Correct automatic
           detection of the state of the updated data * Correct automatic detection of the editability
           of the data * Correct automatic detection of the maximum size of a text input -->
      <xsd:attribute name="setter" type="xsd:string"/>
      <!-- Boolean expression which determines whether or not to show a confirmation message
           when the field value is changed directly from the UI. It's NOT applicable when the
           value is changed indirectly, for example, as a result of client reflection. -->
      <xsd:attribute name="showConfirmMessage" type="xsd:string"/>
      <!-- If true, shows the icon defined by "icon" in the header cell for this column. The
           default value is true. -->
      <xsd:attribute name="showHeaderIcon" type="xsd:boolean" default="true"/>
      <!-- An optional comma-separated sequence of Expressions, each of which is assumed to be
           a dot-delimited path, the value by which this column will be sorted if the user clicks
           on the header cell. -->
      <xsd:attribute name="sortBy" type="xsd:string"/>
      <!-- Either "ascending" or "descending" -->
      <xsd:attribute name="sortDirection" type="WidgetSortDirection" default="ascending"/>
      <!-- The priority of sorting relative to other sorting elements like IteratorSort and Cell.
           The lower the number, the higher the priority.  The highest priority is "1" -->
      <xsd:attribute name="sortOrder" type="xsd:integer" default="0"/>
      <!-- CSS style class for the cell content; for instance, "miniButton" makes a link appear
           as a small button -->
      <xsd:attribute name="styleClass" type="LinkStyleClass"/>
      <!-- An optional attribute, if set, defer sub menu generation until user tries to open
           the menu. DO NOT set this flag unless the sub menu of this widget is very expensive
           to generate. Setting this flag will reduce time to load the page, however require
           fetching additional info from server in the background, when the menu gets opened
           for the first time after page loaded. -->
      <xsd:attribute name="subMenuOnDemand" type="xsd:boolean" default="false"/>
      <!-- Extra "alt" text to show when the user hovers the mouse over the header cell of this
           column. -->
      <xsd:attribute name="tooltip" type="xsd:string"/>
      <!-- If true, validate before commit that the value of this column is unique across all
           rows in the current page. Only meaningful when this column is editable. -->
      <xsd:attribute name="unique" type="xsd:boolean" default="false"/>
      <!-- A Gosu expression to run before committing the record. This expression can refer to
           any symbols available to this widget. If this expression returns null, the validation
           is considered successful; otherwise, the result of this expression will be displayed
           as an error and the record will not be committed. -->
      <xsd:attribute name="validationExpression" type="xsd:string"/>
      <!-- The label of this cell to be used when it has validation issues. Not needed when this
           cell has a "label". Required if the cell is editable but does not have a "label". -->
      <xsd:attribute name="validationLabel" type="xsd:string"/>
      <!-- The value this element binds to.  If the element is editable then this value is both
           read from and written to (unless "setter" is defined). -->
      <xsd:attribute name="value" type="xsd:string"/>
      <!-- The type of the value expression. -->
      <xsd:attribute name="valueType" type="xsd:string" default="entity.User"/>
      <!-- Boolean expression which, if false, hides the <i>contents</i> of the cell (its "ValueWidget"),
           but not the cell itself.  Needed since hiding the actual cell usually screws up the
           layout -->
      <xsd:attribute name="valueVisible" type="xsd:string"/>
      <!-- Specifies the vertical alignment of this cell. Valid values: "top", "middle", or "bottom".
           If no value is specified, the default alignment is determined by the cell type ("top"
           for Text Areas and Format Cells, "middle" for buttons and icons). -->
      <xsd:attribute name="verticalAlign" type="WidgetVerticalAlignment"/>
      <!-- Boolean expression which, if false, completely hides the widget and all its children -->
      <xsd:attribute name="visible" type="xsd:string"/>
      <!-- CSS width value. Can be `px`, or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="width" type="xsd:string"/>
      <!-- If default, defers to FormatType to decide whether to wrap or not.  If true, allows
           cell content to wrap. -->
      <xsd:attribute name="wrap" type="WrapType" default="default"/>
      <!-- If true, allows Header Cell text content to wrap. Defaults to true. -->
      <xsd:attribute name="wrapLabel" type="xsd:boolean" default="false"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- An alternative version of the UserInput.  This contains a single menu button next
       to the user input that navigates to the UserSearchPopup. -->
  <xsd:element name="AltUserInput">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="LayoutConfig" minOccurs="0" maxOccurs="1"/>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="AddMenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="AddMenuItemIterator" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemDivider" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemIterator" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemSetRef" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemTree" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PickerMenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PostOnChange" minOccurs="0" maxOccurs="1"/>
          <xsd:element ref="Reflect" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="SearchItem" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:choice>
      </xsd:sequence>
      <!-- An optional action to take when the user clicks the value of this widget when the
           value is not being edited. See ActionBase for list of available action prefixes. When
           specified, the value of this widget will be rendered as a link when the value is not
           being edited. -->
      <xsd:attribute name="action" type="xsd:string"/>
      <!-- An optional boolean expression controlling whether the action should be available
           in this specific context when in read-only mode.  This is ignored if in edit mode
           or if the action is null.  This attribute will be deprecated in a future release,
           please use the 'available' attribute instead.  To disable action in readonly mode,
           you can set available=&quot;CurrentLocation.InEditMode || &lt;action-available-condition&gt;&quot; -->
      <xsd:attribute name="actionAvailable" type="xsd:string"/>
      <!-- Alignment of the widget ("left", "right", or "center") -->
      <xsd:attribute name="align" type="WidgetAlignment"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- Boolean expression which, if false, grays out the widget and all its children -->
      <xsd:attribute name="available" type="xsd:string"/>
      <!-- If true then the label is displayed in bold text. -->
      <xsd:attribute name="boldLabel" type="xsd:boolean" default="false"/>
      <!-- If true then the value is displayed in bold text when read-only. -->
      <xsd:attribute name="boldValue" type="xsd:boolean" default="false"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- The confirmation message to show when "showConfirmMessage" is set. If not specified,
           a standard message will be used. -->
      <xsd:attribute name="confirmMessage" type="xsd:string"/>
      <!-- A Gosu expression used to convert the value picked from a popup before set it into
           the model value of this widget. The picked value will be exposed as a symbol with
           the name "PickedValue" -->
      <xsd:attribute name="conversionExpression" type="xsd:string"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- Boolean expression which, if false, makes this widget and all its children read-only -->
      <xsd:attribute name="editable" type="xsd:string" default="false"/>
      <!-- If true, instead of showing a hierarchical menu, the widget will show a single menu
           with sub-menus grouped under headers. -->
      <xsd:attribute name="flatten" type="xsd:boolean" default="false"/>
      <!-- An optional boolean expression, if returns true, this widget will get focus when start
           editing the containing location. -->
      <xsd:attribute name="focusOnStartEditing" type="xsd:string"/>
      <!-- How the value is formatted; options include "general", "currency", and "email".  See
           the formatType enumeration. -->
      <xsd:attribute name="formatType" type="FormatType"/>
      <!-- A Gosu expression which, if defined, is evaluated to create help info that guides
           the user to edit this widget. The help info will show up if the user hovers the mouse
           over or focuses on the widget, when the widget is in edit mode. -->
      <xsd:attribute name="helpText" type="xsd:string"/>
      <!-- If false, menu items under this input will be shown even when the input is not editable. -->
      <xsd:attribute name="hideChildrenIfReadOnly" type="xsd:boolean" default="true"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- Reference ID of the widget.  This does not have to be globally unique; it only has
           to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <!-- A Gosu expression that converts the presentation value to a model value. The presentation
           value string is exposed to this expression as the symbol "VALUE". -->
      <xsd:attribute name="inputConversion" type="xsd:string"/>
      <!-- Label to render. -->
      <xsd:attribute name="label" type="xsd:string"/>
      <!-- Boolean expression which, if true, causes the label portion of the Input to be rendered
           above the value -->
      <xsd:attribute name="labelAbove" type="xsd:string" default="false"/>
      <!-- Custom extension CSS style class to apply to the label. -->
      <xsd:attribute name="labelStyleClass" type="xsd:string"/>
      <!-- The number of child MenuItems to show in each column.  If not specified, all children
           will be shown in a single column. -->
      <xsd:attribute name="numEntriesPerColumn" type="xsd:integer" default="0"/>
      <!-- Gosu expression to be executed after the value is set from a picker. -->
      <xsd:attribute name="onPick" type="xsd:string"/>
      <!-- A Gosu expression that converts the model value to a presentation value. The model
           value is exposed to this expression as the symbol "VALUE". The return type of this
           expression must be String. -->
      <xsd:attribute name="outputConversion" type="xsd:string"/>
      <!-- A Gosu expression used to validate user value before setting it to the model. This
           expression can access any symbols available to this widget, and a "VALUE" symbol that
           represents the user value. If this expression returns null, the user value will be
           set into the model. Otherwise, an error message containing the result of the expression
           will be displayed on the page, the value will not be set into the model, and no actions
           can be performed until the error is corrected. -->
      <xsd:attribute name="requestValidationExpression" type="xsd:string"/>
      <!-- If true, then the cell must be filled out by the user -->
      <xsd:attribute name="required" type="xsd:string"/>
      <!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * Deprecated.
           DO NOT USE.                                           * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
           Consider using "onChange/onPick/inputConversion/outputConversion" where available.
           If specified and the Input is editable, then any new value of the Input is written
           to this expression (Gosu by default) instead of to "value".  The new value is exposed
           as the symbol "VALUE".  For instance if your value expression is "Foo.getSomething()"
           then it can't be written to since it's not an L-value; so you could specify a setter
           expression along the lines of "Foo.setSomething(VALUE)" Warning: if you use this attribute
           many pebbles features will not work, including but not limited to: * Correct automatic
           detection of the state of the updated data * Correct automatic detection of the editability
           of the data * Correct automatic detection of the maximum size of a text input -->
      <xsd:attribute name="setter" type="xsd:string"/>
      <!-- Optional keyboard shortcut character in the form of "Q" or "ShiftQ"; the "Alt" key
           is implicit. This is only applicable when this widget has an "action" specified and
           the value is not being edited. -->
      <xsd:attribute name="shortcut" type="xsd:string"/>
      <!-- Boolean expression which determines whether or not to show a confirmation message
           when the field value is changed directly from the UI. It's NOT applicable when the
           value is changed indirectly, for example, as a result of client reflection. -->
      <xsd:attribute name="showConfirmMessage" type="xsd:string"/>
      <!-- An optional attribute, if set, defer sub menu generation until user tries to open
           the menu. DO NOT set this flag unless the sub menu of this widget is very expensive
           to generate. Setting this flag will reduce time to load the page, however require
           fetching additional info from server in the background, when the menu gets opened
           for the first time after page loaded. -->
      <xsd:attribute name="subMenuOnDemand" type="xsd:boolean" default="false"/>
      <!-- A Gosu expression to run before committing the record. This expression can refer to
           any symbols available to this widget. If this expression returns null, the validation
           is considered successful; otherwise, the result of this expression will be displayed
           as an error and the record will not be committed. -->
      <xsd:attribute name="validationExpression" type="xsd:string"/>
      <!-- The value this Input binds to as an Expression.  If the Input is editable then this
           value is both read from and written to (unless "setter" is defined). -->
      <xsd:attribute name="value" type="xsd:string" use="required"/>
      <!-- CSS max-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionMaxWidth" type="xsd:string"/>
      <!-- CSS min-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionMinWidth" type="xsd:string"/>
      <!-- CSS width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionWidth" type="xsd:string"/>
      <!-- The type of the value expression. -->
      <xsd:attribute name="valueType" type="xsd:string" default="entity.User"/>
      <!-- If used instead of "editable", specifies whether the Input is editable when data is
           being created -->
      <xsd:attribute name="visible" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- A ListView cell specialized for an Assignee -->
  <xsd:element name="AssigneeCell">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="Reflect" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element ref="ColumnFooter" minOccurs="0" maxOccurs="1"/>
        <xsd:element ref="PostOnChange" minOccurs="0" maxOccurs="1"/>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="AddMenuItem"/>
          <xsd:element ref="AddMenuItemIterator"/>
          <xsd:element ref="MenuItem"/>
          <xsd:element ref="MenuItemDivider"/>
          <xsd:element ref="MenuItemIterator"/>
          <xsd:element ref="MenuItemSetRef"/>
          <xsd:element ref="MenuItemTree"/>
          <xsd:element ref="PickerMenuItem"/>
          <xsd:element ref="SearchItem"/>
        </xsd:choice>
      </xsd:sequence>
      <xsd:attribute name="action" type="xsd:string"/>
      <!-- An optional boolean expression controlling whether the action should be available
           in this specific context when in read-only mode.  This is ignored if in edit mode
           or if the action is null.  This attribute will be deprecated in a future release,
           please use the 'available' attribute instead.  To disable action in readonly mode,
           you can set available=&quot;CurrentLocation.InEditMode || &lt;action-available-condition&gt;&quot; -->
      <xsd:attribute name="actionAvailable" type="xsd:string"/>
      <!-- Specifies the alignment of this cell. Valid values: "left", "right", or "center".
           If no value is specified, the default alignment is determined by the value type ("center"
           for boolean values; "right" for numeric values; "left" for other value types). -->
      <xsd:attribute name="align" type="WidgetAlignment"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <xsd:attribute name="assignable" type="xsd:string" use="required"/>
      <!-- Boolean expression which, if false, grays out the widget and all its children -->
      <xsd:attribute name="available" type="xsd:string"/>
      <!-- If true, renders the cell contents in bold text. Defaults to false. -->
      <xsd:attribute name="bold" type="xsd:boolean" default="false"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- The HTML colspan attribute, lets this cell span across multiple columns of other rows.
           Useful for generating a "group header" row above a RowIterator. The default value
           is 1. A value greater than 1 is only allowed when the containing row is not iterated
           by a RowIterator. -->
      <xsd:attribute name="colspan" type="xsd:integer"/>
      <xsd:attribute name="confirmMessage" type="xsd:string"/>
      <!-- A Gosu expression used to convert the value picked from a popup before set it into
           the model value of this widget. The picked value will be exposed as a symbol with
           the name "PickedValue" -->
      <xsd:attribute name="conversionExpression" type="xsd:string"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- Boolean expression which, if false, makes this widget and all its children read-only -->
      <xsd:attribute name="editable" type="xsd:string" default="false"/>
      <!-- If true, allows the user to sort the values in the column by clicking on the header.
            Only applicable when the containing row is iterated by a RowIterator. -->
      <xsd:attribute name="enableSort" type="xsd:boolean" default="true"/>
      <!-- If true, this cell will the last cell in the row to be navigated to via the ENTER
           key. Only applicable when "CellNavOnEnter" or "QuickAddOnEnter" is set. Normally not
           specified. Default to false. -->
      <xsd:attribute name="endOfCellNav" type="xsd:boolean" default="false"/>
      <xsd:attribute name="filter" type="xsd:string"/>
      <!-- If true, instead of showing a hierarchical menu, the widget will show a single menu
           with sub-menus grouped under headers. -->
      <xsd:attribute name="flatten" type="xsd:boolean" default="false"/>
      <!-- An optional boolean expression, if returns true, this widget will get focus when start
           editing the containing location. -->
      <xsd:attribute name="focusOnStartEditing" type="xsd:string"/>
      <!-- An expression that returns a GWColor instance. Legacy: this method can instead return
           a string corresponding to a CSS Specification Level 3 color name. See GWColor for
           more details. -->
      <xsd:attribute name="fontColor" type="xsd:string"/>
      <!-- An optional expression. If specified, a footer cell with the specified value will
           be rendered for this column. Only applicable when the containing Row is iterated by
           a RowIterator. Not allowed when "footerSumValue" is specified. -->
      <xsd:attribute name="footerLabel" type="xsd:string"/>
      <!-- An optional expression, if specified, will be used as format pattern for the footer
           sum value. Normally not specified, so that the "format" and\or "formatType" of the
           cell value will be applied to footer sum value. Only applicable when "footerSumValue"
           is specified. The result of this expression must conform to the number format defined
           in java.text.DecimalFormat. -->
      <xsd:attribute name="footerSumFormat" type="xsd:string"/>
      <!-- An optional Numeric expression. If specified, a footer cell that sums the specified
           value for all cells in this column will be rendered. Pagination of the list does not
           affect the sum value. Only applicable when the containing row is iterated by a RowIterator.
           Not allowed when "footerLabel" is specified. -->
      <xsd:attribute name="footerSumValue" type="xsd:string"/>
      <!-- How the value is formatted; options include "general", "currency", and "email".  See
           the formatType enumeration. -->
      <xsd:attribute name="formatType" type="FormatType"/>
      <!-- If true, the ListView will be grouped by this cell upon entering the page. Only one
           grouped cell is allowed at any given time and it is only applicable when the column
           is sortable. -->
      <xsd:attribute name="groupedOnEnter" type="xsd:string"/>
      <!-- If true, this Cell and any other grow-enabled Cell will expand to fill remaining space
           in the ListViewPanel. Only applicable when the ListView is set to stretch. -->
      <xsd:attribute name="grow" type="xsd:boolean" default="false"/>
      <xsd:attribute name="hasCheckBox" type="xsd:boolean" default="false"/>
      <!-- CSS height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="height" type="xsd:string"/>
      <xsd:attribute name="helpText" type="xsd:string"/>
      <!-- If false, menu items under this input will be shown even when the input is not editable. -->
      <xsd:attribute name="hideChildrenIfReadOnly" type="xsd:boolean" default="true"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- Refers to an image file. If defined, makes this an icon cell. The "value" attribute
           should be a boolean expression describing whether the icon is visible in a given row. -->
      <xsd:attribute name="icon" type="xsd:string"/>
      <!-- Color of the icon. If not set will default to its font color. -->
      <xsd:attribute name="iconColor" type="xsd:string"/>
      <xsd:attribute name="iconLabel" type="xsd:string"/>
      <!-- An enumeration of icon types that determine what the 'icon' property on the widget
           is referring to. -->
      <xsd:attribute name="iconType" type="IconTypeEnum"/>
      <!-- Reference ID of the widget.  This does not have to be globally unique; it only has
           to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <xsd:attribute name="inputConversion" type="xsd:string"/>
      <!-- An optional expression. If specified, a header cell with the specified value will
           be rendered for this column. Only applicable when the containing row is iterated by
           a RowIterator. -->
      <xsd:attribute name="label" type="xsd:string"/>
      <!-- Custom extension CSS style class to apply to the header. -->
      <xsd:attribute name="labelStyleClass" type="xsd:string"/>
      <!-- CSS max-height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="maxHeight" type="xsd:string"/>
      <!-- CSS max-width value. Can be `px`, or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="maxWidth" type="xsd:string"/>
      <!-- CSS min-height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="minHeight" type="xsd:string"/>
      <!-- CSS min-width value. Can be `px`, or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="minWidth" type="xsd:string"/>
      <xsd:attribute name="newLabel" type="xsd:string"/>
      <xsd:attribute name="newValue" type="xsd:string"/>
      <xsd:attribute name="noneSelectedLabel" type="xsd:string"/>
      <!-- The number of child MenuItems to show in each column.  If not specified, all children
           will be shown in a single column. -->
      <xsd:attribute name="numEntriesPerColumn" type="xsd:integer" default="0"/>
      <xsd:attribute name="optionLabel" type="xsd:string"/>
      <xsd:attribute name="outputConversion" type="xsd:string"/>
      <!-- Relative width when printing to PDF. All widths are relative to the widths of the
           other columns in the ListView -->
      <xsd:attribute name="printWidth" type="xsd:string" default="1"/>
      <xsd:attribute name="requestValidationExpression" type="xsd:string"/>
      <!-- If true, then the cell must be filled out by the user -->
      <xsd:attribute name="required" type="xsd:string"/>
      <!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * Deprecated.
           DO NOT USE.                                           * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
           Consider using "onChange/onPick/inputConversion/outputConversion" where available.
           If specified and the Input is editable, then any new value of the Input is written
           to this expression (Gosu by default) instead of to "value".  The new value is exposed
           as the symbol "VALUE".  For instance if your value expression is "Foo.getSomething()"
           then it can't be written to since it's not an L-value; so you could specify a setter
           expression along the lines of "Foo.setSomething(VALUE)" Warning: if you use this attribute
           many pebbles features will not work, including but not limited to: * Correct automatic
           detection of the state of the updated data * Correct automatic detection of the editability
           of the data * Correct automatic detection of the maximum size of a text input -->
      <xsd:attribute name="setter" type="xsd:string"/>
      <xsd:attribute name="showConfirmMessage" type="xsd:string"/>
      <!-- If true, shows the icon defined by "icon" in the header cell for this column. The
           default value is true. -->
      <xsd:attribute name="showHeaderIcon" type="xsd:boolean" default="true"/>
      <!-- An optional comma-separated sequence of Expressions, each of which is assumed to be
           a dot-delimited path, the value by which this column will be sorted if the user clicks
           on the header cell. -->
      <xsd:attribute name="sortBy" type="xsd:string"/>
      <!-- Either "ascending" or "descending" -->
      <xsd:attribute name="sortDirection" type="WidgetSortDirection" default="ascending"/>
      <!-- The priority of sorting relative to other sorting elements like IteratorSort and Cell.
           The lower the number, the higher the priority.  The highest priority is "1" -->
      <xsd:attribute name="sortOrder" type="xsd:integer" default="0"/>
      <!-- If true, attempts to sort the results of valueRange -->
      <xsd:attribute name="sortValueRange" type="xsd:boolean" default="true"/>
      <xsd:attribute name="styleClass" type="LinkStyleClass"/>
      <!-- An optional attribute, if set, defer sub menu generation until user tries to open
           the menu. DO NOT set this flag unless the sub menu of this widget is very expensive
           to generate. Setting this flag will reduce time to load the page, however require
           fetching additional info from server in the background, when the menu gets opened
           for the first time after page loaded. -->
      <xsd:attribute name="subMenuOnDemand" type="xsd:boolean" default="false"/>
      <!-- Extra "alt" text to show when the user hovers the mouse over the header cell of this
           column. -->
      <xsd:attribute name="tooltip" type="xsd:string"/>
      <!-- If true, validate before commit that the value of this column is unique across all
           rows in the current page. Only meaningful when this column is editable. -->
      <xsd:attribute name="unique" type="xsd:boolean" default="false"/>
      <xsd:attribute name="validationExpression" type="xsd:string"/>
      <xsd:attribute name="validationLabel" type="xsd:string"/>
      <!-- The value this element binds to.  If the element is editable then this value is both
           read from and written to (unless "setter" is defined). -->
      <xsd:attribute name="value" type="xsd:string"/>
      <!-- Gosu expression defining the range of possible values for this element. Should evaluate
           to a List, an array, or a IQueryBeanResult -->
      <xsd:attribute name="valueRange" type="xsd:string" use="required"/>
      <!-- The type of the value expression. -->
      <xsd:attribute name="valueType" type="xsd:string" use="required"/>
      <xsd:attribute name="valueVisible" type="xsd:string"/>
      <!-- Specifies the vertical alignment of this cell. Valid values: "top", "middle", or "bottom".
           If no value is specified, the default alignment is determined by the cell type ("top"
           for Text Areas and Format Cells, "middle" for buttons and icons). -->
      <xsd:attribute name="verticalAlign" type="WidgetVerticalAlignment"/>
      <!-- Boolean expression which, if false, completely hides the widget and all its children -->
      <xsd:attribute name="visible" type="xsd:string"/>
      <!-- CSS width value. Can be `px`, or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="width" type="xsd:string"/>
      <!-- If default, defers to FormatType to decide whether to wrap or not.  If true, allows
           cell content to wrap. -->
      <xsd:attribute name="wrap" type="WrapType" default="default"/>
      <!-- If true, allows Header Cell text content to wrap. Defaults to true. -->
      <xsd:attribute name="wrapLabel" type="xsd:boolean" default="false"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- A ContactInput specialized for Contact fields on an Assignable entity. This input
       has a pre-defined ContactDetails page, AddressBookPicker page, NewContact page, and
       NewContact menu -->
  <xsd:element name="AssigneeInput">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="LayoutConfig" minOccurs="0" maxOccurs="1"/>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="AddMenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="AddMenuItemIterator" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemDivider" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemIterator" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemSetRef" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemTree" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PickerMenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PostOnChange" minOccurs="0" maxOccurs="1"/>
          <xsd:element ref="Reflect" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="SearchItem" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:choice>
      </xsd:sequence>
      <xsd:attribute name="action" type="xsd:string"/>
      <!-- An optional boolean expression controlling whether the action should be available
           in this specific context when in read-only mode.  This is ignored if in edit mode
           or if the action is null.  This attribute will be deprecated in a future release,
           please use the 'available' attribute instead.  To disable action in readonly mode,
           you can set available=&quot;CurrentLocation.InEditMode || &lt;action-available-condition&gt;&quot; -->
      <xsd:attribute name="actionAvailable" type="xsd:string"/>
      <!-- Alignment of the widget ("left", "right", or "center") -->
      <xsd:attribute name="align" type="WidgetAlignment"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <xsd:attribute name="assignable" type="xsd:string" use="required"/>
      <!-- Boolean expression which, if false, grays out the widget and all its children -->
      <xsd:attribute name="available" type="xsd:string"/>
      <!-- If true then the label is displayed in bold text. -->
      <xsd:attribute name="boldLabel" type="xsd:boolean" default="false"/>
      <!-- If true then the value is displayed in bold text when read-only. -->
      <xsd:attribute name="boldValue" type="xsd:boolean" default="false"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- The confirmation message to show when "showConfirmMessage" is set. If not specified,
           a standard message will be used. -->
      <xsd:attribute name="confirmMessage" type="xsd:string"/>
      <!-- A Gosu expression used to convert the value picked from a popup before set it into
           the model value of this widget. The picked value will be exposed as a symbol with
           the name "PickedValue" -->
      <xsd:attribute name="conversionExpression" type="xsd:string"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- Boolean expression which, if false, makes this widget and all its children read-only -->
      <xsd:attribute name="editable" type="xsd:string" default="false"/>
      <!-- Optional Gosu expression for filtering the value range of the widget. You can write
           this either as a boolean expression over a "VALUE" symbol (i.e. "Libraries.MyLib.isOkValue(VALUE)"),
           or as a more complex expression that takes a "VALUES" array symbol and returns a List
           (i.e. "Libraries.MyLib.filterValues(VALUES)") which is more powerful and efficient
           but harder to write. -->
      <xsd:attribute name="filter" type="xsd:string"/>
      <!-- If true, instead of showing a hierarchical menu, the widget will show a single menu
           with sub-menus grouped under headers. -->
      <xsd:attribute name="flatten" type="xsd:boolean" default="false"/>
      <!-- An optional boolean expression, if returns true, this widget will get focus when start
           editing the containing location. -->
      <xsd:attribute name="focusOnStartEditing" type="xsd:string"/>
      <!-- How the value is formatted; options include "general", "currency", and "email".  See
           the formatType enumeration. -->
      <xsd:attribute name="formatType" type="FormatType"/>
      <!-- A Gosu expression which, if defined, is evaluated to create help info that guides
           the user to edit this widget. The help info will show up if the user hovers the mouse
           over or focuses on the widget, when the widget is in edit mode. -->
      <xsd:attribute name="helpText" type="xsd:string"/>
      <!-- If false, menu items under this input will be shown even when the input is not editable. -->
      <xsd:attribute name="hideChildrenIfReadOnly" type="xsd:boolean" default="true"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- Reference ID of the widget.  This does not have to be globally unique; it only has
           to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <xsd:attribute name="inputConversion" type="xsd:string"/>
      <!-- Label to render. -->
      <xsd:attribute name="label" type="xsd:string"/>
      <!-- Boolean expression which, if true, causes the label portion of the Input to be rendered
           above the value -->
      <xsd:attribute name="labelAbove" type="xsd:string" default="false"/>
      <!-- Custom extension CSS style class to apply to the label. -->
      <xsd:attribute name="labelStyleClass" type="xsd:string"/>
      <!-- Label expression for the "New..." option. The default label defined for the application
           will be used if this attribute is not specified. -->
      <xsd:attribute name="newLabel" type="xsd:string" default="DisplayKey.get(&quot;Java.NameValueView.New&quot;)"/>
      <!-- Value expression that returns a new instance for the input value. The "New..." option
           will be available when this attribute is specifed. -->
      <xsd:attribute name="newValue" type="xsd:string"/>
      <!-- Label expression for the "none selected" option -->
      <xsd:attribute name="noneSelectedLabel" type="xsd:string" default="DisplayKey.get(&quot;Java.NameValueView.NoneSelected&quot;)"/>
      <!-- The number of child MenuItems to show in each column.  If not specified, all children
           will be shown in a single column. -->
      <xsd:attribute name="numEntriesPerColumn" type="xsd:integer" default="0"/>
      <!-- The number of rows to show in a multi-select input.  This attribute is invalid on
           a single-select input. -->
      <xsd:attribute name="numRows" type="xsd:integer"/>
      <!-- Gosu expression to be executed after the value is set from a picker. -->
      <xsd:attribute name="onPick" type="xsd:string"/>
      <!-- Optional Gosu expression used to determine the label displayed for each element of
           the value range. Defaults to the element's display name or string representation if
           not present. The element value is exposed as "VALUE". -->
      <xsd:attribute name="optionLabel" type="xsd:string"/>
      <!-- A Gosu expression used to validate user value before setting it to the model. This
           expression can access any symbols available to this widget, and a "VALUE" symbol that
           represents the user value. If this expression returns null, the user value will be
           set into the model. Otherwise, an error message containing the result of the expression
           will be displayed on the page, the value will not be set into the model, and no actions
           can be performed until the error is corrected. -->
      <xsd:attribute name="requestValidationExpression" type="xsd:string"/>
      <!-- If true, then the cell must be filled out by the user -->
      <xsd:attribute name="required" type="xsd:string"/>
      <!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * Deprecated.
           DO NOT USE.                                           * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
           Consider using "onChange/onPick/inputConversion/outputConversion" where available.
           If specified and the Input is editable, then any new value of the Input is written
           to this expression (Gosu by default) instead of to "value".  The new value is exposed
           as the symbol "VALUE".  For instance if your value expression is "Foo.getSomething()"
           then it can't be written to since it's not an L-value; so you could specify a setter
           expression along the lines of "Foo.setSomething(VALUE)" Warning: if you use this attribute
           many pebbles features will not work, including but not limited to: * Correct automatic
           detection of the state of the updated data * Correct automatic detection of the editability
           of the data * Correct automatic detection of the maximum size of a text input -->
      <xsd:attribute name="setter" type="xsd:string"/>
      <!-- Optional keyboard shortcut character in the form of "Q" or "ShiftQ"; the "Alt" key
           is implicit. This is only applicable when this widget has an "action" specified and
           the value is not being edited. -->
      <xsd:attribute name="shortcut" type="xsd:string"/>
      <!-- Boolean expression which determines whether or not to show a confirmation message
           when the field value is changed directly from the UI. It's NOT applicable when the
           value is changed indirectly, for example, as a result of client reflection. -->
      <xsd:attribute name="showConfirmMessage" type="xsd:string"/>
      <!-- If true, attempts to sort the results of valueRange -->
      <xsd:attribute name="sortValueRange" type="xsd:boolean" default="true"/>
      <!-- An optional attribute, if set, defer sub menu generation until user tries to open
           the menu. DO NOT set this flag unless the sub menu of this widget is very expensive
           to generate. Setting this flag will reduce time to load the page, however require
           fetching additional info from server in the background, when the menu gets opened
           for the first time after page loaded. -->
      <xsd:attribute name="subMenuOnDemand" type="xsd:boolean" default="false"/>
      <!-- A Gosu expression to run before committing the record. This expression can refer to
           any symbols available to this widget. If this expression returns null, the validation
           is considered successful; otherwise, the result of this expression will be displayed
           as an error and the record will not be committed. -->
      <xsd:attribute name="validationExpression" type="xsd:string"/>
      <!-- The value this Input binds to as an Expression.  If the Input is editable then this
           value is both read from and written to (unless "setter" is defined). -->
      <xsd:attribute name="value" type="xsd:string" use="required"/>
      <!-- Gosu expression defining the range of possible values for this element. Should evaluate
           to a List, an array, or a IQueryBeanResult -->
      <xsd:attribute name="valueRange" type="xsd:string" use="required"/>
      <!-- CSS max-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionMaxWidth" type="xsd:string"/>
      <!-- CSS min-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionMinWidth" type="xsd:string"/>
      <!-- CSS width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionWidth" type="xsd:string"/>
      <!-- The type of the value expression. -->
      <xsd:attribute name="valueType" type="xsd:string" use="required"/>
      <!-- If used instead of "editable", specifies whether the Input is editable when data is
           being created -->
      <xsd:attribute name="visible" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <xsd:element name="Badge">
    <xsd:complexType>
      <xsd:choice minOccurs="0" maxOccurs="unbounded"/>
      <!-- Deprecated. Use Badge Style. The color of the badge's background. If not set, will
           default to the theme's `All Clear` color. -->
      <xsd:attribute name="backgroundColor" type="xsd:string"/>
      <!-- A BadgeStylesEnum value. Changes the visual appearance of the element. -->
      <xsd:attribute name="badgeStyle" type="xsd:string"/>
      <!-- The name of a .png file, or .svg file, or font glyph. The Widget's iconType determines
           which one. -->
      <xsd:attribute name="icon" type="xsd:string"/>
      <!-- Color of the icon. If not set will default to its font color. -->
      <xsd:attribute name="iconColor" type="xsd:string"/>
      <!-- An enumeration of icon types that determine what the 'icon' property on the widget
           is referring to. -->
      <xsd:attribute name="iconType" type="IconTypeEnum"/>
      <!-- The text to display in the badge. -->
      <xsd:attribute name="text" type="xsd:string"/>
      <!-- Deprecated. Use Badge Style. The color of the text. If not set, will default to the
           theme's `light` text color. -->
      <xsd:attribute name="textColor" type="xsd:string"/>
      <!-- If true, the badge will appear larger. -->
      <xsd:attribute name="useLargeStyle" type="xsd:boolean" default="false"/>
      <!-- Boolean expression which, if false, completely hides the badge. -->
      <xsd:attribute name="visible" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <xsd:element name="BadgeProperties">
    <xsd:complexType>
      <xsd:choice minOccurs="0" maxOccurs="unbounded"/>
      <!-- Deprecated. Use Badge Style. The color of the badge's background. If not set, will
           default to the theme's `All Clear` color. -->
      <xsd:attribute name="backgroundColor" type="xsd:string"/>
      <!-- A BadgeStylesEnum value. Changes the visual appearance of the element. -->
      <xsd:attribute name="badgeStyle" type="xsd:string"/>
      <!-- The name of a .png file, or .svg file, or font glyph. The Widget's iconType determines
           which one. -->
      <xsd:attribute name="icon" type="xsd:string"/>
      <!-- Color of the icon. If not set will default to its font color. -->
      <xsd:attribute name="iconColor" type="xsd:string"/>
      <!-- An enumeration of icon types that determine what the 'icon' property on the widget
           is referring to. -->
      <xsd:attribute name="iconType" type="IconTypeEnum"/>
      <!-- The text to display in the badge. -->
      <xsd:attribute name="text" type="xsd:string"/>
      <!-- Deprecated. Use Badge Style. The color of the text. If not set, will default to the
           theme's `light` text color. -->
      <xsd:attribute name="textColor" type="xsd:string"/>
      <!-- If true, the badge will appear larger. -->
      <xsd:attribute name="useLargeStyle" type="xsd:boolean" default="false"/>
      <!-- Boolean expression which, if false, completely hides the badge. -->
      <xsd:attribute name="visible" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- A widget that represents a percentage value as a bar icon. Unlike <i>Progress</i>
       widget, this widget is static and does not refresh its value automatically -->
  <xsd:element name="BarCell">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="Reflect" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element ref="ColumnFooter" minOccurs="0" maxOccurs="1"/>
      </xsd:sequence>
      <!-- Specifies the alignment of this cell. Valid values: "left", "right", or "center".
           If no value is specified, the default alignment is determined by the value type ("center"
           for boolean values; "right" for numeric values; "left" for other value types). -->
      <xsd:attribute name="align" type="WidgetAlignment"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- Boolean expression which, if false, grays out the widget and all its children -->
      <xsd:attribute name="available" type="xsd:string"/>
      <!-- If true, renders the cell contents in bold text. Defaults to false. -->
      <xsd:attribute name="bold" type="xsd:boolean" default="false"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- The HTML colspan attribute, lets this cell span across multiple columns of other rows.
           Useful for generating a "group header" row above a RowIterator. The default value
           is 1. A value greater than 1 is only allowed when the containing row is not iterated
           by a RowIterator. -->
      <xsd:attribute name="colspan" type="xsd:integer"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- An optional expression. If specified, a footer cell with the specified value will
           be rendered for this column. Only applicable when the containing Row is iterated by
           a RowIterator. Not allowed when "footerSumValue" is specified. -->
      <xsd:attribute name="footerLabel" type="xsd:string"/>
      <!-- An optional expression, if specified, will be used as format pattern for the footer
           sum value. Normally not specified, so that the "format" and\or "formatType" of the
           cell value will be applied to footer sum value. Only applicable when "footerSumValue"
           is specified. The result of this expression must conform to the number format defined
           in java.text.DecimalFormat. -->
      <xsd:attribute name="footerSumFormat" type="xsd:string"/>
      <!-- An optional Numeric expression. If specified, a footer cell that sums the specified
           value for all cells in this column will be rendered. Pagination of the list does not
           affect the sum value. Only applicable when the containing row is iterated by a RowIterator.
           Not allowed when "footerLabel" is specified. -->
      <xsd:attribute name="footerSumValue" type="xsd:string"/>
      <!-- If true, this Cell and any other grow-enabled Cell will expand to fill remaining space
           in the ListViewPanel. Only applicable when the ListView is set to stretch. -->
      <xsd:attribute name="grow" type="xsd:boolean" default="false"/>
      <!-- CSS height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="height" type="xsd:string"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- Boolean expression which, if true, will render the widget in the <i>high</i> style
           when the percentage is equal to the highThreshold. Defaults to true. -->
      <xsd:attribute name="highInclusive" type="xsd:string"/>
      <!-- An option numeric expression. If set, this widget will be rendered in <i>high</i>
           style when the percentage is higher than (or equal to if "highInclusive" is true)
           this number -->
      <xsd:attribute name="highThreshold" type="xsd:string"/>
      <!-- Refers to an image file. If defined, makes this an icon cell. The "value" attribute
           should be a boolean expression describing whether the icon is visible in a given row. -->
      <xsd:attribute name="icon" type="xsd:string"/>
      <!-- Color of the icon. If not set will default to its font color. -->
      <xsd:attribute name="iconColor" type="xsd:string"/>
      <!-- An enumeration of icon types that determine what the 'icon' property on the widget
           is referring to. -->
      <xsd:attribute name="iconType" type="IconTypeEnum"/>
      <!-- Reference ID of the widget.  This does not have to be globally unique; it only has
           to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <!-- An optional expression. If specified, a header cell with the specified value will
           be rendered for this column. Only applicable when the containing row is iterated by
           a RowIterator. -->
      <xsd:attribute name="label" type="xsd:string"/>
      <!-- Boolean expression which, if true, will render the widget in the <i>low</i> style
           when the percentage is equal to the lowThreshold.  Defaults to true. -->
      <xsd:attribute name="lowInclusive" type="xsd:string"/>
      <!-- An option numeric expression. If set, this widget will be rendered in <i>low</i> style
           when the percentage is lower than (or equal to if "lowInclusive" is true) to this
           number. -->
      <xsd:attribute name="lowThreshold" type="xsd:string"/>
      <!-- CSS max-height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="maxHeight" type="xsd:string"/>
      <!-- CSS max-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="maxWidth" type="xsd:string"/>
      <!-- CSS min-height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="minHeight" type="xsd:string"/>
      <!-- CSS min-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="minWidth" type="xsd:string"/>
      <!-- A numeric expression that returns the percentage value between 0 to 100 -->
      <xsd:attribute name="percentage" type="xsd:string" use="required"/>
      <!-- Relative width when printing to PDF. All widths are relative to the widths of the
           other columns in the ListView -->
      <xsd:attribute name="printWidth" type="xsd:string" default="1"/>
      <!-- If true, shows the icon defined by "icon" in the header cell for this column. The
           default value is true. -->
      <xsd:attribute name="showHeaderIcon" type="xsd:boolean" default="true"/>
      <!-- An optional comma-separated sequence of Expressions, each of which is assumed to be
           a dot-delimited path, the value by which this column will be sorted if the user clicks
           on the header cell. -->
      <xsd:attribute name="sortBy" type="xsd:string"/>
      <!-- Either "ascending" or "descending" -->
      <xsd:attribute name="sortDirection" type="WidgetSortDirection" default="ascending"/>
      <!-- The priority of sorting relative to other sorting elements like IteratorSort and Cell.
           The lower the number, the higher the priority.  The highest priority is "1" -->
      <xsd:attribute name="sortOrder" type="xsd:integer" default="0"/>
      <!-- An optional expression, if specific, the return value will be displayed along with
           the icon -->
      <xsd:attribute name="status" type="xsd:string"/>
      <!-- An optional Boolean attribute. If set, the low part of the bar will be rendered in
           <i>high</i> style and the high part of the bar will be rendered in <i>low</i> style.
           Default to false. -->
      <xsd:attribute name="switchHighLowStyle" type="xsd:boolean" default="false"/>
      <!-- Extra "alt" text to show when the user hovers the mouse over the header cell of this
           column. -->
      <xsd:attribute name="tooltip" type="xsd:string"/>
      <!-- Boolean expression which, if false, hides the <i>contents</i> of the cell (its "ValueWidget"),
           but not the cell itself. -->
      <xsd:attribute name="valueVisible" type="xsd:string"/>
      <!-- Specifies the vertical alignment of this cell. Valid values: "top", "middle", or "bottom".
           If no value is specified, the default alignment is determined by the cell type ("top"
           for Text Areas and Format Cells, "middle" for buttons and icons). -->
      <xsd:attribute name="verticalAlign" type="WidgetVerticalAlignment"/>
      <!-- Boolean expression which, if false, completely hides the widget and all its children -->
      <xsd:attribute name="visible" type="xsd:string"/>
      <!-- CSS width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="width" type="xsd:string"/>
      <!-- If default, defers to FormatType to decide whether to wrap or not.  If true, allows
           cell content to wrap. -->
      <xsd:attribute name="wrap" type="WrapType" default="default"/>
      <!-- If true, allows Header Cell text content to wrap. Defaults to true. -->
      <xsd:attribute name="wrapLabel" type="xsd:boolean" default="false"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- A widget that represents a percentage value as a bar icon. Unlike <i>Progress</i>
       widget, this widget is static and does not refresh its value automatically -->
  <xsd:element name="BarInput">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="LayoutConfig" minOccurs="0" maxOccurs="1"/>
      </xsd:sequence>
      <!-- Alignment of the widget ("left", "right", or "center") -->
      <xsd:attribute name="align" type="WidgetAlignment"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- Boolean expression which, if false, grays out the widget and all its children -->
      <xsd:attribute name="available" type="xsd:string"/>
      <!-- If true then the label is displayed in bold text. -->
      <xsd:attribute name="boldLabel" type="xsd:boolean" default="false"/>
      <!-- If true then the value is displayed in bold text when read-only. -->
      <xsd:attribute name="boldValue" type="xsd:boolean" default="false"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- Boolean expression which, if true, will render the widget in the <i>high</i> style
           when the percentage is equal to the highThreshold. Defaults to true. -->
      <xsd:attribute name="highInclusive" type="xsd:string"/>
      <!-- An option numeric expression. If set, this widget will be rendered in <i>high</i>
           style when the percentage is higher than (or equal to if "highInclusive" is true)
           this number -->
      <xsd:attribute name="highThreshold" type="xsd:string"/>
      <!-- Reference ID of the widget.  This does not have to be globally unique; it only has
           to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <!-- Label to render. -->
      <xsd:attribute name="label" type="xsd:string"/>
      <!-- Boolean expression which, if true, causes the label portion of the Input to be rendered
           above the value -->
      <xsd:attribute name="labelAbove" type="xsd:string" default="false"/>
      <!-- Custom extension CSS style class to apply to the label. -->
      <xsd:attribute name="labelStyleClass" type="xsd:string"/>
      <!-- Boolean expression which, if true, will render the widget in the <i>low</i> style
           when the percentage is equal to the lowThreshold.  Defaults to true. -->
      <xsd:attribute name="lowInclusive" type="xsd:string"/>
      <!-- An option numeric expression. If set, this widget will be rendered in <i>low</i> style
           when the percentage is lower than (or equal to if "lowInclusive" is true) to this
           number. -->
      <xsd:attribute name="lowThreshold" type="xsd:string"/>
      <!-- A numeric expression that returns the percentage value between 0 to 100 -->
      <xsd:attribute name="percentage" type="xsd:string" use="required"/>
      <!-- An optional expression, if specific, the return value will be displayed along with
           the icon -->
      <xsd:attribute name="status" type="xsd:string"/>
      <!-- An optional Boolean attribute. If set, the low part of the bar will be rendered in
           <i>high</i> style and the high part of the bar will be rendered in <i>low</i> style.
           Default to false. -->
      <xsd:attribute name="switchHighLowStyle" type="xsd:boolean" default="false"/>
      <!-- CSS max-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionMaxWidth" type="xsd:string"/>
      <!-- CSS min-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionMinWidth" type="xsd:string"/>
      <!-- CSS width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionWidth" type="xsd:string"/>
      <!-- Boolean expression which, if false, hides the <i>contents</i> of the cell (its "ValueWidget"),
           but not the cell itself. -->
      <xsd:attribute name="valueVisible" type="xsd:string"/>
      <!-- If used instead of "editable", specifies whether the Input is editable when data is
           being created -->
      <xsd:attribute name="visible" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- An Input that renders as a drop-down list.  Consider using TypeKeyInput or RangeInput
       instead. -->
  <xsd:element name="BooleanDropdownInput">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="LayoutConfig" minOccurs="0" maxOccurs="1"/>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="AddMenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="AddMenuItemIterator" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemDivider" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemIterator" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemSetRef" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemTree" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PickerMenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PostOnChange" minOccurs="0" maxOccurs="1"/>
          <xsd:element ref="Reflect" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="SearchItem" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:choice>
      </xsd:sequence>
      <!-- An optional action to take when the user clicks the value of this widget when the
           value is not being edited. See ActionBase for list of available action prefixes. When
           specified, the value of this widget will be rendered as a link when the value is not
           being edited. -->
      <xsd:attribute name="action" type="xsd:string"/>
      <!-- An optional boolean expression controlling whether the action should be available
           in this specific context when in read-only mode.  This is ignored if in edit mode
           or if the action is null.  This attribute will be deprecated in a future release,
           please use the 'available' attribute instead.  To disable action in readonly mode,
           you can set available=&quot;CurrentLocation.InEditMode || &lt;action-available-condition&gt;&quot; -->
      <xsd:attribute name="actionAvailable" type="xsd:string"/>
      <!-- Alignment of the widget ("left", "right", or "center") -->
      <xsd:attribute name="align" type="WidgetAlignment"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- Boolean expression which, if false, grays out the widget and all its children -->
      <xsd:attribute name="available" type="xsd:string"/>
      <!-- If true then the label is displayed in bold text. -->
      <xsd:attribute name="boldLabel" type="xsd:boolean" default="false"/>
      <!-- If true then the value is displayed in bold text when read-only. -->
      <xsd:attribute name="boldValue" type="xsd:boolean" default="false"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- The confirmation message to show when "showConfirmMessage" is set. If not specified,
           a standard message will be used. -->
      <xsd:attribute name="confirmMessage" type="xsd:string"/>
      <!-- A Gosu expression used to convert the value picked from a popup before set it into
           the model value of this widget. The picked value will be exposed as a symbol with
           the name "PickedValue" -->
      <xsd:attribute name="conversionExpression" type="xsd:string"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- Boolean expression which, if false, makes this widget and all its children read-only -->
      <xsd:attribute name="editable" type="xsd:string" default="false"/>
      <!-- If true, instead of showing a hierarchical menu, the widget will show a single menu
           with sub-menus grouped under headers. -->
      <xsd:attribute name="flatten" type="xsd:boolean" default="false"/>
      <!-- An optional boolean expression, if returns true, this widget will get focus when start
           editing the containing location. -->
      <xsd:attribute name="focusOnStartEditing" type="xsd:string"/>
      <!-- How the value is formatted; options include "general", "currency", and "email".  See
           the formatType enumeration. -->
      <xsd:attribute name="formatType" type="FormatType"/>
      <!-- A Gosu expression which, if defined, is evaluated to create help info that guides
           the user to edit this widget. The help info will show up if the user hovers the mouse
           over or focuses on the widget, when the widget is in edit mode. -->
      <xsd:attribute name="helpText" type="xsd:string"/>
      <!-- If false, menu items under this input will be shown even when the input is not editable. -->
      <xsd:attribute name="hideChildrenIfReadOnly" type="xsd:boolean" default="true"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- Reference ID of the widget.  This does not have to be globally unique; it only has
           to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <!-- A Gosu expression that converts the presentation value to a model value. The presentation
           value string is exposed to this expression as the symbol "VALUE". -->
      <xsd:attribute name="inputConversion" type="xsd:string"/>
      <!-- Label to render. -->
      <xsd:attribute name="label" type="xsd:string"/>
      <!-- Boolean expression which, if true, causes the label portion of the Input to be rendered
           above the value -->
      <xsd:attribute name="labelAbove" type="xsd:string" default="false"/>
      <!-- Custom extension CSS style class to apply to the label. -->
      <xsd:attribute name="labelStyleClass" type="xsd:string"/>
      <!-- The number of child MenuItems to show in each column.  If not specified, all children
           will be shown in a single column. -->
      <xsd:attribute name="numEntriesPerColumn" type="xsd:integer" default="0"/>
      <!-- Gosu expression to be executed after the value is set from a picker. -->
      <xsd:attribute name="onPick" type="xsd:string"/>
      <!-- A Gosu expression that converts the model value to a presentation value. The model
           value is exposed to this expression as the symbol "VALUE". The return type of this
           expression must be String. -->
      <xsd:attribute name="outputConversion" type="xsd:string"/>
      <!-- A Gosu expression used to validate user value before setting it to the model. This
           expression can access any symbols available to this widget, and a "VALUE" symbol that
           represents the user value. If this expression returns null, the user value will be
           set into the model. Otherwise, an error message containing the result of the expression
           will be displayed on the page, the value will not be set into the model, and no actions
           can be performed until the error is corrected. -->
      <xsd:attribute name="requestValidationExpression" type="xsd:string"/>
      <!-- If true, then the cell must be filled out by the user -->
      <xsd:attribute name="required" type="xsd:string"/>
      <!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * Deprecated.
           DO NOT USE.                                           * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
           Consider using "onChange/onPick/inputConversion/outputConversion" where available.
           If specified and the Input is editable, then any new value of the Input is written
           to this expression (Gosu by default) instead of to "value".  The new value is exposed
           as the symbol "VALUE".  For instance if your value expression is "Foo.getSomething()"
           then it can't be written to since it's not an L-value; so you could specify a setter
           expression along the lines of "Foo.setSomething(VALUE)" Warning: if you use this attribute
           many pebbles features will not work, including but not limited to: * Correct automatic
           detection of the state of the updated data * Correct automatic detection of the editability
           of the data * Correct automatic detection of the maximum size of a text input -->
      <xsd:attribute name="setter" type="xsd:string"/>
      <!-- Optional keyboard shortcut character in the form of "Q" or "ShiftQ"; the "Alt" key
           is implicit. This is only applicable when this widget has an "action" specified and
           the value is not being edited. -->
      <xsd:attribute name="shortcut" type="xsd:string"/>
      <!-- Boolean expression which determines whether or not to show a confirmation message
           when the field value is changed directly from the UI. It's NOT applicable when the
           value is changed indirectly, for example, as a result of client reflection. -->
      <xsd:attribute name="showConfirmMessage" type="xsd:string"/>
      <!-- An optional attribute, if set, defer sub menu generation until user tries to open
           the menu. DO NOT set this flag unless the sub menu of this widget is very expensive
           to generate. Setting this flag will reduce time to load the page, however require
           fetching additional info from server in the background, when the menu gets opened
           for the first time after page loaded. -->
      <xsd:attribute name="subMenuOnDemand" type="xsd:boolean" default="false"/>
      <!-- A Gosu expression to run before committing the record. This expression can refer to
           any symbols available to this widget. If this expression returns null, the validation
           is considered successful; otherwise, the result of this expression will be displayed
           as an error and the record will not be committed. -->
      <xsd:attribute name="validationExpression" type="xsd:string"/>
      <!-- The value this Input binds to as an Expression.  If the Input is editable then this
           value is both read from and written to (unless "setter" is defined). -->
      <xsd:attribute name="value" type="xsd:string" use="required"/>
      <!-- CSS max-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionMaxWidth" type="xsd:string"/>
      <!-- CSS min-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionMinWidth" type="xsd:string"/>
      <!-- CSS width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionWidth" type="xsd:string"/>
      <!-- The type of the value expression. -->
      <xsd:attribute name="valueType" type="xsd:string" default="java.lang.Boolean"/>
      <!-- If used instead of "editable", specifies whether the Input is editable when data is
           being created -->
      <xsd:attribute name="visible" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- A Cell that renders as radio buttons -->
  <xsd:element name="BooleanRadioCell">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="Reflect" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element ref="ColumnFooter" minOccurs="0" maxOccurs="1"/>
        <xsd:element ref="PostOnChange" minOccurs="0" maxOccurs="1"/>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="AddMenuItem"/>
          <xsd:element ref="AddMenuItemIterator"/>
          <xsd:element ref="MenuItem"/>
          <xsd:element ref="MenuItemDivider"/>
          <xsd:element ref="MenuItemIterator"/>
          <xsd:element ref="MenuItemSetRef"/>
          <xsd:element ref="MenuItemTree"/>
          <xsd:element ref="PickerMenuItem"/>
          <xsd:element ref="SearchItem"/>
        </xsd:choice>
      </xsd:sequence>
      <!-- An optional action to take when the user clicks the value of this widget when the
           value is not being edited. See ActionBase for details. When specified, the value of
           this widget will be rendered as a link when the value is not being edited. -->
      <xsd:attribute name="action" type="xsd:string"/>
      <!-- An optional boolean expression controlling whether the action should be available
           in this specific context when in read-only mode.  This is ignored if in edit mode
           or if the action is null.  This attribute will be deprecated in a future release,
           please use the 'available' attribute instead.  To disable action in readonly mode,
           you can set available=&quot;CurrentLocation.InEditMode || &lt;action-available-condition&gt;&quot; -->
      <xsd:attribute name="actionAvailable" type="xsd:string"/>
      <!-- Specifies the alignment of this cell. Valid values: "left", "right", or "center".
           If no value is specified, the default alignment is determined by the value type ("center"
           for boolean values; "right" for numeric values; "left" for other value types). -->
      <xsd:attribute name="align" type="WidgetAlignment"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- Boolean expression which, if false, grays out the widget and all its children -->
      <xsd:attribute name="available" type="xsd:string"/>
      <!-- If true, renders the cell contents in bold text. Defaults to false. -->
      <xsd:attribute name="bold" type="xsd:boolean" default="false"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- The HTML colspan attribute, lets this cell span across multiple columns of other rows.
           Useful for generating a "group header" row above a RowIterator. The default value
           is 1. A value greater than 1 is only allowed when the containing row is not iterated
           by a RowIterator. -->
      <xsd:attribute name="colspan" type="xsd:integer"/>
      <!-- The confirmation message to show when "showConfirmMessage" is set. If not specified,
           a standard message will be used. -->
      <xsd:attribute name="confirmMessage" type="xsd:string"/>
      <!-- A Gosu expression used to convert the value picked from a popup before set it into
           the model value of this widget. The picked value will be exposed as a symbol with
           the name "PickedValue" -->
      <xsd:attribute name="conversionExpression" type="xsd:string"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- Boolean expression which, if false, makes this widget and all its children read-only -->
      <xsd:attribute name="editable" type="xsd:string" default="false"/>
      <!-- If true, allows the user to sort the values in the column by clicking on the header.
            Only applicable when the containing row is iterated by a RowIterator. -->
      <xsd:attribute name="enableSort" type="xsd:boolean" default="true"/>
      <!-- If true, this cell will the last cell in the row to be navigated to via the ENTER
           key. Only applicable when "CellNavOnEnter" or "QuickAddOnEnter" is set. Normally not
           specified. Default to false. -->
      <xsd:attribute name="endOfCellNav" type="xsd:boolean" default="false"/>
      <!-- If true, instead of showing a hierarchical menu, the widget will show a single menu
           with sub-menus grouped under headers. -->
      <xsd:attribute name="flatten" type="xsd:boolean" default="false"/>
      <!-- An optional boolean expression, if returns true, this widget will get focus when start
           editing the containing location. -->
      <xsd:attribute name="focusOnStartEditing" type="xsd:string"/>
      <!-- An expression that returns a GWColor instance. Legacy: this method can instead return
           a string corresponding to a CSS Specification Level 3 color name. See GWColor for
           more details. -->
      <xsd:attribute name="fontColor" type="xsd:string"/>
      <!-- An optional expression. If specified, a footer cell with the specified value will
           be rendered for this column. Only applicable when the containing Row is iterated by
           a RowIterator. Not allowed when "footerSumValue" is specified. -->
      <xsd:attribute name="footerLabel" type="xsd:string"/>
      <!-- An optional expression, if specified, will be used as format pattern for the footer
           sum value. Normally not specified, so that the "format" and\or "formatType" of the
           cell value will be applied to footer sum value. Only applicable when "footerSumValue"
           is specified. The result of this expression must conform to the number format defined
           in java.text.DecimalFormat. -->
      <xsd:attribute name="footerSumFormat" type="xsd:string"/>
      <!-- An optional Numeric expression. If specified, a footer cell that sums the specified
           value for all cells in this column will be rendered. Pagination of the list does not
           affect the sum value. Only applicable when the containing row is iterated by a RowIterator.
           Not allowed when "footerLabel" is specified. -->
      <xsd:attribute name="footerSumValue" type="xsd:string"/>
      <!-- How the value is formatted; options include "general", "currency", and "email".  See
           the formatType enumeration. -->
      <xsd:attribute name="formatType" type="FormatType"/>
      <!-- If true, the ListView will be grouped by this cell upon entering the page. Only one
           grouped cell is allowed at any given time and it is only applicable when the column
           is sortable. -->
      <xsd:attribute name="groupedOnEnter" type="xsd:string"/>
      <!-- If true, this Cell and any other grow-enabled Cell will expand to fill remaining space
           in the ListViewPanel. Only applicable when the ListView is set to stretch. -->
      <xsd:attribute name="grow" type="xsd:boolean" default="false"/>
      <!-- If true, generates a checkbox at the beginning of this cell. This checkbox can be
           used to check this entry in the nearest containing Iterator. Defaults to false. Only
           allowed if this cell is inside a CellIterator or under a Row inside a RowIterator. -->
      <xsd:attribute name="hasCheckBox" type="xsd:boolean" default="false"/>
      <!-- CSS height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="height" type="xsd:string"/>
      <!-- A Gosu expression which, if defined, is evaluated to create help info that guides
           the user to edit this widget. The help info will show up if the user hovers the mouse
           over or focuses on the widget, when the widget is in edit mode. -->
      <xsd:attribute name="helpText" type="xsd:string"/>
      <!-- If false, menu items under this input will be shown even when the input is not editable. -->
      <xsd:attribute name="hideChildrenIfReadOnly" type="xsd:boolean" default="true"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- Refers to an image file. If defined, makes this an icon cell. The "value" attribute
           should be a boolean expression describing whether the icon is visible in a given row. -->
      <xsd:attribute name="icon" type="xsd:string"/>
      <!-- Color of the icon. If not set will default to its font color. -->
      <xsd:attribute name="iconColor" type="xsd:string"/>
      <!-- The ALT text for any icon generated in the content cells -->
      <xsd:attribute name="iconLabel" type="xsd:string"/>
      <!-- An enumeration of icon types that determine what the 'icon' property on the widget
           is referring to. -->
      <xsd:attribute name="iconType" type="IconTypeEnum"/>
      <!-- Reference ID of the widget.  This does not have to be globally unique; it only has
           to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <!-- A Gosu expression that converts the presentation value to a model value. The presentation
           value string is exposed to this expression as the symbol "VALUE". -->
      <xsd:attribute name="inputConversion" type="xsd:string"/>
      <!-- An optional expression. If specified, a header cell with the specified value will
           be rendered for this column. Only applicable when the containing row is iterated by
           a RowIterator. -->
      <xsd:attribute name="label" type="xsd:string"/>
      <!-- Custom extension CSS style class to apply to the header. -->
      <xsd:attribute name="labelStyleClass" type="xsd:string"/>
      <!-- CSS max-height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="maxHeight" type="xsd:string"/>
      <!-- CSS max-width value. Can be `px`, or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="maxWidth" type="xsd:string"/>
      <!-- CSS min-height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="minHeight" type="xsd:string"/>
      <!-- CSS min-width value. Can be `px`, or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="minWidth" type="xsd:string"/>
      <!-- The number of child MenuItems to show in each column.  If not specified, all children
           will be shown in a single column. -->
      <xsd:attribute name="numEntriesPerColumn" type="xsd:integer" default="0"/>
      <!-- Gosu expression to be executed after the value is set from a picker. -->
      <xsd:attribute name="onPick" type="xsd:string"/>
      <!-- A Gosu expression that converts the model value to a presentation value. The model
           value is exposed to this expression as the symbol "VALUE". The return type of this
           expression must be String. -->
      <xsd:attribute name="outputConversion" type="xsd:string"/>
      <!-- Relative width when printing to PDF. All widths are relative to the widths of the
           other columns in the ListView -->
      <xsd:attribute name="printWidth" type="xsd:string" default="1"/>
      <!-- A Gosu expression used to validate user value before setting it to the model. This
           expression can access any symbols available to this widget, and a "VALUE" symbol that
           represents the user value. If this expression returns null, the user value will be
           set into the model. Otherwise, an error message containing the result of the expression
           will be displayed on the page, the value will not be set into the model, and no actions
           can be performed until the error is corrected. -->
      <xsd:attribute name="requestValidationExpression" type="xsd:string"/>
      <!-- If true, then the cell must be filled out by the user -->
      <xsd:attribute name="required" type="xsd:string"/>
      <!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * Deprecated.
           DO NOT USE.                                           * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
           Consider using "onChange/onPick/inputConversion/outputConversion" where available.
           If specified and the Input is editable, then any new value of the Input is written
           to this expression (Gosu by default) instead of to "value".  The new value is exposed
           as the symbol "VALUE".  For instance if your value expression is "Foo.getSomething()"
           then it can't be written to since it's not an L-value; so you could specify a setter
           expression along the lines of "Foo.setSomething(VALUE)" Warning: if you use this attribute
           many pebbles features will not work, including but not limited to: * Correct automatic
           detection of the state of the updated data * Correct automatic detection of the editability
           of the data * Correct automatic detection of the maximum size of a text input -->
      <xsd:attribute name="setter" type="xsd:string"/>
      <!-- Boolean expression which determines whether or not to show a confirmation message
           when the field value is changed directly from the UI. It's NOT applicable when the
           value is changed indirectly, for example, as a result of client reflection. -->
      <xsd:attribute name="showConfirmMessage" type="xsd:string"/>
      <!-- If true, shows the icon defined by "icon" in the header cell for this column. The
           default value is true. -->
      <xsd:attribute name="showHeaderIcon" type="xsd:boolean" default="true"/>
      <!-- An optional comma-separated sequence of Expressions, each of which is assumed to be
           a dot-delimited path, the value by which this column will be sorted if the user clicks
           on the header cell. -->
      <xsd:attribute name="sortBy" type="xsd:string"/>
      <!-- Either "ascending" or "descending" -->
      <xsd:attribute name="sortDirection" type="WidgetSortDirection" default="ascending"/>
      <!-- The priority of sorting relative to other sorting elements like IteratorSort and Cell.
           The lower the number, the higher the priority.  The highest priority is "1" -->
      <xsd:attribute name="sortOrder" type="xsd:integer" default="0"/>
      <!-- CSS style class for the cell content; for instance, "miniButton" makes a link appear
           as a small button -->
      <xsd:attribute name="styleClass" type="LinkStyleClass"/>
      <!-- An optional attribute, if set, defer sub menu generation until user tries to open
           the menu. DO NOT set this flag unless the sub menu of this widget is very expensive
           to generate. Setting this flag will reduce time to load the page, however require
           fetching additional info from server in the background, when the menu gets opened
           for the first time after page loaded. -->
      <xsd:attribute name="subMenuOnDemand" type="xsd:boolean" default="false"/>
      <!-- Extra "alt" text to show when the user hovers the mouse over the header cell of this
           column. -->
      <xsd:attribute name="tooltip" type="xsd:string"/>
      <!-- If true, validate before commit that the value of this column is unique across all
           rows in the current page. Only meaningful when this column is editable. -->
      <xsd:attribute name="unique" type="xsd:boolean" default="false"/>
      <!-- A Gosu expression to run before committing the record. This expression can refer to
           any symbols available to this widget. If this expression returns null, the validation
           is considered successful; otherwise, the result of this expression will be displayed
           as an error and the record will not be committed. -->
      <xsd:attribute name="validationExpression" type="xsd:string"/>
      <!-- The label of this cell to be used when it has validation issues. Not needed when this
           cell has a "label". Required if the cell is editable but does not have a "label". -->
      <xsd:attribute name="validationLabel" type="xsd:string"/>
      <!-- The value this element binds to.  If the element is editable then this value is both
           read from and written to (unless "setter" is defined). -->
      <xsd:attribute name="value" type="xsd:string"/>
      <!-- The type of the value expression. -->
      <xsd:attribute name="valueType" type="xsd:string" default="java.lang.Boolean"/>
      <!-- Boolean expression which, if false, hides the <i>contents</i> of the cell (its "ValueWidget"),
           but not the cell itself.  Needed since hiding the actual cell usually screws up the
           layout -->
      <xsd:attribute name="valueVisible" type="xsd:string"/>
      <!-- Specifies the vertical alignment of this cell. Valid values: "top", "middle", or "bottom".
           If no value is specified, the default alignment is determined by the cell type ("top"
           for Text Areas and Format Cells, "middle" for buttons and icons). -->
      <xsd:attribute name="verticalAlign" type="WidgetVerticalAlignment"/>
      <!-- Boolean expression which, if false, completely hides the widget and all its children -->
      <xsd:attribute name="visible" type="xsd:string"/>
      <!-- CSS width value. Can be `px`, or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="width" type="xsd:string"/>
      <!-- If default, defers to FormatType to decide whether to wrap or not.  If true, allows
           cell content to wrap. -->
      <xsd:attribute name="wrap" type="WrapType" default="default"/>
      <!-- If true, allows Header Cell text content to wrap. Defaults to true. -->
      <xsd:attribute name="wrapLabel" type="xsd:boolean" default="false"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- An Input with extra attributes for a Boolean field -->
  <xsd:element name="BooleanRadioInput">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="LayoutConfig" minOccurs="0" maxOccurs="1"/>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="AddMenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="AddMenuItemIterator" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemDivider" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemIterator" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemSetRef" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemTree" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PickerMenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PostOnChange" minOccurs="0" maxOccurs="1"/>
          <xsd:element ref="Reflect" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="SearchItem" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:choice>
      </xsd:sequence>
      <!-- An optional action to take when the user clicks the value of this widget when the
           value is not being edited. See ActionBase for list of available action prefixes. When
           specified, the value of this widget will be rendered as a link when the value is not
           being edited. -->
      <xsd:attribute name="action" type="xsd:string"/>
      <!-- An optional boolean expression controlling whether the action should be available
           in this specific context when in read-only mode.  This is ignored if in edit mode
           or if the action is null.  This attribute will be deprecated in a future release,
           please use the 'available' attribute instead.  To disable action in readonly mode,
           you can set available=&quot;CurrentLocation.InEditMode || &lt;action-available-condition&gt;&quot; -->
      <xsd:attribute name="actionAvailable" type="xsd:string"/>
      <!-- Alignment of the widget ("left", "right", or "center") -->
      <xsd:attribute name="align" type="WidgetAlignment"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- Boolean expression which, if false, grays out the widget and all its children -->
      <xsd:attribute name="available" type="xsd:string"/>
      <!-- If true then the label is displayed in bold text. -->
      <xsd:attribute name="boldLabel" type="xsd:boolean" default="false"/>
      <!-- If true then the value is displayed in bold text when read-only. -->
      <xsd:attribute name="boldValue" type="xsd:boolean" default="false"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- The confirmation message to show when "showConfirmMessage" is set. If not specified,
           a standard message will be used. -->
      <xsd:attribute name="confirmMessage" type="xsd:string"/>
      <!-- A Gosu expression used to convert the value picked from a popup before set it into
           the model value of this widget. The picked value will be exposed as a symbol with
           the name "PickedValue" -->
      <xsd:attribute name="conversionExpression" type="xsd:string"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- Boolean expression which, if false, makes this widget and all its children read-only -->
      <xsd:attribute name="editable" type="xsd:string" default="false"/>
      <!-- Expression giving the label of the "false" option -->
      <xsd:attribute name="falseLabel" type="xsd:string"/>
      <!-- If true, instead of showing a hierarchical menu, the widget will show a single menu
           with sub-menus grouped under headers. -->
      <xsd:attribute name="flatten" type="xsd:boolean" default="false"/>
      <!-- An optional boolean expression, if returns true, this widget will get focus when start
           editing the containing location. -->
      <xsd:attribute name="focusOnStartEditing" type="xsd:string"/>
      <!-- How the value is formatted; options include "general", "currency", and "email".  See
           the formatType enumeration. -->
      <xsd:attribute name="formatType" type="FormatType"/>
      <!-- A Gosu expression which, if defined, is evaluated to create help info that guides
           the user to edit this widget. The help info will show up if the user hovers the mouse
           over or focuses on the widget, when the widget is in edit mode. -->
      <xsd:attribute name="helpText" type="xsd:string"/>
      <!-- If false, menu items under this input will be shown even when the input is not editable. -->
      <xsd:attribute name="hideChildrenIfReadOnly" type="xsd:boolean" default="true"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- Optional icon to show in readonly mode when the underlying value is true -->
      <xsd:attribute name="icon" type="xsd:string"/>
      <!-- Color of the icon. If not set will default to its font color. -->
      <xsd:attribute name="iconColor" type="xsd:string"/>
      <!-- An enumeration of icon types that determine what the 'icon' property on the widget
           is referring to. -->
      <xsd:attribute name="iconType" type="IconTypeEnum"/>
      <!-- Reference ID of the widget.  This does not have to be globally unique; it only has
           to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <!-- A Gosu expression that converts the presentation value to a model value. The presentation
           value string is exposed to this expression as the symbol "VALUE". -->
      <xsd:attribute name="inputConversion" type="xsd:string"/>
      <!-- Label to render. -->
      <xsd:attribute name="label" type="xsd:string"/>
      <!-- Boolean expression which, if true, causes the label portion of the Input to be rendered
           above the value -->
      <xsd:attribute name="labelAbove" type="xsd:string" default="false"/>
      <!-- Custom extension CSS style class to apply to the label. -->
      <xsd:attribute name="labelStyleClass" type="xsd:string"/>
      <!-- The number of child MenuItems to show in each column.  If not specified, all children
           will be shown in a single column. -->
      <xsd:attribute name="numEntriesPerColumn" type="xsd:integer" default="0"/>
      <!-- Gosu expression to be executed after the value is set from a picker. -->
      <xsd:attribute name="onPick" type="xsd:string"/>
      <!-- A Gosu expression that converts the model value to a presentation value. The model
           value is exposed to this expression as the symbol "VALUE". The return type of this
           expression must be String. -->
      <xsd:attribute name="outputConversion" type="xsd:string"/>
      <!-- A Gosu expression used to validate user value before setting it to the model. This
           expression can access any symbols available to this widget, and a "VALUE" symbol that
           represents the user value. If this expression returns null, the user value will be
           set into the model. Otherwise, an error message containing the result of the expression
           will be displayed on the page, the value will not be set into the model, and no actions
           can be performed until the error is corrected. -->
      <xsd:attribute name="requestValidationExpression" type="xsd:string"/>
      <!-- If true, then the cell must be filled out by the user -->
      <xsd:attribute name="required" type="xsd:string"/>
      <!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * Deprecated.
           DO NOT USE.                                           * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
           Consider using "onChange/onPick/inputConversion/outputConversion" where available.
           If specified and the Input is editable, then any new value of the Input is written
           to this expression (Gosu by default) instead of to "value".  The new value is exposed
           as the symbol "VALUE".  For instance if your value expression is "Foo.getSomething()"
           then it can't be written to since it's not an L-value; so you could specify a setter
           expression along the lines of "Foo.setSomething(VALUE)" Warning: if you use this attribute
           many pebbles features will not work, including but not limited to: * Correct automatic
           detection of the state of the updated data * Correct automatic detection of the editability
           of the data * Correct automatic detection of the maximum size of a text input -->
      <xsd:attribute name="setter" type="xsd:string"/>
      <!-- Optional keyboard shortcut character in the form of "Q" or "ShiftQ"; the "Alt" key
           is implicit. This is only applicable when this widget has an "action" specified and
           the value is not being edited. -->
      <xsd:attribute name="shortcut" type="xsd:string"/>
      <!-- Boolean expression which determines whether or not to show a confirmation message
           when the field value is changed directly from the UI. It's NOT applicable when the
           value is changed indirectly, for example, as a result of client reflection. -->
      <xsd:attribute name="showConfirmMessage" type="xsd:string"/>
      <!-- If true, the contents of the Widget will be stacked vertically. -->
      <xsd:attribute name="stacked" type="xsd:string" default="false"/>
      <!-- An optional attribute, if set, defer sub menu generation until user tries to open
           the menu. DO NOT set this flag unless the sub menu of this widget is very expensive
           to generate. Setting this flag will reduce time to load the page, however require
           fetching additional info from server in the background, when the menu gets opened
           for the first time after page loaded. -->
      <xsd:attribute name="subMenuOnDemand" type="xsd:boolean" default="false"/>
      <!-- Expression giving the label of the "true" option -->
      <xsd:attribute name="trueLabel" type="xsd:string"/>
      <!-- A Gosu expression to run before committing the record. This expression can refer to
           any symbols available to this widget. If this expression returns null, the validation
           is considered successful; otherwise, the result of this expression will be displayed
           as an error and the record will not be committed. -->
      <xsd:attribute name="validationExpression" type="xsd:string"/>
      <!-- The value this Input binds to as an Expression.  If the Input is editable then this
           value is both read from and written to (unless "setter" is defined). -->
      <xsd:attribute name="value" type="xsd:string" use="required"/>
      <!-- CSS max-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionMaxWidth" type="xsd:string"/>
      <!-- CSS min-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionMinWidth" type="xsd:string"/>
      <!-- CSS width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionWidth" type="xsd:string"/>
      <!-- The type of the value expression. -->
      <xsd:attribute name="valueType" type="xsd:string" default="java.lang.Boolean"/>
      <!-- If used instead of "editable", specifies whether the Input is editable when data is
           being created -->
      <xsd:attribute name="visible" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- An Input which precedes its value with a bullet point -->
  <xsd:element name="BulletPointTextInput">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="LayoutConfig" minOccurs="0" maxOccurs="1"/>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="AddMenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="AddMenuItemIterator" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemDivider" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemIterator" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemSetRef" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemTree" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PickerMenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PostOnChange" minOccurs="0" maxOccurs="1"/>
          <xsd:element ref="Reflect" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="SearchItem" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:choice>
      </xsd:sequence>
      <!-- An optional action to take when the user clicks the value of this widget when the
           value is not being edited. See ActionBase for list of available action prefixes. When
           specified, the value of this widget will be rendered as a link when the value is not
           being edited. -->
      <xsd:attribute name="action" type="xsd:string"/>
      <!-- An optional boolean expression controlling whether the action should be available
           in this specific context when in read-only mode.  This is ignored if in edit mode
           or if the action is null.  This attribute will be deprecated in a future release,
           please use the 'available' attribute instead.  To disable action in readonly mode,
           you can set available=&quot;CurrentLocation.InEditMode || &lt;action-available-condition&gt;&quot; -->
      <xsd:attribute name="actionAvailable" type="xsd:string"/>
      <!-- Alignment of the widget ("left", "right", or "center") -->
      <xsd:attribute name="align" type="WidgetAlignment"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- Optional. Expression that returns an gw.api.contact.AutocompleteHandler which produces
           auto complete suggestions for this widget. USE WITH CAUTION: If specified, the handler
           will be called at server side on each user key stroke. -->
      <xsd:attribute name="autoComplete" type="xsd:string"/>
      <!-- An optional attribute to specify additional arguments to pass to the "autoComplete"
           handler, if exists.
         (You don't need to specify the id of this widget as part
           of this attribute, because the value of this widget
         is passed to the handler
           by default; If the id of this widget is specified, the argument value passed to the

                   handler will be null, since the value of this widget has not been fully specified
           when the handler is invoked.)
         Refers to the "id" attribute of other value
           widget on page. Multiple ids can be separated by ",".
         If specified, the latest
           value of these widgets will be passed to the autoComplete handler
         when retrieving
           auto complete info. -->
      <xsd:attribute name="autoCompleteArgIds" type="xsd:string"/>
      <!-- If specified, delays autocomplete functionality until the user has entered the specified
           number of characters. -->
      <xsd:attribute name="autoCompleteTriggerChars" type="xsd:integer"/>
      <!-- Boolean expression which, if false, grays out the widget and all its children -->
      <xsd:attribute name="available" type="xsd:string"/>
      <!-- If true then the label is displayed in bold text. -->
      <xsd:attribute name="boldLabel" type="xsd:boolean" default="false"/>
      <!-- If true then the value is displayed in bold text when read-only. -->
      <xsd:attribute name="boldValue" type="xsd:boolean" default="false"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- The confirmation message to show when "showConfirmMessage" is set. If not specified,
           a standard message will be used. -->
      <xsd:attribute name="confirmMessage" type="xsd:string"/>
      <!-- A Gosu expression used to convert the value picked from a popup before set it into
           the model value of this widget. The picked value will be exposed as a symbol with
           the name "PickedValue" -->
      <xsd:attribute name="conversionExpression" type="xsd:string"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- Boolean expression which, if false, makes this widget and all its children read-only -->
      <xsd:attribute name="editable" type="xsd:string" default="false"/>
      <!-- If true, enables html markup in the autocomplete suggestions for this text input by
           means of the following special tags: [i]italic[/i] - makes text italic, [b]bold[/b]
           - makes text bold and [hl]highlighted[/hl] - highlights the text -->
      <xsd:attribute name="enableAutoCompleteMarkup" type="xsd:boolean" default="false"/>
      <!-- If true, instead of showing a hierarchical menu, the widget will show a single menu
           with sub-menus grouped under headers. -->
      <xsd:attribute name="flatten" type="xsd:boolean" default="false"/>
      <!-- An optional boolean expression, if returns true, this widget will get focus when start
           editing the containing location. -->
      <xsd:attribute name="focusOnStartEditing" type="xsd:string"/>
      <!-- An optional expression that returns a format pattern, which must conform to the number
           format defined in java.text.DecimalFormat. When the underlying data type is not a
           Number, only the prefix and suffix of the pattern will be applied. For example, "#.#%"
           formats the Number value as percentage with up to 1 decimal digit. -->
      <xsd:attribute name="format" type="xsd:string"/>
      <!-- How the value is formatted; options include "general", "currency", and "email".  See
           the formatType enumeration. -->
      <xsd:attribute name="formatType" type="FormatType"/>
      <!-- A Gosu expression which, if defined, is evaluated to create help info that guides
           the user to edit this widget. The help info will show up if the user hovers the mouse
           over or focuses on the widget, when the widget is in edit mode. -->
      <xsd:attribute name="helpText" type="xsd:string"/>
      <!-- If false, menu items under this input will be shown even when the input is not editable. -->
      <xsd:attribute name="hideChildrenIfReadOnly" type="xsd:boolean" default="true"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- Reference ID of the widget.  This does not have to be globally unique; it only has
           to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <!-- A Gosu expression that converts the presentation value to a model value. The presentation
           value string is exposed to this expression as the symbol "VALUE". -->
      <xsd:attribute name="inputConversion" type="xsd:string"/>
      <!-- A gosu expression that returns a string to use as the input mask. If not specified,
           the input mask (if any) specified on the value's field validator will be used. This
           field should only be necessary in cases where the data type has no mask or where the
           mask needs to be conditional. The input mask returned should be of the same format
           as a mask specified using the input-mask attribute on a field validator (use # for
           wildcards). A mask that contains no wildcards will just be used as a placeholder value.
           The input mask is recalculated on every render, which means that if the mask is conditional
           and dependent on other data on this page that it can change from one request to the
           next. -->
      <xsd:attribute name="inputMask" type="xsd:string"/>
      <!-- Label to render. -->
      <xsd:attribute name="label" type="xsd:string"/>
      <!-- Boolean expression which, if true, causes the label portion of the Input to be rendered
           above the value -->
      <xsd:attribute name="labelAbove" type="xsd:string" default="false"/>
      <!-- Custom extension CSS style class to apply to the label. -->
      <xsd:attribute name="labelStyleClass" type="xsd:string"/>
      <!-- The maximum number of characters allowed for an input field. -->
      <xsd:attribute name="maxChars" type="xsd:integer" default="0"/>
      <!-- The number of child MenuItems to show in each column.  If not specified, all children
           will be shown in a single column. -->
      <xsd:attribute name="numEntriesPerColumn" type="xsd:integer" default="0"/>
      <!-- Gosu expression to be executed after the value is set from a picker. -->
      <xsd:attribute name="onPick" type="xsd:string"/>
      <!-- A Gosu expression that converts the model value to a presentation value. The model
           value is exposed to this expression as the symbol "VALUE". The return type of this
           expression must be String. -->
      <xsd:attribute name="outputConversion" type="xsd:string"/>
      <!-- A Gosu expression that returns a regular expression string to validate the user input.
            If not specified, the regular expression (if any) specified on the value's field
           validator will be used.  This field should only be necessary in cases where the data
           type has no regular expression or where it needs to be conditional. The value returned
           should be of the same format as a regular expression specified on a field validator.
            This property is recalculated on every render, which means that if the regular expression
           is conditional and dependent on other data on this page that it can change from one
           request to the next. -->
      <xsd:attribute name="regex" type="xsd:string"/>
      <!-- A Gosu expression used to validate user value before setting it to the model. This
           expression can access any symbols available to this widget, and a "VALUE" symbol that
           represents the user value. If this expression returns null, the user value will be
           set into the model. Otherwise, an error message containing the result of the expression
           will be displayed on the page, the value will not be set into the model, and no actions
           can be performed until the error is corrected. -->
      <xsd:attribute name="requestValidationExpression" type="xsd:string"/>
      <!-- If true, then the cell must be filled out by the user -->
      <xsd:attribute name="required" type="xsd:string"/>
      <!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * Deprecated.
           DO NOT USE.                                           * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
           Consider using "onChange/onPick/inputConversion/outputConversion" where available.
           If specified and the Input is editable, then any new value of the Input is written
           to this expression (Gosu by default) instead of to "value".  The new value is exposed
           as the symbol "VALUE".  For instance if your value expression is "Foo.getSomething()"
           then it can't be written to since it's not an L-value; so you could specify a setter
           expression along the lines of "Foo.setSomething(VALUE)" Warning: if you use this attribute
           many pebbles features will not work, including but not limited to: * Correct automatic
           detection of the state of the updated data * Correct automatic detection of the editability
           of the data * Correct automatic detection of the maximum size of a text input -->
      <xsd:attribute name="setter" type="xsd:string"/>
      <!-- Optional keyboard shortcut character in the form of "Q" or "ShiftQ"; the "Alt" key
           is implicit. This is only applicable when this widget has an "action" specified and
           the value is not being edited. -->
      <xsd:attribute name="shortcut" type="xsd:string"/>
      <!-- Boolean expression which determines whether or not to show a confirmation message
           when the field value is changed directly from the UI. It's NOT applicable when the
           value is changed indirectly, for example, as a result of client reflection. -->
      <xsd:attribute name="showConfirmMessage" type="xsd:string"/>
      <!-- An optional attribute, if set, defer sub menu generation until user tries to open
           the menu. DO NOT set this flag unless the sub menu of this widget is very expensive
           to generate. Setting this flag will reduce time to load the page, however require
           fetching additional info from server in the background, when the menu gets opened
           for the first time after page loaded. -->
      <xsd:attribute name="subMenuOnDemand" type="xsd:boolean" default="false"/>
      <!-- If set to a type other than 'all', will prevent the user from inputting certain types
           of characters on the client on a per character basis. Defaults to 'defaultForType'.
           Can be used in conjunction with the Input Mask property. For instance, a US phone
           number client mask could be implemented by setting this property to 'numeric' and
           the input mask to '+1(###)###-####. Some value widgets, like passwords or dates, may
           modify or ignore this property. This property has no effect on server or database
           level validation of data or input; meaning, an authenticated user could choose to
           manually submit a form with invalid data that would bypass this check. For database
           level validation see the 'regex' property. -->
      <xsd:attribute name="userInputRestriction" type="InputRestrictionType" default="defaultForType"/>
      <!-- A Gosu expression to run before committing the record. This expression can refer to
           any symbols available to this widget. If this expression returns null, the validation
           is considered successful; otherwise, the result of this expression will be displayed
           as an error and the record will not be committed. -->
      <xsd:attribute name="validationExpression" type="xsd:string"/>
      <!-- The value this Input binds to as an Expression.  If the Input is editable then this
           value is both read from and written to (unless "setter" is defined). -->
      <xsd:attribute name="value" type="xsd:string" use="required"/>
      <!-- CSS max-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionMaxWidth" type="xsd:string"/>
      <!-- CSS min-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionMinWidth" type="xsd:string"/>
      <!-- CSS width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionWidth" type="xsd:string"/>
      <!-- The type of the value expression. -->
      <xsd:attribute name="valueType" type="xsd:string" default="java.lang.String"/>
      <!-- If used instead of "editable", specifies whether the Input is editable when data is
           being created -->
      <xsd:attribute name="visible" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- A cell which contains a single button.  Like ToolbarButton, this button may have MenuItems
       underneath it, which creates a drop-down menu under the button. -->
  <xsd:element name="ButtonCell">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="Reflect" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element ref="ColumnFooter" minOccurs="0" maxOccurs="1"/>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="AddMenuItem"/>
          <xsd:element ref="AddMenuItemIterator"/>
          <xsd:element ref="MenuItem"/>
          <xsd:element ref="MenuItemDivider"/>
          <xsd:element ref="MenuItemIterator"/>
          <xsd:element ref="MenuItemSetRef"/>
          <xsd:element ref="MenuItemTree"/>
          <xsd:element ref="PickerMenuItem"/>
          <xsd:element ref="SearchItem"/>
        </xsd:choice>
      </xsd:sequence>
      <!-- The action to invoke when this button is clicked by the user. -->
      <xsd:attribute name="action" type="xsd:string"/>
      <!-- Specifies the alignment of this cell. Valid values: "left", "right", or "center".
           If no value is specified, the default alignment is determined by the value type ("center"
           for boolean values; "right" for numeric values; "left" for other value types). -->
      <xsd:attribute name="align" type="WidgetAlignment"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- Boolean expression which, if false, grays out the widget and all its children -->
      <xsd:attribute name="available" type="xsd:string"/>
      <!-- If true, renders the cell contents in bold text. Defaults to false. -->
      <xsd:attribute name="bold" type="xsd:boolean" default="false"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- The HTML colspan attribute, lets this cell span across multiple columns of other rows.
           Useful for generating a "group header" row above a RowIterator. The default value
           is 1. A value greater than 1 is only allowed when the containing row is not iterated
           by a RowIterator. -->
      <xsd:attribute name="colspan" type="xsd:integer"/>
      <!-- If true, the button is the default for the page, and will be "clicked" when the user
           presses Enter -->
      <xsd:attribute name="default" type="xsd:boolean" default="false"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- Should be 'true', 'inline' or 'attachment' if the action taken by this widget is to
           download a file. -->
      <xsd:attribute name="download" type="Download"/>
      <!-- If true, allows the user to sort the values in the column by clicking on the header.
            Only applicable when the containing row is iterated by a RowIterator. -->
      <xsd:attribute name="enableSort" type="xsd:boolean" default="false"/>
      <!-- If true, instead of showing a hierarchical menu, the widget will show a single menu
           with sub-menus grouped under headers. -->
      <xsd:attribute name="flatten" type="xsd:boolean" default="false"/>
      <!-- An optional expression. If specified, a footer cell with the specified value will
           be rendered for this column. Only applicable when the containing Row is iterated by
           a RowIterator. Not allowed when "footerSumValue" is specified. -->
      <xsd:attribute name="footerLabel" type="xsd:string"/>
      <!-- An optional expression, if specified, will be used as format pattern for the footer
           sum value. Normally not specified, so that the "format" and\or "formatType" of the
           cell value will be applied to footer sum value. Only applicable when "footerSumValue"
           is specified. The result of this expression must conform to the number format defined
           in java.text.DecimalFormat. -->
      <xsd:attribute name="footerSumFormat" type="xsd:string"/>
      <!-- An optional Numeric expression. If specified, a footer cell that sums the specified
           value for all cells in this column will be rendered. Pagination of the list does not
           affect the sum value. Only applicable when the containing row is iterated by a RowIterator.
           Not allowed when "footerLabel" is specified. -->
      <xsd:attribute name="footerSumValue" type="xsd:string"/>
      <!-- If true, this Cell and any other grow-enabled Cell will expand to fill remaining space
           in the ListViewPanel. Only applicable when the ListView is set to stretch. -->
      <xsd:attribute name="grow" type="xsd:boolean" default="false"/>
      <!-- CSS height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="height" type="xsd:string"/>
      <!-- If true, this button will not be shown in read-only mode if it has child MenuItems
           but no action. -->
      <xsd:attribute name="hideChildrenIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- If set to true, this widget will not be displayed when the action is disabled. Default
           to true. -->
      <xsd:attribute name="hideIfDisabled" type="xsd:string" default="true"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- Refers to an image file. If defined, makes this an icon cell. The "value" attribute
           should be a boolean expression describing whether the icon is visible in a given row. -->
      <xsd:attribute name="icon" type="xsd:string"/>
      <!-- Color of the icon. If not set will default to its font color. -->
      <xsd:attribute name="iconColor" type="xsd:string"/>
      <!-- An enumeration of icon types that determine what the 'icon' property on the widget
           is referring to. -->
      <xsd:attribute name="iconType" type="IconTypeEnum"/>
      <!-- Reference ID of the widget.  This does not have to be globally unique; it only has
           to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <!-- An optional expression. If specified, a header cell with the specified value will
           be rendered for this column. Only applicable when the containing row is iterated by
           a RowIterator. -->
      <xsd:attribute name="label" type="xsd:string"/>
      <!-- CSS max-height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="maxHeight" type="xsd:string"/>
      <!-- CSS max-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="maxWidth" type="xsd:string"/>
      <!-- CSS min-height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="minHeight" type="xsd:string"/>
      <!-- CSS min-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="minWidth" type="xsd:string"/>
      <!-- The number of child MenuItems to show in each column.  If not specified, all children
           will be shown in a single column. -->
      <xsd:attribute name="numEntriesPerColumn" type="xsd:integer" default="0"/>
      <!-- Relative width when printing to PDF. All widths are relative to the widths of the
           other columns in the ListView -->
      <xsd:attribute name="printWidth" type="xsd:string" default="1"/>
      <!-- Keyboard shortcut character in the form of "Q" or "ShiftQ"; the "Alt" key is implicit -->
      <xsd:attribute name="shortcut" type="xsd:string"/>
      <!-- If true, shows the icon defined by "icon" in the header cell for this column. The
           default value is true. -->
      <xsd:attribute name="showHeaderIcon" type="xsd:boolean" default="true"/>
      <!-- An optional comma-separated sequence of Expressions, each of which is assumed to be
           a dot-delimited path, the value by which this column will be sorted if the user clicks
           on the header cell. -->
      <xsd:attribute name="sortBy" type="xsd:string"/>
      <!-- Either "ascending" or "descending" -->
      <xsd:attribute name="sortDirection" type="WidgetSortDirection" default="ascending"/>
      <!-- The priority of sorting relative to other sorting elements like IteratorSort and Cell.
           The lower the number, the higher the priority.  The highest priority is "1" -->
      <xsd:attribute name="sortOrder" type="xsd:integer" default="0"/>
      <!-- Extra "alt" text to show when the user hovers the mouse over the header cell of this
           column. -->
      <xsd:attribute name="tooltip" type="xsd:string"/>
      <!-- The value to be displayed on the button. -->
      <xsd:attribute name="value" type="xsd:string" use="required"/>
      <!-- The type of the value expression. -->
      <xsd:attribute name="valueType" type="xsd:string" default="java.lang.String"/>
      <!-- Specifies the vertical alignment of this cell. Valid values: "top", "middle", or "bottom".
           If no value is specified, the default alignment is determined by the cell type ("top"
           for Text Areas and Format Cells, "middle" for buttons and icons). -->
      <xsd:attribute name="verticalAlign" type="WidgetVerticalAlignment"/>
      <!-- Boolean expression which, if false, completely hides the widget and all its children -->
      <xsd:attribute name="visible" type="xsd:string"/>
      <!-- CSS width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="width" type="xsd:string"/>
      <!-- If default, defers to FormatType to decide whether to wrap or not.  If true, allows
           cell content to wrap. -->
      <xsd:attribute name="wrap" type="WrapType" default="default"/>
      <!-- If true, allows Header Cell text content to wrap. Defaults to true. -->
      <xsd:attribute name="wrapLabel" type="xsd:boolean" default="false"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- An input which contains a single button.  Like ToolbarButton, this button may have
       MenuItems underneath it, which creates a drop-down menu under the button. -->
  <xsd:element name="ButtonInput">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="LayoutConfig" minOccurs="0" maxOccurs="1"/>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="AddMenuItem"/>
          <xsd:element ref="AddMenuItemIterator"/>
          <xsd:element ref="MenuItem"/>
          <xsd:element ref="MenuItemDivider"/>
          <xsd:element ref="MenuItemIterator"/>
          <xsd:element ref="MenuItemSetRef"/>
          <xsd:element ref="MenuItemTree"/>
          <xsd:element ref="PickerMenuItem"/>
          <xsd:element ref="SearchItem"/>
        </xsd:choice>
      </xsd:sequence>
      <!-- The action to invoke when this button is clicked by the user. -->
      <xsd:attribute name="action" type="xsd:string"/>
      <!-- Alignment of the widget ("left", "right", or "center") -->
      <xsd:attribute name="align" type="WidgetAlignment"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- Boolean expression which, if false, grays out the widget and all its children -->
      <xsd:attribute name="available" type="xsd:string"/>
      <!-- If true then the label is displayed in bold text. -->
      <xsd:attribute name="boldLabel" type="xsd:boolean" default="false"/>
      <!-- If true then the value is displayed in bold text when read-only. -->
      <xsd:attribute name="boldValue" type="xsd:boolean" default="false"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- If true, the button is the default for the page, and will be "clicked" when the user
           presses Enter -->
      <xsd:attribute name="default" type="xsd:boolean" default="false"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- Should be 'true', 'inline' or 'attachment' if the action taken by this widget is to
           download a file. -->
      <xsd:attribute name="download" type="Download"/>
      <!-- If true, instead of showing a hierarchical menu, the widget will show a single menu
           with sub-menus grouped under headers. -->
      <xsd:attribute name="flatten" type="xsd:boolean" default="false"/>
      <!-- If true, this button will not be shown in read-only mode if it has child MenuItems
           but no action. -->
      <xsd:attribute name="hideChildrenIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- If set to true, this widget will not be displayed when the action is disabled. Default
           to true. -->
      <xsd:attribute name="hideIfDisabled" type="xsd:string" default="true"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- The name of a .png file, or .svg file, or font glyph. The Widget's iconType determines
           which one. -->
      <xsd:attribute name="icon" type="xsd:string"/>
      <!-- Color of the icon. If not set will default to its font color. -->
      <xsd:attribute name="iconColor" type="xsd:string"/>
      <!-- An enumeration of icon types that determine what the 'icon' property on the widget
           is referring to. -->
      <xsd:attribute name="iconType" type="IconTypeEnum"/>
      <!-- Reference ID of the widget.  This does not have to be globally unique; it only has
           to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <!-- Label to render. -->
      <xsd:attribute name="label" type="xsd:string"/>
      <!-- Boolean expression which, if true, causes the label portion of the Input to be rendered
           above the value -->
      <xsd:attribute name="labelAbove" type="xsd:string" default="false"/>
      <!-- Custom extension CSS style class to apply to the label. -->
      <xsd:attribute name="labelStyleClass" type="xsd:string"/>
      <!-- The number of child MenuItems to show in each column.  If not specified, all children
           will be shown in a single column. -->
      <xsd:attribute name="numEntriesPerColumn" type="xsd:integer" default="0"/>
      <!-- Keyboard shortcut character in the form of "Q" or "ShiftQ"; the "Alt" key is implicit -->
      <xsd:attribute name="shortcut" type="xsd:string"/>
      <!-- The value to be displayed on the button. -->
      <xsd:attribute name="value" type="xsd:string" use="required"/>
      <!-- CSS max-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionMaxWidth" type="xsd:string"/>
      <!-- CSS min-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionMinWidth" type="xsd:string"/>
      <!-- CSS width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionWidth" type="xsd:string"/>
      <!-- The type of the value expression. -->
      <xsd:attribute name="valueType" type="xsd:string" default="java.lang.String"/>
      <!-- If used instead of "editable", specifies whether the Input is editable when data is
           being created -->
      <xsd:attribute name="visible" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- A Calendar with month and week views. -->
  <xsd:element name="Calendar">
    <xsd:complexType>
      <xsd:choice minOccurs="0" maxOccurs="unbounded"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <xsd:attribute name="calendarSource" type="xsd:string" use="required"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <xsd:attribute name="context" type="xsd:string"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- (Optional) reference ID of the widget.  This does not have to be globally unique;
           it only has to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- Used within a CardViewPanel to contain the content of one card -->
  <xsd:element name="Card">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="AbstractTableLayout" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="CardViewPanel" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ChartPanel" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="DetailViewPanel" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="EmbeddedPanel" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="Image" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ImageAction" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ImageMediaObject" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ListDetailPanel" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ListViewPanel" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MediaGallery" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MediaUploader" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PanelColumn" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PanelDivider" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PanelIterator" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PanelRef" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PanelRow" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PanelSet" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="SearchPanel" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="Spacer" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="TemplatePanel" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="TreeViewPanel" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:choice>
      </xsd:sequence>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- The name of a .png file, or .svg file, or font glyph. The Widget's iconType determines
           which one. -->
      <xsd:attribute name="icon" type="xsd:string"/>
      <!-- Color of the icon. If not set will default to its font color. -->
      <xsd:attribute name="iconColor" type="xsd:string"/>
      <!-- An enumeration of icon types that determine what the 'icon' property on the widget
           is referring to. -->
      <xsd:attribute name="iconType" type="IconTypeEnum"/>
      <!-- Reference ID of the widget.  This does not have to be globally unique; it only has
           to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <!-- An optional expression that is executed when this card is selected. -->
      <xsd:attribute name="onSelect" type="xsd:string"/>
      <!-- An optional Boolean exprssion which, if returns true, will select this card upon entering
           the enclosing CardView (e.g., when enter the Page, or select a new row in the ListDetailPanel
           that contains this CardView). -->
      <xsd:attribute name="selectOnEnter" type="xsd:string"/>
      <!-- If true, this card will be selected when a new entry is added to the parent ListDetailPanel
           (if any). Default to false. When the ListDetailPanel contains multiple cards but data
           of a new list entry can only be entered from one of the cards, you may want to set
           the flag on that card so that the user can start entering data right away. -->
      <xsd:attribute name="selectOnNewEntry" type="xsd:boolean" default="false"/>
      <!-- Optional keyboard shortcut character in the form of "Q" or "ShiftQ"; the "Alt" key
           is implicit. If specifed, this will be used for the card's tab in the CardView tab
           bar. -->
      <xsd:attribute name="shortcut" type="xsd:string"/>
      <!-- The Card's title, used in the card's tab in the CardView tab bar. -->
      <xsd:attribute name="title" type="xsd:string" use="required"/>
      <!-- Boolean expression which, if false, completely hides the widget and all its children -->
      <xsd:attribute name="visible" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- Iterates an arbitrary number of cards -->
  <xsd:element name="CardIterator">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="IteratorSort" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="Require" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="Variable" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:choice>
        <xsd:element ref="Card" minOccurs="1" maxOccurs="1"/>
      </xsd:sequence>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- As each element in the array result of "value" is displayed, it is exposed as a symbol
           with the name "elementName", which the contents of this iterator can refer to -->
      <xsd:attribute name="elementName" type="xsd:string" use="required"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- (Optional) reference ID of the widget.  This does not have to be globally unique;
           it only has to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string"/>
      <!-- Lets you manually specify the type of element exposed as "elementName".  This is useful
           if you have special knowledge about the type of element returned by "value": for example,
           if the field referred to returns an array of Contacts but you happen to know that
           they are guaranteed to all be Persons -->
      <xsd:attribute name="type" type="xsd:string"/>
      <!-- A Gosu expression that evaluates to the elements over which to iterate. Must evaluate
           to an Object array or a IQueryBeanResult. -->
      <xsd:attribute name="value" type="xsd:string" use="required"/>
      <!-- The type of the value expression. -->
      <xsd:attribute name="valueType" type="xsd:string" use="required"/>
      <!-- Boolean expression which, if false, completely hides the widget and all its children -->
      <xsd:attribute name="visible" type="xsd:string" default="true"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- A collection of "Cards", or sub-panels, of which only one card at a time is visible.
        A set of tabs are shown for switching between cards. -->
  <xsd:element name="CardViewPanel">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="Expose" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ExposeIterator" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ExposeRowTree" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ReferencedWidget" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="Require" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="Variable" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:choice>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="Card" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="CardIterator" minOccurs="0" maxOccurs="1"/>
        </xsd:choice>
        <xsd:element ref="Code" minOccurs="0" maxOccurs="1"/>
      </xsd:sequence>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- If true, the Widget will have a border around it. Purely a visual effect. -->
      <xsd:attribute name="border" type="xsd:boolean" default="false"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- If true, hides the tab when no more than one card is visible. Default to false. -->
      <xsd:attribute name="hideTabIfSingle" type="xsd:boolean" default="false"/>
      <!-- (Optional) reference ID of the widget.  This does not have to be globally unique;
           it only has to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string"/>
      <!-- If true, independent of 'panel inner spacing', the container will left indent its
           children by a fixed amount. This is useful for displaying nested data throughout a
           page. Purely a visual effect. -->
      <xsd:attribute name="leftIndent" type="xsd:boolean" default="false"/>
      <!-- An optional String which, if specified, means that any element dynamically including
           this widget must specify the same mode.  There is also a special mode "default" you
           can use which means "Use this widget if no widget with the specified mode exists".
            You can also have this widget match more than one mode by separating mode strings
           with a | character. -->
      <xsd:attribute name="mode" type="xsd:string"/>
      <!-- In general, determines the amount of spacing INSIDE of the Panel in all 4 directions:
           top, right, bottom, left. However, different Panels may have requirements that prevent
           all 4 directions from being modified. -->
      <xsd:attribute name="panelInnerSpacing" type="WidgetSpacing" default="none"/>
      <!-- In general, determines the amount of spacing OUTSIDE of the Panel in all 4 directions:
           top, right, bottom, left. However, different Panels may have requirements that prevent
           all 4 directions from being modified. -->
      <xsd:attribute name="panelOuterSpacing" type="WidgetSpacing" default="none"/>
      <!-- The style of the Panel. In general, this refers to the background color, but some
           styles can change other aspects such as font color, spacing, or filters. -->
      <xsd:attribute name="panelStyle" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- Creates as many copies of its Cell content as there are components in the array referenced
       by "value".  Supplies the component value to the created content as "elementName".
       Used inside a Row. -->
  <xsd:element name="CellIterator">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="IteratorSort" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element ref="ToolbarFlag" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:choice minOccurs="1" maxOccurs="unbounded">
          <xsd:element ref="AddressBookContactCell"/>
          <xsd:element ref="AltGroupCell"/>
          <xsd:element ref="AltUserCell"/>
          <xsd:element ref="AssigneeCell"/>
          <xsd:element ref="BarCell"/>
          <xsd:element ref="BooleanRadioCell"/>
          <xsd:element ref="ButtonCell"/>
          <xsd:element ref="CellIterator"/>
          <xsd:element ref="CheckBoxCell"/>
          <xsd:element ref="ClaimAssociationsCell"/>
          <xsd:element ref="CurrencyCell"/>
          <xsd:element ref="DateCell"/>
          <xsd:element ref="EmptyCell"/>
          <xsd:element ref="FileCell"/>
          <xsd:element ref="FormatCell"/>
          <xsd:element ref="GroupCell"/>
          <xsd:element ref="ImageActionCell"/>
          <xsd:element ref="ImageCell"/>
          <xsd:element ref="IndustryCodeCell"/>
          <xsd:element ref="LinkCell"/>
          <xsd:element ref="ModalCellRef"/>
          <xsd:element ref="ModifierCell"/>
          <xsd:element ref="MonetaryAmountCell"/>
          <xsd:element ref="OrgCell"/>
          <xsd:element ref="PickerCell"/>
          <xsd:element ref="PrivacyCell"/>
          <xsd:element ref="RadioButtonCell"/>
          <xsd:element ref="RangeCell"/>
          <xsd:element ref="RangeRadioCell"/>
          <xsd:element ref="RiskClassCell"/>
          <xsd:element ref="TextAreaCell"/>
          <xsd:element ref="TextCell"/>
          <xsd:element ref="TypeKeyCell"/>
          <xsd:element ref="UserCell"/>
        </xsd:choice>
      </xsd:sequence>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- As each element in the array result of "value" is displayed, it is exposed as a symbol
           with the name "elementName", which the contents of this iterator can refer to -->
      <xsd:attribute name="elementName" type="xsd:string" use="required"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- (Optional) reference ID of the widget.  This does not have to be globally unique;
           it only has to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string"/>
      <!-- Lets you manually specify the type of element exposed as "elementName".  This is useful
           if you have special knowledge about the type of element returned by "value": for example,
           if the field referred to returns an array of Contacts but you happen to know that
           they are guaranteed to all be Persons -->
      <xsd:attribute name="type" type="xsd:string"/>
      <!-- A Gosu expression that evaluates to the elements over which to iterate. Must evaluate
           to an Object array or a IQueryBeanResult. -->
      <xsd:attribute name="value" type="xsd:string" use="required"/>
      <!-- The type of the value expression. -->
      <xsd:attribute name="valueType" type="xsd:string" use="required"/>
    </xsd:complexType>
  </xsd:element>
  
  <xsd:element name="ChartPanel">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="Require" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="Variable" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:choice>
        <xsd:element ref="DomainAxis" minOccurs="0" maxOccurs="1"/>
        <xsd:element ref="RangeAxis" minOccurs="0" maxOccurs="1"/>
        <xsd:element ref="DataSeries" minOccurs="1" maxOccurs="unbounded"/>
        <xsd:element ref="DualAxisDataSeries" minOccurs="0" maxOccurs="1"/>
        <xsd:element ref="Code" minOccurs="0" maxOccurs="1"/>
      </xsd:sequence>
      <!-- If true, chart series' visibility can be toggled on and off by clicking on it or on
           the corresponding legend entry -->
      <xsd:attribute name="allowSeriesToggling" type="xsd:boolean" default="true"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- If true, the Widget will have a border around it. Purely a visual effect. -->
      <xsd:attribute name="border" type="xsd:boolean" default="false"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- If true, displays a legend with a title for each data series. Default to true -->
      <xsd:attribute name="displayLegend" type="xsd:boolean" default="true"/>
      <!-- An Gosu expression setting the height in pixels of this element.  -->
      <xsd:attribute name="expressionHeight" type="xsd:string"/>
      <!-- An Gosu expression setting the width in pixels of this element.  -->
      <xsd:attribute name="expressionWidth" type="xsd:string"/>
      <!-- CSS height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="height" type="xsd:string"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- (Optional) reference ID of the widget.  This does not have to be globally unique;
           it only has to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string"/>
      <!-- Expression for the inset padding.  Inset padding is the number of padding pixels from
           the boundary of the chart to any of its contents.  The default value is 0. -->
      <xsd:attribute name="insetPadding" type="xsd:string" default="0"/>
      <!-- An expression for the label (title) of this chart -->
      <xsd:attribute name="label" type="xsd:string"/>
      <!-- If true, independent of 'panel inner spacing', the container will left indent its
           children by a fixed amount. This is useful for displaying nested data throughout a
           page. Purely a visual effect. -->
      <xsd:attribute name="leftIndent" type="xsd:boolean" default="false"/>
      <!-- Determines the position of the legend relative to the chart. Defaults to top. -->
      <xsd:attribute name="legendPosition" type="LegendPosition" default="top"/>
      <!-- The width of the legend section when legend is positioned right or left of the chart,
           expressed as the percentage of the total chart panel width. Ignored for top and bottom
           legend positioning. The default value is 30. -->
      <xsd:attribute name="legendWidth" type="xsd:string" default="30"/>
      <!-- CSS max-height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="maxHeight" type="xsd:string"/>
      <!-- CSS max-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="maxWidth" type="xsd:string"/>
      <!-- CSS min-height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="minHeight" type="xsd:string"/>
      <!-- CSS min-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="minWidth" type="xsd:string"/>
      <!-- An optional String which, if specified, means that any element dynamically including
           this widget must specify the same mode.  There is also a special mode "default" you
           can use which means "Use this widget if no widget with the specified mode exists".
            You can also have this widget match more than one mode by separating mode strings
           with a | character. -->
      <xsd:attribute name="mode" type="xsd:string"/>
      <!-- In general, determines the amount of spacing INSIDE of the Panel in all 4 directions:
           top, right, bottom, left. However, different Panels may have requirements that prevent
           all 4 directions from being modified. -->
      <xsd:attribute name="panelInnerSpacing" type="WidgetSpacing" default="none"/>
      <!-- In general, determines the amount of spacing OUTSIDE of the Panel in all 4 directions:
           top, right, bottom, left. However, different Panels may have requirements that prevent
           all 4 directions from being modified. -->
      <xsd:attribute name="panelOuterSpacing" type="WidgetSpacing" default="none"/>
      <!-- The style of the Panel. In general, this refers to the background color, but some
           styles can change other aspects such as font color, spacing, or filters. -->
      <xsd:attribute name="panelStyle" type="xsd:string"/>
      <!-- One of the enumerated chart types -->
      <xsd:attribute name="type" type="ChartType" use="required"/>
      <!-- Boolean expression which, if false, completely hides the widget and all its children -->
      <xsd:attribute name="visible" type="xsd:string"/>
      <!-- CSS width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="width" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- A Tile containing a single ChartPanel and optionally a TileInputColumn. -->
  <xsd:element name="ChartTile">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="Require" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="Variable" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:choice>
        <xsd:element ref="TileActions" minOccurs="0" maxOccurs="1"/>
        <xsd:element ref="TileChartPanel" minOccurs="1" maxOccurs="1"/>
        <xsd:element ref="TileInputColumn" minOccurs="0" maxOccurs="1"/>
      </xsd:sequence>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- Reference ID of the widget.  This does not have to be globally unique; it only has
           to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <!-- The title of the tile.  The title is shown on the top of the tile. -->
      <xsd:attribute name="title" type="xsd:string" use="required"/>
      <!-- The view more action.  The 'View more' link is shown in the tile footer. -->
      <xsd:attribute name="viewMoreAction" type="xsd:string"/>
      <!-- The view more label of the tile.  By default 'View More' -->
      <xsd:attribute name="viewMoreLabel" type="xsd:string" default="DisplayKey.get(&quot;Web.Tile.ViewMore&quot;)"/>
      <!-- An expression that indicates if the view more link is visible. -->
      <xsd:attribute name="viewMoreVisible" type="xsd:string"/>
      <!-- Boolean expression which, if false, completely hides the widget and all its children -->
      <xsd:attribute name="visible" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- A ListView cell containing a checkbox which is bound to some value, rather than being
       used to select rows. -->
  <xsd:element name="CheckBoxCell">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="Reflect" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element ref="ColumnFooter" minOccurs="0" maxOccurs="1"/>
        <xsd:element ref="PostOnChange" minOccurs="0" maxOccurs="1"/>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="AddMenuItem"/>
          <xsd:element ref="AddMenuItemIterator"/>
          <xsd:element ref="MenuItem"/>
          <xsd:element ref="MenuItemDivider"/>
          <xsd:element ref="MenuItemIterator"/>
          <xsd:element ref="MenuItemSetRef"/>
          <xsd:element ref="MenuItemTree"/>
          <xsd:element ref="PickerMenuItem"/>
          <xsd:element ref="SearchItem"/>
        </xsd:choice>
      </xsd:sequence>
      <!-- An optional action to take when the user clicks the value of this widget when the
           value is not being edited. See ActionBase for details. When specified, the value of
           this widget will be rendered as a link when the value is not being edited. -->
      <xsd:attribute name="action" type="xsd:string"/>
      <!-- An optional boolean expression controlling whether the action should be available
           in this specific context when in read-only mode.  This is ignored if in edit mode
           or if the action is null.  This attribute will be deprecated in a future release,
           please use the 'available' attribute instead.  To disable action in readonly mode,
           you can set available=&quot;CurrentLocation.InEditMode || &lt;action-available-condition&gt;&quot; -->
      <xsd:attribute name="actionAvailable" type="xsd:string"/>
      <!-- Specifies the alignment of this cell. Valid values: "left", "right", or "center".
           If no value is specified, the default alignment is determined by the value type ("center"
           for boolean values; "right" for numeric values; "left" for other value types). -->
      <xsd:attribute name="align" type="WidgetAlignment"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- Boolean expression which, if false, grays out the widget and all its children -->
      <xsd:attribute name="available" type="xsd:string"/>
      <!-- If true, renders the cell contents in bold text. Defaults to false. -->
      <xsd:attribute name="bold" type="xsd:boolean" default="false"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- The HTML colspan attribute, lets this cell span across multiple columns of other rows.
           Useful for generating a "group header" row above a RowIterator. The default value
           is 1. A value greater than 1 is only allowed when the containing row is not iterated
           by a RowIterator. -->
      <xsd:attribute name="colspan" type="xsd:integer"/>
      <!-- The confirmation message to show when "showConfirmMessage" is set. If not specified,
           a standard message will be used. -->
      <xsd:attribute name="confirmMessage" type="xsd:string"/>
      <!-- A Gosu expression used to convert the value picked from a popup before set it into
           the model value of this widget. The picked value will be exposed as a symbol with
           the name "PickedValue" -->
      <xsd:attribute name="conversionExpression" type="xsd:string"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- Boolean expression which, if false, makes this widget and all its children read-only -->
      <xsd:attribute name="editable" type="xsd:string" default="false"/>
      <!-- If true, allows the user to sort the values in the column by clicking on the header.
            Only applicable when the containing row is iterated by a RowIterator. -->
      <xsd:attribute name="enableSort" type="xsd:boolean" default="true"/>
      <!-- If true, this cell will the last cell in the row to be navigated to via the ENTER
           key. Only applicable when "CellNavOnEnter" or "QuickAddOnEnter" is set. Normally not
           specified. Default to false. -->
      <xsd:attribute name="endOfCellNav" type="xsd:boolean" default="false"/>
      <!-- If true, instead of showing a hierarchical menu, the widget will show a single menu
           with sub-menus grouped under headers. -->
      <xsd:attribute name="flatten" type="xsd:boolean" default="false"/>
      <!-- An optional boolean expression, if returns true, this widget will get focus when start
           editing the containing location. -->
      <xsd:attribute name="focusOnStartEditing" type="xsd:string"/>
      <!-- An expression that returns a GWColor instance. Legacy: this method can instead return
           a string corresponding to a CSS Specification Level 3 color name. See GWColor for
           more details. -->
      <xsd:attribute name="fontColor" type="xsd:string"/>
      <!-- An optional expression. If specified, a footer cell with the specified value will
           be rendered for this column. Only applicable when the containing Row is iterated by
           a RowIterator. Not allowed when "footerSumValue" is specified. -->
      <xsd:attribute name="footerLabel" type="xsd:string"/>
      <!-- An optional expression, if specified, will be used as format pattern for the footer
           sum value. Normally not specified, so that the "format" and\or "formatType" of the
           cell value will be applied to footer sum value. Only applicable when "footerSumValue"
           is specified. The result of this expression must conform to the number format defined
           in java.text.DecimalFormat. -->
      <xsd:attribute name="footerSumFormat" type="xsd:string"/>
      <!-- An optional Numeric expression. If specified, a footer cell that sums the specified
           value for all cells in this column will be rendered. Pagination of the list does not
           affect the sum value. Only applicable when the containing row is iterated by a RowIterator.
           Not allowed when "footerLabel" is specified. -->
      <xsd:attribute name="footerSumValue" type="xsd:string"/>
      <!-- How the value is formatted; options include "general", "currency", and "email".  See
           the formatType enumeration. -->
      <xsd:attribute name="formatType" type="FormatType"/>
      <!-- If true, the ListView will be grouped by this cell upon entering the page. Only one
           grouped cell is allowed at any given time and it is only applicable when the column
           is sortable. -->
      <xsd:attribute name="groupedOnEnter" type="xsd:string"/>
      <!-- If true, this Cell and any other grow-enabled Cell will expand to fill remaining space
           in the ListViewPanel. Only applicable when the ListView is set to stretch. -->
      <xsd:attribute name="grow" type="xsd:boolean" default="false"/>
      <!-- If true, generates a checkbox at the beginning of this cell. This checkbox can be
           used to check this entry in the nearest containing Iterator. Defaults to false. Only
           allowed if this cell is inside a CellIterator or under a Row inside a RowIterator. -->
      <xsd:attribute name="hasCheckBox" type="xsd:boolean" default="false"/>
      <!-- CSS height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="height" type="xsd:string"/>
      <!-- A Gosu expression which, if defined, is evaluated to create help info that guides
           the user to edit this widget. The help info will show up if the user hovers the mouse
           over or focuses on the widget, when the widget is in edit mode. -->
      <xsd:attribute name="helpText" type="xsd:string"/>
      <!-- If false, menu items under this input will be shown even when the input is not editable. -->
      <xsd:attribute name="hideChildrenIfReadOnly" type="xsd:boolean" default="true"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- Refers to an image file. If defined, makes this an icon cell. The "value" attribute
           should be a boolean expression describing whether the icon is visible in a given row. -->
      <xsd:attribute name="icon" type="xsd:string"/>
      <!-- Color of the icon. If not set will default to its font color. -->
      <xsd:attribute name="iconColor" type="xsd:string"/>
      <!-- The ALT text for any icon generated in the content cells -->
      <xsd:attribute name="iconLabel" type="xsd:string"/>
      <!-- An enumeration of icon types that determine what the 'icon' property on the widget
           is referring to. -->
      <xsd:attribute name="iconType" type="IconTypeEnum"/>
      <!-- Reference ID of the widget.  This does not have to be globally unique; it only has
           to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <!-- A Gosu expression that converts the presentation value to a model value. The presentation
           value string is exposed to this expression as the symbol "VALUE". -->
      <xsd:attribute name="inputConversion" type="xsd:string"/>
      <!-- An optional expression. If specified, a header cell with the specified value will
           be rendered for this column. Only applicable when the containing row is iterated by
           a RowIterator. -->
      <xsd:attribute name="label" type="xsd:string"/>
      <!-- Custom extension CSS style class to apply to the header. -->
      <xsd:attribute name="labelStyleClass" type="xsd:string"/>
      <!-- CSS max-height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="maxHeight" type="xsd:string"/>
      <!-- CSS max-width value. Can be `px`, or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="maxWidth" type="xsd:string"/>
      <!-- CSS min-height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="minHeight" type="xsd:string"/>
      <!-- CSS min-width value. Can be `px`, or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="minWidth" type="xsd:string"/>
      <!-- The number of child MenuItems to show in each column.  If not specified, all children
           will be shown in a single column. -->
      <xsd:attribute name="numEntriesPerColumn" type="xsd:integer" default="0"/>
      <!-- Gosu expression to be executed after the value is set from a picker. -->
      <xsd:attribute name="onPick" type="xsd:string"/>
      <!-- A Gosu expression that converts the model value to a presentation value. The model
           value is exposed to this expression as the symbol "VALUE". The return type of this
           expression must be String. -->
      <xsd:attribute name="outputConversion" type="xsd:string"/>
      <!-- Relative width when printing to PDF. All widths are relative to the widths of the
           other columns in the ListView -->
      <xsd:attribute name="printWidth" type="xsd:string" default="1"/>
      <!-- A Gosu expression used to validate user value before setting it to the model. This
           expression can access any symbols available to this widget, and a "VALUE" symbol that
           represents the user value. If this expression returns null, the user value will be
           set into the model. Otherwise, an error message containing the result of the expression
           will be displayed on the page, the value will not be set into the model, and no actions
           can be performed until the error is corrected. -->
      <xsd:attribute name="requestValidationExpression" type="xsd:string"/>
      <!-- If true, then the cell must be filled out by the user -->
      <xsd:attribute name="required" type="xsd:string"/>
      <!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * Deprecated.
           DO NOT USE.                                           * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
           Consider using "onChange/onPick/inputConversion/outputConversion" where available.
           If specified and the Input is editable, then any new value of the Input is written
           to this expression (Gosu by default) instead of to "value".  The new value is exposed
           as the symbol "VALUE".  For instance if your value expression is "Foo.getSomething()"
           then it can't be written to since it's not an L-value; so you could specify a setter
           expression along the lines of "Foo.setSomething(VALUE)" Warning: if you use this attribute
           many pebbles features will not work, including but not limited to: * Correct automatic
           detection of the state of the updated data * Correct automatic detection of the editability
           of the data * Correct automatic detection of the maximum size of a text input -->
      <xsd:attribute name="setter" type="xsd:string"/>
      <!-- Boolean expression which determines whether or not to show a confirmation message
           when the field value is changed directly from the UI. It's NOT applicable when the
           value is changed indirectly, for example, as a result of client reflection. -->
      <xsd:attribute name="showConfirmMessage" type="xsd:string"/>
      <!-- If true, shows the icon defined by "icon" in the header cell for this column. The
           default value is true. -->
      <xsd:attribute name="showHeaderIcon" type="xsd:boolean" default="true"/>
      <!-- An optional comma-separated sequence of Expressions, each of which is assumed to be
           a dot-delimited path, the value by which this column will be sorted if the user clicks
           on the header cell. -->
      <xsd:attribute name="sortBy" type="xsd:string"/>
      <!-- Either "ascending" or "descending" -->
      <xsd:attribute name="sortDirection" type="WidgetSortDirection" default="ascending"/>
      <!-- The priority of sorting relative to other sorting elements like IteratorSort and Cell.
           The lower the number, the higher the priority.  The highest priority is "1" -->
      <xsd:attribute name="sortOrder" type="xsd:integer" default="0"/>
      <!-- CSS style class for the cell content; for instance, "miniButton" makes a link appear
           as a small button -->
      <xsd:attribute name="styleClass" type="LinkStyleClass"/>
      <!-- An optional attribute, if set, defer sub menu generation until user tries to open
           the menu. DO NOT set this flag unless the sub menu of this widget is very expensive
           to generate. Setting this flag will reduce time to load the page, however require
           fetching additional info from server in the background, when the menu gets opened
           for the first time after page loaded. -->
      <xsd:attribute name="subMenuOnDemand" type="xsd:boolean" default="false"/>
      <!-- Extra "alt" text to show when the user hovers the mouse over the header cell of this
           column. -->
      <xsd:attribute name="tooltip" type="xsd:string"/>
      <!-- If true, validate before commit that the value of this column is unique across all
           rows in the current page. Only meaningful when this column is editable. -->
      <xsd:attribute name="unique" type="xsd:boolean" default="false"/>
      <!-- A Gosu expression to run before committing the record. This expression can refer to
           any symbols available to this widget. If this expression returns null, the validation
           is considered successful; otherwise, the result of this expression will be displayed
           as an error and the record will not be committed. -->
      <xsd:attribute name="validationExpression" type="xsd:string"/>
      <!-- The label of this cell to be used when it has validation issues. Not needed when this
           cell has a "label". Required if the cell is editable but does not have a "label". -->
      <xsd:attribute name="validationLabel" type="xsd:string"/>
      <!-- The value this element binds to.  If the element is editable then this value is both
           read from and written to (unless "setter" is defined). -->
      <xsd:attribute name="value" type="xsd:string"/>
      <!-- The type of the value expression. -->
      <xsd:attribute name="valueType" type="xsd:string" default="java.lang.Boolean"/>
      <!-- Boolean expression which, if false, hides the <i>contents</i> of the cell (its "ValueWidget"),
           but not the cell itself.  Needed since hiding the actual cell usually screws up the
           layout -->
      <xsd:attribute name="valueVisible" type="xsd:string"/>
      <!-- Specifies the vertical alignment of this cell. Valid values: "top", "middle", or "bottom".
           If no value is specified, the default alignment is determined by the cell type ("top"
           for Text Areas and Format Cells, "middle" for buttons and icons). -->
      <xsd:attribute name="verticalAlign" type="WidgetVerticalAlignment"/>
      <!-- Boolean expression which, if false, completely hides the widget and all its children -->
      <xsd:attribute name="visible" type="xsd:string"/>
      <!-- CSS width value. Can be `px`, or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="width" type="xsd:string"/>
      <!-- If default, defers to FormatType to decide whether to wrap or not.  If true, allows
           cell content to wrap. -->
      <xsd:attribute name="wrap" type="WrapType" default="default"/>
      <!-- If true, allows Header Cell text content to wrap. Defaults to true. -->
      <xsd:attribute name="wrapLabel" type="xsd:boolean" default="false"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- An input bound to an array or list which renders as a group of checkboxes. -->
  <xsd:element name="CheckBoxGroupInput">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="LayoutConfig" minOccurs="0" maxOccurs="1"/>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="AddMenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="AddMenuItemIterator" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemDivider" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemIterator" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemSetRef" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemTree" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PickerMenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PostOnChange" minOccurs="0" maxOccurs="1"/>
          <xsd:element ref="Reflect" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="SearchItem" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:choice>
      </xsd:sequence>
      <!-- An optional action to take when the user clicks the value of this widget when the
           value is not being edited. See ActionBase for list of available action prefixes. When
           specified, the value of this widget will be rendered as a link when the value is not
           being edited. -->
      <xsd:attribute name="action" type="xsd:string"/>
      <!-- An optional boolean expression controlling whether the action should be available
           in this specific context when in read-only mode.  This is ignored if in edit mode
           or if the action is null.  This attribute will be deprecated in a future release,
           please use the 'available' attribute instead.  To disable action in readonly mode,
           you can set available=&quot;CurrentLocation.InEditMode || &lt;action-available-condition&gt;&quot; -->
      <xsd:attribute name="actionAvailable" type="xsd:string"/>
      <!-- Alignment of the widget ("left", "right", or "center") -->
      <xsd:attribute name="align" type="WidgetAlignment"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- Boolean expression which, if false, grays out the widget and all its children -->
      <xsd:attribute name="available" type="xsd:string"/>
      <!-- If true then the label is displayed in bold text. -->
      <xsd:attribute name="boldLabel" type="xsd:boolean" default="false"/>
      <!-- If true then the value is displayed in bold text when read-only. -->
      <xsd:attribute name="boldValue" type="xsd:boolean" default="false"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- A Gosu expression used to convert the value picked from a popup before set it into
           the model value of this widget. The picked value will be exposed as a symbol with
           the name "PickedValue" -->
      <xsd:attribute name="conversionExpression" type="xsd:string"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- Boolean expression which, if false, makes this widget and all its children read-only -->
      <xsd:attribute name="editable" type="xsd:string" default="false"/>
      <!-- Optional Gosu expression for filtering the value range of the widget. You can write
           this either as a boolean expression over a "VALUE" symbol (i.e. "Libraries.MyLib.isOkValue(VALUE)"),
           or as a more complex expression that takes a "VALUES" array symbol and returns a List
           (i.e. "Libraries.MyLib.filterValues(VALUES)") which is more powerful and efficient
           but harder to write. -->
      <xsd:attribute name="filter" type="xsd:string"/>
      <!-- If true, instead of showing a hierarchical menu, the widget will show a single menu
           with sub-menus grouped under headers. -->
      <xsd:attribute name="flatten" type="xsd:boolean" default="false"/>
      <!-- An optional boolean expression, if returns true, this widget will get focus when start
           editing the containing location. -->
      <xsd:attribute name="focusOnStartEditing" type="xsd:string"/>
      <!-- How the value is formatted; options include "general", "currency", and "email".  See
           the formatType enumeration. -->
      <xsd:attribute name="formatType" type="FormatType"/>
      <!-- If false, menu items under this input will be shown even when the input is not editable. -->
      <xsd:attribute name="hideChildrenIfReadOnly" type="xsd:boolean" default="true"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- Reference ID of the widget.  This does not have to be globally unique; it only has
           to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <xsd:attribute name="inputConversion" type="xsd:string"/>
      <!-- Label to render. -->
      <xsd:attribute name="label" type="xsd:string"/>
      <!-- Boolean expression which, if true, causes the label portion of the Input to be rendered
           above the value -->
      <xsd:attribute name="labelAbove" type="xsd:string" default="false"/>
      <!-- Custom extension CSS style class to apply to the label. -->
      <xsd:attribute name="labelStyleClass" type="xsd:string"/>
      <!-- The number of child MenuItems to show in each column.  If not specified, all children
           will be shown in a single column. -->
      <xsd:attribute name="numEntriesPerColumn" type="xsd:integer" default="0"/>
      <!-- The number of rows to show in a multi-select input.  This attribute is invalid on
           a single-select input. -->
      <xsd:attribute name="numRows" type="xsd:integer"/>
      <!-- Gosu expression to be executed after the value is set from a picker. -->
      <xsd:attribute name="onPick" type="xsd:string"/>
      <!-- An optional expression to specify an icon for each option. The option value is exposed
           as "VALUE". The return value's type is determined by OPTION_ICON_TYPE -->
      <xsd:attribute name="optionIcon" type="xsd:string"/>
      <!-- Color of the icon. The option value is exposed as "VALUE". If not set will default
           to its font color. -->
      <xsd:attribute name="optionIconColor" type="xsd:string"/>
      <!-- An enumeration of icon types that determine what the 'optionIcon' property on the
           widget is referring to. -->
      <xsd:attribute name="optionIconType" type="IconTypeEnum"/>
      <!-- Optional Gosu expression used to determine the label displayed for each element of
           the value range. Defaults to the element's display name or string representation if
           not present. The element value is exposed as "VALUE". -->
      <xsd:attribute name="optionLabel" type="xsd:string"/>
      <!-- A Gosu expression used to validate user value before setting it to the model. This
           expression can access any symbols available to this widget, and a "VALUE" symbol that
           represents the user value. If this expression returns null, the user value will be
           set into the model. Otherwise, an error message containing the result of the expression
           will be displayed on the page, the value will not be set into the model, and no actions
           can be performed until the error is corrected. -->
      <xsd:attribute name="requestValidationExpression" type="xsd:string"/>
      <!-- If true, then the cell must be filled out by the user -->
      <xsd:attribute name="required" type="xsd:string"/>
      <!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * Deprecated.
           DO NOT USE.                                           * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
           Consider using "onChange/onPick/inputConversion/outputConversion" where available.
           If specified and the Input is editable, then any new value of the Input is written
           to this expression (Gosu by default) instead of to "value".  The new value is exposed
           as the symbol "VALUE".  For instance if your value expression is "Foo.getSomething()"
           then it can't be written to since it's not an L-value; so you could specify a setter
           expression along the lines of "Foo.setSomething(VALUE)" Warning: if you use this attribute
           many pebbles features will not work, including but not limited to: * Correct automatic
           detection of the state of the updated data * Correct automatic detection of the editability
           of the data * Correct automatic detection of the maximum size of a text input -->
      <xsd:attribute name="setter" type="xsd:string"/>
      <!-- Optional keyboard shortcut character in the form of "Q" or "ShiftQ"; the "Alt" key
           is implicit. This is only applicable when this widget has an "action" specified and
           the value is not being edited. -->
      <xsd:attribute name="shortcut" type="xsd:string"/>
      <!-- If true, attempts to sort the results of valueRange -->
      <xsd:attribute name="sortValueRange" type="xsd:boolean" default="true"/>
      <!-- An optional attribute, if set, defer sub menu generation until user tries to open
           the menu. DO NOT set this flag unless the sub menu of this widget is very expensive
           to generate. Setting this flag will reduce time to load the page, however require
           fetching additional info from server in the background, when the menu gets opened
           for the first time after page loaded. -->
      <xsd:attribute name="subMenuOnDemand" type="xsd:boolean" default="false"/>
      <!-- A Gosu expression to run before committing the record. This expression can refer to
           any symbols available to this widget. If this expression returns null, the validation
           is considered successful; otherwise, the result of this expression will be displayed
           as an error and the record will not be committed. -->
      <xsd:attribute name="validationExpression" type="xsd:string"/>
      <!-- The value this Input binds to as an Expression.  If the Input is editable then this
           value is both read from and written to (unless "setter" is defined). -->
      <xsd:attribute name="value" type="xsd:string" use="required"/>
      <!-- Gosu expression defining the range of possible values for this element. Should evaluate
           to a List, an array, or a IQueryBeanResult -->
      <xsd:attribute name="valueRange" type="xsd:string" use="required"/>
      <!-- CSS max-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionMaxWidth" type="xsd:string"/>
      <!-- CSS min-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionMinWidth" type="xsd:string"/>
      <!-- CSS width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionWidth" type="xsd:string"/>
      <!-- The type of the value expression. -->
      <xsd:attribute name="valueType" type="xsd:string" use="required"/>
      <!-- If used instead of "editable", specifies whether the Input is editable when data is
           being created -->
      <xsd:attribute name="visible" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- An Input that renders as a check box -->
  <xsd:element name="CheckBoxInput">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="LayoutConfig" minOccurs="0" maxOccurs="1"/>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="AddMenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="AddMenuItemIterator" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemDivider" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemIterator" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemSetRef" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemTree" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PickerMenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PostOnChange" minOccurs="0" maxOccurs="1"/>
          <xsd:element ref="Reflect" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="SearchItem" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:choice>
      </xsd:sequence>
      <!-- An optional action to take when the user clicks the value of this widget when the
           value is not being edited. See ActionBase for list of available action prefixes. When
           specified, the value of this widget will be rendered as a link when the value is not
           being edited. -->
      <xsd:attribute name="action" type="xsd:string"/>
      <!-- An optional boolean expression controlling whether the action should be available
           in this specific context when in read-only mode.  This is ignored if in edit mode
           or if the action is null.  This attribute will be deprecated in a future release,
           please use the 'available' attribute instead.  To disable action in readonly mode,
           you can set available=&quot;CurrentLocation.InEditMode || &lt;action-available-condition&gt;&quot; -->
      <xsd:attribute name="actionAvailable" type="xsd:string"/>
      <!-- Alignment of the widget ("left", "right", or "center") -->
      <xsd:attribute name="align" type="WidgetAlignment"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- Boolean expression which, if false, grays out the widget and all its children -->
      <xsd:attribute name="available" type="xsd:string"/>
      <!-- If true then the label is displayed in bold text. -->
      <xsd:attribute name="boldLabel" type="xsd:boolean" default="false"/>
      <!-- If true then the value is displayed in bold text when read-only. -->
      <xsd:attribute name="boldValue" type="xsd:boolean" default="false"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- The confirmation message to show when "showConfirmMessage" is set. If not specified,
           a standard message will be used. -->
      <xsd:attribute name="confirmMessage" type="xsd:string"/>
      <!-- A Gosu expression used to convert the value picked from a popup before set it into
           the model value of this widget. The picked value will be exposed as a symbol with
           the name "PickedValue" -->
      <xsd:attribute name="conversionExpression" type="xsd:string"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- Boolean expression which, if false, makes this widget and all its children read-only -->
      <xsd:attribute name="editable" type="xsd:string" default="false"/>
      <!-- If true, instead of showing a hierarchical menu, the widget will show a single menu
           with sub-menus grouped under headers. -->
      <xsd:attribute name="flatten" type="xsd:boolean" default="false"/>
      <!-- An optional boolean expression, if returns true, this widget will get focus when start
           editing the containing location. -->
      <xsd:attribute name="focusOnStartEditing" type="xsd:string"/>
      <!-- How the value is formatted; options include "general", "currency", and "email".  See
           the formatType enumeration. -->
      <xsd:attribute name="formatType" type="FormatType"/>
      <!-- A Gosu expression which, if defined, is evaluated to create help info that guides
           the user to edit this widget. The help info will show up if the user hovers the mouse
           over or focuses on the widget, when the widget is in edit mode. -->
      <xsd:attribute name="helpText" type="xsd:string"/>
      <!-- If false, menu items under this input will be shown even when the input is not editable. -->
      <xsd:attribute name="hideChildrenIfReadOnly" type="xsd:boolean" default="true"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- Reference ID of the widget.  This does not have to be globally unique; it only has
           to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <!-- A Gosu expression that converts the presentation value to a model value. The presentation
           value string is exposed to this expression as the symbol "VALUE". -->
      <xsd:attribute name="inputConversion" type="xsd:string"/>
      <!-- Label to render. -->
      <xsd:attribute name="label" type="xsd:string"/>
      <!-- Boolean expression which, if true, causes the label portion of the Input to be rendered
           above the value -->
      <xsd:attribute name="labelAbove" type="xsd:string" default="false"/>
      <!-- Custom extension CSS style class to apply to the label. -->
      <xsd:attribute name="labelStyleClass" type="xsd:string"/>
      <!-- The number of child MenuItems to show in each column.  If not specified, all children
           will be shown in a single column. -->
      <xsd:attribute name="numEntriesPerColumn" type="xsd:integer" default="0"/>
      <!-- Gosu expression to be executed after the value is set from a picker. -->
      <xsd:attribute name="onPick" type="xsd:string"/>
      <!-- A Gosu expression that converts the model value to a presentation value. The model
           value is exposed to this expression as the symbol "VALUE". The return type of this
           expression must be String. -->
      <xsd:attribute name="outputConversion" type="xsd:string"/>
      <!-- A Gosu expression used to validate user value before setting it to the model. This
           expression can access any symbols available to this widget, and a "VALUE" symbol that
           represents the user value. If this expression returns null, the user value will be
           set into the model. Otherwise, an error message containing the result of the expression
           will be displayed on the page, the value will not be set into the model, and no actions
           can be performed until the error is corrected. -->
      <xsd:attribute name="requestValidationExpression" type="xsd:string"/>
      <!-- If true, then the cell must be filled out by the user -->
      <xsd:attribute name="required" type="xsd:string"/>
      <!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * Deprecated.
           DO NOT USE.                                           * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
           Consider using "onChange/onPick/inputConversion/outputConversion" where available.
           If specified and the Input is editable, then any new value of the Input is written
           to this expression (Gosu by default) instead of to "value".  The new value is exposed
           as the symbol "VALUE".  For instance if your value expression is "Foo.getSomething()"
           then it can't be written to since it's not an L-value; so you could specify a setter
           expression along the lines of "Foo.setSomething(VALUE)" Warning: if you use this attribute
           many pebbles features will not work, including but not limited to: * Correct automatic
           detection of the state of the updated data * Correct automatic detection of the editability
           of the data * Correct automatic detection of the maximum size of a text input -->
      <xsd:attribute name="setter" type="xsd:string"/>
      <!-- Optional keyboard shortcut character in the form of "Q" or "ShiftQ"; the "Alt" key
           is implicit. This is only applicable when this widget has an "action" specified and
           the value is not being edited. -->
      <xsd:attribute name="shortcut" type="xsd:string"/>
      <!-- Boolean expression which determines whether or not to show a confirmation message
           when the field value is changed directly from the UI. It's NOT applicable when the
           value is changed indirectly, for example, as a result of client reflection. -->
      <xsd:attribute name="showConfirmMessage" type="xsd:string"/>
      <!-- An optional attribute, if set, defer sub menu generation until user tries to open
           the menu. DO NOT set this flag unless the sub menu of this widget is very expensive
           to generate. Setting this flag will reduce time to load the page, however require
           fetching additional info from server in the background, when the menu gets opened
           for the first time after page loaded. -->
      <xsd:attribute name="subMenuOnDemand" type="xsd:boolean" default="false"/>
      <!-- If this attribute is true, and the label is empty, then the space normally set aside
           for a label will be omitted. -->
      <xsd:attribute name="suppressEmptyLabel" type="xsd:boolean" default="false"/>
      <!-- A Gosu expression to run before committing the record. This expression can refer to
           any symbols available to this widget. If this expression returns null, the validation
           is considered successful; otherwise, the result of this expression will be displayed
           as an error and the record will not be committed. -->
      <xsd:attribute name="validationExpression" type="xsd:string"/>
      <!-- The value this Input binds to as an Expression.  If the Input is editable then this
           value is both read from and written to (unless "setter" is defined). -->
      <xsd:attribute name="value" type="xsd:string" use="required"/>
      <!-- An optional expression, if set, the value of which will be displayed to the right
           of the checkbox. -->
      <xsd:attribute name="valueLabel" type="xsd:string"/>
      <!-- CSS max-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionMaxWidth" type="xsd:string"/>
      <!-- CSS min-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionMinWidth" type="xsd:string"/>
      <!-- CSS width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionWidth" type="xsd:string"/>
      <!-- The type of the value expression. -->
      <xsd:attribute name="valueType" type="xsd:string" default="java.lang.Boolean"/>
      <!-- If used instead of "editable", specifies whether the Input is editable when data is
           being created -->
      <xsd:attribute name="visible" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- A menu item under a CheckedValuesToolbarButton which handles checked rows in the associated
       RowIterator -->
  <xsd:element name="CheckedValuesMenuItem">
    <xsd:complexType>
      <xsd:choice minOccurs="0" maxOccurs="unbounded"/>
      <!-- The all checked row action is a Gosu expression that processes all rows that are checked
           in the coresponding listview/iterator. The expression is passed a new symbol named
           CheckedValues.  This symbol contains a list of values that are checked. Unlike "checkedRowAction",
           this expression does not commit the data changes for you. If the page is in edit mode,
           the changes will be committed when the page is committed. -->
      <xsd:attribute name="allCheckedRowsAction" type="xsd:string"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- Boolean expression which, if false, grays out the widget and all its children and
           makes them unclickable -->
      <xsd:attribute name="available" type="xsd:string"/>
      <!-- The checked row action is a Gosu expression that processes each row that is checked
           in the corresponding listview/iterator. Each row that is checked is passed through
           this expression.  The exposed symbol is the entry symbol defined in the listview/iterator
           After all rows have been processed and the page is in read-only mode, a new bundle
           is created and all changes are commited to the database.  If the page is in edit mode
           nothing is commited. -->
      <xsd:attribute name="checkedRowAction" type="xsd:string"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- Confirmation message to show before performing the action -->
      <xsd:attribute name="confirmMessage" type="xsd:string"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- Should be 'true', 'inline' or 'attachment' if the action taken by this widget is to
           download a file. -->
      <xsd:attribute name="download" type="Download"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- The name of a .png file, or .svg file, or font glyph. The Widget's iconType determines
           which one. -->
      <xsd:attribute name="icon" type="xsd:string"/>
      <!-- Color of the icon. If not set will default to its font color. -->
      <xsd:attribute name="iconColor" type="xsd:string"/>
      <!-- An enumeration of icon types that determine what the 'icon' property on the widget
           is referring to. -->
      <xsd:attribute name="iconType" type="IconTypeEnum"/>
      <!-- Reference ID of the widget.  This does not have to be globally unique; it only has
           to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <!-- Label to render. -->
      <xsd:attribute name="label" type="xsd:string"/>
      <!-- A Gosu expression which defines the value (or array of values) to return from the
           popup containing this widget when it is clicked. -->
      <xsd:attribute name="pickValue" type="xsd:string"/>
      <!-- Default text answer to the prompt message -->
      <xsd:attribute name="promptDefault" type="xsd:string"/>
      <!-- Question to ask the user before performing the action. The answer is exposed to the
           action as "web.WebUtil.ActionEventParameter". -->
      <xsd:attribute name="promptQuestion" type="xsd:string"/>
      <!-- If true, the page will scroll back to the original scroll position after the action.
           Should only be set if the action stays on the same page and the page layout does not
           change. Default to false -->
      <xsd:attribute name="retainScrollPosition" type="xsd:boolean" default="false"/>
      <!-- Keyboard shortcut character in the form of "Q" or "ShiftQ"; the "Alt" key is implicit -->
      <xsd:attribute name="shortcut" type="xsd:string"/>
      <!-- Gosu expression which determines whether or not the confirmation message should be
           shown -->
      <xsd:attribute name="showConfirmMessage" type="xsd:string" default="true"/>
      <!-- Boolean expression which, if false, completely hides the widget and all its children -->
      <xsd:attribute name="visible" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- Creates as many copies of its CheckedValueMenuItem content as there are components
       in the array referenced by "value".  Supplies the component value to the created content
       as "elementName". Used inside an AddButton. -->
  <xsd:element name="CheckedValuesMenuItemIterator">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="IteratorSort" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:choice minOccurs="1" maxOccurs="unbounded">
          <xsd:element ref="CheckedValuesMenuItem"/>
          <xsd:element ref="CheckedValuesMenuItemIterator"/>
        </xsd:choice>
      </xsd:sequence>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- As each element in the array result of "value" is displayed, it is exposed as a symbol
           with the name "elementName", which the contents of this iterator can refer to -->
      <xsd:attribute name="elementName" type="xsd:string" use="required"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- (Optional) reference ID of the widget.  This does not have to be globally unique;
           it only has to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string"/>
      <!-- Lets you manually specify the type of element exposed as "elementName".  This is useful
           if you have special knowledge about the type of element returned by "value": for example,
           if the field referred to returns an array of Contacts but you happen to know that
           they are guaranteed to all be Persons -->
      <xsd:attribute name="type" type="xsd:string"/>
      <!-- A Gosu expression that evaluates to the elements over which to iterate. Must evaluate
           to an Object array or a IQueryBeanResult. -->
      <xsd:attribute name="value" type="xsd:string" use="required"/>
      <!-- The type of the value expression. -->
      <xsd:attribute name="valueType" type="xsd:string" use="required"/>
      <!-- Boolean expression which, if false, completely hides the widget and all its children -->
      <xsd:attribute name="visible" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- A button in a toolbar which handles checked rows of the associated RowIterator -->
  <xsd:element name="CheckedValuesToolbarButton">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="CheckedValuesMenuItem"/>
          <xsd:element ref="CheckedValuesMenuItemIterator"/>
        </xsd:choice>
      </xsd:sequence>
      <!-- The all checked row action is a Gosu expression that processes all rows that are checked
           in the coresponding listview/iterator. The expression is passed a new symbol named
           CheckedValues.  This symbol contains a list of values that are checked. Unlike "checkedRowAction",
           this expression does not commit the data changes for you. If the page is in edit mode,
           the changes will be committed when the page is committed. -->
      <xsd:attribute name="allCheckedRowsAction" type="xsd:string"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- Boolean expression which, if false, grays out the widget and all its children and
           makes them unclickable -->
      <xsd:attribute name="available" type="xsd:string"/>
      <!-- The checked row action is a Gosu expression that processes each row that is checked
           in the corresponding listview/iterator. Each row that is checked is passed through
           this expression.  The exposed symbol is the entry symbol defined in the listview/iterator
           After all rows have been processed and the page is in read-only mode, a new bundle
           is created and all changes are commited to the database.  If the page is in edit mode
           nothing is commited. -->
      <xsd:attribute name="checkedRowAction" type="xsd:string"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- Confirmation message to show before performing the action -->
      <xsd:attribute name="confirmMessage" type="xsd:string"/>
      <!-- If true, the button is the default for the page, and will be "clicked" when the user
           presses Enter -->
      <xsd:attribute name="default" type="xsd:boolean" default="false"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- Should be 'true', 'inline' or 'attachment' if the action taken by this widget is to
           download a file. -->
      <xsd:attribute name="download" type="Download"/>
      <!-- A very special expression defining what flags (see ToolbarFlag) must be checked for
           the toolbar button to be available (= not grayed out).  All processing of flags happens
           on the browser-side.  The flags syntax is a comma-separated list of <i>predicates</i>
           (with no space after each comma), and all <i>predicates</i> must be satisfied for
           the button to be available.  Each <i>predicate</i> consists of a <i>operator</i> followed
           by a space and then the name of a ToolbarFlag.  For instance, flags="one Foo,no Bar"
           means "only available if there is exactly one Foo checkbox checked and no Bar checkboxes
           checked".  The available <i>operators</i> are: one, two, any, all, no, exists (same
           as any). -->
      <xsd:attribute name="flags" type="xsd:string"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- The name of a .png file, or .svg file, or font glyph. The Widget's iconType determines
           which one. -->
      <xsd:attribute name="icon" type="xsd:string"/>
      <!-- Color of the icon. If not set will default to its font color. -->
      <xsd:attribute name="iconColor" type="xsd:string"/>
      <!-- An enumeration of icon types that determine what the 'icon' property on the widget
           is referring to. -->
      <xsd:attribute name="iconType" type="IconTypeEnum"/>
      <!-- Reference ID of the widget.  This does not have to be globally unique; it only has
           to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <!-- The id of the iterator/list view widget this button applies to.  If the value is a
           list view then the first iterator widget child is used. -->
      <xsd:attribute name="iterator" type="xsd:string" use="required"/>
      <!-- Label to render. -->
      <xsd:attribute name="label" type="xsd:string"/>
      <!-- A Gosu expression which defines the value (or array of values) to return from the
           popup containing this widget when it is clicked. -->
      <xsd:attribute name="pickValue" type="xsd:string"/>
      <!-- Default text answer to the prompt message -->
      <xsd:attribute name="promptDefault" type="xsd:string"/>
      <!-- Question to ask the user before performing the action. The answer is exposed to the
           action as "web.WebUtil.ActionEventParameter". -->
      <xsd:attribute name="promptQuestion" type="xsd:string"/>
      <!-- If true, the page will scroll back to the original scroll position after the action.
           Should only be set if the action stays on the same page and the page layout does not
           change. Default to false -->
      <xsd:attribute name="retainScrollPosition" type="xsd:boolean" default="false"/>
      <!-- Keyboard shortcut character in the form of "Q" or "ShiftQ"; the "Alt" key is implicit -->
      <xsd:attribute name="shortcut" type="xsd:string"/>
      <!-- Gosu expression which determines whether or not the confirmation message should be
           shown -->
      <xsd:attribute name="showConfirmMessage" type="xsd:string" default="true"/>
      <!-- A Gosu expression which, if defined, is evaluated to create help info if the user
           hovers the mouse over the button -->
      <xsd:attribute name="tooltip" type="xsd:string"/>
      <!-- Boolean expression which, if false, completely hides the widget and all its children -->
      <xsd:attribute name="visible" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- One of several options for viewing different fields in a DetailView.  Is rendered
       as a radio button with all the contained widgets made avaialable / unavailable depending
       on whether that button is selected.  Typically you have multiple Choice elements with
       the same "value" attribute and different "option" attributes. -->
  <xsd:element name="Choice">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="AddressAutoFillInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="AddressAutoFillRangeInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="AddressAutoFillTextInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="AddressBookContactInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="AltGroupInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="AltUserInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="AssigneeInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="BarInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="BooleanDropdownInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="BooleanRadioInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="BulletPointTextInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ButtonInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="CheckBoxGroupInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="CheckBoxInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="Choice" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ConfirmPasswordInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ContentInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="CovTermDirectInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="CurrencyInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="DateCriterionChoiceInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="DateInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="DateTimeInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="DocumentTemplateInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="EmbeddedInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="FileInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="GroupInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="HiddenInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="IndustryCodeInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="InputColumnSubGroup" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="InputDivider" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="InputGroup" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="InputIterator" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="InputSet" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="InputSetRef" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="Label" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ListViewInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="LoginSubmitButton" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MediaUploader" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ModifierInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MonetaryAmountInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="NoteBodyInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="OrgInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PasswordInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PickerInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PreFormattedTextInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PrivacyInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ProducerCodeInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ProgressInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="RangeInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="RangeRadioInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="RiskClassInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="TextAreaInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="TextInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="TileInputSetRef" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="TypeKeyCheckBoxGroupInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="TypeKeyInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="TypeKeyRadioInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="UserInput" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:choice>
      </xsd:sequence>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- (Optional) reference ID of the widget.  This does not have to be globally unique;
           it only has to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string"/>
      <!-- A specific value such as "true" or a typecode.  If the current value of "value" equals
           this option, then the contents are available -->
      <xsd:attribute name="option" type="xsd:string" use="required"/>
      <!-- The value this choice element binds to, typically a Boolean or Typekey field in Gosu. -->
      <xsd:attribute name="value" type="xsd:string" use="required"/>
      <!-- The type of the value expression. -->
      <xsd:attribute name="valueType" type="xsd:string" use="required"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- A ListView cell specialized for an array of ClaimInAssociations. -->
  <xsd:element name="ClaimAssociationsCell">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="Reflect" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element ref="ColumnFooter" minOccurs="0" maxOccurs="1"/>
        <xsd:element ref="PostOnChange" minOccurs="0" maxOccurs="1"/>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="AddMenuItem"/>
          <xsd:element ref="AddMenuItemIterator"/>
          <xsd:element ref="MenuItem"/>
          <xsd:element ref="MenuItemDivider"/>
          <xsd:element ref="MenuItemIterator"/>
          <xsd:element ref="MenuItemSetRef"/>
          <xsd:element ref="MenuItemTree"/>
          <xsd:element ref="PickerMenuItem"/>
          <xsd:element ref="SearchItem"/>
        </xsd:choice>
      </xsd:sequence>
      <!-- An optional action to take when the user clicks the value of this widget when the
           value is not being edited. See ActionBase for details. When specified, the value of
           this widget will be rendered as a link when the value is not being edited. -->
      <xsd:attribute name="action" type="xsd:string"/>
      <!-- An optional boolean expression controlling whether the action should be available
           in this specific context when in read-only mode.  This is ignored if in edit mode
           or if the action is null.  This attribute will be deprecated in a future release,
           please use the 'available' attribute instead.  To disable action in readonly mode,
           you can set available=&quot;CurrentLocation.InEditMode || &lt;action-available-condition&gt;&quot; -->
      <xsd:attribute name="actionAvailable" type="xsd:string"/>
      <!-- Specifies the alignment of this cell. Valid values: "left", "right", or "center".
           If no value is specified, the default alignment is determined by the value type ("center"
           for boolean values; "right" for numeric values; "left" for other value types). -->
      <xsd:attribute name="align" type="WidgetAlignment"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- Boolean expression which, if false, grays out the widget and all its children -->
      <xsd:attribute name="available" type="xsd:string"/>
      <!-- If true, renders the cell contents in bold text. Defaults to false. -->
      <xsd:attribute name="bold" type="xsd:boolean" default="false"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- The HTML colspan attribute, lets this cell span across multiple columns of other rows.
           Useful for generating a "group header" row above a RowIterator. The default value
           is 1. A value greater than 1 is only allowed when the containing row is not iterated
           by a RowIterator. -->
      <xsd:attribute name="colspan" type="xsd:integer"/>
      <!-- The confirmation message to show when "showConfirmMessage" is set. If not specified,
           a standard message will be used. -->
      <xsd:attribute name="confirmMessage" type="xsd:string"/>
      <!-- A Gosu expression used to convert the value picked from a popup before set it into
           the model value of this widget. The picked value will be exposed as a symbol with
           the name "PickedValue" -->
      <xsd:attribute name="conversionExpression" type="xsd:string"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- Boolean expression which, if false, makes this widget and all its children read-only -->
      <xsd:attribute name="editable" type="xsd:string" default="false"/>
      <!-- If true, allows the user to sort the values in the column by clicking on the header.
            Only applicable when the containing row is iterated by a RowIterator. -->
      <xsd:attribute name="enableSort" type="xsd:boolean" default="true"/>
      <!-- If true, this cell will the last cell in the row to be navigated to via the ENTER
           key. Only applicable when "CellNavOnEnter" or "QuickAddOnEnter" is set. Normally not
           specified. Default to false. -->
      <xsd:attribute name="endOfCellNav" type="xsd:boolean" default="false"/>
      <!-- If true, instead of showing a hierarchical menu, the widget will show a single menu
           with sub-menus grouped under headers. -->
      <xsd:attribute name="flatten" type="xsd:boolean" default="false"/>
      <!-- An optional boolean expression, if returns true, this widget will get focus when start
           editing the containing location. -->
      <xsd:attribute name="focusOnStartEditing" type="xsd:string"/>
      <!-- An expression that returns a GWColor instance. Legacy: this method can instead return
           a string corresponding to a CSS Specification Level 3 color name. See GWColor for
           more details. -->
      <xsd:attribute name="fontColor" type="xsd:string"/>
      <!-- An optional expression. If specified, a footer cell with the specified value will
           be rendered for this column. Only applicable when the containing Row is iterated by
           a RowIterator. Not allowed when "footerSumValue" is specified. -->
      <xsd:attribute name="footerLabel" type="xsd:string"/>
      <!-- An optional expression, if specified, will be used as format pattern for the footer
           sum value. Normally not specified, so that the "format" and\or "formatType" of the
           cell value will be applied to footer sum value. Only applicable when "footerSumValue"
           is specified. The result of this expression must conform to the number format defined
           in java.text.DecimalFormat. -->
      <xsd:attribute name="footerSumFormat" type="xsd:string"/>
      <!-- An optional Numeric expression. If specified, a footer cell that sums the specified
           value for all cells in this column will be rendered. Pagination of the list does not
           affect the sum value. Only applicable when the containing row is iterated by a RowIterator.
           Not allowed when "footerLabel" is specified. -->
      <xsd:attribute name="footerSumValue" type="xsd:string"/>
      <!-- How the value is formatted; options include "general", "currency", and "email".  See
           the formatType enumeration. -->
      <xsd:attribute name="formatType" type="FormatType"/>
      <!-- If true, the ListView will be grouped by this cell upon entering the page. Only one
           grouped cell is allowed at any given time and it is only applicable when the column
           is sortable. -->
      <xsd:attribute name="groupedOnEnter" type="xsd:string"/>
      <!-- If true, this Cell and any other grow-enabled Cell will expand to fill remaining space
           in the ListViewPanel. Only applicable when the ListView is set to stretch. -->
      <xsd:attribute name="grow" type="xsd:boolean" default="false"/>
      <!-- If true, generates a checkbox at the beginning of this cell. This checkbox can be
           used to check this entry in the nearest containing Iterator. Defaults to false. Only
           allowed if this cell is inside a CellIterator or under a Row inside a RowIterator. -->
      <xsd:attribute name="hasCheckBox" type="xsd:boolean" default="false"/>
      <!-- CSS height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="height" type="xsd:string"/>
      <!-- A Gosu expression which, if defined, is evaluated to create help info that guides
           the user to edit this widget. The help info will show up if the user hovers the mouse
           over or focuses on the widget, when the widget is in edit mode. -->
      <xsd:attribute name="helpText" type="xsd:string"/>
      <!-- If false, menu items under this input will be shown even when the input is not editable. -->
      <xsd:attribute name="hideChildrenIfReadOnly" type="xsd:boolean" default="true"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- Refers to an image file. If defined, makes this an icon cell. The "value" attribute
           should be a boolean expression describing whether the icon is visible in a given row. -->
      <xsd:attribute name="icon" type="xsd:string"/>
      <!-- Color of the icon. If not set will default to its font color. -->
      <xsd:attribute name="iconColor" type="xsd:string"/>
      <!-- The ALT text for any icon generated in the content cells -->
      <xsd:attribute name="iconLabel" type="xsd:string"/>
      <!-- An enumeration of icon types that determine what the 'icon' property on the widget
           is referring to. -->
      <xsd:attribute name="iconType" type="IconTypeEnum"/>
      <!-- Reference ID of the widget.  This does not have to be globally unique; it only has
           to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <!-- A Gosu expression that converts the presentation value to a model value. The presentation
           value string is exposed to this expression as the symbol "VALUE". -->
      <xsd:attribute name="inputConversion" type="xsd:string"/>
      <!-- An optional expression. If specified, a header cell with the specified value will
           be rendered for this column. Only applicable when the containing row is iterated by
           a RowIterator. -->
      <xsd:attribute name="label" type="xsd:string"/>
      <!-- Custom extension CSS style class to apply to the header. -->
      <xsd:attribute name="labelStyleClass" type="xsd:string"/>
      <!-- CSS max-height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="maxHeight" type="xsd:string"/>
      <!-- CSS max-width value. Can be `px`, or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="maxWidth" type="xsd:string"/>
      <!-- CSS min-height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="minHeight" type="xsd:string"/>
      <!-- CSS min-width value. Can be `px`, or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="minWidth" type="xsd:string"/>
      <!-- The number of child MenuItems to show in each column.  If not specified, all children
           will be shown in a single column. -->
      <xsd:attribute name="numEntriesPerColumn" type="xsd:integer" default="0"/>
      <!-- Gosu expression to be executed after the value is set from a picker. -->
      <xsd:attribute name="onPick" type="xsd:string"/>
      <!-- A Gosu expression that converts the model value to a presentation value. The model
           value is exposed to this expression as the symbol "VALUE". The return type of this
           expression must be String. -->
      <xsd:attribute name="outputConversion" type="xsd:string"/>
      <!-- Relative width when printing to PDF. All widths are relative to the widths of the
           other columns in the ListView -->
      <xsd:attribute name="printWidth" type="xsd:string" default="1"/>
      <!-- A Gosu expression used to validate user value before setting it to the model. This
           expression can access any symbols available to this widget, and a "VALUE" symbol that
           represents the user value. If this expression returns null, the user value will be
           set into the model. Otherwise, an error message containing the result of the expression
           will be displayed on the page, the value will not be set into the model, and no actions
           can be performed until the error is corrected. -->
      <xsd:attribute name="requestValidationExpression" type="xsd:string"/>
      <!-- If true, then the cell must be filled out by the user -->
      <xsd:attribute name="required" type="xsd:string"/>
      <!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * Deprecated.
           DO NOT USE.                                           * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
           Consider using "onChange/onPick/inputConversion/outputConversion" where available.
           If specified and the Input is editable, then any new value of the Input is written
           to this expression (Gosu by default) instead of to "value".  The new value is exposed
           as the symbol "VALUE".  For instance if your value expression is "Foo.getSomething()"
           then it can't be written to since it's not an L-value; so you could specify a setter
           expression along the lines of "Foo.setSomething(VALUE)" Warning: if you use this attribute
           many pebbles features will not work, including but not limited to: * Correct automatic
           detection of the state of the updated data * Correct automatic detection of the editability
           of the data * Correct automatic detection of the maximum size of a text input -->
      <xsd:attribute name="setter" type="xsd:string"/>
      <!-- Boolean expression which determines whether or not to show a confirmation message
           when the field value is changed directly from the UI. It's NOT applicable when the
           value is changed indirectly, for example, as a result of client reflection. -->
      <xsd:attribute name="showConfirmMessage" type="xsd:string"/>
      <!-- If true, shows the icon defined by "icon" in the header cell for this column. The
           default value is true. -->
      <xsd:attribute name="showHeaderIcon" type="xsd:boolean" default="true"/>
      <!-- An optional comma-separated sequence of Expressions, each of which is assumed to be
           a dot-delimited path, the value by which this column will be sorted if the user clicks
           on the header cell. -->
      <xsd:attribute name="sortBy" type="xsd:string"/>
      <!-- Either "ascending" or "descending" -->
      <xsd:attribute name="sortDirection" type="WidgetSortDirection" default="ascending"/>
      <!-- The priority of sorting relative to other sorting elements like IteratorSort and Cell.
           The lower the number, the higher the priority.  The highest priority is "1" -->
      <xsd:attribute name="sortOrder" type="xsd:integer" default="0"/>
      <!-- CSS style class for the cell content; for instance, "miniButton" makes a link appear
           as a small button -->
      <xsd:attribute name="styleClass" type="LinkStyleClass"/>
      <!-- An optional attribute, if set, defer sub menu generation until user tries to open
           the menu. DO NOT set this flag unless the sub menu of this widget is very expensive
           to generate. Setting this flag will reduce time to load the page, however require
           fetching additional info from server in the background, when the menu gets opened
           for the first time after page loaded. -->
      <xsd:attribute name="subMenuOnDemand" type="xsd:boolean" default="false"/>
      <!-- Extra "alt" text to show when the user hovers the mouse over the header cell of this
           column. -->
      <xsd:attribute name="tooltip" type="xsd:string"/>
      <!-- If true, validate before commit that the value of this column is unique across all
           rows in the current page. Only meaningful when this column is editable. -->
      <xsd:attribute name="unique" type="xsd:boolean" default="false"/>
      <!-- A Gosu expression to run before committing the record. This expression can refer to
           any symbols available to this widget. If this expression returns null, the validation
           is considered successful; otherwise, the result of this expression will be displayed
           as an error and the record will not be committed. -->
      <xsd:attribute name="validationExpression" type="xsd:string"/>
      <!-- The label of this cell to be used when it has validation issues. Not needed when this
           cell has a "label". Required if the cell is editable but does not have a "label". -->
      <xsd:attribute name="validationLabel" type="xsd:string"/>
      <!-- The value this element binds to.  If the element is editable then this value is both
           read from and written to (unless "setter" is defined). -->
      <xsd:attribute name="value" type="xsd:string"/>
      <!-- The type of the value expression. -->
      <xsd:attribute name="valueType" type="xsd:string" use="required"/>
      <!-- Boolean expression which, if false, hides the <i>contents</i> of the cell (its "ValueWidget"),
           but not the cell itself.  Needed since hiding the actual cell usually screws up the
           layout -->
      <xsd:attribute name="valueVisible" type="xsd:string"/>
      <!-- Specifies the vertical alignment of this cell. Valid values: "top", "middle", or "bottom".
           If no value is specified, the default alignment is determined by the cell type ("top"
           for Text Areas and Format Cells, "middle" for buttons and icons). -->
      <xsd:attribute name="verticalAlign" type="WidgetVerticalAlignment"/>
      <!-- Boolean expression which, if false, completely hides the widget and all its children -->
      <xsd:attribute name="visible" type="xsd:string"/>
      <!-- CSS width value. Can be `px`, or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="width" type="xsd:string"/>
      <!-- If default, defers to FormatType to decide whether to wrap or not.  If true, allows
           cell content to wrap. -->
      <xsd:attribute name="wrap" type="WrapType" default="default"/>
      <!-- If true, allows Header Cell text content to wrap. Defaults to true. -->
      <xsd:attribute name="wrapLabel" type="xsd:boolean" default="false"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- A Gosu code block that can be embedded in a PCF file. It's usefully for UI data-manipulation
       or navigation logic that is only applicable to this particular PCF file. Do <b>NOT</b>
       put logic that is sharable by multiple PCF files or belongs to DM layer here. Any
       modifications to the code block content will not be upgraded. <b><i>Use with caution.</i></b> -->
  <xsd:element name="Code">
    <xsd:complexType>
      <xsd:simpleContent>
        <xsd:extension base="xsd:string"/>
      </xsd:simpleContent>
    </xsd:complexType>
  </xsd:element>
  
  <!-- Dashboard layout, can contain up to two DashboardColumns. -->
  <xsd:element name="ColumnDashboard">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="Require" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="Variable" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:choice>
        <xsd:element ref="DashboardColumn" minOccurs="1" maxOccurs="2"/>
      </xsd:sequence>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- Reference ID of the widget.  This does not have to be globally unique; it only has
           to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- Renders its content as the footer cell of this column. Do <b>NOT</b> this to generate
       footer cell which contains simple readonly content, which can be handled by the "footerLabel"
       attribute of the Cell. This element is only applicable when the containing Row is
       iterated by a RowIterator. -->
  <xsd:element name="ColumnFooter">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:choice minOccurs="1" maxOccurs="1">
          <xsd:element ref="PrivacyCell"/>
          <xsd:element ref="TextCell"/>
        </xsd:choice>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
  
  <!-- An Input that displays the field as an obscured password, and has an additional "confirm"
       input -->
  <xsd:element name="ConfirmPasswordInput">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="LayoutConfig" minOccurs="0" maxOccurs="1"/>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="AddMenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="AddMenuItemIterator" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemDivider" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemIterator" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemSetRef" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemTree" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PickerMenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PostOnChange" minOccurs="0" maxOccurs="1"/>
          <xsd:element ref="Reflect" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="SearchItem" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:choice>
      </xsd:sequence>
      <!-- An optional action to take when the user clicks the value of this widget when the
           value is not being edited. See ActionBase for list of available action prefixes. When
           specified, the value of this widget will be rendered as a link when the value is not
           being edited. -->
      <xsd:attribute name="action" type="xsd:string"/>
      <!-- An optional boolean expression controlling whether the action should be available
           in this specific context when in read-only mode.  This is ignored if in edit mode
           or if the action is null.  This attribute will be deprecated in a future release,
           please use the 'available' attribute instead.  To disable action in readonly mode,
           you can set available=&quot;CurrentLocation.InEditMode || &lt;action-available-condition&gt;&quot; -->
      <xsd:attribute name="actionAvailable" type="xsd:string"/>
      <!-- Alignment of the widget ("left", "right", or "center") -->
      <xsd:attribute name="align" type="WidgetAlignment"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- Optional. Expression that returns an gw.api.contact.AutocompleteHandler which produces
           auto complete suggestions for this widget. USE WITH CAUTION: If specified, the handler
           will be called at server side on each user key stroke. -->
      <xsd:attribute name="autoComplete" type="xsd:string"/>
      <!-- An optional attribute to specify additional arguments to pass to the "autoComplete"
           handler, if exists.
         (You don't need to specify the id of this widget as part
           of this attribute, because the value of this widget
         is passed to the handler
           by default; If the id of this widget is specified, the argument value passed to the

                   handler will be null, since the value of this widget has not been fully specified
           when the handler is invoked.)
         Refers to the "id" attribute of other value
           widget on page. Multiple ids can be separated by ",".
         If specified, the latest
           value of these widgets will be passed to the autoComplete handler
         when retrieving
           auto complete info. -->
      <xsd:attribute name="autoCompleteArgIds" type="xsd:string"/>
      <!-- If specified, delays autocomplete functionality until the user has entered the specified
           number of characters. -->
      <xsd:attribute name="autoCompleteTriggerChars" type="xsd:integer"/>
      <!-- Boolean expression which, if false, grays out the widget and all its children -->
      <xsd:attribute name="available" type="xsd:string"/>
      <!-- If true then the label is displayed in bold text. -->
      <xsd:attribute name="boldLabel" type="xsd:boolean" default="false"/>
      <!-- If true then the value is displayed in bold text when read-only. -->
      <xsd:attribute name="boldValue" type="xsd:boolean" default="false"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- Gosu expression for the label of the additional confirm input -->
      <xsd:attribute name="confirmLabel" type="xsd:string"/>
      <!-- The confirmation message to show when "showConfirmMessage" is set. If not specified,
           a standard message will be used. -->
      <xsd:attribute name="confirmMessage" type="xsd:string"/>
      <!-- A Gosu expression used to convert the value picked from a popup before set it into
           the model value of this widget. The picked value will be exposed as a symbol with
           the name "PickedValue" -->
      <xsd:attribute name="conversionExpression" type="xsd:string"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- Boolean expression which, if false, makes this widget and all its children read-only -->
      <xsd:attribute name="editable" type="xsd:string" default="false"/>
      <!-- If true, enables html markup in the autocomplete suggestions for this text input by
           means of the following special tags: [i]italic[/i] - makes text italic, [b]bold[/b]
           - makes text bold and [hl]highlighted[/hl] - highlights the text -->
      <xsd:attribute name="enableAutoCompleteMarkup" type="xsd:boolean" default="false"/>
      <!-- If true, instead of showing a hierarchical menu, the widget will show a single menu
           with sub-menus grouped under headers. -->
      <xsd:attribute name="flatten" type="xsd:boolean" default="false"/>
      <!-- An optional boolean expression, if returns true, this widget will get focus when start
           editing the containing location. -->
      <xsd:attribute name="focusOnStartEditing" type="xsd:string"/>
      <!-- An optional expression that returns a format pattern, which must conform to the number
           format defined in java.text.DecimalFormat. When the underlying data type is not a
           Number, only the prefix and suffix of the pattern will be applied. For example, "#.#%"
           formats the Number value as percentage with up to 1 decimal digit. -->
      <xsd:attribute name="format" type="xsd:string"/>
      <!-- How the value is formatted; options include "general", "currency", and "email".  See
           the formatType enumeration. -->
      <xsd:attribute name="formatType" type="FormatType"/>
      <!-- A Gosu expression which, if defined, is evaluated to create help info that guides
           the user to edit this widget. The help info will show up if the user hovers the mouse
           over or focuses on the widget, when the widget is in edit mode. -->
      <xsd:attribute name="helpText" type="xsd:string"/>
      <!-- If false, menu items under this input will be shown even when the input is not editable. -->
      <xsd:attribute name="hideChildrenIfReadOnly" type="xsd:boolean" default="true"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- Reference ID of the widget.  This does not have to be globally unique; it only has
           to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <!-- A Gosu expression that converts the presentation value to a model value. The presentation
           value string is exposed to this expression as the symbol "VALUE". -->
      <xsd:attribute name="inputConversion" type="xsd:string"/>
      <!-- A gosu expression that returns a string to use as the input mask. If not specified,
           the input mask (if any) specified on the value's field validator will be used. This
           field should only be necessary in cases where the data type has no mask or where the
           mask needs to be conditional. The input mask returned should be of the same format
           as a mask specified using the input-mask attribute on a field validator (use # for
           wildcards). A mask that contains no wildcards will just be used as a placeholder value.
           The input mask is recalculated on every render, which means that if the mask is conditional
           and dependent on other data on this page that it can change from one request to the
           next. -->
      <xsd:attribute name="inputMask" type="xsd:string"/>
      <!-- Label to render. -->
      <xsd:attribute name="label" type="xsd:string"/>
      <!-- Boolean expression which, if true, causes the label portion of the Input to be rendered
           above the value -->
      <xsd:attribute name="labelAbove" type="xsd:string" default="false"/>
      <!-- Custom extension CSS style class to apply to the label. -->
      <xsd:attribute name="labelStyleClass" type="xsd:string"/>
      <!-- The maximum number of characters allowed for an input field. -->
      <xsd:attribute name="maxChars" type="xsd:integer" default="0"/>
      <!-- The number of child MenuItems to show in each column.  If not specified, all children
           will be shown in a single column. -->
      <xsd:attribute name="numEntriesPerColumn" type="xsd:integer" default="0"/>
      <!-- If 'requireOldPassword' is true, then this will be used as the label for the old password
           input. -->
      <xsd:attribute name="oldPasswordLabel" type="xsd:string"/>
      <!-- Gosu expression to be executed after the value is set from a picker. -->
      <xsd:attribute name="onPick" type="xsd:string"/>
      <!-- A Gosu expression that converts the model value to a presentation value. The model
           value is exposed to this expression as the symbol "VALUE". The return type of this
           expression must be String. -->
      <xsd:attribute name="outputConversion" type="xsd:string"/>
      <!-- Validation expression that is run on the new password before it is hashed. -->
      <xsd:attribute name="passwordValidationExpression" type="xsd:string"/>
      <!-- A Gosu expression that returns a regular expression string to validate the user input.
            If not specified, the regular expression (if any) specified on the value's field
           validator will be used.  This field should only be necessary in cases where the data
           type has no regular expression or where it needs to be conditional. The value returned
           should be of the same format as a regular expression specified on a field validator.
            This property is recalculated on every render, which means that if the regular expression
           is conditional and dependent on other data on this page that it can change from one
           request to the next. -->
      <xsd:attribute name="regex" type="xsd:string"/>
      <!-- A Gosu expression used to validate user value before setting it to the model. This
           expression can access any symbols available to this widget, and a "VALUE" symbol that
           represents the user value. If this expression returns null, the user value will be
           set into the model. Otherwise, an error message containing the result of the expression
           will be displayed on the page, the value will not be set into the model, and no actions
           can be performed until the error is corrected. -->
      <xsd:attribute name="requestValidationExpression" type="xsd:string"/>
      <!-- Boolean expression which, if true, requires the user to correctly enter their old
           password before their password can be changed. -->
      <xsd:attribute name="requireOldPassword" type="xsd:string" default="false"/>
      <!-- If true, then the cell must be filled out by the user -->
      <xsd:attribute name="required" type="xsd:string"/>
      <!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * Deprecated.
           DO NOT USE.                                           * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
           Consider using "onChange/onPick/inputConversion/outputConversion" where available.
           If specified and the Input is editable, then any new value of the Input is written
           to this expression (Gosu by default) instead of to "value".  The new value is exposed
           as the symbol "VALUE".  For instance if your value expression is "Foo.getSomething()"
           then it can't be written to since it's not an L-value; so you could specify a setter
           expression along the lines of "Foo.setSomething(VALUE)" Warning: if you use this attribute
           many pebbles features will not work, including but not limited to: * Correct automatic
           detection of the state of the updated data * Correct automatic detection of the editability
           of the data * Correct automatic detection of the maximum size of a text input -->
      <xsd:attribute name="setter" type="xsd:string"/>
      <!-- Optional keyboard shortcut character in the form of "Q" or "ShiftQ"; the "Alt" key
           is implicit. This is only applicable when this widget has an "action" specified and
           the value is not being edited. -->
      <xsd:attribute name="shortcut" type="xsd:string"/>
      <!-- Boolean expression which determines whether or not to show a confirmation message
           when the field value is changed directly from the UI. It's NOT applicable when the
           value is changed indirectly, for example, as a result of client reflection. -->
      <xsd:attribute name="showConfirmMessage" type="xsd:string"/>
      <!-- An optional attribute, if set, defer sub menu generation until user tries to open
           the menu. DO NOT set this flag unless the sub menu of this widget is very expensive
           to generate. Setting this flag will reduce time to load the page, however require
           fetching additional info from server in the background, when the menu gets opened
           for the first time after page loaded. -->
      <xsd:attribute name="subMenuOnDemand" type="xsd:boolean" default="false"/>
      <!-- If set to a type other than 'all', will prevent the user from inputting certain types
           of characters on the client on a per character basis. Defaults to 'defaultForType'.
           Can be used in conjunction with the Input Mask property. For instance, a US phone
           number client mask could be implemented by setting this property to 'numeric' and
           the input mask to '+1(###)###-####. Some value widgets, like passwords or dates, may
           modify or ignore this property. This property has no effect on server or database
           level validation of data or input; meaning, an authenticated user could choose to
           manually submit a form with invalid data that would bypass this check. For database
           level validation see the 'regex' property. -->
      <xsd:attribute name="userInputRestriction" type="InputRestrictionType" default="defaultForType"/>
      <!-- A Gosu expression to run before committing the record. This expression can refer to
           any symbols available to this widget. If this expression returns null, the validation
           is considered successful; otherwise, the result of this expression will be displayed
           as an error and the record will not be committed. -->
      <xsd:attribute name="validationExpression" type="xsd:string"/>
      <!-- The value this Input binds to as an Expression.  If the Input is editable then this
           value is both read from and written to (unless "setter" is defined). -->
      <xsd:attribute name="value" type="xsd:string" use="required"/>
      <!-- CSS max-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionMaxWidth" type="xsd:string"/>
      <!-- CSS min-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionMinWidth" type="xsd:string"/>
      <!-- CSS width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionWidth" type="xsd:string"/>
      <!-- The type of the value expression. -->
      <xsd:attribute name="valueType" type="xsd:string" default="java.lang.String"/>
      <!-- If used instead of "editable", specifies whether the Input is editable when data is
           being created -->
      <xsd:attribute name="visible" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- A DetailView field containing arbitrary content, such as links. -->
  <xsd:element name="ContentInput">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="LayoutConfig" minOccurs="0" maxOccurs="1"/>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="Link"/>
          <xsd:element ref="LinkIterator"/>
          <xsd:element ref="PickerLink"/>
        </xsd:choice>
      </xsd:sequence>
      <!-- Alignment of the widget ("left", "right", or "center") -->
      <xsd:attribute name="align" type="WidgetAlignment"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- Boolean expression which, if false, grays out the widget and all its children -->
      <xsd:attribute name="available" type="xsd:string"/>
      <!-- If true then the label is displayed in bold text. -->
      <xsd:attribute name="boldLabel" type="xsd:boolean" default="false"/>
      <!-- If true then the value is displayed in bold text when read-only. -->
      <xsd:attribute name="boldValue" type="xsd:boolean" default="false"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- (Optional) reference ID of the widget.  This does not have to be globally unique;
           it only has to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string"/>
      <!-- Label to render. -->
      <xsd:attribute name="label" type="xsd:string"/>
      <!-- Boolean expression which, if true, causes the label portion of the Input to be rendered
           above the value -->
      <xsd:attribute name="labelAbove" type="xsd:string" default="false"/>
      <!-- Custom extension CSS style class to apply to the label. -->
      <xsd:attribute name="labelStyleClass" type="xsd:string"/>
      <!-- CSS max-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionMaxWidth" type="xsd:string"/>
      <!-- CSS min-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionMinWidth" type="xsd:string"/>
      <!-- CSS width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionWidth" type="xsd:string"/>
      <!-- If used instead of "editable", specifies whether the Input is editable when data is
           being created -->
      <xsd:attribute name="visible" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- An Input specialized for direct coverage term. -->
  <xsd:element name="CovTermDirectInput">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="LayoutConfig" minOccurs="0" maxOccurs="1"/>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="AddMenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="AddMenuItemIterator" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemDivider" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemIterator" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemSetRef" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemTree" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PickerMenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PostOnChange" minOccurs="0" maxOccurs="1"/>
          <xsd:element ref="Reflect" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="SearchItem" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:choice>
      </xsd:sequence>
      <!-- An optional action to take when the user clicks the value of this widget when the
           value is not being edited. See ActionBase for list of available action prefixes. When
           specified, the value of this widget will be rendered as a link when the value is not
           being edited. -->
      <xsd:attribute name="action" type="xsd:string"/>
      <!-- An optional boolean expression controlling whether the action should be available
           in this specific context when in read-only mode.  This is ignored if in edit mode
           or if the action is null.  This attribute will be deprecated in a future release,
           please use the 'available' attribute instead.  To disable action in readonly mode,
           you can set available=&quot;CurrentLocation.InEditMode || &lt;action-available-condition&gt;&quot; -->
      <xsd:attribute name="actionAvailable" type="xsd:string"/>
      <!-- Alignment of the widget ("left", "right", or "center") -->
      <xsd:attribute name="align" type="WidgetAlignment"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- Boolean expression which, if false, grays out the widget and all its children -->
      <xsd:attribute name="available" type="xsd:string"/>
      <!-- If true then the label is displayed in bold text. -->
      <xsd:attribute name="boldLabel" type="xsd:boolean" default="false"/>
      <!-- If true then the value is displayed in bold text when read-only. -->
      <xsd:attribute name="boldValue" type="xsd:boolean" default="false"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- The confirmation message to show when "showConfirmMessage" is set. If not specified,
           a standard message will be used. -->
      <xsd:attribute name="confirmMessage" type="xsd:string"/>
      <!-- A Gosu expression used to convert the value picked from a popup before set it into
           the model value of this widget. The picked value will be exposed as a symbol with
           the name "PickedValue" -->
      <xsd:attribute name="conversionExpression" type="xsd:string"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- Boolean expression which, if false, makes this widget and all its children read-only -->
      <xsd:attribute name="editable" type="xsd:string" default="false"/>
      <!-- If true, instead of showing a hierarchical menu, the widget will show a single menu
           with sub-menus grouped under headers. -->
      <xsd:attribute name="flatten" type="xsd:boolean" default="false"/>
      <!-- An optional boolean expression, if returns true, this widget will get focus when start
           editing the containing location. -->
      <xsd:attribute name="focusOnStartEditing" type="xsd:string"/>
      <!-- How the value is formatted; options include "general", "currency", and "email".  See
           the formatType enumeration. -->
      <xsd:attribute name="formatType" type="FormatType"/>
      <!-- A Gosu expression which, if defined, is evaluated to create help info that guides
           the user to edit this widget. The help info will show up if the user hovers the mouse
           over or focuses on the widget, when the widget is in edit mode. -->
      <xsd:attribute name="helpText" type="xsd:string"/>
      <!-- If false, menu items under this input will be shown even when the input is not editable. -->
      <xsd:attribute name="hideChildrenIfReadOnly" type="xsd:boolean" default="true"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- Reference ID of the widget.  This does not have to be globally unique; it only has
           to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <!-- A Gosu expression that converts the presentation value to a model value. The presentation
           value string is exposed to this expression as the symbol "VALUE". -->
      <xsd:attribute name="inputConversion" type="xsd:string"/>
      <!-- Label to render. -->
      <xsd:attribute name="label" type="xsd:string"/>
      <!-- Boolean expression which, if true, causes the label portion of the Input to be rendered
           above the value -->
      <xsd:attribute name="labelAbove" type="xsd:string" default="false"/>
      <!-- Custom extension CSS style class to apply to the label. -->
      <xsd:attribute name="labelStyleClass" type="xsd:string"/>
      <!-- The number of child MenuItems to show in each column.  If not specified, all children
           will be shown in a single column. -->
      <xsd:attribute name="numEntriesPerColumn" type="xsd:integer" default="0"/>
      <!-- Gosu expression to be executed after the value is set from a picker. -->
      <xsd:attribute name="onPick" type="xsd:string"/>
      <!-- A Gosu expression that converts the model value to a presentation value. The model
           value is exposed to this expression as the symbol "VALUE". The return type of this
           expression must be String. -->
      <xsd:attribute name="outputConversion" type="xsd:string"/>
      <!-- A Gosu expression used to validate user value before setting it to the model. This
           expression can access any symbols available to this widget, and a "VALUE" symbol that
           represents the user value. If this expression returns null, the user value will be
           set into the model. Otherwise, an error message containing the result of the expression
           will be displayed on the page, the value will not be set into the model, and no actions
           can be performed until the error is corrected. -->
      <xsd:attribute name="requestValidationExpression" type="xsd:string"/>
      <!-- If true, then the cell must be filled out by the user -->
      <xsd:attribute name="required" type="xsd:string"/>
      <!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * Deprecated.
           DO NOT USE.                                           * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
           Consider using "onChange/onPick/inputConversion/outputConversion" where available.
           If specified and the Input is editable, then any new value of the Input is written
           to this expression (Gosu by default) instead of to "value".  The new value is exposed
           as the symbol "VALUE".  For instance if your value expression is "Foo.getSomething()"
           then it can't be written to since it's not an L-value; so you could specify a setter
           expression along the lines of "Foo.setSomething(VALUE)" Warning: if you use this attribute
           many pebbles features will not work, including but not limited to: * Correct automatic
           detection of the state of the updated data * Correct automatic detection of the editability
           of the data * Correct automatic detection of the maximum size of a text input -->
      <xsd:attribute name="setter" type="xsd:string"/>
      <!-- Optional keyboard shortcut character in the form of "Q" or "ShiftQ"; the "Alt" key
           is implicit. This is only applicable when this widget has an "action" specified and
           the value is not being edited. -->
      <xsd:attribute name="shortcut" type="xsd:string"/>
      <!-- Boolean expression which determines whether or not to show a confirmation message
           when the field value is changed directly from the UI. It's NOT applicable when the
           value is changed indirectly, for example, as a result of client reflection. -->
      <xsd:attribute name="showConfirmMessage" type="xsd:string"/>
      <!-- An optional attribute, if set, defer sub menu generation until user tries to open
           the menu. DO NOT set this flag unless the sub menu of this widget is very expensive
           to generate. Setting this flag will reduce time to load the page, however require
           fetching additional info from server in the background, when the menu gets opened
           for the first time after page loaded. -->
      <xsd:attribute name="subMenuOnDemand" type="xsd:boolean" default="false"/>
      <!-- A Gosu expression to run before committing the record. This expression can refer to
           any symbols available to this widget. If this expression returns null, the validation
           is considered successful; otherwise, the result of this expression will be displayed
           as an error and the record will not be committed. -->
      <xsd:attribute name="validationExpression" type="xsd:string"/>
      <!-- The value this Input binds to as an Expression.  If the Input is editable then this
           value is both read from and written to (unless "setter" is defined). -->
      <xsd:attribute name="value" type="xsd:string" use="required"/>
      <!-- CSS max-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionMaxWidth" type="xsd:string"/>
      <!-- CSS min-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionMinWidth" type="xsd:string"/>
      <!-- CSS width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionWidth" type="xsd:string"/>
      <!-- The type of the value expression. -->
      <xsd:attribute name="valueType" type="xsd:string" use="required"/>
      <!-- If used instead of "editable", specifies whether the Input is editable when data is
           being created -->
      <xsd:attribute name="visible" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <xsd:element name="CurrencyCell">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="Reflect" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element ref="ColumnFooter" minOccurs="0" maxOccurs="1"/>
        <xsd:element ref="PostOnChange" minOccurs="0" maxOccurs="1"/>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="AddMenuItem"/>
          <xsd:element ref="AddMenuItemIterator"/>
          <xsd:element ref="MenuItem"/>
          <xsd:element ref="MenuItemDivider"/>
          <xsd:element ref="MenuItemIterator"/>
          <xsd:element ref="MenuItemSetRef"/>
          <xsd:element ref="MenuItemTree"/>
          <xsd:element ref="PickerMenuItem"/>
          <xsd:element ref="SearchItem"/>
        </xsd:choice>
      </xsd:sequence>
      <!-- An optional action to take when the user clicks the value of this widget when the
           value is not being edited. See ActionBase for details. When specified, the value of
           this widget will be rendered as a link when the value is not being edited. -->
      <xsd:attribute name="action" type="xsd:string"/>
      <!-- An optional boolean expression controlling whether the action should be available
           in this specific context when in read-only mode.  This is ignored if in edit mode
           or if the action is null.  This attribute will be deprecated in a future release,
           please use the 'available' attribute instead.  To disable action in readonly mode,
           you can set available=&quot;CurrentLocation.InEditMode || &lt;action-available-condition&gt;&quot; -->
      <xsd:attribute name="actionAvailable" type="xsd:string"/>
      <!-- Specifies the alignment of this cell. Valid values: "left", "right", or "center".
           If no value is specified, the default alignment is determined by the value type ("center"
           for boolean values; "right" for numeric values; "left" for other value types). -->
      <xsd:attribute name="align" type="WidgetAlignment"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- Boolean expression which, if false, grays out the widget and all its children -->
      <xsd:attribute name="available" type="xsd:string"/>
      <!-- If true, renders the cell contents in bold text. Defaults to false. -->
      <xsd:attribute name="bold" type="xsd:boolean" default="false"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- The HTML colspan attribute, lets this cell span across multiple columns of other rows.
           Useful for generating a "group header" row above a RowIterator. The default value
           is 1. A value greater than 1 is only allowed when the containing row is not iterated
           by a RowIterator. -->
      <xsd:attribute name="colspan" type="xsd:integer"/>
      <!-- The confirmation message to show when "showConfirmMessage" is set. If not specified,
           a standard message will be used. -->
      <xsd:attribute name="confirmMessage" type="xsd:string"/>
      <!-- A Gosu expression used to convert the value picked from a popup before set it into
           the model value of this widget. The picked value will be exposed as a symbol with
           the name "PickedValue" -->
      <xsd:attribute name="conversionExpression" type="xsd:string"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- Boolean expression which, if false, makes this widget and all its children read-only -->
      <xsd:attribute name="editable" type="xsd:string" default="false"/>
      <!-- If true, allows the user to sort the values in the column by clicking on the header.
            Only applicable when the containing row is iterated by a RowIterator. -->
      <xsd:attribute name="enableSort" type="xsd:boolean" default="true"/>
      <!-- If true, this cell will the last cell in the row to be navigated to via the ENTER
           key. Only applicable when "CellNavOnEnter" or "QuickAddOnEnter" is set. Normally not
           specified. Default to false. -->
      <xsd:attribute name="endOfCellNav" type="xsd:boolean" default="false"/>
      <!-- An optional expression to return a number. If specified, the return value will be
           used to override the default exchange rate when calculating amount for the secondary
           MoneyComponent. Only meaningful, when the underlying MoneyComponent is linked to a
           secondary MoneyComponent with a different currency. <p> <b>Normally, you do NOT want
           to specify this attribute, thus allow the widget to look up the proper exchange rate
           from the primary currency to the secondary currency. Use with caution.</b> -->
      <xsd:attribute name="exchangeRate" type="xsd:string"/>
      <!-- If true, instead of showing a hierarchical menu, the widget will show a single menu
           with sub-menus grouped under headers. -->
      <xsd:attribute name="flatten" type="xsd:boolean" default="false"/>
      <!-- An optional boolean expression, if returns true, this widget will get focus when start
           editing the containing location. -->
      <xsd:attribute name="focusOnStartEditing" type="xsd:string"/>
      <!-- An expression that returns a GWColor instance. Legacy: this method can instead return
           a string corresponding to a CSS Specification Level 3 color name. See GWColor for
           more details. -->
      <xsd:attribute name="fontColor" type="xsd:string"/>
      <!-- An optional expression. If specified, a footer cell with the specified value will
           be rendered for this column. Only applicable when the containing Row is iterated by
           a RowIterator. Not allowed when "footerSumValue" is specified. -->
      <xsd:attribute name="footerLabel" type="xsd:string"/>
      <!-- An optional expression, if specified, will be used as format pattern for the footer
           sum value. Normally not specified, so that the "format" and\or "formatType" of the
           cell value will be applied to footer sum value. Only applicable when "footerSumValue"
           is specified. The result of this expression must conform to the number format defined
           in java.text.DecimalFormat. -->
      <xsd:attribute name="footerSumFormat" type="xsd:string"/>
      <!-- An optional Numeric expression. If specified, a footer cell that sums the specified
           value for all cells in this column will be rendered. Pagination of the list does not
           affect the sum value. Only applicable when the containing row is iterated by a RowIterator.
           Not allowed when "footerLabel" is specified. -->
      <xsd:attribute name="footerSumValue" type="xsd:string"/>
      <!-- How the value is formatted; options include "general", "currency", and "email".  See
           the formatType enumeration. -->
      <xsd:attribute name="formatType" type="FormatType"/>
      <!-- If true, the ListView will be grouped by this cell upon entering the page. Only one
           grouped cell is allowed at any given time and it is only applicable when the column
           is sortable. -->
      <xsd:attribute name="groupedOnEnter" type="xsd:string"/>
      <!-- If true, this Cell and any other grow-enabled Cell will expand to fill remaining space
           in the ListViewPanel. Only applicable when the ListView is set to stretch. -->
      <xsd:attribute name="grow" type="xsd:boolean" default="false"/>
      <!-- If true, generates a checkbox at the beginning of this cell. This checkbox can be
           used to check this entry in the nearest containing Iterator. Defaults to false. Only
           allowed if this cell is inside a CellIterator or under a Row inside a RowIterator. -->
      <xsd:attribute name="hasCheckBox" type="xsd:boolean" default="false"/>
      <!-- CSS height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="height" type="xsd:string"/>
      <!-- A Gosu expression which, if defined, is evaluated to create help info that guides
           the user to edit this widget. The help info will show up if the user hovers the mouse
           over or focuses on the widget, when the widget is in edit mode. -->
      <xsd:attribute name="helpText" type="xsd:string"/>
      <!-- If false, menu items under this input will be shown even when the input is not editable. -->
      <xsd:attribute name="hideChildrenIfReadOnly" type="xsd:boolean" default="true"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- Refers to an image file. If defined, makes this an icon cell. The "value" attribute
           should be a boolean expression describing whether the icon is visible in a given row. -->
      <xsd:attribute name="icon" type="xsd:string"/>
      <!-- Color of the icon. If not set will default to its font color. -->
      <xsd:attribute name="iconColor" type="xsd:string"/>
      <!-- The ALT text for any icon generated in the content cells -->
      <xsd:attribute name="iconLabel" type="xsd:string"/>
      <!-- An enumeration of icon types that determine what the 'icon' property on the widget
           is referring to. -->
      <xsd:attribute name="iconType" type="IconTypeEnum"/>
      <!-- Reference ID of the widget.  This does not have to be globally unique; it only has
           to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <!-- A Gosu expression that converts the presentation value to a model value. The presentation
           value string is exposed to this expression as the symbol "VALUE". -->
      <xsd:attribute name="inputConversion" type="xsd:string"/>
      <!-- An optional expression. If specified, a header cell with the specified value will
           be rendered for this column. Only applicable when the containing row is iterated by
           a RowIterator. -->
      <xsd:attribute name="label" type="xsd:string"/>
      <!-- Custom extension CSS style class to apply to the header. -->
      <xsd:attribute name="labelStyleClass" type="xsd:string"/>
      <!-- The maximum number of characters allowed for an input field. -->
      <xsd:attribute name="maxChars" type="xsd:integer" default="0"/>
      <!-- CSS max-height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="maxHeight" type="xsd:string"/>
      <!-- CSS max-width value. Can be `px`, or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="maxWidth" type="xsd:string"/>
      <!-- CSS min-height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="minHeight" type="xsd:string"/>
      <!-- CSS min-width value. Can be `px`, or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="minWidth" type="xsd:string"/>
      <!-- The number of child MenuItems to show in each column.  If not specified, all children
           will be shown in a single column. -->
      <xsd:attribute name="numEntriesPerColumn" type="xsd:integer" default="0"/>
      <!-- Gosu expression to be executed after the value is set from a picker. -->
      <xsd:attribute name="onPick" type="xsd:string"/>
      <!-- A Gosu expression that converts the model value to a presentation value. The model
           value is exposed to this expression as the symbol "VALUE". The return type of this
           expression must be String. -->
      <xsd:attribute name="outputConversion" type="xsd:string"/>
      <!-- Relative width when printing to PDF. All widths are relative to the widths of the
           other columns in the ListView -->
      <xsd:attribute name="printWidth" type="xsd:string" default="1"/>
      <!-- A Gosu expression used to validate user value before setting it to the model. This
           expression can access any symbols available to this widget, and a "VALUE" symbol that
           represents the user value. If this expression returns null, the user value will be
           set into the model. Otherwise, an error message containing the result of the expression
           will be displayed on the page, the value will not be set into the model, and no actions
           can be performed until the error is corrected. -->
      <xsd:attribute name="requestValidationExpression" type="xsd:string"/>
      <!-- If true, then the cell must be filled out by the user -->
      <xsd:attribute name="required" type="xsd:string"/>
      <!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * Deprecated.
           DO NOT USE.                                           * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
           Consider using "onChange/onPick/inputConversion/outputConversion" where available.
           If specified and the Input is editable, then any new value of the Input is written
           to this expression (Gosu by default) instead of to "value".  The new value is exposed
           as the symbol "VALUE".  For instance if your value expression is "Foo.getSomething()"
           then it can't be written to since it's not an L-value; so you could specify a setter
           expression along the lines of "Foo.setSomething(VALUE)" Warning: if you use this attribute
           many pebbles features will not work, including but not limited to: * Correct automatic
           detection of the state of the updated data * Correct automatic detection of the editability
           of the data * Correct automatic detection of the maximum size of a text input -->
      <xsd:attribute name="setter" type="xsd:string"/>
      <!-- Boolean expression which determines whether or not to show a confirmation message
           when the field value is changed directly from the UI. It's NOT applicable when the
           value is changed indirectly, for example, as a result of client reflection. -->
      <xsd:attribute name="showConfirmMessage" type="xsd:string"/>
      <!-- If true, shows the icon defined by "icon" in the header cell for this column. The
           default value is true. -->
      <xsd:attribute name="showHeaderIcon" type="xsd:boolean" default="true"/>
      <!-- An optional comma-separated sequence of Expressions, each of which is assumed to be
           a dot-delimited path, the value by which this column will be sorted if the user clicks
           on the header cell. -->
      <xsd:attribute name="sortBy" type="xsd:string"/>
      <!-- Either "ascending" or "descending" -->
      <xsd:attribute name="sortDirection" type="WidgetSortDirection" default="ascending"/>
      <!-- The priority of sorting relative to other sorting elements like IteratorSort and Cell.
           The lower the number, the higher the priority.  The highest priority is "1" -->
      <xsd:attribute name="sortOrder" type="xsd:integer" default="0"/>
      <!-- CSS style class for the cell content; for instance, "miniButton" makes a link appear
           as a small button -->
      <xsd:attribute name="styleClass" type="LinkStyleClass"/>
      <!-- An optional attribute, if set, defer sub menu generation until user tries to open
           the menu. DO NOT set this flag unless the sub menu of this widget is very expensive
           to generate. Setting this flag will reduce time to load the page, however require
           fetching additional info from server in the background, when the menu gets opened
           for the first time after page loaded. -->
      <xsd:attribute name="subMenuOnDemand" type="xsd:boolean" default="false"/>
      <!-- Extra "alt" text to show when the user hovers the mouse over the header cell of this
           column. -->
      <xsd:attribute name="tooltip" type="xsd:string"/>
      <!-- If true, validate before commit that the value of this column is unique across all
           rows in the current page. Only meaningful when this column is editable. -->
      <xsd:attribute name="unique" type="xsd:boolean" default="false"/>
      <!-- A Gosu expression to run before committing the record. This expression can refer to
           any symbols available to this widget. If this expression returns null, the validation
           is considered successful; otherwise, the result of this expression will be displayed
           as an error and the record will not be committed. -->
      <xsd:attribute name="validationExpression" type="xsd:string"/>
      <!-- The label of this cell to be used when it has validation issues. Not needed when this
           cell has a "label". Required if the cell is editable but does not have a "label". -->
      <xsd:attribute name="validationLabel" type="xsd:string"/>
      <!-- The value this element binds to.  If the element is editable then this value is both
           read from and written to (unless "setter" is defined). -->
      <xsd:attribute name="value" type="xsd:string"/>
      <!-- The type of the value expression. -->
      <xsd:attribute name="valueType" type="xsd:string" default="gw.api.financials.CurrencyAmount"/>
      <!-- Boolean expression which, if false, hides the <i>contents</i> of the cell (its "ValueWidget"),
           but not the cell itself.  Needed since hiding the actual cell usually screws up the
           layout -->
      <xsd:attribute name="valueVisible" type="xsd:string"/>
      <!-- Specifies the vertical alignment of this cell. Valid values: "top", "middle", or "bottom".
           If no value is specified, the default alignment is determined by the cell type ("top"
           for Text Areas and Format Cells, "middle" for buttons and icons). -->
      <xsd:attribute name="verticalAlign" type="WidgetVerticalAlignment"/>
      <!-- Boolean expression which, if false, completely hides the widget and all its children -->
      <xsd:attribute name="visible" type="xsd:string"/>
      <!-- CSS width value. Can be `px`, or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="width" type="xsd:string"/>
      <!-- If default, defers to FormatType to decide whether to wrap or not.  If true, allows
           cell content to wrap. -->
      <xsd:attribute name="wrap" type="WrapType" default="default"/>
      <!-- If true, allows Header Cell text content to wrap. Defaults to true. -->
      <xsd:attribute name="wrapLabel" type="xsd:boolean" default="false"/>
    </xsd:complexType>
  </xsd:element>
  
  <xsd:element name="CurrencyInput">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="LayoutConfig" minOccurs="0" maxOccurs="1"/>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="AddMenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="AddMenuItemIterator" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemDivider" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemIterator" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemSetRef" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemTree" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PickerMenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PostOnChange" minOccurs="0" maxOccurs="1"/>
          <xsd:element ref="Reflect" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="SearchItem" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:choice>
      </xsd:sequence>
      <!-- An optional action to take when the user clicks the value of this widget when the
           value is not being edited. See ActionBase for list of available action prefixes. When
           specified, the value of this widget will be rendered as a link when the value is not
           being edited. -->
      <xsd:attribute name="action" type="xsd:string"/>
      <!-- An optional boolean expression controlling whether the action should be available
           in this specific context when in read-only mode.  This is ignored if in edit mode
           or if the action is null.  This attribute will be deprecated in a future release,
           please use the 'available' attribute instead.  To disable action in readonly mode,
           you can set available=&quot;CurrentLocation.InEditMode || &lt;action-available-condition&gt;&quot; -->
      <xsd:attribute name="actionAvailable" type="xsd:string"/>
      <!-- Alignment of the widget ("left", "right", or "center") -->
      <xsd:attribute name="align" type="WidgetAlignment"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- Boolean expression which, if false, grays out the widget and all its children -->
      <xsd:attribute name="available" type="xsd:string"/>
      <!-- If true then the label is displayed in bold text. -->
      <xsd:attribute name="boldLabel" type="xsd:boolean" default="false"/>
      <!-- If true then the value is displayed in bold text when read-only. -->
      <xsd:attribute name="boldValue" type="xsd:boolean" default="false"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- The confirmation message to show when "showConfirmMessage" is set. If not specified,
           a standard message will be used. -->
      <xsd:attribute name="confirmMessage" type="xsd:string"/>
      <!-- A Gosu expression used to convert the value picked from a popup before set it into
           the model value of this widget. The picked value will be exposed as a symbol with
           the name "PickedValue" -->
      <xsd:attribute name="conversionExpression" type="xsd:string"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- Boolean expression which, if false, makes this widget and all its children read-only -->
      <xsd:attribute name="editable" type="xsd:string" default="false"/>
      <!-- An optional expression to return a number. If specified, the return value will be
           used to override the default exchange rate when calculating amount for the secondary
           MoneyComponent. Only meaningful, when the underlying MoneyComponent is linked to a
           secondary MoneyComponent with a different currency. <p> <b>Normally, you do NOT want
           to specify this attribute, thus allow the widget to look up the proper exchange rate
           from the primary currency to the secondary currency. Use with caution.</b> -->
      <xsd:attribute name="exchangeRate" type="xsd:string"/>
      <!-- If true, instead of showing a hierarchical menu, the widget will show a single menu
           with sub-menus grouped under headers. -->
      <xsd:attribute name="flatten" type="xsd:boolean" default="false"/>
      <!-- An optional boolean expression, if returns true, this widget will get focus when start
           editing the containing location. -->
      <xsd:attribute name="focusOnStartEditing" type="xsd:string"/>
      <!-- How the value is formatted; options include "general", "currency", and "email".  See
           the formatType enumeration. -->
      <xsd:attribute name="formatType" type="FormatType"/>
      <!-- A Gosu expression which, if defined, is evaluated to create help info that guides
           the user to edit this widget. The help info will show up if the user hovers the mouse
           over or focuses on the widget, when the widget is in edit mode. -->
      <xsd:attribute name="helpText" type="xsd:string"/>
      <!-- If false, menu items under this input will be shown even when the input is not editable. -->
      <xsd:attribute name="hideChildrenIfReadOnly" type="xsd:boolean" default="true"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- Reference ID of the widget.  This does not have to be globally unique; it only has
           to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <!-- A Gosu expression that converts the presentation value to a model value. The presentation
           value string is exposed to this expression as the symbol "VALUE". -->
      <xsd:attribute name="inputConversion" type="xsd:string"/>
      <!-- Label to render. -->
      <xsd:attribute name="label" type="xsd:string"/>
      <!-- Boolean expression which, if true, causes the label portion of the Input to be rendered
           above the value -->
      <xsd:attribute name="labelAbove" type="xsd:string" default="false"/>
      <!-- Custom extension CSS style class to apply to the label. -->
      <xsd:attribute name="labelStyleClass" type="xsd:string"/>
      <!-- The maximum number of characters allowed for an input field. -->
      <xsd:attribute name="maxChars" type="xsd:integer" default="0"/>
      <!-- The number of child MenuItems to show in each column.  If not specified, all children
           will be shown in a single column. -->
      <xsd:attribute name="numEntriesPerColumn" type="xsd:integer" default="0"/>
      <!-- Gosu expression to be executed after the value is set from a picker. -->
      <xsd:attribute name="onPick" type="xsd:string"/>
      <!-- A Gosu expression that converts the model value to a presentation value. The model
           value is exposed to this expression as the symbol "VALUE". The return type of this
           expression must be String. -->
      <xsd:attribute name="outputConversion" type="xsd:string"/>
      <!-- A Gosu expression used to validate user value before setting it to the model. This
           expression can access any symbols available to this widget, and a "VALUE" symbol that
           represents the user value. If this expression returns null, the user value will be
           set into the model. Otherwise, an error message containing the result of the expression
           will be displayed on the page, the value will not be set into the model, and no actions
           can be performed until the error is corrected. -->
      <xsd:attribute name="requestValidationExpression" type="xsd:string"/>
      <!-- If true, then the cell must be filled out by the user -->
      <xsd:attribute name="required" type="xsd:string"/>
      <!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * Deprecated.
           DO NOT USE.                                           * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
           Consider using "onChange/onPick/inputConversion/outputConversion" where available.
           If specified and the Input is editable, then any new value of the Input is written
           to this expression (Gosu by default) instead of to "value".  The new value is exposed
           as the symbol "VALUE".  For instance if your value expression is "Foo.getSomething()"
           then it can't be written to since it's not an L-value; so you could specify a setter
           expression along the lines of "Foo.setSomething(VALUE)" Warning: if you use this attribute
           many pebbles features will not work, including but not limited to: * Correct automatic
           detection of the state of the updated data * Correct automatic detection of the editability
           of the data * Correct automatic detection of the maximum size of a text input -->
      <xsd:attribute name="setter" type="xsd:string"/>
      <!-- Optional keyboard shortcut character in the form of "Q" or "ShiftQ"; the "Alt" key
           is implicit. This is only applicable when this widget has an "action" specified and
           the value is not being edited. -->
      <xsd:attribute name="shortcut" type="xsd:string"/>
      <!-- Boolean expression which determines whether or not to show a confirmation message
           when the field value is changed directly from the UI. It's NOT applicable when the
           value is changed indirectly, for example, as a result of client reflection. -->
      <xsd:attribute name="showConfirmMessage" type="xsd:string"/>
      <!-- An optional attribute, if set, defer sub menu generation until user tries to open
           the menu. DO NOT set this flag unless the sub menu of this widget is very expensive
           to generate. Setting this flag will reduce time to load the page, however require
           fetching additional info from server in the background, when the menu gets opened
           for the first time after page loaded. -->
      <xsd:attribute name="subMenuOnDemand" type="xsd:boolean" default="false"/>
      <!-- A Gosu expression to run before committing the record. This expression can refer to
           any symbols available to this widget. If this expression returns null, the validation
           is considered successful; otherwise, the result of this expression will be displayed
           as an error and the record will not be committed. -->
      <xsd:attribute name="validationExpression" type="xsd:string"/>
      <!-- The value this Input binds to as an Expression.  If the Input is editable then this
           value is both read from and written to (unless "setter" is defined). -->
      <xsd:attribute name="value" type="xsd:string" use="required"/>
      <!-- CSS max-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionMaxWidth" type="xsd:string"/>
      <!-- CSS min-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionMinWidth" type="xsd:string"/>
      <!-- CSS width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionWidth" type="xsd:string"/>
      <!-- The type of the value expression. -->
      <xsd:attribute name="valueType" type="xsd:string" default="gw.api.financials.CurrencyAmount"/>
      <!-- If used instead of "editable", specifies whether the Input is editable when data is
           being created -->
      <xsd:attribute name="visible" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- Wrapper for Tiles that aligns them vertically. -->
  <xsd:element name="DashboardColumn">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="Require" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="Variable" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:choice>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="AbstractTile" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ChartTile" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="DetailViewTile" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ListViewTile" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="TemplateTile" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="TileRef" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:choice>
      </xsd:sequence>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
    </xsd:complexType>
  </xsd:element>
  
  <xsd:element name="DataSeries">
    <xsd:complexType>
      <xsd:choice minOccurs="0" maxOccurs="unbounded"/>
      <!-- An expression that evaluates to the label of each category, as well as the name of
           the general group in which to place this series entry. Names each slice in case of
           Pie/Donut charts. -->
      <xsd:attribute name="categoryLabel" type="xsd:string"/>
      <!-- The type of the elements in the collection defined by dataValues -->
      <xsd:attribute name="dataValueType" type="xsd:string" use="required"/>
      <!-- The expression for the values of this data.  Must be an array, list, or query. -->
      <xsd:attribute name="dataValues" type="xsd:string" use="required"/>
      <!-- A fill color used for this series. For pie charts you need to specify a list of colors
           corresponding to categories. -->
      <xsd:attribute name="fillColor" type="xsd:string"/>
      <!-- An expression for the label of the data series. Any non-empty value is ignored for
           Pie/Donut charts as these accept only single DataSeries and do not need label-based
           differentiation -->
      <xsd:attribute name="label" type="xsd:string"/>
      <!-- A stroke color used for this series. For pie charts you need to specify a list of
           colors corresponding to categories. -->
      <xsd:attribute name="strokeColor" type="xsd:string"/>
      <!-- An expression that maps the yValue in component type of the values. The component
           object is accessable via the value symbol, i.e value.getY(). The returned value must
           be a number. -->
      <xsd:attribute name="value" type="xsd:string" use="required"/>
      <!-- An expression that maps the xValue in the component type of the values. The component
           object is accessible via the value symbol, such as with value.getX(). The returned
           value must be a number or date. Not applicable for categorical charts. -->
      <xsd:attribute name="xValue" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- A ListView cell with extra attributes for a Date field -->
  <xsd:element name="DateCell">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="Reflect" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element ref="ColumnFooter" minOccurs="0" maxOccurs="1"/>
        <xsd:element ref="PostOnChange" minOccurs="0" maxOccurs="1"/>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="AddMenuItem"/>
          <xsd:element ref="AddMenuItemIterator"/>
          <xsd:element ref="MenuItem"/>
          <xsd:element ref="MenuItemDivider"/>
          <xsd:element ref="MenuItemIterator"/>
          <xsd:element ref="MenuItemSetRef"/>
          <xsd:element ref="MenuItemTree"/>
          <xsd:element ref="PickerMenuItem"/>
          <xsd:element ref="SearchItem"/>
        </xsd:choice>
      </xsd:sequence>
      <!-- An optional action to take when the user clicks the value of this widget when the
           value is not being edited. See ActionBase for details. When specified, the value of
           this widget will be rendered as a link when the value is not being edited. -->
      <xsd:attribute name="action" type="xsd:string"/>
      <!-- An optional boolean expression controlling whether the action should be available
           in this specific context when in read-only mode.  This is ignored if in edit mode
           or if the action is null.  This attribute will be deprecated in a future release,
           please use the 'available' attribute instead.  To disable action in readonly mode,
           you can set available=&quot;CurrentLocation.InEditMode || &lt;action-available-condition&gt;&quot; -->
      <xsd:attribute name="actionAvailable" type="xsd:string"/>
      <!-- Specifies the alignment of this cell. Valid values: "left", "right", or "center".
           If no value is specified, the default alignment is determined by the value type ("center"
           for boolean values; "right" for numeric values; "left" for other value types). -->
      <xsd:attribute name="align" type="WidgetAlignment"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- Boolean expression which, if false, grays out the widget and all its children -->
      <xsd:attribute name="available" type="xsd:string"/>
      <!-- If true, renders the cell contents in bold text. Defaults to false. -->
      <xsd:attribute name="bold" type="xsd:boolean" default="false"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- The HTML colspan attribute, lets this cell span across multiple columns of other rows.
           Useful for generating a "group header" row above a RowIterator. The default value
           is 1. A value greater than 1 is only allowed when the containing row is not iterated
           by a RowIterator. -->
      <xsd:attribute name="colspan" type="xsd:integer"/>
      <!-- The confirmation message to show when "showConfirmMessage" is set. If not specified,
           a standard message will be used. -->
      <xsd:attribute name="confirmMessage" type="xsd:string"/>
      <!-- A Gosu expression used to convert the value picked from a popup before set it into
           the model value of this widget. The picked value will be exposed as a symbol with
           the name "PickedValue" -->
      <xsd:attribute name="conversionExpression" type="xsd:string"/>
      <!-- The format of the "day/month/year" portion of the date. Options are "short", "medium",
           and "long".  If a date format is specified and a time format is not, only the date
           will be shown. -->
      <xsd:attribute name="dateFormat" type="DateTimeType"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- Boolean expression which, if false, makes this widget and all its children read-only -->
      <xsd:attribute name="editable" type="xsd:string" default="false"/>
      <!-- If true, allows the user to sort the values in the column by clicking on the header.
            Only applicable when the containing row is iterated by a RowIterator. -->
      <xsd:attribute name="enableSort" type="xsd:boolean" default="true"/>
      <!-- If true, this cell will the last cell in the row to be navigated to via the ENTER
           key. Only applicable when "CellNavOnEnter" or "QuickAddOnEnter" is set. Normally not
           specified. Default to false. -->
      <xsd:attribute name="endOfCellNav" type="xsd:boolean" default="false"/>
      <!-- If true, instead of showing a hierarchical menu, the widget will show a single menu
           with sub-menus grouped under headers. -->
      <xsd:attribute name="flatten" type="xsd:boolean" default="false"/>
      <!-- An optional boolean expression, if returns true, this widget will get focus when start
           editing the containing location. -->
      <xsd:attribute name="focusOnStartEditing" type="xsd:string"/>
      <!-- An expression that returns a GWColor instance. Legacy: this method can instead return
           a string corresponding to a CSS Specification Level 3 color name. See GWColor for
           more details. -->
      <xsd:attribute name="fontColor" type="xsd:string"/>
      <!-- An optional expression. If specified, a footer cell with the specified value will
           be rendered for this column. Only applicable when the containing Row is iterated by
           a RowIterator. Not allowed when "footerSumValue" is specified. -->
      <xsd:attribute name="footerLabel" type="xsd:string"/>
      <!-- An optional expression, if specified, will be used as format pattern for the footer
           sum value. Normally not specified, so that the "format" and\or "formatType" of the
           cell value will be applied to footer sum value. Only applicable when "footerSumValue"
           is specified. The result of this expression must conform to the number format defined
           in java.text.DecimalFormat. -->
      <xsd:attribute name="footerSumFormat" type="xsd:string"/>
      <!-- An optional Numeric expression. If specified, a footer cell that sums the specified
           value for all cells in this column will be rendered. Pagination of the list does not
           affect the sum value. Only applicable when the containing row is iterated by a RowIterator.
           Not allowed when "footerLabel" is specified. -->
      <xsd:attribute name="footerSumValue" type="xsd:string"/>
      <!-- How the value is formatted; options include "general", "currency", and "email".  See
           the formatType enumeration. -->
      <xsd:attribute name="formatType" type="FormatType"/>
      <!-- If true, the ListView will be grouped by this cell upon entering the page. Only one
           grouped cell is allowed at any given time and it is only applicable when the column
           is sortable. -->
      <xsd:attribute name="groupedOnEnter" type="xsd:string"/>
      <!-- If true, this Cell and any other grow-enabled Cell will expand to fill remaining space
           in the ListViewPanel. Only applicable when the ListView is set to stretch. -->
      <xsd:attribute name="grow" type="xsd:boolean" default="false"/>
      <!-- If true, generates a checkbox at the beginning of this cell. This checkbox can be
           used to check this entry in the nearest containing Iterator. Defaults to false. Only
           allowed if this cell is inside a CellIterator or under a Row inside a RowIterator. -->
      <xsd:attribute name="hasCheckBox" type="xsd:boolean" default="false"/>
      <!-- CSS height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="height" type="xsd:string"/>
      <!-- A Gosu expression which, if defined, is evaluated to create help info that guides
           the user to edit this widget. The help info will show up if the user hovers the mouse
           over or focuses on the widget, when the widget is in edit mode. -->
      <xsd:attribute name="helpText" type="xsd:string"/>
      <!-- If false, menu items under this input will be shown even when the input is not editable. -->
      <xsd:attribute name="hideChildrenIfReadOnly" type="xsd:boolean" default="true"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- Refers to an image file. If defined, makes this an icon cell. The "value" attribute
           should be a boolean expression describing whether the icon is visible in a given row. -->
      <xsd:attribute name="icon" type="xsd:string"/>
      <!-- Color of the icon. If not set will default to its font color. -->
      <xsd:attribute name="iconColor" type="xsd:string"/>
      <!-- The ALT text for any icon generated in the content cells -->
      <xsd:attribute name="iconLabel" type="xsd:string"/>
      <!-- An enumeration of icon types that determine what the 'icon' property on the widget
           is referring to. -->
      <xsd:attribute name="iconType" type="IconTypeEnum"/>
      <!-- Reference ID of the widget.  This does not have to be globally unique; it only has
           to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <!-- A Gosu expression that converts the presentation value to a model value. The presentation
           value string is exposed to this expression as the symbol "VALUE". -->
      <xsd:attribute name="inputConversion" type="xsd:string"/>
      <!-- An optional expression. If specified, a header cell with the specified value will
           be rendered for this column. Only applicable when the containing row is iterated by
           a RowIterator. -->
      <xsd:attribute name="label" type="xsd:string"/>
      <!-- Custom extension CSS style class to apply to the header. -->
      <xsd:attribute name="labelStyleClass" type="xsd:string"/>
      <!-- CSS max-height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="maxHeight" type="xsd:string"/>
      <!-- CSS max-width value. Can be `px`, or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="maxWidth" type="xsd:string"/>
      <!-- CSS min-height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="minHeight" type="xsd:string"/>
      <!-- CSS min-width value. Can be `px`, or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="minWidth" type="xsd:string"/>
      <!-- The number of child MenuItems to show in each column.  If not specified, all children
           will be shown in a single column. -->
      <xsd:attribute name="numEntriesPerColumn" type="xsd:integer" default="0"/>
      <!-- Gosu expression to be executed after the value is set from a picker. -->
      <xsd:attribute name="onPick" type="xsd:string"/>
      <!-- A Gosu expression that converts the model value to a presentation value. The model
           value is exposed to this expression as the symbol "VALUE". The return type of this
           expression must be String. -->
      <xsd:attribute name="outputConversion" type="xsd:string"/>
      <!-- Relative width when printing to PDF. All widths are relative to the widths of the
           other columns in the ListView -->
      <xsd:attribute name="printWidth" type="xsd:string" default="1"/>
      <!-- A Gosu expression used to validate user value before setting it to the model. This
           expression can access any symbols available to this widget, and a "VALUE" symbol that
           represents the user value. If this expression returns null, the user value will be
           set into the model. Otherwise, an error message containing the result of the expression
           will be displayed on the page, the value will not be set into the model, and no actions
           can be performed until the error is corrected. -->
      <xsd:attribute name="requestValidationExpression" type="xsd:string"/>
      <!-- If true, then the cell must be filled out by the user -->
      <xsd:attribute name="required" type="xsd:string"/>
      <!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * Deprecated.
           DO NOT USE.                                           * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
           Consider using "onChange/onPick/inputConversion/outputConversion" where available.
           If specified and the Input is editable, then any new value of the Input is written
           to this expression (Gosu by default) instead of to "value".  The new value is exposed
           as the symbol "VALUE".  For instance if your value expression is "Foo.getSomething()"
           then it can't be written to since it's not an L-value; so you could specify a setter
           expression along the lines of "Foo.setSomething(VALUE)" Warning: if you use this attribute
           many pebbles features will not work, including but not limited to: * Correct automatic
           detection of the state of the updated data * Correct automatic detection of the editability
           of the data * Correct automatic detection of the maximum size of a text input -->
      <xsd:attribute name="setter" type="xsd:string"/>
      <!-- Boolean expression which determines whether or not to show a confirmation message
           when the field value is changed directly from the UI. It's NOT applicable when the
           value is changed indirectly, for example, as a result of client reflection. -->
      <xsd:attribute name="showConfirmMessage" type="xsd:string"/>
      <!-- If true, shows the icon defined by "icon" in the header cell for this column. The
           default value is true. -->
      <xsd:attribute name="showHeaderIcon" type="xsd:boolean" default="true"/>
      <!-- An optional comma-separated sequence of Expressions, each of which is assumed to be
           a dot-delimited path, the value by which this column will be sorted if the user clicks
           on the header cell. -->
      <xsd:attribute name="sortBy" type="xsd:string"/>
      <!-- Either "ascending" or "descending" -->
      <xsd:attribute name="sortDirection" type="WidgetSortDirection" default="ascending"/>
      <!-- The priority of sorting relative to other sorting elements like IteratorSort and Cell.
           The lower the number, the higher the priority.  The highest priority is "1" -->
      <xsd:attribute name="sortOrder" type="xsd:integer" default="0"/>
      <!-- CSS style class for the cell content; for instance, "miniButton" makes a link appear
           as a small button -->
      <xsd:attribute name="styleClass" type="LinkStyleClass"/>
      <!-- An optional attribute, if set, defer sub menu generation until user tries to open
           the menu. DO NOT set this flag unless the sub menu of this widget is very expensive
           to generate. Setting this flag will reduce time to load the page, however require
           fetching additional info from server in the background, when the menu gets opened
           for the first time after page loaded. -->
      <xsd:attribute name="subMenuOnDemand" type="xsd:boolean" default="false"/>
      <!-- The format of the "hour/minute/AMorPM" portion of the date. Options are "short", "medium",
           and "long".  If a time format is specified and a date format is not, only the time
           will be shown. -->
      <xsd:attribute name="timeFormat" type="DateTimeType"/>
      <!-- Extra "alt" text to show when the user hovers the mouse over the header cell of this
           column. -->
      <xsd:attribute name="tooltip" type="xsd:string"/>
      <!-- If true, validate before commit that the value of this column is unique across all
           rows in the current page. Only meaningful when this column is editable. -->
      <xsd:attribute name="unique" type="xsd:boolean" default="false"/>
      <!-- A Gosu expression to run before committing the record. This expression can refer to
           any symbols available to this widget. If this expression returns null, the validation
           is considered successful; otherwise, the result of this expression will be displayed
           as an error and the record will not be committed. -->
      <xsd:attribute name="validationExpression" type="xsd:string"/>
      <!-- The label of this cell to be used when it has validation issues. Not needed when this
           cell has a "label". Required if the cell is editable but does not have a "label". -->
      <xsd:attribute name="validationLabel" type="xsd:string"/>
      <!-- The value this element binds to.  If the element is editable then this value is both
           read from and written to (unless "setter" is defined). -->
      <xsd:attribute name="value" type="xsd:string"/>
      <!-- The type of the value expression. -->
      <xsd:attribute name="valueType" type="xsd:string" default="java.util.Date"/>
      <!-- Boolean expression which, if false, hides the <i>contents</i> of the cell (its "ValueWidget"),
           but not the cell itself.  Needed since hiding the actual cell usually screws up the
           layout -->
      <xsd:attribute name="valueVisible" type="xsd:string"/>
      <!-- Specifies the vertical alignment of this cell. Valid values: "top", "middle", or "bottom".
           If no value is specified, the default alignment is determined by the cell type ("top"
           for Text Areas and Format Cells, "middle" for buttons and icons). -->
      <xsd:attribute name="verticalAlign" type="WidgetVerticalAlignment"/>
      <!-- Boolean expression which, if false, completely hides the widget and all its children -->
      <xsd:attribute name="visible" type="xsd:string"/>
      <!-- CSS width value. Can be `px`, or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="width" type="xsd:string"/>
      <!-- If default, defers to FormatType to decide whether to wrap or not.  If true, allows
           cell content to wrap. -->
      <xsd:attribute name="wrap" type="WrapType" default="default"/>
      <!-- If true, allows Header Cell text content to wrap. Defaults to true. -->
      <xsd:attribute name="wrapLabel" type="xsd:boolean" default="false"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- An Input specialized for DateCriteria fields -->
  <xsd:element name="DateCriterionChoiceInput">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="LayoutConfig" minOccurs="0" maxOccurs="1"/>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="AddMenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="AddMenuItemIterator" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemDivider" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemIterator" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemSetRef" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemTree" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PickerMenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PostOnChange" minOccurs="0" maxOccurs="1"/>
          <xsd:element ref="Reflect" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="SearchItem" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:choice>
      </xsd:sequence>
      <!-- An optional action to take when the user clicks the value of this widget when the
           value is not being edited. See ActionBase for list of available action prefixes. When
           specified, the value of this widget will be rendered as a link when the value is not
           being edited. -->
      <xsd:attribute name="action" type="xsd:string"/>
      <!-- An optional boolean expression controlling whether the action should be available
           in this specific context when in read-only mode.  This is ignored if in edit mode
           or if the action is null.  This attribute will be deprecated in a future release,
           please use the 'available' attribute instead.  To disable action in readonly mode,
           you can set available=&quot;CurrentLocation.InEditMode || &lt;action-available-condition&gt;&quot; -->
      <xsd:attribute name="actionAvailable" type="xsd:string"/>
      <!-- Alignment of the widget ("left", "right", or "center") -->
      <xsd:attribute name="align" type="WidgetAlignment"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- Boolean expression which, if false, grays out the widget and all its children -->
      <xsd:attribute name="available" type="xsd:string"/>
      <!-- If true then the label is displayed in bold text. -->
      <xsd:attribute name="boldLabel" type="xsd:boolean" default="false"/>
      <!-- If true then the value is displayed in bold text when read-only. -->
      <xsd:attribute name="boldValue" type="xsd:boolean" default="false"/>
      <!-- Determines if the ChosenOption field will be visible -->
      <xsd:attribute name="chosenOptionVisible" type="xsd:boolean" default="false"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- The confirmation message to show when "showConfirmMessage" is set. If not specified,
           a standard message will be used. -->
      <xsd:attribute name="confirmMessage" type="xsd:string"/>
      <!-- A Gosu expression used to convert the value picked from a popup before set it into
           the model value of this widget. The picked value will be exposed as a symbol with
           the name "PickedValue" -->
      <xsd:attribute name="conversionExpression" type="xsd:string"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- Boolean expression which, if false, makes this widget and all its children read-only -->
      <xsd:attribute name="editable" type="xsd:string" default="false"/>
      <!-- If true, instead of showing a hierarchical menu, the widget will show a single menu
           with sub-menus grouped under headers. -->
      <xsd:attribute name="flatten" type="xsd:boolean" default="false"/>
      <!-- An optional boolean expression, if returns true, this widget will get focus when start
           editing the containing location. -->
      <xsd:attribute name="focusOnStartEditing" type="xsd:string"/>
      <!-- How the value is formatted; options include "general", "currency", and "email".  See
           the formatType enumeration. -->
      <xsd:attribute name="formatType" type="FormatType"/>
      <!-- A Gosu expression which, if defined, is evaluated to create help info that guides
           the user to edit this widget. The help info will show up if the user hovers the mouse
           over or focuses on the widget, when the widget is in edit mode. -->
      <xsd:attribute name="helpText" type="xsd:string"/>
      <!-- If false, menu items under this input will be shown even when the input is not editable. -->
      <xsd:attribute name="hideChildrenIfReadOnly" type="xsd:boolean" default="true"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- Reference ID of the widget.  This does not have to be globally unique; it only has
           to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <!-- A Gosu expression that converts the presentation value to a model value. The presentation
           value string is exposed to this expression as the symbol "VALUE". -->
      <xsd:attribute name="inputConversion" type="xsd:string"/>
      <!-- Label to render. -->
      <xsd:attribute name="label" type="xsd:string"/>
      <!-- Boolean expression which, if true, causes the label portion of the Input to be rendered
           above the value -->
      <xsd:attribute name="labelAbove" type="xsd:string" default="false"/>
      <!-- Custom extension CSS style class to apply to the label. -->
      <xsd:attribute name="labelStyleClass" type="xsd:string"/>
      <!-- The number of child MenuItems to show in each column.  If not specified, all children
           will be shown in a single column. -->
      <xsd:attribute name="numEntriesPerColumn" type="xsd:integer" default="0"/>
      <!-- Gosu expression to be executed after the value is set from a picker. -->
      <xsd:attribute name="onPick" type="xsd:string"/>
      <!-- A Gosu expression that converts the model value to a presentation value. The model
           value is exposed to this expression as the symbol "VALUE". The return type of this
           expression must be String. -->
      <xsd:attribute name="outputConversion" type="xsd:string"/>
      <!-- A Gosu expression used to validate user value before setting it to the model. This
           expression can access any symbols available to this widget, and a "VALUE" symbol that
           represents the user value. If this expression returns null, the user value will be
           set into the model. Otherwise, an error message containing the result of the expression
           will be displayed on the page, the value will not be set into the model, and no actions
           can be performed until the error is corrected. -->
      <xsd:attribute name="requestValidationExpression" type="xsd:string"/>
      <!-- If true, then the cell must be filled out by the user -->
      <xsd:attribute name="required" type="xsd:string"/>
      <!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * Deprecated.
           DO NOT USE.                                           * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
           Consider using "onChange/onPick/inputConversion/outputConversion" where available.
           If specified and the Input is editable, then any new value of the Input is written
           to this expression (Gosu by default) instead of to "value".  The new value is exposed
           as the symbol "VALUE".  For instance if your value expression is "Foo.getSomething()"
           then it can't be written to since it's not an L-value; so you could specify a setter
           expression along the lines of "Foo.setSomething(VALUE)" Warning: if you use this attribute
           many pebbles features will not work, including but not limited to: * Correct automatic
           detection of the state of the updated data * Correct automatic detection of the editability
           of the data * Correct automatic detection of the maximum size of a text input -->
      <xsd:attribute name="setter" type="xsd:string"/>
      <!-- Optional keyboard shortcut character in the form of "Q" or "ShiftQ"; the "Alt" key
           is implicit. This is only applicable when this widget has an "action" specified and
           the value is not being edited. -->
      <xsd:attribute name="shortcut" type="xsd:string"/>
      <!-- Boolean expression which determines whether or not to show a confirmation message
           when the field value is changed directly from the UI. It's NOT applicable when the
           value is changed indirectly, for example, as a result of client reflection. -->
      <xsd:attribute name="showConfirmMessage" type="xsd:string"/>
      <!-- An optional attribute, if set, defer sub menu generation until user tries to open
           the menu. DO NOT set this flag unless the sub menu of this widget is very expensive
           to generate. Setting this flag will reduce time to load the page, however require
           fetching additional info from server in the background, when the menu gets opened
           for the first time after page loaded. -->
      <xsd:attribute name="subMenuOnDemand" type="xsd:boolean" default="false"/>
      <!-- A Gosu expression to run before committing the record. This expression can refer to
           any symbols available to this widget. If this expression returns null, the validation
           is considered successful; otherwise, the result of this expression will be displayed
           as an error and the record will not be committed. -->
      <xsd:attribute name="validationExpression" type="xsd:string"/>
      <!-- The value this Input binds to as an Expression.  If the Input is editable then this
           value is both read from and written to (unless "setter" is defined). -->
      <xsd:attribute name="value" type="xsd:string" use="required"/>
      <!-- CSS max-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionMaxWidth" type="xsd:string"/>
      <!-- CSS min-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionMinWidth" type="xsd:string"/>
      <!-- CSS width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionWidth" type="xsd:string"/>
      <!-- The type of the value expression. -->
      <xsd:attribute name="valueType" type="xsd:string" default="entity.DateCriterionChoice"/>
      <!-- If used instead of "editable", specifies whether the Input is editable when data is
           being created -->
      <xsd:attribute name="visible" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- An Input with extra attributes for Date fields -->
  <xsd:element name="DateInput">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="LayoutConfig" minOccurs="0" maxOccurs="1"/>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="AddMenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="AddMenuItemIterator" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemDivider" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemIterator" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemSetRef" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemTree" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PickerMenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PostOnChange" minOccurs="0" maxOccurs="1"/>
          <xsd:element ref="Reflect" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="SearchItem" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:choice>
      </xsd:sequence>
      <!-- An optional action to take when the user clicks the value of this widget when the
           value is not being edited. See ActionBase for list of available action prefixes. When
           specified, the value of this widget will be rendered as a link when the value is not
           being edited. -->
      <xsd:attribute name="action" type="xsd:string"/>
      <!-- An optional boolean expression controlling whether the action should be available
           in this specific context when in read-only mode.  This is ignored if in edit mode
           or if the action is null.  This attribute will be deprecated in a future release,
           please use the 'available' attribute instead.  To disable action in readonly mode,
           you can set available=&quot;CurrentLocation.InEditMode || &lt;action-available-condition&gt;&quot; -->
      <xsd:attribute name="actionAvailable" type="xsd:string"/>
      <!-- Alignment of the widget ("left", "right", or "center") -->
      <xsd:attribute name="align" type="WidgetAlignment"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- Boolean expression which, if false, grays out the widget and all its children -->
      <xsd:attribute name="available" type="xsd:string"/>
      <!-- If true then the label is displayed in bold text. -->
      <xsd:attribute name="boldLabel" type="xsd:boolean" default="false"/>
      <!-- If true then the value is displayed in bold text when read-only. -->
      <xsd:attribute name="boldValue" type="xsd:boolean" default="false"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- The confirmation message to show when "showConfirmMessage" is set. If not specified,
           a standard message will be used. -->
      <xsd:attribute name="confirmMessage" type="xsd:string"/>
      <!-- A Gosu expression used to convert the value picked from a popup before set it into
           the model value of this widget. The picked value will be exposed as a symbol with
           the name "PickedValue" -->
      <xsd:attribute name="conversionExpression" type="xsd:string"/>
      <!-- The format of the "day/month/year" portion of the date. Options are "short", "medium",
           and "long".  If a date format is specified and a time format is not, only the date
           will be shown. -->
      <xsd:attribute name="dateFormat" type="DateTimeType"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- Boolean expression which, if false, makes this widget and all its children read-only -->
      <xsd:attribute name="editable" type="xsd:string" default="false"/>
      <!-- If true, instead of showing a hierarchical menu, the widget will show a single menu
           with sub-menus grouped under headers. -->
      <xsd:attribute name="flatten" type="xsd:boolean" default="false"/>
      <!-- An optional boolean expression, if returns true, this widget will get focus when start
           editing the containing location. -->
      <xsd:attribute name="focusOnStartEditing" type="xsd:string"/>
      <!-- How the value is formatted; options include "general", "currency", and "email".  See
           the formatType enumeration. -->
      <xsd:attribute name="formatType" type="FormatType"/>
      <!-- A Gosu expression which, if defined, is evaluated to create help info that guides
           the user to edit this widget. The help info will show up if the user hovers the mouse
           over or focuses on the widget, when the widget is in edit mode. -->
      <xsd:attribute name="helpText" type="xsd:string"/>
      <!-- If false, menu items under this input will be shown even when the input is not editable. -->
      <xsd:attribute name="hideChildrenIfReadOnly" type="xsd:boolean" default="true"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- Reference ID of the widget.  This does not have to be globally unique; it only has
           to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <!-- Label to render. -->
      <xsd:attribute name="label" type="xsd:string"/>
      <!-- Boolean expression which, if true, causes the label portion of the Input to be rendered
           above the value -->
      <xsd:attribute name="labelAbove" type="xsd:string" default="false"/>
      <!-- Custom extension CSS style class to apply to the label. -->
      <xsd:attribute name="labelStyleClass" type="xsd:string"/>
      <!-- The number of child MenuItems to show in each column.  If not specified, all children
           will be shown in a single column. -->
      <xsd:attribute name="numEntriesPerColumn" type="xsd:integer" default="0"/>
      <!-- Gosu expression to be executed after the value is set from a picker. -->
      <xsd:attribute name="onPick" type="xsd:string"/>
      <!-- A Gosu expression used to validate user value before setting it to the model. This
           expression can access any symbols available to this widget, and a "VALUE" symbol that
           represents the user value. If this expression returns null, the user value will be
           set into the model. Otherwise, an error message containing the result of the expression
           will be displayed on the page, the value will not be set into the model, and no actions
           can be performed until the error is corrected. -->
      <xsd:attribute name="requestValidationExpression" type="xsd:string"/>
      <!-- If true, then the cell must be filled out by the user -->
      <xsd:attribute name="required" type="xsd:string"/>
      <!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * Deprecated.
           DO NOT USE.                                           * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
           Consider using "onChange/onPick/inputConversion/outputConversion" where available.
           If specified and the Input is editable, then any new value of the Input is written
           to this expression (Gosu by default) instead of to "value".  The new value is exposed
           as the symbol "VALUE".  For instance if your value expression is "Foo.getSomething()"
           then it can't be written to since it's not an L-value; so you could specify a setter
           expression along the lines of "Foo.setSomething(VALUE)" Warning: if you use this attribute
           many pebbles features will not work, including but not limited to: * Correct automatic
           detection of the state of the updated data * Correct automatic detection of the editability
           of the data * Correct automatic detection of the maximum size of a text input -->
      <xsd:attribute name="setter" type="xsd:string"/>
      <!-- Optional keyboard shortcut character in the form of "Q" or "ShiftQ"; the "Alt" key
           is implicit. This is only applicable when this widget has an "action" specified and
           the value is not being edited. -->
      <xsd:attribute name="shortcut" type="xsd:string"/>
      <!-- Boolean expression which determines whether or not to show a confirmation message
           when the field value is changed directly from the UI. It's NOT applicable when the
           value is changed indirectly, for example, as a result of client reflection. -->
      <xsd:attribute name="showConfirmMessage" type="xsd:string"/>
      <!-- An optional attribute, if set, defer sub menu generation until user tries to open
           the menu. DO NOT set this flag unless the sub menu of this widget is very expensive
           to generate. Setting this flag will reduce time to load the page, however require
           fetching additional info from server in the background, when the menu gets opened
           for the first time after page loaded. -->
      <xsd:attribute name="subMenuOnDemand" type="xsd:boolean" default="false"/>
      <!-- The format of the "hour/minute/AMorPM" portion of the date. Options are "short", "medium",
           and "long".  If a time format is specified and a date format is not, only the time
           will be shown. -->
      <xsd:attribute name="timeFormat" type="DateTimeType"/>
      <!-- A Gosu expression to run before committing the record. This expression can refer to
           any symbols available to this widget. If this expression returns null, the validation
           is considered successful; otherwise, the result of this expression will be displayed
           as an error and the record will not be committed. -->
      <xsd:attribute name="validationExpression" type="xsd:string"/>
      <!-- The value this Input binds to as an Expression.  If the Input is editable then this
           value is both read from and written to (unless "setter" is defined). -->
      <xsd:attribute name="value" type="xsd:string" use="required"/>
      <!-- CSS max-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionMaxWidth" type="xsd:string"/>
      <!-- CSS min-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionMinWidth" type="xsd:string"/>
      <!-- CSS width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionWidth" type="xsd:string"/>
      <!-- The type of the value expression. -->
      <xsd:attribute name="valueType" type="xsd:string" default="java.util.Date"/>
      <!-- If used instead of "editable", specifies whether the Input is editable when data is
           being created -->
      <xsd:attribute name="visible" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- A DateTime Input with separate fields for viewing/editing the date and time components
       of a java.util.Date value -->
  <xsd:element name="DateTimeInput">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="LayoutConfig" minOccurs="0" maxOccurs="1"/>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="AddMenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="AddMenuItemIterator" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemDivider" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemIterator" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemSetRef" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemTree" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PickerMenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PostOnChange" minOccurs="0" maxOccurs="1"/>
          <xsd:element ref="Reflect" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="SearchItem" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:choice>
      </xsd:sequence>
      <!-- An optional action to take when the user clicks the value of this widget when the
           value is not being edited. See ActionBase for list of available action prefixes. When
           specified, the value of this widget will be rendered as a link when the value is not
           being edited. -->
      <xsd:attribute name="action" type="xsd:string"/>
      <!-- An optional boolean expression controlling whether the action should be available
           in this specific context when in read-only mode.  This is ignored if in edit mode
           or if the action is null.  This attribute will be deprecated in a future release,
           please use the 'available' attribute instead.  To disable action in readonly mode,
           you can set available=&quot;CurrentLocation.InEditMode || &lt;action-available-condition&gt;&quot; -->
      <xsd:attribute name="actionAvailable" type="xsd:string"/>
      <!-- Alignment of the widget ("left", "right", or "center") -->
      <xsd:attribute name="align" type="WidgetAlignment"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- Boolean expression which, if false, grays out the widget and all its children -->
      <xsd:attribute name="available" type="xsd:string"/>
      <!-- If true then the label is displayed in bold text. -->
      <xsd:attribute name="boldLabel" type="xsd:boolean" default="false"/>
      <!-- If true then the value is displayed in bold text when read-only. -->
      <xsd:attribute name="boldValue" type="xsd:boolean" default="false"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- The confirmation message to show when "showConfirmMessage" is set. If not specified,
           a standard message will be used. -->
      <xsd:attribute name="confirmMessage" type="xsd:string"/>
      <!-- A Gosu expression used to convert the value picked from a popup before set it into
           the model value of this widget. The picked value will be exposed as a symbol with
           the name "PickedValue" -->
      <xsd:attribute name="conversionExpression" type="xsd:string"/>
      <xsd:attribute name="dateEditable" type="xsd:string"/>
      <xsd:attribute name="dateVisible" type="xsd:string"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- Boolean expression which, if false, makes this widget and all its children read-only -->
      <xsd:attribute name="editable" type="xsd:string" default="false"/>
      <!-- If true, instead of showing a hierarchical menu, the widget will show a single menu
           with sub-menus grouped under headers. -->
      <xsd:attribute name="flatten" type="xsd:boolean" default="false"/>
      <!-- An optional boolean expression, if returns true, this widget will get focus when start
           editing the containing location. -->
      <xsd:attribute name="focusOnStartEditing" type="xsd:string"/>
      <!-- How the value is formatted; options include "general", "currency", and "email".  See
           the formatType enumeration. -->
      <xsd:attribute name="formatType" type="FormatType"/>
      <!-- A Gosu expression which, if defined, is evaluated to create help info that guides
           the user to edit this widget. The help info will show up if the user hovers the mouse
           over or focuses on the widget, when the widget is in edit mode. -->
      <xsd:attribute name="helpText" type="xsd:string"/>
      <!-- If false, menu items under this input will be shown even when the input is not editable. -->
      <xsd:attribute name="hideChildrenIfReadOnly" type="xsd:boolean" default="true"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- Reference ID of the widget.  This does not have to be globally unique; it only has
           to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <!-- A Gosu expression that converts the presentation value to a model value. The presentation
           value string is exposed to this expression as the symbol "VALUE". -->
      <xsd:attribute name="inputConversion" type="xsd:string"/>
      <!-- Label to render. -->
      <xsd:attribute name="label" type="xsd:string"/>
      <!-- Boolean expression which, if true, causes the label portion of the Input to be rendered
           above the value -->
      <xsd:attribute name="labelAbove" type="xsd:string" default="false"/>
      <!-- Custom extension CSS style class to apply to the label. -->
      <xsd:attribute name="labelStyleClass" type="xsd:string"/>
      <!-- The number of child MenuItems to show in each column.  If not specified, all children
           will be shown in a single column. -->
      <xsd:attribute name="numEntriesPerColumn" type="xsd:integer" default="0"/>
      <xsd:attribute name="onChange" type="xsd:string"/>
      <!-- Gosu expression to be executed after the value is set from a picker. -->
      <xsd:attribute name="onPick" type="xsd:string"/>
      <!-- A Gosu expression that converts the model value to a presentation value. The model
           value is exposed to this expression as the symbol "VALUE". The return type of this
           expression must be String. -->
      <xsd:attribute name="outputConversion" type="xsd:string"/>
      <!-- A Gosu expression used to validate user value before setting it to the model. This
           expression can access any symbols available to this widget, and a "VALUE" symbol that
           represents the user value. If this expression returns null, the user value will be
           set into the model. Otherwise, an error message containing the result of the expression
           will be displayed on the page, the value will not be set into the model, and no actions
           can be performed until the error is corrected. -->
      <xsd:attribute name="requestValidationExpression" type="xsd:string"/>
      <!-- If true, then the cell must be filled out by the user -->
      <xsd:attribute name="required" type="xsd:string"/>
      <!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * Deprecated.
           DO NOT USE.                                           * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
           Consider using "onChange/onPick/inputConversion/outputConversion" where available.
           If specified and the Input is editable, then any new value of the Input is written
           to this expression (Gosu by default) instead of to "value".  The new value is exposed
           as the symbol "VALUE".  For instance if your value expression is "Foo.getSomething()"
           then it can't be written to since it's not an L-value; so you could specify a setter
           expression along the lines of "Foo.setSomething(VALUE)" Warning: if you use this attribute
           many pebbles features will not work, including but not limited to: * Correct automatic
           detection of the state of the updated data * Correct automatic detection of the editability
           of the data * Correct automatic detection of the maximum size of a text input -->
      <xsd:attribute name="setter" type="xsd:string"/>
      <!-- Optional keyboard shortcut character in the form of "Q" or "ShiftQ"; the "Alt" key
           is implicit. This is only applicable when this widget has an "action" specified and
           the value is not being edited. -->
      <xsd:attribute name="shortcut" type="xsd:string"/>
      <!-- Boolean expression which determines whether or not to show a confirmation message
           when the field value is changed directly from the UI. It's NOT applicable when the
           value is changed indirectly, for example, as a result of client reflection. -->
      <xsd:attribute name="showConfirmMessage" type="xsd:string"/>
      <!-- An optional attribute, if set, defer sub menu generation until user tries to open
           the menu. DO NOT set this flag unless the sub menu of this widget is very expensive
           to generate. Setting this flag will reduce time to load the page, however require
           fetching additional info from server in the background, when the menu gets opened
           for the first time after page loaded. -->
      <xsd:attribute name="subMenuOnDemand" type="xsd:boolean" default="false"/>
      <xsd:attribute name="timeEditable" type="xsd:string"/>
      <xsd:attribute name="timeVisible" type="xsd:string"/>
      <!-- A Gosu expression to run before committing the record. This expression can refer to
           any symbols available to this widget. If this expression returns null, the validation
           is considered successful; otherwise, the result of this expression will be displayed
           as an error and the record will not be committed. -->
      <xsd:attribute name="validationExpression" type="xsd:string"/>
      <!-- The value this Input binds to as an Expression.  If the Input is editable then this
           value is both read from and written to (unless "setter" is defined). -->
      <xsd:attribute name="value" type="xsd:string" use="required"/>
      <!-- CSS max-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionMaxWidth" type="xsd:string"/>
      <!-- CSS min-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionMinWidth" type="xsd:string"/>
      <!-- CSS width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionWidth" type="xsd:string"/>
      <!-- The type of the value expression. -->
      <xsd:attribute name="valueType" type="xsd:string" default="java.util.Date"/>
      <!-- If used instead of "editable", specifies whether the Input is editable when data is
           being created -->
      <xsd:attribute name="visible" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- A panel made up of Input Columns and Input Sections whose content is formatted as
       a series of label / value pairs -->
  <xsd:element name="DetailViewPanel">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="Expose" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ExposeIterator" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ExposeRowTree" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ReferencedWidget" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="Require" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="Variable" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:choice>
        <xsd:element ref="Layout" minOccurs="0" maxOccurs="1"/>
        <xsd:element ref="InputHeaderSection" minOccurs="0" maxOccurs="1"/>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="AddressAutoFillInput"/>
          <xsd:element ref="AddressAutoFillRangeInput"/>
          <xsd:element ref="AddressAutoFillTextInput"/>
          <xsd:element ref="AddressBookContactInput"/>
          <xsd:element ref="AltGroupInput"/>
          <xsd:element ref="AltUserInput"/>
          <xsd:element ref="AssigneeInput"/>
          <xsd:element ref="BarInput"/>
          <xsd:element ref="BooleanDropdownInput"/>
          <xsd:element ref="BooleanRadioInput"/>
          <xsd:element ref="BulletPointTextInput"/>
          <xsd:element ref="ButtonInput"/>
          <xsd:element ref="CheckBoxGroupInput"/>
          <xsd:element ref="CheckBoxInput"/>
          <xsd:element ref="Choice"/>
          <xsd:element ref="ConfirmPasswordInput"/>
          <xsd:element ref="ContentInput"/>
          <xsd:element ref="CovTermDirectInput"/>
          <xsd:element ref="CurrencyInput"/>
          <xsd:element ref="DateCriterionChoiceInput"/>
          <xsd:element ref="DateInput"/>
          <xsd:element ref="DateTimeInput"/>
          <xsd:element ref="DocumentTemplateInput"/>
          <xsd:element ref="EmbeddedInput"/>
          <xsd:element ref="FileInput"/>
          <xsd:element ref="GroupInput"/>
          <xsd:element ref="HiddenInput"/>
          <xsd:element ref="IndustryCodeInput"/>
          <xsd:element ref="InputColumnSubGroup"/>
          <xsd:element ref="InputDivider"/>
          <xsd:element ref="InputGroup"/>
          <xsd:element ref="InputIterator"/>
          <xsd:element ref="InputSetRef"/>
          <xsd:element ref="Label"/>
          <xsd:element ref="ListViewInput"/>
          <xsd:element ref="LoginSubmitButton"/>
          <xsd:element ref="MediaUploader"/>
          <xsd:element ref="ModifierInput"/>
          <xsd:element ref="MonetaryAmountInput"/>
          <xsd:element ref="NoteBodyInput"/>
          <xsd:element ref="OrgInput"/>
          <xsd:element ref="PasswordInput"/>
          <xsd:element ref="PickerInput"/>
          <xsd:element ref="PreFormattedTextInput"/>
          <xsd:element ref="PrivacyInput"/>
          <xsd:element ref="ProducerCodeInput"/>
          <xsd:element ref="ProgressInput"/>
          <xsd:element ref="RangeInput"/>
          <xsd:element ref="RangeRadioInput"/>
          <xsd:element ref="RiskClassInput"/>
          <xsd:element ref="TextAreaInput"/>
          <xsd:element ref="TextInput"/>
          <xsd:element ref="TileInputSetRef"/>
          <xsd:element ref="TypeKeyCheckBoxGroupInput"/>
          <xsd:element ref="TypeKeyInput"/>
          <xsd:element ref="TypeKeyRadioInput"/>
          <xsd:element ref="UserInput"/>
        </xsd:choice>
        <xsd:element ref="InputColumn" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element ref="InputFooterSection" minOccurs="0" maxOccurs="1"/>
        <xsd:element ref="Code" minOccurs="0" maxOccurs="1"/>
      </xsd:sequence>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- Boolean expression which, if false, grays out the widget and all its children -->
      <xsd:attribute name="available" type="xsd:string"/>
      <!-- If true, the Widget will have a border around it. Purely a visual effect. -->
      <xsd:attribute name="border" type="xsd:boolean" default="false"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- If true, show divider between child columns. Default to true. -->
      <xsd:attribute name="columnDivider" type="xsd:boolean" default="true"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- Boolean expression which, if false, makes this widget and all its children read-only -->
      <xsd:attribute name="editable" type="xsd:string"/>
      <!-- CSS height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="height" type="xsd:string"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- !Deprecated. Use panelStyle. If true, the Panel will have a background color specified
           via the SASS variable. Overrides the value in panelStyle. -->
      <xsd:attribute name="highlighted" type="xsd:string"/>
      <!-- (Optional) reference ID of the widget.  This does not have to be globally unique;
           it only has to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string"/>
      <!-- !Deprecated. If true, the DetailView will be an inline element. Default to false. -->
      <xsd:attribute name="inline" type="xsd:boolean" default="false"/>
      <!-- If true, independent of 'panel inner spacing', the container will left indent its
           children by a fixed amount. This is useful for displaying nested data throughout a
           page. Purely a visual effect. -->
      <xsd:attribute name="leftIndent" type="xsd:boolean" default="false"/>
      <!-- CSS max-height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="maxHeight" type="xsd:string"/>
      <!-- CSS max-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="maxWidth" type="xsd:string"/>
      <!-- CSS min-height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="minHeight" type="xsd:string"/>
      <!-- CSS min-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="minWidth" type="xsd:string"/>
      <!-- An optional String which, if specified, means that any element dynamically including
           this widget must specify the same mode.  There is also a special mode "default" you
           can use which means "Use this widget if no widget with the specified mode exists".
            You can also have this widget match more than one mode by separating mode strings
           with a | character. -->
      <xsd:attribute name="mode" type="xsd:string"/>
      <!-- In general, determines the amount of spacing INSIDE of the Panel in all 4 directions:
           top, right, bottom, left. However, different Panels may have requirements that prevent
           all 4 directions from being modified. -->
      <xsd:attribute name="panelInnerSpacing" type="WidgetSpacing" default="none"/>
      <!-- In general, determines the amount of spacing OUTSIDE of the Panel in all 4 directions:
           top, right, bottom, left. However, different Panels may have requirements that prevent
           all 4 directions from being modified. -->
      <xsd:attribute name="panelOuterSpacing" type="WidgetSpacing" default="none"/>
      <!-- The style of the Panel. In general, this refers to the background color, but some
           styles can change other aspects such as font color, spacing, or filters. -->
      <xsd:attribute name="panelStyle" type="xsd:string"/>
      <!-- Boolean expression which, if false, completely hides the widget and all its children -->
      <xsd:attribute name="visible" type="xsd:string"/>
      <!-- CSS width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="width" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- A panel whose content is formatted as a series of label / value pairs. -->
  <xsd:element name="DetailViewTile">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="Require" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="Variable" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:choice>
        <xsd:element ref="TileActions" minOccurs="0" maxOccurs="1"/>
        <xsd:element ref="BadgeProperties" minOccurs="0" maxOccurs="1"/>
        <xsd:element ref="PerformanceIndicatorRow" minOccurs="0" maxOccurs="1"/>
        <xsd:element ref="TileInputColumn" minOccurs="0" maxOccurs="2"/>
      </xsd:sequence>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- Show divider between child columns. Defaults to false. -->
      <xsd:attribute name="columnDivider" type="xsd:boolean" default="false"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- Reference ID of the widget.  This does not have to be globally unique; it only has
           to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <!-- The title of the tile.  The title is shown on the top of the tile. -->
      <xsd:attribute name="title" type="xsd:string" use="required"/>
      <!-- The view more action.  The 'View more' link is shown in the tile footer. -->
      <xsd:attribute name="viewMoreAction" type="xsd:string"/>
      <!-- The view more label of the tile.  By default 'View More' -->
      <xsd:attribute name="viewMoreLabel" type="xsd:string" default="DisplayKey.get(&quot;Web.Tile.ViewMore&quot;)"/>
      <!-- An expression that indicates if the view more link is visible. -->
      <xsd:attribute name="viewMoreVisible" type="xsd:string"/>
      <!-- Boolean expression which, if false, completely hides the widget and all its children -->
      <xsd:attribute name="visible" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <xsd:element name="DocumentTemplateInput">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="LayoutConfig" minOccurs="0" maxOccurs="1"/>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="AddMenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="AddMenuItemIterator" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemDivider" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemIterator" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemSetRef" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemTree" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PickerMenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PostOnChange" minOccurs="0" maxOccurs="1"/>
          <xsd:element ref="Reflect" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="SearchItem" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:choice>
      </xsd:sequence>
      <!-- An optional action to take when the user clicks the value of this widget when the
           value is not being edited. See ActionBase for list of available action prefixes. When
           specified, the value of this widget will be rendered as a link when the value is not
           being edited. -->
      <xsd:attribute name="action" type="xsd:string"/>
      <!-- An optional boolean expression controlling whether the action should be available
           in this specific context when in read-only mode.  This is ignored if in edit mode
           or if the action is null.  This attribute will be deprecated in a future release,
           please use the 'available' attribute instead.  To disable action in readonly mode,
           you can set available=&quot;CurrentLocation.InEditMode || &lt;action-available-condition&gt;&quot; -->
      <xsd:attribute name="actionAvailable" type="xsd:string"/>
      <!-- Alignment of the widget ("left", "right", or "center") -->
      <xsd:attribute name="align" type="WidgetAlignment"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- Boolean expression which, if false, grays out the widget and all its children -->
      <xsd:attribute name="available" type="xsd:string"/>
      <!-- If true then the label is displayed in bold text. -->
      <xsd:attribute name="boldLabel" type="xsd:boolean" default="false"/>
      <!-- If true then the value is displayed in bold text when read-only. -->
      <xsd:attribute name="boldValue" type="xsd:boolean" default="false"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- Whether the user should be allowed to clear the selected value. If "true", an icon
           will be available which, when clicked, will clear the widget. This attribute will
           always be overridden and set to "true" if freeInputEnabled is set to false. -->
      <xsd:attribute name="clearEnabled" type="xsd:boolean" default="false"/>
      <!-- The confirmation message to show when "showConfirmMessage" is set. If not specified,
           a standard message will be used. -->
      <xsd:attribute name="confirmMessage" type="xsd:string"/>
      <!-- A Gosu expression used to convert the value picked from the picker popup before it
           is written to the model value of this widget. The picked value is available as the
           special symbol "PickedValue" -->
      <xsd:attribute name="conversionExpression" type="xsd:string"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- Boolean expression which, if false, makes this widget and all its children read-only -->
      <xsd:attribute name="editable" type="xsd:string" default="false"/>
      <!-- If true, instead of showing a hierarchical menu, the widget will show a single menu
           with sub-menus grouped under headers. -->
      <xsd:attribute name="flatten" type="xsd:boolean" default="false"/>
      <!-- An optional boolean expression, if returns true, this widget will get focus when start
           editing the containing location. -->
      <xsd:attribute name="focusOnStartEditing" type="xsd:string"/>
      <!-- How the value is formatted; options include "general", "currency", and "email".  See
           the formatType enumeration. -->
      <xsd:attribute name="formatType" type="FormatType"/>
      <!-- If true, the user may enter a free-text value. If this property is set to false, the
           clearEnabled attribute will be treated as true to allow for users to delete their
           picked selection. -->
      <xsd:attribute name="freeInputEnabled" type="xsd:boolean" default="true"/>
      <!-- A Gosu expression which, if defined, is evaluated to create help info that guides
           the user to edit this widget. The help info will show up if the user hovers the mouse
           over or focuses on the widget, when the widget is in edit mode. -->
      <xsd:attribute name="helpText" type="xsd:string"/>
      <!-- If false, menu items under this input will be shown even when the input is not editable. -->
      <xsd:attribute name="hideChildrenIfReadOnly" type="xsd:boolean" default="true"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- Reference ID of the widget.  This does not have to be globally unique; it only has
           to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <!-- A Gosu expression that converts the presentation value to a model value. The presentation
           value string is exposed to this expression as the symbol "VALUE". -->
      <xsd:attribute name="inputConversion" type="xsd:string"/>
      <!-- Label to render. -->
      <xsd:attribute name="label" type="xsd:string"/>
      <!-- Boolean expression which, if true, causes the label portion of the Input to be rendered
           above the value -->
      <xsd:attribute name="labelAbove" type="xsd:string" default="false"/>
      <!-- Custom extension CSS style class to apply to the label. -->
      <xsd:attribute name="labelStyleClass" type="xsd:string"/>
      <!-- The number of child MenuItems to show in each column.  If not specified, all children
           will be shown in a single column. -->
      <xsd:attribute name="numEntriesPerColumn" type="xsd:integer" default="0"/>
      <!-- Gosu expression to be executed after the picker popup has been used to pick a value.
           The picked value is available as the special symbol "PickedValue" -->
      <xsd:attribute name="onPick" type="xsd:string"/>
      <!-- A Gosu expression that converts the model value to a presentation value. The model
           value is exposed to this expression as the symbol "VALUE". The return type of this
           expression must be String. -->
      <xsd:attribute name="outputConversion" type="xsd:string"/>
      <!-- The picker popup used to pick a value, as a Gosu statement of the form "[popup name].push(...)". -->
      <xsd:attribute name="pickLocation" type="xsd:string" use="required"/>
      <!-- A Gosu expression used to validate user value before setting it to the model. This
           expression can access any symbols available to this widget, and a "VALUE" symbol that
           represents the user value. If this expression returns null, the user value will be
           set into the model. Otherwise, an error message containing the result of the expression
           will be displayed on the page, the value will not be set into the model, and no actions
           can be performed until the error is corrected. -->
      <xsd:attribute name="requestValidationExpression" type="xsd:string"/>
      <!-- If true, then the cell must be filled out by the user -->
      <xsd:attribute name="required" type="xsd:string"/>
      <!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * Deprecated.
           DO NOT USE.                                           * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
           Consider using "onChange/onPick/inputConversion/outputConversion" where available.
           If specified and the Input is editable, then any new value of the Input is written
           to this expression (Gosu by default) instead of to "value".  The new value is exposed
           as the symbol "VALUE".  For instance if your value expression is "Foo.getSomething()"
           then it can't be written to since it's not an L-value; so you could specify a setter
           expression along the lines of "Foo.setSomething(VALUE)" Warning: if you use this attribute
           many pebbles features will not work, including but not limited to: * Correct automatic
           detection of the state of the updated data * Correct automatic detection of the editability
           of the data * Correct automatic detection of the maximum size of a text input -->
      <xsd:attribute name="setter" type="xsd:string"/>
      <!-- Optional keyboard shortcut character in the form of "Q" or "ShiftQ"; the "Alt" key
           is implicit. This is only applicable when this widget has an "action" specified and
           the value is not being edited. -->
      <xsd:attribute name="shortcut" type="xsd:string"/>
      <!-- Boolean expression which determines whether or not to show a confirmation message
           when the field value is changed directly from the UI. It's NOT applicable when the
           value is changed indirectly, for example, as a result of client reflection. -->
      <xsd:attribute name="showConfirmMessage" type="xsd:string"/>
      <!-- An optional attribute, if set, defer sub menu generation until user tries to open
           the menu. DO NOT set this flag unless the sub menu of this widget is very expensive
           to generate. Setting this flag will reduce time to load the page, however require
           fetching additional info from server in the background, when the menu gets opened
           for the first time after page loaded. -->
      <xsd:attribute name="subMenuOnDemand" type="xsd:boolean" default="false"/>
      <!-- A Gosu expression to run before committing the record. This expression can refer to
           any symbols available to this widget. If this expression returns null, the validation
           is considered successful; otherwise, the result of this expression will be displayed
           as an error and the record will not be committed. -->
      <xsd:attribute name="validationExpression" type="xsd:string"/>
      <!-- The value this Input binds to as an Expression.  If the Input is editable then this
           value is both read from and written to (unless "setter" is defined). -->
      <xsd:attribute name="value" type="xsd:string" use="required"/>
      <!-- CSS max-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionMaxWidth" type="xsd:string"/>
      <!-- CSS min-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionMinWidth" type="xsd:string"/>
      <!-- CSS width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionWidth" type="xsd:string"/>
      <!-- The type of the value expression. -->
      <xsd:attribute name="valueType" type="xsd:string" use="required"/>
      <!-- If used instead of "editable", specifies whether the Input is editable when data is
           being created -->
      <xsd:attribute name="visible" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <xsd:element name="DomainAxis">
    <xsd:complexType>
      <xsd:choice minOccurs="0" maxOccurs="unbounded"/>
      <!-- The format of the "day/month/year" portion of the date. Options are "short", "medium",
           and "long".  If a date format is specified and a time format is not, only the date
           will be shown. -->
      <xsd:attribute name="dateFormat" type="DateTimeType"/>
      <!-- An expression for the label of this axis -->
      <xsd:attribute name="label" type="xsd:string" use="required"/>
      <!-- The orientation of the axis labels -->
      <xsd:attribute name="labelOrientation" type="LabelOrientation" default="Horizontal"/>
      <!-- The lower bound expression for the axis range. If omitted the minimum value of all
           the data series is used. Ignored for a category axis -->
      <xsd:attribute name="lowerBound" type="xsd:string"/>
      <!-- The format of the "hour/minute/AMorPM" portion of the date. Options are "short", "medium",
           and "long".  If a time format is specified and a date format is not, only the time
           will be shown. -->
      <xsd:attribute name="timeFormat" type="DateTimeType"/>
      <!-- The upper bound expression for the axis range. If omitted the maximum value of all
           the data series is used. Ignored for a category axis -->
      <xsd:attribute name="upperBound" type="xsd:string"/>
      <!-- If true, and if the values are numeric, tick values will only be display as whole
           numbers -->
      <xsd:attribute name="useWholeNumbers" type="xsd:boolean" default="false"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- A SecondaryDataSeries element ... -->
  <xsd:element name="DualAxisDataSeries">
    <xsd:complexType>
      <xsd:choice minOccurs="0" maxOccurs="unbounded"/>
      <!-- The expression for the label of the second axis. -->
      <xsd:attribute name="axisLabel" type="xsd:string" use="required"/>
      <!-- An expression that evaluates to the label of each category, as well as the name of
           the general group in which to place this series entry. Should evaluate to the same
           Object as the other DataSeries elements defined previously. -->
      <xsd:attribute name="categoryLabel" type="xsd:string"/>
      <!-- The type of the elements in the collection defined by dataValues -->
      <xsd:attribute name="dataValueType" type="xsd:string" use="required"/>
      <!-- The expression for the values of this data.  Must be an array, list, or query -->
      <xsd:attribute name="dataValues" type="xsd:string" use="required"/>
      <!-- A fill color used for this series. For pie charts you need to specify a list of colors
           corresponding to categories. -->
      <xsd:attribute name="fillColor" type="xsd:string"/>
      <!-- The lower bound expression for a manual axis range. -->
      <xsd:attribute name="lowerBound" type="xsd:string"/>
      <!-- An expression for the label of the data series -->
      <xsd:attribute name="seriesLabel" type="xsd:string" use="required"/>
      <!-- A stroke color used for this series. For pie charts you need to specify a list of
           colors corresponding to categories. -->
      <xsd:attribute name="strokeColor" type="xsd:string"/>
      <!-- The upper bound expression for a manual axis range. -->
      <xsd:attribute name="upperBound" type="xsd:string"/>
      <!-- A Boolean where, if true, the tick values will only be display as whole numbers -->
      <xsd:attribute name="useWholeNumbers" type="xsd:boolean" default="false"/>
      <!-- An expression that maps the series value in component type of the values.  The component
           object is accessable via the values symbol, i.e. value.getFoo(). The returned value
           must be a number or date. -->
      <xsd:attribute name="value" type="xsd:string" use="required"/>
      <!-- An expression that maps the xValue in the component type of the values. The component
           object is accessible via the value symbol, such as with value.getX(). The returned
           value must be a number or date. -->
      <xsd:attribute name="xValue" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- A set of pre-included toolbar buttons for edit control. Includes edit, update, &amp;
       cancel. -->
  <xsd:element name="EditButtons">
    <xsd:complexType>
      <xsd:choice minOccurs="0" maxOccurs="unbounded"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- If true, the Cancel button will be the default button which can be invoked by Enter
           key. -->
      <xsd:attribute name="cancelDefault" type="xsd:boolean" default="false"/>
      <!-- Alternative label for the cancel button -->
      <xsd:attribute name="cancelLabel" type="xsd:string"/>
      <!-- Keyboard shortcut character for cancel button, in the form of "Q" or "ShiftQ"; the
           "Alt" key is implicit -->
      <xsd:attribute name="cancelShortcut" type="xsd:string" default="L"/>
      <!-- Boolean expression specifying whether the cancel button is visible. By default the
           cancel button is visible when in edit mode. -->
      <xsd:attribute name="cancelVisible" type="xsd:string"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- If true, the Edit button will be the default button which can be invoked by Enter
           key. -->
      <xsd:attribute name="editDefault" type="xsd:boolean" default="false"/>
      <!-- Alternative label for the edit button -->
      <xsd:attribute name="editLabel" type="xsd:string"/>
      <!-- Keyboard shortcut character for edit button, in the form of "Q" or "ShiftQ"; the "Alt"
           key is implicit -->
      <xsd:attribute name="editShortcut" type="xsd:string" default="E"/>
      <!-- Boolean expression specifying whether the edit button is visible. By default the edit
           button is visible when not in edit mode. -->
      <xsd:attribute name="editVisible" type="xsd:string"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- (Optional) reference ID of the widget.  This does not have to be globally unique;
           it only has to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string"/>
      <!-- The value returned from this location when update is clicked -->
      <xsd:attribute name="pickValue" type="xsd:string"/>
      <!-- Gosu expression which determines whether or not the confirmation message should be
           shown -->
      <xsd:attribute name="showUpdateConfirmMessage" type="xsd:string" default="true"/>
      <!-- Confirmation message to show when update is clicked -->
      <xsd:attribute name="updateConfirmMessage" type="xsd:string"/>
      <!-- If true, the Update button will be the default button which can be invoked by Enter
           key. -->
      <xsd:attribute name="updateDefault" type="xsd:boolean" default="false"/>
      <!-- Alternative label for the update button -->
      <xsd:attribute name="updateLabel" type="xsd:string"/>
      <!-- Keyboard shortcut character for update button, in the form of "Q" or "ShiftQ"; the
           "Alt" key is implicit -->
      <xsd:attribute name="updateShortcut" type="xsd:string" default="U"/>
      <!-- Boolean expression specifying whether the update button is visible. By default the
           update button is visible when in edit mode. -->
      <xsd:attribute name="updateVisible" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- A input that renders content from `appUrl` and displayed in iframe, this element can
       communicate to Guidewire server with actionHandler and updateHandler. -->
  <xsd:element name="EmbeddedInput">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="LayoutConfig" minOccurs="0" maxOccurs="1"/>
        <xsd:element ref="EmbeddedWidgetRef" minOccurs="0" maxOccurs="unbounded"/>
      </xsd:sequence>
      <!-- A handler object whose 'action' method will be invoked if the embedded widget's client
           side calls the gw.api.submitAction function, passing in the JSON object as arguments.
           The JSON from the client will be given as the argument to the 'action' method. The
           'action' method is called as part of a normal Pebbles request; all input values are
           sent to the server, variables are refreshed (if marked as 'recalculateOnRefresh')
           and the UI is re-rendered. The 'action' method can do anything a normal menu or button
           action can do, including navigating to other pages. -->
      <xsd:attribute name="actionHandler" type="xsd:string"/>
      <!-- All communication with the embedded frame checks the frame origin (see documentation
           on Window.postMessage and the 'message' event). By default the frame origin is just
           the first part of the appUrl, but it can be overridden by providing an explicit appOrigin.
           This can be useful if the initial appUrl redirects to another application URL -->
      <xsd:attribute name="appOrigin" type="xsd:string"/>
      <!-- The URL that will be used to load the embedded widget iframe; the values provided
           by the contextProviderwill be passed in a form (for POST) or as URL parameters (for
           GET) -->
      <xsd:attribute name="appUrl" type="xsd:string" use="required"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- If true then the label is displayed in bold text. -->
      <xsd:attribute name="boldLabel" type="xsd:boolean" default="false"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- Creates JSON that will be sent along with the initial request to the Embedded Application's
           configured endpoint -->
      <xsd:attribute name="contextProvider" type="xsd:string"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- CSS height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="height" type="xsd:string"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- Reference ID of the widget.  This does not have to be globally unique; it only has
           to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <!-- Label to render. -->
      <xsd:attribute name="label" type="xsd:string"/>
      <!-- Boolean expression which, if true, causes the label portion of the Input to be rendered
           above the value -->
      <xsd:attribute name="labelAbove" type="xsd:string" default="false"/>
      <!-- Custom extension CSS style class to apply to the label. -->
      <xsd:attribute name="labelStyleClass" type="xsd:string"/>
      <!-- Request type to external service; options include "GET" and "POST".  See the EmbeddedWidgetRequestType
           enumeration. -->
      <xsd:attribute name="requestType" type="EmbeddedWidgetRequestType" use="required"/>
      <!-- A handler object whose 'update' method will be invoked if the embedded widget's client
           side calls the gw.api.callServer function, passing in a JSON object as arguments.
           The JSON from the client will be given as the argument to the 'update' method and
           the JSON returned by the 'update' method will be returned to the client. The 'update'
           method is not called as part of a normal Pebbles request; no input values will be
           saved or variables refreshed. Any client side state that is needed by the 'update'
           method must be explicitly passed in the JSON. The 'update' method must not attempt
           to navigate elsewhere, it should just return updated data to the client -->
      <xsd:attribute name="updateHandler" type="xsd:string"/>
      <!-- If used instead of "editable", specifies whether the Input is editable when data is
           being created -->
      <xsd:attribute name="visible" type="xsd:string"/>
      <!-- CSS width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="width" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- A panel that renders content from `appUrl` and displayed in iframe, this element can
       communicate to Guidewire server with actionHandler and updateHandler. -->
  <xsd:element name="EmbeddedPanel">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="EmbeddedWidgetRef" minOccurs="0" maxOccurs="unbounded"/>
      </xsd:sequence>
      <!-- A handler object whose 'action' method will be invoked if the embedded widget's client
           side calls the gw.api.submitAction function, passing in the JSON object as arguments.
           The JSON from the client will be given as the argument to the 'action' method. The
           'action' method is called as part of a normal Pebbles request; all input values are
           sent to the server, variables are refreshed (if marked as 'recalculateOnRefresh')
           and the UI is re-rendered. The 'action' method can do anything a normal menu or button
           action can do, including navigating to other pages. -->
      <xsd:attribute name="actionHandler" type="xsd:string"/>
      <!-- All communication with the embedded frame checks the frame origin (see documentation
           on Window.postMessage and the 'message' event). By default the frame origin is just
           the first part of the appUrl, but it can be overridden by providing an explicit appOrigin.
           This can be useful if the initial appUrl redirects to another application URL -->
      <xsd:attribute name="appOrigin" type="xsd:string"/>
      <!-- The URL that will be used to load the embedded widget iframe; the values provided
           by the contextProviderwill be passed in a form (for POST) or as URL parameters (for
           GET) -->
      <xsd:attribute name="appUrl" type="xsd:string" use="required"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- If true, the EmbeddedPanel will have a border around it. -->
      <xsd:attribute name="border" type="xsd:boolean" default="true"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- Creates JSON that will be sent along with the initial request to the Embedded Application's
           configured endpoint -->
      <xsd:attribute name="contextProvider" type="xsd:string"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- CSS height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="height" type="xsd:string"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- (Optional) reference ID of the widget.  This does not have to be globally unique;
           it only has to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string"/>
      <!-- Request type to external service; options include "GET" and "POST".  See the EmbeddedWidgetRequestType
           enumeration. -->
      <xsd:attribute name="requestType" type="EmbeddedWidgetRequestType" use="required"/>
      <!-- A handler object whose 'update' method will be invoked if the embedded widget's client
           side calls the gw.api.callServer function, passing in a JSON object as arguments.
           The JSON from the client will be given as the argument to the 'update' method and
           the JSON returned by the 'update' method will be returned to the client. The 'update'
           method is not called as part of a normal Pebbles request; no input values will be
           saved or variables refreshed. Any client side state that is needed by the 'update'
           method must be explicitly passed in the JSON. The 'update' method must not attempt
           to navigate elsewhere, it should just return updated data to the client -->
      <xsd:attribute name="updateHandler" type="xsd:string"/>
      <!-- CSS width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="width" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- Specifies the widget needed by the embedded section. -->
  <xsd:element name="EmbeddedWidgetRef">
    <xsd:complexType>
      <xsd:choice minOccurs="0" maxOccurs="unbounded"/>
      <!-- The name will be used for external service -->
      <xsd:attribute name="name" type="xsd:string" use="required"/>
      <!-- The pcf id of the widget -->
      <xsd:attribute name="widget" type="xsd:string" use="required"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- An empty cell without a value, generally used to provide proper column alignment in
       heterogeneous list views -->
  <xsd:element name="EmptyCell">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="Reflect" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element ref="ColumnFooter" minOccurs="0" maxOccurs="1"/>
      </xsd:sequence>
      <!-- Specifies the alignment of this cell. Valid values: "left", "right", or "center".
           If no value is specified, the default alignment is determined by the value type ("center"
           for boolean values; "right" for numeric values; "left" for other value types). -->
      <xsd:attribute name="align" type="WidgetAlignment"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- Boolean expression which, if false, grays out the widget and all its children -->
      <xsd:attribute name="available" type="xsd:string"/>
      <!-- If true, renders the cell contents in bold text. Defaults to false. -->
      <xsd:attribute name="bold" type="xsd:boolean" default="false"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- The HTML colspan attribute, lets this cell span across multiple columns of other rows.
           Useful for generating a "group header" row above a RowIterator. The default value
           is 1. A value greater than 1 is only allowed when the containing row is not iterated
           by a RowIterator. -->
      <xsd:attribute name="colspan" type="xsd:integer"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- An optional expression. If specified, a footer cell with the specified value will
           be rendered for this column. Only applicable when the containing Row is iterated by
           a RowIterator. Not allowed when "footerSumValue" is specified. -->
      <xsd:attribute name="footerLabel" type="xsd:string"/>
      <!-- An optional expression, if specified, will be used as format pattern for the footer
           sum value. Normally not specified, so that the "format" and\or "formatType" of the
           cell value will be applied to footer sum value. Only applicable when "footerSumValue"
           is specified. The result of this expression must conform to the number format defined
           in java.text.DecimalFormat. -->
      <xsd:attribute name="footerSumFormat" type="xsd:string"/>
      <!-- An optional Numeric expression. If specified, a footer cell that sums the specified
           value for all cells in this column will be rendered. Pagination of the list does not
           affect the sum value. Only applicable when the containing row is iterated by a RowIterator.
           Not allowed when "footerLabel" is specified. -->
      <xsd:attribute name="footerSumValue" type="xsd:string"/>
      <!-- If true, this Cell and any other grow-enabled Cell will expand to fill remaining space
           in the ListViewPanel. Only applicable when the ListView is set to stretch. -->
      <xsd:attribute name="grow" type="xsd:boolean" default="false"/>
      <!-- CSS height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="height" type="xsd:string"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- Refers to an image file. If defined, makes this an icon cell. The "value" attribute
           should be a boolean expression describing whether the icon is visible in a given row. -->
      <xsd:attribute name="icon" type="xsd:string"/>
      <!-- Color of the icon. If not set will default to its font color. -->
      <xsd:attribute name="iconColor" type="xsd:string"/>
      <!-- An enumeration of icon types that determine what the 'icon' property on the widget
           is referring to. -->
      <xsd:attribute name="iconType" type="IconTypeEnum"/>
      <!-- Reference ID of the widget.  This does not have to be globally unique; it only has
           to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <!-- An optional expression. If specified, a header cell with the specified value will
           be rendered for this column. Only applicable when the containing row is iterated by
           a RowIterator. -->
      <xsd:attribute name="label" type="xsd:string"/>
      <!-- CSS max-height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="maxHeight" type="xsd:string"/>
      <!-- CSS max-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="maxWidth" type="xsd:string"/>
      <!-- CSS min-height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="minHeight" type="xsd:string"/>
      <!-- CSS min-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="minWidth" type="xsd:string"/>
      <!-- Relative width when printing to PDF. All widths are relative to the widths of the
           other columns in the ListView -->
      <xsd:attribute name="printWidth" type="xsd:string" default="1"/>
      <!-- If true, shows the icon defined by "icon" in the header cell for this column. The
           default value is true. -->
      <xsd:attribute name="showHeaderIcon" type="xsd:boolean" default="true"/>
      <!-- Extra "alt" text to show when the user hovers the mouse over the header cell of this
           column. -->
      <xsd:attribute name="tooltip" type="xsd:string"/>
      <!-- Specifies the vertical alignment of this cell. Valid values: "top", "middle", or "bottom".
           If no value is specified, the default alignment is determined by the cell type ("top"
           for Text Areas and Format Cells, "middle" for buttons and icons). -->
      <xsd:attribute name="verticalAlign" type="WidgetVerticalAlignment"/>
      <!-- Boolean expression which, if false, completely hides the widget and all its children -->
      <xsd:attribute name="visible" type="xsd:string"/>
      <!-- CSS width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="width" type="xsd:string"/>
      <!-- If default, defers to FormatType to decide whether to wrap or not.  If true, allows
           cell content to wrap. -->
      <xsd:attribute name="wrap" type="WrapType" default="default"/>
      <!-- If true, allows Header Cell text content to wrap. Defaults to true. -->
      <xsd:attribute name="wrapLabel" type="xsd:boolean" default="false"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- Maps from a URI that the browser can enter to a starting Location -->
  <xsd:element name="EntryPoint">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="EntryPointParameter" minOccurs="0" maxOccurs="unbounded"/>
      </xsd:sequence>
      <!-- If true, the user must be logged in to enter through this point.  If the user is not
           already logged in, a login page will appear before the entry point's location (unless
           some kind of automatic authentication occurs).  <i>Be very careful</i> about setting
           this to false. -->
      <xsd:attribute name="authenticationRequired" type="xsd:boolean" default="true"/>
      <!-- If true, clears the user's server session when they enter this entry point -->
      <xsd:attribute name="clearSession" type="xsd:boolean" default="false"/>
      <!-- Use this to add your own comments to this element. For now this attribute does nothing;
           later if we create a "UI dictionary" or PCF editor, the description will show up there. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- Normally not specified, and a default error page with detailed error messages will
           be displayed when for some reason the EntryPoint could not navigate to the target
           Location. If a page ID is specified, that page will be displayed instead of the default
           error page in case of error. No runtime error message will be passed to the custom
           page, and only static content of that page will be displayed. -->
      <xsd:attribute name="failurePage" type="xsd:string"/>
      <!-- ID of this EntryPoint. Must be unique among all EntryPoints. -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <!-- The ID of the Page, Forward, or Wizard to go to upon navigating to this EntryPoint.
           Note that if you want the entry point to do some complex logic, it's best to use a
           Forward. -->
      <xsd:attribute name="location" type="xsd:string" use="required"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- An HTTP parameter that gets mapped to a Location parameter -->
  <xsd:element name="EntryPointParameter">
    <xsd:complexType>
      <xsd:choice minOccurs="0" maxOccurs="unbounded"/>
      <!-- Gosu expression used to convert a URL parameter to the value passed to the location
           Parameter -->
      <xsd:attribute name="conversionExpression" type="xsd:string"/>
      <!-- Use this to add your own comments to the entry point param.  For now this attribute
           does nothing; later if we create a "UI dictionary" the description will show up there,
           much the way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- The name of the argument on the target location's entry point that this parameter
           will set -->
      <xsd:attribute name="locationParam" type="xsd:string" use="required"/>
      <!-- If true, the parameter does not need to be specified -->
      <xsd:attribute name="optional" type="xsd:boolean" default="false"/>
      <!-- The type to cast the incoming parameter into, such as "String" or "Integer" -->
      <xsd:attribute name="type" type="xsd:string" use="required"/>
      <!-- The parameter passed in through the URL; for example if the param is Activity and
           the entry point URI is ActivityDetail, you would pass Activity 3 as ActivityDetail.do?Activity=3 -->
      <xsd:attribute name="urlParam" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- Special Location for leaving the UI and redirecting somewhere else. -->
  <xsd:element name="ExitPoint">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="LocationEntryPoint" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element ref="ExitPointParameter" minOccurs="0" maxOccurs="unbounded"/>
      </xsd:sequence>
      <!-- Height in pixels of the popup window, if popup=true -->
      <xsd:attribute name="height" type="xsd:integer" default="0"/>
      <!-- ID of this ExitPoint. Must be unique among all ExitPoints. -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <!-- If true, indicates that this ExitPoint is navigating to another Cluster within the
           same Application. -->
      <xsd:attribute name="isMultiClusterNav" type="xsd:boolean" default="false"/>
      <!-- If true, logs the user out of the application when they go through the ExitPoint -->
      <xsd:attribute name="logout" type="xsd:boolean" default="false"/>
      <!-- HTTP method to use for this ExitPoint. If omitted, defaults to GET -->
      <xsd:attribute name="method" type="HttpMethod"/>
      <!-- If true, opens the exit URL in a new window instead of the current one -->
      <xsd:attribute name="popup" type="xsd:boolean" default="false"/>
      <!-- An optional name of the popup window. Only applicable when "popup" is true. If not
           specified, a new window will be opened each time this exit point is invoked. -->
      <xsd:attribute name="target" type="xsd:string"/>
      <!-- The URL to redirect the user to, such as "http://www.guidewire.com" -->
      <xsd:attribute name="url" type="xsd:string" use="required"/>
      <!-- width in pixels of the popup window, if popup=true -->
      <xsd:attribute name="width" type="xsd:integer" default="0"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- An parameter to the exit point that is mapped to a URL parameter.  The exact opposite
       of EntryPointParameter. -->
  <xsd:element name="ExitPointParameter">
    <xsd:complexType>
      <xsd:choice minOccurs="0" maxOccurs="unbounded"/>
      <!-- The default value to use if no symbol has been provided for this param (assuming required=false;
           otherwise an exception will be thrown).  A Gosu Expression -->
      <xsd:attribute name="defaultValue" type="xsd:string"/>
      <!-- Use this to add your own comments to the exit point param.  For now this attribute
           does nothing; later if we create a "UI dictionary" the description will show up there,
           much the way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- The name of the parameter.  Any link to the exit point must have a symbol defined
           with name equal to locationParam and of type "type" (unless required="false"). -->
      <xsd:attribute name="locationParam" type="xsd:string" use="required"/>
      <!-- The type of symbol that must be passed as "locationParam" -->
      <xsd:attribute name="type" type="xsd:string" use="required"/>
      <!-- Param name as appears in the url.  If not specified assumed to be the same as "locationParam" -->
      <xsd:attribute name="urlParam" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- Specifies that a symbol of a given name is exposed by the parent widget.  This widget
       can be accessed by other widgets in other pcf pages. -->
  <xsd:element name="Expose">
    <xsd:complexType>
      <xsd:choice minOccurs="0" maxOccurs="unbounded"/>
      <!-- Indicates if the widget is actually applicable in the current context.  This is provided
           for modal panels that do not expose all of the widgets that are available in its sibling
           modes. -->
      <xsd:attribute name="applicable" type="xsd:boolean" default="true"/>
      <!-- The symbol to expose the widget as.  If the widget is defined on this page, this value
           will default to the widget name.  If the widget is in a ref, this value will default
           to the name exposed by the ref. -->
      <xsd:attribute name="name" type="xsd:string"/>
      <!-- The name of widget -->
      <xsd:attribute name="widget" type="xsd:string" use="required"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- Specifies that an iterator of a given name and type is exposed by the parent widget.
        This iterator can be accessed by other widgets in other pcf pages. -->
  <xsd:element name="ExposeIterator">
    <xsd:complexType>
      <xsd:choice minOccurs="0" maxOccurs="unbounded"/>
      <!-- Indicates if the widget is actually applicable in the current context.  This is provided
           for modal panels that do not expose all of the widgets that are available in its sibling
           modes. -->
      <xsd:attribute name="applicable" type="xsd:boolean" default="true"/>
      <!-- A comma separated list of the flags for the iterator -->
      <xsd:attribute name="flags" type="xsd:string"/>
      <!-- The symbol to expose the widget as.  If the widget is defined on this page, this value
           will default to the widget name.  If the widget is in a ref, this value will default
           to the name exposed by the ref. -->
      <xsd:attribute name="name" type="xsd:string"/>
      <!-- The valueType of the widget symbol, such as "String" or "Policy" -->
      <xsd:attribute name="valueType" type="xsd:string" use="required"/>
      <!-- The name of the iterator -->
      <xsd:attribute name="widget" type="xsd:string" use="required"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- Specifies that a row tree of a given name and type is exposed by the parent widget.
        This rowTree can be accessed by other widgets in other pcf pages. -->
  <xsd:element name="ExposeRowTree">
    <xsd:complexType>
      <xsd:choice minOccurs="0" maxOccurs="unbounded"/>
      <!-- Indicates if the widget is actually applicable in the current context.  This is provided
           for modal panels that do not expose all of the widgets that are available in its sibling
           modes. -->
      <xsd:attribute name="applicable" type="xsd:boolean" default="true"/>
      <!-- A comma separated list of the flags for the row tree -->
      <xsd:attribute name="flags" type="xsd:string"/>
      <!-- The symbol to expose the widget as.  If the widget is defined on this page, this value
           will default to the widget name.  If the widget is in a ref, this value will default
           to the name exposed by the ref. -->
      <xsd:attribute name="name" type="xsd:string"/>
      <!-- The content type of the row tree, such as "String" or "Policy".  This value is required
           if the rowtree has checkboxes. -->
      <xsd:attribute name="valueType" type="xsd:string"/>
      <!-- The name of the row tree -->
      <xsd:attribute name="widget" type="xsd:string" use="required"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- A cell for selecting files -->
  <xsd:element name="FileCell">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="Reflect" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element ref="ColumnFooter" minOccurs="0" maxOccurs="1"/>
        <xsd:element ref="PostOnChange" minOccurs="0" maxOccurs="1"/>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="AddMenuItem"/>
          <xsd:element ref="AddMenuItemIterator"/>
          <xsd:element ref="MenuItem"/>
          <xsd:element ref="MenuItemDivider"/>
          <xsd:element ref="MenuItemIterator"/>
          <xsd:element ref="MenuItemSetRef"/>
          <xsd:element ref="MenuItemTree"/>
          <xsd:element ref="PickerMenuItem"/>
          <xsd:element ref="SearchItem"/>
        </xsd:choice>
      </xsd:sequence>
      <!-- An optional action to take when the user clicks the value of this widget when the
           value is not being edited. See ActionBase for details. When specified, the value of
           this widget will be rendered as a link when the value is not being edited. -->
      <xsd:attribute name="action" type="xsd:string"/>
      <!-- An optional boolean expression controlling whether the action should be available
           in this specific context when in read-only mode.  This is ignored if in edit mode
           or if the action is null.  This attribute will be deprecated in a future release,
           please use the 'available' attribute instead.  To disable action in readonly mode,
           you can set available=&quot;CurrentLocation.InEditMode || &lt;action-available-condition&gt;&quot; -->
      <xsd:attribute name="actionAvailable" type="xsd:string"/>
      <!-- Specifies the alignment of this cell. Valid values: "left", "right", or "center".
           If no value is specified, the default alignment is determined by the value type ("center"
           for boolean values; "right" for numeric values; "left" for other value types). -->
      <xsd:attribute name="align" type="WidgetAlignment"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- Boolean expression which, if false, grays out the widget and all its children -->
      <xsd:attribute name="available" type="xsd:string"/>
      <!-- If true, renders the cell contents in bold text. Defaults to false. -->
      <xsd:attribute name="bold" type="xsd:boolean" default="false"/>
      <!-- The text displayed in the file input button -->
      <xsd:attribute name="buttonText" type="xsd:string" default="DisplayKey.get(&quot;Web.Document.FileValue.Browse&quot;)"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- The HTML colspan attribute, lets this cell span across multiple columns of other rows.
           Useful for generating a "group header" row above a RowIterator. The default value
           is 1. A value greater than 1 is only allowed when the containing row is not iterated
           by a RowIterator. -->
      <xsd:attribute name="colspan" type="xsd:integer"/>
      <!-- The confirmation message to show when "showConfirmMessage" is set. If not specified,
           a standard message will be used. -->
      <xsd:attribute name="confirmMessage" type="xsd:string"/>
      <!-- A Gosu expression used to convert the value picked from a popup before set it into
           the model value of this widget. The picked value will be exposed as a symbol with
           the name "PickedValue" -->
      <xsd:attribute name="conversionExpression" type="xsd:string"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- A comma separated list of widgets that are drag and drop zones for this file input. -->
      <xsd:attribute name="dropzoneWidgets" type="xsd:string"/>
      <!-- Boolean expression which, if false, makes this widget and all its children read-only -->
      <xsd:attribute name="editable" type="xsd:string" default="false"/>
      <!-- If true, allows the user to sort the values in the column by clicking on the header.
            Only applicable when the containing row is iterated by a RowIterator. -->
      <xsd:attribute name="enableSort" type="xsd:boolean" default="true"/>
      <!-- If true, this cell will the last cell in the row to be navigated to via the ENTER
           key. Only applicable when "CellNavOnEnter" or "QuickAddOnEnter" is set. Normally not
           specified. Default to false. -->
      <xsd:attribute name="endOfCellNav" type="xsd:boolean" default="false"/>
      <!-- If true, instead of showing a hierarchical menu, the widget will show a single menu
           with sub-menus grouped under headers. -->
      <xsd:attribute name="flatten" type="xsd:boolean" default="false"/>
      <!-- An optional boolean expression, if returns true, this widget will get focus when start
           editing the containing location. -->
      <xsd:attribute name="focusOnStartEditing" type="xsd:string"/>
      <!-- An expression that returns a GWColor instance. Legacy: this method can instead return
           a string corresponding to a CSS Specification Level 3 color name. See GWColor for
           more details. -->
      <xsd:attribute name="fontColor" type="xsd:string"/>
      <!-- An optional expression. If specified, a footer cell with the specified value will
           be rendered for this column. Only applicable when the containing Row is iterated by
           a RowIterator. Not allowed when "footerSumValue" is specified. -->
      <xsd:attribute name="footerLabel" type="xsd:string"/>
      <!-- An optional expression, if specified, will be used as format pattern for the footer
           sum value. Normally not specified, so that the "format" and\or "formatType" of the
           cell value will be applied to footer sum value. Only applicable when "footerSumValue"
           is specified. The result of this expression must conform to the number format defined
           in java.text.DecimalFormat. -->
      <xsd:attribute name="footerSumFormat" type="xsd:string"/>
      <!-- An optional Numeric expression. If specified, a footer cell that sums the specified
           value for all cells in this column will be rendered. Pagination of the list does not
           affect the sum value. Only applicable when the containing row is iterated by a RowIterator.
           Not allowed when "footerLabel" is specified. -->
      <xsd:attribute name="footerSumValue" type="xsd:string"/>
      <!-- How the value is formatted; options include "general", "currency", and "email".  See
           the formatType enumeration. -->
      <xsd:attribute name="formatType" type="FormatType"/>
      <!-- If true, the ListView will be grouped by this cell upon entering the page. Only one
           grouped cell is allowed at any given time and it is only applicable when the column
           is sortable. -->
      <xsd:attribute name="groupedOnEnter" type="xsd:string"/>
      <!-- If true, this Cell and any other grow-enabled Cell will expand to fill remaining space
           in the ListViewPanel. Only applicable when the ListView is set to stretch. -->
      <xsd:attribute name="grow" type="xsd:boolean" default="false"/>
      <!-- If true, generates a checkbox at the beginning of this cell. This checkbox can be
           used to check this entry in the nearest containing Iterator. Defaults to false. Only
           allowed if this cell is inside a CellIterator or under a Row inside a RowIterator. -->
      <xsd:attribute name="hasCheckBox" type="xsd:boolean" default="false"/>
      <!-- CSS height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="height" type="xsd:string"/>
      <!-- A Gosu expression which, if defined, is evaluated to create help info that guides
           the user to edit this widget. The help info will show up if the user hovers the mouse
           over or focuses on the widget, when the widget is in edit mode. -->
      <xsd:attribute name="helpText" type="xsd:string"/>
      <!-- If false, menu items under this input will be shown even when the input is not editable. -->
      <xsd:attribute name="hideChildrenIfReadOnly" type="xsd:boolean" default="true"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- Refers to an image file. If defined, makes this an icon cell. The "value" attribute
           should be a boolean expression describing whether the icon is visible in a given row. -->
      <xsd:attribute name="icon" type="xsd:string"/>
      <!-- Color of the icon. If not set will default to its font color. -->
      <xsd:attribute name="iconColor" type="xsd:string"/>
      <!-- The ALT text for any icon generated in the content cells -->
      <xsd:attribute name="iconLabel" type="xsd:string"/>
      <!-- An enumeration of icon types that determine what the 'icon' property on the widget
           is referring to. -->
      <xsd:attribute name="iconType" type="IconTypeEnum"/>
      <!-- Reference ID of the widget.  This does not have to be globally unique; it only has
           to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <!-- A Gosu expression that converts the presentation value to a model value. The presentation
           value string is exposed to this expression as the symbol "VALUE". -->
      <xsd:attribute name="inputConversion" type="xsd:string"/>
      <!-- An optional expression. If specified, a header cell with the specified value will
           be rendered for this column. Only applicable when the containing row is iterated by
           a RowIterator. -->
      <xsd:attribute name="label" type="xsd:string"/>
      <!-- Custom extension CSS style class to apply to the header. -->
      <xsd:attribute name="labelStyleClass" type="xsd:string"/>
      <!-- CSS max-height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="maxHeight" type="xsd:string"/>
      <!-- CSS max-width value. Can be `px`, or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="maxWidth" type="xsd:string"/>
      <!-- CSS min-height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="minHeight" type="xsd:string"/>
      <!-- CSS min-width value. Can be `px`, or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="minWidth" type="xsd:string"/>
      <!-- If set to true, the file input may be used to select multiple files -->
      <xsd:attribute name="multiple" type="xsd:boolean" default="false"/>
      <!-- The number of child MenuItems to show in each column.  If not specified, all children
           will be shown in a single column. -->
      <xsd:attribute name="numEntriesPerColumn" type="xsd:integer" default="0"/>
      <!-- Gosu expression to be executed after the value is set from a picker. -->
      <xsd:attribute name="onPick" type="xsd:string"/>
      <!-- A Gosu expression that converts the model value to a presentation value. The model
           value is exposed to this expression as the symbol "VALUE". The return type of this
           expression must be String. -->
      <xsd:attribute name="outputConversion" type="xsd:string"/>
      <!-- Relative width when printing to PDF. All widths are relative to the widths of the
           other columns in the ListView -->
      <xsd:attribute name="printWidth" type="xsd:string" default="1"/>
      <!-- A Gosu expression used to validate user value before setting it to the model. This
           expression can access any symbols available to this widget, and a "VALUE" symbol that
           represents the user value. If this expression returns null, the user value will be
           set into the model. Otherwise, an error message containing the result of the expression
           will be displayed on the page, the value will not be set into the model, and no actions
           can be performed until the error is corrected. -->
      <xsd:attribute name="requestValidationExpression" type="xsd:string"/>
      <!-- If true, then the cell must be filled out by the user -->
      <xsd:attribute name="required" type="xsd:string"/>
      <!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * Deprecated.
           DO NOT USE.                                           * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
           Consider using "onChange/onPick/inputConversion/outputConversion" where available.
           If specified and the Input is editable, then any new value of the Input is written
           to this expression (Gosu by default) instead of to "value".  The new value is exposed
           as the symbol "VALUE".  For instance if your value expression is "Foo.getSomething()"
           then it can't be written to since it's not an L-value; so you could specify a setter
           expression along the lines of "Foo.setSomething(VALUE)" Warning: if you use this attribute
           many pebbles features will not work, including but not limited to: * Correct automatic
           detection of the state of the updated data * Correct automatic detection of the editability
           of the data * Correct automatic detection of the maximum size of a text input -->
      <xsd:attribute name="setter" type="xsd:string"/>
      <!-- Boolean expression which determines whether or not to show a confirmation message
           when the field value is changed directly from the UI. It's NOT applicable when the
           value is changed indirectly, for example, as a result of client reflection. -->
      <xsd:attribute name="showConfirmMessage" type="xsd:string"/>
      <!-- If true, shows the icon defined by "icon" in the header cell for this column. The
           default value is true. -->
      <xsd:attribute name="showHeaderIcon" type="xsd:boolean" default="true"/>
      <!-- An optional comma-separated sequence of Expressions, each of which is assumed to be
           a dot-delimited path, the value by which this column will be sorted if the user clicks
           on the header cell. -->
      <xsd:attribute name="sortBy" type="xsd:string"/>
      <!-- Either "ascending" or "descending" -->
      <xsd:attribute name="sortDirection" type="WidgetSortDirection" default="ascending"/>
      <!-- The priority of sorting relative to other sorting elements like IteratorSort and Cell.
           The lower the number, the higher the priority.  The highest priority is "1" -->
      <xsd:attribute name="sortOrder" type="xsd:integer" default="0"/>
      <!-- CSS style class for the cell content; for instance, "miniButton" makes a link appear
           as a small button -->
      <xsd:attribute name="styleClass" type="LinkStyleClass"/>
      <!-- An optional attribute, if set, defer sub menu generation until user tries to open
           the menu. DO NOT set this flag unless the sub menu of this widget is very expensive
           to generate. Setting this flag will reduce time to load the page, however require
           fetching additional info from server in the background, when the menu gets opened
           for the first time after page loaded. -->
      <xsd:attribute name="subMenuOnDemand" type="xsd:boolean" default="false"/>
      <!-- Extra "alt" text to show when the user hovers the mouse over the header cell of this
           column. -->
      <xsd:attribute name="tooltip" type="xsd:string"/>
      <!-- If true, validate before commit that the value of this column is unique across all
           rows in the current page. Only meaningful when this column is editable. -->
      <xsd:attribute name="unique" type="xsd:boolean" default="false"/>
      <!-- A Gosu expression to run before committing the record. This expression can refer to
           any symbols available to this widget. If this expression returns null, the validation
           is considered successful; otherwise, the result of this expression will be displayed
           as an error and the record will not be committed. -->
      <xsd:attribute name="validationExpression" type="xsd:string"/>
      <!-- The label of this cell to be used when it has validation issues. Not needed when this
           cell has a "label". Required if the cell is editable but does not have a "label". -->
      <xsd:attribute name="validationLabel" type="xsd:string"/>
      <!-- The value this element binds to.  If the element is editable then this value is both
           read from and written to (unless "setter" is defined). -->
      <xsd:attribute name="value" type="xsd:string"/>
      <!-- If set to true, the name(s) of the selected file(s) is/are displayed next to the file
           input button -->
      <xsd:attribute name="valueDisplayed" type="xsd:string" default="true"/>
      <!-- Boolean expression which, if false, hides the <i>contents</i> of the cell (its "ValueWidget"),
           but not the cell itself.  Needed since hiding the actual cell usually screws up the
           layout -->
      <xsd:attribute name="valueVisible" type="xsd:string"/>
      <!-- Specifies the vertical alignment of this cell. Valid values: "top", "middle", or "bottom".
           If no value is specified, the default alignment is determined by the cell type ("top"
           for Text Areas and Format Cells, "middle" for buttons and icons). -->
      <xsd:attribute name="verticalAlign" type="WidgetVerticalAlignment"/>
      <!-- Boolean expression which, if false, completely hides the widget and all its children -->
      <xsd:attribute name="visible" type="xsd:string"/>
      <!-- CSS width value. Can be `px`, or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="width" type="xsd:string"/>
      <!-- If default, defers to FormatType to decide whether to wrap or not.  If true, allows
           cell content to wrap. -->
      <xsd:attribute name="wrap" type="WrapType" default="default"/>
      <!-- If true, allows Header Cell text content to wrap. Defaults to true. -->
      <xsd:attribute name="wrapLabel" type="xsd:boolean" default="false"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- An input for selecting files -->
  <xsd:element name="FileInput">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="LayoutConfig" minOccurs="0" maxOccurs="1"/>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="AddMenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="AddMenuItemIterator" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemDivider" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemIterator" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemSetRef" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemTree" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PickerMenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PostOnChange" minOccurs="0" maxOccurs="1"/>
          <xsd:element ref="Reflect" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="SearchItem" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:choice>
      </xsd:sequence>
      <!-- An optional action to take when the user clicks the value of this widget when the
           value is not being edited. See ActionBase for list of available action prefixes. When
           specified, the value of this widget will be rendered as a link when the value is not
           being edited. -->
      <xsd:attribute name="action" type="xsd:string"/>
      <!-- An optional boolean expression controlling whether the action should be available
           in this specific context when in read-only mode.  This is ignored if in edit mode
           or if the action is null.  This attribute will be deprecated in a future release,
           please use the 'available' attribute instead.  To disable action in readonly mode,
           you can set available=&quot;CurrentLocation.InEditMode || &lt;action-available-condition&gt;&quot; -->
      <xsd:attribute name="actionAvailable" type="xsd:string"/>
      <!-- Alignment of the widget ("left", "right", or "center") -->
      <xsd:attribute name="align" type="WidgetAlignment"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- Boolean expression which, if false, grays out the widget and all its children -->
      <xsd:attribute name="available" type="xsd:string"/>
      <!-- If true then the label is displayed in bold text. -->
      <xsd:attribute name="boldLabel" type="xsd:boolean" default="false"/>
      <!-- If true then the value is displayed in bold text when read-only. -->
      <xsd:attribute name="boldValue" type="xsd:boolean" default="false"/>
      <!-- The text displayed in the file input button -->
      <xsd:attribute name="buttonText" type="xsd:string" default="DisplayKey.get(&quot;Web.Document.FileValue.Browse&quot;)"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- The confirmation message to show when "showConfirmMessage" is set. If not specified,
           a standard message will be used. -->
      <xsd:attribute name="confirmMessage" type="xsd:string"/>
      <!-- A Gosu expression used to convert the value picked from a popup before set it into
           the model value of this widget. The picked value will be exposed as a symbol with
           the name "PickedValue" -->
      <xsd:attribute name="conversionExpression" type="xsd:string"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- A comma separated list of widgets that are drag and drop zones for this file input. -->
      <xsd:attribute name="dropzoneWidgets" type="xsd:string"/>
      <!-- Boolean expression which, if false, makes this widget and all its children read-only -->
      <xsd:attribute name="editable" type="xsd:string" default="false"/>
      <!-- If true, instead of showing a hierarchical menu, the widget will show a single menu
           with sub-menus grouped under headers. -->
      <xsd:attribute name="flatten" type="xsd:boolean" default="false"/>
      <!-- An optional boolean expression, if returns true, this widget will get focus when start
           editing the containing location. -->
      <xsd:attribute name="focusOnStartEditing" type="xsd:string"/>
      <!-- How the value is formatted; options include "general", "currency", and "email".  See
           the formatType enumeration. -->
      <xsd:attribute name="formatType" type="FormatType"/>
      <!-- A Gosu expression which, if defined, is evaluated to create help info that guides
           the user to edit this widget. The help info will show up if the user hovers the mouse
           over or focuses on the widget, when the widget is in edit mode. -->
      <xsd:attribute name="helpText" type="xsd:string"/>
      <!-- If false, menu items under this input will be shown even when the input is not editable. -->
      <xsd:attribute name="hideChildrenIfReadOnly" type="xsd:boolean" default="true"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- Reference ID of the widget.  This does not have to be globally unique; it only has
           to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <!-- A Gosu expression that converts the presentation value to a model value. The presentation
           value string is exposed to this expression as the symbol "VALUE". -->
      <xsd:attribute name="inputConversion" type="xsd:string"/>
      <!-- Label to render. -->
      <xsd:attribute name="label" type="xsd:string"/>
      <!-- Boolean expression which, if true, causes the label portion of the Input to be rendered
           above the value -->
      <xsd:attribute name="labelAbove" type="xsd:string" default="false"/>
      <!-- Custom extension CSS style class to apply to the label. -->
      <xsd:attribute name="labelStyleClass" type="xsd:string"/>
      <!-- If set to true, the file input may be used to select multiple files -->
      <xsd:attribute name="multiple" type="xsd:boolean" default="false"/>
      <!-- The number of child MenuItems to show in each column.  If not specified, all children
           will be shown in a single column. -->
      <xsd:attribute name="numEntriesPerColumn" type="xsd:integer" default="0"/>
      <!-- Gosu expression to be executed after the value is set from a picker. -->
      <xsd:attribute name="onPick" type="xsd:string"/>
      <!-- A Gosu expression that converts the model value to a presentation value. The model
           value is exposed to this expression as the symbol "VALUE". The return type of this
           expression must be String. -->
      <xsd:attribute name="outputConversion" type="xsd:string"/>
      <!-- A Gosu expression used to validate user value before setting it to the model. This
           expression can access any symbols available to this widget, and a "VALUE" symbol that
           represents the user value. If this expression returns null, the user value will be
           set into the model. Otherwise, an error message containing the result of the expression
           will be displayed on the page, the value will not be set into the model, and no actions
           can be performed until the error is corrected. -->
      <xsd:attribute name="requestValidationExpression" type="xsd:string"/>
      <!-- If true, then the cell must be filled out by the user -->
      <xsd:attribute name="required" type="xsd:string"/>
      <!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * Deprecated.
           DO NOT USE.                                           * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
           Consider using "onChange/onPick/inputConversion/outputConversion" where available.
           If specified and the Input is editable, then any new value of the Input is written
           to this expression (Gosu by default) instead of to "value".  The new value is exposed
           as the symbol "VALUE".  For instance if your value expression is "Foo.getSomething()"
           then it can't be written to since it's not an L-value; so you could specify a setter
           expression along the lines of "Foo.setSomething(VALUE)" Warning: if you use this attribute
           many pebbles features will not work, including but not limited to: * Correct automatic
           detection of the state of the updated data * Correct automatic detection of the editability
           of the data * Correct automatic detection of the maximum size of a text input -->
      <xsd:attribute name="setter" type="xsd:string"/>
      <!-- Optional keyboard shortcut character in the form of "Q" or "ShiftQ"; the "Alt" key
           is implicit. This is only applicable when this widget has an "action" specified and
           the value is not being edited. -->
      <xsd:attribute name="shortcut" type="xsd:string"/>
      <!-- Boolean expression which determines whether or not to show a confirmation message
           when the field value is changed directly from the UI. It's NOT applicable when the
           value is changed indirectly, for example, as a result of client reflection. -->
      <xsd:attribute name="showConfirmMessage" type="xsd:string"/>
      <!-- An optional attribute, if set, defer sub menu generation until user tries to open
           the menu. DO NOT set this flag unless the sub menu of this widget is very expensive
           to generate. Setting this flag will reduce time to load the page, however require
           fetching additional info from server in the background, when the menu gets opened
           for the first time after page loaded. -->
      <xsd:attribute name="subMenuOnDemand" type="xsd:boolean" default="false"/>
      <!-- A Gosu expression to run before committing the record. This expression can refer to
           any symbols available to this widget. If this expression returns null, the validation
           is considered successful; otherwise, the result of this expression will be displayed
           as an error and the record will not be committed. -->
      <xsd:attribute name="validationExpression" type="xsd:string"/>
      <!-- The value this Input binds to as an Expression.  If the Input is editable then this
           value is both read from and written to (unless "setter" is defined). -->
      <xsd:attribute name="value" type="xsd:string" use="required"/>
      <!-- If set to true, the name(s) of the selected file(s) is/are displayed next to the file
           input button -->
      <xsd:attribute name="valueDisplayed" type="xsd:string" default="true"/>
      <!-- CSS max-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionMaxWidth" type="xsd:string"/>
      <!-- CSS min-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionMinWidth" type="xsd:string"/>
      <!-- CSS width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionWidth" type="xsd:string"/>
      <!-- The type of value widget to create for this input, such as Text or TypeKey. -->
      <xsd:attribute name="valueWidgetType" type="xsd:string" default="Text"/>
      <!-- If used instead of "editable", specifies whether the Input is editable when data is
           being created -->
      <xsd:attribute name="visible" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- A ListView cell that renders children widgets. By default, Stacked is true, thereby
       rendering its children in a single column. -->
  <xsd:element name="FormatCell">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="Reflect" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element ref="ColumnFooter" minOccurs="0" maxOccurs="1"/>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="ContentInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="InputIterator" minOccurs="0" maxOccurs="1"/>
          <xsd:element ref="NoteBodyInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PasswordInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PrivacyInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="TextInput" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:choice>
      </xsd:sequence>
      <!-- Specifies the alignment of this cell. Valid values: "left", "right", or "center".
           If no value is specified, the default alignment is determined by the value type ("center"
           for boolean values; "right" for numeric values; "left" for other value types). -->
      <xsd:attribute name="align" type="WidgetAlignment"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- Boolean expression which, if false, grays out the widget and all its children -->
      <xsd:attribute name="available" type="xsd:string"/>
      <!-- If true, renders the cell contents in bold text. Defaults to false. -->
      <xsd:attribute name="bold" type="xsd:boolean" default="false"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- The HTML colspan attribute, lets this cell span across multiple columns of other rows.
           Useful for generating a "group header" row above a RowIterator. The default value
           is 1. A value greater than 1 is only allowed when the containing row is not iterated
           by a RowIterator. -->
      <xsd:attribute name="colspan" type="xsd:integer"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- An optional expression. If specified, a footer cell with the specified value will
           be rendered for this column. Only applicable when the containing Row is iterated by
           a RowIterator. Not allowed when "footerSumValue" is specified. -->
      <xsd:attribute name="footerLabel" type="xsd:string"/>
      <!-- An optional expression, if specified, will be used as format pattern for the footer
           sum value. Normally not specified, so that the "format" and\or "formatType" of the
           cell value will be applied to footer sum value. Only applicable when "footerSumValue"
           is specified. The result of this expression must conform to the number format defined
           in java.text.DecimalFormat. -->
      <xsd:attribute name="footerSumFormat" type="xsd:string"/>
      <!-- An optional Numeric expression. If specified, a footer cell that sums the specified
           value for all cells in this column will be rendered. Pagination of the list does not
           affect the sum value. Only applicable when the containing row is iterated by a RowIterator.
           Not allowed when "footerLabel" is specified. -->
      <xsd:attribute name="footerSumValue" type="xsd:string"/>
      <!-- If true, this Cell and any other grow-enabled Cell will expand to fill remaining space
           in the ListViewPanel. Only applicable when the ListView is set to stretch. -->
      <xsd:attribute name="grow" type="xsd:boolean" default="false"/>
      <!-- CSS height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="height" type="xsd:string"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- Refers to an image file. If defined, makes this an icon cell. The "value" attribute
           should be a boolean expression describing whether the icon is visible in a given row. -->
      <xsd:attribute name="icon" type="xsd:string"/>
      <!-- Color of the icon. If not set will default to its font color. -->
      <xsd:attribute name="iconColor" type="xsd:string"/>
      <!-- An enumeration of icon types that determine what the 'icon' property on the widget
           is referring to. -->
      <xsd:attribute name="iconType" type="IconTypeEnum"/>
      <!-- Reference ID of the widget.  This does not have to be globally unique; it only has
           to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <!-- An optional expression. If specified, a header cell with the specified value will
           be rendered for this column. Only applicable when the containing row is iterated by
           a RowIterator. -->
      <xsd:attribute name="label" type="xsd:string"/>
      <!-- CSS max-height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="maxHeight" type="xsd:string"/>
      <!-- CSS max-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="maxWidth" type="xsd:string"/>
      <!-- CSS min-height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="minHeight" type="xsd:string"/>
      <!-- CSS min-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="minWidth" type="xsd:string"/>
      <!-- Relative width when printing to PDF. All widths are relative to the widths of the
           other columns in the ListView -->
      <xsd:attribute name="printWidth" type="xsd:string" default="1"/>
      <!-- If true, shows the icon defined by "icon" in the header cell for this column. The
           default value is true. -->
      <xsd:attribute name="showHeaderIcon" type="xsd:boolean" default="true"/>
      <!-- An optional comma-separated sequence of Expressions, each of which is assumed to be
           a dot-delimited path, the value by which this column will be sorted if the user clicks
           on the header cell. -->
      <xsd:attribute name="sortBy" type="xsd:string"/>
      <!-- Either "ascending" or "descending" -->
      <xsd:attribute name="sortDirection" type="WidgetSortDirection" default="ascending"/>
      <!-- The priority of sorting relative to other sorting elements like IteratorSort and Cell.
           The lower the number, the higher the priority.  The highest priority is "1" -->
      <xsd:attribute name="sortOrder" type="xsd:integer" default="0"/>
      <!-- If true, the contents of the Widget will be stacked vertically. -->
      <xsd:attribute name="stacked" type="xsd:string" default="true"/>
      <!-- Extra "alt" text to show when the user hovers the mouse over the header cell of this
           column. -->
      <xsd:attribute name="tooltip" type="xsd:string"/>
      <!-- Specifies the vertical alignment of this cell. Valid values: "top", "middle", or "bottom".
           If no value is specified, the default alignment is determined by the cell type ("top"
           for Text Areas and Format Cells, "middle" for buttons and icons). -->
      <xsd:attribute name="verticalAlign" type="WidgetVerticalAlignment"/>
      <!-- Boolean expression which, if false, completely hides the widget and all its children -->
      <xsd:attribute name="visible" type="xsd:string"/>
      <!-- CSS width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="width" type="xsd:string"/>
      <!-- If default, defers to FormatType to decide whether to wrap or not.  If true, allows
           cell content to wrap. -->
      <xsd:attribute name="wrap" type="WrapType" default="default"/>
      <!-- If true, allows Header Cell text content to wrap. Defaults to true. -->
      <xsd:attribute name="wrapLabel" type="xsd:boolean" default="false"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- A Location that automatically redirects to some other Location -->
  <xsd:element name="Forward">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="LocationEntryPoint" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element ref="Variable" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element ref="ForwardCondition" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element ref="Code" minOccurs="0" maxOccurs="1"/>
      </xsd:sequence>
      <!-- The action that is performed when the Forward is entered. See ActionBase for details. -->
      <xsd:attribute name="action" type="xsd:string"/>
      <!-- A normal Forward can safely redirect to either go calls or push calls but not both.
           If this flag is set the Forward can redirect to either a go or a push. A Forward with
           allowGoOrPush true must be pushed and it will pop itself automatically before executing
           the final destination expression -->
      <xsd:attribute name="allowGoOrPush" type="xsd:boolean" default="false"/>
      <!-- A boolean expression which, if false, means the user has no permission to visit the
           location, and links to the location will be either invisible or grayed out, depending
           on context. -->
      <xsd:attribute name="canVisit" type="xsd:string"/>
      <!-- Use this to add your own comments to this element. For now this attribute does nothing;
           later if we create a "UI dictionary" or PCF editor, the description will show up there. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- ID of this Location. Must be unique among all Locations. -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <!-- An expression that will be executed prior to the forward. -->
      <xsd:attribute name="onBeforeForward" type="xsd:string"/>
      <!-- Reference to the "parent location" of this location, to specifiy the hierarchy of
           pcf locations. Used for the automatically generated "up link" in the title bar, highlighting
           of current menu links, and grouping items under "Unsaved Work". Usually the parent
           is the location right above this location in the application hierarchy, i.e. the parent
           of "ActivityDetailWorksheet" is "ClaimWorkplan", the parent of "Desktop Activities"
           is "Desktop" and "Desktop" has no parent at all. -->
      <xsd:attribute name="parent" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- Forwards to a location if the given condition is satisfied -->
  <xsd:element name="ForwardCondition">
    <xsd:complexType>
      <xsd:choice minOccurs="0" maxOccurs="unbounded"/>
      <!-- The action that is performed when the Forward is entered, if "condition" evaluates
           to true. See ActionBase for details. -->
      <xsd:attribute name="action" type="xsd:string" use="required"/>
      <!-- A Gosu expression evaluating to a Boolean.  The first ForwardCondition which evalutes
           to true has its action run -->
      <xsd:attribute name="condition" type="xsd:string" default="true"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- A Cell that includes a drop-down list of groups, and a menu containing Select Group
       and Search Group items.  The locations to which those items navigate are specified
       by the searchLocation and selectionLocation attributes. -->
  <xsd:element name="GroupCell">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="Reflect" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element ref="ColumnFooter" minOccurs="0" maxOccurs="1"/>
        <xsd:element ref="PostOnChange" minOccurs="0" maxOccurs="1"/>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="AddMenuItem"/>
          <xsd:element ref="AddMenuItemIterator"/>
          <xsd:element ref="MenuItem"/>
          <xsd:element ref="MenuItemDivider"/>
          <xsd:element ref="MenuItemIterator"/>
          <xsd:element ref="MenuItemSetRef"/>
          <xsd:element ref="MenuItemTree"/>
          <xsd:element ref="PickerMenuItem"/>
          <xsd:element ref="SearchItem"/>
        </xsd:choice>
      </xsd:sequence>
      <!-- An optional action to take when the user clicks the value of this widget when the
           value is not being edited. See ActionBase for details. When specified, the value of
           this widget will be rendered as a link when the value is not being edited. -->
      <xsd:attribute name="action" type="xsd:string"/>
      <!-- An optional boolean expression controlling whether the action should be available
           in this specific context when in read-only mode.  This is ignored if in edit mode
           or if the action is null.  This attribute will be deprecated in a future release,
           please use the 'available' attribute instead.  To disable action in readonly mode,
           you can set available=&quot;CurrentLocation.InEditMode || &lt;action-available-condition&gt;&quot; -->
      <xsd:attribute name="actionAvailable" type="xsd:string"/>
      <!-- Specifies the alignment of this cell. Valid values: "left", "right", or "center".
           If no value is specified, the default alignment is determined by the value type ("center"
           for boolean values; "right" for numeric values; "left" for other value types). -->
      <xsd:attribute name="align" type="WidgetAlignment"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- Boolean expression which, if false, grays out the widget and all its children -->
      <xsd:attribute name="available" type="xsd:string"/>
      <!-- If true, renders the cell contents in bold text. Defaults to false. -->
      <xsd:attribute name="bold" type="xsd:boolean" default="false"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- The HTML colspan attribute, lets this cell span across multiple columns of other rows.
           Useful for generating a "group header" row above a RowIterator. The default value
           is 1. A value greater than 1 is only allowed when the containing row is not iterated
           by a RowIterator. -->
      <xsd:attribute name="colspan" type="xsd:integer"/>
      <!-- The confirmation message to show when "showConfirmMessage" is set. If not specified,
           a standard message will be used. -->
      <xsd:attribute name="confirmMessage" type="xsd:string"/>
      <!-- A Gosu expression used to convert the value picked from a popup before set it into
           the model value of this widget. The picked value will be exposed as a symbol with
           the name "PickedValue" -->
      <xsd:attribute name="conversionExpression" type="xsd:string"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- Boolean expression which, if false, makes this widget and all its children read-only -->
      <xsd:attribute name="editable" type="xsd:string" default="false"/>
      <!-- If true, allows the user to sort the values in the column by clicking on the header.
            Only applicable when the containing row is iterated by a RowIterator. -->
      <xsd:attribute name="enableSort" type="xsd:boolean" default="true"/>
      <!-- If true, this cell will the last cell in the row to be navigated to via the ENTER
           key. Only applicable when "CellNavOnEnter" or "QuickAddOnEnter" is set. Normally not
           specified. Default to false. -->
      <xsd:attribute name="endOfCellNav" type="xsd:boolean" default="false"/>
      <!-- If true, instead of showing a hierarchical menu, the widget will show a single menu
           with sub-menus grouped under headers. -->
      <xsd:attribute name="flatten" type="xsd:boolean" default="false"/>
      <!-- An optional boolean expression, if returns true, this widget will get focus when start
           editing the containing location. -->
      <xsd:attribute name="focusOnStartEditing" type="xsd:string"/>
      <!-- An expression that returns a GWColor instance. Legacy: this method can instead return
           a string corresponding to a CSS Specification Level 3 color name. See GWColor for
           more details. -->
      <xsd:attribute name="fontColor" type="xsd:string"/>
      <!-- An optional expression. If specified, a footer cell with the specified value will
           be rendered for this column. Only applicable when the containing Row is iterated by
           a RowIterator. Not allowed when "footerSumValue" is specified. -->
      <xsd:attribute name="footerLabel" type="xsd:string"/>
      <!-- An optional expression, if specified, will be used as format pattern for the footer
           sum value. Normally not specified, so that the "format" and\or "formatType" of the
           cell value will be applied to footer sum value. Only applicable when "footerSumValue"
           is specified. The result of this expression must conform to the number format defined
           in java.text.DecimalFormat. -->
      <xsd:attribute name="footerSumFormat" type="xsd:string"/>
      <!-- An optional Numeric expression. If specified, a footer cell that sums the specified
           value for all cells in this column will be rendered. Pagination of the list does not
           affect the sum value. Only applicable when the containing row is iterated by a RowIterator.
           Not allowed when "footerLabel" is specified. -->
      <xsd:attribute name="footerSumValue" type="xsd:string"/>
      <!-- How the value is formatted; options include "general", "currency", and "email".  See
           the formatType enumeration. -->
      <xsd:attribute name="formatType" type="FormatType"/>
      <!-- If true, the ListView will be grouped by this cell upon entering the page. Only one
           grouped cell is allowed at any given time and it is only applicable when the column
           is sortable. -->
      <xsd:attribute name="groupedOnEnter" type="xsd:string"/>
      <!-- If true, this Cell and any other grow-enabled Cell will expand to fill remaining space
           in the ListViewPanel. Only applicable when the ListView is set to stretch. -->
      <xsd:attribute name="grow" type="xsd:boolean" default="false"/>
      <!-- If true, generates a checkbox at the beginning of this cell. This checkbox can be
           used to check this entry in the nearest containing Iterator. Defaults to false. Only
           allowed if this cell is inside a CellIterator or under a Row inside a RowIterator. -->
      <xsd:attribute name="hasCheckBox" type="xsd:boolean" default="false"/>
      <!-- CSS height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="height" type="xsd:string"/>
      <!-- A Gosu expression which, if defined, is evaluated to create help info that guides
           the user to edit this widget. The help info will show up if the user hovers the mouse
           over or focuses on the widget, when the widget is in edit mode. -->
      <xsd:attribute name="helpText" type="xsd:string"/>
      <!-- If false, menu items under this input will be shown even when the input is not editable. -->
      <xsd:attribute name="hideChildrenIfReadOnly" type="xsd:boolean" default="true"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- Refers to an image file. If defined, makes this an icon cell. The "value" attribute
           should be a boolean expression describing whether the icon is visible in a given row. -->
      <xsd:attribute name="icon" type="xsd:string"/>
      <!-- Color of the icon. If not set will default to its font color. -->
      <xsd:attribute name="iconColor" type="xsd:string"/>
      <!-- The ALT text for any icon generated in the content cells -->
      <xsd:attribute name="iconLabel" type="xsd:string"/>
      <!-- An enumeration of icon types that determine what the 'icon' property on the widget
           is referring to. -->
      <xsd:attribute name="iconType" type="IconTypeEnum"/>
      <!-- Reference ID of the widget.  This does not have to be globally unique; it only has
           to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <!-- A Gosu expression that converts the presentation value to a model value. The presentation
           value string is exposed to this expression as the symbol "VALUE". -->
      <xsd:attribute name="inputConversion" type="xsd:string"/>
      <!-- An optional expression. If specified, a header cell with the specified value will
           be rendered for this column. Only applicable when the containing row is iterated by
           a RowIterator. -->
      <xsd:attribute name="label" type="xsd:string"/>
      <!-- Custom extension CSS style class to apply to the header. -->
      <xsd:attribute name="labelStyleClass" type="xsd:string"/>
      <!-- CSS max-height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="maxHeight" type="xsd:string"/>
      <!-- CSS max-width value. Can be `px`, or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="maxWidth" type="xsd:string"/>
      <!-- CSS min-height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="minHeight" type="xsd:string"/>
      <!-- CSS min-width value. Can be `px`, or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="minWidth" type="xsd:string"/>
      <!-- The number of child MenuItems to show in each column.  If not specified, all children
           will be shown in a single column. -->
      <xsd:attribute name="numEntriesPerColumn" type="xsd:integer" default="0"/>
      <!-- Gosu expression to be executed after the value is set from a picker. -->
      <xsd:attribute name="onPick" type="xsd:string"/>
      <!-- A Gosu expression that converts the model value to a presentation value. The model
           value is exposed to this expression as the symbol "VALUE". The return type of this
           expression must be String. -->
      <xsd:attribute name="outputConversion" type="xsd:string"/>
      <!-- Relative width when printing to PDF. All widths are relative to the widths of the
           other columns in the ListView -->
      <xsd:attribute name="printWidth" type="xsd:string" default="1"/>
      <!-- A Gosu expression used to validate user value before setting it to the model. This
           expression can access any symbols available to this widget, and a "VALUE" symbol that
           represents the user value. If this expression returns null, the user value will be
           set into the model. Otherwise, an error message containing the result of the expression
           will be displayed on the page, the value will not be set into the model, and no actions
           can be performed until the error is corrected. -->
      <xsd:attribute name="requestValidationExpression" type="xsd:string"/>
      <!-- If true, then the cell must be filled out by the user -->
      <xsd:attribute name="required" type="xsd:string"/>
      <!-- The location of the group search item as a Gosu expression of the form "[location
           name].push()" -->
      <xsd:attribute name="searchLocation" type="xsd:string" default="pcf.GroupSearchPopup.push()"/>
      <!-- The location of the group select items as a Gosu expression of the form "[location
           name].push()" -->
      <xsd:attribute name="selectLocation" type="xsd:string" default="pcf.OrganizationGroupTreePopup.push()"/>
      <!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * Deprecated.
           DO NOT USE.                                           * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
           Consider using "onChange/onPick/inputConversion/outputConversion" where available.
           If specified and the Input is editable, then any new value of the Input is written
           to this expression (Gosu by default) instead of to "value".  The new value is exposed
           as the symbol "VALUE".  For instance if your value expression is "Foo.getSomething()"
           then it can't be written to since it's not an L-value; so you could specify a setter
           expression along the lines of "Foo.setSomething(VALUE)" Warning: if you use this attribute
           many pebbles features will not work, including but not limited to: * Correct automatic
           detection of the state of the updated data * Correct automatic detection of the editability
           of the data * Correct automatic detection of the maximum size of a text input -->
      <xsd:attribute name="setter" type="xsd:string"/>
      <!-- Boolean expression which determines whether or not to show a confirmation message
           when the field value is changed directly from the UI. It's NOT applicable when the
           value is changed indirectly, for example, as a result of client reflection. -->
      <xsd:attribute name="showConfirmMessage" type="xsd:string"/>
      <!-- If true, shows the icon defined by "icon" in the header cell for this column. The
           default value is true. -->
      <xsd:attribute name="showHeaderIcon" type="xsd:boolean" default="true"/>
      <!-- An optional comma-separated sequence of Expressions, each of which is assumed to be
           a dot-delimited path, the value by which this column will be sorted if the user clicks
           on the header cell. -->
      <xsd:attribute name="sortBy" type="xsd:string"/>
      <!-- Either "ascending" or "descending" -->
      <xsd:attribute name="sortDirection" type="WidgetSortDirection" default="ascending"/>
      <!-- The priority of sorting relative to other sorting elements like IteratorSort and Cell.
           The lower the number, the higher the priority.  The highest priority is "1" -->
      <xsd:attribute name="sortOrder" type="xsd:integer" default="0"/>
      <!-- CSS style class for the cell content; for instance, "miniButton" makes a link appear
           as a small button -->
      <xsd:attribute name="styleClass" type="LinkStyleClass"/>
      <!-- An optional attribute, if set, defer sub menu generation until user tries to open
           the menu. DO NOT set this flag unless the sub menu of this widget is very expensive
           to generate. Setting this flag will reduce time to load the page, however require
           fetching additional info from server in the background, when the menu gets opened
           for the first time after page loaded. -->
      <xsd:attribute name="subMenuOnDemand" type="xsd:boolean" default="false"/>
      <!-- Extra "alt" text to show when the user hovers the mouse over the header cell of this
           column. -->
      <xsd:attribute name="tooltip" type="xsd:string"/>
      <!-- If true, validate before commit that the value of this column is unique across all
           rows in the current page. Only meaningful when this column is editable. -->
      <xsd:attribute name="unique" type="xsd:boolean" default="false"/>
      <!-- A Gosu expression to run before committing the record. This expression can refer to
           any symbols available to this widget. If this expression returns null, the validation
           is considered successful; otherwise, the result of this expression will be displayed
           as an error and the record will not be committed. -->
      <xsd:attribute name="validationExpression" type="xsd:string"/>
      <!-- The label of this cell to be used when it has validation issues. Not needed when this
           cell has a "label". Required if the cell is editable but does not have a "label". -->
      <xsd:attribute name="validationLabel" type="xsd:string"/>
      <!-- The value this element binds to.  If the element is editable then this value is both
           read from and written to (unless "setter" is defined). -->
      <xsd:attribute name="value" type="xsd:string"/>
      <!-- A list of possible values as a Gosu -->
      <xsd:attribute name="valueRange" type="xsd:string" default="gw.api.admin.BaseAdminUtil.getGroupsForCurrentUser()"/>
      <!-- The type of the value expression. -->
      <xsd:attribute name="valueType" type="xsd:string" default="entity.Group"/>
      <!-- Boolean expression which, if false, hides the <i>contents</i> of the cell (its "ValueWidget"),
           but not the cell itself.  Needed since hiding the actual cell usually screws up the
           layout -->
      <xsd:attribute name="valueVisible" type="xsd:string"/>
      <!-- Specifies the vertical alignment of this cell. Valid values: "top", "middle", or "bottom".
           If no value is specified, the default alignment is determined by the cell type ("top"
           for Text Areas and Format Cells, "middle" for buttons and icons). -->
      <xsd:attribute name="verticalAlign" type="WidgetVerticalAlignment"/>
      <!-- Boolean expression which, if false, completely hides the widget and all its children -->
      <xsd:attribute name="visible" type="xsd:string"/>
      <!-- CSS width value. Can be `px`, or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="width" type="xsd:string"/>
      <!-- If default, defers to FormatType to decide whether to wrap or not.  If true, allows
           cell content to wrap. -->
      <xsd:attribute name="wrap" type="WrapType" default="default"/>
      <!-- If true, allows Header Cell text content to wrap. Defaults to true. -->
      <xsd:attribute name="wrapLabel" type="xsd:boolean" default="false"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- An Input that includes a drop-down list of groups, and a menu containing Select Group
       and Search Group items.  The locations to which those items navigate are specified
       by the searchLocation and selectionLocation attributes. -->
  <xsd:element name="GroupInput">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="LayoutConfig" minOccurs="0" maxOccurs="1"/>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="AddMenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="AddMenuItemIterator" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemDivider" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemIterator" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemSetRef" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemTree" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PickerMenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PostOnChange" minOccurs="0" maxOccurs="1"/>
          <xsd:element ref="Reflect" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="SearchItem" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:choice>
      </xsd:sequence>
      <!-- An optional action to take when the user clicks the value of this widget when the
           value is not being edited. See ActionBase for list of available action prefixes. When
           specified, the value of this widget will be rendered as a link when the value is not
           being edited. -->
      <xsd:attribute name="action" type="xsd:string"/>
      <!-- An optional boolean expression controlling whether the action should be available
           in this specific context when in read-only mode.  This is ignored if in edit mode
           or if the action is null.  This attribute will be deprecated in a future release,
           please use the 'available' attribute instead.  To disable action in readonly mode,
           you can set available=&quot;CurrentLocation.InEditMode || &lt;action-available-condition&gt;&quot; -->
      <xsd:attribute name="actionAvailable" type="xsd:string"/>
      <!-- Alignment of the widget ("left", "right", or "center") -->
      <xsd:attribute name="align" type="WidgetAlignment"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- Boolean expression which, if false, grays out the widget and all its children -->
      <xsd:attribute name="available" type="xsd:string"/>
      <!-- If true then the label is displayed in bold text. -->
      <xsd:attribute name="boldLabel" type="xsd:boolean" default="false"/>
      <!-- If true then the value is displayed in bold text when read-only. -->
      <xsd:attribute name="boldValue" type="xsd:boolean" default="false"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- The confirmation message to show when "showConfirmMessage" is set. If not specified,
           a standard message will be used. -->
      <xsd:attribute name="confirmMessage" type="xsd:string"/>
      <!-- A Gosu expression used to convert the value picked from a popup before set it into
           the model value of this widget. The picked value will be exposed as a symbol with
           the name "PickedValue" -->
      <xsd:attribute name="conversionExpression" type="xsd:string"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- Boolean expression which, if false, makes this widget and all its children read-only -->
      <xsd:attribute name="editable" type="xsd:string" default="false"/>
      <!-- If true, instead of showing a hierarchical menu, the widget will show a single menu
           with sub-menus grouped under headers. -->
      <xsd:attribute name="flatten" type="xsd:boolean" default="false"/>
      <!-- An optional boolean expression, if returns true, this widget will get focus when start
           editing the containing location. -->
      <xsd:attribute name="focusOnStartEditing" type="xsd:string"/>
      <!-- How the value is formatted; options include "general", "currency", and "email".  See
           the formatType enumeration. -->
      <xsd:attribute name="formatType" type="FormatType"/>
      <!-- A Gosu expression which, if defined, is evaluated to create help info that guides
           the user to edit this widget. The help info will show up if the user hovers the mouse
           over or focuses on the widget, when the widget is in edit mode. -->
      <xsd:attribute name="helpText" type="xsd:string"/>
      <!-- If false, menu items under this input will be shown even when the input is not editable. -->
      <xsd:attribute name="hideChildrenIfReadOnly" type="xsd:boolean" default="true"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- Reference ID of the widget.  This does not have to be globally unique; it only has
           to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <!-- A Gosu expression that converts the presentation value to a model value. The presentation
           value string is exposed to this expression as the symbol "VALUE". -->
      <xsd:attribute name="inputConversion" type="xsd:string"/>
      <!-- Label to render. -->
      <xsd:attribute name="label" type="xsd:string"/>
      <!-- Boolean expression which, if true, causes the label portion of the Input to be rendered
           above the value -->
      <xsd:attribute name="labelAbove" type="xsd:string" default="false"/>
      <!-- Custom extension CSS style class to apply to the label. -->
      <xsd:attribute name="labelStyleClass" type="xsd:string"/>
      <!-- The number of child MenuItems to show in each column.  If not specified, all children
           will be shown in a single column. -->
      <xsd:attribute name="numEntriesPerColumn" type="xsd:integer" default="0"/>
      <!-- Gosu expression to be executed after the value is set from a picker. -->
      <xsd:attribute name="onPick" type="xsd:string"/>
      <!-- A Gosu expression that converts the model value to a presentation value. The model
           value is exposed to this expression as the symbol "VALUE". The return type of this
           expression must be String. -->
      <xsd:attribute name="outputConversion" type="xsd:string"/>
      <!-- A Gosu expression used to validate user value before setting it to the model. This
           expression can access any symbols available to this widget, and a "VALUE" symbol that
           represents the user value. If this expression returns null, the user value will be
           set into the model. Otherwise, an error message containing the result of the expression
           will be displayed on the page, the value will not be set into the model, and no actions
           can be performed until the error is corrected. -->
      <xsd:attribute name="requestValidationExpression" type="xsd:string"/>
      <!-- If true, then the cell must be filled out by the user -->
      <xsd:attribute name="required" type="xsd:string"/>
      <!-- The location of the group search item as a Gosu expression of the form "[location
           name].push()" -->
      <xsd:attribute name="searchLocation" type="xsd:string" default="pcf.GroupSearchPopup.push()"/>
      <!-- The location of the group select items as a Gosu expression of the form "[location
           name].push()" -->
      <xsd:attribute name="selectLocation" type="xsd:string" default="pcf.OrganizationGroupTreePopup.push()"/>
      <!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * Deprecated.
           DO NOT USE.                                           * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
           Consider using "onChange/onPick/inputConversion/outputConversion" where available.
           If specified and the Input is editable, then any new value of the Input is written
           to this expression (Gosu by default) instead of to "value".  The new value is exposed
           as the symbol "VALUE".  For instance if your value expression is "Foo.getSomething()"
           then it can't be written to since it's not an L-value; so you could specify a setter
           expression along the lines of "Foo.setSomething(VALUE)" Warning: if you use this attribute
           many pebbles features will not work, including but not limited to: * Correct automatic
           detection of the state of the updated data * Correct automatic detection of the editability
           of the data * Correct automatic detection of the maximum size of a text input -->
      <xsd:attribute name="setter" type="xsd:string"/>
      <!-- Optional keyboard shortcut character in the form of "Q" or "ShiftQ"; the "Alt" key
           is implicit. This is only applicable when this widget has an "action" specified and
           the value is not being edited. -->
      <xsd:attribute name="shortcut" type="xsd:string"/>
      <!-- Boolean expression which determines whether or not to show a confirmation message
           when the field value is changed directly from the UI. It's NOT applicable when the
           value is changed indirectly, for example, as a result of client reflection. -->
      <xsd:attribute name="showConfirmMessage" type="xsd:string"/>
      <!-- An optional attribute, if set, defer sub menu generation until user tries to open
           the menu. DO NOT set this flag unless the sub menu of this widget is very expensive
           to generate. Setting this flag will reduce time to load the page, however require
           fetching additional info from server in the background, when the menu gets opened
           for the first time after page loaded. -->
      <xsd:attribute name="subMenuOnDemand" type="xsd:boolean" default="false"/>
      <!-- A Gosu expression to run before committing the record. This expression can refer to
           any symbols available to this widget. If this expression returns null, the validation
           is considered successful; otherwise, the result of this expression will be displayed
           as an error and the record will not be committed. -->
      <xsd:attribute name="validationExpression" type="xsd:string"/>
      <!-- The value this Input binds to as an Expression.  If the Input is editable then this
           value is both read from and written to (unless "setter" is defined). -->
      <xsd:attribute name="value" type="xsd:string" use="required"/>
      <!-- A list of possible values as a Gosu -->
      <xsd:attribute name="valueRange" type="xsd:string" default="gw.api.admin.BaseAdminUtil.getGroupsForCurrentUser()"/>
      <!-- CSS max-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionMaxWidth" type="xsd:string"/>
      <!-- CSS min-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionMinWidth" type="xsd:string"/>
      <!-- CSS width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionWidth" type="xsd:string"/>
      <!-- The type of the value expression. -->
      <xsd:attribute name="valueType" type="xsd:string" default="entity.Group"/>
      <!-- If used instead of "editable", specifies whether the Input is editable when data is
           being created -->
      <xsd:attribute name="visible" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- An input which is present client-side but never displayed to nor editable by the user.
        Consider using a Variable instead if the value doesn't need to be present on the
       client. -->
  <xsd:element name="HiddenInput">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="LayoutConfig" minOccurs="0" maxOccurs="1"/>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="AddMenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="AddMenuItemIterator" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemDivider" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemIterator" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemSetRef" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemTree" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PickerMenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PostOnChange" minOccurs="0" maxOccurs="1"/>
          <xsd:element ref="Reflect" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="SearchItem" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:choice>
      </xsd:sequence>
      <!-- An optional action to take when the user clicks the value of this widget when the
           value is not being edited. See ActionBase for list of available action prefixes. When
           specified, the value of this widget will be rendered as a link when the value is not
           being edited. -->
      <xsd:attribute name="action" type="xsd:string"/>
      <!-- An optional boolean expression controlling whether the action should be available
           in this specific context when in read-only mode.  This is ignored if in edit mode
           or if the action is null.  This attribute will be deprecated in a future release,
           please use the 'available' attribute instead.  To disable action in readonly mode,
           you can set available=&quot;CurrentLocation.InEditMode || &lt;action-available-condition&gt;&quot; -->
      <xsd:attribute name="actionAvailable" type="xsd:string"/>
      <!-- Alignment of the widget ("left", "right", or "center") -->
      <xsd:attribute name="align" type="WidgetAlignment"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- Boolean expression which, if false, grays out the widget and all its children -->
      <xsd:attribute name="available" type="xsd:string"/>
      <!-- If true then the label is displayed in bold text. -->
      <xsd:attribute name="boldLabel" type="xsd:boolean" default="false"/>
      <!-- If true then the value is displayed in bold text when read-only. -->
      <xsd:attribute name="boldValue" type="xsd:boolean" default="false"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- The confirmation message to show when "showConfirmMessage" is set. If not specified,
           a standard message will be used. -->
      <xsd:attribute name="confirmMessage" type="xsd:string"/>
      <!-- A Gosu expression used to convert the value picked from a popup before set it into
           the model value of this widget. The picked value will be exposed as a symbol with
           the name "PickedValue" -->
      <xsd:attribute name="conversionExpression" type="xsd:string"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- Boolean expression which, if false, makes this widget and all its children read-only -->
      <xsd:attribute name="editable" type="xsd:string" default="false"/>
      <!-- If true, instead of showing a hierarchical menu, the widget will show a single menu
           with sub-menus grouped under headers. -->
      <xsd:attribute name="flatten" type="xsd:boolean" default="false"/>
      <!-- An optional boolean expression, if returns true, this widget will get focus when start
           editing the containing location. -->
      <xsd:attribute name="focusOnStartEditing" type="xsd:string"/>
      <!-- How the value is formatted; options include "general", "currency", and "email".  See
           the formatType enumeration. -->
      <xsd:attribute name="formatType" type="FormatType"/>
      <!-- A Gosu expression which, if defined, is evaluated to create help info that guides
           the user to edit this widget. The help info will show up if the user hovers the mouse
           over or focuses on the widget, when the widget is in edit mode. -->
      <xsd:attribute name="helpText" type="xsd:string"/>
      <!-- If false, menu items under this input will be shown even when the input is not editable. -->
      <xsd:attribute name="hideChildrenIfReadOnly" type="xsd:boolean" default="true"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- Reference ID of the widget.  This does not have to be globally unique; it only has
           to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <!-- A Gosu expression that converts the presentation value to a model value. The presentation
           value string is exposed to this expression as the symbol "VALUE". -->
      <xsd:attribute name="inputConversion" type="xsd:string"/>
      <!-- Label to render. -->
      <xsd:attribute name="label" type="xsd:string"/>
      <!-- Boolean expression which, if true, causes the label portion of the Input to be rendered
           above the value -->
      <xsd:attribute name="labelAbove" type="xsd:string" default="false"/>
      <!-- Custom extension CSS style class to apply to the label. -->
      <xsd:attribute name="labelStyleClass" type="xsd:string"/>
      <!-- The number of child MenuItems to show in each column.  If not specified, all children
           will be shown in a single column. -->
      <xsd:attribute name="numEntriesPerColumn" type="xsd:integer" default="0"/>
      <!-- Gosu expression to be executed after the value is set from a picker. -->
      <xsd:attribute name="onPick" type="xsd:string"/>
      <!-- A Gosu expression that converts the model value to a presentation value. The model
           value is exposed to this expression as the symbol "VALUE". The return type of this
           expression must be String. -->
      <xsd:attribute name="outputConversion" type="xsd:string"/>
      <!-- A Gosu expression used to validate user value before setting it to the model. This
           expression can access any symbols available to this widget, and a "VALUE" symbol that
           represents the user value. If this expression returns null, the user value will be
           set into the model. Otherwise, an error message containing the result of the expression
           will be displayed on the page, the value will not be set into the model, and no actions
           can be performed until the error is corrected. -->
      <xsd:attribute name="requestValidationExpression" type="xsd:string"/>
      <!-- If true, then the cell must be filled out by the user -->
      <xsd:attribute name="required" type="xsd:string"/>
      <!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * Deprecated.
           DO NOT USE.                                           * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
           Consider using "onChange/onPick/inputConversion/outputConversion" where available.
           If specified and the Input is editable, then any new value of the Input is written
           to this expression (Gosu by default) instead of to "value".  The new value is exposed
           as the symbol "VALUE".  For instance if your value expression is "Foo.getSomething()"
           then it can't be written to since it's not an L-value; so you could specify a setter
           expression along the lines of "Foo.setSomething(VALUE)" Warning: if you use this attribute
           many pebbles features will not work, including but not limited to: * Correct automatic
           detection of the state of the updated data * Correct automatic detection of the editability
           of the data * Correct automatic detection of the maximum size of a text input -->
      <xsd:attribute name="setter" type="xsd:string"/>
      <!-- Optional keyboard shortcut character in the form of "Q" or "ShiftQ"; the "Alt" key
           is implicit. This is only applicable when this widget has an "action" specified and
           the value is not being edited. -->
      <xsd:attribute name="shortcut" type="xsd:string"/>
      <!-- Boolean expression which determines whether or not to show a confirmation message
           when the field value is changed directly from the UI. It's NOT applicable when the
           value is changed indirectly, for example, as a result of client reflection. -->
      <xsd:attribute name="showConfirmMessage" type="xsd:string"/>
      <!-- An optional attribute, if set, defer sub menu generation until user tries to open
           the menu. DO NOT set this flag unless the sub menu of this widget is very expensive
           to generate. Setting this flag will reduce time to load the page, however require
           fetching additional info from server in the background, when the menu gets opened
           for the first time after page loaded. -->
      <xsd:attribute name="subMenuOnDemand" type="xsd:boolean" default="false"/>
      <!-- A Gosu expression to run before committing the record. This expression can refer to
           any symbols available to this widget. If this expression returns null, the validation
           is considered successful; otherwise, the result of this expression will be displayed
           as an error and the record will not be committed. -->
      <xsd:attribute name="validationExpression" type="xsd:string"/>
      <!-- The value this Input binds to as an Expression.  If the Input is editable then this
           value is both read from and written to (unless "setter" is defined). -->
      <xsd:attribute name="value" type="xsd:string" use="required"/>
      <!-- CSS max-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionMaxWidth" type="xsd:string"/>
      <!-- CSS min-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionMinWidth" type="xsd:string"/>
      <!-- CSS width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionWidth" type="xsd:string"/>
      <!-- The type of the value expression. -->
      <xsd:attribute name="valueType" type="xsd:string" use="required"/>
      <!-- If used instead of "editable", specifies whether the Input is editable when data is
           being created -->
      <xsd:attribute name="visible" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- An invisible link that can only be invoked by JavaScript or a keyboard shortcut -->
  <xsd:element name="HiddenLink">
    <xsd:complexType>
      <xsd:choice minOccurs="0" maxOccurs="unbounded"/>
      <!-- Action performed by this widget.  By default, this is a Gosu expression.  Other types
           of actions can be specified by using the following prefixes: http: causes the browser
           to follow the specified plain http link https: causes the browser to follow the specified
           plain https link javascript: causes the browser to execute the specified javascript
           logout: logs out of the application -->
      <xsd:attribute name="action" type="xsd:string"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- Boolean expression which, if false, grays out the widget and all its children and
           makes them unclickable -->
      <xsd:attribute name="available" type="xsd:string"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- Confirmation message to show before performing the action -->
      <xsd:attribute name="confirmMessage" type="xsd:string"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- Should be 'true', 'inline' or 'attachment' if the action taken by this widget is to
           download a file. -->
      <xsd:attribute name="download" type="Download"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- Reference ID of the widget.  This does not have to be globally unique; it only has
           to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <!-- Label to render. -->
      <xsd:attribute name="label" type="xsd:string"/>
      <!-- Default text answer to the prompt message -->
      <xsd:attribute name="promptDefault" type="xsd:string"/>
      <!-- Question to ask the user before performing the action. The answer is exposed to the
           action as "web.WebUtil.ActionEventParameter". -->
      <xsd:attribute name="promptQuestion" type="xsd:string"/>
      <!-- Keyboard shortcut character in the form of "Q" or "ShiftQ"; the "Alt" key is implicit -->
      <xsd:attribute name="shortcut" type="xsd:string"/>
      <!-- Gosu expression which determines whether or not the confirmation message should be
           shown -->
      <xsd:attribute name="showConfirmMessage" type="xsd:string" default="true"/>
      <!-- Boolean expression which, if false, completely hides the widget and all its children -->
      <xsd:attribute name="visible" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- A Widget for displaying an image file. Optionally can display a thumbnail and show
       the full-sized image in a modal when clicked. -->
  <xsd:element name="Image">
    <xsd:complexType>
      <xsd:choice minOccurs="0" maxOccurs="unbounded"/>
      <!-- The alt attribute for the image element. If not specified, will be set to the file
           name. -->
      <xsd:attribute name="altText" type="xsd:string"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- The style for the optional badge label. -->
      <xsd:attribute name="badgeStyle" type="xsd:string"/>
      <!-- If present, then the text will appear as a label badge on top of the image. -->
      <xsd:attribute name="badgeText" type="xsd:string"/>
      <!-- If true, the Widget will have a border around it. Purely a visual effect. -->
      <xsd:attribute name="border" type="xsd:boolean" default="false"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- CSS height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="height" type="xsd:string"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- The value for the CSS property object-fit, which describes how the image should be
           scaled or cropped if its defined dimensions differ from its file dimensions. -->
      <xsd:attribute name="imageFit" type="ObjectFit" default="contain"/>
      <!-- Additional styling options for the visual appearance of the image. -->
      <xsd:attribute name="imageStyle" type="ImageStyle" default="Rounded"/>
      <!-- The Universal Resource Locator string for the image file. -->
      <xsd:attribute name="imageURL" type="xsd:string"/>
      <!-- If true, independent of 'panel inner spacing', the container will left indent its
           children by a fixed amount. This is useful for displaying nested data throughout a
           page. Purely a visual effect. -->
      <xsd:attribute name="leftIndent" type="xsd:boolean" default="false"/>
      <!-- CSS max-height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="maxHeight" type="xsd:string"/>
      <!-- CSS max-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="maxWidth" type="xsd:string"/>
      <!-- CSS min-height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="minHeight" type="xsd:string"/>
      <!-- CSS min-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="minWidth" type="xsd:string"/>
      <!-- In general, determines the amount of spacing INSIDE of the Panel in all 4 directions:
           top, right, bottom, left. However, different Panels may have requirements that prevent
           all 4 directions from being modified. -->
      <xsd:attribute name="panelInnerSpacing" type="WidgetSpacing" default="none"/>
      <!-- In general, determines the amount of spacing OUTSIDE of the Panel in all 4 directions:
           top, right, bottom, left. However, different Panels may have requirements that prevent
           all 4 directions from being modified. -->
      <xsd:attribute name="panelOuterSpacing" type="WidgetSpacing" default="normal"/>
      <!-- The style of the Panel. In general, this refers to the background color, but some
           styles can change other aspects such as font color, spacing, or filters. -->
      <xsd:attribute name="panelStyle" type="xsd:string"/>
      <!-- If present, then the Image Widget will display the thumb URL as its primary image.
           And will display the image from the URL property in a modal pop-up when clicked. -->
      <xsd:attribute name="thumbURL" type="xsd:string"/>
      <!-- Boolean expression which, if false, completely hides the widget. -->
      <xsd:attribute name="visible" type="xsd:string"/>
      <!-- CSS width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="width" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- A Widget for displaying an optionally clickable image file. -->
  <xsd:element name="ImageAction">
    <xsd:complexType>
      <xsd:choice minOccurs="0" maxOccurs="unbounded"/>
      <!-- Action performed by this widget.  By default, this is a Gosu expression.  Other types
           of actions can be specified by using the following prefixes: http: causes the browser
           to follow the specified plain http link https: causes the browser to follow the specified
           plain https link javascript: causes the browser to execute the specified javascript
           logout: logs out of the application -->
      <xsd:attribute name="action" type="xsd:string"/>
      <!-- The alt attribute for the image element. If not specified, will be set to the file
           name. -->
      <xsd:attribute name="altText" type="xsd:string"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- Boolean expression which, if false, grays out the widget and all its children and
           makes them unclickable -->
      <xsd:attribute name="available" type="xsd:string"/>
      <!-- The style for the optional badge label. -->
      <xsd:attribute name="badgeStyle" type="xsd:string"/>
      <!-- If present, then the text will appear as a label badge on top of the image. -->
      <xsd:attribute name="badgeText" type="xsd:string"/>
      <!-- If true, the Widget will have a border around it. Purely a visual effect. -->
      <xsd:attribute name="border" type="xsd:boolean" default="false"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- Confirmation message to show before performing the action -->
      <xsd:attribute name="confirmMessage" type="xsd:string"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- CSS height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="height" type="xsd:string"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- (Optional) reference ID of the widget.  This does not have to be globally unique;
           it only has to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string"/>
      <!-- The value for the CSS property object-fit, which describes how the image should be
           scaled or cropped if its defined dimensions differ from its file dimensions. -->
      <xsd:attribute name="imageFit" type="ObjectFit" default="contain"/>
      <!-- Additional styling options for the visual appearance of the image. -->
      <xsd:attribute name="imageStyle" type="ImageStyle" default="Rounded"/>
      <!-- The Universal Resource Locator string for the image file. -->
      <xsd:attribute name="imageURL" type="xsd:string"/>
      <!-- If true, independent of 'panel inner spacing', the container will left indent its
           children by a fixed amount. This is useful for displaying nested data throughout a
           page. Purely a visual effect. -->
      <xsd:attribute name="leftIndent" type="xsd:boolean" default="false"/>
      <!-- CSS max-height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="maxHeight" type="xsd:string"/>
      <!-- CSS max-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="maxWidth" type="xsd:string"/>
      <!-- CSS min-height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="minHeight" type="xsd:string"/>
      <!-- CSS min-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="minWidth" type="xsd:string"/>
      <!-- In general, determines the amount of spacing INSIDE of the Panel in all 4 directions:
           top, right, bottom, left. However, different Panels may have requirements that prevent
           all 4 directions from being modified. -->
      <xsd:attribute name="panelInnerSpacing" type="WidgetSpacing" default="none"/>
      <!-- In general, determines the amount of spacing OUTSIDE of the Panel in all 4 directions:
           top, right, bottom, left. However, different Panels may have requirements that prevent
           all 4 directions from being modified. -->
      <xsd:attribute name="panelOuterSpacing" type="WidgetSpacing" default="normal"/>
      <!-- The style of the Panel. In general, this refers to the background color, but some
           styles can change other aspects such as font color, spacing, or filters. -->
      <xsd:attribute name="panelStyle" type="xsd:string"/>
      <!-- Default text answer to the prompt message -->
      <xsd:attribute name="promptDefault" type="xsd:string"/>
      <!-- Question to ask the user before performing the action. The answer is exposed to the
           action as "web.WebUtil.ActionEventParameter". -->
      <xsd:attribute name="promptQuestion" type="xsd:string"/>
      <!-- Keyboard shortcut character in the form of "Q" or "ShiftQ"; the "Alt" key is implicit -->
      <xsd:attribute name="shortcut" type="xsd:string"/>
      <!-- Gosu expression which determines whether or not the confirmation message should be
           shown -->
      <xsd:attribute name="showConfirmMessage" type="xsd:string" default="true"/>
      <!-- Boolean expression which, if false, completely hides the widget and all its children -->
      <xsd:attribute name="visible" type="xsd:string"/>
      <!-- CSS width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="width" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- A Cell for displaying an Image Action Widget. -->
  <xsd:element name="ImageActionCell">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="Reflect" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element ref="ColumnFooter" minOccurs="0" maxOccurs="1"/>
      </xsd:sequence>
      <!-- Action performed by this widget.  By default, this is a Gosu expression.  Other types
           of actions can be specified by using the following prefixes: http: causes the browser
           to follow the specified plain http link https: causes the browser to follow the specified
           plain https link javascript: causes the browser to execute the specified javascript
           logout: logs out of the application -->
      <xsd:attribute name="action" type="xsd:string"/>
      <!-- Specifies the alignment of this cell. Valid values: "left", "right", or "center".
           If no value is specified, the default alignment is determined by the value type ("center"
           for boolean values; "right" for numeric values; "left" for other value types). -->
      <xsd:attribute name="align" type="WidgetAlignment"/>
      <!-- The alt attribute for the image element. If not specified, will be set to the file
           name. -->
      <xsd:attribute name="altText" type="xsd:string"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- Boolean expression which, if false, grays out the widget and all its children -->
      <xsd:attribute name="available" type="xsd:string"/>
      <!-- The style for the optional badge label. -->
      <xsd:attribute name="badgeStyle" type="xsd:string"/>
      <!-- If present, then the text will appear as a label badge on top of the image. -->
      <xsd:attribute name="badgeText" type="xsd:string"/>
      <!-- If true, renders the cell contents in bold text. Defaults to false. -->
      <xsd:attribute name="bold" type="xsd:boolean" default="false"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- The HTML colspan attribute, lets this cell span across multiple columns of other rows.
           Useful for generating a "group header" row above a RowIterator. The default value
           is 1. A value greater than 1 is only allowed when the containing row is not iterated
           by a RowIterator. -->
      <xsd:attribute name="colspan" type="xsd:integer"/>
      <!-- Confirmation message to show before performing the action -->
      <xsd:attribute name="confirmMessage" type="xsd:string"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- An optional expression. If specified, a footer cell with the specified value will
           be rendered for this column. Only applicable when the containing Row is iterated by
           a RowIterator. Not allowed when "footerSumValue" is specified. -->
      <xsd:attribute name="footerLabel" type="xsd:string"/>
      <!-- An optional expression, if specified, will be used as format pattern for the footer
           sum value. Normally not specified, so that the "format" and\or "formatType" of the
           cell value will be applied to footer sum value. Only applicable when "footerSumValue"
           is specified. The result of this expression must conform to the number format defined
           in java.text.DecimalFormat. -->
      <xsd:attribute name="footerSumFormat" type="xsd:string"/>
      <!-- An optional Numeric expression. If specified, a footer cell that sums the specified
           value for all cells in this column will be rendered. Pagination of the list does not
           affect the sum value. Only applicable when the containing row is iterated by a RowIterator.
           Not allowed when "footerLabel" is specified. -->
      <xsd:attribute name="footerSumValue" type="xsd:string"/>
      <!-- If true, this Cell and any other grow-enabled Cell will expand to fill remaining space
           in the ListViewPanel. Only applicable when the ListView is set to stretch. -->
      <xsd:attribute name="grow" type="xsd:boolean" default="false"/>
      <!-- CSS height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="height" type="xsd:string"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- Refers to an image file. If defined, makes this an icon cell. The "value" attribute
           should be a boolean expression describing whether the icon is visible in a given row. -->
      <xsd:attribute name="icon" type="xsd:string"/>
      <!-- Color of the icon. If not set will default to its font color. -->
      <xsd:attribute name="iconColor" type="xsd:string"/>
      <!-- An enumeration of icon types that determine what the 'icon' property on the widget
           is referring to. -->
      <xsd:attribute name="iconType" type="IconTypeEnum"/>
      <!-- Reference ID of the widget.  This does not have to be globally unique; it only has
           to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <!-- The value for the CSS property object-fit, which describes how the image should be
           scaled or cropped if its defined dimensions differ from its file dimensions. -->
      <xsd:attribute name="imageFit" type="ObjectFit" default="contain"/>
      <!-- Additional styling options for the visual appearance of the image. -->
      <xsd:attribute name="imageStyle" type="ImageStyle" default="Rounded"/>
      <!-- The Universal Resource Locator string for the image file. -->
      <xsd:attribute name="imageURL" type="xsd:string"/>
      <!-- An optional expression. If specified, a header cell with the specified value will
           be rendered for this column. Only applicable when the containing row is iterated by
           a RowIterator. -->
      <xsd:attribute name="label" type="xsd:string"/>
      <!-- CSS max-height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="maxHeight" type="xsd:string"/>
      <!-- CSS max-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="maxWidth" type="xsd:string"/>
      <!-- CSS min-height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="minHeight" type="xsd:string"/>
      <!-- CSS min-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="minWidth" type="xsd:string"/>
      <!-- Relative width when printing to PDF. All widths are relative to the widths of the
           other columns in the ListView -->
      <xsd:attribute name="printWidth" type="xsd:string" default="1"/>
      <!-- Default text answer to the prompt message -->
      <xsd:attribute name="promptDefault" type="xsd:string"/>
      <!-- Question to ask the user before performing the action. The answer is exposed to the
           action as "web.WebUtil.ActionEventParameter". -->
      <xsd:attribute name="promptQuestion" type="xsd:string"/>
      <!-- Keyboard shortcut character in the form of "Q" or "ShiftQ"; the "Alt" key is implicit -->
      <xsd:attribute name="shortcut" type="xsd:string"/>
      <!-- Gosu expression which determines whether or not the confirmation message should be
           shown -->
      <xsd:attribute name="showConfirmMessage" type="xsd:string" default="true"/>
      <!-- If true, shows the icon defined by "icon" in the header cell for this column. The
           default value is true. -->
      <xsd:attribute name="showHeaderIcon" type="xsd:boolean" default="true"/>
      <!-- Extra "alt" text to show when the user hovers the mouse over the header cell of this
           column. -->
      <xsd:attribute name="tooltip" type="xsd:string"/>
      <!-- Specifies the vertical alignment of this cell. Valid values: "top", "middle", or "bottom".
           If no value is specified, the default alignment is determined by the cell type ("top"
           for Text Areas and Format Cells, "middle" for buttons and icons). -->
      <xsd:attribute name="verticalAlign" type="WidgetVerticalAlignment"/>
      <!-- Boolean expression which, if false, completely hides the widget and all its children -->
      <xsd:attribute name="visible" type="xsd:string"/>
      <!-- CSS width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="width" type="xsd:string"/>
      <!-- If default, defers to FormatType to decide whether to wrap or not.  If true, allows
           cell content to wrap. -->
      <xsd:attribute name="wrap" type="WrapType" default="default"/>
      <!-- If true, allows Header Cell text content to wrap. Defaults to true. -->
      <xsd:attribute name="wrapLabel" type="xsd:boolean" default="false"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- A Cell for displaying an Image Widget. -->
  <xsd:element name="ImageCell">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="Reflect" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element ref="ColumnFooter" minOccurs="0" maxOccurs="1"/>
      </xsd:sequence>
      <!-- Specifies the alignment of this cell. Valid values: "left", "right", or "center".
           If no value is specified, the default alignment is determined by the value type ("center"
           for boolean values; "right" for numeric values; "left" for other value types). -->
      <xsd:attribute name="align" type="WidgetAlignment"/>
      <!-- The alt attribute for the image element. If not specified, will be set to the file
           name. -->
      <xsd:attribute name="altText" type="xsd:string"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- Boolean expression which, if false, grays out the widget and all its children -->
      <xsd:attribute name="available" type="xsd:string"/>
      <!-- The style for the optional badge label. -->
      <xsd:attribute name="badgeStyle" type="xsd:string"/>
      <!-- If present, then the text will appear as a label badge on top of the image. -->
      <xsd:attribute name="badgeText" type="xsd:string"/>
      <!-- If true, renders the cell contents in bold text. Defaults to false. -->
      <xsd:attribute name="bold" type="xsd:boolean" default="false"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- The HTML colspan attribute, lets this cell span across multiple columns of other rows.
           Useful for generating a "group header" row above a RowIterator. The default value
           is 1. A value greater than 1 is only allowed when the containing row is not iterated
           by a RowIterator. -->
      <xsd:attribute name="colspan" type="xsd:integer"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- An optional expression. If specified, a footer cell with the specified value will
           be rendered for this column. Only applicable when the containing Row is iterated by
           a RowIterator. Not allowed when "footerSumValue" is specified. -->
      <xsd:attribute name="footerLabel" type="xsd:string"/>
      <!-- An optional expression, if specified, will be used as format pattern for the footer
           sum value. Normally not specified, so that the "format" and\or "formatType" of the
           cell value will be applied to footer sum value. Only applicable when "footerSumValue"
           is specified. The result of this expression must conform to the number format defined
           in java.text.DecimalFormat. -->
      <xsd:attribute name="footerSumFormat" type="xsd:string"/>
      <!-- An optional Numeric expression. If specified, a footer cell that sums the specified
           value for all cells in this column will be rendered. Pagination of the list does not
           affect the sum value. Only applicable when the containing row is iterated by a RowIterator.
           Not allowed when "footerLabel" is specified. -->
      <xsd:attribute name="footerSumValue" type="xsd:string"/>
      <!-- If true, this Cell and any other grow-enabled Cell will expand to fill remaining space
           in the ListViewPanel. Only applicable when the ListView is set to stretch. -->
      <xsd:attribute name="grow" type="xsd:boolean" default="false"/>
      <!-- CSS height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="height" type="xsd:string"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- Refers to an image file. If defined, makes this an icon cell. The "value" attribute
           should be a boolean expression describing whether the icon is visible in a given row. -->
      <xsd:attribute name="icon" type="xsd:string"/>
      <!-- Color of the icon. If not set will default to its font color. -->
      <xsd:attribute name="iconColor" type="xsd:string"/>
      <!-- An enumeration of icon types that determine what the 'icon' property on the widget
           is referring to. -->
      <xsd:attribute name="iconType" type="IconTypeEnum"/>
      <!-- Reference ID of the widget.  This does not have to be globally unique; it only has
           to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <!-- The value for the CSS property object-fit, which describes how the image should be
           scaled or cropped if its defined dimensions differ from its file dimensions. -->
      <xsd:attribute name="imageFit" type="ObjectFit" default="contain"/>
      <!-- Additional styling options for the visual appearance of the image. -->
      <xsd:attribute name="imageStyle" type="ImageStyle" default="Rounded"/>
      <!-- The Universal Resource Locator string for the image file. -->
      <xsd:attribute name="imageURL" type="xsd:string"/>
      <!-- An optional expression. If specified, a header cell with the specified value will
           be rendered for this column. Only applicable when the containing row is iterated by
           a RowIterator. -->
      <xsd:attribute name="label" type="xsd:string"/>
      <!-- CSS max-height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="maxHeight" type="xsd:string"/>
      <!-- CSS max-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="maxWidth" type="xsd:string"/>
      <!-- CSS min-height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="minHeight" type="xsd:string"/>
      <!-- CSS min-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="minWidth" type="xsd:string"/>
      <!-- Relative width when printing to PDF. All widths are relative to the widths of the
           other columns in the ListView -->
      <xsd:attribute name="printWidth" type="xsd:string" default="1"/>
      <!-- If true, shows the icon defined by "icon" in the header cell for this column. The
           default value is true. -->
      <xsd:attribute name="showHeaderIcon" type="xsd:boolean" default="true"/>
      <!-- If present, then the Image Widget will display the thumb URL as its primary image.
           And will display the image from the URL property in a modal pop-up when clicked. -->
      <xsd:attribute name="thumbURL" type="xsd:string"/>
      <!-- Extra "alt" text to show when the user hovers the mouse over the header cell of this
           column. -->
      <xsd:attribute name="tooltip" type="xsd:string"/>
      <!-- Specifies the vertical alignment of this cell. Valid values: "top", "middle", or "bottom".
           If no value is specified, the default alignment is determined by the cell type ("top"
           for Text Areas and Format Cells, "middle" for buttons and icons). -->
      <xsd:attribute name="verticalAlign" type="WidgetVerticalAlignment"/>
      <!-- Boolean expression which, if false, completely hides the widget and all its children -->
      <xsd:attribute name="visible" type="xsd:string"/>
      <!-- CSS width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="width" type="xsd:string"/>
      <!-- If default, defers to FormatType to decide whether to wrap or not.  If true, allows
           cell content to wrap. -->
      <xsd:attribute name="wrap" type="WrapType" default="default"/>
      <!-- If true, allows Header Cell text content to wrap. Defaults to true. -->
      <xsd:attribute name="wrapLabel" type="xsd:boolean" default="false"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- A Widget for displaying an image file from a SimpleMediaObject. Optionally can display
       a thumbnail and show the full-sized image in a modal when clicked. -->
  <xsd:element name="ImageMediaObject">
    <xsd:complexType>
      <xsd:choice minOccurs="0" maxOccurs="unbounded"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- If true, the Widget will have a border around it. Purely a visual effect. -->
      <xsd:attribute name="border" type="xsd:boolean" default="false"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- CSS height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="height" type="xsd:string"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- (Optional) reference ID of the widget.  This does not have to be globally unique;
           it only has to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string"/>
      <!-- If true, independent of 'panel inner spacing', the container will left indent its
           children by a fixed amount. This is useful for displaying nested data throughout a
           page. Purely a visual effect. -->
      <xsd:attribute name="leftIndent" type="xsd:boolean" default="false"/>
      <!-- CSS max-height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="maxHeight" type="xsd:string"/>
      <!-- CSS max-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="maxWidth" type="xsd:string"/>
      <!-- A gosu expression that returns a SimpleMediaObject. -->
      <xsd:attribute name="mediaImageObject" type="xsd:string"/>
      <!-- CSS min-height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="minHeight" type="xsd:string"/>
      <!-- CSS min-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="minWidth" type="xsd:string"/>
      <!-- In general, determines the amount of spacing INSIDE of the Panel in all 4 directions:
           top, right, bottom, left. However, different Panels may have requirements that prevent
           all 4 directions from being modified. -->
      <xsd:attribute name="panelInnerSpacing" type="WidgetSpacing" default="none"/>
      <!-- In general, determines the amount of spacing OUTSIDE of the Panel in all 4 directions:
           top, right, bottom, left. However, different Panels may have requirements that prevent
           all 4 directions from being modified. -->
      <xsd:attribute name="panelOuterSpacing" type="WidgetSpacing" default="normal"/>
      <!-- The style of the Panel. In general, this refers to the background color, but some
           styles can change other aspects such as font color, spacing, or filters. -->
      <xsd:attribute name="panelStyle" type="xsd:string"/>
      <!-- CSS width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="width" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- A ListView cell specialized for ClassCode fields -->
  <xsd:element name="IndustryCodeCell">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="Reflect" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element ref="ColumnFooter" minOccurs="0" maxOccurs="1"/>
        <xsd:element ref="PostOnChange" minOccurs="0" maxOccurs="1"/>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="AddMenuItem"/>
          <xsd:element ref="AddMenuItemIterator"/>
          <xsd:element ref="MenuItem"/>
          <xsd:element ref="MenuItemDivider"/>
          <xsd:element ref="MenuItemIterator"/>
          <xsd:element ref="MenuItemSetRef"/>
          <xsd:element ref="MenuItemTree"/>
          <xsd:element ref="PickerMenuItem"/>
          <xsd:element ref="SearchItem"/>
        </xsd:choice>
      </xsd:sequence>
      <!-- An optional action to take when the user clicks the value of this widget when the
           value is not being edited. See ActionBase for details. When specified, the value of
           this widget will be rendered as a link when the value is not being edited. -->
      <xsd:attribute name="action" type="xsd:string"/>
      <!-- An optional boolean expression controlling whether the action should be available
           in this specific context when in read-only mode.  This is ignored if in edit mode
           or if the action is null.  This attribute will be deprecated in a future release,
           please use the 'available' attribute instead.  To disable action in readonly mode,
           you can set available=&quot;CurrentLocation.InEditMode || &lt;action-available-condition&gt;&quot; -->
      <xsd:attribute name="actionAvailable" type="xsd:string"/>
      <!-- Specifies the alignment of this cell. Valid values: "left", "right", or "center".
           If no value is specified, the default alignment is determined by the value type ("center"
           for boolean values; "right" for numeric values; "left" for other value types). -->
      <xsd:attribute name="align" type="WidgetAlignment"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- Boolean expression which, if false, grays out the widget and all its children -->
      <xsd:attribute name="available" type="xsd:string"/>
      <!-- If true, renders the cell contents in bold text. Defaults to false. -->
      <xsd:attribute name="bold" type="xsd:boolean" default="false"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- Whether the user should be allowed to clear the selected value. If "true", an icon
           will be available which, when clicked, will clear the widget. This attribute will
           always be overridden and set to "true" if freeInputEnabled is set to false. -->
      <xsd:attribute name="clearEnabled" type="xsd:boolean" default="false"/>
      <!-- The HTML colspan attribute, lets this cell span across multiple columns of other rows.
           Useful for generating a "group header" row above a RowIterator. The default value
           is 1. A value greater than 1 is only allowed when the containing row is not iterated
           by a RowIterator. -->
      <xsd:attribute name="colspan" type="xsd:integer"/>
      <!-- The confirmation message to show when "showConfirmMessage" is set. If not specified,
           a standard message will be used. -->
      <xsd:attribute name="confirmMessage" type="xsd:string"/>
      <!-- A Gosu expression used to convert the value picked from the picker popup before it
           is written to the model value of this widget. The picked value is available as the
           special symbol "PickedValue" -->
      <xsd:attribute name="conversionExpression" type="xsd:string"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <xsd:attribute name="domain" type="xsd:string" use="required"/>
      <!-- Boolean expression which, if false, makes this widget and all its children read-only -->
      <xsd:attribute name="editable" type="xsd:string" default="false"/>
      <!-- If true, allows the user to sort the values in the column by clicking on the header.
            Only applicable when the containing row is iterated by a RowIterator. -->
      <xsd:attribute name="enableSort" type="xsd:boolean" default="true"/>
      <!-- If true, this cell will the last cell in the row to be navigated to via the ENTER
           key. Only applicable when "CellNavOnEnter" or "QuickAddOnEnter" is set. Normally not
           specified. Default to false. -->
      <xsd:attribute name="endOfCellNav" type="xsd:boolean" default="false"/>
      <!-- If true, instead of showing a hierarchical menu, the widget will show a single menu
           with sub-menus grouped under headers. -->
      <xsd:attribute name="flatten" type="xsd:boolean" default="false"/>
      <!-- An optional boolean expression, if returns true, this widget will get focus when start
           editing the containing location. -->
      <xsd:attribute name="focusOnStartEditing" type="xsd:string"/>
      <!-- An expression that returns a GWColor instance. Legacy: this method can instead return
           a string corresponding to a CSS Specification Level 3 color name. See GWColor for
           more details. -->
      <xsd:attribute name="fontColor" type="xsd:string"/>
      <!-- An optional expression. If specified, a footer cell with the specified value will
           be rendered for this column. Only applicable when the containing Row is iterated by
           a RowIterator. Not allowed when "footerSumValue" is specified. -->
      <xsd:attribute name="footerLabel" type="xsd:string"/>
      <!-- An optional expression, if specified, will be used as format pattern for the footer
           sum value. Normally not specified, so that the "format" and\or "formatType" of the
           cell value will be applied to footer sum value. Only applicable when "footerSumValue"
           is specified. The result of this expression must conform to the number format defined
           in java.text.DecimalFormat. -->
      <xsd:attribute name="footerSumFormat" type="xsd:string"/>
      <!-- An optional Numeric expression. If specified, a footer cell that sums the specified
           value for all cells in this column will be rendered. Pagination of the list does not
           affect the sum value. Only applicable when the containing row is iterated by a RowIterator.
           Not allowed when "footerLabel" is specified. -->
      <xsd:attribute name="footerSumValue" type="xsd:string"/>
      <!-- How the value is formatted; options include "general", "currency", and "email".  See
           the formatType enumeration. -->
      <xsd:attribute name="formatType" type="FormatType"/>
      <!-- If true, the user may enter a free-text value. If this property is set to false, the
           clearEnabled attribute will be treated as true to allow for users to delete their
           picked selection. -->
      <xsd:attribute name="freeInputEnabled" type="xsd:boolean" default="true"/>
      <!-- If true, the ListView will be grouped by this cell upon entering the page. Only one
           grouped cell is allowed at any given time and it is only applicable when the column
           is sortable. -->
      <xsd:attribute name="groupedOnEnter" type="xsd:string"/>
      <!-- If true, this Cell and any other grow-enabled Cell will expand to fill remaining space
           in the ListViewPanel. Only applicable when the ListView is set to stretch. -->
      <xsd:attribute name="grow" type="xsd:boolean" default="false"/>
      <!-- If true, generates a checkbox at the beginning of this cell. This checkbox can be
           used to check this entry in the nearest containing Iterator. Defaults to false. Only
           allowed if this cell is inside a CellIterator or under a Row inside a RowIterator. -->
      <xsd:attribute name="hasCheckBox" type="xsd:boolean" default="false"/>
      <!-- CSS height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="height" type="xsd:string"/>
      <!-- A Gosu expression which, if defined, is evaluated to create help info that guides
           the user to edit this widget. The help info will show up if the user hovers the mouse
           over or focuses on the widget, when the widget is in edit mode. -->
      <xsd:attribute name="helpText" type="xsd:string"/>
      <!-- If false, menu items under this input will be shown even when the input is not editable. -->
      <xsd:attribute name="hideChildrenIfReadOnly" type="xsd:boolean" default="true"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- Refers to an image file. If defined, makes this an icon cell. The "value" attribute
           should be a boolean expression describing whether the icon is visible in a given row. -->
      <xsd:attribute name="icon" type="xsd:string"/>
      <!-- Color of the icon. If not set will default to its font color. -->
      <xsd:attribute name="iconColor" type="xsd:string"/>
      <!-- The ALT text for any icon generated in the content cells -->
      <xsd:attribute name="iconLabel" type="xsd:string"/>
      <!-- An enumeration of icon types that determine what the 'icon' property on the widget
           is referring to. -->
      <xsd:attribute name="iconType" type="IconTypeEnum"/>
      <!-- Reference ID of the widget.  This does not have to be globally unique; it only has
           to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <!-- A Gosu expression that converts the presentation value to a model value. The presentation
           value string is exposed to this expression as the symbol "VALUE". -->
      <xsd:attribute name="inputConversion" type="xsd:string"/>
      <!-- An optional expression. If specified, a header cell with the specified value will
           be rendered for this column. Only applicable when the containing row is iterated by
           a RowIterator. -->
      <xsd:attribute name="label" type="xsd:string"/>
      <!-- Custom extension CSS style class to apply to the header. -->
      <xsd:attribute name="labelStyleClass" type="xsd:string"/>
      <!-- CSS max-height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="maxHeight" type="xsd:string"/>
      <!-- CSS max-width value. Can be `px`, or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="maxWidth" type="xsd:string"/>
      <!-- CSS min-height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="minHeight" type="xsd:string"/>
      <!-- CSS min-width value. Can be `px`, or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="minWidth" type="xsd:string"/>
      <!-- The number of child MenuItems to show in each column.  If not specified, all children
           will be shown in a single column. -->
      <xsd:attribute name="numEntriesPerColumn" type="xsd:integer" default="0"/>
      <!-- Gosu expression to be executed after the value is set from a picker. -->
      <xsd:attribute name="onPick" type="xsd:string"/>
      <!-- A Gosu expression that converts the model value to a presentation value. The model
           value is exposed to this expression as the symbol "VALUE". The return type of this
           expression must be String. -->
      <xsd:attribute name="outputConversion" type="xsd:string"/>
      <!-- The picker popup used to pick a value, as a Gosu statement of the form "[popup name].push(...)". -->
      <xsd:attribute name="pickLocation" type="xsd:string" use="required"/>
      <!-- The previous selected industry code, it will be allowed to use within the same term
           even if it's expired. -->
      <xsd:attribute name="previousCode" type="xsd:string" default="null"/>
      <!-- Relative width when printing to PDF. All widths are relative to the widths of the
           other columns in the ListView -->
      <xsd:attribute name="printWidth" type="xsd:string" default="1"/>
      <!-- The reference date used to check for expiration. -->
      <xsd:attribute name="referenceDate" type="xsd:string" default="null"/>
      <!-- A Gosu expression used to validate user value before setting it to the model. This
           expression can access any symbols available to this widget, and a "VALUE" symbol that
           represents the user value. If this expression returns null, the user value will be
           set into the model. Otherwise, an error message containing the result of the expression
           will be displayed on the page, the value will not be set into the model, and no actions
           can be performed until the error is corrected. -->
      <xsd:attribute name="requestValidationExpression" type="xsd:string"/>
      <!-- If true, then the cell must be filled out by the user -->
      <xsd:attribute name="required" type="xsd:string"/>
      <!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * Deprecated.
           DO NOT USE.                                           * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
           Consider using "onChange/onPick/inputConversion/outputConversion" where available.
           If specified and the Input is editable, then any new value of the Input is written
           to this expression (Gosu by default) instead of to "value".  The new value is exposed
           as the symbol "VALUE".  For instance if your value expression is "Foo.getSomething()"
           then it can't be written to since it's not an L-value; so you could specify a setter
           expression along the lines of "Foo.setSomething(VALUE)" Warning: if you use this attribute
           many pebbles features will not work, including but not limited to: * Correct automatic
           detection of the state of the updated data * Correct automatic detection of the editability
           of the data * Correct automatic detection of the maximum size of a text input -->
      <xsd:attribute name="setter" type="xsd:string"/>
      <!-- Boolean expression which determines whether or not to show a confirmation message
           when the field value is changed directly from the UI. It's NOT applicable when the
           value is changed indirectly, for example, as a result of client reflection. -->
      <xsd:attribute name="showConfirmMessage" type="xsd:string"/>
      <!-- If true, shows the icon defined by "icon" in the header cell for this column. The
           default value is true. -->
      <xsd:attribute name="showHeaderIcon" type="xsd:boolean" default="true"/>
      <!-- An optional comma-separated sequence of Expressions, each of which is assumed to be
           a dot-delimited path, the value by which this column will be sorted if the user clicks
           on the header cell. -->
      <xsd:attribute name="sortBy" type="xsd:string"/>
      <!-- Either "ascending" or "descending" -->
      <xsd:attribute name="sortDirection" type="WidgetSortDirection" default="ascending"/>
      <!-- The priority of sorting relative to other sorting elements like IteratorSort and Cell.
           The lower the number, the higher the priority.  The highest priority is "1" -->
      <xsd:attribute name="sortOrder" type="xsd:integer" default="0"/>
      <!-- CSS style class for the cell content; for instance, "miniButton" makes a link appear
           as a small button -->
      <xsd:attribute name="styleClass" type="LinkStyleClass"/>
      <!-- An optional attribute, if set, defer sub menu generation until user tries to open
           the menu. DO NOT set this flag unless the sub menu of this widget is very expensive
           to generate. Setting this flag will reduce time to load the page, however require
           fetching additional info from server in the background, when the menu gets opened
           for the first time after page loaded. -->
      <xsd:attribute name="subMenuOnDemand" type="xsd:boolean" default="false"/>
      <!-- Extra "alt" text to show when the user hovers the mouse over the header cell of this
           column. -->
      <xsd:attribute name="tooltip" type="xsd:string"/>
      <!-- If true, validate before commit that the value of this column is unique across all
           rows in the current page. Only meaningful when this column is editable. -->
      <xsd:attribute name="unique" type="xsd:boolean" default="false"/>
      <!-- A Gosu expression to run before committing the record. This expression can refer to
           any symbols available to this widget. If this expression returns null, the validation
           is considered successful; otherwise, the result of this expression will be displayed
           as an error and the record will not be committed. -->
      <xsd:attribute name="validationExpression" type="xsd:string"/>
      <!-- The label of this cell to be used when it has validation issues. Not needed when this
           cell has a "label". Required if the cell is editable but does not have a "label". -->
      <xsd:attribute name="validationLabel" type="xsd:string"/>
      <!-- The value this element binds to.  If the element is editable then this value is both
           read from and written to (unless "setter" is defined). -->
      <xsd:attribute name="value" type="xsd:string"/>
      <!-- The type of the value expression. -->
      <xsd:attribute name="valueType" type="xsd:string" default="entity.IndustryCode"/>
      <!-- Boolean expression which, if false, hides the <i>contents</i> of the cell (its "ValueWidget"),
           but not the cell itself.  Needed since hiding the actual cell usually screws up the
           layout -->
      <xsd:attribute name="valueVisible" type="xsd:string"/>
      <!-- Specifies the vertical alignment of this cell. Valid values: "top", "middle", or "bottom".
           If no value is specified, the default alignment is determined by the cell type ("top"
           for Text Areas and Format Cells, "middle" for buttons and icons). -->
      <xsd:attribute name="verticalAlign" type="WidgetVerticalAlignment"/>
      <!-- Boolean expression which, if false, completely hides the widget and all its children -->
      <xsd:attribute name="visible" type="xsd:string"/>
      <!-- CSS width value. Can be `px`, or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="width" type="xsd:string"/>
      <!-- If default, defers to FormatType to decide whether to wrap or not.  If true, allows
           cell content to wrap. -->
      <xsd:attribute name="wrap" type="WrapType" default="default"/>
      <!-- If true, allows Header Cell text content to wrap. Defaults to true. -->
      <xsd:attribute name="wrapLabel" type="xsd:boolean" default="false"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- Version of Input specialized for IndustryCodeInput fields -->
  <xsd:element name="IndustryCodeInput">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="LayoutConfig" minOccurs="0" maxOccurs="1"/>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="AddMenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="AddMenuItemIterator" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemDivider" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemIterator" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemSetRef" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemTree" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PickerMenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PostOnChange" minOccurs="0" maxOccurs="1"/>
          <xsd:element ref="Reflect" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="SearchItem" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:choice>
      </xsd:sequence>
      <!-- An optional action to take when the user clicks the value of this widget when the
           value is not being edited. See ActionBase for list of available action prefixes. When
           specified, the value of this widget will be rendered as a link when the value is not
           being edited. -->
      <xsd:attribute name="action" type="xsd:string"/>
      <!-- An optional boolean expression controlling whether the action should be available
           in this specific context when in read-only mode.  This is ignored if in edit mode
           or if the action is null.  This attribute will be deprecated in a future release,
           please use the 'available' attribute instead.  To disable action in readonly mode,
           you can set available=&quot;CurrentLocation.InEditMode || &lt;action-available-condition&gt;&quot; -->
      <xsd:attribute name="actionAvailable" type="xsd:string"/>
      <!-- Alignment of the widget ("left", "right", or "center") -->
      <xsd:attribute name="align" type="WidgetAlignment"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- Boolean expression which, if false, grays out the widget and all its children -->
      <xsd:attribute name="available" type="xsd:string"/>
      <!-- If true then the label is displayed in bold text. -->
      <xsd:attribute name="boldLabel" type="xsd:boolean" default="false"/>
      <!-- If true then the value is displayed in bold text when read-only. -->
      <xsd:attribute name="boldValue" type="xsd:boolean" default="false"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- Whether the user should be allowed to clear the selected value. If "true", an icon
           will be available which, when clicked, will clear the widget. This attribute will
           always be overridden and set to "true" if freeInputEnabled is set to false. -->
      <xsd:attribute name="clearEnabled" type="xsd:boolean" default="false"/>
      <!-- The confirmation message to show when "showConfirmMessage" is set. If not specified,
           a standard message will be used. -->
      <xsd:attribute name="confirmMessage" type="xsd:string"/>
      <!-- A Gosu expression used to convert the value picked from the picker popup before it
           is written to the model value of this widget. The picked value is available as the
           special symbol "PickedValue" -->
      <xsd:attribute name="conversionExpression" type="xsd:string"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <xsd:attribute name="domain" type="xsd:string" use="required"/>
      <!-- Boolean expression which, if false, makes this widget and all its children read-only -->
      <xsd:attribute name="editable" type="xsd:string" default="false"/>
      <!-- If true, instead of showing a hierarchical menu, the widget will show a single menu
           with sub-menus grouped under headers. -->
      <xsd:attribute name="flatten" type="xsd:boolean" default="false"/>
      <!-- An optional boolean expression, if returns true, this widget will get focus when start
           editing the containing location. -->
      <xsd:attribute name="focusOnStartEditing" type="xsd:string"/>
      <!-- How the value is formatted; options include "general", "currency", and "email".  See
           the formatType enumeration. -->
      <xsd:attribute name="formatType" type="FormatType"/>
      <!-- If true, the user may enter a free-text value. If this property is set to false, the
           clearEnabled attribute will be treated as true to allow for users to delete their
           picked selection. -->
      <xsd:attribute name="freeInputEnabled" type="xsd:boolean" default="true"/>
      <!-- A Gosu expression which, if defined, is evaluated to create help info that guides
           the user to edit this widget. The help info will show up if the user hovers the mouse
           over or focuses on the widget, when the widget is in edit mode. -->
      <xsd:attribute name="helpText" type="xsd:string"/>
      <!-- If false, menu items under this input will be shown even when the input is not editable. -->
      <xsd:attribute name="hideChildrenIfReadOnly" type="xsd:boolean" default="true"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- Reference ID of the widget.  This does not have to be globally unique; it only has
           to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <!-- A Gosu expression that converts the presentation value to a model value. The presentation
           value string is exposed to this expression as the symbol "VALUE". -->
      <xsd:attribute name="inputConversion" type="xsd:string"/>
      <!-- Label to render. -->
      <xsd:attribute name="label" type="xsd:string"/>
      <!-- Boolean expression which, if true, causes the label portion of the Input to be rendered
           above the value -->
      <xsd:attribute name="labelAbove" type="xsd:string" default="false"/>
      <!-- Custom extension CSS style class to apply to the label. -->
      <xsd:attribute name="labelStyleClass" type="xsd:string"/>
      <!-- The number of child MenuItems to show in each column.  If not specified, all children
           will be shown in a single column. -->
      <xsd:attribute name="numEntriesPerColumn" type="xsd:integer" default="0"/>
      <!-- Gosu expression to be executed after the value is set from a picker. -->
      <xsd:attribute name="onPick" type="xsd:string"/>
      <!-- A Gosu expression that converts the model value to a presentation value. The model
           value is exposed to this expression as the symbol "VALUE". The return type of this
           expression must be String. -->
      <xsd:attribute name="outputConversion" type="xsd:string"/>
      <!-- The picker popup used to pick a value, as a Gosu statement of the form "[popup name].push(...)". -->
      <xsd:attribute name="pickLocation" type="xsd:string" use="required"/>
      <!-- The previous selected industry code, it will be allowed to use within the same term
           even if it's expired. -->
      <xsd:attribute name="previousCode" type="xsd:string" default="null"/>
      <!-- The reference date used to check for expiration. -->
      <xsd:attribute name="referenceDate" type="xsd:string" default="null"/>
      <!-- A Gosu expression used to validate user value before setting it to the model. This
           expression can access any symbols available to this widget, and a "VALUE" symbol that
           represents the user value. If this expression returns null, the user value will be
           set into the model. Otherwise, an error message containing the result of the expression
           will be displayed on the page, the value will not be set into the model, and no actions
           can be performed until the error is corrected. -->
      <xsd:attribute name="requestValidationExpression" type="xsd:string"/>
      <!-- If true, then the cell must be filled out by the user -->
      <xsd:attribute name="required" type="xsd:string"/>
      <!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * Deprecated.
           DO NOT USE.                                           * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
           Consider using "onChange/onPick/inputConversion/outputConversion" where available.
           If specified and the Input is editable, then any new value of the Input is written
           to this expression (Gosu by default) instead of to "value".  The new value is exposed
           as the symbol "VALUE".  For instance if your value expression is "Foo.getSomething()"
           then it can't be written to since it's not an L-value; so you could specify a setter
           expression along the lines of "Foo.setSomething(VALUE)" Warning: if you use this attribute
           many pebbles features will not work, including but not limited to: * Correct automatic
           detection of the state of the updated data * Correct automatic detection of the editability
           of the data * Correct automatic detection of the maximum size of a text input -->
      <xsd:attribute name="setter" type="xsd:string"/>
      <!-- Optional keyboard shortcut character in the form of "Q" or "ShiftQ"; the "Alt" key
           is implicit. This is only applicable when this widget has an "action" specified and
           the value is not being edited. -->
      <xsd:attribute name="shortcut" type="xsd:string"/>
      <!-- Boolean expression which determines whether or not to show a confirmation message
           when the field value is changed directly from the UI. It's NOT applicable when the
           value is changed indirectly, for example, as a result of client reflection. -->
      <xsd:attribute name="showConfirmMessage" type="xsd:string"/>
      <!-- An optional attribute, if set, defer sub menu generation until user tries to open
           the menu. DO NOT set this flag unless the sub menu of this widget is very expensive
           to generate. Setting this flag will reduce time to load the page, however require
           fetching additional info from server in the background, when the menu gets opened
           for the first time after page loaded. -->
      <xsd:attribute name="subMenuOnDemand" type="xsd:boolean" default="false"/>
      <!-- A Gosu expression to run before committing the record. This expression can refer to
           any symbols available to this widget. If this expression returns null, the validation
           is considered successful; otherwise, the result of this expression will be displayed
           as an error and the record will not be committed. -->
      <xsd:attribute name="validationExpression" type="xsd:string"/>
      <!-- The value this Input binds to as an Expression.  If the Input is editable then this
           value is both read from and written to (unless "setter" is defined). -->
      <xsd:attribute name="value" type="xsd:string" use="required"/>
      <!-- CSS max-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionMaxWidth" type="xsd:string"/>
      <!-- CSS min-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionMinWidth" type="xsd:string"/>
      <!-- CSS width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionWidth" type="xsd:string"/>
      <!-- The type of the value expression. -->
      <xsd:attribute name="valueType" type="xsd:string" default="entity.IndustryCode"/>
      <!-- If used instead of "editable", specifies whether the Input is editable when data is
           being created -->
      <xsd:attribute name="visible" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- A single line just below the TabBar for displaying arbitrary page info -->
  <xsd:element name="InfoBar">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="Require" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element ref="InfoBarElement" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element ref="Code" minOccurs="0" maxOccurs="1"/>
      </xsd:sequence>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- (Optional) reference ID of the widget.  This does not have to be globally unique;
           it only has to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string"/>
      <!-- An optional String which, if specified, means that any element dynamically including
           this widget must specify the same mode.  There is also a special mode "default" you
           can use which means "Use this widget if no widget with the specified mode exists".
            You can also have this widget match more than one mode by separating mode strings
           with a | character. -->
      <xsd:attribute name="mode" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- A single element in InfoBar, where the Value is displayed in Bold. -->
  <xsd:element name="InfoBarElement">
    <xsd:complexType>
      <xsd:choice minOccurs="0" maxOccurs="unbounded"/>
      <!-- Action performed by this widget.  By default, this is a Gosu expression. -->
      <xsd:attribute name="action" type="xsd:string"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- The name of a .png file, or .svg file, or font glyph. The Widget's iconType determines
           which one. -->
      <xsd:attribute name="icon" type="xsd:string"/>
      <!-- Color of the icon. If not set will default to its font color. -->
      <xsd:attribute name="iconColor" type="xsd:string"/>
      <!-- An enumeration of icon types that determine what the 'icon' property on the widget
           is referring to. -->
      <xsd:attribute name="iconType" type="IconTypeEnum"/>
      <!-- Reference ID of the widget.  This does not have to be globally unique; it only has
           to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <!-- Label to render. -->
      <xsd:attribute name="label" type="xsd:string"/>
      <!-- String to be displayed if the value is null.  Defaults to an empty string. -->
      <xsd:attribute name="nullString" type="xsd:string"/>
      <!-- Tooltip for this widget -->
      <xsd:attribute name="tooltip" type="xsd:string"/>
      <!-- The value of the element, displayed in bold. -->
      <xsd:attribute name="value" type="xsd:string"/>
      <!-- An optional reference to one or multiple image files. If specified, the image(s) will
           be displayed in front of the value. -->
      <xsd:attribute name="valueIcons" type="xsd:string"/>
      <!-- Boolean expression which, if false, completely hides the widget and all its children -->
      <xsd:attribute name="visible" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- A column whose content is formatted as a series of label / value pairs. -->
  <xsd:element name="InputColumn">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="AddressAutoFillInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="AddressAutoFillRangeInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="AddressAutoFillTextInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="AddressBookContactInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="AltGroupInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="AltUserInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="AssigneeInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="BarInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="BooleanDropdownInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="BooleanRadioInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="BulletPointTextInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ButtonInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="CheckBoxGroupInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="CheckBoxInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="Choice" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ConfirmPasswordInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ContentInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="CovTermDirectInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="CurrencyInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="DateCriterionChoiceInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="DateInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="DateTimeInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="DocumentTemplateInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="EmbeddedInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="FileInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="GroupInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="HiddenInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="IndustryCodeInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="InputColumnSubGroup" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="InputDivider" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="InputGroup" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="InputIterator" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="InputSet" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="InputSetRef" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="Label" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ListViewInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="LoginSubmitButton" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MediaUploader" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ModifierInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MonetaryAmountInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="NoteBodyInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="OrgInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PasswordInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PickerInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PreFormattedTextInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PrivacyInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ProducerCodeInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ProgressInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="RangeInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="RangeRadioInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="RiskClassInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="TextAreaInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="TextInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="TileInputSetRef" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="TypeKeyCheckBoxGroupInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="TypeKeyInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="TypeKeyRadioInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="UserInput" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:choice>
      </xsd:sequence>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- If true, the Widget will have a border around it. Purely a visual effect. -->
      <xsd:attribute name="border" type="xsd:boolean" default="false"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- Deprecated. Use border. -->
      <xsd:attribute name="hasBorders" type="xsd:boolean" default="false"/>
      <!-- CSS height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="height" type="xsd:string"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- (Optional) reference ID of the widget.  This does not have to be globally unique;
           it only has to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string"/>
      <!-- CSS width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Override the SASS variable for InputColumn fallback-label-size to change label sizes
           globally. -->
      <xsd:attribute name="labelWidth" type="xsd:string"/>
      <!-- If true, independent of 'panel inner spacing', the container will left indent its
           children by a fixed amount. This is useful for displaying nested data throughout a
           page. Purely a visual effect. -->
      <xsd:attribute name="leftIndent" type="xsd:boolean" default="false"/>
      <!-- CSS max-height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="maxHeight" type="xsd:string"/>
      <!-- CSS max-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="maxWidth" type="xsd:string"/>
      <!-- CSS min-height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="minHeight" type="xsd:string"/>
      <!-- CSS min-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="minWidth" type="xsd:string"/>
      <!-- In general, determines the amount of spacing INSIDE of the Panel in all 4 directions:
           top, right, bottom, left. However, different Panels may have requirements that prevent
           all 4 directions from being modified. -->
      <xsd:attribute name="panelInnerSpacing" type="WidgetSpacing" default="none"/>
      <!-- In general, determines the amount of spacing OUTSIDE of the Panel in all 4 directions:
           top, right, bottom, left. However, different Panels may have requirements that prevent
           all 4 directions from being modified. -->
      <xsd:attribute name="panelOuterSpacing" type="WidgetSpacing" default="normal"/>
      <!-- The style of the Panel. In general, this refers to the background color, but some
           styles can change other aspects such as font color, spacing, or filters. -->
      <xsd:attribute name="panelStyle" type="xsd:string"/>
      <!-- Only meaningful when this widget contains a Progress widget. Specifies an entity to
           refresh when the Progress widget completes its operation, at which point this widget
           will re-render itself. -->
      <xsd:attribute name="refreshOnProgressComplete" type="xsd:string"/>
      <!-- CSS width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="width" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- Visually groups a set of Inputs together, with an optional sub-header label. The sub-header
       label can be set to visually match Label styling, or to match the standard Input labels. -->
  <xsd:element name="InputColumnSubGroup">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="AddressAutoFillInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="AddressAutoFillRangeInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="AddressAutoFillTextInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="AddressBookContactInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="AltGroupInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="AltUserInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="AssigneeInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="BarInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="BooleanDropdownInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="BooleanRadioInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="BulletPointTextInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ButtonInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="CheckBoxGroupInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="CheckBoxInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="Choice" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ConfirmPasswordInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ContentInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="CovTermDirectInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="CurrencyInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="DateCriterionChoiceInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="DateInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="DateTimeInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="DocumentTemplateInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="EmbeddedInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="FileInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="GroupInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="HiddenInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="IndustryCodeInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="InputColumnSubGroup" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="InputDivider" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="InputGroup" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="InputIterator" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="InputSet" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="InputSetRef" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="Label" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ListViewInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="LoginSubmitButton" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MediaUploader" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ModifierInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MonetaryAmountInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="NoteBodyInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="OrgInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PasswordInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PickerInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PreFormattedTextInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PrivacyInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ProducerCodeInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ProgressInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="RangeInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="RangeRadioInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="RiskClassInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="TextAreaInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="TextInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="TileInputSetRef" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="TypeKeyCheckBoxGroupInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="TypeKeyInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="TypeKeyRadioInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="UserInput" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:choice>
      </xsd:sequence>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- If true, the Widget will have a border around it. Purely a visual effect. -->
      <xsd:attribute name="border" type="xsd:boolean" default="false"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- The name of a .png file, or .svg file, or font glyph. The Widget's iconType determines
           which one. -->
      <xsd:attribute name="icon" type="xsd:string"/>
      <!-- Color of the icon. If not set will default to its font color. -->
      <xsd:attribute name="iconColor" type="xsd:string"/>
      <!-- An enumeration of icon types that determine what the 'icon' property on the widget
           is referring to. -->
      <xsd:attribute name="iconType" type="IconTypeEnum"/>
      <!-- Optional label for this sub group -->
      <xsd:attribute name="label" type="xsd:string"/>
      <!-- If true, independent of 'panel inner spacing', the container will left indent its
           children by a fixed amount. This is useful for displaying nested data throughout a
           page. Purely a visual effect. -->
      <xsd:attribute name="leftIndent" type="xsd:boolean" default="false"/>
      <!-- In general, determines the amount of spacing INSIDE of the Panel in all 4 directions:
           top, right, bottom, left. However, different Panels may have requirements that prevent
           all 4 directions from being modified. -->
      <xsd:attribute name="panelInnerSpacing" type="WidgetSpacing" default="none"/>
      <!-- In general, determines the amount of spacing OUTSIDE of the Panel in all 4 directions:
           top, right, bottom, left. However, different Panels may have requirements that prevent
           all 4 directions from being modified. -->
      <xsd:attribute name="panelOuterSpacing" type="WidgetSpacing" default="normal"/>
      <!-- The style of the Panel. In general, this refers to the background color, but some
           styles can change other aspects such as font color, spacing, or filters. -->
      <xsd:attribute name="panelStyle" type="xsd:string"/>
      <!-- If true, the Label for the sub group will have the same styling as a standard Input
           Label set to 'Label Above'. If false, the styling will use the Label Widget styling. -->
      <xsd:attribute name="useStandardInputLabelStyle" type="xsd:boolean" default="false"/>
      <!-- Boolean expression which, if false, completely hides this widget -->
      <xsd:attribute name="visible" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- A horizontal line for separating DetailView items -->
  <xsd:element name="InputDivider">
    <xsd:complexType>
      <xsd:choice minOccurs="0" maxOccurs="unbounded"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- (Optional) reference ID of the widget.  This does not have to be globally unique;
           it only has to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string"/>
      <!-- Boolean expression which, if false, completely hides the widget and all its children -->
      <xsd:attribute name="visible" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <xsd:element name="InputFooterSection">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="AddressAutoFillInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="AddressAutoFillRangeInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="AddressAutoFillTextInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="AddressBookContactInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="AltGroupInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="AltUserInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="AssigneeInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="BarInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="BooleanDropdownInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="BooleanRadioInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="BulletPointTextInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ButtonInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="CheckBoxGroupInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="CheckBoxInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="Choice" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ConfirmPasswordInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ContentInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="CovTermDirectInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="CurrencyInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="DateCriterionChoiceInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="DateInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="DateTimeInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="DocumentTemplateInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="EmbeddedInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="FileInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="GroupInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="HiddenInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="IndustryCodeInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="InputColumnSubGroup" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="InputDivider" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="InputGroup" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="InputIterator" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="InputSet" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="InputSetRef" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="Label" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ListViewInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="LoginSubmitButton" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MediaUploader" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ModifierInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MonetaryAmountInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="NoteBodyInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="OrgInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PasswordInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PickerInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PreFormattedTextInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PrivacyInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ProducerCodeInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ProgressInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="RangeInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="RangeRadioInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="RiskClassInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="TextAreaInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="TextInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="TileInputSetRef" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="TypeKeyCheckBoxGroupInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="TypeKeyInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="TypeKeyRadioInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="UserInput" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:choice>
      </xsd:sequence>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- CSS height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="height" type="xsd:string"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- (Optional) reference ID of the widget.  This does not have to be globally unique;
           it only has to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string"/>
      <!-- CSS width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Override the SASS variable for InputColumn fallback-label-size to change label sizes
           globally. -->
      <xsd:attribute name="labelWidth" type="xsd:string"/>
      <!-- CSS max-height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="maxHeight" type="xsd:string"/>
      <!-- CSS max-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="maxWidth" type="xsd:string"/>
      <!-- CSS min-height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="minHeight" type="xsd:string"/>
      <!-- CSS min-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="minWidth" type="xsd:string"/>
      <!-- Only meaningful when this widget contains a Progress widget. Specifies an entity to
           refresh when the Progress widget completes its operation, at which point this widget
           will re-render itself. -->
      <xsd:attribute name="refreshOnProgressComplete" type="xsd:string"/>
      <!-- CSS width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="width" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- Groups a set of Inputs together and provides a group label and allows the user show
       or hide content under this group. -->
  <xsd:element name="InputGroup">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="AddressAutoFillInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="AddressAutoFillRangeInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="AddressAutoFillTextInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="AddressBookContactInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="AltGroupInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="AltUserInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="AssigneeInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="BarInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="BooleanDropdownInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="BooleanRadioInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="BulletPointTextInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ButtonInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="CheckBoxGroupInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="CheckBoxInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="Choice" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ConfirmPasswordInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ContentInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="CovTermDirectInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="CurrencyInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="DateCriterionChoiceInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="DateInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="DateTimeInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="DocumentTemplateInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="EmbeddedInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="FileInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="GroupInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="HiddenInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="IndustryCodeInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="InputColumnSubGroup" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="InputDivider" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="InputGroup" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="InputIterator" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="InputSet" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="InputSetRef" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="Label" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ListViewInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="LoginSubmitButton" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MediaUploader" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ModifierInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MonetaryAmountInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="NoteBodyInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="OrgInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PasswordInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PickerInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PostOnChange" minOccurs="0" maxOccurs="1"/>
          <xsd:element ref="PreFormattedTextInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PrivacyInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ProducerCodeInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ProgressInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="RangeInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="RangeRadioInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="RiskClassInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="TextAreaInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="TextInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="TileInputSetRef" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="TypeKeyCheckBoxGroupInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="TypeKeyInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="TypeKeyRadioInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="UserInput" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:choice>
      </xsd:sequence>
      <!-- An optional Boolean expression, if returns false, the checkbox for the user to toggle
           visibility of child widgets will be disabled. Default to true. -->
      <xsd:attribute name="allowToggle" type="xsd:string"/>
      <!-- If true, then the checkbox will always be visible, regardless of being editable or
           available or disabled. -->
      <xsd:attribute name="alwaysShowCheckbox" type="xsd:boolean" default="false"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- If true, the Widget will have a border around it. Purely a visual effect. -->
      <xsd:attribute name="border" type="xsd:boolean" default="false"/>
      <!-- A Boolean expression which indicates if child widgets under this group are visible,
           and whether the checkbox is checked. The expression must be writeable, unless the
           "onToggle" attribute is specified. -->
      <xsd:attribute name="childrenVisible" type="xsd:string" use="required"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- The confirmation message to show when "showConfirmMessage" is set. If not specified,
           a standard message will be used. -->
      <xsd:attribute name="confirmMessage" type="xsd:string"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- The name of a .png file, or .svg file, or font glyph. The Widget's iconType determines
           which one. -->
      <xsd:attribute name="icon" type="xsd:string"/>
      <!-- Color of the icon. If not set will default to its font color. -->
      <xsd:attribute name="iconColor" type="xsd:string"/>
      <!-- An enumeration of icon types that determine what the 'icon' property on the widget
           is referring to. -->
      <xsd:attribute name="iconType" type="IconTypeEnum"/>
      <!-- Reference ID of the widget.  This does not have to be globally unique; it only has
           to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <!-- Label for this group -->
      <xsd:attribute name="label" type="xsd:string" use="required"/>
      <!-- If true, independent of 'panel inner spacing', the container will left indent its
           children by a fixed amount. This is useful for displaying nested data throughout a
           page. Purely a visual effect. -->
      <xsd:attribute name="leftIndent" type="xsd:boolean" default="false"/>
      <!-- If specified, this expression will be executed (instead of setting "childrenVisible")
           when the user toggles the checkbox. The current state of the checkbox is exposed as
           "VALUE". Executing this expression MUST result in the value of "childrenVisible" to
           match the "VALUE" passed in. This attribute is normally NOT specified. -->
      <xsd:attribute name="onToggle" type="xsd:string"/>
      <!-- In general, determines the amount of spacing INSIDE of the Panel in all 4 directions:
           top, right, bottom, left. However, different Panels may have requirements that prevent
           all 4 directions from being modified. -->
      <xsd:attribute name="panelInnerSpacing" type="WidgetSpacing" default="none"/>
      <!-- In general, determines the amount of spacing OUTSIDE of the Panel in all 4 directions:
           top, right, bottom, left. However, different Panels may have requirements that prevent
           all 4 directions from being modified. -->
      <xsd:attribute name="panelOuterSpacing" type="WidgetSpacing" default="normal"/>
      <!-- The style of the Panel. In general, this refers to the background color, but some
           styles can change other aspects such as font color, spacing, or filters. -->
      <xsd:attribute name="panelStyle" type="xsd:string"/>
      <!-- Boolean expression which determines whether or not to show a confirmation message
           when the user checks or unchecks this group. -->
      <xsd:attribute name="showConfirmMessage" type="xsd:string"/>
      <!-- Boolean expression which, if false, completely hides the widget and all its children -->
      <xsd:attribute name="visible" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <xsd:element name="InputHeaderSection">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="AddressAutoFillInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="AddressAutoFillRangeInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="AddressAutoFillTextInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="AddressBookContactInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="AltGroupInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="AltUserInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="AssigneeInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="BarInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="BooleanDropdownInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="BooleanRadioInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="BulletPointTextInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ButtonInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="CheckBoxGroupInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="CheckBoxInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="Choice" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ConfirmPasswordInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ContentInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="CovTermDirectInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="CurrencyInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="DateCriterionChoiceInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="DateInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="DateTimeInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="DocumentTemplateInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="EmbeddedInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="FileInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="GroupInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="HiddenInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="IndustryCodeInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="InputColumnSubGroup" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="InputDivider" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="InputGroup" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="InputIterator" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="InputSet" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="InputSetRef" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="Label" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ListViewInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="LoginSubmitButton" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MediaUploader" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ModifierInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MonetaryAmountInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="NoteBodyInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="OrgInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PasswordInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PickerInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PreFormattedTextInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PrivacyInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ProducerCodeInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ProgressInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="RangeInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="RangeRadioInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="RiskClassInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="TextAreaInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="TextInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="TileInputSetRef" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="TypeKeyCheckBoxGroupInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="TypeKeyInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="TypeKeyRadioInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="UserInput" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:choice>
      </xsd:sequence>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- CSS height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="height" type="xsd:string"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- (Optional) reference ID of the widget.  This does not have to be globally unique;
           it only has to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string"/>
      <!-- CSS width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Override the SASS variable for InputColumn fallback-label-size to change label sizes
           globally. -->
      <xsd:attribute name="labelWidth" type="xsd:string"/>
      <!-- CSS max-height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="maxHeight" type="xsd:string"/>
      <!-- CSS max-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="maxWidth" type="xsd:string"/>
      <!-- CSS min-height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="minHeight" type="xsd:string"/>
      <!-- CSS min-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="minWidth" type="xsd:string"/>
      <!-- Only meaningful when this widget contains a Progress widget. Specifies an entity to
           refresh when the Progress widget completes its operation, at which point this widget
           will re-render itself. -->
      <xsd:attribute name="refreshOnProgressComplete" type="xsd:string"/>
      <!-- CSS width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="width" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- An iterator for DetailView content. -->
  <xsd:element name="InputIterator">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="IteratorSort" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="AddressAutoFillInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="AddressAutoFillRangeInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="AddressAutoFillTextInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="AddressBookContactInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="AltGroupInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="AltUserInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="AssigneeInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="BarInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="BooleanDropdownInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="BooleanRadioInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="BulletPointTextInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ButtonInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="CheckBoxGroupInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="CheckBoxInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="Choice" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ConfirmPasswordInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ContentInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="CovTermDirectInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="CurrencyInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="DateCriterionChoiceInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="DateInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="DateTimeInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="DocumentTemplateInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="EmbeddedInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="FileInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="GroupInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="HiddenInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="IndustryCodeInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="InputColumnSubGroup" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="InputDivider" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="InputGroup" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="InputIterator" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="InputSet" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="InputSetRef" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="Label" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ListViewInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="LoginSubmitButton" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MediaUploader" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ModifierInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MonetaryAmountInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="NoteBodyInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="OrgInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PasswordInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PickerInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PreFormattedTextInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PrivacyInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ProducerCodeInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ProgressInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="RangeInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="RangeRadioInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="RiskClassInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="TextAreaInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="TextInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="TileInputSetRef" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="TypeKeyCheckBoxGroupInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="TypeKeyInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="TypeKeyRadioInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="UserInput" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:choice>
      </xsd:sequence>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- An optional Boolean Gosu expression, if evaluated to true, add numEntriesToAdd elements
           to this iterator when entering the page, if the page is in edit mode upon enter. Normally
           not set, unless the iterator has less entries than required; otherwise, the user may
           have to manually remove unwanted entries that are automatically added. -->
      <xsd:attribute name="autoAdd" type="xsd:string"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- An optional Gosu expression used to convert a picked value into a value that can be
           added to the iterator. The picked value is available as the special symbol "PickedValue" -->
      <xsd:attribute name="conversionExpression" type="xsd:string"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- As each element in the array result of "value" is displayed, it is exposed as a symbol
           with the name "elementName", which the contents of this iterator can refer to -->
      <xsd:attribute name="elementName" type="xsd:string" use="required"/>
      <!-- If true, the iterator will refresh its entries even if they have changed.<p>This has
           risks. Refreshing from an IQueryBeanResult value will ignore newly added or removed
           entries. Changed or newly added entries may be reordered. User input that cannot be
           written to the underlying data (such as malformed date strings) may be lost.</p><p>Use
           with care. Safest on list or array iterators that contain only simple inputs such
           as checkboxes or dropdowns</p> -->
      <xsd:attribute name="forceRefreshDespiteChangedEntries" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- (Optional) reference ID of the widget.  This does not have to be globally unique;
           it only has to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string"/>
      <!-- An optional attribute, if set, overrides number of entries to add when the add button
           is pushed. Default to 1. Normally not set. <p><b>If set to a value greater than 1,
           any entry that is not modified by the user after it's added will be removed before
           commit the page. It's a risk of potential data loss. USE WITH CAUTION.</b></p> -->
      <xsd:attribute name="numEntriesToAdd" type="xsd:integer"/>
      <!-- Specifies the picker popup to use when adding new elements to the iterator, as a Gosu
           statement of the format "[popup name].push(...)" -->
      <xsd:attribute name="pickLocation" type="xsd:string"/>
      <!-- The Gosu expression that is evaluated to add a new value to the list. The value is
           exposed using the name specified by "elementName". An example would be "Foo.addToBars(bar)".
            Either toAdd or toCreateAndAdd must be defined for the user to add entries to the
           iterator; however you cannot define both.  If the entries are not entities, toCreateAndAdd
           must be used instead of toAdd. -->
      <xsd:attribute name="toAdd" type="xsd:string"/>
      <!-- The Gosu expression that is evaluated to create a new value and add it to the list.
           An example would be "Foo.addToBars(Foo.createNewBar())".  Either toAdd or toCreateAndAdd
           must be defined for the user to add entries to the iterator; however you cannot define
           both. -->
      <xsd:attribute name="toCreateAndAdd" type="xsd:string"/>
      <!-- The Gosu expression that is evaluated to remove a value from the Iterator. The value
           is exposed using the name specified by "elementName".  Must be defined for the user
           to be able to remove values from the iterator. -->
      <xsd:attribute name="toRemove" type="xsd:string"/>
      <!-- Lets you manually specify the type of element exposed as "elementName".  This is useful
           if you have special knowledge about the type of element returned by "value": for example,
           if the field referred to returns an array of Contacts but you happen to know that
           they are guaranteed to all be Persons -->
      <xsd:attribute name="type" type="xsd:string"/>
      <!-- A Gosu expression to run before committing the record. If this expression returns
           null, the validation is considered successful; otherwise, the result of this expression
           will be displayed as an error and the record will not be committed. -->
      <xsd:attribute name="validationExpression" type="xsd:string"/>
      <!-- The label of this iterator to be used when it has validation issues. -->
      <xsd:attribute name="validationLabel" type="xsd:string"/>
      <!-- A Gosu expression that evaluates to the elements over which to iterate. Must evaluate
           to an Object array or a IQueryBeanResult. -->
      <xsd:attribute name="value" type="xsd:string" use="required"/>
      <!-- The type of the value expression. -->
      <xsd:attribute name="valueType" type="xsd:string" use="required"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- A reusable set of Inputs -->
  <xsd:element name="InputSet">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="Expose" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ExposeIterator" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ExposeRowTree" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ReferencedWidget" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="Require" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="Variable" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:choice>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="AddressAutoFillInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="AddressAutoFillRangeInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="AddressAutoFillTextInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="AddressBookContactInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="AltGroupInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="AltUserInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="AssigneeInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="BarInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="BooleanDropdownInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="BooleanRadioInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="BulletPointTextInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ButtonInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="CheckBoxGroupInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="CheckBoxInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="Choice" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ConfirmPasswordInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ContentInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="CovTermDirectInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="CurrencyInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="DateCriterionChoiceInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="DateInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="DateTimeInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="DocumentTemplateInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="EmbeddedInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="FileInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="GroupInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="HiddenInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="IndustryCodeInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="InputColumnSubGroup" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="InputDivider" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="InputGroup" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="InputIterator" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="InputSet" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="InputSetRef" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="Label" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ListViewInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="LoginSubmitButton" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MediaUploader" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ModifierInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MonetaryAmountInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="NoteBodyInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="OrgInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PasswordInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PickerInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PreFormattedTextInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PrivacyInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ProducerCodeInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ProgressInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="RangeInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="RangeRadioInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="RiskClassInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="TextAreaInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="TextInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="TileInputSetRef" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="TypeKeyCheckBoxGroupInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="TypeKeyInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="TypeKeyRadioInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="UserInput" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:choice>
        <xsd:element ref="Code" minOccurs="0" maxOccurs="1"/>
      </xsd:sequence>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- Boolean expression which, if false, makes this widget and all its children read-only -->
      <xsd:attribute name="editable" type="xsd:string"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- (Optional) reference ID of the widget.  This does not have to be globally unique;
           it only has to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string"/>
      <!-- An optional String which, if specified, means that any element dynamically including
           this widget must specify the same mode.  There is also a special mode "default" you
           can use which means "Use this widget if no widget with the specified mode exists".
            You can also have this widget match more than one mode by separating mode strings
           with a | character. -->
      <xsd:attribute name="mode" type="xsd:string"/>
      <!-- Boolean expression which, if false, completely hides the widget and all its children -->
      <xsd:attribute name="visible" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- Includes an InputSet by reference. -->
  <xsd:element name="InputSetRef">
    <xsd:complexType>
      <xsd:choice minOccurs="0" maxOccurs="unbounded"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- The ID of the InputSet to include by reference. -->
      <xsd:attribute name="def" type="xsd:string" use="required"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- Boolean expression which, if false, makes this widget and all its children read-only -->
      <xsd:attribute name="editable" type="xsd:string"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- (Optional) reference ID of the widget.  This does not have to be globally unique;
           it only has to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string"/>
      <!-- If defined, "mode" is evaluated and its result is converted to a String; the panel
           will be loaded whose "mode" matches the evaluated "mode" of this element.  If no panel
           is found with a matching "mode", then the panel with mode="default" is used; if there
           is no default a runtime exception is thrown -->
      <xsd:attribute name="mode" type="xsd:string"/>
      <!-- Boolean expression which, if false, completely hides the widget and all its children -->
      <xsd:attribute name="visible" type="xsd:string"/>
      <!-- A comma separated list of widgets that are needed by the section. -->
      <xsd:attribute name="widgets" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- A set of pre-included toolbar buttons for iterator control, including "add" and "remove".
       The "add" button lets the iterator to add new entries using its default behavior.
       If you want to override the default add behavior of the iterator, use &lt;AddButton&gt;
       element instead. -->
  <xsd:element name="IteratorButtons">
    <xsd:complexType>
      <xsd:choice minOccurs="0" maxOccurs="unbounded"/>
      <!-- Confirmation message to show before performing the add action -->
      <xsd:attribute name="addConfirmMessage" type="xsd:string"/>
      <!-- Alternative label for the add button -->
      <xsd:attribute name="addLabel" type="xsd:string"/>
      <!-- Keyboard shortcut character for add button, in the form of "Q" or "ShiftQ"; the "Alt"
           key is implicit -->
      <xsd:attribute name="addShortcut" type="xsd:string" default="A"/>
      <!-- Boolean expression specifying whether the add button is visible. By default the add
           button is visible when the location is in edit mode and the Iterator has "toAdd",
           "toCreateAndAdd" , or "pickLocation" defined. -->
      <xsd:attribute name="addVisible" type="xsd:string"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="true"/>
      <!-- (Optional) reference ID of the widget.  This does not have to be globally unique;
           it only has to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string"/>
      <!-- The id of the iterator/list view widget this button applies to.  If the value is a
           list view then the first iterator widget child is used. -->
      <xsd:attribute name="iterator" type="xsd:string" use="required"/>
      <!-- Confirmation message to show before performing the remove action -->
      <xsd:attribute name="removeConfirmMessage" type="xsd:string"/>
      <!-- The flags to determine availability of the remove button. See the ToolbarButton "flags"
           attribute for syntax. By default, the remove button is available when at least one
           row in the list is checked. -->
      <xsd:attribute name="removeFlags" type="xsd:string"/>
      <!-- Alternative label for the remove button -->
      <xsd:attribute name="removeLabel" type="xsd:string"/>
      <!-- Keyboard shortcut character for remove button, in the form of "Q" or "ShiftQ"; the
           "Alt" key is implicit -->
      <xsd:attribute name="removeShortcut" type="xsd:string" default="R"/>
      <!-- Boolean expression specifying whether the remove button is visible. By default the
           remove button is visible when the Iterator has "toRemove" defined. -->
      <xsd:attribute name="removeVisible" type="xsd:string"/>
      <!-- Expression which determines whether or not the add confirmation message should be
           shown -->
      <xsd:attribute name="showAddConfirmMessage" type="xsd:string" default="true"/>
      <!-- Expression which determines whether or not the remove confirmation message should
           be shown -->
      <xsd:attribute name="showRemoveConfirmMessage" type="xsd:string" default="true"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- Provides an expression used to sort the enclosing iterator -->
  <xsd:element name="IteratorSort">
    <xsd:complexType>
      <xsd:choice minOccurs="0" maxOccurs="unbounded"/>
      <!-- Gosu expression specifying the value by which the nearest Iterator will be sorted. -->
      <xsd:attribute name="sortBy" type="xsd:string" use="required"/>
      <!-- Either "ascending" or "descending" -->
      <xsd:attribute name="sortDirection" type="WidgetSortDirection" default="ascending"/>
      <!-- The priority of sorting relative to other sorting elements like IteratorSort and Cell.
           The lower the number, the higher the priority.  The highest priority is "1" -->
      <xsd:attribute name="sortOrder" type="xsd:integer" use="required"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- ===== PolicyCenter-specific wizard PCF elements. =====  A PC specific wizard for managing
       jobs that do not require multi-quote capability -->
  <xsd:element name="JobWizard">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="LocationEntryPoint" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element ref="Variable" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="JobWizardStep" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="WizardStep" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="WizardStepGroup" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="WizardStepGroupRef" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="WizardStepIterator" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="WizardStepSet" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="WizardStepSetRef" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:choice>
        <xsd:element ref="Code" minOccurs="0" maxOccurs="1"/>
      </xsd:sequence>
      <!-- The ID of the AcceleratedMenuActions content for this location group. It will be inherited
           by all descendent Locations of this group by default. Normally not used, but use MenuActions
           instead. -->
      <xsd:attribute name="acceleratedMenuActions" type="xsd:string"/>
      <!-- Gosu expression to run after the Wizard is canceled.  See ActionBase for kinds of
           available actions -->
      <xsd:attribute name="afterCancel" type="xsd:string"/>
      <!-- Gosu expression to run after the user gets all the way through and finishes the Wizard. -->
      <xsd:attribute name="afterFinish" type="xsd:string"/>
      <!-- Gosu expression to run after return to this page from a popup. Whether the popup was
           committed is exposed as a symbol with the name "committed". -->
      <xsd:attribute name="afterReturnFromPopup" type="xsd:string"/>
      <!-- If true, then the location will be saved in the auto-save cache when the user navigates
           out if (a) it is in edit mode, and (b) there is any unsaved data. The location is
           restored from the cache when the user returns to it -->
      <xsd:attribute name="autosaveable" type="xsd:boolean" default="true"/>
      <!-- Gosu expression to run when the Wizard is canceled but before the rest of the cancel
           completes. -->
      <xsd:attribute name="beforeCancel" type="xsd:string"/>
      <!-- Gosu expression to run before the wizard state is persisted into database. -->
      <xsd:attribute name="beforeCommit" type="xsd:string"/>
      <!-- A boolean expression which, if false, prevents the user from putting the location
           into edit mode -->
      <xsd:attribute name="canEdit" type="xsd:string"/>
      <!-- A boolean expression which, if false, means the user has no permission to visit the
           location, and links to the location will be either invisible or grayed out, depending
           on context. -->
      <xsd:attribute name="canVisit" type="xsd:string"/>
      <!-- Gosu expression that returns a message to display in a confirmation dialog when the
           user attempts to cancel this wizard -->
      <xsd:attribute name="cancelWarning" type="xsd:string"/>
      <!-- If false, the location can still be kept in the autosave cache, but does not appear
           as unsaved work to the user (with link highlighting etc.). -->
      <xsd:attribute name="countsAsWork" type="xsd:boolean" default="true"/>
      <!-- Use this to add your own comments to this element. For now this attribute does nothing;
           later if we create a "UI dictionary" or PCF editor, the description will show up there. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- If true then changed inputs and cells in this location will be highlighted. -->
      <xsd:attribute name="highlightChangedValues" type="xsd:boolean" default="true"/>
      <!-- Color of the icon. If not set will default to its font color. -->
      <xsd:attribute name="iconColor" type="xsd:string"/>
      <!-- ID of this Location. Must be unique among all Locations. -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <!-- The optional title for menu links of independent steps. -->
      <xsd:attribute name="independentStepsTitle" type="xsd:string"/>
      <!-- The optional title icon for menu links of independent steps. -->
      <xsd:attribute name="independentStepsTitleIcon" type="xsd:string"/>
      <!-- An enumeration of icon types that determine what the 'independentStepsTitleIcon' property
           on the widget is referring to. -->
      <xsd:attribute name="independentStepsTitleIconType" type="IconTypeEnum"/>
      <!-- ID of the InfoBar content for this location (just below the TabBar and above the main
           content) -->
      <xsd:attribute name="infoBar" type="xsd:string"/>
      <!-- The id of the step the wizard should go to when it is first entered. -->
      <xsd:attribute name="initialStep" type="xsd:string"/>
      <!-- A boolean expression which, if true, means the wizard started from a previously saved
           draft, in which case the wizard does not appear as unsaved work on enter. -->
      <xsd:attribute name="isDraftOnEnter" type="xsd:string"/>
      <!-- The type of job processed in this wizard. This must be a subtype of JoXMLNodeMetadataBuilder. -->
      <xsd:attribute name="jobType" type="xsd:string" use="required"/>
      <!-- ID of the optional MenuActions content for this location (in the bottom of the left
           menu) -->
      <xsd:attribute name="menuActions" type="xsd:string"/>
      <!-- Normally <i>NOT</i> specified, in which case default MenuLinks (in the left menu)
           are generated based on steps of this wizard. If an empty string is specified, this
           wizard will have no MenuLinks of its own, and will inherit MenuLinks from its ancestor
           location group (if any). -->
      <xsd:attribute name="menuLinks" type="xsd:string"/>
      <!-- ID of the optional MenuTree content for this location (in the left menu).  This should
           only be used if the wizard is also overriding the menuLinks attribute -->
      <xsd:attribute name="menuTree" type="xsd:string"/>
      <!-- This expression, when specified, appends a link to the concurrent data change error
           message. The text of the link will be the value of the display key Java.Message.ConcurrentDataChange.Link.
           Clicking on the link will execute the given expression. A concurrent data change error
           happens if a user's changes cannot be committed because they clash with concurrent
           changes by a different user. -->
      <xsd:attribute name="onConcurrentDataChange" type="xsd:string"/>
      <!-- A Gosu expression to run when this location is resumed from the autosave cache. -->
      <xsd:attribute name="onResume" type="xsd:string"/>
      <!-- Reference to the "parent location" of this location, to specifiy the hierarchy of
           pcf locations. Used for the automatically generated "up link" in the title bar, highlighting
           of current menu links, and grouping items under "Unsaved Work". Usually the parent
           is the location right above this location in the application hierarchy, i.e. the parent
           of "ActivityDetailWorksheet" is "ClaimWorkplan", the parent of "Desktop Activities"
           is "Desktop" and "Desktop" has no parent at all. -->
      <xsd:attribute name="parent" type="xsd:string"/>
      <!-- If true, creates an "up link" icon in the title bar that links to the parent location.
            The upLink will pop the current location off the stack if the parent location is
           in the stack; otherwise, the upLink will "go" to the parent location, passing all
           of the symbols from the current page in a manner consistent with the "go" action. -->
      <xsd:attribute name="showUpLink" type="xsd:boolean" default="false"/>
      <!-- Boolean expression which, if true, puts the location in edit mode as soon as the user
           enters it. Default to true for Wizard. -->
      <xsd:attribute name="startInEditMode" type="xsd:string" default="true"/>
      <!-- The optional sub title for this wizard. If specified, it will be displayed in the
           left nav bar above links to wizard steps. -->
      <xsd:attribute name="subtitle" type="xsd:string"/>
      <!-- ID of the TabBar content for this location group. Normally not specified since "TabBar()"
           is the default. -->
      <xsd:attribute name="tabBar" type="xsd:string" default="TabBar()"/>
      <!-- The optional title for this wizard. If not specified, only the current step title
           shows in the top title bar. If specified, this wizard title and the current step title
           will both show in the title bar. -->
      <xsd:attribute name="title" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- Defines one step in a JobWizard. -->
  <xsd:element name="JobWizardStep">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="NextCondition" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="SkipButton" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:choice>
      </xsd:sequence>
      <!-- Gosu expression indicating whether or not the finish button is available. If not specified,
           then the finish button will be available if this is the last step in the wizard. -->
      <xsd:attribute name="allowFinish" type="xsd:string"/>
      <!-- Gosu expression indicating whether or not the next button is available. If not specified,
           then the next button will be available unless this is the last step in the wizard. -->
      <xsd:attribute name="allowNext" type="xsd:string"/>
      <!-- A boolean expression which, if false, grays the step out and won't let the user visit
           it (as opposed to visible/canVisit, which hide the step completely) -->
      <xsd:attribute name="available" type="xsd:string" default="true"/>
      <!-- Gosu expression to execute before save this step. Only applicable when "save" returns
           true. -->
      <xsd:attribute name="beforeSave" type="xsd:string"/>
      <!-- An optional boolean expression, if specified, determines whether validation issues
           on a particular entity should be fixed on this Step. The entity instance with validation
           issues is exposed to this expression as "VALUE". For example, "VALUE typeis entity.MyBean".
           And the corresponding validation issue is exposed as "ISSUE" -->
      <xsd:attribute name="handlesValidationIssue" type="xsd:string"/>
      <!-- The name of a .png file, or .svg file, or font glyph. The Widget's iconType determines
           which one. -->
      <xsd:attribute name="icon" type="xsd:string"/>
      <!-- Color of the icon. If not set will default to its font color. -->
      <xsd:attribute name="iconColor" type="xsd:string"/>
      <!-- An enumeration of icon types that determine what the 'icon' property on the widget
           is referring to. -->
      <xsd:attribute name="iconType" type="IconTypeEnum"/>
      <!-- The reference ID of the step, which must be unique among all locations.  This ID is
           used for a lot of purposes; most importantly it is what you refer to in the "go" action -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <!-- If true, the step is displayed at the bottom of the wizard, and is separated from
           ordinary wizard navigation; in particular, it is not affected by the high water mark. -->
      <xsd:attribute name="independent" type="xsd:boolean" default="false"/>
      <!-- The label for this step in the wizard menu links.  If unspecified, the "title" attribute
           is used as the default. -->
      <xsd:attribute name="label" type="xsd:string"/>
      <!-- If this Widget can be placed in a minimized state, this minimizedLabel text will be
           used. Otherwise, the Widget will use its global shortcut key, or icon if available. -->
      <xsd:attribute name="minimizedLabel" type="xsd:string"/>
      <!-- If defined, "mode" is evaluated and its result is converted to a String; the screen
           will be loaded whose "mode" matches the evaluated "mode" of this element.  If no screen
           is found with a matching "mode", then the panel with mode="default" is used; if there
           is no default a runtime exception is thrown -->
      <xsd:attribute name="mode" type="xsd:string"/>
      <!-- A Gosu expression which is executed every time the values in the JobWizardStep's screen
           changes. -->
      <xsd:attribute name="onChange" type="xsd:string"/>
      <!-- Gosu expression to execute when entering this step every time. -->
      <xsd:attribute name="onEnter" type="xsd:string"/>
      <!-- Gosu expression to run when leaving this step to move forward in the wizard or when
           finishing on this step. -->
      <xsd:attribute name="onExit" type="xsd:string"/>
      <!-- Gosu expression to execute when entering this step for the first time. -->
      <xsd:attribute name="onFirstEnter" type="xsd:string"/>
      <!-- If true, refreshes the steps in the wizard when leaving this step.  Should only be
           set to true on steps that allow the editing of some value that could affect a WizardStepIterator
           defined in this wizard -->
      <xsd:attribute name="refreshStepsOnExit" type="xsd:boolean" default="false"/>
      <!-- If true, a draft will be saved whenever we exit this step -->
      <xsd:attribute name="save" type="xsd:string" default="false"/>
      <!-- The ID of the Screen for this step. -->
      <xsd:attribute name="screen" type="xsd:string" use="required"/>
      <!-- Optional Keyboard shortcut character in the form of "Q" or "ShiftQ"; the "Alt" key
           is implicit. If specified, this will be used for the MenuLink generated for this WizardStep. -->
      <xsd:attribute name="shortcut" type="xsd:string"/>
      <!-- If true, the next button will always be shown, regardless of whether or not the wizard
           thinks it has more steps. -->
      <xsd:attribute name="showNextIfLastStep" type="xsd:boolean" default="false"/>
      <!-- The title for this step -->
      <xsd:attribute name="title" type="xsd:string" use="required"/>
      <!-- A Gosu expression which is evaluated to determine whether or not validation is performed
           the first time this step is entered. -->
      <xsd:attribute name="validateOnFirstEnter" type="xsd:string"/>
      <!-- A boolean expression which indicates if this Step is visible at all in the Wizard -->
      <xsd:attribute name="visible" type="xsd:string" default="true"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- A label for marking a section of the DetailView -->
  <xsd:element name="Label">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="LayoutConfig" minOccurs="0" maxOccurs="1"/>
      </xsd:sequence>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- If true, the font for this label will be bold. Defaults to true -->
      <xsd:attribute name="boldLabel" type="xsd:boolean" default="true"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- An expression that returns a GWColor instance. Legacy: this method can instead return
           a string corresponding to a CSS Specification Level 3 color name. See GWColor for
           more details. -->
      <xsd:attribute name="fontColor" type="xsd:string"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- The name of a .png file, or .svg file, or font glyph. The Widget's iconType determines
           which one. -->
      <xsd:attribute name="icon" type="xsd:string"/>
      <!-- Color of the icon. If not set will default to its font color. -->
      <xsd:attribute name="iconColor" type="xsd:string"/>
      <!-- An enumeration of icon types that determine what the 'icon' property on the widget
           is referring to. -->
      <xsd:attribute name="iconType" type="IconTypeEnum"/>
      <!-- (Optional) reference ID of the widget.  This does not have to be globally unique;
           it only has to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string"/>
      <!-- Text to display in the label widget. -->
      <xsd:attribute name="label" type="xsd:string"/>
      <!-- Boolean expression which, if false, completely hides this label -->
      <xsd:attribute name="visible" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- Optional layout configuration for children of this element. If Table type is enabled,
       then children will be laid out based on the number of columns specified. -->
  <xsd:element name="Layout">
    <xsd:complexType>
      <xsd:choice minOccurs="0" maxOccurs="unbounded"/>
      <!-- If true, the child elements will have a border around them. Purely a visual effect. -->
      <xsd:attribute name="border" type="xsd:boolean" default="false"/>
      <!-- Gosu expression that defines the total number of columns to create for table layout. -->
      <xsd:attribute name="columns" type="xsd:string"/>
      <!-- Layout type; options include "table". -->
      <xsd:attribute name="type" type="LayoutType" use="required"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- Optional layout configuration for inputs.  -->
  <xsd:element name="LayoutConfig">
    <xsd:complexType>
      <xsd:choice minOccurs="0" maxOccurs="unbounded"/>
      <!-- Gosu expression that defined the column span for the field, it only apply to table
           layout and the expression should evaluate to an integer -->
      <xsd:attribute name="colspan" type="xsd:string"/>
      <!-- Custom CSS style classes applied to the containing cell in a Table Layout. It should
           evaluate to one or more style classnames. -->
      <xsd:attribute name="tdClass" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- Generates a hyperlink that can perform some action when the user clicks on it -->
  <xsd:element name="Link">
    <xsd:complexType>
      <xsd:choice minOccurs="0" maxOccurs="unbounded"/>
      <!-- Action performed by this widget.  By default, this is a Gosu expression.  Other types
           of actions can be specified by using the following prefixes: http: causes the browser
           to follow the specified plain http link https: causes the browser to follow the specified
           plain https link javascript: causes the browser to execute the specified javascript
           logout: logs out of the application -->
      <xsd:attribute name="action" type="xsd:string"/>
      <!-- The optional initial value for the action argument. Only meaningful, when "argType"
           is specified. -->
      <xsd:attribute name="argInitialValue" type="xsd:string"/>
      <!-- The optional label for the action argument. Only meaningful, when "argType" is specified. -->
      <xsd:attribute name="argLabel" type="xsd:string"/>
      <!-- Optional Gosu expression to determine the label displayed for each element in the
           arg range. If not set, default to the element's string representation. The element
           value is exposed as "VALUE". -->
      <xsd:attribute name="argOptionLabel" type="xsd:string"/>
      <!-- Gosu expression defining the range of possible arg values for this action. Should
           evaluate to a list that matches the "argType" -->
      <xsd:attribute name="argRange" type="xsd:string"/>
      <!-- The type of the argument for this action.If set, the widget will allow the user to
           enter an argument value of this type before invoke the action.Supported types: String,
           Number and java.util.Date.The argument value is exposed to the "action" attribute
           as "ArgValue". -->
      <xsd:attribute name="argType" type="xsd:string"/>
      <!-- Optional pixel width for the dropdown control of the action argument. Only applicable
           when "argRange" is specified.Usually you get best results by leaving this unspecified.
           You can set this attribute when some options in the dropdown range are too long and
           you need to reduce the display width of the dropdown control. -->
      <xsd:attribute name="argWidth" type="xsd:integer"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- Boolean expression which, if false, grays out the widget and all its children and
           makes them unclickable -->
      <xsd:attribute name="available" type="xsd:string"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- Confirmation message to show before performing the action -->
      <xsd:attribute name="confirmMessage" type="xsd:string"/>
      <!-- If true, the button is the default for the page, and will be "clicked" when the user
           presses Enter -->
      <xsd:attribute name="default" type="xsd:boolean" default="false"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- Should be 'true', 'inline' or 'attachment' if the action taken by this widget is to
           download a file. -->
      <xsd:attribute name="download" type="Download"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- The name of a .png file, or .svg file, or font glyph. The Widget's iconType determines
           which one. -->
      <xsd:attribute name="icon" type="xsd:string"/>
      <!-- Color of the icon. If not set will default to its font color. -->
      <xsd:attribute name="iconColor" type="xsd:string"/>
      <!-- An enumeration of icon types that determine what the 'icon' property on the widget
           is referring to. -->
      <xsd:attribute name="iconType" type="IconTypeEnum"/>
      <!-- Reference ID of the widget.  This does not have to be globally unique; it only has
           to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <!-- Label to render. -->
      <xsd:attribute name="label" type="xsd:string"/>
      <!-- If this Widget can be placed in a minimized state, this minimizedLabel text will be
           used. Otherwise, the Widget will use its global shortcut key, or icon if available. -->
      <xsd:attribute name="minimizedLabel" type="xsd:string"/>
      <!-- The optional flag, if true, the action will be performed as soon as the arg value
           ischanged and no action button will be rendered -->
      <xsd:attribute name="performActionOnArgChange" type="xsd:boolean" default="false"/>
      <!-- Default text answer to the prompt message -->
      <xsd:attribute name="promptDefault" type="xsd:string"/>
      <!-- Question to ask the user before performing the action. The answer is exposed to the
           action as "web.WebUtil.ActionEventParameter". -->
      <xsd:attribute name="promptQuestion" type="xsd:string"/>
      <!-- The optional boolean flag, if set, the value of the action argument will be reset
           by calculating the argInitialValue expression, when the page is rerendered from the
           server. Default to false. -->
      <xsd:attribute name="recalculateArgOnRefresh" type="xsd:boolean" default="false"/>
      <!-- If true, the page will scroll back to the original scroll position after the action.
           Should only be set if the action stays on the same page and the page layout does not
           change. Default to false -->
      <xsd:attribute name="retainScrollPosition" type="xsd:boolean" default="false"/>
      <!-- Keyboard shortcut character in the form of "Q" or "ShiftQ"; the "Alt" key is implicit -->
      <xsd:attribute name="shortcut" type="xsd:string"/>
      <!-- Gosu expression which determines whether or not the confirmation message should be
           shown -->
      <xsd:attribute name="showConfirmMessage" type="xsd:string" default="true"/>
      <!-- CSS style class for the link; for instance, "miniButton" makes the link appear as
           a small button -->
      <xsd:attribute name="styleClass" type="LinkStyleClass"/>
      <!-- An expression which, if defined, is evaluated to create help info if the user hovers
           the mouse over the button -->
      <xsd:attribute name="tooltip" type="xsd:string"/>
      <!-- Boolean expression which, if false, completely hides the widget and all its children -->
      <xsd:attribute name="visible" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- A ListView cell containing arbitrary content, such as links. -->
  <xsd:element name="LinkCell">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="Reflect" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element ref="ColumnFooter" minOccurs="0" maxOccurs="1"/>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="Link"/>
          <xsd:element ref="LinkIterator"/>
          <xsd:element ref="PickerLink"/>
        </xsd:choice>
      </xsd:sequence>
      <!-- Specifies the alignment of this cell. Valid values: "left", "right", or "center".
           If no value is specified, the default alignment is determined by the value type ("center"
           for boolean values; "right" for numeric values; "left" for other value types). -->
      <xsd:attribute name="align" type="WidgetAlignment"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- Boolean expression which, if false, grays out the widget and all its children -->
      <xsd:attribute name="available" type="xsd:string"/>
      <!-- If true, renders the cell contents in bold text. Defaults to false. -->
      <xsd:attribute name="bold" type="xsd:boolean" default="false"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- The HTML colspan attribute, lets this cell span across multiple columns of other rows.
           Useful for generating a "group header" row above a RowIterator. The default value
           is 1. A value greater than 1 is only allowed when the containing row is not iterated
           by a RowIterator. -->
      <xsd:attribute name="colspan" type="xsd:integer"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- An optional expression. If specified, a footer cell with the specified value will
           be rendered for this column. Only applicable when the containing Row is iterated by
           a RowIterator. Not allowed when "footerSumValue" is specified. -->
      <xsd:attribute name="footerLabel" type="xsd:string"/>
      <!-- An optional expression, if specified, will be used as format pattern for the footer
           sum value. Normally not specified, so that the "format" and\or "formatType" of the
           cell value will be applied to footer sum value. Only applicable when "footerSumValue"
           is specified. The result of this expression must conform to the number format defined
           in java.text.DecimalFormat. -->
      <xsd:attribute name="footerSumFormat" type="xsd:string"/>
      <!-- An optional Numeric expression. If specified, a footer cell that sums the specified
           value for all cells in this column will be rendered. Pagination of the list does not
           affect the sum value. Only applicable when the containing row is iterated by a RowIterator.
           Not allowed when "footerLabel" is specified. -->
      <xsd:attribute name="footerSumValue" type="xsd:string"/>
      <!-- If true, this Cell and any other grow-enabled Cell will expand to fill remaining space
           in the ListViewPanel. Only applicable when the ListView is set to stretch. -->
      <xsd:attribute name="grow" type="xsd:boolean" default="false"/>
      <!-- CSS height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="height" type="xsd:string"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- Refers to an image file. If defined, makes this an icon cell. The "value" attribute
           should be a boolean expression describing whether the icon is visible in a given row. -->
      <xsd:attribute name="icon" type="xsd:string"/>
      <!-- Color of the icon. If not set will default to its font color. -->
      <xsd:attribute name="iconColor" type="xsd:string"/>
      <!-- An enumeration of icon types that determine what the 'icon' property on the widget
           is referring to. -->
      <xsd:attribute name="iconType" type="IconTypeEnum"/>
      <!-- (Optional) reference ID of the widget.  This does not have to be globally unique;
           it only has to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string"/>
      <!-- An optional expression. If specified, a header cell with the specified value will
           be rendered for this column. Only applicable when the containing row is iterated by
           a RowIterator. -->
      <xsd:attribute name="label" type="xsd:string"/>
      <!-- CSS max-height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="maxHeight" type="xsd:string"/>
      <!-- CSS max-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="maxWidth" type="xsd:string"/>
      <!-- CSS min-height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="minHeight" type="xsd:string"/>
      <!-- CSS min-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="minWidth" type="xsd:string"/>
      <!-- Relative width when printing to PDF. All widths are relative to the widths of the
           other columns in the ListView -->
      <xsd:attribute name="printWidth" type="xsd:string" default="1"/>
      <!-- If true, shows the icon defined by "icon" in the header cell for this column. The
           default value is true. -->
      <xsd:attribute name="showHeaderIcon" type="xsd:boolean" default="true"/>
      <!-- An optional comma-separated sequence of Expressions, each of which is assumed to be
           a dot-delimited path, the value by which this column will be sorted if the user clicks
           on the header cell. -->
      <xsd:attribute name="sortBy" type="xsd:string"/>
      <!-- Either "ascending" or "descending" -->
      <xsd:attribute name="sortDirection" type="WidgetSortDirection" default="ascending"/>
      <!-- The priority of sorting relative to other sorting elements like IteratorSort and Cell.
           The lower the number, the higher the priority.  The highest priority is "1" -->
      <xsd:attribute name="sortOrder" type="xsd:integer" default="0"/>
      <!-- If true, the contents of the Widget will be stacked vertically. -->
      <xsd:attribute name="stacked" type="xsd:string" default="false"/>
      <!-- Extra "alt" text to show when the user hovers the mouse over the header cell of this
           column. -->
      <xsd:attribute name="tooltip" type="xsd:string"/>
      <!-- Specifies the vertical alignment of this cell. Valid values: "top", "middle", or "bottom".
           If no value is specified, the default alignment is determined by the cell type ("top"
           for Text Areas and Format Cells, "middle" for buttons and icons). -->
      <xsd:attribute name="verticalAlign" type="WidgetVerticalAlignment"/>
      <!-- Boolean expression which, if false, completely hides the widget and all its children -->
      <xsd:attribute name="visible" type="xsd:string"/>
      <!-- CSS width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="width" type="xsd:string"/>
      <!-- If true, allows cell content to wrap. Defaults to false for link cells. -->
      <xsd:attribute name="wrap" type="WrapType" default="false"/>
      <!-- If true, allows Header Cell text content to wrap. Defaults to true. -->
      <xsd:attribute name="wrapLabel" type="xsd:boolean" default="false"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- Generates Link elements based on a list of values. -->
  <xsd:element name="LinkIterator">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="IteratorSort" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="Link"/>
          <xsd:element ref="LinkIterator"/>
          <xsd:element ref="PickerLink"/>
        </xsd:choice>
      </xsd:sequence>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- As each element in the array result of "value" is displayed, it is exposed as a symbol
           with the name "elementName", which the contents of this iterator can refer to -->
      <xsd:attribute name="elementName" type="xsd:string" use="required"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- (Optional) reference ID of the widget.  This does not have to be globally unique;
           it only has to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string"/>
      <!-- Lets you manually specify the type of element exposed as "elementName".  This is useful
           if you have special knowledge about the type of element returned by "value": for example,
           if the field referred to returns an array of Contacts but you happen to know that
           they are guaranteed to all be Persons -->
      <xsd:attribute name="type" type="xsd:string"/>
      <!-- A Gosu expression that evaluates to the elements over which to iterate. Must evaluate
           to an Object array or a IQueryBeanResult. -->
      <xsd:attribute name="value" type="xsd:string" use="required"/>
      <!-- The type of the value expression. -->
      <xsd:attribute name="valueType" type="xsd:string" use="required"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- A special panel for displaying a ListView, followed by a CardView whose contents can
       depend on the element selected in the ListView. -->
  <xsd:element name="ListDetailPanel">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="Expose" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ExposeIterator" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ExposeRowTree" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ReferencedWidget" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="Require" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="Variable" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:choice>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="AbstractTableLayout" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="CardViewPanel" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ChartPanel" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="DetailViewPanel" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="EmbeddedPanel" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="Image" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ImageAction" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ImageMediaObject" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ListDetailPanel" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ListViewPanel" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MediaGallery" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MediaUploader" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PanelColumn" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PanelDivider" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PanelIterator" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PanelRef" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PanelRow" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PanelSet" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="SearchPanel" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="Spacer" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="TemplatePanel" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="TreeViewPanel" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:choice>
        <xsd:element ref="Code" minOccurs="0" maxOccurs="1"/>
      </xsd:sequence>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- If true, the Widget will have a border around it. Purely a visual effect. -->
      <xsd:attribute name="border" type="xsd:boolean" default="false"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- (Optional) reference ID of the widget.  This does not have to be globally unique;
           it only has to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string"/>
      <!-- If true, independent of 'panel inner spacing', the container will left indent its
           children by a fixed amount. This is useful for displaying nested data throughout a
           page. Purely a visual effect. -->
      <xsd:attribute name="leftIndent" type="xsd:boolean" default="false"/>
      <!-- If true, then the user won't be allowed to change the selection while the current
           selection is being edited. -->
      <xsd:attribute name="lockWhileEditing" type="xsd:boolean" default="false"/>
      <!-- The style of the Panel. In general, this refers to the background color, but some
           styles can change other aspects such as font color, spacing, or filters. -->
      <xsd:attribute name="panelStyle" type="xsd:string"/>
      <!-- Name of the special "selection" symbol representing the selected value from the list.
           The card set typically refers to this symbol to show information about it. -->
      <xsd:attribute name="selectionName" type="xsd:string" use="required"/>
      <!-- If this expression evaluates to anything other than null, the list-detail panel will
           attempt to select the result when this page is entered.  Typically this will be set
           to a variable which is (optionally) passed in to this page. -->
      <xsd:attribute name="selectionOnEnter" type="xsd:string"/>
      <!-- Type of the selection symbol, usually the same as the type of element rendered by
           rows in the ListView -->
      <xsd:attribute name="selectionType" type="xsd:string" use="required"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- Includes an entire ListView as an input, and supplies it with an optional toolbar. -->
  <xsd:element name="ListViewInput">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="Toolbar" minOccurs="0" maxOccurs="1"/>
        <xsd:element ref="ListViewPanel" minOccurs="0" maxOccurs="1"/>
      </xsd:sequence>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- Boolean expression which, if false, grays out the widget and all its children -->
      <xsd:attribute name="available" type="xsd:string"/>
      <!-- If true then the label is displayed in bold text -->
      <xsd:attribute name="boldLabel" type="xsd:boolean" default="false"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- ID of the ListView to include by reference (should only be used if you are not adding
           the def as a direct child of this element). -->
      <xsd:attribute name="def" type="xsd:string"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- If true, prevents the child ListViewPanel from enabling User customization. -->
      <xsd:attribute name="disableUserCustomization" type="xsd:boolean" default="true"/>
      <!-- Boolean expression which, if false, makes this widget and all its children read-only -->
      <xsd:attribute name="editable" type="xsd:string"/>
      <!-- CSS height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="height" type="xsd:string"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- (Optional) reference ID of the widget.  This does not have to be globally unique;
           it only has to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string"/>
      <!-- Label to render. -->
      <xsd:attribute name="label" type="xsd:string"/>
      <!-- Boolean expression which, if true, causes the label portion of the Input to be rendered
           above the ListView, allowing the ListView to expand left into the column of labels -->
      <xsd:attribute name="labelAbove" type="xsd:string" default="false"/>
      <!-- Custom extension CSS style class to apply to the label. -->
      <xsd:attribute name="labelStyleClass" type="xsd:string"/>
      <!-- Provides an override for the listViewStyle property on the child ListViewPanel. -->
      <xsd:attribute name="listViewStyle" type="ListViewStyleEnum"/>
      <!-- CSS max-height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="maxHeight" type="xsd:string"/>
      <!-- CSS max-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="maxWidth" type="xsd:string"/>
      <!-- CSS min-height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="minHeight" type="xsd:string"/>
      <!-- CSS min-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="minWidth" type="xsd:string"/>
      <!-- If you are including the ListView by reference and you define a "mode" expression,
           then "mode" is evaluated and its result is converted to a String; the Def will be
           loaded whose "mode" matches the evaluated "mode" of this element.  If no Def is found
           with a matching "mode", then the Def with mode="default" is used; if there is no default
           a runtime exception is thrown -->
      <xsd:attribute name="mode" type="xsd:string"/>
      <!-- A Gosu expression to run before committing the record. This expression can refer to
           any symbols available to this widget. If this expression returns null, the validation
           is considered successful; otherwise, the result of this expression will be displayed
           as error and the record will not be committed. -->
      <xsd:attribute name="validationExpression" type="xsd:string"/>
      <!-- Boolean expression which, if false, completely hides the widget and all its children -->
      <xsd:attribute name="visible" type="xsd:string"/>
      <!-- A comma separated list of widgets that are needed by the section. -->
      <xsd:attribute name="widgets" type="xsd:string"/>
      <!-- CSS width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="width" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- A panel whose content is formatted as a two-dimensional table -->
  <xsd:element name="ListViewPanel">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="Expose" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ExposeIterator" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ExposeRowTree" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ReferencedWidget" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="Require" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="Variable" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:choice>
        <xsd:choice minOccurs="1" maxOccurs="unbounded">
          <xsd:element ref="Row"/>
          <xsd:element ref="RowIterator"/>
          <xsd:element ref="RowSetRef"/>
          <xsd:element ref="RowTree"/>
        </xsd:choice>
        <xsd:element ref="Code" minOccurs="0" maxOccurs="1"/>
      </xsd:sequence>
      <!-- If true and the theme permits it, odd numbered rows will have a different background
           color than even rows. Defaults to true. -->
      <xsd:attribute name="alternateEntryStyle" type="xsd:boolean" default="true"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- Boolean expression which, if false, grays out the widget and all its children -->
      <xsd:attribute name="available" type="xsd:string"/>
      <!-- If true, the Widget will have a border around it. Purely a visual effect. -->
      <xsd:attribute name="border" type="xsd:boolean" default="false"/>
      <!-- If true, and the ListView has paging controls, then the paging controls will also
           be placed below the ListView's table. -->
      <xsd:attribute name="bottomPaging" type="xsd:boolean" default="false"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- If true, the ListView columns can NOT be hidden, reordered, or grouped. -->
      <xsd:attribute name="disableUserCustomization" type="xsd:boolean" default="false"/>
      <!-- Boolean expression which, if false, makes this widget and all its children read-only -->
      <xsd:attribute name="editable" type="xsd:string"/>
      <!-- An optional expression specifying the text to display in a table if no iterated rows
           are present. If not specified, defaults to the platform display key Java.ListView.DefaultEmptyTableLabel -->
      <xsd:attribute name="emptyTableLabel" type="xsd:string"/>
      <!-- CSS height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="height" type="xsd:string"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- (Optional) reference ID of the widget.  This does not have to be globally unique;
           it only has to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string"/>
      <!-- If true, independent of 'panel inner spacing', the container will left indent its
           children by a fixed amount. This is useful for displaying nested data throughout a
           page. Purely a visual effect. -->
      <xsd:attribute name="leftIndent" type="xsd:boolean" default="false"/>
      <!-- An enumeration of style options for the ListView. These will dramatically change complex
           aspects of the ListView's appearance. -->
      <xsd:attribute name="listViewStyle" type="ListViewStyleEnum"/>
      <!-- CSS max-height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="maxHeight" type="xsd:string"/>
      <!-- CSS max-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="maxWidth" type="xsd:string"/>
      <!-- CSS min-height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="minHeight" type="xsd:string"/>
      <!-- CSS min-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="minWidth" type="xsd:string"/>
      <!-- An optional String which, if specified, means that any element dynamically including
           this widget must specify the same mode.  There is also a special mode "default" you
           can use which means "Use this widget if no widget with the specified mode exists".
            You can also have this widget match more than one mode by separating mode strings
           with a | character. -->
      <xsd:attribute name="mode" type="xsd:string"/>
      <!-- In general, determines the amount of spacing INSIDE of the Panel in all 4 directions:
           top, right, bottom, left. However, different Panels may have requirements that prevent
           all 4 directions from being modified. -->
      <xsd:attribute name="panelInnerSpacing" type="WidgetSpacing" default="none"/>
      <!-- In general, determines the amount of spacing OUTSIDE of the Panel in all 4 directions:
           top, right, bottom, left. However, different Panels may have requirements that prevent
           all 4 directions from being modified. -->
      <xsd:attribute name="panelOuterSpacing" type="WidgetSpacing" default="normal"/>
      <!-- The style of the Panel. In general, this refers to the background color, but some
           styles can change other aspects such as font color, spacing, or filters. -->
      <xsd:attribute name="panelStyle" type="xsd:string"/>
      <!-- If true, the LV will fill its container, allowing configured cells to `Grow` to fill
           the extra space. -->
      <xsd:attribute name="stretch" type="xsd:boolean" default="false"/>
      <!-- A Gosu expression to run before committing the record. This expression can refer to
           any symbols available to this widget. If this expression returns null, the validation
           is considered successful; otherwise, the result of this expression will be displayed
           as error and the record will not be committed. -->
      <xsd:attribute name="validationExpression" type="xsd:string"/>
      <!-- Boolean expression which, if false, completely hides the widget and all its children -->
      <xsd:attribute name="visible" type="xsd:string"/>
      <!-- CSS width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="width" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- A two-dimensional table for a Tile -->
  <xsd:element name="ListViewTile">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="Require" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="Variable" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:choice>
        <xsd:element ref="TileActions" minOccurs="0" maxOccurs="1"/>
        <xsd:element ref="RowIterator" minOccurs="1" maxOccurs="1"/>
      </xsd:sequence>
      <!-- If true and the theme permits it, odd numbered rows will have a different background
           color than even rows. Defaults to true. -->
      <xsd:attribute name="alternateEntryStyle" type="xsd:boolean" default="true"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- Indicates, if there is less rows than 5, tile footer will be automatically hidden. -->
      <xsd:attribute name="hideViewMoreIfShortList" type="xsd:boolean" default="false"/>
      <!-- Reference ID of the widget.  This does not have to be globally unique; it only has
           to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <!-- An enumeration of style options for the ListView. -->
      <xsd:attribute name="listViewStyle" type="ListViewStyleEnum" default="minimalStyle"/>
      <!-- If true, the LV will fill its container, allowing configured cells to `Grow` to fill
           the extra space. -->
      <xsd:attribute name="stretch" type="xsd:boolean" default="false"/>
      <!-- The title of the tile.  The title is shown on the top of the tile. -->
      <xsd:attribute name="title" type="xsd:string" use="required"/>
      <!-- The view more action.  The 'View more' link is shown in the tile footer. -->
      <xsd:attribute name="viewMoreAction" type="xsd:string"/>
      <!-- The view more label of the tile.  By default 'View More' -->
      <xsd:attribute name="viewMoreLabel" type="xsd:string" default="DisplayKey.get(&quot;Web.Tile.ViewMore&quot;)"/>
      <!-- An expression that indicates if the view more link is visible. -->
      <xsd:attribute name="viewMoreVisible" type="xsd:string"/>
      <!-- Boolean expression which, if false, completely hides the widget and all its children -->
      <xsd:attribute name="visible" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- An entry point for accessing a Location. -->
  <xsd:element name="LocationEntryPoint">
    <xsd:complexType>
      <xsd:choice minOccurs="0" maxOccurs="unbounded"/>
      <!-- The signature of the entry point, of the form "[location name]([args])". -->
      <xsd:attribute name="signature" type="xsd:string" use="required"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- A group of locations (analogous to a directory that contains multiple files). When
       navigate to the group directly, it automatically forwards to the first visitable child
       LocationRef. When no accessible child LocationRef exists in this group, navigation
       directly to this group is disabled. When the "canVisit" expression of this group returns
       false, navigation to any descendents of this group is disabled. (A Location is considered
       a descendent of this group, if this Location is referenced by a child LocationRef
       of this group or has a "parent" attribute that points to this group or a descendent
       of this group.) -->
  <xsd:element name="LocationGroup">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="LocationEntryPoint" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element ref="Variable" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="LocationRef" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="LocationRefIterator" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:choice>
        <xsd:element ref="Code" minOccurs="0" maxOccurs="1"/>
      </xsd:sequence>
      <!-- The ID of the AcceleratedMenuActions content for this location group. It will be inherited
           by all descendent Locations of this group by default. Normally not used, but use MenuActions
           instead. -->
      <xsd:attribute name="acceleratedMenuActions" type="xsd:string"/>
      <!-- A Gosu expression to run after this location group is entered. Because a location
           group is always entered before any descendent Location in the group, this expression
           will be executed before any descendent Location is entered. -->
      <xsd:attribute name="afterEnter" type="xsd:string"/>
      <!-- A Gosu expression to run before leaving this location group. -->
      <xsd:attribute name="beforeLeave" type="xsd:string"/>
      <!-- The optional browser title of the location. If specified, the value will be displayed
           in the browser window title when this location is being viewed in the main content
           area. -->
      <xsd:attribute name="browserTitle" type="xsd:string"/>
      <!-- A boolean expression which, if false, means the user has no permission to visit this
           location Group or any Page (or sub-LocationGroup) in this group. If omitted, this
           LocationGroup can be visited only if at least one of its children can be visited. -->
      <xsd:attribute name="canVisit" type="xsd:string"/>
      <!-- Use this to add your own comments to this element. For now this attribute does nothing;
           later if we create a "UI dictionary" or PCF editor, the description will show up there. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- Color of the icon. If not set will default to its font color. -->
      <xsd:attribute name="iconColor" type="xsd:string"/>
      <!-- ID of this Location. Must be unique among all Locations. -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <!-- The ID of the InfoBar content for this group. InfoBar will be inherited by all descendent
           Locations of this group by default. -->
      <xsd:attribute name="infoBar" type="xsd:string"/>
      <!-- The ID of the MenuActions content for this location group. MenuActions will be inherited
           by all descendent Locations of this group by default. -->
      <xsd:attribute name="menuActions" type="xsd:string"/>
      <!-- Normally <i>NOT</i> specified, in which case default MenuLinks are generated based
           on all <i>visitable</i> child LocationRefs of this group. <p> MenuLinks are rendered
           in the left menu, if this group is not nested within another group; otherwise, they
           are rendered as page links next to the screen title. -->
      <xsd:attribute name="menuLinks" type="xsd:string"/>
      <!-- An optional title for the default MenuLinks of this LocationGroup, if set, generates
           a title bar that can collapse and expand the MenuLinks -->
      <xsd:attribute name="menuLinksTitle" type="xsd:string"/>
      <!-- An optional title icon for the default MenuLinks of this LocationGroup, if set, generates
           a title bar that can collapse and expand the MenuLinks -->
      <xsd:attribute name="menuLinksTitleIcon" type="xsd:string"/>
      <!-- An enumeration of icon types that determine what the 'menuLinksTitleIcon' property
           on the widget is referring to. -->
      <xsd:attribute name="menuLinksTitleIconType" type="IconTypeEnum"/>
      <!-- The ID of the MenuTree content for this location group. MenuTree will be inherited
           by all descendent Locations of this group by default. -->
      <xsd:attribute name="menuTree" type="xsd:string"/>
      <!-- If this Widget can be placed in a minimized state, this minimizedLabel text will be
           used. Otherwise, the Widget will use its global shortcut key, or icon if available. -->
      <xsd:attribute name="minimizedLabel" type="xsd:string"/>
      <!-- A Gosu expression to run when this location group is moved to the auto-save cache. -->
      <xsd:attribute name="onAutoSave" type="xsd:string"/>
      <!-- A Gosu expression to run when this location is resumed from the autosave cache. -->
      <xsd:attribute name="onResume" type="xsd:string"/>
      <!-- Reference to the "parent location" of this location, to specifiy the hierarchy of
           pcf locations. Used for the automatically generated "up link" in the title bar, highlighting
           of current menu links, and grouping items under "Unsaved Work". Usually the parent
           is the location right above this location in the application hierarchy, i.e. the parent
           of "ActivityDetailWorksheet" is "ClaimWorkplan", the parent of "Desktop Activities"
           is "Desktop" and "Desktop" has no parent at all. -->
      <xsd:attribute name="parent" type="xsd:string"/>
      <!-- ID of the TabBar content for this location group. Normally not specified since "TabBar()"
           is the default. -->
      <xsd:attribute name="tabBar" type="xsd:string" default="TabBar()"/>
      <!-- The title of the Location Group.  When this is a root Location Group (i.e., does not
           belong to any parent Location), the title will be used as group title in the Unsaved-Work
           panel when any descendent Location has unsaved work.  When this is not a root Location
           Group, the title may be used as the default label for the left menu item that leads
           to this Location Group. -->
      <xsd:attribute name="title" type="xsd:string" use="required"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- A reference to a location -->
  <xsd:element name="LocationRef">
    <xsd:complexType>
      <xsd:choice minOccurs="0" maxOccurs="unbounded"/>
      <!-- An optional boolean expression. If returns true, this widget will not be displayed
           when the action is disabled. Default to true. -->
      <xsd:attribute name="hideIfDisabled" type="xsd:string"/>
      <!-- The name of a .png file, or .svg file, or font glyph. The Widget's iconType determines
           which one. -->
      <xsd:attribute name="icon" type="xsd:string"/>
      <!-- Color of the icon. If not set will default to its font color. -->
      <xsd:attribute name="iconColor" type="xsd:string"/>
      <!-- An enumeration of icon types that determine what the 'icon' property on the widget
           is referring to. -->
      <xsd:attribute name="iconType" type="IconTypeEnum"/>
      <!-- An optional Gosu expression the result of which is used as the label for the link
           to this location. Normally <b>NOT</b> specified, therefore allow a default label to
           be generated from the title of the target location. -->
      <xsd:attribute name="label" type="xsd:string"/>
      <!-- A Gosu expression pointing to the location this element refers to, of the form "[location
           name]([args])" -->
      <xsd:attribute name="location" type="xsd:string" use="required"/>
      <!-- If this Widget can be placed in a minimized state, this minimizedLabel text will be
           used. Otherwise, the Widget will use its global shortcut key, or icon if available. -->
      <xsd:attribute name="minimizedLabel" type="xsd:string"/>
      <!-- Optional keyboard shortcut character in the form of "Q" or "ShiftQ"; the "Alt" key
           is implicit. If specified, this will be used for the default MenuLink generated for
           this LocationRef. -->
      <xsd:attribute name="shortcut" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- Creates as many copies of its content as there are components in the array referenced
       by "value".  Supplies the component value to the created content as "elementName".
       Used inside a LocationGroup. -->
  <xsd:element name="LocationRefIterator">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="LocationRef" minOccurs="1" maxOccurs="unbounded"/>
      </xsd:sequence>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- As each element in the array result of "value" is displayed, it is exposed as a symbol
           with the name "elementName", which the contents of this iterator can refer to -->
      <xsd:attribute name="elementName" type="xsd:string" use="required"/>
      <!-- (Optional) reference ID of the widget.  This does not have to be globally unique;
           it only has to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string"/>
      <!-- Lets you manually specify the type of element exposed as "elementName".  This is useful
           if you have special knowledge about the type of element returned by "value": for example,
           if the field referred to returns an array of Contacts but you happen to know that
           they are guaranteed to all be Persons -->
      <xsd:attribute name="type" type="xsd:string"/>
      <!-- A Gosu expression that evaluates to the elements over which to iterate. Must evaluate
           to an Object array or a IQueryBeanResult. -->
      <xsd:attribute name="value" type="xsd:string" use="required"/>
      <!-- The type of the value expression. -->
      <xsd:attribute name="valueType" type="xsd:string" use="required"/>
      <!-- Boolean expression which, if false, completely hides the widget and all its children -->
      <xsd:attribute name="visible" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- Special Page element for the login page. -->
  <xsd:element name="LoginPage">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="LocationEntryPoint" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element ref="Variable" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="Screen" minOccurs="0" maxOccurs="1"/>
          <xsd:element ref="ScreenRef" minOccurs="0" maxOccurs="1"/>
        </xsd:choice>
        <xsd:element ref="Code" minOccurs="0" maxOccurs="1"/>
      </xsd:sequence>
      <!-- Gosu expression to run after the location is canceled. -->
      <xsd:attribute name="afterCancel" type="xsd:string"/>
      <!-- Gosu expression to run after the location is updated. -->
      <xsd:attribute name="afterCommit" type="xsd:string"/>
      <!-- Gosu expression to run after this page is entered. -->
      <xsd:attribute name="afterEnter" type="xsd:string"/>
      <!-- Gosu expression to run after return to this page from a popup. Whether the popup was
           committed is exposed as a symbol with the name "committed". -->
      <xsd:attribute name="afterReturnFromPopup" type="xsd:string"/>
      <!-- If true, the location will always go back to edit mode after a commit / cancel -->
      <xsd:attribute name="alwaysInEditMode" type="xsd:boolean" default="false"/>
      <!-- If true, then the location will be saved in the auto-save cache when the user navigates
           out if (a) it is in edit mode, and (b) there is any unsaved data. The location is
           restored from the cache when the user returns to it -->
      <xsd:attribute name="autosaveable" type="xsd:boolean" default="true"/>
      <!-- Gosu expression to run when the location is canceled but before the rest of the cancel
           completes. -->
      <xsd:attribute name="beforeCancel" type="xsd:string"/>
      <!-- Gosu expression to run before the location is updated but after the UI is validated. -->
      <xsd:attribute name="beforeCommit" type="xsd:string"/>
      <!-- Gosu expression to run before the location is updated and before the UI is validated. -->
      <xsd:attribute name="beforeValidate" type="xsd:string"/>
      <!-- The optional browser title of the location. If specified, the value will be displayed
           in the browser window title when this location is being viewed in the main content
           area. -->
      <xsd:attribute name="browserTitle" type="xsd:string"/>
      <!-- A boolean expression which, if false, prevents the user from putting the location
           into edit mode -->
      <xsd:attribute name="canEdit" type="xsd:string"/>
      <!-- A boolean expression which, if false, means the user has no permission to visit the
           location, and links to the location will be either invisible or grayed out, depending
           on context. -->
      <xsd:attribute name="canVisit" type="xsd:string"/>
      <!-- If false, the location can still be kept in the autosave cache, but does not appear
           as unsaved work to the user (with link highlighting etc.). -->
      <xsd:attribute name="countsAsWork" type="xsd:boolean" default="true"/>
      <!-- Use this to add your own comments to this element. For now this attribute does nothing;
           later if we create a "UI dictionary" or PCF editor, the description will show up there. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- An optional boolean expression, if specified, determines whether validation issues
           on a particular entity should be fixed on this page. The entity instance with validation
           issues is exposed to this expression as "VALUE". For example, "VALUE typeis entity.MyBean".
           If not specified, validation issues on any entity that matches type of the "validationParameter"
           should be fixed on this page.<br> No point to specify this attribute, if "validationParameter"
           is not defined. -->
      <xsd:attribute name="handlesValidationIssue" type="xsd:string"/>
      <!-- If true, the left navigation menu will be hidden when there are no menulinks -->
      <xsd:attribute name="hideLeftNavIfEmpty" type="xsd:boolean" default="false"/>
      <!-- ID of this Location. Must be unique among all Locations. -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <!-- ID of the InfoBar content for this location. Normally not specifed, so that the page
           inherits the infoBar from its ancestor LocationGroup. -->
      <xsd:attribute name="infoBar" type="xsd:string"/>
      <!-- This expression, when specified, appends a link to the concurrent data change error
           message. The text of the link will be the value of the display key Java.Message.ConcurrentDataChange.Link.
           Clicking on the link will execute the given expression. A concurrent data change error
           happens if a user's changes cannot be committed because they clash with concurrent
           changes by a different user. -->
      <xsd:attribute name="onConcurrentDataChange" type="xsd:string"/>
      <!-- A Gosu expression to run when this location is resumed from the autosave cache. -->
      <xsd:attribute name="onResume" type="xsd:string"/>
      <!-- Reference to the "parent location" of this location, to specifiy the hierarchy of
           pcf locations. Used for the automatically generated "up link" in the title bar, highlighting
           of current menu links, and grouping items under "Unsaved Work". Usually the parent
           is the location right above this location in the application hierarchy, i.e. the parent
           of "ActivityDetailWorksheet" is "ClaimWorkplan", the parent of "Desktop Activities"
           is "Desktop" and "Desktop" has no parent at all. -->
      <xsd:attribute name="parent" type="xsd:string"/>
      <!-- If true, creates an "up link" icon in the title bar that links to the parent location.
            The upLink will pop the current location off the stack if the parent location is
           in the stack; otherwise, the upLink will "go" to the parent location, passing all
           of the symbols from the current page in a manner consistent with the "go" action. -->
      <xsd:attribute name="showUpLink" type="xsd:boolean" default="false"/>
      <!-- Gosu expression to run when the location goes into edit mode. -->
      <xsd:attribute name="startEditing" type="xsd:string"/>
      <!-- Boolean expression which, if true, puts the location in edit mode as soon as the user
           enters it -->
      <xsd:attribute name="startInEditMode" type="xsd:string" default="false"/>
      <!-- The title of the location.  The title is shown in the top title bar, unless the Screen
           uses a special TitleBar element to override it. -->
      <xsd:attribute name="title" type="xsd:string" use="required"/>
      <!-- If false, the page will disable the automatic validation that happens on every commit.
            Only set this attribute to false if you're really sure you know what you're doing. -->
      <xsd:attribute name="validateOnBundleCommit" type="xsd:boolean" default="true"/>
      <!-- The name of an argument on a LocationEntryPoint, used for fixing entity validation
           issues. -->
      <xsd:attribute name="validationParameter" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <xsd:element name="LoginSubmitButton">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="LayoutConfig" minOccurs="0" maxOccurs="1"/>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="AddMenuItem"/>
          <xsd:element ref="AddMenuItemIterator"/>
          <xsd:element ref="MenuItem"/>
          <xsd:element ref="MenuItemDivider"/>
          <xsd:element ref="MenuItemIterator"/>
          <xsd:element ref="MenuItemSetRef"/>
          <xsd:element ref="MenuItemTree"/>
          <xsd:element ref="PickerMenuItem"/>
          <xsd:element ref="SearchItem"/>
        </xsd:choice>
      </xsd:sequence>
      <!-- The action to invoke when this button is clicked by the user. -->
      <xsd:attribute name="action" type="xsd:string"/>
      <!-- Alignment of the widget ("left", "right", or "center") -->
      <xsd:attribute name="align" type="WidgetAlignment"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- Boolean expression which, if false, grays out the widget and all its children -->
      <xsd:attribute name="available" type="xsd:string"/>
      <!-- If true then the label is displayed in bold text. -->
      <xsd:attribute name="boldLabel" type="xsd:boolean" default="false"/>
      <!-- If true then the value is displayed in bold text when read-only. -->
      <xsd:attribute name="boldValue" type="xsd:boolean" default="false"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- If true, the button is the default for the page, and will be "clicked" when the user
           presses Enter -->
      <xsd:attribute name="default" type="xsd:boolean" default="false"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- Should be 'true', 'inline' or 'attachment' if the action taken by this widget is to
           download a file. -->
      <xsd:attribute name="download" type="Download"/>
      <!-- If true, instead of showing a hierarchical menu, the widget will show a single menu
           with sub-menus grouped under headers. -->
      <xsd:attribute name="flatten" type="xsd:boolean" default="false"/>
      <!-- If true, this button will not be shown in read-only mode if it has child MenuItems
           but no action. -->
      <xsd:attribute name="hideChildrenIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- If set to true, this widget will not be displayed when the action is disabled. Default
           to true. -->
      <xsd:attribute name="hideIfDisabled" type="xsd:string" default="true"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- The name of a .png file, or .svg file, or font glyph. The Widget's iconType determines
           which one. -->
      <xsd:attribute name="icon" type="xsd:string"/>
      <!-- Color of the icon. If not set will default to its font color. -->
      <xsd:attribute name="iconColor" type="xsd:string"/>
      <!-- An enumeration of icon types that determine what the 'icon' property on the widget
           is referring to. -->
      <xsd:attribute name="iconType" type="IconTypeEnum"/>
      <!-- Reference ID of the widget.  This does not have to be globally unique; it only has
           to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <!-- Label to render. -->
      <xsd:attribute name="label" type="xsd:string"/>
      <!-- Boolean expression which, if true, causes the label portion of the Input to be rendered
           above the value -->
      <xsd:attribute name="labelAbove" type="xsd:string" default="false"/>
      <!-- Custom extension CSS style class to apply to the label. -->
      <xsd:attribute name="labelStyleClass" type="xsd:string"/>
      <!-- The number of child MenuItems to show in each column.  If not specified, all children
           will be shown in a single column. -->
      <xsd:attribute name="numEntriesPerColumn" type="xsd:integer" default="0"/>
      <!-- Keyboard shortcut character in the form of "Q" or "ShiftQ"; the "Alt" key is implicit -->
      <xsd:attribute name="shortcut" type="xsd:string"/>
      <!-- The value to be displayed on the button. -->
      <xsd:attribute name="value" type="xsd:string" use="required"/>
      <!-- CSS max-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionMaxWidth" type="xsd:string"/>
      <!-- CSS min-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionMinWidth" type="xsd:string"/>
      <!-- CSS width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionWidth" type="xsd:string"/>
      <!-- The type of the value expression. -->
      <xsd:attribute name="valueType" type="xsd:string" default="java.lang.String"/>
      <!-- If used instead of "editable", specifies whether the Input is editable when data is
           being created -->
      <xsd:attribute name="visible" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- A gallery node used to display MediaObjects. -->
  <xsd:element name="MediaGallery">
    <xsd:complexType>
      <xsd:choice minOccurs="0" maxOccurs="unbounded"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- If true, the Widget will have a border around it. Purely a visual effect. -->
      <xsd:attribute name="border" type="xsd:boolean" default="false"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- CSS height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="height" type="xsd:string"/>
      <!-- If true, then the data table section of each gallery entry will be hidden. -->
      <xsd:attribute name="hideData" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- If true, independent of 'panel inner spacing', the container will left indent its
           children by a fixed amount. This is useful for displaying nested data throughout a
           page. Purely a visual effect. -->
      <xsd:attribute name="leftIndent" type="xsd:boolean" default="false"/>
      <!-- CSS max-height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="maxHeight" type="xsd:string"/>
      <!-- CSS max-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="maxWidth" type="xsd:string"/>
      <!-- A list of MediaImageExifObjects containing the relevant data to display as entries
           in the gallery. -->
      <xsd:attribute name="mediaObjects" type="xsd:string"/>
      <!-- CSS min-height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="minHeight" type="xsd:string"/>
      <!-- CSS min-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="minWidth" type="xsd:string"/>
      <!-- Number of Media Objects to display per page. Size 0 will show all. Defaults to 0 -->
      <xsd:attribute name="pageSize" type="xsd:integer"/>
      <!-- In general, determines the amount of spacing INSIDE of the Panel in all 4 directions:
           top, right, bottom, left. However, different Panels may have requirements that prevent
           all 4 directions from being modified. -->
      <xsd:attribute name="panelInnerSpacing" type="WidgetSpacing" default="none"/>
      <!-- In general, determines the amount of spacing OUTSIDE of the Panel in all 4 directions:
           top, right, bottom, left. However, different Panels may have requirements that prevent
           all 4 directions from being modified. -->
      <xsd:attribute name="panelOuterSpacing" type="WidgetSpacing" default="normal"/>
      <!-- The style of the Panel. In general, this refers to the background color, but some
           styles can change other aspects such as font color, spacing, or filters. -->
      <xsd:attribute name="panelStyle" type="xsd:string"/>
      <!-- Title for the widget -->
      <xsd:attribute name="title" type="xsd:string"/>
      <!-- Boolean expression which, if false, completely hides the widget. -->
      <xsd:attribute name="visible" type="xsd:string"/>
      <!-- CSS width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="width" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- A widget used to upload media based files. -->
  <xsd:element name="MediaUploader">
    <xsd:complexType>
      <xsd:choice minOccurs="0" maxOccurs="unbounded"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- If true, the Widget will have a border around it. Purely a visual effect. -->
      <xsd:attribute name="border" type="xsd:boolean" default="false"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- If true, then each file import row in the Media Uploader will have an 'information'
           field associated with it that allows user input. -->
      <xsd:attribute name="hasInformationInput" type="xsd:boolean" default="false"/>
      <!-- CSS height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="height" type="xsd:string"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- If true, independent of 'panel inner spacing', the container will left indent its
           children by a fixed amount. This is useful for displaying nested data throughout a
           page. Purely a visual effect. -->
      <xsd:attribute name="leftIndent" type="xsd:boolean" default="false"/>
      <!-- CSS max-height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="maxHeight" type="xsd:string"/>
      <!-- CSS max-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="maxWidth" type="xsd:string"/>
      <!-- CSS min-height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="minHeight" type="xsd:string"/>
      <!-- CSS min-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="minWidth" type="xsd:string"/>
      <!-- In general, determines the amount of spacing INSIDE of the Panel in all 4 directions:
           top, right, bottom, left. However, different Panels may have requirements that prevent
           all 4 directions from being modified. -->
      <xsd:attribute name="panelInnerSpacing" type="WidgetSpacing" default="none"/>
      <!-- In general, determines the amount of spacing OUTSIDE of the Panel in all 4 directions:
           top, right, bottom, left. However, different Panels may have requirements that prevent
           all 4 directions from being modified. -->
      <xsd:attribute name="panelOuterSpacing" type="WidgetSpacing" default="normal"/>
      <!-- The style of the Panel. In general, this refers to the background color, but some
           styles can change other aspects such as font color, spacing, or filters. -->
      <xsd:attribute name="panelStyle" type="xsd:string"/>
      <!-- Title for the widget -->
      <xsd:attribute name="title" type="xsd:string"/>
      <!-- The value this element binds to.  If the element is editable then this value is both
           read from and written to (unless "setter" is defined). -->
      <xsd:attribute name="value" type="xsd:string"/>
      <!-- Boolean expression which, if false, completely hides the widget. -->
      <xsd:attribute name="visible" type="xsd:string"/>
      <!-- CSS width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="width" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- An element containing all "action links" in the left menu bar -->
  <xsd:element name="MenuActions">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="Require" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="Variable" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:choice>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="AddMenuItem"/>
          <xsd:element ref="AddMenuItemIterator"/>
          <xsd:element ref="MenuItem"/>
          <xsd:element ref="MenuItemDivider"/>
          <xsd:element ref="MenuItemIterator"/>
          <xsd:element ref="MenuItemSetRef"/>
          <xsd:element ref="MenuItemTree"/>
          <xsd:element ref="PickerMenuItem"/>
          <xsd:element ref="SearchItem"/>
        </xsd:choice>
        <xsd:element ref="Code" minOccurs="0" maxOccurs="1"/>
      </xsd:sequence>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- If true, instead of showing a hierarchical menu, the widget will show a single menu
           with sub-menus grouped under headers. -->
      <xsd:attribute name="flatten" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- (Optional) reference ID of the widget.  This does not have to be globally unique;
           it only has to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string"/>
      <!-- An optional String which, if specified, means that any element dynamically including
           this widget must specify the same mode.  There is also a special mode "default" you
           can use which means "Use this widget if no widget with the specified mode exists".
            You can also have this widget match more than one mode by separating mode strings
           with a | character. -->
      <xsd:attribute name="mode" type="xsd:string"/>
      <!-- The number of child MenuItems to show in each column.  If not specified, all children
           will be shown in a single column. -->
      <xsd:attribute name="numEntriesPerColumn" type="xsd:integer" default="0"/>
      <!-- An optional attribute, if set, defer sub menu generation until user tries to open
           the menu. DO NOT set this flag unless the sub menu of this widget is very expensive
           to generate. Setting this flag will reduce time to load the page, however require
           fetching additional info from server in the background, when the menu gets opened
           for the first time after page loaded. -->
      <xsd:attribute name="subMenuOnDemand" type="xsd:boolean" default="false"/>
      <!-- Boolean expression which, if false, completely hides the widget and all its children -->
      <xsd:attribute name="visible" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- An action item in a hierarchical menu -->
  <xsd:element name="MenuItem">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="AddMenuItem"/>
          <xsd:element ref="AddMenuItemIterator"/>
          <xsd:element ref="MenuItem"/>
          <xsd:element ref="MenuItemDivider"/>
          <xsd:element ref="MenuItemIterator"/>
          <xsd:element ref="MenuItemSetRef"/>
          <xsd:element ref="MenuItemTree"/>
          <xsd:element ref="PickerMenuItem"/>
          <xsd:element ref="SearchItem"/>
        </xsd:choice>
      </xsd:sequence>
      <!-- Action performed by this widget.  By default, this is a Gosu expression.  Other types
           of actions can be specified by using the following prefixes: http: causes the browser
           to follow the specified plain http link https: causes the browser to follow the specified
           plain https link javascript: causes the browser to execute the specified javascript
           logout: logs out of the application -->
      <xsd:attribute name="action" type="xsd:string"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- Boolean expression which, if false, grays out the widget and all its children and
           makes them unclickable -->
      <xsd:attribute name="available" type="xsd:string"/>
      <!-- An optional boolean expression. If true, this item will not be displayed as checked.
           Default to false. -->
      <xsd:attribute name="checked" type="xsd:string"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- Confirmation message to show before performing the action -->
      <xsd:attribute name="confirmMessage" type="xsd:string"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- Should be 'true', 'inline' or 'attachment' if the action taken by this widget is to
           download a file. -->
      <xsd:attribute name="download" type="Download"/>
      <!-- An optional boolean expression. If returns true, this widget will not be displayed
           when the action is disabled. Default to true. -->
      <xsd:attribute name="hideIfDisabled" type="xsd:string"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- The name of a .png file, or .svg file, or font glyph. The Widget's iconType determines
           which one. -->
      <xsd:attribute name="icon" type="xsd:string"/>
      <!-- Color of the icon. If not set will default to its font color. -->
      <xsd:attribute name="iconColor" type="xsd:string"/>
      <!-- An enumeration of icon types that determine what the 'icon' property on the widget
           is referring to. -->
      <xsd:attribute name="iconType" type="IconTypeEnum"/>
      <!-- Reference ID of the widget.  This does not have to be globally unique; it only has
           to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <!-- Label to render. -->
      <xsd:attribute name="label" type="xsd:string"/>
      <!-- If this Widget can be placed in a minimized state, this minimizedLabel text will be
           used. Otherwise, the Widget will use its global shortcut key, or icon if available. -->
      <xsd:attribute name="minimizedLabel" type="xsd:string"/>
      <!-- Default text answer to the prompt message -->
      <xsd:attribute name="promptDefault" type="xsd:string"/>
      <!-- Question to ask the user before performing the action. The answer is exposed to the
           action as "web.WebUtil.ActionEventParameter". -->
      <xsd:attribute name="promptQuestion" type="xsd:string"/>
      <!-- If true, the page will scroll back to the original scroll position after the action.
           Should only be set if the action stays on the same page and the page layout does not
           change. Default to false -->
      <xsd:attribute name="retainScrollPosition" type="xsd:boolean" default="false"/>
      <!-- Keyboard shortcut character in the form of "Q" or "ShiftQ"; the "Alt" key is implicit -->
      <xsd:attribute name="shortcut" type="xsd:string"/>
      <!-- Gosu expression which determines whether or not the confirmation message should be
           shown -->
      <xsd:attribute name="showConfirmMessage" type="xsd:string" default="true"/>
      <!-- An optional attribute, if set, defer sub menu generation until user tries to open
           the menu. Do not set this flag if this is an immediate child item under a flattened
           menu, because child items are still unknown at the time they need to be flattened
           onto the parent menu. DO NOT set this flag unless the sub menu of this widget is very
           expensive to generate. Setting this flag will reduce time to load the page, however
           require fetching additional info from server in the background, when the menu gets
           opened for the first time after page loaded. -->
      <xsd:attribute name="subMenuOnDemand" type="xsd:boolean" default="false"/>
      <!-- An expression which, if defined, is evaluated to create help info if the user hovers
           the mouse over the button -->
      <xsd:attribute name="tooltip" type="xsd:string"/>
      <!-- Boolean expression which, if false, completely hides the widget and all its children -->
      <xsd:attribute name="visible" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- Simple divider between a set of menu items. Only works when used for "menu links"
       in the left menu bar. -->
  <xsd:element name="MenuItemDivider">
    <xsd:complexType>
      <xsd:choice minOccurs="0" maxOccurs="unbounded"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- (Optional) reference ID of the widget.  This does not have to be globally unique;
           it only has to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- Creates as many copies of its MenuItem content as there are components in the array
       referenced by "value".  Supplies the component value to the created content as "elementName".
       Used inside a hierarchical menu. -->
  <xsd:element name="MenuItemIterator">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="IteratorSort" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:choice minOccurs="1" maxOccurs="unbounded">
          <xsd:element ref="AddMenuItem"/>
          <xsd:element ref="AddMenuItemIterator"/>
          <xsd:element ref="MenuItem"/>
          <xsd:element ref="MenuItemDivider"/>
          <xsd:element ref="MenuItemIterator"/>
          <xsd:element ref="MenuItemSetRef"/>
          <xsd:element ref="MenuItemTree"/>
          <xsd:element ref="PickerMenuItem"/>
          <xsd:element ref="SearchItem"/>
        </xsd:choice>
      </xsd:sequence>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- As each element in the array result of "value" is displayed, it is exposed as a symbol
           with the name "elementName", which the contents of this iterator can refer to -->
      <xsd:attribute name="elementName" type="xsd:string" use="required"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- (Optional) reference ID of the widget.  This does not have to be globally unique;
           it only has to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string"/>
      <!-- Lets you manually specify the type of element exposed as "elementName".  This is useful
           if you have special knowledge about the type of element returned by "value": for example,
           if the field referred to returns an array of Contacts but you happen to know that
           they are guaranteed to all be Persons -->
      <xsd:attribute name="type" type="xsd:string"/>
      <!-- A Gosu expression that evaluates to the elements over which to iterate. Must evaluate
           to an Object array or a IQueryBeanResult. -->
      <xsd:attribute name="value" type="xsd:string" use="required"/>
      <!-- The type of the value expression. -->
      <xsd:attribute name="valueType" type="xsd:string" use="required"/>
      <!-- Boolean expression which, if false, completely hides the widget and all its children -->
      <xsd:attribute name="visible" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- A reusable set of MenuItems. -->
  <xsd:element name="MenuItemSet">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="Require" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="Variable" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:choice>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="AddMenuItem"/>
          <xsd:element ref="AddMenuItemIterator"/>
          <xsd:element ref="MenuItem"/>
          <xsd:element ref="MenuItemDivider"/>
          <xsd:element ref="MenuItemIterator"/>
          <xsd:element ref="MenuItemSetRef"/>
          <xsd:element ref="MenuItemTree"/>
          <xsd:element ref="PickerMenuItem"/>
          <xsd:element ref="SearchItem"/>
        </xsd:choice>
        <xsd:element ref="Code" minOccurs="0" maxOccurs="1"/>
      </xsd:sequence>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- (Optional) reference ID of the widget.  This does not have to be globally unique;
           it only has to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string"/>
      <!-- An optional String which, if specified, means that any element dynamically including
           this widget must specify the same mode.  There is also a special mode "default" you
           can use which means "Use this widget if no widget with the specified mode exists".
            You can also have this widget match more than one mode by separating mode strings
           with a | character. -->
      <xsd:attribute name="mode" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- Includes a MenuItemSet by reference. -->
  <xsd:element name="MenuItemSetRef">
    <xsd:complexType>
      <xsd:choice minOccurs="0" maxOccurs="unbounded"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- The ID of the MenuItemSet to include by reference. -->
      <xsd:attribute name="def" type="xsd:string" use="required"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- (Optional) reference ID of the widget.  This does not have to be globally unique;
           it only has to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string"/>
      <!-- If defined, "mode" is evaluated and its result is converted to a String; the panel
           will be loaded whose "mode" matches the evaluated "mode" of this element.  If no panel
           is found with a matching "mode", then the panel with mode="default" is used; if there
           is no default a runtime exception is thrown -->
      <xsd:attribute name="mode" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- Creates as many copies of its MenuItem content as there are components in the array
       referenced by "value".  Supplies the component value to the created content as "elementName".
       Used inside a hierarchical menu. -->
  <xsd:element name="MenuItemTree">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="MenuItem" minOccurs="1" maxOccurs="1"/>
      </xsd:sequence>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- Gosu expression that takes an item and evaluates it to -->
      <xsd:attribute name="children" type="xsd:string" use="required"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- Whether or not to disable the action for non-leaf nodes.  By default this is true,
           meaning that non-leaf nodes will not have an action listener. -->
      <xsd:attribute name="disableActionForNonLeafNodes" type="xsd:boolean" default="true"/>
      <!-- As each element in the array result of "value" is displayed, it is exposed as a symbol
           with the name "elementName", which the contents of this iterator can refer to -->
      <xsd:attribute name="elementName" type="xsd:string" use="required"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- (Optional) reference ID of the widget.  This does not have to be globally unique;
           it only has to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string"/>
      <!-- Lets you manually specify the type of element exposed as "elementName".  This is useful
           if you have special knowledge about the type of element returned by "value": for example,
           if the field referred to returns an array of Contacts but you happen to know that
           they are guaranteed to all be Persons -->
      <xsd:attribute name="type" type="xsd:string"/>
      <!-- A Gosu expression that evaluates to the elements over which to iterate. Must evaluate
           to an Object array or a IQueryBeanResult. -->
      <xsd:attribute name="value" type="xsd:string" use="required"/>
      <!-- The type of the value expression. -->
      <xsd:attribute name="valueType" type="xsd:string" use="required"/>
      <!-- Boolean expression which, if false, completely hides the widget and all its children -->
      <xsd:attribute name="visible" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- An element containing all "menu links" in the left menu bar -->
  <xsd:element name="MenuLinks">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="Require" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="Variable" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:choice>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="AddMenuItem"/>
          <xsd:element ref="AddMenuItemIterator"/>
          <xsd:element ref="MenuItem"/>
          <xsd:element ref="MenuItemDivider"/>
          <xsd:element ref="MenuItemIterator"/>
          <xsd:element ref="MenuItemSetRef"/>
          <xsd:element ref="MenuItemTree"/>
          <xsd:element ref="PickerMenuItem"/>
          <xsd:element ref="SearchItem"/>
        </xsd:choice>
        <xsd:element ref="Code" minOccurs="0" maxOccurs="1"/>
      </xsd:sequence>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- (Optional) reference ID of the widget.  This does not have to be globally unique;
           it only has to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string"/>
      <!-- An optional String which, if specified, means that any element dynamically including
           this widget must specify the same mode.  There is also a special mode "default" you
           can use which means "Use this widget if no widget with the specified mode exists".
            You can also have this widget match more than one mode by separating mode strings
           with a | character. -->
      <xsd:attribute name="mode" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- Like MenuLinks, but supplies a TreeView instead of regular links -->
  <xsd:element name="MenuTree">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="Require" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element ref="Variable" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element ref="TreeView" minOccurs="1" maxOccurs="1"/>
      </xsd:sequence>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- CSS height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="height" type="xsd:string"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- (Optional) reference ID of the widget.  This does not have to be globally unique;
           it only has to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string"/>
      <!-- CSS max-height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="maxHeight" type="xsd:string"/>
      <!-- CSS max-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="maxWidth" type="xsd:string"/>
      <!-- CSS min-height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="minHeight" type="xsd:string"/>
      <!-- CSS min-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="minWidth" type="xsd:string"/>
      <!-- Boolean expression which, if false, completely hides the widget and all its children -->
      <xsd:attribute name="visible" type="xsd:string"/>
      <!-- CSS width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="width" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- A widget that displays runtime web messages in the UI. If a Screen does not contain
       a child Messages element explicitly, all messages of the containing location will
       be rendered at the beginning of the Screen. The only time you want to add this widget
       into a PCF is when you need to change where messages are displayed for a particular
       Screen. -->
  <xsd:element name="Messages">
    <xsd:complexType>
      <xsd:choice minOccurs="0" maxOccurs="unbounded"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- This widget displays all messages from the containing Location by default. If "useScope"
           is set to true, this widget will display messages from the current Location Group
           instead. -->
      <xsd:attribute name="groupScope" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- (Optional) reference ID of the widget.  This does not have to be globally unique;
           it only has to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- A top level cell. -->
  <xsd:element name="ModalCell">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="Require" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="Variable" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:choice>
        <xsd:choice minOccurs="0" maxOccurs="1">
          <xsd:element ref="AddressBookContactCell"/>
          <xsd:element ref="AltGroupCell"/>
          <xsd:element ref="AltUserCell"/>
          <xsd:element ref="AssigneeCell"/>
          <xsd:element ref="BooleanRadioCell"/>
          <xsd:element ref="CheckBoxCell"/>
          <xsd:element ref="ClaimAssociationsCell"/>
          <xsd:element ref="CurrencyCell"/>
          <xsd:element ref="DateCell"/>
          <xsd:element ref="EmptyCell"/>
          <xsd:element ref="FileCell"/>
          <xsd:element ref="FormatCell"/>
          <xsd:element ref="GroupCell"/>
          <xsd:element ref="IndustryCodeCell"/>
          <xsd:element ref="ModifierCell"/>
          <xsd:element ref="MonetaryAmountCell"/>
          <xsd:element ref="OrgCell"/>
          <xsd:element ref="PickerCell"/>
          <xsd:element ref="PrivacyCell"/>
          <xsd:element ref="RadioButtonCell"/>
          <xsd:element ref="RangeCell"/>
          <xsd:element ref="RangeRadioCell"/>
          <xsd:element ref="RiskClassCell"/>
          <xsd:element ref="TextAreaCell"/>
          <xsd:element ref="TextCell"/>
          <xsd:element ref="TypeKeyCell"/>
          <xsd:element ref="UserCell"/>
        </xsd:choice>
        <xsd:element ref="Code" minOccurs="0" maxOccurs="1"/>
      </xsd:sequence>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- Reference ID of the widget.  This does not have to be globally unique; it only has
           to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <!-- An optional String which, if specified, means that any element dynamically including
           this widget must specify the same mode.  There is also a special mode "default" you
           can use which means "Use this widget if no widget with the specified mode exists".
            You can also have this widget match more than one mode by separating mode strings
           with a | character. -->
      <xsd:attribute name="mode" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- Includes a ModalCell by reference. -->
  <xsd:element name="ModalCellRef">
    <xsd:complexType>
      <xsd:choice minOccurs="0" maxOccurs="unbounded"/>
      <!-- Specifies the alignment of this cell. Valid values: "left", "right", or "center".
           If no value is specified, the default alignment is determined by the value type ("center"
           for boolean values; "right" for numeric values; "left" for other value types). -->
      <xsd:attribute name="align" type="WidgetAlignment"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- The HTML colspan attribute, lets this cell span across multiple columns of other rows.
           Useful for generating a "group header" row above a RowIterator. The default value
           is 1. A value greater than 1 is only allowed when the containing row is not iterated
           by a RowIterator. -->
      <xsd:attribute name="colspan" type="xsd:integer"/>
      <!-- The ID of the ModalCell to include by reference. -->
      <xsd:attribute name="def" type="xsd:string" use="required"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- Boolean expression which, if false, makes this widget and all its children read-only -->
      <xsd:attribute name="editable" type="xsd:string" default="false"/>
      <!-- An optional boolean expression, if returns true, this widget will get focus when start
           editing the containing location. -->
      <xsd:attribute name="focusOnStartEditing" type="xsd:string"/>
      <!-- An expression that returns a GWColor instance. Legacy: this method can instead return
           a string corresponding to a CSS Specification Level 3 color name. See GWColor for
           more details. -->
      <xsd:attribute name="fontColor" type="xsd:string"/>
      <!-- If true, this Cell and any other grow-enabled Cell will expand to fill remaining space
           in the ListViewPanel. Only applicable when the ListView is set to stretch. -->
      <xsd:attribute name="grow" type="xsd:boolean" default="false"/>
      <!-- If true, generates a checkbox at the beginning of this cell. This checkbox can be
           used to check this entry in the nearest containing Iterator. Defaults to false. Only
           allowed if this cell is inside a CellIterator or under a Row inside a RowIterator. -->
      <xsd:attribute name="hasCheckBox" type="xsd:boolean" default="false"/>
      <!-- CSS height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="height" type="xsd:string"/>
      <!-- A Gosu expression which, if defined, is evaluated to create help info that guides
           the user to edit this widget. The help info will show up if the user hovers the mouse
           over or focuses on the widget, when the widget is in edit mode. -->
      <xsd:attribute name="helpText" type="xsd:string"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- If defined, is the icon that will show in the header. -->
      <xsd:attribute name="icon" type="xsd:string"/>
      <!-- Color of the icon. If not set will default to its font color. -->
      <xsd:attribute name="iconColor" type="xsd:string"/>
      <!-- An enumeration of icon types that determine what the 'icon' property on the widget
           is referring to. -->
      <xsd:attribute name="iconType" type="IconTypeEnum"/>
      <!-- (Optional) reference ID of the widget.  This does not have to be globally unique;
           it only has to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string"/>
      <!-- An optional expression. If specified, a header cell with the specified value will
           be rendered for this column. Only applicable when the containing row is iterated by
           a RowIterator. -->
      <xsd:attribute name="label" type="xsd:string"/>
      <!-- Custom extension CSS style class to apply to the header. -->
      <xsd:attribute name="labelStyleClass" type="xsd:string"/>
      <!-- CSS max-height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="maxHeight" type="xsd:string"/>
      <!-- CSS max-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="maxWidth" type="xsd:string"/>
      <!-- CSS min-height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="minHeight" type="xsd:string"/>
      <!-- CSS min-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="minWidth" type="xsd:string"/>
      <!-- If defined, "mode" is evaluated and its result is converted to a String; the panel
           will be loaded whose "mode" matches the evaluated "mode" of this element.  If no panel
           is found with a matching "mode", then the panel with mode="default" is used; if there
           is no default a runtime exception is thrown -->
      <xsd:attribute name="mode" type="xsd:string"/>
      <!-- Relative width when printing to PDF. All widths are relative to the widths of the
           other columns in the ListView -->
      <xsd:attribute name="printWidth" type="xsd:string" default="1"/>
      <!-- If true, then the cell must be filled out by the user -->
      <xsd:attribute name="required" type="xsd:string"/>
      <!-- Extra "alt" text to show when the user hovers the mouse over the header cell of this
           column. -->
      <xsd:attribute name="tooltip" type="xsd:string"/>
      <!-- The label of this cell to be used when it has validation issues. Not needed when this
           cell has a "label". Required if the cell is editable but does not have a "label". -->
      <xsd:attribute name="validationLabel" type="xsd:string"/>
      <!-- Boolean expression which, if false, completely hides the widget and all its children -->
      <xsd:attribute name="visible" type="xsd:string"/>
      <!-- CSS width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="width" type="xsd:string"/>
      <!-- If true, allows Header Cell text content to wrap. Defaults to true. -->
      <xsd:attribute name="wrapLabel" type="xsd:boolean" default="false"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- A Modifier Cell -->
  <xsd:element name="ModifierCell">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="Reflect" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element ref="ColumnFooter" minOccurs="0" maxOccurs="1"/>
        <xsd:element ref="PostOnChange" minOccurs="0" maxOccurs="1"/>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="AddMenuItem"/>
          <xsd:element ref="AddMenuItemIterator"/>
          <xsd:element ref="MenuItem"/>
          <xsd:element ref="MenuItemDivider"/>
          <xsd:element ref="MenuItemIterator"/>
          <xsd:element ref="MenuItemSetRef"/>
          <xsd:element ref="MenuItemTree"/>
          <xsd:element ref="PickerMenuItem"/>
          <xsd:element ref="SearchItem"/>
        </xsd:choice>
      </xsd:sequence>
      <!-- An optional action to take when the user clicks the value of this widget when the
           value is not being edited. See ActionBase for details. When specified, the value of
           this widget will be rendered as a link when the value is not being edited. -->
      <xsd:attribute name="action" type="xsd:string"/>
      <!-- An optional boolean expression controlling whether the action should be available
           in this specific context when in read-only mode.  This is ignored if in edit mode
           or if the action is null.  This attribute will be deprecated in a future release,
           please use the 'available' attribute instead.  To disable action in readonly mode,
           you can set available=&quot;CurrentLocation.InEditMode || &lt;action-available-condition&gt;&quot; -->
      <xsd:attribute name="actionAvailable" type="xsd:string"/>
      <!-- Specifies the alignment of this cell. Valid values: "left", "right", or "center".
           If no value is specified, the default alignment is determined by the value type ("center"
           for boolean values; "right" for numeric values; "left" for other value types). -->
      <xsd:attribute name="align" type="WidgetAlignment"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- Boolean expression which, if false, grays out the widget and all its children -->
      <xsd:attribute name="available" type="xsd:string"/>
      <!-- If true, renders the cell contents in bold text. Defaults to false. -->
      <xsd:attribute name="bold" type="xsd:boolean" default="false"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- The HTML colspan attribute, lets this cell span across multiple columns of other rows.
           Useful for generating a "group header" row above a RowIterator. The default value
           is 1. A value greater than 1 is only allowed when the containing row is not iterated
           by a RowIterator. -->
      <xsd:attribute name="colspan" type="xsd:integer"/>
      <!-- The confirmation message to show when "showConfirmMessage" is set. If not specified,
           a standard message will be used. -->
      <xsd:attribute name="confirmMessage" type="xsd:string"/>
      <!-- A Gosu expression used to convert the value picked from a popup before set it into
           the model value of this widget. The picked value will be exposed as a symbol with
           the name "PickedValue" -->
      <xsd:attribute name="conversionExpression" type="xsd:string"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- Boolean expression which, if false, makes this widget and all its children read-only -->
      <xsd:attribute name="editable" type="xsd:string" default="false"/>
      <!-- If true, allows the user to sort the values in the column by clicking on the header.
            Only applicable when the containing row is iterated by a RowIterator. -->
      <xsd:attribute name="enableSort" type="xsd:boolean" default="true"/>
      <!-- If true, this cell will the last cell in the row to be navigated to via the ENTER
           key. Only applicable when "CellNavOnEnter" or "QuickAddOnEnter" is set. Normally not
           specified. Default to false. -->
      <xsd:attribute name="endOfCellNav" type="xsd:boolean" default="false"/>
      <!-- If true, instead of showing a hierarchical menu, the widget will show a single menu
           with sub-menus grouped under headers. -->
      <xsd:attribute name="flatten" type="xsd:boolean" default="false"/>
      <!-- An optional boolean expression, if returns true, this widget will get focus when start
           editing the containing location. -->
      <xsd:attribute name="focusOnStartEditing" type="xsd:string"/>
      <!-- An expression that returns a GWColor instance. Legacy: this method can instead return
           a string corresponding to a CSS Specification Level 3 color name. See GWColor for
           more details. -->
      <xsd:attribute name="fontColor" type="xsd:string"/>
      <!-- An optional expression. If specified, a footer cell with the specified value will
           be rendered for this column. Only applicable when the containing Row is iterated by
           a RowIterator. Not allowed when "footerSumValue" is specified. -->
      <xsd:attribute name="footerLabel" type="xsd:string"/>
      <!-- An optional expression, if specified, will be used as format pattern for the footer
           sum value. Normally not specified, so that the "format" and\or "formatType" of the
           cell value will be applied to footer sum value. Only applicable when "footerSumValue"
           is specified. The result of this expression must conform to the number format defined
           in java.text.DecimalFormat. -->
      <xsd:attribute name="footerSumFormat" type="xsd:string"/>
      <!-- An optional Numeric expression. If specified, a footer cell that sums the specified
           value for all cells in this column will be rendered. Pagination of the list does not
           affect the sum value. Only applicable when the containing row is iterated by a RowIterator.
           Not allowed when "footerLabel" is specified. -->
      <xsd:attribute name="footerSumValue" type="xsd:string"/>
      <!-- How the value is formatted; options include "general", "currency", and "email".  See
           the formatType enumeration. -->
      <xsd:attribute name="formatType" type="FormatType"/>
      <!-- If true, the ListView will be grouped by this cell upon entering the page. Only one
           grouped cell is allowed at any given time and it is only applicable when the column
           is sortable. -->
      <xsd:attribute name="groupedOnEnter" type="xsd:string"/>
      <!-- If true, this Cell and any other grow-enabled Cell will expand to fill remaining space
           in the ListViewPanel. Only applicable when the ListView is set to stretch. -->
      <xsd:attribute name="grow" type="xsd:boolean" default="false"/>
      <!-- If true, generates a checkbox at the beginning of this cell. This checkbox can be
           used to check this entry in the nearest containing Iterator. Defaults to false. Only
           allowed if this cell is inside a CellIterator or under a Row inside a RowIterator. -->
      <xsd:attribute name="hasCheckBox" type="xsd:boolean" default="false"/>
      <!-- CSS height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="height" type="xsd:string"/>
      <!-- A Gosu expression which, if defined, is evaluated to create help info that guides
           the user to edit this widget. The help info will show up if the user hovers the mouse
           over or focuses on the widget, when the widget is in edit mode. -->
      <xsd:attribute name="helpText" type="xsd:string"/>
      <!-- If false, menu items under this input will be shown even when the input is not editable. -->
      <xsd:attribute name="hideChildrenIfReadOnly" type="xsd:boolean" default="true"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- Refers to an image file. If defined, makes this an icon cell. The "value" attribute
           should be a boolean expression describing whether the icon is visible in a given row. -->
      <xsd:attribute name="icon" type="xsd:string"/>
      <!-- Color of the icon. If not set will default to its font color. -->
      <xsd:attribute name="iconColor" type="xsd:string"/>
      <!-- The ALT text for any icon generated in the content cells -->
      <xsd:attribute name="iconLabel" type="xsd:string"/>
      <!-- An enumeration of icon types that determine what the 'icon' property on the widget
           is referring to. -->
      <xsd:attribute name="iconType" type="IconTypeEnum"/>
      <!-- Reference ID of the widget.  This does not have to be globally unique; it only has
           to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <!-- A Gosu expression that converts the presentation value to a model value. The presentation
           value string is exposed to this expression as the symbol "VALUE". -->
      <xsd:attribute name="inputConversion" type="xsd:string"/>
      <!-- An optional expression. If specified, a header cell with the specified value will
           be rendered for this column. Only applicable when the containing row is iterated by
           a RowIterator. -->
      <xsd:attribute name="label" type="xsd:string"/>
      <!-- Custom extension CSS style class to apply to the header. -->
      <xsd:attribute name="labelStyleClass" type="xsd:string"/>
      <!-- CSS max-height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="maxHeight" type="xsd:string"/>
      <!-- CSS max-width value. Can be `px`, or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="maxWidth" type="xsd:string"/>
      <!-- CSS min-height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="minHeight" type="xsd:string"/>
      <!-- CSS min-width value. Can be `px`, or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="minWidth" type="xsd:string"/>
      <!-- The number of child MenuItems to show in each column.  If not specified, all children
           will be shown in a single column. -->
      <xsd:attribute name="numEntriesPerColumn" type="xsd:integer" default="0"/>
      <!-- Gosu expression to be executed after the value is set from a picker. -->
      <xsd:attribute name="onPick" type="xsd:string"/>
      <!-- A Gosu expression that converts the model value to a presentation value. The model
           value is exposed to this expression as the symbol "VALUE". The return type of this
           expression must be String. -->
      <xsd:attribute name="outputConversion" type="xsd:string"/>
      <!-- Relative width when printing to PDF. All widths are relative to the widths of the
           other columns in the ListView -->
      <xsd:attribute name="printWidth" type="xsd:string" default="1"/>
      <!-- A Gosu expression used to validate user value before setting it to the model. This
           expression can access any symbols available to this widget, and a "VALUE" symbol that
           represents the user value. If this expression returns null, the user value will be
           set into the model. Otherwise, an error message containing the result of the expression
           will be displayed on the page, the value will not be set into the model, and no actions
           can be performed until the error is corrected. -->
      <xsd:attribute name="requestValidationExpression" type="xsd:string"/>
      <!-- If true, then the cell must be filled out by the user -->
      <xsd:attribute name="required" type="xsd:string"/>
      <!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * Deprecated.
           DO NOT USE.                                           * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
           Consider using "onChange/onPick/inputConversion/outputConversion" where available.
           If specified and the Input is editable, then any new value of the Input is written
           to this expression (Gosu by default) instead of to "value".  The new value is exposed
           as the symbol "VALUE".  For instance if your value expression is "Foo.getSomething()"
           then it can't be written to since it's not an L-value; so you could specify a setter
           expression along the lines of "Foo.setSomething(VALUE)" Warning: if you use this attribute
           many pebbles features will not work, including but not limited to: * Correct automatic
           detection of the state of the updated data * Correct automatic detection of the editability
           of the data * Correct automatic detection of the maximum size of a text input -->
      <xsd:attribute name="setter" type="xsd:string"/>
      <!-- Boolean expression which determines whether or not to show a confirmation message
           when the field value is changed directly from the UI. It's NOT applicable when the
           value is changed indirectly, for example, as a result of client reflection. -->
      <xsd:attribute name="showConfirmMessage" type="xsd:string"/>
      <!-- If true, shows the icon defined by "icon" in the header cell for this column. The
           default value is true. -->
      <xsd:attribute name="showHeaderIcon" type="xsd:boolean" default="true"/>
      <!-- An optional comma-separated sequence of Expressions, each of which is assumed to be
           a dot-delimited path, the value by which this column will be sorted if the user clicks
           on the header cell. -->
      <xsd:attribute name="sortBy" type="xsd:string"/>
      <!-- Either "ascending" or "descending" -->
      <xsd:attribute name="sortDirection" type="WidgetSortDirection" default="ascending"/>
      <!-- The priority of sorting relative to other sorting elements like IteratorSort and Cell.
           The lower the number, the higher the priority.  The highest priority is "1" -->
      <xsd:attribute name="sortOrder" type="xsd:integer" default="0"/>
      <!-- CSS style class for the cell content; for instance, "miniButton" makes a link appear
           as a small button -->
      <xsd:attribute name="styleClass" type="LinkStyleClass"/>
      <!-- An optional attribute, if set, defer sub menu generation until user tries to open
           the menu. DO NOT set this flag unless the sub menu of this widget is very expensive
           to generate. Setting this flag will reduce time to load the page, however require
           fetching additional info from server in the background, when the menu gets opened
           for the first time after page loaded. -->
      <xsd:attribute name="subMenuOnDemand" type="xsd:boolean" default="false"/>
      <!-- Extra "alt" text to show when the user hovers the mouse over the header cell of this
           column. -->
      <xsd:attribute name="tooltip" type="xsd:string"/>
      <!-- If true, validate before commit that the value of this column is unique across all
           rows in the current page. Only meaningful when this column is editable. -->
      <xsd:attribute name="unique" type="xsd:boolean" default="false"/>
      <!-- A Gosu expression to run before committing the record. This expression can refer to
           any symbols available to this widget. If this expression returns null, the validation
           is considered successful; otherwise, the result of this expression will be displayed
           as an error and the record will not be committed. -->
      <xsd:attribute name="validationExpression" type="xsd:string"/>
      <!-- The label of this cell to be used when it has validation issues. Not needed when this
           cell has a "label". Required if the cell is editable but does not have a "label". -->
      <xsd:attribute name="validationLabel" type="xsd:string"/>
      <!-- The value this element binds to.  If the element is editable then this value is both
           read from and written to (unless "setter" is defined). -->
      <xsd:attribute name="value" type="xsd:string"/>
      <!-- The type of the value expression. -->
      <xsd:attribute name="valueType" type="xsd:string" default="entity.Modifier"/>
      <!-- Boolean expression which, if false, hides the <i>contents</i> of the cell (its "ValueWidget"),
           but not the cell itself.  Needed since hiding the actual cell usually screws up the
           layout -->
      <xsd:attribute name="valueVisible" type="xsd:string"/>
      <!-- Specifies the vertical alignment of this cell. Valid values: "top", "middle", or "bottom".
           If no value is specified, the default alignment is determined by the cell type ("top"
           for Text Areas and Format Cells, "middle" for buttons and icons). -->
      <xsd:attribute name="verticalAlign" type="WidgetVerticalAlignment"/>
      <!-- Boolean expression which, if false, completely hides the widget and all its children -->
      <xsd:attribute name="visible" type="xsd:string"/>
      <!-- CSS width value. Can be `px`, or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="width" type="xsd:string"/>
      <!-- If default, defers to FormatType to decide whether to wrap or not.  If true, allows
           cell content to wrap. -->
      <xsd:attribute name="wrap" type="WrapType" default="default"/>
      <!-- If true, allows Header Cell text content to wrap. Defaults to true. -->
      <xsd:attribute name="wrapLabel" type="xsd:boolean" default="false"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- A Modifier Input -->
  <xsd:element name="ModifierInput">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="LayoutConfig" minOccurs="0" maxOccurs="1"/>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="AddMenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="AddMenuItemIterator" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemDivider" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemIterator" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemSetRef" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemTree" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PickerMenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PostOnChange" minOccurs="0" maxOccurs="1"/>
          <xsd:element ref="Reflect" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="SearchItem" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:choice>
      </xsd:sequence>
      <!-- An optional action to take when the user clicks the value of this widget when the
           value is not being edited. See ActionBase for list of available action prefixes. When
           specified, the value of this widget will be rendered as a link when the value is not
           being edited. -->
      <xsd:attribute name="action" type="xsd:string"/>
      <!-- An optional boolean expression controlling whether the action should be available
           in this specific context when in read-only mode.  This is ignored if in edit mode
           or if the action is null.  This attribute will be deprecated in a future release,
           please use the 'available' attribute instead.  To disable action in readonly mode,
           you can set available=&quot;CurrentLocation.InEditMode || &lt;action-available-condition&gt;&quot; -->
      <xsd:attribute name="actionAvailable" type="xsd:string"/>
      <!-- Alignment of the widget ("left", "right", or "center") -->
      <xsd:attribute name="align" type="WidgetAlignment"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- Boolean expression which, if false, grays out the widget and all its children -->
      <xsd:attribute name="available" type="xsd:string"/>
      <!-- If true then the label is displayed in bold text. -->
      <xsd:attribute name="boldLabel" type="xsd:boolean" default="false"/>
      <!-- If true then the value is displayed in bold text when read-only. -->
      <xsd:attribute name="boldValue" type="xsd:boolean" default="false"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- The confirmation message to show when "showConfirmMessage" is set. If not specified,
           a standard message will be used. -->
      <xsd:attribute name="confirmMessage" type="xsd:string"/>
      <!-- A Gosu expression used to convert the value picked from a popup before set it into
           the model value of this widget. The picked value will be exposed as a symbol with
           the name "PickedValue" -->
      <xsd:attribute name="conversionExpression" type="xsd:string"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- Boolean expression which, if false, makes this widget and all its children read-only -->
      <xsd:attribute name="editable" type="xsd:string" default="false"/>
      <!-- If true, instead of showing a hierarchical menu, the widget will show a single menu
           with sub-menus grouped under headers. -->
      <xsd:attribute name="flatten" type="xsd:boolean" default="false"/>
      <!-- An optional boolean expression, if returns true, this widget will get focus when start
           editing the containing location. -->
      <xsd:attribute name="focusOnStartEditing" type="xsd:string"/>
      <!-- How the value is formatted; options include "general", "currency", and "email".  See
           the formatType enumeration. -->
      <xsd:attribute name="formatType" type="FormatType"/>
      <!-- A Gosu expression which, if defined, is evaluated to create help info that guides
           the user to edit this widget. The help info will show up if the user hovers the mouse
           over or focuses on the widget, when the widget is in edit mode. -->
      <xsd:attribute name="helpText" type="xsd:string"/>
      <!-- If false, menu items under this input will be shown even when the input is not editable. -->
      <xsd:attribute name="hideChildrenIfReadOnly" type="xsd:boolean" default="true"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- Reference ID of the widget.  This does not have to be globally unique; it only has
           to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <!-- A Gosu expression that converts the presentation value to a model value. The presentation
           value string is exposed to this expression as the symbol "VALUE". -->
      <xsd:attribute name="inputConversion" type="xsd:string"/>
      <!-- Label to render. -->
      <xsd:attribute name="label" type="xsd:string"/>
      <!-- Boolean expression which, if true, causes the label portion of the Input to be rendered
           above the value -->
      <xsd:attribute name="labelAbove" type="xsd:string" default="false"/>
      <!-- Custom extension CSS style class to apply to the label. -->
      <xsd:attribute name="labelStyleClass" type="xsd:string"/>
      <!-- The number of child MenuItems to show in each column.  If not specified, all children
           will be shown in a single column. -->
      <xsd:attribute name="numEntriesPerColumn" type="xsd:integer" default="0"/>
      <!-- Gosu expression to be executed after the value is set from a picker. -->
      <xsd:attribute name="onPick" type="xsd:string"/>
      <!-- A Gosu expression that converts the model value to a presentation value. The model
           value is exposed to this expression as the symbol "VALUE". The return type of this
           expression must be String. -->
      <xsd:attribute name="outputConversion" type="xsd:string"/>
      <!-- A Gosu expression used to validate user value before setting it to the model. This
           expression can access any symbols available to this widget, and a "VALUE" symbol that
           represents the user value. If this expression returns null, the user value will be
           set into the model. Otherwise, an error message containing the result of the expression
           will be displayed on the page, the value will not be set into the model, and no actions
           can be performed until the error is corrected. -->
      <xsd:attribute name="requestValidationExpression" type="xsd:string"/>
      <!-- If true, then the cell must be filled out by the user -->
      <xsd:attribute name="required" type="xsd:string"/>
      <!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * Deprecated.
           DO NOT USE.                                           * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
           Consider using "onChange/onPick/inputConversion/outputConversion" where available.
           If specified and the Input is editable, then any new value of the Input is written
           to this expression (Gosu by default) instead of to "value".  The new value is exposed
           as the symbol "VALUE".  For instance if your value expression is "Foo.getSomething()"
           then it can't be written to since it's not an L-value; so you could specify a setter
           expression along the lines of "Foo.setSomething(VALUE)" Warning: if you use this attribute
           many pebbles features will not work, including but not limited to: * Correct automatic
           detection of the state of the updated data * Correct automatic detection of the editability
           of the data * Correct automatic detection of the maximum size of a text input -->
      <xsd:attribute name="setter" type="xsd:string"/>
      <!-- Optional keyboard shortcut character in the form of "Q" or "ShiftQ"; the "Alt" key
           is implicit. This is only applicable when this widget has an "action" specified and
           the value is not being edited. -->
      <xsd:attribute name="shortcut" type="xsd:string"/>
      <!-- Boolean expression which determines whether or not to show a confirmation message
           when the field value is changed directly from the UI. It's NOT applicable when the
           value is changed indirectly, for example, as a result of client reflection. -->
      <xsd:attribute name="showConfirmMessage" type="xsd:string"/>
      <!-- An optional attribute, if set, defer sub menu generation until user tries to open
           the menu. DO NOT set this flag unless the sub menu of this widget is very expensive
           to generate. Setting this flag will reduce time to load the page, however require
           fetching additional info from server in the background, when the menu gets opened
           for the first time after page loaded. -->
      <xsd:attribute name="subMenuOnDemand" type="xsd:boolean" default="false"/>
      <!-- A Gosu expression to run before committing the record. This expression can refer to
           any symbols available to this widget. If this expression returns null, the validation
           is considered successful; otherwise, the result of this expression will be displayed
           as an error and the record will not be committed. -->
      <xsd:attribute name="validationExpression" type="xsd:string"/>
      <!-- The value this Input binds to as an Expression.  If the Input is editable then this
           value is both read from and written to (unless "setter" is defined). -->
      <xsd:attribute name="value" type="xsd:string" use="required"/>
      <!-- CSS max-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionMaxWidth" type="xsd:string"/>
      <!-- CSS min-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionMinWidth" type="xsd:string"/>
      <!-- CSS width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionWidth" type="xsd:string"/>
      <!-- The type of the value expression. -->
      <xsd:attribute name="valueType" type="xsd:string" default="entity.Modifier"/>
      <!-- If used instead of "editable", specifies whether the Input is editable when data is
           being created -->
      <xsd:attribute name="visible" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <xsd:element name="MonetaryAmountCell">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="Reflect" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element ref="ColumnFooter" minOccurs="0" maxOccurs="1"/>
        <xsd:element ref="PostOnChange" minOccurs="0" maxOccurs="1"/>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="AddMenuItem"/>
          <xsd:element ref="AddMenuItemIterator"/>
          <xsd:element ref="MenuItem"/>
          <xsd:element ref="MenuItemDivider"/>
          <xsd:element ref="MenuItemIterator"/>
          <xsd:element ref="MenuItemSetRef"/>
          <xsd:element ref="MenuItemTree"/>
          <xsd:element ref="PickerMenuItem"/>
          <xsd:element ref="SearchItem"/>
        </xsd:choice>
      </xsd:sequence>
      <!-- An optional action to take when the user clicks the value of this widget when the
           value is not being edited. See ActionBase for details. When specified, the value of
           this widget will be rendered as a link when the value is not being edited. -->
      <xsd:attribute name="action" type="xsd:string"/>
      <!-- An optional boolean expression controlling whether the action should be available
           in this specific context when in read-only mode.  This is ignored if in edit mode
           or if the action is null.  This attribute will be deprecated in a future release,
           please use the 'available' attribute instead.  To disable action in readonly mode,
           you can set available=&quot;CurrentLocation.InEditMode || &lt;action-available-condition&gt;&quot; -->
      <xsd:attribute name="actionAvailable" type="xsd:string"/>
      <!-- Specifies the alignment of this cell. Valid values: "left", "right", or "center".
           If no value is specified, the default alignment is determined by the value type ("center"
           for boolean values; "right" for numeric values; "left" for other value types). -->
      <xsd:attribute name="align" type="WidgetAlignment"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- Boolean expression which, if false, grays out the widget and all its children -->
      <xsd:attribute name="available" type="xsd:string"/>
      <!-- If true, renders the cell contents in bold text. Defaults to false. -->
      <xsd:attribute name="bold" type="xsd:boolean" default="false"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- The HTML colspan attribute, lets this cell span across multiple columns of other rows.
           Useful for generating a "group header" row above a RowIterator. The default value
           is 1. A value greater than 1 is only allowed when the containing row is not iterated
           by a RowIterator. -->
      <xsd:attribute name="colspan" type="xsd:integer"/>
      <!-- The confirmation message to show when "showConfirmMessage" is set. If not specified,
           a standard message will be used. -->
      <xsd:attribute name="confirmMessage" type="xsd:string"/>
      <!-- A Gosu expression used to convert the value picked from a popup before set it into
           the model value of this widget. The picked value will be exposed as a symbol with
           the name "PickedValue" -->
      <xsd:attribute name="conversionExpression" type="xsd:string"/>
      <!-- An expression to define the default currency when creating new MonetaryAmounts -->
      <xsd:attribute name="currency" type="xsd:string"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- Boolean expression which, if false, makes this widget and all its children read-only -->
      <xsd:attribute name="editable" type="xsd:string" default="false"/>
      <!-- If true, allows the user to sort the values in the column by clicking on the header.
            Only applicable when the containing row is iterated by a RowIterator. -->
      <xsd:attribute name="enableSort" type="xsd:boolean" default="true"/>
      <!-- If true, this cell will the last cell in the row to be navigated to via the ENTER
           key. Only applicable when "CellNavOnEnter" or "QuickAddOnEnter" is set. Normally not
           specified. Default to false. -->
      <xsd:attribute name="endOfCellNav" type="xsd:boolean" default="false"/>
      <!-- If true, instead of showing a hierarchical menu, the widget will show a single menu
           with sub-menus grouped under headers. -->
      <xsd:attribute name="flatten" type="xsd:boolean" default="false"/>
      <!-- An optional boolean expression, if returns true, this widget will get focus when start
           editing the containing location. -->
      <xsd:attribute name="focusOnStartEditing" type="xsd:string"/>
      <!-- An expression that returns a GWColor instance. Legacy: this method can instead return
           a string corresponding to a CSS Specification Level 3 color name. See GWColor for
           more details. -->
      <xsd:attribute name="fontColor" type="xsd:string"/>
      <!-- An optional expression. If specified, a footer cell with the specified value will
           be rendered for this column. Only applicable when the containing Row is iterated by
           a RowIterator. Not allowed when "footerSumValue" is specified. -->
      <xsd:attribute name="footerLabel" type="xsd:string"/>
      <!-- An optional expression, if specified, will be used as format pattern for the footer
           sum value. Normally not specified, so that the "format" and\or "formatType" of the
           cell value will be applied to footer sum value. Only applicable when "footerSumValue"
           is specified. The result of this expression must conform to the number format defined
           in java.text.DecimalFormat. -->
      <xsd:attribute name="footerSumFormat" type="xsd:string"/>
      <!-- An optional Numeric expression. If specified, a footer cell that sums the specified
           value for all cells in this column will be rendered. Pagination of the list does not
           affect the sum value. Only applicable when the containing row is iterated by a RowIterator.
           Not allowed when "footerLabel" is specified. -->
      <xsd:attribute name="footerSumValue" type="xsd:string"/>
      <!-- How the value is formatted; options include "general", "currency", and "email".  See
           the formatType enumeration. -->
      <xsd:attribute name="formatType" type="FormatType"/>
      <!-- If true, the ListView will be grouped by this cell upon entering the page. Only one
           grouped cell is allowed at any given time and it is only applicable when the column
           is sortable. -->
      <xsd:attribute name="groupedOnEnter" type="xsd:string"/>
      <!-- If true, this Cell and any other grow-enabled Cell will expand to fill remaining space
           in the ListViewPanel. Only applicable when the ListView is set to stretch. -->
      <xsd:attribute name="grow" type="xsd:boolean" default="false"/>
      <!-- If true, generates a checkbox at the beginning of this cell. This checkbox can be
           used to check this entry in the nearest containing Iterator. Defaults to false. Only
           allowed if this cell is inside a CellIterator or under a Row inside a RowIterator. -->
      <xsd:attribute name="hasCheckBox" type="xsd:boolean" default="false"/>
      <!-- CSS height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="height" type="xsd:string"/>
      <!-- A Gosu expression which, if defined, is evaluated to create help info that guides
           the user to edit this widget. The help info will show up if the user hovers the mouse
           over or focuses on the widget, when the widget is in edit mode. -->
      <xsd:attribute name="helpText" type="xsd:string"/>
      <!-- If false, menu items under this input will be shown even when the input is not editable. -->
      <xsd:attribute name="hideChildrenIfReadOnly" type="xsd:boolean" default="true"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- Refers to an image file. If defined, makes this an icon cell. The "value" attribute
           should be a boolean expression describing whether the icon is visible in a given row. -->
      <xsd:attribute name="icon" type="xsd:string"/>
      <!-- Color of the icon. If not set will default to its font color. -->
      <xsd:attribute name="iconColor" type="xsd:string"/>
      <!-- The ALT text for any icon generated in the content cells -->
      <xsd:attribute name="iconLabel" type="xsd:string"/>
      <!-- An enumeration of icon types that determine what the 'icon' property on the widget
           is referring to. -->
      <xsd:attribute name="iconType" type="IconTypeEnum"/>
      <!-- Reference ID of the widget.  This does not have to be globally unique; it only has
           to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <!-- A Gosu expression that converts the presentation value to a model value. The presentation
           value string is exposed to this expression as the symbol "VALUE". -->
      <xsd:attribute name="inputConversion" type="xsd:string"/>
      <!-- An optional expression. If specified, a header cell with the specified value will
           be rendered for this column. Only applicable when the containing row is iterated by
           a RowIterator. -->
      <xsd:attribute name="label" type="xsd:string"/>
      <!-- Custom extension CSS style class to apply to the header. -->
      <xsd:attribute name="labelStyleClass" type="xsd:string"/>
      <!-- The maximum number of characters allowed for an input field. -->
      <xsd:attribute name="maxChars" type="xsd:integer" default="0"/>
      <!-- CSS max-height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="maxHeight" type="xsd:string"/>
      <!-- CSS max-width value. Can be `px`, or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="maxWidth" type="xsd:string"/>
      <!-- CSS min-height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="minHeight" type="xsd:string"/>
      <!-- CSS min-width value. Can be `px`, or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="minWidth" type="xsd:string"/>
      <!-- The number of child MenuItems to show in each column.  If not specified, all children
           will be shown in a single column. -->
      <xsd:attribute name="numEntriesPerColumn" type="xsd:integer" default="0"/>
      <!-- Gosu expression to be executed after the value is set from a picker. -->
      <xsd:attribute name="onPick" type="xsd:string"/>
      <!-- A Gosu expression that converts the model value to a presentation value. The model
           value is exposed to this expression as the symbol "VALUE". The return type of this
           expression must be String. -->
      <xsd:attribute name="outputConversion" type="xsd:string"/>
      <!-- Relative width when printing to PDF. All widths are relative to the widths of the
           other columns in the ListView -->
      <xsd:attribute name="printWidth" type="xsd:string" default="1"/>
      <!-- A Gosu expression used to validate user value before setting it to the model. This
           expression can access any symbols available to this widget, and a "VALUE" symbol that
           represents the user value. If this expression returns null, the user value will be
           set into the model. Otherwise, an error message containing the result of the expression
           will be displayed on the page, the value will not be set into the model, and no actions
           can be performed until the error is corrected. -->
      <xsd:attribute name="requestValidationExpression" type="xsd:string"/>
      <!-- If true, then the cell must be filled out by the user -->
      <xsd:attribute name="required" type="xsd:string"/>
      <!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * Deprecated.
           DO NOT USE.                                           * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
           Consider using "onChange/onPick/inputConversion/outputConversion" where available.
           If specified and the Input is editable, then any new value of the Input is written
           to this expression (Gosu by default) instead of to "value".  The new value is exposed
           as the symbol "VALUE".  For instance if your value expression is "Foo.getSomething()"
           then it can't be written to since it's not an L-value; so you could specify a setter
           expression along the lines of "Foo.setSomething(VALUE)" Warning: if you use this attribute
           many pebbles features will not work, including but not limited to: * Correct automatic
           detection of the state of the updated data * Correct automatic detection of the editability
           of the data * Correct automatic detection of the maximum size of a text input -->
      <xsd:attribute name="setter" type="xsd:string"/>
      <!-- Boolean expression which determines whether or not to show a confirmation message
           when the field value is changed directly from the UI. It's NOT applicable when the
           value is changed indirectly, for example, as a result of client reflection. -->
      <xsd:attribute name="showConfirmMessage" type="xsd:string"/>
      <!-- If true, shows the icon defined by "icon" in the header cell for this column. The
           default value is true. -->
      <xsd:attribute name="showHeaderIcon" type="xsd:boolean" default="true"/>
      <!-- An optional comma-separated sequence of Expressions, each of which is assumed to be
           a dot-delimited path, the value by which this column will be sorted if the user clicks
           on the header cell. -->
      <xsd:attribute name="sortBy" type="xsd:string"/>
      <!-- Either "ascending" or "descending" -->
      <xsd:attribute name="sortDirection" type="WidgetSortDirection" default="ascending"/>
      <!-- The priority of sorting relative to other sorting elements like IteratorSort and Cell.
           The lower the number, the higher the priority.  The highest priority is "1" -->
      <xsd:attribute name="sortOrder" type="xsd:integer" default="0"/>
      <!-- CSS style class for the cell content; for instance, "miniButton" makes a link appear
           as a small button -->
      <xsd:attribute name="styleClass" type="LinkStyleClass"/>
      <!-- An optional attribute, if set, defer sub menu generation until user tries to open
           the menu. DO NOT set this flag unless the sub menu of this widget is very expensive
           to generate. Setting this flag will reduce time to load the page, however require
           fetching additional info from server in the background, when the menu gets opened
           for the first time after page loaded. -->
      <xsd:attribute name="subMenuOnDemand" type="xsd:boolean" default="false"/>
      <!-- Extra "alt" text to show when the user hovers the mouse over the header cell of this
           column. -->
      <xsd:attribute name="tooltip" type="xsd:string"/>
      <!-- If true, validate before commit that the value of this column is unique across all
           rows in the current page. Only meaningful when this column is editable. -->
      <xsd:attribute name="unique" type="xsd:boolean" default="false"/>
      <!-- A Gosu expression to run before committing the record. This expression can refer to
           any symbols available to this widget. If this expression returns null, the validation
           is considered successful; otherwise, the result of this expression will be displayed
           as an error and the record will not be committed. -->
      <xsd:attribute name="validationExpression" type="xsd:string"/>
      <!-- The label of this cell to be used when it has validation issues. Not needed when this
           cell has a "label". Required if the cell is editable but does not have a "label". -->
      <xsd:attribute name="validationLabel" type="xsd:string"/>
      <!-- The value this element binds to.  If the element is editable then this value is both
           read from and written to (unless "setter" is defined). -->
      <xsd:attribute name="value" type="xsd:string"/>
      <!-- The type of the value expression. -->
      <xsd:attribute name="valueType" type="xsd:string" default="gw.pl.currency.MonetaryAmount"/>
      <!-- Boolean expression which, if false, hides the <i>contents</i> of the cell (its "ValueWidget"),
           but not the cell itself.  Needed since hiding the actual cell usually screws up the
           layout -->
      <xsd:attribute name="valueVisible" type="xsd:string"/>
      <!-- Specifies the vertical alignment of this cell. Valid values: "top", "middle", or "bottom".
           If no value is specified, the default alignment is determined by the cell type ("top"
           for Text Areas and Format Cells, "middle" for buttons and icons). -->
      <xsd:attribute name="verticalAlign" type="WidgetVerticalAlignment"/>
      <!-- Boolean expression which, if false, completely hides the widget and all its children -->
      <xsd:attribute name="visible" type="xsd:string"/>
      <!-- CSS width value. Can be `px`, or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="width" type="xsd:string"/>
      <!-- If default, defers to FormatType to decide whether to wrap or not.  If true, allows
           cell content to wrap. -->
      <xsd:attribute name="wrap" type="WrapType" default="default"/>
      <!-- If true, allows Header Cell text content to wrap. Defaults to true. -->
      <xsd:attribute name="wrapLabel" type="xsd:boolean" default="false"/>
    </xsd:complexType>
  </xsd:element>
  
  <xsd:element name="MonetaryAmountInput">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="LayoutConfig" minOccurs="0" maxOccurs="1"/>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="AddMenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="AddMenuItemIterator" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemDivider" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemIterator" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemSetRef" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemTree" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PickerMenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PostOnChange" minOccurs="0" maxOccurs="1"/>
          <xsd:element ref="Reflect" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="SearchItem" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:choice>
      </xsd:sequence>
      <!-- An optional action to take when the user clicks the value of this widget when the
           value is not being edited. See ActionBase for list of available action prefixes. When
           specified, the value of this widget will be rendered as a link when the value is not
           being edited. -->
      <xsd:attribute name="action" type="xsd:string"/>
      <!-- An optional boolean expression controlling whether the action should be available
           in this specific context when in read-only mode.  This is ignored if in edit mode
           or if the action is null.  This attribute will be deprecated in a future release,
           please use the 'available' attribute instead.  To disable action in readonly mode,
           you can set available=&quot;CurrentLocation.InEditMode || &lt;action-available-condition&gt;&quot; -->
      <xsd:attribute name="actionAvailable" type="xsd:string"/>
      <!-- Alignment of the widget ("left", "right", or "center") -->
      <xsd:attribute name="align" type="WidgetAlignment"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- Boolean expression which, if false, grays out the widget and all its children -->
      <xsd:attribute name="available" type="xsd:string"/>
      <!-- If true then the label is displayed in bold text. -->
      <xsd:attribute name="boldLabel" type="xsd:boolean" default="false"/>
      <!-- If true then the value is displayed in bold text when read-only. -->
      <xsd:attribute name="boldValue" type="xsd:boolean" default="false"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- The confirmation message to show when "showConfirmMessage" is set. If not specified,
           a standard message will be used. -->
      <xsd:attribute name="confirmMessage" type="xsd:string"/>
      <!-- A Gosu expression used to convert the value picked from a popup before set it into
           the model value of this widget. The picked value will be exposed as a symbol with
           the name "PickedValue" -->
      <xsd:attribute name="conversionExpression" type="xsd:string"/>
      <!-- An expression to define the default currency when creating new MonetaryAmounts -->
      <xsd:attribute name="currency" type="xsd:string"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- Boolean expression which, if false, makes this widget and all its children read-only -->
      <xsd:attribute name="editable" type="xsd:string" default="false"/>
      <!-- If true, instead of showing a hierarchical menu, the widget will show a single menu
           with sub-menus grouped under headers. -->
      <xsd:attribute name="flatten" type="xsd:boolean" default="false"/>
      <!-- An optional boolean expression, if returns true, this widget will get focus when start
           editing the containing location. -->
      <xsd:attribute name="focusOnStartEditing" type="xsd:string"/>
      <!-- How the value is formatted; options include "general", "currency", and "email".  See
           the formatType enumeration. -->
      <xsd:attribute name="formatType" type="FormatType"/>
      <!-- A Gosu expression which, if defined, is evaluated to create help info that guides
           the user to edit this widget. The help info will show up if the user hovers the mouse
           over or focuses on the widget, when the widget is in edit mode. -->
      <xsd:attribute name="helpText" type="xsd:string"/>
      <!-- If false, menu items under this input will be shown even when the input is not editable. -->
      <xsd:attribute name="hideChildrenIfReadOnly" type="xsd:boolean" default="true"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- Reference ID of the widget.  This does not have to be globally unique; it only has
           to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <!-- A Gosu expression that converts the presentation value to a model value. The presentation
           value string is exposed to this expression as the symbol "VALUE". -->
      <xsd:attribute name="inputConversion" type="xsd:string"/>
      <!-- Label to render. -->
      <xsd:attribute name="label" type="xsd:string"/>
      <!-- Boolean expression which, if true, causes the label portion of the Input to be rendered
           above the value -->
      <xsd:attribute name="labelAbove" type="xsd:string" default="false"/>
      <!-- Custom extension CSS style class to apply to the label. -->
      <xsd:attribute name="labelStyleClass" type="xsd:string"/>
      <!-- The maximum number of characters allowed for an input field. -->
      <xsd:attribute name="maxChars" type="xsd:integer" default="0"/>
      <!-- The number of child MenuItems to show in each column.  If not specified, all children
           will be shown in a single column. -->
      <xsd:attribute name="numEntriesPerColumn" type="xsd:integer" default="0"/>
      <!-- Gosu expression to be executed after the value is set from a picker. -->
      <xsd:attribute name="onPick" type="xsd:string"/>
      <!-- A Gosu expression that converts the model value to a presentation value. The model
           value is exposed to this expression as the symbol "VALUE". The return type of this
           expression must be String. -->
      <xsd:attribute name="outputConversion" type="xsd:string"/>
      <!-- A Gosu expression used to validate user value before setting it to the model. This
           expression can access any symbols available to this widget, and a "VALUE" symbol that
           represents the user value. If this expression returns null, the user value will be
           set into the model. Otherwise, an error message containing the result of the expression
           will be displayed on the page, the value will not be set into the model, and no actions
           can be performed until the error is corrected. -->
      <xsd:attribute name="requestValidationExpression" type="xsd:string"/>
      <!-- If true, then the cell must be filled out by the user -->
      <xsd:attribute name="required" type="xsd:string"/>
      <!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * Deprecated.
           DO NOT USE.                                           * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
           Consider using "onChange/onPick/inputConversion/outputConversion" where available.
           If specified and the Input is editable, then any new value of the Input is written
           to this expression (Gosu by default) instead of to "value".  The new value is exposed
           as the symbol "VALUE".  For instance if your value expression is "Foo.getSomething()"
           then it can't be written to since it's not an L-value; so you could specify a setter
           expression along the lines of "Foo.setSomething(VALUE)" Warning: if you use this attribute
           many pebbles features will not work, including but not limited to: * Correct automatic
           detection of the state of the updated data * Correct automatic detection of the editability
           of the data * Correct automatic detection of the maximum size of a text input -->
      <xsd:attribute name="setter" type="xsd:string"/>
      <!-- Optional keyboard shortcut character in the form of "Q" or "ShiftQ"; the "Alt" key
           is implicit. This is only applicable when this widget has an "action" specified and
           the value is not being edited. -->
      <xsd:attribute name="shortcut" type="xsd:string"/>
      <!-- Boolean expression which determines whether or not to show a confirmation message
           when the field value is changed directly from the UI. It's NOT applicable when the
           value is changed indirectly, for example, as a result of client reflection. -->
      <xsd:attribute name="showConfirmMessage" type="xsd:string"/>
      <!-- An optional attribute, if set, defer sub menu generation until user tries to open
           the menu. DO NOT set this flag unless the sub menu of this widget is very expensive
           to generate. Setting this flag will reduce time to load the page, however require
           fetching additional info from server in the background, when the menu gets opened
           for the first time after page loaded. -->
      <xsd:attribute name="subMenuOnDemand" type="xsd:boolean" default="false"/>
      <!-- A Gosu expression to run before committing the record. This expression can refer to
           any symbols available to this widget. If this expression returns null, the validation
           is considered successful; otherwise, the result of this expression will be displayed
           as an error and the record will not be committed. -->
      <xsd:attribute name="validationExpression" type="xsd:string"/>
      <!-- The value this Input binds to as an Expression.  If the Input is editable then this
           value is both read from and written to (unless "setter" is defined). -->
      <xsd:attribute name="value" type="xsd:string" use="required"/>
      <!-- CSS max-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionMaxWidth" type="xsd:string"/>
      <!-- CSS min-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionMinWidth" type="xsd:string"/>
      <!-- CSS width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionWidth" type="xsd:string"/>
      <!-- The type of the value expression. -->
      <xsd:attribute name="valueType" type="xsd:string" default="gw.pl.currency.MonetaryAmount"/>
      <!-- If used instead of "editable", specifies whether the Input is editable when data is
           being created -->
      <xsd:attribute name="visible" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <xsd:element name="NextCondition">
    <xsd:complexType>
      <xsd:choice minOccurs="0" maxOccurs="unbounded"/>
      <!-- Gosu expression that indicates if this destination should be used.  When clicking
           "Next" in the wizard, the screen will go to the first page for which the condition
           is true, and if all conditions are false will default to going to the next step in
           order. -->
      <xsd:attribute name="condition" type="xsd:string" use="required"/>
      <!-- The ID of the step to go to -->
      <xsd:attribute name="destination" type="xsd:string" use="required"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- An Input with the ability to convert note body to hyper links for URL and doc links -->
  <xsd:element name="NoteBodyInput">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="LayoutConfig" minOccurs="0" maxOccurs="1"/>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="AddMenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="AddMenuItemIterator" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemDivider" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemIterator" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemSetRef" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemTree" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PickerMenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PostOnChange" minOccurs="0" maxOccurs="1"/>
          <xsd:element ref="Reflect" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="SearchItem" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:choice>
      </xsd:sequence>
      <!-- An optional action to take when the user clicks the value of this widget when the
           value is not being edited. See ActionBase for list of available action prefixes. When
           specified, the value of this widget will be rendered as a link when the value is not
           being edited. -->
      <xsd:attribute name="action" type="xsd:string"/>
      <!-- An optional boolean expression controlling whether the action should be available
           in this specific context when in read-only mode.  This is ignored if in edit mode
           or if the action is null.  This attribute will be deprecated in a future release,
           please use the 'available' attribute instead.  To disable action in readonly mode,
           you can set available=&quot;CurrentLocation.InEditMode || &lt;action-available-condition&gt;&quot; -->
      <xsd:attribute name="actionAvailable" type="xsd:string"/>
      <!-- Alignment of the widget ("left", "right", or "center") -->
      <xsd:attribute name="align" type="WidgetAlignment"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- Optional. Expression that returns an gw.api.contact.AutocompleteHandler which produces
           auto complete suggestions for this widget. USE WITH CAUTION: If specified, the handler
           will be called at server side on each user key stroke. -->
      <xsd:attribute name="autoComplete" type="xsd:string"/>
      <!-- An optional attribute to specify additional arguments to pass to the "autoComplete"
           handler, if exists.
         (You don't need to specify the id of this widget as part
           of this attribute, because the value of this widget
         is passed to the handler
           by default; If the id of this widget is specified, the argument value passed to the

                   handler will be null, since the value of this widget has not been fully specified
           when the handler is invoked.)
         Refers to the "id" attribute of other value
           widget on page. Multiple ids can be separated by ",".
         If specified, the latest
           value of these widgets will be passed to the autoComplete handler
         when retrieving
           auto complete info. -->
      <xsd:attribute name="autoCompleteArgIds" type="xsd:string"/>
      <!-- If specified, delays autocomplete functionality until the user has entered the specified
           number of characters. -->
      <xsd:attribute name="autoCompleteTriggerChars" type="xsd:integer"/>
      <!-- Boolean expression which, if false, grays out the widget and all its children -->
      <xsd:attribute name="available" type="xsd:string"/>
      <!-- If true then the label is displayed in bold text. -->
      <xsd:attribute name="boldLabel" type="xsd:boolean" default="false"/>
      <!-- If true then the value is displayed in bold text when read-only. -->
      <xsd:attribute name="boldValue" type="xsd:boolean" default="false"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- The confirmation message to show when "showConfirmMessage" is set. If not specified,
           a standard message will be used. -->
      <xsd:attribute name="confirmMessage" type="xsd:string"/>
      <!-- A Gosu expression used to convert the value picked from a popup before set it into
           the model value of this widget. The picked value will be exposed as a symbol with
           the name "PickedValue" -->
      <xsd:attribute name="conversionExpression" type="xsd:string"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- Boolean expression which, if false, makes this widget and all its children read-only -->
      <xsd:attribute name="editable" type="xsd:string" default="false"/>
      <!-- If true, enables html markup in the autocomplete suggestions for this text input by
           means of the following special tags: [i]italic[/i] - makes text italic, [b]bold[/b]
           - makes text bold and [hl]highlighted[/hl] - highlights the text -->
      <xsd:attribute name="enableAutoCompleteMarkup" type="xsd:boolean" default="false"/>
      <!-- If true, instead of showing a hierarchical menu, the widget will show a single menu
           with sub-menus grouped under headers. -->
      <xsd:attribute name="flatten" type="xsd:boolean" default="false"/>
      <!-- An optional boolean expression, if returns true, this widget will get focus when start
           editing the containing location. -->
      <xsd:attribute name="focusOnStartEditing" type="xsd:string"/>
      <!-- An optional expression that returns a format pattern, which must conform to the number
           format defined in java.text.DecimalFormat. When the underlying data type is not a
           Number, only the prefix and suffix of the pattern will be applied. For example, "#.#%"
           formats the Number value as percentage with up to 1 decimal digit. -->
      <xsd:attribute name="format" type="xsd:string"/>
      <!-- How the value is formatted; options include "general", "currency", and "email".  See
           the formatType enumeration. -->
      <xsd:attribute name="formatType" type="FormatType"/>
      <!-- A Gosu expression which, if defined, is evaluated to create help info that guides
           the user to edit this widget. The help info will show up if the user hovers the mouse
           over or focuses on the widget, when the widget is in edit mode. -->
      <xsd:attribute name="helpText" type="xsd:string"/>
      <!-- If false, menu items under this input will be shown even when the input is not editable. -->
      <xsd:attribute name="hideChildrenIfReadOnly" type="xsd:boolean" default="true"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- Reference ID of the widget.  This does not have to be globally unique; it only has
           to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <!-- A Gosu expression that converts the presentation value to a model value. The presentation
           value string is exposed to this expression as the symbol "VALUE". -->
      <xsd:attribute name="inputConversion" type="xsd:string"/>
      <!-- A gosu expression that returns a string to use as the input mask. If not specified,
           the input mask (if any) specified on the value's field validator will be used. This
           field should only be necessary in cases where the data type has no mask or where the
           mask needs to be conditional. The input mask returned should be of the same format
           as a mask specified using the input-mask attribute on a field validator (use # for
           wildcards). A mask that contains no wildcards will just be used as a placeholder value.
           The input mask is recalculated on every render, which means that if the mask is conditional
           and dependent on other data on this page that it can change from one request to the
           next. -->
      <xsd:attribute name="inputMask" type="xsd:string"/>
      <!-- Label to render. -->
      <xsd:attribute name="label" type="xsd:string"/>
      <!-- Boolean expression which, if true, causes the label portion of the Input to be rendered
           above the value -->
      <xsd:attribute name="labelAbove" type="xsd:string" default="false"/>
      <!-- Custom extension CSS style class to apply to the label. -->
      <xsd:attribute name="labelStyleClass" type="xsd:string"/>
      <!-- The maximum number of characters allowed for an input field. -->
      <xsd:attribute name="maxChars" type="xsd:integer" default="0"/>
      <!-- The number of child MenuItems to show in each column.  If not specified, all children
           will be shown in a single column. -->
      <xsd:attribute name="numEntriesPerColumn" type="xsd:integer" default="0"/>
      <!-- Gosu expression to be executed after the value is set from a picker. -->
      <xsd:attribute name="onPick" type="xsd:string"/>
      <!-- A Gosu expression that converts the model value to a presentation value. The model
           value is exposed to this expression as the symbol "VALUE". The return type of this
           expression must be String. -->
      <xsd:attribute name="outputConversion" type="xsd:string"/>
      <!-- A Gosu expression that returns a regular expression string to validate the user input.
            If not specified, the regular expression (if any) specified on the value's field
           validator will be used.  This field should only be necessary in cases where the data
           type has no regular expression or where it needs to be conditional. The value returned
           should be of the same format as a regular expression specified on a field validator.
            This property is recalculated on every render, which means that if the regular expression
           is conditional and dependent on other data on this page that it can change from one
           request to the next. -->
      <xsd:attribute name="regex" type="xsd:string"/>
      <!-- A Gosu expression used to validate user value before setting it to the model. This
           expression can access any symbols available to this widget, and a "VALUE" symbol that
           represents the user value. If this expression returns null, the user value will be
           set into the model. Otherwise, an error message containing the result of the expression
           will be displayed on the page, the value will not be set into the model, and no actions
           can be performed until the error is corrected. -->
      <xsd:attribute name="requestValidationExpression" type="xsd:string"/>
      <!-- If true, then the cell must be filled out by the user -->
      <xsd:attribute name="required" type="xsd:string"/>
      <!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * Deprecated.
           DO NOT USE.                                           * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
           Consider using "onChange/onPick/inputConversion/outputConversion" where available.
           If specified and the Input is editable, then any new value of the Input is written
           to this expression (Gosu by default) instead of to "value".  The new value is exposed
           as the symbol "VALUE".  For instance if your value expression is "Foo.getSomething()"
           then it can't be written to since it's not an L-value; so you could specify a setter
           expression along the lines of "Foo.setSomething(VALUE)" Warning: if you use this attribute
           many pebbles features will not work, including but not limited to: * Correct automatic
           detection of the state of the updated data * Correct automatic detection of the editability
           of the data * Correct automatic detection of the maximum size of a text input -->
      <xsd:attribute name="setter" type="xsd:string"/>
      <!-- Optional keyboard shortcut character in the form of "Q" or "ShiftQ"; the "Alt" key
           is implicit. This is only applicable when this widget has an "action" specified and
           the value is not being edited. -->
      <xsd:attribute name="shortcut" type="xsd:string"/>
      <!-- Boolean expression which determines whether or not to show a confirmation message
           when the field value is changed directly from the UI. It's NOT applicable when the
           value is changed indirectly, for example, as a result of client reflection. -->
      <xsd:attribute name="showConfirmMessage" type="xsd:string"/>
      <!-- An optional attribute, if set, defer sub menu generation until user tries to open
           the menu. DO NOT set this flag unless the sub menu of this widget is very expensive
           to generate. Setting this flag will reduce time to load the page, however require
           fetching additional info from server in the background, when the menu gets opened
           for the first time after page loaded. -->
      <xsd:attribute name="subMenuOnDemand" type="xsd:boolean" default="false"/>
      <!-- If set to a type other than 'all', will prevent the user from inputting certain types
           of characters on the client on a per character basis. Defaults to 'defaultForType'.
           Can be used in conjunction with the Input Mask property. For instance, a US phone
           number client mask could be implemented by setting this property to 'numeric' and
           the input mask to '+1(###)###-####. Some value widgets, like passwords or dates, may
           modify or ignore this property. This property has no effect on server or database
           level validation of data or input; meaning, an authenticated user could choose to
           manually submit a form with invalid data that would bypass this check. For database
           level validation see the 'regex' property. -->
      <xsd:attribute name="userInputRestriction" type="InputRestrictionType" default="defaultForType"/>
      <!-- A Gosu expression to run before committing the record. This expression can refer to
           any symbols available to this widget. If this expression returns null, the validation
           is considered successful; otherwise, the result of this expression will be displayed
           as an error and the record will not be committed. -->
      <xsd:attribute name="validationExpression" type="xsd:string"/>
      <!-- The value this Input binds to as an Expression.  If the Input is editable then this
           value is both read from and written to (unless "setter" is defined). -->
      <xsd:attribute name="value" type="xsd:string" use="required"/>
      <!-- CSS max-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionMaxWidth" type="xsd:string"/>
      <!-- CSS min-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionMinWidth" type="xsd:string"/>
      <!-- CSS width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionWidth" type="xsd:string"/>
      <!-- The type of the value expression. -->
      <xsd:attribute name="valueType" type="xsd:string" default="java.lang.String"/>
      <!-- If used instead of "editable", specifies whether the Input is editable when data is
           being created -->
      <xsd:attribute name="visible" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- A ListView cell specialized for an Organization. -->
  <xsd:element name="OrgCell">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="Reflect" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element ref="ColumnFooter" minOccurs="0" maxOccurs="1"/>
        <xsd:element ref="PostOnChange" minOccurs="0" maxOccurs="1"/>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="AddMenuItem"/>
          <xsd:element ref="AddMenuItemIterator"/>
          <xsd:element ref="MenuItem"/>
          <xsd:element ref="MenuItemDivider"/>
          <xsd:element ref="MenuItemIterator"/>
          <xsd:element ref="MenuItemSetRef"/>
          <xsd:element ref="MenuItemTree"/>
          <xsd:element ref="PickerMenuItem"/>
          <xsd:element ref="SearchItem"/>
        </xsd:choice>
      </xsd:sequence>
      <!-- An optional action to take when the user clicks the value of this widget when the
           value is not being edited. See ActionBase for details. When specified, the value of
           this widget will be rendered as a link when the value is not being edited. -->
      <xsd:attribute name="action" type="xsd:string"/>
      <!-- An optional boolean expression controlling whether the action should be available
           in this specific context when in read-only mode.  This is ignored if in edit mode
           or if the action is null.  This attribute will be deprecated in a future release,
           please use the 'available' attribute instead.  To disable action in readonly mode,
           you can set available=&quot;CurrentLocation.InEditMode || &lt;action-available-condition&gt;&quot; -->
      <xsd:attribute name="actionAvailable" type="xsd:string"/>
      <!-- Specifies the alignment of this cell. Valid values: "left", "right", or "center".
           If no value is specified, the default alignment is determined by the value type ("center"
           for boolean values; "right" for numeric values; "left" for other value types). -->
      <xsd:attribute name="align" type="WidgetAlignment"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- Boolean expression which, if false, grays out the widget and all its children -->
      <xsd:attribute name="available" type="xsd:string"/>
      <!-- If true, renders the cell contents in bold text. Defaults to false. -->
      <xsd:attribute name="bold" type="xsd:boolean" default="false"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- Whether the user should be allowed to clear the selected value. If "true", an icon
           will be available which, when clicked, will clear the widget. This attribute will
           always be overridden and set to "true" if freeInputEnabled is set to false. -->
      <xsd:attribute name="clearEnabled" type="xsd:boolean" default="false"/>
      <!-- The HTML colspan attribute, lets this cell span across multiple columns of other rows.
           Useful for generating a "group header" row above a RowIterator. The default value
           is 1. A value greater than 1 is only allowed when the containing row is not iterated
           by a RowIterator. -->
      <xsd:attribute name="colspan" type="xsd:integer"/>
      <!-- The confirmation message to show when "showConfirmMessage" is set. If not specified,
           a standard message will be used. -->
      <xsd:attribute name="confirmMessage" type="xsd:string"/>
      <!-- A Gosu expression used to convert the value picked from a popup before set it into
           the model value of this widget. The picked value will be exposed as a symbol with
           the name "PickedValue" -->
      <xsd:attribute name="conversionExpression" type="xsd:string"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- Boolean expression which, if false, makes this widget and all its children read-only -->
      <xsd:attribute name="editable" type="xsd:string" default="false"/>
      <!-- If true, allows the user to sort the values in the column by clicking on the header.
            Only applicable when the containing row is iterated by a RowIterator. -->
      <xsd:attribute name="enableSort" type="xsd:boolean" default="true"/>
      <!-- If true, this cell will the last cell in the row to be navigated to via the ENTER
           key. Only applicable when "CellNavOnEnter" or "QuickAddOnEnter" is set. Normally not
           specified. Default to false. -->
      <xsd:attribute name="endOfCellNav" type="xsd:boolean" default="false"/>
      <!-- If true, instead of showing a hierarchical menu, the widget will show a single menu
           with sub-menus grouped under headers. -->
      <xsd:attribute name="flatten" type="xsd:boolean" default="false"/>
      <!-- An optional boolean expression, if returns true, this widget will get focus when start
           editing the containing location. -->
      <xsd:attribute name="focusOnStartEditing" type="xsd:string"/>
      <!-- An expression that returns a GWColor instance. Legacy: this method can instead return
           a string corresponding to a CSS Specification Level 3 color name. See GWColor for
           more details. -->
      <xsd:attribute name="fontColor" type="xsd:string"/>
      <!-- An optional expression. If specified, a footer cell with the specified value will
           be rendered for this column. Only applicable when the containing Row is iterated by
           a RowIterator. Not allowed when "footerSumValue" is specified. -->
      <xsd:attribute name="footerLabel" type="xsd:string"/>
      <!-- An optional expression, if specified, will be used as format pattern for the footer
           sum value. Normally not specified, so that the "format" and\or "formatType" of the
           cell value will be applied to footer sum value. Only applicable when "footerSumValue"
           is specified. The result of this expression must conform to the number format defined
           in java.text.DecimalFormat. -->
      <xsd:attribute name="footerSumFormat" type="xsd:string"/>
      <!-- An optional Numeric expression. If specified, a footer cell that sums the specified
           value for all cells in this column will be rendered. Pagination of the list does not
           affect the sum value. Only applicable when the containing row is iterated by a RowIterator.
           Not allowed when "footerLabel" is specified. -->
      <xsd:attribute name="footerSumValue" type="xsd:string"/>
      <!-- How the value is formatted; options include "general", "currency", and "email".  See
           the formatType enumeration. -->
      <xsd:attribute name="formatType" type="FormatType"/>
      <!-- If true, the user may enter a free-text value. If this property is set to false, the
           clearEnabled attribute will be treated as true to allow for users to delete their
           picked selection. -->
      <xsd:attribute name="freeInputEnabled" type="xsd:boolean" default="true"/>
      <!-- If true, the ListView will be grouped by this cell upon entering the page. Only one
           grouped cell is allowed at any given time and it is only applicable when the column
           is sortable. -->
      <xsd:attribute name="groupedOnEnter" type="xsd:string"/>
      <!-- If true, this Cell and any other grow-enabled Cell will expand to fill remaining space
           in the ListViewPanel. Only applicable when the ListView is set to stretch. -->
      <xsd:attribute name="grow" type="xsd:boolean" default="false"/>
      <!-- If true, generates a checkbox at the beginning of this cell. This checkbox can be
           used to check this entry in the nearest containing Iterator. Defaults to false. Only
           allowed if this cell is inside a CellIterator or under a Row inside a RowIterator. -->
      <xsd:attribute name="hasCheckBox" type="xsd:boolean" default="false"/>
      <!-- CSS height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="height" type="xsd:string"/>
      <!-- A Gosu expression which, if defined, is evaluated to create help info that guides
           the user to edit this widget. The help info will show up if the user hovers the mouse
           over or focuses on the widget, when the widget is in edit mode. -->
      <xsd:attribute name="helpText" type="xsd:string"/>
      <!-- If false, menu items under this input will be shown even when the input is not editable. -->
      <xsd:attribute name="hideChildrenIfReadOnly" type="xsd:boolean" default="true"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- Refers to an image file. If defined, makes this an icon cell. The "value" attribute
           should be a boolean expression describing whether the icon is visible in a given row. -->
      <xsd:attribute name="icon" type="xsd:string"/>
      <!-- Color of the icon. If not set will default to its font color. -->
      <xsd:attribute name="iconColor" type="xsd:string"/>
      <!-- The ALT text for any icon generated in the content cells -->
      <xsd:attribute name="iconLabel" type="xsd:string"/>
      <!-- An enumeration of icon types that determine what the 'icon' property on the widget
           is referring to. -->
      <xsd:attribute name="iconType" type="IconTypeEnum"/>
      <!-- Reference ID of the widget.  This does not have to be globally unique; it only has
           to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <!-- A Gosu expression that converts the presentation value to a model value. The presentation
           value string is exposed to this expression as the symbol "VALUE". -->
      <xsd:attribute name="inputConversion" type="xsd:string"/>
      <!-- An optional expression. If specified, a header cell with the specified value will
           be rendered for this column. Only applicable when the containing row is iterated by
           a RowIterator. -->
      <xsd:attribute name="label" type="xsd:string"/>
      <!-- Custom extension CSS style class to apply to the header. -->
      <xsd:attribute name="labelStyleClass" type="xsd:string"/>
      <!-- CSS max-height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="maxHeight" type="xsd:string"/>
      <!-- CSS max-width value. Can be `px`, or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="maxWidth" type="xsd:string"/>
      <!-- CSS min-height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="minHeight" type="xsd:string"/>
      <!-- CSS min-width value. Can be `px`, or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="minWidth" type="xsd:string"/>
      <!-- The number of child MenuItems to show in each column.  If not specified, all children
           will be shown in a single column. -->
      <xsd:attribute name="numEntriesPerColumn" type="xsd:integer" default="0"/>
      <!-- Gosu expression to be executed after the value is set from a picker. -->
      <xsd:attribute name="onPick" type="xsd:string"/>
      <!-- A Gosu expression that converts the model value to a presentation value. The model
           value is exposed to this expression as the symbol "VALUE". The return type of this
           expression must be String. -->
      <xsd:attribute name="outputConversion" type="xsd:string"/>
      <!-- The Location to use for user search criteria input, as a Gosu expression of the form
           "[popup name].push()". -->
      <xsd:attribute name="pickLocation" type="xsd:string" use="required"/>
      <!-- Relative width when printing to PDF. All widths are relative to the widths of the
           other columns in the ListView -->
      <xsd:attribute name="printWidth" type="xsd:string" default="1"/>
      <!-- A Gosu expression used to validate user value before setting it to the model. This
           expression can access any symbols available to this widget, and a "VALUE" symbol that
           represents the user value. If this expression returns null, the user value will be
           set into the model. Otherwise, an error message containing the result of the expression
           will be displayed on the page, the value will not be set into the model, and no actions
           can be performed until the error is corrected. -->
      <xsd:attribute name="requestValidationExpression" type="xsd:string"/>
      <!-- If true, then the cell must be filled out by the user -->
      <xsd:attribute name="required" type="xsd:string"/>
      <!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * Deprecated.
           DO NOT USE.                                           * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
           Consider using "onChange/onPick/inputConversion/outputConversion" where available.
           If specified and the Input is editable, then any new value of the Input is written
           to this expression (Gosu by default) instead of to "value".  The new value is exposed
           as the symbol "VALUE".  For instance if your value expression is "Foo.getSomething()"
           then it can't be written to since it's not an L-value; so you could specify a setter
           expression along the lines of "Foo.setSomething(VALUE)" Warning: if you use this attribute
           many pebbles features will not work, including but not limited to: * Correct automatic
           detection of the state of the updated data * Correct automatic detection of the editability
           of the data * Correct automatic detection of the maximum size of a text input -->
      <xsd:attribute name="setter" type="xsd:string"/>
      <!-- Boolean expression which determines whether or not to show a confirmation message
           when the field value is changed directly from the UI. It's NOT applicable when the
           value is changed indirectly, for example, as a result of client reflection. -->
      <xsd:attribute name="showConfirmMessage" type="xsd:string"/>
      <!-- If true, shows the icon defined by "icon" in the header cell for this column. The
           default value is true. -->
      <xsd:attribute name="showHeaderIcon" type="xsd:boolean" default="true"/>
      <!-- An optional comma-separated sequence of Expressions, each of which is assumed to be
           a dot-delimited path, the value by which this column will be sorted if the user clicks
           on the header cell. -->
      <xsd:attribute name="sortBy" type="xsd:string"/>
      <!-- Either "ascending" or "descending" -->
      <xsd:attribute name="sortDirection" type="WidgetSortDirection" default="ascending"/>
      <!-- The priority of sorting relative to other sorting elements like IteratorSort and Cell.
           The lower the number, the higher the priority.  The highest priority is "1" -->
      <xsd:attribute name="sortOrder" type="xsd:integer" default="0"/>
      <!-- CSS style class for the cell content; for instance, "miniButton" makes a link appear
           as a small button -->
      <xsd:attribute name="styleClass" type="LinkStyleClass"/>
      <!-- An optional attribute, if set, defer sub menu generation until user tries to open
           the menu. DO NOT set this flag unless the sub menu of this widget is very expensive
           to generate. Setting this flag will reduce time to load the page, however require
           fetching additional info from server in the background, when the menu gets opened
           for the first time after page loaded. -->
      <xsd:attribute name="subMenuOnDemand" type="xsd:boolean" default="false"/>
      <!-- Extra "alt" text to show when the user hovers the mouse over the header cell of this
           column. -->
      <xsd:attribute name="tooltip" type="xsd:string"/>
      <!-- If true, validate before commit that the value of this column is unique across all
           rows in the current page. Only meaningful when this column is editable. -->
      <xsd:attribute name="unique" type="xsd:boolean" default="false"/>
      <!-- A Gosu expression to run before committing the record. This expression can refer to
           any symbols available to this widget. If this expression returns null, the validation
           is considered successful; otherwise, the result of this expression will be displayed
           as an error and the record will not be committed. -->
      <xsd:attribute name="validationExpression" type="xsd:string"/>
      <!-- The label of this cell to be used when it has validation issues. Not needed when this
           cell has a "label". Required if the cell is editable but does not have a "label". -->
      <xsd:attribute name="validationLabel" type="xsd:string"/>
      <!-- The value this element binds to.  If the element is editable then this value is both
           read from and written to (unless "setter" is defined). -->
      <xsd:attribute name="value" type="xsd:string"/>
      <!-- The type of the value expression. -->
      <xsd:attribute name="valueType" type="xsd:string" default="entity.Organization"/>
      <!-- Boolean expression which, if false, hides the <i>contents</i> of the cell (its "ValueWidget"),
           but not the cell itself.  Needed since hiding the actual cell usually screws up the
           layout -->
      <xsd:attribute name="valueVisible" type="xsd:string"/>
      <!-- Specifies the vertical alignment of this cell. Valid values: "top", "middle", or "bottom".
           If no value is specified, the default alignment is determined by the cell type ("top"
           for Text Areas and Format Cells, "middle" for buttons and icons). -->
      <xsd:attribute name="verticalAlign" type="WidgetVerticalAlignment"/>
      <!-- Boolean expression which, if false, completely hides the widget and all its children -->
      <xsd:attribute name="visible" type="xsd:string"/>
      <!-- CSS width value. Can be `px`, or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="width" type="xsd:string"/>
      <!-- If default, defers to FormatType to decide whether to wrap or not.  If true, allows
           cell content to wrap. -->
      <xsd:attribute name="wrap" type="WrapType" default="default"/>
      <!-- If true, allows Header Cell text content to wrap. Defaults to true. -->
      <xsd:attribute name="wrapLabel" type="xsd:boolean" default="false"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- An Input for Organizations. -->
  <xsd:element name="OrgInput">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="LayoutConfig" minOccurs="0" maxOccurs="1"/>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="AddMenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="AddMenuItemIterator" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemDivider" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemIterator" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemSetRef" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemTree" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PickerMenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PostOnChange" minOccurs="0" maxOccurs="1"/>
          <xsd:element ref="Reflect" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="SearchItem" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:choice>
      </xsd:sequence>
      <!-- An optional action to take when the user clicks the value of this widget when the
           value is not being edited. See ActionBase for list of available action prefixes. When
           specified, the value of this widget will be rendered as a link when the value is not
           being edited. -->
      <xsd:attribute name="action" type="xsd:string"/>
      <!-- An optional boolean expression controlling whether the action should be available
           in this specific context when in read-only mode.  This is ignored if in edit mode
           or if the action is null.  This attribute will be deprecated in a future release,
           please use the 'available' attribute instead.  To disable action in readonly mode,
           you can set available=&quot;CurrentLocation.InEditMode || &lt;action-available-condition&gt;&quot; -->
      <xsd:attribute name="actionAvailable" type="xsd:string"/>
      <!-- Alignment of the widget ("left", "right", or "center") -->
      <xsd:attribute name="align" type="WidgetAlignment"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- Boolean expression which, if false, grays out the widget and all its children -->
      <xsd:attribute name="available" type="xsd:string"/>
      <!-- If true then the label is displayed in bold text. -->
      <xsd:attribute name="boldLabel" type="xsd:boolean" default="false"/>
      <!-- If true then the value is displayed in bold text when read-only. -->
      <xsd:attribute name="boldValue" type="xsd:boolean" default="false"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- Whether the user should be allowed to clear the selected value. If "true", an icon
           will be available which, when clicked, will clear the widget. This attribute will
           always be overridden and set to "true" if freeInputEnabled is set to false. -->
      <xsd:attribute name="clearEnabled" type="xsd:boolean" default="false"/>
      <!-- The confirmation message to show when "showConfirmMessage" is set. If not specified,
           a standard message will be used. -->
      <xsd:attribute name="confirmMessage" type="xsd:string"/>
      <!-- A Gosu expression used to convert the value picked from the picker popup before it
           is written to the model value of this widget. The picked value is available as the
           special symbol "PickedValue" -->
      <xsd:attribute name="conversionExpression" type="xsd:string"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- Boolean expression which, if false, makes this widget and all its children read-only -->
      <xsd:attribute name="editable" type="xsd:string" default="false"/>
      <!-- If true, instead of showing a hierarchical menu, the widget will show a single menu
           with sub-menus grouped under headers. -->
      <xsd:attribute name="flatten" type="xsd:boolean" default="false"/>
      <!-- An optional boolean expression, if returns true, this widget will get focus when start
           editing the containing location. -->
      <xsd:attribute name="focusOnStartEditing" type="xsd:string"/>
      <!-- How the value is formatted; options include "general", "currency", and "email".  See
           the formatType enumeration. -->
      <xsd:attribute name="formatType" type="FormatType"/>
      <!-- If true, the user may enter a free-text value. If this property is set to false, the
           clearEnabled attribute will be treated as true to allow for users to delete their
           picked selection. -->
      <xsd:attribute name="freeInputEnabled" type="xsd:boolean" default="true"/>
      <!-- A Gosu expression which, if defined, is evaluated to create help info that guides
           the user to edit this widget. The help info will show up if the user hovers the mouse
           over or focuses on the widget, when the widget is in edit mode. -->
      <xsd:attribute name="helpText" type="xsd:string"/>
      <!-- If false, menu items under this input will be shown even when the input is not editable. -->
      <xsd:attribute name="hideChildrenIfReadOnly" type="xsd:boolean" default="true"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- Reference ID of the widget.  This does not have to be globally unique; it only has
           to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <!-- A Gosu expression that converts the presentation value to a model value. The presentation
           value string is exposed to this expression as the symbol "VALUE". -->
      <xsd:attribute name="inputConversion" type="xsd:string"/>
      <!-- Label to render. -->
      <xsd:attribute name="label" type="xsd:string"/>
      <!-- Boolean expression which, if true, causes the label portion of the Input to be rendered
           above the value -->
      <xsd:attribute name="labelAbove" type="xsd:string" default="false"/>
      <!-- Custom extension CSS style class to apply to the label. -->
      <xsd:attribute name="labelStyleClass" type="xsd:string"/>
      <!-- The number of child MenuItems to show in each column.  If not specified, all children
           will be shown in a single column. -->
      <xsd:attribute name="numEntriesPerColumn" type="xsd:integer" default="0"/>
      <!-- Gosu expression to be executed after the picker popup has been used to pick a value.
           The picked value is available as the special symbol "PickedValue" -->
      <xsd:attribute name="onPick" type="xsd:string"/>
      <!-- A Gosu expression that converts the model value to a presentation value. The model
           value is exposed to this expression as the symbol "VALUE". The return type of this
           expression must be String. -->
      <xsd:attribute name="outputConversion" type="xsd:string"/>
      <!-- The picker popup used to pick a value, as a Gosu statement of the form "[popup name].push(...)". -->
      <xsd:attribute name="pickLocation" type="xsd:string" use="required"/>
      <!-- A Gosu expression used to validate user value before setting it to the model. This
           expression can access any symbols available to this widget, and a "VALUE" symbol that
           represents the user value. If this expression returns null, the user value will be
           set into the model. Otherwise, an error message containing the result of the expression
           will be displayed on the page, the value will not be set into the model, and no actions
           can be performed until the error is corrected. -->
      <xsd:attribute name="requestValidationExpression" type="xsd:string"/>
      <!-- If true, then the cell must be filled out by the user -->
      <xsd:attribute name="required" type="xsd:string"/>
      <!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * Deprecated.
           DO NOT USE.                                           * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
           Consider using "onChange/onPick/inputConversion/outputConversion" where available.
           If specified and the Input is editable, then any new value of the Input is written
           to this expression (Gosu by default) instead of to "value".  The new value is exposed
           as the symbol "VALUE".  For instance if your value expression is "Foo.getSomething()"
           then it can't be written to since it's not an L-value; so you could specify a setter
           expression along the lines of "Foo.setSomething(VALUE)" Warning: if you use this attribute
           many pebbles features will not work, including but not limited to: * Correct automatic
           detection of the state of the updated data * Correct automatic detection of the editability
           of the data * Correct automatic detection of the maximum size of a text input -->
      <xsd:attribute name="setter" type="xsd:string"/>
      <!-- Optional keyboard shortcut character in the form of "Q" or "ShiftQ"; the "Alt" key
           is implicit. This is only applicable when this widget has an "action" specified and
           the value is not being edited. -->
      <xsd:attribute name="shortcut" type="xsd:string"/>
      <!-- Boolean expression which determines whether or not to show a confirmation message
           when the field value is changed directly from the UI. It's NOT applicable when the
           value is changed indirectly, for example, as a result of client reflection. -->
      <xsd:attribute name="showConfirmMessage" type="xsd:string"/>
      <!-- An optional attribute, if set, defer sub menu generation until user tries to open
           the menu. DO NOT set this flag unless the sub menu of this widget is very expensive
           to generate. Setting this flag will reduce time to load the page, however require
           fetching additional info from server in the background, when the menu gets opened
           for the first time after page loaded. -->
      <xsd:attribute name="subMenuOnDemand" type="xsd:boolean" default="false"/>
      <!-- A Gosu expression to run before committing the record. This expression can refer to
           any symbols available to this widget. If this expression returns null, the validation
           is considered successful; otherwise, the result of this expression will be displayed
           as an error and the record will not be committed. -->
      <xsd:attribute name="validationExpression" type="xsd:string"/>
      <!-- The value this Input binds to as an Expression.  If the Input is editable then this
           value is both read from and written to (unless "setter" is defined). -->
      <xsd:attribute name="value" type="xsd:string" use="required"/>
      <!-- CSS max-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionMaxWidth" type="xsd:string"/>
      <!-- CSS min-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionMinWidth" type="xsd:string"/>
      <!-- CSS width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionWidth" type="xsd:string"/>
      <!-- The type of the value expression. -->
      <xsd:attribute name="valueType" type="xsd:string" default="entity.Organization"/>
      <!-- If used instead of "editable", specifies whether the Input is editable when data is
           being created -->
      <xsd:attribute name="visible" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- Top-level element of all PCF files. -->
  <xsd:element name="PCF">
    <xsd:complexType>
      <xsd:choice minOccurs="0" maxOccurs="unbounded">
        <xsd:element ref="AbstractTableLayout" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element ref="AbstractTile" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element ref="AcceleratedMenuActions" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element ref="CardViewPanel" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element ref="ChartPanel" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element ref="ChartTile" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element ref="ColumnDashboard" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element ref="DetailViewPanel" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element ref="DetailViewTile" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element ref="EmbeddedPanel" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element ref="EntryPoint" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element ref="ExitPoint" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element ref="Forward" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element ref="InfoBar" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element ref="InputSet" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element ref="JobWizard" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element ref="ListDetailPanel" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element ref="ListViewPanel" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element ref="ListViewTile" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element ref="LocationGroup" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element ref="LoginPage" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element ref="MediaGallery" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element ref="MediaUploader" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element ref="MenuActions" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element ref="MenuItemSet" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element ref="MenuLinks" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element ref="MenuTree" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element ref="ModalCell" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element ref="Page" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element ref="PanelColumn" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element ref="PanelRow" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element ref="PanelSet" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element ref="Popup" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element ref="PopupWizard" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element ref="RowSet" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element ref="Screen" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element ref="SearchPanel" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element ref="SystemAlertBar" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element ref="TabBar" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element ref="TemplatePanel" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element ref="TemplateTile" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element ref="TileInputSet" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element ref="ToolbarButtonSet" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element ref="TreeViewPanel" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element ref="WebMessageWorksheet" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element ref="Wizard" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element ref="WizardStepGroup" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element ref="WizardStepSet" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element ref="Worksheet" minOccurs="0" maxOccurs="unbounded"/>
      </xsd:choice>
    </xsd:complexType>
  </xsd:element>
  
  <!-- Used internally to combine all .pcfs into one big file. <i>You should not use this
       element yourself.</i> -->
  <xsd:element name="PCFConfigFiles">
    <xsd:complexType>
      <xsd:choice minOccurs="0" maxOccurs="unbounded">
        <xsd:element ref="PCF" minOccurs="0" maxOccurs="unbounded"/>
      </xsd:choice>
    </xsd:complexType>
  </xsd:element>
  
  <!-- The most common type of Location which contains a single Screen. -->
  <xsd:element name="Page">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="LocationEntryPoint" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element ref="Variable" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="Screen" minOccurs="0" maxOccurs="1"/>
          <xsd:element ref="ScreenRef" minOccurs="0" maxOccurs="1"/>
        </xsd:choice>
        <xsd:element ref="Code" minOccurs="0" maxOccurs="1"/>
      </xsd:sequence>
      <!-- Gosu expression to run after the location is canceled. -->
      <xsd:attribute name="afterCancel" type="xsd:string"/>
      <!-- Gosu expression to run after the location is updated. -->
      <xsd:attribute name="afterCommit" type="xsd:string"/>
      <!-- Gosu expression to run after this page is entered. -->
      <xsd:attribute name="afterEnter" type="xsd:string"/>
      <!-- Gosu expression to run after return to this page from a popup. Whether the popup was
           committed is exposed as a symbol with the name "committed". -->
      <xsd:attribute name="afterReturnFromPopup" type="xsd:string"/>
      <!-- If true, the location will always go back to edit mode after a commit / cancel -->
      <xsd:attribute name="alwaysInEditMode" type="xsd:boolean" default="false"/>
      <!-- If true, then the location will be saved in the auto-save cache when the user navigates
           out if (a) it is in edit mode, and (b) there is any unsaved data. The location is
           restored from the cache when the user returns to it -->
      <xsd:attribute name="autosaveable" type="xsd:boolean" default="true"/>
      <!-- Gosu expression to run when the location is canceled but before the rest of the cancel
           completes. -->
      <xsd:attribute name="beforeCancel" type="xsd:string"/>
      <!-- Gosu expression to run before the location is updated but after the UI is validated. -->
      <xsd:attribute name="beforeCommit" type="xsd:string"/>
      <!-- Gosu expression to run before the location is updated and before the UI is validated. -->
      <xsd:attribute name="beforeValidate" type="xsd:string"/>
      <!-- The optional browser title of the location. If specified, the value will be displayed
           in the browser window title when this location is being viewed in the main content
           area. -->
      <xsd:attribute name="browserTitle" type="xsd:string"/>
      <!-- A boolean expression which, if false, prevents the user from putting the location
           into edit mode -->
      <xsd:attribute name="canEdit" type="xsd:string"/>
      <!-- A boolean expression which, if false, means the user has no permission to visit the
           location, and links to the location will be either invisible or grayed out, depending
           on context. -->
      <xsd:attribute name="canVisit" type="xsd:string"/>
      <!-- If false, the location can still be kept in the autosave cache, but does not appear
           as unsaved work to the user (with link highlighting etc.). -->
      <xsd:attribute name="countsAsWork" type="xsd:boolean" default="true"/>
      <!-- Use this to add your own comments to this element. For now this attribute does nothing;
           later if we create a "UI dictionary" or PCF editor, the description will show up there. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- An optional boolean expression, if specified, determines whether validation issues
           on a particular entity should be fixed on this page. The entity instance with validation
           issues is exposed to this expression as "VALUE". For example, "VALUE typeis entity.MyBean".
           If not specified, validation issues on any entity that matches type of the "validationParameter"
           should be fixed on this page.<br> No point to specify this attribute, if "validationParameter"
           is not defined. -->
      <xsd:attribute name="handlesValidationIssue" type="xsd:string"/>
      <!-- If true, the left navigation menu will be hidden when there are no menulinks -->
      <xsd:attribute name="hideLeftNavIfEmpty" type="xsd:boolean" default="false"/>
      <!-- If true then changed inputs and cells in this location will be highlighted. -->
      <xsd:attribute name="highlightChangedValues" type="xsd:boolean" default="true"/>
      <!-- ID of this Location. Must be unique among all Locations. -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <!-- ID of the InfoBar content for this location. Normally not specifed, so that the page
           inherits the infoBar from its ancestor LocationGroup. -->
      <xsd:attribute name="infoBar" type="xsd:string"/>
      <!-- This expression, when specified, appends a link to the concurrent data change error
           message. The text of the link will be the value of the display key Java.Message.ConcurrentDataChange.Link.
           Clicking on the link will execute the given expression. A concurrent data change error
           happens if a user's changes cannot be committed because they clash with concurrent
           changes by a different user. -->
      <xsd:attribute name="onConcurrentDataChange" type="xsd:string"/>
      <!-- A Gosu expression to run when this location is resumed from the autosave cache. -->
      <xsd:attribute name="onResume" type="xsd:string"/>
      <!-- Reference to the "parent location" of this location, to specifiy the hierarchy of
           pcf locations. Used for the automatically generated "up link" in the title bar, highlighting
           of current menu links, and grouping items under "Unsaved Work". Usually the parent
           is the location right above this location in the application hierarchy, i.e. the parent
           of "ActivityDetailWorksheet" is "ClaimWorkplan", the parent of "Desktop Activities"
           is "Desktop" and "Desktop" has no parent at all. -->
      <xsd:attribute name="parent" type="xsd:string"/>
      <!-- If true, creates an "up link" icon in the title bar that links to the parent location.
            The upLink will pop the current location off the stack if the parent location is
           in the stack; otherwise, the upLink will "go" to the parent location, passing all
           of the symbols from the current page in a manner consistent with the "go" action. -->
      <xsd:attribute name="showUpLink" type="xsd:boolean" default="false"/>
      <!-- Gosu expression to run when the location goes into edit mode. -->
      <xsd:attribute name="startEditing" type="xsd:string"/>
      <!-- Boolean expression which, if true, puts the location in edit mode as soon as the user
           enters it -->
      <xsd:attribute name="startInEditMode" type="xsd:string" default="false"/>
      <!-- The title of the location.  The title is shown in the top title bar, unless the Screen
           uses a special TitleBar element to override it. -->
      <xsd:attribute name="title" type="xsd:string" use="required"/>
      <!-- If false, the page will disable the automatic validation that happens on every commit.
            Only set this attribute to false if you're really sure you know what you're doing. -->
      <xsd:attribute name="validateOnBundleCommit" type="xsd:boolean" default="true"/>
      <!-- The name of an argument on a LocationEntryPoint, used for fixing entity validation
           issues. -->
      <xsd:attribute name="validationParameter" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- A column of Panels (i.e. DetailViews, ListViews, etc.). It's used inside a PanelRow. -->
  <xsd:element name="PanelColumn">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="AbstractTableLayout" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="CardViewPanel" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ChartPanel" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="DetailViewPanel" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="EmbeddedPanel" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="Image" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ImageAction" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ImageMediaObject" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ListDetailPanel" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ListViewPanel" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MediaGallery" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MediaUploader" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PanelColumn" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PanelDivider" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PanelIterator" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PanelRef" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PanelRow" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PanelSet" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="SearchPanel" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="Spacer" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="TemplatePanel" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="TreeViewPanel" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:choice>
      </xsd:sequence>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- Boolean expression which, if false, grays out the widget and all its children -->
      <xsd:attribute name="available" type="xsd:string"/>
      <!-- If true, the Widget will have a border around it. Purely a visual effect. -->
      <xsd:attribute name="border" type="xsd:boolean" default="false"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- Boolean expression which, if false, makes this widget and all its children read-only -->
      <xsd:attribute name="editable" type="xsd:string"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- (Optional) reference ID of the widget.  This does not have to be globally unique;
           it only has to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string"/>
      <!-- If true, independent of 'panel inner spacing', the container will left indent its
           children by a fixed amount. This is useful for displaying nested data throughout a
           page. Purely a visual effect. -->
      <xsd:attribute name="leftIndent" type="xsd:boolean" default="false"/>
      <!-- CSS max-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="maxWidth" type="xsd:string"/>
      <!-- CSS min-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="minWidth" type="xsd:string"/>
      <!-- In general, determines the amount of spacing INSIDE of the Panel in all 4 directions:
           top, right, bottom, left. However, different Panels may have requirements that prevent
           all 4 directions from being modified. -->
      <xsd:attribute name="panelInnerSpacing" type="WidgetSpacing" default="none"/>
      <!-- In general, determines the amount of spacing OUTSIDE of the Panel in all 4 directions:
           top, right, bottom, left. However, different Panels may have requirements that prevent
           all 4 directions from being modified. -->
      <xsd:attribute name="panelOuterSpacing" type="WidgetSpacing" default="none"/>
      <!-- The style of the Panel. In general, this refers to the background color, but some
           styles can change other aspects such as font color, spacing, or filters. -->
      <xsd:attribute name="panelStyle" type="xsd:string"/>
      <!-- Boolean expression which, if false, completely hides the widget and all its children -->
      <xsd:attribute name="visible" type="xsd:string"/>
      <!-- CSS width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="width" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- A horizontal line for separating panels -->
  <xsd:element name="PanelDivider">
    <xsd:complexType>
      <xsd:choice minOccurs="0" maxOccurs="unbounded"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- Boolean expression which, if false, completely hides the widget -->
      <xsd:attribute name="visible" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- Creates as many copies of its Panel content as there are components in the array referenced
       by "value".  Supplies the component value to the created content as "elementName". -->
  <xsd:element name="PanelIterator">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="IteratorSort" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="Variable" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:choice>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="AbstractTableLayout" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="CardViewPanel" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ChartPanel" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="DetailViewPanel" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="EmbeddedPanel" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="Image" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ImageAction" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ImageMediaObject" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ListDetailPanel" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ListViewPanel" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MediaGallery" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MediaUploader" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PanelColumn" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PanelDivider" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PanelIterator" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PanelRef" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PanelRow" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PanelSet" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="SearchPanel" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="Spacer" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="TemplatePanel" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="TreeViewPanel" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:choice>
      </xsd:sequence>
      <!-- If true, will add something like " (1-15 of 100)" next to paging control, taking the
           paging information from this Iterator. -->
      <xsd:attribute name="appendPageInfo" type="xsd:boolean" default="false"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- A Gosu expression (evaluates to a boolean) which designates whether or not the checkbox
           for a panel is visible. Does nothing if hasCheckBoxes is false. -->
      <xsd:attribute name="checkBoxVisible" type="xsd:string"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- As each element in the array result of "value" is displayed, it is exposed as a symbol
           with the name "elementName", which the contents of this iterator can refer to -->
      <xsd:attribute name="elementName" type="xsd:string" use="required"/>
      <!-- If true, generates a checkbox on the left of each entry. Default is false unless the
           "toRemove" attribute is specified. This attribute only applies to the content entries
           directly under this iterator. -->
      <xsd:attribute name="hasCheckBoxes" type="xsd:boolean" default="false"/>
      <!-- If true, then generated checkboxes will be invisible when the panel is read-only.
           Does nothing if hasCheckboxes=false. Defaults to false -->
      <xsd:attribute name="hideCheckBoxesIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- (Optional) reference ID of the widget.  This does not have to be globally unique;
           it only has to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string"/>
      <!-- The number of elements in a single page, or 0 to disable paging. -->
      <xsd:attribute name="pageSize" type="xsd:integer"/>
      <!-- The Gosu expression that is evaluated to add a new value to the list. The value is
           exposed using the name specified by "elementName". An example would be "Foo.addToBars(bar)".
            Either toAdd or toCreateAndAdd must be defined for the user to add entries to the
           iterator; however you cannot define both.  If the entries are not entities, toCreateAndAdd
           must be used instead of toAdd. -->
      <xsd:attribute name="toAdd" type="xsd:string"/>
      <!-- The Gosu expression that is evaluated to create a new value and add it to the list.
           An example would be "Foo.addToBars(Foo.createNewBar())".  Either toAdd or toCreateAndAdd
           must be defined for the user to add entries to the iterator; however you cannot define
           both. -->
      <xsd:attribute name="toCreateAndAdd" type="xsd:string"/>
      <!-- The Gosu expression that is evaluated to remove a value from the Iterator. The value
           is exposed using the name specified by "elementName".  Must be defined for the user
           to be able to remove values from the iterator. -->
      <xsd:attribute name="toRemove" type="xsd:string"/>
      <!-- Lets you manually specify the type of element exposed as "elementName".  This is useful
           if you have special knowledge about the type of element returned by "value": for example,
           if the field referred to returns an array of Contacts but you happen to know that
           they are guaranteed to all be Persons -->
      <xsd:attribute name="type" type="xsd:string"/>
      <!-- A Gosu expression that evaluates to the elements over which to iterate. Must evaluate
           to an Object array or a IQueryBeanResult. -->
      <xsd:attribute name="value" type="xsd:string" use="required"/>
      <!-- The type of the value expression. -->
      <xsd:attribute name="valueType" type="xsd:string" use="required"/>
      <!-- Boolean expression which, if false, completely hides the widget and all its children -->
      <xsd:attribute name="visible" type="xsd:string" default="true"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- An optionally collapsible container that includes a panel (such as a DetailView, ListView,
       PanelSet or CardView) and (optionally) supplies it with title bar, toolbar, and instructional
       text. -->
  <xsd:element name="PanelRef">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="TitleBar" minOccurs="0" maxOccurs="1"/>
        <xsd:element ref="Toolbar" minOccurs="0" maxOccurs="1"/>
        <xsd:element ref="Verbatim" minOccurs="0" maxOccurs="1"/>
        <xsd:choice minOccurs="0" maxOccurs="1">
          <xsd:element ref="AbstractTableLayout"/>
          <xsd:element ref="CardViewPanel"/>
          <xsd:element ref="ChartPanel"/>
          <xsd:element ref="DetailViewPanel"/>
          <xsd:element ref="EmbeddedPanel"/>
          <xsd:element ref="ListDetailPanel"/>
          <xsd:element ref="ListViewPanel"/>
          <xsd:element ref="MediaGallery"/>
          <xsd:element ref="MediaUploader"/>
          <xsd:element ref="PanelColumn"/>
          <xsd:element ref="PanelRow"/>
          <xsd:element ref="PanelSet"/>
          <xsd:element ref="SearchPanel"/>
          <xsd:element ref="TemplatePanel"/>
          <xsd:element ref="TreeViewPanel"/>
        </xsd:choice>
      </xsd:sequence>
      <!-- If set then only one member of the "accordion group" can be expanded at a time. So
           expanding this Container will collapse all other Containers with the same accordion
           group id. -->
      <xsd:attribute name="accordionGroupId" type="xsd:string"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- Boolean expression which, if false, grays out the widget and all its children -->
      <xsd:attribute name="available" type="xsd:string"/>
      <!-- If true, the Widget will have a border around it. Purely a visual effect. -->
      <xsd:attribute name="border" type="xsd:boolean" default="false"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- If true, the Container will have a title bar section and will be collapsible. Purely
           a visual effect. -->
      <xsd:attribute name="collapsible" type="xsd:boolean" default="false"/>
      <!-- ID of the panel (CardViewPanel,ChartPanel,DetailViewPanel,ListDetailPanel,PanelRow,PanelSet,SearchPanel,TreeViewPanel)
           to include by reference -->
      <xsd:attribute name="def" type="xsd:string"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- Boolean expression which, if false, makes this widget and all its children read-only -->
      <xsd:attribute name="editable" type="xsd:string"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- The name of a .png file, or .svg file, or font glyph. The Widget's iconType determines
           which one. -->
      <xsd:attribute name="icon" type="xsd:string"/>
      <!-- Color of the icon. If not set will default to its font color. -->
      <xsd:attribute name="iconColor" type="xsd:string"/>
      <!-- An enumeration of icon types that determine what the 'icon' property on the widget
           is referring to. -->
      <xsd:attribute name="iconType" type="IconTypeEnum"/>
      <!-- (Optional) reference ID of the widget.  This does not have to be globally unique;
           it only has to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string"/>
      <!-- If true, independent of 'panel inner spacing', the container will left indent its
           children by a fixed amount. This is useful for displaying nested data throughout a
           page. Purely a visual effect. -->
      <xsd:attribute name="leftIndent" type="xsd:boolean" default="false"/>
      <!-- If defined, "mode" is evaluated and its result is converted to a String; the panel
           will be loaded whose "mode" matches the evaluated "mode" of this element.  If no panel
           is found with a matching "mode", then the panel with mode="default" is used; if there
           is no default a runtime exception is thrown -->
      <xsd:attribute name="mode" type="xsd:string"/>
      <!-- In general, determines the amount of spacing INSIDE of the Panel in all 4 directions:
           top, right, bottom, left. However, different Panels may have requirements that prevent
           all 4 directions from being modified. -->
      <xsd:attribute name="panelInnerSpacing" type="WidgetSpacing" default="none"/>
      <!-- In general, determines the amount of spacing OUTSIDE of the Panel in all 4 directions:
           top, right, bottom, left. However, different Panels may have requirements that prevent
           all 4 directions from being modified. -->
      <xsd:attribute name="panelOuterSpacing" type="WidgetSpacing" default="none"/>
      <!-- The style of the Panel. In general, this refers to the background color, but some
           styles can change other aspects such as font color, spacing, or filters. -->
      <xsd:attribute name="panelStyle" type="xsd:string"/>
      <!-- Normally the collapsed state of a Container is persisted using its fully qualified
           id, so a particular container on a particular page will remember whether it is expanded
           or collapsed. Setting a sharedPersistentCollapseId allows multiple Containers, or
           the same Container used on different pages, to share their collapsed state. So collapsing
           a Container with sharedPersistentCollapseId "X" on one page will cause a Container
           with that same id on another page to be collapsed when that page is visited. -->
      <xsd:attribute name="sharedPersistentCollapseId" type="xsd:string"/>
      <!-- If true, and the Container is set to collapsible: true, then the Container will start
           out collapsed. However, after the user has interacted with the Container, its collapsed/open
           state will persist on the client. Purely a visual effect. -->
      <xsd:attribute name="startCollapsed" type="xsd:boolean" default="false"/>
      <!-- If true, then the Badge in the TitleBar section of the Container will only be visible
           when the Container is collapsed. -->
      <xsd:attribute name="titleBadgeOnlyVisibleWhenCollapsed" type="xsd:boolean" default="false"/>
      <!-- Boolean expression which, if false, completely hides the widget and all its children -->
      <xsd:attribute name="visible" type="xsd:string"/>
      <!-- A comma separated list of widgets that are needed by the section. -->
      <xsd:attribute name="widgets" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- A row of Panels (i.e. DetailViews, ListViews, etc.).  Useful for arranging multiple
       PanelColumns horizontally. -->
  <xsd:element name="PanelRow">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="Expose" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ExposeIterator" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ExposeRowTree" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ReferencedWidget" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="Require" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:choice>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="AbstractTableLayout" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="CardViewPanel" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ChartPanel" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="DetailViewPanel" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="EmbeddedPanel" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="Image" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ImageAction" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ImageMediaObject" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ListDetailPanel" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ListViewPanel" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MediaGallery" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MediaUploader" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PanelColumn" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PanelDivider" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PanelIterator" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PanelRef" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PanelRow" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PanelSet" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="SearchPanel" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="Spacer" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="TemplatePanel" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="TreeViewPanel" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:choice>
      </xsd:sequence>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- Boolean expression which, if false, grays out the widget and all its children -->
      <xsd:attribute name="available" type="xsd:string"/>
      <!-- If true, the Widget will have a border around it. Purely a visual effect. -->
      <xsd:attribute name="border" type="xsd:boolean" default="false"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- If true, there will be a visible divider between each child. Defaults to false -->
      <xsd:attribute name="columnDivider" type="xsd:boolean" default="false"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- Boolean expression which, if false, makes this widget and all its children read-only -->
      <xsd:attribute name="editable" type="xsd:string"/>
      <!-- CSS height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="height" type="xsd:string"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- (Optional) reference ID of the widget.  This does not have to be globally unique;
           it only has to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string"/>
      <!-- If true, independent of 'panel inner spacing', the container will left indent its
           children by a fixed amount. This is useful for displaying nested data throughout a
           page. Purely a visual effect. -->
      <xsd:attribute name="leftIndent" type="xsd:boolean" default="false"/>
      <!-- CSS max-height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="maxHeight" type="xsd:string"/>
      <!-- CSS min-height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="minHeight" type="xsd:string"/>
      <!-- In general, determines the amount of spacing INSIDE of the Panel in all 4 directions:
           top, right, bottom, left. However, different Panels may have requirements that prevent
           all 4 directions from being modified. -->
      <xsd:attribute name="panelInnerSpacing" type="WidgetSpacing" default="none"/>
      <!-- In general, determines the amount of spacing OUTSIDE of the Panel in all 4 directions:
           top, right, bottom, left. However, different Panels may have requirements that prevent
           all 4 directions from being modified. -->
      <xsd:attribute name="panelOuterSpacing" type="WidgetSpacing" default="none"/>
      <!-- The style of the Panel. In general, this refers to the background color, but some
           styles can change other aspects such as font color, spacing, or filters. -->
      <xsd:attribute name="panelStyle" type="xsd:string"/>
      <!-- Boolean expression which, if false, completely hides the widget and all its children -->
      <xsd:attribute name="visible" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- A reusable set of panel(s). -->
  <xsd:element name="PanelSet">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="Expose" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ExposeIterator" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ExposeRowTree" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ReferencedWidget" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="Require" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="Variable" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:choice>
        <xsd:element ref="Verbatim" minOccurs="0" maxOccurs="1"/>
        <xsd:element ref="Layout" minOccurs="0" maxOccurs="1"/>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="AbstractTableLayout" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="CardViewPanel" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ChartPanel" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="DetailViewPanel" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="EmbeddedPanel" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="Image" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ImageAction" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ImageMediaObject" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ListDetailPanel" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ListViewPanel" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MediaGallery" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MediaUploader" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PanelColumn" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PanelDivider" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PanelIterator" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PanelRef" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PanelRow" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PanelSet" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="SearchPanel" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="Spacer" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="TemplatePanel" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="TreeViewPanel" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:choice>
        <xsd:element ref="Code" minOccurs="0" maxOccurs="1"/>
      </xsd:sequence>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- Boolean expression which, if false, grays out the widget and all its children -->
      <xsd:attribute name="available" type="xsd:string"/>
      <!-- If true, the Widget will have a border around it. Purely a visual effect. -->
      <xsd:attribute name="border" type="xsd:boolean" default="false"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- Boolean expression which, if false, makes this widget and all its children read-only -->
      <xsd:attribute name="editable" type="xsd:string"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- (Optional) reference ID of the widget.  This does not have to be globally unique;
           it only has to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string"/>
      <!-- If true, independent of 'panel inner spacing', the container will left indent its
           children by a fixed amount. This is useful for displaying nested data throughout a
           page. Purely a visual effect. -->
      <xsd:attribute name="leftIndent" type="xsd:boolean" default="false"/>
      <!-- An optional String which, if specified, means that any element dynamically including
           this widget must specify the same mode.  There is also a special mode "default" you
           can use which means "Use this widget if no widget with the specified mode exists".
            You can also have this widget match more than one mode by separating mode strings
           with a | character. -->
      <xsd:attribute name="mode" type="xsd:string"/>
      <!-- In general, determines the amount of spacing INSIDE of the Panel in all 4 directions:
           top, right, bottom, left. However, different Panels may have requirements that prevent
           all 4 directions from being modified. -->
      <xsd:attribute name="panelInnerSpacing" type="WidgetSpacing" default="none"/>
      <!-- In general, determines the amount of spacing OUTSIDE of the Panel in all 4 directions:
           top, right, bottom, left. However, different Panels may have requirements that prevent
           all 4 directions from being modified. -->
      <xsd:attribute name="panelOuterSpacing" type="WidgetSpacing" default="none"/>
      <!-- The style of the Panel. In general, this refers to the background color, but some
           styles can change other aspects such as font color, spacing, or filters. -->
      <xsd:attribute name="panelStyle" type="xsd:string"/>
      <!-- Boolean expression which, if false, completely hides the widget and all its children -->
      <xsd:attribute name="visible" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- A password input -->
  <xsd:element name="PasswordInput">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="LayoutConfig" minOccurs="0" maxOccurs="1"/>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="AddMenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="AddMenuItemIterator" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemDivider" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemIterator" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemSetRef" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemTree" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PickerMenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PostOnChange" minOccurs="0" maxOccurs="1"/>
          <xsd:element ref="Reflect" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="SearchItem" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:choice>
      </xsd:sequence>
      <!-- An optional action to take when the user clicks the value of this widget when the
           value is not being edited. See ActionBase for list of available action prefixes. When
           specified, the value of this widget will be rendered as a link when the value is not
           being edited. -->
      <xsd:attribute name="action" type="xsd:string"/>
      <!-- An optional boolean expression controlling whether the action should be available
           in this specific context when in read-only mode.  This is ignored if in edit mode
           or if the action is null.  This attribute will be deprecated in a future release,
           please use the 'available' attribute instead.  To disable action in readonly mode,
           you can set available=&quot;CurrentLocation.InEditMode || &lt;action-available-condition&gt;&quot; -->
      <xsd:attribute name="actionAvailable" type="xsd:string"/>
      <!-- Alignment of the widget ("left", "right", or "center") -->
      <xsd:attribute name="align" type="WidgetAlignment"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- Optional. Expression that returns an gw.api.contact.AutocompleteHandler which produces
           auto complete suggestions for this widget. USE WITH CAUTION: If specified, the handler
           will be called at server side on each user key stroke. -->
      <xsd:attribute name="autoComplete" type="xsd:string"/>
      <!-- An optional attribute to specify additional arguments to pass to the "autoComplete"
           handler, if exists.
         (You don't need to specify the id of this widget as part
           of this attribute, because the value of this widget
         is passed to the handler
           by default; If the id of this widget is specified, the argument value passed to the

                   handler will be null, since the value of this widget has not been fully specified
           when the handler is invoked.)
         Refers to the "id" attribute of other value
           widget on page. Multiple ids can be separated by ",".
         If specified, the latest
           value of these widgets will be passed to the autoComplete handler
         when retrieving
           auto complete info. -->
      <xsd:attribute name="autoCompleteArgIds" type="xsd:string"/>
      <!-- If specified, delays autocomplete functionality until the user has entered the specified
           number of characters. -->
      <xsd:attribute name="autoCompleteTriggerChars" type="xsd:integer"/>
      <!-- Boolean expression which, if false, grays out the widget and all its children -->
      <xsd:attribute name="available" type="xsd:string"/>
      <!-- If true then the label is displayed in bold text. -->
      <xsd:attribute name="boldLabel" type="xsd:boolean" default="false"/>
      <!-- If true then the value is displayed in bold text when read-only. -->
      <xsd:attribute name="boldValue" type="xsd:boolean" default="false"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- The confirmation message to show when "showConfirmMessage" is set. If not specified,
           a standard message will be used. -->
      <xsd:attribute name="confirmMessage" type="xsd:string"/>
      <!-- A Gosu expression used to convert the value picked from a popup before set it into
           the model value of this widget. The picked value will be exposed as a symbol with
           the name "PickedValue" -->
      <xsd:attribute name="conversionExpression" type="xsd:string"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- Boolean expression which, if false, makes this widget and all its children read-only -->
      <xsd:attribute name="editable" type="xsd:string" default="false"/>
      <!-- If true, enables html markup in the autocomplete suggestions for this text input by
           means of the following special tags: [i]italic[/i] - makes text italic, [b]bold[/b]
           - makes text bold and [hl]highlighted[/hl] - highlights the text -->
      <xsd:attribute name="enableAutoCompleteMarkup" type="xsd:boolean" default="false"/>
      <!-- If true, instead of showing a hierarchical menu, the widget will show a single menu
           with sub-menus grouped under headers. -->
      <xsd:attribute name="flatten" type="xsd:boolean" default="false"/>
      <!-- An optional boolean expression, if returns true, this widget will get focus when start
           editing the containing location. -->
      <xsd:attribute name="focusOnStartEditing" type="xsd:string"/>
      <!-- An optional expression that returns a format pattern, which must conform to the number
           format defined in java.text.DecimalFormat. When the underlying data type is not a
           Number, only the prefix and suffix of the pattern will be applied. For example, "#.#%"
           formats the Number value as percentage with up to 1 decimal digit. -->
      <xsd:attribute name="format" type="xsd:string"/>
      <!-- How the value is formatted; options include "general", "currency", and "email".  See
           the formatType enumeration. -->
      <xsd:attribute name="formatType" type="FormatType"/>
      <!-- A Gosu expression which, if defined, is evaluated to create help info that guides
           the user to edit this widget. The help info will show up if the user hovers the mouse
           over or focuses on the widget, when the widget is in edit mode. -->
      <xsd:attribute name="helpText" type="xsd:string"/>
      <!-- If false, menu items under this input will be shown even when the input is not editable. -->
      <xsd:attribute name="hideChildrenIfReadOnly" type="xsd:boolean" default="true"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- Reference ID of the widget.  This does not have to be globally unique; it only has
           to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <!-- A Gosu expression that converts the presentation value to a model value. The presentation
           value string is exposed to this expression as the symbol "VALUE". -->
      <xsd:attribute name="inputConversion" type="xsd:string"/>
      <!-- A gosu expression that returns a string to use as the input mask. If not specified,
           the input mask (if any) specified on the value's field validator will be used. This
           field should only be necessary in cases where the data type has no mask or where the
           mask needs to be conditional. The input mask returned should be of the same format
           as a mask specified using the input-mask attribute on a field validator (use # for
           wildcards). A mask that contains no wildcards will just be used as a placeholder value.
           The input mask is recalculated on every render, which means that if the mask is conditional
           and dependent on other data on this page that it can change from one request to the
           next. -->
      <xsd:attribute name="inputMask" type="xsd:string"/>
      <!-- Label to render. -->
      <xsd:attribute name="label" type="xsd:string"/>
      <!-- Boolean expression which, if true, causes the label portion of the Input to be rendered
           above the value -->
      <xsd:attribute name="labelAbove" type="xsd:string" default="false"/>
      <!-- Custom extension CSS style class to apply to the label. -->
      <xsd:attribute name="labelStyleClass" type="xsd:string"/>
      <!-- The maximum number of characters allowed for an input field. -->
      <xsd:attribute name="maxChars" type="xsd:integer" default="0"/>
      <!-- The number of child MenuItems to show in each column.  If not specified, all children
           will be shown in a single column. -->
      <xsd:attribute name="numEntriesPerColumn" type="xsd:integer" default="0"/>
      <!-- Gosu expression to be executed after the value is set from a picker. -->
      <xsd:attribute name="onPick" type="xsd:string"/>
      <!-- A Gosu expression that converts the model value to a presentation value. The model
           value is exposed to this expression as the symbol "VALUE". The return type of this
           expression must be String. -->
      <xsd:attribute name="outputConversion" type="xsd:string"/>
      <!-- A Gosu expression that returns a regular expression string to validate the user input.
            If not specified, the regular expression (if any) specified on the value's field
           validator will be used.  This field should only be necessary in cases where the data
           type has no regular expression or where it needs to be conditional. The value returned
           should be of the same format as a regular expression specified on a field validator.
            This property is recalculated on every render, which means that if the regular expression
           is conditional and dependent on other data on this page that it can change from one
           request to the next. -->
      <xsd:attribute name="regex" type="xsd:string"/>
      <!-- A Gosu expression used to validate user value before setting it to the model. This
           expression can access any symbols available to this widget, and a "VALUE" symbol that
           represents the user value. If this expression returns null, the user value will be
           set into the model. Otherwise, an error message containing the result of the expression
           will be displayed on the page, the value will not be set into the model, and no actions
           can be performed until the error is corrected. -->
      <xsd:attribute name="requestValidationExpression" type="xsd:string"/>
      <!-- If true, then the cell must be filled out by the user -->
      <xsd:attribute name="required" type="xsd:string"/>
      <!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * Deprecated.
           DO NOT USE.                                           * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
           Consider using "onChange/onPick/inputConversion/outputConversion" where available.
           If specified and the Input is editable, then any new value of the Input is written
           to this expression (Gosu by default) instead of to "value".  The new value is exposed
           as the symbol "VALUE".  For instance if your value expression is "Foo.getSomething()"
           then it can't be written to since it's not an L-value; so you could specify a setter
           expression along the lines of "Foo.setSomething(VALUE)" Warning: if you use this attribute
           many pebbles features will not work, including but not limited to: * Correct automatic
           detection of the state of the updated data * Correct automatic detection of the editability
           of the data * Correct automatic detection of the maximum size of a text input -->
      <xsd:attribute name="setter" type="xsd:string"/>
      <!-- Optional keyboard shortcut character in the form of "Q" or "ShiftQ"; the "Alt" key
           is implicit. This is only applicable when this widget has an "action" specified and
           the value is not being edited. -->
      <xsd:attribute name="shortcut" type="xsd:string"/>
      <!-- Boolean expression which determines whether or not to show a confirmation message
           when the field value is changed directly from the UI. It's NOT applicable when the
           value is changed indirectly, for example, as a result of client reflection. -->
      <xsd:attribute name="showConfirmMessage" type="xsd:string"/>
      <!-- An optional attribute, if set, defer sub menu generation until user tries to open
           the menu. DO NOT set this flag unless the sub menu of this widget is very expensive
           to generate. Setting this flag will reduce time to load the page, however require
           fetching additional info from server in the background, when the menu gets opened
           for the first time after page loaded. -->
      <xsd:attribute name="subMenuOnDemand" type="xsd:boolean" default="false"/>
      <!-- If set to a type other than 'all', will prevent the user from inputting certain types
           of characters on the client on a per character basis. Defaults to 'defaultForType'.
           Can be used in conjunction with the Input Mask property. For instance, a US phone
           number client mask could be implemented by setting this property to 'numeric' and
           the input mask to '+1(###)###-####. Some value widgets, like passwords or dates, may
           modify or ignore this property. This property has no effect on server or database
           level validation of data or input; meaning, an authenticated user could choose to
           manually submit a form with invalid data that would bypass this check. For database
           level validation see the 'regex' property. -->
      <xsd:attribute name="userInputRestriction" type="InputRestrictionType" default="defaultForType"/>
      <!-- A Gosu expression to run before committing the record. This expression can refer to
           any symbols available to this widget. If this expression returns null, the validation
           is considered successful; otherwise, the result of this expression will be displayed
           as an error and the record will not be committed. -->
      <xsd:attribute name="validationExpression" type="xsd:string"/>
      <!-- The value this Input binds to as an Expression.  If the Input is editable then this
           value is both read from and written to (unless "setter" is defined). -->
      <xsd:attribute name="value" type="xsd:string" use="required"/>
      <!-- CSS max-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionMaxWidth" type="xsd:string"/>
      <!-- CSS min-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionMinWidth" type="xsd:string"/>
      <!-- CSS width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionWidth" type="xsd:string"/>
      <!-- The type of the value expression. -->
      <xsd:attribute name="valueType" type="xsd:string" default="java.lang.String"/>
      <!-- If used instead of "editable", specifies whether the Input is editable when data is
           being created -->
      <xsd:attribute name="visible" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- Performance Indicator -->
  <xsd:element name="PerformanceIndicator">
    <xsd:complexType>
      <xsd:choice minOccurs="0" maxOccurs="unbounded">
        <xsd:element ref="BadgeProperties" minOccurs="0" maxOccurs="1"/>
      </xsd:choice>
      <!-- Expression that provides a destination PCF for a clickable link -->
      <xsd:attribute name="action" type="xsd:string"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- Text color of an indicator's value. Preferably use gw.api.web.color.PIColors. -->
      <xsd:attribute name="color" type="xsd:string"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- (Optional) reference ID of the widget.  This does not have to be globally unique;
           it only has to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string"/>
      <!-- Label of an indicator. -->
      <xsd:attribute name="label" type="xsd:string" use="required"/>
      <!-- CSS max-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Overrides the SASS variable for max width of Indicator's label. -->
      <xsd:attribute name="maxLabelWidth" type="xsd:string"/>
      <!-- An expression that indicates if the value should be formatted as a percentage value.
           Applicable only to numeric values. -->
      <xsd:attribute name="percentageFormat" type="xsd:boolean" default="false"/>
      <!-- Value of an indicator. -->
      <xsd:attribute name="value" type="xsd:string" use="required"/>
      <!-- The type of the value expression. -->
      <xsd:attribute name="valueType" type="xsd:string" default="java.lang.Number"/>
      <!-- An expression that indicates if the indicator is visible. -->
      <xsd:attribute name="visible" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- A row that can be placed at the top of a DetailViewTile. This row can contain only
       one or more PerformanceIndicator widgets. -->
  <xsd:element name="PerformanceIndicatorRow">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="PerformanceIndicator" minOccurs="1" maxOccurs="unbounded"/>
      </xsd:sequence>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- (Optional) reference ID of the widget.  This does not have to be globally unique;
           it only has to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string"/>
      <!-- An expression that indicates if the row is visible. -->
      <xsd:attribute name="visible" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- A cell with a picker icon -->
  <xsd:element name="PickerCell">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="Reflect" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element ref="ColumnFooter" minOccurs="0" maxOccurs="1"/>
        <xsd:element ref="PostOnChange" minOccurs="0" maxOccurs="1"/>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="AddMenuItem"/>
          <xsd:element ref="AddMenuItemIterator"/>
          <xsd:element ref="MenuItem"/>
          <xsd:element ref="MenuItemDivider"/>
          <xsd:element ref="MenuItemIterator"/>
          <xsd:element ref="MenuItemSetRef"/>
          <xsd:element ref="MenuItemTree"/>
          <xsd:element ref="PickerMenuItem"/>
          <xsd:element ref="SearchItem"/>
        </xsd:choice>
      </xsd:sequence>
      <!-- An optional action to take when the user clicks the value of this widget when the
           value is not being edited. See ActionBase for details. When specified, the value of
           this widget will be rendered as a link when the value is not being edited. -->
      <xsd:attribute name="action" type="xsd:string"/>
      <!-- An optional boolean expression controlling whether the action should be available
           in this specific context when in read-only mode.  This is ignored if in edit mode
           or if the action is null.  This attribute will be deprecated in a future release,
           please use the 'available' attribute instead.  To disable action in readonly mode,
           you can set available=&quot;CurrentLocation.InEditMode || &lt;action-available-condition&gt;&quot; -->
      <xsd:attribute name="actionAvailable" type="xsd:string"/>
      <!-- Specifies the alignment of this cell. Valid values: "left", "right", or "center".
           If no value is specified, the default alignment is determined by the value type ("center"
           for boolean values; "right" for numeric values; "left" for other value types). -->
      <xsd:attribute name="align" type="WidgetAlignment"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- Boolean expression which, if false, grays out the widget and all its children -->
      <xsd:attribute name="available" type="xsd:string"/>
      <!-- If true, renders the cell contents in bold text. Defaults to false. -->
      <xsd:attribute name="bold" type="xsd:boolean" default="false"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- Whether the user should be allowed to clear the selected value. If "true", an icon
           will be available which, when clicked, will clear the widget. This attribute will
           always be overridden and set to "true" if freeInputEnabled is set to false. -->
      <xsd:attribute name="clearEnabled" type="xsd:boolean" default="false"/>
      <!-- The HTML colspan attribute, lets this cell span across multiple columns of other rows.
           Useful for generating a "group header" row above a RowIterator. The default value
           is 1. A value greater than 1 is only allowed when the containing row is not iterated
           by a RowIterator. -->
      <xsd:attribute name="colspan" type="xsd:integer"/>
      <!-- The confirmation message to show when "showConfirmMessage" is set. If not specified,
           a standard message will be used. -->
      <xsd:attribute name="confirmMessage" type="xsd:string"/>
      <!-- A Gosu expression used to convert the value picked from the picker popup before it
           is written to the model value of this widget. The picked value is available as the
           special symbol "PickedValue" -->
      <xsd:attribute name="conversionExpression" type="xsd:string"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- Boolean expression which, if false, makes this widget and all its children read-only -->
      <xsd:attribute name="editable" type="xsd:string" default="false"/>
      <!-- If true, allows the user to sort the values in the column by clicking on the header.
            Only applicable when the containing row is iterated by a RowIterator. -->
      <xsd:attribute name="enableSort" type="xsd:boolean" default="true"/>
      <!-- If true, this cell will the last cell in the row to be navigated to via the ENTER
           key. Only applicable when "CellNavOnEnter" or "QuickAddOnEnter" is set. Normally not
           specified. Default to false. -->
      <xsd:attribute name="endOfCellNav" type="xsd:boolean" default="false"/>
      <!-- If true, instead of showing a hierarchical menu, the widget will show a single menu
           with sub-menus grouped under headers. -->
      <xsd:attribute name="flatten" type="xsd:boolean" default="false"/>
      <!-- An optional boolean expression, if returns true, this widget will get focus when start
           editing the containing location. -->
      <xsd:attribute name="focusOnStartEditing" type="xsd:string"/>
      <!-- An expression that returns a GWColor instance. Legacy: this method can instead return
           a string corresponding to a CSS Specification Level 3 color name. See GWColor for
           more details. -->
      <xsd:attribute name="fontColor" type="xsd:string"/>
      <!-- An optional expression. If specified, a footer cell with the specified value will
           be rendered for this column. Only applicable when the containing Row is iterated by
           a RowIterator. Not allowed when "footerSumValue" is specified. -->
      <xsd:attribute name="footerLabel" type="xsd:string"/>
      <!-- An optional expression, if specified, will be used as format pattern for the footer
           sum value. Normally not specified, so that the "format" and\or "formatType" of the
           cell value will be applied to footer sum value. Only applicable when "footerSumValue"
           is specified. The result of this expression must conform to the number format defined
           in java.text.DecimalFormat. -->
      <xsd:attribute name="footerSumFormat" type="xsd:string"/>
      <!-- An optional Numeric expression. If specified, a footer cell that sums the specified
           value for all cells in this column will be rendered. Pagination of the list does not
           affect the sum value. Only applicable when the containing row is iterated by a RowIterator.
           Not allowed when "footerLabel" is specified. -->
      <xsd:attribute name="footerSumValue" type="xsd:string"/>
      <!-- How the value is formatted; options include "general", "currency", and "email".  See
           the formatType enumeration. -->
      <xsd:attribute name="formatType" type="FormatType"/>
      <!-- If true, the user may enter a free-text value. If this property is set to false, the
           clearEnabled attribute will be treated as true to allow for users to delete their
           picked selection. -->
      <xsd:attribute name="freeInputEnabled" type="xsd:boolean" default="true"/>
      <!-- If true, the ListView will be grouped by this cell upon entering the page. Only one
           grouped cell is allowed at any given time and it is only applicable when the column
           is sortable. -->
      <xsd:attribute name="groupedOnEnter" type="xsd:string"/>
      <!-- If true, this Cell and any other grow-enabled Cell will expand to fill remaining space
           in the ListViewPanel. Only applicable when the ListView is set to stretch. -->
      <xsd:attribute name="grow" type="xsd:boolean" default="false"/>
      <!-- If true, generates a checkbox at the beginning of this cell. This checkbox can be
           used to check this entry in the nearest containing Iterator. Defaults to false. Only
           allowed if this cell is inside a CellIterator or under a Row inside a RowIterator. -->
      <xsd:attribute name="hasCheckBox" type="xsd:boolean" default="false"/>
      <!-- CSS height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="height" type="xsd:string"/>
      <!-- A Gosu expression which, if defined, is evaluated to create help info that guides
           the user to edit this widget. The help info will show up if the user hovers the mouse
           over or focuses on the widget, when the widget is in edit mode. -->
      <xsd:attribute name="helpText" type="xsd:string"/>
      <!-- If false, menu items under this input will be shown even when the input is not editable. -->
      <xsd:attribute name="hideChildrenIfReadOnly" type="xsd:boolean" default="true"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- Refers to an image file. If defined, makes this an icon cell. The "value" attribute
           should be a boolean expression describing whether the icon is visible in a given row. -->
      <xsd:attribute name="icon" type="xsd:string"/>
      <!-- Color of the icon. If not set will default to its font color. -->
      <xsd:attribute name="iconColor" type="xsd:string"/>
      <!-- The ALT text for any icon generated in the content cells -->
      <xsd:attribute name="iconLabel" type="xsd:string"/>
      <!-- An enumeration of icon types that determine what the 'icon' property on the widget
           is referring to. -->
      <xsd:attribute name="iconType" type="IconTypeEnum"/>
      <!-- Reference ID of the widget.  This does not have to be globally unique; it only has
           to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <!-- A Gosu expression that converts the presentation value to a model value. The presentation
           value string is exposed to this expression as the symbol "VALUE". -->
      <xsd:attribute name="inputConversion" type="xsd:string"/>
      <!-- An optional expression. If specified, a header cell with the specified value will
           be rendered for this column. Only applicable when the containing row is iterated by
           a RowIterator. -->
      <xsd:attribute name="label" type="xsd:string"/>
      <!-- Custom extension CSS style class to apply to the header. -->
      <xsd:attribute name="labelStyleClass" type="xsd:string"/>
      <!-- CSS max-height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="maxHeight" type="xsd:string"/>
      <!-- CSS max-width value. Can be `px`, or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="maxWidth" type="xsd:string"/>
      <!-- CSS min-height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="minHeight" type="xsd:string"/>
      <!-- CSS min-width value. Can be `px`, or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="minWidth" type="xsd:string"/>
      <!-- The number of child MenuItems to show in each column.  If not specified, all children
           will be shown in a single column. -->
      <xsd:attribute name="numEntriesPerColumn" type="xsd:integer" default="0"/>
      <!-- Gosu expression to be executed after the picker popup has been used to pick a value.
           The picked value is available as the special symbol "PickedValue" -->
      <xsd:attribute name="onPick" type="xsd:string"/>
      <!-- A Gosu expression that converts the model value to a presentation value. The model
           value is exposed to this expression as the symbol "VALUE". The return type of this
           expression must be String. -->
      <xsd:attribute name="outputConversion" type="xsd:string"/>
      <!-- The picker popup used to pick a value, as a Gosu statement of the form "[popup name].push(...)". -->
      <xsd:attribute name="pickLocation" type="xsd:string" use="required"/>
      <!-- Relative width when printing to PDF. All widths are relative to the widths of the
           other columns in the ListView -->
      <xsd:attribute name="printWidth" type="xsd:string" default="1"/>
      <!-- A Gosu expression used to validate user value before setting it to the model. This
           expression can access any symbols available to this widget, and a "VALUE" symbol that
           represents the user value. If this expression returns null, the user value will be
           set into the model. Otherwise, an error message containing the result of the expression
           will be displayed on the page, the value will not be set into the model, and no actions
           can be performed until the error is corrected. -->
      <xsd:attribute name="requestValidationExpression" type="xsd:string"/>
      <!-- If true, then the cell must be filled out by the user -->
      <xsd:attribute name="required" type="xsd:string"/>
      <!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * Deprecated.
           DO NOT USE.                                           * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
           Consider using "onChange/onPick/inputConversion/outputConversion" where available.
           If specified and the Input is editable, then any new value of the Input is written
           to this expression (Gosu by default) instead of to "value".  The new value is exposed
           as the symbol "VALUE".  For instance if your value expression is "Foo.getSomething()"
           then it can't be written to since it's not an L-value; so you could specify a setter
           expression along the lines of "Foo.setSomething(VALUE)" Warning: if you use this attribute
           many pebbles features will not work, including but not limited to: * Correct automatic
           detection of the state of the updated data * Correct automatic detection of the editability
           of the data * Correct automatic detection of the maximum size of a text input -->
      <xsd:attribute name="setter" type="xsd:string"/>
      <!-- Boolean expression which determines whether or not to show a confirmation message
           when the field value is changed directly from the UI. It's NOT applicable when the
           value is changed indirectly, for example, as a result of client reflection. -->
      <xsd:attribute name="showConfirmMessage" type="xsd:string"/>
      <!-- If true, shows the icon defined by "icon" in the header cell for this column. The
           default value is true. -->
      <xsd:attribute name="showHeaderIcon" type="xsd:boolean" default="true"/>
      <!-- An optional comma-separated sequence of Expressions, each of which is assumed to be
           a dot-delimited path, the value by which this column will be sorted if the user clicks
           on the header cell. -->
      <xsd:attribute name="sortBy" type="xsd:string"/>
      <!-- Either "ascending" or "descending" -->
      <xsd:attribute name="sortDirection" type="WidgetSortDirection" default="ascending"/>
      <!-- The priority of sorting relative to other sorting elements like IteratorSort and Cell.
           The lower the number, the higher the priority.  The highest priority is "1" -->
      <xsd:attribute name="sortOrder" type="xsd:integer" default="0"/>
      <!-- CSS style class for the cell content; for instance, "miniButton" makes a link appear
           as a small button -->
      <xsd:attribute name="styleClass" type="LinkStyleClass"/>
      <!-- An optional attribute, if set, defer sub menu generation until user tries to open
           the menu. DO NOT set this flag unless the sub menu of this widget is very expensive
           to generate. Setting this flag will reduce time to load the page, however require
           fetching additional info from server in the background, when the menu gets opened
           for the first time after page loaded. -->
      <xsd:attribute name="subMenuOnDemand" type="xsd:boolean" default="false"/>
      <!-- Extra "alt" text to show when the user hovers the mouse over the header cell of this
           column. -->
      <xsd:attribute name="tooltip" type="xsd:string"/>
      <!-- If true, validate before commit that the value of this column is unique across all
           rows in the current page. Only meaningful when this column is editable. -->
      <xsd:attribute name="unique" type="xsd:boolean" default="false"/>
      <!-- A Gosu expression to run before committing the record. This expression can refer to
           any symbols available to this widget. If this expression returns null, the validation
           is considered successful; otherwise, the result of this expression will be displayed
           as an error and the record will not be committed. -->
      <xsd:attribute name="validationExpression" type="xsd:string"/>
      <!-- The label of this cell to be used when it has validation issues. Not needed when this
           cell has a "label". Required if the cell is editable but does not have a "label". -->
      <xsd:attribute name="validationLabel" type="xsd:string"/>
      <!-- The value this element binds to.  If the element is editable then this value is both
           read from and written to (unless "setter" is defined). -->
      <xsd:attribute name="value" type="xsd:string"/>
      <!-- The type of the value expression. -->
      <xsd:attribute name="valueType" type="xsd:string" use="required"/>
      <!-- Boolean expression which, if false, hides the <i>contents</i> of the cell (its "ValueWidget"),
           but not the cell itself.  Needed since hiding the actual cell usually screws up the
           layout -->
      <xsd:attribute name="valueVisible" type="xsd:string"/>
      <!-- Specifies the vertical alignment of this cell. Valid values: "top", "middle", or "bottom".
           If no value is specified, the default alignment is determined by the cell type ("top"
           for Text Areas and Format Cells, "middle" for buttons and icons). -->
      <xsd:attribute name="verticalAlign" type="WidgetVerticalAlignment"/>
      <!-- Boolean expression which, if false, completely hides the widget and all its children -->
      <xsd:attribute name="visible" type="xsd:string"/>
      <!-- CSS width value. Can be `px`, or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="width" type="xsd:string"/>
      <!-- If default, defers to FormatType to decide whether to wrap or not.  If true, allows
           cell content to wrap. -->
      <xsd:attribute name="wrap" type="WrapType" default="default"/>
      <!-- If true, allows Header Cell text content to wrap. Defaults to true. -->
      <xsd:attribute name="wrapLabel" type="xsd:boolean" default="false"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- An input with a picker icon -->
  <xsd:element name="PickerInput">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="LayoutConfig" minOccurs="0" maxOccurs="1"/>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="AddMenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="AddMenuItemIterator" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemDivider" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemIterator" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemSetRef" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemTree" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PickerMenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PostOnChange" minOccurs="0" maxOccurs="1"/>
          <xsd:element ref="Reflect" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="SearchItem" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:choice>
      </xsd:sequence>
      <!-- An optional action to take when the user clicks the value of this widget when the
           value is not being edited. See ActionBase for list of available action prefixes. When
           specified, the value of this widget will be rendered as a link when the value is not
           being edited. -->
      <xsd:attribute name="action" type="xsd:string"/>
      <!-- An optional boolean expression controlling whether the action should be available
           in this specific context when in read-only mode.  This is ignored if in edit mode
           or if the action is null.  This attribute will be deprecated in a future release,
           please use the 'available' attribute instead.  To disable action in readonly mode,
           you can set available=&quot;CurrentLocation.InEditMode || &lt;action-available-condition&gt;&quot; -->
      <xsd:attribute name="actionAvailable" type="xsd:string"/>
      <!-- Alignment of the widget ("left", "right", or "center") -->
      <xsd:attribute name="align" type="WidgetAlignment"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- Boolean expression which, if false, grays out the widget and all its children -->
      <xsd:attribute name="available" type="xsd:string"/>
      <!-- If true then the label is displayed in bold text. -->
      <xsd:attribute name="boldLabel" type="xsd:boolean" default="false"/>
      <!-- If true then the value is displayed in bold text when read-only. -->
      <xsd:attribute name="boldValue" type="xsd:boolean" default="false"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- Whether the user should be allowed to clear the selected value. If "true", an icon
           will be available which, when clicked, will clear the widget. This attribute will
           always be overridden and set to "true" if freeInputEnabled is set to false. -->
      <xsd:attribute name="clearEnabled" type="xsd:boolean" default="false"/>
      <!-- The confirmation message to show when "showConfirmMessage" is set. If not specified,
           a standard message will be used. -->
      <xsd:attribute name="confirmMessage" type="xsd:string"/>
      <!-- A Gosu expression used to convert the value picked from the picker popup before it
           is written to the model value of this widget. The picked value is available as the
           special symbol "PickedValue" -->
      <xsd:attribute name="conversionExpression" type="xsd:string"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- Boolean expression which, if false, makes this widget and all its children read-only -->
      <xsd:attribute name="editable" type="xsd:string" default="false"/>
      <!-- If true, instead of showing a hierarchical menu, the widget will show a single menu
           with sub-menus grouped under headers. -->
      <xsd:attribute name="flatten" type="xsd:boolean" default="false"/>
      <!-- An optional boolean expression, if returns true, this widget will get focus when start
           editing the containing location. -->
      <xsd:attribute name="focusOnStartEditing" type="xsd:string"/>
      <!-- How the value is formatted; options include "general", "currency", and "email".  See
           the formatType enumeration. -->
      <xsd:attribute name="formatType" type="FormatType"/>
      <!-- If true, the user may enter a free-text value. If this property is set to false, the
           clearEnabled attribute will be treated as true to allow for users to delete their
           picked selection. -->
      <xsd:attribute name="freeInputEnabled" type="xsd:boolean" default="true"/>
      <!-- A Gosu expression which, if defined, is evaluated to create help info that guides
           the user to edit this widget. The help info will show up if the user hovers the mouse
           over or focuses on the widget, when the widget is in edit mode. -->
      <xsd:attribute name="helpText" type="xsd:string"/>
      <!-- If false, menu items under this input will be shown even when the input is not editable. -->
      <xsd:attribute name="hideChildrenIfReadOnly" type="xsd:boolean" default="true"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- Reference ID of the widget.  This does not have to be globally unique; it only has
           to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <!-- A Gosu expression that converts the presentation value to a model value. The presentation
           value string is exposed to this expression as the symbol "VALUE". -->
      <xsd:attribute name="inputConversion" type="xsd:string"/>
      <!-- Label to render. -->
      <xsd:attribute name="label" type="xsd:string"/>
      <!-- Boolean expression which, if true, causes the label portion of the Input to be rendered
           above the value -->
      <xsd:attribute name="labelAbove" type="xsd:string" default="false"/>
      <!-- Custom extension CSS style class to apply to the label. -->
      <xsd:attribute name="labelStyleClass" type="xsd:string"/>
      <!-- The number of child MenuItems to show in each column.  If not specified, all children
           will be shown in a single column. -->
      <xsd:attribute name="numEntriesPerColumn" type="xsd:integer" default="0"/>
      <!-- Gosu expression to be executed after the picker popup has been used to pick a value.
           The picked value is available as the special symbol "PickedValue" -->
      <xsd:attribute name="onPick" type="xsd:string"/>
      <!-- A Gosu expression that converts the model value to a presentation value. The model
           value is exposed to this expression as the symbol "VALUE". The return type of this
           expression must be String. -->
      <xsd:attribute name="outputConversion" type="xsd:string"/>
      <!-- The picker popup used to pick a value, as a Gosu statement of the form "[popup name].push(...)". -->
      <xsd:attribute name="pickLocation" type="xsd:string" use="required"/>
      <!-- A Gosu expression used to validate user value before setting it to the model. This
           expression can access any symbols available to this widget, and a "VALUE" symbol that
           represents the user value. If this expression returns null, the user value will be
           set into the model. Otherwise, an error message containing the result of the expression
           will be displayed on the page, the value will not be set into the model, and no actions
           can be performed until the error is corrected. -->
      <xsd:attribute name="requestValidationExpression" type="xsd:string"/>
      <!-- If true, then the cell must be filled out by the user -->
      <xsd:attribute name="required" type="xsd:string"/>
      <!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * Deprecated.
           DO NOT USE.                                           * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
           Consider using "onChange/onPick/inputConversion/outputConversion" where available.
           If specified and the Input is editable, then any new value of the Input is written
           to this expression (Gosu by default) instead of to "value".  The new value is exposed
           as the symbol "VALUE".  For instance if your value expression is "Foo.getSomething()"
           then it can't be written to since it's not an L-value; so you could specify a setter
           expression along the lines of "Foo.setSomething(VALUE)" Warning: if you use this attribute
           many pebbles features will not work, including but not limited to: * Correct automatic
           detection of the state of the updated data * Correct automatic detection of the editability
           of the data * Correct automatic detection of the maximum size of a text input -->
      <xsd:attribute name="setter" type="xsd:string"/>
      <!-- Optional keyboard shortcut character in the form of "Q" or "ShiftQ"; the "Alt" key
           is implicit. This is only applicable when this widget has an "action" specified and
           the value is not being edited. -->
      <xsd:attribute name="shortcut" type="xsd:string"/>
      <!-- Boolean expression which determines whether or not to show a confirmation message
           when the field value is changed directly from the UI. It's NOT applicable when the
           value is changed indirectly, for example, as a result of client reflection. -->
      <xsd:attribute name="showConfirmMessage" type="xsd:string"/>
      <!-- An optional attribute, if set, defer sub menu generation until user tries to open
           the menu. DO NOT set this flag unless the sub menu of this widget is very expensive
           to generate. Setting this flag will reduce time to load the page, however require
           fetching additional info from server in the background, when the menu gets opened
           for the first time after page loaded. -->
      <xsd:attribute name="subMenuOnDemand" type="xsd:boolean" default="false"/>
      <!-- A Gosu expression to run before committing the record. This expression can refer to
           any symbols available to this widget. If this expression returns null, the validation
           is considered successful; otherwise, the result of this expression will be displayed
           as an error and the record will not be committed. -->
      <xsd:attribute name="validationExpression" type="xsd:string"/>
      <!-- The value this Input binds to as an Expression.  If the Input is editable then this
           value is both read from and written to (unless "setter" is defined). -->
      <xsd:attribute name="value" type="xsd:string" use="required"/>
      <!-- CSS max-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionMaxWidth" type="xsd:string"/>
      <!-- CSS min-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionMinWidth" type="xsd:string"/>
      <!-- CSS width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionWidth" type="xsd:string"/>
      <!-- The type of the value expression. -->
      <xsd:attribute name="valueType" type="xsd:string" use="required"/>
      <!-- If used instead of "editable", specifies whether the Input is editable when data is
           being created -->
      <xsd:attribute name="visible" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- A link that picks a value using a popup. The action should push a picker popup and
       onPick should be set to a Gosu fragment that will process the result picked by the
       popup -->
  <xsd:element name="PickerLink">
    <xsd:complexType>
      <xsd:choice minOccurs="0" maxOccurs="unbounded"/>
      <!-- Action performed by this widget.  By default, this is a Gosu expression.  Other types
           of actions can be specified by using the following prefixes: http: causes the browser
           to follow the specified plain http link https: causes the browser to follow the specified
           plain https link javascript: causes the browser to execute the specified javascript
           logout: logs out of the application -->
      <xsd:attribute name="action" type="xsd:string"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- Boolean expression which, if false, grays out the widget and all its children and
           makes them unclickable -->
      <xsd:attribute name="available" type="xsd:string"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- Confirmation message to show before performing the action -->
      <xsd:attribute name="confirmMessage" type="xsd:string"/>
      <!-- If true, the button is the default for the page, and will be "clicked" when the user
           presses Enter -->
      <xsd:attribute name="default" type="xsd:boolean" default="false"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- Should be 'true', 'inline' or 'attachment' if the action taken by this widget is to
           download a file. -->
      <xsd:attribute name="download" type="Download"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- The name of a .png file, or .svg file, or font glyph. The Widget's iconType determines
           which one. -->
      <xsd:attribute name="icon" type="xsd:string"/>
      <!-- Color of the icon. If not set will default to its font color. -->
      <xsd:attribute name="iconColor" type="xsd:string"/>
      <!-- An enumeration of icon types that determine what the 'icon' property on the widget
           is referring to. -->
      <xsd:attribute name="iconType" type="IconTypeEnum"/>
      <!-- Reference ID of the widget.  This does not have to be globally unique; it only has
           to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <!-- Label to render. -->
      <xsd:attribute name="label" type="xsd:string"/>
      <!-- Gosu expression to be executed after the picker popup has been used to pick a value.
           The picked value is available as the special symbol "PickedValue" -->
      <xsd:attribute name="onPick" type="xsd:string" use="required"/>
      <!-- Default text answer to the prompt message -->
      <xsd:attribute name="promptDefault" type="xsd:string"/>
      <!-- Question to ask the user before performing the action. The answer is exposed to the
           action as "web.WebUtil.ActionEventParameter". -->
      <xsd:attribute name="promptQuestion" type="xsd:string"/>
      <!-- Keyboard shortcut character in the form of "Q" or "ShiftQ"; the "Alt" key is implicit -->
      <xsd:attribute name="shortcut" type="xsd:string"/>
      <!-- Gosu expression which determines whether or not the confirmation message should be
           shown -->
      <xsd:attribute name="showConfirmMessage" type="xsd:string" default="true"/>
      <!-- CSS style class for the link; for instance, "miniButton" makes the link appear as
           a small button -->
      <xsd:attribute name="styleClass" type="LinkStyleClass"/>
      <!-- Boolean expression which, if false, completely hides the widget and all its children -->
      <xsd:attribute name="visible" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- A menu item that picks a value using a popup. The action should push a picker popup
       and onPick should be set to a Gosu fragment that will process the result picked by
       the popup -->
  <xsd:element name="PickerMenuItem">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="AddMenuItem"/>
          <xsd:element ref="AddMenuItemIterator"/>
          <xsd:element ref="MenuItem"/>
          <xsd:element ref="MenuItemDivider"/>
          <xsd:element ref="MenuItemIterator"/>
          <xsd:element ref="MenuItemSetRef"/>
          <xsd:element ref="MenuItemTree"/>
          <xsd:element ref="PickerMenuItem"/>
          <xsd:element ref="SearchItem"/>
        </xsd:choice>
      </xsd:sequence>
      <!-- Action performed by this widget.  By default, this is a Gosu expression.  Other types
           of actions can be specified by using the following prefixes: http: causes the browser
           to follow the specified plain http link https: causes the browser to follow the specified
           plain https link javascript: causes the browser to execute the specified javascript
           logout: logs out of the application -->
      <xsd:attribute name="action" type="xsd:string"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- Boolean expression which, if false, grays out the widget and all its children and
           makes them unclickable -->
      <xsd:attribute name="available" type="xsd:string"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- Confirmation message to show before performing the action -->
      <xsd:attribute name="confirmMessage" type="xsd:string"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- Should be 'true', 'inline' or 'attachment' if the action taken by this widget is to
           download a file. -->
      <xsd:attribute name="download" type="Download"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- Reference ID of the widget.  This does not have to be globally unique; it only has
           to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <!-- Label to render. -->
      <xsd:attribute name="label" type="xsd:string"/>
      <!-- Gosu expression to be executed after the picker popup has been used to pick a value.
           The picked value is available as the special symbol "PickedValue" -->
      <xsd:attribute name="onPick" type="xsd:string" use="required"/>
      <!-- Default text answer to the prompt message -->
      <xsd:attribute name="promptDefault" type="xsd:string"/>
      <!-- Question to ask the user before performing the action. The answer is exposed to the
           action as "web.WebUtil.ActionEventParameter". -->
      <xsd:attribute name="promptQuestion" type="xsd:string"/>
      <!-- Keyboard shortcut character in the form of "Q" or "ShiftQ"; the "Alt" key is implicit -->
      <xsd:attribute name="shortcut" type="xsd:string"/>
      <!-- Gosu expression which determines whether or not the confirmation message should be
           shown -->
      <xsd:attribute name="showConfirmMessage" type="xsd:string" default="true"/>
      <!-- Boolean expression which, if false, completely hides the widget and all its children -->
      <xsd:attribute name="visible" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- A toolbar button that picks a value using a popup. The action should push a picker
       popup and onPick should be set to a Gosu fragment that will process the result picked
       by the popup -->
  <xsd:element name="PickerToolbarButton">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="AddMenuItem"/>
          <xsd:element ref="AddMenuItemIterator"/>
          <xsd:element ref="MenuItem"/>
          <xsd:element ref="MenuItemDivider"/>
          <xsd:element ref="MenuItemIterator"/>
          <xsd:element ref="MenuItemSetRef"/>
          <xsd:element ref="MenuItemTree"/>
          <xsd:element ref="PickerMenuItem"/>
          <xsd:element ref="SearchItem"/>
        </xsd:choice>
      </xsd:sequence>
      <!-- Action performed by this widget.  By default, this is a Gosu expression.  Other types
           of actions can be specified by using the following prefixes: http: causes the browser
           to follow the specified plain http link https: causes the browser to follow the specified
           plain https link javascript: causes the browser to execute the specified javascript
           logout: logs out of the application -->
      <xsd:attribute name="action" type="xsd:string"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- Boolean expression which, if false, grays out the widget and all its children and
           makes them unclickable -->
      <xsd:attribute name="available" type="xsd:string"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- Confirmation message to show before performing the action -->
      <xsd:attribute name="confirmMessage" type="xsd:string"/>
      <!-- If true, the button is the default for the page, and will be "clicked" when the user
           presses Enter -->
      <xsd:attribute name="default" type="xsd:boolean" default="false"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- Should be 'true', 'inline' or 'attachment' if the action taken by this widget is to
           download a file. -->
      <xsd:attribute name="download" type="Download"/>
      <!-- A very special expression defining what flags (see ToolbarFlag) must be checked for
           the toolbar button to be available (= not grayed out).  All processing of flags happens
           on the browser-side.  The flags syntax is a comma-separated list of <i>predicates</i>
           (with no space after each comma), and all <i>predicates</i> must be satisfied for
           the button to be available.  Each <i>predicate</i> consists of a <i>operator</i> followed
           by a space and then the name of a ToolbarFlag.  For instance, flags="one Foo,no Bar"
           means "only available if there is exactly one Foo checkbox checked and no Bar checkboxes
           checked".  The available <i>operators</i> are: one, two, any, all, no, exists (same
           as any). -->
      <xsd:attribute name="flags" type="xsd:string"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- The name of a .png file, or .svg file, or font glyph. The Widget's iconType determines
           which one. -->
      <xsd:attribute name="icon" type="xsd:string"/>
      <!-- Color of the icon. If not set will default to its font color. -->
      <xsd:attribute name="iconColor" type="xsd:string"/>
      <!-- An enumeration of icon types that determine what the 'icon' property on the widget
           is referring to. -->
      <xsd:attribute name="iconType" type="IconTypeEnum"/>
      <!-- Reference ID of the widget.  This does not have to be globally unique; it only has
           to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <!-- The id of the iterator/list view widget this button applies to.  If the value is a
           list view then the first iterator widget child is used. -->
      <xsd:attribute name="iterator" type="xsd:string"/>
      <!-- Label to render. -->
      <xsd:attribute name="label" type="xsd:string"/>
      <!-- Gosu expression to be executed after the picker popup has been used to pick a value.
           The picked value is available as the special symbol "PickedValue" -->
      <xsd:attribute name="onPick" type="xsd:string" use="required"/>
      <!-- Default text answer to the prompt message -->
      <xsd:attribute name="promptDefault" type="xsd:string"/>
      <!-- Question to ask the user before performing the action. The answer is exposed to the
           action as "web.WebUtil.ActionEventParameter". -->
      <xsd:attribute name="promptQuestion" type="xsd:string"/>
      <!-- If true, the page will scroll back to the original scroll position after the action.
           Should only be set if the action stays on the same page and the page layout does not
           change. Default to false -->
      <xsd:attribute name="retainScrollPosition" type="xsd:boolean" default="false"/>
      <!-- Keyboard shortcut character in the form of "Q" or "ShiftQ"; the "Alt" key is implicit -->
      <xsd:attribute name="shortcut" type="xsd:string"/>
      <!-- Gosu expression which determines whether or not the confirmation message should be
           shown -->
      <xsd:attribute name="showConfirmMessage" type="xsd:string" default="true"/>
      <!-- An optional attribute, if set, defer sub menu generation until user tries to open
           the menu. DO NOT set this flag unless the sub menu of this widget is very expensive
           to generate. Setting this flag will reduce time to load the page, however require
           fetching additional info from server in the background, when the menu gets opened
           for the first time after page loaded. -->
      <xsd:attribute name="subMenuOnDemand" type="xsd:boolean" default="false"/>
      <!-- A Gosu expression which, if defined, is evaluated to create help info if the user
           hovers the mouse over the button -->
      <xsd:attribute name="tooltip" type="xsd:string"/>
      <!-- Boolean expression which, if false, completely hides the widget and all its children -->
      <xsd:attribute name="visible" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- A page which is always popped on top of a another base Page. A Popup is usually used
       as a picker dialog for the base page, therefore it can return a value. Unlike regular
       pages which must be attached to the application hierarchy through their parent location
       group at configuration time, a Popup can be attached to the application hierarchy
       dynamically through its base page. -->
  <xsd:element name="Popup">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="LocationEntryPoint" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element ref="Variable" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="Screen" minOccurs="0" maxOccurs="1"/>
          <xsd:element ref="ScreenRef" minOccurs="0" maxOccurs="1"/>
        </xsd:choice>
        <xsd:element ref="Code" minOccurs="0" maxOccurs="1"/>
      </xsd:sequence>
      <!-- Gosu expression to run after the location is canceled. -->
      <xsd:attribute name="afterCancel" type="xsd:string"/>
      <!-- Gosu expression to run after the location is updated. -->
      <xsd:attribute name="afterCommit" type="xsd:string"/>
      <!-- Gosu expression to run after this page is entered. -->
      <xsd:attribute name="afterEnter" type="xsd:string"/>
      <!-- Gosu expression to run after return to this page from a popup. Whether the popup was
           committed is exposed as a symbol with the name "committed". -->
      <xsd:attribute name="afterReturnFromPopup" type="xsd:string"/>
      <!-- If true, the location will always go back to edit mode after a commit / cancel -->
      <xsd:attribute name="alwaysInEditMode" type="xsd:string"/>
      <!-- If true, then the location will be saved in the auto-save cache when the user navigates
           out if (a) it is in edit mode, and (b) there is any unsaved data. The location is
           restored from the cache when the user returns to it -->
      <xsd:attribute name="autosaveable" type="xsd:boolean" default="true"/>
      <!-- Gosu expression to run when the location is canceled but before the rest of the cancel
           completes. -->
      <xsd:attribute name="beforeCancel" type="xsd:string"/>
      <!-- Gosu expression to run before the location is updated but after the UI is validated. -->
      <xsd:attribute name="beforeCommit" type="xsd:string"/>
      <!-- Gosu expression to run before the location is updated and before the UI is validated. -->
      <xsd:attribute name="beforeValidate" type="xsd:string"/>
      <!-- A boolean expression which, if false, prevents the user from putting the location
           into edit mode -->
      <xsd:attribute name="canEdit" type="xsd:string"/>
      <!-- A boolean expression which, if false, means the user has no permission to visit the
           location, and links to the location will be either invisible or grayed out, depending
           on context. -->
      <xsd:attribute name="canVisit" type="xsd:string"/>
      <!-- If false, the location can still be kept in the autosave cache, but does not appear
           as unsaved work to the user (with link highlighting etc.). -->
      <xsd:attribute name="countsAsWork" type="xsd:boolean" default="true"/>
      <!-- Use this to add your own comments to this element. For now this attribute does nothing;
           later if we create a "UI dictionary" or PCF editor, the description will show up there. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- If true then changed inputs and cells in this location will be highlighted. -->
      <xsd:attribute name="highlightChangedValues" type="xsd:boolean" default="true"/>
      <!-- ID of this Location. Must be unique among all Locations. -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <!-- ID of the InfoBar content for this location. Normally not specifed, so that the page
           inherits the infoBar from its ancestor LocationGroup. -->
      <xsd:attribute name="infoBar" type="xsd:string"/>
      <!-- This expression, when specified, appends a link to the concurrent data change error
           message. The text of the link will be the value of the display key Java.Message.ConcurrentDataChange.Link.
           Clicking on the link will execute the given expression. A concurrent data change error
           happens if a user's changes cannot be committed because they clash with concurrent
           changes by a different user. -->
      <xsd:attribute name="onConcurrentDataChange" type="xsd:string"/>
      <!-- Reference to the "parent location" of this location, to specifiy the hierarchy of
           pcf locations. Used for the automatically generated "up link" in the title bar, highlighting
           of current menu links, and grouping items under "Unsaved Work". Usually the parent
           is the location right above this location in the application hierarchy, i.e. the parent
           of "ActivityDetailWorksheet" is "ClaimWorkplan", the parent of "Desktop Activities"
           is "Desktop" and "Desktop" has no parent at all. -->
      <xsd:attribute name="parent" type="xsd:string"/>
      <!-- The type of entity this popup returns. -->
      <xsd:attribute name="returnType" type="xsd:string"/>
      <!-- Gosu expression to run when the location goes into edit mode. -->
      <xsd:attribute name="startEditing" type="xsd:string"/>
      <!-- Boolean expression which, if true, puts the location in edit mode as soon as the user
           enters it -->
      <xsd:attribute name="startInEditMode" type="xsd:string" default="false"/>
      <!-- The title of the location.  The title is shown in the top title bar, unless the Screen
           uses a special TitleBar element to override it. -->
      <xsd:attribute name="title" type="xsd:string" use="required"/>
      <!-- If false, the page will disable the automatic validation that happens on every commit.
            Only set this attribute to false if you're really sure you know what you're doing. -->
      <xsd:attribute name="validateOnBundleCommit" type="xsd:boolean" default="true"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- A Location with multiple Screens that can return a value -->
  <xsd:element name="PopupWizard">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="LocationEntryPoint" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element ref="Variable" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="JobWizardStep" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="WizardStep" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="WizardStepGroup" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="WizardStepGroupRef" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="WizardStepIterator" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="WizardStepSet" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="WizardStepSetRef" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:choice>
        <xsd:element ref="Code" minOccurs="0" maxOccurs="1"/>
      </xsd:sequence>
      <!-- Gosu expression to run after the Wizard is canceled.  See ActionBase for kinds of
           available actions -->
      <xsd:attribute name="afterCancel" type="xsd:string"/>
      <!-- Gosu expression to run after the user gets all the way through and finishes the Wizard. -->
      <xsd:attribute name="afterFinish" type="xsd:string"/>
      <!-- If true, then the location will be saved in the auto-save cache when the user navigates
           out if (a) it is in edit mode, and (b) there is any unsaved data. The location is
           restored from the cache when the user returns to it -->
      <xsd:attribute name="autosaveable" type="xsd:boolean" default="true"/>
      <!-- Gosu expression to run when the Wizard is canceled but before the rest of the cancel
           completes. -->
      <xsd:attribute name="beforeCancel" type="xsd:string"/>
      <!-- Gosu expression to run before the wizard state is persisted into database. -->
      <xsd:attribute name="beforeCommit" type="xsd:string"/>
      <!-- A boolean expression which, if false, prevents the user from putting the location
           into edit mode -->
      <xsd:attribute name="canEdit" type="xsd:string"/>
      <!-- A boolean expression which, if false, means the user has no permission to visit the
           location, and links to the location will be either invisible or grayed out, depending
           on context. -->
      <xsd:attribute name="canVisit" type="xsd:string"/>
      <!-- Gosu expression that returns a message to display in a confirmation dialog when the
           user attempts to cancel this wizard -->
      <xsd:attribute name="cancelWarning" type="xsd:string"/>
      <!-- If false, the location can still be kept in the autosave cache, but does not appear
           as unsaved work to the user (with link highlighting etc.). -->
      <xsd:attribute name="countsAsWork" type="xsd:boolean" default="true"/>
      <!-- Use this to add your own comments to this element. For now this attribute does nothing;
           later if we create a "UI dictionary" or PCF editor, the description will show up there. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- If true then changed inputs and cells in this location will be highlighted. -->
      <xsd:attribute name="highlightChangedValues" type="xsd:boolean" default="true"/>
      <!-- ID of this Location. Must be unique among all Locations. -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <!-- ID of the InfoBar content for this location (just below the TabBar and above the main
           content) -->
      <xsd:attribute name="infoBar" type="xsd:string"/>
      <!-- If true, this wizard will have no MenuLinks of its own, and will inherit MenuLinks
           from its ancestor location group (if any). -->
      <xsd:attribute name="inheritMenuLinks" type="xsd:boolean" default="false"/>
      <!-- ID of the optional MenuActions content for this location (in the bottom of the left
           menu) -->
      <xsd:attribute name="menuActions" type="xsd:string"/>
      <!-- Normally <i>NOT</i> specified, in which case default MenuLinks (in the left menu)
           are generated based on steps of this wizard. -->
      <xsd:attribute name="menuLinks" type="xsd:string"/>
      <!-- ID of the optional MenuTree content for this location (in the left menu).  This should
           only be used if the wizard is also overriding the menuLinks attribute -->
      <xsd:attribute name="menuTree" type="xsd:string"/>
      <!-- Reference to the "parent location" of this location, to specifiy the hierarchy of
           pcf locations. Used for the automatically generated "up link" in the title bar, highlighting
           of current menu links, and grouping items under "Unsaved Work". Usually the parent
           is the location right above this location in the application hierarchy, i.e. the parent
           of "ActivityDetailWorksheet" is "ClaimWorkplan", the parent of "Desktop Activities"
           is "Desktop" and "Desktop" has no parent at all. -->
      <xsd:attribute name="parent" type="xsd:string"/>
      <!-- The type of entity this popup wizard returns. -->
      <xsd:attribute name="returnType" type="xsd:string"/>
      <!-- If true, creates an "up link" icon in the title bar that links to the parent location.
            The upLink will pop the current location off the stack if the parent location is
           in the stack; otherwise, the upLink will "go" to the parent location, passing all
           of the symbols from the current page in a manner consistent with the "go" action. -->
      <xsd:attribute name="showUpLink" type="xsd:boolean" default="false"/>
      <!-- Boolean expression which, if true, puts the location in edit mode as soon as the user
           enters it. Default to true for Wizard. -->
      <xsd:attribute name="startInEditMode" type="xsd:string" default="true"/>
      <!-- ID of the TabBar content for this location group. Normally not specified since "TabBar()"
           is the default. -->
      <xsd:attribute name="tabBar" type="xsd:string" default="TabBar()"/>
      <!-- The optional title for this wizard. If not specified, only the current step title
           shows in the top title bar. If specified, this wizard title and the current step title
           will both show in the title bar. -->
      <xsd:attribute name="title" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- DO NOT USE:  intended for internal use only.  Defines the postOnChange properties
       for a widget. -->
  <xsd:element name="PostOnChange">
    <xsd:complexType>
      <xsd:choice minOccurs="0" maxOccurs="unbounded"/>
      <!-- If true, the post on change value will be updated after all other values on the page.
           If the value is used in visible expressions this can affect which other values will
           be updated by the post on change. -->
      <xsd:attribute name="deferUpdate" type="xsd:boolean" default="true"/>
      <!-- Boolean expression, if evaluated to true when the page is entered, this field will
           not trigger post on change. Defaults to false. -->
      <xsd:attribute name="disablePostOnEnter" type="xsd:string"/>
      <!-- Gosu expression to invoke when the value is changed by the user. Currently only supported
           for immediate-post-back. -->
      <xsd:attribute name="onChange" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- An input which renders as preformatted monospaced text -->
  <xsd:element name="PreFormattedTextInput">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="LayoutConfig" minOccurs="0" maxOccurs="1"/>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="AddMenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="AddMenuItemIterator" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemDivider" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemIterator" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemSetRef" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemTree" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PickerMenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PostOnChange" minOccurs="0" maxOccurs="1"/>
          <xsd:element ref="Reflect" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="SearchItem" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:choice>
      </xsd:sequence>
      <!-- An optional action to take when the user clicks the value of this widget when the
           value is not being edited. See ActionBase for list of available action prefixes. When
           specified, the value of this widget will be rendered as a link when the value is not
           being edited. -->
      <xsd:attribute name="action" type="xsd:string"/>
      <!-- An optional boolean expression controlling whether the action should be available
           in this specific context when in read-only mode.  This is ignored if in edit mode
           or if the action is null.  This attribute will be deprecated in a future release,
           please use the 'available' attribute instead.  To disable action in readonly mode,
           you can set available=&quot;CurrentLocation.InEditMode || &lt;action-available-condition&gt;&quot; -->
      <xsd:attribute name="actionAvailable" type="xsd:string"/>
      <!-- Alignment of the widget ("left", "right", or "center") -->
      <xsd:attribute name="align" type="WidgetAlignment"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- Boolean expression which, if false, grays out the widget and all its children -->
      <xsd:attribute name="available" type="xsd:string"/>
      <!-- If true then the label is displayed in bold text. -->
      <xsd:attribute name="boldLabel" type="xsd:boolean" default="false"/>
      <!-- If true then the value is displayed in bold text when read-only. -->
      <xsd:attribute name="boldValue" type="xsd:boolean" default="false"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- The confirmation message to show when "showConfirmMessage" is set. If not specified,
           a standard message will be used. -->
      <xsd:attribute name="confirmMessage" type="xsd:string"/>
      <!-- A Gosu expression used to convert the value picked from a popup before set it into
           the model value of this widget. The picked value will be exposed as a symbol with
           the name "PickedValue" -->
      <xsd:attribute name="conversionExpression" type="xsd:string"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- Boolean expression which, if false, makes this widget and all its children read-only -->
      <xsd:attribute name="editable" type="xsd:string" default="false"/>
      <!-- If true, instead of showing a hierarchical menu, the widget will show a single menu
           with sub-menus grouped under headers. -->
      <xsd:attribute name="flatten" type="xsd:boolean" default="false"/>
      <!-- An optional boolean expression, if returns true, this widget will get focus when start
           editing the containing location. -->
      <xsd:attribute name="focusOnStartEditing" type="xsd:string"/>
      <!-- How the value is formatted; options include "general", "currency", and "email".  See
           the formatType enumeration. -->
      <xsd:attribute name="formatType" type="FormatType"/>
      <!-- A Gosu expression which, if defined, is evaluated to create help info that guides
           the user to edit this widget. The help info will show up if the user hovers the mouse
           over or focuses on the widget, when the widget is in edit mode. -->
      <xsd:attribute name="helpText" type="xsd:string"/>
      <!-- If false, menu items under this input will be shown even when the input is not editable. -->
      <xsd:attribute name="hideChildrenIfReadOnly" type="xsd:boolean" default="true"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- Reference ID of the widget.  This does not have to be globally unique; it only has
           to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <!-- A Gosu expression that converts the presentation value to a model value. The presentation
           value string is exposed to this expression as the symbol "VALUE". -->
      <xsd:attribute name="inputConversion" type="xsd:string"/>
      <!-- Label to render. -->
      <xsd:attribute name="label" type="xsd:string"/>
      <!-- Boolean expression which, if true, causes the label portion of the Input to be rendered
           above the value -->
      <xsd:attribute name="labelAbove" type="xsd:string" default="false"/>
      <!-- Custom extension CSS style class to apply to the label. -->
      <xsd:attribute name="labelStyleClass" type="xsd:string"/>
      <!-- The number of child MenuItems to show in each column.  If not specified, all children
           will be shown in a single column. -->
      <xsd:attribute name="numEntriesPerColumn" type="xsd:integer" default="0"/>
      <!-- Gosu expression to be executed after the value is set from a picker. -->
      <xsd:attribute name="onPick" type="xsd:string"/>
      <!-- A Gosu expression that converts the model value to a presentation value. The model
           value is exposed to this expression as the symbol "VALUE". The return type of this
           expression must be String. -->
      <xsd:attribute name="outputConversion" type="xsd:string"/>
      <!-- A Gosu expression used to validate user value before setting it to the model. This
           expression can access any symbols available to this widget, and a "VALUE" symbol that
           represents the user value. If this expression returns null, the user value will be
           set into the model. Otherwise, an error message containing the result of the expression
           will be displayed on the page, the value will not be set into the model, and no actions
           can be performed until the error is corrected. -->
      <xsd:attribute name="requestValidationExpression" type="xsd:string"/>
      <!-- If true, then the cell must be filled out by the user -->
      <xsd:attribute name="required" type="xsd:string"/>
      <!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * Deprecated.
           DO NOT USE.                                           * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
           Consider using "onChange/onPick/inputConversion/outputConversion" where available.
           If specified and the Input is editable, then any new value of the Input is written
           to this expression (Gosu by default) instead of to "value".  The new value is exposed
           as the symbol "VALUE".  For instance if your value expression is "Foo.getSomething()"
           then it can't be written to since it's not an L-value; so you could specify a setter
           expression along the lines of "Foo.setSomething(VALUE)" Warning: if you use this attribute
           many pebbles features will not work, including but not limited to: * Correct automatic
           detection of the state of the updated data * Correct automatic detection of the editability
           of the data * Correct automatic detection of the maximum size of a text input -->
      <xsd:attribute name="setter" type="xsd:string"/>
      <!-- Optional keyboard shortcut character in the form of "Q" or "ShiftQ"; the "Alt" key
           is implicit. This is only applicable when this widget has an "action" specified and
           the value is not being edited. -->
      <xsd:attribute name="shortcut" type="xsd:string"/>
      <!-- Boolean expression which determines whether or not to show a confirmation message
           when the field value is changed directly from the UI. It's NOT applicable when the
           value is changed indirectly, for example, as a result of client reflection. -->
      <xsd:attribute name="showConfirmMessage" type="xsd:string"/>
      <!-- An optional attribute, if set, defer sub menu generation until user tries to open
           the menu. DO NOT set this flag unless the sub menu of this widget is very expensive
           to generate. Setting this flag will reduce time to load the page, however require
           fetching additional info from server in the background, when the menu gets opened
           for the first time after page loaded. -->
      <xsd:attribute name="subMenuOnDemand" type="xsd:boolean" default="false"/>
      <!-- A Gosu expression to run before committing the record. This expression can refer to
           any symbols available to this widget. If this expression returns null, the validation
           is considered successful; otherwise, the result of this expression will be displayed
           as an error and the record will not be committed. -->
      <xsd:attribute name="validationExpression" type="xsd:string"/>
      <!-- The value this Input binds to as an Expression.  If the Input is editable then this
           value is both read from and written to (unless "setter" is defined). -->
      <xsd:attribute name="value" type="xsd:string" use="required"/>
      <!-- CSS max-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionMaxWidth" type="xsd:string"/>
      <!-- CSS min-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionMinWidth" type="xsd:string"/>
      <!-- CSS width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionWidth" type="xsd:string"/>
      <!-- The type of the value expression. -->
      <xsd:attribute name="valueType" type="xsd:string" default="java.lang.String"/>
      <!-- If used instead of "editable", specifies whether the Input is editable when data is
           being created -->
      <xsd:attribute name="visible" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- A widget that always encrypts any existing value that has been previously committed,
       but allows the user to enter new value when in edit mode. -->
  <xsd:element name="PrivacyCell">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="Reflect" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element ref="ColumnFooter" minOccurs="0" maxOccurs="1"/>
        <xsd:element ref="PostOnChange" minOccurs="0" maxOccurs="1"/>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="AddMenuItem"/>
          <xsd:element ref="AddMenuItemIterator"/>
          <xsd:element ref="MenuItem"/>
          <xsd:element ref="MenuItemDivider"/>
          <xsd:element ref="MenuItemIterator"/>
          <xsd:element ref="MenuItemSetRef"/>
          <xsd:element ref="MenuItemTree"/>
          <xsd:element ref="PickerMenuItem"/>
          <xsd:element ref="SearchItem"/>
        </xsd:choice>
      </xsd:sequence>
      <!-- An optional action to take when the user clicks the value of this widget when the
           value is not being edited. See ActionBase for details. When specified, the value of
           this widget will be rendered as a link when the value is not being edited. -->
      <xsd:attribute name="action" type="xsd:string"/>
      <!-- An optional boolean expression controlling whether the action should be available
           in this specific context when in read-only mode.  This is ignored if in edit mode
           or if the action is null.  This attribute will be deprecated in a future release,
           please use the 'available' attribute instead.  To disable action in readonly mode,
           you can set available=&quot;CurrentLocation.InEditMode || &lt;action-available-condition&gt;&quot; -->
      <xsd:attribute name="actionAvailable" type="xsd:string"/>
      <!-- Specifies the alignment of this cell. Valid values: "left", "right", or "center".
           If no value is specified, the default alignment is determined by the value type ("center"
           for boolean values; "right" for numeric values; "left" for other value types). -->
      <xsd:attribute name="align" type="WidgetAlignment"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- Optional. Expression that returns an gw.api.contact.AutocompleteHandler which produces
           auto complete suggestions for this widget. USE WITH CAUTION: If specified, the handler
           will be called at server side on each user key stroke. -->
      <xsd:attribute name="autoComplete" type="xsd:string"/>
      <!-- An optional attribute to specify additional arguments to pass to the "autoComplete"
           handler, if exists.
         (You don't need to specify the id of this widget as part
           of this attribute, because the value of this widget
         is passed to the handler
           by default; If the id of this widget is specified, the argument value passed to the

                   handler will be null, since the value of this widget has not been fully specified
           when the handler is invoked.)
         Refers to the "id" attribute of other value
           widget on page. Multiple ids can be separated by ",".
         If specified, the latest
           value of these widgets will be passed to the autoComplete handler
         when retrieving
           auto complete info. -->
      <xsd:attribute name="autoCompleteArgIds" type="xsd:string"/>
      <!-- If specified, delays autocomplete functionality until the user has entered the specified
           number of characters. -->
      <xsd:attribute name="autoCompleteTriggerChars" type="xsd:integer"/>
      <!-- Boolean expression which, if false, grays out the widget and all its children -->
      <xsd:attribute name="available" type="xsd:string"/>
      <!-- If true, renders the cell contents in bold text. Defaults to false. -->
      <xsd:attribute name="bold" type="xsd:boolean" default="false"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- The HTML colspan attribute, lets this cell span across multiple columns of other rows.
           Useful for generating a "group header" row above a RowIterator. The default value
           is 1. A value greater than 1 is only allowed when the containing row is not iterated
           by a RowIterator. -->
      <xsd:attribute name="colspan" type="xsd:integer"/>
      <!-- The confirmation message to show when "showConfirmMessage" is set. If not specified,
           a standard message will be used. -->
      <xsd:attribute name="confirmMessage" type="xsd:string"/>
      <!-- A Gosu expression used to convert the value picked from a popup before set it into
           the model value of this widget. The picked value will be exposed as a symbol with
           the name "PickedValue" -->
      <xsd:attribute name="conversionExpression" type="xsd:string"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- Boolean expression which, if false, makes this widget and all its children read-only -->
      <xsd:attribute name="editable" type="xsd:string" default="false"/>
      <!-- If true, enables html markup in the autocomplete suggestions for this text input by
           means of the following special tags: [i]italic[/i] - makes text italic, [b]bold[/b]
           - makes text bold and [hl]highlighted[/hl] - highlights the text -->
      <xsd:attribute name="enableAutoCompleteMarkup" type="xsd:boolean" default="false"/>
      <!-- If true, allows the user to sort the values in the column by clicking on the header.
            Only applicable when the containing row is iterated by a RowIterator. -->
      <xsd:attribute name="enableSort" type="xsd:boolean" default="true"/>
      <!-- An optional expression to encrypt the existing model value, exposed as "VALUE". If
           not set, a default encryption will be used. -->
      <xsd:attribute name="encryptionExpression" type="xsd:string"/>
      <!-- If true, this cell will the last cell in the row to be navigated to via the ENTER
           key. Only applicable when "CellNavOnEnter" or "QuickAddOnEnter" is set. Normally not
           specified. Default to false. -->
      <xsd:attribute name="endOfCellNav" type="xsd:boolean" default="false"/>
      <!-- If true, instead of showing a hierarchical menu, the widget will show a single menu
           with sub-menus grouped under headers. -->
      <xsd:attribute name="flatten" type="xsd:boolean" default="false"/>
      <!-- An optional boolean expression, if returns true, this widget will get focus when start
           editing the containing location. -->
      <xsd:attribute name="focusOnStartEditing" type="xsd:string"/>
      <!-- An expression that returns a GWColor instance. Legacy: this method can instead return
           a string corresponding to a CSS Specification Level 3 color name. See GWColor for
           more details. -->
      <xsd:attribute name="fontColor" type="xsd:string"/>
      <!-- An optional expression. If specified, a footer cell with the specified value will
           be rendered for this column. Only applicable when the containing Row is iterated by
           a RowIterator. Not allowed when "footerSumValue" is specified. -->
      <xsd:attribute name="footerLabel" type="xsd:string"/>
      <!-- An optional expression, if specified, will be used as format pattern for the footer
           sum value. Normally not specified, so that the "format" and\or "formatType" of the
           cell value will be applied to footer sum value. Only applicable when "footerSumValue"
           is specified. The result of this expression must conform to the number format defined
           in java.text.DecimalFormat. -->
      <xsd:attribute name="footerSumFormat" type="xsd:string"/>
      <!-- An optional Numeric expression. If specified, a footer cell that sums the specified
           value for all cells in this column will be rendered. Pagination of the list does not
           affect the sum value. Only applicable when the containing row is iterated by a RowIterator.
           Not allowed when "footerLabel" is specified. -->
      <xsd:attribute name="footerSumValue" type="xsd:string"/>
      <!-- An optional expression that returns a format pattern, which must conform to the number
           format defined in java.text.DecimalFormat. When the underlying data type is not a
           Number, only the prefix and suffix of the pattern will be applied. For example, "#.#%"
           formats the Number value as percentage with up to 1 decimal digit. -->
      <xsd:attribute name="format" type="xsd:string"/>
      <!-- How the value is formatted; options include "general", "currency", and "email".  See
           the formatType enumeration. -->
      <xsd:attribute name="formatType" type="FormatType"/>
      <!-- If true, the ListView will be grouped by this cell upon entering the page. Only one
           grouped cell is allowed at any given time and it is only applicable when the column
           is sortable. -->
      <xsd:attribute name="groupedOnEnter" type="xsd:string"/>
      <!-- If true, this Cell and any other grow-enabled Cell will expand to fill remaining space
           in the ListViewPanel. Only applicable when the ListView is set to stretch. -->
      <xsd:attribute name="grow" type="xsd:boolean" default="false"/>
      <!-- If true, generates a checkbox at the beginning of this cell. This checkbox can be
           used to check this entry in the nearest containing Iterator. Defaults to false. Only
           allowed if this cell is inside a CellIterator or under a Row inside a RowIterator. -->
      <xsd:attribute name="hasCheckBox" type="xsd:boolean" default="false"/>
      <!-- CSS height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="height" type="xsd:string"/>
      <!-- A Gosu expression which, if defined, is evaluated to create help info that guides
           the user to edit this widget. The help info will show up if the user hovers the mouse
           over or focuses on the widget, when the widget is in edit mode. -->
      <xsd:attribute name="helpText" type="xsd:string"/>
      <!-- If false, menu items under this input will be shown even when the input is not editable. -->
      <xsd:attribute name="hideChildrenIfReadOnly" type="xsd:boolean" default="true"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- Refers to an image file. If defined, makes this an icon cell. The "value" attribute
           should be a boolean expression describing whether the icon is visible in a given row. -->
      <xsd:attribute name="icon" type="xsd:string"/>
      <!-- Color of the icon. If not set will default to its font color. -->
      <xsd:attribute name="iconColor" type="xsd:string"/>
      <!-- The ALT text for any icon generated in the content cells -->
      <xsd:attribute name="iconLabel" type="xsd:string"/>
      <!-- An enumeration of icon types that determine what the 'icon' property on the widget
           is referring to. -->
      <xsd:attribute name="iconType" type="IconTypeEnum"/>
      <!-- Reference ID of the widget.  This does not have to be globally unique; it only has
           to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <!-- A Gosu expression that converts the presentation value to a model value. The presentation
           value string is exposed to this expression as the symbol "VALUE". -->
      <xsd:attribute name="inputConversion" type="xsd:string"/>
      <!-- A gosu expression that returns a string to use as the input mask. If not specified,
           the input mask (if any) specified on the value's field validator will be used. This
           field should only be necessary in cases where the data type has no mask or where the
           mask needs to be conditional. The input mask returned should be of the same format
           as a mask specified using the input-mask attribute on a field validator (use # for
           wildcards). A mask that contains no wildcards will just be used as a placeholder value.
           The input mask is recalculated on every render, which means that if the mask is conditional
           and dependent on other data on this page that it can change from one request to the
           next. -->
      <xsd:attribute name="inputMask" type="xsd:string"/>
      <!-- An optional expression. If specified, a header cell with the specified value will
           be rendered for this column. Only applicable when the containing row is iterated by
           a RowIterator. -->
      <xsd:attribute name="label" type="xsd:string"/>
      <!-- Custom extension CSS style class to apply to the header. -->
      <xsd:attribute name="labelStyleClass" type="xsd:string"/>
      <!-- The maximum number of characters allowed for an input field. -->
      <xsd:attribute name="maxChars" type="xsd:integer" default="0"/>
      <!-- CSS max-height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="maxHeight" type="xsd:string"/>
      <!-- CSS max-width value. Can be `px`, or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="maxWidth" type="xsd:string"/>
      <!-- CSS min-height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="minHeight" type="xsd:string"/>
      <!-- CSS min-width value. Can be `px`, or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="minWidth" type="xsd:string"/>
      <!-- Integer that determines the max number of entries to show for a comma-separated text
           cell. Shows "..." at the end -->
      <xsd:attribute name="numEntries" type="xsd:integer" default="-1"/>
      <!-- The number of child MenuItems to show in each column.  If not specified, all children
           will be shown in a single column. -->
      <xsd:attribute name="numEntriesPerColumn" type="xsd:integer" default="0"/>
      <!-- Gosu expression to be executed after the value is set from a picker. -->
      <xsd:attribute name="onPick" type="xsd:string"/>
      <!-- A Gosu expression that converts the model value to a presentation value. The model
           value is exposed to this expression as the symbol "VALUE". The return type of this
           expression must be String. -->
      <xsd:attribute name="outputConversion" type="xsd:string"/>
      <!-- Relative width when printing to PDF. All widths are relative to the widths of the
           other columns in the ListView -->
      <xsd:attribute name="printWidth" type="xsd:string" default="1"/>
      <!-- A Gosu expression that returns a regular expression string to validate the user input.
            If not specified, the regular expression (if any) specified on the value's field
           validator will be used.  This field should only be necessary in cases where the data
           type has no regular expression or where it needs to be conditional. The value returned
           should be of the same format as a regular expression specified on a field validator.
            This property is recalculated on every render, which means that if the regular expression
           is conditional and dependent on other data on this page that it can change from one
           request to the next. -->
      <xsd:attribute name="regex" type="xsd:string"/>
      <!-- A Gosu expression used to validate user value before setting it to the model. This
           expression can access any symbols available to this widget, and a "VALUE" symbol that
           represents the user value. If this expression returns null, the user value will be
           set into the model. Otherwise, an error message containing the result of the expression
           will be displayed on the page, the value will not be set into the model, and no actions
           can be performed until the error is corrected. -->
      <xsd:attribute name="requestValidationExpression" type="xsd:string"/>
      <!-- If true, then the cell must be filled out by the user -->
      <xsd:attribute name="required" type="xsd:string"/>
      <!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * Deprecated.
           DO NOT USE.                                           * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
           Consider using "onChange/onPick/inputConversion/outputConversion" where available.
           If specified and the Input is editable, then any new value of the Input is written
           to this expression (Gosu by default) instead of to "value".  The new value is exposed
           as the symbol "VALUE".  For instance if your value expression is "Foo.getSomething()"
           then it can't be written to since it's not an L-value; so you could specify a setter
           expression along the lines of "Foo.setSomething(VALUE)" Warning: if you use this attribute
           many pebbles features will not work, including but not limited to: * Correct automatic
           detection of the state of the updated data * Correct automatic detection of the editability
           of the data * Correct automatic detection of the maximum size of a text input -->
      <xsd:attribute name="setter" type="xsd:string"/>
      <!-- If true, reflected values will be encrypted before being displayed.  If false, reflected
           values will not be encrypted before being displayed -->
      <xsd:attribute name="shouldEncryptReflectedValue" type="xsd:boolean" default="true"/>
      <!-- Boolean expression which determines whether or not to show a confirmation message
           when the field value is changed directly from the UI. It's NOT applicable when the
           value is changed indirectly, for example, as a result of client reflection. -->
      <xsd:attribute name="showConfirmMessage" type="xsd:string"/>
      <!-- If true, shows the icon defined by "icon" in the header cell for this column. The
           default value is true. -->
      <xsd:attribute name="showHeaderIcon" type="xsd:boolean" default="true"/>
      <!-- An optional comma-separated sequence of Expressions, each of which is assumed to be
           a dot-delimited path, the value by which this column will be sorted if the user clicks
           on the header cell. -->
      <xsd:attribute name="sortBy" type="xsd:string"/>
      <!-- Either "ascending" or "descending" -->
      <xsd:attribute name="sortDirection" type="WidgetSortDirection" default="ascending"/>
      <!-- The priority of sorting relative to other sorting elements like IteratorSort and Cell.
           The lower the number, the higher the priority.  The highest priority is "1" -->
      <xsd:attribute name="sortOrder" type="xsd:integer" default="0"/>
      <!-- CSS style class for the cell content; for instance, "miniButton" makes a link appear
           as a small button -->
      <xsd:attribute name="styleClass" type="LinkStyleClass"/>
      <!-- An optional attribute, if set, defer sub menu generation until user tries to open
           the menu. DO NOT set this flag unless the sub menu of this widget is very expensive
           to generate. Setting this flag will reduce time to load the page, however require
           fetching additional info from server in the background, when the menu gets opened
           for the first time after page loaded. -->
      <xsd:attribute name="subMenuOnDemand" type="xsd:boolean" default="false"/>
      <!-- Extra "alt" text to show when the user hovers the mouse over the header cell of this
           column. -->
      <xsd:attribute name="tooltip" type="xsd:string"/>
      <!-- If set to a type other than 'all', will prevent the user from inputting certain types
           of characters on the client on a per character basis. Defaults to 'defaultForType'.
           Can be used in conjunction with the Input Mask property. For instance, a US phone
           number client mask could be implemented by setting this property to 'numeric' and
           the input mask to '+1(###)###-####. Some value widgets, like passwords or dates, may
           modify or ignore this property. This property has no effect on server or database
           level validation of data or input; meaning, an authenticated user could choose to
           manually submit a form with invalid data that would bypass this check. For database
           level validation see the 'regex' property. -->
      <xsd:attribute name="userInputRestriction" type="InputRestrictionType" default="defaultForType"/>
      <!-- A Gosu expression to run before committing the record. This expression can refer to
           any symbols available to this widget. If this expression returns null, the validation
           is considered successful; otherwise, the result of this expression will be displayed
           as an error and the record will not be committed. -->
      <xsd:attribute name="validationExpression" type="xsd:string"/>
      <!-- The label of this cell to be used when it has validation issues. Not needed when this
           cell has a "label". Required if the cell is editable but does not have a "label". -->
      <xsd:attribute name="validationLabel" type="xsd:string"/>
      <!-- The value this element binds to.  If the element is editable then this value is both
           read from and written to (unless "setter" is defined). -->
      <xsd:attribute name="value" type="xsd:string"/>
      <!-- The type of the value expression. -->
      <xsd:attribute name="valueType" type="xsd:string" default="java.lang.String"/>
      <!-- Boolean expression which, if false, hides the <i>contents</i> of the cell (its "ValueWidget"),
           but not the cell itself.  Needed since hiding the actual cell usually screws up the
           layout -->
      <xsd:attribute name="valueVisible" type="xsd:string"/>
      <!-- Specifies the vertical alignment of this cell. Valid values: "top", "middle", or "bottom".
           If no value is specified, the default alignment is determined by the cell type ("top"
           for Text Areas and Format Cells, "middle" for buttons and icons). -->
      <xsd:attribute name="verticalAlign" type="WidgetVerticalAlignment"/>
      <!-- Boolean expression which, if false, completely hides the widget and all its children -->
      <xsd:attribute name="visible" type="xsd:string"/>
      <!-- CSS width value. Can be `px`, or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="width" type="xsd:string"/>
      <!-- If default, defers to FormatType to decide whether to wrap or not.  If true, allows
           cell content to wrap. -->
      <xsd:attribute name="wrap" type="WrapType" default="default"/>
      <!-- If true, allows Header Cell text content to wrap. Defaults to true. -->
      <xsd:attribute name="wrapLabel" type="xsd:boolean" default="false"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- A widget that always encrypts any existing value that has been previously committed,
       but allows the user to enter new value when in edit mode. -->
  <xsd:element name="PrivacyInput">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="LayoutConfig" minOccurs="0" maxOccurs="1"/>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="AddMenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="AddMenuItemIterator" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemDivider" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemIterator" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemSetRef" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemTree" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PickerMenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PostOnChange" minOccurs="0" maxOccurs="1"/>
          <xsd:element ref="Reflect" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="SearchItem" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:choice>
      </xsd:sequence>
      <!-- An optional action to take when the user clicks the value of this widget when the
           value is not being edited. See ActionBase for list of available action prefixes. When
           specified, the value of this widget will be rendered as a link when the value is not
           being edited. -->
      <xsd:attribute name="action" type="xsd:string"/>
      <!-- An optional boolean expression controlling whether the action should be available
           in this specific context when in read-only mode.  This is ignored if in edit mode
           or if the action is null.  This attribute will be deprecated in a future release,
           please use the 'available' attribute instead.  To disable action in readonly mode,
           you can set available=&quot;CurrentLocation.InEditMode || &lt;action-available-condition&gt;&quot; -->
      <xsd:attribute name="actionAvailable" type="xsd:string"/>
      <!-- Alignment of the widget ("left", "right", or "center") -->
      <xsd:attribute name="align" type="WidgetAlignment"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- Optional. Expression that returns an gw.api.contact.AutocompleteHandler which produces
           auto complete suggestions for this widget. USE WITH CAUTION: If specified, the handler
           will be called at server side on each user key stroke. -->
      <xsd:attribute name="autoComplete" type="xsd:string"/>
      <!-- An optional attribute to specify additional arguments to pass to the "autoComplete"
           handler, if exists.
         (You don't need to specify the id of this widget as part
           of this attribute, because the value of this widget
         is passed to the handler
           by default; If the id of this widget is specified, the argument value passed to the

                   handler will be null, since the value of this widget has not been fully specified
           when the handler is invoked.)
         Refers to the "id" attribute of other value
           widget on page. Multiple ids can be separated by ",".
         If specified, the latest
           value of these widgets will be passed to the autoComplete handler
         when retrieving
           auto complete info. -->
      <xsd:attribute name="autoCompleteArgIds" type="xsd:string"/>
      <!-- If specified, delays autocomplete functionality until the user has entered the specified
           number of characters. -->
      <xsd:attribute name="autoCompleteTriggerChars" type="xsd:integer"/>
      <!-- Boolean expression which, if false, grays out the widget and all its children -->
      <xsd:attribute name="available" type="xsd:string"/>
      <!-- If true then the label is displayed in bold text. -->
      <xsd:attribute name="boldLabel" type="xsd:boolean" default="false"/>
      <!-- If true then the value is displayed in bold text when read-only. -->
      <xsd:attribute name="boldValue" type="xsd:boolean" default="false"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- The confirmation message to show when "showConfirmMessage" is set. If not specified,
           a standard message will be used. -->
      <xsd:attribute name="confirmMessage" type="xsd:string"/>
      <!-- A Gosu expression used to convert the value picked from a popup before set it into
           the model value of this widget. The picked value will be exposed as a symbol with
           the name "PickedValue" -->
      <xsd:attribute name="conversionExpression" type="xsd:string"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- Boolean expression which, if false, makes this widget and all its children read-only -->
      <xsd:attribute name="editable" type="xsd:string" default="false"/>
      <!-- If true, enables html markup in the autocomplete suggestions for this text input by
           means of the following special tags: [i]italic[/i] - makes text italic, [b]bold[/b]
           - makes text bold and [hl]highlighted[/hl] - highlights the text -->
      <xsd:attribute name="enableAutoCompleteMarkup" type="xsd:boolean" default="false"/>
      <!-- An optional expression to encrypt the existing model value, exposed as "VALUE". If
           not set, a default encryption will be used. -->
      <xsd:attribute name="encryptionExpression" type="xsd:string"/>
      <!-- If true, instead of showing a hierarchical menu, the widget will show a single menu
           with sub-menus grouped under headers. -->
      <xsd:attribute name="flatten" type="xsd:boolean" default="false"/>
      <!-- An optional boolean expression, if returns true, this widget will get focus when start
           editing the containing location. -->
      <xsd:attribute name="focusOnStartEditing" type="xsd:string"/>
      <!-- An optional expression that returns a format pattern, which must conform to the number
           format defined in java.text.DecimalFormat. When the underlying data type is not a
           Number, only the prefix and suffix of the pattern will be applied. For example, "#.#%"
           formats the Number value as percentage with up to 1 decimal digit. -->
      <xsd:attribute name="format" type="xsd:string"/>
      <!-- How the value is formatted; options include "general", "currency", and "email".  See
           the formatType enumeration. -->
      <xsd:attribute name="formatType" type="FormatType"/>
      <!-- A Gosu expression which, if defined, is evaluated to create help info that guides
           the user to edit this widget. The help info will show up if the user hovers the mouse
           over or focuses on the widget, when the widget is in edit mode. -->
      <xsd:attribute name="helpText" type="xsd:string"/>
      <!-- If false, menu items under this input will be shown even when the input is not editable. -->
      <xsd:attribute name="hideChildrenIfReadOnly" type="xsd:boolean" default="true"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- Reference ID of the widget.  This does not have to be globally unique; it only has
           to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <!-- A Gosu expression that converts the presentation value to a model value. The presentation
           value string is exposed to this expression as the symbol "VALUE". -->
      <xsd:attribute name="inputConversion" type="xsd:string"/>
      <!-- A gosu expression that returns a string to use as the input mask. If not specified,
           the input mask (if any) specified on the value's field validator will be used. This
           field should only be necessary in cases where the data type has no mask or where the
           mask needs to be conditional. The input mask returned should be of the same format
           as a mask specified using the input-mask attribute on a field validator (use # for
           wildcards). A mask that contains no wildcards will just be used as a placeholder value.
           The input mask is recalculated on every render, which means that if the mask is conditional
           and dependent on other data on this page that it can change from one request to the
           next. -->
      <xsd:attribute name="inputMask" type="xsd:string"/>
      <!-- Label to render. -->
      <xsd:attribute name="label" type="xsd:string"/>
      <!-- Boolean expression which, if true, causes the label portion of the Input to be rendered
           above the value -->
      <xsd:attribute name="labelAbove" type="xsd:string" default="false"/>
      <!-- Custom extension CSS style class to apply to the label. -->
      <xsd:attribute name="labelStyleClass" type="xsd:string"/>
      <!-- The maximum number of characters allowed for an input field. -->
      <xsd:attribute name="maxChars" type="xsd:integer" default="0"/>
      <!-- The number of child MenuItems to show in each column.  If not specified, all children
           will be shown in a single column. -->
      <xsd:attribute name="numEntriesPerColumn" type="xsd:integer" default="0"/>
      <!-- Gosu expression to be executed after the value is set from a picker. -->
      <xsd:attribute name="onPick" type="xsd:string"/>
      <!-- A Gosu expression that converts the model value to a presentation value. The model
           value is exposed to this expression as the symbol "VALUE". The return type of this
           expression must be String. -->
      <xsd:attribute name="outputConversion" type="xsd:string"/>
      <!-- A Gosu expression that returns a regular expression string to validate the user input.
            If not specified, the regular expression (if any) specified on the value's field
           validator will be used.  This field should only be necessary in cases where the data
           type has no regular expression or where it needs to be conditional. The value returned
           should be of the same format as a regular expression specified on a field validator.
            This property is recalculated on every render, which means that if the regular expression
           is conditional and dependent on other data on this page that it can change from one
           request to the next. -->
      <xsd:attribute name="regex" type="xsd:string"/>
      <!-- A Gosu expression used to validate user value before setting it to the model. This
           expression can access any symbols available to this widget, and a "VALUE" symbol that
           represents the user value. If this expression returns null, the user value will be
           set into the model. Otherwise, an error message containing the result of the expression
           will be displayed on the page, the value will not be set into the model, and no actions
           can be performed until the error is corrected. -->
      <xsd:attribute name="requestValidationExpression" type="xsd:string"/>
      <!-- If true, then the cell must be filled out by the user -->
      <xsd:attribute name="required" type="xsd:string"/>
      <!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * Deprecated.
           DO NOT USE.                                           * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
           Consider using "onChange/onPick/inputConversion/outputConversion" where available.
           If specified and the Input is editable, then any new value of the Input is written
           to this expression (Gosu by default) instead of to "value".  The new value is exposed
           as the symbol "VALUE".  For instance if your value expression is "Foo.getSomething()"
           then it can't be written to since it's not an L-value; so you could specify a setter
           expression along the lines of "Foo.setSomething(VALUE)" Warning: if you use this attribute
           many pebbles features will not work, including but not limited to: * Correct automatic
           detection of the state of the updated data * Correct automatic detection of the editability
           of the data * Correct automatic detection of the maximum size of a text input -->
      <xsd:attribute name="setter" type="xsd:string"/>
      <!-- Optional keyboard shortcut character in the form of "Q" or "ShiftQ"; the "Alt" key
           is implicit. This is only applicable when this widget has an "action" specified and
           the value is not being edited. -->
      <xsd:attribute name="shortcut" type="xsd:string"/>
      <!-- If true, reflected values will be encrypted before being displayed.  If false, reflected
           values will not be encrypted before being displayed -->
      <xsd:attribute name="shouldEncryptReflectedValue" type="xsd:boolean" default="true"/>
      <!-- Boolean expression which determines whether or not to show a confirmation message
           when the field value is changed directly from the UI. It's NOT applicable when the
           value is changed indirectly, for example, as a result of client reflection. -->
      <xsd:attribute name="showConfirmMessage" type="xsd:string"/>
      <!-- An optional attribute, if set, defer sub menu generation until user tries to open
           the menu. DO NOT set this flag unless the sub menu of this widget is very expensive
           to generate. Setting this flag will reduce time to load the page, however require
           fetching additional info from server in the background, when the menu gets opened
           for the first time after page loaded. -->
      <xsd:attribute name="subMenuOnDemand" type="xsd:boolean" default="false"/>
      <!-- If set to a type other than 'all', will prevent the user from inputting certain types
           of characters on the client on a per character basis. Defaults to 'defaultForType'.
           Can be used in conjunction with the Input Mask property. For instance, a US phone
           number client mask could be implemented by setting this property to 'numeric' and
           the input mask to '+1(###)###-####. Some value widgets, like passwords or dates, may
           modify or ignore this property. This property has no effect on server or database
           level validation of data or input; meaning, an authenticated user could choose to
           manually submit a form with invalid data that would bypass this check. For database
           level validation see the 'regex' property. -->
      <xsd:attribute name="userInputRestriction" type="InputRestrictionType" default="defaultForType"/>
      <!-- A Gosu expression to run before committing the record. This expression can refer to
           any symbols available to this widget. If this expression returns null, the validation
           is considered successful; otherwise, the result of this expression will be displayed
           as an error and the record will not be committed. -->
      <xsd:attribute name="validationExpression" type="xsd:string"/>
      <!-- The value this Input binds to as an Expression.  If the Input is editable then this
           value is both read from and written to (unless "setter" is defined). -->
      <xsd:attribute name="value" type="xsd:string" use="required"/>
      <!-- CSS max-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionMaxWidth" type="xsd:string"/>
      <!-- CSS min-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionMinWidth" type="xsd:string"/>
      <!-- CSS width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionWidth" type="xsd:string"/>
      <!-- The type of the value expression. -->
      <xsd:attribute name="valueType" type="xsd:string" default="java.lang.String"/>
      <!-- If used instead of "editable", specifies whether the Input is editable when data is
           being created -->
      <xsd:attribute name="visible" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <xsd:element name="ProducerCodeInput">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="LayoutConfig" minOccurs="0" maxOccurs="1"/>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="AddMenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="AddMenuItemIterator" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemDivider" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemIterator" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemSetRef" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemTree" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PickerMenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PostOnChange" minOccurs="0" maxOccurs="1"/>
          <xsd:element ref="Reflect" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="SearchItem" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:choice>
      </xsd:sequence>
      <!-- An optional action to take when the user clicks the value of this widget when the
           value is not being edited. See ActionBase for list of available action prefixes. When
           specified, the value of this widget will be rendered as a link when the value is not
           being edited. -->
      <xsd:attribute name="action" type="xsd:string"/>
      <!-- An optional boolean expression controlling whether the action should be available
           in this specific context when in read-only mode.  This is ignored if in edit mode
           or if the action is null.  This attribute will be deprecated in a future release,
           please use the 'available' attribute instead.  To disable action in readonly mode,
           you can set available=&quot;CurrentLocation.InEditMode || &lt;action-available-condition&gt;&quot; -->
      <xsd:attribute name="actionAvailable" type="xsd:string"/>
      <!-- Alignment of the widget ("left", "right", or "center") -->
      <xsd:attribute name="align" type="WidgetAlignment"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- Boolean expression which, if false, grays out the widget and all its children -->
      <xsd:attribute name="available" type="xsd:string"/>
      <!-- If true then the label is displayed in bold text. -->
      <xsd:attribute name="boldLabel" type="xsd:boolean" default="false"/>
      <!-- If true then the value is displayed in bold text when read-only. -->
      <xsd:attribute name="boldValue" type="xsd:boolean" default="false"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- Whether the user should be allowed to clear the selected value. If "true", an icon
           will be available which, when clicked, will clear the widget. This attribute will
           always be overridden and set to "true" if freeInputEnabled is set to false. -->
      <xsd:attribute name="clearEnabled" type="xsd:boolean" default="false"/>
      <!-- The confirmation message to show when "showConfirmMessage" is set. If not specified,
           a standard message will be used. -->
      <xsd:attribute name="confirmMessage" type="xsd:string"/>
      <!-- A Gosu expression used to convert the value picked from the picker popup before it
           is written to the model value of this widget. The picked value is available as the
           special symbol "PickedValue" -->
      <xsd:attribute name="conversionExpression" type="xsd:string"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- Boolean expression which, if false, makes this widget and all its children read-only -->
      <xsd:attribute name="editable" type="xsd:string" default="false"/>
      <!-- If true, instead of showing a hierarchical menu, the widget will show a single menu
           with sub-menus grouped under headers. -->
      <xsd:attribute name="flatten" type="xsd:boolean" default="false"/>
      <!-- An optional boolean expression, if returns true, this widget will get focus when start
           editing the containing location. -->
      <xsd:attribute name="focusOnStartEditing" type="xsd:string"/>
      <!-- How the value is formatted; options include "general", "currency", and "email".  See
           the formatType enumeration. -->
      <xsd:attribute name="formatType" type="FormatType"/>
      <!-- If true, the user may enter a free-text value. If this property is set to false, the
           clearEnabled attribute will be treated as true to allow for users to delete their
           picked selection. -->
      <xsd:attribute name="freeInputEnabled" type="xsd:boolean" default="true"/>
      <!-- A Gosu expression which, if defined, is evaluated to create help info that guides
           the user to edit this widget. The help info will show up if the user hovers the mouse
           over or focuses on the widget, when the widget is in edit mode. -->
      <xsd:attribute name="helpText" type="xsd:string"/>
      <!-- If false, menu items under this input will be shown even when the input is not editable. -->
      <xsd:attribute name="hideChildrenIfReadOnly" type="xsd:boolean" default="true"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- Reference ID of the widget.  This does not have to be globally unique; it only has
           to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <!-- A Gosu expression that converts the presentation value to a model value. The presentation
           value string is exposed to this expression as the symbol "VALUE". -->
      <xsd:attribute name="inputConversion" type="xsd:string"/>
      <!-- Label to render. -->
      <xsd:attribute name="label" type="xsd:string"/>
      <!-- Boolean expression which, if true, causes the label portion of the Input to be rendered
           above the value -->
      <xsd:attribute name="labelAbove" type="xsd:string" default="false"/>
      <!-- Custom extension CSS style class to apply to the label. -->
      <xsd:attribute name="labelStyleClass" type="xsd:string"/>
      <!-- The number of child MenuItems to show in each column.  If not specified, all children
           will be shown in a single column. -->
      <xsd:attribute name="numEntriesPerColumn" type="xsd:integer" default="0"/>
      <!-- Gosu expression to be executed after the picker popup has been used to pick a value.
           The picked value is available as the special symbol "PickedValue" -->
      <xsd:attribute name="onPick" type="xsd:string"/>
      <!-- A Gosu expression that converts the model value to a presentation value. The model
           value is exposed to this expression as the symbol "VALUE". The return type of this
           expression must be String. -->
      <xsd:attribute name="outputConversion" type="xsd:string"/>
      <!-- The picker popup used to pick a value, as a Gosu statement of the form "[popup name].push(...)". -->
      <xsd:attribute name="pickLocation" type="xsd:string" use="required"/>
      <!-- A Gosu expression used to validate user value before setting it to the model. This
           expression can access any symbols available to this widget, and a "VALUE" symbol that
           represents the user value. If this expression returns null, the user value will be
           set into the model. Otherwise, an error message containing the result of the expression
           will be displayed on the page, the value will not be set into the model, and no actions
           can be performed until the error is corrected. -->
      <xsd:attribute name="requestValidationExpression" type="xsd:string"/>
      <!-- If true, then the cell must be filled out by the user -->
      <xsd:attribute name="required" type="xsd:string"/>
      <!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * Deprecated.
           DO NOT USE.                                           * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
           Consider using "onChange/onPick/inputConversion/outputConversion" where available.
           If specified and the Input is editable, then any new value of the Input is written
           to this expression (Gosu by default) instead of to "value".  The new value is exposed
           as the symbol "VALUE".  For instance if your value expression is "Foo.getSomething()"
           then it can't be written to since it's not an L-value; so you could specify a setter
           expression along the lines of "Foo.setSomething(VALUE)" Warning: if you use this attribute
           many pebbles features will not work, including but not limited to: * Correct automatic
           detection of the state of the updated data * Correct automatic detection of the editability
           of the data * Correct automatic detection of the maximum size of a text input -->
      <xsd:attribute name="setter" type="xsd:string"/>
      <!-- Optional keyboard shortcut character in the form of "Q" or "ShiftQ"; the "Alt" key
           is implicit. This is only applicable when this widget has an "action" specified and
           the value is not being edited. -->
      <xsd:attribute name="shortcut" type="xsd:string"/>
      <!-- Boolean expression which determines whether or not to show a confirmation message
           when the field value is changed directly from the UI. It's NOT applicable when the
           value is changed indirectly, for example, as a result of client reflection. -->
      <xsd:attribute name="showConfirmMessage" type="xsd:string"/>
      <!-- An optional attribute, if set, defer sub menu generation until user tries to open
           the menu. DO NOT set this flag unless the sub menu of this widget is very expensive
           to generate. Setting this flag will reduce time to load the page, however require
           fetching additional info from server in the background, when the menu gets opened
           for the first time after page loaded. -->
      <xsd:attribute name="subMenuOnDemand" type="xsd:boolean" default="false"/>
      <!-- A Gosu expression to run before committing the record. This expression can refer to
           any symbols available to this widget. If this expression returns null, the validation
           is considered successful; otherwise, the result of this expression will be displayed
           as an error and the record will not be committed. -->
      <xsd:attribute name="validationExpression" type="xsd:string"/>
      <!-- The value this Input binds to as an Expression.  If the Input is editable then this
           value is both read from and written to (unless "setter" is defined). -->
      <xsd:attribute name="value" type="xsd:string" use="required"/>
      <!-- CSS max-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionMaxWidth" type="xsd:string"/>
      <!-- CSS min-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionMinWidth" type="xsd:string"/>
      <!-- CSS width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionWidth" type="xsd:string"/>
      <!-- The type of the value expression. -->
      <xsd:attribute name="valueType" type="xsd:string" default="entity.ProducerCode"/>
      <!-- If used instead of "editable", specifies whether the Input is editable when data is
           being created -->
      <xsd:attribute name="visible" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- A widget which indicates the progress of a long running operation. This widget updates
       its status from the server automatically until the operation completes. When the operation
       completes, if this widget has "actionOnComplete" set, it will invoke the action; otherwise
       it will refresh the nearest enclosing widget with "refreshOnProgressComplete" (if
       any). -->
  <xsd:element name="ProgressInput">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="LayoutConfig" minOccurs="0" maxOccurs="1"/>
      </xsd:sequence>
      <!-- An optional action, if set, will be executed when the long operation completes. When
           this attribute is set, the user is not allowed to interact with the app when the long
           operation is in progress. -->
      <xsd:attribute name="actionOnComplete" type="xsd:string"/>
      <!-- Alignment of the widget ("left", "right", or "center") -->
      <xsd:attribute name="align" type="WidgetAlignment"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- Boolean expression which, if false, grays out the widget and all its children -->
      <xsd:attribute name="available" type="xsd:string"/>
      <!-- If true then the label is displayed in bold text. -->
      <xsd:attribute name="boldLabel" type="xsd:boolean" default="false"/>
      <!-- If true then the value is displayed in bold text when read-only. -->
      <xsd:attribute name="boldValue" type="xsd:boolean" default="false"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- An optional boolean expression, if returns true, no animated gif will be rendered
           on the UI when the widget is polling the server for progress update.  Normally you
           don't want to set this attribute, therefore allow a visual indication to the user
           that this widget is updating itself. -->
      <xsd:attribute name="hideAnimation" type="xsd:string"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- Reference ID of the widget.  This does not have to be globally unique; it only has
           to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <!-- Label to render. -->
      <xsd:attribute name="label" type="xsd:string"/>
      <!-- Boolean expression which, if true, causes the label portion of the Input to be rendered
           above the value -->
      <xsd:attribute name="labelAbove" type="xsd:string" default="false"/>
      <!-- Custom extension CSS style class to apply to the label. -->
      <xsd:attribute name="labelStyleClass" type="xsd:string"/>
      <!-- An expression that returns percentage of completion: <li> -1: the operation is in
           progress but with unknown percentage completed (The widget will poll the server for
           new progress);  <li> 0: no operation is in progress;  <li> &gt;0 and &lt;100: actual
           %completion (The widget will poll the server for new progress);  <li> 100: the operation
           is completed (The widget will invoke "actionOnCompletion" if defined) -->
      <xsd:attribute name="percentage" type="xsd:string" use="required"/>
      <!-- An optional message to display -->
      <xsd:attribute name="status" type="xsd:string"/>
      <!-- CSS max-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionMaxWidth" type="xsd:string"/>
      <!-- CSS min-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionMinWidth" type="xsd:string"/>
      <!-- CSS width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionWidth" type="xsd:string"/>
      <!-- If used instead of "editable", specifies whether the Input is editable when data is
           being created -->
      <xsd:attribute name="visible" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- A ListView cell containing a single radio button. -->
  <xsd:element name="RadioButtonCell">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="Reflect" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element ref="ColumnFooter" minOccurs="0" maxOccurs="1"/>
        <xsd:element ref="PostOnChange" minOccurs="0" maxOccurs="1"/>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="AddMenuItem"/>
          <xsd:element ref="AddMenuItemIterator"/>
          <xsd:element ref="MenuItem"/>
          <xsd:element ref="MenuItemDivider"/>
          <xsd:element ref="MenuItemIterator"/>
          <xsd:element ref="MenuItemSetRef"/>
          <xsd:element ref="MenuItemTree"/>
          <xsd:element ref="PickerMenuItem"/>
          <xsd:element ref="SearchItem"/>
        </xsd:choice>
      </xsd:sequence>
      <!-- An optional action to take when the user clicks the value of this widget when the
           value is not being edited. See ActionBase for details. When specified, the value of
           this widget will be rendered as a link when the value is not being edited. -->
      <xsd:attribute name="action" type="xsd:string"/>
      <!-- An optional boolean expression controlling whether the action should be available
           in this specific context when in read-only mode.  This is ignored if in edit mode
           or if the action is null.  This attribute will be deprecated in a future release,
           please use the 'available' attribute instead.  To disable action in readonly mode,
           you can set available=&quot;CurrentLocation.InEditMode || &lt;action-available-condition&gt;&quot; -->
      <xsd:attribute name="actionAvailable" type="xsd:string"/>
      <!-- Specifies the alignment of this cell. Valid values: "left", "right", or "center".
           If no value is specified, the default alignment is determined by the value type ("center"
           for boolean values; "right" for numeric values; "left" for other value types). -->
      <xsd:attribute name="align" type="WidgetAlignment"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- Boolean expression which, if false, grays out the widget and all its children -->
      <xsd:attribute name="available" type="xsd:string"/>
      <!-- If true, renders the cell contents in bold text. Defaults to false. -->
      <xsd:attribute name="bold" type="xsd:boolean" default="false"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- The HTML colspan attribute, lets this cell span across multiple columns of other rows.
           Useful for generating a "group header" row above a RowIterator. The default value
           is 1. A value greater than 1 is only allowed when the containing row is not iterated
           by a RowIterator. -->
      <xsd:attribute name="colspan" type="xsd:integer"/>
      <!-- The confirmation message to show when "showConfirmMessage" is set. If not specified,
           a standard message will be used. -->
      <xsd:attribute name="confirmMessage" type="xsd:string"/>
      <!-- A Gosu expression used to convert the value picked from a popup before set it into
           the model value of this widget. The picked value will be exposed as a symbol with
           the name "PickedValue" -->
      <xsd:attribute name="conversionExpression" type="xsd:string"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- Boolean expression which, if false, makes this widget and all its children read-only -->
      <xsd:attribute name="editable" type="xsd:string" default="false"/>
      <!-- If true, allows the user to sort the values in the column by clicking on the header.
            Only applicable when the containing row is iterated by a RowIterator. -->
      <xsd:attribute name="enableSort" type="xsd:boolean" default="true"/>
      <!-- If true, this cell will the last cell in the row to be navigated to via the ENTER
           key. Only applicable when "CellNavOnEnter" or "QuickAddOnEnter" is set. Normally not
           specified. Default to false. -->
      <xsd:attribute name="endOfCellNav" type="xsd:boolean" default="false"/>
      <!-- If true, instead of showing a hierarchical menu, the widget will show a single menu
           with sub-menus grouped under headers. -->
      <xsd:attribute name="flatten" type="xsd:boolean" default="false"/>
      <!-- An optional boolean expression, if returns true, this widget will get focus when start
           editing the containing location. -->
      <xsd:attribute name="focusOnStartEditing" type="xsd:string"/>
      <!-- An expression that returns a GWColor instance. Legacy: this method can instead return
           a string corresponding to a CSS Specification Level 3 color name. See GWColor for
           more details. -->
      <xsd:attribute name="fontColor" type="xsd:string"/>
      <!-- An optional expression. If specified, a footer cell with the specified value will
           be rendered for this column. Only applicable when the containing Row is iterated by
           a RowIterator. Not allowed when "footerSumValue" is specified. -->
      <xsd:attribute name="footerLabel" type="xsd:string"/>
      <!-- An optional expression, if specified, will be used as format pattern for the footer
           sum value. Normally not specified, so that the "format" and\or "formatType" of the
           cell value will be applied to footer sum value. Only applicable when "footerSumValue"
           is specified. The result of this expression must conform to the number format defined
           in java.text.DecimalFormat. -->
      <xsd:attribute name="footerSumFormat" type="xsd:string"/>
      <!-- An optional Numeric expression. If specified, a footer cell that sums the specified
           value for all cells in this column will be rendered. Pagination of the list does not
           affect the sum value. Only applicable when the containing row is iterated by a RowIterator.
           Not allowed when "footerLabel" is specified. -->
      <xsd:attribute name="footerSumValue" type="xsd:string"/>
      <!-- How the value is formatted; options include "general", "currency", and "email".  See
           the formatType enumeration. -->
      <xsd:attribute name="formatType" type="FormatType"/>
      <!-- If true, the ListView will be grouped by this cell upon entering the page. Only one
           grouped cell is allowed at any given time and it is only applicable when the column
           is sortable. -->
      <xsd:attribute name="groupedOnEnter" type="xsd:string"/>
      <!-- If true, this Cell and any other grow-enabled Cell will expand to fill remaining space
           in the ListViewPanel. Only applicable when the ListView is set to stretch. -->
      <xsd:attribute name="grow" type="xsd:boolean" default="false"/>
      <!-- If true, generates a checkbox at the beginning of this cell. This checkbox can be
           used to check this entry in the nearest containing Iterator. Defaults to false. Only
           allowed if this cell is inside a CellIterator or under a Row inside a RowIterator. -->
      <xsd:attribute name="hasCheckBox" type="xsd:boolean" default="false"/>
      <!-- CSS height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="height" type="xsd:string"/>
      <!-- A Gosu expression which, if defined, is evaluated to create help info that guides
           the user to edit this widget. The help info will show up if the user hovers the mouse
           over or focuses on the widget, when the widget is in edit mode. -->
      <xsd:attribute name="helpText" type="xsd:string"/>
      <!-- If false, menu items under this input will be shown even when the input is not editable. -->
      <xsd:attribute name="hideChildrenIfReadOnly" type="xsd:boolean" default="true"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- Refers to an image file. If defined, makes this an icon cell. The "value" attribute
           should be a boolean expression describing whether the icon is visible in a given row. -->
      <xsd:attribute name="icon" type="xsd:string"/>
      <!-- Color of the icon. If not set will default to its font color. -->
      <xsd:attribute name="iconColor" type="xsd:string"/>
      <!-- The ALT text for any icon generated in the content cells -->
      <xsd:attribute name="iconLabel" type="xsd:string"/>
      <!-- An enumeration of icon types that determine what the 'icon' property on the widget
           is referring to. -->
      <xsd:attribute name="iconType" type="IconTypeEnum"/>
      <!-- Reference ID of the widget.  This does not have to be globally unique; it only has
           to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <!-- A Gosu expression that converts the presentation value to a model value. The presentation
           value string is exposed to this expression as the symbol "VALUE". -->
      <xsd:attribute name="inputConversion" type="xsd:string"/>
      <!-- An optional expression. If specified, a header cell with the specified value will
           be rendered for this column. Only applicable when the containing row is iterated by
           a RowIterator. -->
      <xsd:attribute name="label" type="xsd:string"/>
      <!-- Custom extension CSS style class to apply to the header. -->
      <xsd:attribute name="labelStyleClass" type="xsd:string"/>
      <!-- CSS max-height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="maxHeight" type="xsd:string"/>
      <!-- CSS max-width value. Can be `px`, or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="maxWidth" type="xsd:string"/>
      <!-- CSS min-height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="minHeight" type="xsd:string"/>
      <!-- CSS min-width value. Can be `px`, or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="minWidth" type="xsd:string"/>
      <!-- The number of child MenuItems to show in each column.  If not specified, all children
           will be shown in a single column. -->
      <xsd:attribute name="numEntriesPerColumn" type="xsd:integer" default="0"/>
      <!-- Gosu expression to be executed after the value is set from a picker. -->
      <xsd:attribute name="onPick" type="xsd:string"/>
      <!-- A Gosu expression that converts the model value to a presentation value. The model
           value is exposed to this expression as the symbol "VALUE". The return type of this
           expression must be String. -->
      <xsd:attribute name="outputConversion" type="xsd:string"/>
      <!-- Relative width when printing to PDF. All widths are relative to the widths of the
           other columns in the ListView -->
      <xsd:attribute name="printWidth" type="xsd:string" default="1"/>
      <!-- Logical name of the "group" of radio buttons, of which only one can be checked at
           a time -->
      <xsd:attribute name="radioButtonGroup" type="xsd:string" use="required"/>
      <!-- A Gosu expression used to validate user value before setting it to the model. This
           expression can access any symbols available to this widget, and a "VALUE" symbol that
           represents the user value. If this expression returns null, the user value will be
           set into the model. Otherwise, an error message containing the result of the expression
           will be displayed on the page, the value will not be set into the model, and no actions
           can be performed until the error is corrected. -->
      <xsd:attribute name="requestValidationExpression" type="xsd:string"/>
      <!-- If true, then the cell must be filled out by the user -->
      <xsd:attribute name="required" type="xsd:string"/>
      <!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * Deprecated.
           DO NOT USE.                                           * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
           Consider using "onChange/onPick/inputConversion/outputConversion" where available.
           If specified and the Input is editable, then any new value of the Input is written
           to this expression (Gosu by default) instead of to "value".  The new value is exposed
           as the symbol "VALUE".  For instance if your value expression is "Foo.getSomething()"
           then it can't be written to since it's not an L-value; so you could specify a setter
           expression along the lines of "Foo.setSomething(VALUE)" Warning: if you use this attribute
           many pebbles features will not work, including but not limited to: * Correct automatic
           detection of the state of the updated data * Correct automatic detection of the editability
           of the data * Correct automatic detection of the maximum size of a text input -->
      <xsd:attribute name="setter" type="xsd:string"/>
      <!-- Boolean expression which determines whether or not to show a confirmation message
           when the field value is changed directly from the UI. It's NOT applicable when the
           value is changed indirectly, for example, as a result of client reflection. -->
      <xsd:attribute name="showConfirmMessage" type="xsd:string"/>
      <!-- If true, shows the icon defined by "icon" in the header cell for this column. The
           default value is true. -->
      <xsd:attribute name="showHeaderIcon" type="xsd:boolean" default="true"/>
      <!-- An optional comma-separated sequence of Expressions, each of which is assumed to be
           a dot-delimited path, the value by which this column will be sorted if the user clicks
           on the header cell. -->
      <xsd:attribute name="sortBy" type="xsd:string"/>
      <!-- Either "ascending" or "descending" -->
      <xsd:attribute name="sortDirection" type="WidgetSortDirection" default="ascending"/>
      <!-- The priority of sorting relative to other sorting elements like IteratorSort and Cell.
           The lower the number, the higher the priority.  The highest priority is "1" -->
      <xsd:attribute name="sortOrder" type="xsd:integer" default="0"/>
      <!-- CSS style class for the cell content; for instance, "miniButton" makes a link appear
           as a small button -->
      <xsd:attribute name="styleClass" type="LinkStyleClass"/>
      <!-- An optional attribute, if set, defer sub menu generation until user tries to open
           the menu. DO NOT set this flag unless the sub menu of this widget is very expensive
           to generate. Setting this flag will reduce time to load the page, however require
           fetching additional info from server in the background, when the menu gets opened
           for the first time after page loaded. -->
      <xsd:attribute name="subMenuOnDemand" type="xsd:boolean" default="false"/>
      <!-- Extra "alt" text to show when the user hovers the mouse over the header cell of this
           column. -->
      <xsd:attribute name="tooltip" type="xsd:string"/>
      <!-- If true, validate before commit that the value of this column is unique across all
           rows in the current page. Only meaningful when this column is editable. -->
      <xsd:attribute name="unique" type="xsd:boolean" default="false"/>
      <!-- A Gosu expression to run before committing the record. This expression can refer to
           any symbols available to this widget. If this expression returns null, the validation
           is considered successful; otherwise, the result of this expression will be displayed
           as an error and the record will not be committed. -->
      <xsd:attribute name="validationExpression" type="xsd:string"/>
      <!-- The label of this cell to be used when it has validation issues. Not needed when this
           cell has a "label". Required if the cell is editable but does not have a "label". -->
      <xsd:attribute name="validationLabel" type="xsd:string"/>
      <!-- The value this element binds to.  If the element is editable then this value is both
           read from and written to (unless "setter" is defined). -->
      <xsd:attribute name="value" type="xsd:string"/>
      <!-- The type of the value expression. -->
      <xsd:attribute name="valueType" type="xsd:string" default="java.lang.Boolean"/>
      <!-- Boolean expression which, if false, hides the <i>contents</i> of the cell (its "ValueWidget"),
           but not the cell itself.  Needed since hiding the actual cell usually screws up the
           layout -->
      <xsd:attribute name="valueVisible" type="xsd:string"/>
      <!-- Specifies the vertical alignment of this cell. Valid values: "top", "middle", or "bottom".
           If no value is specified, the default alignment is determined by the cell type ("top"
           for Text Areas and Format Cells, "middle" for buttons and icons). -->
      <xsd:attribute name="verticalAlign" type="WidgetVerticalAlignment"/>
      <!-- Boolean expression which, if false, completely hides the widget and all its children -->
      <xsd:attribute name="visible" type="xsd:string"/>
      <!-- CSS width value. Can be `px`, or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="width" type="xsd:string"/>
      <!-- If default, defers to FormatType to decide whether to wrap or not.  If true, allows
           cell content to wrap. -->
      <xsd:attribute name="wrap" type="WrapType" default="default"/>
      <!-- If true, allows Header Cell text content to wrap. Defaults to true. -->
      <xsd:attribute name="wrapLabel" type="xsd:boolean" default="false"/>
    </xsd:complexType>
  </xsd:element>
  
  <xsd:element name="RangeAxis">
    <xsd:complexType>
      <xsd:choice minOccurs="0" maxOccurs="unbounded"/>
      <!-- An expression for the label of this axis -->
      <xsd:attribute name="label" type="xsd:string" use="required"/>
      <!-- The lower bound expression for the axis range. If omitted the minimum value of all
           the data series is used. Ignored for a category axis -->
      <xsd:attribute name="lowerBound" type="xsd:string"/>
      <!-- The upper bound expression for the axis range. If omitted the maximum value of all
           the data series is used. Ignored for a category axis -->
      <xsd:attribute name="upperBound" type="xsd:string"/>
      <!-- If true, and if the values are numeric, tick values will only be display as whole
           numbers -->
      <xsd:attribute name="useWholeNumbers" type="xsd:boolean" default="false"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- A ListView cell with extra attributes for a value field which is restricted by a value
       range -->
  <xsd:element name="RangeCell">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="Reflect" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element ref="ColumnFooter" minOccurs="0" maxOccurs="1"/>
        <xsd:element ref="PostOnChange" minOccurs="0" maxOccurs="1"/>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="AddMenuItem"/>
          <xsd:element ref="AddMenuItemIterator"/>
          <xsd:element ref="MenuItem"/>
          <xsd:element ref="MenuItemDivider"/>
          <xsd:element ref="MenuItemIterator"/>
          <xsd:element ref="MenuItemSetRef"/>
          <xsd:element ref="MenuItemTree"/>
          <xsd:element ref="PickerMenuItem"/>
          <xsd:element ref="SearchItem"/>
        </xsd:choice>
      </xsd:sequence>
      <!-- An optional action to take when the user clicks the value of this widget when the
           value is not being edited. See ActionBase for details. When specified, the value of
           this widget will be rendered as a link when the value is not being edited. -->
      <xsd:attribute name="action" type="xsd:string"/>
      <!-- An optional boolean expression controlling whether the action should be available
           in this specific context when in read-only mode.  This is ignored if in edit mode
           or if the action is null.  This attribute will be deprecated in a future release,
           please use the 'available' attribute instead.  To disable action in readonly mode,
           you can set available=&quot;CurrentLocation.InEditMode || &lt;action-available-condition&gt;&quot; -->
      <xsd:attribute name="actionAvailable" type="xsd:string"/>
      <!-- Specifies the alignment of this cell. Valid values: "left", "right", or "center".
           If no value is specified, the default alignment is determined by the value type ("center"
           for boolean values; "right" for numeric values; "left" for other value types). -->
      <xsd:attribute name="align" type="WidgetAlignment"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- Boolean expression which, if false, grays out the widget and all its children -->
      <xsd:attribute name="available" type="xsd:string"/>
      <!-- If true, renders the cell contents in bold text. Defaults to false. -->
      <xsd:attribute name="bold" type="xsd:boolean" default="false"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- The HTML colspan attribute, lets this cell span across multiple columns of other rows.
           Useful for generating a "group header" row above a RowIterator. The default value
           is 1. A value greater than 1 is only allowed when the containing row is not iterated
           by a RowIterator. -->
      <xsd:attribute name="colspan" type="xsd:integer"/>
      <!-- The confirmation message to show when "showConfirmMessage" is set. If not specified,
           a standard message will be used. -->
      <xsd:attribute name="confirmMessage" type="xsd:string"/>
      <!-- A Gosu expression used to convert the value picked from a popup before set it into
           the model value of this widget. The picked value will be exposed as a symbol with
           the name "PickedValue" -->
      <xsd:attribute name="conversionExpression" type="xsd:string"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- Boolean expression which, if false, makes this widget and all its children read-only -->
      <xsd:attribute name="editable" type="xsd:string" default="false"/>
      <!-- If true, allows the user to sort the values in the column by clicking on the header.
            Only applicable when the containing row is iterated by a RowIterator. -->
      <xsd:attribute name="enableSort" type="xsd:boolean" default="true"/>
      <!-- If true, this cell will the last cell in the row to be navigated to via the ENTER
           key. Only applicable when "CellNavOnEnter" or "QuickAddOnEnter" is set. Normally not
           specified. Default to false. -->
      <xsd:attribute name="endOfCellNav" type="xsd:boolean" default="false"/>
      <!-- Optional Gosu expression for filtering the value range of the widget. You can write
           this either as a boolean expression over a "VALUE" symbol (i.e. "Libraries.MyLib.isOkValue(VALUE)"),
           or as a more complex expression that takes a "VALUES" array symbol and returns a List
           (i.e. "Libraries.MyLib.filterValues(VALUES)") which is more powerful and efficient
           but harder to write. -->
      <xsd:attribute name="filter" type="xsd:string"/>
      <!-- If true, instead of showing a hierarchical menu, the widget will show a single menu
           with sub-menus grouped under headers. -->
      <xsd:attribute name="flatten" type="xsd:boolean" default="false"/>
      <!-- An optional boolean expression, if returns true, this widget will get focus when start
           editing the containing location. -->
      <xsd:attribute name="focusOnStartEditing" type="xsd:string"/>
      <!-- An expression that returns a GWColor instance. Legacy: this method can instead return
           a string corresponding to a CSS Specification Level 3 color name. See GWColor for
           more details. -->
      <xsd:attribute name="fontColor" type="xsd:string"/>
      <!-- An optional expression. If specified, a footer cell with the specified value will
           be rendered for this column. Only applicable when the containing Row is iterated by
           a RowIterator. Not allowed when "footerSumValue" is specified. -->
      <xsd:attribute name="footerLabel" type="xsd:string"/>
      <!-- An optional expression, if specified, will be used as format pattern for the footer
           sum value. Normally not specified, so that the "format" and\or "formatType" of the
           cell value will be applied to footer sum value. Only applicable when "footerSumValue"
           is specified. The result of this expression must conform to the number format defined
           in java.text.DecimalFormat. -->
      <xsd:attribute name="footerSumFormat" type="xsd:string"/>
      <!-- An optional Numeric expression. If specified, a footer cell that sums the specified
           value for all cells in this column will be rendered. Pagination of the list does not
           affect the sum value. Only applicable when the containing row is iterated by a RowIterator.
           Not allowed when "footerLabel" is specified. -->
      <xsd:attribute name="footerSumValue" type="xsd:string"/>
      <!-- How the value is formatted; options include "general", "currency", and "email".  See
           the formatType enumeration. -->
      <xsd:attribute name="formatType" type="FormatType"/>
      <!-- If true, the ListView will be grouped by this cell upon entering the page. Only one
           grouped cell is allowed at any given time and it is only applicable when the column
           is sortable. -->
      <xsd:attribute name="groupedOnEnter" type="xsd:string"/>
      <!-- If true, this Cell and any other grow-enabled Cell will expand to fill remaining space
           in the ListViewPanel. Only applicable when the ListView is set to stretch. -->
      <xsd:attribute name="grow" type="xsd:boolean" default="false"/>
      <!-- If true, generates a checkbox at the beginning of this cell. This checkbox can be
           used to check this entry in the nearest containing Iterator. Defaults to false. Only
           allowed if this cell is inside a CellIterator or under a Row inside a RowIterator. -->
      <xsd:attribute name="hasCheckBox" type="xsd:boolean" default="false"/>
      <!-- CSS height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="height" type="xsd:string"/>
      <!-- A Gosu expression which, if defined, is evaluated to create help info that guides
           the user to edit this widget. The help info will show up if the user hovers the mouse
           over or focuses on the widget, when the widget is in edit mode. -->
      <xsd:attribute name="helpText" type="xsd:string"/>
      <!-- If false, menu items under this input will be shown even when the input is not editable. -->
      <xsd:attribute name="hideChildrenIfReadOnly" type="xsd:boolean" default="true"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- Refers to an image file. If defined, makes this an icon cell. The "value" attribute
           should be a boolean expression describing whether the icon is visible in a given row. -->
      <xsd:attribute name="icon" type="xsd:string"/>
      <!-- Color of the icon. If not set will default to its font color. -->
      <xsd:attribute name="iconColor" type="xsd:string"/>
      <!-- The ALT text for any icon generated in the content cells -->
      <xsd:attribute name="iconLabel" type="xsd:string"/>
      <!-- An enumeration of icon types that determine what the 'icon' property on the widget
           is referring to. -->
      <xsd:attribute name="iconType" type="IconTypeEnum"/>
      <!-- Reference ID of the widget.  This does not have to be globally unique; it only has
           to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <xsd:attribute name="inputConversion" type="xsd:string"/>
      <!-- An optional expression. If specified, a header cell with the specified value will
           be rendered for this column. Only applicable when the containing row is iterated by
           a RowIterator. -->
      <xsd:attribute name="label" type="xsd:string"/>
      <!-- Custom extension CSS style class to apply to the header. -->
      <xsd:attribute name="labelStyleClass" type="xsd:string"/>
      <!-- CSS max-height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="maxHeight" type="xsd:string"/>
      <!-- CSS max-width value. Can be `px`, or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="maxWidth" type="xsd:string"/>
      <!-- CSS min-height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="minHeight" type="xsd:string"/>
      <!-- CSS min-width value. Can be `px`, or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="minWidth" type="xsd:string"/>
      <!-- Label expression for the "New..." option. The default label defined for the application
           will be used if this attribute is not specified. -->
      <xsd:attribute name="newLabel" type="xsd:string" default="DisplayKey.get(&quot;Java.NameValueView.New&quot;)"/>
      <!-- Value expression that returns a new instance for the input value. The "New..." option
           will be available when this attribute is specifed. -->
      <xsd:attribute name="newValue" type="xsd:string"/>
      <!-- Label expression for the "none selected" option -->
      <xsd:attribute name="noneSelectedLabel" type="xsd:string" default="DisplayKey.get(&quot;Java.NameValueView.NoneSelected&quot;)"/>
      <!-- The number of child MenuItems to show in each column.  If not specified, all children
           will be shown in a single column. -->
      <xsd:attribute name="numEntriesPerColumn" type="xsd:integer" default="0"/>
      <!-- Gosu expression to be executed after the value is set from a picker. -->
      <xsd:attribute name="onPick" type="xsd:string"/>
      <!-- Optional Gosu expression, if specified, the options will be displayed in groups based
           on its group label. Defaults to null. The element value is exposed as "VALUE". -->
      <xsd:attribute name="optionGroupLabel" type="xsd:string"/>
      <!-- Optional Gosu expression used to determine the label displayed for each element of
           the value range. Defaults to the element's display name or string representation if
           not present. The element value is exposed as "VALUE". -->
      <xsd:attribute name="optionLabel" type="xsd:string"/>
      <!-- Relative width when printing to PDF. All widths are relative to the widths of the
           other columns in the ListView -->
      <xsd:attribute name="printWidth" type="xsd:string" default="1"/>
      <!-- A Gosu expression used to validate user value before setting it to the model. This
           expression can access any symbols available to this widget, and a "VALUE" symbol that
           represents the user value. If this expression returns null, the user value will be
           set into the model. Otherwise, an error message containing the result of the expression
           will be displayed on the page, the value will not be set into the model, and no actions
           can be performed until the error is corrected. -->
      <xsd:attribute name="requestValidationExpression" type="xsd:string"/>
      <!-- If true, then the cell must be filled out by the user -->
      <xsd:attribute name="required" type="xsd:string"/>
      <!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * Deprecated.
           DO NOT USE.                                           * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
           Consider using "onChange/onPick/inputConversion/outputConversion" where available.
           If specified and the Input is editable, then any new value of the Input is written
           to this expression (Gosu by default) instead of to "value".  The new value is exposed
           as the symbol "VALUE".  For instance if your value expression is "Foo.getSomething()"
           then it can't be written to since it's not an L-value; so you could specify a setter
           expression along the lines of "Foo.setSomething(VALUE)" Warning: if you use this attribute
           many pebbles features will not work, including but not limited to: * Correct automatic
           detection of the state of the updated data * Correct automatic detection of the editability
           of the data * Correct automatic detection of the maximum size of a text input -->
      <xsd:attribute name="setter" type="xsd:string"/>
      <!-- Boolean expression which determines whether or not to show a confirmation message
           when the field value is changed directly from the UI. It's NOT applicable when the
           value is changed indirectly, for example, as a result of client reflection. -->
      <xsd:attribute name="showConfirmMessage" type="xsd:string"/>
      <!-- If true, shows the icon defined by "icon" in the header cell for this column. The
           default value is true. -->
      <xsd:attribute name="showHeaderIcon" type="xsd:boolean" default="true"/>
      <!-- An optional comma-separated sequence of Expressions, each of which is assumed to be
           a dot-delimited path, the value by which this column will be sorted if the user clicks
           on the header cell. -->
      <xsd:attribute name="sortBy" type="xsd:string"/>
      <!-- Either "ascending" or "descending" -->
      <xsd:attribute name="sortDirection" type="WidgetSortDirection" default="ascending"/>
      <!-- The priority of sorting relative to other sorting elements like IteratorSort and Cell.
           The lower the number, the higher the priority.  The highest priority is "1" -->
      <xsd:attribute name="sortOrder" type="xsd:integer" default="0"/>
      <!-- If true, attempts to sort the results of valueRange -->
      <xsd:attribute name="sortValueRange" type="xsd:boolean" default="true"/>
      <!-- CSS style class for the cell content; for instance, "miniButton" makes a link appear
           as a small button -->
      <xsd:attribute name="styleClass" type="LinkStyleClass"/>
      <!-- An optional attribute, if set, defer sub menu generation until user tries to open
           the menu. DO NOT set this flag unless the sub menu of this widget is very expensive
           to generate. Setting this flag will reduce time to load the page, however require
           fetching additional info from server in the background, when the menu gets opened
           for the first time after page loaded. -->
      <xsd:attribute name="subMenuOnDemand" type="xsd:boolean" default="false"/>
      <!-- Extra "alt" text to show when the user hovers the mouse over the header cell of this
           column. -->
      <xsd:attribute name="tooltip" type="xsd:string"/>
      <!-- If true, validate before commit that the value of this column is unique across all
           rows in the current page. Only meaningful when this column is editable. -->
      <xsd:attribute name="unique" type="xsd:boolean" default="false"/>
      <!-- A Gosu expression to run before committing the record. This expression can refer to
           any symbols available to this widget. If this expression returns null, the validation
           is considered successful; otherwise, the result of this expression will be displayed
           as an error and the record will not be committed. -->
      <xsd:attribute name="validationExpression" type="xsd:string"/>
      <!-- The label of this cell to be used when it has validation issues. Not needed when this
           cell has a "label". Required if the cell is editable but does not have a "label". -->
      <xsd:attribute name="validationLabel" type="xsd:string"/>
      <!-- The value this element binds to.  If the element is editable then this value is both
           read from and written to (unless "setter" is defined). -->
      <xsd:attribute name="value" type="xsd:string"/>
      <!-- Gosu expression defining the range of possible values for this element. Should evaluate
           to a List, an array, or a IQueryBeanResult -->
      <xsd:attribute name="valueRange" type="xsd:string" use="required"/>
      <!-- The type of the value expression. -->
      <xsd:attribute name="valueType" type="xsd:string" use="required"/>
      <!-- Boolean expression which, if false, hides the <i>contents</i> of the cell (its "ValueWidget"),
           but not the cell itself.  Needed since hiding the actual cell usually screws up the
           layout -->
      <xsd:attribute name="valueVisible" type="xsd:string"/>
      <!-- Specifies the vertical alignment of this cell. Valid values: "top", "middle", or "bottom".
           If no value is specified, the default alignment is determined by the cell type ("top"
           for Text Areas and Format Cells, "middle" for buttons and icons). -->
      <xsd:attribute name="verticalAlign" type="WidgetVerticalAlignment"/>
      <!-- Boolean expression which, if false, completely hides the widget and all its children -->
      <xsd:attribute name="visible" type="xsd:string"/>
      <!-- CSS width value. Can be `px`, or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="width" type="xsd:string"/>
      <!-- If default, defers to FormatType to decide whether to wrap or not.  If true, allows
           cell content to wrap. -->
      <xsd:attribute name="wrap" type="WrapType" default="default"/>
      <!-- If true, allows Header Cell text content to wrap. Defaults to true. -->
      <xsd:attribute name="wrapLabel" type="xsd:boolean" default="false"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- An input bound to a value which is limited by a range -->
  <xsd:element name="RangeInput">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="LayoutConfig" minOccurs="0" maxOccurs="1"/>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="AddMenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="AddMenuItemIterator" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemDivider" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemIterator" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemSetRef" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemTree" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PickerMenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PostOnChange" minOccurs="0" maxOccurs="1"/>
          <xsd:element ref="Reflect" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="SearchItem" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:choice>
      </xsd:sequence>
      <!-- An optional action to take when the user clicks the value of this widget when the
           value is not being edited. See ActionBase for list of available action prefixes. When
           specified, the value of this widget will be rendered as a link when the value is not
           being edited. -->
      <xsd:attribute name="action" type="xsd:string"/>
      <!-- An optional boolean expression controlling whether the action should be available
           in this specific context when in read-only mode.  This is ignored if in edit mode
           or if the action is null.  This attribute will be deprecated in a future release,
           please use the 'available' attribute instead.  To disable action in readonly mode,
           you can set available=&quot;CurrentLocation.InEditMode || &lt;action-available-condition&gt;&quot; -->
      <xsd:attribute name="actionAvailable" type="xsd:string"/>
      <!-- Alignment of the widget ("left", "right", or "center") -->
      <xsd:attribute name="align" type="WidgetAlignment"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- Boolean expression which, if false, grays out the widget and all its children -->
      <xsd:attribute name="available" type="xsd:string"/>
      <!-- If true then the label is displayed in bold text. -->
      <xsd:attribute name="boldLabel" type="xsd:boolean" default="false"/>
      <!-- If true then the value is displayed in bold text when read-only. -->
      <xsd:attribute name="boldValue" type="xsd:boolean" default="false"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- The confirmation message to show when "showConfirmMessage" is set. If not specified,
           a standard message will be used. -->
      <xsd:attribute name="confirmMessage" type="xsd:string"/>
      <!-- A Gosu expression used to convert the value picked from a popup before set it into
           the model value of this widget. The picked value will be exposed as a symbol with
           the name "PickedValue" -->
      <xsd:attribute name="conversionExpression" type="xsd:string"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- Boolean expression which, if false, makes this widget and all its children read-only -->
      <xsd:attribute name="editable" type="xsd:string" default="false"/>
      <!-- Optional Gosu expression for filtering the value range of the widget. You can write
           this either as a boolean expression over a "VALUE" symbol (i.e. "Libraries.MyLib.isOkValue(VALUE)"),
           or as a more complex expression that takes a "VALUES" array symbol and returns a List
           (i.e. "Libraries.MyLib.filterValues(VALUES)") which is more powerful and efficient
           but harder to write. -->
      <xsd:attribute name="filter" type="xsd:string"/>
      <!-- If true, instead of showing a hierarchical menu, the widget will show a single menu
           with sub-menus grouped under headers. -->
      <xsd:attribute name="flatten" type="xsd:boolean" default="false"/>
      <!-- An optional boolean expression, if returns true, this widget will get focus when start
           editing the containing location. -->
      <xsd:attribute name="focusOnStartEditing" type="xsd:string"/>
      <!-- How the value is formatted; options include "general", "currency", and "email".  See
           the formatType enumeration. -->
      <xsd:attribute name="formatType" type="FormatType"/>
      <!-- A Gosu expression which, if defined, is evaluated to create help info that guides
           the user to edit this widget. The help info will show up if the user hovers the mouse
           over or focuses on the widget, when the widget is in edit mode. -->
      <xsd:attribute name="helpText" type="xsd:string"/>
      <!-- If false, menu items under this input will be shown even when the input is not editable. -->
      <xsd:attribute name="hideChildrenIfReadOnly" type="xsd:boolean" default="true"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- Reference ID of the widget.  This does not have to be globally unique; it only has
           to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <xsd:attribute name="inputConversion" type="xsd:string"/>
      <!-- Label to render. -->
      <xsd:attribute name="label" type="xsd:string"/>
      <!-- Boolean expression which, if true, causes the label portion of the Input to be rendered
           above the value -->
      <xsd:attribute name="labelAbove" type="xsd:string" default="false"/>
      <!-- Custom extension CSS style class to apply to the label. -->
      <xsd:attribute name="labelStyleClass" type="xsd:string"/>
      <!-- Indicates that this input is a multiselect.  If true, the value expression should
           refer to an array. -->
      <xsd:attribute name="multiSelect" type="xsd:boolean" default="false"/>
      <!-- Label expression for the "New..." option. The default label defined for the application
           will be used if this attribute is not specified. -->
      <xsd:attribute name="newLabel" type="xsd:string" default="DisplayKey.get(&quot;Java.NameValueView.New&quot;)"/>
      <!-- Value expression that returns a new instance for the input value. The "New..." option
           will be available when this attribute is specifed. -->
      <xsd:attribute name="newValue" type="xsd:string"/>
      <!-- Label expression for the "none selected" option -->
      <xsd:attribute name="noneSelectedLabel" type="xsd:string" default="DisplayKey.get(&quot;Java.NameValueView.NoneSelected&quot;)"/>
      <!-- The number of child MenuItems to show in each column.  If not specified, all children
           will be shown in a single column. -->
      <xsd:attribute name="numEntriesPerColumn" type="xsd:integer" default="0"/>
      <!-- The number of rows to show in a multi-select input.  This attribute is invalid on
           a single-select input. -->
      <xsd:attribute name="numRows" type="xsd:integer"/>
      <!-- Gosu expression to be executed after the value is set from a picker. -->
      <xsd:attribute name="onPick" type="xsd:string"/>
      <!-- Optional Gosu expression, if specified, the options will be displayed in groups based
           on its group label. Defaults to null. The element value is exposed as "VALUE". -->
      <xsd:attribute name="optionGroupLabel" type="xsd:string"/>
      <!-- Optional Gosu expression used to determine the label displayed for each element of
           the value range. Defaults to the element's display name or string representation if
           not present. The element value is exposed as "VALUE". -->
      <xsd:attribute name="optionLabel" type="xsd:string"/>
      <!-- A Gosu expression used to validate user value before setting it to the model. This
           expression can access any symbols available to this widget, and a "VALUE" symbol that
           represents the user value. If this expression returns null, the user value will be
           set into the model. Otherwise, an error message containing the result of the expression
           will be displayed on the page, the value will not be set into the model, and no actions
           can be performed until the error is corrected. -->
      <xsd:attribute name="requestValidationExpression" type="xsd:string"/>
      <!-- If true, then the cell must be filled out by the user -->
      <xsd:attribute name="required" type="xsd:string"/>
      <!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * Deprecated.
           DO NOT USE.                                           * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
           Consider using "onChange/onPick/inputConversion/outputConversion" where available.
           If specified and the Input is editable, then any new value of the Input is written
           to this expression (Gosu by default) instead of to "value".  The new value is exposed
           as the symbol "VALUE".  For instance if your value expression is "Foo.getSomething()"
           then it can't be written to since it's not an L-value; so you could specify a setter
           expression along the lines of "Foo.setSomething(VALUE)" Warning: if you use this attribute
           many pebbles features will not work, including but not limited to: * Correct automatic
           detection of the state of the updated data * Correct automatic detection of the editability
           of the data * Correct automatic detection of the maximum size of a text input -->
      <xsd:attribute name="setter" type="xsd:string"/>
      <!-- Optional keyboard shortcut character in the form of "Q" or "ShiftQ"; the "Alt" key
           is implicit. This is only applicable when this widget has an "action" specified and
           the value is not being edited. -->
      <xsd:attribute name="shortcut" type="xsd:string"/>
      <!-- Boolean expression which determines whether or not to show a confirmation message
           when the field value is changed directly from the UI. It's NOT applicable when the
           value is changed indirectly, for example, as a result of client reflection. -->
      <xsd:attribute name="showConfirmMessage" type="xsd:string"/>
      <!-- If true, the input will be rendered as a "shuttle" input, allowing the user to select
           options by moving them from one list to another. -->
      <xsd:attribute name="shuttleList" type="xsd:boolean" default="false"/>
      <!-- If true, attempts to sort the results of valueRange -->
      <xsd:attribute name="sortValueRange" type="xsd:boolean" default="true"/>
      <!-- An optional attribute, if set, defer sub menu generation until user tries to open
           the menu. DO NOT set this flag unless the sub menu of this widget is very expensive
           to generate. Setting this flag will reduce time to load the page, however require
           fetching additional info from server in the background, when the menu gets opened
           for the first time after page loaded. -->
      <xsd:attribute name="subMenuOnDemand" type="xsd:boolean" default="false"/>
      <!-- A Gosu expression to run before committing the record. This expression can refer to
           any symbols available to this widget. If this expression returns null, the validation
           is considered successful; otherwise, the result of this expression will be displayed
           as an error and the record will not be committed. -->
      <xsd:attribute name="validationExpression" type="xsd:string"/>
      <!-- The value this Input binds to as an Expression.  If the Input is editable then this
           value is both read from and written to (unless "setter" is defined). -->
      <xsd:attribute name="value" type="xsd:string" use="required"/>
      <!-- Gosu expression defining the range of possible values for this element. Should evaluate
           to a List, an array, or a IQueryBeanResult -->
      <xsd:attribute name="valueRange" type="xsd:string" use="required"/>
      <!-- CSS max-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionMaxWidth" type="xsd:string"/>
      <!-- CSS min-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionMinWidth" type="xsd:string"/>
      <!-- CSS width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionWidth" type="xsd:string"/>
      <!-- The type of the value expression. -->
      <xsd:attribute name="valueType" type="xsd:string" use="required"/>
      <!-- If used instead of "editable", specifies whether the Input is editable when data is
           being created -->
      <xsd:attribute name="visible" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- A RangeCell which renders as radio buttons.  Only use this when you know that the
       range of values is limited to two or three options. -->
  <xsd:element name="RangeRadioCell">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="Reflect" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element ref="ColumnFooter" minOccurs="0" maxOccurs="1"/>
        <xsd:element ref="PostOnChange" minOccurs="0" maxOccurs="1"/>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="AddMenuItem"/>
          <xsd:element ref="AddMenuItemIterator"/>
          <xsd:element ref="MenuItem"/>
          <xsd:element ref="MenuItemDivider"/>
          <xsd:element ref="MenuItemIterator"/>
          <xsd:element ref="MenuItemSetRef"/>
          <xsd:element ref="MenuItemTree"/>
          <xsd:element ref="PickerMenuItem"/>
          <xsd:element ref="SearchItem"/>
        </xsd:choice>
      </xsd:sequence>
      <!-- An optional action to take when the user clicks the value of this widget when the
           value is not being edited. See ActionBase for details. When specified, the value of
           this widget will be rendered as a link when the value is not being edited. -->
      <xsd:attribute name="action" type="xsd:string"/>
      <!-- An optional boolean expression controlling whether the action should be available
           in this specific context when in read-only mode.  This is ignored if in edit mode
           or if the action is null.  This attribute will be deprecated in a future release,
           please use the 'available' attribute instead.  To disable action in readonly mode,
           you can set available=&quot;CurrentLocation.InEditMode || &lt;action-available-condition&gt;&quot; -->
      <xsd:attribute name="actionAvailable" type="xsd:string"/>
      <!-- Specifies the alignment of this cell. Valid values: "left", "right", or "center".
           If no value is specified, the default alignment is determined by the value type ("center"
           for boolean values; "right" for numeric values; "left" for other value types). -->
      <xsd:attribute name="align" type="WidgetAlignment"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- Boolean expression which, if false, grays out the widget and all its children -->
      <xsd:attribute name="available" type="xsd:string"/>
      <!-- If true, renders the cell contents in bold text. Defaults to false. -->
      <xsd:attribute name="bold" type="xsd:boolean" default="false"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- The HTML colspan attribute, lets this cell span across multiple columns of other rows.
           Useful for generating a "group header" row above a RowIterator. The default value
           is 1. A value greater than 1 is only allowed when the containing row is not iterated
           by a RowIterator. -->
      <xsd:attribute name="colspan" type="xsd:integer"/>
      <!-- The confirmation message to show when "showConfirmMessage" is set. If not specified,
           a standard message will be used. -->
      <xsd:attribute name="confirmMessage" type="xsd:string"/>
      <!-- A Gosu expression used to convert the value picked from a popup before set it into
           the model value of this widget. The picked value will be exposed as a symbol with
           the name "PickedValue" -->
      <xsd:attribute name="conversionExpression" type="xsd:string"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- Boolean expression which, if false, makes this widget and all its children read-only -->
      <xsd:attribute name="editable" type="xsd:string" default="false"/>
      <!-- If true, allows the user to sort the values in the column by clicking on the header.
            Only applicable when the containing row is iterated by a RowIterator. -->
      <xsd:attribute name="enableSort" type="xsd:boolean" default="true"/>
      <!-- If true, this cell will the last cell in the row to be navigated to via the ENTER
           key. Only applicable when "CellNavOnEnter" or "QuickAddOnEnter" is set. Normally not
           specified. Default to false. -->
      <xsd:attribute name="endOfCellNav" type="xsd:boolean" default="false"/>
      <!-- Optional Gosu expression for filtering the value range of the widget. You can write
           this either as a boolean expression over a "VALUE" symbol (i.e. "Libraries.MyLib.isOkValue(VALUE)"),
           or as a more complex expression that takes a "VALUES" array symbol and returns a List
           (i.e. "Libraries.MyLib.filterValues(VALUES)") which is more powerful and efficient
           but harder to write. -->
      <xsd:attribute name="filter" type="xsd:string"/>
      <!-- If true, instead of showing a hierarchical menu, the widget will show a single menu
           with sub-menus grouped under headers. -->
      <xsd:attribute name="flatten" type="xsd:boolean" default="false"/>
      <!-- An optional boolean expression, if returns true, this widget will get focus when start
           editing the containing location. -->
      <xsd:attribute name="focusOnStartEditing" type="xsd:string"/>
      <!-- An expression that returns a GWColor instance. Legacy: this method can instead return
           a string corresponding to a CSS Specification Level 3 color name. See GWColor for
           more details. -->
      <xsd:attribute name="fontColor" type="xsd:string"/>
      <!-- An optional expression. If specified, a footer cell with the specified value will
           be rendered for this column. Only applicable when the containing Row is iterated by
           a RowIterator. Not allowed when "footerSumValue" is specified. -->
      <xsd:attribute name="footerLabel" type="xsd:string"/>
      <!-- An optional expression, if specified, will be used as format pattern for the footer
           sum value. Normally not specified, so that the "format" and\or "formatType" of the
           cell value will be applied to footer sum value. Only applicable when "footerSumValue"
           is specified. The result of this expression must conform to the number format defined
           in java.text.DecimalFormat. -->
      <xsd:attribute name="footerSumFormat" type="xsd:string"/>
      <!-- An optional Numeric expression. If specified, a footer cell that sums the specified
           value for all cells in this column will be rendered. Pagination of the list does not
           affect the sum value. Only applicable when the containing row is iterated by a RowIterator.
           Not allowed when "footerLabel" is specified. -->
      <xsd:attribute name="footerSumValue" type="xsd:string"/>
      <!-- How the value is formatted; options include "general", "currency", and "email".  See
           the formatType enumeration. -->
      <xsd:attribute name="formatType" type="FormatType"/>
      <!-- If true, the ListView will be grouped by this cell upon entering the page. Only one
           grouped cell is allowed at any given time and it is only applicable when the column
           is sortable. -->
      <xsd:attribute name="groupedOnEnter" type="xsd:string"/>
      <!-- If true, this Cell and any other grow-enabled Cell will expand to fill remaining space
           in the ListViewPanel. Only applicable when the ListView is set to stretch. -->
      <xsd:attribute name="grow" type="xsd:boolean" default="false"/>
      <!-- If true, generates a checkbox at the beginning of this cell. This checkbox can be
           used to check this entry in the nearest containing Iterator. Defaults to false. Only
           allowed if this cell is inside a CellIterator or under a Row inside a RowIterator. -->
      <xsd:attribute name="hasCheckBox" type="xsd:boolean" default="false"/>
      <!-- CSS height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="height" type="xsd:string"/>
      <!-- A Gosu expression which, if defined, is evaluated to create help info that guides
           the user to edit this widget. The help info will show up if the user hovers the mouse
           over or focuses on the widget, when the widget is in edit mode. -->
      <xsd:attribute name="helpText" type="xsd:string"/>
      <!-- If false, menu items under this input will be shown even when the input is not editable. -->
      <xsd:attribute name="hideChildrenIfReadOnly" type="xsd:boolean" default="true"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- Refers to an image file. If defined, makes this an icon cell. The "value" attribute
           should be a boolean expression describing whether the icon is visible in a given row. -->
      <xsd:attribute name="icon" type="xsd:string"/>
      <!-- Color of the icon. If not set will default to its font color. -->
      <xsd:attribute name="iconColor" type="xsd:string"/>
      <!-- The ALT text for any icon generated in the content cells -->
      <xsd:attribute name="iconLabel" type="xsd:string"/>
      <!-- An enumeration of icon types that determine what the 'icon' property on the widget
           is referring to. -->
      <xsd:attribute name="iconType" type="IconTypeEnum"/>
      <!-- Reference ID of the widget.  This does not have to be globally unique; it only has
           to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <xsd:attribute name="inputConversion" type="xsd:string"/>
      <!-- An optional expression. If specified, a header cell with the specified value will
           be rendered for this column. Only applicable when the containing row is iterated by
           a RowIterator. -->
      <xsd:attribute name="label" type="xsd:string"/>
      <!-- Custom extension CSS style class to apply to the header. -->
      <xsd:attribute name="labelStyleClass" type="xsd:string"/>
      <!-- CSS max-height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="maxHeight" type="xsd:string"/>
      <!-- CSS max-width value. Can be `px`, or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="maxWidth" type="xsd:string"/>
      <!-- CSS min-height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="minHeight" type="xsd:string"/>
      <!-- CSS min-width value. Can be `px`, or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="minWidth" type="xsd:string"/>
      <!-- Label expression for the "New..." option. The default label defined for the application
           will be used if this attribute is not specified. -->
      <xsd:attribute name="newLabel" type="xsd:string" default="DisplayKey.get(&quot;Java.NameValueView.New&quot;)"/>
      <!-- Value expression that returns a new instance for the input value. The "New..." option
           will be available when this attribute is specifed. -->
      <xsd:attribute name="newValue" type="xsd:string"/>
      <!-- Label expression for the "none selected" option -->
      <xsd:attribute name="noneSelectedLabel" type="xsd:string" default="DisplayKey.get(&quot;Java.NameValueView.NoneSelected&quot;)"/>
      <!-- The number of child MenuItems to show in each column.  If not specified, all children
           will be shown in a single column. -->
      <xsd:attribute name="numEntriesPerColumn" type="xsd:integer" default="0"/>
      <!-- Gosu expression to be executed after the value is set from a picker. -->
      <xsd:attribute name="onPick" type="xsd:string"/>
      <!-- Optional Gosu expression used to determine the label displayed for each element of
           the value range. Defaults to the element's display name or string representation if
           not present. The element value is exposed as "VALUE". -->
      <xsd:attribute name="optionLabel" type="xsd:string"/>
      <!-- Relative width when printing to PDF. All widths are relative to the widths of the
           other columns in the ListView -->
      <xsd:attribute name="printWidth" type="xsd:string" default="1"/>
      <!-- A Gosu expression used to validate user value before setting it to the model. This
           expression can access any symbols available to this widget, and a "VALUE" symbol that
           represents the user value. If this expression returns null, the user value will be
           set into the model. Otherwise, an error message containing the result of the expression
           will be displayed on the page, the value will not be set into the model, and no actions
           can be performed until the error is corrected. -->
      <xsd:attribute name="requestValidationExpression" type="xsd:string"/>
      <!-- If true, then the cell must be filled out by the user -->
      <xsd:attribute name="required" type="xsd:string"/>
      <!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * Deprecated.
           DO NOT USE.                                           * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
           Consider using "onChange/onPick/inputConversion/outputConversion" where available.
           If specified and the Input is editable, then any new value of the Input is written
           to this expression (Gosu by default) instead of to "value".  The new value is exposed
           as the symbol "VALUE".  For instance if your value expression is "Foo.getSomething()"
           then it can't be written to since it's not an L-value; so you could specify a setter
           expression along the lines of "Foo.setSomething(VALUE)" Warning: if you use this attribute
           many pebbles features will not work, including but not limited to: * Correct automatic
           detection of the state of the updated data * Correct automatic detection of the editability
           of the data * Correct automatic detection of the maximum size of a text input -->
      <xsd:attribute name="setter" type="xsd:string"/>
      <!-- Boolean expression which determines whether or not to show a confirmation message
           when the field value is changed directly from the UI. It's NOT applicable when the
           value is changed indirectly, for example, as a result of client reflection. -->
      <xsd:attribute name="showConfirmMessage" type="xsd:string"/>
      <!-- If true, shows the icon defined by "icon" in the header cell for this column. The
           default value is true. -->
      <xsd:attribute name="showHeaderIcon" type="xsd:boolean" default="true"/>
      <!-- An optional comma-separated sequence of Expressions, each of which is assumed to be
           a dot-delimited path, the value by which this column will be sorted if the user clicks
           on the header cell. -->
      <xsd:attribute name="sortBy" type="xsd:string"/>
      <!-- Either "ascending" or "descending" -->
      <xsd:attribute name="sortDirection" type="WidgetSortDirection" default="ascending"/>
      <!-- The priority of sorting relative to other sorting elements like IteratorSort and Cell.
           The lower the number, the higher the priority.  The highest priority is "1" -->
      <xsd:attribute name="sortOrder" type="xsd:integer" default="0"/>
      <!-- If true, attempts to sort the results of valueRange -->
      <xsd:attribute name="sortValueRange" type="xsd:boolean" default="true"/>
      <!-- If true, the contents of the Widget will be stacked vertically. -->
      <xsd:attribute name="stacked" type="xsd:string" default="false"/>
      <!-- CSS style class for the cell content; for instance, "miniButton" makes a link appear
           as a small button -->
      <xsd:attribute name="styleClass" type="LinkStyleClass"/>
      <!-- An optional attribute, if set, defer sub menu generation until user tries to open
           the menu. DO NOT set this flag unless the sub menu of this widget is very expensive
           to generate. Setting this flag will reduce time to load the page, however require
           fetching additional info from server in the background, when the menu gets opened
           for the first time after page loaded. -->
      <xsd:attribute name="subMenuOnDemand" type="xsd:boolean" default="false"/>
      <!-- Extra "alt" text to show when the user hovers the mouse over the header cell of this
           column. -->
      <xsd:attribute name="tooltip" type="xsd:string"/>
      <!-- If true, validate before commit that the value of this column is unique across all
           rows in the current page. Only meaningful when this column is editable. -->
      <xsd:attribute name="unique" type="xsd:boolean" default="false"/>
      <!-- A Gosu expression to run before committing the record. This expression can refer to
           any symbols available to this widget. If this expression returns null, the validation
           is considered successful; otherwise, the result of this expression will be displayed
           as an error and the record will not be committed. -->
      <xsd:attribute name="validationExpression" type="xsd:string"/>
      <!-- The label of this cell to be used when it has validation issues. Not needed when this
           cell has a "label". Required if the cell is editable but does not have a "label". -->
      <xsd:attribute name="validationLabel" type="xsd:string"/>
      <!-- The value this element binds to.  If the element is editable then this value is both
           read from and written to (unless "setter" is defined). -->
      <xsd:attribute name="value" type="xsd:string"/>
      <!-- Gosu expression defining the range of possible values for this element. Should evaluate
           to a List, an array, or a IQueryBeanResult -->
      <xsd:attribute name="valueRange" type="xsd:string" use="required"/>
      <!-- The type of the value expression. -->
      <xsd:attribute name="valueType" type="xsd:string" use="required"/>
      <!-- Boolean expression which, if false, hides the <i>contents</i> of the cell (its "ValueWidget"),
           but not the cell itself.  Needed since hiding the actual cell usually screws up the
           layout -->
      <xsd:attribute name="valueVisible" type="xsd:string"/>
      <!-- Specifies the vertical alignment of this cell. Valid values: "top", "middle", or "bottom".
           If no value is specified, the default alignment is determined by the cell type ("top"
           for Text Areas and Format Cells, "middle" for buttons and icons). -->
      <xsd:attribute name="verticalAlign" type="WidgetVerticalAlignment"/>
      <!-- Boolean expression which, if false, completely hides the widget and all its children -->
      <xsd:attribute name="visible" type="xsd:string"/>
      <!-- CSS width value. Can be `px`, or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="width" type="xsd:string"/>
      <!-- If default, defers to FormatType to decide whether to wrap or not.  If true, allows
           cell content to wrap. -->
      <xsd:attribute name="wrap" type="WrapType" default="default"/>
      <!-- If true, allows Header Cell text content to wrap. Defaults to true. -->
      <xsd:attribute name="wrapLabel" type="xsd:boolean" default="false"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- A RangeInput which renders as radio buttons. Renders 1 radio button for each value
       of the range. -->
  <xsd:element name="RangeRadioInput">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="LayoutConfig" minOccurs="0" maxOccurs="1"/>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="AddMenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="AddMenuItemIterator" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemDivider" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemIterator" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemSetRef" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemTree" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PickerMenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PostOnChange" minOccurs="0" maxOccurs="1"/>
          <xsd:element ref="Reflect" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="SearchItem" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:choice>
      </xsd:sequence>
      <!-- An optional action to take when the user clicks the value of this widget when the
           value is not being edited. See ActionBase for list of available action prefixes. When
           specified, the value of this widget will be rendered as a link when the value is not
           being edited. -->
      <xsd:attribute name="action" type="xsd:string"/>
      <!-- An optional boolean expression controlling whether the action should be available
           in this specific context when in read-only mode.  This is ignored if in edit mode
           or if the action is null.  This attribute will be deprecated in a future release,
           please use the 'available' attribute instead.  To disable action in readonly mode,
           you can set available=&quot;CurrentLocation.InEditMode || &lt;action-available-condition&gt;&quot; -->
      <xsd:attribute name="actionAvailable" type="xsd:string"/>
      <!-- Alignment of the widget ("left", "right", or "center") -->
      <xsd:attribute name="align" type="WidgetAlignment"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- Boolean expression which, if false, grays out the widget and all its children -->
      <xsd:attribute name="available" type="xsd:string"/>
      <!-- If true then the label is displayed in bold text. -->
      <xsd:attribute name="boldLabel" type="xsd:boolean" default="false"/>
      <!-- If true then the value is displayed in bold text when read-only. -->
      <xsd:attribute name="boldValue" type="xsd:boolean" default="false"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- The confirmation message to show when "showConfirmMessage" is set. If not specified,
           a standard message will be used. -->
      <xsd:attribute name="confirmMessage" type="xsd:string"/>
      <!-- A Gosu expression used to convert the value picked from a popup before set it into
           the model value of this widget. The picked value will be exposed as a symbol with
           the name "PickedValue" -->
      <xsd:attribute name="conversionExpression" type="xsd:string"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- Boolean expression which, if false, makes this widget and all its children read-only -->
      <xsd:attribute name="editable" type="xsd:string" default="false"/>
      <!-- Optional Gosu expression for filtering the value range of the widget. You can write
           this either as a boolean expression over a "VALUE" symbol (i.e. "Libraries.MyLib.isOkValue(VALUE)"),
           or as a more complex expression that takes a "VALUES" array symbol and returns a List
           (i.e. "Libraries.MyLib.filterValues(VALUES)") which is more powerful and efficient
           but harder to write. -->
      <xsd:attribute name="filter" type="xsd:string"/>
      <!-- If true, instead of showing a hierarchical menu, the widget will show a single menu
           with sub-menus grouped under headers. -->
      <xsd:attribute name="flatten" type="xsd:boolean" default="false"/>
      <!-- An optional boolean expression, if returns true, this widget will get focus when start
           editing the containing location. -->
      <xsd:attribute name="focusOnStartEditing" type="xsd:string"/>
      <!-- How the value is formatted; options include "general", "currency", and "email".  See
           the formatType enumeration. -->
      <xsd:attribute name="formatType" type="FormatType"/>
      <!-- A Gosu expression which, if defined, is evaluated to create help info that guides
           the user to edit this widget. The help info will show up if the user hovers the mouse
           over or focuses on the widget, when the widget is in edit mode. -->
      <xsd:attribute name="helpText" type="xsd:string"/>
      <!-- If false, menu items under this input will be shown even when the input is not editable. -->
      <xsd:attribute name="hideChildrenIfReadOnly" type="xsd:boolean" default="true"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- Reference ID of the widget.  This does not have to be globally unique; it only has
           to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <xsd:attribute name="inputConversion" type="xsd:string"/>
      <!-- Label to render. -->
      <xsd:attribute name="label" type="xsd:string"/>
      <!-- Boolean expression which, if true, causes the label portion of the Input to be rendered
           above the value -->
      <xsd:attribute name="labelAbove" type="xsd:string" default="false"/>
      <!-- Custom extension CSS style class to apply to the label. -->
      <xsd:attribute name="labelStyleClass" type="xsd:string"/>
      <!-- Label expression for the "New..." option. The default label defined for the application
           will be used if this attribute is not specified. -->
      <xsd:attribute name="newLabel" type="xsd:string" default="DisplayKey.get(&quot;Java.NameValueView.New&quot;)"/>
      <!-- Value expression that returns a new instance for the input value. The "New..." option
           will be available when this attribute is specifed. -->
      <xsd:attribute name="newValue" type="xsd:string"/>
      <!-- Label expression for the "none selected" option -->
      <xsd:attribute name="noneSelectedLabel" type="xsd:string" default="DisplayKey.get(&quot;Java.NameValueView.NoneSelected&quot;)"/>
      <!-- The number of child MenuItems to show in each column.  If not specified, all children
           will be shown in a single column. -->
      <xsd:attribute name="numEntriesPerColumn" type="xsd:integer" default="0"/>
      <!-- The number of rows to show in a multi-select input.  This attribute is invalid on
           a single-select input. -->
      <xsd:attribute name="numRows" type="xsd:integer"/>
      <!-- Gosu expression to be executed after the value is set from a picker. -->
      <xsd:attribute name="onPick" type="xsd:string"/>
      <!-- An optional expression to specify an icon for each option. The option value is exposed
           as "VALUE". The return value's type is determined by OPTION_ICON_TYPE -->
      <xsd:attribute name="optionIcon" type="xsd:string"/>
      <!-- Color of the icon. The option value is exposed as "VALUE". If not set will default
           to its font color. -->
      <xsd:attribute name="optionIconColor" type="xsd:string"/>
      <!-- An enumeration of icon types that determine what the 'optionIcon' property on the
           widget is referring to. -->
      <xsd:attribute name="optionIconType" type="IconTypeEnum"/>
      <!-- Optional Gosu expression used to determine the label displayed for each element of
           the value range. Defaults to the element's display name or string representation if
           not present. The element value is exposed as "VALUE". -->
      <xsd:attribute name="optionLabel" type="xsd:string"/>
      <!-- A Gosu expression used to validate user value before setting it to the model. This
           expression can access any symbols available to this widget, and a "VALUE" symbol that
           represents the user value. If this expression returns null, the user value will be
           set into the model. Otherwise, an error message containing the result of the expression
           will be displayed on the page, the value will not be set into the model, and no actions
           can be performed until the error is corrected. -->
      <xsd:attribute name="requestValidationExpression" type="xsd:string"/>
      <!-- If true, then the cell must be filled out by the user -->
      <xsd:attribute name="required" type="xsd:string"/>
      <!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * Deprecated.
           DO NOT USE.                                           * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
           Consider using "onChange/onPick/inputConversion/outputConversion" where available.
           If specified and the Input is editable, then any new value of the Input is written
           to this expression (Gosu by default) instead of to "value".  The new value is exposed
           as the symbol "VALUE".  For instance if your value expression is "Foo.getSomething()"
           then it can't be written to since it's not an L-value; so you could specify a setter
           expression along the lines of "Foo.setSomething(VALUE)" Warning: if you use this attribute
           many pebbles features will not work, including but not limited to: * Correct automatic
           detection of the state of the updated data * Correct automatic detection of the editability
           of the data * Correct automatic detection of the maximum size of a text input -->
      <xsd:attribute name="setter" type="xsd:string"/>
      <!-- Optional keyboard shortcut character in the form of "Q" or "ShiftQ"; the "Alt" key
           is implicit. This is only applicable when this widget has an "action" specified and
           the value is not being edited. -->
      <xsd:attribute name="shortcut" type="xsd:string"/>
      <!-- Boolean expression which determines whether or not to show a confirmation message
           when the field value is changed directly from the UI. It's NOT applicable when the
           value is changed indirectly, for example, as a result of client reflection. -->
      <xsd:attribute name="showConfirmMessage" type="xsd:string"/>
      <!-- If true, attempts to sort the results of valueRange -->
      <xsd:attribute name="sortValueRange" type="xsd:boolean" default="true"/>
      <!-- If true, the contents of the Widget will be stacked vertically. -->
      <xsd:attribute name="stacked" type="xsd:string" default="false"/>
      <!-- An optional attribute, if set, defer sub menu generation until user tries to open
           the menu. DO NOT set this flag unless the sub menu of this widget is very expensive
           to generate. Setting this flag will reduce time to load the page, however require
           fetching additional info from server in the background, when the menu gets opened
           for the first time after page loaded. -->
      <xsd:attribute name="subMenuOnDemand" type="xsd:boolean" default="false"/>
      <!-- A Gosu expression to run before committing the record. This expression can refer to
           any symbols available to this widget. If this expression returns null, the validation
           is considered successful; otherwise, the result of this expression will be displayed
           as an error and the record will not be committed. -->
      <xsd:attribute name="validationExpression" type="xsd:string"/>
      <!-- The value this Input binds to as an Expression.  If the Input is editable then this
           value is both read from and written to (unless "setter" is defined). -->
      <xsd:attribute name="value" type="xsd:string" use="required"/>
      <!-- Gosu expression defining the range of possible values for this element. Should evaluate
           to a List, an array, or a IQueryBeanResult -->
      <xsd:attribute name="valueRange" type="xsd:string" use="required"/>
      <!-- CSS max-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionMaxWidth" type="xsd:string"/>
      <!-- CSS min-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionMinWidth" type="xsd:string"/>
      <!-- CSS width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionWidth" type="xsd:string"/>
      <!-- The type of the value expression. -->
      <xsd:attribute name="valueType" type="xsd:string" use="required"/>
      <!-- If used instead of "editable", specifies whether the Input is editable when data is
           being created -->
      <xsd:attribute name="visible" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- Specifies the referenced iterator and optionally its flags. -->
  <xsd:element name="ReferencedIterator">
    <xsd:complexType>
      <xsd:choice minOccurs="0" maxOccurs="unbounded"/>
      <!-- The flags for the iterator -->
      <xsd:attribute name="flags" type="xsd:string"/>
      <!-- The valueType of the widget symbol, such as "String" or "Policy" -->
      <xsd:attribute name="valueType" type="xsd:string" use="required"/>
      <!-- The name of widget -->
      <xsd:attribute name="widget" type="xsd:string" use="required"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- Specifies the referenced row tree. -->
  <xsd:element name="ReferencedRowTree">
    <xsd:complexType>
      <xsd:choice minOccurs="0" maxOccurs="unbounded"/>
      <!-- The name of the row tree -->
      <xsd:attribute name="widget" type="xsd:string" use="required"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- Specifies the widget needed by the containing section. -->
  <xsd:element name="ReferencedWidget">
    <xsd:complexType>
      <xsd:choice minOccurs="0" maxOccurs="unbounded"/>
      <!-- The name of the widget -->
      <xsd:attribute name="widget" type="xsd:string" use="required"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- Defines the client reflection properties of a single reflector.  See the Reflection
       spec for more detail. -->
  <xsd:element name="Reflect">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="ReflectCondition" minOccurs="0" maxOccurs="unbounded"/>
      </xsd:sequence>
      <!-- Boolean expression defining the availability of the reflector, relatively to the trigger
           value, which will be exposed as "VALUE" if there is a single trigger or as "VALUE1",
           "VALUE2", etc. for multiple triggers. When there are multiple triggers, the index
           of the active trigger will be exposed as "TRIGGER_INDEX", for example, when the reflection
           is triggered by "VALUE1", "TRIGGER_INDEX" will be 1. -->
      <xsd:attribute name="available" type="xsd:string"/>
      <!-- Custom JavaScript expression, normally relatively to the trigger value, which will
           be exposed as "VALUE" if there is a single trigger or as "VALUE1", "VALUE2", etc.
           for multiple triggers. When there are multiple triggers, the index of the active trigger
           will be exposed as "TRIGGER_INDEX", for example, when the reflection is triggered
           by "VALUE1", "TRIGGER_INDEX" will be 1. Theoretically, you can use this expression
           to do ANYTHING browser side.  The expression will be invoked when the value of any
           of the reflection triggers changes. -->
      <xsd:attribute name="custom" type="xsd:string"/>
      <!-- Gosu expression defining the reflector input mask, relatively to the trigger value,
           which will be exposed as "VALUE" if there is a single trigger or as "VALUE1", "VALUE2",
           etc. for multiple triggers. When there are multiple triggers, the index of the active
           trigger will be exposed as "TRIGGER_INDEX", for example, when the reflection is triggered
           by "VALUE1", "TRIGGER_INDEX" will be 1. -->
      <xsd:attribute name="inputMask" type="xsd:string"/>
      <!-- If true, this reflector only reflects direct changes on the trigger (i.e., ignores
           reflection propagation to indirect reflector). Default to false. -->
      <xsd:attribute name="reflectDirectChangesOnly" type="xsd:boolean" default="false"/>
      <!-- Refers to the "id" attribute of the <i>trigger</i>, the value which when changed will
           alter the value of this element.  Multiple ids can be separated by "," -->
      <xsd:attribute name="triggerIds" type="xsd:string" use="required"/>
      <!-- Gosu expression defining the value of the reflector, relatively to the trigger value,
           which will be exposed as "VALUE" if there is a single trigger or as "VALUE1", "VALUE2",
           etc. for multiple triggers. When there are multiple triggers, the index of the active
           trigger will be exposed as "TRIGGER_INDEX", for example, when the reflection is triggered
           by "VALUE1", "TRIGGER_INDEX" will be 1. If you do not specify "value" and the value
           of the trigger is a proper substring of the value of the reflector, then value will
           be determined implicitly (i.e. if the trigger value is "Foo.Bar" and the reflector
           is "Foo.Bar.SomeField", the implicit reflection value is "VALUE.SomeField").  You
           can also use ReflectConditions instead of "value" -->
      <xsd:attribute name="value" type="xsd:string"/>
      <!-- Gosu expression defining the reflector value range,relatively to the trigger value,
           which will be exposed as "VALUE" if there is a single trigger or as "VALUE1", "VALUE2",
           etc. for multiple triggers. When there are multiple triggers, the index of the active
           trigger will be exposed as "TRIGGER_INDEX", for example, when the reflection is triggered
           by "VALUE1", "TRIGGER_INDEX" will be 1. -->
      <xsd:attribute name="valueRange" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- Used to split the "value" of a Reflect element based on multiple conditions -->
  <xsd:element name="ReflectCondition">
    <xsd:complexType>
      <xsd:choice minOccurs="0" maxOccurs="unbounded"/>
      <!-- A boolean expression.  The first ReflectCondition whose "condition" evaluates to true
           is used for its "value".  If no ReflectConditions evaluate to true, then the reflector's
           value is unchanged (if you want it to revert to "null" you need to add a ReflectCondition
           at the end with condition="true" value="null") -->
      <xsd:attribute name="condition" type="xsd:string" use="required"/>
      <!-- The value to use if the condition evaluates to true, relatively to the trigger value,
           which will be exposed as "VALUE" if there is a single trigger or as "VALUE1", "VALUE2",
           etc. for multiple triggers. When there are multiple triggers, the index of the active
           trigger will be exposed as "TRIGGER_INDEX", for example, when the reflection is triggered
           by "VALUE1", "TRIGGER_INDEX" will be 1. -->
      <xsd:attribute name="value" type="xsd:string" use="required"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- A button to remove entries for the nearest iterator control after. This button is
       only visible when the associated iterator control defines "toRemove". If you want
       to add both "add" and "remove" button to the iterator, you can use <IteratorButtons>
       instead. -->
  <xsd:element name="RemoveButton">
    <xsd:complexType>
      <xsd:choice minOccurs="0" maxOccurs="unbounded"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- Confirmation message to show before performing the action -->
      <xsd:attribute name="confirmMessage" type="xsd:string"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- A very special expression defining what flags (see ToolbarFlag) must be checked for
           the toolbar button to be available (= not grayed out).  All processing of flags happens
           on the browser-side.  The flags syntax is a comma-separated list of <i>predicates</i>
           (with no space after each comma), and all <i>predicates</i> must be satisfied for
           the button to be available.  Each <i>predicate</i> consists of a <i>operator</i> followed
           by a space and then the name of a ToolbarFlag.  For instance, flags="one Foo,no Bar"
           means "only available if there is exactly one Foo checkbox checked and no Bar checkboxes
           checked".  The available <i>operators</i> are: one, two, any, all, no, exists (same
           as any). -->
      <xsd:attribute name="flags" type="xsd:string"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- The name of a .png file, or .svg file, or font glyph. The Widget's iconType determines
           which one. -->
      <xsd:attribute name="icon" type="xsd:string"/>
      <!-- Color of the icon. If not set will default to its font color. -->
      <xsd:attribute name="iconColor" type="xsd:string"/>
      <!-- An enumeration of icon types that determine what the 'icon' property on the widget
           is referring to. -->
      <xsd:attribute name="iconType" type="IconTypeEnum"/>
      <!-- Reference ID of the widget.  This does not have to be globally unique; it only has
           to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <!-- The id of the iterator/list view widget this button applies to.  If the value is a
           list view then the first iterator widget child is used. -->
      <xsd:attribute name="iterator" type="xsd:string" use="required"/>
      <!-- label for this button -->
      <xsd:attribute name="label" type="xsd:string"/>
      <!-- Keyboard shortcut character in the form of "Q" or "ShiftQ"; the "Alt" key is implicit -->
      <xsd:attribute name="shortcut" type="xsd:string"/>
      <!-- Expression which determines whether or not the confirmation message should be shown -->
      <xsd:attribute name="showConfirmMessage" type="xsd:string" default="true"/>
      <!-- A Gosu expression which, if defined, is evaluated to create help info if the user
           hovers the mouse over the button -->
      <xsd:attribute name="tooltip" type="xsd:string"/>
      <!-- Boolean expression specifying whether the remove button is visible. By default the
           remove button is visible when the Iterator has "toRemove" defined. -->
      <xsd:attribute name="visible" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- Specifies that a symbol of a given name and type is required to exist in order to
       dynamically include the parent widget.  During verification of the pages, this element
       actually <i>defines</i> the symbol with the given name and type and a null value (so
       that the contents of the widget can be verified).  In this way the Require element
       acts much like a method argument. -->
  <xsd:element name="Require">
    <xsd:complexType>
      <xsd:choice minOccurs="0" maxOccurs="unbounded"/>
      <!-- The name of the required symbol -->
      <xsd:attribute name="name" type="xsd:string" use="required"/>
      <!-- The type of the required symbol, such as "String" or "Policy" -->
      <xsd:attribute name="type" type="xsd:string" use="required"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- A ListView cell specialized for RiskClass fields. -->
  <xsd:element name="RiskClassCell">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="Reflect" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element ref="ColumnFooter" minOccurs="0" maxOccurs="1"/>
        <xsd:element ref="PostOnChange" minOccurs="0" maxOccurs="1"/>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="AddMenuItem"/>
          <xsd:element ref="AddMenuItemIterator"/>
          <xsd:element ref="MenuItem"/>
          <xsd:element ref="MenuItemDivider"/>
          <xsd:element ref="MenuItemIterator"/>
          <xsd:element ref="MenuItemSetRef"/>
          <xsd:element ref="MenuItemTree"/>
          <xsd:element ref="PickerMenuItem"/>
          <xsd:element ref="SearchItem"/>
        </xsd:choice>
      </xsd:sequence>
      <!-- An optional action to take when the user clicks the value of this widget when the
           value is not being edited. See ActionBase for details. When specified, the value of
           this widget will be rendered as a link when the value is not being edited. -->
      <xsd:attribute name="action" type="xsd:string"/>
      <!-- An optional boolean expression controlling whether the action should be available
           in this specific context when in read-only mode.  This is ignored if in edit mode
           or if the action is null.  This attribute will be deprecated in a future release,
           please use the 'available' attribute instead.  To disable action in readonly mode,
           you can set available=&quot;CurrentLocation.InEditMode || &lt;action-available-condition&gt;&quot; -->
      <xsd:attribute name="actionAvailable" type="xsd:string"/>
      <!-- Specifies the alignment of this cell. Valid values: "left", "right", or "center".
           If no value is specified, the default alignment is determined by the value type ("center"
           for boolean values; "right" for numeric values; "left" for other value types). -->
      <xsd:attribute name="align" type="WidgetAlignment"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- Boolean expression which, if false, grays out the widget and all its children -->
      <xsd:attribute name="available" type="xsd:string"/>
      <!-- If true, renders the cell contents in bold text. Defaults to false. -->
      <xsd:attribute name="bold" type="xsd:boolean" default="false"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- Whether the user should be allowed to clear the selected value. If "true", an icon
           will be available which, when clicked, will clear the widget. This attribute will
           always be overridden and set to "true" if freeInputEnabled is set to false. -->
      <xsd:attribute name="clearEnabled" type="xsd:boolean" default="false"/>
      <!-- The HTML colspan attribute, lets this cell span across multiple columns of other rows.
           Useful for generating a "group header" row above a RowIterator. The default value
           is 1. A value greater than 1 is only allowed when the containing row is not iterated
           by a RowIterator. -->
      <xsd:attribute name="colspan" type="xsd:integer"/>
      <!-- The confirmation message to show when "showConfirmMessage" is set. If not specified,
           a standard message will be used. -->
      <xsd:attribute name="confirmMessage" type="xsd:string"/>
      <!-- A Gosu expression used to convert the value picked from the picker popup before it
           is written to the model value of this widget. The picked value is available as the
           special symbol "PickedValue" -->
      <xsd:attribute name="conversionExpression" type="xsd:string"/>
      <xsd:attribute name="coveragePattern" type="xsd:string"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- Boolean expression which, if false, makes this widget and all its children read-only -->
      <xsd:attribute name="editable" type="xsd:string" default="false"/>
      <!-- If true, allows the user to sort the values in the column by clicking on the header.
            Only applicable when the containing row is iterated by a RowIterator. -->
      <xsd:attribute name="enableSort" type="xsd:boolean" default="true"/>
      <!-- If true, this cell will the last cell in the row to be navigated to via the ENTER
           key. Only applicable when "CellNavOnEnter" or "QuickAddOnEnter" is set. Normally not
           specified. Default to false. -->
      <xsd:attribute name="endOfCellNav" type="xsd:boolean" default="false"/>
      <!-- If true, instead of showing a hierarchical menu, the widget will show a single menu
           with sub-menus grouped under headers. -->
      <xsd:attribute name="flatten" type="xsd:boolean" default="false"/>
      <!-- An optional boolean expression, if returns true, this widget will get focus when start
           editing the containing location. -->
      <xsd:attribute name="focusOnStartEditing" type="xsd:string"/>
      <!-- An expression that returns a GWColor instance. Legacy: this method can instead return
           a string corresponding to a CSS Specification Level 3 color name. See GWColor for
           more details. -->
      <xsd:attribute name="fontColor" type="xsd:string"/>
      <!-- An optional expression. If specified, a footer cell with the specified value will
           be rendered for this column. Only applicable when the containing Row is iterated by
           a RowIterator. Not allowed when "footerSumValue" is specified. -->
      <xsd:attribute name="footerLabel" type="xsd:string"/>
      <!-- An optional expression, if specified, will be used as format pattern for the footer
           sum value. Normally not specified, so that the "format" and\or "formatType" of the
           cell value will be applied to footer sum value. Only applicable when "footerSumValue"
           is specified. The result of this expression must conform to the number format defined
           in java.text.DecimalFormat. -->
      <xsd:attribute name="footerSumFormat" type="xsd:string"/>
      <!-- An optional Numeric expression. If specified, a footer cell that sums the specified
           value for all cells in this column will be rendered. Pagination of the list does not
           affect the sum value. Only applicable when the containing row is iterated by a RowIterator.
           Not allowed when "footerLabel" is specified. -->
      <xsd:attribute name="footerSumValue" type="xsd:string"/>
      <!-- How the value is formatted; options include "general", "currency", and "email".  See
           the formatType enumeration. -->
      <xsd:attribute name="formatType" type="FormatType"/>
      <!-- If true, the user may enter a free-text value. If this property is set to false, the
           clearEnabled attribute will be treated as true to allow for users to delete their
           picked selection. -->
      <xsd:attribute name="freeInputEnabled" type="xsd:boolean" default="true"/>
      <!-- If true, the ListView will be grouped by this cell upon entering the page. Only one
           grouped cell is allowed at any given time and it is only applicable when the column
           is sortable. -->
      <xsd:attribute name="groupedOnEnter" type="xsd:string"/>
      <!-- If true, this Cell and any other grow-enabled Cell will expand to fill remaining space
           in the ListViewPanel. Only applicable when the ListView is set to stretch. -->
      <xsd:attribute name="grow" type="xsd:boolean" default="false"/>
      <!-- If true, generates a checkbox at the beginning of this cell. This checkbox can be
           used to check this entry in the nearest containing Iterator. Defaults to false. Only
           allowed if this cell is inside a CellIterator or under a Row inside a RowIterator. -->
      <xsd:attribute name="hasCheckBox" type="xsd:boolean" default="false"/>
      <!-- CSS height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="height" type="xsd:string"/>
      <!-- A Gosu expression which, if defined, is evaluated to create help info that guides
           the user to edit this widget. The help info will show up if the user hovers the mouse
           over or focuses on the widget, when the widget is in edit mode. -->
      <xsd:attribute name="helpText" type="xsd:string"/>
      <!-- If false, menu items under this input will be shown even when the input is not editable. -->
      <xsd:attribute name="hideChildrenIfReadOnly" type="xsd:boolean" default="true"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- Refers to an image file. If defined, makes this an icon cell. The "value" attribute
           should be a boolean expression describing whether the icon is visible in a given row. -->
      <xsd:attribute name="icon" type="xsd:string"/>
      <!-- Color of the icon. If not set will default to its font color. -->
      <xsd:attribute name="iconColor" type="xsd:string"/>
      <!-- The ALT text for any icon generated in the content cells -->
      <xsd:attribute name="iconLabel" type="xsd:string"/>
      <!-- An enumeration of icon types that determine what the 'icon' property on the widget
           is referring to. -->
      <xsd:attribute name="iconType" type="IconTypeEnum"/>
      <!-- Reference ID of the widget.  This does not have to be globally unique; it only has
           to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <!-- A Gosu expression that converts the presentation value to a model value. The presentation
           value string is exposed to this expression as the symbol "VALUE". -->
      <xsd:attribute name="inputConversion" type="xsd:string"/>
      <!-- An optional expression. If specified, a header cell with the specified value will
           be rendered for this column. Only applicable when the containing row is iterated by
           a RowIterator. -->
      <xsd:attribute name="label" type="xsd:string"/>
      <!-- Custom extension CSS style class to apply to the header. -->
      <xsd:attribute name="labelStyleClass" type="xsd:string"/>
      <!-- CSS max-height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="maxHeight" type="xsd:string"/>
      <!-- CSS max-width value. Can be `px`, or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="maxWidth" type="xsd:string"/>
      <!-- CSS min-height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="minHeight" type="xsd:string"/>
      <!-- CSS min-width value. Can be `px`, or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="minWidth" type="xsd:string"/>
      <!-- The number of child MenuItems to show in each column.  If not specified, all children
           will be shown in a single column. -->
      <xsd:attribute name="numEntriesPerColumn" type="xsd:integer" default="0"/>
      <!-- Gosu expression to be executed after the value is set from a picker. -->
      <xsd:attribute name="onPick" type="xsd:string"/>
      <!-- A Gosu expression that converts the model value to a presentation value. The model
           value is exposed to this expression as the symbol "VALUE". The return type of this
           expression must be String. -->
      <xsd:attribute name="outputConversion" type="xsd:string"/>
      <!-- The picker popup used to pick a value, as a Gosu statement of the form "[popup name].push(...)". -->
      <xsd:attribute name="pickLocation" type="xsd:string" use="required"/>
      <xsd:attribute name="policyLinePattern" type="xsd:string" use="required"/>
      <!-- Relative width when printing to PDF. All widths are relative to the widths of the
           other columns in the ListView -->
      <xsd:attribute name="printWidth" type="xsd:string" default="1"/>
      <!-- A Gosu expression used to validate user value before setting it to the model. This
           expression can access any symbols available to this widget, and a "VALUE" symbol that
           represents the user value. If this expression returns null, the user value will be
           set into the model. Otherwise, an error message containing the result of the expression
           will be displayed on the page, the value will not be set into the model, and no actions
           can be performed until the error is corrected. -->
      <xsd:attribute name="requestValidationExpression" type="xsd:string"/>
      <!-- If true, then the cell must be filled out by the user -->
      <xsd:attribute name="required" type="xsd:string"/>
      <!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * Deprecated.
           DO NOT USE.                                           * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
           Consider using "onChange/onPick/inputConversion/outputConversion" where available.
           If specified and the Input is editable, then any new value of the Input is written
           to this expression (Gosu by default) instead of to "value".  The new value is exposed
           as the symbol "VALUE".  For instance if your value expression is "Foo.getSomething()"
           then it can't be written to since it's not an L-value; so you could specify a setter
           expression along the lines of "Foo.setSomething(VALUE)" Warning: if you use this attribute
           many pebbles features will not work, including but not limited to: * Correct automatic
           detection of the state of the updated data * Correct automatic detection of the editability
           of the data * Correct automatic detection of the maximum size of a text input -->
      <xsd:attribute name="setter" type="xsd:string"/>
      <!-- Boolean expression which determines whether or not to show a confirmation message
           when the field value is changed directly from the UI. It's NOT applicable when the
           value is changed indirectly, for example, as a result of client reflection. -->
      <xsd:attribute name="showConfirmMessage" type="xsd:string"/>
      <!-- If true, shows the icon defined by "icon" in the header cell for this column. The
           default value is true. -->
      <xsd:attribute name="showHeaderIcon" type="xsd:boolean" default="true"/>
      <!-- An optional comma-separated sequence of Expressions, each of which is assumed to be
           a dot-delimited path, the value by which this column will be sorted if the user clicks
           on the header cell. -->
      <xsd:attribute name="sortBy" type="xsd:string"/>
      <!-- Either "ascending" or "descending" -->
      <xsd:attribute name="sortDirection" type="WidgetSortDirection" default="ascending"/>
      <!-- The priority of sorting relative to other sorting elements like IteratorSort and Cell.
           The lower the number, the higher the priority.  The highest priority is "1" -->
      <xsd:attribute name="sortOrder" type="xsd:integer" default="0"/>
      <!-- CSS style class for the cell content; for instance, "miniButton" makes a link appear
           as a small button -->
      <xsd:attribute name="styleClass" type="LinkStyleClass"/>
      <!-- An optional attribute, if set, defer sub menu generation until user tries to open
           the menu. DO NOT set this flag unless the sub menu of this widget is very expensive
           to generate. Setting this flag will reduce time to load the page, however require
           fetching additional info from server in the background, when the menu gets opened
           for the first time after page loaded. -->
      <xsd:attribute name="subMenuOnDemand" type="xsd:boolean" default="false"/>
      <!-- Extra "alt" text to show when the user hovers the mouse over the header cell of this
           column. -->
      <xsd:attribute name="tooltip" type="xsd:string"/>
      <!-- If true, validate before commit that the value of this column is unique across all
           rows in the current page. Only meaningful when this column is editable. -->
      <xsd:attribute name="unique" type="xsd:boolean" default="false"/>
      <!-- A Gosu expression to run before committing the record. This expression can refer to
           any symbols available to this widget. If this expression returns null, the validation
           is considered successful; otherwise, the result of this expression will be displayed
           as an error and the record will not be committed. -->
      <xsd:attribute name="validationExpression" type="xsd:string"/>
      <!-- The label of this cell to be used when it has validation issues. Not needed when this
           cell has a "label". Required if the cell is editable but does not have a "label". -->
      <xsd:attribute name="validationLabel" type="xsd:string"/>
      <!-- The value this element binds to.  If the element is editable then this value is both
           read from and written to (unless "setter" is defined). -->
      <xsd:attribute name="value" type="xsd:string"/>
      <!-- The type of the value expression. -->
      <xsd:attribute name="valueType" type="xsd:string" default="entity.RiskClass"/>
      <!-- Boolean expression which, if false, hides the <i>contents</i> of the cell (its "ValueWidget"),
           but not the cell itself.  Needed since hiding the actual cell usually screws up the
           layout -->
      <xsd:attribute name="valueVisible" type="xsd:string"/>
      <!-- Specifies the vertical alignment of this cell. Valid values: "top", "middle", or "bottom".
           If no value is specified, the default alignment is determined by the cell type ("top"
           for Text Areas and Format Cells, "middle" for buttons and icons). -->
      <xsd:attribute name="verticalAlign" type="WidgetVerticalAlignment"/>
      <!-- Boolean expression which, if false, completely hides the widget and all its children -->
      <xsd:attribute name="visible" type="xsd:string"/>
      <!-- CSS width value. Can be `px`, or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="width" type="xsd:string"/>
      <!-- If default, defers to FormatType to decide whether to wrap or not.  If true, allows
           cell content to wrap. -->
      <xsd:attribute name="wrap" type="WrapType" default="default"/>
      <!-- If true, allows Header Cell text content to wrap. Defaults to true. -->
      <xsd:attribute name="wrapLabel" type="xsd:boolean" default="false"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- Version of Input specialized for ClassCode fields -->
  <xsd:element name="RiskClassInput">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="LayoutConfig" minOccurs="0" maxOccurs="1"/>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="AddMenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="AddMenuItemIterator" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemDivider" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemIterator" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemSetRef" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemTree" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PickerMenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PostOnChange" minOccurs="0" maxOccurs="1"/>
          <xsd:element ref="Reflect" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="SearchItem" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:choice>
      </xsd:sequence>
      <!-- An optional action to take when the user clicks the value of this widget when the
           value is not being edited. See ActionBase for list of available action prefixes. When
           specified, the value of this widget will be rendered as a link when the value is not
           being edited. -->
      <xsd:attribute name="action" type="xsd:string"/>
      <!-- An optional boolean expression controlling whether the action should be available
           in this specific context when in read-only mode.  This is ignored if in edit mode
           or if the action is null.  This attribute will be deprecated in a future release,
           please use the 'available' attribute instead.  To disable action in readonly mode,
           you can set available=&quot;CurrentLocation.InEditMode || &lt;action-available-condition&gt;&quot; -->
      <xsd:attribute name="actionAvailable" type="xsd:string"/>
      <!-- Alignment of the widget ("left", "right", or "center") -->
      <xsd:attribute name="align" type="WidgetAlignment"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- Boolean expression which, if false, grays out the widget and all its children -->
      <xsd:attribute name="available" type="xsd:string"/>
      <!-- If true then the label is displayed in bold text. -->
      <xsd:attribute name="boldLabel" type="xsd:boolean" default="false"/>
      <!-- If true then the value is displayed in bold text when read-only. -->
      <xsd:attribute name="boldValue" type="xsd:boolean" default="false"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- Whether the user should be allowed to clear the selected value. If "true", an icon
           will be available which, when clicked, will clear the widget. This attribute will
           always be overridden and set to "true" if freeInputEnabled is set to false. -->
      <xsd:attribute name="clearEnabled" type="xsd:boolean" default="false"/>
      <!-- The confirmation message to show when "showConfirmMessage" is set. If not specified,
           a standard message will be used. -->
      <xsd:attribute name="confirmMessage" type="xsd:string"/>
      <!-- A Gosu expression used to convert the value picked from the picker popup before it
           is written to the model value of this widget. The picked value is available as the
           special symbol "PickedValue" -->
      <xsd:attribute name="conversionExpression" type="xsd:string"/>
      <xsd:attribute name="coveragePattern" type="xsd:string"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- Boolean expression which, if false, makes this widget and all its children read-only -->
      <xsd:attribute name="editable" type="xsd:string" default="false"/>
      <!-- If true, instead of showing a hierarchical menu, the widget will show a single menu
           with sub-menus grouped under headers. -->
      <xsd:attribute name="flatten" type="xsd:boolean" default="false"/>
      <!-- An optional boolean expression, if returns true, this widget will get focus when start
           editing the containing location. -->
      <xsd:attribute name="focusOnStartEditing" type="xsd:string"/>
      <!-- How the value is formatted; options include "general", "currency", and "email".  See
           the formatType enumeration. -->
      <xsd:attribute name="formatType" type="FormatType"/>
      <!-- If true, the user may enter a free-text value. If this property is set to false, the
           clearEnabled attribute will be treated as true to allow for users to delete their
           picked selection. -->
      <xsd:attribute name="freeInputEnabled" type="xsd:boolean" default="true"/>
      <!-- A Gosu expression which, if defined, is evaluated to create help info that guides
           the user to edit this widget. The help info will show up if the user hovers the mouse
           over or focuses on the widget, when the widget is in edit mode. -->
      <xsd:attribute name="helpText" type="xsd:string"/>
      <!-- If false, menu items under this input will be shown even when the input is not editable. -->
      <xsd:attribute name="hideChildrenIfReadOnly" type="xsd:boolean" default="true"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- Reference ID of the widget.  This does not have to be globally unique; it only has
           to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <!-- A Gosu expression that converts the presentation value to a model value. The presentation
           value string is exposed to this expression as the symbol "VALUE". -->
      <xsd:attribute name="inputConversion" type="xsd:string"/>
      <!-- Label to render. -->
      <xsd:attribute name="label" type="xsd:string"/>
      <!-- Boolean expression which, if true, causes the label portion of the Input to be rendered
           above the value -->
      <xsd:attribute name="labelAbove" type="xsd:string" default="false"/>
      <!-- Custom extension CSS style class to apply to the label. -->
      <xsd:attribute name="labelStyleClass" type="xsd:string"/>
      <!-- The number of child MenuItems to show in each column.  If not specified, all children
           will be shown in a single column. -->
      <xsd:attribute name="numEntriesPerColumn" type="xsd:integer" default="0"/>
      <!-- Gosu expression to be executed after the value is set from a picker. -->
      <xsd:attribute name="onPick" type="xsd:string"/>
      <!-- A Gosu expression that converts the model value to a presentation value. The model
           value is exposed to this expression as the symbol "VALUE". The return type of this
           expression must be String. -->
      <xsd:attribute name="outputConversion" type="xsd:string"/>
      <!-- The picker popup used to pick a value, as a Gosu statement of the form "[popup name].push(...)". -->
      <xsd:attribute name="pickLocation" type="xsd:string" use="required"/>
      <xsd:attribute name="policyLinePattern" type="xsd:string" use="required"/>
      <!-- A Gosu expression used to validate user value before setting it to the model. This
           expression can access any symbols available to this widget, and a "VALUE" symbol that
           represents the user value. If this expression returns null, the user value will be
           set into the model. Otherwise, an error message containing the result of the expression
           will be displayed on the page, the value will not be set into the model, and no actions
           can be performed until the error is corrected. -->
      <xsd:attribute name="requestValidationExpression" type="xsd:string"/>
      <!-- If true, then the cell must be filled out by the user -->
      <xsd:attribute name="required" type="xsd:string"/>
      <!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * Deprecated.
           DO NOT USE.                                           * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
           Consider using "onChange/onPick/inputConversion/outputConversion" where available.
           If specified and the Input is editable, then any new value of the Input is written
           to this expression (Gosu by default) instead of to "value".  The new value is exposed
           as the symbol "VALUE".  For instance if your value expression is "Foo.getSomething()"
           then it can't be written to since it's not an L-value; so you could specify a setter
           expression along the lines of "Foo.setSomething(VALUE)" Warning: if you use this attribute
           many pebbles features will not work, including but not limited to: * Correct automatic
           detection of the state of the updated data * Correct automatic detection of the editability
           of the data * Correct automatic detection of the maximum size of a text input -->
      <xsd:attribute name="setter" type="xsd:string"/>
      <!-- Optional keyboard shortcut character in the form of "Q" or "ShiftQ"; the "Alt" key
           is implicit. This is only applicable when this widget has an "action" specified and
           the value is not being edited. -->
      <xsd:attribute name="shortcut" type="xsd:string"/>
      <!-- Boolean expression which determines whether or not to show a confirmation message
           when the field value is changed directly from the UI. It's NOT applicable when the
           value is changed indirectly, for example, as a result of client reflection. -->
      <xsd:attribute name="showConfirmMessage" type="xsd:string"/>
      <!-- An optional attribute, if set, defer sub menu generation until user tries to open
           the menu. DO NOT set this flag unless the sub menu of this widget is very expensive
           to generate. Setting this flag will reduce time to load the page, however require
           fetching additional info from server in the background, when the menu gets opened
           for the first time after page loaded. -->
      <xsd:attribute name="subMenuOnDemand" type="xsd:boolean" default="false"/>
      <!-- A Gosu expression to run before committing the record. This expression can refer to
           any symbols available to this widget. If this expression returns null, the validation
           is considered successful; otherwise, the result of this expression will be displayed
           as an error and the record will not be committed. -->
      <xsd:attribute name="validationExpression" type="xsd:string"/>
      <!-- The value this Input binds to as an Expression.  If the Input is editable then this
           value is both read from and written to (unless "setter" is defined). -->
      <xsd:attribute name="value" type="xsd:string" use="required"/>
      <!-- CSS max-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionMaxWidth" type="xsd:string"/>
      <!-- CSS min-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionMinWidth" type="xsd:string"/>
      <!-- CSS width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionWidth" type="xsd:string"/>
      <!-- The type of the value expression. -->
      <xsd:attribute name="valueType" type="xsd:string" default="entity.RiskClass"/>
      <!-- If used instead of "editable", specifies whether the Input is editable when data is
           being created -->
      <xsd:attribute name="visible" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- A row used inside a ListViewPanel. May contain multiple cells. -->
  <xsd:element name="Row">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="AddressBookContactCell"/>
          <xsd:element ref="AltGroupCell"/>
          <xsd:element ref="AltUserCell"/>
          <xsd:element ref="AssigneeCell"/>
          <xsd:element ref="BarCell"/>
          <xsd:element ref="BooleanRadioCell"/>
          <xsd:element ref="ButtonCell"/>
          <xsd:element ref="CellIterator"/>
          <xsd:element ref="CheckBoxCell"/>
          <xsd:element ref="ClaimAssociationsCell"/>
          <xsd:element ref="CurrencyCell"/>
          <xsd:element ref="DateCell"/>
          <xsd:element ref="EmptyCell"/>
          <xsd:element ref="FileCell"/>
          <xsd:element ref="FormatCell"/>
          <xsd:element ref="GroupCell"/>
          <xsd:element ref="ImageActionCell"/>
          <xsd:element ref="ImageCell"/>
          <xsd:element ref="IndustryCodeCell"/>
          <xsd:element ref="LinkCell"/>
          <xsd:element ref="ModalCellRef"/>
          <xsd:element ref="ModifierCell"/>
          <xsd:element ref="MonetaryAmountCell"/>
          <xsd:element ref="OrgCell"/>
          <xsd:element ref="PickerCell"/>
          <xsd:element ref="PrivacyCell"/>
          <xsd:element ref="RadioButtonCell"/>
          <xsd:element ref="RangeCell"/>
          <xsd:element ref="RangeRadioCell"/>
          <xsd:element ref="RiskClassCell"/>
          <xsd:element ref="TextAreaCell"/>
          <xsd:element ref="TextCell"/>
          <xsd:element ref="TypeKeyCell"/>
          <xsd:element ref="UserCell"/>
        </xsd:choice>
      </xsd:sequence>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- Boolean expression which, if false, makes all the child cells in this row read-only.
           This is a convenient alternative for setting the "editable" attribute on each child
           cell. This attribute can be used to prevent modifying the cell data directly on the
           UI; however, it does not prevent modifying the underlying data indirectly (for example,
           through a Toolbar button). -->
      <xsd:attribute name="editable" type="xsd:string"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- If true, the row will be highlighted. -->
      <xsd:attribute name="highlighted" type="xsd:string"/>
      <!-- (Optional) reference ID of the widget.  This does not have to be globally unique;
           it only has to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string"/>
      <!-- Only meaningful when this widget contains a Progress widget. Specifies an entity to
           refresh when the Progress widget completes its operation, at which point this widget
           will re-render itself. -->
      <xsd:attribute name="refreshOnProgressComplete" type="xsd:string"/>
      <!-- If true, renders this row as a smart header. Default to false. -->
      <xsd:attribute name="renderAsSmartHeader" type="xsd:boolean" default="false"/>
      <!-- An optional boolean expression, if returns true, all child widgets of the row will
           be rendered in "archived" style -->
      <xsd:attribute name="useArchivedStyle" type="xsd:string"/>
      <!-- If true, renders this row in sub-header style. Default to false. -->
      <xsd:attribute name="useSubHeaderStyle" type="xsd:string"/>
      <!-- If true, renders this row in title style. Default to false. Do not use in normally
           formatted ListViews. -->
      <xsd:attribute name="useTitleStyle" type="xsd:string"/>
      <!-- Boolean expression which, if false, completely hides the widget and all its children -->
      <xsd:attribute name="visible" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- Creates as many copies of its Row content as there are components in the array referenced
       by "value".  Supplies the component value to the created content as "elementName".
       Used inside a ListViewPanel or another RowIterator. -->
  <xsd:element name="RowIterator">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="Variable" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="IteratorSort" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ToolbarFilter" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ToolbarFlag" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:choice>
        <xsd:choice minOccurs="1" maxOccurs="unbounded">
          <xsd:element ref="Row"/>
          <xsd:element ref="RowIterator"/>
          <xsd:element ref="RowSetRef"/>
          <xsd:element ref="RowTree"/>
        </xsd:choice>
      </xsd:sequence>
      <!-- If true, will add something like " (1-15 of 100)" next to paging control, taking the
           paging information from this Iterator. -->
      <xsd:attribute name="appendPageInfo" type="xsd:boolean" default="false"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- An optional Boolean Gosu expression, if evaluated to true, add numEntriesToAdd elements
           to this iterator when entering the page, if the page is in edit mode upon enter. Normally
           not set, unless the iterator has less entries than required; otherwise, the user may
           have to manually remove unwanted entries that are automatically added. -->
      <xsd:attribute name="autoAdd" type="xsd:string"/>
      <!-- Boolean expression which, if it evaluates to false, hides the select button (but not
           the column). Only applies if pickValue is defined. -->
      <xsd:attribute name="canPick" type="xsd:string" default="true"/>
      <!-- If true, ENTER key will navigate thru editable cells in this row iterator. Default
           to false, in which case the user can navigate thru the cells using ALT+SHIFT+&lt;arrow-key&gt;. -->
      <xsd:attribute name="cellNavOnEnter" type="xsd:boolean" default="false"/>
      <!-- A Gosu expression (evaluates to a boolean) which designates whether or not the checkboxes
           are visible.  Does nothing if hasCheckBoxes is false. -->
      <xsd:attribute name="checkBoxVisible" type="xsd:string"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- Not applicable for Dashboards. -->
      <xsd:attribute name="conversionExpression" type="xsd:string"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- Boolean expression which determines whether any of the columns can be editable.  It
           is an error to make any Cell editable if this attribute is false; conversely, it is
           an error to use this RowIterator over a IQueryBeanResult if the attribute is true.
           NOTE: Always operates in read-only mode in Dashboard context. -->
      <xsd:attribute name="editable" type="xsd:string" use="required"/>
      <!-- As each element in the array result of "value" is displayed, it is exposed as a symbol
           with the name "elementName", which the contents of this iterator can refer to -->
      <xsd:attribute name="elementName" type="xsd:string" use="required"/>
      <!-- If true, the iterator will refresh its entries even if they have changed.<p>This has
           risks. Refreshing from an IQueryBeanResult value will ignore newly added or removed
           entries. Changed or newly added entries may be reordered or moved out of the currently
           visible page, possibly bypassing UI validation. User input that cannot be written
           to the underlying data (such as malformed date strings) may be lost.</p><p>Use with
           care. Safest on list or array iterators that don't have paging or contain only simple
           inputs such as checkboxes or dropdowns</p>. -->
      <xsd:attribute name="forceRefreshDespiteChangedEntries" type="xsd:boolean" default="false"/>
      <!-- If true, generates a checkbox on the left of each content row. Default is false unless
           the "toRemove" attribute is specified. This attribute only applies to the content
           rows directly under this iterator, and not to rows embedded under a child iterator
           or RowSetRef. -->
      <xsd:attribute name="hasCheckBoxes" type="xsd:boolean" default="false"/>
      <!-- Do not use, set the height at parent ListView level instead. -->
      <xsd:attribute name="height" type="xsd:string" default="-1"/>
      <!-- If true, then generated checkboxes will be invisible when the listview is read-only.
           Does nothing if hasCheckboxes=false. Defaults to false. -->
      <xsd:attribute name="hideCheckBoxesIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- (Optional) reference ID of the widget.  This does not have to be globally unique;
           it only has to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string"/>
      <!-- Number of entries that must be filled out to pass validation on this page. -->
      <xsd:attribute name="numEntriesRequired" type="xsd:integer" default="0"/>
      <!-- An optional attribute, if set, overrides number of entries to add when the add button
           is pushed. Default to 1. Normally not set. <p><b>If set to a value greater than 1,
           any entry that is not modified by the user after it's added will be removed before
           commit the page. It's a risk of potential data loss. USE WITH CAUTION.</b></p>. -->
      <xsd:attribute name="numEntriesToAdd" type="xsd:integer" default="1"/>
      <!-- The number of elements in a single page, or 0 to disable paging. The default value
           is specified in ListViewPageSizeDefault parameter in config.xml. -->
      <xsd:attribute name="pageSize" type="xsd:integer"/>
      <!-- Not applicable for Dashboards. -->
      <xsd:attribute name="pickLocation" type="xsd:string"/>
      <!-- Gosu expression specifying what value a row will select. If specified, then adds a
           "SELECT" button to the left of each content row. -->
      <xsd:attribute name="pickValue" type="xsd:string"/>
      <!-- The width of the pick column cell, in pixels, if specified. -->
      <xsd:attribute name="pickWidth" type="xsd:integer"/>
      <!-- If true, ENTER key will navigate you thru editable cells, and add a new entry when
           you are at the last editable cell of this row iterator. Adding a new entry via ENTER
           key does not submit or validate previously entered data. Default to false. <b>This
           is an experimental attribute only applicable to very basic ListView configuration
           and for users who do not have full keyboard access. Do not set this property in other
           cases.</b> Not applicable for Dashboards. -->
      <xsd:attribute name="quickAddOnEnter" type="xsd:boolean" default="false"/>
      <!-- Overrides the text on the "SELECT" button.  Only applies if pickValue is defined. -->
      <xsd:attribute name="selectLabel" type="xsd:string" default="DisplayKey.get(&quot;Button.Select&quot;)"/>
      <!-- A Gosu expression which, if true, means the checkbox will start as checked. -->
      <xsd:attribute name="startChecked" type="xsd:string"/>
      <!-- The Gosu expression that is evaluated to add a new value to the list. The value is
           exposed using the name specified by "elementName". An example would be "Foo.addToBars(bar)".
            Either toAdd or toCreateAndAdd must be defined for the user to add entries to the
           iterator; however you cannot define both.  If the entries are not entities, toCreateAndAdd
           must be used instead of toAdd. -->
      <xsd:attribute name="toAdd" type="xsd:string"/>
      <!-- The Gosu expression that is evaluated to create a new value and add it to the list.
           An example would be "Foo.addToBars(Foo.createNewBar())".  Either toAdd or toCreateAndAdd
           must be defined for the user to add entries to the iterator; however you cannot define
           both. -->
      <xsd:attribute name="toCreateAndAdd" type="xsd:string"/>
      <!-- The Gosu expression that is evaluated to remove a value from the Iterator. The value
           is exposed using the name specified by "elementName".  Must be defined for the user
           to be able to remove values from the iterator. -->
      <xsd:attribute name="toRemove" type="xsd:string"/>
      <!-- Lets you manually specify the type of element exposed as "elementName".  This is useful
           if you have special knowledge about the type of element returned by "value": for example,
           if the field referred to returns an array of Contacts but you happen to know that
           they are guaranteed to all be Persons -->
      <xsd:attribute name="type" type="xsd:string"/>
      <!-- Validation label for errors associated with the RowIterator as a whole. -->
      <xsd:attribute name="validationLabel" type="xsd:string"/>
      <!-- A Gosu expression that evaluates to the elements over which to iterate. Must evaluate
           to an Object array or a IQueryBeanResult. -->
      <xsd:attribute name="value" type="xsd:string" use="required"/>
      <!-- The type of the value expression. -->
      <xsd:attribute name="valueType" type="xsd:string" use="required"/>
      <!-- Boolean expression which, if false, completely hides the widget and all its children -->
      <xsd:attribute name="visible" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- A reusable set of rows that can be included by reference. -->
  <xsd:element name="RowSet">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="Expose" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ExposeIterator" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ExposeRowTree" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ReferencedWidget" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="Require" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="Variable" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:choice>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="Row"/>
          <xsd:element ref="RowIterator"/>
          <xsd:element ref="RowSetRef"/>
          <xsd:element ref="RowTree"/>
        </xsd:choice>
      </xsd:sequence>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- (Optional) reference ID of the widget.  This does not have to be globally unique;
           it only has to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string"/>
      <!-- An optional String which, if specified, means that any element dynamically including
           this widget must specify the same mode.  There is also a special mode "default" you
           can use which means "Use this widget if no widget with the specified mode exists".
            You can also have this widget match more than one mode by separating mode strings
           with a | character. -->
      <xsd:attribute name="mode" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- Includes a RowSet by reference. -->
  <xsd:element name="RowSetRef">
    <xsd:complexType>
      <xsd:choice minOccurs="0" maxOccurs="unbounded"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- The ID of the RowSet to include by reference. -->
      <xsd:attribute name="def" type="xsd:string" use="required"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- (Optional) reference ID of the widget.  This does not have to be globally unique;
           it only has to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string"/>
      <!-- If defined, "mode" is evaluated and its result is converted to a String; the panel
           will be loaded whose "mode" matches the evaluated "mode" of this element.  If no panel
           is found with a matching "mode", then the panel with mode="default" is used; if there
           is no default a runtime exception is thrown -->
      <xsd:attribute name="mode" type="xsd:string"/>
      <!-- A comma separated list of widgets that are needed by the section. -->
      <xsd:attribute name="widgets" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- Creates an expandable tree based on its Row child, as defined by the elements in the
       array referenced by "value".  Supplies the component value to the created content
       as "elementName". Used inside a ListViewPanel. -->
  <xsd:element name="RowTree">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="Variable" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="IteratorSort" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ToolbarFilter" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ToolbarFlag" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:choice>
        <xsd:element ref="Row" minOccurs="1" maxOccurs="1"/>
      </xsd:sequence>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- Boolean expression which, if it evaluates to false, hides the select button (but not
           the column). Only applies if pickValue is defined. -->
      <xsd:attribute name="canPick" type="xsd:string" default="true"/>
      <!-- A Gosu expression (evaluates to a boolean) which designates whether or not the checkboxes
           are visible.  Does nothing if hasCheckBoxes is false. -->
      <xsd:attribute name="checkBoxVisible" type="xsd:string"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- A Gosu expression evaluating to the action on the label displayed for a parent row
           in the tree.  Only applicable if containerType is specified. -->
      <xsd:attribute name="containerAction" type="xsd:string"/>
      <!-- A Gosu expression evaluating to the label displayed for a parent row in the tree.
            Only required if containerType is specified. -->
      <xsd:attribute name="containerLabel" type="xsd:string"/>
      <!-- EXPERIMENTAL, DO NOT USE!!! If the number is greater than 1, no more cells will be
           rendered to the right of the containerLabel cell. -->
      <xsd:attribute name="containerLabelColspan" type="xsd:integer" default="1"/>
      <!-- The type of element represented by parent nodes in the tree, if they are of a different
           type than the leaf nodes. -->
      <xsd:attribute name="containerType" type="xsd:string"/>
      <!-- The type of element represented by leaf nodes in the tree.  All Cells after the first
           will only be populated for elements of this type.  (Note that non-leaf nodes of this
           type will also have their cells populated.) -->
      <xsd:attribute name="contentType" type="xsd:string" use="required"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- As each element in the array result of "value" is displayed, it is exposed as a symbol
           with the name "elementName", which the contents of this iterator can refer to -->
      <xsd:attribute name="elementName" type="xsd:string" use="required"/>
      <!-- If true, generates a checkbox on the left of each content row. Default is false unless
           the "toRemove" attribute is specified. This attribute only applies to the content
           rows directly under this iterator, and not to rows embedded under a child iterator
           or RowSetRef. -->
      <xsd:attribute name="hasCheckBoxes" type="xsd:boolean" default="false"/>
      <!-- Do not use, set the height at parent ListView level instead. -->
      <xsd:attribute name="height" type="xsd:string" default="-1"/>
      <!-- If true, then generated checkboxes will be invisible when the listview is read-only.
           Does nothing if hasCheckboxes=false. Defaults to false -->
      <xsd:attribute name="hideCheckBoxesIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- (Optional) reference ID of the widget.  This does not have to be globally unique;
           it only has to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string"/>
      <!-- The number of elements in a single page. ** Note: pageSize is not supported for RowTree.
           Default is set to 0 to disable paging. -->
      <xsd:attribute name="pageSize" type="xsd:integer" default="0"/>
      <!-- Gosu expression specifying what value a row will select. If specified, then adds a
           "SELECT" button to the left of each content row. -->
      <xsd:attribute name="pickValue" type="xsd:string"/>
      <!-- If true, whenever the value expression is evaluated and returns a new tree object
           then expand the same nodes in the new tree that were expanded in the previous tree,
           using the treeNode.DataKey property to match new and old nodes -->
      <xsd:attribute name="preserveExpansionStateOnRefresh" type="xsd:boolean" default="false"/>
      <!-- Overrides the text on the "SELECT" button.  Only applies if pickValue is defined. -->
      <xsd:attribute name="selectLabel" type="xsd:string"/>
      <!-- A Gosu expression which, if true, means the checkbox will start as checked -->
      <xsd:attribute name="startChecked" type="xsd:string"/>
      <!-- A Gosu expression that evaluates to the top-level elements from which to create the
           tree. Must evaluate to an object implementing gw.api.tree.TreeNode. -->
      <xsd:attribute name="value" type="xsd:string" use="required"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- Specifies a scope where this worksheet is allowed to show. -->
  <xsd:element name="Scope">
    <xsd:complexType>
      <xsd:choice minOccurs="0" maxOccurs="unbounded"/>
      <!-- The location which, when used as the top location in the main frame, allows this worksheet
           to be visible. Format: "[location name]([args])", or "*" for any location. -->
      <xsd:attribute name="location" type="xsd:string" use="required"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- The top GUI widget for the visible content of a page. -->
  <xsd:element name="Screen">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="Require" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="Variable" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:choice>
        <xsd:element ref="TitleBar" minOccurs="0" maxOccurs="1"/>
        <xsd:element ref="Toolbar" minOccurs="0" maxOccurs="1"/>
        <xsd:element ref="Verbatim" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="AbstractTableLayout" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="AlertBar" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="Calendar" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="CardViewPanel" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ChartPanel" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ColumnDashboard" minOccurs="0" maxOccurs="1"/>
          <xsd:element ref="DetailViewPanel" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="EmbeddedPanel" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="Image" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ImageAction" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ImageMediaObject" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ListDetailPanel" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ListViewPanel" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MediaGallery" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MediaUploader" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="Messages" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PanelColumn" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PanelDivider" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PanelIterator" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PanelRef" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PanelRow" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PanelSet" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="SearchPanel" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="Spacer" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="TemplatePanel" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="TreeViewPanel" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:choice>
        <xsd:element ref="Code" minOccurs="0" maxOccurs="1"/>
      </xsd:sequence>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- Boolean expression which, if false, makes this widget and all its children read-only -->
      <xsd:attribute name="editable" type="xsd:string"/>
      <!-- ID of this Screen. It must end with "Screen". It has to be unique if this Screen is
           defined in a separate file (i.e. referenceable by a ScreenRef). -->
      <xsd:attribute name="id" type="xsd:string"/>
      <!-- An optional String which, if specified, means that any element dynamically including
           this widget must specify the same mode.  There is also a special mode "default" you
           can use which means "Use this widget if no widget with the specified mode exists".
            You can also have this widget match more than one mode by separating mode strings
           with a | character. -->
      <xsd:attribute name="mode" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- Includes a Screen by reference -->
  <xsd:element name="ScreenRef">
    <xsd:complexType>
      <xsd:choice minOccurs="0" maxOccurs="unbounded"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- ID of the screen to include by reference -->
      <xsd:attribute name="def" type="xsd:string" use="required"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- (Optional) reference ID of the widget.  This does not have to be globally unique;
           it only has to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string"/>
      <!-- If defined, "mode" is evaluated and its result is converted to a String; the screen
           will be loaded whose "mode" matches the evaluated "mode" of this element.  If no screen
           is found with a matching "mode", then the panel with mode="default" is used; if there
           is no default a runtime exception is thrown -->
      <xsd:attribute name="mode" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- A search item under the tab menu. -->
  <xsd:element name="SearchItem">
    <xsd:complexType>
      <xsd:choice minOccurs="0" maxOccurs="unbounded"/>
      <!-- Optional expression which performs some action after navigating to the search page
           after a failure (typically modifying the search criteria).  The search criteria are
           exposed as searchCriteria, and the user's input as searchText. -->
      <xsd:attribute name="afterFailure" type="xsd:string"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- If true, the search text is cleared after performing the search. -->
      <xsd:attribute name="clearSearchText" type="xsd:boolean" default="true"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- The name of a .png file, or .svg file, or font glyph. The Widget's iconType determines
           which one. -->
      <xsd:attribute name="icon" type="xsd:string"/>
      <!-- Color of the icon. If not set will default to its font color. -->
      <xsd:attribute name="iconColor" type="xsd:string"/>
      <!-- An enumeration of icon types that determine what the 'icon' property on the widget
           is referring to. -->
      <xsd:attribute name="iconType" type="IconTypeEnum"/>
      <!-- Reference ID of the widget.  This does not have to be globally unique; it only has
           to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <!-- An optional gosu expression that returns a string to use as the input mask. This field
           should only be necessary in cases where the data type has no mask or where the mask
           needs to be conditional. The input mask returned should be of the same format as a
           mask specified using the input-mask attribute on a field validator (use # for wildcards).
           A mask that contains no wildcards will just be used as a placeholder value. -->
      <xsd:attribute name="inputMask" type="xsd:string"/>
      <!-- Gosu expression for the label of the item -->
      <xsd:attribute name="label" type="xsd:string" use="required"/>
      <!-- Expression which navigates to the appropriate search page if the search fails.  The
           user's input is exposed as searchText. -->
      <xsd:attribute name="onFailure" type="xsd:string" use="required"/>
      <!-- Expression which navigates to the appropriate location when a single result is successfully
           returned.  The result is exposed as a symbol called "result". -->
      <xsd:attribute name="onResult" type="xsd:string" use="required"/>
      <!-- An entity property whose field validator is to generate the input mask on the search
           box. -->
      <xsd:attribute name="property" type="xsd:string"/>
      <!-- Expression which performs the search, taking the user's input as searchText and returning
           a single result, or null on failure. -->
      <xsd:attribute name="search" type="xsd:string" use="required"/>
      <!-- Expression which returns the error to display on a failed search.  The user's input
           is exposed as searchText. -->
      <xsd:attribute name="validationError" type="xsd:string" use="required"/>
      <!-- Boolean expression which, if false, completely hides the widget and all its children -->
      <xsd:attribute name="visible" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- A special panel to facilitate performing searches. The Search Panel typically contains
       a DetailView to enter search criteria and a ListView to display search result. The
       search criteria entry DetailView is always editable, no matther if the enclosing context
       is being edited or not. -->
  <xsd:element name="SearchPanel">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="AbstractTableLayout" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="CardViewPanel" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ChartPanel" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="DetailViewPanel" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="EmbeddedPanel" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="Image" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ImageAction" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ImageMediaObject" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ListDetailPanel" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ListViewPanel" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MediaGallery" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MediaUploader" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PanelColumn" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PanelDivider" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PanelIterator" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PanelRef" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PanelRow" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PanelSet" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="SearchPanel" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="Spacer" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="TemplatePanel" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="TreeViewPanel" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:choice>
        <xsd:element ref="Code" minOccurs="0" maxOccurs="1"/>
      </xsd:sequence>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- If true, the Widget will have a border around it. Purely a visual effect. -->
      <xsd:attribute name="border" type="xsd:boolean" default="false"/>
      <!-- If false, disables all caching of the criteria and results of this Searcher.  Defaults
           to true. -->
      <xsd:attribute name="cachingEnabled" type="xsd:string" default="true"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- If true, clears invisible Inputs with values that are left over from a previous state
           of the screen. Limitation: If a field appears twice on the screen, once visible and
           once invisible, both inputs will be cleared. -->
      <xsd:attribute name="clearInvisibleInputs" type="xsd:boolean" default="false"/>
      <!-- The name by which the search criteria will be exposed as a symbol.  Typically the
           criteria are edited by a DetailView. -->
      <xsd:attribute name="criteriaName" type="xsd:string" use="required"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- (Optional) reference ID of the widget.  This does not have to be globally unique;
           it only has to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string"/>
      <!-- If true, independent of 'panel inner spacing', the container will left indent its
           children by a fixed amount. This is useful for displaying nested data throughout a
           page. Purely a visual effect. -->
      <xsd:attribute name="leftIndent" type="xsd:boolean" default="false"/>
      <!-- If specified, sets the maximum number of search results that can be returned by this
           search.  If more than this number of results are returned, an error message will be
           displayed instead telling the user to refine their search. Values of 0 or less are
           ignored - that is no maximum will be imposed -->
      <xsd:attribute name="maxSearchResults" type="xsd:string"/>
      <!-- In general, determines the amount of spacing INSIDE of the Panel in all 4 directions:
           top, right, bottom, left. However, different Panels may have requirements that prevent
           all 4 directions from being modified. -->
      <xsd:attribute name="panelInnerSpacing" type="WidgetSpacing" default="none"/>
      <!-- In general, determines the amount of spacing OUTSIDE of the Panel in all 4 directions:
           top, right, bottom, left. However, different Panels may have requirements that prevent
           all 4 directions from being modified. -->
      <xsd:attribute name="panelOuterSpacing" type="WidgetSpacing" default="none"/>
      <!-- The style of the Panel. In general, this refers to the background color, but some
           styles can change other aspects such as font color, spacing, or filters. -->
      <xsd:attribute name="panelStyle" type="xsd:string"/>
      <!-- If false, disables caching of search *results* (while leaving caching of criteria).
            Defaults to true. Moot if cachingEnabled is false. -->
      <xsd:attribute name="resultCachingEnabled" type="xsd:boolean" default="true"/>
      <!-- The name by which the search results (normally a List, Array, or IQueryBeanResult)
           will be exposed as a symbol.  Typically the results are shown in a ListView. -->
      <xsd:attribute name="resultsName" type="xsd:string" use="required"/>
      <!-- Gosu expression that does the actual search. -->
      <xsd:attribute name="search" type="xsd:string" use="required"/>
      <!-- Gosu expression that creates the search criteria. The return type must be serializable. -->
      <xsd:attribute name="searchCriteria" type="xsd:string" use="required"/>
      <!-- The type of the search criteria, which must be serializable -->
      <xsd:attribute name="searchCriteriaType" type="xsd:string" use="required"/>
      <!-- An optional Gosu expression, if true, and if there are no search results cached from
           last visit to this page, the SearchPanel will run a search as soon as the user enters
           the page -->
      <xsd:attribute name="searchOnEnter" type="xsd:string"/>
      <!-- If true, the SearchPanel will re-run the last query when the page is refreshed. Only
           applicable when the search results type is a Query. -->
      <xsd:attribute name="searchOnRefresh" type="xsd:boolean" default="true"/>
      <!-- The type of the search expression. -->
      <xsd:attribute name="searchResultsType" type="xsd:string" use="required"/>
    </xsd:complexType>
  </xsd:element>
  
  <xsd:element name="SkipButton">
    <xsd:complexType>
      <xsd:choice minOccurs="0" maxOccurs="unbounded"/>
      <!-- The ID of the step to go to -->
      <xsd:attribute name="destination" type="xsd:string" use="required"/>
      <!-- Gosu expression for the label to display on this button -->
      <xsd:attribute name="label" type="xsd:string" use="required"/>
      <!-- Keyboard shortcut character in the form of "Q" or "ShiftQ"; the "Alt" key is implicit -->
      <xsd:attribute name="shortcut" type="xsd:string"/>
      <!-- Gosu expression that indicates whether this button should appear on the screen.  Tree.If
           not specified, the button will always appear -->
      <xsd:attribute name="visible" type="xsd:string" default="true"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- A general spacer node used to help in general layout. -->
  <xsd:element name="Spacer">
    <xsd:complexType>
      <xsd:choice minOccurs="0" maxOccurs="unbounded"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- CSS height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="height" type="xsd:string"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- CSS max-height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="maxHeight" type="xsd:string"/>
      <!-- CSS max-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="maxWidth" type="xsd:string"/>
      <!-- CSS min-height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="minHeight" type="xsd:string"/>
      <!-- CSS min-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="minWidth" type="xsd:string"/>
      <!-- Boolean expression which, if false, completely hides the widget. -->
      <xsd:attribute name="visible" type="xsd:string"/>
      <!-- CSS width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="width" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- An area below TabBar for displaying system alert information -->
  <xsd:element name="SystemAlertBar">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="Require" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="Variable" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:choice>
        <xsd:element ref="SystemAlertBarElement" minOccurs="0" maxOccurs="unbounded"/>
      </xsd:sequence>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- The name of a .png file, or .svg file, or font glyph. The Widget's iconType determines
           which one. -->
      <xsd:attribute name="icon" type="xsd:string"/>
      <!-- Color of the icon. If not set will default to its font color. -->
      <xsd:attribute name="iconColor" type="xsd:string"/>
      <!-- An enumeration of icon types that determine what the 'icon' property on the widget
           is referring to. -->
      <xsd:attribute name="iconType" type="IconTypeEnum"/>
      <!-- Reference ID of the widget.  This does not have to be globally unique; it only has
           to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <!-- Label to render. -->
      <xsd:attribute name="label" type="xsd:string"/>
      <!-- Boolean expression which, if false, completely hides the widget and all its children -->
      <xsd:attribute name="visible" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- A single element in SystemAlertBarBar. -->
  <xsd:element name="SystemAlertBarElement">
    <xsd:complexType>
      <xsd:choice minOccurs="0" maxOccurs="unbounded"/>
      <!-- Action performed by this widget.  By default, this is a Gosu expression. -->
      <xsd:attribute name="action" type="xsd:string"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- Reference ID of the widget.  This does not have to be globally unique; it only has
           to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <!-- Label to render. -->
      <xsd:attribute name="label" type="xsd:string" use="required"/>
      <!-- CSS style class for the link; for instance, "miniButton" makes the link appear as
           a small button -->
      <xsd:attribute name="styleClass" type="LinkStyleClass"/>
      <!-- Boolean expression which, if false, completely hides the widget. -->
      <xsd:attribute name="visible" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- A single Tab in the TabBar -->
  <xsd:element name="Tab">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="AddMenuItem"/>
          <xsd:element ref="AddMenuItemIterator"/>
          <xsd:element ref="MenuItem"/>
          <xsd:element ref="MenuItemDivider"/>
          <xsd:element ref="MenuItemIterator"/>
          <xsd:element ref="MenuItemSetRef"/>
          <xsd:element ref="MenuItemTree"/>
          <xsd:element ref="PickerMenuItem"/>
          <xsd:element ref="SearchItem"/>
        </xsd:choice>
      </xsd:sequence>
      <!-- Action performed by this widget.  By default, this is a Gosu expression.  Other types
           of actions can be specified by using the following prefixes: http: causes the browser
           to follow the specified plain http link https: causes the browser to follow the specified
           plain https link javascript: causes the browser to execute the specified javascript
           logout: logs out of the application -->
      <xsd:attribute name="action" type="xsd:string"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- Boolean expression which, if false, grays out the widget and all its children and
           makes them unclickable -->
      <xsd:attribute name="available" type="xsd:string"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- Confirmation message to show before performing the action -->
      <xsd:attribute name="confirmMessage" type="xsd:string"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- Should be 'true', 'inline' or 'attachment' if the action taken by this widget is to
           download a file. -->
      <xsd:attribute name="download" type="Download"/>
      <!-- If true, instead of showing a hierarchical menu, the widget will show a single menu
           with sub-menus grouped under headers. -->
      <xsd:attribute name="flatten" type="xsd:boolean" default="false"/>
      <!-- An optional boolean expression. If returns true, this widget will not be displayed
           when the action is disabled. Default to true. -->
      <xsd:attribute name="hideIfDisabled" type="xsd:string"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- The name of a .png file, or .svg file, or font glyph. The Widget's iconType determines
           which one. -->
      <xsd:attribute name="icon" type="xsd:string"/>
      <!-- Color of the icon. If not set will default to its font color. -->
      <xsd:attribute name="iconColor" type="xsd:string"/>
      <!-- An enumeration of icon types that determine what the 'icon' property on the widget
           is referring to. -->
      <xsd:attribute name="iconType" type="IconTypeEnum"/>
      <!-- Reference ID of the widget.  This does not have to be globally unique; it only has
           to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <!-- Label to render. -->
      <xsd:attribute name="label" type="xsd:string"/>
      <!-- If this Widget can be placed in a minimized state, this minimizedLabel text will be
           used. Otherwise, the Widget will use its global shortcut key, or icon if available. -->
      <xsd:attribute name="minimizedLabel" type="xsd:string"/>
      <!-- The number of child MenuItems to show in each column.  If not specified, all children
           will be shown in a single column. -->
      <xsd:attribute name="numEntriesPerColumn" type="xsd:integer" default="0"/>
      <!-- Default text answer to the prompt message -->
      <xsd:attribute name="promptDefault" type="xsd:string"/>
      <!-- Question to ask the user before performing the action. The answer is exposed to the
           action as "web.WebUtil.ActionEventParameter". -->
      <xsd:attribute name="promptQuestion" type="xsd:string"/>
      <!-- Keyboard shortcut character in the form of "Q" or "ShiftQ"; the "Alt" key is implicit -->
      <xsd:attribute name="shortcut" type="xsd:string"/>
      <!-- Gosu expression which determines whether or not the confirmation message should be
           shown -->
      <xsd:attribute name="showConfirmMessage" type="xsd:string" default="true"/>
      <!-- An optional attribute, if set, defer sub menu generation until user tries to open
           the menu. DO NOT set this flag unless the sub menu of this widget is very expensive
           to generate. Setting this flag will reduce time to load the page, however require
           fetching additional info from server in the background, when the menu gets opened
           for the first time after page loaded. -->
      <xsd:attribute name="subMenuOnDemand" type="xsd:boolean" default="false"/>
      <!-- Boolean expression which, if false, completely hides the widget and all its children -->
      <xsd:attribute name="visible" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- The set of tabs at the top of the browser window -->
  <xsd:element name="TabBar">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="Variable" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="HiddenLink" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="Tab" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="TabBarLink" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="TabBarLogout" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="TabBarUnsavedWork" minOccurs="0" maxOccurs="1"/>
        </xsd:choice>
      </xsd:sequence>
      <!-- Boolean expression which, if true, hides QuickJump widget in the tab bar. -->
      <xsd:attribute name="hideQuickJump" type="xsd:string"/>
      <!-- (Optional) reference ID of the widget.  This does not have to be globally unique;
           it only has to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string"/>
      <!-- System alert bar, used to display system wide alert messages -->
      <xsd:attribute name="systemAlertBar" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- A hyperlink in the right area of the TabBar -->
  <xsd:element name="TabBarLink">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="AddMenuItem"/>
          <xsd:element ref="AddMenuItemIterator"/>
          <xsd:element ref="MenuItem"/>
          <xsd:element ref="MenuItemDivider"/>
          <xsd:element ref="MenuItemIterator"/>
          <xsd:element ref="MenuItemSetRef"/>
          <xsd:element ref="MenuItemTree"/>
          <xsd:element ref="PickerMenuItem"/>
          <xsd:element ref="SearchItem"/>
        </xsd:choice>
      </xsd:sequence>
      <!-- Action performed by this widget.  By default, this is a Gosu expression.  Other types
           of actions can be specified by using the following prefixes: http: causes the browser
           to follow the specified plain http link https: causes the browser to follow the specified
           plain https link javascript: causes the browser to execute the specified javascript
           logout: logs out of the application -->
      <xsd:attribute name="action" type="xsd:string"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- Boolean expression which, if false, grays out the widget and all its children and
           makes them unclickable -->
      <xsd:attribute name="available" type="xsd:string"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- Confirmation message to show before performing the action -->
      <xsd:attribute name="confirmMessage" type="xsd:string"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- Should be 'true', 'inline' or 'attachment' if the action taken by this widget is to
           download a file. -->
      <xsd:attribute name="download" type="Download"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- The name of a .png file, or .svg file, or font glyph. The Widget's iconType determines
           which one. -->
      <xsd:attribute name="icon" type="xsd:string"/>
      <!-- Color of the icon. If not set will default to its font color. -->
      <xsd:attribute name="iconColor" type="xsd:string"/>
      <!-- An enumeration of icon types that determine what the 'icon' property on the widget
           is referring to. -->
      <xsd:attribute name="iconType" type="IconTypeEnum"/>
      <!-- Reference ID of the widget.  This does not have to be globally unique; it only has
           to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <!-- Label to render. -->
      <xsd:attribute name="label" type="xsd:string"/>
      <!-- Default text answer to the prompt message -->
      <xsd:attribute name="promptDefault" type="xsd:string"/>
      <!-- Question to ask the user before performing the action. The answer is exposed to the
           action as "web.WebUtil.ActionEventParameter". -->
      <xsd:attribute name="promptQuestion" type="xsd:string"/>
      <!-- Keyboard shortcut character in the form of "Q" or "ShiftQ"; the "Alt" key is implicit -->
      <xsd:attribute name="shortcut" type="xsd:string"/>
      <!-- Gosu expression which determines whether or not the confirmation message should be
           shown -->
      <xsd:attribute name="showConfirmMessage" type="xsd:string" default="true"/>
      <!-- Boolean expression which, if false, completely hides the widget and all its children -->
      <xsd:attribute name="visible" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- A special Logout link in the right area of the TabBar -->
  <xsd:element name="TabBarLogout">
    <xsd:complexType>
      <xsd:choice minOccurs="0" maxOccurs="unbounded"/>
      <!-- Action performed by this widget.  By default, this is a Gosu expression.  Other types
           of actions can be specified by using the following prefixes: http: causes the browser
           to follow the specified plain http link https: causes the browser to follow the specified
           plain https link javascript: causes the browser to execute the specified javascript
           logout: logs out of the application -->
      <xsd:attribute name="action" type="xsd:string"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- Boolean expression which, if false, grays out the widget and all its children and
           makes them unclickable -->
      <xsd:attribute name="available" type="xsd:string"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- Confirmation message to show before performing the action -->
      <xsd:attribute name="confirmMessage" type="xsd:string"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- Should be 'true', 'inline' or 'attachment' if the action taken by this widget is to
           download a file. -->
      <xsd:attribute name="download" type="Download"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- Reference ID of the widget.  This does not have to be globally unique; it only has
           to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <!-- Label to render. -->
      <xsd:attribute name="label" type="xsd:string"/>
      <!-- Default text answer to the prompt message -->
      <xsd:attribute name="promptDefault" type="xsd:string"/>
      <!-- Question to ask the user before performing the action. The answer is exposed to the
           action as "web.WebUtil.ActionEventParameter". -->
      <xsd:attribute name="promptQuestion" type="xsd:string"/>
      <!-- Keyboard shortcut character in the form of "Q" or "ShiftQ"; the "Alt" key is implicit -->
      <xsd:attribute name="shortcut" type="xsd:string"/>
      <!-- Gosu expression which determines whether or not the confirmation message should be
           shown -->
      <xsd:attribute name="showConfirmMessage" type="xsd:string" default="true"/>
      <!-- Boolean expression which, if false, completely hides the widget and all its children -->
      <xsd:attribute name="visible" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- Tab bar link leads to unsaved work -->
  <xsd:element name="TabBarUnsavedWork">
    <xsd:complexType>
      <xsd:choice minOccurs="0" maxOccurs="unbounded"/>
      <!-- id of the widget. Must be unique among the siblings -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <!-- Boolean expression which, if false, completely hides the widget and all its children -->
      <xsd:attribute name="visible" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- A panel that renders readonly content based on a Gosu block. This element is typically
       used to aggregate external content inside a Guidewire page. The content of this Panel
       is rendered inside an enclosing HTML page, therefore it should not start with "<HTML>...". -->
  <xsd:element name="TemplatePanel">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="ReferencedWidget" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element ref="TemplatePanelContents" minOccurs="0" maxOccurs="1"/>
      </xsd:sequence>
      <!-- A handler object whose 'action' method will be invoked if the template's client side
           calls the gw.api.submitTemplateAction function, passing in this template's id and
           a JSON object as arguments. The JSON from the client will be given as the argument
           to the 'action' method. The 'action' method is called as part of a normal Pebbles
           request; all input values are sent to the server, variables are refreshed (if marked
           as 'recalculateOnRefresh') and the UI is re-rendered. The 'action' method can do anything
           a normal menu or button action can do, including navigating to other pages. -->
      <xsd:attribute name="actionHandler" type="xsd:string"/>
      <!-- If true, the Widget will have a border around it. Purely a visual effect. -->
      <xsd:attribute name="border" type="xsd:boolean" default="false"/>
      <!-- If true, independent of 'panel inner spacing', the container will left indent its
           children by a fixed amount. This is useful for displaying nested data throughout a
           page. Purely a visual effect. -->
      <xsd:attribute name="leftIndent" type="xsd:boolean" default="false"/>
      <!-- The style of the Panel. In general, this refers to the background color, but some
           styles can change other aspects such as font color, spacing, or filters. -->
      <xsd:attribute name="panelStyle" type="xsd:string"/>
      <!-- A method call to write output to the provided writer.  Usually renders a Gosu template,
           e.g. MyTemplate.render(__writer, __escaper, other args).  This attribute has access
           to a symbol named __writer of type java.io.Writer (used to capture the template output),
           a symbol named __escaper of type gw.lang.parser.template.StringEscaper (used to escape
           values embedded in the template) and a symbol named __helper of type gw.api.web.template.TemplatePanelHelper
           (useful for calling nested templates) plus String arguments for each of the ReferencedWidgets
           for this panel.  The call can also access variables and functions defined in the same
           PCF file.  Either renderCall can be specified or the body of the template can be non-empty,
           but not both. -->
      <xsd:attribute name="renderCall" type="xsd:string"/>
      <!-- A handler object whose 'update' method will be invoked if the template's client side
           calls the gw.api.updateTemplate function, passing in this template's id and a JSON
           object as arguments. The JSON from the client will be given as the argument to the
           'update' method and the JSON returned by the 'update' method will be returned to the
           client. The 'update' method is not called as part of a normal Pebbles request; no
           input values will be saved or variables refreshed. Any client side state that is needed
           by the 'update' method must be explicitly passed in the JSON. The 'update' method
           must not attempt to navigate elsewhere, it should just return updated data to the
           client -->
      <xsd:attribute name="updateHandler" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- A wrapper element that contains the contents of a TemplatePanel.  The content are
       rendered inside an enclosing HTML page, therefore they should not start with "<HTML>...". -->
  <xsd:element name="TemplatePanelContents">
    <xsd:complexType>
      <xsd:simpleContent>
        <xsd:extension base="xsd:string"/>
      </xsd:simpleContent>
    </xsd:complexType>
  </xsd:element>
  
  <!-- A panel that renders content inside of a Tile based on a Gosu block. This element
       is typically used to aggregate external content inside a Guidewire page. The content
       of this Panel is rendered inside an enclosing HTML page, therefore it should not start
       with HTML tag. -->
  <xsd:element name="TemplateTile">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="Require" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="Variable" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:choice>
        <xsd:element ref="TemplatePanelContents" minOccurs="0" maxOccurs="1"/>
        <xsd:element ref="TileActions" minOccurs="0" maxOccurs="1"/>
      </xsd:sequence>
      <!-- A handler object whose 'action' method will be invoked if the template's client side
           calls the gw.api.submitTemplateAction function, passing in this template's id and
           a JSON object as arguments. The JSON from the client will be given as the argument
           to the 'action' method. The 'action' method is called as part of a normal Pebbles
           request; all input values are sent to the server, variables are refreshed (if marked
           as 'recalculateOnRefresh') and the UI is re-rendered. The 'action' method can do anything
           a normal menu or button action can do, including navigating to other pages. -->
      <xsd:attribute name="actionHandler" type="xsd:string"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- Reference ID of the widget.  This does not have to be globally unique; it only has
           to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <!-- A method call to write output to the provided writer.  Usually renders a Gosu template,
           e.g. MyTemplate.render(__writer, __escaper, other args).  This attribute has access
           to a symbol named __writer of type java.io.Writer (used to capture the template output),
           a symbol named __escaper of type gw.lang.parser.template.StringEscaper (used to escape
           values embedded in the template) and a symbol named __helper of type gw.api.web.template.TemplatePanelHelper
           (useful for calling nested templates) plus String arguments for each of the ReferencedWidgets
           for this panel.  The call can also access variables and functions defined in the same
           PCF file.  Either renderCall can be specified or the body of the template can be non-empty,
           but not both. -->
      <xsd:attribute name="renderCall" type="xsd:string"/>
      <!-- The title of the tile.  The title is shown on the top of the tile. -->
      <xsd:attribute name="title" type="xsd:string" use="required"/>
      <!-- A handler object whose 'update' method will be invoked if the template's client side
           calls the gw.api.updateTemplate function, passing in this template's id and a JSON
           object as arguments. The JSON from the client will be given as the argument to the
           'update' method and the JSON returned by the 'update' method will be returned to the
           client. The 'update' method is not called as part of a normal Pebbles request; no
           input values will be saved or variables refreshed. Any client side state that is needed
           by the 'update' method must be explicitly passed in the JSON. The 'update' method
           must not attempt to navigate elsewhere, it should just return updated data to the
           client -->
      <xsd:attribute name="updateHandler" type="xsd:string"/>
      <!-- The view more action.  The 'View more' link is shown in the tile footer. -->
      <xsd:attribute name="viewMoreAction" type="xsd:string"/>
      <!-- The view more label of the tile.  By default 'View More' -->
      <xsd:attribute name="viewMoreLabel" type="xsd:string" default="DisplayKey.get(&quot;Web.Tile.ViewMore&quot;)"/>
      <!-- An expression that indicates if the view more link is visible. -->
      <xsd:attribute name="viewMoreVisible" type="xsd:string"/>
      <!-- Boolean expression which, if false, completely hides the widget and all its children -->
      <xsd:attribute name="visible" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- A ListView cell containing a multi-line text area -->
  <xsd:element name="TextAreaCell">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="Reflect" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element ref="ColumnFooter" minOccurs="0" maxOccurs="1"/>
        <xsd:element ref="PostOnChange" minOccurs="0" maxOccurs="1"/>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="AddMenuItem"/>
          <xsd:element ref="AddMenuItemIterator"/>
          <xsd:element ref="MenuItem"/>
          <xsd:element ref="MenuItemDivider"/>
          <xsd:element ref="MenuItemIterator"/>
          <xsd:element ref="MenuItemSetRef"/>
          <xsd:element ref="MenuItemTree"/>
          <xsd:element ref="PickerMenuItem"/>
          <xsd:element ref="SearchItem"/>
        </xsd:choice>
      </xsd:sequence>
      <!-- An optional action to take when the user clicks the value of this widget when the
           value is not being edited. See ActionBase for details. When specified, the value of
           this widget will be rendered as a link when the value is not being edited. -->
      <xsd:attribute name="action" type="xsd:string"/>
      <!-- An optional boolean expression controlling whether the action should be available
           in this specific context when in read-only mode.  This is ignored if in edit mode
           or if the action is null.  This attribute will be deprecated in a future release,
           please use the 'available' attribute instead.  To disable action in readonly mode,
           you can set available=&quot;CurrentLocation.InEditMode || &lt;action-available-condition&gt;&quot; -->
      <xsd:attribute name="actionAvailable" type="xsd:string"/>
      <!-- Specifies the alignment of this cell. Valid values: "left", "right", or "center".
           If no value is specified, the default alignment is determined by the value type ("center"
           for boolean values; "right" for numeric values; "left" for other value types). -->
      <xsd:attribute name="align" type="WidgetAlignment"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- Optional. Expression that returns an gw.api.contact.AutocompleteHandler which produces
           auto complete suggestions for this widget. USE WITH CAUTION: If specified, the handler
           will be called at server side on each user key stroke. -->
      <xsd:attribute name="autoComplete" type="xsd:string"/>
      <!-- An optional attribute to specify additional arguments to pass to the "autoComplete"
           handler, if exists.
         (You don't need to specify the id of this widget as part
           of this attribute, because the value of this widget
         is passed to the handler
           by default; If the id of this widget is specified, the argument value passed to the

                   handler will be null, since the value of this widget has not been fully specified
           when the handler is invoked.)
         Refers to the "id" attribute of other value
           widget on page. Multiple ids can be separated by ",".
         If specified, the latest
           value of these widgets will be passed to the autoComplete handler
         when retrieving
           auto complete info. -->
      <xsd:attribute name="autoCompleteArgIds" type="xsd:string"/>
      <!-- If specified, delays autocomplete functionality until the user has entered the specified
           number of characters. -->
      <xsd:attribute name="autoCompleteTriggerChars" type="xsd:integer"/>
      <!-- Boolean expression which, if false, grays out the widget and all its children -->
      <xsd:attribute name="available" type="xsd:string"/>
      <!-- If true, renders the cell contents in bold text. Defaults to false. -->
      <xsd:attribute name="bold" type="xsd:boolean" default="false"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- The HTML colspan attribute, lets this cell span across multiple columns of other rows.
           Useful for generating a "group header" row above a RowIterator. The default value
           is 1. A value greater than 1 is only allowed when the containing row is not iterated
           by a RowIterator. -->
      <xsd:attribute name="colspan" type="xsd:integer"/>
      <!-- The confirmation message to show when "showConfirmMessage" is set. If not specified,
           a standard message will be used. -->
      <xsd:attribute name="confirmMessage" type="xsd:string"/>
      <!-- A Gosu expression used to convert the value picked from a popup before set it into
           the model value of this widget. The picked value will be exposed as a symbol with
           the name "PickedValue" -->
      <xsd:attribute name="conversionExpression" type="xsd:string"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- Boolean expression which, if false, makes this widget and all its children read-only -->
      <xsd:attribute name="editable" type="xsd:string" default="false"/>
      <!-- If true, enables html markup in the autocomplete suggestions for this text input by
           means of the following special tags: [i]italic[/i] - makes text italic, [b]bold[/b]
           - makes text bold and [hl]highlighted[/hl] - highlights the text -->
      <xsd:attribute name="enableAutoCompleteMarkup" type="xsd:boolean" default="false"/>
      <!-- If true, allows the user to sort the values in the column by clicking on the header.
            Only applicable when the containing row is iterated by a RowIterator. -->
      <xsd:attribute name="enableSort" type="xsd:boolean" default="true"/>
      <!-- If true, this cell will the last cell in the row to be navigated to via the ENTER
           key. Only applicable when "CellNavOnEnter" or "QuickAddOnEnter" is set. Normally not
           specified. Default to false. -->
      <xsd:attribute name="endOfCellNav" type="xsd:boolean" default="false"/>
      <!-- If true, instead of showing a hierarchical menu, the widget will show a single menu
           with sub-menus grouped under headers. -->
      <xsd:attribute name="flatten" type="xsd:boolean" default="false"/>
      <!-- An optional boolean expression, if returns true, this widget will get focus when start
           editing the containing location. -->
      <xsd:attribute name="focusOnStartEditing" type="xsd:string"/>
      <!-- An expression that returns a GWColor instance. Legacy: this method can instead return
           a string corresponding to a CSS Specification Level 3 color name. See GWColor for
           more details. -->
      <xsd:attribute name="fontColor" type="xsd:string"/>
      <!-- An optional expression. If specified, a footer cell with the specified value will
           be rendered for this column. Only applicable when the containing Row is iterated by
           a RowIterator. Not allowed when "footerSumValue" is specified. -->
      <xsd:attribute name="footerLabel" type="xsd:string"/>
      <!-- An optional expression, if specified, will be used as format pattern for the footer
           sum value. Normally not specified, so that the "format" and\or "formatType" of the
           cell value will be applied to footer sum value. Only applicable when "footerSumValue"
           is specified. The result of this expression must conform to the number format defined
           in java.text.DecimalFormat. -->
      <xsd:attribute name="footerSumFormat" type="xsd:string"/>
      <!-- An optional Numeric expression. If specified, a footer cell that sums the specified
           value for all cells in this column will be rendered. Pagination of the list does not
           affect the sum value. Only applicable when the containing row is iterated by a RowIterator.
           Not allowed when "footerLabel" is specified. -->
      <xsd:attribute name="footerSumValue" type="xsd:string"/>
      <!-- An optional expression that returns a format pattern, which must conform to the number
           format defined in java.text.DecimalFormat. When the underlying data type is not a
           Number, only the prefix and suffix of the pattern will be applied. For example, "#.#%"
           formats the Number value as percentage with up to 1 decimal digit. -->
      <xsd:attribute name="format" type="xsd:string"/>
      <!-- How the value is formatted; options include "general", "currency", and "email".  See
           the formatType enumeration. -->
      <xsd:attribute name="formatType" type="FormatType"/>
      <!-- If true, the ListView will be grouped by this cell upon entering the page. Only one
           grouped cell is allowed at any given time and it is only applicable when the column
           is sortable. -->
      <xsd:attribute name="groupedOnEnter" type="xsd:string"/>
      <!-- If true, this Cell and any other grow-enabled Cell will expand to fill remaining space
           in the ListViewPanel. Only applicable when the ListView is set to stretch. -->
      <xsd:attribute name="grow" type="xsd:boolean" default="false"/>
      <!-- If true, generates a checkbox at the beginning of this cell. This checkbox can be
           used to check this entry in the nearest containing Iterator. Defaults to false. Only
           allowed if this cell is inside a CellIterator or under a Row inside a RowIterator. -->
      <xsd:attribute name="hasCheckBox" type="xsd:boolean" default="false"/>
      <!-- CSS height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="height" type="xsd:string"/>
      <!-- A Gosu expression which, if defined, is evaluated to create help info that guides
           the user to edit this widget. The help info will show up if the user hovers the mouse
           over or focuses on the widget, when the widget is in edit mode. -->
      <xsd:attribute name="helpText" type="xsd:string"/>
      <!-- If false, menu items under this input will be shown even when the input is not editable. -->
      <xsd:attribute name="hideChildrenIfReadOnly" type="xsd:boolean" default="true"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- Refers to an image file. If defined, makes this an icon cell. The "value" attribute
           should be a boolean expression describing whether the icon is visible in a given row. -->
      <xsd:attribute name="icon" type="xsd:string"/>
      <!-- Color of the icon. If not set will default to its font color. -->
      <xsd:attribute name="iconColor" type="xsd:string"/>
      <!-- The ALT text for any icon generated in the content cells -->
      <xsd:attribute name="iconLabel" type="xsd:string"/>
      <!-- An enumeration of icon types that determine what the 'icon' property on the widget
           is referring to. -->
      <xsd:attribute name="iconType" type="IconTypeEnum"/>
      <!-- Reference ID of the widget.  This does not have to be globally unique; it only has
           to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <!-- A Gosu expression that converts the presentation value to a model value. The presentation
           value string is exposed to this expression as the symbol "VALUE". -->
      <xsd:attribute name="inputConversion" type="xsd:string"/>
      <!-- A gosu expression that returns a string to use as the input mask. If not specified,
           the input mask (if any) specified on the value's field validator will be used. This
           field should only be necessary in cases where the data type has no mask or where the
           mask needs to be conditional. The input mask returned should be of the same format
           as a mask specified using the input-mask attribute on a field validator (use # for
           wildcards). A mask that contains no wildcards will just be used as a placeholder value.
           The input mask is recalculated on every render, which means that if the mask is conditional
           and dependent on other data on this page that it can change from one request to the
           next. -->
      <xsd:attribute name="inputMask" type="xsd:string"/>
      <!-- An optional expression. If specified, a header cell with the specified value will
           be rendered for this column. Only applicable when the containing row is iterated by
           a RowIterator. -->
      <xsd:attribute name="label" type="xsd:string"/>
      <!-- Custom extension CSS style class to apply to the header. -->
      <xsd:attribute name="labelStyleClass" type="xsd:string"/>
      <!-- The maximum number of characters allowed for an input field. -->
      <xsd:attribute name="maxChars" type="xsd:integer" default="0"/>
      <!-- CSS max-height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="maxHeight" type="xsd:string"/>
      <!-- CSS max-width value. Can be `px`, or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="maxWidth" type="xsd:string"/>
      <!-- CSS min-height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="minHeight" type="xsd:string"/>
      <!-- CSS min-width value. Can be `px`, or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="minWidth" type="xsd:string"/>
      <!-- Integer that determines the max number of entries to show for a comma-separated text
           cell. Shows "..." at the end -->
      <xsd:attribute name="numEntries" type="xsd:integer" default="-1"/>
      <!-- The number of child MenuItems to show in each column.  If not specified, all children
           will be shown in a single column. -->
      <xsd:attribute name="numEntriesPerColumn" type="xsd:integer" default="0"/>
      <!-- If greater than 0, represents roughly the number of rows of text displayed in the
           text area in edit mode, and the maximum rows in read only mode. Otherwise edit mode
           will be a set to sensible default. -->
      <xsd:attribute name="numRows" type="xsd:integer"/>
      <!-- Gosu expression to be executed after the value is set from a picker. -->
      <xsd:attribute name="onPick" type="xsd:string"/>
      <!-- A Gosu expression that converts the model value to a presentation value. The model
           value is exposed to this expression as the symbol "VALUE". The return type of this
           expression must be String. -->
      <xsd:attribute name="outputConversion" type="xsd:string"/>
      <!-- Relative width when printing to PDF. All widths are relative to the widths of the
           other columns in the ListView -->
      <xsd:attribute name="printWidth" type="xsd:string" default="1"/>
      <!-- A Gosu expression that returns a regular expression string to validate the user input.
            If not specified, the regular expression (if any) specified on the value's field
           validator will be used.  This field should only be necessary in cases where the data
           type has no regular expression or where it needs to be conditional. The value returned
           should be of the same format as a regular expression specified on a field validator.
            This property is recalculated on every render, which means that if the regular expression
           is conditional and dependent on other data on this page that it can change from one
           request to the next. -->
      <xsd:attribute name="regex" type="xsd:string"/>
      <!-- A Gosu expression used to validate user value before setting it to the model. This
           expression can access any symbols available to this widget, and a "VALUE" symbol that
           represents the user value. If this expression returns null, the user value will be
           set into the model. Otherwise, an error message containing the result of the expression
           will be displayed on the page, the value will not be set into the model, and no actions
           can be performed until the error is corrected. -->
      <xsd:attribute name="requestValidationExpression" type="xsd:string"/>
      <!-- If true, then the cell must be filled out by the user -->
      <xsd:attribute name="required" type="xsd:string"/>
      <!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * Deprecated.
           DO NOT USE.                                           * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
           Consider using "onChange/onPick/inputConversion/outputConversion" where available.
           If specified and the Input is editable, then any new value of the Input is written
           to this expression (Gosu by default) instead of to "value".  The new value is exposed
           as the symbol "VALUE".  For instance if your value expression is "Foo.getSomething()"
           then it can't be written to since it's not an L-value; so you could specify a setter
           expression along the lines of "Foo.setSomething(VALUE)" Warning: if you use this attribute
           many pebbles features will not work, including but not limited to: * Correct automatic
           detection of the state of the updated data * Correct automatic detection of the editability
           of the data * Correct automatic detection of the maximum size of a text input -->
      <xsd:attribute name="setter" type="xsd:string"/>
      <!-- Boolean expression which determines whether or not to show a confirmation message
           when the field value is changed directly from the UI. It's NOT applicable when the
           value is changed indirectly, for example, as a result of client reflection. -->
      <xsd:attribute name="showConfirmMessage" type="xsd:string"/>
      <!-- If true, shows the icon defined by "icon" in the header cell for this column. The
           default value is true. -->
      <xsd:attribute name="showHeaderIcon" type="xsd:boolean" default="true"/>
      <!-- An optional comma-separated sequence of Expressions, each of which is assumed to be
           a dot-delimited path, the value by which this column will be sorted if the user clicks
           on the header cell. -->
      <xsd:attribute name="sortBy" type="xsd:string"/>
      <!-- Either "ascending" or "descending" -->
      <xsd:attribute name="sortDirection" type="WidgetSortDirection" default="ascending"/>
      <!-- The priority of sorting relative to other sorting elements like IteratorSort and Cell.
           The lower the number, the higher the priority.  The highest priority is "1" -->
      <xsd:attribute name="sortOrder" type="xsd:integer" default="0"/>
      <!-- CSS style class for the cell content; for instance, "miniButton" makes a link appear
           as a small button -->
      <xsd:attribute name="styleClass" type="LinkStyleClass"/>
      <!-- An optional attribute, if set, defer sub menu generation until user tries to open
           the menu. DO NOT set this flag unless the sub menu of this widget is very expensive
           to generate. Setting this flag will reduce time to load the page, however require
           fetching additional info from server in the background, when the menu gets opened
           for the first time after page loaded. -->
      <xsd:attribute name="subMenuOnDemand" type="xsd:boolean" default="false"/>
      <!-- Extra "alt" text to show when the user hovers the mouse over the header cell of this
           column. -->
      <xsd:attribute name="tooltip" type="xsd:string"/>
      <!-- If true, validate before commit that the value of this column is unique across all
           rows in the current page. Only meaningful when this column is editable. -->
      <xsd:attribute name="unique" type="xsd:boolean" default="false"/>
      <!-- If set to a type other than 'all', will prevent the user from inputting certain types
           of characters on the client on a per character basis. Defaults to 'defaultForType'.
           Can be used in conjunction with the Input Mask property. For instance, a US phone
           number client mask could be implemented by setting this property to 'numeric' and
           the input mask to '+1(###)###-####. Some value widgets, like passwords or dates, may
           modify or ignore this property. This property has no effect on server or database
           level validation of data or input; meaning, an authenticated user could choose to
           manually submit a form with invalid data that would bypass this check. For database
           level validation see the 'regex' property. -->
      <xsd:attribute name="userInputRestriction" type="InputRestrictionType" default="defaultForType"/>
      <!-- A Gosu expression to run before committing the record. This expression can refer to
           any symbols available to this widget. If this expression returns null, the validation
           is considered successful; otherwise, the result of this expression will be displayed
           as an error and the record will not be committed. -->
      <xsd:attribute name="validationExpression" type="xsd:string"/>
      <!-- The label of this cell to be used when it has validation issues. Not needed when this
           cell has a "label". Required if the cell is editable but does not have a "label". -->
      <xsd:attribute name="validationLabel" type="xsd:string"/>
      <!-- The value this element binds to.  If the element is editable then this value is both
           read from and written to (unless "setter" is defined). -->
      <xsd:attribute name="value" type="xsd:string"/>
      <!-- The type of the value expression. -->
      <xsd:attribute name="valueType" type="xsd:string" default="java.lang.String"/>
      <!-- Boolean expression which, if false, hides the <i>contents</i> of the cell (its "ValueWidget"),
           but not the cell itself.  Needed since hiding the actual cell usually screws up the
           layout -->
      <xsd:attribute name="valueVisible" type="xsd:string"/>
      <!-- Specifies the vertical alignment of this cell. Valid values: "top", "middle", or "bottom".
           If no value is specified, the default alignment is determined by the cell type ("top"
           for Text Areas and Format Cells, "middle" for buttons and icons). -->
      <xsd:attribute name="verticalAlign" type="WidgetVerticalAlignment"/>
      <!-- Boolean expression which, if false, completely hides the widget and all its children -->
      <xsd:attribute name="visible" type="xsd:string"/>
      <!-- CSS width value. Can be `px`, or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="width" type="xsd:string"/>
      <!-- If default, defers to FormatType to decide whether to wrap or not.  If true, allows
           cell content to wrap. -->
      <xsd:attribute name="wrap" type="WrapType" default="default"/>
      <!-- If true, allows Header Cell text content to wrap. Defaults to true. -->
      <xsd:attribute name="wrapLabel" type="xsd:boolean" default="false"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- An Input with extra attributes for text areas -->
  <xsd:element name="TextAreaInput">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="LayoutConfig" minOccurs="0" maxOccurs="1"/>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="AddMenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="AddMenuItemIterator" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemDivider" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemIterator" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemSetRef" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemTree" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PickerMenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PostOnChange" minOccurs="0" maxOccurs="1"/>
          <xsd:element ref="Reflect" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="SearchItem" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:choice>
      </xsd:sequence>
      <!-- An optional action to take when the user clicks the value of this widget when the
           value is not being edited. See ActionBase for list of available action prefixes. When
           specified, the value of this widget will be rendered as a link when the value is not
           being edited. -->
      <xsd:attribute name="action" type="xsd:string"/>
      <!-- An optional boolean expression controlling whether the action should be available
           in this specific context when in read-only mode.  This is ignored if in edit mode
           or if the action is null.  This attribute will be deprecated in a future release,
           please use the 'available' attribute instead.  To disable action in readonly mode,
           you can set available=&quot;CurrentLocation.InEditMode || &lt;action-available-condition&gt;&quot; -->
      <xsd:attribute name="actionAvailable" type="xsd:string"/>
      <!-- Alignment of the widget ("left", "right", or "center") -->
      <xsd:attribute name="align" type="WidgetAlignment"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- Optional. Expression that returns an gw.api.contact.AutocompleteHandler which produces
           auto complete suggestions for this widget. USE WITH CAUTION: If specified, the handler
           will be called at server side on each user key stroke. -->
      <xsd:attribute name="autoComplete" type="xsd:string"/>
      <!-- An optional attribute to specify additional arguments to pass to the "autoComplete"
           handler, if exists.
         (You don't need to specify the id of this widget as part
           of this attribute, because the value of this widget
         is passed to the handler
           by default; If the id of this widget is specified, the argument value passed to the

                   handler will be null, since the value of this widget has not been fully specified
           when the handler is invoked.)
         Refers to the "id" attribute of other value
           widget on page. Multiple ids can be separated by ",".
         If specified, the latest
           value of these widgets will be passed to the autoComplete handler
         when retrieving
           auto complete info. -->
      <xsd:attribute name="autoCompleteArgIds" type="xsd:string"/>
      <!-- If specified, delays autocomplete functionality until the user has entered the specified
           number of characters. -->
      <xsd:attribute name="autoCompleteTriggerChars" type="xsd:integer"/>
      <!-- Boolean expression which, if false, grays out the widget and all its children -->
      <xsd:attribute name="available" type="xsd:string"/>
      <!-- If true then the label is displayed in bold text. -->
      <xsd:attribute name="boldLabel" type="xsd:boolean" default="false"/>
      <!-- If true then the value is displayed in bold text when read-only. -->
      <xsd:attribute name="boldValue" type="xsd:boolean" default="false"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- The confirmation message to show when "showConfirmMessage" is set. If not specified,
           a standard message will be used. -->
      <xsd:attribute name="confirmMessage" type="xsd:string"/>
      <!-- A Gosu expression used to convert the value picked from a popup before set it into
           the model value of this widget. The picked value will be exposed as a symbol with
           the name "PickedValue" -->
      <xsd:attribute name="conversionExpression" type="xsd:string"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- Boolean expression which, if false, makes this widget and all its children read-only -->
      <xsd:attribute name="editable" type="xsd:string" default="false"/>
      <!-- If true, enables html markup in the autocomplete suggestions for this text input by
           means of the following special tags: [i]italic[/i] - makes text italic, [b]bold[/b]
           - makes text bold and [hl]highlighted[/hl] - highlights the text -->
      <xsd:attribute name="enableAutoCompleteMarkup" type="xsd:boolean" default="false"/>
      <!-- If true, instead of showing a hierarchical menu, the widget will show a single menu
           with sub-menus grouped under headers. -->
      <xsd:attribute name="flatten" type="xsd:boolean" default="false"/>
      <!-- An optional boolean expression, if returns true, this widget will get focus when start
           editing the containing location. -->
      <xsd:attribute name="focusOnStartEditing" type="xsd:string"/>
      <!-- An optional expression that returns a format pattern, which must conform to the number
           format defined in java.text.DecimalFormat. When the underlying data type is not a
           Number, only the prefix and suffix of the pattern will be applied. For example, "#.#%"
           formats the Number value as percentage with up to 1 decimal digit. -->
      <xsd:attribute name="format" type="xsd:string"/>
      <!-- How the value is formatted; options include "general", "currency", and "email".  See
           the formatType enumeration. -->
      <xsd:attribute name="formatType" type="FormatType"/>
      <!-- A Gosu expression which, if defined, is evaluated to create help info that guides
           the user to edit this widget. The help info will show up if the user hovers the mouse
           over or focuses on the widget, when the widget is in edit mode. -->
      <xsd:attribute name="helpText" type="xsd:string"/>
      <!-- If false, menu items under this input will be shown even when the input is not editable. -->
      <xsd:attribute name="hideChildrenIfReadOnly" type="xsd:boolean" default="true"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- Reference ID of the widget.  This does not have to be globally unique; it only has
           to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <!-- A Gosu expression that converts the presentation value to a model value. The presentation
           value string is exposed to this expression as the symbol "VALUE". -->
      <xsd:attribute name="inputConversion" type="xsd:string"/>
      <!-- A gosu expression that returns a string to use as the input mask. If not specified,
           the input mask (if any) specified on the value's field validator will be used. This
           field should only be necessary in cases where the data type has no mask or where the
           mask needs to be conditional. The input mask returned should be of the same format
           as a mask specified using the input-mask attribute on a field validator (use # for
           wildcards). A mask that contains no wildcards will just be used as a placeholder value.
           The input mask is recalculated on every render, which means that if the mask is conditional
           and dependent on other data on this page that it can change from one request to the
           next. -->
      <xsd:attribute name="inputMask" type="xsd:string"/>
      <!-- Label to render. -->
      <xsd:attribute name="label" type="xsd:string"/>
      <!-- Boolean expression which, if true, causes the label portion of the Input to be rendered
           above the value -->
      <xsd:attribute name="labelAbove" type="xsd:string" default="false"/>
      <!-- Custom extension CSS style class to apply to the label. -->
      <xsd:attribute name="labelStyleClass" type="xsd:string"/>
      <!-- The maximum number of characters allowed for an input field. -->
      <xsd:attribute name="maxChars" type="xsd:integer" default="0"/>
      <!-- The number of child MenuItems to show in each column.  If not specified, all children
           will be shown in a single column. -->
      <xsd:attribute name="numEntriesPerColumn" type="xsd:integer" default="0"/>
      <!-- If greater than 0, represents roughly the number of rows of text displayed in the
           text area. Otherwise will be a set to sensible default. -->
      <xsd:attribute name="numRows" type="xsd:integer"/>
      <!-- Gosu expression to be executed after the value is set from a picker. -->
      <xsd:attribute name="onPick" type="xsd:string"/>
      <!-- A Gosu expression that converts the model value to a presentation value. The model
           value is exposed to this expression as the symbol "VALUE". The return type of this
           expression must be String. -->
      <xsd:attribute name="outputConversion" type="xsd:string"/>
      <!-- A Gosu expression that returns a regular expression string to validate the user input.
            If not specified, the regular expression (if any) specified on the value's field
           validator will be used.  This field should only be necessary in cases where the data
           type has no regular expression or where it needs to be conditional. The value returned
           should be of the same format as a regular expression specified on a field validator.
            This property is recalculated on every render, which means that if the regular expression
           is conditional and dependent on other data on this page that it can change from one
           request to the next. -->
      <xsd:attribute name="regex" type="xsd:string"/>
      <!-- A Gosu expression used to validate user value before setting it to the model. This
           expression can access any symbols available to this widget, and a "VALUE" symbol that
           represents the user value. If this expression returns null, the user value will be
           set into the model. Otherwise, an error message containing the result of the expression
           will be displayed on the page, the value will not be set into the model, and no actions
           can be performed until the error is corrected. -->
      <xsd:attribute name="requestValidationExpression" type="xsd:string"/>
      <!-- If true, then the cell must be filled out by the user -->
      <xsd:attribute name="required" type="xsd:string"/>
      <!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * Deprecated.
           DO NOT USE.                                           * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
           Consider using "onChange/onPick/inputConversion/outputConversion" where available.
           If specified and the Input is editable, then any new value of the Input is written
           to this expression (Gosu by default) instead of to "value".  The new value is exposed
           as the symbol "VALUE".  For instance if your value expression is "Foo.getSomething()"
           then it can't be written to since it's not an L-value; so you could specify a setter
           expression along the lines of "Foo.setSomething(VALUE)" Warning: if you use this attribute
           many pebbles features will not work, including but not limited to: * Correct automatic
           detection of the state of the updated data * Correct automatic detection of the editability
           of the data * Correct automatic detection of the maximum size of a text input -->
      <xsd:attribute name="setter" type="xsd:string"/>
      <!-- Optional keyboard shortcut character in the form of "Q" or "ShiftQ"; the "Alt" key
           is implicit. This is only applicable when this widget has an "action" specified and
           the value is not being edited. -->
      <xsd:attribute name="shortcut" type="xsd:string"/>
      <!-- Boolean expression which determines whether or not to show a confirmation message
           when the field value is changed directly from the UI. It's NOT applicable when the
           value is changed indirectly, for example, as a result of client reflection. -->
      <xsd:attribute name="showConfirmMessage" type="xsd:string"/>
      <!-- An optional attribute, if set, defer sub menu generation until user tries to open
           the menu. DO NOT set this flag unless the sub menu of this widget is very expensive
           to generate. Setting this flag will reduce time to load the page, however require
           fetching additional info from server in the background, when the menu gets opened
           for the first time after page loaded. -->
      <xsd:attribute name="subMenuOnDemand" type="xsd:boolean" default="false"/>
      <!-- If set to a type other than 'all', will prevent the user from inputting certain types
           of characters on the client on a per character basis. Defaults to 'defaultForType'.
           Can be used in conjunction with the Input Mask property. For instance, a US phone
           number client mask could be implemented by setting this property to 'numeric' and
           the input mask to '+1(###)###-####. Some value widgets, like passwords or dates, may
           modify or ignore this property. This property has no effect on server or database
           level validation of data or input; meaning, an authenticated user could choose to
           manually submit a form with invalid data that would bypass this check. For database
           level validation see the 'regex' property. -->
      <xsd:attribute name="userInputRestriction" type="InputRestrictionType" default="defaultForType"/>
      <!-- A Gosu expression to run before committing the record. This expression can refer to
           any symbols available to this widget. If this expression returns null, the validation
           is considered successful; otherwise, the result of this expression will be displayed
           as an error and the record will not be committed. -->
      <xsd:attribute name="validationExpression" type="xsd:string"/>
      <!-- The value this Input binds to as an Expression.  If the Input is editable then this
           value is both read from and written to (unless "setter" is defined). -->
      <xsd:attribute name="value" type="xsd:string" use="required"/>
      <!-- CSS max-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionMaxWidth" type="xsd:string"/>
      <!-- CSS min-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionMinWidth" type="xsd:string"/>
      <!-- CSS width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionWidth" type="xsd:string"/>
      <!-- The type of the value expression. -->
      <xsd:attribute name="valueType" type="xsd:string" default="java.lang.String"/>
      <!-- If used instead of "editable", specifies whether the Input is editable when data is
           being created -->
      <xsd:attribute name="visible" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- A ListView cell with extra attributes for text field -->
  <xsd:element name="TextCell">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="Reflect" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element ref="ColumnFooter" minOccurs="0" maxOccurs="1"/>
        <xsd:element ref="PostOnChange" minOccurs="0" maxOccurs="1"/>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="AddMenuItem"/>
          <xsd:element ref="AddMenuItemIterator"/>
          <xsd:element ref="MenuItem"/>
          <xsd:element ref="MenuItemDivider"/>
          <xsd:element ref="MenuItemIterator"/>
          <xsd:element ref="MenuItemSetRef"/>
          <xsd:element ref="MenuItemTree"/>
          <xsd:element ref="PickerMenuItem"/>
          <xsd:element ref="SearchItem"/>
        </xsd:choice>
      </xsd:sequence>
      <!-- An optional action to take when the user clicks the value of this widget when the
           value is not being edited. See ActionBase for details. When specified, the value of
           this widget will be rendered as a link when the value is not being edited. -->
      <xsd:attribute name="action" type="xsd:string"/>
      <!-- An optional boolean expression controlling whether the action should be available
           in this specific context when in read-only mode.  This is ignored if in edit mode
           or if the action is null.  This attribute will be deprecated in a future release,
           please use the 'available' attribute instead.  To disable action in readonly mode,
           you can set available=&quot;CurrentLocation.InEditMode || &lt;action-available-condition&gt;&quot; -->
      <xsd:attribute name="actionAvailable" type="xsd:string"/>
      <!-- Specifies the alignment of this cell. Valid values: "left", "right", or "center".
           If no value is specified, the default alignment is determined by the value type ("center"
           for boolean values; "right" for numeric values; "left" for other value types). -->
      <xsd:attribute name="align" type="WidgetAlignment"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- Optional. Expression that returns an gw.api.contact.AutocompleteHandler which produces
           auto complete suggestions for this widget. USE WITH CAUTION: If specified, the handler
           will be called at server side on each user key stroke. -->
      <xsd:attribute name="autoComplete" type="xsd:string"/>
      <!-- An optional attribute to specify additional arguments to pass to the "autoComplete"
           handler, if exists.
         (You don't need to specify the id of this widget as part
           of this attribute, because the value of this widget
         is passed to the handler
           by default; If the id of this widget is specified, the argument value passed to the

                   handler will be null, since the value of this widget has not been fully specified
           when the handler is invoked.)
         Refers to the "id" attribute of other value
           widget on page. Multiple ids can be separated by ",".
         If specified, the latest
           value of these widgets will be passed to the autoComplete handler
         when retrieving
           auto complete info. -->
      <xsd:attribute name="autoCompleteArgIds" type="xsd:string"/>
      <!-- If specified, delays autocomplete functionality until the user has entered the specified
           number of characters. -->
      <xsd:attribute name="autoCompleteTriggerChars" type="xsd:integer"/>
      <!-- Boolean expression which, if false, grays out the widget and all its children -->
      <xsd:attribute name="available" type="xsd:string"/>
      <!-- If true, renders the cell contents in bold text. Defaults to false. -->
      <xsd:attribute name="bold" type="xsd:boolean" default="false"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- The HTML colspan attribute, lets this cell span across multiple columns of other rows.
           Useful for generating a "group header" row above a RowIterator. The default value
           is 1. A value greater than 1 is only allowed when the containing row is not iterated
           by a RowIterator. -->
      <xsd:attribute name="colspan" type="xsd:integer"/>
      <!-- The confirmation message to show when "showConfirmMessage" is set. If not specified,
           a standard message will be used. -->
      <xsd:attribute name="confirmMessage" type="xsd:string"/>
      <!-- A Gosu expression used to convert the value picked from a popup before set it into
           the model value of this widget. The picked value will be exposed as a symbol with
           the name "PickedValue" -->
      <xsd:attribute name="conversionExpression" type="xsd:string"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- Boolean expression which, if false, makes this widget and all its children read-only -->
      <xsd:attribute name="editable" type="xsd:string" default="false"/>
      <!-- If true, enables html markup in the autocomplete suggestions for this text input by
           means of the following special tags: [i]italic[/i] - makes text italic, [b]bold[/b]
           - makes text bold and [hl]highlighted[/hl] - highlights the text -->
      <xsd:attribute name="enableAutoCompleteMarkup" type="xsd:boolean" default="false"/>
      <!-- If true, allows the user to sort the values in the column by clicking on the header.
            Only applicable when the containing row is iterated by a RowIterator. -->
      <xsd:attribute name="enableSort" type="xsd:boolean" default="true"/>
      <!-- If true, this cell will the last cell in the row to be navigated to via the ENTER
           key. Only applicable when "CellNavOnEnter" or "QuickAddOnEnter" is set. Normally not
           specified. Default to false. -->
      <xsd:attribute name="endOfCellNav" type="xsd:boolean" default="false"/>
      <!-- If true, instead of showing a hierarchical menu, the widget will show a single menu
           with sub-menus grouped under headers. -->
      <xsd:attribute name="flatten" type="xsd:boolean" default="false"/>
      <!-- An optional boolean expression, if returns true, this widget will get focus when start
           editing the containing location. -->
      <xsd:attribute name="focusOnStartEditing" type="xsd:string"/>
      <!-- An expression that returns a GWColor instance. Legacy: this method can instead return
           a string corresponding to a CSS Specification Level 3 color name. See GWColor for
           more details. -->
      <xsd:attribute name="fontColor" type="xsd:string"/>
      <!-- An optional expression. If specified, a footer cell with the specified value will
           be rendered for this column. Only applicable when the containing Row is iterated by
           a RowIterator. Not allowed when "footerSumValue" is specified. -->
      <xsd:attribute name="footerLabel" type="xsd:string"/>
      <!-- An optional expression, if specified, will be used as format pattern for the footer
           sum value. Normally not specified, so that the "format" and\or "formatType" of the
           cell value will be applied to footer sum value. Only applicable when "footerSumValue"
           is specified. The result of this expression must conform to the number format defined
           in java.text.DecimalFormat. -->
      <xsd:attribute name="footerSumFormat" type="xsd:string"/>
      <!-- An optional Numeric expression. If specified, a footer cell that sums the specified
           value for all cells in this column will be rendered. Pagination of the list does not
           affect the sum value. Only applicable when the containing row is iterated by a RowIterator.
           Not allowed when "footerLabel" is specified. -->
      <xsd:attribute name="footerSumValue" type="xsd:string"/>
      <!-- An optional expression that returns a format pattern, which must conform to the number
           format defined in java.text.DecimalFormat. When the underlying data type is not a
           Number, only the prefix and suffix of the pattern will be applied. For example, "#.#%"
           formats the Number value as percentage with up to 1 decimal digit. -->
      <xsd:attribute name="format" type="xsd:string"/>
      <!-- How the value is formatted; options include "general", "currency", and "email".  See
           the formatType enumeration. -->
      <xsd:attribute name="formatType" type="FormatType"/>
      <!-- If true, the ListView will be grouped by this cell upon entering the page. Only one
           grouped cell is allowed at any given time and it is only applicable when the column
           is sortable. -->
      <xsd:attribute name="groupedOnEnter" type="xsd:string"/>
      <!-- If true, this Cell and any other grow-enabled Cell will expand to fill remaining space
           in the ListViewPanel. Only applicable when the ListView is set to stretch. -->
      <xsd:attribute name="grow" type="xsd:boolean" default="false"/>
      <!-- If true, generates a checkbox at the beginning of this cell. This checkbox can be
           used to check this entry in the nearest containing Iterator. Defaults to false. Only
           allowed if this cell is inside a CellIterator or under a Row inside a RowIterator. -->
      <xsd:attribute name="hasCheckBox" type="xsd:boolean" default="false"/>
      <!-- CSS height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="height" type="xsd:string"/>
      <!-- A Gosu expression which, if defined, is evaluated to create help info that guides
           the user to edit this widget. The help info will show up if the user hovers the mouse
           over or focuses on the widget, when the widget is in edit mode. -->
      <xsd:attribute name="helpText" type="xsd:string"/>
      <!-- If false, menu items under this input will be shown even when the input is not editable. -->
      <xsd:attribute name="hideChildrenIfReadOnly" type="xsd:boolean" default="true"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- Refers to an image file. If defined, makes this an icon cell. The "value" attribute
           should be a boolean expression describing whether the icon is visible in a given row. -->
      <xsd:attribute name="icon" type="xsd:string"/>
      <!-- Color of the icon. If not set will default to its font color. -->
      <xsd:attribute name="iconColor" type="xsd:string"/>
      <!-- The ALT text for any icon generated in the content cells -->
      <xsd:attribute name="iconLabel" type="xsd:string"/>
      <!-- An enumeration of icon types that determine what the 'icon' property on the widget
           is referring to. -->
      <xsd:attribute name="iconType" type="IconTypeEnum"/>
      <!-- Reference ID of the widget.  This does not have to be globally unique; it only has
           to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <!-- A Gosu expression that converts the presentation value to a model value. The presentation
           value string is exposed to this expression as the symbol "VALUE". -->
      <xsd:attribute name="inputConversion" type="xsd:string"/>
      <!-- A gosu expression that returns a string to use as the input mask. If not specified,
           the input mask (if any) specified on the value's field validator will be used. This
           field should only be necessary in cases where the data type has no mask or where the
           mask needs to be conditional. The input mask returned should be of the same format
           as a mask specified using the input-mask attribute on a field validator (use # for
           wildcards). A mask that contains no wildcards will just be used as a placeholder value.
           The input mask is recalculated on every render, which means that if the mask is conditional
           and dependent on other data on this page that it can change from one request to the
           next. -->
      <xsd:attribute name="inputMask" type="xsd:string"/>
      <!-- An optional expression. If specified, a header cell with the specified value will
           be rendered for this column. Only applicable when the containing row is iterated by
           a RowIterator. -->
      <xsd:attribute name="label" type="xsd:string"/>
      <!-- Custom extension CSS style class to apply to the header. -->
      <xsd:attribute name="labelStyleClass" type="xsd:string"/>
      <!-- The maximum number of characters allowed for an input field. -->
      <xsd:attribute name="maxChars" type="xsd:integer" default="0"/>
      <!-- CSS max-height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="maxHeight" type="xsd:string"/>
      <!-- CSS max-width value. Can be `px`, or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="maxWidth" type="xsd:string"/>
      <!-- CSS min-height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="minHeight" type="xsd:string"/>
      <!-- CSS min-width value. Can be `px`, or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="minWidth" type="xsd:string"/>
      <!-- Integer that determines the max number of entries to show for a comma-separated text
           cell. Shows "..." at the end -->
      <xsd:attribute name="numEntries" type="xsd:integer" default="-1"/>
      <!-- The number of child MenuItems to show in each column.  If not specified, all children
           will be shown in a single column. -->
      <xsd:attribute name="numEntriesPerColumn" type="xsd:integer" default="0"/>
      <!-- Gosu expression to be executed after the value is set from a picker. -->
      <xsd:attribute name="onPick" type="xsd:string"/>
      <!-- A Gosu expression that converts the model value to a presentation value. The model
           value is exposed to this expression as the symbol "VALUE". The return type of this
           expression must be String. -->
      <xsd:attribute name="outputConversion" type="xsd:string"/>
      <!-- Relative width when printing to PDF. All widths are relative to the widths of the
           other columns in the ListView -->
      <xsd:attribute name="printWidth" type="xsd:string" default="1"/>
      <!-- A Gosu expression that returns a regular expression string to validate the user input.
            If not specified, the regular expression (if any) specified on the value's field
           validator will be used.  This field should only be necessary in cases where the data
           type has no regular expression or where it needs to be conditional. The value returned
           should be of the same format as a regular expression specified on a field validator.
            This property is recalculated on every render, which means that if the regular expression
           is conditional and dependent on other data on this page that it can change from one
           request to the next. -->
      <xsd:attribute name="regex" type="xsd:string"/>
      <!-- A Gosu expression used to validate user value before setting it to the model. This
           expression can access any symbols available to this widget, and a "VALUE" symbol that
           represents the user value. If this expression returns null, the user value will be
           set into the model. Otherwise, an error message containing the result of the expression
           will be displayed on the page, the value will not be set into the model, and no actions
           can be performed until the error is corrected. -->
      <xsd:attribute name="requestValidationExpression" type="xsd:string"/>
      <!-- If true, then the cell must be filled out by the user -->
      <xsd:attribute name="required" type="xsd:string"/>
      <!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * Deprecated.
           DO NOT USE.                                           * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
           Consider using "onChange/onPick/inputConversion/outputConversion" where available.
           If specified and the Input is editable, then any new value of the Input is written
           to this expression (Gosu by default) instead of to "value".  The new value is exposed
           as the symbol "VALUE".  For instance if your value expression is "Foo.getSomething()"
           then it can't be written to since it's not an L-value; so you could specify a setter
           expression along the lines of "Foo.setSomething(VALUE)" Warning: if you use this attribute
           many pebbles features will not work, including but not limited to: * Correct automatic
           detection of the state of the updated data * Correct automatic detection of the editability
           of the data * Correct automatic detection of the maximum size of a text input -->
      <xsd:attribute name="setter" type="xsd:string"/>
      <!-- Boolean expression which determines whether or not to show a confirmation message
           when the field value is changed directly from the UI. It's NOT applicable when the
           value is changed indirectly, for example, as a result of client reflection. -->
      <xsd:attribute name="showConfirmMessage" type="xsd:string"/>
      <!-- If true, shows the icon defined by "icon" in the header cell for this column. The
           default value is true. -->
      <xsd:attribute name="showHeaderIcon" type="xsd:boolean" default="true"/>
      <!-- An optional comma-separated sequence of Expressions, each of which is assumed to be
           a dot-delimited path, the value by which this column will be sorted if the user clicks
           on the header cell. -->
      <xsd:attribute name="sortBy" type="xsd:string"/>
      <!-- Either "ascending" or "descending" -->
      <xsd:attribute name="sortDirection" type="WidgetSortDirection" default="ascending"/>
      <!-- The priority of sorting relative to other sorting elements like IteratorSort and Cell.
           The lower the number, the higher the priority.  The highest priority is "1" -->
      <xsd:attribute name="sortOrder" type="xsd:integer" default="0"/>
      <!-- CSS style class for the cell content; for instance, "miniButton" makes a link appear
           as a small button -->
      <xsd:attribute name="styleClass" type="LinkStyleClass"/>
      <!-- An optional attribute, if set, defer sub menu generation until user tries to open
           the menu. DO NOT set this flag unless the sub menu of this widget is very expensive
           to generate. Setting this flag will reduce time to load the page, however require
           fetching additional info from server in the background, when the menu gets opened
           for the first time after page loaded. -->
      <xsd:attribute name="subMenuOnDemand" type="xsd:boolean" default="false"/>
      <!-- Extra "alt" text to show when the user hovers the mouse over the header cell of this
           column. -->
      <xsd:attribute name="tooltip" type="xsd:string"/>
      <!-- If true, validate before commit that the value of this column is unique across all
           rows in the current page. Only meaningful when this column is editable. -->
      <xsd:attribute name="unique" type="xsd:boolean" default="false"/>
      <!-- If set to a type other than 'all', will prevent the user from inputting certain types
           of characters on the client on a per character basis. Defaults to 'defaultForType'.
           Can be used in conjunction with the Input Mask property. For instance, a US phone
           number client mask could be implemented by setting this property to 'numeric' and
           the input mask to '+1(###)###-####. Some value widgets, like passwords or dates, may
           modify or ignore this property. This property has no effect on server or database
           level validation of data or input; meaning, an authenticated user could choose to
           manually submit a form with invalid data that would bypass this check. For database
           level validation see the 'regex' property. -->
      <xsd:attribute name="userInputRestriction" type="InputRestrictionType" default="defaultForType"/>
      <!-- A Gosu expression to run before committing the record. This expression can refer to
           any symbols available to this widget. If this expression returns null, the validation
           is considered successful; otherwise, the result of this expression will be displayed
           as an error and the record will not be committed. -->
      <xsd:attribute name="validationExpression" type="xsd:string"/>
      <!-- The label of this cell to be used when it has validation issues. Not needed when this
           cell has a "label". Required if the cell is editable but does not have a "label". -->
      <xsd:attribute name="validationLabel" type="xsd:string"/>
      <!-- The value this element binds to.  If the element is editable then this value is both
           read from and written to (unless "setter" is defined). -->
      <xsd:attribute name="value" type="xsd:string"/>
      <!-- The type of the value expression. -->
      <xsd:attribute name="valueType" type="xsd:string" default="java.lang.String"/>
      <!-- Boolean expression which, if false, hides the <i>contents</i> of the cell (its "ValueWidget"),
           but not the cell itself.  Needed since hiding the actual cell usually screws up the
           layout -->
      <xsd:attribute name="valueVisible" type="xsd:string"/>
      <!-- Specifies the vertical alignment of this cell. Valid values: "top", "middle", or "bottom".
           If no value is specified, the default alignment is determined by the cell type ("top"
           for Text Areas and Format Cells, "middle" for buttons and icons). -->
      <xsd:attribute name="verticalAlign" type="WidgetVerticalAlignment"/>
      <!-- Boolean expression which, if false, completely hides the widget and all its children -->
      <xsd:attribute name="visible" type="xsd:string"/>
      <!-- CSS width value. Can be `px`, or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="width" type="xsd:string"/>
      <!-- If default, defers to FormatType to decide whether to wrap or not.  If true, allows
           cell content to wrap. -->
      <xsd:attribute name="wrap" type="WrapType" default="default"/>
      <!-- If true, allows Header Cell text content to wrap. Defaults to true. -->
      <xsd:attribute name="wrapLabel" type="xsd:boolean" default="false"/>
    </xsd:complexType>
  </xsd:element>
  
  <xsd:element name="TextInput">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="LayoutConfig" minOccurs="0" maxOccurs="1"/>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="AddMenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="AddMenuItemIterator" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemDivider" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemIterator" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemSetRef" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemTree" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PickerMenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PostOnChange" minOccurs="0" maxOccurs="1"/>
          <xsd:element ref="Reflect" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="SearchItem" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:choice>
      </xsd:sequence>
      <!-- An optional action to take when the user clicks the value of this widget when the
           value is not being edited. See ActionBase for list of available action prefixes. When
           specified, the value of this widget will be rendered as a link when the value is not
           being edited. -->
      <xsd:attribute name="action" type="xsd:string"/>
      <!-- An optional boolean expression controlling whether the action should be available
           in this specific context when in read-only mode.  This is ignored if in edit mode
           or if the action is null.  This attribute will be deprecated in a future release,
           please use the 'available' attribute instead.  To disable action in readonly mode,
           you can set available=&quot;CurrentLocation.InEditMode || &lt;action-available-condition&gt;&quot; -->
      <xsd:attribute name="actionAvailable" type="xsd:string"/>
      <!-- Alignment of the widget ("left", "right", or "center") -->
      <xsd:attribute name="align" type="WidgetAlignment"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- Optional. Expression that returns an gw.api.contact.AutocompleteHandler which produces
           auto complete suggestions for this widget. USE WITH CAUTION: If specified, the handler
           will be called at server side on each user key stroke. -->
      <xsd:attribute name="autoComplete" type="xsd:string"/>
      <!-- An optional attribute to specify additional arguments to pass to the "autoComplete"
           handler, if exists.
         (You don't need to specify the id of this widget as part
           of this attribute, because the value of this widget
         is passed to the handler
           by default; If the id of this widget is specified, the argument value passed to the

                   handler will be null, since the value of this widget has not been fully specified
           when the handler is invoked.)
         Refers to the "id" attribute of other value
           widget on page. Multiple ids can be separated by ",".
         If specified, the latest
           value of these widgets will be passed to the autoComplete handler
         when retrieving
           auto complete info. -->
      <xsd:attribute name="autoCompleteArgIds" type="xsd:string"/>
      <!-- If specified, delays autocomplete functionality until the user has entered the specified
           number of characters. -->
      <xsd:attribute name="autoCompleteTriggerChars" type="xsd:integer"/>
      <!-- Boolean expression which, if false, grays out the widget and all its children -->
      <xsd:attribute name="available" type="xsd:string"/>
      <!-- If true then the label is displayed in bold text. -->
      <xsd:attribute name="boldLabel" type="xsd:boolean" default="false"/>
      <!-- If true then the value is displayed in bold text when read-only. -->
      <xsd:attribute name="boldValue" type="xsd:boolean" default="false"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- The confirmation message to show when "showConfirmMessage" is set. If not specified,
           a standard message will be used. -->
      <xsd:attribute name="confirmMessage" type="xsd:string"/>
      <!-- A Gosu expression used to convert the value picked from a popup before set it into
           the model value of this widget. The picked value will be exposed as a symbol with
           the name "PickedValue" -->
      <xsd:attribute name="conversionExpression" type="xsd:string"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- Boolean expression which, if false, makes this widget and all its children read-only -->
      <xsd:attribute name="editable" type="xsd:string" default="false"/>
      <!-- If true, enables html markup in the autocomplete suggestions for this text input by
           means of the following special tags: [i]italic[/i] - makes text italic, [b]bold[/b]
           - makes text bold and [hl]highlighted[/hl] - highlights the text -->
      <xsd:attribute name="enableAutoCompleteMarkup" type="xsd:boolean" default="false"/>
      <!-- If true, instead of showing a hierarchical menu, the widget will show a single menu
           with sub-menus grouped under headers. -->
      <xsd:attribute name="flatten" type="xsd:boolean" default="false"/>
      <!-- An optional boolean expression, if returns true, this widget will get focus when start
           editing the containing location. -->
      <xsd:attribute name="focusOnStartEditing" type="xsd:string"/>
      <!-- An optional expression that returns a format pattern, which must conform to the number
           format defined in java.text.DecimalFormat. When the underlying data type is not a
           Number, only the prefix and suffix of the pattern will be applied. For example, "#.#%"
           formats the Number value as percentage with up to 1 decimal digit. -->
      <xsd:attribute name="format" type="xsd:string"/>
      <!-- How the value is formatted; options include "general", "currency", and "email".  See
           the formatType enumeration. -->
      <xsd:attribute name="formatType" type="FormatType"/>
      <!-- A Gosu expression which, if defined, is evaluated to create help info that guides
           the user to edit this widget. The help info will show up if the user hovers the mouse
           over or focuses on the widget, when the widget is in edit mode. -->
      <xsd:attribute name="helpText" type="xsd:string"/>
      <!-- If false, menu items under this input will be shown even when the input is not editable. -->
      <xsd:attribute name="hideChildrenIfReadOnly" type="xsd:boolean" default="true"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- Reference ID of the widget.  This does not have to be globally unique; it only has
           to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <!-- A Gosu expression that converts the presentation value to a model value. The presentation
           value string is exposed to this expression as the symbol "VALUE". -->
      <xsd:attribute name="inputConversion" type="xsd:string"/>
      <!-- A gosu expression that returns a string to use as the input mask. If not specified,
           the input mask (if any) specified on the value's field validator will be used. This
           field should only be necessary in cases where the data type has no mask or where the
           mask needs to be conditional. The input mask returned should be of the same format
           as a mask specified using the input-mask attribute on a field validator (use # for
           wildcards). A mask that contains no wildcards will just be used as a placeholder value.
           The input mask is recalculated on every render, which means that if the mask is conditional
           and dependent on other data on this page that it can change from one request to the
           next. -->
      <xsd:attribute name="inputMask" type="xsd:string"/>
      <!-- Label to render. -->
      <xsd:attribute name="label" type="xsd:string"/>
      <!-- Boolean expression which, if true, causes the label portion of the Input to be rendered
           above the value -->
      <xsd:attribute name="labelAbove" type="xsd:string" default="false"/>
      <!-- Custom extension CSS style class to apply to the label. -->
      <xsd:attribute name="labelStyleClass" type="xsd:string"/>
      <!-- The maximum number of characters allowed for an input field. -->
      <xsd:attribute name="maxChars" type="xsd:integer" default="0"/>
      <!-- The number of child MenuItems to show in each column.  If not specified, all children
           will be shown in a single column. -->
      <xsd:attribute name="numEntriesPerColumn" type="xsd:integer" default="0"/>
      <!-- Gosu expression to be executed after the value is set from a picker. -->
      <xsd:attribute name="onPick" type="xsd:string"/>
      <!-- A Gosu expression that converts the model value to a presentation value. The model
           value is exposed to this expression as the symbol "VALUE". The return type of this
           expression must be String. -->
      <xsd:attribute name="outputConversion" type="xsd:string"/>
      <!-- A Gosu expression that returns a regular expression string to validate the user input.
            If not specified, the regular expression (if any) specified on the value's field
           validator will be used.  This field should only be necessary in cases where the data
           type has no regular expression or where it needs to be conditional. The value returned
           should be of the same format as a regular expression specified on a field validator.
            This property is recalculated on every render, which means that if the regular expression
           is conditional and dependent on other data on this page that it can change from one
           request to the next. -->
      <xsd:attribute name="regex" type="xsd:string"/>
      <!-- A Gosu expression used to validate user value before setting it to the model. This
           expression can access any symbols available to this widget, and a "VALUE" symbol that
           represents the user value. If this expression returns null, the user value will be
           set into the model. Otherwise, an error message containing the result of the expression
           will be displayed on the page, the value will not be set into the model, and no actions
           can be performed until the error is corrected. -->
      <xsd:attribute name="requestValidationExpression" type="xsd:string"/>
      <!-- If true, then the cell must be filled out by the user -->
      <xsd:attribute name="required" type="xsd:string"/>
      <!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * Deprecated.
           DO NOT USE.                                           * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
           Consider using "onChange/onPick/inputConversion/outputConversion" where available.
           If specified and the Input is editable, then any new value of the Input is written
           to this expression (Gosu by default) instead of to "value".  The new value is exposed
           as the symbol "VALUE".  For instance if your value expression is "Foo.getSomething()"
           then it can't be written to since it's not an L-value; so you could specify a setter
           expression along the lines of "Foo.setSomething(VALUE)" Warning: if you use this attribute
           many pebbles features will not work, including but not limited to: * Correct automatic
           detection of the state of the updated data * Correct automatic detection of the editability
           of the data * Correct automatic detection of the maximum size of a text input -->
      <xsd:attribute name="setter" type="xsd:string"/>
      <!-- Optional keyboard shortcut character in the form of "Q" or "ShiftQ"; the "Alt" key
           is implicit. This is only applicable when this widget has an "action" specified and
           the value is not being edited. -->
      <xsd:attribute name="shortcut" type="xsd:string"/>
      <!-- Boolean expression which determines whether or not to show a confirmation message
           when the field value is changed directly from the UI. It's NOT applicable when the
           value is changed indirectly, for example, as a result of client reflection. -->
      <xsd:attribute name="showConfirmMessage" type="xsd:string"/>
      <!-- An optional attribute, if set, defer sub menu generation until user tries to open
           the menu. DO NOT set this flag unless the sub menu of this widget is very expensive
           to generate. Setting this flag will reduce time to load the page, however require
           fetching additional info from server in the background, when the menu gets opened
           for the first time after page loaded. -->
      <xsd:attribute name="subMenuOnDemand" type="xsd:boolean" default="false"/>
      <!-- If set to a type other than 'all', will prevent the user from inputting certain types
           of characters on the client on a per character basis. Defaults to 'defaultForType'.
           Can be used in conjunction with the Input Mask property. For instance, a US phone
           number client mask could be implemented by setting this property to 'numeric' and
           the input mask to '+1(###)###-####. Some value widgets, like passwords or dates, may
           modify or ignore this property. This property has no effect on server or database
           level validation of data or input; meaning, an authenticated user could choose to
           manually submit a form with invalid data that would bypass this check. For database
           level validation see the 'regex' property. -->
      <xsd:attribute name="userInputRestriction" type="InputRestrictionType" default="defaultForType"/>
      <!-- A Gosu expression to run before committing the record. This expression can refer to
           any symbols available to this widget. If this expression returns null, the validation
           is considered successful; otherwise, the result of this expression will be displayed
           as an error and the record will not be committed. -->
      <xsd:attribute name="validationExpression" type="xsd:string"/>
      <!-- The value this Input binds to as an Expression.  If the Input is editable then this
           value is both read from and written to (unless "setter" is defined). -->
      <xsd:attribute name="value" type="xsd:string" use="required"/>
      <!-- CSS max-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionMaxWidth" type="xsd:string"/>
      <!-- CSS min-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionMinWidth" type="xsd:string"/>
      <!-- CSS width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionWidth" type="xsd:string"/>
      <!-- The type of the value expression. -->
      <xsd:attribute name="valueType" type="xsd:string" default="java.lang.String"/>
      <!-- If used instead of "editable", specifies whether the Input is editable when data is
           being created -->
      <xsd:attribute name="visible" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- Can be used on the TileActions as a static Action widget or as part of TileActionIterator. -->
  <xsd:element name="TileAction">
    <xsd:complexType>
      <xsd:choice minOccurs="0" maxOccurs="unbounded"/>
      <!-- Action performed by this widget.  By default, this is a Gosu expression.  Other types
           of actions can be specified by using the following prefixes: http: causes the browser
           to follow the specified plain http link https: causes the browser to follow the specified
           plain https link javascript: causes the browser to execute the specified javascript
           logout: logs out of the application -->
      <xsd:attribute name="action" type="xsd:string" use="required"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- Boolean expression which, if false, grays out the widget and all its children and
           makes them unclickable -->
      <xsd:attribute name="available" type="xsd:string"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- (Optional) reference ID of the widget.  This does not have to be globally unique;
           it only has to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string"/>
      <!-- Label to render. -->
      <xsd:attribute name="label" type="xsd:string" use="required"/>
      <!-- Boolean expression which, if false, completely hides the widget and all its children -->
      <xsd:attribute name="visible" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- Iterates over items in the array referenced by "value" to create TileActions.  -->
  <xsd:element name="TileActionIterator">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:choice minOccurs="1" maxOccurs="unbounded">
          <xsd:element ref="TileAction"/>
          <xsd:element ref="TileActionIterator"/>
        </xsd:choice>
      </xsd:sequence>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- As each element in the array result of "value" is displayed, it is exposed as a symbol
           with the name "elementName", which the contents of this iterator can refer to -->
      <xsd:attribute name="elementName" type="xsd:string" use="required"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- (Optional) reference ID of the widget.  This does not have to be globally unique;
           it only has to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string"/>
      <!-- A Gosu expression that evaluates to the elements over which to iterate. Must evaluate
           to list, an Object array or a IQueryBeanResult. -->
      <xsd:attribute name="value" type="xsd:string" use="required"/>
      <!-- The type of the value expression. -->
      <xsd:attribute name="valueType" type="xsd:string" use="required"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- Wrapper for TileActions. Can contain static TileActions or/and TileActionIterator
       to generate TileActions based on an array. -->
  <xsd:element name="TileActions">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="TileAction" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="TileActionIterator" minOccurs="0" maxOccurs="1"/>
        </xsd:choice>
      </xsd:sequence>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- If there is two or more items defined in "Tile Actions " tab this label will be displayed
           on dropdown button. If value is not specified it will display "Actions" as label -->
      <xsd:attribute name="dropdownButtonLabel" type="xsd:string"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- (Optional) reference ID of the widget.  This does not have to be globally unique;
           it only has to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- A version of ChartPanel that can be used in a ChartTile. -->
  <xsd:element name="TileChartPanel">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="Require" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="Variable" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:choice>
        <xsd:element ref="DomainAxis" minOccurs="0" maxOccurs="1"/>
        <xsd:element ref="RangeAxis" minOccurs="0" maxOccurs="1"/>
        <xsd:element ref="DataSeries" minOccurs="1" maxOccurs="unbounded"/>
        <xsd:element ref="DualAxisDataSeries" minOccurs="0" maxOccurs="1"/>
        <xsd:element ref="Code" minOccurs="0" maxOccurs="1"/>
      </xsd:sequence>
      <!-- If true, chart series' visibility can be toggled on and off by clicking on it or on
           the corresponding legend entry -->
      <xsd:attribute name="allowSeriesToggling" type="xsd:boolean" default="true"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- If true, displays a legend with a title for each data series. Default to true -->
      <xsd:attribute name="displayLegend" type="xsd:boolean" default="true"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- (Optional) reference ID of the widget.  This does not have to be globally unique;
           it only has to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string"/>
      <!-- One of the enumerated chart types -->
      <xsd:attribute name="type" type="ChartType" use="required"/>
      <!-- Boolean expression which, if false, completely hides the widget and all its children -->
      <xsd:attribute name="visible" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- A single vertical column in the DetailViewTile. Similar to InputColumn, but with limitations
       on allowed content. -->
  <xsd:element name="TileInputColumn">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="BarInput"/>
          <xsd:element ref="CurrencyInput"/>
          <xsd:element ref="DateInput"/>
          <xsd:element ref="InputDivider"/>
          <xsd:element ref="Label"/>
          <xsd:element ref="MonetaryAmountInput"/>
          <xsd:element ref="PrivacyInput"/>
          <xsd:element ref="TextAreaInput"/>
          <xsd:element ref="TextInput"/>
          <xsd:element ref="TileInputSetRef"/>
        </xsd:choice>
      </xsd:sequence>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- (Optional) reference ID of the widget.  This does not have to be globally unique;
           it only has to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string"/>
      <!-- CSS width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           If defined, explicitly sets the label width for the tile input column. -->
      <xsd:attribute name="labelWidth" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- A reusable set of Tile Inputs -->
  <xsd:element name="TileInputSet">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="Expose" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ExposeIterator" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ExposeRowTree" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ReferencedWidget" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="Require" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="Variable" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:choice>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="BarInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="CurrencyInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="DateInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="InputDivider" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="Label" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MonetaryAmountInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PrivacyInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="TextAreaInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="TextInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="TileInputSet" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="TileInputSetRef" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:choice>
        <xsd:element ref="Code" minOccurs="0" maxOccurs="1"/>
      </xsd:sequence>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- Boolean expression which, if false, makes this widget and all its children read-only -->
      <xsd:attribute name="editable" type="xsd:string"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- (Optional) reference ID of the widget.  This does not have to be globally unique;
           it only has to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string"/>
      <!-- An optional String which, if specified, means that any element dynamically including
           this widget must specify the same mode.  There is also a special mode "default" you
           can use which means "Use this widget if no widget with the specified mode exists".
            You can also have this widget match more than one mode by separating mode strings
           with a | character. -->
      <xsd:attribute name="mode" type="xsd:string"/>
      <!-- Boolean expression which, if false, completely hides the widget and all its children -->
      <xsd:attribute name="visible" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- Includes a TileInputSet by reference. -->
  <xsd:element name="TileInputSetRef">
    <xsd:complexType>
      <xsd:choice minOccurs="0" maxOccurs="unbounded"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- The ID of the InputSet to include by reference. -->
      <xsd:attribute name="def" type="xsd:string" use="required"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- Boolean expression which, if false, makes this widget and all its children read-only -->
      <xsd:attribute name="editable" type="xsd:string"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- (Optional) reference ID of the widget.  This does not have to be globally unique;
           it only has to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string"/>
      <!-- If defined, "mode" is evaluated and its result is converted to a String; the panel
           will be loaded whose "mode" matches the evaluated "mode" of this element.  If no panel
           is found with a matching "mode", then the panel with mode="default" is used; if there
           is no default a runtime exception is thrown -->
      <xsd:attribute name="mode" type="xsd:string"/>
      <!-- Boolean expression which, if false, completely hides the widget and all its children -->
      <xsd:attribute name="visible" type="xsd:string"/>
      <!-- A comma separated list of widgets that are needed by the section. -->
      <xsd:attribute name="widgets" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- Includes a Tile by reference. -->
  <xsd:element name="TileRef">
    <xsd:complexType>
      <xsd:choice minOccurs="0" maxOccurs="unbounded"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- The ID of the Tile to include by reference. -->
      <xsd:attribute name="def" type="xsd:string" use="required"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- (Optional) reference ID of the widget.  This does not have to be globally unique;
           it only has to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string"/>
      <!-- Boolean expression which, if false, completely hides the widget and all its children -->
      <xsd:attribute name="visible" type="xsd:string"/>
      <!-- A comma separated list of widgets that are needed by the section. -->
      <xsd:attribute name="widgets" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- The optional top title bar of the screen, or of a panel within the screen. Normally
       not specified for a screen, therefore allow an implicit title bar to be generated
       for the screen based on the containing Page's title. If not specified for a panel,
       no implicit TitleBar will be generated. -->
  <xsd:element name="TitleBar">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="Badge" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element ref="Link" minOccurs="0" maxOccurs="unbounded"/>
      </xsd:sequence>
      <!-- Action to take when the title is clicked. If specified, the title will be clickable. -->
      <xsd:attribute name="action" type="xsd:string"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- If true, the Widget will have a border around it. Purely a visual effect. -->
      <xsd:attribute name="border" type="xsd:boolean" default="false"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- Changes the visual style for the heading level of the title bar. Defaults to 2. This
           property has no effect when the title bar is fixed to the top of the screen -->
      <xsd:attribute name="headingLevel" type="HeadingLevel" default="2"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- The name of a .png file, or .svg file, or font glyph. The Widget's iconType determines
           which one. -->
      <xsd:attribute name="icon" type="xsd:string"/>
      <!-- Color of the icon. If not set will default to its font color. -->
      <xsd:attribute name="iconColor" type="xsd:string"/>
      <!-- An enumeration of icon types that determine what the 'icon' property on the widget
           is referring to. -->
      <xsd:attribute name="iconType" type="IconTypeEnum"/>
      <!-- (Optional) reference ID of the widget.  This does not have to be globally unique;
           it only has to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string"/>
      <!-- If defined, will add a smaller sub-title after the title. -->
      <xsd:attribute name="subtitle" type="xsd:string"/>
      <!-- The title text to show. -->
      <xsd:attribute name="title" type="xsd:string"/>
      <!-- Boolean expression which, if false, completely hides the widget and all its children -->
      <xsd:attribute name="visible" type="xsd:string" default="true"/>
      <!-- "In general, determines the amount of spacing OUTSIDE of the Widget in all 4 directions:
           top, right, bottom, left. However, different Widgets may have requirements that prevent
           all 4 directions from being modified. -->
      <xsd:attribute name="widgetOuterSpacing" type="WidgetSpacing" default="normal"/>
      <!-- The style of the Widget. In general, this refers to the background color and text
           color, but there are possible additions like cursor changes or filters. -->
      <xsd:attribute name="widgetStyle" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- A horizontal bar containing buttons and other useful widgets. It can be used at the
       top of a Screen or before including a Panel. -->
  <xsd:element name="Toolbar">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="AddButton" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="CheckedValuesToolbarButton" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="EditButtons" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="FileInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="HiddenLink" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="IteratorButtons" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PickerToolbarButton" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="RemoveButton" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="SearchItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ToolbarButton" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ToolbarButtonSetRef" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ToolbarDivider" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ToolbarFilter" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ToolbarInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ToolbarRangeInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="TreeButtons" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="WizardButtons" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:choice>
      </xsd:sequence>
      <!-- If true, and this Toolbar is a child of the Screen, this Toolbar will be placed in
           a fixed position next to the page Title. Defaults to true -->
      <xsd:attribute name="allowTitlePlacement" type="xsd:boolean" default="true"/>
      <!-- Reference ID of the toolbar.  This is optional, and does not have to be globally unique;
           it only has to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string"/>
      <!-- CSS max-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="maxWidth" type="xsd:string"/>
      <!-- CSS min-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="minWidth" type="xsd:string"/>
      <!-- Boolean expression which, if false, completely hides the widget and all its children -->
      <xsd:attribute name="visible" type="xsd:string"/>
      <!-- CSS width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="width" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- A simple button in a toolbar. -->
  <xsd:element name="ToolbarButton">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="AddMenuItem"/>
          <xsd:element ref="AddMenuItemIterator"/>
          <xsd:element ref="MenuItem"/>
          <xsd:element ref="MenuItemDivider"/>
          <xsd:element ref="MenuItemIterator"/>
          <xsd:element ref="MenuItemSetRef"/>
          <xsd:element ref="MenuItemTree"/>
          <xsd:element ref="PickerMenuItem"/>
          <xsd:element ref="SearchItem"/>
        </xsd:choice>
      </xsd:sequence>
      <!-- Action performed by this widget.  By default, this is a Gosu expression.  Other types
           of actions can be specified by using the following prefixes: http: causes the browser
           to follow the specified plain http link https: causes the browser to follow the specified
           plain https link javascript: causes the browser to execute the specified javascript
           logout: logs out of the application -->
      <xsd:attribute name="action" type="xsd:string"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- Boolean expression which, if false, grays out the widget and all its children and
           makes them unclickable -->
      <xsd:attribute name="available" type="xsd:string"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- Confirmation message to show before performing the action -->
      <xsd:attribute name="confirmMessage" type="xsd:string"/>
      <!-- If true, the button is the default for the page, and will be "clicked" when the user
           presses Enter -->
      <xsd:attribute name="default" type="xsd:boolean" default="false"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- Should be 'true', 'inline' or 'attachment' if the action taken by this widget is to
           download a file. -->
      <xsd:attribute name="download" type="Download"/>
      <!-- A very special expression defining what flags (see ToolbarFlag) must be checked for
           the toolbar button to be available (= not grayed out).  All processing of flags happens
           on the browser-side.  The flags syntax is a comma-separated list of <i>predicates</i>
           (with no space after each comma), and all <i>predicates</i> must be satisfied for
           the button to be available.  Each <i>predicate</i> consists of a <i>operator</i> followed
           by a space and then the name of a ToolbarFlag.  For instance, flags="one Foo,no Bar"
           means "only available if there is exactly one Foo checkbox checked and no Bar checkboxes
           checked".  The available <i>operators</i> are: one, two, any, all, no, exists (same
           as any). -->
      <xsd:attribute name="flags" type="xsd:string"/>
      <!-- If true, instead of showing a hierarchical menu, the widget will show a single menu
           with sub-menus grouped under headers. -->
      <xsd:attribute name="flatten" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- The name of a .png file, or .svg file, or font glyph. The Widget's iconType determines
           which one. -->
      <xsd:attribute name="icon" type="xsd:string"/>
      <!-- Color of the icon. If not set will default to its font color. -->
      <xsd:attribute name="iconColor" type="xsd:string"/>
      <!-- An enumeration of icon types that determine what the 'icon' property on the widget
           is referring to. -->
      <xsd:attribute name="iconType" type="IconTypeEnum"/>
      <!-- Reference ID of the widget.  This does not have to be globally unique; it only has
           to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <!-- The id of the iterator/list view widget this button applies to.  If the value is a
           list view then the first iterator widget child is used. -->
      <xsd:attribute name="iterator" type="xsd:string"/>
      <!-- Label to render. -->
      <xsd:attribute name="label" type="xsd:string"/>
      <!-- The number of child MenuItems to show in each column.  If not specified, all children
           will be shown in a single column. -->
      <xsd:attribute name="numEntriesPerColumn" type="xsd:integer" default="0"/>
      <!-- Default text answer to the prompt message -->
      <xsd:attribute name="promptDefault" type="xsd:string"/>
      <!-- Question to ask the user before performing the action. The answer is exposed to the
           action as "web.WebUtil.ActionEventParameter". -->
      <xsd:attribute name="promptQuestion" type="xsd:string"/>
      <!-- If true, the page will scroll back to the original scroll position after the action.
           Should only be set if the action stays on the same page and the page layout does not
           change. Default to false -->
      <xsd:attribute name="retainScrollPosition" type="xsd:boolean" default="false"/>
      <!-- Keyboard shortcut character in the form of "Q" or "ShiftQ"; the "Alt" key is implicit -->
      <xsd:attribute name="shortcut" type="xsd:string"/>
      <!-- Gosu expression which determines whether or not the confirmation message should be
           shown -->
      <xsd:attribute name="showConfirmMessage" type="xsd:string" default="true"/>
      <!-- An optional attribute, if set, defer sub menu generation until user tries to open
           the menu. DO NOT set this flag unless the sub menu of this widget is very expensive
           to generate. Setting this flag will reduce time to load the page, however require
           fetching additional info from server in the background, when the menu gets opened
           for the first time after page loaded. -->
      <xsd:attribute name="subMenuOnDemand" type="xsd:boolean" default="false"/>
      <!-- A Gosu expression which, if defined, is evaluated to create help info if the user
           hovers the mouse over the button -->
      <xsd:attribute name="tooltip" type="xsd:string"/>
      <!-- Boolean expression which, if false, completely hides the widget and all its children -->
      <xsd:attribute name="visible" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- The reusable definition of ToolbarButtons -->
  <xsd:element name="ToolbarButtonSet">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="ReferencedIterator" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ReferencedRowTree" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="Require" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="Variable" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:choice>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="AddButton" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="CheckedValuesToolbarButton" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="EditButtons" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="IteratorButtons" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PickerToolbarButton" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="RemoveButton" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="SearchItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ToolbarButton" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ToolbarButtonSetRef" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ToolbarDivider" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ToolbarRangeInput" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="TreeButtons" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="WizardButtons" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:choice>
        <xsd:element ref="Code" minOccurs="0" maxOccurs="1"/>
      </xsd:sequence>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- (Optional) reference ID of the widget.  This does not have to be globally unique;
           it only has to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string"/>
      <!-- An optional String which, if specified, means that any element dynamically including
           this widget must specify the same mode.  There is also a special mode "default" you
           can use which means "Use this widget if no widget with the specified mode exists".
            You can also have this widget match more than one mode by separating mode strings
           with a | character. -->
      <xsd:attribute name="mode" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- Includes a ToolbarButtonSet in a screen. -->
  <xsd:element name="ToolbarButtonSetRef">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="ToolbarButtonSet" minOccurs="0" maxOccurs="1"/>
      </xsd:sequence>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- Boolean expression which, if false, grays out the widget and all its children -->
      <xsd:attribute name="available" type="xsd:string"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- Boolean expression which, if false, makes this widget and all its children read-only -->
      <xsd:attribute name="editable" type="xsd:string"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- (Optional) reference ID of the widget.  This does not have to be globally unique;
           it only has to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string"/>
      <!-- A comma separated list of iterators that are needed by the toolbar button set.  They
           need to match up with the ReferencedIterators in the toolbar button set -->
      <xsd:attribute name="iterators" type="xsd:string"/>
      <!-- If you are including the ToolbarButtonSet by reference and you define a "mode" expression,
           then "mode" is evaluated and its result is converted to a String; the Def will be
           loaded whose "mode" matches the evaluated "mode" of this element.  If no Def is found
           with a matching "mode", then the Def with mode="default" is used; if there is no default
           a runtime exception is thrown -->
      <xsd:attribute name="mode" type="xsd:string"/>
      <!-- ID of the ToolbarButtonSet to include by reference (should only be used if you are
           not adding the def as a direct child of this element). -->
      <xsd:attribute name="toolbarButtonSet" type="xsd:string"/>
      <!-- Boolean expression which, if false, completely hides the widget and all its children -->
      <xsd:attribute name="visible" type="xsd:string"/>
      <!-- A comma separated list of widgets that are needed by the section. -->
      <xsd:attribute name="widgets" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- Creates a divider inside a toolbar -->
  <xsd:element name="ToolbarDivider">
    <xsd:complexType>
      <xsd:choice minOccurs="0" maxOccurs="unbounded"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- (Optional) reference ID of the widget.  This does not have to be globally unique;
           it only has to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- A filter that operates on IteratorWidgets.  Note that while this <i>appears</i> in
       the Toolbar,it is <i>defined</i> within the ListView. -->
  <xsd:element name="ToolbarFilter">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="ToolbarFilterOption" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="ToolbarFilterOptionGroup" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:choice>
      </xsd:sequence>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- By default, the selected filter option is cached in the user session, so that the
           selection will be remembered even after the user leaves the page and comes back. If
           this attribute is specified, the session cache will be ignored if the result of this
           expression changes since the last visit to this page. -->
      <xsd:attribute name="cacheKey" type="xsd:string"/>
      <!-- If true, only construct the filter options once when enter the page. Default to true.
           Be careful when you set this attribute to false, because it may slow down loading
           the containing page. -->
      <xsd:attribute name="cacheOptions" type="xsd:string" default="true"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- (Optional) reference ID of the widget.  This does not have to be globally unique;
           it only has to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string"/>
      <!-- The id of the iterator widget this filter is applied to.  Only applicable when this
           filter is not a direct child of an iterator widget. -->
      <xsd:attribute name="iterator" type="xsd:string"/>
      <!-- Label to render. -->
      <xsd:attribute name="label" type="xsd:string"/>
      <!-- CSS max-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="maxWidth" type="xsd:string"/>
      <!-- CSS min-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="minWidth" type="xsd:string"/>
      <!-- Logical name of the filter.  This isn't visible, but for caching you need to make
           sure each ToolbarFilter on the page is unique -->
      <xsd:attribute name="name" type="xsd:string" use="required"/>
      <!-- CSS width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="width" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- An option within a ToolbarFilter -->
  <xsd:element name="ToolbarFilterOption">
    <xsd:complexType>
      <xsd:choice minOccurs="0" maxOccurs="unbounded"/>
      <!-- Expression for a filter. Use an existing filter, or define your own using StandardQueryFilter
           or StandardBeanFilter.When using custom backing data, Filters must be of the type
           that the custom backing data requires. -->
      <xsd:attribute name="filter" type="xsd:string"/>
      <!-- The type of the filter expression. -->
      <xsd:attribute name="filterType" type="xsd:string" default="gw.api.filters.IFilter"/>
      <!-- Expression for the display label of this option. -->
      <xsd:attribute name="label" type="xsd:string"/>
      <!-- If true, this option will be the default option when no option has been selected -->
      <xsd:attribute name="selectOnEnter" type="xsd:string"/>
      <!-- Boolean expression which, if false, hides this option -->
      <xsd:attribute name="visible" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- A group of options within a ToolbarFilter -->
  <xsd:element name="ToolbarFilterOptionGroup">
    <xsd:complexType>
      <xsd:choice minOccurs="0" maxOccurs="unbounded"/>
      <!-- The type of the filter expression. -->
      <xsd:attribute name="filterType" type="xsd:string" default="gw.api.filters.IFilter"/>
      <!-- Expression that returns an array of filters. Each can be an already defined filter
           or a StandardQueryFilter or StandardBeanFilter. -->
      <xsd:attribute name="filters" type="xsd:string" use="required"/>
      <!-- Boolean expression which, if false, hides this option -->
      <xsd:attribute name="visible" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- Not used in the Toolbar directly, but put in ListViews and other Iterators to flag
       whether a given ToolbarButton can be used to select that entry.  See the SampleToolbarButtons.pcf
       file in the PX application for many examples. -->
  <xsd:element name="ToolbarFlag">
    <xsd:complexType>
      <xsd:choice minOccurs="0" maxOccurs="unbounded"/>
      <!-- A boolean Expression.  If it is defined the flag will be applied to the entry only
           if it evaluates to true. -->
      <xsd:attribute name="condition" type="xsd:string" default="true"/>
      <!-- The name of the flag, referred to by the "flags" attribute of ToolbarButton -->
      <xsd:attribute name="name" type="xsd:string" use="required"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- An input in a toolbar -->
  <xsd:element name="ToolbarInput">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="LayoutConfig" minOccurs="0" maxOccurs="1"/>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="AddMenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="AddMenuItemIterator" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemDivider" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemIterator" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemSetRef" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemTree" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PickerMenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PostOnChange" minOccurs="0" maxOccurs="1"/>
          <xsd:element ref="Reflect" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="SearchItem" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:choice>
      </xsd:sequence>
      <!-- An optional action to take when the user clicks the value of this widget when the
           value is not being edited. See ActionBase for list of available action prefixes. When
           specified, the value of this widget will be rendered as a link when the value is not
           being edited. -->
      <xsd:attribute name="action" type="xsd:string"/>
      <!-- An optional boolean expression controlling whether the action should be available
           in this specific context when in read-only mode.  This is ignored if in edit mode
           or if the action is null.  This attribute will be deprecated in a future release,
           please use the 'available' attribute instead.  To disable action in readonly mode,
           you can set available=&quot;CurrentLocation.InEditMode || &lt;action-available-condition&gt;&quot; -->
      <xsd:attribute name="actionAvailable" type="xsd:string"/>
      <!-- Alignment of the widget ("left", "right", or "center") -->
      <xsd:attribute name="align" type="WidgetAlignment"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- Boolean expression which, if false, grays out the widget and all its children -->
      <xsd:attribute name="available" type="xsd:string"/>
      <!-- If true then the label is displayed in bold text. -->
      <xsd:attribute name="boldLabel" type="xsd:boolean" default="false"/>
      <!-- If true then the value is displayed in bold text when read-only. -->
      <xsd:attribute name="boldValue" type="xsd:boolean" default="false"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- The confirmation message to show when "showConfirmMessage" is set. If not specified,
           a standard message will be used. -->
      <xsd:attribute name="confirmMessage" type="xsd:string"/>
      <!-- A Gosu expression used to convert the value picked from a popup before set it into
           the model value of this widget. The picked value will be exposed as a symbol with
           the name "PickedValue" -->
      <xsd:attribute name="conversionExpression" type="xsd:string"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- Boolean expression which, if false, makes this widget and all its children read-only -->
      <xsd:attribute name="editable" type="xsd:string" default="false"/>
      <!-- If true, instead of showing a hierarchical menu, the widget will show a single menu
           with sub-menus grouped under headers. -->
      <xsd:attribute name="flatten" type="xsd:boolean" default="false"/>
      <!-- An optional boolean expression, if returns true, this widget will get focus when start
           editing the containing location. -->
      <xsd:attribute name="focusOnStartEditing" type="xsd:string"/>
      <!-- How the value is formatted; options include "general", "currency", and "email".  See
           the formatType enumeration. -->
      <xsd:attribute name="formatType" type="FormatType"/>
      <!-- A Gosu expression which, if defined, is evaluated to create help info that guides
           the user to edit this widget. The help info will show up if the user hovers the mouse
           over or focuses on the widget, when the widget is in edit mode. -->
      <xsd:attribute name="helpText" type="xsd:string"/>
      <!-- If false, menu items under this input will be shown even when the input is not editable. -->
      <xsd:attribute name="hideChildrenIfReadOnly" type="xsd:boolean" default="true"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- Reference ID of the widget.  This does not have to be globally unique; it only has
           to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <!-- A Gosu expression that converts the presentation value to a model value. The presentation
           value string is exposed to this expression as the symbol "VALUE". -->
      <xsd:attribute name="inputConversion" type="xsd:string"/>
      <!-- Label to render. -->
      <xsd:attribute name="label" type="xsd:string"/>
      <!-- Boolean expression which, if true, causes the label portion of the Input to be rendered
           above the value -->
      <xsd:attribute name="labelAbove" type="xsd:string" default="false"/>
      <!-- Custom extension CSS style class to apply to the label. -->
      <xsd:attribute name="labelStyleClass" type="xsd:string"/>
      <!-- The number of child MenuItems to show in each column.  If not specified, all children
           will be shown in a single column. -->
      <xsd:attribute name="numEntriesPerColumn" type="xsd:integer" default="0"/>
      <!-- Gosu expression to be executed after the value is set from a picker. -->
      <xsd:attribute name="onPick" type="xsd:string"/>
      <!-- A Gosu expression that converts the model value to a presentation value. The model
           value is exposed to this expression as the symbol "VALUE". The return type of this
           expression must be String. -->
      <xsd:attribute name="outputConversion" type="xsd:string"/>
      <!-- A Gosu expression used to validate user value before setting it to the model. This
           expression can access any symbols available to this widget, and a "VALUE" symbol that
           represents the user value. If this expression returns null, the user value will be
           set into the model. Otherwise, an error message containing the result of the expression
           will be displayed on the page, the value will not be set into the model, and no actions
           can be performed until the error is corrected. -->
      <xsd:attribute name="requestValidationExpression" type="xsd:string"/>
      <!-- If true, then the cell must be filled out by the user -->
      <xsd:attribute name="required" type="xsd:string"/>
      <!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * Deprecated.
           DO NOT USE.                                           * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
           Consider using "onChange/onPick/inputConversion/outputConversion" where available.
           If specified and the Input is editable, then any new value of the Input is written
           to this expression (Gosu by default) instead of to "value".  The new value is exposed
           as the symbol "VALUE".  For instance if your value expression is "Foo.getSomething()"
           then it can't be written to since it's not an L-value; so you could specify a setter
           expression along the lines of "Foo.setSomething(VALUE)" Warning: if you use this attribute
           many pebbles features will not work, including but not limited to: * Correct automatic
           detection of the state of the updated data * Correct automatic detection of the editability
           of the data * Correct automatic detection of the maximum size of a text input -->
      <xsd:attribute name="setter" type="xsd:string"/>
      <!-- Optional keyboard shortcut character in the form of "Q" or "ShiftQ"; the "Alt" key
           is implicit. This is only applicable when this widget has an "action" specified and
           the value is not being edited. -->
      <xsd:attribute name="shortcut" type="xsd:string"/>
      <!-- Boolean expression which determines whether or not to show a confirmation message
           when the field value is changed directly from the UI. It's NOT applicable when the
           value is changed indirectly, for example, as a result of client reflection. -->
      <xsd:attribute name="showConfirmMessage" type="xsd:string"/>
      <!-- An optional attribute, if set, defer sub menu generation until user tries to open
           the menu. DO NOT set this flag unless the sub menu of this widget is very expensive
           to generate. Setting this flag will reduce time to load the page, however require
           fetching additional info from server in the background, when the menu gets opened
           for the first time after page loaded. -->
      <xsd:attribute name="subMenuOnDemand" type="xsd:boolean" default="false"/>
      <!-- A Gosu expression to run before committing the record. This expression can refer to
           any symbols available to this widget. If this expression returns null, the validation
           is considered successful; otherwise, the result of this expression will be displayed
           as an error and the record will not be committed. -->
      <xsd:attribute name="validationExpression" type="xsd:string"/>
      <!-- The value this Input binds to as an Expression.  If the Input is editable then this
           value is both read from and written to (unless "setter" is defined). -->
      <xsd:attribute name="value" type="xsd:string" use="required"/>
      <!-- CSS max-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionMaxWidth" type="xsd:string"/>
      <!-- CSS min-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionMinWidth" type="xsd:string"/>
      <!-- CSS width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionWidth" type="xsd:string"/>
      <!-- The type of the value expression. -->
      <xsd:attribute name="valueType" type="xsd:string" use="required"/>
      <!-- The type of value widget to create for this input, such as Text or TypeKey. -->
      <xsd:attribute name="valueWidgetType" type="xsd:string" default="Text"/>
      <!-- If used instead of "editable", specifies whether the Input is editable when data is
           being created -->
      <xsd:attribute name="visible" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- A range input in a toolbar -->
  <xsd:element name="ToolbarRangeInput">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="LayoutConfig" minOccurs="0" maxOccurs="1"/>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="AddMenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="AddMenuItemIterator" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemDivider" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemIterator" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemSetRef" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemTree" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PickerMenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PostOnChange" minOccurs="0" maxOccurs="1"/>
          <xsd:element ref="Reflect" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="SearchItem" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:choice>
      </xsd:sequence>
      <!-- An optional action to take when the user clicks the value of this widget when the
           value is not being edited. See ActionBase for list of available action prefixes. When
           specified, the value of this widget will be rendered as a link when the value is not
           being edited. -->
      <xsd:attribute name="action" type="xsd:string"/>
      <!-- An optional boolean expression controlling whether the action should be available
           in this specific context when in read-only mode.  This is ignored if in edit mode
           or if the action is null.  This attribute will be deprecated in a future release,
           please use the 'available' attribute instead.  To disable action in readonly mode,
           you can set available=&quot;CurrentLocation.InEditMode || &lt;action-available-condition&gt;&quot; -->
      <xsd:attribute name="actionAvailable" type="xsd:string"/>
      <!-- Alignment of the widget ("left", "right", or "center") -->
      <xsd:attribute name="align" type="WidgetAlignment"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- Boolean expression which, if false, grays out the widget and all its children -->
      <xsd:attribute name="available" type="xsd:string"/>
      <!-- If true then the label is displayed in bold text. -->
      <xsd:attribute name="boldLabel" type="xsd:boolean" default="false"/>
      <!-- If true then the value is displayed in bold text when read-only. -->
      <xsd:attribute name="boldValue" type="xsd:boolean" default="false"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- The confirmation message to show when "showConfirmMessage" is set. If not specified,
           a standard message will be used. -->
      <xsd:attribute name="confirmMessage" type="xsd:string"/>
      <!-- A Gosu expression used to convert the value picked from a popup before set it into
           the model value of this widget. The picked value will be exposed as a symbol with
           the name "PickedValue" -->
      <xsd:attribute name="conversionExpression" type="xsd:string"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- Boolean expression which, if false, makes this widget and all its children read-only -->
      <xsd:attribute name="editable" type="xsd:string" default="false"/>
      <!-- Optional Gosu expression for filtering the value range of the widget. You can write
           this either as a boolean expression over a "VALUE" symbol (i.e. "Libraries.MyLib.isOkValue(VALUE)"),
           or as a more complex expression that takes a "VALUES" array symbol and returns a List
           (i.e. "Libraries.MyLib.filterValues(VALUES)") which is more powerful and efficient
           but harder to write. -->
      <xsd:attribute name="filter" type="xsd:string"/>
      <!-- If true, instead of showing a hierarchical menu, the widget will show a single menu
           with sub-menus grouped under headers. -->
      <xsd:attribute name="flatten" type="xsd:boolean" default="false"/>
      <!-- An optional boolean expression, if returns true, this widget will get focus when start
           editing the containing location. -->
      <xsd:attribute name="focusOnStartEditing" type="xsd:string"/>
      <!-- How the value is formatted; options include "general", "currency", and "email".  See
           the formatType enumeration. -->
      <xsd:attribute name="formatType" type="FormatType"/>
      <!-- A Gosu expression which, if defined, is evaluated to create help info that guides
           the user to edit this widget. The help info will show up if the user hovers the mouse
           over or focuses on the widget, when the widget is in edit mode. -->
      <xsd:attribute name="helpText" type="xsd:string"/>
      <!-- If false, menu items under this input will be shown even when the input is not editable. -->
      <xsd:attribute name="hideChildrenIfReadOnly" type="xsd:boolean" default="true"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- The name of a .png file, or .svg file, or font glyph. The Widget's iconType determines
           which one. -->
      <xsd:attribute name="icon" type="xsd:string"/>
      <!-- Color of the icon. If not set will default to its font color. -->
      <xsd:attribute name="iconColor" type="xsd:string"/>
      <!-- An enumeration of icon types that determine what the 'icon' property on the widget
           is referring to. -->
      <xsd:attribute name="iconType" type="IconTypeEnum"/>
      <!-- Reference ID of the widget.  This does not have to be globally unique; it only has
           to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <xsd:attribute name="inputConversion" type="xsd:string"/>
      <!-- Label to render. -->
      <xsd:attribute name="label" type="xsd:string"/>
      <!-- Boolean expression which, if true, causes the label portion of the Input to be rendered
           above the value -->
      <xsd:attribute name="labelAbove" type="xsd:string" default="false"/>
      <!-- Custom extension CSS style class to apply to the label. -->
      <xsd:attribute name="labelStyleClass" type="xsd:string"/>
      <!-- Label expression for the "New..." option. The default label defined for the application
           will be used if this attribute is not specified. -->
      <xsd:attribute name="newLabel" type="xsd:string" default="DisplayKey.get(&quot;Java.NameValueView.New&quot;)"/>
      <!-- Value expression that returns a new instance for the input value. The "New..." option
           will be available when this attribute is specifed. -->
      <xsd:attribute name="newValue" type="xsd:string"/>
      <!-- Label expression for the "none selected" option -->
      <xsd:attribute name="noneSelectedLabel" type="xsd:string" default="DisplayKey.get(&quot;Java.NameValueView.NoneSelected&quot;)"/>
      <!-- The number of child MenuItems to show in each column.  If not specified, all children
           will be shown in a single column. -->
      <xsd:attribute name="numEntriesPerColumn" type="xsd:integer" default="0"/>
      <!-- The number of rows to show in a multi-select input.  This attribute is invalid on
           a single-select input. -->
      <xsd:attribute name="numRows" type="xsd:integer"/>
      <!-- Gosu expression to be executed after the value is set from a picker. -->
      <xsd:attribute name="onPick" type="xsd:string"/>
      <!-- Optional Gosu expression used to determine the label displayed for each element of
           the value range. Defaults to the element's display name or string representation if
           not present. The element value is exposed as "VALUE". -->
      <xsd:attribute name="optionLabel" type="xsd:string"/>
      <!-- A Gosu expression used to validate user value before setting it to the model. This
           expression can access any symbols available to this widget, and a "VALUE" symbol that
           represents the user value. If this expression returns null, the user value will be
           set into the model. Otherwise, an error message containing the result of the expression
           will be displayed on the page, the value will not be set into the model, and no actions
           can be performed until the error is corrected. -->
      <xsd:attribute name="requestValidationExpression" type="xsd:string"/>
      <!-- If true, then the cell must be filled out by the user -->
      <xsd:attribute name="required" type="xsd:string"/>
      <!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * Deprecated.
           DO NOT USE.                                           * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
           Consider using "onChange/onPick/inputConversion/outputConversion" where available.
           If specified and the Input is editable, then any new value of the Input is written
           to this expression (Gosu by default) instead of to "value".  The new value is exposed
           as the symbol "VALUE".  For instance if your value expression is "Foo.getSomething()"
           then it can't be written to since it's not an L-value; so you could specify a setter
           expression along the lines of "Foo.setSomething(VALUE)" Warning: if you use this attribute
           many pebbles features will not work, including but not limited to: * Correct automatic
           detection of the state of the updated data * Correct automatic detection of the editability
           of the data * Correct automatic detection of the maximum size of a text input -->
      <xsd:attribute name="setter" type="xsd:string"/>
      <!-- Optional keyboard shortcut character in the form of "Q" or "ShiftQ"; the "Alt" key
           is implicit. This is only applicable when this widget has an "action" specified and
           the value is not being edited. -->
      <xsd:attribute name="shortcut" type="xsd:string"/>
      <!-- Boolean expression which determines whether or not to show a confirmation message
           when the field value is changed directly from the UI. It's NOT applicable when the
           value is changed indirectly, for example, as a result of client reflection. -->
      <xsd:attribute name="showConfirmMessage" type="xsd:string"/>
      <!-- If true, attempts to sort the results of valueRange -->
      <xsd:attribute name="sortValueRange" type="xsd:boolean" default="true"/>
      <!-- An optional attribute, if set, defer sub menu generation until user tries to open
           the menu. DO NOT set this flag unless the sub menu of this widget is very expensive
           to generate. Setting this flag will reduce time to load the page, however require
           fetching additional info from server in the background, when the menu gets opened
           for the first time after page loaded. -->
      <xsd:attribute name="subMenuOnDemand" type="xsd:boolean" default="false"/>
      <!-- A Gosu expression to run before committing the record. This expression can refer to
           any symbols available to this widget. If this expression returns null, the validation
           is considered successful; otherwise, the result of this expression will be displayed
           as an error and the record will not be committed. -->
      <xsd:attribute name="validationExpression" type="xsd:string"/>
      <!-- The value this Input binds to as an Expression.  If the Input is editable then this
           value is both read from and written to (unless "setter" is defined). -->
      <xsd:attribute name="value" type="xsd:string" use="required"/>
      <!-- Gosu expression defining the range of possible values for this element. Should evaluate
           to a List, an array, or a IQueryBeanResult -->
      <xsd:attribute name="valueRange" type="xsd:string" use="required"/>
      <!-- CSS max-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionMaxWidth" type="xsd:string"/>
      <!-- CSS min-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionMinWidth" type="xsd:string"/>
      <!-- CSS width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionWidth" type="xsd:string"/>
      <!-- The type of the value expression. -->
      <xsd:attribute name="valueType" type="xsd:string" use="required"/>
      <!-- If used instead of "editable", specifies whether the Input is editable when data is
           being created -->
      <xsd:attribute name="visible" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- A set of pre-included toolbar buttons for tree table control, including "expand all"
       and "collapse all". -->
  <xsd:element name="TreeButtons">
    <xsd:complexType>
      <xsd:choice minOccurs="0" maxOccurs="unbounded"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- Alternative label for the collapse button -->
      <xsd:attribute name="collapseLabel" type="xsd:string"/>
      <!-- Keyboard shortcut character for collapse button, in the form of "Q" or "ShiftQ"; the
           "Alt" key is implicit -->
      <xsd:attribute name="collapseShortcut" type="xsd:string" default="C"/>
      <!-- Boolean expression specifying whether the collapse button is visible. -->
      <xsd:attribute name="collapseVisible" type="xsd:string"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- Alternative label for the expand button -->
      <xsd:attribute name="expandLabel" type="xsd:string"/>
      <!-- Keyboard shortcut character for expand button, in the form of "Q" or "ShiftQ"; the
           "Alt" key is implicit -->
      <xsd:attribute name="expandShortcut" type="xsd:string" default="A"/>
      <!-- Boolean expression specifying whether the expand button is visible. -->
      <xsd:attribute name="expandVisible" type="xsd:string"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- (Optional) reference ID of the widget.  This does not have to be globally unique;
           it only has to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string"/>
      <!-- The id of the iterator/list view widget this button applies to.  If the value is a
           list view then the first iterator widget child is used. -->
      <xsd:attribute name="iterator" type="xsd:string" use="required"/>
    </xsd:complexType>
  </xsd:element>
  
  <xsd:element name="TreeView">
    <xsd:complexType>
      <xsd:choice minOccurs="0" maxOccurs="unbounded"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- A Boolean expression, if false, disable clicking on a tree node. If not specified,
           a tree node is clickable if "onClickElement " is specified and permitted for that
           tree node. -->
      <xsd:attribute name="canClickElement" type="xsd:string"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- A Gosu expression that returns the label for each tree node. The model value of a
           tree node is exposed as a symbol with the name "elementName" -->
      <xsd:attribute name="elementLabel" type="xsd:string" use="required"/>
      <!-- The model data of each tree node in the value result is exposed as a symbol with the
           name "elementName". -->
      <xsd:attribute name="elementName" type="xsd:string" use="required"/>
      <!-- Lets you manually specify the type of element exposed as "elementName".  This is useful
           if you have special knowledge about the type of element returned by "value": for example,
           if the field referred to returns an array of Contacts but you happen to know that
           they are guaranteed to all be Persons -->
      <xsd:attribute name="elementType" type="xsd:string"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- Reference ID of the widget.  This does not have to be globally unique; it only has
           to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <!-- Action performed when clicking on a tree node. The model data of the tree node is
           exposed as "elementName" -->
      <xsd:attribute name="onClickElement" type="xsd:string"/>
      <!-- If true, whenever the value expression is evaluated and returns a new tree object
           then expand the same nodes in the new tree that were expanded in the previous tree,
           using the treeNode.DataKey property to match new and old nodes -->
      <xsd:attribute name="preserveExpansionStateOnRefresh" type="xsd:boolean" default="false"/>
      <!-- A Boolean expression, if true, select the tree node when enter the page, as if the
           user has previously clicked on the node. This attribute will be ignored after the
           user actually clicks any tree node. -->
      <xsd:attribute name="selectElementOnEnter" type="xsd:string"/>
      <!-- A Gosu expression that evaluates to an instance of gw.api.tree.TreeNode -->
      <xsd:attribute name="value" type="xsd:string" use="required"/>
    </xsd:complexType>
  </xsd:element>
  
  <xsd:element name="TreeViewPanel">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="Variable" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element ref="TreeView" minOccurs="1" maxOccurs="1"/>
      </xsd:sequence>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- If true, the Widget will have a border around it. Purely a visual effect. -->
      <xsd:attribute name="border" type="xsd:boolean" default="false"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- (Optional) reference ID of the widget.  This does not have to be globally unique;
           it only has to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string"/>
      <!-- If true, independent of 'panel inner spacing', the container will left indent its
           children by a fixed amount. This is useful for displaying nested data throughout a
           page. Purely a visual effect. -->
      <xsd:attribute name="leftIndent" type="xsd:boolean" default="false"/>
      <!-- In general, determines the amount of spacing INSIDE of the Panel in all 4 directions:
           top, right, bottom, left. However, different Panels may have requirements that prevent
           all 4 directions from being modified. -->
      <xsd:attribute name="panelInnerSpacing" type="WidgetSpacing" default="none"/>
      <!-- In general, determines the amount of spacing OUTSIDE of the Panel in all 4 directions:
           top, right, bottom, left. However, different Panels may have requirements that prevent
           all 4 directions from being modified. -->
      <xsd:attribute name="panelOuterSpacing" type="WidgetSpacing" default="normal"/>
      <!-- The style of the Panel. In general, this refers to the background color, but some
           styles can change other aspects such as font color, spacing, or filters. -->
      <xsd:attribute name="panelStyle" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- A ListView cell bound to a TypeKey value. -->
  <xsd:element name="TypeKeyCell">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="Reflect" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element ref="ColumnFooter" minOccurs="0" maxOccurs="1"/>
        <xsd:element ref="PostOnChange" minOccurs="0" maxOccurs="1"/>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="AddMenuItem"/>
          <xsd:element ref="AddMenuItemIterator"/>
          <xsd:element ref="MenuItem"/>
          <xsd:element ref="MenuItemDivider"/>
          <xsd:element ref="MenuItemIterator"/>
          <xsd:element ref="MenuItemSetRef"/>
          <xsd:element ref="MenuItemTree"/>
          <xsd:element ref="PickerMenuItem"/>
          <xsd:element ref="SearchItem"/>
        </xsd:choice>
      </xsd:sequence>
      <!-- An optional action to take when the user clicks the value of this widget when the
           value is not being edited. See ActionBase for details. When specified, the value of
           this widget will be rendered as a link when the value is not being edited. -->
      <xsd:attribute name="action" type="xsd:string"/>
      <!-- An optional boolean expression controlling whether the action should be available
           in this specific context when in read-only mode.  This is ignored if in edit mode
           or if the action is null.  This attribute will be deprecated in a future release,
           please use the 'available' attribute instead.  To disable action in readonly mode,
           you can set available=&quot;CurrentLocation.InEditMode || &lt;action-available-condition&gt;&quot; -->
      <xsd:attribute name="actionAvailable" type="xsd:string"/>
      <!-- Specifies the alignment of this cell. Valid values: "left", "right", or "center".
           If no value is specified, the default alignment is determined by the value type ("center"
           for boolean values; "right" for numeric values; "left" for other value types). -->
      <xsd:attribute name="align" type="WidgetAlignment"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- Boolean expression which, if false, grays out the widget and all its children -->
      <xsd:attribute name="available" type="xsd:string"/>
      <!-- If true, renders the cell contents in bold text. Defaults to false. -->
      <xsd:attribute name="bold" type="xsd:boolean" default="false"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- The HTML colspan attribute, lets this cell span across multiple columns of other rows.
           Useful for generating a "group header" row above a RowIterator. The default value
           is 1. A value greater than 1 is only allowed when the containing row is not iterated
           by a RowIterator. -->
      <xsd:attribute name="colspan" type="xsd:integer"/>
      <!-- The confirmation message to show when "showConfirmMessage" is set. If not specified,
           a standard message will be used. -->
      <xsd:attribute name="confirmMessage" type="xsd:string"/>
      <!-- A Gosu expression used to convert the value picked from a popup before set it into
           the model value of this widget. The picked value will be exposed as a symbol with
           the name "PickedValue" -->
      <xsd:attribute name="conversionExpression" type="xsd:string"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- Boolean expression which, if false, makes this widget and all its children read-only -->
      <xsd:attribute name="editable" type="xsd:string" default="false"/>
      <!-- If true, allows the user to sort the values in the column by clicking on the header.
            Only applicable when the containing row is iterated by a RowIterator. -->
      <xsd:attribute name="enableSort" type="xsd:boolean" default="true"/>
      <!-- If true, this cell will the last cell in the row to be navigated to via the ENTER
           key. Only applicable when "CellNavOnEnter" or "QuickAddOnEnter" is set. Normally not
           specified. Default to false. -->
      <xsd:attribute name="endOfCellNav" type="xsd:boolean" default="false"/>
      <!-- Optional Gosu expression for filtering the value range of the widget. You can write
           this either as a boolean expression over a "VALUE" symbol (i.e. "Libraries.MyLib.isOkValue(VALUE)"),
           or as a more complex expression that takes a "VALUES" array symbol and returns a List
           (i.e. "Libraries.MyLib.filterValues(VALUES)") which is more powerful and efficient
           but harder to write. -->
      <xsd:attribute name="filter" type="xsd:string"/>
      <!-- If true, instead of showing a hierarchical menu, the widget will show a single menu
           with sub-menus grouped under headers. -->
      <xsd:attribute name="flatten" type="xsd:boolean" default="false"/>
      <!-- An optional boolean expression, if returns true, this widget will get focus when start
           editing the containing location. -->
      <xsd:attribute name="focusOnStartEditing" type="xsd:string"/>
      <!-- An expression that returns a GWColor instance. Legacy: this method can instead return
           a string corresponding to a CSS Specification Level 3 color name. See GWColor for
           more details. -->
      <xsd:attribute name="fontColor" type="xsd:string"/>
      <!-- An optional expression. If specified, a footer cell with the specified value will
           be rendered for this column. Only applicable when the containing Row is iterated by
           a RowIterator. Not allowed when "footerSumValue" is specified. -->
      <xsd:attribute name="footerLabel" type="xsd:string"/>
      <!-- An optional expression, if specified, will be used as format pattern for the footer
           sum value. Normally not specified, so that the "format" and\or "formatType" of the
           cell value will be applied to footer sum value. Only applicable when "footerSumValue"
           is specified. The result of this expression must conform to the number format defined
           in java.text.DecimalFormat. -->
      <xsd:attribute name="footerSumFormat" type="xsd:string"/>
      <!-- An optional Numeric expression. If specified, a footer cell that sums the specified
           value for all cells in this column will be rendered. Pagination of the list does not
           affect the sum value. Only applicable when the containing row is iterated by a RowIterator.
           Not allowed when "footerLabel" is specified. -->
      <xsd:attribute name="footerSumValue" type="xsd:string"/>
      <!-- How the value is formatted; options include "general", "currency", and "email".  See
           the formatType enumeration. -->
      <xsd:attribute name="formatType" type="FormatType"/>
      <!-- If true, the ListView will be grouped by this cell upon entering the page. Only one
           grouped cell is allowed at any given time and it is only applicable when the column
           is sortable. -->
      <xsd:attribute name="groupedOnEnter" type="xsd:string"/>
      <!-- If true, this Cell and any other grow-enabled Cell will expand to fill remaining space
           in the ListViewPanel. Only applicable when the ListView is set to stretch. -->
      <xsd:attribute name="grow" type="xsd:boolean" default="false"/>
      <!-- If true, generates a checkbox at the beginning of this cell. This checkbox can be
           used to check this entry in the nearest containing Iterator. Defaults to false. Only
           allowed if this cell is inside a CellIterator or under a Row inside a RowIterator. -->
      <xsd:attribute name="hasCheckBox" type="xsd:boolean" default="false"/>
      <!-- If true, allow the user to filter the list based on any of the values in the column.
           Default to false. -->
      <xsd:attribute name="hasColumnFilter" type="xsd:boolean" default="false"/>
      <!-- CSS height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="height" type="xsd:string"/>
      <!-- A Gosu expression which, if defined, is evaluated to create help info that guides
           the user to edit this widget. The help info will show up if the user hovers the mouse
           over or focuses on the widget, when the widget is in edit mode. -->
      <xsd:attribute name="helpText" type="xsd:string"/>
      <!-- If false, menu items under this input will be shown even when the input is not editable. -->
      <xsd:attribute name="hideChildrenIfReadOnly" type="xsd:boolean" default="true"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- Refers to an image file. If defined, makes this an icon cell. The "value" attribute
           should be a boolean expression describing whether the icon is visible in a given row. -->
      <xsd:attribute name="icon" type="xsd:string"/>
      <!-- Color of the icon. If not set will default to its font color. -->
      <xsd:attribute name="iconColor" type="xsd:string"/>
      <!-- The ALT text for any icon generated in the content cells -->
      <xsd:attribute name="iconLabel" type="xsd:string"/>
      <!-- An enumeration of icon types that determine what the 'icon' property on the widget
           is referring to. -->
      <xsd:attribute name="iconType" type="IconTypeEnum"/>
      <!-- Reference ID of the widget.  This does not have to be globally unique; it only has
           to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <xsd:attribute name="inputConversion" type="xsd:string"/>
      <!-- An optional expression. If specified, a header cell with the specified value will
           be rendered for this column. Only applicable when the containing row is iterated by
           a RowIterator. -->
      <xsd:attribute name="label" type="xsd:string"/>
      <!-- Custom extension CSS style class to apply to the header. -->
      <xsd:attribute name="labelStyleClass" type="xsd:string"/>
      <!-- CSS max-height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="maxHeight" type="xsd:string"/>
      <!-- CSS max-width value. Can be `px`, or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="maxWidth" type="xsd:string"/>
      <!-- CSS min-height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="minHeight" type="xsd:string"/>
      <!-- CSS min-width value. Can be `px`, or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="minWidth" type="xsd:string"/>
      <!-- Label expression for the "none selected" option -->
      <xsd:attribute name="noneSelectedLabel" type="xsd:string"/>
      <!-- The number of child MenuItems to show in each column.  If not specified, all children
           will be shown in a single column. -->
      <xsd:attribute name="numEntriesPerColumn" type="xsd:integer" default="0"/>
      <!-- Gosu expression to be executed after the value is set from a picker. -->
      <xsd:attribute name="onPick" type="xsd:string"/>
      <xsd:attribute name="outputConversion" type="xsd:string"/>
      <!-- Relative width when printing to PDF. All widths are relative to the widths of the
           other columns in the ListView -->
      <xsd:attribute name="printWidth" type="xsd:string" default="1"/>
      <!-- A Gosu expression used to validate user value before setting it to the model. This
           expression can access any symbols available to this widget, and a "VALUE" symbol that
           represents the user value. If this expression returns null, the user value will be
           set into the model. Otherwise, an error message containing the result of the expression
           will be displayed on the page, the value will not be set into the model, and no actions
           can be performed until the error is corrected. -->
      <xsd:attribute name="requestValidationExpression" type="xsd:string"/>
      <!-- If true, then the cell must be filled out by the user -->
      <xsd:attribute name="required" type="xsd:string"/>
      <!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * Deprecated.
           DO NOT USE.                                           * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
           Consider using "onChange/onPick/inputConversion/outputConversion" where available.
           If specified and the Input is editable, then any new value of the Input is written
           to this expression (Gosu by default) instead of to "value".  The new value is exposed
           as the symbol "VALUE".  For instance if your value expression is "Foo.getSomething()"
           then it can't be written to since it's not an L-value; so you could specify a setter
           expression along the lines of "Foo.setSomething(VALUE)" Warning: if you use this attribute
           many pebbles features will not work, including but not limited to: * Correct automatic
           detection of the state of the updated data * Correct automatic detection of the editability
           of the data * Correct automatic detection of the maximum size of a text input -->
      <xsd:attribute name="setter" type="xsd:string"/>
      <!-- Boolean expression which determines whether or not to show a confirmation message
           when the field value is changed directly from the UI. It's NOT applicable when the
           value is changed indirectly, for example, as a result of client reflection. -->
      <xsd:attribute name="showConfirmMessage" type="xsd:string"/>
      <!-- If true, shows the icon defined by "icon" in the header cell for this column. The
           default value is true. -->
      <xsd:attribute name="showHeaderIcon" type="xsd:boolean" default="true"/>
      <!-- An optional comma-separated sequence of Expressions, each of which is assumed to be
           a dot-delimited path, the value by which this column will be sorted if the user clicks
           on the header cell. -->
      <xsd:attribute name="sortBy" type="xsd:string"/>
      <!-- Either "ascending" or "descending" -->
      <xsd:attribute name="sortDirection" type="WidgetSortDirection" default="ascending"/>
      <!-- The priority of sorting relative to other sorting elements like IteratorSort and Cell.
           The lower the number, the higher the priority.  The highest priority is "1" -->
      <xsd:attribute name="sortOrder" type="xsd:integer" default="0"/>
      <!-- CSS style class for the cell content; for instance, "miniButton" makes a link appear
           as a small button -->
      <xsd:attribute name="styleClass" type="LinkStyleClass"/>
      <!-- An optional attribute, if set, defer sub menu generation until user tries to open
           the menu. DO NOT set this flag unless the sub menu of this widget is very expensive
           to generate. Setting this flag will reduce time to load the page, however require
           fetching additional info from server in the background, when the menu gets opened
           for the first time after page loaded. -->
      <xsd:attribute name="subMenuOnDemand" type="xsd:boolean" default="false"/>
      <!-- Extra "alt" text to show when the user hovers the mouse over the header cell of this
           column. -->
      <xsd:attribute name="tooltip" type="xsd:string"/>
      <!-- If true, validate before commit that the value of this column is unique across all
           rows in the current page. Only meaningful when this column is editable. -->
      <xsd:attribute name="unique" type="xsd:boolean" default="false"/>
      <!-- A Gosu expression to run before committing the record. This expression can refer to
           any symbols available to this widget. If this expression returns null, the validation
           is considered successful; otherwise, the result of this expression will be displayed
           as an error and the record will not be committed. -->
      <xsd:attribute name="validationExpression" type="xsd:string"/>
      <!-- The label of this cell to be used when it has validation issues. Not needed when this
           cell has a "label". Required if the cell is editable but does not have a "label". -->
      <xsd:attribute name="validationLabel" type="xsd:string"/>
      <!-- The value this element binds to.  If the element is editable then this value is both
           read from and written to (unless "setter" is defined). -->
      <xsd:attribute name="value" type="xsd:string"/>
      <!-- The type of the value expression. -->
      <xsd:attribute name="valueType" type="xsd:string" use="required"/>
      <!-- Boolean expression which, if false, hides the <i>contents</i> of the cell (its "ValueWidget"),
           but not the cell itself.  Needed since hiding the actual cell usually screws up the
           layout -->
      <xsd:attribute name="valueVisible" type="xsd:string"/>
      <!-- Specifies the vertical alignment of this cell. Valid values: "top", "middle", or "bottom".
           If no value is specified, the default alignment is determined by the cell type ("top"
           for Text Areas and Format Cells, "middle" for buttons and icons). -->
      <xsd:attribute name="verticalAlign" type="WidgetVerticalAlignment"/>
      <!-- Boolean expression which, if false, completely hides the widget and all its children -->
      <xsd:attribute name="visible" type="xsd:string"/>
      <!-- CSS width value. Can be `px`, or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="width" type="xsd:string"/>
      <!-- If default, defers to FormatType to decide whether to wrap or not.  If true, allows
           cell content to wrap. -->
      <xsd:attribute name="wrap" type="WrapType" default="default"/>
      <!-- If true, allows Header Cell text content to wrap. Defaults to true. -->
      <xsd:attribute name="wrapLabel" type="xsd:boolean" default="false"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- A TypeKey input bound to an array or list which renders as a group of checkboxes. -->
  <xsd:element name="TypeKeyCheckBoxGroupInput">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="LayoutConfig" minOccurs="0" maxOccurs="1"/>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="AddMenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="AddMenuItemIterator" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemDivider" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemIterator" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemSetRef" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemTree" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PickerMenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PostOnChange" minOccurs="0" maxOccurs="1"/>
          <xsd:element ref="Reflect" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="SearchItem" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:choice>
      </xsd:sequence>
      <!-- An optional action to take when the user clicks the value of this widget when the
           value is not being edited. See ActionBase for list of available action prefixes. When
           specified, the value of this widget will be rendered as a link when the value is not
           being edited. -->
      <xsd:attribute name="action" type="xsd:string"/>
      <!-- An optional boolean expression controlling whether the action should be available
           in this specific context when in read-only mode.  This is ignored if in edit mode
           or if the action is null.  This attribute will be deprecated in a future release,
           please use the 'available' attribute instead.  To disable action in readonly mode,
           you can set available=&quot;CurrentLocation.InEditMode || &lt;action-available-condition&gt;&quot; -->
      <xsd:attribute name="actionAvailable" type="xsd:string"/>
      <!-- Alignment of the widget ("left", "right", or "center") -->
      <xsd:attribute name="align" type="WidgetAlignment"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- Boolean expression which, if false, grays out the widget and all its children -->
      <xsd:attribute name="available" type="xsd:string"/>
      <!-- If true then the label is displayed in bold text. -->
      <xsd:attribute name="boldLabel" type="xsd:boolean" default="false"/>
      <!-- If true then the value is displayed in bold text when read-only. -->
      <xsd:attribute name="boldValue" type="xsd:boolean" default="false"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- A Gosu expression used to convert the value picked from a popup before set it into
           the model value of this widget. The picked value will be exposed as a symbol with
           the name "PickedValue" -->
      <xsd:attribute name="conversionExpression" type="xsd:string"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- Boolean expression which, if false, makes this widget and all its children read-only -->
      <xsd:attribute name="editable" type="xsd:string" default="false"/>
      <!-- Optional Gosu expression for filtering the value range of the widget. You can write
           this either as a boolean expression over a "VALUE" symbol (i.e. "Libraries.MyLib.isOkValue(VALUE)"),
           or as a more complex expression that takes a "VALUES" array symbol and returns a List
           (i.e. "Libraries.MyLib.filterValues(VALUES)") which is more powerful and efficient
           but harder to write. -->
      <xsd:attribute name="filter" type="xsd:string"/>
      <!-- If true, instead of showing a hierarchical menu, the widget will show a single menu
           with sub-menus grouped under headers. -->
      <xsd:attribute name="flatten" type="xsd:boolean" default="false"/>
      <!-- An optional boolean expression, if returns true, this widget will get focus when start
           editing the containing location. -->
      <xsd:attribute name="focusOnStartEditing" type="xsd:string"/>
      <!-- How the value is formatted; options include "general", "currency", and "email".  See
           the formatType enumeration. -->
      <xsd:attribute name="formatType" type="FormatType"/>
      <!-- If false, menu items under this input will be shown even when the input is not editable. -->
      <xsd:attribute name="hideChildrenIfReadOnly" type="xsd:boolean" default="true"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- Reference ID of the widget.  This does not have to be globally unique; it only has
           to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <!-- A Gosu expression that converts the presentation value to a model value. The presentation
           value string is exposed to this expression as the symbol "VALUE". -->
      <xsd:attribute name="inputConversion" type="xsd:string"/>
      <!-- Label to render. -->
      <xsd:attribute name="label" type="xsd:string"/>
      <!-- Boolean expression which, if true, causes the label portion of the Input to be rendered
           above the value -->
      <xsd:attribute name="labelAbove" type="xsd:string" default="false"/>
      <!-- Custom extension CSS style class to apply to the label. -->
      <xsd:attribute name="labelStyleClass" type="xsd:string"/>
      <!-- The number of child MenuItems to show in each column.  If not specified, all children
           will be shown in a single column. -->
      <xsd:attribute name="numEntriesPerColumn" type="xsd:integer" default="0"/>
      <!-- Gosu expression to be executed after the value is set from a picker. -->
      <xsd:attribute name="onPick" type="xsd:string"/>
      <!-- An optional expression to specify an icon for each option. The option value is exposed
           as "VALUE". The return value's type is determined by OPTION_ICON_TYPE -->
      <xsd:attribute name="optionIcon" type="xsd:string"/>
      <!-- Color of the icon. The option value is exposed as "VALUE". If not set will default
           to its font color. -->
      <xsd:attribute name="optionIconColor" type="xsd:string"/>
      <!-- An enumeration of icon types that determine what the 'optionIcon' property on the
           widget is referring to. -->
      <xsd:attribute name="optionIconType" type="IconTypeEnum"/>
      <!-- A Gosu expression used to validate user value before setting it to the model. This
           expression can access any symbols available to this widget, and a "VALUE" symbol that
           represents the user value. If this expression returns null, the user value will be
           set into the model. Otherwise, an error message containing the result of the expression
           will be displayed on the page, the value will not be set into the model, and no actions
           can be performed until the error is corrected. -->
      <xsd:attribute name="requestValidationExpression" type="xsd:string"/>
      <!-- If true, then the cell must be filled out by the user -->
      <xsd:attribute name="required" type="xsd:string"/>
      <!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * Deprecated.
           DO NOT USE.                                           * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
           Consider using "onChange/onPick/inputConversion/outputConversion" where available.
           If specified and the Input is editable, then any new value of the Input is written
           to this expression (Gosu by default) instead of to "value".  The new value is exposed
           as the symbol "VALUE".  For instance if your value expression is "Foo.getSomething()"
           then it can't be written to since it's not an L-value; so you could specify a setter
           expression along the lines of "Foo.setSomething(VALUE)" Warning: if you use this attribute
           many pebbles features will not work, including but not limited to: * Correct automatic
           detection of the state of the updated data * Correct automatic detection of the editability
           of the data * Correct automatic detection of the maximum size of a text input -->
      <xsd:attribute name="setter" type="xsd:string"/>
      <!-- Optional keyboard shortcut character in the form of "Q" or "ShiftQ"; the "Alt" key
           is implicit. This is only applicable when this widget has an "action" specified and
           the value is not being edited. -->
      <xsd:attribute name="shortcut" type="xsd:string"/>
      <!-- An optional attribute, if set, defer sub menu generation until user tries to open
           the menu. DO NOT set this flag unless the sub menu of this widget is very expensive
           to generate. Setting this flag will reduce time to load the page, however require
           fetching additional info from server in the background, when the menu gets opened
           for the first time after page loaded. -->
      <xsd:attribute name="subMenuOnDemand" type="xsd:boolean" default="false"/>
      <!-- A Gosu expression to run before committing the record. This expression can refer to
           any symbols available to this widget. If this expression returns null, the validation
           is considered successful; otherwise, the result of this expression will be displayed
           as an error and the record will not be committed. -->
      <xsd:attribute name="validationExpression" type="xsd:string"/>
      <!-- The value this Input binds to as an Expression.  If the Input is editable then this
           value is both read from and written to (unless "setter" is defined). -->
      <xsd:attribute name="value" type="xsd:string" use="required"/>
      <!-- CSS max-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionMaxWidth" type="xsd:string"/>
      <!-- CSS min-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionMinWidth" type="xsd:string"/>
      <!-- CSS width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionWidth" type="xsd:string"/>
      <!-- The type of the value expression. -->
      <xsd:attribute name="valueType" type="xsd:string" use="required"/>
      <!-- If used instead of "editable", specifies whether the Input is editable when data is
           being created -->
      <xsd:attribute name="visible" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- An Input with extra attributes for a TypeKey field -->
  <xsd:element name="TypeKeyInput">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="LayoutConfig" minOccurs="0" maxOccurs="1"/>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="AddMenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="AddMenuItemIterator" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemDivider" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemIterator" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemSetRef" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemTree" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PickerMenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PostOnChange" minOccurs="0" maxOccurs="1"/>
          <xsd:element ref="Reflect" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="SearchItem" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:choice>
      </xsd:sequence>
      <!-- An optional action to take when the user clicks the value of this widget when the
           value is not being edited. See ActionBase for list of available action prefixes. When
           specified, the value of this widget will be rendered as a link when the value is not
           being edited. -->
      <xsd:attribute name="action" type="xsd:string"/>
      <!-- An optional boolean expression controlling whether the action should be available
           in this specific context when in read-only mode.  This is ignored if in edit mode
           or if the action is null.  This attribute will be deprecated in a future release,
           please use the 'available' attribute instead.  To disable action in readonly mode,
           you can set available=&quot;CurrentLocation.InEditMode || &lt;action-available-condition&gt;&quot; -->
      <xsd:attribute name="actionAvailable" type="xsd:string"/>
      <!-- Alignment of the widget ("left", "right", or "center") -->
      <xsd:attribute name="align" type="WidgetAlignment"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- Boolean expression which, if false, grays out the widget and all its children -->
      <xsd:attribute name="available" type="xsd:string"/>
      <!-- If true then the label is displayed in bold text. -->
      <xsd:attribute name="boldLabel" type="xsd:boolean" default="false"/>
      <!-- If true then the value is displayed in bold text when read-only. -->
      <xsd:attribute name="boldValue" type="xsd:boolean" default="false"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- The confirmation message to show when "showConfirmMessage" is set. If not specified,
           a standard message will be used. -->
      <xsd:attribute name="confirmMessage" type="xsd:string"/>
      <!-- A Gosu expression used to convert the value picked from a popup before set it into
           the model value of this widget. The picked value will be exposed as a symbol with
           the name "PickedValue" -->
      <xsd:attribute name="conversionExpression" type="xsd:string"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- Boolean expression which, if false, makes this widget and all its children read-only -->
      <xsd:attribute name="editable" type="xsd:string" default="false"/>
      <!-- Optional Gosu expression for filtering the value range of the widget. You can write
           this either as a boolean expression over a "VALUE" symbol (i.e. "Libraries.MyLib.isOkValue(VALUE)"),
           or as a more complex expression that takes a "VALUES" array symbol and returns a List
           (i.e. "Libraries.MyLib.filterValues(VALUES)") which is more powerful and efficient
           but harder to write. -->
      <xsd:attribute name="filter" type="xsd:string"/>
      <!-- If true, instead of showing a hierarchical menu, the widget will show a single menu
           with sub-menus grouped under headers. -->
      <xsd:attribute name="flatten" type="xsd:boolean" default="false"/>
      <!-- An optional boolean expression, if returns true, this widget will get focus when start
           editing the containing location. -->
      <xsd:attribute name="focusOnStartEditing" type="xsd:string"/>
      <!-- How the value is formatted; options include "general", "currency", and "email".  See
           the formatType enumeration. -->
      <xsd:attribute name="formatType" type="FormatType"/>
      <!-- A Gosu expression which, if defined, is evaluated to create help info that guides
           the user to edit this widget. The help info will show up if the user hovers the mouse
           over or focuses on the widget, when the widget is in edit mode. -->
      <xsd:attribute name="helpText" type="xsd:string"/>
      <!-- If false, menu items under this input will be shown even when the input is not editable. -->
      <xsd:attribute name="hideChildrenIfReadOnly" type="xsd:boolean" default="true"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- Reference ID of the widget.  This does not have to be globally unique; it only has
           to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <!-- A Gosu expression that converts the presentation value to a model value. The presentation
           value string is exposed to this expression as the symbol "VALUE". -->
      <xsd:attribute name="inputConversion" type="xsd:string"/>
      <!-- Label to render. -->
      <xsd:attribute name="label" type="xsd:string"/>
      <!-- Boolean expression which, if true, causes the label portion of the Input to be rendered
           above the value -->
      <xsd:attribute name="labelAbove" type="xsd:string" default="false"/>
      <!-- Custom extension CSS style class to apply to the label. -->
      <xsd:attribute name="labelStyleClass" type="xsd:string"/>
      <!-- Label expression for the "none selected" option -->
      <xsd:attribute name="noneSelectedLabel" type="xsd:string"/>
      <!-- The number of child MenuItems to show in each column.  If not specified, all children
           will be shown in a single column. -->
      <xsd:attribute name="numEntriesPerColumn" type="xsd:integer" default="0"/>
      <!-- Gosu expression to be executed after the value is set from a picker. -->
      <xsd:attribute name="onPick" type="xsd:string"/>
      <!-- A Gosu expression used to validate user value before setting it to the model. This
           expression can access any symbols available to this widget, and a "VALUE" symbol that
           represents the user value. If this expression returns null, the user value will be
           set into the model. Otherwise, an error message containing the result of the expression
           will be displayed on the page, the value will not be set into the model, and no actions
           can be performed until the error is corrected. -->
      <xsd:attribute name="requestValidationExpression" type="xsd:string"/>
      <!-- If true, then the cell must be filled out by the user -->
      <xsd:attribute name="required" type="xsd:string"/>
      <!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * Deprecated.
           DO NOT USE.                                           * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
           Consider using "onChange/onPick/inputConversion/outputConversion" where available.
           If specified and the Input is editable, then any new value of the Input is written
           to this expression (Gosu by default) instead of to "value".  The new value is exposed
           as the symbol "VALUE".  For instance if your value expression is "Foo.getSomething()"
           then it can't be written to since it's not an L-value; so you could specify a setter
           expression along the lines of "Foo.setSomething(VALUE)" Warning: if you use this attribute
           many pebbles features will not work, including but not limited to: * Correct automatic
           detection of the state of the updated data * Correct automatic detection of the editability
           of the data * Correct automatic detection of the maximum size of a text input -->
      <xsd:attribute name="setter" type="xsd:string"/>
      <!-- Optional keyboard shortcut character in the form of "Q" or "ShiftQ"; the "Alt" key
           is implicit. This is only applicable when this widget has an "action" specified and
           the value is not being edited. -->
      <xsd:attribute name="shortcut" type="xsd:string"/>
      <!-- Boolean expression which determines whether or not to show a confirmation message
           when the field value is changed directly from the UI. It's NOT applicable when the
           value is changed indirectly, for example, as a result of client reflection. -->
      <xsd:attribute name="showConfirmMessage" type="xsd:string"/>
      <!-- An optional attribute, if set, defer sub menu generation until user tries to open
           the menu. DO NOT set this flag unless the sub menu of this widget is very expensive
           to generate. Setting this flag will reduce time to load the page, however require
           fetching additional info from server in the background, when the menu gets opened
           for the first time after page loaded. -->
      <xsd:attribute name="subMenuOnDemand" type="xsd:boolean" default="false"/>
      <!-- A Gosu expression to run before committing the record. This expression can refer to
           any symbols available to this widget. If this expression returns null, the validation
           is considered successful; otherwise, the result of this expression will be displayed
           as an error and the record will not be committed. -->
      <xsd:attribute name="validationExpression" type="xsd:string"/>
      <!-- The value this Input binds to as an Expression.  If the Input is editable then this
           value is both read from and written to (unless "setter" is defined). -->
      <xsd:attribute name="value" type="xsd:string" use="required"/>
      <!-- CSS max-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionMaxWidth" type="xsd:string"/>
      <!-- CSS min-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionMinWidth" type="xsd:string"/>
      <!-- CSS width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionWidth" type="xsd:string"/>
      <!-- The type of the value expression. -->
      <xsd:attribute name="valueType" type="xsd:string" use="required"/>
      <!-- If used instead of "editable", specifies whether the Input is editable when data is
           being created -->
      <xsd:attribute name="visible" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- A TypeKeyInput which renders as radio buttons. -->
  <xsd:element name="TypeKeyRadioInput">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="LayoutConfig" minOccurs="0" maxOccurs="1"/>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="AddMenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="AddMenuItemIterator" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemDivider" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemIterator" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemSetRef" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemTree" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PickerMenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PostOnChange" minOccurs="0" maxOccurs="1"/>
          <xsd:element ref="Reflect" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="SearchItem" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:choice>
      </xsd:sequence>
      <!-- An optional action to take when the user clicks the value of this widget when the
           value is not being edited. See ActionBase for list of available action prefixes. When
           specified, the value of this widget will be rendered as a link when the value is not
           being edited. -->
      <xsd:attribute name="action" type="xsd:string"/>
      <!-- An optional boolean expression controlling whether the action should be available
           in this specific context when in read-only mode.  This is ignored if in edit mode
           or if the action is null.  This attribute will be deprecated in a future release,
           please use the 'available' attribute instead.  To disable action in readonly mode,
           you can set available=&quot;CurrentLocation.InEditMode || &lt;action-available-condition&gt;&quot; -->
      <xsd:attribute name="actionAvailable" type="xsd:string"/>
      <!-- Alignment of the widget ("left", "right", or "center") -->
      <xsd:attribute name="align" type="WidgetAlignment"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- Boolean expression which, if false, grays out the widget and all its children -->
      <xsd:attribute name="available" type="xsd:string"/>
      <!-- If true then the label is displayed in bold text. -->
      <xsd:attribute name="boldLabel" type="xsd:boolean" default="false"/>
      <!-- If true then the value is displayed in bold text when read-only. -->
      <xsd:attribute name="boldValue" type="xsd:boolean" default="false"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- The confirmation message to show when "showConfirmMessage" is set. If not specified,
           a standard message will be used. -->
      <xsd:attribute name="confirmMessage" type="xsd:string"/>
      <!-- A Gosu expression used to convert the value picked from a popup before set it into
           the model value of this widget. The picked value will be exposed as a symbol with
           the name "PickedValue" -->
      <xsd:attribute name="conversionExpression" type="xsd:string"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- Boolean expression which, if false, makes this widget and all its children read-only -->
      <xsd:attribute name="editable" type="xsd:string" default="false"/>
      <!-- Optional Gosu expression for filtering the value range of the widget. You can write
           this either as a boolean expression over a "VALUE" symbol (i.e. "Libraries.MyLib.isOkValue(VALUE)"),
           or as a more complex expression that takes a "VALUES" array symbol and returns a List
           (i.e. "Libraries.MyLib.filterValues(VALUES)") which is more powerful and efficient
           but harder to write. -->
      <xsd:attribute name="filter" type="xsd:string"/>
      <!-- If true, instead of showing a hierarchical menu, the widget will show a single menu
           with sub-menus grouped under headers. -->
      <xsd:attribute name="flatten" type="xsd:boolean" default="false"/>
      <!-- An optional boolean expression, if returns true, this widget will get focus when start
           editing the containing location. -->
      <xsd:attribute name="focusOnStartEditing" type="xsd:string"/>
      <!-- How the value is formatted; options include "general", "currency", and "email".  See
           the formatType enumeration. -->
      <xsd:attribute name="formatType" type="FormatType"/>
      <!-- A Gosu expression which, if defined, is evaluated to create help info that guides
           the user to edit this widget. The help info will show up if the user hovers the mouse
           over or focuses on the widget, when the widget is in edit mode. -->
      <xsd:attribute name="helpText" type="xsd:string"/>
      <!-- If false, menu items under this input will be shown even when the input is not editable. -->
      <xsd:attribute name="hideChildrenIfReadOnly" type="xsd:boolean" default="true"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- Reference ID of the widget.  This does not have to be globally unique; it only has
           to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <!-- A Gosu expression that converts the presentation value to a model value. The presentation
           value string is exposed to this expression as the symbol "VALUE". -->
      <xsd:attribute name="inputConversion" type="xsd:string"/>
      <!-- Label to render. -->
      <xsd:attribute name="label" type="xsd:string"/>
      <!-- Boolean expression which, if true, causes the label portion of the Input to be rendered
           above the value -->
      <xsd:attribute name="labelAbove" type="xsd:string" default="false"/>
      <!-- Custom extension CSS style class to apply to the label. -->
      <xsd:attribute name="labelStyleClass" type="xsd:string"/>
      <!-- Label expression for the "none selected" option -->
      <xsd:attribute name="noneSelectedLabel" type="xsd:string"/>
      <!-- The number of child MenuItems to show in each column.  If not specified, all children
           will be shown in a single column. -->
      <xsd:attribute name="numEntriesPerColumn" type="xsd:integer" default="0"/>
      <!-- Gosu expression to be executed after the value is set from a picker. -->
      <xsd:attribute name="onPick" type="xsd:string"/>
      <!-- An optional expression to specify an icon for each option. The option value is exposed
           as "VALUE". The return value's type is determined by OPTION_ICON_TYPE -->
      <xsd:attribute name="optionIcon" type="xsd:string"/>
      <!-- Color of the icon. The option value is exposed as "VALUE". If not set will default
           to its font color. -->
      <xsd:attribute name="optionIconColor" type="xsd:string"/>
      <!-- An enumeration of icon types that determine what the 'optionIcon' property on the
           widget is referring to. -->
      <xsd:attribute name="optionIconType" type="IconTypeEnum"/>
      <!-- A Gosu expression used to validate user value before setting it to the model. This
           expression can access any symbols available to this widget, and a "VALUE" symbol that
           represents the user value. If this expression returns null, the user value will be
           set into the model. Otherwise, an error message containing the result of the expression
           will be displayed on the page, the value will not be set into the model, and no actions
           can be performed until the error is corrected. -->
      <xsd:attribute name="requestValidationExpression" type="xsd:string"/>
      <!-- If true, then the cell must be filled out by the user -->
      <xsd:attribute name="required" type="xsd:string"/>
      <!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * Deprecated.
           DO NOT USE.                                           * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
           Consider using "onChange/onPick/inputConversion/outputConversion" where available.
           If specified and the Input is editable, then any new value of the Input is written
           to this expression (Gosu by default) instead of to "value".  The new value is exposed
           as the symbol "VALUE".  For instance if your value expression is "Foo.getSomething()"
           then it can't be written to since it's not an L-value; so you could specify a setter
           expression along the lines of "Foo.setSomething(VALUE)" Warning: if you use this attribute
           many pebbles features will not work, including but not limited to: * Correct automatic
           detection of the state of the updated data * Correct automatic detection of the editability
           of the data * Correct automatic detection of the maximum size of a text input -->
      <xsd:attribute name="setter" type="xsd:string"/>
      <!-- Optional keyboard shortcut character in the form of "Q" or "ShiftQ"; the "Alt" key
           is implicit. This is only applicable when this widget has an "action" specified and
           the value is not being edited. -->
      <xsd:attribute name="shortcut" type="xsd:string"/>
      <!-- Boolean expression which determines whether or not to show a confirmation message
           when the field value is changed directly from the UI. It's NOT applicable when the
           value is changed indirectly, for example, as a result of client reflection. -->
      <xsd:attribute name="showConfirmMessage" type="xsd:string"/>
      <!-- If true, the contents of the Widget will be stacked vertically. -->
      <xsd:attribute name="stacked" type="xsd:string" default="false"/>
      <!-- An optional attribute, if set, defer sub menu generation until user tries to open
           the menu. DO NOT set this flag unless the sub menu of this widget is very expensive
           to generate. Setting this flag will reduce time to load the page, however require
           fetching additional info from server in the background, when the menu gets opened
           for the first time after page loaded. -->
      <xsd:attribute name="subMenuOnDemand" type="xsd:boolean" default="false"/>
      <!-- A Gosu expression to run before committing the record. This expression can refer to
           any symbols available to this widget. If this expression returns null, the validation
           is considered successful; otherwise, the result of this expression will be displayed
           as an error and the record will not be committed. -->
      <xsd:attribute name="validationExpression" type="xsd:string"/>
      <!-- The value this Input binds to as an Expression.  If the Input is editable then this
           value is both read from and written to (unless "setter" is defined). -->
      <xsd:attribute name="value" type="xsd:string" use="required"/>
      <!-- CSS max-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionMaxWidth" type="xsd:string"/>
      <!-- CSS min-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionMinWidth" type="xsd:string"/>
      <!-- CSS width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionWidth" type="xsd:string"/>
      <!-- The type of the value expression. -->
      <xsd:attribute name="valueType" type="xsd:string" use="required"/>
      <!-- If used instead of "editable", specifies whether the Input is editable when data is
           being created -->
      <xsd:attribute name="visible" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- A Cell that includes a drop-down list of users related to the current user, and a
       menu containing Select User and Search User items.  The locations to which those items
       navigate are specified by the searchLocation and selectionLocation attributes. -->
  <xsd:element name="UserCell">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="Reflect" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element ref="ColumnFooter" minOccurs="0" maxOccurs="1"/>
        <xsd:element ref="PostOnChange" minOccurs="0" maxOccurs="1"/>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="AddMenuItem"/>
          <xsd:element ref="AddMenuItemIterator"/>
          <xsd:element ref="MenuItem"/>
          <xsd:element ref="MenuItemDivider"/>
          <xsd:element ref="MenuItemIterator"/>
          <xsd:element ref="MenuItemSetRef"/>
          <xsd:element ref="MenuItemTree"/>
          <xsd:element ref="PickerMenuItem"/>
          <xsd:element ref="SearchItem"/>
        </xsd:choice>
      </xsd:sequence>
      <!-- An optional action to take when the user clicks the value of this widget when the
           value is not being edited. See ActionBase for details. When specified, the value of
           this widget will be rendered as a link when the value is not being edited. -->
      <xsd:attribute name="action" type="xsd:string"/>
      <!-- An optional boolean expression controlling whether the action should be available
           in this specific context when in read-only mode.  This is ignored if in edit mode
           or if the action is null.  This attribute will be deprecated in a future release,
           please use the 'available' attribute instead.  To disable action in readonly mode,
           you can set available=&quot;CurrentLocation.InEditMode || &lt;action-available-condition&gt;&quot; -->
      <xsd:attribute name="actionAvailable" type="xsd:string"/>
      <!-- Specifies the alignment of this cell. Valid values: "left", "right", or "center".
           If no value is specified, the default alignment is determined by the value type ("center"
           for boolean values; "right" for numeric values; "left" for other value types). -->
      <xsd:attribute name="align" type="WidgetAlignment"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- Boolean expression which, if false, grays out the widget and all its children -->
      <xsd:attribute name="available" type="xsd:string"/>
      <!-- If true, renders the cell contents in bold text. Defaults to false. -->
      <xsd:attribute name="bold" type="xsd:boolean" default="false"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- The HTML colspan attribute, lets this cell span across multiple columns of other rows.
           Useful for generating a "group header" row above a RowIterator. The default value
           is 1. A value greater than 1 is only allowed when the containing row is not iterated
           by a RowIterator. -->
      <xsd:attribute name="colspan" type="xsd:integer"/>
      <!-- The confirmation message to show when "showConfirmMessage" is set. If not specified,
           a standard message will be used. -->
      <xsd:attribute name="confirmMessage" type="xsd:string"/>
      <!-- A Gosu expression used to convert the value picked from a popup before set it into
           the model value of this widget. The picked value will be exposed as a symbol with
           the name "PickedValue" -->
      <xsd:attribute name="conversionExpression" type="xsd:string"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- Boolean expression which, if false, makes this widget and all its children read-only -->
      <xsd:attribute name="editable" type="xsd:string" default="false"/>
      <!-- If true, allows the user to sort the values in the column by clicking on the header.
            Only applicable when the containing row is iterated by a RowIterator. -->
      <xsd:attribute name="enableSort" type="xsd:boolean" default="true"/>
      <!-- If true, this cell will the last cell in the row to be navigated to via the ENTER
           key. Only applicable when "CellNavOnEnter" or "QuickAddOnEnter" is set. Normally not
           specified. Default to false. -->
      <xsd:attribute name="endOfCellNav" type="xsd:boolean" default="false"/>
      <!-- If true, instead of showing a hierarchical menu, the widget will show a single menu
           with sub-menus grouped under headers. -->
      <xsd:attribute name="flatten" type="xsd:boolean" default="false"/>
      <!-- An optional boolean expression, if returns true, this widget will get focus when start
           editing the containing location. -->
      <xsd:attribute name="focusOnStartEditing" type="xsd:string"/>
      <!-- An expression that returns a GWColor instance. Legacy: this method can instead return
           a string corresponding to a CSS Specification Level 3 color name. See GWColor for
           more details. -->
      <xsd:attribute name="fontColor" type="xsd:string"/>
      <!-- An optional expression. If specified, a footer cell with the specified value will
           be rendered for this column. Only applicable when the containing Row is iterated by
           a RowIterator. Not allowed when "footerSumValue" is specified. -->
      <xsd:attribute name="footerLabel" type="xsd:string"/>
      <!-- An optional expression, if specified, will be used as format pattern for the footer
           sum value. Normally not specified, so that the "format" and\or "formatType" of the
           cell value will be applied to footer sum value. Only applicable when "footerSumValue"
           is specified. The result of this expression must conform to the number format defined
           in java.text.DecimalFormat. -->
      <xsd:attribute name="footerSumFormat" type="xsd:string"/>
      <!-- An optional Numeric expression. If specified, a footer cell that sums the specified
           value for all cells in this column will be rendered. Pagination of the list does not
           affect the sum value. Only applicable when the containing row is iterated by a RowIterator.
           Not allowed when "footerLabel" is specified. -->
      <xsd:attribute name="footerSumValue" type="xsd:string"/>
      <!-- How the value is formatted; options include "general", "currency", and "email".  See
           the formatType enumeration. -->
      <xsd:attribute name="formatType" type="FormatType"/>
      <!-- If true, the ListView will be grouped by this cell upon entering the page. Only one
           grouped cell is allowed at any given time and it is only applicable when the column
           is sortable. -->
      <xsd:attribute name="groupedOnEnter" type="xsd:string"/>
      <!-- If true, this Cell and any other grow-enabled Cell will expand to fill remaining space
           in the ListViewPanel. Only applicable when the ListView is set to stretch. -->
      <xsd:attribute name="grow" type="xsd:boolean" default="false"/>
      <!-- If true, generates a checkbox at the beginning of this cell. This checkbox can be
           used to check this entry in the nearest containing Iterator. Defaults to false. Only
           allowed if this cell is inside a CellIterator or under a Row inside a RowIterator. -->
      <xsd:attribute name="hasCheckBox" type="xsd:boolean" default="false"/>
      <!-- CSS height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="height" type="xsd:string"/>
      <!-- A Gosu expression which, if defined, is evaluated to create help info that guides
           the user to edit this widget. The help info will show up if the user hovers the mouse
           over or focuses on the widget, when the widget is in edit mode. -->
      <xsd:attribute name="helpText" type="xsd:string"/>
      <!-- If false, menu items under this input will be shown even when the input is not editable. -->
      <xsd:attribute name="hideChildrenIfReadOnly" type="xsd:boolean" default="true"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- Refers to an image file. If defined, makes this an icon cell. The "value" attribute
           should be a boolean expression describing whether the icon is visible in a given row. -->
      <xsd:attribute name="icon" type="xsd:string"/>
      <!-- Color of the icon. If not set will default to its font color. -->
      <xsd:attribute name="iconColor" type="xsd:string"/>
      <!-- The ALT text for any icon generated in the content cells -->
      <xsd:attribute name="iconLabel" type="xsd:string"/>
      <!-- An enumeration of icon types that determine what the 'icon' property on the widget
           is referring to. -->
      <xsd:attribute name="iconType" type="IconTypeEnum"/>
      <!-- Reference ID of the widget.  This does not have to be globally unique; it only has
           to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <!-- A Gosu expression that converts the presentation value to a model value. The presentation
           value string is exposed to this expression as the symbol "VALUE". -->
      <xsd:attribute name="inputConversion" type="xsd:string"/>
      <!-- An optional expression. If specified, a header cell with the specified value will
           be rendered for this column. Only applicable when the containing row is iterated by
           a RowIterator. -->
      <xsd:attribute name="label" type="xsd:string"/>
      <!-- Custom extension CSS style class to apply to the header. -->
      <xsd:attribute name="labelStyleClass" type="xsd:string"/>
      <!-- CSS max-height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="maxHeight" type="xsd:string"/>
      <!-- CSS max-width value. Can be `px`, or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="maxWidth" type="xsd:string"/>
      <!-- CSS min-height value. Can be `px` or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="minHeight" type="xsd:string"/>
      <!-- CSS min-width value. Can be `px`, or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="minWidth" type="xsd:string"/>
      <!-- The number of child MenuItems to show in each column.  If not specified, all children
           will be shown in a single column. -->
      <xsd:attribute name="numEntriesPerColumn" type="xsd:integer" default="0"/>
      <!-- Gosu expression to be executed after the value is set from a picker. -->
      <xsd:attribute name="onPick" type="xsd:string"/>
      <!-- A Gosu expression that converts the model value to a presentation value. The model
           value is exposed to this expression as the symbol "VALUE". The return type of this
           expression must be String. -->
      <xsd:attribute name="outputConversion" type="xsd:string"/>
      <!-- Relative width when printing to PDF. All widths are relative to the widths of the
           other columns in the ListView -->
      <xsd:attribute name="printWidth" type="xsd:string" default="1"/>
      <!-- A Gosu expression used to validate user value before setting it to the model. This
           expression can access any symbols available to this widget, and a "VALUE" symbol that
           represents the user value. If this expression returns null, the user value will be
           set into the model. Otherwise, an error message containing the result of the expression
           will be displayed on the page, the value will not be set into the model, and no actions
           can be performed until the error is corrected. -->
      <xsd:attribute name="requestValidationExpression" type="xsd:string"/>
      <!-- If true, then the cell must be filled out by the user -->
      <xsd:attribute name="required" type="xsd:string"/>
      <!-- The location of the user search item as a Gosu expression of the form "[location name].go()" -->
      <xsd:attribute name="searchLocation" type="xsd:string" default="pcf.UserSearchPopup.push()"/>
      <!-- The location of the user select items as a Gosu expression of the form "[location
           name].go()" -->
      <xsd:attribute name="selectLocation" type="xsd:string" default="pcf.UserSelectPopup.push()"/>
      <!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * Deprecated.
           DO NOT USE.                                           * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
           Consider using "onChange/onPick/inputConversion/outputConversion" where available.
           If specified and the Input is editable, then any new value of the Input is written
           to this expression (Gosu by default) instead of to "value".  The new value is exposed
           as the symbol "VALUE".  For instance if your value expression is "Foo.getSomething()"
           then it can't be written to since it's not an L-value; so you could specify a setter
           expression along the lines of "Foo.setSomething(VALUE)" Warning: if you use this attribute
           many pebbles features will not work, including but not limited to: * Correct automatic
           detection of the state of the updated data * Correct automatic detection of the editability
           of the data * Correct automatic detection of the maximum size of a text input -->
      <xsd:attribute name="setter" type="xsd:string"/>
      <!-- Boolean expression which determines whether or not to show a confirmation message
           when the field value is changed directly from the UI. It's NOT applicable when the
           value is changed indirectly, for example, as a result of client reflection. -->
      <xsd:attribute name="showConfirmMessage" type="xsd:string"/>
      <!-- If true, shows the icon defined by "icon" in the header cell for this column. The
           default value is true. -->
      <xsd:attribute name="showHeaderIcon" type="xsd:boolean" default="true"/>
      <!-- An optional comma-separated sequence of Expressions, each of which is assumed to be
           a dot-delimited path, the value by which this column will be sorted if the user clicks
           on the header cell. -->
      <xsd:attribute name="sortBy" type="xsd:string"/>
      <!-- Either "ascending" or "descending" -->
      <xsd:attribute name="sortDirection" type="WidgetSortDirection" default="ascending"/>
      <!-- The priority of sorting relative to other sorting elements like IteratorSort and Cell.
           The lower the number, the higher the priority.  The highest priority is "1" -->
      <xsd:attribute name="sortOrder" type="xsd:integer" default="0"/>
      <!-- CSS style class for the cell content; for instance, "miniButton" makes a link appear
           as a small button -->
      <xsd:attribute name="styleClass" type="LinkStyleClass"/>
      <!-- An optional attribute, if set, defer sub menu generation until user tries to open
           the menu. DO NOT set this flag unless the sub menu of this widget is very expensive
           to generate. Setting this flag will reduce time to load the page, however require
           fetching additional info from server in the background, when the menu gets opened
           for the first time after page loaded. -->
      <xsd:attribute name="subMenuOnDemand" type="xsd:boolean" default="false"/>
      <!-- Extra "alt" text to show when the user hovers the mouse over the header cell of this
           column. -->
      <xsd:attribute name="tooltip" type="xsd:string"/>
      <!-- If true, validate before commit that the value of this column is unique across all
           rows in the current page. Only meaningful when this column is editable. -->
      <xsd:attribute name="unique" type="xsd:boolean" default="false"/>
      <!-- A Gosu expression to run before committing the record. This expression can refer to
           any symbols available to this widget. If this expression returns null, the validation
           is considered successful; otherwise, the result of this expression will be displayed
           as an error and the record will not be committed. -->
      <xsd:attribute name="validationExpression" type="xsd:string"/>
      <!-- The label of this cell to be used when it has validation issues. Not needed when this
           cell has a "label". Required if the cell is editable but does not have a "label". -->
      <xsd:attribute name="validationLabel" type="xsd:string"/>
      <!-- The value this element binds to.  If the element is editable then this value is both
           read from and written to (unless "setter" is defined). -->
      <xsd:attribute name="value" type="xsd:string"/>
      <!-- The type of the value expression. -->
      <xsd:attribute name="valueType" type="xsd:string" default="entity.User"/>
      <!-- Boolean expression which, if false, hides the <i>contents</i> of the cell (its "ValueWidget"),
           but not the cell itself.  Needed since hiding the actual cell usually screws up the
           layout -->
      <xsd:attribute name="valueVisible" type="xsd:string"/>
      <!-- Specifies the vertical alignment of this cell. Valid values: "top", "middle", or "bottom".
           If no value is specified, the default alignment is determined by the cell type ("top"
           for Text Areas and Format Cells, "middle" for buttons and icons). -->
      <xsd:attribute name="verticalAlign" type="WidgetVerticalAlignment"/>
      <!-- Boolean expression which, if false, completely hides the widget and all its children -->
      <xsd:attribute name="visible" type="xsd:string"/>
      <!-- CSS width value. Can be `px`, or `em`. If no suffix is provided, pixels are assumed. -->
      <xsd:attribute name="width" type="xsd:string"/>
      <!-- If default, defers to FormatType to decide whether to wrap or not.  If true, allows
           cell content to wrap. -->
      <xsd:attribute name="wrap" type="WrapType" default="default"/>
      <!-- If true, allows Header Cell text content to wrap. Defaults to true. -->
      <xsd:attribute name="wrapLabel" type="xsd:boolean" default="false"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- An Input that includes a drop-down list of users related to the current user, and
       a menu containing Select User and Search User items.  The locations to which those
       items navigate are specified by the searchLocation and selectionLocation attributes. -->
  <xsd:element name="UserInput">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="LayoutConfig" minOccurs="0" maxOccurs="1"/>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="AddMenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="AddMenuItemIterator" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemDivider" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemIterator" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemSetRef" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="MenuItemTree" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PickerMenuItem" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="PostOnChange" minOccurs="0" maxOccurs="1"/>
          <xsd:element ref="Reflect" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="SearchItem" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:choice>
      </xsd:sequence>
      <!-- An optional action to take when the user clicks the value of this widget when the
           value is not being edited. See ActionBase for list of available action prefixes. When
           specified, the value of this widget will be rendered as a link when the value is not
           being edited. -->
      <xsd:attribute name="action" type="xsd:string"/>
      <!-- An optional boolean expression controlling whether the action should be available
           in this specific context when in read-only mode.  This is ignored if in edit mode
           or if the action is null.  This attribute will be deprecated in a future release,
           please use the 'available' attribute instead.  To disable action in readonly mode,
           you can set available=&quot;CurrentLocation.InEditMode || &lt;action-available-condition&gt;&quot; -->
      <xsd:attribute name="actionAvailable" type="xsd:string"/>
      <!-- Alignment of the widget ("left", "right", or "center") -->
      <xsd:attribute name="align" type="WidgetAlignment"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- Boolean expression which, if false, grays out the widget and all its children -->
      <xsd:attribute name="available" type="xsd:string"/>
      <!-- If true then the label is displayed in bold text. -->
      <xsd:attribute name="boldLabel" type="xsd:boolean" default="false"/>
      <!-- If true then the value is displayed in bold text when read-only. -->
      <xsd:attribute name="boldValue" type="xsd:boolean" default="false"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- The confirmation message to show when "showConfirmMessage" is set. If not specified,
           a standard message will be used. -->
      <xsd:attribute name="confirmMessage" type="xsd:string"/>
      <!-- A Gosu expression used to convert the value picked from a popup before set it into
           the model value of this widget. The picked value will be exposed as a symbol with
           the name "PickedValue" -->
      <xsd:attribute name="conversionExpression" type="xsd:string"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- Boolean expression which, if false, makes this widget and all its children read-only -->
      <xsd:attribute name="editable" type="xsd:string" default="false"/>
      <!-- If true, instead of showing a hierarchical menu, the widget will show a single menu
           with sub-menus grouped under headers. -->
      <xsd:attribute name="flatten" type="xsd:boolean" default="false"/>
      <!-- An optional boolean expression, if returns true, this widget will get focus when start
           editing the containing location. -->
      <xsd:attribute name="focusOnStartEditing" type="xsd:string"/>
      <!-- How the value is formatted; options include "general", "currency", and "email".  See
           the formatType enumeration. -->
      <xsd:attribute name="formatType" type="FormatType"/>
      <!-- A Gosu expression which, if defined, is evaluated to create help info that guides
           the user to edit this widget. The help info will show up if the user hovers the mouse
           over or focuses on the widget, when the widget is in edit mode. -->
      <xsd:attribute name="helpText" type="xsd:string"/>
      <!-- If false, menu items under this input will be shown even when the input is not editable. -->
      <xsd:attribute name="hideChildrenIfReadOnly" type="xsd:boolean" default="true"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- Reference ID of the widget.  This does not have to be globally unique; it only has
           to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <!-- A Gosu expression that converts the presentation value to a model value. The presentation
           value string is exposed to this expression as the symbol "VALUE". -->
      <xsd:attribute name="inputConversion" type="xsd:string"/>
      <!-- Label to render. -->
      <xsd:attribute name="label" type="xsd:string"/>
      <!-- Boolean expression which, if true, causes the label portion of the Input to be rendered
           above the value -->
      <xsd:attribute name="labelAbove" type="xsd:string" default="false"/>
      <!-- Custom extension CSS style class to apply to the label. -->
      <xsd:attribute name="labelStyleClass" type="xsd:string"/>
      <!-- The number of child MenuItems to show in each column.  If not specified, all children
           will be shown in a single column. -->
      <xsd:attribute name="numEntriesPerColumn" type="xsd:integer" default="0"/>
      <!-- Gosu expression to be executed after the value is set from a picker. -->
      <xsd:attribute name="onPick" type="xsd:string"/>
      <!-- A Gosu expression that converts the model value to a presentation value. The model
           value is exposed to this expression as the symbol "VALUE". The return type of this
           expression must be String. -->
      <xsd:attribute name="outputConversion" type="xsd:string"/>
      <!-- A Gosu expression used to validate user value before setting it to the model. This
           expression can access any symbols available to this widget, and a "VALUE" symbol that
           represents the user value. If this expression returns null, the user value will be
           set into the model. Otherwise, an error message containing the result of the expression
           will be displayed on the page, the value will not be set into the model, and no actions
           can be performed until the error is corrected. -->
      <xsd:attribute name="requestValidationExpression" type="xsd:string"/>
      <!-- If true, then the cell must be filled out by the user -->
      <xsd:attribute name="required" type="xsd:string"/>
      <!-- The location of the user search item as a Gosu expression of the form "[location name].go()" -->
      <xsd:attribute name="searchLocation" type="xsd:string" default="pcf.UserSearchPopup.push()"/>
      <!-- The location of the user select items as a Gosu expression of the form "[location
           name].go()" -->
      <xsd:attribute name="selectLocation" type="xsd:string" default="pcf.UserSelectPopup.push()"/>
      <!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * Deprecated.
           DO NOT USE.                                           * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
           Consider using "onChange/onPick/inputConversion/outputConversion" where available.
           If specified and the Input is editable, then any new value of the Input is written
           to this expression (Gosu by default) instead of to "value".  The new value is exposed
           as the symbol "VALUE".  For instance if your value expression is "Foo.getSomething()"
           then it can't be written to since it's not an L-value; so you could specify a setter
           expression along the lines of "Foo.setSomething(VALUE)" Warning: if you use this attribute
           many pebbles features will not work, including but not limited to: * Correct automatic
           detection of the state of the updated data * Correct automatic detection of the editability
           of the data * Correct automatic detection of the maximum size of a text input -->
      <xsd:attribute name="setter" type="xsd:string"/>
      <!-- Optional keyboard shortcut character in the form of "Q" or "ShiftQ"; the "Alt" key
           is implicit. This is only applicable when this widget has an "action" specified and
           the value is not being edited. -->
      <xsd:attribute name="shortcut" type="xsd:string"/>
      <!-- Boolean expression which determines whether or not to show a confirmation message
           when the field value is changed directly from the UI. It's NOT applicable when the
           value is changed indirectly, for example, as a result of client reflection. -->
      <xsd:attribute name="showConfirmMessage" type="xsd:string"/>
      <!-- An optional attribute, if set, defer sub menu generation until user tries to open
           the menu. DO NOT set this flag unless the sub menu of this widget is very expensive
           to generate. Setting this flag will reduce time to load the page, however require
           fetching additional info from server in the background, when the menu gets opened
           for the first time after page loaded. -->
      <xsd:attribute name="subMenuOnDemand" type="xsd:boolean" default="false"/>
      <!-- A Gosu expression to run before committing the record. This expression can refer to
           any symbols available to this widget. If this expression returns null, the validation
           is considered successful; otherwise, the result of this expression will be displayed
           as an error and the record will not be committed. -->
      <xsd:attribute name="validationExpression" type="xsd:string"/>
      <!-- The value this Input binds to as an Expression.  If the Input is editable then this
           value is both read from and written to (unless "setter" is defined). -->
      <xsd:attribute name="value" type="xsd:string" use="required"/>
      <!-- CSS max-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionMaxWidth" type="xsd:string"/>
      <!-- CSS min-width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionMinWidth" type="xsd:string"/>
      <!-- CSS width value. Can be `px` or `em`. If no suffix is provided, pixels are assumed.
           Represents the width of the value portion of the label/value pair. -->
      <xsd:attribute name="valueSectionWidth" type="xsd:string"/>
      <!-- The type of the value expression. -->
      <xsd:attribute name="valueType" type="xsd:string" default="entity.User"/>
      <!-- If used instead of "editable", specifies whether the Input is editable when data is
           being created -->
      <xsd:attribute name="visible" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- Creates a new local variable with the same lifespan as the parent widget.  This variable
       can be edited directly by value / input / cell widgets. -->
  <xsd:element name="Variable">
    <xsd:complexType>
      <xsd:choice minOccurs="0" maxOccurs="unbounded"/>
      <!-- The initial value of the Variable, specified as a Gosu expression. If not specified,
           the initial value will be null. -->
      <xsd:attribute name="initialValue" type="xsd:string"/>
      <!-- The name by which the variable is exposed.  The parent widget of this element and
           all its descendents will be able to refer to the symbol by this name.  Note that Inputs
           and Cells can refer to "name" <i>directly</i> in their "value" expressions and even
           change the value of the variable. -->
      <xsd:attribute name="name" type="xsd:string" use="required"/>
      <!-- If true, the value of the variable will be reset by calculating the initialValue expression,
           when the page is rerendered from the server. Default to false. -->
      <xsd:attribute name="recalculateOnRefresh" type="xsd:boolean" default="false"/>
      <!-- The type of the symbol, such as "String" or "Policy". -->
      <xsd:attribute name="type" type="xsd:string" use="required"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- A handy widget for displaying static text on the UI -->
  <xsd:element name="Verbatim">
    <xsd:complexType>
      <xsd:choice minOccurs="0" maxOccurs="unbounded"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- If true, the Widget will have a border around it. Purely a visual effect. -->
      <xsd:attribute name="border" type="xsd:boolean" default="false"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- (Optional) reference ID of the widget.  This does not have to be globally unique;
           it only has to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string"/>
      <!-- Label to render. -->
      <xsd:attribute name="label" type="xsd:string"/>
      <!-- Deprecated. Use widgetStyle.Custom extension CSS style class to apply to the label. -->
      <xsd:attribute name="labelStyleClass" type="xsd:string"/>
      <!-- Boolean expression which, if false, completely hides the widget and all its children -->
      <xsd:attribute name="visible" type="xsd:string"/>
      <!-- Deprecated. Use widgetStyle. If true, renders the message in a more visible "warning"
           style -->
      <xsd:attribute name="warning" type="xsd:boolean" default="false"/>
      <!-- "In general, determines the amount of spacing OUTSIDE of the Widget in all 4 directions:
           top, right, bottom, left. However, different Widgets may have requirements that prevent
           all 4 directions from being modified. -->
      <xsd:attribute name="widgetOuterSpacing" type="WidgetSpacing" default="normal"/>
      <!-- The style of the Widget. In general, this refers to the background color and text
           color, but there are possible additions like cursor changes or filters. -->
      <xsd:attribute name="widgetStyle" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- A special Worksheet to display runtime web messages. Do <b>NOT</b> modify. -->
  <xsd:element name="WebMessageWorksheet">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="LocationEntryPoint" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element ref="Scope" minOccurs="1" maxOccurs="unbounded"/>
        <xsd:element ref="Variable" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="Screen" minOccurs="0" maxOccurs="1"/>
          <xsd:element ref="ScreenRef" minOccurs="0" maxOccurs="1"/>
        </xsd:choice>
        <xsd:element ref="Code" minOccurs="0" maxOccurs="1"/>
      </xsd:sequence>
      <!-- Gosu expression to run after the location is canceled. -->
      <xsd:attribute name="afterCancel" type="xsd:string"/>
      <!-- Gosu expression to run after the location is updated. -->
      <xsd:attribute name="afterCommit" type="xsd:string"/>
      <!-- Gosu expression to run after return to this page from a popup. Whether the popup was
           committed is exposed as a symbol with the name "committed". -->
      <xsd:attribute name="afterReturnFromPopup" type="xsd:string"/>
      <!-- If true the location will always go back to edit mode after a commit / cancel -->
      <xsd:attribute name="alwaysInEditMode" type="xsd:string"/>
      <!-- Gosu expressionto run when the location is canceled but before the rest of the cancel
           completes. -->
      <xsd:attribute name="beforeCancel" type="xsd:string"/>
      <!-- Gosu expression to run before the location is updated but after the UI is validated. -->
      <xsd:attribute name="beforeCommit" type="xsd:string"/>
      <!-- Gosu expression to run before the location is updated and before the UI is validated. -->
      <xsd:attribute name="beforeValidate" type="xsd:string"/>
      <!-- A boolean expression which, if false, prevents the user from putting the location
           into edit mode -->
      <xsd:attribute name="canEdit" type="xsd:string"/>
      <!-- A boolean expression which, if false, means the user has no permission to visit the
           location, and links to the location will be either invisible or grayed out, depending
           on context. -->
      <xsd:attribute name="canVisit" type="xsd:string"/>
      <!-- An optional attribute, if true, this worksheet will be closed when leave the worksheet
           scope. Only applicable 
if it has no unsaved work. Default to false, so that the worksheet
           becomes hidden when out of scope,
and reappears automatically when enter the scope
           again. -->
      <xsd:attribute name="closeOnLeaveScope" type="xsd:boolean" default="false"/>
      <!-- If false, the location can still be kept in the autosave cache, but does not appear
           as unsaved work to the user (with link highlighting etc.). -->
      <xsd:attribute name="countsAsWork" type="xsd:boolean" default="true"/>
      <!-- Use this to add your own comments to this element. For now this attribute does nothing;
           later if we create a "UI dictionary" or PCF editor, the description will show up there. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- An optional boolean expression, if specified, determines whether validation issues
           on a particular entity should be fixed on this page. The entity instance with validation
           issues is exposed to this expression as "VALUE". For example, "VALUE typeis entity.MyBean".
           If not specified, validation issues on any entity that matches type of the "validationParameter"
           should be fixed on this page.<br> This attribute is ignored if "validationParameter"
           is not defined. -->
      <xsd:attribute name="handlesValidationIssue" type="xsd:string"/>
      <!-- If true then changed inputs and cells in this location will be highlighted. -->
      <xsd:attribute name="highlightChangedValues" type="xsd:boolean" default="true"/>
      <!-- ID of this Location. Must be unique among all Locations. -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <!-- This expression, when specified, appends a link to the concurrent data change error
           message. The text of the link will be the value of the display key Java.Message.ConcurrentDataChange.Link.
           Clicking on the link will execute the given expression. A concurrent data change error
           happens if a user's changes cannot be committed because they clash with concurrent
           changes by a different user. -->
      <xsd:attribute name="onConcurrentDataChange" type="xsd:string"/>
      <!-- Reference to the "parent location" of this location, to specifiy the hierarchy of
           pcf locations. Used for the automatically generated "up link" in the title bar, highlighting
           of current menu links, and grouping items under "Unsaved Work". Usually the parent
           is the location right above this location in the application hierarchy, i.e. the parent
           of "ActivityDetailWorksheet" is "ClaimWorkplan", the parent of "Desktop Activities"
           is "Desktop" and "Desktop" has no parent at all. -->
      <xsd:attribute name="parent" type="xsd:string"/>
      <!-- If true, creates an "up link" icon in the title bar that links to the parent location.
            The upLink will pop the current location off the stack if the parent location is
           in the stack; otherwise, the upLink will "go" to the parent location, passing all
           of the symbols from the current page in a manner consistent with the "go" action. -->
      <xsd:attribute name="showUpLink" type="xsd:boolean" default="false"/>
      <!-- Gosu expression to run when the location goes into edit mode. -->
      <xsd:attribute name="startEditing" type="xsd:string"/>
      <!-- Boolean expression which, if true, puts the location in edit mode as soon as the user
           enters it -->
      <xsd:attribute name="startInEditMode" type="xsd:string" default="false"/>
      <!-- The label for the tab of this Worksheet in the Workspace -->
      <xsd:attribute name="tabLabel" type="xsd:string" use="required"/>
      <!-- The title of the location.  The title is shown in the top title bar, unless the Screen
           uses a special TitleBar element to override it. -->
      <xsd:attribute name="title" type="xsd:string" use="required"/>
      <!-- If false, the page will disable the automatic validation that happens on every commit.
            Only set this attribute to false if you're really sure you know what you're doing. -->
      <xsd:attribute name="validateOnBundleCommit" type="xsd:boolean" default="true"/>
      <!-- The name of an argument on a LocationEntryPoint, used for fixing entity validation
           issues. -->
      <xsd:attribute name="validationParameter" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- A Location with multiple Screens -->
  <xsd:element name="Wizard">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="LocationEntryPoint" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element ref="Variable" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="JobWizardStep" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="WizardStep" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="WizardStepGroup" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="WizardStepGroupRef" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="WizardStepIterator" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="WizardStepSet" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="WizardStepSetRef" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:choice>
        <xsd:element ref="Code" minOccurs="0" maxOccurs="1"/>
      </xsd:sequence>
      <!-- The ID of the AcceleratedMenuActions content for this location group. It will be inherited
           by all descendent Locations of this group by default. Normally not used, but use MenuActions
           instead. -->
      <xsd:attribute name="acceleratedMenuActions" type="xsd:string"/>
      <!-- Gosu expression to run after the Wizard is canceled.  See ActionBase for kinds of
           available actions -->
      <xsd:attribute name="afterCancel" type="xsd:string"/>
      <!-- Gosu expression to run after the user gets all the way through and finishes the Wizard. -->
      <xsd:attribute name="afterFinish" type="xsd:string"/>
      <!-- Gosu expression to run after return to this page from a popup. Whether the popup was
           committed is exposed as a symbol with the name "committed". -->
      <xsd:attribute name="afterReturnFromPopup" type="xsd:string"/>
      <!-- If true, then the location will be saved in the auto-save cache when the user navigates
           out if (a) it is in edit mode, and (b) there is any unsaved data. The location is
           restored from the cache when the user returns to it -->
      <xsd:attribute name="autosaveable" type="xsd:boolean" default="true"/>
      <!-- Gosu expression to run when the Wizard is canceled but before the rest of the cancel
           completes. -->
      <xsd:attribute name="beforeCancel" type="xsd:string"/>
      <!-- Gosu expression to run before the wizard state is persisted into database. -->
      <xsd:attribute name="beforeCommit" type="xsd:string"/>
      <!-- A boolean expression which, if false, prevents the user from putting the location
           into edit mode -->
      <xsd:attribute name="canEdit" type="xsd:string"/>
      <!-- A boolean expression which, if false, means the user has no permission to visit the
           location, and links to the location will be either invisible or grayed out, depending
           on context. -->
      <xsd:attribute name="canVisit" type="xsd:string"/>
      <!-- Gosu expression that returns a message to display in a confirmation dialog when the
           user attempts to cancel this wizard -->
      <xsd:attribute name="cancelWarning" type="xsd:string"/>
      <!-- If false, the location can still be kept in the autosave cache, but does not appear
           as unsaved work to the user (with link highlighting etc.). -->
      <xsd:attribute name="countsAsWork" type="xsd:boolean" default="true"/>
      <!-- Use this to add your own comments to this element. For now this attribute does nothing;
           later if we create a "UI dictionary" or PCF editor, the description will show up there. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- If non-null, the string specified will be presented to the user as a confirmation
           message when they attempt to finish the wizard. -->
      <xsd:attribute name="finishConfirmation" type="xsd:string"/>
      <!-- If true then changed inputs and cells in this location will be highlighted. -->
      <xsd:attribute name="highlightChangedValues" type="xsd:boolean" default="true"/>
      <!-- Color of the icon. If not set will default to its font color. -->
      <xsd:attribute name="iconColor" type="xsd:string"/>
      <!-- ID of this Location. Must be unique among all Locations. -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <!-- The optional title for menu links of independent steps. -->
      <xsd:attribute name="independentStepsTitle" type="xsd:string"/>
      <!-- The optional title icon for menu links of independent steps. -->
      <xsd:attribute name="independentStepsTitleIcon" type="xsd:string"/>
      <!-- An enumeration of icon types that determine what the 'independentStepsTitleIcon' property
           on the widget is referring to. -->
      <xsd:attribute name="independentStepsTitleIconType" type="IconTypeEnum"/>
      <!-- ID of the InfoBar content for this location (just below the TabBar and above the main
           content) -->
      <xsd:attribute name="infoBar" type="xsd:string"/>
      <!-- If true, this wizard will have no MenuLinks of its own, and will inherit MenuLinks
           from its ancestor location group (if any). -->
      <xsd:attribute name="inheritMenuLinks" type="xsd:boolean" default="false"/>
      <!-- A boolean expression which, if true, means the wizard started from a previously saved
           draft, in which case the wizard does not appear as unsaved work on enter. -->
      <xsd:attribute name="isDraftOnEnter" type="xsd:string"/>
      <!-- ID of the optional MenuActions content for this location (in the bottom of the left
           menu) -->
      <xsd:attribute name="menuActions" type="xsd:string"/>
      <!-- Normally <i>NOT</i> specified, in which case default MenuLinks (in the left menu)
           are generated based on steps of this wizard. -->
      <xsd:attribute name="menuLinks" type="xsd:string"/>
      <!-- ID of the optional MenuTree content for this location (in the left menu).  This should
           only be used if the wizard is also overriding the menuLinks attribute -->
      <xsd:attribute name="menuTree" type="xsd:string"/>
      <!-- This expression, when specified, appends a link to the concurrent data change error
           message. The text of the link will be the value of the display key Java.Message.ConcurrentDataChange.Link.
           Clicking on the link will execute the given expression. A concurrent data change error
           happens if a user's changes cannot be committed because they clash with concurrent
           changes by a different user. -->
      <xsd:attribute name="onConcurrentDataChange" type="xsd:string"/>
      <!-- A Gosu expression to run when this location is resumed from the autosave cache. -->
      <xsd:attribute name="onResume" type="xsd:string"/>
      <!-- Reference to the "parent location" of this location, to specifiy the hierarchy of
           pcf locations. Used for the automatically generated "up link" in the title bar, highlighting
           of current menu links, and grouping items under "Unsaved Work". Usually the parent
           is the location right above this location in the application hierarchy, i.e. the parent
           of "ActivityDetailWorksheet" is "ClaimWorkplan", the parent of "Desktop Activities"
           is "Desktop" and "Desktop" has no parent at all. -->
      <xsd:attribute name="parent" type="xsd:string"/>
      <!-- If true, creates an "up link" icon in the title bar that links to the parent location.
            The upLink will pop the current location off the stack if the parent location is
           in the stack; otherwise, the upLink will "go" to the parent location, passing all
           of the symbols from the current page in a manner consistent with the "go" action. -->
      <xsd:attribute name="showUpLink" type="xsd:boolean" default="false"/>
      <!-- Boolean expression which, if true, puts the location in edit mode as soon as the user
           enters it. Default to true for Wizard. -->
      <xsd:attribute name="startInEditMode" type="xsd:string" default="true"/>
      <!-- The optional sub title for this wizard. If specified, it will be displayed in the
           left nav bar above links to wizard steps. -->
      <xsd:attribute name="subtitle" type="xsd:string"/>
      <!-- ID of the TabBar content for this location group. Normally not specified since "TabBar()"
           is the default. -->
      <xsd:attribute name="tabBar" type="xsd:string" default="TabBar()"/>
      <!-- The optional title for this wizard. If specified, it will be displayed in the left
           nav bar above links to wizard steps. -->
      <xsd:attribute name="title" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- A set of pre-included toolbar buttons for Wizard control.  Gets its set of buttons
       from its containing wizard -->
  <xsd:element name="WizardButtons">
    <xsd:complexType>
      <xsd:choice minOccurs="0" maxOccurs="unbounded"/>
      <!-- A gosu expression that returns an AriaInfo instance. Information on the object will
           be used to populate HTML Attributes relating to ARIA and will override widget defaults.
           Most widgets will have appropriate defaults, or will make use of existing properties
           to populate various ARIA values. Like 'help text' being used for aria-label, if aria-label
           is not specified via this info object. -->
      <xsd:attribute name="ariaInfo" type="xsd:string"/>
      <!-- Cancel keyboard shortcut character in the form of "Q" or "ShiftQ"; the "Alt" key is
           implicit -->
      <xsd:attribute name="cancelShortcut" type="xsd:string"/>
      <!-- A space delimited list of CSS class names to appear on the outermost HTML element
           of the component. -->
      <xsd:attribute name="classList" type="xsd:string" default=""/>
      <!-- This button is the default for the page, and will be "clicked" when the user presses
           Enter -->
      <xsd:attribute name="defaultButton" type="DefaultButtonType" default="next"/>
      <!-- Use this to add your own comments to the widget.  For now this attribute does nothing;
           later if we create a "UI dictionary" the description will show up there, much the
           way it does in the Data Dictionary. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- Finish keyboard shortcut character in the form of "Q" or "ShiftQ"; the "Alt" key is
           implicit -->
      <xsd:attribute name="finishShortcut" type="xsd:string"/>
      <!-- If true, makes the widget invisible if it <i>is</i> editable. -->
      <xsd:attribute name="hideIfEditable" type="xsd:boolean" default="false"/>
      <!-- If true, makes the widget invisible if it is <i>not</i> editable. -->
      <xsd:attribute name="hideIfReadOnly" type="xsd:boolean" default="false"/>
      <!-- (Optional) reference ID of the widget.  This does not have to be globally unique;
           it only has to be unique among the widget's siblings -->
      <xsd:attribute name="id" type="xsd:string"/>
      <!-- The value returned from this location when update is clicked -->
      <xsd:attribute name="pickValue" type="xsd:string" default=""/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- Defines one step in a Wizard. -->
  <xsd:element name="WizardStep">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="NextCondition" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="SkipButton" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:choice>
      </xsd:sequence>
      <!-- Gosu expression indicating whether or not the finish button is available. If not specified,
           then the finish button will be available if this is the last step in the wizard. -->
      <xsd:attribute name="allowFinish" type="xsd:string"/>
      <!-- Gosu expression indicating whether or not the next button is available. If not specified,
           then the next button will be available unless this is the last step in the wizard. -->
      <xsd:attribute name="allowNext" type="xsd:string"/>
      <!-- A boolean expression which, if false, grays the step out and won't let the user visit
           it (as opposed to visible/canVisit, which hide the step completely) -->
      <xsd:attribute name="available" type="xsd:string" default="true"/>
      <!-- Gosu expression to execute before save this step. Only applicable when "save" returns
           true. -->
      <xsd:attribute name="beforeSave" type="xsd:string"/>
      <!-- An optional boolean expression, if specified, determines whether validation issues
           on a particular entity should be fixed on this Step. The entity instance with validation
           issues is exposed to this expression as "VALUE". For example, "VALUE typeis entity.MyBean".
           And the corresponding validation issue is exposed as "ISSUE" -->
      <xsd:attribute name="handlesValidationIssue" type="xsd:string"/>
      <!-- The name of a .png file, or .svg file, or font glyph. The Widget's iconType determines
           which one. -->
      <xsd:attribute name="icon" type="xsd:string"/>
      <!-- Color of the icon. If not set will default to its font color. -->
      <xsd:attribute name="iconColor" type="xsd:string"/>
      <!-- An enumeration of icon types that determine what the 'icon' property on the widget
           is referring to. -->
      <xsd:attribute name="iconType" type="IconTypeEnum"/>
      <!-- The reference ID of the step, which must be unique among all locations.  This ID is
           used for a lot of purposes; most importantly it is what you refer to in the "go" action -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <!-- If true, the step is displayed at the bottom of the wizard, and is separated from
           ordinary wizard navigation; in particular, it is not affected by the high water mark. -->
      <xsd:attribute name="independent" type="xsd:boolean" default="false"/>
      <!-- The label for this step in the wizard menu links.  If unspecified, the "title" attribute
           is used as the default. -->
      <xsd:attribute name="label" type="xsd:string"/>
      <!-- If this Widget can be placed in a minimized state, this minimizedLabel text will be
           used. Otherwise, the Widget will use its global shortcut key, or icon if available. -->
      <xsd:attribute name="minimizedLabel" type="xsd:string"/>
      <!-- If defined, "mode" is evaluated and its result is converted to a String; the screen
           will be loaded whose "mode" matches the evaluated "mode" of this element.  If no screen
           is found with a matching "mode", then the panel with mode="default" is used; if there
           is no default a runtime exception is thrown -->
      <xsd:attribute name="mode" type="xsd:string"/>
      <!-- Gosu expression to execute when entering this step every time. -->
      <xsd:attribute name="onEnter" type="xsd:string"/>
      <!-- Gosu expression to run when leaving this step to move forward in the wizard or when
           finishing on this step. -->
      <xsd:attribute name="onExit" type="xsd:string"/>
      <!-- Gosu expression to execute when entering this step for the first time. -->
      <xsd:attribute name="onFirstEnter" type="xsd:string"/>
      <!-- If true, refreshes the steps in the wizard when leaving this step.  Should only be
           set to true on steps that allow the editing of some value that could affect a WizardStepIterator
           defined in this wizard -->
      <xsd:attribute name="refreshStepsOnExit" type="xsd:boolean" default="false"/>
      <!-- If true, a draft will be saved whenever we exit this step -->
      <xsd:attribute name="save" type="xsd:string" default="false"/>
      <!-- The ID of the Screen for this step. -->
      <xsd:attribute name="screen" type="xsd:string" use="required"/>
      <!-- Optional Keyboard shortcut character in the form of "Q" or "ShiftQ"; the "Alt" key
           is implicit. If specified, this will be used for the MenuLink generated for this WizardStep. -->
      <xsd:attribute name="shortcut" type="xsd:string"/>
      <!-- If true, the next button will always be shown, regardless of whether or not the wizard
           thinks it has more steps. -->
      <xsd:attribute name="showNextIfLastStep" type="xsd:boolean" default="false"/>
      <!-- The title for this step -->
      <xsd:attribute name="title" type="xsd:string" use="required"/>
      <!-- A boolean expression which indicates if this Step is visible at all in the Wizard -->
      <xsd:attribute name="visible" type="xsd:string" default="true"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- Groups child Steps together, and provides a group label -->
  <xsd:element name="WizardStepGroup">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="Require" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="JobWizardStep" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="WizardStep" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="WizardStepGroup" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="WizardStepGroupRef" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="WizardStepIterator" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="WizardStepSet" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="WizardStepSetRef" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:choice>
      </xsd:sequence>
      <!-- If true, this group is collapsed in the left nav menu when none of its child steps
           is the currently selected step. Default to false. -->
      <xsd:attribute name="collapseIfNotCurrent" type="xsd:boolean" default="false"/>
      <!-- The reference ID of the group, which must be unique among all locations. -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <!-- label for this widget -->
      <xsd:attribute name="label" type="xsd:string" use="required"/>
      <!-- An optional String which, if specified, means that any element dynamically including
           this widget must specify the same mode.  There is also a special mode "default" you
           can use which means "Use this widget if no widget with the specified mode exists".
            You can also have this widget match more than one mode by separating mode strings
           with a | character. -->
      <xsd:attribute name="mode" type="xsd:string"/>
      <!-- Optional Keyboard shortcut character in the form of "Q" or "ShiftQ"; the "Alt" key
           is implicit. If specified, this will be used for the MenuLink generated for this WizardStepGroup. -->
      <xsd:attribute name="shortcut" type="xsd:string"/>
      <!-- A boolean expression which indicates if this Step is visible at all in the Wizard -->
      <xsd:attribute name="visible" type="xsd:string" default="true"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- Includes a globally-shared WizardStepGroup -->
  <xsd:element name="WizardStepGroupRef">
    <xsd:complexType>
      <xsd:choice minOccurs="0" maxOccurs="unbounded"/>
      <!-- ID of the group to include by reference -->
      <xsd:attribute name="def" type="xsd:string"/>
      <!-- If defined, "mode" is evaluated and its result is converted to a String; the path
           will be loaded whose "mode" matches the evaluated "mode" of this element.  If no path
           is found with a matching "mode", then the panel with mode="default" is used; if there
           is no default a runtime exception is thrown -->
      <xsd:attribute name="mode" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- Iterates over an array to create multiple steps in the wizard -->
  <xsd:element name="WizardStepIterator">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="JobWizardStep"/>
          <xsd:element ref="WizardStep"/>
          <xsd:element ref="WizardStepGroupRef"/>
          <xsd:element ref="WizardStepIterator"/>
          <xsd:element ref="WizardStepSetRef"/>
        </xsd:choice>
      </xsd:sequence>
      <!-- As each element in the array result of "value" is displayed, it is exposed as a symbol
           with the name "elementName", which the contents of this iterator can refer to -->
      <xsd:attribute name="elementName" type="xsd:string" use="required"/>
      <!-- Lets you manually specify the type of element exposed as "elementName".  This is useful
           if you have special knowledge about the type of element returned by "value": for example,
           if the field referred to returns an array of Contacts but you happen to know that
           they are guaranteed to all be Persons -->
      <xsd:attribute name="type" type="xsd:string"/>
      <!-- A Gosu expression that evaluates to the elements over which to iterate. Must evaluate
           to an Object array or a IQueryBeanResult. -->
      <xsd:attribute name="value" type="xsd:string" use="required"/>
      <!-- The type of the value expression. -->
      <xsd:attribute name="valueType" type="xsd:string" use="required"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- A group of wizard steps -->
  <xsd:element name="WizardStepSet">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="Require" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="JobWizardStep" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="WizardStep" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="WizardStepGroup" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="WizardStepGroupRef" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="WizardStepIterator" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="WizardStepSet" minOccurs="0" maxOccurs="unbounded"/>
          <xsd:element ref="WizardStepSetRef" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:choice>
      </xsd:sequence>
      <!-- A boolean expression which, if false, grays the step out and won't let the user visit
           it (as opposed to visible/canVisit, which hide the step completely) -->
      <xsd:attribute name="available" type="xsd:string" default="true"/>
      <!-- The reference ID of the group, which must be unique among all locations. -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <!-- An optional String which, if specified, means that any element dynamically including
           this widget must specify the same mode.  There is also a special mode "default" you
           can use which means "Use this widget if no widget with the specified mode exists".
            You can also have this widget match more than one mode by separating mode strings
           with a | character. -->
      <xsd:attribute name="mode" type="xsd:string"/>
      <!-- A boolean expression which indicates if this Step is visible at all in the Wizard -->
      <xsd:attribute name="visible" type="xsd:string" default="true"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- Includes a globally-shared wizard path by ID and, optionally, mode -->
  <xsd:element name="WizardStepSetRef">
    <xsd:complexType>
      <xsd:choice minOccurs="0" maxOccurs="unbounded"/>
      <!-- ID of the group to include by reference -->
      <xsd:attribute name="def" type="xsd:string"/>
      <!-- If defined, "mode" is evaluated and its result is converted to a String; the path
           will be loaded whose "mode" matches the evaluated "mode" of this element.  If no path
           is found with a matching "mode", then the panel with mode="default" is used; if there
           is no default a runtime exception is thrown -->
      <xsd:attribute name="mode" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
  
  <!-- A special Page that goes in the Workspace. A worksheet will only be visible when it's
       "in scope". Use the scope element to specify the scope of this worksheet. -->
  <xsd:element name="Worksheet">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="LocationEntryPoint" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:element ref="Scope" minOccurs="1" maxOccurs="unbounded"/>
        <xsd:element ref="Variable" minOccurs="0" maxOccurs="unbounded"/>
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element ref="Screen" minOccurs="0" maxOccurs="1"/>
          <xsd:element ref="ScreenRef" minOccurs="0" maxOccurs="1"/>
        </xsd:choice>
        <xsd:element ref="Code" minOccurs="0" maxOccurs="1"/>
      </xsd:sequence>
      <!-- Gosu expression to run after the location is canceled. -->
      <xsd:attribute name="afterCancel" type="xsd:string"/>
      <!-- Gosu expression to run after the location is updated. -->
      <xsd:attribute name="afterCommit" type="xsd:string"/>
      <!-- Gosu expression to run after return to this page from a popup. Whether the popup was
           committed is exposed as a symbol with the name "committed". -->
      <xsd:attribute name="afterReturnFromPopup" type="xsd:string"/>
      <!-- If true the location will always go back to edit mode after a commit / cancel -->
      <xsd:attribute name="alwaysInEditMode" type="xsd:string"/>
      <!-- Gosu expressionto run when the location is canceled but before the rest of the cancel
           completes. -->
      <xsd:attribute name="beforeCancel" type="xsd:string"/>
      <!-- Gosu expression to run before the location is updated but after the UI is validated. -->
      <xsd:attribute name="beforeCommit" type="xsd:string"/>
      <!-- Gosu expression to run before the location is updated and before the UI is validated. -->
      <xsd:attribute name="beforeValidate" type="xsd:string"/>
      <!-- A boolean expression which, if false, prevents the user from putting the location
           into edit mode -->
      <xsd:attribute name="canEdit" type="xsd:string"/>
      <!-- A boolean expression which, if false, means the user has no permission to visit the
           location, and links to the location will be either invisible or grayed out, depending
           on context. -->
      <xsd:attribute name="canVisit" type="xsd:string"/>
      <!-- An optional attribute, if true, this worksheet will be closed when leave the worksheet
           scope. Only applicable 
if it has no unsaved work. Default to false, so that the worksheet
           becomes hidden when out of scope,
and reappears automatically when enter the scope
           again. -->
      <xsd:attribute name="closeOnLeaveScope" type="xsd:boolean" default="false"/>
      <!-- If false, the location can still be kept in the autosave cache, but does not appear
           as unsaved work to the user (with link highlighting etc.). -->
      <xsd:attribute name="countsAsWork" type="xsd:boolean" default="true"/>
      <!-- Use this to add your own comments to this element. For now this attribute does nothing;
           later if we create a "UI dictionary" or PCF editor, the description will show up there. -->
      <xsd:attribute name="desc" type="xsd:string"/>
      <!-- An optional boolean expression, if specified, determines whether validation issues
           on a particular entity should be fixed on this page. The entity instance with validation
           issues is exposed to this expression as "VALUE". For example, "VALUE typeis entity.MyBean".
           If not specified, validation issues on any entity that matches type of the "validationParameter"
           should be fixed on this page.<br> This attribute is ignored if "validationParameter"
           is not defined. -->
      <xsd:attribute name="handlesValidationIssue" type="xsd:string"/>
      <!-- If true then changed inputs and cells in this location will be highlighted. -->
      <xsd:attribute name="highlightChangedValues" type="xsd:boolean" default="true"/>
      <!-- ID of this Location. Must be unique among all Locations. -->
      <xsd:attribute name="id" type="xsd:string" use="required"/>
      <!-- This expression, when specified, appends a link to the concurrent data change error
           message. The text of the link will be the value of the display key Java.Message.ConcurrentDataChange.Link.
           Clicking on the link will execute the given expression. A concurrent data change error
           happens if a user's changes cannot be committed because they clash with concurrent
           changes by a different user. -->
      <xsd:attribute name="onConcurrentDataChange" type="xsd:string"/>
      <!-- Reference to the "parent location" of this location, to specifiy the hierarchy of
           pcf locations. Used for the automatically generated "up link" in the title bar, highlighting
           of current menu links, and grouping items under "Unsaved Work". Usually the parent
           is the location right above this location in the application hierarchy, i.e. the parent
           of "ActivityDetailWorksheet" is "ClaimWorkplan", the parent of "Desktop Activities"
           is "Desktop" and "Desktop" has no parent at all. -->
      <xsd:attribute name="parent" type="xsd:string"/>
      <!-- If true, creates an "up link" icon in the title bar that links to the parent location.
            The upLink will pop the current location off the stack if the parent location is
           in the stack; otherwise, the upLink will "go" to the parent location, passing all
           of the symbols from the current page in a manner consistent with the "go" action. -->
      <xsd:attribute name="showUpLink" type="xsd:boolean" default="false"/>
      <!-- Gosu expression to run when the location goes into edit mode. -->
      <xsd:attribute name="startEditing" type="xsd:string"/>
      <!-- Boolean expression which, if true, puts the location in edit mode as soon as the user
           enters it -->
      <xsd:attribute name="startInEditMode" type="xsd:string" default="false"/>
      <!-- The label for the tab of this Worksheet in the Workspace -->
      <xsd:attribute name="tabLabel" type="xsd:string" use="required"/>
      <!-- The title of the location.  The title is shown in the top title bar, unless the Screen
           uses a special TitleBar element to override it. -->
      <xsd:attribute name="title" type="xsd:string" use="required"/>
      <!-- If false, the page will disable the automatic validation that happens on every commit.
            Only set this attribute to false if you're really sure you know what you're doing. -->
      <xsd:attribute name="validateOnBundleCommit" type="xsd:boolean" default="true"/>
      <!-- The name of an argument on a LocationEntryPoint, used for fixing entity validation
           issues. -->
      <xsd:attribute name="validationParameter" type="xsd:string"/>
    </xsd:complexType>
  </xsd:element>
</xsd:schema>