<?xml version="1.0" encoding="UTF-8" ?>
<schema
    xmlns="http://www.w3.org/2001/XMLSchema"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:base="https://geocortex.com/layout/v1"
    xmlns:tns="https://geocortex.com/layout/web/v1"
    targetNamespace="https://geocortex.com/layout/web/v1"
    elementFormDefault="qualified"
    xsi:schemaLocation="http://www.w3.org/2001/XMLSchema https://www.w3.org/2009/XMLSchema/XMLSchema.xsd"
>
    <import namespace="https://geocortex.com/layout/v1" schemaLocation="./layout-common.xsd" />

    <!-- GIS Components -->

    <element name="address" substitutionGroup="base:component">
        <annotation>
            <documentation xml:lang="en">
                Provides reverse geocode information given a point geometry.
            </documentation>
        </annotation>
        <complexType>
            <complexContent>
                <extension base="base:Component" />
            </complexContent>
        </complexType>
    </element>

    <element name="bulk-editing" substitutionGroup="base:component">
        <annotation>
            <documentation xml:lang="en">
                A component that enables bulk editing of multiple features' attributes
                simultaneously.
            </documentation>
        </annotation>
        <complexType>
            <complexContent>
                <extension base="base:Component" />
            </complexContent>
        </complexType>
    </element>

    <element name="chart" substitutionGroup="base:component">
        <annotation>
            <documentation xml:lang="en">A component that shows a chart.</documentation>
        </annotation>
        <complexType>
            <complexContent>
                <extension base="base:Component" />
            </complexContent>
        </complexType>
    </element>

    <element name="feature-summary" substitutionGroup="base:component">
        <annotation>
            <documentation xml:lang="en">
                A component that allows the user to view a feature summary.
            </documentation>
        </annotation>
        <complexType>
            <complexContent>
                <extension base="base: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.
                            </documentation>
                        </annotation>
                    </attribute>
                </extension>
            </complexContent>
        </complexType>
    </element>

    <element name="filter-builder" substitutionGroup="base:component">
        <annotation>
            <documentation xml:lang="en">
                A component that allows the user to interactively apply filters
                to the maps' layers.
            </documentation>
        </annotation>
        <complexType>
            <complexContent>
                <extension base="base:Component">
                    <attribute name="show-cancel-button" type="boolean" default="false">
                        <annotation>
                            <documentation xml:lang="en">
                                Whether or not to show a "Cancel" button. This
                                button will cancel any pending changes to the
                                current filter and deactivate the component.
                                This is useful when the component is being shown
                                in a temporary way, e.g. in a dialog. The
                                default is false.
                            </documentation>
                        </annotation>
                    </attribute>
                    <attribute name="show-autocomplete" type="boolean" default="true">
                        <annotation>
                            <documentation xml:lang="en">
                                Whether or not to show autocompletes to assist
                                in the entry of values for string fields. This 
                                feature can impact performance if datasets are 
                                extremely large or not indexed on these fields. 
                                The default is true.
                            </documentation>
                        </annotation>
                    </attribute>
                </extension>
            </complexContent>
        </complexType>
    </element>

    <element name="geometry-toolbar" substitutionGroup="base:component">
        <annotation>
            <documentation xml:lang="en">
                A geometry toolbar consisting of a collection of widgets and a
                configurable toolbar that is displayed while geometry edits are being
                performed.
            </documentation>
        </annotation>
        <complexType>
            <complexContent>
                <extension base="base:Component">
                    <attribute name="orientation">
                        <annotation>
                            <documentation xml:lang="en">
                                Determines the orientation of the widgets and toolbar menu items.
                            </documentation>
                        </annotation>
                        <simpleType>
                            <restriction base="string">
                                <enumeration value="vertical" />
                                <enumeration value="horizontal" />
                            </restriction>
                        </simpleType>
                    </attribute>
                    <attribute name="size">
                        <annotation>
                            <documentation xml:lang="en">
                                The size of the geometry toolbar.
                            </documentation>
                        </annotation>
                        <simpleType>
                            <restriction base="string">
                                <enumeration value="small" />
                                <enumeration value="medium" />
                                <enumeration value="large" />
                            </restriction>
                        </simpleType>
                    </attribute>
                </extension>
            </complexContent>
        </complexType>
    </element>

    <element name="inline" substitutionGroup="base:component">
        <annotation>
            <documentation xml:lang="en">
                A component that allows the integration of VertiGIS Studio Inline (Deprecated).
            </documentation>
        </annotation>
        <complexType>
            <complexContent>
                <extension base="base:Component" />
            </complexContent>
        </complexType>
    </element>

    <element name="kpi-card" substitutionGroup="base:component">
        <annotation>
            <documentation xml:lang="en">
                A component that shows a key performance indicator.
            </documentation>
        </annotation>
        <complexType>
            <complexContent>
                <extension base="base:Component" />
            </complexContent>
        </complexType>
    </element>

    <element name="map-3d-toggle" substitutionGroup="base:component">
        <annotation>
            <documentation xml:lang="en">
                A button that allows the end user to switch between the webmap and the
                webscene for a given map component. Requires an associated map component
                (see the "models" attribute) with both a webmap and webscene configured.
            </documentation>
        </annotation>
        <complexType>
            <complexContent mixed="true">
                <extension base="base:Component">
                    <attribute name="style">
                        <annotation>
                            <documentation xml:lang="en">
                                The desired visual style for the 3d toggle button.
                            </documentation>
                        </annotation>
                        <simpleType>
                            <restriction base="string">
                                <enumeration value="round" />
                                <enumeration value="square" />
                            </restriction>
                        </simpleType>
                    </attribute>
                </extension>
            </complexContent>
        </complexType>
    </element>

    <element name="overview-map" substitutionGroup="base:component">
        <annotation>
            <documentation xml:lang="en">
                A noninteractive map that displays the extent of a map component.
            </documentation>
        </annotation>
        <complexType>
            <complexContent>
                <extension base="base:Component" />
            </complexContent>
        </complexType>
    </element>

    <element name="print-form" substitutionGroup="base:component">
        <annotation>
            <documentation xml:lang="en">
                A component that presents configurable options for printing a map.
            </documentation>
        </annotation>
        <complexType>
            <complexContent>
                <extension base="base: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="query-builder" substitutionGroup="base:component">
        <annotation>
            <documentation xml:lang="en">
                A component that allows the user to interactively run queries against the
                maps' layers.
            </documentation>
        </annotation>
        <complexType>
            <complexContent>
                <extension base="base:Component">
                    <attribute name="show-cancel-button" type="boolean" default="false">
                        <annotation>
                            <documentation xml:lang="en">
                                Whether or not to show a "Cancel" button. This
                                button will cancel any pending query and
                                deactivate the component. This is useful when
                                the component is being shown in a temporary way,
                                e.g. in a dialog. The default is false.
                            </documentation>
                        </annotation>
                    </attribute>
                    <attribute name="show-autocomplete" type="boolean" default="true">
                        <annotation>
                            <documentation xml:lang="en">
                                Whether or not to show autocompletes to assist
                                in the entry of values for string fields. This 
                                feature can impact performance if datasets are 
                                extremely large or not indexed on these fields. 
                                The default is true.
                            </documentation>
                        </annotation>
                    </attribute>
                </extension>
            </complexContent>
        </complexType>
    </element>

    <element name="results-table" substitutionGroup="base: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 table
                view.
            </documentation>
        </annotation>
        <complexType>
            <complexContent>
                <extension base="base: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.
                            </documentation>
                        </annotation>
                    </attribute>
                </extension>
            </complexContent>
        </complexType>
    </element>

    <element name="shared-projects" substitutionGroup="base:component">
        <annotation>
            <documentation xml:lang="en">
                A component that allows the user to manage and view shared projects.
            </documentation>
        </annotation>
        <complexType>
            <complexContent>
                <extension base="base:Component" />
            </complexContent>
        </complexType>
    </element>

    <element name="scale-input" substitutionGroup="base:component">
        <annotation>
            <documentation xml:lang="en">
                A component that allows the user to change the scale of the map.
            </documentation>
        </annotation>
        <complexType>
            <complexContent>
                <extension base="base:Component" />
            </complexContent>
        </complexType>
    </element>

    <element name="tabs" substitutionGroup="base:component">
        <annotation>
            <documentation xml:lang="en">
                Organizes child components into separate tabs, so that only one
                is active at a time. The tab names will correspond to the child
                components' titles.
            </documentation>
        </annotation>
        <complexType>
            <complexContent mixed="true">
                <extension base="base:Component">
                    <choice>
                        <element ref="base:component" minOccurs="0" maxOccurs="unbounded" />
                    </choice>
                    <attribute name="orientation">
                        <annotation>
                            <documentation xml:lang="en">
                                The orientation of the tabs within the component. Valid values
                                include "horizontal", and "vertical". The default value is
                                "horizontal".
                            </documentation>
                        </annotation>
                        <simpleType>
                            <restriction base="string">
                                <enumeration value="horizontal" />
                                <enumeration value="vertical" />
                            </restriction>
                        </simpleType>
                    </attribute>
                    <attribute name="position">
                        <annotation>
                            <documentation xml:lang="en">
                                The position of the tabs within the component. Valid values
                                include "start", and "end". The default value is "start".
                            </documentation>
                        </annotation>
                        <simpleType>
                            <restriction base="string">
                                <enumeration value="start" />
                                <enumeration value="end" />
                            </restriction>
                        </simpleType>
                    </attribute>
                    <attribute name="icon-position">
                        <annotation>
                            <documentation xml:lang="en">
                                The position of the icon within the component relative to its 
                                text. Valid values include "top", "bottom", "start", and "end". 
                                The default value is "start".
                            </documentation>
                        </annotation>
                        <simpleType>
                            <restriction base="string">
                                <enumeration value="top" />
                                <enumeration value="bottom" />
                                <enumeration value="start" />
                                <enumeration value="end" />
                            </restriction>
                        </simpleType>
                    </attribute>
                    <attribute name="show-title" type="boolean" default="true">
                        <annotation>
                            <documentation xml:lang="en">
                                Indicates if the title should be displayed.
                            </documentation>
                        </annotation>
                    </attribute>
                    <attribute name="show-icon" type="boolean" default="false">
                        <annotation>
                            <documentation xml:lang="en">
                                Indicates if the icon should be displayed.
                            </documentation>
                        </annotation>
                    </attribute>
                </extension>
            </complexContent>
        </complexType>
    </element>

    <element name="user-preferences" substitutionGroup="base:component">
        <annotation>
            <documentation xml:lang="en">
                A component that allows the user to change user preferences.
            </documentation>
        </annotation>
        <complexType>
            <complexContent>
                <extension base="base:Component" />
            </complexContent>
        </complexType>
    </element>

    <element name="vertigis-inline" substitutionGroup="base:component">
        <annotation>
            <documentation xml:lang="en">
                A component that allows the integration of VertiGIS Inline.
                Requires the VertiGIS Inline library to be loaded in Web.
            </documentation>
        </annotation>
        <complexType>
            <complexContent>
                <extension base="base:Component" />
            </complexContent>
        </complexType>
    </element>
</schema>
