@godxjp/ui 33.20.0 → 33.21.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (108) hide show
  1. package/README.md +4 -4
  2. package/agent/START-HERE.md +7 -7
  3. package/agent/components/AppSettingPicker.json +0 -1
  4. package/agent/components/AppShell.json +11 -1
  5. package/agent/components/CardShowcase.json +44 -0
  6. package/agent/components/CatalogCard.json +83 -0
  7. package/agent/components/CatalogDetail.json +76 -0
  8. package/agent/components/CatalogDetailSection.json +52 -0
  9. package/agent/components/CatalogDetailTag.json +27 -0
  10. package/agent/components/EditorialArticle.json +53 -0
  11. package/agent/components/EditorialAuth.json +53 -0
  12. package/agent/components/EditorialAuthCard.json +52 -0
  13. package/agent/components/EditorialBanner.json +53 -0
  14. package/agent/components/EditorialBreadcrumb.json +38 -0
  15. package/agent/components/EditorialCard.json +70 -0
  16. package/agent/components/EditorialEmptyPanel.json +57 -0
  17. package/agent/components/EditorialFilterBar.json +51 -0
  18. package/agent/components/EditorialFilterField.json +39 -0
  19. package/agent/components/EditorialFilterPanel.json +46 -0
  20. package/agent/components/EditorialFooter.json +54 -0
  21. package/agent/components/EditorialFootnote.json +36 -0
  22. package/agent/components/EditorialHero.json +52 -0
  23. package/agent/components/EditorialInlineSearch.json +54 -0
  24. package/agent/components/EditorialMasthead.json +52 -0
  25. package/agent/components/EditorialMetaBar.json +37 -0
  26. package/agent/components/EditorialPageHeader.json +73 -0
  27. package/agent/components/EditorialPanel.json +48 -0
  28. package/agent/components/EditorialPillNav.json +41 -0
  29. package/agent/components/EditorialPrompt.json +54 -0
  30. package/agent/components/EditorialSearch.json +112 -0
  31. package/agent/components/EditorialSection.json +68 -0
  32. package/agent/components/EditorialSectionHead.json +62 -0
  33. package/agent/components/EditorialStats.json +32 -0
  34. package/agent/components/EditorialTextButton.json +47 -0
  35. package/agent/components/EditorialToggleGroup.json +52 -0
  36. package/agent/components/EditorialToolbar.json +45 -0
  37. package/agent/components/Eyebrow.json +39 -0
  38. package/agent/components/HoldingCard.json +69 -0
  39. package/agent/components/HoldingCardAction.json +51 -0
  40. package/agent/components/HoldingGrid.json +37 -0
  41. package/agent/components/NumberInput.json +5 -0
  42. package/agent/components/PriceSummary.json +32 -0
  43. package/agent/components/SettingsLayout.json +31 -0
  44. package/agent/components/SettingsPanel.json +53 -0
  45. package/agent/components/ThemePicker.json +54 -0
  46. package/agent/components/TopbarItem.json +5 -0
  47. package/agent/components-index.json +292 -98
  48. package/agent/components.json +2046 -2
  49. package/agent/index.json +7 -7
  50. package/agent/llms.txt +8 -8
  51. package/agent/tokens.json +5637 -135
  52. package/dist/components/data-display/badge.js +4 -2
  53. package/dist/components/data-entry/form-field.js +2 -2
  54. package/dist/components/data-entry/number-input.d.ts +1 -0
  55. package/dist/components/data-entry/number-input.js +8 -0
  56. package/dist/components/data-entry/select.js +24 -2
  57. package/dist/components/general/button.js +7 -0
  58. package/dist/components/general/typography.d.ts +1 -1
  59. package/dist/components/layout/app-shell.d.ts +1 -1
  60. package/dist/components/layout/app-shell.js +28 -2
  61. package/dist/components/layout/centered-shell.js +4 -0
  62. package/dist/components/layout/editorial-account.d.ts +51 -0
  63. package/dist/components/layout/editorial-account.js +466 -0
  64. package/dist/components/layout/editorial-catalog.d.ts +18 -0
  65. package/dist/components/layout/editorial-catalog.js +164 -0
  66. package/dist/components/layout/editorial.d.ts +56 -0
  67. package/dist/components/layout/editorial.js +867 -0
  68. package/dist/components/layout/index.d.ts +6 -0
  69. package/dist/components/layout/index.js +98 -0
  70. package/dist/components/layout/mobile-shell.d.ts +2 -0
  71. package/dist/components/layout/mobile-shell.js +18 -11
  72. package/dist/components/layout/responsive-grid.js +9 -1
  73. package/dist/components/layout/topbar-item.d.ts +1 -0
  74. package/dist/components/layout/topbar-item.js +2 -0
  75. package/dist/contracts/measurement.json +1 -1
  76. package/dist/lib/toast-clearance.js +1 -1
  77. package/dist/props/components/data-entry.prop.d.ts +9 -0
  78. package/dist/props/components/editorial-account.prop.d.ts +249 -0
  79. package/dist/props/components/editorial-account.prop.js +0 -0
  80. package/dist/props/components/general.prop.d.ts +6 -2
  81. package/dist/props/components/layout.prop.d.ts +602 -2
  82. package/dist/props/registry.d.ts +1124 -0
  83. package/dist/props/registry.js +792 -0
  84. package/dist/styles/badge-layout.css +2 -0
  85. package/dist/styles/control.css +58 -12
  86. package/dist/styles/core.css +1 -0
  87. package/dist/styles/data-display-layout.css +9 -3
  88. package/dist/styles/editorial-account-layout.css +1130 -0
  89. package/dist/styles/focus-ring.css +33 -10
  90. package/dist/styles/form-layout.css +8 -1
  91. package/dist/styles/index.css +1 -0
  92. package/dist/styles/layers.json +248 -1
  93. package/dist/styles/layout.css +2022 -0
  94. package/dist/styles/shell-layout.css +100 -2
  95. package/dist/styles/table-layout.css +25 -13
  96. package/dist/styles/text-layout.css +6 -0
  97. package/dist/styles.css +1 -1
  98. package/dist/tokens/base.css +2 -0
  99. package/dist/tokens/components/badge.css +3 -0
  100. package/dist/tokens/components/control.css +9 -0
  101. package/dist/tokens/components/editorial-account.css +393 -0
  102. package/dist/tokens/components/editorial.css +721 -0
  103. package/dist/tokens/components/form.css +4 -0
  104. package/dist/tokens/components/shell.css +23 -0
  105. package/dist/tokens/components/table.css +1 -1
  106. package/docs/TOKENS.md +26 -0
  107. package/package.json +2 -2
  108. package/scripts/ui-audit.mjs +3 -2
@@ -50,10 +50,205 @@
50
50
  "name": "PageContainer",
51
51
  "tagline": "Mandatory page shell — EVERY page wraps its content in PageContainer (title/subtitle/extra/footer/breadcrumb)."
52
52
  },
53
+ {
54
+ "group": "layout",
55
+ "name": "EditorialSection",
56
+ "tagline": "One full-width band of an editorial page (gh#1435): put it straight inside `CenteredShell preset=\"public-landing\" flow=\"sections\"`."
57
+ },
58
+ {
59
+ "group": "layout",
60
+ "name": "EditorialHero",
61
+ "tagline": "The opening of an editorial page (gh#1435): a copy column — kicker, the page's one h1, a lead, a search and a line of suggested queries — beside a media column."
62
+ },
63
+ {
64
+ "group": "layout",
65
+ "name": "Eyebrow",
66
+ "tagline": "The small uppercase kicker above an editorial heading (gh#1435), led by a short ornament rule (`variant=\"ruled\"`, default) or bare (`\"plain\"`)."
67
+ },
68
+ {
69
+ "group": "layout",
70
+ "name": "EditorialBreadcrumb",
71
+ "tagline": "The trail at the top of an editorial page (gh#1437): `Breadcrumb` (same `<nav>`/`<ol>`, `aria-current` on the last item, router `linkComponent`) with the editorial rhythm — top inset, gap and line height from `--editorial-breadcrumb-*`."
72
+ },
73
+ {
74
+ "group": "layout",
75
+ "name": "EditorialArticle",
76
+ "tagline": "The reading column of a long-form editorial page (gh#1440): the ruled kicker, the page's one h1, an intro set off by a rule, then `EditorialArticleSection`s (an h2 and paragraphs at the reading leading), an `EditorialNote` and a trailing `EditorialTextLink`."
77
+ },
78
+ {
79
+ "group": "layout",
80
+ "name": "EditorialPanel",
81
+ "tagline": "A bordered panel with a short tag, a heading and a list (gh#1440) — a roadmap group."
82
+ },
83
+ {
84
+ "group": "layout",
85
+ "name": "EditorialPageHeader",
86
+ "tagline": "The intro of an editorial listing page (gh#1437): an optional `EditorialBreadcrumb`, then the ruled kicker, the page's one h1, one lead line, and an action at the end of the title row."
87
+ },
88
+ {
89
+ "group": "layout",
90
+ "name": "EditorialSectionHead",
91
+ "tagline": "A section's head (gh#1435): kicker, an editorial h2, one line of description and a trailing action on the title's row — usually an `EditorialTextLink` \"view all →\" (an inline-flex link with a trailing arrow, `asChild` for a router link)."
92
+ },
93
+ {
94
+ "group": "layout",
95
+ "name": "EditorialSearch",
96
+ "tagline": "The inset site search (gh#1435): ONE bordered box holding a search glyph, the field and the submit button, under a visually hidden label that also names the `role=\"search\"` landmark."
97
+ },
98
+ {
99
+ "group": "layout",
100
+ "name": "EditorialPillNav",
101
+ "tagline": "A horizontal band of section links (gh#1435) — a site's \"browse by game\" row: an optional lead label, then `EditorialPillNavItem`s (an icon or a small `\"dot\"` marker; `aria-current=\"page\"` on the link marks the current one)."
102
+ },
103
+ {
104
+ "group": "layout",
105
+ "name": "CardShowcase",
106
+ "tagline": "A staged composition of product pictures (gh#1435)."
107
+ },
108
+ {
109
+ "group": "layout",
110
+ "name": "EditorialBanner",
111
+ "tagline": "A rounded brand panel inside the column (gh#1435): kicker, title, description and a call to action beside a media slot, in the inverse palette."
112
+ },
113
+ {
114
+ "group": "layout",
115
+ "name": "CatalogCard",
116
+ "tagline": "A catalog tile (gh#1435): the framed picture with an overlaid circular favourite toggle, then an overline, the title (a heading wrapping the item link, clamped to two lines), a metadata row with `CatalogCardTag`s, a price caption and line (price + change), and a footer row."
117
+ },
118
+ {
119
+ "group": "layout",
120
+ "name": "EditorialCard",
121
+ "tagline": "A whole-card link (gh#1435)."
122
+ },
123
+ {
124
+ "group": "layout",
125
+ "name": "EditorialMasthead",
126
+ "tagline": "A public site's header row (gh#1435) for CenteredShell's `topbar` slot: the logo, primary navigation (`EditorialMastheadLink`; `aria-current=\"page\"` underlines the current one) and end actions (the kit `Select variant=\"borderless\" width=\"auto\"` for the interface language or the display currency — the masthead sizes its trigger, `EditorialMastheadAction` 44px icon controls, `variant=\"outline\"` for the account)."
127
+ },
128
+ {
129
+ "group": "layout",
130
+ "name": "EditorialFooter",
131
+ "tagline": "A public site's footer content (gh#1435) for `CenteredShell footerTone=\"inverse\"`: logo and tagline, link groups (a heading + links each), and a bottom row with the rights line and a note."
132
+ },
133
+ {
134
+ "group": "layout",
135
+ "name": "EditorialFilterBar",
136
+ "tagline": "A row of underlined filter toggles above a collection (gh#1435): a named `role=\"group\"` of `aria-pressed` buttons (one pressed at a time) and a trailing note, over a hairline."
137
+ },
138
+ {
139
+ "group": "layout",
140
+ "name": "EditorialToggleGroup",
141
+ "tagline": "One-of-N toggles of the editorial account family (gh#1439): a named `role=\"group\"` of `aria-pressed` buttons."
142
+ },
143
+ {
144
+ "group": "layout",
145
+ "name": "EditorialFilterPanel",
146
+ "tagline": "A catalog's filter panel (gh#1438): one bordered surface of `EditorialFilterField`s that wrap, bottom aligned, and a trailing `action` (a reset button), as a named `role=\"group\"`."
147
+ },
148
+ {
149
+ "group": "layout",
150
+ "name": "EditorialFilterField",
151
+ "tagline": "One field of an EditorialFilterPanel (gh#1438): a visible label (600, muted) over one control; `htmlFor` names the control."
152
+ },
153
+ {
154
+ "group": "layout",
155
+ "name": "CatalogDetail",
156
+ "tagline": "The head of a catalog item's page (gh#1438): a framed picture with the save toggle over its corner and a caption, beside the kicker, the page's h1, a row of CatalogDetailTags, a summary price between hairlines, actions and a two-column facts list."
157
+ },
158
+ {
159
+ "group": "layout",
160
+ "name": "CatalogDetailTag",
161
+ "tagline": "One outlined tag (number, rarity, printed language) in a CatalogDetail meta row (gh#1438)."
162
+ },
163
+ {
164
+ "group": "layout",
165
+ "name": "CatalogDetailSection",
166
+ "tagline": "One band of an item page under its head (gh#1438): a top hairline, an h2, a muted paragraph, then anything else."
167
+ },
168
+ {
169
+ "group": "layout",
170
+ "name": "PriceSummary",
171
+ "tagline": "A joined strip of headline figures (gh#1438): one bordered surface split by hairlines, each cell a label, a figure in the number face and a caption, with an optional wider context cell on the subtle ground."
172
+ },
173
+ {
174
+ "group": "layout",
175
+ "name": "EditorialPrompt",
176
+ "tagline": "A polite inline invitation (gh#1438): a round glyph, a heading, a short paragraph and a note, with one action at the end (\"sign in to see more\")."
177
+ },
178
+ {
179
+ "group": "layout",
180
+ "name": "EditorialTextButton",
181
+ "tagline": "An underlined text action in the primary tone (gh#1439): \"Reset display preferences\", \"Your collection →\"."
182
+ },
183
+ {
184
+ "group": "layout",
185
+ "name": "EditorialMetaBar",
186
+ "tagline": "A hairline-ruled strip under a page header (gh#1439): a glyph and a line at the start (\"Your private collection\"), a badge at the end."
187
+ },
188
+ {
189
+ "group": "layout",
190
+ "name": "EditorialEmptyPanel",
191
+ "tagline": "A centred panel for a signed-out or an empty state (gh#1439)."
192
+ },
193
+ {
194
+ "group": "layout",
195
+ "name": "EditorialStats",
196
+ "tagline": "A strip of figure tiles on unequal tracks (gh#1439, default `1.4fr 1fr 1fr`): label, large tabular figure with a small unit, optional note."
197
+ },
198
+ {
199
+ "group": "layout",
200
+ "name": "EditorialToolbar",
201
+ "tagline": "The row above a collection (gh#1438, gh#1439): an optional `summary` (result count as a polite live region + a short note), a start cluster (an EditorialToggleGroup filter) and an end cluster (order Select, view switch, primary action), optionally over a hairline (`divider`)."
202
+ },
203
+ {
204
+ "group": "layout",
205
+ "name": "HoldingGrid",
206
+ "tagline": "The track of HoldingCards (gh#1439): `view=\"grid\"` lays tiles on `--editorial-holding-grid-track-size` (default four columns); `view=\"list\"` turns the same cards into wide rows (`140px 1fr`, body on `1.5fr 1fr 140px`)."
207
+ },
208
+ {
209
+ "group": "layout",
210
+ "name": "HoldingCard",
211
+ "tagline": "One owned item (gh#1439): a picture ground (the consumer's link around an image), overline, title, meta, outlined tags (the last set apart), the purchase line, a date and HoldingCardActions."
212
+ },
213
+ {
214
+ "group": "layout",
215
+ "name": "HoldingCardAction",
216
+ "tagline": "A quiet glyph + label action of a HoldingCard (gh#1439): edit, remove."
217
+ },
218
+ {
219
+ "group": "layout",
220
+ "name": "SettingsLayout",
221
+ "tagline": "A settings page (gh#1439): a sticky rail (`aside`, default 260px, `--editorial-settings-layout-aside-inset` from the top) beside the panels, gap 64px."
222
+ },
223
+ {
224
+ "group": "layout",
225
+ "name": "SettingsPanel",
226
+ "tagline": "One bordered settings section (gh#1439): a number in the figure face beside the title and its description, then the fields (a Form)."
227
+ },
228
+ {
229
+ "group": "layout",
230
+ "name": "ThemePicker",
231
+ "tagline": "An illustrated radio group for the colour theme (gh#1439): each choice is a painted preview of the interface — light, dark, or the system split — over its glyph and label."
232
+ },
233
+ {
234
+ "group": "layout",
235
+ "name": "EditorialAuth",
236
+ "tagline": "A sign-in / sign-up page (gh#1439): a story column (kicker, display title — line breaks kept —, copy, a decorative card pair carrying `art`, benefit lines with a check) beside the form card (`children`, default 460px)."
237
+ },
238
+ {
239
+ "group": "layout",
240
+ "name": "EditorialAuthCard",
241
+ "tagline": "The form card of EditorialAuth (gh#1439): badge, title, copy, the form (`children`) and a ruled footer line (\"New to the site? Create an account\")."
242
+ },
243
+ {
244
+ "group": "layout",
245
+ "name": "EditorialFootnote",
246
+ "tagline": "A quiet closing line under a collection or a settings form (gh#1439): a muted note at the start and an optional action (an EditorialTextButton) at the end."
247
+ },
53
248
  {
54
249
  "group": "layout",
55
250
  "name": "PageCover",
56
- "tagline": "A page's cover image (gh#1160): Notion's banner across the top, or note.com's eyecatch (~1.91:1, rounded) in the reading column. Put it in PageContainer `cover`. The focal point is positionY (object-position); while `repositioning` the image IS a vertical WAI-ARIA slider — drag or arrows / PageUp / PageDown / Home / End, Enter / Escape to finish.",
251
+ "tagline": "A page's cover image (gh#1160): Notion's banner across the top, or note.com's eyecatch (~1.91:1, rounded) in the reading column.",
57
252
  "tier": "lab"
58
253
  },
59
254
  {
@@ -72,7 +267,7 @@
72
267
  {
73
268
  "group": "layout",
74
269
  "name": "AppShell",
75
- "tagline": "Root application shell — composes sidebar, topbar rail, main content area, and optional footer. In print, navigation, topbar, breadcrumb and footer are hidden; main content flows across the paper width on the light --background. Put every consumer-authored dark theme override inside @media not print, with light declarations outside it, matching the package themes. Keyboard focus in clipped chrome stays inset; the main scroll region shows an inset brand ring by default (--region-focus-ring-width)."
270
+ "tagline": "Root application shell — composes sidebar, topbar rail, main content area, and optional footer."
76
271
  },
77
272
  {
78
273
  "absorbed": [
@@ -81,7 +276,7 @@
81
276
  ],
82
277
  "group": "layout",
83
278
  "name": "CenteredShell",
84
- "tagline": "The centred root shell, two shapes: `variant=\"page\"` (default) — authenticated, no-sidebar, centred-column page (hosted-ID My Page / account / standalone settings) with a padded topbar; `variant=\"auth\"` / `\"auth-canonical\"` — the unauthenticated login/mfa/reset shell (brand bar + vertically centred auth card + footer). Zero custom CSS either way."
279
+ "tagline": "The centred root shell, two shapes: `variant=\"page\"` (default) — authenticated, no-sidebar, centred-column page (hosted-ID My Page / account / standalone settings) with a padded topbar; `variant=\"auth\"` / `\"auth-canonical\"` — the unauthenticated login/mfa/reset shell (brand bar + vertically centred auth card + footer)."
85
280
  },
86
281
  {
87
282
  "group": "layout",
@@ -96,32 +291,32 @@
96
291
  {
97
292
  "group": "layout",
98
293
  "name": "Topbar",
99
- "tagline": "A PURE SLOT bar for the app shell — positions three clusters (start / center / end) and owns ONLY the bar layout. It bakes NO chrome: no product switcher, no search box, no notification bell, no language picker. The CONSUMER composes those from real primitives and drops them into a slot; whether a control is icon-only / labelled / bordered is that control's own config, never the shell's."
294
+ "tagline": "A PURE SLOT bar for the app shell — positions three clusters (start / center / end) and owns ONLY the bar layout."
100
295
  },
101
296
  {
102
297
  "group": "layout",
103
298
  "name": "TopbarItem",
104
- "tagline": "ONE interactive cell of a Topbar slot — the account button, a settings or notifications trigger. Full bar height, the bar's own hover surface, and the focus mark hosted INSIDE the cell. Use it INSTEAD OF a Button in a Topbar slot: a Button there is a --control-height pill floating in a taller bar, with its own hover fill and a ring drawn around the pill."
299
+ "tagline": "ONE interactive cell of a Topbar slot — the account button, a settings or notifications trigger."
105
300
  },
106
301
  {
107
302
  "group": "layout",
108
303
  "name": "TopbarSearch",
109
- "tagline": "The bar's one search box. From 40rem up an inline SearchInput whose text area never shrinks below 8ch; below it a named search cell that opens the field across the whole bar (Material 3 search bar → search view). Escape or the close cell folds it and returns focus to the cell."
304
+ "tagline": "The bar's one search box."
110
305
  },
111
306
  {
112
307
  "group": "layout",
113
308
  "name": "NavList",
114
- "tagline": "Vertical route navigation for INSIDE a page — the shape a settings nav takes. Renders the same `.sb-nav-item` rows as the Sidebar rail (icon column, label, badge, active tokens, `aria-current=\"page\"`) in a `<nav>` landmark, without the AppShell grid the rail depends on."
309
+ "tagline": "Vertical route navigation for INSIDE a page — the shape a settings nav takes."
115
310
  },
116
311
  {
117
312
  "group": "layout",
118
313
  "name": "MasterDetail",
119
- "tagline": "Responsive master-detail composition: a fluid list beside a token-owned 300px/320px fixed rail, with a themeable collapse threshold. `rail` picks which region is fixed — default `detail` (the canonical 1fr/320px list + detail rail); `master` for a leading navigator rail."
314
+ "tagline": "Responsive master-detail composition: a fluid list beside a token-owned 300px/320px fixed rail, with a themeable collapse threshold."
120
315
  },
121
316
  {
122
317
  "group": "layout",
123
318
  "name": "DraggablePanel",
124
- "tagline": "A floating surface the person using it can MOVE — drag it by the title-bar handle, or focus the handle and nudge it with the arrow keys. Bounded to the viewport, position reported through onPositionChange and never stored by the library.",
319
+ "tagline": "A floating surface the person using it can MOVE — drag it by the title-bar handle, or focus the handle and nudge it with the arrow keys.",
125
320
  "tier": "lab"
126
321
  },
127
322
  {
@@ -132,12 +327,12 @@
132
327
  {
133
328
  "group": "layout",
134
329
  "name": "ErrorSurface",
135
- "tagline": "Package-owned semantic exception surface for 400 / 403 / 404 / 500 / 503. `mode` is the SHELL CONTRACT: \"application\" renders the body you put inside the AppShell the route already provides (chrome PRESERVED, never reconstructed); \"system\" owns the whole page via CenteredShell align=\"center\" (package-owned 1440/1024/390 geometry). Exactly one recovery action, plus semantic request-id / permission / organization / maintenance metadata slots."
330
+ "tagline": "Package-owned semantic exception surface for 400 / 403 / 404 / 500 / 503."
136
331
  },
137
332
  {
138
333
  "group": "layout",
139
334
  "name": "LegalDocumentShell",
140
- "tagline": "Long-form legal/policy document surface (terms, privacy, DPA, cookie policy, SLA) — semantic article/nav/section landmarks, real anchors, a sticky table-of-contents rail, scroll-spy aria-current, hash deep links with a token-driven scroll offset and focus handoff. All legal text stays consumer-owned.",
335
+ "tagline": "Long-form legal/policy document surface (terms, privacy, DPA, cookie policy, SLA) — semantic article/nav/section landmarks, real anchors, a sticky table-of-contents rail, scroll-spy aria-current, hash deep links with a token-driven scroll offset and focus handoff.",
141
336
  "tier": "lab"
142
337
  },
143
338
  {
@@ -148,7 +343,7 @@
148
343
  {
149
344
  "group": "general",
150
345
  "name": "FloatButton",
151
- "tagline": "Ant Design's corner action, ported whole — a control pinned to the viewport above the page, with FloatButton.Group (a stack, or a menu behind one trigger) and FloatButton.BackTop. The corner insets are tokens, so a service moves the mark without a media query.",
346
+ "tagline": "Ant Design's corner action, ported whole — a control pinned to the viewport above the page, with FloatButton.Group (a stack, or a menu behind one trigger) and FloatButton.BackTop.",
152
347
  "tier": "lab"
153
348
  },
154
349
  {
@@ -163,7 +358,7 @@
163
358
  ],
164
359
  "group": "general",
165
360
  "name": "Text",
166
- "tagline": "Typographic primitive — use INSTEAD of a hand-rolled `<span className=\"text-[13px] font-medium text-muted-foreground\">`. Size is a type-scale step (never px); tone/weight are tokens."
361
+ "tagline": "Typographic primitive — use INSTEAD of a hand-rolled `<span className=\"text-[13px] font-medium text-muted-foreground\">`."
167
362
  },
168
363
  {
169
364
  "absorbed": [
@@ -171,7 +366,7 @@
171
366
  ],
172
367
  "group": "general",
173
368
  "name": "Heading",
174
- "tagline": "Section heading sized from the --heading-h* tokens. `level` sets the size AND the semantic <h1..h4>; `size` overrides the size alone, and its top three steps are the display ramp a marketing hero needs."
369
+ "tagline": "Section heading sized from the --heading-h* tokens."
175
370
  },
176
371
  {
177
372
  "group": "general",
@@ -181,7 +376,7 @@
181
376
  {
182
377
  "group": "general",
183
378
  "name": "Logo",
184
- "tagline": "The product brand mark — a glyph/identity box, or (with `wordmark`) the full mark + wordmark LOCKUP. Tokenised size/radius/type/gap, and `size` scales every branch (boxed glyph, identity mark, lockup); the boxed fill reads --primary, while the GoDX identity mark and wordmark read the --brand IDENTITY role instead, so an action-colour re-theme never recolours the brand."
379
+ "tagline": "The product brand mark — a glyph/identity box, or (with `wordmark`) the full mark + wordmark LOCKUP."
185
380
  },
186
381
  {
187
382
  "group": "general",
@@ -197,12 +392,12 @@
197
392
  ],
198
393
  "group": "general",
199
394
  "name": "Activity",
200
- "tagline": "The official AMBIENT-motion primitive and the standalone indeterminate indicator (antd `Spin`) — a continuous, unbounded 'something is happening right now, elsewhere' mark (someone typing, a sync running, a response streaming, a recording live). Loading a REGION is Skeleton; an in-flight ACTION is Button loading; a known percentage is Progress."
395
+ "tagline": "The official AMBIENT-motion primitive and the standalone indeterminate indicator (antd `Spin`) — a continuous, unbounded 'something is happening right now, elsewhere' mark (someone typing, a sync running, a response streaming, a recording live)."
201
396
  },
202
397
  {
203
398
  "group": "general",
204
399
  "name": "Icon",
205
- "tagline": "A glyph on the --icon-size-* scale, and the ONLY supported way to render a standalone one. A lucide component ships width=\"24\" height=\"24\"; only four rules in this library override that (.ui-button svg, the menu row, the topbar cell, the ListRow leading slot), so everywhere else a glyph draws at 24px beside 14px text."
400
+ "tagline": "A glyph on the --icon-size-* scale, and the ONLY supported way to render a standalone one."
206
401
  },
207
402
  {
208
403
  "absorbed": [
@@ -210,22 +405,22 @@
210
405
  ],
211
406
  "group": "data-display",
212
407
  "name": "DataTable",
213
- "tagline": "The one TanStack-powered compound admin list — sticky header, sorting, global search, column visibility ('set view'), bulk selection, BOTH cursor and numbered pagination, density, and built-in empty/loading states. Keep the SIMPLE `data` + lean `columns` (ColumnDef) API for the common case; opt into the full grid chrome via the compound parts. Internally driven by @tanstack/react-table (a real dependency). Lives on @godxjp/ui/data-display only (it is NOT on the runtime-neutral root/admin barrel because it pulls TanStack). Keyboard focus uses the shared inset ring in clipping surfaces; scrollports reveal partially clipped keyboard targets without changing their layout."
408
+ "tagline": "The one TanStack-powered compound admin list — sticky header, sorting, global search, column visibility ('set view'), bulk selection, BOTH cursor and numbered pagination, density, and built-in empty/loading states."
214
409
  },
215
410
  {
216
411
  "group": "data-display",
217
412
  "name": "Card",
218
- "tagline": "Surface container that requests break-inside: avoid in print, with optional accent stripe, variant fill (including the Ant Design borderless edge), hoverable lift, and density. ⚠️ The bare <Card> has NO inner padding — body content MUST be wrapped in <CardContent> (titles in <CardHeader>), or it sits FLUSH against the card edges. Never hand-roll padding with className=\"p-4\"; use <CardContent>. Compose with CardHeader/CardTitle/CardContent/CardFooter. For Ant Design's card-head TAB STRIP (tabs under the title, inside the card border) use the `tabList`/`activeTabKey`/`defaultActiveTabKey`/`onTabChange`/`extra`/`tabProps` props — the Card renders the strip and the children become the selected tab's body. For a non-tab TOOL strip inside the card (composer or editor tools) use <CardBar extra={…}> — a positionable bar that auto-draws its separator from its position (top→bottom border, bottom→top border, middle→both) and pins `extra` content to the inline-end edge; place it as first/last child of the Card. List FILTERS (search, filter selects, filter chips) are NOT a CardBar: CardBar's main slot scrolls sideways, and a filter strip never does — they go in a FilterBar ABOVE the card, which wraps (cardinal rule #51, pattern `list-filters`)."
413
+ "tagline": "Surface container that requests break-inside: avoid in print, with optional accent stripe, variant fill (including the Ant Design borderless edge), hoverable lift, and density."
219
414
  },
220
415
  {
221
416
  "group": "data-display",
222
417
  "name": "CardContent",
223
- "tagline": "Card body. flush = edge-to-edge (for DataTable/tabs); tight = no top gap; solo = no header above. NEVER put a Toolbar inside flush (it loses padding)."
418
+ "tagline": "Card body."
224
419
  },
225
420
  {
226
421
  "group": "data-display",
227
422
  "name": "StatCard",
228
- "tagline": "KPI tile. ⚠️ StatCard IS ALREADY a bordered Card — render it DIRECTLY in ResponsiveGrid. NEVER wrap it in <Card>/<CardContent> (that double-borders it → looks too thick). Use `accent` for a semantic leading-edge rail on a KPI needing attention."
423
+ "tagline": "KPI tile."
229
424
  },
230
425
  {
231
426
  "group": "data-display",
@@ -240,7 +435,7 @@
240
435
  {
241
436
  "group": "data-display",
242
437
  "name": "Badge",
243
- "tagline": "Plain or lifecycle badge. Use `variant` for static chips, or `status` to auto-map lifecycle keys to semantic tone + icon. Labels never wrap: a label wider than its container ellipsizes, and its full text opens in a tooltip on hover or on keyboard focus of the control around the chip (gh#1101, gh#1105)."
438
+ "tagline": "Plain or lifecycle badge."
244
439
  },
245
440
  {
246
441
  "group": "data-display",
@@ -250,7 +445,7 @@
250
445
  {
251
446
  "group": "data-display",
252
447
  "name": "Swatch",
253
- "tagline": "A READ-ONLY sample of ONE colour a person chose — a brand's primary_color, a calendar category, a tag tint. The colour is a VALUE on the element, never a token in a stylesheet."
448
+ "tagline": "A READ-ONLY sample of ONE colour a person chose — a brand's primary_color, a calendar category, a tag tint."
254
449
  },
255
450
  {
256
451
  "group": "data-display",
@@ -276,7 +471,7 @@
276
471
  {
277
472
  "group": "data-display",
278
473
  "name": "CredentialReveal",
279
- "tagline": "One-time secret surface — masked-by-default value with a show/hide toggle, a copy button that confirms the copy, optional download, and an optional acknowledge action to pair with Dialog. The GitHub/Stripe token-reveal pattern as a real primitive so consumers stop hand-rolling it."
474
+ "tagline": "One-time secret surface — masked-by-default value with a show/hide toggle, a copy button that confirms the copy, optional download, and an optional acknowledge action to pair with Dialog."
280
475
  },
281
476
  {
282
477
  "group": "data-display",
@@ -286,7 +481,7 @@
286
481
  {
287
482
  "group": "data-display",
288
483
  "name": "Descriptions",
289
- "tagline": "Responsive definition grid for detail-page metadata. COMPOUND — value goes in Descriptions.Item children."
484
+ "tagline": "Responsive definition grid for detail-page metadata."
290
485
  },
291
486
  {
292
487
  "group": "data-display",
@@ -306,7 +501,7 @@
306
501
  {
307
502
  "group": "data-display",
308
503
  "name": "Markdown",
309
- "tagline": "The one Markdown renderer for GoDX apps (sibling package `@godxjp/markdown`, versioned with the kit): GFM + GitHub heading anchors, one sanitiser schema (no raw HTML; http/https/mailto/relative URLs only), and ```mermaid drawn only after its SVG passes a fail-closed gate (gh#1108). Wrap it in `Prose`."
504
+ "tagline": "The one Markdown renderer for GoDX apps (sibling package `@godxjp/markdown`, versioned with the kit): GFM + GitHub heading anchors, one sanitiser schema (no raw HTML; http/https/mailto/relative URLs only), and ```mermaid drawn only after its SVG passes a fail-closed gate (gh#1108)."
310
505
  },
311
506
  {
312
507
  "group": "data-entry",
@@ -316,53 +511,53 @@
316
511
  {
317
512
  "group": "data-entry",
318
513
  "name": "BlockEditor",
319
- "tagline": "Notion / note.com style block editor (sibling package `@godxjp/block-editor`, versioned with the kit) that reads and writes MARKDOWN through `@godxjp/markdown/codec`: what onValueChange returns is byte-for-byte normalize(body). `/` block menu at the caret, ⋮⋮ handle (drag, turn into, duplicate, move, delete), floating format toolbar, `[[` wikilink suggestions, paste / drop uploads through the host, IME-safe, ja / en / vi (gh#1156)."
514
+ "tagline": "Notion / note.com style block editor (sibling package `@godxjp/block-editor`, versioned with the kit) that reads and writes MARKDOWN through `@godxjp/markdown/codec`: what onValueChange returns is byte-for-byte normalize(body)."
320
515
  },
321
516
  {
322
517
  "group": "data-entry",
323
518
  "name": "RichTextEditor",
324
- "tagline": "A form field that edits HTML (sibling package `@godxjp/block-editor`, gh#1365): a fixed toolbar — bold, italic, strike, inline code · H1–H3, bulleted / numbered list, quote · undo, redo — over a Tiptap surface whose SCHEMA is the sanitiser. `value` / `onValueChange` carry HTML holding only p, br, h1–h3, ul, ol, li, blockquote, strong, em, s, code (`RICH_TEXT_ALLOWED_TAGS`), with one attribute in all (an integer `start` on `<ol>`); anything else in `value` or a paste is kept as its text. For content already stored as HTML; new content belongs in Markdown (BlockEditor / MarkdownEditor)."
519
+ "tagline": "A form field that edits HTML (sibling package `@godxjp/block-editor`, gh#1365): a fixed toolbar — bold, italic, strike, inline code · H1–H3, bulleted / numbered list, quote · undo, redo — over a Tiptap surface whose SCHEMA is the sanitiser."
325
520
  },
326
521
  {
327
522
  "group": "data-entry",
328
523
  "name": "TranslatableRichText",
329
- "tagline": "ONE RichTextEditor holding an HTML value per locale (`{ ja, en, vi }`), switched by locale tabs (gh#1365). The kit's TranslatableField engine — the same as TranslatableInput / TranslatableTextarea: locales and first tab from AppProvider `contentLocales`, fallback from its `fallbackLocale`, per-locale error marks, the active locale's error in FormField. An empty locale shows the fallback locale's TEXT (not its HTML) as its placeholder; switching tabs swaps the HTML without calling onValueChange."
524
+ "tagline": "ONE RichTextEditor holding an HTML value per locale (`{ ja, en, vi }`), switched by locale tabs (gh#1365)."
330
525
  },
331
526
  {
332
527
  "group": "data-display",
333
528
  "name": "Prose",
334
- "tagline": "Typography for rendered content (Markdown, CMS bodies, issue descriptions): styles the semantic HTML inside it from the tokens, with no opinion about where the HTML comes from. To RENDER Markdown, use the sibling package `@godxjp/markdown` inside it — `<Prose><Markdown>{body}</Markdown></Prose>` — the one GFM renderer + sanitiser + Mermaid gate shared by every GoDX app; do not assemble react-markdown + rehype-sanitize per app (gh#1108). Tables: `@godxjp/markdown` wraps each in `.ui-prose-table-scroll`, which Prose scrolls horizontally (focusable only while it overflows), and table cells keep their words whole — a short code like `F02` never breaks (gh#1131)."
529
+ "tagline": "Typography for rendered content (Markdown, CMS bodies, issue descriptions): styles the semantic HTML inside it from the tokens, with no opinion about where the HTML comes from."
335
530
  },
336
531
  {
337
532
  "group": "data-display",
338
533
  "name": "Timeline",
339
- "tagline": "Vertical event list with an icon rail. Current item gets a highlighted glyph. `variant` switches the rail to numbered (ordinal) or status-driven glyphs, and each item carries a `status` (done/current/pending, or `log` for an activity-log entry with no status semantics) plus an optional per-item `icon`. The whole progress column is ONE hue: done dot, current dot and travelled line all paint `--primary`, exactly as `Steps` paints `finish` and `process`."
534
+ "tagline": "Vertical event list with an icon rail."
340
535
  },
341
536
  {
342
537
  "group": "data-display",
343
538
  "name": "TimelineGrid",
344
- "tagline": "The time-axis half of the Timeline family: a vertical hour axis, one column per day (or room, or machine) and event blocks placed by start time and duration. Overlapping events are laid out side by side automatically. NOT a calendar — no month view, no navigation, no drag-to-create, no recurrence, no timezone conversion.",
539
+ "tagline": "The time-axis half of the Timeline family: a vertical hour axis, one column per day (or room, or machine) and event blocks placed by start time and duration.",
345
540
  "tier": "lab"
346
541
  },
347
542
  {
348
543
  "group": "data-display",
349
544
  "name": "Table",
350
- "tagline": "Primitive table shell (Table/TableHeader/TableBody/TableRow/TableHead/TableCell). Prefer DataTable for admin lists; use these for custom one-off tables. Keyboard focus uses the shared inset ring in clipping surfaces; scrollports reveal partially clipped keyboard targets without changing their layout."
545
+ "tagline": "Primitive table shell (Table/TableHeader/TableBody/TableRow/TableHead/TableCell)."
351
546
  },
352
547
  {
353
548
  "group": "data-display",
354
549
  "name": "DataState",
355
- "tagline": "TanStack Query lifecycle widget — skeleton / error / empty / success for one useQuery block. Import from @godxjp/ui/query."
550
+ "tagline": "TanStack Query lifecycle widget — skeleton / error / empty / success for one useQuery block."
356
551
  },
357
552
  {
358
553
  "group": "feedback",
359
554
  "name": "AuthExpiryProvider",
360
- "tagline": "App-root handler for an expired session (401 / invalid or expired token): every DataState / InfiniteQueryState / AlertMutationFeedback / AlertQueryError calls it automatically, once, and shows a neutral pending state instead of an error alert. Also exported from @godxjp/ui."
555
+ "tagline": "App-root handler for an expired session (401 / invalid or expired token): every DataState / InfiniteQueryState / AlertMutationFeedback / AlertQueryError calls it automatically, once, and shows a neutral pending state instead of an error alert."
361
556
  },
362
557
  {
363
558
  "group": "data-display",
364
559
  "name": "InfiniteQueryState",
365
- "tagline": "useInfiniteQuery widget — flatten pages, skeleton/empty/error, load-more footer. Import from @godxjp/ui/query."
560
+ "tagline": "useInfiniteQuery widget — flatten pages, skeleton/empty/error, load-more footer."
366
561
  },
367
562
  {
368
563
  "group": "data-entry",
@@ -372,32 +567,32 @@
372
567
  {
373
568
  "group": "data-entry",
374
569
  "name": "FormField",
375
- "tagline": "Wraps a control with label, helper, and error; injects the accessible name (aria-labelledby), description (aria-describedby) and validation (aria-errormessage/aria-invalid/aria-required) contract onto the child, which forwards it to its real semantic focus target. Reads the parent Form's layout (vertical/horizontal) — overridable per field."
570
+ "tagline": "Wraps a control with label, helper, and error; injects the accessible name (aria-labelledby), description (aria-describedby) and validation (aria-errormessage/aria-invalid/aria-required) contract onto the child, which forwards it to its real semantic focus target."
376
571
  },
377
572
  {
378
573
  "group": "data-entry",
379
574
  "name": "FormErrors",
380
- "tagline": "The 'no field to stand on' error summary — renders the entries of the surrounding Form's server error bag that no mounted FormField name='…' claims: validation errors on hidden/derived fields (action_mode, page, a source-record id) that would otherwise fail silently. Composed on Alert tone='destructive' (role='alert'); renders nothing while every entry is claimed or the bag is empty."
575
+ "tagline": "The 'no field to stand on' error summary — renders the entries of the surrounding Form's server error bag that no mounted FormField name='…' claims: validation errors on hidden/derived fields (action_mode, page, a source-record id) that would otherwise fail silently."
381
576
  },
382
577
  {
383
578
  "group": "data-entry",
384
579
  "name": "Input",
385
- "tagline": "Styled wrapper around native <input>; accepts all HTML input attributes. Pair with FormField for labelled fields."
580
+ "tagline": "Styled wrapper around native <input>; accepts all HTML input attributes."
386
581
  },
387
582
  {
388
583
  "group": "data-entry",
389
584
  "name": "NumberInput",
390
- "tagline": "WAI-ARIA spinbutton for localized numeric entry — composes the real Input (role=spinbutton, inputMode=decimal) with stacked increment/decrement step Buttons. Type freely, Arrow/Shift-Arrow step, value commits clamped to min/max + rounded to precision."
585
+ "tagline": "WAI-ARIA spinbutton for localized numeric entry — composes the real Input (role=spinbutton, inputMode=decimal) with stacked increment/decrement step Buttons."
391
586
  },
392
587
  {
393
588
  "group": "data-entry",
394
589
  "name": "SearchInput",
395
- "tagline": "Debounced search box with a clear button. Fires onSearch (NOT onChange) after the debounce. Controlled (value) or uncontrolled (defaultValue)."
590
+ "tagline": "Debounced search box with a clear button."
396
591
  },
397
592
  {
398
593
  "group": "data-entry",
399
594
  "name": "RecordPicker",
400
- "tagline": "ONE picker whose SHAPE follows the size of the set behind it: at or under `threshold` it IS a Select (dropdown with search); over it, a Dialog with search + consumer-declared filters, chips, and a confirm step for `multiple`. Reach for it when the same field may hold eight records on one tenant and eight thousand on another."
595
+ "tagline": "ONE picker whose SHAPE follows the size of the set behind it: at or under `threshold` it IS a Select (dropdown with search); over it, a Dialog with search + consumer-declared filters, chips, and a confirm step for `multiple`."
401
596
  },
402
597
  {
403
598
  "absorbed": [
@@ -416,27 +611,27 @@
416
611
  {
417
612
  "group": "data-entry",
418
613
  "name": "Switch",
419
- "tagline": "Toggle switch (bare), on react-aria-components. For a labelled row use Field. `role=\"switch\"` is the real `<input>`; the painted track is the `<label>` around it, and that is where `data-state`/`data-size` live."
614
+ "tagline": "Toggle switch (bare), on react-aria-components."
420
615
  },
421
616
  {
422
617
  "group": "data-entry",
423
618
  "name": "Textarea",
424
- "tagline": "Styled wrapper around native <textarea>. Pair with FormField for labelled fields. For a Markdown body (wiki page, issue description, mail) use the sibling package `@godxjp/editor` `MarkdownEditor` — this Textarea plus a formatting toolbar, preview through `@godxjp/markdown`, and paste/drop upload through a host `upload` function (gh#1109)."
619
+ "tagline": "Styled wrapper around native <textarea>."
425
620
  },
426
621
  {
427
622
  "group": "data-entry",
428
623
  "name": "TranslatableInput",
429
- "tagline": "ONE text field holding a value per locale (`{ ja, en, vi }`), switched by locale tabs above it (gh#1336). For user content stored per locale — a product name, a category label, a menu description (Astrotomic / Spatie `*_translations`). Locales, first tab and fallback come from AppProvider; an empty locale shows the fallback locale's text as its placeholder; a locale with an error is marked on its tab. Every other `Input` prop applies to the one control."
624
+ "tagline": "ONE text field holding a value per locale (`{ ja, en, vi }`), switched by locale tabs above it (gh#1336)."
430
625
  },
431
626
  {
432
627
  "group": "data-entry",
433
628
  "name": "TranslatableTextarea",
434
- "tagline": "TranslatableInput over a Textarea (gh#1336): one multi-line field holding a value per locale, switched by locale tabs. Same locale, fallback-placeholder, error-mark and FormField contract; every Textarea prop (rows, autoGrow, count…) applies to the one control."
629
+ "tagline": "TranslatableInput over a Textarea (gh#1336): one multi-line field holding a value per locale, switched by locale tabs."
435
630
  },
436
631
  {
437
632
  "group": "data-entry",
438
633
  "name": "TranslatableField",
439
- "tagline": "The locale-tab engine behind TranslatableInput, TranslatableTextarea and `@godxjp/block-editor`'s TranslatableRichText (gh#1365): the locale list and first tab (AppProvider `contentLocales`), the per-locale map, the fallback placeholder, the error marks and the FormField error report — around ONE control you render with `renderControl`. Use it only to make another control translatable; for text use TranslatableInput / TranslatableTextarea."
634
+ "tagline": "The locale-tab engine behind TranslatableInput, TranslatableTextarea and `@godxjp/block-editor`'s TranslatableRichText (gh#1365): the locale list and first tab (AppProvider `contentLocales`), the per-locale map, the fallback placeholder, the error marks and the FormField error report — around ONE control you render with `renderControl`."
440
635
  },
441
636
  {
442
637
  "group": "data-entry",
@@ -446,7 +641,7 @@
446
641
  {
447
642
  "group": "data-entry",
448
643
  "name": "Checkbox",
449
- "tagline": "Checkbox on react-aria-components; standalone or via CheckboxGroup with an options array. `role=\"checkbox\"` is the real `<input>`; the painted box is the `<label>` around it and carries `data-state`."
644
+ "tagline": "Checkbox on react-aria-components; standalone or via CheckboxGroup with an options array."
450
645
  },
451
646
  {
452
647
  "group": "data-entry",
@@ -459,22 +654,22 @@
459
654
  ],
460
655
  "group": "data-entry",
461
656
  "name": "DatePicker",
462
- "tagline": "ONE date control: `picker` sets the granularity (day · week · month · quarter · year), `range` makes it a two-endpoint field, `multiple` a set. A real typeable input holds the value and submits ISO-8601 at the picker's own precision; the panel is the visual-only affordance."
657
+ "tagline": "ONE date control: `picker` sets the granularity (day · week · month · quarter · year), `range` makes it a two-endpoint field, `multiple` a set."
463
658
  },
464
659
  {
465
660
  "group": "feedback",
466
661
  "name": "Dialog",
467
- "tagline": "Compound modal. Controlled via open + onOpenChange. Parts available flat (DialogTrigger/DialogContent/…) or as Dialog.Trigger/Dialog.Content. Rendered with role=dialog."
662
+ "tagline": "Compound modal."
468
663
  },
469
664
  {
470
665
  "group": "feedback",
471
666
  "name": "AlertDialog",
472
- "tagline": "Canonical modal confirmation flow (destructive / high-stakes decisions). Preserves confirm semantics with `role=\"alertdialog\"` and built-in cancel/confirm handling."
667
+ "tagline": "Canonical modal confirmation flow (destructive / high-stakes decisions)."
473
668
  },
474
669
  {
475
670
  "group": "feedback",
476
671
  "name": "Sheet",
477
- "tagline": "Side-panel drawer / responsive detail panel (React Aria modal dialog). Parts: Sheet/SheetTrigger/SheetContent(side=right|left|top|bottom, responsive=auto|side|bottom)/SheetHeader/SheetBody/SheetTitle/SheetFooter."
672
+ "tagline": "Side-panel drawer / responsive detail panel (React Aria modal dialog)."
478
673
  },
479
674
  {
480
675
  "absorbed": [
@@ -483,27 +678,27 @@
483
678
  ],
484
679
  "group": "feedback",
485
680
  "name": "Alert",
486
- "tagline": "Status message with a tone icon and optional dismiss, in three presentations: inline card, full-bleed page/shell strip (`variant=\"banner\"`), or a non-live aside inside a document (`variant=\"callout\"`, GitHub `> [!NOTE]`). Parts: Alert.Title/Description/Content/Actions/QueryError."
681
+ "tagline": "Status message with a tone icon and optional dismiss, in three presentations: inline card, full-bleed page/shell strip (`variant=\"banner\"`), or a non-live aside inside a document (`variant=\"callout\"`, GitHub `> [!NOTE]`)."
487
682
  },
488
683
  {
489
684
  "group": "feedback",
490
685
  "name": "Toaster",
491
- "tagline": "Mount once at app root to enable toasts. Trigger them with `import { toast } from \"@godxjp/ui/feedback\"` — Sonner's API, with a close button on `toast.error` / `toast.warning` by default."
686
+ "tagline": "Mount once at app root to enable toasts."
492
687
  },
493
688
  {
494
689
  "group": "navigation",
495
690
  "name": "Tabs",
496
- "tagline": "React Aria tab container with optional Ant-style `items` API. Pass items for the common full TabsList/TabsContent set, or compose TabsList/TabsTrigger/TabsContent manually when you need per-panel control."
691
+ "tagline": "React Aria tab container with optional Ant-style `items` API."
497
692
  },
498
693
  {
499
694
  "group": "navigation",
500
695
  "name": "Pagination",
501
- "tagline": "Offset/page-based pagination bar. Its container owns the inset: no outer inline padding, including inside CardContent, CardFooter or PageContainer footer. Keyboard focus uses the shared inset ring in clipping surfaces; scrollports reveal partially clipped keyboard targets without changing their layout."
696
+ "tagline": "Offset/page-based pagination bar."
502
697
  },
503
698
  {
504
699
  "group": "navigation",
505
700
  "name": "DropdownMenu",
506
- "tagline": "Dropdown menu (react-aria). Compose DropdownMenu/DropdownMenuTrigger/DropdownMenuContent/DropdownMenuItem/DropdownMenuSeparator. `trigger` picks the gestures — click (default), hover, or contextMenu, which is what replaced the deleted ContextMenu component."
701
+ "tagline": "Dropdown menu (react-aria)."
507
702
  },
508
703
  {
509
704
  "group": "navigation",
@@ -513,7 +708,7 @@
513
708
  {
514
709
  "group": "navigation",
515
710
  "name": "Toolbar",
516
- "tagline": "List-page filter strip — SearchInput + labelled ToolbarGroup filter slots (or the typed `search`/`filters`/`chips` model) + a clear-all affordance, optionally sticky. It WRAPS and never scrolls sideways; many filters → 2–4 inline + ONE 'More filters' Sheet (rule #51, pattern `list-filters`). `FilterBar`/`FilterBarGroup` are the same components under their alias names. Eleven layouts (inline, Filter menu + chips, More-filters Sheet, saved views, two rows, actions + sticky, faceted sidebar, compact in a card, date range, phone, docked panel) → pattern `filter-bar-layouts`."
711
+ "tagline": "List-page filter strip — SearchInput + labelled ToolbarGroup filter slots (or the typed `search`/`filters`/`chips` model) + a clear-all affordance, optionally sticky."
517
712
  },
518
713
  {
519
714
  "absorbed": [
@@ -522,12 +717,12 @@
522
717
  ],
523
718
  "group": "navigation",
524
719
  "name": "SearchForm",
525
- "tagline": "Submit-driven 「検索条件フォーム」 (Ant Design ProComponents QueryFilter): a `search` landmark holding a grid of labelled conditions aligned in columns, Search 「検索」 + Clear 「クリア」, the conditions past the first row behind ONE 「詳細条件を開く」 toggle that names how many are hidden, and a 「検索条件」 summary + result count in a role=\"status\" line after the search. Use it instead of a live FilterBar when the conditions are many, the query is heavy, or users expect an explicit 「検索」 button (rule #51 decision table)."
720
+ "tagline": "Submit-driven 「検索条件フォーム」 (Ant Design ProComponents QueryFilter): a `search` landmark holding a grid of labelled conditions aligned in columns, Search 「検索」 + Clear 「クリア」, the conditions past the first row behind ONE 「詳細条件を開く」 toggle that names how many are hidden, and a 「検索条件」 summary + result count in a role=\"status\" line after the search."
526
721
  },
527
722
  {
528
723
  "group": "providers",
529
724
  "name": "AppProvider",
530
- "tagline": "Root locale/timezone/date-time context — wrap the app ONCE. All pickers + formatDate read from it. Import from @godxjp/ui/app."
725
+ "tagline": "Root locale/timezone/date-time context — wrap the app ONCE."
531
726
  },
532
727
  {
533
728
  "group": "providers",
@@ -537,17 +732,17 @@
537
732
  {
538
733
  "group": "providers",
539
734
  "name": "ThemeScope",
540
- "tagline": "Makes a themed REGION reach the overlays it opens. Every overlay portals to document.body, so custom-property inheritance stops at the portal boundary and a tenant-themed region's Dialog, Select listbox, Popover and Toast paint the package defaults. Wrap the region in ThemeScope and they carry the region's tokens."
735
+ "tagline": "Makes a themed REGION reach the overlays it opens."
541
736
  },
542
737
  {
543
738
  "group": "providers",
544
739
  "name": "formatDate",
545
- "tagline": "MANDATORY for all date/time display. Auto-detects ISO date / HH:mm / instant; reads AppProvider context. Import from @godxjp/ui/datetime."
740
+ "tagline": "MANDATORY for all date/time display."
546
741
  },
547
742
  {
548
743
  "group": "data-entry",
549
744
  "name": "TimePicker",
550
- "tagline": "Time combobox with hours, minutes, optional seconds, confirmation and 12-hour formatting. Native submission stays canonical 24-hour time."
745
+ "tagline": "Time combobox with hours, minutes, optional seconds, confirmation and 12-hour formatting."
551
746
  },
552
747
  {
553
748
  "group": "data-entry",
@@ -582,12 +777,12 @@
582
777
  {
583
778
  "group": "data-entry",
584
779
  "name": "Slider",
585
- "tagline": "Numeric slider on react-aria-components with the antd 6 API — one thumb over a point, or `range` for a span. `value` takes a plain number (antd) or a number[] (the v22-era array spelling); both still work."
780
+ "tagline": "Numeric slider on react-aria-components with the antd 6 API — one thumb over a point, or `range` for a span."
586
781
  },
587
782
  {
588
783
  "group": "data-entry",
589
784
  "name": "Calendar",
590
- "tagline": "A styled react-day-picker grid for picking single dates, multiple dates, or date ranges — always embed it inside a Popover for full date-picker UX; use DatePicker (add `range` for a from/to pair) instead when you need a form-submittable input. `components={{ DayButton }}` is the documented seam for marking a day (a shift, a price, a badge): import `DayButton` and its types from `@godxjp/ui/data-entry` rather than from react-day-picker, so the type is this package's copy and not a second one (gh#797)."
785
+ "tagline": "A styled react-day-picker grid for picking single dates, multiple dates, or date ranges — always embed it inside a Popover for full date-picker UX; use DatePicker (add `range` for a from/to pair) instead when you need a form-submittable input."
591
786
  },
592
787
  {
593
788
  "group": "data-entry",
@@ -602,7 +797,7 @@
602
797
  {
603
798
  "group": "data-entry",
604
799
  "name": "Radio",
605
- "tagline": "Radio group on react-aria-components, with an options-array shorthand — always use Radio.Group, never a bare radio input. `role=\"radio\"` is the real `<input>`; the painted dot is the `<label>` around it and carries `data-state`."
800
+ "tagline": "Radio group on react-aria-components, with an options-array shorthand — always use Radio.Group, never a bare radio input."
606
801
  },
607
802
  {
608
803
  "absorbed": [
@@ -617,7 +812,7 @@
617
812
  {
618
813
  "group": "data-display",
619
814
  "name": "ScrollArea",
620
- "tagline": "Keyboard focus on the scroll viewport and its descendants uses the shared inset brand ring (--focus-ring-inset-offset), without padding changes. A native scrolling box (no scroll library since v23): one `overflow: auto` element whose scrollbar is styled from --scroll-area-* tokens. Always set an explicit height/max-height, or nothing overflows and no scrollbar appears. Owns the scrolling element, so it also owns reaching it (viewportRef) and bottom anchoring for a live stream (anchor)."
815
+ "tagline": "Keyboard focus on the scroll viewport and its descendants uses the shared inset brand ring (--focus-ring-inset-offset), without padding changes."
621
816
  },
622
817
  {
623
818
  "group": "data-display",
@@ -627,7 +822,7 @@
627
822
  {
628
823
  "group": "data-display",
629
824
  "name": "Tree",
630
- "tagline": "The standalone WAI-ARIA tree view on a page (antd `Tree` / `DirectoryTree`) — nested `treeData`, a disclosure triangle per branch, roving-tabindex arrow navigation, optional tri-state checkboxes, async `loadData` and `draggable` reorder/reparent (antd `onDrop`). Reach for it whenever nodes expand, collapse or are navigated by keyboard; TreeSelect is the same hierarchy inside a Popover."
825
+ "tagline": "The standalone WAI-ARIA tree view on a page (antd `Tree` / `DirectoryTree`) — nested `treeData`, a disclosure triangle per branch, roving-tabindex arrow navigation, optional tri-state checkboxes, async `loadData` and `draggable` reorder/reparent (antd `onDrop`)."
631
826
  },
632
827
  {
633
828
  "group": "feedback",
@@ -637,7 +832,7 @@
637
832
  {
638
833
  "group": "data-display",
639
834
  "name": "PrefetchLink",
640
- "tagline": "React Router Link that fires prefetchQuery on hover/focus so detail pages feel instant — requires a TanStack Query QueryClient in context. Imported from `@godxjp/ui/react-router` (not `/query`) because it imports the optional `react-router-dom` peer; in `/query` it broke every router-less app's build (gh#996)."
835
+ "tagline": "React Router Link that fires prefetchQuery on hover/focus so detail pages feel instant — requires a TanStack Query QueryClient in context."
641
836
  },
642
837
  {
643
838
  "group": "data-display",
@@ -668,7 +863,7 @@
668
863
  {
669
864
  "group": "data-entry",
670
865
  "name": "ToggleGroup",
671
- "tagline": "Single or multiple toggle selection on react-aria-components. On type=single the ARIA role follows `disallowEmptySelection`: omitted it is a `group` of `aria-pressed` buttons that MAY be all-off, set it is a `radiogroup` of `radio`s (gh#744)."
866
+ "tagline": "Single or multiple toggle selection on react-aria-components."
672
867
  },
673
868
  {
674
869
  "group": "layout",
@@ -678,22 +873,22 @@
678
873
  {
679
874
  "group": "data-display",
680
875
  "name": "Accordion",
681
- "tagline": "React Aria disclosure group — vertically stacked, collapsible sections. Compose Accordion > AccordionItem > AccordionTrigger + AccordionContent."
876
+ "tagline": "React Aria disclosure group — vertically stacked, collapsible sections."
682
877
  },
683
878
  {
684
879
  "group": "data-entry",
685
880
  "name": "PasswordInput",
686
- "tagline": "Input for passwords with a built-in show/hide eye toggle. Accepts all Input props except `type`."
881
+ "tagline": "Input for passwords with a built-in show/hide eye toggle."
687
882
  },
688
883
  {
689
884
  "group": "data-entry",
690
885
  "name": "PasswordStrength",
691
- "tagline": "Evaluates password quality with a 0-4 score and optional rule checklist. Use with PasswordInput in secure forms."
886
+ "tagline": "Evaluates password quality with a 0-4 score and optional rule checklist."
692
887
  },
693
888
  {
694
889
  "group": "data-entry",
695
890
  "name": "InputOTP",
696
- "tagline": "One-time-code / 2FA input (input-otp) — N single-character slots that behave as one field. Compose InputOTP > InputOTPGroup > InputOTPSlot."
891
+ "tagline": "One-time-code / 2FA input (input-otp) — N single-character slots that behave as one field."
697
892
  },
698
893
  {
699
894
  "group": "data-entry",
@@ -703,12 +898,12 @@
703
898
  {
704
899
  "group": "data-entry",
705
900
  "name": "Segmented",
706
- "tagline": "One-of-N from a small, closed, always-visible set — the enterprise Segmented / filter bar drawn on react-aria-components' RadioGroup. A track with the chosen item as a lifted slab. Reach for it INSTEAD OF a Select when there are 2-4 options and all of them fit on screen, and instead of ToggleGroup when exactly one must always be chosen."
901
+ "tagline": "One-of-N from a small, closed, always-visible set — the enterprise Segmented / filter bar drawn on react-aria-components' RadioGroup."
707
902
  },
708
903
  {
709
904
  "group": "layout",
710
905
  "name": "ResizablePanel",
711
- "tagline": "Resizable panel group/child/handle primitives from react-resizable-panels. --resizable-handle-size sets separator thickness; ARIA orientation controls its axis. Handles use the shared inset focus ring, including empty handles."
906
+ "tagline": "Resizable panel group/child/handle primitives from react-resizable-panels."
712
907
  },
713
908
  {
714
909
  "group": "data-display",
@@ -723,13 +918,12 @@
723
918
  "TimezonePicker",
724
919
  "DateFormatPicker",
725
920
  "TimeFormatPicker",
726
- "ThemePicker",
727
921
  "DensityPicker",
728
922
  "AppSettingToggle"
729
923
  ],
730
924
  "group": "navigation",
731
925
  "name": "AppSettingPicker",
732
- "tagline": "One provider-bound Select for a single AppProvider setting, chosen by `kind` (locale | timezone | dateFormat | timeFormat | theme | brand | density | fontSize) — covers locale/format AND the four theme axes. Throws if used without AppProvider AND without controlled value+onValueChange."
926
+ "tagline": "One provider-bound Select for a single AppProvider setting, chosen by `kind` (locale | timezone | dateFormat | timeFormat | theme | brand | density | fontSize) — covers locale/format AND the four theme axes."
733
927
  },
734
928
  {
735
929
  "group": "data-entry",
@@ -739,32 +933,32 @@
739
933
  {
740
934
  "group": "data-display",
741
935
  "name": "LineChart",
742
- "tagline": "Trends over an ordered category axis — one or more series, locale-formatted ticks/tooltips, screen-reader text alternative built in. Data-visualization graph / plot."
936
+ "tagline": "Trends over an ordered category axis — one or more series, locale-formatted ticks/tooltips, screen-reader text alternative built in."
743
937
  },
744
938
  {
745
939
  "group": "data-display",
746
940
  "name": "BarChart",
747
- "tagline": "Compare a value across categories — grouped or `stacked`, vertical or `horizontal`, with localized ticks/tooltips and a built-in text alternative. Data-visualization graph / plot / diagram."
941
+ "tagline": "Compare a value across categories — grouped or `stacked`, vertical or `horizontal`, with localized ticks/tooltips and a built-in text alternative."
748
942
  },
749
943
  {
750
944
  "group": "data-display",
751
945
  "name": "CompactBarTrend",
752
- "tagline": "DEPENDENCY-FREE compact vertical bar trend for dashboard summary cards — N category/value pairs, muted marks plus ONE emphasized 'current' bar, all geometry from --chart-trend-* tokens. Needs NO recharts. Sparkline / micro-chart / activity pulse / KPI trend strip."
946
+ "tagline": "DEPENDENCY-FREE compact vertical bar trend for dashboard summary cards — N category/value pairs, muted marks plus ONE emphasized 'current' bar, all geometry from --chart-trend-* tokens."
753
947
  },
754
948
  {
755
949
  "group": "data-display",
756
950
  "name": "HeatmapChart",
757
- "tagline": "DEPENDENCY-FREE rows × columns heatmap — weekday × hour revenue / order counts, cell intensity from the sequential CVD-safe --chart-heat-1..5 ramp. Empty ≠ zero (dashed outline + 'no data' text), optional top-N ring, per-cell tooltip, APG grid keyboard, the table itself is the text alternative. Needs NO recharts. Matrix / punch card / activity heatmap / busy-hours chart."
951
+ "tagline": "DEPENDENCY-FREE rows × columns heatmap — weekday × hour revenue / order counts, cell intensity from the sequential CVD-safe --chart-heat-1..5 ramp."
758
952
  },
759
953
  {
760
954
  "group": "data-display",
761
955
  "name": "AreaChart",
762
- "tagline": "Magnitude over an ordered category axis — overlay or `stacked` areas, optional `curved` smoothing, localized formatting + text alternative. Data-visualization graph / plot."
956
+ "tagline": "Magnitude over an ordered category axis — overlay or `stacked` areas, optional `curved` smoothing, localized formatting + text alternative."
763
957
  },
764
958
  {
765
959
  "group": "data-display",
766
960
  "name": "PieChart",
767
- "tagline": "Part-to-whole composition across a small set of slices — `donut` option, localized tooltips, and a screen-reader breakdown of every slice. Data-visualization graph / diagram."
961
+ "tagline": "Part-to-whole composition across a small set of slices — `donut` option, localized tooltips, and a screen-reader breakdown of every slice."
768
962
  },
769
963
  {
770
964
  "group": "data-entry",
@@ -774,19 +968,19 @@
774
968
  {
775
969
  "group": "data-entry",
776
970
  "name": "EmojiPicker",
777
- "tagline": "Page icon / reaction picker in a Popover (gh#1164): search by the active language's CLDR keywords (ja / en / vi — emojibase-data, loaded lazily for that locale only), categories, per-user recents, a WAI-ARIA grid (one tab stop, arrows, Home / End, Enter), and \"remove icon\". No skin tones.",
971
+ "tagline": "Page icon / reaction picker in a Popover (gh#1164): search by the active language's CLDR keywords (ja / en / vi — emojibase-data, loaded lazily for that locale only), categories, per-user recents, a WAI-ARIA grid (one tab stop, arrows, Home / End, Enter), and \"remove icon\".",
778
972
  "tier": "lab"
779
973
  },
780
974
  {
781
975
  "group": "layout",
782
976
  "name": "DashboardGrid",
783
- "tagline": "BI widget layout editor with deterministic push-down collisions and vertical compaction. Static CSS grid in view mode; temporary pointer/touch/keyboard previews commit once on drop.",
977
+ "tagline": "BI widget layout editor with deterministic push-down collisions and vertical compaction.",
784
978
  "tier": "lab"
785
979
  },
786
980
  {
787
981
  "group": "data-entry",
788
982
  "name": "SortableList",
789
- "tagline": "Reorder a flat list or a grid of tiles (gh#1173). Each item has a grip: drag it with a pointer (touch included — the grip sets touch-action: none), or focus it and press Space/Enter to lift, the arrows (Home / End) to move, Space/Enter to drop, Esc to cancel. Every step is spoken in a polite live region (\"2 of 3\"). The order is the value.",
983
+ "tagline": "Reorder a flat list or a grid of tiles (gh#1173).",
790
984
  "tier": "lab"
791
985
  },
792
986
  {
@@ -852,22 +1046,22 @@
852
1046
  {
853
1047
  "group": "data-display",
854
1048
  "name": "ChatBubble",
855
- "tagline": "One message in a conversation: an author mark, a header naming the turn, the body, and a footer. Renders as an <article> inside ChatBubbleList's log; `loading` shows Skeleton and `typing` streams a string in, dropping the animation entirely under prefers-reduced-motion."
1049
+ "tagline": "One message in a conversation: an author mark, a header naming the turn, the body, and a footer."
856
1050
  },
857
1051
  {
858
1052
  "group": "data-display",
859
1053
  "name": "ChatBubbleList",
860
- "tagline": "The message feed. It owns STICK-TO-BOTTOM (auto-scroll only while the reader is already at the bottom; the moment they scroll up the pin is revoked and a focusable jump-to-latest button appears), one aria-live=\"polite\" role=\"log\" region for the whole conversation, and per-role bubble defaults."
1054
+ "tagline": "The message feed."
861
1055
  },
862
1056
  {
863
1057
  "group": "data-entry",
864
1058
  "name": "ChatComposer",
865
- "tagline": "The message input of a conversation (Ant Design X Sender): an auto-growing Textarea plus exactly ONE trailing action — send, or cancel while a response streams. Enter / Shift+Enter / ⌘-or-Ctrl+Enter is configurable and never fires during an IME conversion."
1059
+ "tagline": "The message input of a conversation (Ant Design X Sender): an auto-growing Textarea plus exactly ONE trailing action — send, or cancel while a response streams."
866
1060
  },
867
1061
  {
868
1062
  "group": "data-entry",
869
1063
  "name": "ChatSuggestion",
870
- "tagline": "In @godxjp/chat since v32, not @godxjp/ui: add @godxjp/chat as a dependency at the same version as @godxjp/ui. Trigger-character autocomplete over a ChatComposer (Ant Design X Suggestion): type / at a word boundary and a Command list opens against the composer, driven from the textarea without ever taking focus off it."
1064
+ "tagline": "In @godxjp/chat since v32, not @godxjp/ui: add @godxjp/chat as a dependency at the same version as @godxjp/ui."
871
1065
  },
872
1066
  {
873
1067
  "group": "navigation",
@@ -877,7 +1071,7 @@
877
1071
  {
878
1072
  "group": "navigation",
879
1073
  "name": "MegaMenu",
880
- "tagline": "A primary site navigation whose top-level items disclose a full-width panel of grouped links (Ant Design `Menu mode=\"horizontal\"` whose SubMenu renders through popupRender). Implements the WAI-ARIA APG Disclosure Navigation pattern — NOT menu/menubar roles — with a roving tabindex across the bar, hover intent, Escape-to-trigger, and a narrow layout where the same disclosure lays out in flow.",
1074
+ "tagline": "A primary site navigation whose top-level items disclose a full-width panel of grouped links (Ant Design `Menu mode=\"horizontal\"` whose SubMenu renders through popupRender).",
881
1075
  "tier": "lab"
882
1076
  },
883
1077
  {
@@ -898,7 +1092,7 @@
898
1092
  {
899
1093
  "group": "data-display",
900
1094
  "name": "OrgChart",
901
- "tagline": "An organization chart: boxes (avatar, name, title, extra) joined by CSS connector lines, top-down; `agent` nodes are dashed. Scrolls horizontally in its own named region when wider than its container, and turns into an indented Tree when the CONTAINER is under 40rem. APG tree view (tree/treeitem/group, roving tabindex, arrow keys).",
1095
+ "tagline": "An organization chart: boxes (avatar, name, title, extra) joined by CSS connector lines, top-down; `agent` nodes are dashed.",
902
1096
  "tier": "lab"
903
1097
  },
904
1098
  {
@@ -907,7 +1101,7 @@
907
1101
  ],
908
1102
  "group": "data-display",
909
1103
  "name": "Image",
910
- "tagline": "antd `Image` + `Image.PreviewGroup`: a picture that opens in a full-viewport preview (zoom in/out by button, wheel or double-click; rotate; flip; reset; drag to pan). Inside an `ImagePreviewGroup` every Image at any depth joins one gallery in document order — prev/next buttons, ←/→, a \"2 / 3\" counter. Esc closes; focus is trapped and returned to the picture."
1104
+ "tagline": "antd `Image` + `Image.PreviewGroup`: a picture that opens in a full-viewport preview (zoom in/out by button, wheel or double-click; rotate; flip; reset; drag to pan)."
911
1105
  },
912
1106
  {
913
1107
  "group": "data-entry",
@@ -917,24 +1111,24 @@
917
1111
  {
918
1112
  "group": "data-display",
919
1113
  "name": "Marquee",
920
- "tagline": "A track of content that travels continuously, carrying the WCAG 2.2.2 pause control that makes it conformant. The clone count is MEASURED against the viewport and re-measured on resize; under prefers-reduced-motion it does not move at all.",
1114
+ "tagline": "A track of content that travels continuously, carrying the WCAG 2.2.2 pause control that makes it conformant.",
921
1115
  "tier": "lab"
922
1116
  },
923
1117
  {
924
1118
  "group": "layout",
925
1119
  "name": "Masonry",
926
- "tagline": "Ant Design `Masonry` (6.0.0): tiles of UNEQUAL height packed into columns, each tile dropped into whichever column is shortest when its turn comes. DOM order stays `items` order at every width, so the reading order never follows the packing.",
1120
+ "tagline": "Ant Design `Masonry` (6.0.0): tiles of UNEQUAL height packed into columns, each tile dropped into whichever column is shortest when its turn comes.",
927
1121
  "tier": "lab"
928
1122
  },
929
1123
  {
930
1124
  "group": "layout",
931
1125
  "name": "Affix",
932
- "tagline": "Ant Design `Affix` (6.6.5): pin an element to its scrollport once the page scrolls past it, and REPORT that it is pinned. `position: sticky` pins and then says nothing, so a sticky header cannot shrink, swap its logo or raise its shadow; this one exposes the boolean as `data-affixed` for CSS and `onChange` for JavaScript, and holds the flow open with a MEASURED placeholder so the page does not jump by the bar's height at the moment it pins."
1126
+ "tagline": "Ant Design `Affix` (6.6.5): pin an element to its scrollport once the page scrolls past it, and REPORT that it is pinned."
933
1127
  },
934
1128
  {
935
1129
  "group": "navigation",
936
1130
  "name": "Anchor",
937
- "tagline": "Ant Design `Anchor` (6.6.5): the in-page section navigation, and the only thing in this library that COMPUTES which section is current. `NavList activeId` takes that answer as a prop. Resolves by antd's rule — the last section whose edge has crossed a single decision line — which is a pure function of scroll position and therefore cannot flicker, suppresses itself during the programmatic scroll a click starts, reads the landing hash before any scroll event, and jumps rather than tweens under `prefers-reduced-motion`. Keyboard focus uses the shared inset ring in clipping surfaces; scrollports reveal partially clipped keyboard targets without changing their layout.",
1131
+ "tagline": "Ant Design `Anchor` (6.6.5): the in-page section navigation, and the only thing in this library that COMPUTES which section is current.",
938
1132
  "tier": "lab"
939
1133
  }
940
1134
  ]