<?xml version="1.0" encoding="UTF-8"?>
<!--
/**
 * Copyright © 2016 Magento. All rights reserved.
 * See COPYING.txt for license details.
 */
-->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
    <xs:annotation>
        <xs:appinfo>The definition of a configuration item components</xs:appinfo>
        <xs:documentation>The definition of a configuration item components</xs:documentation>
    </xs:annotation>
    <!-- Include section -->
    <xs:include schemaLocation="urn:magento:module:Magento_Ui:etc/ui_components.xsd"/>
    <!-- Components list -->
    <xs:element type="formConfiguration" name="form"/>
    <xs:element type="modalConfiguration" name="modal"/>
    <xs:element type="dynamicRowsConfiguration" name="dynamicRows"/>
    <xs:element type="containerConfiguration" name="container"/>
    <xs:element type="listingConfiguration" name="listing"/>
    <!-- Custom configuration -->
    <xs:complexType name="containerConfiguration">
        <xs:complexContent>
            <xs:extension base="container">
                <xs:choice minOccurs="0" maxOccurs="unbounded">
                    <xs:element type="formConfiguration" name="form"/>
                    <xs:element type="fieldsetConfiguration" name="fieldset"/>
                    <xs:element type="paging" name="paging"/>
                    <xs:element type="filtersConfiguration" name="filters"/>
                    <xs:element type="massactionConfiguration" name="massaction"/>
                    <xs:element type="action" name="action"/>
                    <xs:element type="columnsConfiguration" name="columns"/>
                    <xs:element type="containerConfiguration" name="container"/>
                    <xs:element type="field" name="field"/>
                    <xs:element type="dataSource" name="dataSource"/>
                    <xs:element type="argumentType" name="argument"/>
                    <xs:element type="bookmark" name="bookmark"/>
                    <xs:element name="filterSearch" type="filterSearch" />
                    <xs:element name="component" type="component" />
                    <xs:element name="actionsColumn" type="actionsColumn" />
                    <xs:element name="selectionsColumn" type="selectionsColumn" />
                    <xs:element type="exportButton" name="exportButton"/>
                    <xs:element type="modalConfiguration" name="modal"/>
                    <xs:element type="insertFormConfiguration" name="insertForm"/>
                    <xs:element type="insertListingConfiguration" name="insertListing"/>
                    <xs:element type="columnsControls" name="columnsControls"/>
                    <xs:element type="listingToolbarConfiguration" name="listingToolbar"/>
                    <xs:element type="button" name="button"/>
                    <xs:element type="htmlContent" name="htmlContent"/>
                    <xs:element type="actionDelete" name="actionDelete"/>
                    <xs:element type="dynamicRowsConfiguration" name="dynamicRows"/>
                </xs:choice>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>
    <xs:complexType name="listingToolbarConfiguration">
        <xs:complexContent>
            <xs:extension base="containerConfiguration"/>
        </xs:complexContent>
    </xs:complexType>
    <xs:complexType name="fieldsetConfiguration">
        <xs:complexContent>
            <xs:extension base="container">
                <xs:choice minOccurs="0" maxOccurs="unbounded">
                    <xs:element type="containerConfiguration" name="container"/>
                    <xs:element type="fieldsetConfiguration" name="fieldset"/>
                    <xs:element name="field" type="field" />
                    <xs:element type="insertFormConfiguration" name="insertForm"/>
                    <xs:element type="insertListingConfiguration" name="insertListing"/>
                    <xs:element type="modalConfiguration" name="modal"/>
                    <xs:element type="button" name="button"/>
                    <xs:element type="dynamicRowsConfiguration" name="dynamicRows"/>
                </xs:choice>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>
    <xs:complexType name="listingConfiguration">
        <xs:complexContent>
            <xs:extension base="listing">
                <xs:choice minOccurs="0" maxOccurs="unbounded">
                    <xs:element type="paging" name="paging"/>
                    <xs:element type="listingToolbarConfiguration" name="listingToolbar"/>
                    <xs:element type="filtersConfiguration" name="filters"/>
                    <xs:element type="massactionConfiguration" name="massaction"/>
                    <xs:element type="dataSource" name="dataSource"/>
                    <xs:element type="columnsConfiguration" name="columns"/>
                    <xs:element type="containerConfiguration" name="container"/>
                </xs:choice>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>
    <xs:complexType name="formConfiguration">
        <xs:complexContent>
            <xs:extension base="form">
                <xs:choice minOccurs="0" maxOccurs="unbounded">
                    <xs:element type="field" name="field" />
                    <xs:element type="fieldsetConfiguration" name="fieldset"/>
                    <xs:element type="containerConfiguration" name="container"/>
                    <xs:element type="dataSource" name="dataSource"/>
                    <xs:element type="insertFormConfiguration" name="insertForm"/>
                    <xs:element type="insertListingConfiguration" name="insertListing"/>
                    <xs:element type="modalConfiguration" name="modal"/>
                </xs:choice>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>
    <xs:complexType name="columnsConfiguration">
        <xs:complexContent>
            <xs:extension base="columns">
                <xs:choice minOccurs="0" maxOccurs="unbounded">
                    <xs:element name="column" type="column" />
                    <xs:element name="actionsColumn" type="actionsColumn" />
                    <xs:element name="selectionsColumn" type="selectionsColumn" />
                </xs:choice>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>
    <xs:complexType name="insertFormConfiguration">
        <xs:complexContent>
            <xs:extension base="containerConfiguration">
                <xs:choice minOccurs="0" maxOccurs="unbounded"/>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>
    <xs:complexType name="insertListingConfiguration">
        <xs:complexContent>
            <xs:extension base="containerConfiguration">
                <xs:choice minOccurs="0" maxOccurs="unbounded"/>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>
    <xs:complexType name="modalConfiguration">
        <xs:complexContent>
            <xs:extension base="containerConfiguration">
                <xs:choice minOccurs="0" maxOccurs="unbounded"/>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>
    <xs:complexType name="massactionConfiguration">
        <xs:complexContent>
            <xs:extension base="massaction">
                <xs:choice minOccurs="0" maxOccurs="unbounded">
                    <xs:element name="action" type="action" />
                </xs:choice>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>
    <xs:complexType name="dynamicRowsConfiguration">
        <xs:complexContent>
            <xs:extension base="dynamicRows">
                <xs:choice minOccurs="0" maxOccurs="unbounded">
                    <xs:element type="containerConfiguration" name="container"/>
                    <xs:element type="actionDelete" name="actionDelete"/>
                </xs:choice>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>
    <xs:complexType name="filtersConfiguration">
        <xs:complexContent>
            <xs:extension base="filters">
                <xs:choice minOccurs="0" maxOccurs="unbounded">
                    <xs:element name="filterInput" type="filterInput" />
                    <xs:element name="filterRange" type="filterRangeConfiguration" />
                    <xs:element name="filterSelect" type="filterSelect" />
                    <xs:element name="containerConfiguration" type="container" />
                </xs:choice>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>
    <xs:complexType name="filterRangeConfiguration">
        <xs:complexContent>
            <xs:extension base="filterRange">
                <xs:choice minOccurs="0" maxOccurs="unbounded">
                    <xs:element name="filterDate" type="filterDate" />
                    <xs:element name="filterInput" type="filterInput" />
                    <xs:element name="filterSelect" type="filterSelect" />
                </xs:choice>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>
</xs:schema>
