{
    "actionsheet": {
        "component": "actionsheet",
        "rules": [
            {
                "selector": ".k-actionsheet",
                "checks": [
                    {
                        "selector": ".k-actionsheet",
                        "id": "k-actionsheet-role",
                        "test": true,
                        "usage": "Announces the dialog role of the component.",
                        "value": "dialog",
                        "attribute": "role"
                    },
                    {
                        "id": "k-actionsheet-label",
                        "test": true,
                        "usage": "Associates the title of the action sheet.",
                        "value": ".k-actionsheet-title id",
                        "attribute": "aria-labelledby"
                    },
                    {
                        "id": "k-actionsheet-hidden",
                        "test": true,
                        "usage": "Announces the hidden state of the ActionSheet container.",
                        "value": [
                            "true",
                            "false"
                        ],
                        "attribute": "aria-hidden"
                    },
                    {
                        "id": "k-actionsheet-modal",
                        "test": true,
                        "usage": "Announces that the action sheet is modal.",
                        "value": "true",
                        "attribute": "aria-modal"
                    }
                ]
            },
            {
                "selector": ".k-actionsheet .k-actionsheet-title",
                "checks": [
                    {
                        "selector": ".k-actionsheet .k-actionsheet-title",
                        "id": "k-actionsheet-header-id",
                        "test": true,
                        "usage": "Used to associate the title with the action sheet wrapper element.",
                        "attribute": "id"
                    }
                ]
            },
            {
                "selector": ".k-list-ul",
                "checks": [
                    {
                        "selector": ".k-list-ul",
                        "id": "k-actionsheet-items-wrapper-role",
                        "test": true,
                        "usage": "Sets the role attribute of the action sheet items wrapper to group.",
                        "value": "group",
                        "attribute": "role"
                    }
                ]
            },
            {
                "selector": ".k-actionsheet-item",
                "checks": [
                    {
                        "selector": ".k-actionsheet-item",
                        "id": "k-actionsheet-item-tabindex",
                        "test": true,
                        "usage": "Makes items focusable and includes them in the natural tab sequence.",
                        "value": "0",
                        "attribute": "tabindex"
                    },
                    {
                        "id": "k-actionsheet-item-role",
                        "test": true,
                        "usage": "Sets action sheet items role to button.",
                        "value": "button",
                        "attribute": "role"
                    }
                ]
            },
            {
                "selector": ".k-actionsheet-item.k-disabled",
                "checks": [
                    {
                        "selector": ".k-actionsheet-item.k-disabled",
                        "id": "k-actionsheet-action-disabled",
                        "test": true,
                        "usage": "Announces action items as disabled as necessary.",
                        "value": "true",
                        "attribute": "aria-disabled"
                    }
                ]
            }
        ]
    },
    "aiprompt": {
        "component": "aiprompt",
        "rules": [
            {
                "selector": ".k-textarea-prefix>.k-button",
                "checks": [
                    {
                        "selector": ".k-textarea-prefix>.k-button",
                        "id": "k-prefix-buttons-role",
                        "test": true,
                        "multiple": true,
                        "usage": "The buttons must have appropriate role.",
                        "attribute": [
                            "role=button",
                            "nodeName=button"
                        ]
                    },
                    {
                        "id": "k-prefix-buttons-label",
                        "test": true,
                        "multiple": true,
                        "usage": "The buttons must be properly labelled.",
                        "attribute": [
                            "aria-label",
                            "title"
                        ]
                    }
                ]
            },
            {
                "selector": ".k-textarea-suffix>.k-button",
                "checks": [
                    {
                        "selector": ".k-textarea-suffix>.k-button",
                        "id": "k-suffix-buttons-role",
                        "test": true,
                        "multiple": true,
                        "usage": "The buttons must have appropriate role.",
                        "attribute": [
                            "role=button",
                            "nodeName=button"
                        ]
                    },
                    {
                        "id": "k-suffix-buttons-label",
                        "test": true,
                        "multiple": true,
                        "usage": "The buttons must be properly labelled.",
                        "attribute": [
                            "aria-label",
                            "title"
                        ]
                    }
                ]
            },
            {
                "selector": ".k-textarea-suffix>.k-prompt-send.k-disabled",
                "checks": [
                    {
                        "selector": ".k-textarea-suffix>.k-prompt-send.k-disabled",
                        "id": "k-suffix-send-button",
                        "test": true,
                        "value": "true",
                        "usage": "Announces send action as disabled if necessary.",
                        "attribute": "aria-disabled"
                    }
                ]
            },
            {
                "selector": ".k-prompt-expander .k-button",
                "checks": [
                    {
                        "selector": ".k-prompt-expander .k-button",
                        "id": "k-prompt-expander-controls",
                        "test": true,
                        "usage": "Points to the controlled element based on the given `id`.",
                        "value": ".k-prompt-expander-content id",
                        "attribute": "aria-controls"
                    }
                ]
            },
            {
                "selector": ".k-prompt-expander .k-suggestion-group",
                "checks": [
                    {
                        "selector": ".k-prompt-expander .k-suggestion-group",
                        "id": "k-prompt-expander-suggestion-list",
                        "test": true,
                        "usage": "Indicates that the suggestion container element is a group.",
                        "value": "group",
                        "attribute": "role"
                    }
                ]
            },
            {
                "selector": ".k-prompt-expander .k-suggestion",
                "checks": [
                    {
                        "selector": ".k-prompt-expander .k-suggestion",
                        "id": "k-suggestion-option",
                        "test": true,
                        "usage": "Indicates that the suggestion element is a button.",
                        "value": "button",
                        "attribute": "role"
                    },
                    {
                        "id": "k-suggestion-label",
                        "test": true,
                        "usage": "The suggestion elements must be properly labelled.",
                        "attribute": [
                            "aria-label",
                            "title"
                        ]
                    },
                    {
                        "id": "k-suggestion-tabindex",
                        "test": true,
                        "usage": "The suggestion element should be focusable.",
                        "value": "0",
                        "attribute": "tabindex"
                    }
                ]
            }
        ]
    },
    "autocomplete": {
        "component": "autocomplete",
        "rules": [
            {
                "selector": ".k-input-inner",
                "checks": [
                    {
                        "selector": ".k-input-inner",
                        "id": "k-autocomplete-role",
                        "test": true,
                        "usage": "Announces the presence of an AutoComplete as the inner element of the AutoComplete that is used for filtering.",
                        "value": "combobox",
                        "attribute": "role"
                    },
                    {
                        "id": "k-autocomplete-label",
                        "test": true,
                        "multiple": true,
                        "usage": "The input needs an accessible name that will be assigned to it.",
                        "attribute": [
                            "label for",
                            "aria-label",
                            "aria-labelledby"
                        ]
                    },
                    {
                        "id": "k-autocomplete-expanded",
                        "test": true,
                        "usage": "Announces the state of the popup visibility.",
                        "attribute": "aria-expanded",
                        "value": [
                            "true",
                            "false"
                        ]
                    },
                    {
                        "id": "k-autocomplete-controls",
                        "test": true,
                        "usage": "Points to the `listbox` element. Signifies that the `combobox` element controls the `listbox` one.",
                        "value": "[role='listbox'] id",
                        "attribute": "aria-controls"
                    },
                    {
                        "id": "k-autocomplete-activedescendent",
                        "test": true,
                        "when": "open",
                        "usage": "Points to the focused item in the popup. The focused item is changed with keyboard navigation. If the popup is not visible, the attribute must not point to any element or must be removed.",
                        "value": ".k-list-item.k-focus id",
                        "attribute": "aria-activedescendant"
                    },
                    {
                        "id": "k-autocomplete-autocomplete-list",
                        "test": true,
                        "when": "filtering",
                        "usage": "The attribute is rendered and the value is set to `list` when the filtering feature is enabled.",
                        "value": "list",
                        "attribute": "aria-autocomplete"
                    },
                    {
                        "id": "k-autocomplete-autocomplete-both",
                        "test": true,
                        "when": "filtering suggest",
                        "usage": "The attribute is rendered and the value is set to `both` when both the filtering and suggest features are enabled.",
                        "value": "both",
                        "attribute": "aria-autocomplete"
                    },
                    {
                        "id": "k-autocomplete-autocomplete-inline",
                        "test": true,
                        "when": "suggest",
                        "usage": "The attribute is rendered and the value is set to `only` when the suggest feature is enabled.",
                        "value": "inline",
                        "attribute": "aria-autocomplete"
                    },
                    {
                        "id": "k-autocomplete-readonly",
                        "test": true,
                        "usage": "The attribute is rendered only when the AutoComplete is read-only.",
                        "when": "readonly",
                        "multiple": true,
                        "attribute": [
                            "readonly",
                            "aria-readonly"
                        ],
                        "value": "true"
                    },
                    {
                        "id": "k-autocomplete-busy",
                        "test": true,
                        "when": "loading remote",
                        "usage": "The attribute is rendered only when the AutoComplete is loading data.",
                        "value": "true",
                        "attribute": "aria-busy"
                    },
                    {
                        "id": "k-autocomplete-focusable",
                        "test": true,
                        "usage": "The element must be focusable.",
                        "value": "0",
                        "attribute": "tabindex"
                    }
                ]
            },
            {
                "selector": ".k-invalid .k-input-inner,.ng-invalid .k-input-inner",
                "checks": [
                    {
                        "selector": ".k-invalid .k-input-inner,.ng-invalid .k-input-inner",
                        "test": true,
                        "id": "k-autocomplete-invalid",
                        "usage": "The attribute is rendered only when the AutoComplete is in a form and announces the valid state of the component.",
                        "value": "true",
                        "attribute": "aria-invalid"
                    }
                ]
            },
            {
                "selector": ".k-disabled .k-input-inner",
                "checks": [
                    {
                        "selector": ".k-disabled .k-input-inner",
                        "id": "k-autocomplete-disabled",
                        "test": true,
                        "usage": "The attribute is rendered only when the AutoComplete is disabled.",
                        "multiple": true,
                        "attribute": [
                            "disabled=disabled",
                            "aria-disabled=true"
                        ]
                    }
                ]
            },
            {
                "selector": ".k-animation-container",
                "checks": [
                    {
                        "selector": ".k-animation-container",
                        "test": true,
                        "id": "k-popuplist-role",
                        "attribute": "role",
                        "value": "region",
                        "usage": "When the component container is appended to the `<body>` element of the document, it requires you to assing a `landmark` role to it. Otherwise, append it to an element with an appropriate `landmark` role."
                    },
                    {
                        "test": true,
                        "id": "k-popuplist-label",
                        "multiple": true,
                        "attribute": [
                            "aria-label",
                            "aria-labelledby"
                        ],
                        "usage": "When the container has a `region` role assigned, povides a label."
                    }
                ]
            },
            {
                "selector": ".k-list .k-no-data",
                "checks": [
                    {
                        "selector": ".k-list .k-no-data",
                        "test": true,
                        "id": "k-no-data-aria-live",
                        "attribute": "aria-live",
                        "value": "polite",
                        "usage": "Identifies the element as a live region in the `polite` state, meaning assistive technology users are informed about changes to the region at the next available opportunity."
                    }
                ]
            },
            {
                "selector": ".k-list-item-icon-wrapper",
                "checks": [
                    {
                        "selector": ".k-list-item-icon-wrapper",
                        "id": "k-popuplist-item-icon-wrapper-presentation",
                        "test": true,
                        "usage": "Indicates that the icon wrapper is decorative and should be ignored by assistive technologies.",
                        "value": "presentation",
                        "attribute": "role"
                    }
                ]
            },
            {
                "selector": ".k-list-item-icon",
                "checks": [
                    {
                        "selector": ".k-list-item-icon",
                        "id": "k-popuplist-item-icon-hidden",
                        "test": true,
                        "when": "icon present",
                        "usage": "Ensures that the icon itself is hidden from assistive technologies since it is decorative.",
                        "value": "true",
                        "attribute": "aria-hidden"
                    }
                ]
            },
            {
                "selector": ".k-list-item.k-selected",
                "checks": [
                    {
                        "selector": ".k-list-item.k-selected",
                        "test": true,
                        "id": "k-popuplist-item-selected",
                        "attribute": "aria-selected",
                        "value": "true",
                        "usage": "Indicates the selected state of the item."
                    }
                ]
            },
            {
                "selector": ".k-list-ul",
                "checks": [
                    {
                        "selector": ".k-list-ul",
                        "id": "k-popuplist-group-role",
                        "test": true,
                        "usage": "When data is grouped, role is group, otherwise - listbox.",
                        "value": [
                            "listbox",
                            "group"
                        ],
                        "attribute": "role"
                    }
                ]
            },
            {
                "selector": ".k-list-group-item",
                "checks": [
                    {
                        "selector": ".k-list-group-item",
                        "test": true,
                        "id": "k-popuplist-group-item-role",
                        "attribute": "role",
                        "value": "presentation",
                        "usage": "The group header has role='presentation' since the grouping semantics are provided by the ul[role=group]."
                    },
                    {
                        "test": true,
                        "id": "k-popuplist-group-header-id",
                        "attribute": "id",
                        "usage": "Provides an id for the group header that is referenced by the group's aria-labelledby attribute."
                    }
                ]
            },
            {
                "selector": ".k-list-ul .k-list-item",
                "checks": [
                    {
                        "selector": ".k-list-ul .k-list-item",
                        "id": "k-popuplist-grouped-item-role",
                        "test": true,
                        "usage": "Items within a group maintain the option role.",
                        "value": "option",
                        "attribute": "role"
                    }
                ]
            }
        ]
    },
    "avatar": {
        "component": "avatar",
        "rules": [
            {
                "selector": ".k-avatar img",
                "checks": [
                    {
                        "selector": ".k-avatar img",
                        "id": "k-avatar-image-alt",
                        "test": true,
                        "usage": "Assures the presence of an `alt` attribute in a nested `img` tag inside the Avatar.",
                        "attribute": "alt"
                    }
                ]
            }
        ]
    },
    "BottomNavigation": {
        "component": "BottomNavigation",
        "rules": [
            {
                "selector": ".k-bottom-nav",
                "checks": [
                    {
                        "selector": ".k-bottom-nav",
                        "id": "k-bottom-nav-role",
                        "test": true,
                        "usage": "The landmark role `navigation` must be assigned to the bottom navigation.",
                        "attribute": [
                            "role=navigation",
                            "nodeName=nav"
                        ]
                    }
                ]
            },
            {
                "selector": ".k-bottom-nav-item",
                "checks": [
                    {
                        "selector": ".k-bottom-nav-item",
                        "id": "k-bottom-nav-item-role",
                        "test": true,
                        "usage": "Associate the link purpose of the bottom navigation items.",
                        "attribute": [
                            "role=link",
                            "nodeName=a"
                        ]
                    }
                ]
            },
            {
                "selector": ".k-bottom-nav-item.k-selected",
                "checks": [
                    {
                        "selector": ".k-bottom-nav-item.k-selected",
                        "id": "k-bottom-nav-item-current",
                        "test": true,
                        "usage": "Associate the link purpose of the bottom navigation items.",
                        "value": "true",
                        "attribute": "aria-current"
                    }
                ]
            }
        ]
    },
    "breadcrumb": {
        "component": "breadcrumb",
        "rules": [
            {
                "selector": ".k-breadcrumb",
                "checks": [
                    {
                        "selector": ".k-breadcrumb",
                        "id": "k-breadcrumb-label",
                        "test": true,
                        "usage": "Indicates the type of navigation provided by the `nav` element.",
                        "value": "Breadcrumb",
                        "attribute": "aria-label"
                    }
                ]
            },
            {
                "selector": ".k-breadcrumb-item .k-breadcrumb-link,.k-breadcrumb-item .k-breadcrumb-root-link",
                "checks": [
                    {
                        "selector": ".k-breadcrumb-item .k-breadcrumb-link,.k-breadcrumb-item .k-breadcrumb-root-link",
                        "id": "k-breadcrumb-item-link-role",
                        "test": true,
                        "usage": "The breadcrumb item should render either an `<a>` element, or should have `role=\"link\"` assigned.",
                        "attribute": [
                            "role=link",
                            "nodeName=a"
                        ]
                    }
                ]
            },
            {
                "selector": ".k-breadcrumb-last-item .k-breadcrumb-link,.k-breadcrumb-last-item .k-breadcrumb-root-link",
                "checks": [
                    {
                        "selector": ".k-breadcrumb-last-item .k-breadcrumb-link,.k-breadcrumb-last-item .k-breadcrumb-root-link",
                        "id": "k-breadcrumb-item-link-current",
                        "test": true,
                        "usage": "The last breadcrumb item that points to the active page should have `aria-current=\"page\"`.",
                        "value": "page",
                        "attribute": "aria-current"
                    }
                ]
            },
            {
                "selector": ".k-breadcrumb-last-item .k-breadcrumb-link",
                "checks": [
                    {
                        "selector": ".k-breadcrumb-last-item .k-breadcrumb-link",
                        "id": "k-breadcrumb-item-link-disabled",
                        "test": true,
                        "usage": "Indicates that the last breadcrumb item is disabled.",
                        "value": "true",
                        "attribute": "aria-disabled"
                    }
                ]
            },
            {
                "selector": ".k-breadcrumb-delimiter-icon",
                "checks": [
                    {
                        "selector": ".k-breadcrumb-delimiter-icon",
                        "id": "k-breadcrumb-delimiter-icon-hidden",
                        "test": true,
                        "usage": "The breadcrumb delimiter icon should not be accessed through assistive technology.",
                        "value": "true",
                        "attribute": "aria-hidden"
                    }
                ]
            }
        ]
    },
    "button": {
        "component": "button",
        "rules": [
            {
                "selector": ".k-button",
                "checks": [
                    {
                        "selector": ".k-button",
                        "id": "k-button-role",
                        "test": true,
                        "multiple": true,
                        "usage": "If the used element is not `<button>`, explicitly set its `role` to `button`.",
                        "attribute": [
                            "role=button",
                            "nodeName=button"
                        ]
                    }
                ]
            }
        ]
    },
    "buttongroup": {
        "component": "buttongroup",
        "rules": [
            {
                "selector": ".k-button-group:not(.k-split-button)",
                "checks": [
                    {
                        "selector": ".k-button-group:not(.k-split-button)",
                        "id": "k-buttongroup-role",
                        "test": true,
                        "usage": "Sets the proper role for the group of buttons.",
                        "value": "group",
                        "attribute": "role"
                    }
                ]
            },
            {
                "selector": ".k-button-group.k-disabled",
                "checks": [
                    {
                        "selector": ".k-button-group.k-disabled",
                        "id": "k-buttongroup-disabled",
                        "test": true,
                        "usage": "The attribute is rendered only when the entire button group is disabled.",
                        "value": "true",
                        "attribute": "aria-disabled"
                    }
                ]
            },
            {
                "selector": ".k-button-group:not(.k-split-button):not(.k-scheduler-navigation):not(.k-zoom-control) .k-button",
                "checks": [
                    {
                        "selector": ".k-button-group:not(.k-split-button):not(.k-scheduler-navigation):not(.k-zoom-control) .k-button",
                        "id": "k-buttongroup-button-pressed",
                        "test": true,
                        "usage": "Specifies the current state of the ButtonGroup. Only the selected button within the group will have this attribute set to `true`.",
                        "attribute": "aria-pressed"
                    }
                ]
            }
        ]
    },
    "calendar": {
        "component": "calendar",
        "rules": [
            {
                "selector": ".k-calendar:not(.k-calendar-infinite):not(.k-calendar-range) .k-calendar-table",
                "checks": [
                    {
                        "selector": ".k-calendar:not(.k-calendar-infinite):not(.k-calendar-range) .k-calendar-table",
                        "id": "k-calendar-role",
                        "test": true,
                        "usage": "Specifies the role of the Calendar dates table.",
                        "value": "grid",
                        "attribute": "role"
                    },
                    {
                        "id": "k-calendar-label",
                        "test": true,
                        "usage": "Pointing to the current view label (e.g. `March 2022` or `2020-2029`).",
                        "attribute": "aria-labelledby",
                        "value": ".k-nav-fast id"
                    },
                    {
                        "id": "k-calendar-activedescendant",
                        "test": true,
                        "when": "focused",
                        "usage": "Pointing to the currently active (focused) date/month/year/decade in the table.",
                        "attribute": "aria-activedescendant",
                        "value": ".k-calendar-td.k-focus id"
                    },
                    {
                        "id": "k-calendar-tabindex",
                        "test": true,
                        "usage": "Makes the grid focusable.",
                        "value": "0",
                        "attribute": "tabindex"
                    }
                ]
            },
            {
                "selector": ".k-content:nth-child(1) .k-calendar-th",
                "checks": [
                    {
                        "selector": ".k-content:nth-child(1) .k-calendar-th",
                        "id": "k-calendar-th-scope",
                        "test": true,
                        "usage": "Specifies that the header is applied to a column.",
                        "value": "col",
                        "attribute": "scope"
                    },
                    {
                        "id": "k-calendar-th-label",
                        "test": true,
                        "usage": "Specifies the full name of the day of the week (the column header).",
                        "attribute": "aria-label"
                    },
                    {
                        "id": "k-calendar-th-role",
                        "test": true,
                        "usage": "The row in the `<thead>` must contain `<th>` elements or elements with `role=\"columnheader\"`.",
                        "attribute": [
                            "role=columnheader",
                            "nodeName=th"
                        ]
                    }
                ]
            },
            {
                "selector": ".k-calendar-td.k-selected",
                "checks": [
                    {
                        "selector": ".k-calendar-td.k-selected",
                        "id": "k-calendar-td-selected",
                        "test": true,
                        "usage": "Specifies whether the date is selected or not.",
                        "attribute": "aria-selected",
                        "value": "true"
                    }
                ]
            },
            {
                "selector": ".k-calendar-td.k-disabled",
                "checks": [
                    {
                        "selector": ".k-calendar-td.k-disabled",
                        "id": "k-calendar-td-disabled",
                        "test": true,
                        "usage": "When a date is not available for selection, its gridcell element must have the attribute set to `true`.",
                        "attribute": "aria-disabled",
                        "value": "true"
                    }
                ]
            },
            {
                "selector": ".k-year .k-calendar-td",
                "checks": [
                    {
                        "selector": ".k-year .k-calendar-td",
                        "id": "k-calendar-td-label",
                        "test": true,
                        "usage": "Applicable in year view - for better context contains the full name of the month. May also be applied in month view to specify the full text for a date.",
                        "attribute": "aria-label"
                    }
                ]
            },
            {
                "selector": ".k-nav-next,.k-nav-prev",
                "checks": [
                    {
                        "selector": ".k-nav-next,.k-nav-prev",
                        "id": "k-calendar-nav-btn-role",
                        "test": true,
                        "usage": "Previous / Next buttons must either be `<button>` elements or have the appropriate role.",
                        "attribute": [
                            "role=button",
                            "nodeName=button"
                        ]
                    },
                    {
                        "id": "k-calendar-nav-btn-label",
                        "test": true,
                        "usage": "Previous and Next buttons must have descriptive text set as they contain only an icon (no text).",
                        "multiple": true,
                        "attribute": [
                            "aria-label",
                            "title"
                        ]
                    },
                    {
                        "id": "k-calendar-nav-btn-tabindex",
                        "test": true,
                        "usage": "The buttons must not be focusable.",
                        "value": "-1",
                        "attribute": "tabindex"
                    }
                ]
            },
            {
                "selector": ".k-nav-next.k-disabled,.k-nav-prev.k-disabled",
                "checks": [
                    {
                        "selector": ".k-nav-next.k-disabled,.k-nav-prev.k-disabled",
                        "id": "k-calendar-nav-btn-disabled",
                        "test": true,
                        "usage": "When navigation is not allowed outside the current month/year/decade the Previous and Next buttons should have this attribute set to `true`.",
                        "attribute": "aria-disabled",
                        "value": "true"
                    }
                ]
            },
            {
                "selector": ".k-nav-fast",
                "checks": [
                    {
                        "selector": ".k-nav-fast",
                        "id": "k-calendar-nav-fast-role",
                        "test": true,
                        "usage": "Go to parent view button must either be a `<button>` element or must have the appropriate role.",
                        "attribute": [
                            "role=button",
                            "nodeName=button"
                        ]
                    },
                    {
                        "id": "k-calendar-nav-fast-label",
                        "test": true,
                        "usage": "Go to parent view button must have descriptive text set explaining its purpose.",
                        "attribute": [
                            "aria-label",
                            "title"
                        ]
                    },
                    {
                        "id": "k-calendar-nav-fast-tabindex",
                        "test": true,
                        "usage": "The buttons must not be focusable.",
                        "value": "-1",
                        "attribute": "tabindex"
                    }
                ]
            },
            {
                "selector": ".k-nav-fast.k-disabled",
                "checks": [
                    {
                        "selector": ".k-nav-fast.k-disabled",
                        "id": "k-calendar-nav-fast-disabled",
                        "test": true,
                        "usage": "When navigation is not allowed outside the current view the button should have this attribute set to `true`.",
                        "attribute": "aria-disabled"
                    }
                ]
            },
            {
                "selector": ".k-nav-today",
                "checks": [
                    {
                        "selector": ".k-nav-today",
                        "id": "k-calendar-nav-today-role",
                        "test": true,
                        "usage": "Today link must either be `<a>` element or must have the appropriate role.",
                        "attribute": [
                            "role=link",
                            "nodeName=a"
                        ]
                    },
                    {
                        "id": "k-calendar-nav-today-tabindex",
                        "test": true,
                        "usage": "The link must not be focusable.",
                        "value": "-1",
                        "attribute": "tabindex"
                    }
                ]
            }
        ]
    },
    "captcha": {
        "component": "captcha",
        "rules": [
            {
                "selector": ".k-captcha-image>img",
                "checks": [
                    {
                        "selector": ".k-captcha-image>img",
                        "id": "k-captcha-image-alt",
                        "test": true,
                        "usage": "The Captcha image must have an `alt` tag, so that the.",
                        "attribute": "alt"
                    }
                ]
            },
            {
                "selector": ".k-captcha-image-controls>.k-button",
                "checks": [
                    {
                        "selector": ".k-captcha-image-controls>.k-button",
                        "id": "k-captcha-image-button-role",
                        "test": true,
                        "usage": "The image control buttons must have an appropriate role.",
                        "attribute": [
                            "role=button",
                            "nodeName=button"
                        ]
                    },
                    {
                        "id": "k-captcha-image-button-label",
                        "test": true,
                        "usage": "Each button must have an accessible name as they are all represented by icons and no text is available in their contents.",
                        "attribute": [
                            "aria-label",
                            "title"
                        ]
                    }
                ]
            },
            {
                "selector": ".k-captcha-input .k-input-inner",
                "checks": [
                    {
                        "selector": ".k-captcha-input .k-input-inner",
                        "id": "k-captcha-input-role",
                        "test": true,
                        "usage": "Describes the role of the component.",
                        "attribute": [
                            "role=textbox",
                            "nodeName=input"
                        ]
                    },
                    {
                        "id": "k-captcha-input-label",
                        "test": true,
                        "usage": "The input needs an accessible name to be assigned to it.",
                        "attribute": [
                            "label for",
                            "aria-label",
                            "aria-labelledby"
                        ]
                    }
                ]
            },
            {
                "selector": ".k-disabled .k-input-inner",
                "checks": [
                    {
                        "selector": ".k-disabled .k-input-inner",
                        "id": "k-captcha-disabled",
                        "test": true,
                        "usage": "Attribute is rendered only when the textbox is disabled.",
                        "multiple": true,
                        "attribute": [
                            "disabled=disabled",
                            "aria-disabled=true"
                        ]
                    }
                ]
            },
            {
                "selector": ".k-captcha-input>input",
                "checks": [
                    {
                        "selector": ".k-captcha-input>input",
                        "id": "k-captcha-hidden-input",
                        "test": true,
                        "usage": "The hidden input holding the Captcha ID value so that the remote could validate the user input.",
                        "attribute": "type",
                        "value": "hidden"
                    }
                ]
            }
        ]
    },
    "card": {
        "component": "card",
        "rules": [
            {
                "selector": ".k-card-list .k-card",
                "checks": [
                    {
                        "selector": ".k-card-list .k-card",
                        "id": "k-card-role",
                        "test": true,
                        "usage": "When the card is located in a list, it should accept the listitem role.",
                        "value": "listitem",
                        "attribute": "role"
                    },
                    {
                        "id": "k-card-tabindex",
                        "test": true,
                        "multiple": true,
                        "usage": "The card component is focusable. By enabling navigatable setting in the card component, it is focusable and all inner elements are not until Enter key is pressed.",
                        "value": "0",
                        "attribute": "tabindex"
                    },
                    {
                        "id": "k-card-describedby",
                        "test": true,
                        "usage": "Associate the card to the title element when going through the cards.",
                        "value": ".k-card-title id",
                        "attribute": "aria-describedby"
                    },
                    {
                        "id": "k-card-keyshortcuts",
                        "test": true,
                        "usage": "Announces the bound Enter key for the Card component that will enable the navigation inside the card.",
                        "value": "Enter",
                        "attribute": "aria-keyshortcuts"
                    }
                ]
            }
        ]
    },
    "carousel": {
        "component": "carousel",
        "rules": [
            {
                "selector": ".k-scrollview",
                "checks": [
                    {
                        "selector": ".k-scrollview",
                        "id": "k-carousel-role",
                        "test": true,
                        "usage": "Specifies the role of the Carousel element.",
                        "value": "application",
                        "attribute": "role"
                    },
                    {
                        "id": "k-carousel-roledescription",
                        "test": true,
                        "usage": "Clarifies the role of the Carousel element.",
                        "value": "carousel",
                        "attribute": "aria-roledescription"
                    },
                    {
                        "id": "k-carousel-tabindex",
                        "test": true,
                        "usage": "Carousel element must be focusable.",
                        "value": "0",
                        "attribute": "tabindex"
                    }
                ]
            },
            {
                "selector": ".k-scrollview-wrap",
                "checks": [
                    {
                        "selector": ".k-scrollview-wrap",
                        "id": "k-carousel-items-role",
                        "test": true,
                        "usage": "Clarifies the scrollview wrap as a list of items (images).",
                        "value": "list",
                        "attribute": "role"
                    }
                ]
            },
            {
                "selector": ".k-scrollview>.k-sr-only",
                "checks": [
                    {
                        "selector": ".k-scrollview>.k-sr-only",
                        "id": "k-carousel-live-polite",
                        "test": true,
                        "usage": "Identifies a hidden element as a live region in the `polite` state, meaning assistive technology users are informed about changes to the region at the next available opportunity.",
                        "value": "polite",
                        "attribute": "aria-live"
                    },
                    {
                        "id": "k-carousel-live-off",
                        "test": true,
                        "when": "auto",
                        "usage": "Identifies a hidden element as a live region that is in the `off` state, meaning assistive technology users are not informed about changes to the region.",
                        "value": "off",
                        "attribute": "aria-live"
                    }
                ]
            },
            {
                "selector": ".k-scrollview-wrap>*",
                "checks": [
                    {
                        "selector": ".k-scrollview-wrap>*",
                        "id": "k-carousel-item-role",
                        "test": true,
                        "usage": "Specifies the role of each Carousel item.",
                        "value": "listitem",
                        "attribute": "role"
                    },
                    {
                        "id": "k-carousel-item-roledescription",
                        "test": true,
                        "usage": "Clarifies the role of the Carousel item.",
                        "attribute": "aria-roledescription",
                        "value": "slide"
                    }
                ]
            },
            {
                "selector": ".k-scrollview-prev,.k-scrollview-next",
                "checks": [
                    {
                        "selector": ".k-scrollview-prev,.k-scrollview-next",
                        "id": "k-carousel-button-role",
                        "test": true,
                        "usage": "Specifies the role of the element as a Button.",
                        "multiple": true,
                        "attribute": [
                            "role=button",
                            "nodeName=button"
                        ]
                    },
                    {
                        "id": "k-carousel-button-label",
                        "test": true,
                        "usage": "Specifies label for the Previous/Next button.",
                        "attribute": "aria-label"
                    },
                    {
                        "id": "k-carousel-button-controls",
                        "test": true,
                        "usage": "Points to the id of the items container element.",
                        "attribute": "aria-controls",
                        "value": ".k-scrollview-wrap id"
                    }
                ]
            }
        ]
    },
    "chart": {
        "component": "chart",
        "rules": [
            {
                "selector": ".k-chart",
                "checks": [
                    {
                        "selector": ".k-chart",
                        "id": "chart-role",
                        "test": true,
                        "usage": "Indicates that the Chart element is a Graphics Document.",
                        "value": "graphics-document document",
                        "attribute": "role"
                    },
                    {
                        "id": "chart-role-description",
                        "test": true,
                        "usage": "User-set value that clarifies the type of Chart to screen reader users.",
                        "attribute": "aria-roledescription"
                    },
                    {
                        "id": "chart-label",
                        "test": true,
                        "usage": "Announces the user-set title of the Chart.",
                        "attribute": "aria-label"
                    }
                ]
            },
            {
                "selector": ".k-chart-point",
                "checks": [
                    {
                        "selector": ".k-chart-point",
                        "id": "chart-point-role",
                        "test": true,
                        "multiple": true,
                        "usage": "Specifies the role of the series point elements.",
                        "attribute": "role",
                        "value": "graphics-symbol"
                    },
                    {
                        "id": "chart-point-role-description",
                        "test": true,
                        "multiple": true,
                        "usage": "Describes the role of the series point elements.",
                        "attribute": "aria-roledescription",
                        "value": "Point"
                    }
                ]
            },
            {
                "selector": ".k-chart-legend-item",
                "checks": [
                    {
                        "selector": ".k-chart-legend-item",
                        "id": "chart-legend-item-role",
                        "test": true,
                        "multiple": true,
                        "usage": "Specifies the role of the legend item element.",
                        "attribute": "role",
                        "value": "checkbox"
                    },
                    {
                        "id": "chart-legend-item-label",
                        "test": true,
                        "multiple": true,
                        "usage": "Specifies the name of the series associated with this legend item.",
                        "attribute": "aria-label"
                    },
                    {
                        "id": "chart-legend-item-role-description",
                        "test": true,
                        "multiple": true,
                        "usage": "Specifies the name of the series associated with this legend item.",
                        "attribute": "aria-roledescription",
                        "value": "Legend item"
                    }
                ]
            }
        ]
    },
    "chat": {
        "component": "chat",
        "rules": [
            {
                "selector": ".k-message-list",
                "checks": [
                    {
                        "selector": ".k-message-list",
                        "id": "k-chat-message-list-role",
                        "test": true,
                        "usage": "The role of the Chat message list must imply that there is a log (list) of messages.",
                        "attribute": "role",
                        "value": "log"
                    },
                    {
                        "id": "k-chat-message-list-label",
                        "test": true,
                        "attribute": "aria-label",
                        "usage": "Announces the purpose of the Chat message list (for ex. 'Message list')."
                    },
                    {
                        "id": "k-chat-message-list-aria-live",
                        "test": true,
                        "attribute": "aria-live",
                        "usage": "Announces new messages in the Chat message list.",
                        "value": "polite"
                    }
                ]
            },
            {
                "selector": ".k-bubble",
                "checks": [
                    {
                        "selector": ".k-bubble",
                        "id": "k-chat-bubble-tabindex",
                        "test": true,
                        "multiple": true,
                        "usage": "The Chat bubble must be focusable.",
                        "attribute": "tabindex",
                        "value": "0"
                    }
                ]
            },
            {
                "selector": ".k-bubble .k-typing-indicator",
                "checks": [
                    {
                        "selector": ".k-bubble .k-typing-indicator",
                        "id": "k-chat-bubble-typing-tabindex",
                        "test": true,
                        "usage": "The Chat bubble typing indicator should not be focusable.",
                        "attribute": "tabindex",
                        "value": "-1"
                    }
                ]
            },
            {
                "selector": ".k-suggestion-group",
                "checks": [
                    {
                        "selector": ".k-suggestion-group",
                        "id": "k-chat-suggestion-group",
                        "test": true,
                        "usage": "Indicates that the suggestion container element is a group.",
                        "value": "group",
                        "attribute": "role"
                    }
                ]
            },
            {
                "selector": ".k-suggestion",
                "checks": [
                    {
                        "selector": ".k-suggestion",
                        "id": "k-chat-suggestion-role",
                        "test": true,
                        "usage": "The suggestion elements must be exposed as buttons.",
                        "attribute": "role",
                        "value": "button"
                    },
                    {
                        "id": "k-chat-suggestion-tabindex",
                        "test": true,
                        "multiple": true,
                        "usage": "The suggestion elements must be part of the page tabsequence.",
                        "attribute": "tabindex",
                        "value": "0"
                    }
                ]
            },
            {
                "selector": ".k-message-group-content>.k-chat-download-button",
                "checks": [
                    {
                        "selector": ".k-message-group-content>.k-chat-download-button",
                        "id": "k-chat-download-button-label",
                        "test": true,
                        "multiple": true,
                        "usage": "The download button must be properly labelled.",
                        "attribute": [
                            "aria-label",
                            "title"
                        ]
                    },
                    {
                        "id": "k-chat-download-button-role",
                        "test": true,
                        "multiple": true,
                        "usage": "The download button must have an appropriate role.",
                        "attribute": [
                            "role=button",
                            "nodeName=button"
                        ]
                    }
                ]
            },
            {
                "selector": ".k-message-reference>.k-button",
                "checks": [
                    {
                        "selector": ".k-message-reference>.k-button",
                        "id": "k-chat-reference-close-button",
                        "test": true,
                        "multiple": true,
                        "usage": "The reference close button must be properly labelled.",
                        "attribute": [
                            "aria-label",
                            "title"
                        ]
                    },
                    {
                        "id": "k-chat-reference-close-button-role",
                        "test": true,
                        "multiple": true,
                        "usage": "The reference close button must have an appropriate role.",
                        "attribute": [
                            "role=button",
                            "nodeName=button"
                        ]
                    }
                ]
            },
            {
                "selector": ".k-bubble-expandable-indicator",
                "checks": [
                    {
                        "selector": ".k-bubble-expandable-indicator",
                        "id": "k-chat-bubble-expandable-indicator-role",
                        "test": true,
                        "usage": "The expandable indicator must have an appropriate role.",
                        "attribute": "role",
                        "value": "button"
                    },
                    {
                        "id": "k-chat-bubble-expandable-indicator-label",
                        "test": true,
                        "usage": "The expandable indicator must be properly labelled.",
                        "attribute": [
                            "aria-label",
                            "title"
                        ]
                    },
                    {
                        "id": "k-chat-bubble-expandable-indicator-tabindex",
                        "test": true,
                        "usage": "The expandable indicator must be part of the page tabsequence.",
                        "attribute": "tabindex",
                        "value": "0"
                    }
                ]
            }
        ]
    },
    "checkbox": {
        "component": "checkbox",
        "rules": [
            {
                "selector": ".k-checkbox",
                "checks": [
                    {
                        "selector": ".k-checkbox",
                        "id": "k-checkbox-role",
                        "test": true,
                        "multiple": true,
                        "usage": "Announces the `checkbox` role of the element.",
                        "attribute": [
                            "role=checkbox",
                            "type=checkbox"
                        ]
                    },
                    {
                        "id": "k-checkbox-label",
                        "test": true,
                        "usage": "The input requires an accessible name to which it will be assigned.",
                        "attribute": [
                            "label for",
                            "aria-label",
                            "aria-labelledby"
                        ]
                    },
                    {
                        "id": "k-checkbox-checked",
                        "test": true,
                        "when": "checked",
                        "multiple": true,
                        "attribute": [
                            "aria-checked=true",
                            "checked=checked"
                        ],
                        "usage": "Announces the checked state of the CheckBox."
                    },
                    {
                        "id": "k-checkbox-disabled",
                        "test": true,
                        "when": "disabled",
                        "multiple": true,
                        "attribute": [
                            "disabled=disabled",
                            "aria-disabled=true"
                        ],
                        "usage": "The attribute is rendered only when the CheckBox is disabled."
                    }
                ]
            },
            {
                "selector": ".k-invalid,.ng-invalid",
                "checks": [
                    {
                        "selector": ".k-invalid,.ng-invalid",
                        "test": true,
                        "id": "k-checkbox-invalid",
                        "usage": "The attribute is rendered only when the CheckBox is in a `form` HTML element and announces the invalid state of the component.",
                        "value": "true",
                        "attribute": "aria-invalid"
                    }
                ]
            }
        ]
    },
    "chip": {
        "component": "chip",
        "rules": [
            {
                "selector": "*:not(.k-chip-list) > .k-chip",
                "checks": [
                    {
                        "selector": "*:not(.k-chip-list) > .k-chip",
                        "id": "k-chip-role",
                        "test": true,
                        "usage": "Announces that a chip is an optional inner component within the Chip list.",
                        "value": "button",
                        "attribute": "role"
                    }
                ]
            },
            {
                "selector": "*:not(.k-chip-list) > .k-chip.k-selected",
                "checks": [
                    {
                        "selector": "*:not(.k-chip-list) > .k-chip.k-selected",
                        "id": "k-chip-pressed",
                        "test": true,
                        "usage": "Announces that the Chip has been selected.",
                        "value": "true",
                        "attribute": "aria-pressed"
                    }
                ]
            },
            {
                "selector": "*:not(.k-chip-list) > .k-chip:not(.k-selected)",
                "checks": [
                    {
                        "selector": "*:not(.k-chip-list) > .k-chip:not(.k-selected)",
                        "id": "k-chip-not-pressed",
                        "when": "can be selected",
                        "test": true,
                        "usage": "Announces that the Chip has not benn selected.",
                        "value": "false",
                        "attribute": "aria-pressed"
                    }
                ]
            }
        ]
    },
    "chiplist": {
        "component": "chiplist",
        "rules": [
            {
                "selector": ".k-chip-list",
                "checks": [
                    {
                        "selector": ".k-chip-list",
                        "id": "k-chiplist-role",
                        "test": true,
                        "usage": "Announces the list role of the chip list.",
                        "value": "listbox",
                        "attribute": "role"
                    },
                    {
                        "id": "k-chiplist-label",
                        "test": true,
                        "usage": "Adds label to the ChipList element. ListBox element requires an accessible name attached to it.",
                        "multiple": true,
                        "attribute": [
                            "aria-label",
                            "aria-labelledby"
                        ]
                    },
                    {
                        "id": "k-chiplist-orientation",
                        "test": true,
                        "usage": "Specifies the horizontal orientation of the chiplist that gives context about the navigation shortcuts.",
                        "value": "horizontal",
                        "attribute": "aria-orientation"
                    },
                    {
                        "id": "k-chiplist-multiselectable",
                        "test": true,
                        "when": "multiselect",
                        "usage": "Announces the multiple selection ability of the chiplist. Only when the selection mode is set to multiple.",
                        "value": "true",
                        "attribute": "aria-multiselectable"
                    }
                ]
            },
            {
                "selector": ".k-chip",
                "checks": [
                    {
                        "selector": ".k-chip",
                        "id": "k-inner-chip-role",
                        "test": true,
                        "usage": "Announces the chip is an option inner component of the chip list.",
                        "value": "option",
                        "attribute": "role"
                    }
                ]
            },
            {
                "selector": ".k-chip.k-selected",
                "checks": [
                    {
                        "selector": ".k-chip.k-selected",
                        "id": "k-chip-selected",
                        "test": true,
                        "usage": "Announces the chip is selected.",
                        "value": "true",
                        "attribute": "aria-selected"
                    }
                ]
            },
            {
                "selector": ".k-chip:not(.k-selected)",
                "checks": [
                    {
                        "selector": ".k-chip:not(.k-selected)",
                        "id": "k-chip-not-selected",
                        "when": "can be selected",
                        "test": true,
                        "usage": "Announces the chip is not selected.",
                        "value": "false",
                        "attribute": "aria-selected"
                    }
                ]
            },
            {
                "selector": ".k-chip:has(.k-i-x-circle),.k-chip:has(.k-svg-i-x-circle)",
                "checks": [
                    {
                        "selector": ".k-chip:has(.k-i-x-circle),.k-chip:has(.k-svg-i-x-circle)",
                        "id": "k-chip-shortcuts",
                        "test": true,
                        "usage": "Announces the Delete action along with the default Enter key used for selection/click action.",
                        "value": "Enter Delete",
                        "attribute": "aria-keyshortcuts"
                    }
                ]
            }
        ]
    },
    "colorgradient": {
        "component": "colorgradient",
        "rules": [
            {
                "selector": ".k-colorgradient",
                "checks": [
                    {
                        "selector": ".k-colorgradient",
                        "id": "k-colorgradient-role",
                        "test": true,
                        "usage": "The focusable wrapper of the component should be considered a `textbox`. That signifies it has a value that could be submitted.",
                        "value": "textbox",
                        "attribute": "role"
                    },
                    {
                        "id": "k-colorgradient-label",
                        "test": true,
                        "usage": "The component needs an accessible name to be assigned to it. Must also include the currently selected value in the component.",
                        "attribute": [
                            "aria-label",
                            "aria-labelledby"
                        ]
                    },
                    {
                        "id": "k-colorgradient-tabindex",
                        "test": true,
                        "usage": "The element must be focusable.",
                        "value": "0",
                        "attribute": "tabindex"
                    }
                ]
            },
            {
                "selector": ".k-colorgradient.k-disabled",
                "checks": [
                    {
                        "selector": ".k-colorgradient.k-disabled",
                        "id": "k-colorgradient-disabled",
                        "test": true,
                        "usage": "Attribute is rendered only when the ColorPalette is disabled.",
                        "value": "true",
                        "attribute": "aria-disabled"
                    }
                ]
            },
            {
                "selector": ".k-hsv-draghandle",
                "checks": [
                    {
                        "selector": ".k-hsv-draghandle",
                        "id": "k-colorgradient-hsv-orientation",
                        "test": true,
                        "usage": "The implicit orientation for the `role=\"slider\"` must be removed.",
                        "value": "undefined",
                        "attribute": "aria-orientation"
                    },
                    {
                        "id": "k-colorgradient-hsv-label",
                        "test": true,
                        "usage": "Must provide information about the purpose of the `slider` (for example: \"Color well with two-dimensional slider for selecting saturation and lightness\") and the currently selected color (for example: \"X: 142, Y: 93\").",
                        "attribute": "aria-label"
                    },
                    {
                        "id": "k-colorgradient-hsv-valuetext",
                        "test": true,
                        "usage": "Must specify the values on both X and Y axis.",
                        "attribute": "aria-valuetext"
                    }
                ]
            },
            {
                "selector": ".k-numerictextbox>.k-input-inner",
                "checks": [
                    {
                        "selector": ".k-numerictextbox>.k-input-inner",
                        "id": "k-colorgradient-numeric-label",
                        "test": true,
                        "usage": "Must provide information about the numeric input purpose - the name of the chanel it is aimed at (`red chanel`, `green chanel`, `blue chanel`, or `alpha chanel`).",
                        "attribute": "aria-label"
                    }
                ]
            }
        ]
    },
    "colorpalette": {
        "component": "colorpalette",
        "rules": [
            {
                "selector": ".k-colorpalette",
                "checks": [
                    {
                        "selector": ".k-colorpalette",
                        "id": "k-colorpalette-role",
                        "test": true,
                        "usage": "The focusable wrapper of the component should announce its role as a `grid`.",
                        "value": "grid",
                        "attribute": "role"
                    },
                    {
                        "id": "k-colorpalette-label",
                        "test": true,
                        "usage": "The component needs an accessible name to be assigned to it. Must also include the currently selected value in the component.",
                        "multiple": true,
                        "attribute": [
                            "aria-label",
                            "aria-labelledby"
                        ]
                    },
                    {
                        "id": "k-colorpalette-activedescendent",
                        "test": true,
                        "usage": "Points to the focused cell in the table. The focused cell is changed via keyboard navigation.",
                        "value": ".k-colorpalette-tile.k-focus id",
                        "attribute": "aria-activedescendant"
                    },
                    {
                        "id": "k-colorpalette-tabindex",
                        "test": true,
                        "usage": "The element must be focusable.",
                        "value": "0",
                        "attribute": "tabindex"
                    }
                ]
            },
            {
                "selector": ".k-colorpalette.k-disabled",
                "checks": [
                    {
                        "selector": ".k-colorpalette.k-disabled",
                        "id": "k-colorpalette-disabled",
                        "test": true,
                        "usage": "Attribute is rendered only when the ColorPalette is disabled.",
                        "value": "true",
                        "attribute": "aria-disabled"
                    }
                ]
            },
            {
                "selector": ".k-colorpalette-table",
                "checks": [
                    {
                        "selector": ".k-colorpalette-table",
                        "id": "k-colorpalette-table-role",
                        "test": true,
                        "usage": "Negates the default role of the element, as it is wrapped within a `role=\"grid\"` element.",
                        "value": [
                            "none",
                            "presentation"
                        ],
                        "attribute": "role"
                    }
                ]
            },
            {
                "selector": ".k-colorpalette-table>tbody>tr",
                "checks": [
                    {
                        "selector": ".k-colorpalette-table>tbody>tr",
                        "id": "k-colorpalette-tr-role",
                        "test": true,
                        "usage": "Required as the semantic role of its parent `<table>` has been removed.",
                        "value": "row",
                        "attribute": "role"
                    }
                ]
            },
            {
                "selector": ".k-colorpalette-tile",
                "checks": [
                    {
                        "selector": ".k-colorpalette-tile",
                        "id": "k-colorpalette-td-role",
                        "test": true,
                        "usage": "Required as the semantic role of its parent `<table>` has been removed.",
                        "value": "gridcell",
                        "attribute": "role"
                    },
                    {
                        "id": "k-colorpalette-td-label",
                        "test": true,
                        "usage": "The text representation of the color value for the current cell.",
                        "multiple": true,
                        "attribute": [
                            "aria-label",
                            "title"
                        ]
                    }
                ]
            },
            {
                "selector": ".k-colorpalette-tile.k-selected",
                "checks": [
                    {
                        "selector": ".k-colorpalette-tile.k-selected",
                        "id": "k-colorpalette-td-selected",
                        "test": true,
                        "usage": "Present on the currently selected cell in the component.",
                        "value": "true",
                        "attribute": "aria-selected"
                    }
                ]
            }
        ]
    },
    "colorpicker": {
        "component": "colorpicker",
        "rules": [
            {
                "selector": ".k-colorpicker",
                "checks": [
                    {
                        "selector": ".k-colorpicker",
                        "id": "k-colorpicker-role",
                        "test": true,
                        "usage": "The focusable element of the component should have role `combobox` (an input with popup).",
                        "value": "combobox",
                        "attribute": "role"
                    },
                    {
                        "id": "k-colorpicker-label",
                        "test": true,
                        "multiple": true,
                        "usage": "The component needs an accessible name to be assigned to it. Must also include the currently selected value in the component.",
                        "attribute": [
                            "aria-label",
                            "aria-labelledby"
                        ]
                    },
                    {
                        "id": "k-colorpicker-haspopup",
                        "test": true,
                        "usage": "Indicates the component has a Dialog Popup.",
                        "value": "dialog",
                        "attribute": "aria-haspopup"
                    },
                    {
                        "id": "k-colorpicker-expanded",
                        "test": true,
                        "usage": "Announces the state of the visibility of the popup.",
                        "attribute": "aria-expanded"
                    },
                    {
                        "id": "k-colorpicker-controls",
                        "test": true,
                        "usage": "Points to the popup element. Signifies that the `combobox` element controls the `dialog`.",
                        "value": ".k-colorpicker-popup id",
                        "attribute": "aria-controls"
                    },
                    {
                        "id": "k-colorpicker-tabindex",
                        "test": true,
                        "usage": "The element must be focusable.",
                        "value": "0",
                        "attribute": "tabindex"
                    }
                ]
            },
            {
                "selector": ".k-invalid,.ng-invalid",
                "checks": [
                    {
                        "selector": ".k-invalid,.ng-invalid",
                        "test": true,
                        "id": "k-colorpicker-invalid",
                        "usage": "Attribute is rendered only when the picker is in form and announces the valid state of the component.",
                        "value": "true",
                        "attribute": "aria-invalid"
                    }
                ]
            },
            {
                "selector": ".k-colorpicker.k-disabled",
                "checks": [
                    {
                        "selector": ".k-colorpicker.k-disabled",
                        "id": "k-colorpicker-disabled",
                        "test": true,
                        "usage": "Attribute is rendered only when the picker is disabled.",
                        "value": "true",
                        "attribute": "aria-disabled"
                    }
                ]
            },
            {
                "selector": ".k-colorpicker.k-disabled .k-button",
                "checks": [
                    {
                        "selector": ".k-colorpicker.k-disabled .k-button",
                        "id": "k-colorpicker-togglebutton-disabled",
                        "test": true,
                        "multiple": true,
                        "usage": "Attribute is rendered only when the picker is disabled.",
                        "attribute": [
                            "disabled",
                            "aria-disabled=true"
                        ]
                    }
                ]
            },
            {
                "selector": ".k-colorgradient",
                "checks": [
                    {
                        "selector": ".k-colorgradient",
                        "id": "k-colorpicker-colorgradient-role",
                        "test": true,
                        "usage": "The ColorGradient element must have its role removed.",
                        "attribute": "role",
                        "value": [
                            "none",
                            "undefined"
                        ]
                    },
                    {
                        "id": "k-colorpicker-colorgradient-label",
                        "test": true,
                        "usage": "The ColorGradient element must have its `aria-label` attribute removed.",
                        "attribute": "aria-label",
                        "value": "undefined"
                    },
                    {
                        "id": "k-colorpicker-colorgradient-tabindex",
                        "test": true,
                        "usage": "The ColorGradient must be removed from the page tab sequence.",
                        "attribute": "tabindex",
                        "value": [
                            "-1",
                            "undefined"
                        ]
                    }
                ]
            },
            {
                "selector": ".k-colorgradient",
                "checks": [
                    {
                        "selector": ".k-colorgradient",
                        "id": "k-adaptive-colorpicker-colorgradient-role",
                        "test": true,
                        "usage": "The ColorGradient element must have its role removed.",
                        "attribute": "role",
                        "value": [
                            "none",
                            "undefined"
                        ]
                    },
                    {
                        "id": "k-adaptive-colorpicker-colorgradient-label",
                        "test": true,
                        "usage": "The ColorGradient element must have its \"aria-label\" attribute removed.",
                        "attribute": "aria-label",
                        "value": "undefined"
                    }
                ]
            }
        ]
    },
    "columnchooser": {
        "component": "columnchooser",
        "rules": [
            {
                "selector": ".k-grid-column-chooser .k-button",
                "checks": [
                    {
                        "selector": ".k-grid-column-chooser .k-button",
                        "id": "k-grid-column-chooser-button-has-popup",
                        "test": true,
                        "usage": "Specifies that the button opens a dialog.",
                        "value": "dialog",
                        "attribute": "has-popup"
                    },
                    {
                        "id": "k-grid-column-chooser-button-expanded",
                        "test": true,
                        "usage": "Announces the current open state of the popup.",
                        "value": [
                            "true",
                            "false"
                        ],
                        "attribute": "aria-expanded"
                    },
                    {
                        "id": "k-grid-column-chooser-button-controls",
                        "test": true,
                        "usage": "Points to the popup that the button toggles.",
                        "value": ".k-animation-container id",
                        "attribute": "aria-controls"
                    }
                ]
            },
            {
                "selector": ".k-column-list",
                "checks": [
                    {
                        "selector": ".k-column-list",
                        "test": true,
                        "id": "k-column-chooser-list-role",
                        "attribute": "role",
                        "value": "listbox",
                        "usage": "Sets the listbox role of the list of columns wrapper."
                    },
                    {
                        "test": true,
                        "id": "k-column-chooser-list-multiselectable",
                        "attribute": "aria-multiselectable",
                        "value": "true",
                        "usage": "Specifies that the list is multiselectable."
                    }
                ]
            },
            {
                "selector": ".k-column-list .k-column-list-item",
                "checks": [
                    {
                        "selector": ".k-column-list .k-column-list-item",
                        "test": true,
                        "id": "k-column-chooser-list-item-role",
                        "attribute": "role",
                        "value": "option",
                        "usage": "Sets the option role of the list item."
                    },
                    {
                        "test": true,
                        "id": "k-column-chooser-list-item-checked",
                        "attribute": "aria-checked",
                        "value": [
                            "true",
                            "false"
                        ],
                        "usage": "Sets the checked state of list item."
                    },
                    {
                        "test": true,
                        "id": "k-column-chooser-list-item-tabindex",
                        "attribute": "tabindex",
                        "value": [
                            "0",
                            "-1"
                        ],
                        "usage": "Sets the tabindex depending on the item's focused state."
                    }
                ]
            },
            {
                "selector": ".k-column-list-item .k-checkbox",
                "checks": [
                    {
                        "selector": ".k-column-list-item .k-checkbox",
                        "test": true,
                        "id": "k-column-chooser-list-item-checkbox-tabindex",
                        "attribute": "tabindex",
                        "value": "-1",
                        "usage": "Removes the default focus behavior of the checkbox."
                    },
                    {
                        "test": true,
                        "id": "k-column-chooser-list-item-checkbox-hidden",
                        "attribute": "aria-hidden",
                        "value": "true",
                        "usage": "Hides the checkbox from the assistive technologies, as its accessibility is implemented by the item wrapper."
                    }
                ]
            }
        ]
    },
    "columnmenu": {
        "component": "columnmenu",
        "rules": [
            {
                "selector": ".k-grid-column-menu",
                "checks": [
                    {
                        "selector": ".k-grid-column-menu",
                        "id": "k-grid-column-menu-button-role",
                        "test": true,
                        "usage": "Specifies that column menu element has role button.",
                        "value": "button",
                        "attribute": "role",
                        "when": "grid is not navigable"
                    },
                    {
                        "id": "k-grid-column-menu-button-has-popup",
                        "test": true,
                        "usage": "Specifies that the button opens a dialog.",
                        "value": "dialog",
                        "attribute": "aria-haspopup",
                        "when": "grid is not navigable"
                    },
                    {
                        "id": "k-grid-column-menu-button-expanded",
                        "test": true,
                        "usage": "Announces the current state of the popup.",
                        "value": [
                            "true",
                            "false"
                        ],
                        "attribute": "aria-expanded",
                        "when": "grid is not navigable"
                    },
                    {
                        "id": "k-grid-column-menu-button-controls",
                        "test": true,
                        "usage": "Points to the popup that the button toggles.",
                        "value": ".k-popup.k-grid-columnmenu-popup id",
                        "attribute": "aria-controls",
                        "when": "grid is not navigable"
                    }
                ]
            },
            {
                "selector": ".k-header:has(.k-grid-column-menu)",
                "checks": [
                    {
                        "selector": ".k-header:has(.k-grid-column-menu)",
                        "id": "k-grid-column-menu-header-has-popup",
                        "test": true,
                        "usage": "Specifies that the header cell opens a dialog.",
                        "value": "dialog",
                        "attribute": "aria-haspopup",
                        "when": "grid is navigable"
                    },
                    {
                        "id": "k-grid-column-menu-header-expanded",
                        "test": true,
                        "usage": "Announces the current state of the popup.",
                        "value": [
                            "true",
                            "false"
                        ],
                        "attribute": "aria-expanded",
                        "when": "grid is navigable"
                    },
                    {
                        "id": "k-grid-column-menu-header-controls",
                        "test": true,
                        "usage": "Points to the popup that the button toggles.",
                        "value": ".k-popup.k-grid-columnmenu-popup id",
                        "attribute": "aria-controls",
                        "when": "grid is navigable"
                    },
                    {
                        "id": "k-grid-column-menu-header-keyshortcuts",
                        "test": true,
                        "usage": "Announces the available column-menu shortcut.",
                        "value": "Alt + ArrowDown",
                        "attribute": "aria-keyshortcuts",
                        "when": "grid is navigable"
                    }
                ]
            },
            {
                "selector": ".k-popup.k-grid-columnmenu-popup",
                "checks": [
                    {
                        "selector": ".k-popup.k-grid-columnmenu-popup",
                        "test": true,
                        "id": "k-column-menu-popup-id",
                        "attribute": "id",
                        "usage": "Unique and deterministic id linked to the button or header cell \"aria-controls\" attribute."
                    },
                    {
                        "test": true,
                        "id": "k-column-menu-popup-role",
                        "attribute": "role",
                        "usage": "Sets the dialog role of the popup.",
                        "value": "dialog"
                    },
                    {
                        "test": true,
                        "id": "k-column-menu-popup-label",
                        "attribute": "aria-label",
                        "usage": "Contains descriptive information about the column menu purpose - e.g. \"Column Title Column Menu\""
                    }
                ]
            },
            {
                "selector": ".k-columnmenu-item",
                "checks": [
                    {
                        "selector": ".k-columnmenu-item",
                        "id": "k-column-menu-item-role",
                        "test": true,
                        "usage": "Sets column menu item role to button",
                        "attribute": "role",
                        "value": "button"
                    },
                    {
                        "id": "k-column-menu-item-focusable",
                        "test": true,
                        "usage": "Sets column menu item tabindex",
                        "attribute": "tabindex",
                        "value": "0"
                    }
                ]
            },
            {
                "selector": ".k-expander .k-columnmenu-item",
                "checks": [
                    {
                        "selector": ".k-expander .k-columnmenu-item",
                        "id": "k-column-menu-item-expanded",
                        "test": true,
                        "usage": "Sets the expanded state of an expandable item",
                        "attribute": "aria-expanded",
                        "value": [
                            "true",
                            "false"
                        ]
                    },
                    {
                        "id": "k-column-menu-expandable-item-controls",
                        "test": true,
                        "usage": "Points to id attribute of the content whose visibility the expandable item controls.",
                        "attribute": "aria-controls"
                    }
                ]
            },
            {
                "selector": ".k-expander .k-columnmenu-item-content",
                "checks": [
                    {
                        "selector": ".k-expander .k-columnmenu-item-content",
                        "id": "k-column-menu-expandable-item-content-id",
                        "test": true,
                        "usage": "Unique and deterministic id linked to the \"aria-controls\" attribute of the corresponding expandable item.",
                        "attribute": "id"
                    }
                ]
            },
            {
                "selector": ".k-column-list",
                "checks": [
                    {
                        "selector": ".k-column-list",
                        "test": true,
                        "id": "k-column-chooser-item-list-role",
                        "attribute": "role",
                        "value": "listbox",
                        "usage": "Sets the listbox role of the list of columns wrapper."
                    },
                    {
                        "test": true,
                        "id": "k-column-chooser-list-item-multiselectable",
                        "attribute": "aria-multiselectable",
                        "value": "true",
                        "usage": "Specifies that the list is multiselectable."
                    }
                ]
            },
            {
                "selector": ".k-column-list .k-column-list-item",
                "checks": [
                    {
                        "selector": ".k-column-list .k-column-list-item",
                        "test": true,
                        "id": "k-column-chooser-list-item-option-role",
                        "attribute": "role",
                        "value": "option",
                        "usage": "Sets the option role of the list item."
                    },
                    {
                        "test": true,
                        "id": "k-column-chooser-list-item-option-checked",
                        "attribute": "aria-checked",
                        "value": [
                            "true",
                            "false"
                        ],
                        "usage": "Sets the checked state of list item."
                    },
                    {
                        "test": true,
                        "id": "k-column-chooser-list-item-option-tabindex",
                        "attribute": "tabindex",
                        "value": [
                            "0",
                            "-1"
                        ],
                        "usage": "Sets the tabindex depending on the item's focused state."
                    }
                ]
            },
            {
                "selector": ".k-column-list-item .k-checkbox",
                "checks": [
                    {
                        "selector": ".k-column-list-item .k-checkbox",
                        "test": true,
                        "id": "k-column-chooser-list-item-option-checkbox-tabindex",
                        "attribute": "tabindex",
                        "value": "-1",
                        "usage": "Removes the default focus behavior of the checkbox."
                    },
                    {
                        "test": true,
                        "id": "k-column-chooser-list-item-option-checkbox-hidden",
                        "attribute": "aria-hidden",
                        "value": "true",
                        "usage": "Hides the checkbox from the assistive technologies, as its accessibility is implemented by the item wrapper."
                    }
                ]
            }
        ]
    },
    "combobox": {
        "component": "combobox",
        "rules": [
            {
                "selector": ".k-input-inner",
                "checks": [
                    {
                        "selector": ".k-input-inner",
                        "id": "k-combobox-role",
                        "test": true,
                        "usage": "Announces the presence of a combobox as an inner element of the combobox used for filtering.",
                        "value": "combobox",
                        "attribute": "role"
                    },
                    {
                        "id": "k-combobox-label",
                        "test": true,
                        "usage": "The input requires an accessible name that will be assigned to it.",
                        "attribute": [
                            "label for",
                            "aria-label",
                            "aria-labelledby"
                        ]
                    },
                    {
                        "id": "k-combobox-expanded",
                        "test": true,
                        "usage": "Announces the visibility state of the popup.",
                        "attribute": "aria-expanded",
                        "value": [
                            "true",
                            "false"
                        ]
                    },
                    {
                        "id": "k-combobox-controls",
                        "test": true,
                        "usage": "Points to the listbox element. Signifies that the `combobox` controls the `listbox` element.",
                        "value": "[role='listbox'] id",
                        "attribute": "aria-controls"
                    },
                    {
                        "id": "k-combobox-activedescendent",
                        "test": true,
                        "when": "open",
                        "usage": "Points to the focused item in the popup. The focused item is changed through keyboard navigation. If the popup is not visible, the attribute must not point to any element or must be removed.",
                        "value": ".k-list-item.k-focus id",
                        "attribute": "aria-activedescendant"
                    },
                    {
                        "id": "k-combobox-autocomplete-list",
                        "test": true,
                        "when": "filtering",
                        "usage": "When filtering is enabled, the attribute is rendered and the value is set to `list`.",
                        "value": "list",
                        "attribute": "aria-autocomplete"
                    },
                    {
                        "id": "k-combobox-autocomplete-both",
                        "test": true,
                        "when": "filtering suggest",
                        "usage": "When both the filtering and the suggest featutres are enabled, the attribute is rendered and the value is set to `both`.",
                        "value": "both",
                        "attribute": "aria-autocomplete"
                    },
                    {
                        "id": "k-combobox-autocomplete-inline",
                        "test": true,
                        "when": "suggest",
                        "usage": "When the suggest feature is enabled, the attribute is rendered and the value is set to `inline`.",
                        "value": "inline",
                        "attribute": "aria-autocomplete"
                    },
                    {
                        "id": "k-combobox-readonly",
                        "test": true,
                        "usage": "The attribute is rendered only when the ComboBox is read-only.",
                        "when": "readonly",
                        "multiple": true,
                        "attribute": [
                            "readonly=readonly",
                            "aria-readonly=true"
                        ],
                        "value": "true"
                    },
                    {
                        "id": "k-combobox-busy",
                        "test": true,
                        "when": "busy",
                        "usage": "The attribute is rendered only when the ComboBox is loading data.",
                        "value": "true",
                        "attribute": "aria-busy"
                    },
                    {
                        "id": "k-combobox-tabindex",
                        "test": true,
                        "usage": "The element must be focusable.",
                        "value": "0",
                        "attribute": "tabindex"
                    }
                ]
            },
            {
                "selector": ".k-invalid .k-input-inner,.ng-invalid .k-input-inner",
                "checks": [
                    {
                        "selector": ".k-invalid .k-input-inner,.ng-invalid .k-input-inner",
                        "test": true,
                        "id": "k-combobox-invalid",
                        "when": "invalid",
                        "usage": "The attribute is rendered only when the ComboBox is in a form, and announces the valid state of the component.",
                        "value": "true",
                        "attribute": "aria-invalid"
                    }
                ]
            },
            {
                "selector": ".k-disabled .k-input-inner",
                "checks": [
                    {
                        "selector": ".k-disabled .k-input-inner",
                        "id": "k-combobox-disabled",
                        "test": true,
                        "usage": "The attribute is rendered only when the ComboBox is disabled.",
                        "multiple": true,
                        "attribute": [
                            "disabled=disabled",
                            "aria-disabled=true"
                        ]
                    }
                ]
            },
            {
                "selector": ".k-input-button",
                "checks": [
                    {
                        "selector": ".k-input-button",
                        "id": "k-combobox-arrow-role",
                        "test": true,
                        "usage": "The element must either be a `<button>` element or must have the `role=\"button\"` assigned.",
                        "attribute": [
                            "role=button",
                            "nodeName=button"
                        ]
                    },
                    {
                        "id": "k-combobox-arrow-label",
                        "test": true,
                        "usage": "The button element must have discernible text.",
                        "attribute": "aria-label"
                    },
                    {
                        "id": "k-combobox-arrow-tabindex",
                        "test": true,
                        "usage": "The button element must not be focusable.",
                        "value": "-1",
                        "attribute": "tabindex"
                    }
                ]
            },
            {
                "selector": ".k-combobox.k-disabled .k-button",
                "checks": [
                    {
                        "selector": ".k-combobox.k-disabled .k-button",
                        "id": "k-combobox-togglebutton-disabled",
                        "test": true,
                        "multiple": true,
                        "usage": "Attribute is rendered only when the picker is disabled.",
                        "attribute": [
                            "disabled",
                            "aria-disabled=true"
                        ]
                    }
                ]
            },
            {
                "selector": ".k-animation-container",
                "checks": [
                    {
                        "selector": ".k-animation-container",
                        "test": true,
                        "id": "k-popuplist-role",
                        "attribute": "role",
                        "value": "region",
                        "usage": "When the component container is appended to the `<body>` element of the document, it requires you to assing a `landmark` role to it. Otherwise, append it to an element with an appropriate `landmark` role."
                    },
                    {
                        "test": true,
                        "id": "k-popuplist-label",
                        "multiple": true,
                        "attribute": [
                            "aria-label",
                            "aria-labelledby"
                        ],
                        "usage": "When the container has a `region` role assigned, povides a label."
                    }
                ]
            },
            {
                "selector": ".k-list .k-no-data",
                "checks": [
                    {
                        "selector": ".k-list .k-no-data",
                        "test": true,
                        "id": "k-no-data-aria-live",
                        "attribute": "aria-live",
                        "value": "polite",
                        "usage": "Identifies the element as a live region in the `polite` state, meaning assistive technology users are informed about changes to the region at the next available opportunity."
                    }
                ]
            },
            {
                "selector": ".k-list-item-icon-wrapper",
                "checks": [
                    {
                        "selector": ".k-list-item-icon-wrapper",
                        "id": "k-popuplist-item-icon-wrapper-presentation",
                        "test": true,
                        "usage": "Indicates that the icon wrapper is decorative and should be ignored by assistive technologies.",
                        "value": "presentation",
                        "attribute": "role"
                    }
                ]
            },
            {
                "selector": ".k-list-item-icon",
                "checks": [
                    {
                        "selector": ".k-list-item-icon",
                        "id": "k-popuplist-item-icon-hidden",
                        "test": true,
                        "when": "icon present",
                        "usage": "Ensures that the icon itself is hidden from assistive technologies since it is decorative.",
                        "value": "true",
                        "attribute": "aria-hidden"
                    }
                ]
            },
            {
                "selector": ".k-list-item.k-selected",
                "checks": [
                    {
                        "selector": ".k-list-item.k-selected",
                        "test": true,
                        "id": "k-popuplist-item-selected",
                        "attribute": "aria-selected",
                        "value": "true",
                        "usage": "Indicates the selected state of the item."
                    }
                ]
            },
            {
                "selector": ".k-list-ul",
                "checks": [
                    {
                        "selector": ".k-list-ul",
                        "id": "k-popuplist-group-role",
                        "test": true,
                        "usage": "When data is grouped, role is group, otherwise - listbox.",
                        "value": [
                            "listbox",
                            "group"
                        ],
                        "attribute": "role"
                    }
                ]
            },
            {
                "selector": ".k-list-group-item",
                "checks": [
                    {
                        "selector": ".k-list-group-item",
                        "test": true,
                        "id": "k-popuplist-group-item-role",
                        "attribute": "role",
                        "value": "presentation",
                        "usage": "The group header has role='presentation' since the grouping semantics are provided by the ul[role=group]."
                    },
                    {
                        "test": true,
                        "id": "k-popuplist-group-header-id",
                        "attribute": "id",
                        "usage": "Provides an id for the group header that is referenced by the group's aria-labelledby attribute."
                    }
                ]
            },
            {
                "selector": ".k-list-ul .k-list-item",
                "checks": [
                    {
                        "selector": ".k-list-ul .k-list-item",
                        "id": "k-popuplist-grouped-item-role",
                        "test": true,
                        "usage": "Items within a group maintain the option role.",
                        "value": "option",
                        "attribute": "role"
                    }
                ]
            }
        ]
    },
    "contextmenu": {
        "component": "contextmenu",
        "rules": [
            {
                "selector": ".k-context-menu",
                "checks": [
                    {
                        "selector": ".k-context-menu",
                        "id": "k-context-menu-role",
                        "test": true,
                        "usage": "The context menu implements the `menu` role.",
                        "value": "menu",
                        "attribute": "role"
                    }
                ]
            }
        ]
    },
    "dateinput": {
        "component": "dateinput",
        "rules": [
            {
                "selector": ".k-input-inner",
                "checks": [
                    {
                        "selector": ".k-input-inner",
                        "id": "k-dateinput-role",
                        "test": true,
                        "usage": "The element should either be an `<input type=\"text\">` element or should have `role=\"textbox\"` assigned.",
                        "multiple": true,
                        "attribute": [
                            "role=textbox",
                            "nodeName=input"
                        ]
                    },
                    {
                        "id": "k-dateinput-label",
                        "test": true,
                        "usage": "The input needs an accessible name to be assigned to it.",
                        "multiple": true,
                        "attribute": [
                            "label for",
                            "aria-label",
                            "aria-labelledby"
                        ]
                    },
                    {
                        "id": "k-dateinput-readonly",
                        "test": true,
                        "usage": "Attribute is rendered only when the DateInput is readonly.",
                        "when": "readonly",
                        "multiple": true,
                        "attribute": [
                            "readonly=readonly",
                            "aria-readonly=true"
                        ]
                    },
                    {
                        "id": "k-dateinput-tabindex",
                        "test": true,
                        "usage": "The element should be focusable.",
                        "value": "0",
                        "attribute": "tabindex"
                    }
                ]
            },
            {
                "selector": ".k-disabled .k-input-inner",
                "checks": [
                    {
                        "selector": ".k-disabled .k-input-inner",
                        "id": "k-dateinput-disabled",
                        "test": true,
                        "usage": "Attribute is rendered only when the DateInput is disabled.",
                        "multiple": true,
                        "attribute": [
                            "disabled=disabled",
                            "aria-disabled=true"
                        ]
                    }
                ]
            }
        ]
    },
    "datepicker": {
        "component": "datepicker",
        "rules": [
            {
                "selector": ".k-input-inner",
                "checks": [
                    {
                        "selector": ".k-input-inner",
                        "id": "k-datepicker-role",
                        "test": true,
                        "usage": "The input element should follow the `combobox` specification.",
                        "value": "combobox",
                        "attribute": "role"
                    },
                    {
                        "id": "k-datepicker-label",
                        "test": true,
                        "usage": "The input needs an accessible name to be assigned to it.",
                        "multiple": true,
                        "attribute": [
                            "label for",
                            "aria-label",
                            "aria-labelledby"
                        ]
                    },
                    {
                        "id": "k-datepicker-haspopup",
                        "test": true,
                        "usage": "Indicates the component has a Calendar Popup that implements `role=\"grid\"`.",
                        "value": "grid",
                        "attribute": "aria-haspopup"
                    },
                    {
                        "id": "k-datepicker-expanded",
                        "test": true,
                        "usage": "Announces whether the Popup is visible or not.",
                        "attribute": "aria-expanded",
                        "value": [
                            "true",
                            "false"
                        ]
                    },
                    {
                        "id": "k-datepicker-controls",
                        "test": true,
                        "usage": "Points to the popup element. Signifies that the `combobox` element controls the Calendar `grid`.",
                        "value": ".k-animation-container id",
                        "attribute": "aria-controls"
                    },
                    {
                        "id": "k-datepicker-activedescendent",
                        "test": true,
                        "usage": "Points to the focused item (date/month/year) in the Calendar Popup. Should only be present when the Popup is open.",
                        "value": ".k-calendar-td.k-focus id",
                        "attribute": "aria-activedescendant"
                    },
                    {
                        "id": "k-datepicker-readonly",
                        "test": true,
                        "usage": "The attribute is rendered only when the DatePicker is readonly.",
                        "when": "readonly",
                        "multiple": true,
                        "attribute": [
                            "readonly=readonly",
                            "aria-readonly=true"
                        ]
                    },
                    {
                        "id": "k-datepicker-tabindex",
                        "test": true,
                        "usage": "The element must be focusable.",
                        "value": "0",
                        "attribute": "tabindex"
                    }
                ]
            },
            {
                "selector": ".k-disabled .k-input-inner",
                "checks": [
                    {
                        "selector": ".k-disabled .k-input-inner",
                        "id": "k-datepicker-disabled",
                        "test": true,
                        "usage": "The attribute is rendered only when the DatePicker is disabled.",
                        "multiple": true,
                        "attribute": [
                            "disabled=disabled",
                            "aria-disabled=true"
                        ]
                    }
                ]
            },
            {
                "selector": ".k-input-button",
                "checks": [
                    {
                        "selector": ".k-input-button",
                        "id": "k-datepicker-arrow-role",
                        "test": true,
                        "usage": "The element should either be a `<button>` element or should have `role=\"button\"` assigned.",
                        "attribute": [
                            "role=button",
                            "nodeName=button"
                        ]
                    },
                    {
                        "id": "k-datepicker-arrow-label",
                        "test": true,
                        "usage": "The button needs an accessible name to be assigned to it.",
                        "attribute": "aria-label"
                    },
                    {
                        "id": "k-datepicker-arrow-tabindex",
                        "test": true,
                        "usage": "The button element should not be focusable.",
                        "value": "-1",
                        "attribute": "tabindex"
                    }
                ]
            },
            {
                "selector": ".k-datepicker.k-disabled .k-button",
                "checks": [
                    {
                        "selector": ".k-datepicker.k-disabled .k-button",
                        "id": "k-datepicker-togglebutton-disabled",
                        "test": true,
                        "multiple": true,
                        "usage": "Attribute is rendered only when the picker is disabled.",
                        "attribute": [
                            "disabled",
                            "aria-disabled"
                        ]
                    }
                ]
            }
        ]
    },
    "daterangepicker": {
        "component": "daterangepicker",
        "rules": [
            {
                "selector": ".k-input-inner",
                "checks": [
                    {
                        "selector": ".k-input-inner",
                        "id": "k-daterangepicker-role",
                        "test": true,
                        "usage": "The input element should follow the `combobox` specification.",
                        "value": "combobox",
                        "attribute": "role"
                    },
                    {
                        "id": "k-daterangepicker-label",
                        "test": true,
                        "usage": "The input needs an accessible name to be assigned to it.",
                        "multiple": true,
                        "attribute": [
                            "label for",
                            "aria-label",
                            "aria-labelledby"
                        ]
                    },
                    {
                        "id": "k-daterangepicker-haspopup",
                        "test": true,
                        "usage": "Indicates the component has a Calendar Popup that implements `role=\"grid\"`.",
                        "value": "grid",
                        "attribute": "aria-haspopup"
                    },
                    {
                        "id": "k-daterangepicker-expanded",
                        "test": true,
                        "usage": "Announces whether the Popup is visible or not.",
                        "attribute": "aria-expanded",
                        "value": [
                            "true",
                            "false"
                        ]
                    },
                    {
                        "id": "k-daterangepicker-controls",
                        "test": true,
                        "usage": "Points to the popup element. Signifies that the `combobox` element controls the Calendar `grid`.",
                        "value": ".k-calendar-container id",
                        "attribute": "aria-controls"
                    }
                ]
            },
            {
                "selector": ".k-input-inner.k-focus",
                "checks": [
                    {
                        "selector": ".k-input-inner.k-focus",
                        "id": "k-daterangepicker-activedescendent",
                        "test": true,
                        "usage": "Points to the focused item (date/month/year) in the Calendar Popup. Should only be present when the Popup is open.",
                        "value": ".k-calendar-td.k-focus id",
                        "attribute": "aria-activedescendant"
                    },
                    {
                        "id": "k-daterangepicker-readonly",
                        "test": true,
                        "usage": "Attribute is rendered only when the DateRangePicker is readonly.",
                        "when": "readonly",
                        "multiple": true,
                        "attribute": [
                            "readonly=readonly",
                            "aria-readonly=true"
                        ]
                    },
                    {
                        "id": "k-daterangepicker-tabindex",
                        "test": true,
                        "usage": "The element should be focusable.",
                        "value": "0",
                        "attribute": "tabindex"
                    }
                ]
            },
            {
                "selector": ".k-invalid .k-input-inner,.ng-invalid .k-input-inner",
                "checks": [
                    {
                        "selector": ".k-invalid .k-input-inner,.ng-invalid .k-input-inner",
                        "test": true,
                        "id": "k-daterangepicker-invalid",
                        "usage": "Attribute is rendered only when the combobox is in form and announces the valid state of the component.",
                        "value": "true",
                        "attribute": "aria-invalid"
                    }
                ]
            },
            {
                "selector": ".k-disabled .k-input-inner",
                "checks": [
                    {
                        "selector": ".k-disabled .k-input-inner",
                        "id": "k-daterangepicker-disabled",
                        "test": true,
                        "usage": "Attribute is rendered only when the DateRangePicker is disabled.",
                        "multiple": true,
                        "attribute": [
                            "disabled=disabled",
                            "aria-disabled=true"
                        ]
                    }
                ]
            }
        ]
    },
    "datetimepicker": {
        "component": "datetimepicker",
        "rules": [
            {
                "selector": ".k-input-inner",
                "checks": [
                    {
                        "selector": ".k-input-inner",
                        "id": "k-datetimepicker-role",
                        "test": true,
                        "usage": "The input element should follow the `combobox` specification.",
                        "value": "combobox",
                        "attribute": "role"
                    },
                    {
                        "id": "k-datetimepicker-label",
                        "test": true,
                        "usage": "The input needs an accessible name to be assigned to it.",
                        "multiple": true,
                        "attribute": [
                            "label for",
                            "aria-label",
                            "aria-labelledby"
                        ]
                    },
                    {
                        "id": "k-datetimepicker-haspopup",
                        "test": true,
                        "usage": "Indicates the component has a Dialog Popup.",
                        "value": "dialog",
                        "attribute": "aria-haspopup"
                    },
                    {
                        "id": "k-datetimepicker-expanded",
                        "test": true,
                        "usage": "Announces whether the Popup is visible or not.",
                        "attribute": "aria-expanded",
                        "value": [
                            "true",
                            "false"
                        ]
                    },
                    {
                        "id": "k-datetimepicker-controls",
                        "test": true,
                        "usage": "Points to the popup element. Signifies that the `combobox` element controls the Calendar `grid`.",
                        "value": ".k-calendar-container id",
                        "attribute": "aria-controls"
                    },
                    {
                        "id": "k-datetimepicker-activedescendent",
                        "test": true,
                        "usage": "Points to the focused item (date/month/year/hour/minute) in the Calendar Popup or the Time Popup. Should only be present when the Popup is open.",
                        "value": ".k-calendar-td.k-focus id",
                        "attribute": "aria-activedescendant"
                    },
                    {
                        "id": "k-datetimepicker-readonly",
                        "test": true,
                        "usage": "Attribute is rendered only when the DateTimePicker is readonly.",
                        "when": "readonly",
                        "multiple": true,
                        "attribute": [
                            "readonly=readonly",
                            "aria-readonly=true"
                        ],
                        "value": "true"
                    },
                    {
                        "id": "k-datetimepicker-tabindex",
                        "test": true,
                        "usage": "The element should be focusable.",
                        "value": "0",
                        "attribute": "tabindex"
                    }
                ]
            },
            {
                "selector": ".k-disabled .k-input-inner",
                "checks": [
                    {
                        "selector": ".k-disabled .k-input-inner",
                        "id": "k-datetimepicker-disabled",
                        "test": true,
                        "usage": "Attribute is rendered only when the DateTimePicker is disabled.",
                        "multiple": true,
                        "attribute": [
                            "disabled=disabled",
                            "aria-disabled=true"
                        ]
                    }
                ]
            },
            {
                "selector": ".k-input-button",
                "checks": [
                    {
                        "selector": ".k-input-button",
                        "id": "k-datetimepicker-arrow-role",
                        "test": true,
                        "usage": "The element should either be a `<button>` element or should have `role=\"button\"` assigned.",
                        "attribute": [
                            "role=button",
                            "nodeName=button"
                        ]
                    },
                    {
                        "id": "k-datetimepicker-arrow-label",
                        "test": true,
                        "usage": "The button needs an accessible name to be assigned to it.",
                        "attribute": "aria-label"
                    },
                    {
                        "id": "k-datetimepicker-arrow-tabindex",
                        "test": true,
                        "usage": "Button element should not be focusable.",
                        "value": "-1",
                        "attribute": "tabindex"
                    }
                ]
            },
            {
                "selector": ".k-datetimepicker.k-disabled .k-button",
                "checks": [
                    {
                        "selector": ".k-datetimepicker.k-disabled .k-button",
                        "id": "k-datetimepicker-togglebutton-disabled",
                        "test": true,
                        "multiple": true,
                        "usage": "Attribute is rendered only when the picker is disabled.",
                        "attribute": [
                            "disabled",
                            "aria-disabled"
                        ]
                    }
                ]
            }
        ]
    },
    "diagram": {
        "component": "diagram",
        "rules": [
            {
                "selector": ".k-diagram",
                "checks": [
                    {
                        "selector": ".k-diagram",
                        "id": "diagram-role",
                        "test": true,
                        "usage": "Indicates that the Diagram element is a Graphics Document.",
                        "value": "graphics-document",
                        "attribute": "role"
                    },
                    {
                        "id": "diagram-role-description",
                        "test": true,
                        "usage": "User-set value that clarifies the type of Diagram to screen reader users.",
                        "attribute": "aria-roledescription"
                    },
                    {
                        "id": "diagram-label",
                        "test": true,
                        "usage": "Announces the user-set `aria-label` of the Diagram.",
                        "attribute": "aria-label"
                    },
                    {
                        "id": "diagram-active-descendant",
                        "test": true,
                        "when": "focused",
                        "usage": "Points to the currently focused shape or connection element. The focused element is the one receiving keyboard interaction.",
                        "attribute": "aria-activedescendant",
                        "value": ".k-focus id"
                    }
                ]
            },
            {
                "selector": "[aria-roledescription='Shape']",
                "checks": [
                    {
                        "selector": "[aria-roledescription='Shape']",
                        "id": "diagram-shape-role",
                        "test": true,
                        "multiple": true,
                        "usage": "Specifies the role of the Diagram shape elements.",
                        "attribute": "role",
                        "value": "graphics-symbol"
                    },
                    {
                        "id": "diagram-shape-role-description",
                        "test": true,
                        "multiple": true,
                        "usage": "Describes the role of the Diagram shape elements.",
                        "attribute": "aria-roledescription",
                        "value": "Shape"
                    },
                    {
                        "id": "diagram-shape-label",
                        "test": true,
                        "multiple": true,
                        "usage": "User-set value that describes the shape to screen reader users.",
                        "attribute": "aria-label"
                    }
                ]
            },
            {
                "selector": "[aria-roledescription='Connection']",
                "checks": [
                    {
                        "selector": "[aria-roledescription='Connection']",
                        "id": "diagram-connection-role",
                        "test": true,
                        "multiple": true,
                        "usage": "Specifies the role of the Diagram connection elements.",
                        "attribute": "role",
                        "value": "graphics-symbol"
                    },
                    {
                        "id": "diagram-connection-role-description",
                        "test": true,
                        "multiple": true,
                        "usage": "Describes the role of the Diagram connection elements.",
                        "attribute": "aria-roledescription",
                        "value": "Connection"
                    },
                    {
                        "id": "diagram-connection-label",
                        "test": true,
                        "multiple": true,
                        "usage": "User-set value that describes the connection to screen reader users.",
                        "attribute": "aria-label"
                    }
                ]
            }
        ]
    },
    "dialog": {
        "component": "dialog",
        "rules": [
            {
                "selector": ".k-dialog",
                "checks": [
                    {
                        "selector": ".k-dialog",
                        "id": "k-dialog-role",
                        "test": true,
                        "usage": "Announces the dialog role of the component.",
                        "value": "dialog",
                        "attribute": "role"
                    },
                    {
                        "id": "k-dialog-label",
                        "test": true,
                        "usage": "Associate the title of the dialog.",
                        "value": ".k-dialog-titlebar id",
                        "attribute": "aria-labelledby"
                    },
                    {
                        "id": "k-dialog-describedby",
                        "test": true,
                        "usage": "Associate the dialog content to the wrap element.",
                        "value": ".k-dialog-content id",
                        "attribute": "aria-describedby"
                    }
                ]
            },
            {
                "selector": ".k-overlay + .k-dialog",
                "checks": [
                    {
                        "selector": ".k-overlay + .k-dialog",
                        "id": "k-dialog-modal",
                        "test": true,
                        "usage": "Announces that the dialog is modal. Attribute is added only when the dialog is modal.",
                        "value": "true",
                        "attribute": "aria-modal"
                    }
                ]
            },
            {
                "selector": ".k-dialog.k-prompt,.k-dialog.k-alert,.k-dialog.k-confirm",
                "checks": [
                    {
                        "selector": ".k-dialog.k-prompt,.k-dialog.k-alert,.k-dialog.k-confirm",
                        "id": "k-dialog-predefined-role",
                        "test": true,
                        "usage": "Announces the dialog role of the component.",
                        "value": "alertdialog",
                        "attribute": "role"
                    }
                ]
            }
        ]
    },
    "dockmanager": {
        "component": "dockmanager",
        "rules": [
            {
                "selector": ".k-dock-manager",
                "checks": [
                    {
                        "selector": ".k-dock-manager",
                        "id": "k-dockmanager-role",
                        "attribute": "role",
                        "value": "application",
                        "test": true,
                        "usage": "Indicates that the DockManager has its own keyboard navigation implemented."
                    },
                    {
                        "id": "k-dockmanager-aria-live",
                        "usage": "Defines dynamic content changes within the DockManager container that need to be announced by screen readers.",
                        "attribute": "aria-live",
                        "test": true,
                        "value": "polite"
                    }
                ]
            },
            {
                "selector": ".k-dock-navigator",
                "checks": [
                    {
                        "selector": ".k-dock-navigator",
                        "id": "k-dockmanager-navigator-hidden",
                        "test": true,
                        "usage": "The navigator needs to be hidden from the readers as it appears only on drag.",
                        "value": "true",
                        "attribute": "aria-hidden"
                    }
                ]
            }
        ]
    },
    "drawer": {
        "component": "drawer",
        "rules": [
            {
                "selector": ".k-drawer ul",
                "checks": [
                    {
                        "selector": ".k-drawer ul",
                        "id": "k-drawer-role",
                        "test": true,
                        "usage": "Indicates that the list of drawer items is a menubar.",
                        "value": "menubar",
                        "attribute": "role"
                    },
                    {
                        "id": "k-drawer-orientation",
                        "test": true,
                        "usage": "Indicates that the orientation of the drawer is vertical.",
                        "value": "vertical",
                        "attribute": "aria-orientation"
                    }
                ]
            },
            {
                "selector": ".k-drawer-item:not(.k-drawer-separator)",
                "checks": [
                    {
                        "selector": ".k-drawer-item:not(.k-drawer-separator)",
                        "id": "k-drawer-item-role",
                        "test": true,
                        "usage": "Indicates that the item of a drawer serves as a menuitem.",
                        "value": "menuitem",
                        "attribute": "role"
                    },
                    {
                        "id": "k-drawer-item-label",
                        "test": true,
                        "usage": "The drawer item requires an \"aria-label\" attribute when in mini mode and no content is rendered in the item. The \"aria-label\" points to the text field value of the item.",
                        "attribute": "aria-label"
                    }
                ]
            },
            {
                "selector": ".k-drawer-item.k-drawer-separator",
                "checks": [
                    {
                        "selector": ".k-drawer-item.k-drawer-separator",
                        "id": "k-drawer-separator-role",
                        "test": true,
                        "usage": "Indicates that the item of a drawer serves as a separator.",
                        "value": "separator",
                        "attribute": "role"
                    }
                ]
            }
        ]
    },
    "dropdownbutton": {
        "component": "dropdownbutton",
        "rules": [
            {
                "selector": ".k-menu-button",
                "checks": [
                    {
                        "selector": ".k-menu-button",
                        "id": "k-dropdownbutton-role",
                        "test": true,
                        "usage": "Omitted if the `<button>` DOM element is used.",
                        "attribute": [
                            "role=button",
                            "nodeName=button"
                        ]
                    },
                    {
                        "id": "k-dropdownbutton-label",
                        "test": true,
                        "usage": "The attribute must be present when no text is initially visible in the button.",
                        "attribute": "aria-label"
                    },
                    {
                        "id": "k-dropdownbutton-expanded",
                        "test": true,
                        "usage": "Announces the state of the popup visibility.",
                        "attribute": "aria-expanded",
                        "value": [
                            "true",
                            "false"
                        ]
                    },
                    {
                        "id": "k-dropdownbutton-controls",
                        "test": true,
                        "usage": "Points to the popup element. Builds a relationship between the button and the popup.",
                        "value": ".k-menu-group id",
                        "attribute": "aria-controls"
                    }
                ]
            },
            {
                "selector": ".k-menu-button.k-disabled",
                "checks": [
                    {
                        "selector": ".k-menu-button.k-disabled",
                        "id": "k-dropdownbutton-disabled",
                        "test": true,
                        "usage": "Rendered only when the button is disabled and the `disabled` attribute cannot be used. Applicable to the `<button>` or `<input type=\"button\">` elements.",
                        "value": "true",
                        "attribute": "aria-disabled"
                    }
                ]
            },
            {
                "selector": ".k-menu-group",
                "checks": [
                    {
                        "selector": ".k-menu-group",
                        "id": "k-dropdownbutton-menu-role",
                        "test": true,
                        "usage": "Announces the `list` role of the popup.",
                        "value": "list",
                        "attribute": "role"
                    }
                ]
            },
            {
                "selector": ".k-menu-item",
                "checks": [
                    {
                        "selector": ".k-menu-item",
                        "id": "k-dropdownbutton-item-role",
                        "test": true,
                        "usage": "Announces the `listitem` role of the popup items.",
                        "value": "listitem",
                        "attribute": "role"
                    }
                ]
            }
        ]
    },
    "dropdownlist": {
        "component": "dropdownlist",
        "rules": [
            {
                "selector": ".k-dropdownlist:not(.k-views-dropdown)",
                "checks": [
                    {
                        "selector": ".k-dropdownlist:not(.k-views-dropdown)",
                        "id": "k-dropdownlist-role",
                        "test": true,
                        "usage": "Announces the button drop-down element.",
                        "value": "combobox",
                        "attribute": "role"
                    },
                    {
                        "id": "k-dropdownlist-label",
                        "test": true,
                        "usage": "The input requires an accessible name that will be assigned to it.",
                        "multiple": true,
                        "attribute": [
                            "label for",
                            "aria-label",
                            "aria-labelledby"
                        ]
                    },
                    {
                        "id": "k-dropdownlist-expanded",
                        "test": true,
                        "usage": "Announces the visibility state of the popup.",
                        "attribute": "aria-expanded",
                        "value": [
                            "true",
                            "false"
                        ]
                    },
                    {
                        "id": "k-dropdownlist-controls",
                        "test": true,
                        "usage": "Points to the listbox element. Signifies that the `combobox` controls the `listbox` element.",
                        "value": "[role='listbox'] id",
                        "attribute": "aria-controls"
                    },
                    {
                        "id": "k-dropdownlist-describedby",
                        "test": true,
                        "usage": "Announces the selected value of the drop-down.",
                        "value": ".k-input-inner id",
                        "attribute": "aria-describedby"
                    },
                    {
                        "id": "k-dropdownlist-activedescendent",
                        "test": true,
                        "when": "open",
                        "usage": "Points to the focused item in the popup. The focused item is changed through keyboard navigation. If the popup is not visible, the attribute must not point to any element or must be removed.",
                        "value": ".k-list-item.k-focus id",
                        "attribute": "aria-activedescendant"
                    },
                    {
                        "id": "k-dropdownlist-readonly",
                        "test": true,
                        "when": "readonly",
                        "usage": "The attribute is rendered only when the DropDownList is read-only.",
                        "value": "true",
                        "attribute": "aria-readonly"
                    },
                    {
                        "id": "k-dropdownlist-busy",
                        "test": true,
                        "when": "loading",
                        "usage": "The attribute is rendered only when the DropDownList is loading data.",
                        "value": "true",
                        "attribute": "aria-busy"
                    },
                    {
                        "id": "k-dropdownlist-tabindex",
                        "test": true,
                        "usage": "The element must be focusable.",
                        "value": "0",
                        "attribute": "tabindex"
                    }
                ]
            },
            {
                "selector": ".k-invalid .k-input-inner,.ng-invalid .k-input-inner",
                "checks": [
                    {
                        "selector": ".k-invalid .k-input-inner,.ng-invalid .k-input-inner",
                        "test": true,
                        "id": "k-dropdownlist-invalid",
                        "usage": "The attribute is rendered only when the DropDownList is in a form, and announces the valid state of the component.",
                        "value": "true",
                        "attribute": "aria-invalid"
                    }
                ]
            },
            {
                "selector": ".k-dropdownlist.k-disabled",
                "checks": [
                    {
                        "selector": ".k-dropdownlist.k-disabled",
                        "id": "k-dropdownlist-disabled",
                        "test": true,
                        "usage": "The attribute is rendered only when the DropDownList is disabled.",
                        "value": "true",
                        "attribute": "aria-disabled"
                    }
                ]
            },
            {
                "selector": ".k-input-button",
                "checks": [
                    {
                        "selector": ".k-input-button",
                        "id": "k-dropdownlist-arrow-role",
                        "test": true,
                        "usage": "The element must either be a `<button>` element or must have the `role=\"button\"` assigned.",
                        "attribute": [
                            "role=button",
                            "nodeName=button"
                        ]
                    },
                    {
                        "id": "k-dropdownlist-arrow-label",
                        "test": true,
                        "usage": "The button requires an accessible name that will be assigned to it.",
                        "attribute": "aria-label"
                    },
                    {
                        "id": "k-dropdownlist-arrow-tabindex",
                        "test": true,
                        "usage": "The button element must not be focusable.",
                        "value": "-1",
                        "attribute": "tabindex"
                    }
                ]
            },
            {
                "selector": ".k-list-filter>.k-searchbox>.k-input-inner",
                "checks": [
                    {
                        "selector": ".k-list-filter>.k-searchbox>.k-input-inner",
                        "id": "k-dropdownlist-filter-role",
                        "test": true,
                        "usage": "Announces the search box capability of the input.",
                        "value": "searchbox",
                        "attribute": "role"
                    },
                    {
                        "id": "k-dropdownlist-filter-label",
                        "test": true,
                        "usage": "Points to the search label.",
                        "attribute": "aria-label"
                    },
                    {
                        "id": "k-dropdownlist-filter-activedescendent",
                        "test": true,
                        "when": "open",
                        "usage": "Points to the focused item or to an item from the popup.",
                        "value": ".k-list-item.k-focus id",
                        "attribute": "aria-activedescendant"
                    },
                    {
                        "id": "k-dropdownlist-filter-autocomplete",
                        "test": true,
                        "usage": "Indicates the list-filtering capabilities of the selected items.",
                        "value": "list",
                        "attribute": "aria-autocomplete"
                    },
                    {
                        "id": "k-dropdownlist-filter-controls",
                        "test": true,
                        "usage": "Points to the popup element. Builds the relationship between the input and the popup.",
                        "value": "[role='listbox'] id",
                        "attribute": "aria-controls"
                    }
                ]
            },
            {
                "selector": ".k-list-ul",
                "checks": [
                    {
                        "selector": ".k-list-ul",
                        "test": true,
                        "id": "k-popuplist-ul-live",
                        "attribute": "aria-live",
                        "value": [
                            "polite",
                            "off"
                        ],
                        "usage": "Assures the live updates on the selected value of the popup."
                    }
                ]
            },
            {
                "selector": ".k-animation-container",
                "checks": [
                    {
                        "selector": ".k-animation-container",
                        "test": true,
                        "id": "k-popuplist-role",
                        "attribute": "role",
                        "value": "region",
                        "usage": "When the component container is appended to the `<body>` element of the document, it requires you to assing a `landmark` role to it. Otherwise, append it to an element with an appropriate `landmark` role."
                    },
                    {
                        "test": true,
                        "id": "k-popuplist-label",
                        "multiple": true,
                        "attribute": [
                            "aria-label",
                            "aria-labelledby"
                        ],
                        "usage": "When the container has a `region` role assigned, povides a label."
                    }
                ]
            },
            {
                "selector": ".k-list .k-no-data",
                "checks": [
                    {
                        "selector": ".k-list .k-no-data",
                        "test": true,
                        "id": "k-no-data-aria-live",
                        "attribute": "aria-live",
                        "value": "polite",
                        "usage": "Identifies the element as a live region in the `polite` state, meaning assistive technology users are informed about changes to the region at the next available opportunity."
                    }
                ]
            },
            {
                "selector": ".k-list-item-icon-wrapper",
                "checks": [
                    {
                        "selector": ".k-list-item-icon-wrapper",
                        "id": "k-popuplist-item-icon-wrapper-presentation",
                        "test": true,
                        "usage": "Indicates that the icon wrapper is decorative and should be ignored by assistive technologies.",
                        "value": "presentation",
                        "attribute": "role"
                    }
                ]
            },
            {
                "selector": ".k-list-item-icon",
                "checks": [
                    {
                        "selector": ".k-list-item-icon",
                        "id": "k-popuplist-item-icon-hidden",
                        "test": true,
                        "when": "icon present",
                        "usage": "Ensures that the icon itself is hidden from assistive technologies since it is decorative.",
                        "value": "true",
                        "attribute": "aria-hidden"
                    }
                ]
            },
            {
                "selector": ".k-list-item.k-selected",
                "checks": [
                    {
                        "selector": ".k-list-item.k-selected",
                        "test": true,
                        "id": "k-popuplist-item-selected",
                        "attribute": "aria-selected",
                        "value": "true",
                        "usage": "Indicates the selected state of the item."
                    }
                ]
            },
            {
                "selector": ".k-list-ul",
                "checks": [
                    {
                        "selector": ".k-list-ul",
                        "id": "k-popuplist-group-role",
                        "test": true,
                        "usage": "When data is grouped, role is group, otherwise - listbox.",
                        "value": [
                            "listbox",
                            "group"
                        ],
                        "attribute": "role"
                    }
                ]
            },
            {
                "selector": ".k-list-group-item",
                "checks": [
                    {
                        "selector": ".k-list-group-item",
                        "test": true,
                        "id": "k-popuplist-group-item-role",
                        "attribute": "role",
                        "value": "presentation",
                        "usage": "The group header has role='presentation' since the grouping semantics are provided by the ul[role=group]."
                    },
                    {
                        "test": true,
                        "id": "k-popuplist-group-header-id",
                        "attribute": "id",
                        "usage": "Provides an id for the group header that is referenced by the group's aria-labelledby attribute."
                    }
                ]
            },
            {
                "selector": ".k-list-ul .k-list-item",
                "checks": [
                    {
                        "selector": ".k-list-ul .k-list-item",
                        "id": "k-popuplist-grouped-item-role",
                        "test": true,
                        "usage": "Items within a group maintain the option role.",
                        "value": "option",
                        "attribute": "role"
                    }
                ]
            }
        ]
    },
    "dropdowntree": {
        "component": "dropdowntree",
        "rules": [
            {
                "selector": ".k-dropdowntree",
                "checks": [
                    {
                        "selector": ".k-dropdowntree",
                        "id": "k-dropdowntree-role",
                        "test": true,
                        "usage": "Announces the drop-down element of the button.",
                        "value": "combobox",
                        "attribute": "role"
                    },
                    {
                        "id": "k-dropdowntree-label",
                        "test": true,
                        "usage": "The input requires an accessible name that will be assigned to it.",
                        "multiple": true,
                        "attribute": [
                            "label for",
                            "aria-label",
                            "aria-labelledby"
                        ]
                    },
                    {
                        "id": "k-dropdowntree-haspopup",
                        "test": true,
                        "usage": "Indicates the presence of a popup with a tree navigation.",
                        "value": "tree",
                        "attribute": "aria-haspopup"
                    },
                    {
                        "id": "k-dropdowntree-expanded",
                        "test": true,
                        "usage": "Announces the state of the popup visibility.",
                        "attribute": "aria-expanded",
                        "value": [
                            "true",
                            "false"
                        ]
                    },
                    {
                        "id": "k-dropdowntree-controls",
                        "test": true,
                        "usage": "Points to the `treeview` element. Signifies that the `combobox` element controls the `treeview` one.",
                        "value": ".k-treeview id",
                        "attribute": "aria-controls"
                    },
                    {
                        "id": "k-dropdowntree-describedby",
                        "test": true,
                        "usage": "Announces the selected value of the drop-down.",
                        "value": ".k-input-inner id",
                        "attribute": "aria-describedby"
                    },
                    {
                        "id": "k-dropdowntree-readonly",
                        "test": true,
                        "when": "readonly",
                        "usage": "The attribute is rendered only when the drop-down is read-only.",
                        "value": "true",
                        "attribute": "aria-readonly"
                    },
                    {
                        "id": "k-dropdowntree-autocomplete",
                        "test": true,
                        "when": "filterable",
                        "usage": "The attribute is rendered and the value is set to `list` when the filtering feature is enabled.",
                        "value": "list",
                        "attribute": "aria-autocomplete"
                    },
                    {
                        "id": "k-dropdowntree-busy",
                        "test": true,
                        "when": "loading",
                        "usage": "The attribute is rendered only when the drop-down is loading data.",
                        "value": "true",
                        "attribute": "aria-busy"
                    },
                    {
                        "id": "k-dropdowntree-tabindex",
                        "test": true,
                        "usage": "The element must be focusable.",
                        "value": "0",
                        "attribute": "tabindex"
                    }
                ]
            },
            {
                "selector": ".k-dropdowntree.k-disabled",
                "checks": [
                    {
                        "selector": ".k-dropdowntree.k-disabled",
                        "id": "k-dropdowntree-disabled",
                        "test": true,
                        "usage": "The attribute is rendered only when the drop-down is disabled.",
                        "value": "true",
                        "attribute": "aria-disabled"
                    }
                ]
            },
            {
                "selector": ".k-input-button",
                "checks": [
                    {
                        "selector": ".k-input-button",
                        "id": "k-dropdowntree-arrow-role",
                        "test": true,
                        "usage": "The element must either be a `<button>` element or must have `role=\"button\"` assigned.",
                        "attribute": [
                            "role=button",
                            "nodeName=button"
                        ]
                    },
                    {
                        "id": "k-dropdowntree-arrow-label",
                        "test": true,
                        "usage": "The button requires an accessible name that will be assigned to it.",
                        "attribute": "aria-label"
                    },
                    {
                        "id": "k-dropdowntree-arrow-tabindex",
                        "test": true,
                        "usage": "The `button` element must not be focusable.",
                        "value": "-1",
                        "attribute": "tabindex"
                    }
                ]
            },
            {
                "selector": ".k-animation-container",
                "checks": [
                    {
                        "selector": ".k-animation-container",
                        "test": true,
                        "id": "k-dropdowntree-popuplist-role",
                        "attribute": "role",
                        "value": "region",
                        "usage": "When the component container is appended to the `<body>` element of the document, it requires you to assign a `landmark` role to it. Otherwise, it must be appended to an element with an appropriate `landmark` role."
                    },
                    {
                        "test": true,
                        "id": "k-dropdowntree-popuplist-label",
                        "multiple": true,
                        "attribute": [
                            "aria-label",
                            "aria-labelledby"
                        ],
                        "usage": "Provides a label when the container has a `region` role assigned."
                    }
                ]
            }
        ]
    },
    "editor": {
        "component": "editor",
        "rules": [
            {
                "selector": "div[contenteditable='true']",
                "checks": [
                    {
                        "selector": "div[contenteditable='true']",
                        "id": "k-editor-role",
                        "test": true,
                        "usage": "Specifies the role of the component as text input.",
                        "value": "textbox",
                        "attribute": "role"
                    },
                    {
                        "id": "k-editor-label",
                        "test": true,
                        "usage": "The component focusable element needs an accessible name to be assigned to it.",
                        "attribute": [
                            "label for",
                            "aria-label",
                            "aria-labelledby"
                        ]
                    }
                ]
            },
            {
                "selector": ".k-editor.k-readonly div[contenteditable=false]",
                "checks": [
                    {
                        "selector": ".k-editor.k-readonly div[contenteditable=false]",
                        "id": "k-editor-readonly",
                        "test": true,
                        "usage": "Attribute is rendered only when the Editor is readonly.",
                        "value": "true",
                        "attribute": "aria-readonly"
                    }
                ]
            }
        ]
    },
    "expansionpanel": {
        "component": "expansionpanel",
        "rules": [
            {
                "selector": ".k-expander-header",
                "checks": [
                    {
                        "selector": ".k-expander-header",
                        "id": "k-expansionpanel-header-role",
                        "test": true,
                        "usage": "Sets the proper role for the ExpansionPanel component.",
                        "value": "button",
                        "attribute": "role"
                    },
                    {
                        "id": "k-expansionpanel-header-controls",
                        "test": true,
                        "usage": "Points to the controlled element based on the given `id`.",
                        "value": ".k-expander-content-wrapper id",
                        "attribute": "aria-controls"
                    },
                    {
                        "id": "k-expansionpanel-header-tabindex",
                        "test": true,
                        "usage": "The element should be focusable.",
                        "value": "0",
                        "attribute": "tabindex"
                    }
                ]
            },
            {
                "selector": ".k-disabled .k-expander-header",
                "checks": [
                    {
                        "selector": ".k-disabled .k-expander-header",
                        "id": "k-expansionpanel-header-disabled",
                        "test": true,
                        "usage": "The attribute is rendered only when the ExpansionPanel is disabled.",
                        "value": [
                            "true",
                            "false"
                        ],
                        "attribute": "aria-disabled"
                    }
                ]
            }
        ]
    },
    "filebox": {
        "component": "filebox",
        "rules": [
            {
                "selector": ".k-file-box-wrapper",
                "checks": [
                    {
                        "selector": ".k-file-box-wrapper",
                        "id": "k-file-box-wrapper-role",
                        "test": true,
                        "usage": "Explicitly sets the UL role to list.",
                        "value": "list",
                        "attribute": "role"
                    },
                    {
                        "id": "k-file-box-wrapper-label",
                        "test": true,
                        "usage": "Provides an accessible name for the file list (e.g. \"Attached files\").",
                        "attribute": "aria-label"
                    }
                ]
            },
            {
                "selector": ".k-file-box-wrapper .k-files-scroll",
                "checks": [
                    {
                        "selector": ".k-file-box-wrapper .k-files-scroll",
                        "id": "k-file-box-scroll-role",
                        "test": true,
                        "usage": "The scrollable container between the list and its items is presentational, ensuring the list→listitem relationship is preserved in the accessibility tree.",
                        "value": "presentation",
                        "attribute": "role"
                    }
                ]
            },
            {
                "selector": ".k-file-box-wrapper .k-file-box",
                "checks": [
                    {
                        "selector": ".k-file-box-wrapper .k-file-box",
                        "id": "k-file-box-item-role",
                        "test": true,
                        "usage": "Explicitly sets the LI role to listitem.",
                        "value": "listitem",
                        "attribute": "role"
                    },
                    {
                        "id": "k-file-box-item-tabindex",
                        "test": true,
                        "usage": "Makes the file box focusable. Uses roving tabindex: 0 for the focused item, -1 for the rest.",
                        "value": [
                            "0",
                            "-1"
                        ],
                        "attribute": "tabindex"
                    },
                    {
                        "id": "k-file-box-item-label",
                        "test": true,
                        "usage": "Provides an accessible name describing the file. Can include the file name and size (e.g. \"FileName.pdf 2MB\").",
                        "attribute": "aria-label"
                    }
                ]
            },
            {
                "selector": ".k-file-box-wrapper .k-file-box .k-icon",
                "checks": [
                    {
                        "selector": ".k-file-box-wrapper .k-file-box .k-icon",
                        "id": "k-file-box-icon-hidden",
                        "test": true,
                        "usage": "The file type icon is decorative and hidden from screen readers.",
                        "value": "true",
                        "attribute": "aria-hidden"
                    }
                ]
            },
            {
                "selector": ".k-file-box-wrapper .k-file-box span.k-button",
                "checks": [
                    {
                        "selector": ".k-file-box-wrapper .k-file-box span.k-button",
                        "id": "k-file-box-button-hidden",
                        "test": true,
                        "usage": "The remove button is rendered as a decorative span and hidden from screen readers. File removal is handled by keyboard interaction on the listitem itself.",
                        "value": "true",
                        "attribute": "aria-hidden"
                    }
                ]
            }
        ]
    },
    "filemanager": {
        "component": "filemanager",
        "rules": [
            {
                "selector": ".k-filemanager-preview",
                "checks": [
                    {
                        "selector": ".k-filemanager-preview",
                        "id": "k-filemanager-details-tabindex",
                        "test": true,
                        "usage": "The element must be focusable, so that its content would be comunicated to the users.",
                        "value": "0",
                        "attribute": "tabindex"
                    }
                ]
            }
        ]
    },
    "filter": {
        "component": "filter",
        "rules": [
            {
                "selector": ".k-filter-container",
                "checks": [
                    {
                        "selector": ".k-filter-container",
                        "id": "k-filter-role",
                        "test": true,
                        "usage": "Describes the hierarchical structure of the Filter component.",
                        "value": "tree",
                        "attribute": "role"
                    },
                    {
                        "id": "k-filter-label",
                        "test": true,
                        "usage": "Specifies a label for the Filter component.",
                        "attribute": "aria-label"
                    }
                ]
            },
            {
                "selector": ".k-filter-group-main,.k-filter-item",
                "checks": [
                    {
                        "selector": ".k-filter-group-main,.k-filter-item",
                        "id": "k-filter-item-role",
                        "test": true,
                        "usage": "Each FilterGroup and FilterExpression represent a separate `treeitem` in the Filter component structure.",
                        "value": "treeitem",
                        "attribute": "role"
                    }
                ]
            },
            {
                "selector": ".k-filter-lines",
                "checks": [
                    {
                        "selector": ".k-filter-lines",
                        "id": "k-filter-group-role",
                        "test": true,
                        "usage": "Represents a group if items in the Filter component.",
                        "value": "group",
                        "attribute": "role"
                    }
                ]
            },
            {
                "selector": ".k-toolbar",
                "checks": [
                    {
                        "selector": ".k-toolbar",
                        "id": "k-filter-toolbar-role",
                        "test": true,
                        "usage": "The role represents a collection of tools.",
                        "value": "toolbar",
                        "attribute": "role"
                    },
                    {
                        "id": "k-filter-toolbar-label",
                        "test": true,
                        "usage": "Specifies a label for the toolbar.",
                        "attribute": "aria-label"
                    }
                ]
            }
        ]
    },
    "filtermenu": {
        "component": "filtermenu",
        "rules": [
            {
                "selector": ".k-grid-filter-menu",
                "checks": [
                    {
                        "selector": ".k-grid-filter-menu",
                        "id": "k-grid-filter-menu-button-has-popup",
                        "test": true,
                        "usage": "Specifies that the button opens a dialog.",
                        "value": "dialog",
                        "attribute": "aria-haspopup",
                        "when": "grid is not navigable"
                    },
                    {
                        "id": "k-grid-filter-menu-button-expanded",
                        "test": true,
                        "usage": "Announces the current state of the popup.",
                        "value": [
                            "true",
                            "false"
                        ],
                        "attribute": "aria-expanded",
                        "when": "grid is not navigable"
                    },
                    {
                        "id": "k-grid-filter-menu-button-controls",
                        "test": true,
                        "usage": "Points to the popup that the button toggles.",
                        "value": ".k-popup.k-grid-filter-popup id",
                        "attribute": "aria-controls",
                        "when": "grid is not navigable"
                    }
                ]
            },
            {
                "selector": ".k-header.k-filterable",
                "checks": [
                    {
                        "selector": ".k-header.k-filterable",
                        "id": "k-grid-filter-menu-header-has-popup",
                        "test": true,
                        "usage": "Specifies that the header cell opens a dialog.",
                        "value": "dialog",
                        "attribute": "aria-haspopup",
                        "when": "grid is navigable"
                    },
                    {
                        "id": "k-grid-filter-menu-header-expanded",
                        "test": true,
                        "usage": "Announces the current state of the popup.",
                        "value": [
                            "true",
                            "false"
                        ],
                        "attribute": "aria-expanded",
                        "when": "grid is navigable"
                    },
                    {
                        "id": "k-grid-filter-menu-header-controls",
                        "test": true,
                        "usage": "Points to the popup that the button toggles.",
                        "value": ".k-popup.k-grid-filter-popup id",
                        "attribute": "aria-controls",
                        "when": "grid is navigable"
                    },
                    {
                        "id": "k-grid-filter-menu-header-keyshortcuts",
                        "test": true,
                        "usage": "Announces the available filter-menu shortcut.",
                        "value": "Alt + ArrowDown",
                        "attribute": "aria-keyshortcuts",
                        "when": "grid is navigable"
                    }
                ]
            },
            {
                "selector": ".k-popup.k-grid-filter-popup",
                "checks": [
                    {
                        "selector": ".k-popup.k-grid-filter-popup",
                        "test": true,
                        "id": "k-filter-menu-popup-id",
                        "attribute": "id",
                        "usage": "Unique and deterministic id linked to the button or header cell \"aria-controls\" attribute."
                    },
                    {
                        "test": true,
                        "id": "k-filter-menu-popup-role",
                        "attribute": "role",
                        "usage": "Sets the dialog role of the popup.",
                        "value": "dialog"
                    },
                    {
                        "test": true,
                        "id": "k-filter-menu-popup-label",
                        "attribute": "aria-label",
                        "usage": "Contains descriptive information about the filter menu purpose - e.g. \"Column Title Filter Menu\""
                    }
                ]
            }
        ]
    },
    "flatcolorpicker": {
        "component": "flatcolorpicker",
        "rules": [
            {
                "selector": ".k-flatcolorpicker",
                "checks": [
                    {
                        "selector": ".k-flatcolorpicker",
                        "id": "k-flatcolorpicker-role",
                        "test": true,
                        "usage": "The focusable wrapper of the component should be considered a `textbox`. That signifies it has a value that could be submitted.",
                        "value": "textbox",
                        "attribute": "role"
                    },
                    {
                        "id": "k-flatcolorpicker-label",
                        "test": true,
                        "usage": "The component needs an accessible name to be assigned to it. Must also include the currently selected value in the component.",
                        "multiple": true,
                        "attribute": [
                            "aria-label",
                            "aria-labelledby"
                        ]
                    },
                    {
                        "id": "k-flatcolorpicker-tabindex",
                        "test": true,
                        "usage": "The element must be focusable.",
                        "value": "0",
                        "attribute": "tabindex"
                    }
                ]
            },
            {
                "selector": ".k-flatcolorpicker.k-disabled",
                "checks": [
                    {
                        "selector": ".k-flatcolorpicker.k-disabled",
                        "id": "k-flatcolorpicker-disabled",
                        "test": true,
                        "usage": "Attribute is rendered only when the ColorPalette is disabled.",
                        "value": "true",
                        "attribute": "aria-disabled"
                    }
                ]
            },
            {
                "selector": ".k-colorgradient",
                "checks": [
                    {
                        "selector": ".k-colorgradient",
                        "id": "k-flatcolorpicker-colorgradient-role",
                        "test": true,
                        "usage": "The ColorGradient element must have its role removed.",
                        "attribute": "role",
                        "value": [
                            "none",
                            null
                        ]
                    },
                    {
                        "id": "k-flatcolorpicker-colorgradient-label",
                        "test": true,
                        "usage": "The ColorGradient element must have its \"aria-label\" attribute removed.",
                        "attribute": "aria-label",
                        "value": null
                    },
                    {
                        "id": "k-flatcolorpicker-colorgradient-tabindex",
                        "test": true,
                        "usage": "The ColorGradient must be removed from the page tab sequence.",
                        "attribute": "tabindex",
                        "value": [
                            "-1",
                            null
                        ]
                    }
                ]
            }
        ]
    },
    "floatingactionbutton": {
        "component": "floatingactionbutton",
        "rules": [
            {
                "selector": ".k-fab",
                "checks": [
                    {
                        "selector": ".k-fab",
                        "id": "k-fab-role",
                        "test": true,
                        "usage": "Omitted if the `<button>` DOM element is used.",
                        "attribute": [
                            "role=button",
                            "nodeName=button"
                        ]
                    },
                    {
                        "id": "k-fab-label",
                        "test": true,
                        "usage": "The attribute must be present when no text is initially visible in the button.",
                        "attribute": [
                            "aria-label",
                            "title"
                        ]
                    }
                ]
            },
            {
                "selector": ".k-fab.k-disabled",
                "checks": [
                    {
                        "selector": ".k-fab.k-disabled",
                        "id": "k-fab-disabled",
                        "test": true,
                        "usage": "Rendered only when the button is disabled and the `disabled` attribute cannot be used. Applicable for the `<button>` or `<input type=\"button\">` elements.",
                        "value": "true",
                        "attribute": "aria-disabled"
                    }
                ]
            }
        ]
    },
    "form": {
        "component": "form",
        "rules": [
            {
                "selector": ".k-form",
                "checks": [
                    {
                        "selector": ".k-form",
                        "id": "k-form-role",
                        "test": true,
                        "usage": "Omitted if the `<form>` DOM element is used.",
                        "attribute": [
                            "role=form",
                            "nodeName=form"
                        ]
                    }
                ]
            }
        ]
    },
    "gantt": {
        "component": "gantt",
        "rules": [
            {
                "selector": ".k-gantt",
                "checks": [
                    {
                        "selector": ".k-gantt",
                        "id": "k-gantt-role",
                        "test": true,
                        "usage": "Indicates the Gantt's role as an application.",
                        "value": "application",
                        "attribute": "role"
                    }
                ]
            },
            {
                "selector": ".k-gantt-timeline .k-grid-content",
                "checks": [
                    {
                        "selector": ".k-gantt-timeline .k-grid-content",
                        "id": "k-gantt-timeline-role",
                        "test": true,
                        "usage": "Associates the role of the timeline as a tree.",
                        "value": "tree",
                        "attribute": "role"
                    }
                ]
            },
            {
                "selector": ".k-gantt-timeline .k-gantt-rows",
                "checks": [
                    {
                        "selector": ".k-gantt-timeline .k-gantt-rows",
                        "id": "k-gantt-timeline-rows-role",
                        "test": true,
                        "usage": "Used to build the accessibility tree.",
                        "value": "presentation",
                        "attribute": "role"
                    }
                ]
            },
            {
                "selector": ".k-gantt-timeline .k-gantt-columns",
                "checks": [
                    {
                        "selector": ".k-gantt-timeline .k-gantt-columns",
                        "id": "k-gantt-timeline-columns-role",
                        "test": true,
                        "usage": "Used to build the accessibility tree.",
                        "value": "presentation",
                        "attribute": "role"
                    }
                ]
            },
            {
                "selector": ".k-gantt-timeline .k-gantt-tasks",
                "checks": [
                    {
                        "selector": ".k-gantt-timeline .k-gantt-tasks",
                        "id": "k-gantt-timeline-tasks-role",
                        "test": true,
                        "usage": "Used to build the accessibility tasks.",
                        "value": "presentation",
                        "attribute": "role"
                    }
                ]
            },
            {
                "selector": ".k-gantt-timeline .k-task",
                "checks": [
                    {
                        "selector": ".k-gantt-timeline .k-task",
                        "id": "k-gantt-timeline-task-role",
                        "test": true,
                        "usage": "Associates the role of the timeline task as a tree item.",
                        "value": "treeitem",
                        "attribute": "role"
                    },
                    {
                        "id": "k-gantt-timeline-task-level",
                        "test": true,
                        "when": "section loaded",
                        "usage": "Specifies the level of the task.",
                        "attribute": "aria-level"
                    }
                ]
            },
            {
                "selector": ".k-gantt-timeline .k-task .k-task-complete",
                "checks": [
                    {
                        "selector": ".k-gantt-timeline .k-task .k-task-complete",
                        "id": "k-gantt-timeline-task-complete-hidden",
                        "test": true,
                        "usage": "Hides the status element from the task.",
                        "value": "true",
                        "attribute": "aria-hidden"
                    }
                ]
            },
            {
                "selector": ".k-gantt-timeline .k-task .k-task-actions",
                "checks": [
                    {
                        "selector": ".k-gantt-timeline .k-task .k-task-actions",
                        "id": "k-gantt-timeline-task-actions-hidden",
                        "test": true,
                        "usage": "Hides the actions element from the task.",
                        "value": "true",
                        "attribute": "aria-hidden"
                    }
                ]
            }
        ]
    },
    "grid": {
        "component": "grid",
        "rules": [
            {
                "selector": ".k-grid-toolbar",
                "checks": [
                    {
                        "selector": ".k-grid-toolbar",
                        "test": true,
                        "id": "k-grid-toolbar-role",
                        "attribute": "role",
                        "value": "toolbar",
                        "usage": "The toolbar is a collection of command buttons and inputs."
                    },
                    {
                        "test": true,
                        "id": "k-grid-toolbar-label",
                        "attribute": "aria-label",
                        "usage": "Clarifies the purpose of the toolbar."
                    },
                    {
                        "test": true,
                        "id": "k-grid-toolbar-controls",
                        "attribute": "aria-controls",
                        "value": ".k-grid-aria-root id",
                        "usage": "Pointing to the id of the element with `role=grid`."
                    }
                ]
            },
            {
                "selector": ".k-grouping-header",
                "checks": [
                    {
                        "selector": ".k-grouping-header",
                        "test": true,
                        "id": "k-grid-grouping-header-role",
                        "attribute": "role",
                        "value": "toolbar",
                        "usage": "The Grouping header is a ToolBar (collection of buttons)."
                    },
                    {
                        "test": true,
                        "id": "k-grid-grouping-header-label",
                        "attribute": "aria-label",
                        "usage": "Clarifies the purpose of the header."
                    },
                    {
                        "test": true,
                        "id": "k-grid-grouping-header-controls",
                        "attribute": "aria-controls",
                        "value": ".k-grid-aria-root id",
                        "usage": "Pointing to the id of the element with `role=grid`."
                    }
                ]
            },
            {
                "selector": ".k-grouping-header .k-chip-list .k-chip",
                "checks": [
                    {
                        "selector": ".k-grouping-header .k-chip-list .k-chip",
                        "test": true,
                        "id": "k-grid-grouping-indicator-role",
                        "attribute": "role",
                        "value": "button",
                        "usage": "If the element used is not `<button>`, then the role must be specified."
                    }
                ]
            },
            {
                "selector": ".k-grouping-header .k-chip-list",
                "checks": [
                    {
                        "selector": ".k-grouping-header .k-chip-list",
                        "test": true,
                        "id": "k-grid-grouping-panel-chiplist-role",
                        "attribute": "role",
                        "value": [
                            "none",
                            null
                        ],
                        "usage": "The ChipList default listbox role is removed to keep the toolbar --> button roles hierarchy."
                    },
                    {
                        "test": true,
                        "id": "k-grid-grouping-indicator-title",
                        "when": "sortable",
                        "attribute": "title",
                        "usage": "Present on the element or its child if sorting is enabled for that field."
                    }
                ]
            },
            {
                "selector": ".k-grid:not(.k-treelist) .k-grid-aria-root",
                "checks": [
                    {
                        "selector": ".k-grid:not(.k-treelist) .k-grid-aria-root",
                        "test": true,
                        "id": "k-grid-role",
                        "attribute": "role",
                        "value": "grid",
                        "usage": "The role specifies the element is a Data Grid."
                    }
                ]
            },
            {
                "selector": ".k-grid-aria-root",
                "checks": [
                    {
                        "selector": ".k-grid-aria-root",
                        "test": true,
                        "id": "k-grid-colcount",
                        "when": "virtualColumns",
                        "attribute": "aria-colcount",
                        "usage": "The total number of columns in the Grid. Needed only for Virtual columns and Hidden columns scenarios, when not all columns are rendered in the DOM. If the total number of columns is unknown, the value of `aria-colcount` must be set to -1."
                    },
                    {
                        "test": true,
                        "id": "k-grid-rowcount",
                        "when": [
                            "paging",
                            "virtual",
                            "masterDetail"
                        ],
                        "attribute": "aria-rowcount",
                        "usage": "The total number of rows in the table (header rows + master rows + detail rows + data rows + footer rows + aggregates rows). Needed only when Paging (and more that 1 page is present in the component), Virtual rows, or Master/Detail rows (Hierarchical Grid, Detail Template Grid) are enabled. If data is also Grouped, the proper number of all rows could not be calculated. In that case the value must be set to -1."
                    }
                ]
            },
            {
                "selector": ".k-grid-header-wrap>table",
                "checks": [
                    {
                        "selector": ".k-grid-header-wrap>table",
                        "test": true,
                        "id": "k-grid-header-role",
                        "attribute": "role",
                        "value": [
                            "presentation",
                            "none"
                        ],
                        "usage": "Negates the default semantic role of the `<table>` element."
                    }
                ]
            },
            {
                "selector": ".k-grid-header-wrap>table>thead",
                "checks": [
                    {
                        "selector": ".k-grid-header-wrap>table>thead",
                        "test": true,
                        "id": "k-grid-header-thead-role",
                        "attribute": "role",
                        "value": "rowgroup",
                        "usage": "Required as the owner `<table>` element has its semantic role removed."
                    }
                ]
            },
            {
                "selector": ".k-grid-header-wrap>table>thead>tr",
                "checks": [
                    {
                        "selector": ".k-grid-header-wrap>table>thead>tr",
                        "test": true,
                        "id": "k-grid-header-tr-role",
                        "attribute": "role",
                        "value": "row",
                        "usage": "Required as the owner `<table>` element has its semantic role removed."
                    },
                    {
                        "test": true,
                        "id": "k-grid-header-tr-rowindex",
                        "when": [
                            "paging",
                            "virtual",
                            "masterDetail"
                        ],
                        "attribute": "aria-rowindex",
                        "usage": "Row number including all headers, data (including master and detail) rows, and footers starting from 1. Needed only when Paging (and more that 1 page is present in the component), Virtual rows, or Master/Detail rows (Hierarchical Grid, Detail Template Grid) are enabled. If data is also Grouped, the proper indexing could not be calculated. Hence, the attribute must not be set."
                    }
                ]
            },
            {
                "selector": ".k-grid-header-wrap>table>thead>tr>th:not(.k-hierarchy-cell):not(.k-group-cell):not(.k-drag-cell)",
                "checks": [
                    {
                        "selector": ".k-grid-header-wrap>table>thead>tr>th:not(.k-hierarchy-cell):not(.k-group-cell):not(.k-drag-cell)",
                        "test": true,
                        "id": "k-grid-header-th-role",
                        "attribute": "role",
                        "value": "columnheader",
                        "usage": "Required as the owner `<table>` element has its semantic role removed."
                    },
                    {
                        "test": true,
                        "id": "k-grid-header-th-sort",
                        "when": "sortable",
                        "attribute": "aria-sort",
                        "value": [
                            "none",
                            "ascending",
                            "descending"
                        ],
                        "usage": "Present if sorting is enabled for that column."
                    },
                    {
                        "test": true,
                        "when": "sortable",
                        "id": "k-grid-header-th-label",
                        "multiple": true,
                        "attribute": [
                            "title",
                            "aria-label"
                        ],
                        "usage": "Present on the element or its child if sorting is enabled for that field."
                    },
                    {
                        "test": true,
                        "id": "k-grid-header-th-colindex",
                        "when": "virtualColumns",
                        "attribute": "aria-colindex",
                        "usage": "Col number, based on leaf columns, starting from 1. Needed only for Virtual columns and Hidden columns scenarios, when not all columns are rendered in the DOM. Otherwise, can be interpreted from the DOM structure. Can be calculated by summing previous columns colspans."
                    },
                    {
                        "test": true,
                        "id": "k-grid-header-th-haspopup-menu",
                        "when": "columnMenu",
                        "attribute": "aria-haspopup",
                        "value": "dialog",
                        "usage": "The attribute must be present if the column has a ColumnMenu."
                    },
                    {
                        "test": true,
                        "id": "k-grid-header-th-haspopup-dialog",
                        "when": "filterMenu",
                        "attribute": "aria-haspopup",
                        "value": "dialog",
                        "usage": "The attribute must be present if the column has a FilterMenu and no ColumnMenu."
                    }
                ]
            },
            {
                "selector": ".k-grid-header-wrap>table>thead>tr.k-filter-row>td",
                "checks": [
                    {
                        "selector": ".k-grid-header-wrap>table>thead>tr.k-filter-row>td",
                        "test": true,
                        "id": "k-grid-filterrow-role",
                        "attribute": "role",
                        "value": "gridcell",
                        "usage": "Required as the owner `<table>` element has its semantic role removed."
                    },
                    {
                        "test": true,
                        "id": "k-grid-filterrow-label",
                        "attribute": "aria-label",
                        "usage": "Has a label indicating that the cell is part of a filter row."
                    }
                ]
            },
            {
                "selector": ".k-grid-content>table",
                "checks": [
                    {
                        "selector": ".k-grid-content>table",
                        "test": true,
                        "id": "k-grid-content-role",
                        "attribute": "role",
                        "value": [
                            "none",
                            "presentation"
                        ],
                        "usage": "Negates the default semantic role of the `<table>` element."
                    }
                ]
            },
            {
                "selector": ".k-grid-content>table>tbody",
                "checks": [
                    {
                        "selector": ".k-grid-content>table>tbody",
                        "test": true,
                        "id": "k-grid-content-tbody-role",
                        "attribute": "role",
                        "value": "rowgroup",
                        "usage": "Required as the owner `<table>` element has its semantic role removed."
                    }
                ]
            },
            {
                "selector": ".k-grid-content>table>tbody>tr",
                "checks": [
                    {
                        "selector": ".k-grid-content>table>tbody>tr",
                        "test": true,
                        "id": "k-grid-content-tr-role",
                        "attribute": "role",
                        "value": "row",
                        "usage": "Required as the owner `<table>` element has its semantic role removed."
                    },
                    {
                        "test": true,
                        "id": "k-grid-content-tr-rowindex",
                        "when": [
                            "paging",
                            "virtual",
                            "masterDetail"
                        ],
                        "attribute": "aria-rowindex",
                        "usage": "Row number including all headers, data (including master and detail) rows, and footers starting from 1. Needed only when Paging (and more that 1 page is present in the component), Virtual rows, or Master/Detail rows (Hierarchical Grid, Detail Template Grid) are enabled. If data is also Grouped, the proper indexing could not be calculated. Hence, the attribute must not be set. In scenarios when master and detail rows are present in the Grid (Hierarchical Grid, Detail Template Grid), both master and detail rows must always be indexed. For example, if the first master row has `aria-rowindex=2`, even if its detail row is not present in the DOM, the next master row must have `aria-rowindex=4`. When rendered, the detail row must receive the missing index between the two master rows. In this example it would be `aria-rowindex=3`."
                    }
                ]
            },
            {
                "selector": ".k-grid-content tr.k-selected",
                "checks": [
                    {
                        "selector": ".k-grid-content tr.k-selected",
                        "test": true,
                        "id": "k-grid-content-tr-selected",
                        "attribute": "aria-selected",
                        "value": "true",
                        "usage": "Set on the currently selected row(s). Only used wen selection mode is set to `row`."
                    }
                ]
            },
            {
                "selector": ".k-grid-content>table>tbody>tr>td",
                "checks": [
                    {
                        "selector": ".k-grid-content>table>tbody>tr>td",
                        "test": true,
                        "id": "k-grid-content-td-role",
                        "attribute": "role",
                        "value": "gridcell",
                        "usage": "Required as the owner `<table>` element has its semantic role removed."
                    },
                    {
                        "test": true,
                        "id": "k-grid-content-td-colindex",
                        "when": "virtualColumns",
                        "attribute": "aria-colindex",
                        "usage": "Col number, based on leaf columns, starting from 1. Needed only for Virtual columns and Hidden columns scenarios, when not all columns are rendered in the DOM. Otherwise, can be interpreted from the DOM structure. Can be calculated by summing previous columns colspans."
                    }
                ]
            },
            {
                "selector": "td.k-selected",
                "checks": [
                    {
                        "selector": "td.k-selected",
                        "test": true,
                        "id": "k-grid-content-locked-td-selected",
                        "attribute": "aria-selected",
                        "value": "true",
                        "usage": "Set on the currently selected cell(s). Only used when selection mode is set to cell."
                    }
                ]
            },
            {
                "selector": ".k-master-row .k-hierarchy-cell,.k-grouping-row>td",
                "checks": [
                    {
                        "selector": ".k-master-row .k-hierarchy-cell,.k-grouping-row>td",
                        "test": true,
                        "id": "k-grid-content-locked-td-expanded",
                        "attribute": "aria-expanded",
                        "value": [
                            "true",
                            "false"
                        ],
                        "usage": "Optionally for cells holding grouping criteria values and for Master row cells in Detail template scenario."
                    }
                ]
            },
            {
                "selector": ".k-drag-cell",
                "checks": [
                    {
                        "selector": ".k-drag-cell",
                        "test": true,
                        "id": "k-grid-content-locked-td-label",
                        "attribute": "aria-label",
                        "usage": "Must be present in a Drag Row scenario on the cell containing the drag handle."
                    }
                ]
            },
            {
                "selector": ".k-grid-header-locked .k-grid-header-table .k-table-row",
                "checks": [
                    {
                        "selector": ".k-grid-header-locked .k-grid-header-table .k-table-row",
                        "id": "k-grid-header-row-locked-owns",
                        "test": true,
                        "attribute": "aria-owns",
                        "usage": "When there are locked columns, the rows from the `locked` header table should `own` the cells from the corresponding non-locked header table rows. Value should be a space-separated list of `id`s."
                    }
                ]
            },
            {
                "selector": ".k-grid-content-locked .k-grid-table .k-table-row",
                "checks": [
                    {
                        "selector": ".k-grid-content-locked .k-grid-table .k-table-row",
                        "id": "k-grid-content-row-locked-owns",
                        "test": true,
                        "attribute": "aria-owns",
                        "usage": "When there are locked columns, the rows from the `locked` content table should `own` the cells from the corresponding non-locked content table rows. Value should be a space-separated list of `id`s."
                    }
                ]
            },
            {
                "selector": "tfoot",
                "checks": [
                    {
                        "selector": "tfoot",
                        "test": true,
                        "id": "k-grid-footer-tfoot-role",
                        "attribute": "role",
                        "value": "rowgroup",
                        "usage": "Required as the owner `<table>` element has its semantic role removed."
                    }
                ]
            },
            {
                "selector": "tfoot>tr",
                "checks": [
                    {
                        "selector": "tfoot>tr",
                        "test": true,
                        "id": "k-grid-footer-tr-role",
                        "attribute": "role",
                        "value": "row",
                        "usage": "Required as the owner `<table>` element has its semantic role removed."
                    },
                    {
                        "test": true,
                        "id": "k-grid-footer-tr-rowindex",
                        "when": [
                            "paging",
                            "virtual",
                            "masterDetail"
                        ],
                        "attribute": "aria-rowindex",
                        "usage": "Row number including all headers, data (including master and detail) rows, and footers starting from 1. Footer rows are always the last ones in a Grid. Needed only when Paging (and more that 1 page is present in the component), Virtual rows, or Master/Detail rows (Hierarchical Grid, Detail Template Grid) are enabled. If data is also Grouped, the proper indexing could not be calculated. Hence, the attribute must not be set."
                    }
                ]
            },
            {
                "selector": "tfoot>tr>td",
                "checks": [
                    {
                        "selector": "tfoot>tr>td",
                        "test": true,
                        "id": "k-grid-footer-td-role",
                        "attribute": "role",
                        "value": "gridcell",
                        "usage": "Required as the owner `<table>` element has its semantic role removed."
                    },
                    {
                        "test": true,
                        "id": "k-grid-footer-td-colindex",
                        "when": "virtualColumns",
                        "attribute": "aria-colindex",
                        "usage": "Col number, based on leaf columns, starting from 1. Needed only for Virtual columns and Hidden columns scenarios, when not all columns are rendered in the DOM. Otherwise, can be interpreted from the DOM structure. Can be calculated by summing previous columns colspans."
                    }
                ]
            },
            {
                "selector": ".k-grid-selection-aggregates",
                "checks": [
                    {
                        "selector": ".k-grid-selection-aggregates",
                        "id": "k-grid-status-bar-live",
                        "test": true,
                        "attribute": "aria-live",
                        "value": "polite",
                        "usage": "Ensures that changes in the calculated selection aggregates are announced by assistive technologies."
                    }
                ]
            }
        ]
    },
    "icon": {
        "component": "icon",
        "rules": [
            {
                "selector": ".k-icon, .k-svg-icon",
                "checks": [
                    {
                        "selector": ".k-icon, .k-svg-icon",
                        "id": "k-icon-hidden",
                        "test": true,
                        "usage": "Hides the icon element and all its children from assistive technologies.",
                        "value": "true",
                        "attribute": "aria-hidden"
                    }
                ]
            }
        ]
    },
    "imageeditor": {
        "component": "imageeditor",
        "rules": [
            {
                "selector": ".k-imageeditor-canvas>canvas",
                "checks": [
                    {
                        "selector": ".k-imageeditor-canvas>canvas",
                        "id": "k-image-editor-canvas-role",
                        "test": true,
                        "usage": "Indicates the canvas' role as an image.",
                        "value": "img",
                        "attribute": "role"
                    },
                    {
                        "id": "k-image-editor-canvas-label",
                        "test": true,
                        "usage": "Provides an accessible name for the canvas by describing the image content.",
                        "attribute": [
                            "aria-label",
                            "aria-labelledby"
                        ]
                    }
                ]
            }
        ]
    },
    "infinitecalendar": {
        "component": "infinitecalendar",
        "rules": [
            {
                "selector": ".k-calendar-infinite",
                "checks": [
                    {
                        "selector": ".k-calendar-infinite",
                        "id": "k-infinitecalendar-role",
                        "test": true,
                        "usage": "Specifies the role of the Calendar wrapper element.",
                        "value": "grid",
                        "attribute": "role"
                    },
                    {
                        "id": "k-infinitecalendar-label",
                        "test": true,
                        "usage": "Pointing to the current view `k-calendar-title` element (e.g. `March 2022` or `2020-2029`).",
                        "multiple": true,
                        "attribute": [
                            "aria-label",
                            "aria-labelledby"
                        ]
                    },
                    {
                        "id": "k-infinitecalendar-activedescendant",
                        "test": true,
                        "usage": "Pointing to the currently active (focused) date/month/year/decade cell in the tables.",
                        "attribute": "aria-activedescendant",
                        "value": ".k-calendar-td.k-focus id"
                    },
                    {
                        "id": "k-infinitecalendar-tabindex",
                        "test": true,
                        "usage": "Makes the grid focusable.",
                        "value": "0",
                        "attribute": "tabindex"
                    }
                ]
            },
            {
                "selector": ".k-calendar-infinite .k-calendar-table",
                "checks": [
                    {
                        "selector": ".k-calendar-infinite .k-calendar-table",
                        "id": "k-infinitecalendar-table-role",
                        "test": true,
                        "usage": "All `k-calendar-table` elements must have their role set to `none`. That is because their content must be made belonging to a single `grid` component.",
                        "value": "none",
                        "attribute": "role"
                    }
                ]
            },
            {
                "selector": ".k-calendar-infinite .k-calendar-thead",
                "checks": [
                    {
                        "selector": ".k-calendar-infinite .k-calendar-thead",
                        "id": "k-infinitecalendar-thead-role",
                        "test": true,
                        "usage": "The `k-calendar-thead` must explicitly have its role set to `rowgroup` as its semantics have been removed while setting its `<table>` role to `none`.",
                        "value": "rowgroup",
                        "attribute": "role"
                    }
                ]
            },
            {
                "selector": ".k-calendar-infinite .k-calendar-tbody",
                "checks": [
                    {
                        "selector": ".k-calendar-infinite .k-calendar-tbody",
                        "id": "k-infinitecalendar-tbody-role",
                        "test": true,
                        "usage": "The `k-calendar-tbody` elements must explicitly have their roles set to `rowgroup` as their semantics have been removed while setting their `<table>` elements role to `none`.",
                        "value": "rowgroup",
                        "attribute": "role"
                    }
                ]
            },
            {
                "selector": ".k-calendar-infinite .k-calendar-tr",
                "checks": [
                    {
                        "selector": ".k-calendar-infinite .k-calendar-tr",
                        "id": "k-infinitecalendar-tr-role",
                        "test": true,
                        "usage": "The `k-calendar-tr` elements must explicitly have their roles set to `row` as their semantics have been removed while setting their `<table>` elements role to `none`.",
                        "value": "row",
                        "attribute": "role"
                    }
                ]
            },
            {
                "selector": ".k-calendar-infinite .k-calendar-th",
                "checks": [
                    {
                        "selector": ".k-calendar-infinite .k-calendar-th",
                        "id": "k-infinitecalendar-th-role",
                        "test": true,
                        "usage": "The `k-calendar-th` elements must explicitly have their roles set to `columnheader` as their semantics have been removed while setting their `<table>` elements role to `none`.",
                        "value": "columnheader",
                        "attribute": "role"
                    },
                    {
                        "id": "k-infinitecalendar-th-scope",
                        "test": true,
                        "usage": "Specifies that the header is applied to a column.",
                        "value": "col",
                        "attribute": "scope"
                    },
                    {
                        "id": "k-infinitecalendar-th-label",
                        "test": true,
                        "usage": "Specifies the full name of the day of the week (the column header).",
                        "attribute": "aria-label"
                    }
                ]
            },
            {
                "selector": ".k-calendar-caption",
                "checks": [
                    {
                        "selector": ".k-calendar-caption",
                        "id": "k-infinitecalendar-caption-role",
                        "test": true,
                        "usage": "The `k-calendar-caption` elements must explicitly have their roles set to `columnheader` as their semantics have been removed while setting their `<table>` elements role to `none`.",
                        "value": "columnheader",
                        "attribute": "role"
                    },
                    {
                        "id": "k-infinitecalendar-caption-scope",
                        "test": true,
                        "usage": "Specifies that the header is applied to a column.",
                        "value": "col",
                        "attribute": "scope"
                    }
                ]
            },
            {
                "selector": ".k-calendar-infinite .k-calendar-td",
                "checks": [
                    {
                        "selector": ".k-calendar-infinite .k-calendar-td",
                        "id": "k-infinitecalendar-td-role",
                        "test": true,
                        "usage": "The cells must explicitly have their roles set to `gridcell` as their semantics have been removed while setting their `<table>` elements role to `none`.",
                        "value": "gridcell",
                        "attribute": "role"
                    },
                    {
                        "id": "k-infinitecalendar-td-label",
                        "test": true,
                        "when": "yearView",
                        "usage": "Applicable in year view - for better context contains the full name of the month. May also be applied in month view to specify the full text for a date.",
                        "multiple": true,
                        "attribute": [
                            "aria-label ",
                            "title"
                        ]
                    }
                ]
            },
            {
                "selector": ".k-calendar-td.k-selected",
                "checks": [
                    {
                        "selector": ".k-calendar-td.k-selected",
                        "id": "k-infinitecalendar-td-selected",
                        "test": true,
                        "usage": "Specifies whether the date is selected or not.",
                        "attribute": "aria-selected"
                    }
                ]
            },
            {
                "selector": ".k-calendar-td.k-disabled",
                "checks": [
                    {
                        "selector": ".k-calendar-td.k-disabled",
                        "id": "k-infinitecalendar-td-disabled",
                        "test": true,
                        "usage": "When a date is not available for selection, its gridcell element must have the attribute set to `true`.",
                        "attribute": "aria-disabled"
                    }
                ]
            },
            {
                "selector": ".k-prev-view,.k-next-view",
                "checks": [
                    {
                        "selector": ".k-prev-view,.k-next-view",
                        "id": "k-infinitecalendar-arrows-tabindex",
                        "test": true,
                        "usage": "The buttons must not be focusable.",
                        "value": "-1",
                        "attribute": "tabindex"
                    }
                ]
            },
            {
                "selector": ".k-calendar-title",
                "checks": [
                    {
                        "selector": ".k-calendar-title",
                        "id": "k-infinitecalendar-title-tabindex",
                        "test": true,
                        "usage": "The button must not be focusable.",
                        "value": "-1",
                        "attribute": "tabindex"
                    }
                ]
            },
            {
                "selector": ".k-nav-today",
                "checks": [
                    {
                        "selector": ".k-nav-today",
                        "id": "k-infinitecalendar-today-tabindex",
                        "test": true,
                        "usage": "The link must not be focusable.",
                        "value": "-1",
                        "attribute": "tabindex"
                    }
                ]
            }
        ]
    },
    "listbox": {
        "component": "listbox",
        "rules": [
            {
                "selector": ".k-list-ul",
                "checks": [
                    {
                        "selector": ".k-list-ul",
                        "id": "k-listbox-ul-role",
                        "test": true,
                        "usage": "Specifies the role of the ListBox `ul` element.",
                        "value": "listbox",
                        "attribute": "role"
                    },
                    {
                        "id": "k-listbox-ul-label",
                        "test": true,
                        "usage": "Adds a label to the `ul` element of the ListBox.",
                        "multiple": true,
                        "attribute": [
                            "aria-label",
                            "aria-labelledby"
                        ]
                    },
                    {
                        "id": "k-listbox-ul-multiselectable",
                        "test": true,
                        "when": "multiselectable",
                        "usage": "Signifies that the ListBox allows multiple selection. Present only when the multiple selection of the component is enabled.",
                        "value": "true",
                        "attribute": "aria-multiselectable"
                    }
                ]
            },
            {
                "selector": ".k-list-item",
                "checks": [
                    {
                        "selector": ".k-list-item",
                        "id": "k-listbox-item-role",
                        "test": true,
                        "usage": "Specifies the role of the ListBox `item` element.",
                        "value": "option",
                        "attribute": "role"
                    },
                    {
                        "id": "k-listbox-item-selected",
                        "test": true,
                        "usage": "Set to `true` if the item is selected.",
                        "value": [
                            "true",
                            "false"
                        ],
                        "attribute": "aria-selected"
                    }
                ]
            },
            {
                "selector": ".k-listbox-actions",
                "checks": [
                    {
                        "selector": ".k-listbox-actions",
                        "test": true,
                        "id": "k-listbox-toolbar-role",
                        "attribute": "role",
                        "value": "toolbar",
                        "usage": "The toolbar is a collection of command buttons."
                    },
                    {
                        "test": true,
                        "id": "k-listbox-toolbar-label",
                        "attribute": "aria-label",
                        "usage": "Clarifies the purpose of the toolbar."
                    },
                    {
                        "test": true,
                        "id": "k-listbox-toolbar-controls",
                        "attribute": "aria-controls",
                        "value": "[role='listbox'] id",
                        "usage": "Points to the ids of the `role=listbox` elements that are being controlled by the ToolBar."
                    }
                ]
            },
            {
                "selector": ".k-listbox-actions .k-button",
                "checks": [
                    {
                        "selector": ".k-listbox-actions .k-button",
                        "test": true,
                        "id": "k-listbox-toolbar-button-label",
                        "multiple": true,
                        "attribute": [
                            "aria-label",
                            "title"
                        ],
                        "usage": "All buttons in the ToolBar must have lables, so that their purpose is clear."
                    }
                ]
            }
        ]
    },
    "listview": {
        "component": "listview",
        "rules": [
            {
                "selector": ".k-listview:not(.k-selectable) .k-listview-content",
                "checks": [
                    {
                        "selector": ".k-listview:not(.k-selectable) .k-listview-content",
                        "id": "k-listview-role",
                        "test": true,
                        "usage": "Specifies the role of non selectable ListView content element.",
                        "value": "list",
                        "attribute": "role"
                    }
                ]
            },
            {
                "selector": ".k-listview.k-selectable .k-listview-content",
                "checks": [
                    {
                        "selector": ".k-listview.k-selectable .k-listview-content",
                        "id": "k-listview-role-listbox",
                        "test": true,
                        "usage": "Specifies the role of selectable ListView content element.",
                        "value": "listbox",
                        "attribute": "role"
                    }
                ]
            },
            {
                "selector": ".k-listview:not(.k-selectable) .k-listview-item",
                "checks": [
                    {
                        "selector": ".k-listview:not(.k-selectable) .k-listview-item",
                        "id": "k-listview-item-role",
                        "test": true,
                        "usage": "Specifies the role of each item in a non selectable ListView.",
                        "value": "listitem",
                        "attribute": "role"
                    }
                ]
            },
            {
                "selector": ".k-listview.k-selectable .k-listview-item",
                "checks": [
                    {
                        "selector": ".k-listview.k-selectable .k-listview-item",
                        "id": "k-listview-item-role-option",
                        "test": true,
                        "usage": "Specifies the role of each item in a selectable ListView.",
                        "value": "option",
                        "attribute": "role"
                    }
                ]
            },
            {
                "selector": ".k-listview-item",
                "checks": [
                    {
                        "selector": ".k-listview-item",
                        "id": "k-listview-item-setsize",
                        "test": true,
                        "when": "pagable",
                        "usage": "Specifies the total number of items present in the ListView.",
                        "attribute": "aria-setsize"
                    },
                    {
                        "id": "k-listview-item-posinset",
                        "test": true,
                        "when": "pagable",
                        "usage": "Specifies the position of the current item in the entire list of items present in the ListView. Value must be greated than or equal to 1 and smaller than or equal to the total number of items in the ListView.",
                        "attribute": "aria-posinset"
                    }
                ]
            },
            {
                "selector": ".k-listview-item:nth-child(1)",
                "checks": [
                    {
                        "selector": ".k-listview-item:nth-child(1)",
                        "id": "k-listview-item-tabindex",
                        "test": true,
                        "usage": "The first item in the ListView must be focusable by default.",
                        "value": "0",
                        "attribute": "tabindex"
                    }
                ]
            }
        ]
    },
    "maskedtextbox": {
        "component": "maskedtextbox",
        "rules": [
            {
                "selector": ".k-input-inner",
                "checks": [
                    {
                        "selector": ".k-input-inner",
                        "id": "k-maskedtextbox-role",
                        "test": true,
                        "usage": "Specifies the role of the component. Not required if the `<input type=text`> configuration is used.",
                        "attribute": [
                            "role=textbox",
                            "nodeName=input"
                        ]
                    },
                    {
                        "id": "k-maskedtextbox-label",
                        "test": true,
                        "usage": "The input requires an accessible name that will be assigned to it.",
                        "attribute": [
                            "label for",
                            "aria-label",
                            "aria-labelledby"
                        ]
                    },
                    {
                        "id": "k-maskedtextbox-placeholder",
                        "test": true,
                        "usage": "Announces the mask or placeolder for the component.",
                        "attribute": "aria-placeholder"
                    }
                ]
            },
            {
                "selector": ".k-invalid .k-input-inner,.ng-invalid .k-input-inner",
                "checks": [
                    {
                        "selector": ".k-invalid .k-input-inner,.ng-invalid .k-input-inner",
                        "test": true,
                        "id": "k-maskedtextbox-invalid",
                        "usage": "The attribute is rendered only when the MaskedTextBox is in a form and announces the valid state of the component.",
                        "value": "true",
                        "attribute": "aria-invalid"
                    }
                ]
            },
            {
                "selector": ".k-disabled .k-input-inner",
                "checks": [
                    {
                        "selector": ".k-disabled .k-input-inner",
                        "id": "k-maskedtextbox-disabled",
                        "test": true,
                        "usage": "The attribute is rendered only when the MaskedTextBox is disabled.",
                        "multiple": true,
                        "attribute": [
                            "disabled=disabled",
                            "aria-disabled=true"
                        ]
                    }
                ]
            }
        ]
    },
    "mediaplayer": {
        "component": "mediaplayer",
        "rules": [
            {
                "selector": ".k-mediaplayer-seekbar span",
                "checks": [
                    {
                        "selector": ".k-mediaplayer-seekbar span",
                        "id": "k-mediaplayer-seekbar-role",
                        "test": true,
                        "usage": "Announces the `slider` role of the seekbar element.",
                        "value": "slider",
                        "attribute": "role"
                    },
                    {
                        "id": "k-mediaplayer-seekbar-aria-label",
                        "test": true,
                        "usage": "Specifies label for the seekbar slider.",
                        "attribute": "aria-label"
                    },
                    {
                        "id": "k-mediaplayer-seekbar-valuenow",
                        "test": true,
                        "usage": "Specifies the currently selected value in the seekbar slider.",
                        "attribute": "aria-valuenow"
                    },
                    {
                        "id": "k-mediaplayer-seekbar-valuemin",
                        "test": true,
                        "usage": "Specifies the minimum available value in the seekbar slider.",
                        "attribute": "aria-valuemin"
                    },
                    {
                        "id": "k-mediaplayer-seekbar-valuemax",
                        "test": true,
                        "usage": "Specifies the maximum available value in the seekbar slider.",
                        "attribute": "aria-valuemax"
                    }
                ]
            },
            {
                "selector": ".k-play-button",
                "checks": [
                    {
                        "selector": ".k-play-button",
                        "id": "k-mediaplayer-play-selected",
                        "test": true,
                        "usage": "Specifies whether the play is selected or not.",
                        "attribute": "aria-selected",
                        "value": "true"
                    },
                    {
                        "id": "k-mediaplayer-play-aria-label",
                        "test": true,
                        "usage": "Specifies label for the play/pause button.",
                        "attribute": "aria-label"
                    }
                ]
            },
            {
                "selector": ".k-volume-button",
                "checks": [
                    {
                        "selector": ".k-volume-button",
                        "id": "k-mediaplayer-mute-selected",
                        "test": true,
                        "usage": "Specifies whether the mute is selected or not.",
                        "attribute": "aria-selected",
                        "value": "true"
                    },
                    {
                        "id": "k-mediaplayer-mute-aria-label",
                        "test": true,
                        "usage": "Specifies label for the mute button.",
                        "attribute": "aria-label"
                    }
                ]
            },
            {
                "selector": ".k-mediaplayer-volume span",
                "checks": [
                    {
                        "selector": ".k-mediaplayer-volume span",
                        "id": "k-mediaplayer-volume-role",
                        "test": true,
                        "usage": "Announces the `slider` role of the volume element.",
                        "value": "slider",
                        "attribute": "role"
                    },
                    {
                        "id": "k-mediaplayer-volume-aria-label",
                        "test": true,
                        "usage": "Specifies label for the volume slider.",
                        "attribute": "aria-label"
                    },
                    {
                        "id": "k-mediaplayer-volume-valuenow",
                        "test": true,
                        "usage": "Specifies the currently selected value in the volume slider.",
                        "attribute": "aria-valuenow"
                    },
                    {
                        "id": "k-mediaplayer-volume-valuemin",
                        "test": true,
                        "usage": "Specifies the minimum available value in the volume slider.",
                        "attribute": "aria-valuemin"
                    },
                    {
                        "id": "k-mediaplayer-volume-valuemax",
                        "test": true,
                        "usage": "Specifies the maximum available value in the volume slider.",
                        "attribute": "aria-valuemax"
                    }
                ]
            },
            {
                "selector": ".k-mediaplayer-quality-wrap",
                "checks": [
                    {
                        "selector": ".k-mediaplayer-quality-wrap",
                        "id": "k-mediaplayer-quality-role",
                        "test": true,
                        "usage": "The quality element must be exposed as listbox.",
                        "value": "listbox",
                        "attribute": "role"
                    },
                    {
                        "id": "k-mediaplayer-quality-aria-label",
                        "test": true,
                        "usage": "Specifies label for the quality button.",
                        "attribute": "aria-label"
                    }
                ]
            },
            {
                "selector": ".k-fullscreen-button",
                "checks": [
                    {
                        "selector": ".k-fullscreen-button",
                        "id": "k-mediaplayer-fullscreen-selected",
                        "test": true,
                        "usage": "Specifies whether the full screen is selected or not.",
                        "attribute": "aria-selected",
                        "value": "true"
                    },
                    {
                        "id": "k-mediaplayer-fullscreen-aria-label",
                        "test": true,
                        "usage": "Specifies label for full screen button.",
                        "attribute": "aria-label"
                    }
                ]
            }
        ]
    },
    "menu": {
        "component": "menu",
        "rules": [
            {
                "selector": ".k-menu:not(.k-context-menu)",
                "checks": [
                    {
                        "selector": ".k-menu:not(.k-context-menu)",
                        "id": "k-menu-role",
                        "test": true,
                        "usage": "Announces the Menu menubar role",
                        "value": "menubar",
                        "attribute": "role"
                    }
                ]
            },
            {
                "selector": ".k-menu.k-menu-vertical",
                "checks": [
                    {
                        "selector": ".k-menu.k-menu-vertical",
                        "id": "k-menu-orientation",
                        "test": true,
                        "usage": "Announces the Menu orientation when vertical.",
                        "value": "vertical",
                        "attribute": "aria-orientation"
                    }
                ]
            },
            {
                "selector": ".k-menu-item",
                "checks": [
                    {
                        "selector": ".k-menu-item",
                        "id": "k-menu-item-role",
                        "test": true,
                        "usage": "Announces the Menu item role.",
                        "value": "menuitem",
                        "attribute": "role"
                    },
                    {
                        "id": "k-menu-item-tabindex",
                        "test": true,
                        "usage": "The focused item has tabindex '0', the rest - '-1'",
                        "value": [
                            "0",
                            "-1"
                        ],
                        "attribute": "tabindex"
                    }
                ]
            },
            {
                "selector": ".k-menu-item[aria-expanded]",
                "checks": [
                    {
                        "selector": ".k-menu-item[aria-expanded]",
                        "id": "k-menu-item-popup",
                        "test": true,
                        "usage": "Indicates that there is a popup, associated with the item. Applicable to expandable items only.",
                        "value": "true",
                        "attribute": "aria-haspopup"
                    }
                ]
            },
            {
                "selector": ".k-menu-item[aria-haspopup]",
                "checks": [
                    {
                        "selector": ".k-menu-item[aria-haspopup]",
                        "id": "k-menu-item-controls",
                        "test": true,
                        "usage": "Indicates that there is a popup, associated with the item. Applicable to expandable items only.",
                        "value": "ul.k-menu-group id",
                        "attribute": "aria-controls"
                    }
                ]
            },
            {
                "selector": ".k-menu-item[aria-haspopup]",
                "checks": [
                    {
                        "selector": ".k-menu-item[aria-haspopup]",
                        "id": "k-menu-item-expanded",
                        "test": true,
                        "usage": "Indicates whether the item is expanded.",
                        "value": [
                            "true",
                            "false"
                        ],
                        "attribute": "aria-expanded"
                    }
                ]
            },
            {
                "selector": ".k-menu-item.k-disabled",
                "checks": [
                    {
                        "selector": ".k-menu-item.k-disabled",
                        "id": "k-menu-item-disabled",
                        "test": true,
                        "usage": "Informs assistive technologies that a Menu item is disabled.",
                        "value": "true",
                        "attribute": "aria-disabled"
                    }
                ]
            },
            {
                "selector": ".k-menu-expand-arrow",
                "checks": [
                    {
                        "selector": ".k-menu-expand-arrow",
                        "id": "k-menu-arrow-hidden",
                        "test": true,
                        "usage": "The Menu item expand arrow elements are hidden from the assistive technologies.",
                        "value": "true",
                        "attribute": "aria-hidden"
                    }
                ]
            },
            {
                "selector": ".k-menu-popup .k-menu-group",
                "checks": [
                    {
                        "selector": ".k-menu-popup .k-menu-group",
                        "id": "k-menu-nested-menu-role",
                        "test": true,
                        "usage": "The role of the nested (not root-level) menu displayed in a popup.",
                        "value": "menu",
                        "attribute": "role"
                    },
                    {
                        "id": "k-menu-nested-menu-id",
                        "test": true,
                        "usage": "Each nested menu has a deterministic id attribute that is linked to the aria-controls attribute ot its parent.",
                        "attribute": "id"
                    }
                ]
            }
        ]
    },
    "multiselect": {
        "component": "multiselect",
        "rules": [
            {
                "selector": ".k-input-inner",
                "checks": [
                    {
                        "selector": ".k-input-inner",
                        "id": "k-multiselect-role",
                        "test": true,
                        "usage": "Announces the presence of a combobox as the inner element of the MultiSelect used for filtering.",
                        "value": "combobox",
                        "attribute": "role"
                    },
                    {
                        "id": "k-multiselect-label",
                        "test": true,
                        "usage": "The input needs an accessible name that will be assigned to it.",
                        "multiple": true,
                        "attribute": [
                            "label for",
                            "aria-label",
                            "aria-labelledby"
                        ]
                    },
                    {
                        "id": "k-multiselect-expanded",
                        "test": true,
                        "usage": "Announces the state of the popup visibility.",
                        "attribute": "aria-expanded",
                        "value": [
                            "true",
                            "false"
                        ]
                    },
                    {
                        "id": "k-multiselect-controls",
                        "test": true,
                        "usage": "Points to the listbox element. Signifies that the `combobox` element controls the `listbox` one.",
                        "value": "[role='listbox'] id",
                        "attribute": "aria-controls"
                    },
                    {
                        "id": "k-multiselect-autocomplete",
                        "test": true,
                        "when": "filterable",
                        "usage": "When the filtering feature is enabled, the attribute is rendered and the value is set to the list.",
                        "value": "list",
                        "attribute": "aria-autocomplete"
                    },
                    {
                        "id": "k-multiselect-describedby",
                        "test": true,
                        "usage": "Points to the `taglist` element that contains the selected items.",
                        "value": ".k-chip-list id",
                        "attribute": "aria-describedby"
                    },
                    {
                        "id": "k-multiselect-activedescendent",
                        "test": true,
                        "when": "open",
                        "usage": "Points to the focused item,which is either an item from the popup or a tag item from the selected items. The focused item is changed through keyboard navigation. If the focus is not currently on a tag item and the popup is not visible, the attribute must not point to any element or must be removed.",
                        "value": ".k-list-item.k-focus id",
                        "attribute": "aria-activedescendant"
                    },
                    {
                        "id": "k-multiselect-readonly",
                        "test": true,
                        "when": "readonly",
                        "usage": "The attribute is rendered only when the MultiSelect is read-only.",
                        "value": "true",
                        "attribute": "aria-readonly"
                    },
                    {
                        "id": "k-multiselect-busy",
                        "test": true,
                        "when": "loading",
                        "usage": "The attribute is rendered only when the MultiSelect is loading data.",
                        "value": "true",
                        "attribute": "aria-busy"
                    },
                    {
                        "id": "k-multiselect-tabindex",
                        "test": true,
                        "usage": "The element must be focusable.",
                        "value": "0",
                        "attribute": "tabindex"
                    }
                ]
            },
            {
                "selector": ".k-disabled .k-input-inner",
                "checks": [
                    {
                        "selector": ".k-disabled .k-input-inner",
                        "id": "k-multiselect-disabled",
                        "test": true,
                        "usage": "The attribute is rendered only when the MultiSelect is disabled.",
                        "value": "true",
                        "attribute": "aria-disabled"
                    }
                ]
            },
            {
                "selector": ".k-input-button",
                "checks": [
                    {
                        "selector": ".k-input-button",
                        "id": "k-multiselect-arrow-role",
                        "test": true,
                        "usage": "The element must either be a `<button>` element or have the `role=\"button\"` assigned.",
                        "value": "button",
                        "attribute": [
                            "role=button",
                            "nodeName=button"
                        ]
                    },
                    {
                        "id": "k-multiselect-arrow-label",
                        "test": true,
                        "usage": "The button needs an accessible name that will be assigned to it.",
                        "attribute": "aria-label"
                    },
                    {
                        "id": "k-multiselect-arrow-tabindex",
                        "test": true,
                        "usage": "The button element must not be focusable.",
                        "value": "-1",
                        "attribute": "tabindex"
                    }
                ]
            },
            {
                "selector": ".k-animation-container",
                "checks": [
                    {
                        "selector": ".k-animation-container",
                        "test": true,
                        "id": "k-popuplist-role",
                        "attribute": "role",
                        "value": "region",
                        "usage": "When the component container is appended to the `<body>` element of the document, it requires you to assing a `landmark` role to it. Otherwise, append it to an element with an appropriate `landmark` role."
                    },
                    {
                        "test": true,
                        "id": "k-popuplist-label",
                        "multiple": true,
                        "attribute": [
                            "aria-label",
                            "aria-labelledby"
                        ],
                        "usage": "When the container has a `region` role assigned, povides a label."
                    }
                ]
            },
            {
                "selector": ".k-list .k-no-data",
                "checks": [
                    {
                        "selector": ".k-list .k-no-data",
                        "test": true,
                        "id": "k-no-data-aria-live",
                        "attribute": "aria-live",
                        "value": "polite",
                        "usage": "Identifies the element as a live region in the `polite` state, meaning assistive technology users are informed about changes to the region at the next available opportunity."
                    }
                ]
            },
            {
                "selector": ".k-list-item-icon-wrapper",
                "checks": [
                    {
                        "selector": ".k-list-item-icon-wrapper",
                        "id": "k-popuplist-item-icon-wrapper-presentation",
                        "test": true,
                        "usage": "Indicates that the icon wrapper is decorative and should be ignored by assistive technologies.",
                        "value": "presentation",
                        "attribute": "role"
                    }
                ]
            },
            {
                "selector": ".k-list-item-icon",
                "checks": [
                    {
                        "selector": ".k-list-item-icon",
                        "id": "k-popuplist-item-icon-hidden",
                        "test": true,
                        "when": "icon present",
                        "usage": "Ensures that the icon itself is hidden from assistive technologies since it is decorative.",
                        "value": "true",
                        "attribute": "aria-hidden"
                    }
                ]
            },
            {
                "selector": ".k-list-item.k-selected",
                "checks": [
                    {
                        "selector": ".k-list-item.k-selected",
                        "test": true,
                        "id": "k-popuplist-item-selected",
                        "attribute": "aria-selected",
                        "value": "true",
                        "usage": "Indicates the selected state of the item."
                    }
                ]
            },
            {
                "selector": ".k-list-ul",
                "checks": [
                    {
                        "selector": ".k-list-ul",
                        "id": "k-popuplist-group-role",
                        "test": true,
                        "usage": "When data is grouped, role is group, otherwise - listbox.",
                        "value": [
                            "listbox",
                            "group"
                        ],
                        "attribute": "role"
                    }
                ]
            },
            {
                "selector": ".k-list-group-item",
                "checks": [
                    {
                        "selector": ".k-list-group-item",
                        "test": true,
                        "id": "k-popuplist-group-item-role",
                        "attribute": "role",
                        "value": "presentation",
                        "usage": "The group header has role='presentation' since the grouping semantics are provided by the ul[role=group]."
                    },
                    {
                        "test": true,
                        "id": "k-popuplist-group-header-id",
                        "attribute": "id",
                        "usage": "Provides an id for the group header that is referenced by the group's aria-labelledby attribute."
                    }
                ]
            },
            {
                "selector": ".k-list-ul .k-list-item",
                "checks": [
                    {
                        "selector": ".k-list-ul .k-list-item",
                        "id": "k-popuplist-grouped-item-role",
                        "test": true,
                        "usage": "Items within a group maintain the option role.",
                        "value": "option",
                        "attribute": "role"
                    }
                ]
            }
        ]
    },
    "multiselecttree": {
        "component": "multiselecttree",
        "rules": [
            {
                "selector": ".k-multiselecttree",
                "checks": [
                    {
                        "selector": ".k-multiselecttree",
                        "id": "k-multiselecttree-role",
                        "test": true,
                        "usage": "Announces the presence of a combobox as inner element of the multiselect used for filtering.",
                        "value": "combobox",
                        "attribute": "role"
                    },
                    {
                        "id": "k-multiselecttree-label",
                        "test": true,
                        "usage": "The input needs an accessible name to be assigned to it.",
                        "multiple": true,
                        "attribute": [
                            "label for",
                            "aria-label",
                            "aria-labelledby"
                        ]
                    },
                    {
                        "id": "k-multiselecttree-haspopup",
                        "test": true,
                        "usage": "Indicates the presence of a tree popup.",
                        "value": "tree",
                        "attribute": "aria-haspopup"
                    },
                    {
                        "id": "k-multiselecttree-expanded",
                        "test": true,
                        "usage": "Announces the state of the visibility of the popup.",
                        "attribute": "aria-expanded",
                        "value": [
                            "true",
                            "false"
                        ]
                    },
                    {
                        "id": "k-multiselecttree-controls",
                        "test": true,
                        "usage": "Points to the treeview element. Signifies that the `combobox` element controls the `treeview`.",
                        "value": ".k-treeview id",
                        "attribute": "aria-controls"
                    },
                    {
                        "id": "k-multiselecttree-autocomplete",
                        "test": true,
                        "when": "filterable",
                        "usage": "Attribute is rendered and value is set to list when **filtering** feature is enabled.",
                        "value": "list",
                        "attribute": "aria-autocomplete"
                    },
                    {
                        "id": "k-multiselecttree-describedby",
                        "test": true,
                        "usage": "Points to the taglist element that contains the selected items.",
                        "value": ".k-chip-list id",
                        "attribute": "aria-describedby"
                    },
                    {
                        "id": "k-multiselecttree-readonly",
                        "test": true,
                        "when": "readonly",
                        "usage": "Attribute is rendered only when the multiselect is readonly.",
                        "value": "true",
                        "attribute": "aria-readonly"
                    },
                    {
                        "id": "k-multiselecttree-busy",
                        "test": true,
                        "when": "loading",
                        "usage": "Attribute is rendered only when the multiselect is loading data.",
                        "value": "true",
                        "attribute": "aria-busy"
                    },
                    {
                        "id": "k-multiselecttree-tabindex",
                        "test": true,
                        "usage": "The element should be focusable.",
                        "value": "0",
                        "attribute": "tabindex"
                    }
                ]
            },
            {
                "selector": ".k-multiselecttree.k-disabled",
                "checks": [
                    {
                        "selector": ".k-multiselecttree.k-disabled",
                        "id": "k-multiselecttree-disabled",
                        "test": true,
                        "usage": "Attribute is rendered only when the multiselect is disabled.",
                        "value": "true",
                        "attribute": "aria-disabled"
                    }
                ]
            },
            {
                "selector": ".k-input-button",
                "checks": [
                    {
                        "selector": ".k-input-button",
                        "id": "k-multiselecttree-arrow-role",
                        "test": true,
                        "usage": "The element should either be a `<button>` element or should have `role=\"button\"` assigned.",
                        "value": "button",
                        "attribute": "role"
                    },
                    {
                        "id": "k-multiselecttree-arrow-label",
                        "test": true,
                        "usage": "The button needs an accessible name to be assigned to it.",
                        "attribute": "aria-label"
                    },
                    {
                        "id": "k-multiselecttree-arrow-tabindex",
                        "test": true,
                        "usage": "Button element should not be focusable.",
                        "value": "-1",
                        "attribute": "tabindex"
                    }
                ]
            },
            {
                "selector": ".k-animation-container",
                "checks": [
                    {
                        "selector": ".k-animation-container",
                        "test": true,
                        "id": "k-multiselecttree-popuplist-role",
                        "attribute": "role",
                        "value": "region",
                        "usage": "When the component container is appended to the `<body>` element of the document, it needs a landmark role to be assigned to it. Otherwise, it should be appended to an element with an appropriate landmark role."
                    },
                    {
                        "test": true,
                        "id": "k-multiselecttree-popuplist-label",
                        "multiple": true,
                        "attribute": [
                            "aria-label",
                            "aria-labelledby"
                        ],
                        "usage": "Provides a label when the container has a `region` role assigned."
                    }
                ]
            }
        ]
    },
    "multiviewcalendar": {
        "component": "multiviewcalendar",
        "rules": [
            {
                "selector": ".k-calendar-view",
                "checks": [
                    {
                        "selector": ".k-calendar-view",
                        "id": "k-multiviewcalendar-role",
                        "test": true,
                        "usage": "Specifies the role of the Calendar dates table.",
                        "value": "grid",
                        "attribute": "role"
                    },
                    {
                        "id": "k-multiviewcalendar-label",
                        "test": true,
                        "usage": "Pointing to the `k-calendar-title` element (e.g. `March 2022 - April 2022`).",
                        "attribute": "aria-labelledby"
                    },
                    {
                        "id": "k-multiviewcalendar-activedescendant",
                        "test": true,
                        "usage": "Pointing to the currently active (focused) date/month/year/decade cell in the table.",
                        "attribute": "aria-activedescendant",
                        "value": ".k-calendar-td.k-focus id"
                    },
                    {
                        "id": "k-multiviewcalendar-tabindex",
                        "test": true,
                        "usage": "Makes the grid focusable.",
                        "value": "0",
                        "attribute": "tabindex"
                    }
                ]
            },
            {
                "selector": ".k-calendar-table",
                "checks": [
                    {
                        "selector": ".k-calendar-table",
                        "id": "k-multiviewcalendar-table-role",
                        "test": true,
                        "usage": "All `k-calendar-table` elements must have their role set to `none`. That is because their content must be made belonging to a single `grid` component.",
                        "value": "none",
                        "attribute": "role"
                    }
                ]
            },
            {
                "selector": ".k-content:first-of-type>.k-calendar-head",
                "checks": [
                    {
                        "selector": ".k-content:first-of-type>.k-calendar-head",
                        "id": "k-multiviewcalendar-thead-role",
                        "test": true,
                        "usage": "The first `k-calendar-thead` must explicitly have its role set to `rowgroup` as its semantics has been removed while setting its `<table>` role to `none`.",
                        "value": "rowgroup",
                        "attribute": "role"
                    }
                ]
            },
            {
                "selector": ".k-calendar-tbody",
                "checks": [
                    {
                        "selector": ".k-calendar-tbody",
                        "id": "k-multiviewcalendar-tbody-role",
                        "test": true,
                        "usage": "The `k-calendar-tbody` elements must explicitly have their roles set to `rowgroup` as their semantics have been removed while setting their `<table>` elements role to `none`.",
                        "value": "rowgroup",
                        "attribute": "role"
                    }
                ]
            },
            {
                "selector": ".k-content:first-of-type>.k-calendar-head>.k-calendar-tr,.k-calendar-head>.k-calendar-tr",
                "checks": [
                    {
                        "selector": ".k-content:first-of-type>.k-calendar-head>.k-calendar-tr,.k-calendar-head>.k-calendar-tr",
                        "id": "k-multiviewcalendar-tr-role",
                        "test": true,
                        "usage": "The `k-calendar-tr` elements must explicitly have their roles set to `row` as their semantics have been removed while setting their `<table>` elements role to `none`. Does not apply for fully empty rows, header rows after the first month, and initial data rows in Month views after the first month that have at least one cell missing",
                        "value": "row",
                        "attribute": "role"
                    }
                ]
            },
            {
                "selector": ".k-content:first-of-type>.k-calendar-head>.k-calendar-tr>.k-calendar-th",
                "checks": [
                    {
                        "selector": ".k-content:first-of-type>.k-calendar-head>.k-calendar-tr>.k-calendar-th",
                        "id": "k-multiviewcalendar-th-first-row-role",
                        "test": true,
                        "usage": "The `k-calendar-th` elements must explicitly have their roles set to `columnheader` as their semantics have been removed while setting their `<table>` elements role to `none`.",
                        "value": "columnheader",
                        "attribute": "role"
                    },
                    {
                        "id": "k-multiviewcalendar-th-first-row-scope",
                        "test": true,
                        "usage": "Specifies that the header is applied to a column.",
                        "value": "col",
                        "attribute": "scope"
                    },
                    {
                        "id": "k-multiviewcalendar-th-first-row-label",
                        "test": true,
                        "usage": "Specifies the full name of the day of the week (the column header).",
                        "attribute": "aria-label"
                    }
                ]
            },
            {
                "selector": ".k-calendar-td:not(.k-out-of-range)",
                "checks": [
                    {
                        "selector": ".k-calendar-td:not(.k-out-of-range)",
                        "id": "k-multiviewcalendar-td-role",
                        "test": true,
                        "usage": "The cells must explicitly have their roles set to `gridcell` as their semantics have been removed while setting their `<table>` elements role to `none`.",
                        "value": "gridcell",
                        "attribute": "role"
                    },
                    {
                        "id": "k-multiviewcalendar-td-label",
                        "test": true,
                        "when": "yearView",
                        "usage": "Applicable in year view - for better context contains the full name of the month. May also be applied in month view to specify the full text for a date.",
                        "multiple": true,
                        "attribute": [
                            "aria-label ",
                            "title"
                        ]
                    }
                ]
            },
            {
                "selector": ".k-calendar-td.k-selected",
                "checks": [
                    {
                        "selector": ".k-calendar-td.k-selected",
                        "id": "k-multiviewcalendar-td-selected",
                        "test": true,
                        "usage": "Specifies whether the date is selected or not.",
                        "attribute": "aria-selected"
                    }
                ]
            },
            {
                "selector": ".k-calendar-td.k-disabled",
                "checks": [
                    {
                        "selector": ".k-calendar-td.k-disabled",
                        "id": "k-multiviewcalendar-td-disabled",
                        "test": true,
                        "usage": "When a date is not available for selection, its gridcell element must have the attribute set to `true`.",
                        "attribute": "aria-disabled"
                    }
                ]
            },
            {
                "selector": ".k-content:first-of-type>.k-calendar-tbody>.k-calendar-tr:first-of-type>.k-out-of-range",
                "checks": [
                    {
                        "selector": ".k-content:first-of-type>.k-calendar-tbody>.k-calendar-tr:first-of-type>.k-out-of-range",
                        "id": "k-multiviewcalendar-td-first-row-empty-role",
                        "test": true,
                        "usage": "The cells must explicitly have their roles set to `gridcell` as their semantics have been removed while setting their `<table>` elements role to `none`.",
                        "value": "gridcell",
                        "attribute": "role"
                    }
                ]
            },
            {
                "selector": ".k-prev-view,.k-next-view",
                "checks": [
                    {
                        "selector": ".k-prev-view,.k-next-view",
                        "id": "k-multiviewcalendar-arrows-tabindex",
                        "test": true,
                        "usage": "The buttons must not be focusable.",
                        "value": "-1",
                        "attribute": "tabindex"
                    }
                ]
            },
            {
                "selector": ".k-calendar-title",
                "checks": [
                    {
                        "selector": ".k-calendar-title",
                        "id": "k-multiviewcalendar-title-tabindex",
                        "test": true,
                        "usage": "The button must not be focusable.",
                        "value": "-1",
                        "attribute": "tabindex"
                    }
                ]
            },
            {
                "selector": ".k-nav-today",
                "checks": [
                    {
                        "selector": ".k-nav-today",
                        "id": "k-multiviewcalendar-today-tabindex",
                        "test": true,
                        "usage": "The link must not be focusable.",
                        "value": "-1",
                        "attribute": "tabindex"
                    }
                ]
            }
        ]
    },
    "notification": {
        "component": "notification",
        "rules": [
            {
                "selector": ".k-notification",
                "checks": [
                    {
                        "selector": ".k-notification",
                        "id": "k-notification-role",
                        "test": true,
                        "usage": "Notification element should be marked as an alert.",
                        "value": "alert",
                        "attribute": "role"
                    },
                    {
                        "id": "k-notification-live",
                        "test": true,
                        "usage": "The aria-live value must be set to `polite`, so that it will not obscure other essential information while announced.",
                        "value": "polite",
                        "attribute": "aria-live"
                    },
                    {
                        "id": "k-notification-label",
                        "test": true,
                        "usage": "The Notification needs an accessible name to be assigned to it. The label holds info about the type of the Notification (error, warning, info, etc.)",
                        "multiple": true,
                        "attribute": [
                            "aria-label",
                            "aria-labelledby"
                        ]
                    },
                    {
                        "id": "k-notification-described",
                        "test": true,
                        "usage": "USed so that the content of the Notification will be announced by the assistive technologies.",
                        "multiple": true,
                        "attribute": "aria-describedby",
                        "value": ".k-notification-content id"
                    }
                ]
            },
            {
                "selector": ".k-i-close,.k-svg-i-close",
                "checks": [
                    {
                        "selector": ".k-i-close,.k-svg-i-close",
                        "id": "k-notification-close-hidden",
                        "test": true,
                        "usage": "The close button of the notification (if any) should not be present in the accessibility tree.",
                        "value": "true",
                        "attribute": "aria-hidden"
                    }
                ]
            }
        ]
    },
    "numerictextbox": {
        "component": "numerictextbox",
        "rules": [
            {
                "selector": ".k-input-inner",
                "checks": [
                    {
                        "selector": ".k-input-inner",
                        "id": "k-numerictextbox-role",
                        "test": true,
                        "usage": "Announces the spin button capabilities of the NumericTextBox.",
                        "value": "spinbutton",
                        "attribute": "role"
                    },
                    {
                        "id": "k-numerictextbox-label",
                        "test": true,
                        "usage": "The input requires an accessible name that will be assigned to it.",
                        "attribute": [
                            "label for",
                            "aria-label",
                            "aria-labelledby"
                        ]
                    },
                    {
                        "id": "k-numerictextbox-valuenow",
                        "test": true,
                        "when": "value",
                        "usage": "Announces the value for the component.",
                        "attribute": "aria-valuemnow"
                    }
                ]
            },
            {
                "selector": ".k-disabled .k-input-inner",
                "checks": [
                    {
                        "selector": ".k-disabled .k-input-inner",
                        "id": "k-numerictextbox-disabled",
                        "test": true,
                        "usage": "The attribute is rendered only when the NumericTextBox is disabled.",
                        "multiple": true,
                        "attribute": [
                            "disabled=disabled",
                            "aria-disabled=true"
                        ]
                    }
                ]
            },
            {
                "selector": ".k-spin-button>.k-button",
                "checks": [
                    {
                        "selector": ".k-spin-button>.k-button",
                        "id": "k-numerictextbox-spinbutton-role",
                        "test": true,
                        "usage": "Announces the spin button capabilities of the NumericTextBox.",
                        "attribute": [
                            "role=button",
                            "nodeName=button"
                        ]
                    },
                    {
                        "id": "k-numerictextbox-spinbutton-label",
                        "test": true,
                        "usage": "The button element must have discernible text.",
                        "attribute": "aria-label"
                    }
                ]
            },
            {
                "selector": ".k-numerictextbox.k-disabled .k-spin-button>.k-button",
                "checks": [
                    {
                        "selector": ".k-numerictextbox.k-disabled .k-spin-button>.k-button",
                        "id": "k-numerictextbox-spinbutton-disabled",
                        "test": true,
                        "multiple": true,
                        "usage": "Attribute is rendered only when the picker is disabled.",
                        "attribute": [
                            "disabled",
                            "aria-disabled"
                        ]
                    }
                ]
            }
        ]
    },
    "onetimepassword": {
        "component": "onetimepassword",
        "rules": [
            {
                "selector": ".k-otp",
                "checks": [
                    {
                        "selector": ".k-otp",
                        "id": "k-otp-role",
                        "test": true,
                        "usage": "Sets the proper role for the OTP.",
                        "value": "group",
                        "attribute": "role"
                    }
                ]
            },
            {
                "selector": ".k-otp>input",
                "checks": [
                    {
                        "selector": ".k-otp>input",
                        "id": "k-otp-hidden-input",
                        "test": true,
                        "usage": "The hidden input holding the OTP inputs value.",
                        "value": "hidden",
                        "attribute": "type"
                    },
                    {
                        "id": "k-otp-aria-hidden-input",
                        "test": true,
                        "usage": "Hides the hidden input from assistive technologies.",
                        "value": "true",
                        "attribute": "aria-hidden"
                    }
                ]
            },
            {
                "selector": ".k-otp-input .k-input-inner",
                "checks": [
                    {
                        "selector": ".k-otp-input .k-input-inner",
                        "id": "k-otp-input-label",
                        "test": true,
                        "usage": "The input needs an accessible name to be assigned to it.",
                        "attribute": [
                            "label for",
                            "aria-label",
                            "aria-labelledby"
                        ]
                    },
                    {
                        "id": "k-otp-autocomplete",
                        "test": true,
                        "usage": "Sets the default autocomplete for the input.",
                        "value": "off",
                        "attribute": "autocomplete"
                    }
                ]
            },
            {
                "selector": ".k-invalid .k-input-inner,.ng-invalid .k-input-inner",
                "checks": [
                    {
                        "selector": ".k-invalid .k-input-inner,.ng-invalid .k-input-inner",
                        "test": true,
                        "id": "k-otp-invalid",
                        "usage": "The attribute is rendered only when the OTP is in a form and announces the valid state of the component.",
                        "value": "true",
                        "attribute": "aria-invalid"
                    }
                ]
            },
            {
                "selector": ".k-disabled .k-input-inner",
                "checks": [
                    {
                        "selector": ".k-disabled .k-input-inner",
                        "id": "k-otp-input-disabled",
                        "test": true,
                        "usage": "The attribute is rendered only when the OTP is disabled.",
                        "multiple": true,
                        "attribute": [
                            "disabled=disabled",
                            "aria-disabled=true"
                        ]
                    }
                ]
            }
        ]
    },
    "orgchart": {
        "component": "orgchart",
        "rules": [
            {
                "selector": ".k-orgchart-level-1",
                "checks": [
                    {
                        "selector": ".k-orgchart-level-1",
                        "id": "k-orgchart-role",
                        "test": true,
                        "usage": "The root `div` element of the OrgChart. Contains all its top level items.",
                        "value": "tree",
                        "attribute": "role"
                    },
                    {
                        "id": "k-orgchart-orientation",
                        "test": true,
                        "usage": "Specifies the orientation of the OrgChart tree.",
                        "value": "horizontal",
                        "attribute": "aria-orientation"
                    }
                ]
            },
            {
                "selector": ".k-orgchart-group:not(.k-orgchart-level-1)",
                "checks": [
                    {
                        "selector": ".k-orgchart-group:not(.k-orgchart-level-1)",
                        "id": "k-orgchart-group-role",
                        "test": true,
                        "usage": "The element that wraps child nodes.",
                        "value": "group",
                        "attribute": "role"
                    }
                ]
            },
            {
                "selector": ".k-orgchart-card",
                "checks": [
                    {
                        "selector": ".k-orgchart-card",
                        "id": "k-orgchart-item-role",
                        "test": true,
                        "usage": "The card (node) representing the treeitem in the hierarchical structure.",
                        "value": "treeitem",
                        "attribute": "role"
                    },
                    {
                        "id": "k-orgchart-item-level",
                        "test": true,
                        "usage": "Announces the level of the tree node item. The value of level is number-based(>=1).",
                        "attribute": "aria-level"
                    },
                    {
                        "id": "k-orgchart-item-key",
                        "test": true,
                        "usage": "Announces the that the edit menu of the OrgChart can be activated via the Enter key.",
                        "attribute": "aria-keyshortcuts",
                        "value": "Enter"
                    }
                ]
            },
            {
                "selector": ".k-orgchart-card.k-focus",
                "checks": [
                    {
                        "selector": ".k-orgchart-card.k-focus",
                        "id": "k-orgchart-item-selected",
                        "test": true,
                        "usage": "Announces the selected (focused) item in the OrgChart.",
                        "value": "true",
                        "attribute": "aria-selected"
                    }
                ]
            },
            {
                "selector": ".k-orgchart-card:not(.k-focus)",
                "checks": [
                    {
                        "selector": ".k-orgchart-card:not(.k-focus)",
                        "id": "k-orgchart-item-notselected",
                        "test": true,
                        "usage": "Announces the not selected (focused) items in the OrgChart.",
                        "value": "false",
                        "attribute": "aria-selected"
                    }
                ]
            },
            {
                "selector": ".k-avatar-image img",
                "checks": [
                    {
                        "selector": ".k-avatar-image img",
                        "id": "k-orgchart-item-avatar-alt",
                        "test": true,
                        "usage": "Describes the avatar image of an item. Normally contains the name of the person/function represented by the item.",
                        "attribute": "alt"
                    }
                ]
            },
            {
                "selector": ".k-orgchart-card-menu",
                "checks": [
                    {
                        "selector": ".k-orgchart-card-menu",
                        "id": "k-orgchart-menu-button-role",
                        "test": true,
                        "usage": "Specifies the menu icon of the item is a button.",
                        "attribute": "role",
                        "value": "button"
                    },
                    {
                        "id": "k-orgchart-menu-button-label",
                        "test": true,
                        "usage": "Provides an accessible name for the edit button, as it does not contain text.",
                        "attribute": "aria-label",
                        "value": "Edit menu"
                    },
                    {
                        "id": "k-orgchart-menu-button-tabindex",
                        "test": true,
                        "usage": "The Edit menu button must not be part of the page tab sequence.",
                        "attribute": "tabindex",
                        "value": "-1"
                    }
                ]
            },
            {
                "selector": ".k-orgchart-button",
                "checks": [
                    {
                        "selector": ".k-orgchart-button",
                        "id": "k-orgchart-expand-button-role",
                        "test": true,
                        "usage": "Specifies the expand/collapse element of the OrgChart as a button.",
                        "attribute": [
                            "role=button",
                            "nodeName=button"
                        ]
                    },
                    {
                        "id": "k-orgchart-expand-button-label",
                        "test": true,
                        "usage": "Provides an accessible name for the expand/collapse button, as it does not contain text.",
                        "attribute": "aria-label"
                    },
                    {
                        "id": "k-orgchart-expand-button-tabindex",
                        "test": true,
                        "usage": "The expand/collapse button must not be part of the page tab sequence.",
                        "attribute": "tabindex",
                        "value": "-1"
                    }
                ]
            }
        ]
    },
    "pager": {
        "component": "pager",
        "rules": [
            {
                "selector": ".k-pager",
                "checks": [
                    {
                        "selector": ".k-pager",
                        "id": "k-pager-role",
                        "test": true,
                        "usage": "Indicates that the `pager` element has its own keyboard navigation implemented.",
                        "value": "application",
                        "attribute": "role"
                    },
                    {
                        "id": "k-pager-roledescription",
                        "test": true,
                        "usage": "Clarifies the role of the Pager.",
                        "value": "pager",
                        "attribute": "aria-roledescription"
                    },
                    {
                        "id": "k-pager-keyshortcuts",
                        "test": true,
                        "usage": "Announces the available keyboard shortcuts while the `pager` element is focused.",
                        "value": "Enter ArrowRight ArrowLeft",
                        "attribute": "aria-keyshortcuts"
                    },
                    {
                        "id": "k-pager-label",
                        "test": true,
                        "usage": "Announces the currently selected page and the number of available pages.",
                        "attribute": "aria-label"
                    }
                ]
            },
            {
                "selector": ".k-pager-nav",
                "checks": [
                    {
                        "selector": ".k-pager-nav",
                        "id": "k-pager-nav-role",
                        "test": true,
                        "usage": "Specifies the role of the element.",
                        "attribute": [
                            "role=button",
                            "nodeName=button"
                        ]
                    },
                    {
                        "id": "k-pager-nav-disabled",
                        "test": true,
                        "when": "disabled",
                        "usage": "The attribute is present when the the `Arrow` button is disabled, for example, present on the **Previous** button when the current page is the first one.",
                        "value": "true",
                        "attribute": "aria-disabled"
                    },
                    {
                        "id": "k-pager-nav-title",
                        "test": true,
                        "usage": "Specifies the purpose of each button.",
                        "attribute": "title"
                    },
                    {
                        "id": "k-pager-numbers-label",
                        "test": true,
                        "usage": "Specifies the purpose of each link, for example, `Page 6`.",
                        "multiple": true,
                        "attribute": [
                            "aria-label",
                            "title"
                        ]
                    },
                    {
                        "id": "k-pager-numbers-current",
                        "test": true,
                        "usage": "The attribute must be present on the currently selected page element.",
                        "value": "page",
                        "attribute": "aria-current"
                    }
                ]
            },
            {
                "selector": ".k-pager-sizes>.k-dropdownlist",
                "checks": [
                    {
                        "selector": ".k-pager-sizes>.k-dropdownlist",
                        "id": "k-pager-sizes-label",
                        "test": true,
                        "usage": "The element requires an \"aria-label\" to specify its purpose.",
                        "attribute": "aria-label"
                    }
                ]
            },
            {
                "selector": ".k-pager-numbers-wrap>.k-dropdown",
                "checks": [
                    {
                        "selector": ".k-pager-numbers-wrap>.k-dropdown",
                        "id": "k-pager-select-label",
                        "test": true,
                        "usage": "The element requires an \"aria-label\" to specify its purpose.",
                        "attribute": "aria-label"
                    }
                ]
            },
            {
                "selector": ".k-pager-input>.k-input>.k-input-inner",
                "checks": [
                    {
                        "selector": ".k-pager-input>.k-input>.k-input-inner",
                        "id": "k-pager-input-label",
                        "test": true,
                        "usage": "The element requires an \"aria-label\" to specify its purpose.",
                        "attribute": "aria-label"
                    }
                ]
            }
        ]
    },
    "panelbar": {
        "component": "panelbar",
        "rules": [
            {
                "selector": ".k-panelbar",
                "checks": [
                    {
                        "selector": ".k-panelbar",
                        "id": "k-panelbar-role",
                        "test": true,
                        "usage": "The root element of the PanelBar has role `tree`.",
                        "value": "tree",
                        "attribute": "role"
                    },
                    {
                        "id": "k-panelbar-activedescendent",
                        "test": true,
                        "when": "focused",
                        "usage": "Points to the currently focused item in the PanelBar.",
                        "value": ".k-item id",
                        "attribute": "aria-activedescendant"
                    }
                ]
            },
            {
                "selector": ".k-panelbar-group",
                "checks": [
                    {
                        "selector": ".k-panelbar-group",
                        "id": "k-panelbar-group-role",
                        "test": true,
                        "usage": "The `ul` element that wraps child nodes.",
                        "value": "group",
                        "attribute": "role"
                    }
                ]
            },
            {
                "selector": "[aria-expanded='false']>.k-panelbar-group",
                "checks": [
                    {
                        "selector": "[aria-expanded='false']>.k-panelbar-group",
                        "id": "k-panelbar-group-hidden",
                        "test": true,
                        "usage": "Hides the `group` element from assistive technologies when its parent is not expanded.",
                        "value": "true",
                        "attribute": "aria-hidden"
                    }
                ]
            },
            {
                "selector": ".k-item",
                "checks": [
                    {
                        "selector": ".k-item",
                        "id": "k-panelbar-item-role",
                        "test": true,
                        "usage": "The `li` element rendered for a PanelBar item.",
                        "value": "treeitem",
                        "attribute": "role"
                    },
                    {
                        "id": "k-panelbar-item-expanded",
                        "test": true,
                        "when": "has children",
                        "usage": "Announces the expanded state of the item (if expandable). It is `true` when expanded, and `false` when collapsed.",
                        "value": [
                            "true",
                            "false"
                        ],
                        "attribute": "aria-expanded"
                    },
                    {
                        "id": "k-panelbar-item-selected",
                        "test": true,
                        "usage": "Announces the selected state of the item.",
                        "attribute": "aria-selected",
                        "value": [
                            "true",
                            "false"
                        ]
                    }
                ]
            }
        ]
    },
    "pdfviewer": {
        "component": "pdfviewer",
        "rules": [
            {
                "selector": ".k-pdfviewer .k-canvas",
                "checks": [
                    {
                        "selector": ".k-pdfviewer .k-canvas",
                        "id": "k-pdfviewer-canvas-focusable",
                        "test": true,
                        "usage": "Defines the focusable page container element.",
                        "value": "0",
                        "attribute": "tabindex"
                    },
                    {
                        "id": "k-pdfviewer-canvas-label",
                        "usage": "Describes the purpose of the focusable container. Translatable message.",
                        "attribute": "aria-label",
                        "test": true
                    },
                    {
                        "id": "k-pdfviewer-canvas-role",
                        "usage": "Defines that content should be evaluated in reader mode by assistive technologies.",
                        "attribute": "role",
                        "test": true,
                        "value": "document"
                    }
                ]
            },
            {
                "selector": ".k-pdfviewer .k-toolbar .k-button:has(.k-svg-i-search, .k-i-search)",
                "checks": [
                    {
                        "selector": ".k-pdfviewer .k-toolbar .k-button:has(.k-svg-i-search, .k-i-search)",
                        "id": "k-pdfviewer-toolbar-search-has-popup",
                        "attribute": "aria-haspopup",
                        "value": "dialog",
                        "test": true,
                        "usage": "Describes that the Search tool button opens a dialog element."
                    }
                ]
            },
            {
                "selector": ".k-pdfviewer .k-canvas .k-search-panel",
                "checks": [
                    {
                        "selector": ".k-pdfviewer .k-canvas .k-search-panel",
                        "id": "k-pdfviewer-search-dialog-role",
                        "attribute": "role",
                        "value": "dialog",
                        "test": true,
                        "usage": "Describes the role of the Search panel."
                    },
                    {
                        "id": "k-pdfviewer-search-label",
                        "attribute": "aria-label",
                        "test": true,
                        "usage": "Translatable message, same label as the one, used to describe the Toolbar Search tool."
                    }
                ]
            }
        ]
    },
    "pivotgrid": {
        "component": "pivotgrid",
        "rules": [
            {
                "selector": ".k-pivotgrid",
                "checks": [
                    {
                        "selector": ".k-pivotgrid",
                        "id": "k-pivotgrid-role",
                        "test": true,
                        "usage": "The role specifies the element is a Data Grid.",
                        "value": "grid",
                        "attribute": "role"
                    }
                ]
            },
            {
                "selector": ".k-pivotgrid-column-headers>.k-pivotgrid-table",
                "checks": [
                    {
                        "selector": ".k-pivotgrid-column-headers>.k-pivotgrid-table",
                        "id": "k-pivotgrid-header-table-role",
                        "test": true,
                        "usage": "Negates the default semantic role of the `<table>` element.",
                        "value": [
                            "presentation",
                            "none"
                        ],
                        "attribute": "role"
                    }
                ]
            },
            {
                "selector": ".k-pivotgrid-empty-cell",
                "checks": [
                    {
                        "selector": ".k-pivotgrid-empty-cell",
                        "id": "k-pivotgrid-empty-cell-role",
                        "test": true,
                        "attribute": "role",
                        "usage": "Announces the empty cell role as a part of the programmatically constructed a11y tree.",
                        "value": "columnheader"
                    },
                    {
                        "id": "k-pivotgrid-empty-cell-colspan",
                        "attribute": "aria-colspan",
                        "test": true,
                        "usage": "Sets the correct \"aria-colspan\" corresponding to the number of columns in the row headers table."
                    },
                    {
                        "id": "k-pivotgrid-empty-cell-rowspan",
                        "attribute": "aria-rowspan",
                        "test": true,
                        "usage": "Sets the correct \"aria-rowspan\" corresponding to the number of rows in the column headers table."
                    },
                    {
                        "id": "k-pivotgrid-empty-cell-id",
                        "attribute": "id",
                        "test": true,
                        "usage": "Sets an unique identifier for the cell to be referenced from the first row in the column header table `aria-owns` attribute."
                    }
                ]
            },
            {
                "selector": ".k-pivotgrid-empty-cell>.k-sr-only",
                "checks": [
                    {
                        "selector": ".k-pivotgrid-empty-cell>.k-sr-only",
                        "id": "k-pivotgrid-empty-cell",
                        "test": true,
                        "usage": "The empty cell should have a nested span.k-sr-only element containing the localizable text message that will be announced by screen readers when the empty cell is focused.",
                        "exists": true
                    }
                ]
            },
            {
                "selector": ".k-pivotgrid-column-headers>.k-pivotgrid-table>tbody",
                "checks": [
                    {
                        "selector": ".k-pivotgrid-column-headers>.k-pivotgrid-table>tbody",
                        "id": "k-pivotgrid-header-tbody-role",
                        "test": true,
                        "usage": "Required as the owner `<table>` element has its semantic role removed.",
                        "value": "rowgroup",
                        "attribute": "role"
                    }
                ]
            },
            {
                "selector": ".k-pivotgrid-column-headers>.k-pivotgrid-table>tbody>.k-pivotgrid-row",
                "checks": [
                    {
                        "selector": ".k-pivotgrid-column-headers>.k-pivotgrid-table>tbody>.k-pivotgrid-row",
                        "id": "k-pivotgrid-header-tr-role",
                        "test": true,
                        "usage": "Required as the owner `<table>` element has its semantic role removed.",
                        "value": "row",
                        "attribute": "role"
                    }
                ]
            },
            {
                "selector": ".k-pivotgrid-column-headers>.k-pivotgrid-table>tbody>.k-pivotgrid-row:first-child",
                "checks": [
                    {
                        "selector": ".k-pivotgrid-column-headers>.k-pivotgrid-table>tbody>.k-pivotgrid-row:first-child",
                        "id": "k-pivotgrid-header-first-tr-owns",
                        "test": true,
                        "usage": "Lists the IDs of the `.k-pivotgrid-empty-cell` element AND all TD elements, children of the first column headers row (in the correct order - `EmptyID td1ID td2ID ...`), to construct the a11y tree.",
                        "attribute": "aria-owns"
                    }
                ]
            },
            {
                "selector": ".k-pivotgrid-column-headers>.k-pivotgrid-table>tbody>.k-pivotgrid-row>th",
                "checks": [
                    {
                        "selector": ".k-pivotgrid-column-headers>.k-pivotgrid-table>tbody>.k-pivotgrid-row>th",
                        "id": "k-pivotgrid-header-th-role",
                        "test": true,
                        "usage": "Required as the owner `<table>` element has its semantic role removed.",
                        "value": "columnheader",
                        "attribute": "role"
                    },
                    {
                        "id": "k-pivotgrid-header-th-expanded",
                        "test": true,
                        "usage": "Indicates the current expanded state of the header.",
                        "value": [
                            "true",
                            "false"
                        ],
                        "attribute": "aria-expanded"
                    },
                    {
                        "id": "k-pivotgrid-header-th-id",
                        "test": true,
                        "usage": "Unique and deterministic identifier, used to associate the header cell with respective data cells.",
                        "attribute": "id"
                    }
                ]
            },
            {
                "selector": ".k-i-arrow-chevron-up,.k-svg-i-arrow-chevron-up",
                "checks": [
                    {
                        "selector": ".k-i-arrow-chevron-up,.k-svg-i-arrow-chevron-up",
                        "id": "k-pivotgrid-header-th-chevron-up-hidden",
                        "test": true,
                        "usage": "Excludes the collapse icon from the screen reader output.",
                        "value": "true",
                        "attribute": "aria-hidden"
                    }
                ]
            },
            {
                "selector": ".k-i-arrow-chevron-down,.k-svg-i-arrow-chevron-down",
                "checks": [
                    {
                        "selector": ".k-i-arrow-chevron-down,.k-svg-i-arrow-chevron-down",
                        "id": "k-pivotgrid-header-th-chevron-down-hidden",
                        "test": true,
                        "usage": "Excludes the expand icon from the screen reader output.",
                        "value": "true",
                        "attribute": "aria-hidden"
                    }
                ]
            },
            {
                "selector": ".k-pivotgrid-row-headers>.k-pivotgrid-table",
                "checks": [
                    {
                        "selector": ".k-pivotgrid-row-headers>.k-pivotgrid-table",
                        "id": "k-pivotgrid-rowheader-table-role",
                        "test": true,
                        "usage": "Negates the default semantic role of the `<table>` element.",
                        "value": [
                            "none",
                            "presentation"
                        ],
                        "attribute": "role"
                    }
                ]
            },
            {
                "selector": ".k-pivotgrid-row-headers>.k-pivotgrid-table>tbody",
                "checks": [
                    {
                        "selector": ".k-pivotgrid-row-headers>.k-pivotgrid-table>tbody",
                        "id": "k-pivotgrid-rowheader-tbody-role",
                        "test": true,
                        "usage": "Required as the owner `<table>` element has its semantic role removed.",
                        "value": "rowgroup",
                        "attribute": "role"
                    }
                ]
            },
            {
                "selector": ".k-pivotgrid-row-headers>.k-pivotgrid-table>tbody>.k-pivotgrid-row",
                "checks": [
                    {
                        "selector": ".k-pivotgrid-row-headers>.k-pivotgrid-table>tbody>.k-pivotgrid-row",
                        "id": "k-pivotgrid-rowheader-tr-role",
                        "test": true,
                        "usage": "Required as the owner `<table>` element has its semantic role removed.",
                        "value": "row",
                        "attribute": "role"
                    }
                ]
            },
            {
                "selector": ".k-pivotgrid-row-headers>.k-pivotgrid-table>tbody>.k-pivotgrid-row>th",
                "checks": [
                    {
                        "selector": ".k-pivotgrid-row-headers>.k-pivotgrid-table>tbody>.k-pivotgrid-row>th",
                        "id": "k-pivotgrid-rowheader-th-role",
                        "test": true,
                        "usage": "Required as the owner `<table>` element has its semantic role removed.",
                        "value": "rowheader",
                        "attribute": "role"
                    },
                    {
                        "id": "k-pivotgrid-rowheader-th-expanded",
                        "test": true,
                        "usage": "Indicates the current expanded state of the header.",
                        "value": [
                            "true",
                            "false"
                        ],
                        "attribute": "aria-expanded"
                    }
                ]
            },
            {
                "selector": ".k-i-arrow-chevron-up,.k-svg-i-arrow-chevron-up",
                "checks": [
                    {
                        "selector": ".k-i-arrow-chevron-up,.k-svg-i-arrow-chevron-up",
                        "id": "k-pivotgrid-rowheader-chevron-up-hidden",
                        "test": true,
                        "usage": "Excludes the collapse icon from the screen reader output.",
                        "value": "true",
                        "attribute": "aria-hidden"
                    }
                ]
            },
            {
                "selector": ".k-i-arrow-chevron-down,.k-svg-i-arrow-chevron-down",
                "checks": [
                    {
                        "selector": ".k-i-arrow-chevron-down,.k-svg-i-arrow-chevron-down",
                        "id": "k-pivotgrid-rowheader-chevron-down-hidden",
                        "test": true,
                        "usage": "Excludes the expand icon from the screen reader output.",
                        "value": "true",
                        "attribute": "aria-hidden"
                    }
                ]
            },
            {
                "selector": ".k-pivotgrid-values>.k-pivotgrid-table",
                "checks": [
                    {
                        "selector": ".k-pivotgrid-values>.k-pivotgrid-table",
                        "id": "k-pivotgrid-data-table-role",
                        "test": true,
                        "usage": "Negates the default semantic role of the `<table>` element.",
                        "value": [
                            "none",
                            "presentation"
                        ],
                        "attribute": "role"
                    }
                ]
            },
            {
                "selector": ".k-pivotgrid-values>.k-pivotgrid-table>tbody",
                "checks": [
                    {
                        "selector": ".k-pivotgrid-values>.k-pivotgrid-table>tbody",
                        "id": "k-pivotgrid-data-tbody-role",
                        "test": true,
                        "usage": "The contained rows are associated with their headers through alternative mechanics.",
                        "value": [
                            "none",
                            "presentation"
                        ],
                        "attribute": "role"
                    }
                ]
            },
            {
                "selector": ".k-pivotgrid-values>.k-pivotgrid-table>tbody>.k-pivotgrid-row",
                "checks": [
                    {
                        "selector": ".k-pivotgrid-values>.k-pivotgrid-table>tbody>.k-pivotgrid-row",
                        "id": "k-pivotgrid-data-tr-role",
                        "test": true,
                        "usage": "The rows are associated with their headers through alternative mechanics.",
                        "value": [
                            "none",
                            "presentation"
                        ],
                        "attribute": "role"
                    }
                ]
            },
            {
                "selector": ".k-pivotgrid-values>.k-pivotgrid-table>tbody>.k-pivotgrid-row>td",
                "checks": [
                    {
                        "selector": ".k-pivotgrid-values>.k-pivotgrid-table>tbody>.k-pivotgrid-row>td",
                        "id": "k-pivotgrid-data-td-role",
                        "test": true,
                        "usage": "Required as the owner `<table>` element has its semantic role removed.",
                        "value": "gridcell",
                        "attribute": "role"
                    },
                    {
                        "id": "k-pivotgrid-data-td-id",
                        "test": true,
                        "usage": "Unique and deterministic identifier, used to associate the data cell with respective row header cells.",
                        "attribute": "id"
                    }
                ]
            },
            {
                "selector": ".k-pivotgrid-configurator-button",
                "checks": [
                    {
                        "selector": ".k-pivotgrid-configurator-button",
                        "id": "k-pivotgrid-configurator-button-hidden",
                        "test": true,
                        "usage": "Hide the element from the assistive technologies, as it is not focusable, and there are designated shortcuts for opening and closing the configurator.",
                        "value": "true",
                        "attribute": "aria-hidden"
                    }
                ]
            },
            {
                "selector": ".k-pivotgrid-configurator",
                "checks": [
                    {
                        "selector": ".k-pivotgrid-configurator",
                        "id": "k-pivotgrid-configurator-role",
                        "test": true,
                        "usage": "The role specifies the element is a dialog.",
                        "value": "dialog",
                        "attribute": "role"
                    },
                    {
                        "id": "k-pivotgrid-configurator-hidden",
                        "test": true,
                        "usage": "Specifies whether the configurator is visible if it is still in the DOM when closed.",
                        "value": [
                            "true",
                            "false"
                        ],
                        "attribute": "aria-hidden"
                    },
                    {
                        "id": "k-pivotgrid-configurator-label",
                        "test": true,
                        "usage": "Associates the configurator wrapper with its internal header element.",
                        "value": ".k-pivotgrid-configurator-header-text id",
                        "attribute": "aria-labelledby"
                    }
                ]
            },
            {
                "selector": ".k-pivotgrid-configurator-header-text",
                "checks": [
                    {
                        "selector": ".k-pivotgrid-configurator-header-text",
                        "id": "k-pivotgrid-configurator-header-id",
                        "test": true,
                        "usage": "Unique and deterministic identifier, used to associate the header text with elements that need to use it as a label.",
                        "attribute": "id"
                    }
                ]
            },
            {
                "selector": ".k-pivotgrid-configurator-content .k-label",
                "checks": [
                    {
                        "selector": ".k-pivotgrid-configurator-content .k-label",
                        "id": "k-pivotgrid-configurator-content-id",
                        "test": true,
                        "usage": "Unique and deterministic identifier, used to associate the label text with elements that need to use it as a label.",
                        "attribute": "id"
                    }
                ]
            },
            {
                "selector": ".k-pivotgrid-configurator-actions .k-button",
                "checks": [
                    {
                        "selector": ".k-pivotgrid-configurator-actions .k-button",
                        "id": "k-pivotgrid-configurator-action-disabled",
                        "test": true,
                        "value": [
                            "true",
                            "false"
                        ],
                        "usage": "Announces the disabled state of the configurator Cancel and Apply buttons.",
                        "attribute": "aria-disabled"
                    }
                ]
            }
        ]
    },
    "popover": {
        "component": "popover",
        "rules": [
            {
                "selector": ".k-popover",
                "checks": [
                    {
                        "selector": ".k-popover",
                        "id": "k-popover-role",
                        "test": true,
                        "usage": "Announces the tooltip (no focusable content) or dialog (contains focusable elements) role of the component.",
                        "value": [
                            "tooltip",
                            "dialog"
                        ],
                        "attribute": "role"
                    },
                    {
                        "id": "k-popover-id",
                        "test": true,
                        "usage": "The element needs an id to be associated with the aria-describedby attribute of the trigger element.",
                        "attribute": "id",
                        "when": "no focusable content"
                    }
                ]
            },
            {
                "selector": ".k-popover",
                "checks": [
                    {
                        "selector": ".k-popover",
                        "id": "k-popover-label",
                        "test": true,
                        "usage": "Links the popover container with the popover header element when there is focusable content.",
                        "attribute": "aria-labelledby",
                        "value": ".k-popover-header id",
                        "when": "focusable content"
                    },
                    {
                        "id": "k-popover-description",
                        "test": true,
                        "usage": "Links the popover container with the popover body element when there is focusable content.",
                        "attribute": "aria-describedby",
                        "value": ".k-popover-body id",
                        "when": "focusable content"
                    }
                ]
            },
            {
                "selector": ".k-popover-header",
                "checks": [
                    {
                        "selector": ".k-popover-header",
                        "id": "k-popover-header-id",
                        "test": true,
                        "usage": "Links the popover container with the popover header element when there is focusable content.",
                        "attribute": "id",
                        "when": "focusable content"
                    }
                ]
            },
            {
                "selector": ".k-popover-body",
                "checks": [
                    {
                        "selector": ".k-popover-body",
                        "id": "k-popover-body-id",
                        "test": true,
                        "usage": "Links the popover container with the popover body element when there is focusable content.",
                        "attribute": "id",
                        "when": "focusable content"
                    }
                ]
            }
        ]
    },
    "progressbar": {
        "component": "progressbar",
        "rules": [
            {
                "selector": ".k-progressbar",
                "checks": [
                    {
                        "selector": ".k-progressbar",
                        "id": "k-progressbar-role",
                        "test": true,
                        "usage": "Sets the proper role for ProgressBar.",
                        "value": "progressbar",
                        "attribute": "role"
                    },
                    {
                        "id": "k-progressbar-label",
                        "test": true,
                        "usage": "The Progressbar needs an accessible name to be assigned to it.",
                        "multiple": true,
                        "attribute": [
                            "aria-label",
                            "aria-labelledby"
                        ]
                    },
                    {
                        "id": "k-progressbar-valuenow",
                        "test": true,
                        "usage": "Only present and required if the value is not indeterminate. Set to a decimal value between 0, or \"aria-valuemin\" if present, and \"aria-valuemax\" indicating the current value of the progress bar.",
                        "attribute": "aria-valuenow"
                    },
                    {
                        "id": "k-progressbar-valuemin",
                        "test": true,
                        "usage": "Set to a decimal value representing the minimum value, and less than \"aria-valuemax\". If not present, the default value is 0.",
                        "attribute": "aria-valuemin"
                    },
                    {
                        "id": "k-progressbar-valuemax",
                        "test": true,
                        "usage": "Set to a decimal value representing the maximum value, and greater than \"aria-valuemin\". If not present, the default value is 100.",
                        "attribute": "aria-valuemax"
                    }
                ]
            }
        ]
    },
    "promptbox": {
        "component": "promptbox",
        "rules": [
            {
                "selector": ".k-prompt-box-singleline .k-prompt-box-input",
                "checks": [
                    {
                        "selector": ".k-prompt-box-singleline .k-prompt-box-input",
                        "id": "k-prompt-box-input-textbox",
                        "test": true,
                        "usage": "Ensures the input field has the proper textbox role.",
                        "multiple": true,
                        "attribute": [
                            "nodeName=input"
                        ]
                    },
                    {
                        "id": "k-prompt-box-input-label",
                        "test": true,
                        "usage": "Provides an accessible label for the input. Use `aria-label` or associate with a visible label via `aria-labelledby`.",
                        "multiple": true,
                        "attribute": [
                            "aria-label",
                            "aria-labelledby"
                        ]
                    }
                ]
            },
            {
                "selector": ".k-prompt-box-multiline .k-prompt-box-textarea",
                "checks": [
                    {
                        "selector": ".k-prompt-box-multiline .k-prompt-box-textarea",
                        "id": "k-prompt-box-textarea-textbox",
                        "test": true,
                        "usage": "Ensures the textarea has the proper textbox role.",
                        "attribute": [
                            "nodeName=textarea"
                        ]
                    },
                    {
                        "id": "k-prompt-box-textarea-label",
                        "test": true,
                        "usage": "Provides an accessible label for the textarea. Use `aria-label` or associate with a visible label via `aria-labelledby`.",
                        "multiple": true,
                        "attribute": [
                            "aria-label",
                            "aria-labelledby"
                        ]
                    },
                    {
                        "id": "k-prompt-box-textarea-multiline",
                        "test": true,
                        "usage": "Indicates the textarea supports multiple lines of text.",
                        "value": "true",
                        "attribute": "aria-multiline"
                    }
                ]
            },
            {
                "selector": ".k-prompt-box-affix .k-button",
                "checks": [
                    {
                        "selector": ".k-prompt-box-affix .k-button",
                        "id": "k-prompt-box-affix-button-role",
                        "test": true,
                        "multiple": true,
                        "usage": "Buttons in affixes must have appropriate role.",
                        "attribute": [
                            "role=button",
                            "nodeName=button"
                        ]
                    },
                    {
                        "id": "k-prompt-box-affix-button-label",
                        "test": true,
                        "usage": "Affix buttons must be properly labelled to describe their function.",
                        "attribute": "aria-label"
                    }
                ]
            },
            {
                "selector": ".k-prompt-box-affix .k-button:has(.k-svg-i-arrow-up-outline), .k-prompt-box-affix .k-button:has(.k-svg-i-stop-sm)",
                "checks": [
                    {
                        "selector": ".k-prompt-box-affix .k-button:has(.k-svg-i-arrow-up-outline), .k-prompt-box-affix .k-button:has(.k-svg-i-stop-sm)",
                        "id": "k-prompt-box-send-aria-live",
                        "test": true,
                        "usage": "The send button renders the aria-live attribute to announce the change in status.",
                        "value": "polite",
                        "attribute": "aria-live"
                    },
                    {
                        "id": "k-prompt-box-send-label",
                        "test": true,
                        "usage": "The send button is labelled to indicate its current action (e.g., 'Send prompt' or 'Stop generating').",
                        "attribute": "aria-label"
                    }
                ]
            }
        ]
    },
    "propertygrid": {
        "component": "propertygrid",
        "rules": [
            {
                "selector": ".k-grid-toolbar",
                "checks": [
                    {
                        "selector": ".k-grid-toolbar",
                        "test": true,
                        "id": "k-propertygrid-toolbar-role",
                        "attribute": "role",
                        "value": "toolbar",
                        "usage": "The toolbar is a collection of command buttons and inputs."
                    },
                    {
                        "test": true,
                        "id": "k-propertygrid-toolbar-label",
                        "attribute": "aria-label",
                        "usage": "Clarifies the purpose of the toolbar."
                    },
                    {
                        "test": true,
                        "id": "k-propertygrid-toolbar-controls",
                        "attribute": "aria-controls",
                        "value": ".k-grid-aria-root id",
                        "usage": "Points to the id of the element with `role=treegrid`."
                    }
                ]
            },
            {
                "selector": ".k-property-grid .k-grid-aria-root",
                "checks": [
                    {
                        "selector": ".k-property-grid .k-grid-aria-root",
                        "id": "k-propertygrid-role",
                        "test": true,
                        "usage": "Sets the proper role for the PropertyGrid component.",
                        "value": "treegrid",
                        "attribute": "role"
                    }
                ]
            }
        ]
    },
    "radiobutton": {
        "component": "radiobutton",
        "rules": [
            {
                "selector": ".k-radio",
                "checks": [
                    {
                        "selector": ".k-radio",
                        "id": "k-radio-type",
                        "test": true,
                        "usage": "Announces the radio type of the input.",
                        "attribute": "type",
                        "value": "radio"
                    },
                    {
                        "id": "k-radio-label",
                        "test": true,
                        "usage": "The input requires an accessible name that will be assigned to it.",
                        "attribute": [
                            "label for",
                            "aria-label",
                            "aria-labelledby"
                        ]
                    },
                    {
                        "id": "k-radio-checked",
                        "test": true,
                        "when": "checked",
                        "attribute": "checked",
                        "value": "checked",
                        "usage": "Announces the checked state of the radio button."
                    },
                    {
                        "id": "k-radio-disabled",
                        "test": true,
                        "when": "disabled",
                        "multiple": true,
                        "attribute": [
                            "disabled=disabled",
                            "aria-disabled=true"
                        ],
                        "usage": "The attribute is rendered only when the radio input is disabled."
                    }
                ]
            },
            {
                "selector": ".k-invalid,.ng-invalid",
                "checks": [
                    {
                        "selector": ".k-invalid,.ng-invalid",
                        "test": true,
                        "id": "k-radio-invalid",
                        "usage": "The attribute is rendered only when the radio button is in a form and announces the valid state of the component.",
                        "value": "true",
                        "attribute": "aria-invalid"
                    }
                ]
            }
        ]
    },
    "radiogroup": {
        "component": "radiogroup",
        "rules": [
            {
                "selector": ".k-radio-list",
                "checks": [
                    {
                        "selector": ".k-radio-list",
                        "id": "k-radiogroup-role",
                        "test": true,
                        "usage": "Announces the `radiogroup` role of the element.",
                        "value": "radiogroup",
                        "attribute": "role"
                    }
                ]
            },
            {
                "selector": ".k-radio-item",
                "checks": [
                    {
                        "selector": ".k-radio-item",
                        "id": "k-radiogroup-item-role",
                        "test": true,
                        "usage": "Due to issues with nested items, forces a no-role state.",
                        "value": "none",
                        "attribute": "role"
                    }
                ]
            },
            {
                "selector": ".k-radio",
                "checks": [
                    {
                        "selector": ".k-radio",
                        "id": "k-radiogroup-radio-readonly",
                        "test": true,
                        "usage": "The attribute is rendered only when the radio button is read-only.",
                        "when": "readonly",
                        "multiple": true,
                        "attribute": [
                            "readonly",
                            "aria-readonly"
                        ]
                    }
                ]
            },
            {
                "selector": ".k-disabled > .k-radio",
                "checks": [
                    {
                        "selector": ".k-disabled > .k-radio",
                        "id": "k-radiogroup-radio-disabled",
                        "test": true,
                        "usage": "The attribute is rendered only when the radio button is disabled.",
                        "multiple": true,
                        "attribute": [
                            "disabled",
                            "aria-disabled"
                        ]
                    }
                ]
            }
        ]
    },
    "rangeslider": {
        "component": "rangeslider",
        "rules": [
            {
                "selector": ".k-draghandle",
                "checks": [
                    {
                        "selector": ".k-draghandle",
                        "id": "k-rangeslider-valuetext",
                        "test": true,
                        "usage": "Specifies the text that would be announced based on the currently selected values in both handle elements (e.g. `aria-valuetext=\"10 - 50\"`).",
                        "attribute": "aria-valuetext"
                    }
                ]
            }
        ]
    },
    "rating": {
        "component": "rating",
        "rules": [
            {
                "selector": ".k-rating",
                "checks": [
                    {
                        "selector": ".k-rating",
                        "id": "k-rating-role",
                        "test": true,
                        "usage": "Announces the `slider` role of the Rating element.",
                        "value": "slider",
                        "attribute": "role"
                    },
                    {
                        "id": "k-rating-label",
                        "test": true,
                        "usage": "The Rating needs an accessible name to be assigned to it.",
                        "multiple": true,
                        "attribute": [
                            "aria-label",
                            "aria-labelledby",
                            "title"
                        ]
                    },
                    {
                        "id": "k-rating-tabindex",
                        "test": true,
                        "usage": "The element must be focusable.",
                        "value": "0",
                        "attribute": "tabindex"
                    },
                    {
                        "id": "k-rating-valuenow",
                        "test": true,
                        "usage": "Specifies the currently selected value in the Rating.",
                        "attribute": "aria-valuenow"
                    },
                    {
                        "id": "k-rating-valuemin",
                        "test": true,
                        "usage": "Specifies the minimum available value in the Rating.",
                        "attribute": "aria-valuemin"
                    },
                    {
                        "id": "k-rating-valuemax",
                        "test": true,
                        "usage": "Specifies the maximum available value in the Rating.",
                        "attribute": "aria-valuemax"
                    }
                ]
            }
        ]
    },
    "sankey": {
        "component": "sankey",
        "rules": [
            {
                "selector": ".k-sankey",
                "checks": [
                    {
                        "selector": ".k-sankey",
                        "id": "sankey-role",
                        "test": true,
                        "usage": "Indicates that the Sankey element is a Graphics Document.",
                        "value": "graphics-document",
                        "attribute": "role"
                    },
                    {
                        "id": "sankey-role-description",
                        "test": true,
                        "usage": "User-set value that clarifies the type of Chart to screen reader users.",
                        "attribute": "aria-roledescription"
                    },
                    {
                        "id": "sankey-label",
                        "test": true,
                        "usage": "Announces the user-set title of the Sankey Chart.",
                        "attribute": "aria-label"
                    }
                ]
            },
            {
                "selector": ".k-sankey-node",
                "checks": [
                    {
                        "selector": ".k-sankey-node",
                        "id": "sankey-node-role",
                        "test": true,
                        "multiple": true,
                        "usage": "Specifies the role of the Sankey node elements.",
                        "attribute": "role",
                        "value": "graphics-symbol"
                    },
                    {
                        "id": "sankey-node-role-description",
                        "test": true,
                        "multiple": true,
                        "usage": "Describes the role of the Sankey node elements.",
                        "attribute": "aria-roledescription",
                        "value": "Node"
                    }
                ]
            },
            {
                "selector": ".k-sankey-legend-item",
                "checks": [
                    {
                        "selector": ".k-sankey-legend-item",
                        "id": "sankey-legend-item-role",
                        "test": true,
                        "multiple": true,
                        "usage": "Specifies the role of the legend item element.",
                        "attribute": "role",
                        "value": "checkbox"
                    },
                    {
                        "id": "sankey-legend-item-label",
                        "test": true,
                        "multiple": true,
                        "usage": "Specifies the name of the node associated with this legend item.",
                        "attribute": "aria-label"
                    },
                    {
                        "id": "sankey-legend-item-role-description",
                        "test": true,
                        "multiple": true,
                        "usage": "Specifies the name of the node associated with this legend item.",
                        "attribute": "aria-roledescription",
                        "value": "Legend item"
                    }
                ]
            }
        ]
    },
    "scheduler": {
        "component": "scheduler",
        "rules": [
            {
                "selector": ".k-scheduler",
                "checks": [
                    {
                        "selector": ".k-scheduler",
                        "id": "k-scheduler-role",
                        "test": true,
                        "usage": "Specifies the role of the component.",
                        "value": "application",
                        "attribute": "role"
                    },
                    {
                        "id": "k-scheduler-activedescendant",
                        "test": true,
                        "usage": "Points to the currently active appointment in the Scheduler.",
                        "attribute": "aria-activedescendant",
                        "value": ".k-event.k-selected id",
                        "when": "not roving tabindex"
                    }
                ]
            },
            {
                "selector": ".k-nav-prev,.k-nav-next",
                "checks": [
                    {
                        "selector": ".k-nav-prev,.k-nav-next",
                        "id": "k-scheduler-arrow-label",
                        "test": true,
                        "usage": "Required as those buttons contain only icon (no text).",
                        "attribute": "aria-label"
                    }
                ]
            },
            {
                "selector": ".k-nav-current",
                "checks": [
                    {
                        "selector": ".k-nav-current",
                        "id": "k-scheduler-current-live",
                        "test": true,
                        "usage": "The new date of the Scheduler view will be announced upon navigation to new time span / view type.",
                        "value": "polite",
                        "attribute": "aria-live"
                    }
                ]
            },
            {
                "selector": ".k-views-dropdown",
                "checks": [
                    {
                        "selector": ".k-views-dropdown",
                        "id": "k-scheduler-views-select-label",
                        "test": true,
                        "usage": "Specifies the purpose of the element. The `<select>` element visible on the toolbar on small screens must have its \"aria-label\" set.",
                        "attribute": "aria-label"
                    }
                ]
            },
            {
                "selector": ".k-scheduler-agendaview",
                "checks": [
                    {
                        "selector": ".k-scheduler-agendaview",
                        "id": "k-scheduler-agenda-role",
                        "test": true,
                        "usage": "The main table of the Agenda view must indicate it is a Data Grid.",
                        "value": "grid",
                        "attribute": "role"
                    }
                ]
            },
            {
                "selector": ".k-scheduler-agendaview>tbody",
                "checks": [
                    {
                        "selector": ".k-scheduler-agendaview>tbody",
                        "id": "k-scheduler-agenda-tbody-role",
                        "test": true,
                        "usage": "The `<tbody>` element must have its semantics removed.",
                        "value": [
                            "none",
                            "presentation"
                        ],
                        "attribute": "role"
                    }
                ]
            },
            {
                "selector": ".k-scheduler-agendaview .k-scheduler-table",
                "checks": [
                    {
                        "selector": ".k-scheduler-agendaview .k-scheduler-table",
                        "id": "k-scheduler-agenda-tables-role",
                        "test": true,
                        "usage": "Those `<table>` elements within the Scheduler must have their semantic role removed.",
                        "value": [
                            "none",
                            "presentation"
                        ],
                        "attribute": "role"
                    }
                ]
            },
            {
                "selector": ".k-scheduler-agendaview .k-scheduler-table>tbody",
                "checks": [
                    {
                        "selector": ".k-scheduler-agendaview .k-scheduler-table>tbody",
                        "id": "k-scheduler-agenda-tables-tbody-role",
                        "test": true,
                        "usage": "Those elements must have their role explicitly set as it has been removed by the `<table>` role set (none/presentation).",
                        "value": "rowgroup",
                        "attribute": "role"
                    }
                ]
            },
            {
                "selector": ".k-scheduler-agendaview .k-scheduler-table>tbody>tr",
                "checks": [
                    {
                        "selector": ".k-scheduler-agendaview .k-scheduler-table>tbody>tr",
                        "id": "k-scheduler-agenda-tables-tr-role",
                        "test": true,
                        "usage": "Those elements must have their role explicitly set as it has been removed by the `<table>` role set (none/presentation).",
                        "value": "row",
                        "attribute": "role"
                    }
                ]
            },
            {
                "selector": ".k-scheduler-agendaview .k-scheduler-table>tbody>tr>th",
                "checks": [
                    {
                        "selector": ".k-scheduler-agendaview .k-scheduler-table>tbody>tr>th",
                        "id": "k-scheduler-agenda-tables-th-role",
                        "test": true,
                        "usage": "Those elements must have their role explicitly set as it has been removed by the `<table>` role set (none/presentation).",
                        "value": "columnheader",
                        "attribute": "role"
                    }
                ]
            },
            {
                "selector": ".k-scheduler-agendaview .k-scheduler-content tr .k-selected",
                "checks": [
                    {
                        "selector": ".k-scheduler-agendaview .k-scheduler-content tr .k-selected",
                        "id": "k-scheduler-agenda-tables-tr-selected",
                        "test": true,
                        "usage": "`aria-selected` attribute must be used to signify the currently selected row. As in Agenda view the selection follows focus, that would be the current `active descendant` row.",
                        "attribute": "aria-selected"
                    }
                ]
            },
            {
                "selector": ".k-scheduler-content>.k-scheduler-table>tbody>tr>.k-scheduler-groupcolumn,.k-scheduler-content>.k-scheduler-table>tbody>tr>.k-scheduler-datecolumn",
                "checks": [
                    {
                        "selector": ".k-scheduler-content>.k-scheduler-table>tbody>tr>.k-scheduler-groupcolumn,.k-scheduler-content>.k-scheduler-table>tbody>tr>.k-scheduler-datecolumn",
                        "id": "k-scheduler-agenda-rowheaders-role",
                        "test": true,
                        "usage": "Those elements must have their role explicitly set as it has been removed by the `<table>` role set (none/presentation).",
                        "value": "rowheader",
                        "attribute": "role"
                    }
                ]
            },
            {
                "selector": ".k-scheduler-content>.k-scheduler-table>tbody>tr>.k-scheduler-timecolumn,.k-scheduler-content>.k-scheduler-table>tbody>tr>.k-scheduler-timecolumn+td",
                "checks": [
                    {
                        "selector": ".k-scheduler-content>.k-scheduler-table>tbody>tr>.k-scheduler-timecolumn,.k-scheduler-content>.k-scheduler-table>tbody>tr>.k-scheduler-timecolumn+td",
                        "id": "k-scheduler-agenda-gridcell-role",
                        "test": true,
                        "usage": "Those elements must have their role explicitly set as it has been removed by the `<table>` role set (none/presentation).",
                        "value": "gridcell",
                        "attribute": "role"
                    }
                ]
            },
            {
                "selector": ".k-scheduler-dayview,.k-scheduler-monthview,.k-scheduler-timelineview",
                "checks": [
                    {
                        "selector": ".k-scheduler-dayview,.k-scheduler-monthview,.k-scheduler-timelineview",
                        "id": "k-scheduler-tables-role",
                        "test": true,
                        "usage": "All `<table>` elements within the Scheduler must have their semantic role removed.",
                        "value": [
                            "none",
                            "presentation"
                        ],
                        "attribute": "role"
                    }
                ]
            },
            {
                "selector": ".k-event",
                "checks": [
                    {
                        "selector": ".k-event",
                        "id": "k-scheduler-event-role",
                        "test": true,
                        "usage": "Indicating that the events element is interactive.",
                        "value": "button",
                        "attribute": "role"
                    },
                    {
                        "id": "k-scheduler-event-label",
                        "test": true,
                        "usage": "Label containing the title, start, and end date of the appointment, so that all of them are announced upon navigation to an appointment.",
                        "attribute": "aria-label"
                    }
                ]
            },
            {
                "selector": ".k-scheduler-layout:not(.k-scheduler-agendaview) .k-scheduler-content",
                "checks": [
                    {
                        "selector": ".k-scheduler-layout:not(.k-scheduler-agendaview) .k-scheduler-content",
                        "id": "k-scheduler-scrollable-container-focusable",
                        "test": true,
                        "usage": "Scrollable elements need to be focusable (does not apply to agenda view) to ensure scrolling with the arrow keys is available.",
                        "attribute": "tabindex",
                        "value": "0",
                        "when": "scrollable container not agenda view"
                    }
                ]
            }
        ]
    },
    "segmentedcontrol": {
        "component": "segmentedcontrol",
        "rules": [
            {
                "selector": ".k-segmented-control",
                "checks": [
                    {
                        "selector": ".k-segmented-control",
                        "id": "k-segmented-control-role",
                        "test": true,
                        "usage": "Sets the proper role for the group of buttons.",
                        "value": "group",
                        "attribute": "role"
                    }
                ]
            },
            {
                "selector": ".k-segmented-control-button",
                "checks": [
                    {
                        "selector": ".k-segmented-control-button",
                        "id": "k-segmented-control-button-role",
                        "test": true,
                        "multiple": true,
                        "usage": "Each button must have the appropriate button role.",
                        "attribute": [
                            "role=button",
                            "nodeName=button"
                        ]
                    }
                ]
            },
            {
                "selector": ".k-segmented-control-button.k-selected",
                "checks": [
                    {
                        "selector": ".k-segmented-control-button.k-selected",
                        "id": "k-segmented-control-button-pressed",
                        "test": true,
                        "usage": "Only the selected button within the group will have this attribute set to true.",
                        "value": "true",
                        "attribute": "aria-pressed"
                    }
                ]
            },
            {
                "selector": ".k-segmented-control-button.k-disabled",
                "checks": [
                    {
                        "selector": ".k-segmented-control-button.k-disabled",
                        "id": "k-segmented-control-button-disabled",
                        "test": true,
                        "usage": "Indicates that the button is disabled and cannot be interacted with.",
                        "value": "true",
                        "attribute": "aria-disabled"
                    }
                ]
            },
            {
                "selector": ".k-segmented-control-thumb",
                "checks": [
                    {
                        "selector": ".k-segmented-control-thumb",
                        "id": "k-segmented-control-thumb-hidden",
                        "test": true,
                        "usage": "The thumb is purely decorative and should be hidden from screen readers.",
                        "value": "true",
                        "attribute": "aria-hidden"
                    }
                ]
            }
        ]
    },
    "signature": {
        "component": "signature",
        "rules": [
            {
                "selector": ".k-signature-canvas",
                "checks": [
                    {
                        "selector": ".k-signature-canvas",
                        "id": "k-signature-role",
                        "test": true,
                        "multiple": false,
                        "usage": "Sets canvas `role` to `img`.",
                        "attribute": "role",
                        "value": "img"
                    }
                ]
            },
            {
                "selector": ".k-signature-canvas",
                "checks": [
                    {
                        "selector": ".k-signature-canvas",
                        "id": "k-signature-label",
                        "test": true,
                        "usage": "Announces the purpose of the Signature.",
                        "attribute": "aria-label"
                    }
                ]
            },
            {
                "selector": ".k-signature-canvas:nth-child(1)",
                "checks": [
                    {
                        "selector": ".k-signature-canvas:nth-child(1)",
                        "id": "k-signature-tabindex",
                        "test": true,
                        "usage": "Makes the Signature canvas the first focusable element.",
                        "attribute": "tabindex",
                        "value": "0"
                    }
                ]
            },
            {
                "selector": ".k-signature-action",
                "checks": [
                    {
                        "selector": ".k-signature-action",
                        "id": "k-signature-action-role",
                        "test": true,
                        "multiple": true,
                        "usage": "Renders button.",
                        "attribute": [
                            "nodeName=button"
                        ]
                    }
                ]
            },
            {
                "selector": ".k-signature-action",
                "checks": [
                    {
                        "selector": ".k-signature-action",
                        "id": "k-signature-action-label",
                        "test": true,
                        "attribute": "aria-label",
                        "usage": "Announces the purpose of the button."
                    }
                ]
            }
        ]
    },
    "slider": {
        "component": "slider",
        "rules": [
            {
                "selector": ".k-draghandle",
                "checks": [
                    {
                        "selector": ".k-draghandle",
                        "id": "k-slider-role",
                        "test": true,
                        "usage": "Sets the proper role for Slider.",
                        "value": "slider",
                        "attribute": "role"
                    },
                    {
                        "id": "k-slider-label",
                        "test": true,
                        "usage": "The Slider needs an accessible name to be assigned to it.",
                        "multiple": true,
                        "attribute": [
                            "aria-label",
                            "aria-labelledby",
                            "title"
                        ]
                    },
                    {
                        "id": "k-slider-valuetext",
                        "test": true,
                        "usage": "Specifies the text that would be announced based on the currently selected value in the Slider.",
                        "attribute": "aria-valuetext"
                    },
                    {
                        "id": "k-slider-readonly",
                        "test": true,
                        "when": "readonly",
                        "usage": "Attribute is rendered only when the Slider is readonly.",
                        "value": "true",
                        "attribute": "aria-readonly"
                    },
                    {
                        "id": "k-slider-tabindex",
                        "test": true,
                        "usage": "The element must be focusable.",
                        "value": "0",
                        "attribute": "tabindex"
                    }
                ]
            },
            {
                "selector": ".k-draghandle:not(.k-hsv-draghandle)",
                "checks": [
                    {
                        "selector": ".k-draghandle:not(.k-hsv-draghandle)",
                        "id": "k-slider-valuenow",
                        "test": true,
                        "usage": "Specifies the currently selected value in the Slider.",
                        "attribute": "aria-valuenow"
                    },
                    {
                        "id": "k-slider-valuemin",
                        "test": true,
                        "usage": "Specifies the minimum available value in the Slider.",
                        "attribute": "aria-valuemin"
                    },
                    {
                        "id": "k-slider-valuemax",
                        "test": true,
                        "usage": "Specifies the maximum available value in the Slider.",
                        "attribute": "aria-valuemax"
                    }
                ]
            },
            {
                "selector": ".k-slider-vertical .k-draghandle",
                "checks": [
                    {
                        "selector": ".k-slider-vertical .k-draghandle",
                        "id": "k-slider-orientation",
                        "test": true,
                        "usage": "Present only when slider is vertical.",
                        "value": "vertical",
                        "attribute": "aria-orientation"
                    }
                ]
            },
            {
                "selector": ".k-disabled .k-draghandle",
                "checks": [
                    {
                        "selector": ".k-disabled .k-draghandle",
                        "id": "k-slider-disabled",
                        "test": true,
                        "usage": "Attribute is rendered only when the Slider is disabled.",
                        "value": "true",
                        "attribute": "aria-disabled"
                    }
                ]
            },
            {
                "selector": ".k-slider .k-button-decrease, .k-slider .k-button-increase",
                "checks": [
                    {
                        "selector": ".k-slider .k-button-decrease, .k-slider .k-button-increase",
                        "id": "k-slider-buttons-hidden",
                        "test": true,
                        "usage": "Hides the decrease/increase button elements and all their children from assistive technologies.",
                        "value": "true",
                        "attribute": "aria-hidden"
                    },
                    {
                        "id": "k-slider-buttons-tabindex",
                        "test": true,
                        "usage": "Excludes the decorative decrease/increase buttons from the natural tab order of the page.",
                        "value": "-1",
                        "attribute": "tabindex"
                    }
                ]
            }
        ]
    },
    "smartbox": {
        "component": "smartbox",
        "rules": [
            {
                "selector": ".k-smart-box .k-input-inner",
                "checks": [
                    {
                        "selector": ".k-smart-box .k-input-inner",
                        "id": "k-smart-box-input-role",
                        "test": true,
                        "usage": "Announces the combobox role for the SmartBox input.",
                        "value": "combobox",
                        "attribute": "role"
                    },
                    {
                        "id": "k-smart-box-input-label",
                        "test": true,
                        "usage": "Provides an accessible label for the SmartBox (e.g., 'AI-powered search').",
                        "multiple": true,
                        "attribute": [
                            "aria-label",
                            "aria-labelledby"
                        ]
                    },
                    {
                        "id": "k-smart-box-input-expanded",
                        "test": true,
                        "usage": "Indicates whether the suggestion popup is currently visible.",
                        "value": [
                            "true",
                            "false"
                        ],
                        "attribute": "aria-expanded"
                    },
                    {
                        "id": "k-smart-box-input-haspopup",
                        "test": true,
                        "usage": "Indicates that the SmartBox has a popup listbox with suggestions.",
                        "value": "listbox",
                        "attribute": "aria-haspopup"
                    },
                    {
                        "id": "k-smart-box-input-controls",
                        "test": true,
                        "usage": "References the ID of the popup listbox element when the popup is open.",
                        "attribute": "aria-controls"
                    },
                    {
                        "id": "k-smart-box-input-autocomplete",
                        "test": true,
                        "usage": "Indicates the autocomplete behavior of the input field.",
                        "attribute": "aria-autocomplete"
                    },
                    {
                        "id": "k-smart-box-input-activedescendant",
                        "test": true,
                        "usage": "When the popup is open and keyboard navigation is active, references the ID of the currently focused list item.",
                        "attribute": "aria-activedescendant"
                    }
                ]
            },
            {
                "selector": ".k-smart-box .k-input-prefix .k-icon",
                "checks": [
                    {
                        "selector": ".k-smart-box .k-input-prefix .k-icon",
                        "id": "k-smart-box-prefix-icon-hidden",
                        "test": true,
                        "usage": "Decorative icons in the prefix area are hidden from screen readers.",
                        "value": "true",
                        "attribute": "aria-hidden"
                    }
                ]
            },
            {
                "selector": ".k-smart-box .k-input-suffix .k-button",
                "checks": [
                    {
                        "selector": ".k-smart-box .k-input-suffix .k-button",
                        "id": "k-smart-box-suffix-button-label",
                        "test": true,
                        "usage": "Suffix buttons must have accessible labels describing their function (e.g., 'Start voice input', 'Send prompt').",
                        "attribute": "aria-label"
                    }
                ]
            },
            {
                "selector": ".k-smart-box-send",
                "checks": [
                    {
                        "selector": ".k-smart-box-send",
                        "id": "k-smart-box-send-label",
                        "test": true,
                        "usage": "The send button must be labelled to indicate its current action (e.g., 'Send' or 'Stop processing').",
                        "attribute": "aria-label"
                    }
                ]
            },
            {
                "selector": ".k-smart-box-send.k-disabled",
                "checks": [
                    {
                        "selector": ".k-smart-box-send.k-disabled",
                        "id": "k-smart-box-send-disabled",
                        "test": true,
                        "usage": "Indicates the button is disabled when there is no input or processing is not active.",
                        "multiple": true,
                        "attribute": [
                            "disabled",
                            "aria-disabled=true"
                        ]
                    }
                ]
            },
            {
                "selector": ".k-smart-box-send.k-processing",
                "checks": [
                    {
                        "selector": ".k-smart-box-send.k-processing",
                        "id": "k-smart-box-send-processing",
                        "test": true,
                        "usage": "Indicates that processing is in progress. The button changes function to stop processing.",
                        "value": "true",
                        "attribute": "aria-pressed"
                    }
                ]
            }
        ]
    },
    "speechtotextbutton": {
        "component": "speechtotextbutton",
        "rules": [
            {
                "selector": ".k-button.k-speech-to-text-button",
                "checks": [
                    {
                        "selector": ".k-button.k-speech-to-text-button",
                        "id": "k-speech-to-text-button-role",
                        "test": true,
                        "multiple": true,
                        "usage": "If the used element is not `<button>`, explicitly set its `role` to `button`.",
                        "attribute": [
                            "role=button",
                            "nodeName=button"
                        ]
                    },
                    {
                        "id": "k-speech-to-text-button-pressed",
                        "test": true,
                        "usage": "Announced the toggle behaviour of the button.",
                        "value": [
                            "true",
                            "false"
                        ],
                        "attribute": "aria-pressed"
                    }
                ]
            }
        ]
    },
    "splitter": {
        "component": "splitter",
        "rules": [
            {
                "selector": ".k-pane",
                "checks": [
                    {
                        "selector": ".k-pane",
                        "id": "k-pane-role",
                        "test": true,
                        "usage": "Sets the proper role for the Splitter pane that identifies a set of user interface objects that is not intended to be included in the page's summary or table of contents.",
                        "value": "group",
                        "attribute": "role"
                    }
                ]
            },
            {
                "selector": ".k-splitbar",
                "checks": [
                    {
                        "selector": ".k-splitbar",
                        "id": "k-splitbar-role",
                        "test": true,
                        "usage": "Sets the proper role for the Splitter split-bar element.",
                        "value": "separator",
                        "attribute": "role"
                    },
                    {
                        "id": "k-splitbar-label",
                        "test": true,
                        "usage": "An accessible name, with \"aria-label\" should be included if there is more than one focusable separator. The value is set through the corresponding SplitterPane API.",
                        "attribute": "aria-label"
                    }
                ]
            },
            {
                "selector": ".k-splitbar-horizontal",
                "checks": [
                    {
                        "selector": ".k-splitbar-horizontal",
                        "id": "k-splitbar-orientation",
                        "test": true,
                        "usage": "When a splitbar separates two panes horizontally, its \"aria-orientation\" must be explicitly set to 'vertical'.",
                        "value": "vertical",
                        "attribute": "aria-orientation"
                    }
                ]
            }
        ]
    },
    "spreadsheet": {
        "component": "spreadsheet",
        "rules": [
            {
                "selector": ".k-spreadsheet",
                "checks": [
                    {
                        "selector": ".k-spreadsheet",
                        "id": "k-spreadsheet-role",
                        "test": true,
                        "usage": "Indicates the Spreadsheets' role as an application.",
                        "value": "application",
                        "attribute": "role"
                    }
                ]
            },
            {
                "selector": ".k-spreadsheet-quick-access-toolbar>.k-button",
                "checks": [
                    {
                        "selector": ".k-spreadsheet-quick-access-toolbar>.k-button",
                        "id": "k-spreadsheet-quick-access-role",
                        "test": true,
                        "usage": "The two quick access elements are buttons.",
                        "value": "button",
                        "attribute": "role"
                    },
                    {
                        "id": "k-spreadsheet-quick-access-label",
                        "test": true,
                        "usage": "The two quick access elements must have labels as they do not have text content.",
                        "multiple": true,
                        "attribute": [
                            "aria-label",
                            "title"
                        ]
                    }
                ]
            },
            {
                "selector": ".k-spreadsheet-toolbar",
                "checks": [
                    {
                        "selector": ".k-spreadsheet-toolbar",
                        "id": "k-spreadsheet-toolbar-label",
                        "test": true,
                        "usage": "Each ToolBar must have a label specifying its purpose.",
                        "multiple": true,
                        "attribute": [
                            "aria-label",
                            "title"
                        ]
                    }
                ]
            },
            {
                "selector": ".k-spreadsheet-formula-input",
                "checks": [
                    {
                        "selector": ".k-spreadsheet-formula-input",
                        "id": "k-spreadsheet-formula-input-haspopup",
                        "test": true,
                        "usage": "Specifies that the formula input opens a popup.",
                        "value": "menu",
                        "attribute": "aria-haspopup"
                    },
                    {
                        "id": "k-spreadsheet-formula-input-expanded",
                        "test": true,
                        "usage": "Announces the state of the popup visibility.",
                        "attribute": "aria-expanded",
                        "value": [
                            "true",
                            "false"
                        ]
                    },
                    {
                        "id": "k-spreadsheet-formula-input-title",
                        "test": true,
                        "usage": "The Formula input of the Spreadsheet must have a title specifying its purpose.",
                        "attribute": "title"
                    },
                    {
                        "id": "k-spreadsheet-formula-input-role",
                        "test": true,
                        "usage": "The focusable element of the component should have role `combobox` (an input with popup).",
                        "value": "combobox",
                        "attribute": "role"
                    }
                ]
            },
            {
                "selector": ".k-spreadsheet-formula-list",
                "checks": [
                    {
                        "selector": ".k-spreadsheet-formula-list",
                        "id": "k-spreadsheet-formula-list-role",
                        "test": true,
                        "usage": "Announces the `menu` role of the popup.",
                        "value": "menu",
                        "attribute": "role"
                    }
                ]
            },
            {
                "selector": ".k-list-item",
                "checks": [
                    {
                        "selector": ".k-list-item",
                        "id": "k-list-item-role",
                        "test": true,
                        "usage": "Announces the `menuitem` role of the popup items.",
                        "value": "menuitem",
                        "attribute": "role"
                    }
                ]
            },
            {
                "selector": ".k-spreadsheet-sheet-add:not(button)",
                "checks": [
                    {
                        "selector": ".k-spreadsheet-sheet-add:not(button)",
                        "id": "k-spreadsheet-add-sheet-button-role",
                        "test": true,
                        "usage": "The add new sheet element is a button.",
                        "value": "button",
                        "attribute": "role"
                    }
                ]
            },
            {
                "selector": ".k-spreadsheet-sheet-add",
                "checks": [
                    {
                        "selector": ".k-spreadsheet-sheet-add",
                        "id": "k-spreadsheet-add-sheet-button-label",
                        "test": true,
                        "usage": "The add new sheet element must have a label as it does not have text content.",
                        "multiple": true,
                        "attribute": [
                            "aria-label",
                            "title"
                        ]
                    }
                ]
            }
        ]
    },
    "stepper": {
        "component": "stepper",
        "rules": [
            {
                "selector": ".k-stepper",
                "checks": [
                    {
                        "selector": ".k-stepper",
                        "id": "k-stepper-role",
                        "test": true,
                        "usage": "The landmark role `navigation` must be assigned to the component.",
                        "attribute": [
                            "role=navigation",
                            "nodeName=nav"
                        ]
                    }
                ]
            },
            {
                "selector": ".k-step-disabled>.k-step-link",
                "checks": [
                    {
                        "selector": ".k-step-disabled>.k-step-link",
                        "id": "k-stepper-link-disabled",
                        "test": true,
                        "usage": "A disabled (inactive) link.",
                        "value": "true",
                        "attribute": "aria-disabled"
                    }
                ]
            },
            {
                "selector": ".k-step-current>.k-step-link",
                "checks": [
                    {
                        "selector": ".k-step-current>.k-step-link",
                        "id": "k-stepper-link-current",
                        "test": true,
                        "usage": "The currently selected link.",
                        "value": "step",
                        "attribute": "aria-current"
                    }
                ]
            },
            {
                "selector": ".k-step.k-focus .k-step-link",
                "checks": [
                    {
                        "selector": ".k-step.k-focus .k-step-link",
                        "id": "k-stepper-link-current-tabindex",
                        "test": true,
                        "usage": "Adds an element to the page's tab order. Set based on the roving tabindex navigation when the tab is focused.",
                        "value": "0",
                        "attribute": "tabindex"
                    }
                ]
            },
            {
                "selector": ".k-step:not(.k-focus) .k-step-link",
                "checks": [
                    {
                        "selector": ".k-step:not(.k-focus) .k-step-link",
                        "id": "k-stepper-link-tabindex",
                        "test": true,
                        "usage": "Removes the element from the page's tab order. Set based on the roving tabindex navigation when a tab is not focused.",
                        "value": "-1",
                        "attribute": "tabindex"
                    }
                ]
            }
        ]
    },
    "switch": {
        "component": "switch",
        "rules": [
            {
                "selector": ".k-switch",
                "checks": [
                    {
                        "selector": ".k-switch",
                        "id": "k-switch-role",
                        "test": true,
                        "usage": "Announces the switch role of the element.",
                        "value": "switch",
                        "attribute": "role"
                    },
                    {
                        "id": "k-switch-label",
                        "test": true,
                        "usage": "The input requires an accessible name that will be assigned to it.",
                        "attribute": [
                            "label for",
                            "aria-label",
                            "aria-labelledby"
                        ]
                    },
                    {
                        "id": "k-switch-checked",
                        "test": true,
                        "usage": "Announces the checked state of the Switch.",
                        "attribute": "aria-checked"
                    },
                    {
                        "id": "k-switch-tabindex",
                        "test": true,
                        "usage": "The element must be focusable.",
                        "value": "0",
                        "attribute": "tabindex"
                    }
                ]
            },
            {
                "selector": ".k-switch.k-disabled",
                "checks": [
                    {
                        "selector": ".k-switch.k-disabled",
                        "id": "k-switch-disabled",
                        "test": true,
                        "usage": "The attribute is rendered only when the Switch is disabled.",
                        "value": "true",
                        "attribute": "aria-disabled"
                    }
                ]
            }
        ]
    },
    "tabstrip": {
        "component": "tabstrip",
        "rules": [
            {
                "selector": ".k-tabstrip-items",
                "checks": [
                    {
                        "selector": ".k-tabstrip-items",
                        "id": "k-tabstrip-list-role",
                        "test": true,
                        "usage": "Indicates the tablist role for the ul element of the TabStrip.",
                        "value": "tablist",
                        "attribute": "role"
                    }
                ]
            },
            {
                "selector": ".k-tabstrip.k-tabstrip-left .k-tabstrip-items,.k-tabstrip.k-tabstrip-right .k-tabstrip-items",
                "checks": [
                    {
                        "selector": ".k-tabstrip.k-tabstrip-left .k-tabstrip-items,.k-tabstrip.k-tabstrip-right .k-tabstrip-items",
                        "id": "k-tabstrip-orientation",
                        "test": true,
                        "usage": "Indicates the orientation of the tablist container element. The attribute is rendered only when the orientation of the component is vertical as the `tablist` role comes with default horizontal orientation.",
                        "value": "vertical",
                        "attribute": "aria-orientation"
                    }
                ]
            },
            {
                "selector": ".k-tabstrip-item",
                "checks": [
                    {
                        "selector": ".k-tabstrip-item",
                        "id": "k-tabstrip-item-role",
                        "test": true,
                        "usage": "The tab `li` element.",
                        "value": "tab",
                        "attribute": "role"
                    }
                ]
            },
            {
                "selector": ".k-tabstrip .k-tabstrip-item.k-active",
                "checks": [
                    {
                        "selector": ".k-tabstrip .k-tabstrip-item.k-active",
                        "id": "k-tabstrip-item-selected",
                        "test": true,
                        "usage": "Announces the selected state of the tab.",
                        "value": "true",
                        "attribute": "aria-selected"
                    },
                    {
                        "id": "k-tabstrip-item-controls",
                        "test": true,
                        "usage": "Announces the relation between the panel and active tab.",
                        "value": ".k-tabstrip-content id",
                        "attribute": "aria-controls"
                    }
                ]
            },
            {
                "selector": ".k-tabstrip-content",
                "checks": [
                    {
                        "selector": ".k-tabstrip-content",
                        "id": "k-tabstrip-panel-role",
                        "test": true,
                        "usage": "The content `div` of the tab.",
                        "value": "tabpanel",
                        "attribute": "role"
                    },
                    {
                        "id": "k-tabstrip-panel-label",
                        "test": true,
                        "usage": "Refers to the tab element that controls the panel.",
                        "value": ".k-tabstrip-item id",
                        "attribute": "aria-labelledby"
                    }
                ]
            }
        ]
    },
    "taskboard": {
        "component": "taskboard",
        "rules": [
            {
                "selector": ".k-taskboard",
                "checks": [
                    {
                        "selector": ".k-taskboard",
                        "id": "k-taskboard-role",
                        "test": true,
                        "usage": "The TaskBoard has `role=application` as its inner navigation requires the use of arrows.",
                        "value": "application",
                        "attribute": "role"
                    }
                ]
            },
            {
                "selector": ".k-taskboard-column",
                "checks": [
                    {
                        "selector": ".k-taskboard-column",
                        "id": "k-taskboard-column-role",
                        "test": true,
                        "usage": "The TaskBoard Column is a collection of list items.",
                        "value": "list",
                        "attribute": "role"
                    },
                    {
                        "id": "k-taskboard-column-tabindex",
                        "test": true,
                        "usage": "The TaskBoard Column must be focusable.",
                        "value": "0",
                        "attribute": "tabindex"
                    },
                    {
                        "id": "k-taskboard-column-label",
                        "test": true,
                        "usage": "The TaskBoard Column must be labelled by its header.",
                        "value": ".k-taskboard-column-header id",
                        "attribute": "aria-labelledby"
                    }
                ]
            },
            {
                "selector": ".k-taskboard-column-action-button",
                "checks": [
                    {
                        "selector": ".k-taskboard-column-action-button",
                        "id": "k-taskboard-column-action-role",
                        "test": true,
                        "usage": "The TaskBoard Column actions are buttons.",
                        "attribute": [
                            "role=button",
                            "nodeName=button"
                        ]
                    },
                    {
                        "id": "k-taskboard-column-action-label",
                        "test": true,
                        "usage": "Each action must have an accessible name as they are represented by icons and no text is available in their contents.",
                        "attribute": [
                            "aria-label",
                            "title"
                        ]
                    }
                ]
            },
            {
                "selector": ".k-taskboard-card",
                "checks": [
                    {
                        "selector": ".k-taskboard-card",
                        "id": "k-taskboard-card-role",
                        "test": true,
                        "usage": "The TaskBoard Tasks (cards) are list items.",
                        "value": "listitem",
                        "attribute": "role"
                    },
                    {
                        "id": "k-taskboard-card-tabindex",
                        "test": true,
                        "usage": "The TaskBoard Card must be focusable.",
                        "value": "0",
                        "attribute": "tabindex"
                    }
                ]
            },
            {
                "selector": ".k-taskboard-card-menu-button",
                "checks": [
                    {
                        "selector": ".k-taskboard-card-menu-button",
                        "id": "k-taskboard-card-menu-role",
                        "test": true,
                        "usage": "The TaskBoard card menu element must be a button.",
                        "attribute": [
                            "role=button",
                            "nodeName=button"
                        ]
                    },
                    {
                        "id": "k-taskboard-card-menu-label",
                        "test": true,
                        "usage": "The menu button must have an accessible name as it is represented by an icon and no text is available in its contents.",
                        "attribute": [
                            "aria-label",
                            "title"
                        ]
                    }
                ]
            },
            {
                "selector": ".k-taskboard-pane-header-actions>.k-button",
                "checks": [
                    {
                        "selector": ".k-taskboard-pane-header-actions>.k-button",
                        "id": "k-taskboard-edit-form-close-role",
                        "test": true,
                        "usage": "The TaskBoard edit form close element must be a button.",
                        "attribute": [
                            "role=button",
                            "nodeName=button"
                        ]
                    },
                    {
                        "id": "k-taskboard-edit-form-close-label",
                        "test": true,
                        "usage": "The edit form close button must have an accessible name as it is represented by an icon and no text is available in its contents.",
                        "attribute": [
                            "aria-label",
                            "title"
                        ]
                    }
                ]
            },
            {
                "selector": ".k-taskboard-edit-pane .k-form",
                "checks": [
                    {
                        "selector": ".k-taskboard-edit-pane .k-form",
                        "id": "k-taskboard-edit-form-role",
                        "test": true,
                        "usage": "The edit Form needs the appropriate role to be assigned to it.",
                        "value": "form",
                        "attribute": "role"
                    },
                    {
                        "id": "k-taskboard-edit-form-label",
                        "test": true,
                        "usage": "The TaskBoard edit form must be labeled by the header text of the pane it is located at.",
                        "value": ".k-taskboard-pane-header-text id",
                        "attribute": "aria-labelledby"
                    }
                ]
            }
        ]
    },
    "textarea": {
        "component": "textarea",
        "rules": [
            {
                "selector": ".k-input-inner",
                "checks": [
                    {
                        "selector": ".k-input-inner",
                        "id": "k-textarea-role",
                        "test": true,
                        "usage": "Describes the role of the component.",
                        "attribute": [
                            "role=textbox",
                            "nodeName=textarea"
                        ]
                    },
                    {
                        "id": "k-textarea-label",
                        "test": true,
                        "usage": "The input requires an accessible name that will be assigned to it.",
                        "attribute": [
                            "label for",
                            "aria-label",
                            "aria-labelledby"
                        ]
                    }
                ]
            },
            {
                "selector": ".k-disabled .k-input-inner",
                "checks": [
                    {
                        "selector": ".k-disabled .k-input-inner",
                        "id": "k-textarea-disabled",
                        "test": true,
                        "usage": "The attribute is rendered only when the TextArea is disabled.",
                        "multiple": true,
                        "attribute": [
                            "disabled=disabled",
                            "aria-disabled=true"
                        ]
                    }
                ]
            }
        ]
    },
    "textbox": {
        "component": "textbox",
        "rules": [
            {
                "selector": ".k-input-inner",
                "checks": [
                    {
                        "selector": ".k-input-inner",
                        "id": "k-textbox-role",
                        "test": true,
                        "usage": "Describes the role of the component.",
                        "attribute": [
                            "role=textbox",
                            "nodeName=input"
                        ]
                    },
                    {
                        "id": "k-textbox-label",
                        "test": true,
                        "usage": "The input requires an accessible name that will be assigned to it.",
                        "attribute": [
                            "label for",
                            "aria-label",
                            "aria-labelledby"
                        ]
                    }
                ]
            },
            {
                "selector": ".k-disabled .k-input-inner",
                "checks": [
                    {
                        "selector": ".k-disabled .k-input-inner",
                        "id": "k-textbox-disabled",
                        "test": true,
                        "usage": "The attribute is rendered only when the TextBox is disabled.",
                        "multiple": true,
                        "attribute": [
                            "disabled=disabled",
                            "aria-disabled=true"
                        ]
                    }
                ]
            }
        ]
    },
    "tilelayout": {
        "component": "tilelayout",
        "rules": [
            {
                "selector": ".k-tilelayout",
                "checks": [
                    {
                        "selector": ".k-tilelayout",
                        "id": "k-tilelayout-role",
                        "test": true,
                        "usage": "Sets list role to the TileLayout wrapper.",
                        "value": "list",
                        "attribute": "role"
                    }
                ]
            },
            {
                "selector": ".k-tilelayout-item",
                "checks": [
                    {
                        "selector": ".k-tilelayout-item",
                        "id": "k-tilelayout-item-role",
                        "test": true,
                        "usage": "Sets listitem role to the TileLayout items.",
                        "value": "listitem",
                        "attribute": "role"
                    },
                    {
                        "id": "k-tilelayout-item-focusable",
                        "test": true,
                        "usage": "Makes the item wrapper element focusable.",
                        "value": "0",
                        "attribute": "tabindex"
                    },
                    {
                        "id": "k-tilelayout-item-keyshortcuts-enter",
                        "test": true,
                        "usage": "Announces Enter as an available key shortcut when the item is focused.",
                        "value": "Enter",
                        "attribute": "aria-keyshortcuts"
                    }
                ]
            },
            {
                "selector": ".k-tilelayout-item-header .k-card-title",
                "checks": [
                    {
                        "selector": ".k-tilelayout-item-header .k-card-title",
                        "id": "k-tilelayout-item-header-text-id",
                        "test": true,
                        "usage": "Unique and deterministic identifier to link the header text element to the focusable wrapper.",
                        "attribute": "id"
                    }
                ]
            }
        ]
    },
    "timedurationpicker": {
        "component": "timedurationpicker",
        "rules": [
            {
                "selector": ".k-input-inner",
                "checks": [
                    {
                        "selector": ".k-input-inner",
                        "test": true,
                        "id": "k-timedurationpicker-role",
                        "attribute": "role",
                        "value": "combobox",
                        "usage": "The input element must follow the `combobox` specification."
                    },
                    {
                        "test": true,
                        "id": "k-timedurationpicker-label",
                        "multiple": true,
                        "attribute": [
                            "label for",
                            "aria-label",
                            "aria-labelledby"
                        ],
                        "usage": "An accessible name must be assigned to the input."
                    },
                    {
                        "id": "k-timedurationpicker-expanded",
                        "attribute": "aria-expanded",
                        "test": true,
                        "value": [
                            "true",
                            "false"
                        ],
                        "usage": "Announces whether the Popup is visible or not."
                    },
                    {
                        "id": "k-timedurationpicker-haspopup",
                        "test": true,
                        "attribute": "aria-haspopup",
                        "value": "dialog",
                        "usage": "Indicates the component has a Dialog Popup"
                    },
                    {
                        "test": true,
                        "id": "k-timedurationpicker-controls",
                        "attribute": "aria-controls",
                        "value": ".k-popup id",
                        "usage": " Points to the popup element. Signifies that the `combobox` element controls the `dialog` popup."
                    },
                    {
                        "test": true,
                        "id": "k-timedurationpicker-readonly",
                        "when": "readonly",
                        "multiple": true,
                        "attribute": [
                            "readonly",
                            "aria-readonly"
                        ],
                        "value": "true",
                        "usage": "The attribute is rendered only when the DatePicker is readonly."
                    }
                ]
            },
            {
                "selector": ".k-invalid .k-input-inner,.ng-invalid .k-input-inner",
                "checks": [
                    {
                        "selector": ".k-invalid .k-input-inner,.ng-invalid .k-input-inner",
                        "test": true,
                        "id": "k-timedurationpicker-invalid",
                        "attribute": "aria-invalid",
                        "value": "true",
                        "usage": "An attribute is rendered only when the picker is in form and announces the valid state of the component."
                    }
                ]
            },
            {
                "selector": ".k-disabled .k-input-inner",
                "checks": [
                    {
                        "selector": ".k-disabled .k-input-inner",
                        "test": true,
                        "id": "k-timedurationpicker-disabled",
                        "multiple": true,
                        "attribute": [
                            "disabled=disabled",
                            "aria-disabled=true"
                        ],
                        "usage": "An attribute is rendered only when the DatePicker is disabled."
                    }
                ]
            },
            {
                "selector": ".k-input-button",
                "checks": [
                    {
                        "selector": ".k-input-button",
                        "test": true,
                        "id": "k-timedurationpicker-button-hidden",
                        "multiple": true,
                        "attribute": "aria-hidden",
                        "value": "true",
                        "usage": "The button element must be hidden from the assistive technologies."
                    },
                    {
                        "test": true,
                        "id": "k-timedurationpicker-button-tabindex",
                        "attribute": "tabindex",
                        "value": "-1",
                        "usage": "The button element must not be focusable."
                    }
                ]
            },
            {
                "selector": "k-timedurationpicker.k-disabled .k-button",
                "checks": [
                    {
                        "selector": "k-timedurationpicker.k-disabled .k-button",
                        "id": "k-timedurationpicker-togglebutton-disabled",
                        "test": true,
                        "multiple": true,
                        "usage": "An attribute is rendered only when the picker is disabled.",
                        "attribute": [
                            "disabled",
                            "aria-disabled=true"
                        ]
                    }
                ]
            },
            {
                "selector": ".k-time-list",
                "checks": [
                    {
                        "selector": ".k-time-list",
                        "test": true,
                        "id": "k-timedurationpicker-timelist-role",
                        "attribute": "role",
                        "value": "listbox",
                        "usage": "The timelist elements must have a `listbox` role assigned."
                    },
                    {
                        "test": true,
                        "id": "k-timedurationpicker-timelist-label",
                        "attribute": [
                            "aria-label",
                            "aria-labelledby"
                        ],
                        "usage": "An accessible name must be assigned to the listbox."
                    }
                ]
            },
            {
                "selector": ".k-time-list .k-reset",
                "checks": [
                    {
                        "selector": ".k-time-list .k-reset",
                        "test": true,
                        "id": "k-timedurationpicker-reset-role",
                        "attribute": "role",
                        "value": [
                            "none",
                            "presentation"
                        ],
                        "usage": "The `k-rest` `<ul>` element's semantic meaning must be removed from the accessibility tree."
                    }
                ]
            },
            {
                "selector": ".k-time-list .k-item",
                "checks": [
                    {
                        "selector": ".k-time-list .k-item",
                        "test": true,
                        "id": "k-timedurationpicker-item-role",
                        "attribute": "role",
                        "value": "option",
                        "usage": "The available options in the listbox must be marked as such."
                    }
                ]
            }
        ]
    },
    "timeline": {
        "component": "timeline",
        "rules": [
            {
                "selector": ".k-timeline.k-timeline-horizontal .k-timeline-track-wrap .k-timeline-scrollable-wrap",
                "checks": [
                    {
                        "selector": ".k-timeline.k-timeline-horizontal .k-timeline-track-wrap .k-timeline-scrollable-wrap",
                        "id": "k-timeline-horizontal-list-role",
                        "test": true,
                        "usage": "Indicates the tablist role for the ul element of the Timeline.",
                        "value": "tablist",
                        "attribute": "role"
                    }
                ]
            },
            {
                "selector": ".k-timeline.k-timeline-horizontal .k-timeline-track-item:not(.k-timeline-flag-wrap)",
                "checks": [
                    {
                        "selector": ".k-timeline.k-timeline-horizontal .k-timeline-track-item:not(.k-timeline-flag-wrap)",
                        "id": "k-timeline-horizontal-item-role",
                        "test": true,
                        "usage": "The tab `li` element.",
                        "value": "tab",
                        "attribute": "role"
                    }
                ]
            },
            {
                "selector": ".k-timeline.k-timeline-horizontal .k-timeline-track-item[aria-selected=true]",
                "checks": [
                    {
                        "selector": ".k-timeline.k-timeline-horizontal .k-timeline-track-item[aria-selected=true]",
                        "id": "k-timeline-horizontal-item-described",
                        "test": true,
                        "usage": "The current selected tab element must be described by its tabpanel.",
                        "attribute": "aria-describedby"
                    }
                ]
            },
            {
                "selector": ".k-timeline.k-timeline-horizontal .k-timeline-track-item:not(.k-timeline-flag-wrap).k-focus",
                "checks": [
                    {
                        "selector": ".k-timeline.k-timeline-horizontal .k-timeline-track-item:not(.k-timeline-flag-wrap).k-focus",
                        "id": "k-timeline-horizontal-item-selected",
                        "test": true,
                        "usage": "Announces the selected state of the tab.",
                        "value": "true",
                        "attribute": "aria-selected"
                    }
                ]
            },
            {
                "selector": ".k-timeline.k-timeline-horizontal .k-timeline-flag-wrap",
                "checks": [
                    {
                        "selector": ".k-timeline.k-timeline-horizontal .k-timeline-flag-wrap",
                        "id": "k-timeline-horizontal-flag-wrap-role",
                        "test": true,
                        "usage": "The flag wrap elements must have its semantics removed.",
                        "value": "none",
                        "attribute": "role"
                    },
                    {
                        "id": "k-timeline-horizontal-flag-wrap-hidden",
                        "test": true,
                        "usage": "The flag wrap should not be present in the accessibility tree.",
                        "value": "true",
                        "attribute": "aria-hidden"
                    }
                ]
            },
            {
                "selector": ".k-timeline.k-timeline-horizontal .k-card:not(:empty)",
                "checks": [
                    {
                        "selector": ".k-timeline.k-timeline-horizontal .k-card:not(:empty)",
                        "id": "k-timeline-horizontal-panel-role",
                        "test": true,
                        "usage": "The content `div` of the tab.",
                        "value": "tabpanel",
                        "attribute": "role"
                    },
                    {
                        "id": "k-timeline-horizontal-panel-label",
                        "test": true,
                        "usage": "Refers to the tab element that controls the panel.",
                        "attribute": "aria-label"
                    }
                ]
            },
            {
                "selector": ".k-timeline.k-timeline-horizontal .k-timeline-event[style='transform: translate3d(0px, 0px, 0px);'] .k-card",
                "checks": [
                    {
                        "selector": ".k-timeline.k-timeline-horizontal .k-timeline-event[style='transform: translate3d(0px, 0px, 0px);'] .k-card",
                        "id": "k-timeline-horizontal-panel-tabindex",
                        "test": true,
                        "usage": "The current tab panel elements must be focusable, so that its contents would be announced.",
                        "value": "0",
                        "attribute": "tabindex"
                    }
                ]
            },
            {
                "selector": ".k-timeline.k-timeline-vertical .k-card",
                "checks": [
                    {
                        "selector": ".k-timeline.k-timeline-vertical .k-card",
                        "id": "k-timeline-vertical-item-role",
                        "test": true,
                        "usage": "The items in the vertical Timeline are represented as buttons.",
                        "value": "button",
                        "attribute": "role"
                    },
                    {
                        "id": "k-timeline-vertical-item-described",
                        "test": true,
                        "usage": "The items in the vertical Timeline are described by their date elements.",
                        "value": ".k-timeline-date id",
                        "attribute": "aria-describedby"
                    },
                    {
                        "id": "k-timeline-vertical-item-live",
                        "test": true,
                        "usage": "The items in the vertical Timeline must be marked as live regions.",
                        "value": "polite",
                        "attribute": "aria-live"
                    },
                    {
                        "id": "k-timeline-vertical-item-tabindex",
                        "test": true,
                        "usage": "The items in the vertical Timeline must be focusable.",
                        "value": "0",
                        "attribute": "tabindex"
                    }
                ]
            },
            {
                "selector": ".k-timeline.k-timeline-vertical .k-collapsed .k-card",
                "checks": [
                    {
                        "selector": ".k-timeline.k-timeline-vertical .k-collapsed .k-card",
                        "id": "k-timeline-vertical-item-collapsed",
                        "test": true,
                        "usage": "When collapsed, the items in the vertical Timeline must have their \"aria-expanded\" attribute set to false.",
                        "value": "false",
                        "attribute": "aria-expanded"
                    }
                ]
            }
        ]
    },
    "timepicker": {
        "component": "timepicker",
        "rules": [
            {
                "selector": ".k-input-inner",
                "checks": [
                    {
                        "selector": ".k-input-inner",
                        "test": true,
                        "id": "k-timepicker-role",
                        "attribute": "role",
                        "value": "combobox",
                        "usage": "The input element should follow the `combobox` specification."
                    },
                    {
                        "test": true,
                        "id": "k-timepicker-label",
                        "multiple": true,
                        "attribute": [
                            "label for",
                            "aria-label",
                            "aria-labelledby"
                        ],
                        "usage": "The input needs an accessible name to be assigned to it."
                    },
                    {
                        "id": "k-timepicker-expanded",
                        "attribute": "aria-expanded",
                        "test": true,
                        "value": [
                            "true",
                            "false"
                        ],
                        "usage": "Announces whether the Popup is visible or not."
                    },
                    {
                        "id": "k-timepicker-haspopup",
                        "test": true,
                        "attribute": "aria-haspopup",
                        "value": "dialog",
                        "usage": "Indicates the component has a Dialog Popup."
                    },
                    {
                        "test": true,
                        "id": "k-timepicker-controls",
                        "attribute": "aria-controls",
                        "value": ".k-animation-container id",
                        "usage": " Points to the popup element. Signifies that the `combobox` element controls the `dialog` popup."
                    },
                    {
                        "test": true,
                        "id": "k-timepicker-readonly",
                        "when": "readonly",
                        "multiple": true,
                        "attribute": [
                            "readonly",
                            "aria-readonly"
                        ],
                        "value": "true",
                        "usage": "Attribute is rendered only when the DatePicker is readonly."
                    }
                ]
            },
            {
                "selector": ".k-invalid .k-input-inner,.ng-invalid .k-input-inner",
                "checks": [
                    {
                        "selector": ".k-invalid .k-input-inner,.ng-invalid .k-input-inner",
                        "test": true,
                        "id": "k-timepicker-invalid",
                        "attribute": "aria-invalid",
                        "value": "true",
                        "usage": "Attribute is rendered only when the picker is in form and announces the valid state of the component."
                    }
                ]
            },
            {
                "selector": ".k-disabled .k-input-inner",
                "checks": [
                    {
                        "selector": ".k-disabled .k-input-inner",
                        "test": true,
                        "id": "k-timepicker-disabled",
                        "multiple": true,
                        "attribute": [
                            "disabled=disabled",
                            "aria-disabled=true"
                        ],
                        "usage": "Attribute is rendered only when the DatePicker is disabled."
                    }
                ]
            },
            {
                "selector": ".k-input-button",
                "checks": [
                    {
                        "selector": ".k-input-button",
                        "test": true,
                        "id": "k-timepicker-button-role",
                        "multiple": true,
                        "attribute": [
                            "role=button",
                            "nodeName=button"
                        ],
                        "usage": "The element must either be a `<button>` element or must have `role=button` assigned."
                    },
                    {
                        "test": true,
                        "id": "k-timepicker-button-tabindex",
                        "attribute": "tabindex",
                        "value": "-1",
                        "usage": "Button element must not be focusable."
                    }
                ]
            },
            {
                "selector": ".k-timepicker.k-disabled .k-button",
                "checks": [
                    {
                        "selector": ".k-timepicker.k-disabled .k-button",
                        "id": "k-timepicker-togglebutton-disabled",
                        "test": true,
                        "multiple": true,
                        "usage": "Attribute is rendered only when the picker is disabled.",
                        "attribute": [
                            "disabled",
                            "aria-disabled"
                        ]
                    }
                ]
            },
            {
                "selector": ".k-time-list",
                "checks": [
                    {
                        "selector": ".k-time-list",
                        "test": true,
                        "id": "k-timepicker-timelist-role",
                        "attribute": "role",
                        "value": "listbox",
                        "usage": "The timelist elements must have `listbox` role assigned."
                    },
                    {
                        "test": true,
                        "id": "k-timepicker-timelist-label",
                        "attribute": [
                            "aria-label",
                            "aria-labelledby"
                        ],
                        "usage": "The listbox needs an accessible name to be assigned to it."
                    }
                ]
            },
            {
                "selector": ".k-reset",
                "checks": [
                    {
                        "selector": ".k-reset",
                        "test": true,
                        "id": "k-timepicker-reset-role",
                        "attribute": "role",
                        "value": [
                            "none",
                            "presentation"
                        ],
                        "usage": "The k-rest `<ul>` element semantic meaning must be removed from the accessibility tree."
                    }
                ]
            },
            {
                "selector": ".k-item",
                "checks": [
                    {
                        "selector": ".k-item",
                        "test": true,
                        "id": "k-timepicker-item-role",
                        "attribute": "role",
                        "value": "option",
                        "usage": "The available options in the listbox must be marked as such."
                    }
                ]
            }
        ]
    },
    "togglebutton": {
        "component": "togglebutton",
        "rules": [
            {
                "selector": ".k-button",
                "checks": [
                    {
                        "selector": ".k-button",
                        "id": "k-togglebutton-pressed",
                        "test": true,
                        "usage": "Announced the toggle behaviour of the button.",
                        "value": [
                            "true",
                            "false"
                        ],
                        "attribute": "aria-pressed"
                    }
                ]
            }
        ]
    },
    "toolbar": {
        "component": "toolbar",
        "rules": [
            {
                "selector": ".k-toolbar",
                "checks": [
                    {
                        "selector": ".k-toolbar",
                        "id": "k-toolbar-role",
                        "test": true,
                        "usage": "The component role.",
                        "value": "toolbar",
                        "attribute": "role"
                    }
                ]
            },
            {
                "selector": ".k-toolbar .k-toolbar-overflow-button:has(.k-svg-i-more-vertical)",
                "checks": [
                    {
                        "selector": ".k-toolbar .k-toolbar-overflow-button:has(.k-svg-i-more-vertical)",
                        "id": "k-toolbar-overflow-mode-menu-button-has-popup",
                        "test": true,
                        "when": "Overflow mode is menu",
                        "usage": "The value of the \"aria-haspopup\" attribute of the button that opens the overflow popup.",
                        "value": "menu",
                        "attribute": "aria-haspopup"
                    },
                    {
                        "id": "k-toolbar-overflow-mode-menu-button-expanded",
                        "test": true,
                        "usage": "The value of the \"aria-expanded\" attribute of the button that opens the overflow popup.",
                        "value": [
                            "true",
                            "false"
                        ],
                        "attribute": "aria-expanded"
                    },
                    {
                        "id": "k-toolbar-overflow-mode-menu-button-controls",
                        "test": true,
                        "usage": "Indicates the connection between the toggle button and the content it controls.",
                        "attribute": "aria-controls",
                        "value": ".k-toolbar-popup .k-menu-group id"
                    },
                    {
                        "id": "k-toolbar-overflow-mode-menu-button-label",
                        "test": true,
                        "usage": "The button that opens the overflow popup must have a descriptive text set, as it contains only an icon (no text).",
                        "multiple": true,
                        "attribute": [
                            "aria-label",
                            "title"
                        ]
                    }
                ]
            },
            {
                "selector": ".k-toolbar-popup .k-menu-group",
                "checks": [
                    {
                        "selector": ".k-toolbar-popup .k-menu-group",
                        "id": "k-toolbar-overflow-mode-menu-role",
                        "test": true,
                        "when": "Overflow mode is menu",
                        "usage": "The role of the tools wrapper in the overflow section.",
                        "value": "menu",
                        "attribute": "role"
                    },
                    {
                        "id": "k-toolbar-overflow-mode-menu-labelledby",
                        "test": true,
                        "when": "Overflow mode is menu",
                        "usage": "Associates the title of the menu toggle button.",
                        "value": ".k-toolbar .k-toolbar-overflow-button:has(.k-svg-i-more-vertical) id",
                        "attribute": "aria-labelledby"
                    }
                ]
            },
            {
                "selector": ".k-toolbar .k-toolbar-overflow-button:has(.k-svg-i-more-horizontal)",
                "checks": [
                    {
                        "selector": ".k-toolbar .k-toolbar-overflow-button:has(.k-svg-i-more-horizontal)",
                        "id": "k-toolbar-overflow-mode-section-button-expanded",
                        "test": true,
                        "when": "Overflow mode is section",
                        "usage": "The value of the \"aria-expanded\" attribute of the button that opens the overflow section.",
                        "value": [
                            "true",
                            "false"
                        ],
                        "attribute": "aria-expanded"
                    },
                    {
                        "id": "k-toolbar-overflow-mode-section-button-label",
                        "test": true,
                        "usage": "The button that opens the overflow section must have a descriptive text set, as it contains only an icon (no text).",
                        "multiple": true,
                        "attribute": [
                            "aria-label",
                            "title"
                        ]
                    },
                    {
                        "id": "k-toolbar-overflow-mode-section-button-controls",
                        "test": true,
                        "usage": "Indicates the connection between the toggle button and the content it controls.",
                        "attribute": "aria-controls",
                        "value": ".k-toolbar-popup .k-toolbar-items-list id"
                    }
                ]
            },
            {
                "selector": ".k-toolbar-popup .k-toolbar-items-list",
                "checks": [
                    {
                        "selector": ".k-toolbar-popup .k-toolbar-items-list",
                        "id": "k-toolbar-overflow-mode-section-role",
                        "test": true,
                        "when": "Overflow mode is section",
                        "usage": "The role of the tools wrapper in the overflow section.",
                        "value": "toolbar",
                        "attribute": "role"
                    },
                    {
                        "id": "k-toolbar-overflow-mode-section-labelledby",
                        "test": true,
                        "when": "Overflow mode is section",
                        "usage": "Associates the title of the section toggle button.",
                        "value": ".k-toolbar .k-toolbar-overflow-button:has(.k-svg-i-more-horizontal) id",
                        "attribute": "aria-labelledby"
                    }
                ]
            }
        ]
    },
    "tooltip": {
        "component": "tooltip",
        "rules": [
            {
                "selector": ".k-tooltip",
                "checks": [
                    {
                        "selector": ".k-tooltip",
                        "id": "k-tooltip-role",
                        "test": true,
                        "usage": "Specifies the tooltip role of the tooltip container.",
                        "attribute": "role",
                        "value": "tooltip"
                    },
                    {
                        "id": "k-tooltip-id",
                        "test": true,
                        "usage": "The element needs an id to be associated with the aria-describedby attribute of the trigger element.",
                        "attribute": "id"
                    }
                ]
            }
        ]
    },
    "treelist": {
        "component": "treelist",
        "rules": [
            {
                "selector": ".k-grid-toolbar",
                "checks": [
                    {
                        "selector": ".k-grid-toolbar",
                        "test": true,
                        "id": "k-treelist-toolbar-role",
                        "attribute": "role",
                        "value": "toolbar",
                        "usage": "The toolbar is a collection of command buttons and inputs."
                    },
                    {
                        "test": true,
                        "id": "k-treelist-toolbar-label",
                        "attribute": "aria-label",
                        "usage": "Clarifies the purpose of the toolbar."
                    },
                    {
                        "test": true,
                        "id": "k-treelist-toolbar-controls",
                        "attribute": "aria-controls",
                        "value": ".k-grid-aria-root id",
                        "usage": "Pointing to the id of the element with `role=treegrid`."
                    }
                ]
            },
            {
                "selector": ".k-treelist .k-grid-aria-root",
                "checks": [
                    {
                        "selector": ".k-treelist .k-grid-aria-root",
                        "id": "k-treelist-role",
                        "test": true,
                        "usage": "Sets the proper role for the TreeList component.",
                        "value": "treegrid",
                        "attribute": "role"
                    }
                ]
            },
            {
                "selector": ".k-table-tbody .k-i-caret-alt-down,.k-table-tbody .k-i-caret-alt-right,.k-table-tbody .k-svg-i-caret-alt-down,.k-table-tbody .k-svg-i-caret-alt-right",
                "checks": [
                    {
                        "selector": ".k-table-tbody .k-i-caret-alt-down,.k-table-tbody .k-i-caret-alt-right,.k-table-tbody .k-svg-i-caret-alt-down,.k-table-tbody .k-svg-i-caret-alt-right",
                        "id": "k-treelist-tbody-td-icon-hidden",
                        "test": true,
                        "usage": "Removes the expand/collapse icon from the accessibility tree.",
                        "value": "true",
                        "attribute": "aria-hidden"
                    }
                ]
            }
        ]
    },
    "treeview": {
        "component": "treeview",
        "rules": [
            {
                "selector": ".k-treeview-lines",
                "checks": [
                    {
                        "selector": ".k-treeview-lines",
                        "id": "k-treeview-role",
                        "test": true,
                        "usage": "The root `div` element of the treeview.",
                        "value": "tree",
                        "attribute": "role"
                    }
                ]
            },
            {
                "selector": ".k-treeview-group:not(.k-treeview-lines)",
                "checks": [
                    {
                        "selector": ".k-treeview-group:not(.k-treeview-lines)",
                        "id": "k-treeview-group-role",
                        "test": true,
                        "usage": "The `ul` element that wraps child nodes.",
                        "value": "group",
                        "attribute": "role"
                    }
                ]
            },
            {
                "selector": ".k-input-inner",
                "checks": [
                    {
                        "selector": ".k-input-inner",
                        "id": "k-treeview-filter-name",
                        "test": true,
                        "usage": "Specifies the announced name for the filter input.",
                        "attribute": "aria-label"
                    },
                    {
                        "id": "k-treeview-filter-role",
                        "test": true,
                        "usage": "Specifies the role of the filter input.",
                        "attribute": "role",
                        "value": "searchbox"
                    },
                    {
                        "id": "k-treeview-filter-controls",
                        "test": true,
                        "usage": "Points to the main ul element .k-treeview-lines.",
                        "attribute": "aria-controls",
                        "value": ".k-treeview-lines id"
                    }
                ]
            },
            {
                "selector": ".k-treeview-item",
                "checks": [
                    {
                        "selector": ".k-treeview-item",
                        "id": "k-treeview-item-role",
                        "test": true,
                        "usage": "The `li` element rendered for a tree node.",
                        "value": "treeitem",
                        "attribute": "role"
                    },
                    {
                        "id": "k-treeview-item-level",
                        "test": true,
                        "when": "subsection tree",
                        "usage": "Announces the level of the tree node item. The value of the level is number-based (>=1). Must be added when only a subsection of the TreeView is rendered in the DOM.",
                        "attribute": "aria-level"
                    },
                    {
                        "id": "k-treeview-item-setsize",
                        "test": true,
                        "when": "load more",
                        "usage": "Announces the total count of the items at this level. Enables the user to understand the position of the navigation, for example, item 3 of 14. Must be added only when the load-more functionality of the tree is enabled and there are still nodes belonging to the group that are not loaded (rendered) yet.",
                        "attribute": "aria-setsize"
                    },
                    {
                        "id": "k-treeview-item-checked",
                        "test": true,
                        "when": "checkboxes",
                        "usage": "Rendered only when checkboxes are enabled. Announces the checked state of the node. If the checkbox is indeterminate, the value is `mixed`.",
                        "value": [
                            "true",
                            "false"
                        ],
                        "attribute": "aria-checked"
                    }
                ]
            },
            {
                "selector": ".k-treeview-item:has(>.k-selected)",
                "checks": [
                    {
                        "selector": ".k-treeview-item:has(>.k-selected)",
                        "id": "k-treeview-item-selected",
                        "test": true,
                        "usage": "Rendered only when selection is enabled. Announces the selected state of the node.",
                        "value": "true",
                        "attribute": "aria-selected"
                    }
                ]
            },
            {
                "selector": ".k-checkbox",
                "checks": [
                    {
                        "selector": ".k-checkbox",
                        "id": "k-treeview-checkbox-role",
                        "test": true,
                        "when": "checkboxes",
                        "usage": "Added to the wrapper element of the checkbox to prevent duplicated information announced to the user. The checked state is controlled by `aria-checked`.",
                        "value": [
                            "none",
                            "presentation"
                        ],
                        "attribute": "role"
                    }
                ]
            }
        ]
    },
    "Upload": {
        "component": "Upload",
        "rules": [
            {
                "selector": ".k-upload .k-upload-button",
                "checks": [
                    {
                        "selector": ".k-upload .k-upload-button",
                        "id": "k-upload-button-disabled",
                        "test": true,
                        "usage": "Announces the disabled state of the upload button.",
                        "value": [
                            "true",
                            "false"
                        ],
                        "attribute": "aria-disabled"
                    },
                    {
                        "id": "k-upload-button-expanded",
                        "test": true,
                        "usage": "Indicates whether the controlled list of files is present/visible",
                        "value": [
                            "true",
                            "false"
                        ],
                        "attribute": "aria-expanded"
                    },
                    {
                        "id": "k-upload-button-controls",
                        "test": true,
                        "usage": "Creates the relationship between the button and the list of selected files when the list is present. Remove the attribute when list is not present.",
                        "value": ".k-upload-files id",
                        "attribute": "aria-controls"
                    }
                ]
            },
            {
                "selector": ".k-upload input",
                "checks": [
                    {
                        "selector": ".k-upload input",
                        "id": "k-upload-input-tabindex",
                        "test": true,
                        "usage": "Assures that the input element inside the upload is not focusable.",
                        "value": "-1",
                        "attribute": "tabindex"
                    },
                    {
                        "id": "k-upload-input-aria-hidden",
                        "test": true,
                        "multiple": true,
                        "usage": "The input needs to be hidden from the readers.",
                        "value": "true",
                        "attribute": "aria-hidden"
                    }
                ]
            },
            {
                "selector": ".k-upload-files",
                "checks": [
                    {
                        "selector": ".k-upload-files",
                        "id": "k-upload-files-list-role",
                        "test": true,
                        "usage": "Explicitly sets the UL role to list because of https://developer.mozilla.org/en-US/docs/Web/CSS/list-style#accessibility_concerns",
                        "value": "list",
                        "attribute": "role"
                    },
                    {
                        "id": "k-upload-files-list-id",
                        "test": true,
                        "usage": "Unique and deterministic id linked to the button \"aria-controls\" attribute.",
                        "attribute": "id"
                    }
                ]
            },
            {
                "selector": ".k-upload-files .k-file",
                "checks": [
                    {
                        "selector": ".k-upload-files .k-file",
                        "id": "k-upload-file-list-item-role",
                        "test": true,
                        "usage": "Explicitly sets the LI role to listitem because of https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Roles/listitem_role#best_practices (note 2).",
                        "value": "listitem",
                        "attribute": "role"
                    },
                    {
                        "id": "k-upload-file-list-item-focusable",
                        "test": true,
                        "usage": "The element should be focusable. Value should be changed dynamically based on the roving tabindex navigation.",
                        "value": [
                            "0",
                            "-1"
                        ],
                        "attribute": "tabindex"
                    }
                ]
            },
            {
                "selector": ".k-upload .k-file .k-file-validation-message",
                "checks": [
                    {
                        "selector": ".k-upload .k-file .k-file-validation-message",
                        "id": "k-upload-file-validation-aria-live",
                        "test": true,
                        "usage": "Announces the change in the upload status of the file.",
                        "value": "polite",
                        "attribute": "aria-live"
                    }
                ]
            },
            {
                "selector": ".k-upload .k-upload-actions .k-upload-action",
                "checks": [
                    {
                        "selector": ".k-upload .k-upload-actions .k-upload-action",
                        "id": "k-upload-file-action-buttons-aria-hidden",
                        "test": true,
                        "usage": "The list file action buttons must be hidden from the readers.",
                        "value": "true",
                        "attribute": "aria-hidden"
                    },
                    {
                        "id": "k-upload-file-action-buttons-tabindex",
                        "test": true,
                        "usage": "Assures that the list file action buttons are not focusable elements.",
                        "value": "-1",
                        "attribute": "tabindex"
                    }
                ]
            }
        ]
    },
    "validation": {
        "component": "validation",
        "rules": [
            {
                "selector": ".k-validation-error",
                "checks": [
                    {
                        "selector": ".k-validation-error",
                        "id": "k-validation-error-role",
                        "test": true,
                        "usage": "Validation error element inside the Tooltip should be marked as an alert.",
                        "value": "alert",
                        "attribute": "role"
                    }
                ]
            }
        ]
    },
    "window": {
        "component": "window",
        "rules": [
            {
                "selector": ".k-window:not(.k-dialog)",
                "checks": [
                    {
                        "selector": ".k-window:not(.k-dialog)",
                        "id": "k-window-role",
                        "test": true,
                        "usage": "Announces the dialog role of the component.",
                        "value": "dialog",
                        "attribute": "role"
                    },
                    {
                        "id": "k-window-label",
                        "test": true,
                        "usage": "Associate the title of the dialog.",
                        "value": ".k-window-title id",
                        "attribute": "aria-labelledby"
                    }
                ]
            },
            {
                "selector": ".k-overlay + .k-window",
                "checks": [
                    {
                        "selector": ".k-overlay + .k-window",
                        "id": "k-window-modal",
                        "test": true,
                        "usage": "Announces that the dialog is modal. Attribute is added only when the dialog is modal.",
                        "value": "true",
                        "attribute": "aria-modal"
                    }
                ]
            }
        ]
    },
    "wizard": {
        "component": "wizard",
        "rules": [
            {
                "selector": ".k-step-list",
                "checks": [
                    {
                        "selector": ".k-step-list",
                        "id": "k-wizard-role",
                        "test": true,
                        "usage": "Indicates the role of the tablist container element.",
                        "value": "tablist",
                        "attribute": "role"
                    }
                ]
            },
            {
                "selector": ".k-step",
                "checks": [
                    {
                        "selector": ".k-step",
                        "id": "k-wizard-step-role",
                        "test": true,
                        "usage": "The implicit semantics of the `li` element must be removed.",
                        "value": "none",
                        "attribute": "role"
                    }
                ]
            },
            {
                "selector": ".k-step-link",
                "checks": [
                    {
                        "selector": ".k-step-link",
                        "id": "k-wizard-link-role",
                        "test": true,
                        "usage": "Specifies the role for the step links.",
                        "value": "tab",
                        "attribute": "role"
                    },
                    {
                        "id": "k-wizard-link-controls",
                        "test": true,
                        "usage": "Refers to the tabpanel element associated with the tab.",
                        "value": ".k-wizard-step id",
                        "attribute": "aria-controls"
                    }
                ]
            },
            {
                "selector": ".k-step-disabled>.k-step-link",
                "checks": [
                    {
                        "selector": ".k-step-disabled>.k-step-link",
                        "id": "k-wizard-link-disabled",
                        "test": true,
                        "usage": "A disabled (inactive) tab.",
                        "value": "true",
                        "attribute": "aria-disabled"
                    }
                ]
            },
            {
                "selector": ".k-step-current .k-step-link",
                "checks": [
                    {
                        "selector": ".k-step-current .k-step-link",
                        "id": "k-wizard-link-selected",
                        "test": true,
                        "usage": "Indicates whether the tab control is activated and its associated panel is displayed, or not.",
                        "attribute": "aria-selected"
                    },
                    {
                        "id": "k-wizard-link-current",
                        "test": true,
                        "usage": "Indicates whether the tab control is activated and its associated panel is displayed, or not.",
                        "attribute": "aria-current",
                        "value": "true"
                    },
                    {
                        "id": "k-wizard-link-current-tabindex",
                        "test": true,
                        "usage": "Removes the element from the page Tab sequence. Set when a tab is not selected so that only the selected tab is in the page Tab sequence.",
                        "value": "0",
                        "attribute": "tabindex"
                    }
                ]
            },
            {
                "selector": ".k-step:not(.k-step-current) .k-step-link",
                "checks": [
                    {
                        "selector": ".k-step:not(.k-step-current) .k-step-link",
                        "id": "k-wizard-link-tabindex",
                        "test": true,
                        "usage": "Removes the element from the page Tab sequence. Set when a tab is not selected so that only the selected tab is in the page Tab sequence.",
                        "value": "-1",
                        "attribute": "tabindex"
                    }
                ]
            },
            {
                "selector": ".k-wizard-step",
                "checks": [
                    {
                        "selector": ".k-wizard-step",
                        "id": "k-wizard-tabpanel-role",
                        "test": true,
                        "usage": "Specifies the role of the element.",
                        "value": "tabpanel",
                        "attribute": "role"
                    },
                    {
                        "id": "k-wizard-step-label",
                        "test": true,
                        "usage": "Specifies a label tor the panel. As the Wizard represents a step-by-step process, that is usually the pager text (e.g. \"Step 2 of 4\")",
                        "attribute": "aria-label"
                    },
                    {
                        "id": "k-wizard-step-tabindex",
                        "test": true,
                        "usage": "Keeps the tabpanel in the page tab sequence.",
                        "value": "0",
                        "attribute": "tabindex"
                    }
                ]
            }
        ]
    }
}