Problem
Shared browser/desktop components cannot use ordinary table tags or dl/dt/dd, and input type=radio is unavailable. Consumers must substitute generic elements with explicit ARIA roles and implement radio selection, roving tabIndex, and arrow-key navigation themselves.
The JSX declarations at fork commit 535c6b6 still omit these element families. See packages/react/jsx-runtime.d.ts and jsx-dev-runtime.d.ts. Existing h1–h6 and ul/ol/li aliases already help.
Scope
Audit the complete HTML element surface in one pass and publish an explicit supported/missing/deferred inventory. Implement related families together rather than adding one tag per consumer workaround. Start with:
- Tables: table, caption, thead, tbody, tfoot, tr, th, td, colgroup, col; header relationships and row/column spans.
- Description lists: dl, dt, dd.
- Grouping and metadata: fieldset/legend, figure/figcaption, time, output, and other omitted text/content elements identified by the inventory.
- Native form controls, including input type=radio and checkbox: checked/defaultChecked, grouping, disabled state, labels, keyboard activation and focus behaviour.
- Meter/progress elements, coordinated with the separate numeric accessibility issue.
This is more than adding JSX aliases. Each family needs its DOM-compatible attributes, implicit roles, accessible names/states/relationships, applicable keyboard behaviour, and honest layout support. Distinguish semantic table support from browser table-layout support; do not claim the latter solely because roles project correctly. Identify GPUI gaps at their actual layer.
Acceptance
- An inventory accounts for the complete HTML surface, including explicit decisions for intentionally unsupported elements.
- Supported elements typecheck in both JSX runtimes and project correct native accessibility nodes without consumers repeating implicit roles.
- Representative browser/native fixtures verify names, hierarchy, spans, state changes, and keyboard behaviour where applicable.
- Native radio groups handle selection, arrow wrapping, Space and Tab according to browser behaviour without application-authored radio plumbing.
- README documents support and limitations.
Related existing issues: #353 (global ARIA on nodes without roles), #358 (plain input/textarea accessibility), #355 (value-text naming). Reuse those issues rather than duplicating their work.
Problem
Shared browser/desktop components cannot use ordinary table tags or dl/dt/dd, and input type=radio is unavailable. Consumers must substitute generic elements with explicit ARIA roles and implement radio selection, roving tabIndex, and arrow-key navigation themselves.
The JSX declarations at fork commit 535c6b6 still omit these element families. See packages/react/jsx-runtime.d.ts and jsx-dev-runtime.d.ts. Existing h1–h6 and ul/ol/li aliases already help.
Scope
Audit the complete HTML element surface in one pass and publish an explicit supported/missing/deferred inventory. Implement related families together rather than adding one tag per consumer workaround. Start with:
This is more than adding JSX aliases. Each family needs its DOM-compatible attributes, implicit roles, accessible names/states/relationships, applicable keyboard behaviour, and honest layout support. Distinguish semantic table support from browser table-layout support; do not claim the latter solely because roles project correctly. Identify GPUI gaps at their actual layer.
Acceptance
Related existing issues: #353 (global ARIA on nodes without roles), #358 (plain input/textarea accessibility), #355 (value-text naming). Reuse those issues rather than duplicating their work.