From d0d899155e8f17c55300ef3186b0d5b29e8c37b7 Mon Sep 17 00:00:00 2001
From: Claude
Date: Tue, 10 Mar 2026 02:54:17 +0000
Subject: [PATCH 01/13] feat: add focusgroup attribute section to
keyboard-interface practice
Add comprehensive documentation about the emerging focusgroup HTML
attribute to the keyboard-interface practice page (both EN and JA).
Includes interactive demo component with linear, wrapping, and grid
focusgroup examples, browser support detection, comparison table
with existing JS-based approaches, and progressive enhancement guidance.
https://claude.ai/code/session_01M8kaqxuhunpzSu9MynhadN
---
.../keyboard-interface/FocusgroupDemo.astro | 208 ++++++++++++++++++
.../keyboard-interface/content.ja.mdx | 168 ++++++++++++++
src/practices/keyboard-interface/content.mdx | 168 ++++++++++++++
3 files changed, 544 insertions(+)
create mode 100644 src/practices/keyboard-interface/FocusgroupDemo.astro
diff --git a/src/practices/keyboard-interface/FocusgroupDemo.astro b/src/practices/keyboard-interface/FocusgroupDemo.astro
new file mode 100644
index 00000000..5a3d4642
--- /dev/null
+++ b/src/practices/keyboard-interface/FocusgroupDemo.astro
@@ -0,0 +1,208 @@
+---
+/**
+ * Interactive demo for the focusgroup HTML attribute.
+ *
+ * Shows three demos side-by-side:
+ * 1. Linear focusgroup (toolbar-like)
+ * 2. Wrapping focusgroup
+ * 3. Grid focusgroup
+ *
+ * Each demo includes a fallback for browsers that do not support focusgroup.
+ */
+---
+
+
+ {/* Demo 1: Linear focusgroup */}
+
+
+ Linear Focusgroup (focusgroup="horizontal")
+
+
+ Bold
+ Italic
+ Underline
+ Strikethrough
+
+
+ Use ← → arrow keys to navigate. Focus stops at the edges.
+
+
+
+ {/* Demo 2: Wrapping focusgroup */}
+
+
+ Wrapping Focusgroup (focusgroup="horizontal wrap")
+
+
+
+
+
+
+
+
+
+ Use ← → arrow keys. Focus wraps around from last to first and vice versa.
+
+
+
+ {/* Demo 3: Grid focusgroup */}
+
+
+ Grid Focusgroup (focusgroup="grid")
+
+
+
+ 😀
+ 😂
+ 🥰
+
+
+ 😎
+ 🤔
+ 👍
+
+
+ 🎉
+ ❤️
+ 🔥
+
+
+
+ Use ← → ↑ ↓ arrow keys to navigate the 2D grid.
+
+
+
+ {/* Browser support notice */}
+
+
Your browser does not support the focusgroup attribute yet.
+
+ The focusgroup attribute is currently supported in Chromium-based browsers
+ (Chrome 133+, Edge 133+) behind a flag or origin trial.
+ The demos above show the intended markup, but arrow key navigation will not work without
+ JavaScript polyfill or browser support.
+
+
+
+
+ Your browser supports the focusgroup attribute!
+
+
+ Try tabbing into each demo above and using arrow keys to navigate.
+ Notice how the browser handles roving tabindex automatically — no JavaScript needed.
+
+
+
+
+
diff --git a/src/practices/keyboard-interface/content.ja.mdx b/src/practices/keyboard-interface/content.ja.mdx
index 6b687ef0..5913a73c 100644
--- a/src/practices/keyboard-interface/content.ja.mdx
+++ b/src/practices/keyboard-interface/content.ja.mdx
@@ -1,4 +1,5 @@
import CodeFigure from '@/components/ui/CodeFigure.astro';
+import FocusgroupDemo from './FocusgroupDemo.astro';
## 概要
@@ -303,6 +304,173 @@ class ActiveDescendant {
```
+### focusgroup 属性(新しい標準仕様)
+
+`focusgroup` HTML属性は、**JavaScriptなしで矢印キーナビゲーションを宣言的に実現する**新しいWeb標準です。従来、複合ウィジェット(ツールバー、タブリスト、グリッドなど)のキーボードナビゲーションを実装するには、ロービング tabindex や `aria-activedescendant` を管理するための大量のJavaScriptが必要でした。`focusgroup` 属性は、これをブラウザにネイティブで処理させることを目指しています。
+
+#### 動作の仕組み
+
+コンテナ要素に `focusgroup` を追加すると、ブラウザが以下を自動的に行います:
+
+1. **フォーカス可能な子孫要素を1つのTabストップに集約** — 複数の `` があっても、Tabで到達できるのは1つだけ
+2. **子要素間の矢印キーナビゲーションを有効化**
+3. **ロービング tabindex を自動管理** — ブラウザが内部的に `tabindex` 値を制御
+4. **最後にフォーカスした要素を記憶** — TabでグループToリーブし戻ると、前回フォーカスした要素に戻る
+
+
+
+ 太字
+ 斜体
+ 下線
+
+
+
+
+ 太字
+ 斜体
+ 下線
+
`}
+ lang="html"
+ caption="focusgroup 属性は手動のロービング tabindex 管理を置き換えます。ブラウザがボタンを1つの Tab ストップに自動的に集約し、矢印キーナビゲーションを有効にします。"
+/>
+
+#### 利用可能な値
+
+`focusgroup` 属性はスペース区切りのトークンでナビゲーション動作を制御します:
+
+| 値 | 動作 |
+| ------------ | ------------------------------------------------------------------------------ |
+| `horizontal` | 左右矢印キーのみでナビゲート(水平ツールバー、タブリストに適用) |
+| `vertical` | 上下矢印キーのみでナビゲート(縦メニュー、リストボックスに適用) |
+| `wrap` | 最後の項目から最初の項目へ(またはその逆に)フォーカスがラップする |
+| `grid` | 4方向の矢印キーで2Dナビゲーション(グリッド、日付ピッカーに適用) |
+| `extend` | ネストされたfocusgroupを親のfocusgroupに統合し、1つの論理グループとして機能する |
+
+これらの値を組み合わせることができます:
+
+
+
+ 切り取り
+ コピー
+ 貼り付け
+
+
+
+
+
+
+
+
+ 1
+ 2
+ 3
+
+
+ 4
+ 5
+ 6
+
+
`}
+ lang="html"
+ caption="異なるナビゲーションパターンに対する focusgroup 値の組み合わせ。"
+/>
+
+#### ネストされた focusgroup と extend
+
+focusgroupがネストされている場合、デフォルトではそれぞれが独立したナビゲーションスコープを作成します。`extend` キーワードを使うと、子のfocusgroupが親に統合され、1つの論理グループとして機能します:
+
+
+
+
A1
+
+
+ B1
+ B2
+
+
A2
+
+
+
+
+
A1
+
+
+ B1
+ B2
+
+
A2
+
`}
+ lang="html"
+ caption="extend なしではネストされた focusgroup は独立します。extend を使うと親の focusgroup に統合されます。"
+/>
+
+#### Shadow DOM との連携
+
+`focusgroup` 属性はデフォルトで Shadow DOM 境界を越えて動作します。シャドウホストに宣言されたfocusgroupは、そのホストのシャドウツリー内のフォーカス可能な要素を含みます。シャドウツリー内で除外したい場合は `focusgroup="none"` を使用します。
+
+#### キーの競合処理
+
+focusgroup内に ` ` や `
- The demos below use a JavaScript roving tabindex fallback so
- you can still try the keyboard navigation. In browsers with native support
- (Chromium 133+), no JavaScript is needed.
+ The focusgroup attribute is currently supported in
+ Chromium-based browsers (Chrome 133+, Edge 133+). The demos below show
+ the intended markup, but arrow key navigation requires browser support.
focusgroup attribute!
- The demos below use the native focusgroup attribute — no
- JavaScript needed. Try tabbing in and using arrow keys.
+ Try tabbing into each demo below and using arrow keys to navigate.
+ Notice how the browser handles roving tabindex automatically — no
+ JavaScript needed.
@@ -48,30 +49,29 @@
>)
Bold
Italic
Underline
Strikethrough
@@ -89,35 +89,34 @@
>)
@@ -135,29 +134,28 @@
>)
😀
😂
🥰
@@ -165,19 +163,19 @@
😎
🤔
👍
@@ -185,19 +183,19 @@
🎉
❤️
🔥
@@ -210,156 +208,13 @@
From bfbdb105d59c3fad1c7433b4e36262702b9fe94d Mon Sep 17 00:00:00 2001
From: Claude
Date: Tue, 10 Mar 2026 04:48:37 +0000
Subject: [PATCH 04/13] feat: make focusgroup comparison table responsive
Replace markdown table with a dedicated Astro component that shows
a standard table on desktop (md+) and stacked cards on mobile.
https://claude.ai/code/session_01M8kaqxuhunpzSu9MynhadN
---
.../FocusgroupComparisonTable.astro | 89 +++++++++++++++++++
.../keyboard-interface/content.ja.mdx | 12 +--
src/practices/keyboard-interface/content.mdx | 12 +--
3 files changed, 93 insertions(+), 20 deletions(-)
create mode 100644 src/practices/keyboard-interface/FocusgroupComparisonTable.astro
diff --git a/src/practices/keyboard-interface/FocusgroupComparisonTable.astro b/src/practices/keyboard-interface/FocusgroupComparisonTable.astro
new file mode 100644
index 00000000..44b4370a
--- /dev/null
+++ b/src/practices/keyboard-interface/FocusgroupComparisonTable.astro
@@ -0,0 +1,89 @@
+---
+/**
+ * Responsive comparison table: Roving tabindex vs aria-activedescendant vs focusgroup.
+ *
+ * - Desktop (md+): standard HTML table
+ * - Mobile (
+
+
+
+ {aspectHeader}
+ {colHeaders.roving}
+ {colHeaders.activedesc}
+ {colHeaders.focusgroup}
+
+
+
+ {rows.map((row) => (
+
+ {row.aspect}
+ {row.roving}
+ {row.activedesc}
+ {row.focusgroup}
+
+ ))}
+
+
+
+
+{/* Mobile: stacked cards per approach */}
+
+ {([
+ { key: 'roving' as const, header: colHeaders.roving },
+ { key: 'activedesc' as const, header: colHeaders.activedesc },
+ { key: 'focusgroup' as const, header: colHeaders.focusgroup },
+ ]).map(({ key, header }) => (
+
+
{header}
+
+ {rows.map((row) => (
+
+
{row.aspect}
+ {row[key]}
+
+ ))}
+
+
+ ))}
+
diff --git a/src/practices/keyboard-interface/content.ja.mdx b/src/practices/keyboard-interface/content.ja.mdx
index 5913a73c..a28e1d21 100644
--- a/src/practices/keyboard-interface/content.ja.mdx
+++ b/src/practices/keyboard-interface/content.ja.mdx
@@ -1,5 +1,6 @@
import CodeFigure from '@/components/ui/CodeFigure.astro';
import FocusgroupDemo from './FocusgroupDemo.astro';
+import FocusgroupComparisonTable from './FocusgroupComparisonTable.astro';
## 概要
@@ -425,16 +426,7 @@ focusgroup内に ` ` や `` のようなフォーカス可能な
#### JavaScript ベースのアプローチとの比較
-| 観点 | ロービング tabindex(JS) | aria-activedescendant(JS) | focusgroup(HTML) |
-| ------------------------ | ------------------------- | --------------------------- | ----------------------------- |
-| JavaScript の必要性 | あり | あり | なし |
-| Tab ストップ管理 | 手動で tabindex を入替え | コンテナがフォーカスを保持 | 自動 |
-| 矢印キーの処理 | カスタム keydown ハンドラ | カスタム keydown ハンドラ | ブラウザ組み込み |
-| フォーカス記憶 | 手動実装が必要 | 手動実装が必要 | 組み込み(デフォルト動作) |
-| ラップ動作 | 手動実装が必要 | 手動実装が必要 | `wrap` キーワード |
-| グリッドナビゲーション | 複雑な実装が必要 | 複雑な実装が必要 | `grid` キーワード |
-| ブラウザサポート | 全ブラウザ | 全ブラウザ | Chromium 133+(実験的) |
-| スクリーンリーダー対応 | 広く対応 | 対応状況にばらつき | ロービング tabindex と同等 |
+
#### ブラウザサポートとプログレッシブエンハンスメント
diff --git a/src/practices/keyboard-interface/content.mdx b/src/practices/keyboard-interface/content.mdx
index 0d83dfe8..91410000 100644
--- a/src/practices/keyboard-interface/content.mdx
+++ b/src/practices/keyboard-interface/content.mdx
@@ -1,5 +1,6 @@
import CodeFigure from '@/components/ui/CodeFigure.astro';
import FocusgroupDemo from './FocusgroupDemo.astro';
+import FocusgroupComparisonTable from './FocusgroupComparisonTable.astro';
## Overview
@@ -425,16 +426,7 @@ When focusable children like ` ` or `` exist inside a focusgroup
#### Comparison with JavaScript-based Approaches
-| Aspect | Roving tabindex (JS) | aria-activedescendant (JS) | focusgroup (HTML) |
-| --------------------- | ----------------------------- | ---------------------------- | --------------------------- |
-| JavaScript required | Yes | Yes | No |
-| Tab stop management | Manual tabindex swapping | Container holds focus | Automatic |
-| Arrow key handling | Custom keydown handler | Custom keydown handler | Built-in |
-| Focus memory | Must implement manually | Must implement manually | Built-in (default behavior) |
-| Wrap behavior | Must implement manually | Must implement manually | `wrap` keyword |
-| Grid navigation | Complex implementation | Complex implementation | `grid` keyword |
-| Browser support | All browsers | All browsers | Chromium 133+ (experimental)|
-| Screen reader support | Widely supported | Varies | Aligned with roving tabindex|
+
#### Browser Support and Progressive Enhancement
From dea69acb29789a157277c04ee2f0ff9593b8353a Mon Sep 17 00:00:00 2001
From: Claude
Date: Tue, 10 Mar 2026 06:20:18 +0000
Subject: [PATCH 05/13] fix: use correct focusgroup attribute values based on
MS Edge demos
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
The focusgroup attribute uses `toolbar` as the primary keyword
(not `horizontal`/`vertical`/`grid`). Key changes:
- Demo: `focusgroup="horizontal"` → `focusgroup="toolbar"`
- Demo: `focusgroup="horizontal wrap"` → `focusgroup="toolbar wrap"`
- Demo: Replace grid demo (not yet implemented) with vertical
toolbar demo (`focusgroup="toolbar block"`)
- Feature detection: `focusGroup` (camelCase) → `focusgroup`
- Update Available Values table with correct tokens (toolbar,
inline, block, wrap, nomemory, extend, none)
- Update nested focusgroup examples to match MS Edge patterns
- Extract comparison table into responsive FocusgroupComparisonTable
component (table on desktop, stacked cards on mobile)
Reference: https://microsoftedge.github.io/Demos/focusgroup/
https://claude.ai/code/session_01M8kaqxuhunpzSu9MynhadN
---
.../FocusgroupComparisonTable.astro | 4 +-
.../keyboard-interface/FocusgroupDemo.astro | 127 ++++++------------
.../keyboard-interface/content.ja.mdx | 69 +++++-----
src/practices/keyboard-interface/content.mdx | 69 +++++-----
4 files changed, 105 insertions(+), 164 deletions(-)
diff --git a/src/practices/keyboard-interface/FocusgroupComparisonTable.astro b/src/practices/keyboard-interface/FocusgroupComparisonTable.astro
index 44b4370a..17983ad0 100644
--- a/src/practices/keyboard-interface/FocusgroupComparisonTable.astro
+++ b/src/practices/keyboard-interface/FocusgroupComparisonTable.astro
@@ -21,7 +21,7 @@ const rows: Row[] = isJa
{ aspect: '矢印キーの処理', roving: 'カスタム keydown ハンドラ', activedesc: 'カスタム keydown ハンドラ', focusgroup: 'ブラウザ組み込み' },
{ aspect: 'フォーカス記憶', roving: '手動実装が必要', activedesc: '手動実装が必要', focusgroup: '組み込み(デフォルト動作)' },
{ aspect: 'ラップ動作', roving: '手動実装が必要', activedesc: '手動実装が必要', focusgroup: 'wrap キーワード' },
- { aspect: 'グリッドナビゲーション', roving: '複雑な実装が必要', activedesc: '複雑な実装が必要', focusgroup: 'grid キーワード' },
+ { aspect: '垂直ナビゲーション', roving: '手動でキー方向を切替', activedesc: '手動でキー方向を切替', focusgroup: 'block キーワード' },
{ aspect: 'ブラウザサポート', roving: '全ブラウザ', activedesc: '全ブラウザ', focusgroup: 'Chromium 133+(実験的)' },
{ aspect: 'スクリーンリーダー対応', roving: '広く対応', activedesc: '対応状況にばらつき', focusgroup: 'ロービング tabindex と同等' },
]
@@ -31,7 +31,7 @@ const rows: Row[] = isJa
{ aspect: 'Arrow key handling', roving: 'Custom keydown handler', activedesc: 'Custom keydown handler', focusgroup: 'Built-in' },
{ aspect: 'Focus memory', roving: 'Must implement manually', activedesc: 'Must implement manually', focusgroup: 'Built-in (default behavior)' },
{ aspect: 'Wrap behavior', roving: 'Must implement manually', activedesc: 'Must implement manually', focusgroup: 'wrap keyword' },
- { aspect: 'Grid navigation', roving: 'Complex implementation', activedesc: 'Complex implementation', focusgroup: 'grid keyword' },
+ { aspect: 'Vertical navigation', roving: 'Manual key direction switch', activedesc: 'Manual key direction switch', focusgroup: 'block keyword' },
{ aspect: 'Browser support', roving: 'All browsers', activedesc: 'All browsers', focusgroup: 'Chromium 133+ (experimental)' },
{ aspect: 'Screen reader support', roving: 'Widely supported', activedesc: 'Varies', focusgroup: 'Aligned with roving tabindex' },
];
diff --git a/src/practices/keyboard-interface/FocusgroupDemo.astro b/src/practices/keyboard-interface/FocusgroupDemo.astro
index ad096b81..6e16484a 100644
--- a/src/practices/keyboard-interface/FocusgroupDemo.astro
+++ b/src/practices/keyboard-interface/FocusgroupDemo.astro
@@ -2,13 +2,15 @@
/**
* Interactive demo for the focusgroup HTML attribute.
*
- * Shows three demos:
- * 1. Linear focusgroup (toolbar-like, no wrap)
- * 2. Wrapping focusgroup
- * 3. Grid focusgroup (2D navigation)
+ * Shows three demos based on the Microsoft Edge focusgroup demos:
+ * 1. Basic toolbar (focusgroup="toolbar")
+ * 2. Wrapping toolbar (focusgroup="toolbar wrap")
+ * 3. Vertical toolbar (focusgroup="toolbar block")
*
* Requires a browser with native focusgroup support (Chromium 133+).
* A browser support notice is shown dynamically via feature detection.
+ *
+ * @see https://microsoftedge.github.io/Demos/focusgroup/
*/
---
@@ -41,18 +43,18 @@
- {/* Demo 1: Linear focusgroup (no wrap) */}
+ {/* Demo 1: Basic toolbar */}
- Linear Focusgroup (focusgroup="horizontal"focusgroup="toolbar")
- Use ← → arrow keys to navigate. Focus
- stops at the edges.
+ Tab to enter the toolbar, then use ← →
+ arrow keys to navigate. Tab again to exit. Focus stops at the edges.
- {/* Demo 2: Wrapping focusgroup */}
+ {/* Demo 2: Wrapping toolbar */}
- Wrapping Focusgroup (focusgroup="horizontal wrap"focusgroup="toolbar wrap")
- {/* Demo 3: Grid focusgroup */}
+ {/* Demo 3: Vertical toolbar */}
- Grid Focusgroup (focusgroup="grid"focusgroup="toolbar block")
-
- 😀
- 😂
- 🥰
-
-
- 😎
- 🤔
- 👍
-
-
- 🎉
- ❤️
- 🔥
-
+
Cut
+
Copy
+
Paste
- Use ← → ↑
- ↓ arrow keys to navigate the 2D grid.
+ Use ↑ ↓ arrow keys to navigate.
+ ← → do nothing.
+ block overrides toolbar's default inline axis.
`}
diff --git a/src/practices/keyboard-interface/content.mdx b/src/practices/keyboard-interface/content.mdx
index 91410000..0e4dc887 100644
--- a/src/practices/keyboard-interface/content.mdx
+++ b/src/practices/keyboard-interface/content.mdx
@@ -327,7 +327,7 @@ Adding `focusgroup` to a container element tells the browser to:
-
+
Bold
Italic
Underline
@@ -340,43 +340,32 @@ Adding `focusgroup` to a container element tells the browser to:
The `focusgroup` attribute accepts space-separated tokens to control navigation behavior:
-| Value | Behavior |
-| ------------ | ------------------------------------------------------------------------------------ |
-| `horizontal` | Only left/right arrow keys navigate (suitable for horizontal toolbars, tablists) |
-| `vertical` | Only up/down arrow keys navigate (suitable for vertical menus, listboxes) |
-| `wrap` | Focus wraps from last item to first (and vice versa) instead of stopping at the edge |
-| `grid` | Enables 2D navigation with all four arrow keys (suitable for grids, date pickers) |
-| `extend` | Joins a nested focusgroup into its ancestor's focusgroup as a single logical group |
+| Value | Behavior |
+| ---------- | ------------------------------------------------------------------------------------ |
+| `toolbar` | Creates a focusgroup; defaults to inline (horizontal) arrow-key navigation |
+| `inline` | Only inline-axis (left/right in LTR) arrow keys navigate |
+| `block` | Only block-axis (up/down) arrow keys navigate; overrides `toolbar`'s default inline |
+| `wrap` | Focus wraps from last item to first (and vice versa) instead of stopping at the edge |
+| `nomemory` | Tab always enters at the start (or `focusgroupstart`), ignoring focus history |
+| `extend` | Joins a nested focusgroup into its ancestor's focusgroup as a single logical group |
+| `none` | Opts a subtree out of an ancestor's focusgroup |
These values can be combined:
-
+
Cut
Copy
Paste
-
-
-
-
-
-
- 1
- 2
- 3
-
-
- 4
- 5
- 6
-
+
+
+ File
+ Edit
+ View
`}
lang="html"
caption="Combining focusgroup values for different navigation patterns."
@@ -388,20 +377,22 @@ When focusgroups are nested, each creates an independent navigation scope by def
-
-
A1
-
+
+
Save
+
Print
+
- B1
- B2
+ Bold
+ Italic
-
A2
+
Close
-
+
A1
-
+
B1
B2
@@ -409,7 +400,7 @@ When focusgroups are nested, each creates an independent navigation scope by def
A2
`}
lang="html"
- caption="Without extend, nested focusgroups are independent. With extend, they merge into the parent focusgroup."
+ caption="Without extend, nested focusgroups are independent Tab stops. With extend, child items merge into the parent's arrow-key navigation."
/>
#### Shadow DOM Integration
@@ -438,7 +429,7 @@ As of early 2026, `focusgroup` is available in Chromium-based browsers (Chrome/E
code={`
Bold
Italic
@@ -447,7 +438,7 @@ As of early 2026, `focusgroup` is available in Chromium-based browsers (Chrome/E
`}
@@ -450,7 +450,9 @@ focusgroup内に ` ` や `` のようなフォーカス可能な
#### リソース
- [Request for developer feedback: focusgroup — Chrome for Developers](https://developer.chrome.com/blog/focusgroup-rfc)
-- [focusgroup Explainer — Open UI](https://open-ui.org/components/focusgroup.explainer/)
+- [Scoped Focusgroup Explainer — Open UI](https://open-ui.org/components/scoped-focusgroup.explainer/)
+- [focusgroup Explainer (original) — Open UI](https://open-ui.org/components/focusgroup.explainer/)
+- [WHATWG HTML Issue #11641 — Focusgroup proposal](https://github.com/whatwg/html/issues/11641)
- [Focusgroup Explainer — Microsoft Edge](https://github.com/MicrosoftEdge/MSEdgeExplainers/blob/main/Focusgroup/explainer.md)
- [Focusgroup Interactive Demos — Microsoft Edge](https://microsoftedge.github.io/Demos/focusgroup/)
diff --git a/src/practices/keyboard-interface/content.mdx b/src/practices/keyboard-interface/content.mdx
index 0e4dc887..1dbf5e12 100644
--- a/src/practices/keyboard-interface/content.mdx
+++ b/src/practices/keyboard-interface/content.mdx
@@ -346,7 +346,7 @@ The `focusgroup` attribute accepts space-separated tokens to control navigation
| `inline` | Only inline-axis (left/right in LTR) arrow keys navigate |
| `block` | Only block-axis (up/down) arrow keys navigate; overrides `toolbar`'s default inline |
| `wrap` | Focus wraps from last item to first (and vice versa) instead of stopping at the edge |
-| `nomemory` | Tab always enters at the start (or `focusgroupstart`), ignoring focus history |
+| `no-memory` | Tab always enters at the start, ignoring focus history |
| `extend` | Joins a nested focusgroup into its ancestor's focusgroup as a single logical group |
| `none` | Opts a subtree out of an ancestor's focusgroup |
@@ -421,7 +421,7 @@ When focusable children like ` ` or `` exist inside a focusgroup
#### Browser Support and Progressive Enhancement
-As of early 2026, `focusgroup` is available in Chromium-based browsers (Chrome/Edge 133+) behind a flag or origin trial. It is not yet supported in Firefox or Safari.
+As of early 2026, the scoped `focusgroup` attribute is available in Chromium-based browsers (Chrome/Edge 146+) as an origin trial. An earlier unscoped prototype shipped behind a flag in Chrome 133. It is not yet supported in Firefox or Safari.
**Recommended approach**: Use `focusgroup` as a progressive enhancement alongside existing JavaScript-based keyboard navigation. This way, supported browsers get the native behavior while others fall back to your JavaScript implementation:
@@ -438,7 +438,7 @@ As of early 2026, `focusgroup` is available in Chromium-based browsers (Chrome/E