<?xml version="1.0" encoding="UTF-8" ?>
<schema
    xmlns="http://www.w3.org/2001/XMLSchema"
    xmlns:tns="https://geocortex.com/layout/v1"
    targetNamespace="https://geocortex.com/layout/v1"
    elementFormDefault="qualified"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
>
    <element name="layout">
        <complexType>
            <sequence>
                <element ref="tns:component" minOccurs="0" maxOccurs="unbounded" />
                <element ref="tns:rootComponent" minOccurs="0" maxOccurs="unbounded" />
            </sequence>
            <attribute name="orientations">
                <annotation>
                    <documentation xml:lang="en">
                        Indicates the allowable orientations - landscape or portrait, or both. When
                        set to "landscape" or "portrait", the orientation of
                        the device will be locked to the specified value. Defaults to both if value
                        not specified. Applies to iOS and Android Mobile only.
                    </documentation>
                </annotation>
                <simpleType>
                    <restriction base="string">
                        <enumeration value="landscape" />
                        <enumeration value="portrait" />
                        <enumeration value="portrait,landscape" />
                    </restriction>
                </simpleType>
            </attribute>
        </complexType>
    </element>

    <complexType name="ComponentWithChildren" abstract="true">
        <complexContent mixed="true">
            <extension base="tns:Component">
                <choice>
                    <element ref="tns:component" minOccurs="0" maxOccurs="unbounded" />
                </choice>
                <attribute name="gap">
                    <annotation>
                        <documentation xml:lang="en">
                            The gaps (gutters) between child components in em
                            units (double) or in spacing units (string)
                            represented as the units followed by an 's' eg:
                            '1s`. Web only.
                        </documentation>
                    </annotation>
                    <simpleType>
                        <union>
                            <simpleType>
                                <restriction base="double" />
                            </simpleType>
                            <simpleType>
                                <restriction base="string">
                                    <pattern value="[0-9]+s" />
                                </restriction>
                            </simpleType>
                        </union>
                    </simpleType>
                </attribute>
            </extension>
        </complexContent>
    </complexType>

    <element name="rootComponent" type="tns:RootComponent" abstract="true" />

    <complexType name="RootComponent" abstract="true">
        <complexContent mixed="true">
            <extension base="tns:Component">
                <choice>
                    <element ref="tns:component" minOccurs="1" maxOccurs="unbounded" />
                </choice>
            </extension>
        </complexContent>
    </complexType>

    <element name="component" type="tns:Component" abstract="true" />

    <complexType name="Component" abstract="true">
        <annotation>
            <documentation xml:lang="en">
                A visual element of an application's UI, e.g. a button, a map, a
                a dialog box, a panel, etc.
            </documentation>
        </annotation>
        <sequence />
        <attribute name="id" type="ID">
            <annotation>
                <documentation xml:lang="en">A unique ID for the component.</documentation>
            </annotation>
        </attribute>
        <attribute name="title" type="string">
            <annotation>
                <documentation xml:lang="en">
                    A human-readable title for the component. Where the title
                    appears (or whether it appears at all) varies with each type
                    of component.
                </documentation>
            </annotation>
        </attribute>
        <attribute name="icon" type="string">
            <annotation>
                <documentation xml:lang="en">
                    A resource key that can be mapped to an image for the icon.
                    Where the icon appears (or whether it appears at all) varies
                    with each type of component.
                </documentation>
            </annotation>
        </attribute>
        <attribute name="config" type="string">
            <annotation>
                <documentation xml:lang="en">
                    The ID of a corresponding item in a VertiGIS Studio App that
                    contains this component's configuration and state.
                </documentation>
            </annotation>
        </attribute>
        <attribute name="width">
            <annotation>
                <documentation xml:lang="en">
                    The width of the component, in em units.
                </documentation>
            </annotation>
            <simpleType>
                <restriction base="double">
                    <minInclusive value="0" />
                </restriction>
            </simpleType>
        </attribute>
        <attribute name="height">
            <annotation>
                <documentation xml:lang="en">
                    The height of the component, in em units.
                </documentation>
            </annotation>
            <simpleType>
                <restriction base="double">
                    <minInclusive value="0" />
                </restriction>
            </simpleType>
        </attribute>
        <attribute name="margin">
            <annotation>
                <documentation xml:lang="en">
                    The margin around the component, in em units. In web this
                    can also be specified in spacing units (string) represented
                    as the units followed by an 's' eg: '1s`.
                </documentation>
            </annotation>
            <simpleType>
                <union>
                    <simpleType>
                        <restriction base="double" />
                    </simpleType>
                    <simpleType>
                        <restriction base="string">
                            <pattern value="[0-9]+s" />
                        </restriction>
                    </simpleType>
                </union>
            </simpleType>
        </attribute>
        <attribute name="padding">
            <annotation>
                <documentation xml:lang="en">
                    The padding within the component, in em units. In web this
                    can also be specified in spacing units (string) represented
                    as the units followed by an 's' eg: '1s`.
                </documentation>
            </annotation>
            <simpleType>
                <union>
                    <simpleType>
                        <restriction base="double" />
                    </simpleType>
                    <simpleType>
                        <restriction base="string">
                            <pattern value="[0-9]+s" />
                        </restriction>
                    </simpleType>
                </union>
            </simpleType>
        </attribute>
        <attribute name="halign" default="start">
            <annotation>
                <documentation xml:lang="en">
                    Describes how the content of a component is horizontally
                    aligned. For stacks and splits, the content is the child
                    components. For a component like text, the content is the
                    text itself.
                </documentation>
            </annotation>
            <simpleType>
                <restriction base="string">
                    <enumeration value="start" />
                    <enumeration value="center" />
                    <enumeration value="end" />
                </restriction>
            </simpleType>
        </attribute>
        <attribute name="valign" default="start">
            <annotation>
                <documentation xml:lang="en">
                    Describes how the content of a component is vertically
                    aligned. For stacks and splits, the content is the child
                    components. For a component like text, the content is the
                    text itself.
                </documentation>
            </annotation>
            <simpleType>
                <restriction base="string">
                    <enumeration value="start" />
                    <enumeration value="center" />
                    <enumeration value="end" />
                </restriction>
            </simpleType>
        </attribute>
        <attribute name="grow" default="0">
            <annotation>
                <documentation xml:lang="en">
                    Sets whether or not a component's width or height will grow
                    over its parents primary axis. Components with a grow of 0
                    will fill to their natural or requested width/height.
                    Components with a specified grow will fill up a percentage
                    of the remaining space equal to their grow value divided by
                    the total grow of all sibling components (including the
                    component in question).
                </documentation>
            </annotation>
            <simpleType>
                <restriction base="double">
                    <minInclusive value="0" />
                </restriction>
            </simpleType>
        </attribute>
        <attribute name="slot" type="string">
            <annotation>
                <documentation xml:lang="en">
                    When a component is nested inside of another component, it
                    may explicitly reference a named "slot" in the parent
                    component to indicate where the child should appear.
                </documentation>
            </annotation>
        </attribute>
        <attribute name="active" type="boolean">
            <annotation>
                <documentation xml:lang="en">
                    Specifies whether a component is active by default or not.
                    When this attribute is not defined, the parent component
                    decides the child's behavior. In Web, an inactive component
                    means that the component is initially not visible. An active
                    component means the component is initially visible. In
                    Mobile, inactive and active components are up to the
                    interpretation of the parent to decide on how to render.
                </documentation>
            </annotation>
        </attribute>
        <attribute name="models" type="string">
            <annotation>
                <documentation xml:lang="en">
                    Some components import the models of other components (for
                    example, a scalebar component might need access to a map
                    component's model). When these relationships cannot be
                    determined implicitly from the layout, then the layout
                    author can explicitly specify these dependencies via this
                    attribute. The value is a comma-separated list of CSS-style
                    selectors indiciating which components to import models
                    from. For example, "map,#primary-scene" would specify all
                    map components and a component with ID "primary-scene".
                </documentation>
            </annotation>
        </attribute>
        <attribute name="available" type="boolean">
            <annotation>
                <documentation xml:lang="en">
                    This property marks a component as being available. The
                    interpretation of what effect this has is up to the component.
                    Currently the only component that will react to this property
                    is the task-bar, which will have the effect of showing/hiding
                    the tab/button for that component. Defaults to true. Mobile only.
                </documentation>
            </annotation>
        </attribute>
    </complexType>

    <!-- Basic Components -->

    <element name="button" substitutionGroup="tns:component">
        <annotation>
            <documentation xml:lang="en">
                A button that executes a command when clicked. The caption will
                be the contained text, e.g. "Click Me!" in the case of
                <![CDATA[<button>Click Me!</button>]]>.
      </documentation>
        </annotation>
        <complexType>
            <complexContent mixed="true">
                <extension base="tns:Component">
                    <attribute name="command" type="string">
                        <annotation>
                            <documentation xml:lang="en">
                                The name of the command to execute.
                            </documentation>
                        </annotation>
                    </attribute>
                    <attribute name="arguments" type="string">
                        <annotation>
                            <documentation xml:lang="en">
                                The arguments for the command (optional).
                            </documentation>
                        </annotation>
                    </attribute>
                    <attribute name="style">
                        <annotation>
                            <documentation xml:lang="en">
                                The desired visual style for the button.
                            </documentation>
                        </annotation>
                        <simpleType>
                            <restriction base="string">
                                <enumeration value="round" />
                                <enumeration value="square" />
                            </restriction>
                        </simpleType>
                    </attribute>
                    <attribute name="size">
                        <annotation>
                            <documentation xml:lang="en">
                                The desired size of the button. Web only.
                            </documentation>
                        </annotation>
                        <simpleType>
                            <restriction base="string">
                                <enumeration value="small" />
                                <enumeration value="medium" />
                                <enumeration value="large" />
                            </restriction>
                        </simpleType>
                    </attribute>
                    <attribute name="icon-position">
                        <annotation>
                            <documentation xml:lang="en">
                                The position of the icon with respect to the button text. Web only.
                            </documentation>
                        </annotation>
                        <simpleType>
                            <restriction base="string">
                                <enumeration value="above" />
                                <enumeration value="below" />
                                <enumeration value="before" />
                                <enumeration value="after" />
                            </restriction>
                        </simpleType>
                    </attribute>
                    <attribute name="background-color" type="string">
                        <annotation>
                            <documentation xml:lang="en">
                                The background color used by the button. Web only. This
                                can be in any format accepted by the ESRI JSAPI
                                Color constructor:
                                https://developers.arcgis.com/javascript/latest/api-reference/esri-Color.html
                            </documentation>
                        </annotation>
                    </attribute>
                    <attribute name="foreground-color" type="string">
                        <annotation>
                            <documentation xml:lang="en">
                                The foreground color used by the button. Web only. This
                                can be in any format accepted by the ESRI JSAPI
                                Color constructor:
                                https://developers.arcgis.com/javascript/latest/api-reference/esri-Color.html
                            </documentation>
                        </annotation>
                    </attribute>
                    <attribute name="border" type="boolean">
                        <annotation>
                            <documentation xml:lang="en">
                                Whether to show a border on this button. Web only.
                            </documentation>
                        </annotation>
                    </attribute>
                    <attribute name="show-title" type="boolean" default="true">
                        <annotation>
                            <documentation xml:lang="en">
                                Whether to show the button's title.
                            </documentation>
                        </annotation>
                    </attribute>
                </extension>
            </complexContent>
        </complexType>
    </element>

    <element name="bookmarks" substitutionGroup="tns:component">
        <annotation>
            <documentation xml:lang="en">
                A component that shows the bookmarks associated with a map, and
                allows users to create their own bookmarks.
            </documentation>
        </annotation>
        <complexType>
            <complexContent>
                <extension base="tns:Component">
                    <attribute name="button-style">
                        <annotation>
                            <documentation xml:lang="en">
                                The desired visual style for the button.
                            </documentation>
                        </annotation>
                        <simpleType>
                            <restriction base="string">
                                <enumeration value="round" />
                                <enumeration value="square" />
                            </restriction>
                        </simpleType>
                    </attribute>
                </extension>
            </complexContent>
        </complexType>
    </element>

    <element name="dialog" substitutionGroup="tns:rootComponent">
        <annotation>
            <documentation xml:lang="en">
                Displays a single child component in a dialog. Initially hidden.
                Displayed when the dialog component is activated. Not supported
                in Web.
            </documentation>
        </annotation>
        <complexType>
            <complexContent>
                <extension base="tns:RootComponent">
                    <attribute name="allow-close" type="boolean" default="true">
                        <annotation>
                            <documentation xml:lang="en">
                                Whether or not the dialog provides a built-in way for users to
                                dismiss the dialog (e.g. a close button, hitting "Esc", clicking
                                outside the dialog, etc.). If "false", the dialog will need to be
                                explicitly deactivated via some other means. The default
                                is "true". Web only.
                            </documentation>
                        </annotation>
                    </attribute>
                </extension>
            </complexContent>
        </complexType>
    </element>

    <element name="expand" substitutionGroup="tns:component">
        <annotation>
            <documentation xml:lang="en">
                A container whose content is hidden by default and only becomes
                visible when the small "expand" button is clicked. When the
                button is clicked, the container "pops up" and appears beside
                the expand button. Clicking the expand button while the
                container is open closes the container. This component is useful
                for hiding widget-like components that become visible at the
                click of a button.
            </documentation>
        </annotation>
        <complexType>
            <complexContent mixed="true">
                <extension base="tns:ComponentWithChildren">
                    <attribute name="visual-state">
                        <annotation>
                            <documentation xml:lang="en">
                                The initial state of the Expand. Not supported in Mobile.
                            </documentation>
                        </annotation>
                        <simpleType>
                            <restriction base="string">
                                <enumeration value="open" />
                                <enumeration value="closed" />
                            </restriction>
                        </simpleType>
                    </attribute>
                    <attribute name="modal" type="boolean" default="true">
                        <annotation>
                            <documentation xml:lang="en">
                                Whether or not the expand container behaves as a modal window.
                            </documentation>
                        </annotation>
                    </attribute>
                    <attribute name="show-icon" type="boolean" default="true">
                        <annotation>
                            <documentation xml:lang="en">
                                Whether or not the icon should be displayed.
                            </documentation>
                        </annotation>
                    </attribute>
                    <attribute name="show-title" type="boolean" default="false">
                        <annotation>
                            <documentation xml:lang="en">
                                Whether or not the title should be displayed.
                            </documentation>
                        </annotation>
                    </attribute>
                    <attribute name="style">
                        <annotation>
                            <documentation xml:lang="en">
                                The desired visual style for the expand button.
                            </documentation>
                        </annotation>
                        <simpleType>
                            <restriction base="string">
                                <enumeration value="round" />
                                <enumeration value="square" />
                            </restriction>
                        </simpleType>
                    </attribute>
                    <attribute name="size">
                        <annotation>
                            <documentation xml:lang="en">
                                The desired size of the expand button. Web only.
                            </documentation>
                        </annotation>
                        <simpleType>
                            <restriction base="string">
                                <enumeration value="small" />
                                <enumeration value="medium" />
                                <enumeration value="large" />
                            </restriction>
                        </simpleType>
                    </attribute>
                    <attribute name="icon-position">
                        <annotation>
                            <documentation xml:lang="en">
                                The position of the icon with respect to the expand button text. Web
                                only.
                            </documentation>
                        </annotation>
                        <simpleType>
                            <restriction base="string">
                                <enumeration value="above" />
                                <enumeration value="below" />
                                <enumeration value="before" />
                                <enumeration value="after" />
                            </restriction>
                        </simpleType>
                    </attribute>
                </extension>
            </complexContent>
        </complexType>
    </element>

    <element name="image" substitutionGroup="tns:component">
        <annotation>
            <documentation xml:lang="en">An image. Not supported in Mobile.</documentation>
        </annotation>
        <complexType>
            <complexContent>
                <extension base="tns:Component" />
            </complexContent>
        </complexType>
    </element>

    <element name="iwtm" substitutionGroup="tns:component">
        <annotation>
            <documentation xml:lang="en">
                An "I Want To..." menu (the actual title can be specified via
                the "title" attribute). Has a single slot in Web, at the top.
                Supports both "top" and "bottom" named slots in Mobile.
            </documentation>
        </annotation>
        <complexType>
            <complexContent>
                <extension base="tns:ComponentWithChildren" />
            </complexContent>
        </complexType>
    </element>

    <element name="panel" substitutionGroup="tns:component">
        <annotation>
            <documentation xml:lang="en">
                A container that enables hierarchical navigation between its
                child components. The user can navigate backwards to components
                that were activated prior to the currently active component and
                are ordered above the current component in configuration. The
                last component that is marked as active will be initially
                displayed, with all other components configured above that last
                component as active being accessible via navigating backwards.
                For example, if a panel has child components A, B, and C
                (configured in that order), and initially A is active, then
                activating C would display the C component but allow the user to
                navigate back to A. If the user then activated B while C is
                active, then C would be popped, and B would be shown, again with
                a back button to navigate to A but with no way of navigating to
                C because the configured order is maintained.
            </documentation>
        </annotation>
        <complexType>
            <complexContent mixed="true">
                <extension base="tns:ComponentWithChildren">
                    <attribute name="show-close-button" type="boolean" default="true">
                        <annotation>
                            <documentation xml:lang="en">
                                Whether to show a button that closes the Panel.
                                Not supported in Mobile.
                            </documentation>
                        </annotation>
                    </attribute>
                    <attribute name="show-back-button" type="boolean" default="true">
                        <annotation>
                            <documentation xml:lang="en">
                                Whether to show a button that allows the user to
                                go "back". If a Panel has child components A, B,
                                and C, and C is currently active, clicking the
                                back button will hide C and B will be shown. Not
                                supported in Mobile.
                            </documentation>
                        </annotation>
                    </attribute>
                    <attribute name="show-maximize-button" type="boolean" default="true">
                        <annotation>
                            <documentation xml:lang="en">
                                Whether to show a button that allows the user to
                                maximize the panel. A maximized panel will grow
                                and fill the size of its parent container. Not
                                supported in Mobile.
                            </documentation>
                        </annotation>
                    </attribute>
                    <attribute name="show-minimize-button" type="boolean" default="true">
                        <annotation>
                            <documentation xml:lang="en">
                                Whether to show a button that allows the user to
                                minimize the panel. A minimized panel will
                                shrink to a small bar that only contains a
                                "restore size" button. In a split, this is a
                                vertical bar; in a stack (and other containers
                                the arrange children vertically), this is a
                                horizontal bar. Not supported in Mobile.
                            </documentation>
                        </annotation>
                    </attribute>
                    <attribute name="show-title" type="boolean" default="false">
                        <annotation>
                            <documentation xml:lang="en">
                                Whether or not the title should be displayed.
                                Not supported in Mobile.
                            </documentation>
                        </annotation>
                    </attribute>
                    <attribute name="visual-state">
                        <annotation>
                            <documentation xml:lang="en">
                                The initial state of the panel. Not supported in Mobile.
                            </documentation>
                        </annotation>
                        <simpleType>
                            <restriction base="string">
                                <enumeration value="normal" />
                                <enumeration value="minimized" />
                                <enumeration value="maximized" />
                            </restriction>
                        </simpleType>
                    </attribute>
                </extension>
            </complexContent>
        </complexType>
    </element>

    <element name="split" substitutionGroup="tns:component">
        <annotation>
            <documentation xml:lang="en">
                A container for other components that organizes its children
                horizontally.
            </documentation>
        </annotation>
        <complexType>
            <complexContent mixed="true">
                <extension base="tns:ComponentWithChildren">
                    <attribute name="resizable" type="boolean" default="false">
                        <annotation>
                            <documentation xml:lang="en">
                                Whether the user can interactively resize the
                                contained components. Not supported on all
                                platforms.
                            </documentation>
                        </annotation>
                    </attribute>
                </extension>
            </complexContent>
        </complexType>
    </element>

    <element name="stack" substitutionGroup="tns:component">
        <annotation>
            <documentation xml:lang="en">
                A container for other components that organizes its children
                vertically.
            </documentation>
        </annotation>
        <complexType>
            <complexContent mixed="true">
                <extension base="tns:ComponentWithChildren">
                    <attribute name="resizable" type="boolean" default="false">
                        <annotation>
                            <documentation xml:lang="en">
                                Whether the user can interactively resize the
                                contained components. Not supported on all
                                platforms.
                            </documentation>
                        </annotation>
                    </attribute>
                </extension>
            </complexContent>
        </complexType>
    </element>

    <element name="text" substitutionGroup="tns:component">
        <annotation>
            <documentation xml:lang="en">A component that displays text.</documentation>
        </annotation>
        <complexType>
            <complexContent mixed="true">
                <extension base="tns:Component">
                    <attribute name="showBackground" type="boolean" default="true">
                        <annotation>
                            <documentation xml:lang="en">
                                Whether or not the text background should be displayed. Mobile
                                only. Defaults to true.
                            </documentation>
                        </annotation>
                    </attribute>
                </extension>
            </complexContent>
        </complexType>
    </element>

    <!-- NOTE: GXW-only, despite being in the common namespace. -->
    <element name="toolbar" substitutionGroup="tns:component">
        <annotation>
            <documentation xml:lang="en">
                A toolbar menu. The toolbar supports up to one level of nesting
                (a set of tools can be grouped together in one 'parent' that is
                displayed on the root toolbar menu.). Not supported in Mobile.
            </documentation>
        </annotation>
        <complexType>
            <complexContent>
                <extension base="tns:Component">
                    <attribute name="orientation">
                        <annotation>
                            <documentation xml:lang="en">
                                Determines the orientation of the toolbar menu items.
                            </documentation>
                        </annotation>
                        <simpleType>
                            <restriction base="string">
                                <enumeration value="vertical" />
                                <enumeration value="horizontal" />
                            </restriction>
                        </simpleType>
                    </attribute>
                    <attribute name="toolbar-style">
                        <annotation>
                            <documentation xml:lang="en">
                                The visual style of the toolbar. If the toolbar
                                is not in a map slot, or nested in rows/columns
                                within a map slot, then the toolbar will appear
                                with square styling.
                            </documentation>
                        </annotation>
                        <simpleType>
                            <restriction base="string">
                                <enumeration value="round" />
                                <enumeration value="square" />
                            </restriction>
                        </simpleType>
                    </attribute>
                    <attribute name="show-titles" type="boolean" default="true">
                        <annotation>
                            <documentation xml:lang="en">
                                Whether to display the titles on buttons. You
                                may wish to hide the titles in order to show
                                just icons.
                            </documentation>
                        </annotation>
                    </attribute>
                    <attribute name="show-icons" type="boolean" default="true">
                        <annotation>
                            <documentation xml:lang="en">
                                Whether to display the icons on buttons. You may wish to hide the
                                icons in order to show just titles.
                            </documentation>
                        </annotation>
                    </attribute>
                    <attribute name="icon-position">
                        <annotation>
                            <documentation xml:lang="en">
                                The position of the icon on each button relative to its
                                corresponding title.
                            </documentation>
                        </annotation>
                        <simpleType>
                            <restriction base="string">
                                <enumeration value="top" />
                                <enumeration value="bottom" />
                                <enumeration value="start" />
                                <enumeration value="end" />
                            </restriction>
                        </simpleType>
                    </attribute>
                </extension>
            </complexContent>
        </complexType>
    </element>

    <element name="user" substitutionGroup="tns:component">
        <annotation>
            <documentation xml:lang="en">
                Shows information about the current user (if there is one), and
                allows the user to sign in or out as appropriate. The user
                component does not support child components in Mobile.
            </documentation>
        </annotation>
        <complexType>
            <complexContent>
                <extension base="tns:ComponentWithChildren">
                    <attribute name="style">
                        <annotation>
                            <documentation xml:lang="en">
                                The desired visual style for the button. Web only.
                            </documentation>
                        </annotation>
                        <simpleType>
                            <restriction base="string">
                                <enumeration value="round" />
                                <enumeration value="square" />
                            </restriction>
                        </simpleType>
                    </attribute>
                    <attribute name="size">
                        <annotation>
                            <documentation xml:lang="en">
                                The desired size of the button. Web only.
                            </documentation>
                        </annotation>
                        <simpleType>
                            <restriction base="string">
                                <enumeration value="small" />
                                <enumeration value="medium" />
                                <enumeration value="large" />
                            </restriction>
                        </simpleType>
                    </attribute>
                </extension>
            </complexContent>
        </complexType>
    </element>

    <element name="workflow" substitutionGroup="tns:component">
        <annotation>
            <documentation xml:lang="en">
                A component that hosts workflow forms. When a workflow item
                config is specified, the workflow will be run when the component
                is activated. Any command to run a workflow can use the
                component by adding '#{componentId}' to its target. If the
                component is activated outside the context of running a
                workflow, and does not have a workflow item config, it will
                appear empty. Only one workflow can use the component at a time.
                If a second workflow attempts to use the component, the user
                will be asked to cancel one of the workflows in Mobile. In Web,
                the first workflow is canceled automatically.
            </documentation>
        </annotation>
        <complexType>
            <complexContent mixed="true">
                <extension base="tns:Component" />
            </complexContent>
        </complexType>
    </element>

    <!-- GIS Components -->

    <element name="basemap-picker" substitutionGroup="tns:component">
        <annotation>
            <documentation xml:lang="en">
                Allows users to choose between available basemaps for the webmap
                or webscene. Requiers an associated map component (see the
                "models" attribute).
            </documentation>
        </annotation>
        <complexType>
            <complexContent>
                <extension base="tns:Component" />
            </complexContent>
        </complexType>
    </element>

    <element name="compass" substitutionGroup="tns:component">
        <annotation>
            <documentation xml:lang="en">
                Displays a North-pointing compass that rotates with the rotation of the map to which
                it is associated.
            </documentation>
        </annotation>
        <complexType>
            <complexContent>
                <extension base="tns:Component" />
            </complexContent>
        </complexType>
    </element>

    <element name="feature-details" substitutionGroup="tns:component">
        <annotation>
            <documentation xml:lang="en">
                A component that allows the user to view feature details.
            </documentation>
        </annotation>
        <complexType>
            <complexContent>
                <extension base="tns:Component">
                    <attribute name="button-style" default="medium">
                        <annotation>
                            <documentation xml:lang="en">
                                The desired size for the action buttons. Web
                                only.
                            </documentation>
                        </annotation>
                        <simpleType>
                            <restriction base="string">
                                <enumeration value="small" />
                                <enumeration value="medium" />
                                <enumeration value="large" />
                            </restriction>
                        </simpleType>
                    </attribute>
                    <attribute name="button-size" default="medium">
                        <annotation>
                            <documentation xml:lang="en">
                                The desired size for the action buttons. Web
                                only.
                            </documentation>
                        </annotation>
                        <simpleType>
                            <restriction base="string">
                                <enumeration value="small" />
                                <enumeration value="medium" />
                                <enumeration value="large" />
                            </restriction>
                        </simpleType>
                    </attribute>
                    <attribute name="related-record-display" default="preview">
                        <annotation>
                            <documentation xml:lang="en">
                                The style in which related records are
                                displayed. Web only.
                            </documentation>
                        </annotation>
                        <simpleType>
                            <restriction base="string">
                                <enumeration value="preview" />
                                <enumeration value="table" />
                            </restriction>
                        </simpleType>
                    </attribute>
                    <attribute name="show-action-icons" type="boolean" default="true">
                        <annotation>
                            <documentation xml:lang="en">
                                Whether or not the icon should be displayed in
                                action buttons. If neither icons nor titles are
                                shown, then the action buttons will not display.
                                Web only.
                            </documentation>
                        </annotation>
                    </attribute>
                    <attribute name="show-action-titles" type="boolean" default="false">
                        <annotation>
                            <documentation xml:lang="en">
                                Whether or not the title should be displayed in
                                action buttons. If neither icons nor titles are
                                shown, then the action buttons will not display.
                                Web only.
                            </documentation>
                        </annotation>
                    </attribute>
                    <attribute name="show-star-controls" type="boolean" default="false">
                        <annotation>
                            <documentation xml:lang="en">
                                Whether or not the starred feature icons and
                                functionality should be included. Defaults to
                                false. Web only.
                            </documentation>
                        </annotation>
                    </attribute>
                </extension>
            </complexContent>
        </complexType>
    </element>

    <element name="geolocate" substitutionGroup="tns:component">
        <annotation>
            <documentation xml:lang="en">
                Displays a clickable/tappable indicator that toggles GPS
                geolocation behavior. In Mobile, the accuracy is also shown, and
                can be displayed in either metric or imperial units.
            </documentation>
        </annotation>
        <complexType>
            <complexContent>
                <extension base="tns:Component" />
            </complexContent>
        </complexType>
    </element>

    <element name="layer-list" substitutionGroup="tns:component">
        <annotation>
            <documentation xml:lang="en">
                Allows users to see the structure of layers on the map and
                change their visibility. Requires an associated map component
                (see the "models" attribute).
            </documentation>
        </annotation>
        <complexType>
            <complexContent>
                <extension base="tns:Component">
                    <attribute name="show-reorder-buttons" type="boolean" default="true">
                        <annotation>
                            <documentation xml:lang="en">
                                Whether to show the arrow buttons used for
                                moving layers up and down within the drawing
                                order. If the LayerListModel.canReorder property
                                is true, drag-and-drop functionality will be
                                available regardless of this property. If the
                                LayerListModel.canReorder property is false,
                                this property is ignored. Web only.
                            </documentation>
                        </annotation>
                    </attribute>
                    <attribute name="show-filter-control" type="boolean" default="false">
                        <annotation>
                            <documentation xml:lang="en">
                                Whether to show an text input control for
                                filtering layers by title. Web only.
                            </documentation>
                        </annotation>
                    </attribute>
                    <attribute name="show-action-menu" type="boolean" default="true">
                        <annotation>
                            <documentation xml:lang="en">
                                Whether to show a menu button that can be used
                                to execute actions on all layers that are
                                currently displayed in the layer list. Web only.
                            </documentation>
                        </annotation>
                    </attribute>
                </extension>
            </complexContent>
        </complexType>
    </element>

    <element name="layer-presets" substitutionGroup="tns:component">
        <annotation>
            <documentation xml:lang="en">
                A component that shows a list of layer presets and allows users
                to apply them.
            </documentation>
        </annotation>
        <complexType>
            <complexContent>
                <extension base="tns:Component">
                    <attribute name="filter-by">
                        <annotation>
                            <documentation xml:lang="en">
                                Indicates how the filter box will behave; if the
                                value is 'none', no filter box will be
                                displayed. Web only.
                            </documentation>
                        </annotation>
                        <simpleType>
                            <restriction base="string">
                                <enumeration value="none" />
                                <enumeration value="title" />
                                <enumeration value="title-and-description" />
                            </restriction>
                        </simpleType>
                    </attribute>
                    <attribute name="show-title" type="boolean" default="true">
                        <annotation>
                            <documentation xml:lang="en">
                                Indicates if the title should be displayed. Web only.
                            </documentation>
                        </annotation>
                    </attribute>
                    <attribute name="show-icon" type="boolean" default="true">
                        <annotation>
                            <documentation xml:lang="en">
                                Indicates if the icon should be displayed. Web only.
                            </documentation>
                        </annotation>
                    </attribute>
                </extension>
            </complexContent>
        </complexType>
    </element>

    <element name="legend" substitutionGroup="tns:component">
        <annotation>
            <documentation xml:lang="en">
                Allows the user to see the symbology of the layers on the map.
                Requires an associated map component (see the "models"
                attribute").
            </documentation>
        </annotation>
        <complexType>
            <complexContent>
                <extension base="tns:Component" />
            </complexContent>
        </complexType>
    </element>

    <element name="map" substitutionGroup="tns:component">
        <annotation>
            <documentation xml:lang="en">
                A 2D map (and/or a 3D scene in Web). A map can host child
                components and has the following slots in Mobile: "top-left",
                "top-right", "bottom-left", "bottom-right", "top",
                "top-center-visible", "bottom" and "bottom-center-visible". A
                child component in the "center-visible" slot will be centered in
                the visible area of the map, factoring in other components that
                are overlapping the map. 
        
                A map in Web has the following slots: "top-start", "top-center",
                "top-end", "bottom-start", "bottom-center", "bottom-end",
                "context-menu", and "popup". In left-to-right locales, "start"
                will be on the left, and "end" will be on the right. In
                right-to-left locales, these will be reversed.
            </documentation>
        </annotation>
        <complexType>
            <complexContent mixed="true">
                <extension base="tns:ComponentWithChildren" />
            </complexContent>
        </complexType>
    </element>

    <!-- NOTE: GXW-only, despite being in the common namespace. -->
    <element name="map-coordinates" substitutionGroup="tns:component">
        <annotation>
            <documentation xml:lang="en">
                Allows the user to see the coordinates under the current mouse
                position. Requires an associated map component (see the "models"
                attribute"). Not supported in Mobile.
            </documentation>
        </annotation>
        <complexType>
            <complexContent>
                <extension base="tns:Component" />
            </complexContent>
        </complexType>
    </element>

    <element name="results-list" substitutionGroup="tns:component">
        <annotation>
            <documentation xml:lang="en">
                A component that allows the user to view results from a search,
                identify, query, or any other activity that produces features in
                a list view.
            </documentation>
        </annotation>
        <complexType>
            <complexContent>
                <extension base="tns:Component">
                    <attribute name="show-star-controls" type="boolean" default="false">
                        <annotation>
                            <documentation xml:lang="en">
                                Whether or not the starred feature icons and
                                functionality should be included. Defaults to
                                false. Web only
                            </documentation>
                        </annotation>
                    </attribute>
                </extension>
            </complexContent>
        </complexType>
    </element>

    <element name="scalebar" substitutionGroup="tns:component">
        <annotation>
            <documentation xml:lang="en">A component that shows the scale of a map.</documentation>
        </annotation>
        <complexType>
            <complexContent>
                <extension base="tns:Component" />
            </complexContent>
        </complexType>
    </element>

    <element name="search" substitutionGroup="tns:component">
        <annotation>
            <documentation xml:lang="en">
                A component that allows the user to search one ore more sources
                (maps, scenes, tables, geocoders, etc.).
            </documentation>
        </annotation>
        <complexType>
            <complexContent>
                <extension base="tns:Component" />
            </complexContent>
        </complexType>
    </element>

    <element name="search-new-extent" substitutionGroup="tns:component">
        <annotation>
            <documentation xml:lang="en">
                A component that provides a single button that allows the user
                to "search this area" when the extent of the map changes to be
                different than the extent that was originally searched.
            </documentation>
        </annotation>
        <complexType>
            <complexContent>
                <extension base="tns:Component" />
            </complexContent>
        </complexType>
    </element>

    <element name="zoom" substitutionGroup="tns:component">
        <annotation>
            <documentation xml:lang="en">
                Displays a pair of buttons that allow the user to zoom the map in or out.
            </documentation>
        </annotation>
        <complexType>
            <complexContent>
                <extension base="tns:Component" />
            </complexContent>
        </complexType>
    </element>
</schema>
