import type { TtscLintRuleSetting } from "../TtscLintRuleSetting"; /** * JSX accessibility rules from `eslint-plugin-jsx-a11y`, applied to TSX (and * JSX-in-TS) sources. * * Checks the static structure of JSX elements against WAI-ARIA authoring * guidance — interactive controls should be focusable, labels should reference * a control, ARIA properties should match the element role, and so on. Runtime * accessibility issues require live audits; this family catches the * statically-decidable subset. * * @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y * * @evidence contracts/common.md#principled-implementation Optional jsx-a11y identifiers represent independently configurable static accessibility policies through the severity-only union, without suggesting runtime accessibility certification. * @evidence contracts/common.md#clear-and-simple-design The family keeps JSX accessibility concerns together and delegates severity forms to one alias rather than adding per-rule option layers. * @evidence contracts/common.md#prohibited-implementation-shortcuts The keys are supported accessibility rule identities; this representation contains no fixture allowance or foreign runtime mutation. * @evidence contracts/common.md#meaningful-documentation Family prose distinguishes static analysis from live audits and member comments explain ARIA, labels and interaction concerns; paragraphs and member boundaries follow documentation guidance. */ export interface ITtscLintJsxA11yRules { /** * Require image-like JSX elements (``, ``, * ``, ``) to expose alt text or an ARIA label. * * @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/alt-text.md */ "jsx-a11y/alt-text"?: TtscLintRuleSetting; /** * Reject `` elements whose visible text is one of a small set of phrases * that carry no information out of context. Screen-reader users navigate by * listing links — "click here" / "more" / "read more" turn that list into * noise. * * @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/anchor-ambiguous-text.md */ "jsx-a11y/anchor-ambiguous-text"?: TtscLintRuleSetting; /** * Reject empty JSX anchors with no accessible content (text, `aria-label`, or * labelled child). * * @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/anchor-has-content.md */ "jsx-a11y/anchor-has-content"?: TtscLintRuleSetting; /** * Reject anchors with missing, `#`-only, empty, or `javascript:` `href` * values, all of which break navigation semantics. * * @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/anchor-is-valid.md */ "jsx-a11y/anchor-is-valid"?: TtscLintRuleSetting; /** * Require an explicit tabIndex on elements carrying aria-activedescendant, * including natively focusable tags. Elements with a spread are skipped * because the attribute may arrive through it. * * @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/aria-activedescendant-has-tabindex.md */ "jsx-a11y/aria-activedescendant-has-tabindex"?: TtscLintRuleSetting; /** * Reject `aria-*` JSX attribute names that are not part of the WAI-ARIA * States and Properties spec — catches typos such as `aria-labeledby` * (missing second `l`) that silently disable assistive-tech support. * * @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/aria-props.md */ "jsx-a11y/aria-props"?: TtscLintRuleSetting; /** * Validate the native subset of boolean, tristate, and integer ARIA values — * e.g. `aria-checked` must be one of `true`, `false`, `"mixed"`, and * `aria-hidden="yes"` is rejected because the type is boolean. * * @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/aria-proptypes.md */ "jsx-a11y/aria-proptypes"?: TtscLintRuleSetting; /** * Require `role` values to be a concrete, non-abstract WAI-ARIA role * (`"button"`, `"checkbox"`, ...). Rejects misspellings and abstract roles * like `"range"`; computed values are skipped because the concrete role * cannot be checked statically. * * @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/aria-role.md */ "jsx-a11y/aria-role"?: TtscLintRuleSetting; /** * Reject ARIA roles and attributes on elements that do not support them (e.g. * `aria-checked` on a `` tag). * * @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/aria-unsupported-elements.md */ "jsx-a11y/aria-unsupported-elements"?: TtscLintRuleSetting; /** * Validate the literal `autocomplete` token against the HTML spec vocabulary * and against the `type` of the surrounding input — e.g. `autocomplete="url"` * on `` is rejected because the two sets do not overlap. * * @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/autocomplete-valid.md */ "jsx-a11y/autocomplete-valid"?: TtscLintRuleSetting; /** * Require keyboard handlers alongside `onClick` on non-interactive JSX * elements so the element is also reachable by keyboard. * * @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/click-events-have-key-events.md */ "jsx-a11y/click-events-have-key-events"?: TtscLintRuleSetting; /** * Require interactive controls to have an accessible label (visible text, * `aria-label`, or `aria-labelledby`). * * @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/control-has-associated-label.md */ "jsx-a11y/control-has-associated-label"?: TtscLintRuleSetting; /** * Reject empty JSX headings (`

{}

`) — assistive technology cannot * announce content that does not exist. * * @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/heading-has-content.md */ "jsx-a11y/heading-has-content"?: TtscLintRuleSetting; /** * Require `` JSX elements to declare a non-empty `lang` attribute so * screen readers can pick the correct pronunciation. Largely superseded by * `jsx-a11y/lang`, which also validates the tag value. * * @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/html-has-lang.md */ "jsx-a11y/html-has-lang"?: TtscLintRuleSetting; /** * Require a known, nonempty title value on iframe JSX elements without a * spread. The native check does not compare title uniqueness and skips * elements carrying a spread. * * @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/iframe-has-title.md */ "jsx-a11y/iframe-has-title"?: TtscLintRuleSetting; /** * Reject redundant words such as _image_, _photo_, or _picture_ inside the * `alt` attribute of an `` — the role already conveys "this is an * image". * * @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/img-redundant-alt.md */ "jsx-a11y/img-redundant-alt"?: TtscLintRuleSetting; /** * Require elements with interactive ARIA roles (`role="button"`, * `role="link"`, ...) to be focusable. * * @reference https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/interactive-supports-focus.md */ "jsx-a11y/interactive-supports-focus"?: TtscLintRuleSetting; /** * Require `