From 0039b8f4c37b197c751be0c4784b7417c6454c6a Mon Sep 17 00:00:00 2001 From: Jacques Newman Date: Wed, 24 Sep 2025 18:54:08 -0700 Subject: [PATCH 01/11] Initial commit --- source | 132 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 132 insertions(+) diff --git a/source b/source index 2c5ffa547d9..9cc0f9c571a 100644 --- a/source +++ b/source @@ -12539,6 +12539,7 @@ interface HTMLElement : Element { [CEReactions, ReflectSetter] attribute DOMString writingSuggestions; [CEReactions, ReflectSetter] attribute DOMString autocapitalize; [CEReactions] attribute boolean autocorrect; + [CEReactions, Reflect] attribute DOMString focusgroup; [CEReactions] attribute [LegacyNullToEmptyString] DOMString innerText; [CEReactions] attribute [LegacyNullToEmptyString] DOMString outerText; @@ -12625,6 +12626,7 @@ interface HTMLUnknownElement : HTMLElement { [CEReactions, Reflect] attribute boolean autofocus; [CEReactions, ReflectSetter] attribute long tabIndex; + [CEReactions, Reflect] attribute DOMString focusgroup; undefined focus(optional FocusOptions options = {}); undefined blur(); }; @@ -13896,6 +13898,7 @@ https://software.hixie.ch/utilities/js/live-dom-viewer/?%3C%21DOCTYPE%20HTML%3E%
  • dir
  • draggable
  • enterkeyhint
  • +
  • focusgroup
  • headingoffset
  • headingreset
  • hidden
  • @@ -90131,6 +90134,135 @@ dictionary DragEventInit : MouseEventInit { +

    The focusgroup attribute

    + +

    The focusgroup + content attribute provides declarative focus navigation for a group of related focusable + elements. When applied to an element, it enables directional arrow key navigation among its + focusable descendants, forming a focus group.

    + +

    The attribute's value is a string of space-separated tokens. The first token must be a + behavior token, which defines the primary interaction pattern. Subsequent tokens are + optional modifier tokens. The exception is the `none` token, which must be used + alone.

    + + + + + + + + + + + + + + + + +
    Token + Type + Description +
    `toolbar` + Behavior + Indicates a toolbar pattern. Infers a `toolbar` role. +
    `tablist` + Behavior + Indicates a tablist pattern. Infers a `tablist` role for the owner and a `tab` role for items. +
    `radiogroup` + Behavior + Indicates a radiogroup pattern. Infers a `radiogroup` role for the owner and a `radio` role for items. +
    `listbox` + Behavior + Indicates a listbox pattern. Infers a `listbox` role for the owner and an `option` role for items. +
    `menu` + Behavior + Indicates a menu pattern. Infers a `menu` role for the owner and a `menuitem` role for items. +
    `menubar` + Behavior + Indicates a menubar pattern. Infers a `menubar` role for the owner and a `menuitem` role for items. +
    `wrap` + Modifier + Enables navigation to wrap from the last item to the first, and vice-versa. +
    `inline` + Modifier + Restricts arrow key navigation to the inline axis (e.g., left/right arrows). +
    `block` + Modifier + Restricts arrow key navigation to the block axis (e.g., up/down arrows). +
    `no-memory` + Modifier + Disables the "last focused item" memory when re-entering the focus group. +
    `none` + Behavior + Opts the element and its descendants out of any ancestor focus group. +
    + +
    Concepts
    + +

    A focusgroup owner is an element with the focusgroup attribute specified.

    + +

    The focusgroup scope of a focusgroup owner is the owner itself and all of its shadow-inclusive descendants, excluding any descendants that are themselves focusgroup owners or have opted out with focusgroup="none".

    + +

    A focusgroup item is any focusable element within the focusgroup scope.

    + +
    ARIA Role Inference
    + +

    When a behavior token is used, the user agent may infer a corresponding ARIA role for the focusgroup owner and its items. This inference must only occur if the element would otherwise have a generic role (such as a `

    ` or ``) and does not have an explicit role attribute.

    + +

    For example, `

    ` would be exposed with a `toolbar` role. However, if the element has existing semantics (e.g., `