<?xml version="1.0" encoding="UTF-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="schema" type="schemaType"/>
    <xs:complexType name="contentType">
        <xs:sequence>
            <xs:element name="choice" minOccurs="0" maxOccurs="unbounded">
                <xs:complexType>
                    <xs:attribute type="xs:string" name="code" use="required"/>
                    <xs:attribute type="xs:string" name="label" use="required"/>
                </xs:complexType>
            </xs:element>
        </xs:sequence>
        <xs:attribute name="type" use="optional">
            <xs:simpleType>
                <xs:restriction base="xs:string">
                    <xs:enumeration value="article"/>
                    <xs:enumeration value="article_topic"/>
                    <xs:enumeration value="attribute"/>
                    <xs:enumeration value="attribute_article"/>
                    <xs:enumeration value="attribute_store"/>
                    <xs:enumeration value="attribute_customer"/>
                    <xs:enumeration value="attribute_group"/>
                    <xs:enumeration value="banner_section"/>
                    <xs:enumeration value="category"/>
                    <xs:enumeration value="brand"/>
                    <xs:enumeration value="label"/>
                    <xs:enumeration value="product"/>
                    <xs:enumeration value="product_list"/>
                    <xs:enumeration value="product_rules"/>
                    <xs:enumeration value="product_with_variant"/>
                    <xs:enumeration value="admin"/>
                    <xs:enumeration value="color"/>
                    <xs:enumeration value="datetime"/>
                    <xs:enumeration value="email"/>
                    <xs:enumeration value="html"/>
                    <xs:enumeration value="html_simple"/>
                    <xs:enumeration value="image"/>
                    <xs:enumeration value="video"/>
                    <xs:enumeration value="select"/>
                    <xs:enumeration value="storage_center"/>
                    <xs:enumeration value="store"/>
                    <xs:enumeration value="url"/>
                    <xs:enumeration value="string"/>
                    <xs:enumeration value="text_page"/>
                    <xs:enumeration value="upsell_group"/>
                    <xs:enumeration value="working_hours"/>
                </xs:restriction>
            </xs:simpleType>
        </xs:attribute>
        <xs:attribute type="xs:string" name="label" use="required"/>
        <xs:attribute type="xs:string" name="code" use="required"/>
        <xs:attribute type="xs:int" name="width" use="optional"/>
        <xs:attribute type="xs:boolean" name="multiple" use="optional" default="false"/>
    </xs:complexType>
    <xs:complexType name="rowType">
        <xs:choice maxOccurs="unbounded">
            <xs:element type="contentType" name="content"/>
            <xs:element type="cellType" name="cell"/>
            <xs:element type="rowType" name="row"/>
        </xs:choice>
        <xs:attribute type="xs:string" name="label" use="optional"/>
        <xs:attribute type="xs:string" name="code" use="required"/>
        <xs:attribute type="xs:boolean" name="multiple" use="optional" default="false"/>
    </xs:complexType>
    <xs:complexType name="cellType">
        <xs:choice maxOccurs="unbounded">
            <xs:element type="contentType" name="content"/>
            <xs:element type="cellType" name="cell"/>
            <xs:element type="rowType" name="row"/>
        </xs:choice>
        <xs:attribute type="xs:string" name="label" use="required"/>
        <xs:attribute type="xs:string" name="code" use="required"/>
        <xs:attribute type="xs:int" name="width" use="optional"/>
        <xs:attribute type="xs:integer" name="per-row" default="5" use="optional"/>
        <xs:attribute type="xs:boolean" name="multiple" use="optional"/>
    </xs:complexType>
    <xs:complexType name="gridType">
        <xs:choice maxOccurs="unbounded">
            <xs:element type="rowType" name="row"/>
        </xs:choice>
    </xs:complexType>
    <xs:complexType name="schemaType">
        <xs:sequence>
            <xs:element name="config" type="configType"/>
            <xs:element name="grid" type="gridType"/>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="configType">
        <xs:sequence>
            <xs:element name="name" type="xs:string" />
            <xs:element name="priority" type="xs:integer" minOccurs="0" />
            <xs:element name="translations" type="xs:boolean"/>
            <xs:element name="mode" minOccurs="0">
                <xs:simpleType>
                    <xs:restriction base="xs:string">
                        <xs:enumeration value="full_page"/>
                        <xs:enumeration value="part"/>
                    </xs:restriction>
                </xs:simpleType>
            </xs:element>
            <xs:element name="supported-context" type="supportedContextType" maxOccurs="unbounded"/>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="supportedContextType">
        <xs:attribute name="type" use="required">
            <xs:simpleType>
                <xs:restriction base="xs:string">
                    <xs:enumeration value="article"/>
                    <xs:enumeration value="topic"/>
                    <xs:enumeration value="text_page"/>
                    <xs:enumeration value="category"/>
                    <xs:enumeration value="product"/>
                    <xs:enumeration value="store"/>
                    <xs:enumeration value="brand"/>
                    <xs:enumeration value="global"/>
                </xs:restriction>
            </xs:simpleType>
        </xs:attribute>
    </xs:complexType>
</xs:schema>
