Skip to content

Complete the semantic HTML element surface and native control behaviour #367

Description

@Ernxst

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.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions