@kerfjs/ui 5.0.0-beta.54 → 5.0.0-beta.56
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.
- package/README.md +14 -11
- package/ai/compile-time-contracts-v1.json +2 -2
- package/ai/component-catalog-v2.json +206 -39
- package/ai/component-catalog.json +306 -58
- package/ai/public-api-signatures-v1.md +671 -92
- package/ai/skill.md +43 -38
- package/ai/webawesome-jsx-signatures-v1.md +8 -2
- package/dist/app-tab.js +1 -1
- package/dist/badge.d.ts +35 -7
- package/dist/badge.js +1 -1
- package/dist/browser/content-item.js +3 -0
- package/dist/browser/popup-menu.js +3 -0
- package/dist/browser/select.js +1 -0
- package/dist/catalog-resources.d.ts +12 -1
- package/dist/catalog.d.ts +21 -4
- package/dist/catalog.js +260 -308
- package/dist/catalog.js.map +1 -1
- package/dist/{chunk-7IUSV4XG.js → chunk-24PHKUR3.js} +2 -2
- package/dist/chunk-24PHKUR3.js.map +1 -0
- package/dist/{chunk-WZ2GLEY4.js → chunk-2G2ZJQYK.js} +2 -14
- package/dist/chunk-2G2ZJQYK.js.map +1 -0
- package/dist/{chunk-D7GWXIAS.js → chunk-5I7QGQVT.js} +1 -1
- package/dist/chunk-5I7QGQVT.js.map +1 -0
- package/dist/{chunk-HJKRCKDR.js → chunk-63ZWBGE3.js} +6 -3
- package/dist/chunk-63ZWBGE3.js.map +1 -0
- package/dist/{chunk-44IG7PFV.js → chunk-6CINWX2E.js} +3 -3
- package/dist/{chunk-44IG7PFV.js.map → chunk-6CINWX2E.js.map} +1 -1
- package/dist/{chunk-C2FAYFDE.js → chunk-AGXQQFKZ.js} +2 -2
- package/dist/{chunk-C2FAYFDE.js.map → chunk-AGXQQFKZ.js.map} +1 -1
- package/dist/{chunk-ATHXW6RP.js → chunk-AHEG27M7.js} +2 -2
- package/dist/{chunk-ATHXW6RP.js.map → chunk-AHEG27M7.js.map} +1 -1
- package/dist/{chunk-7GUQYHKA.js → chunk-AK67F6QN.js} +4 -1
- package/dist/chunk-AK67F6QN.js.map +1 -0
- package/dist/chunk-BFPBS5Y4.js +250 -0
- package/dist/chunk-BFPBS5Y4.js.map +1 -0
- package/dist/chunk-DG6G5EPF.js +35 -0
- package/dist/chunk-DG6G5EPF.js.map +1 -0
- package/dist/{chunk-MTM43SJO.js → chunk-G33XC2NB.js} +1 -1
- package/dist/chunk-G33XC2NB.js.map +1 -0
- package/dist/{chunk-TZ5IHWB2.js → chunk-K6UNVKDK.js} +3 -3
- package/dist/{chunk-TZ5IHWB2.js.map → chunk-K6UNVKDK.js.map} +1 -1
- package/dist/chunk-KH6VUGHU.js +399 -0
- package/dist/chunk-KH6VUGHU.js.map +1 -0
- package/dist/{chunk-HMQ2ZDGG.js → chunk-KROD7KZK.js} +3 -2
- package/dist/chunk-KROD7KZK.js.map +1 -0
- package/dist/{chunk-5NDQABWK.js → chunk-M7QV3IHH.js} +3 -1
- package/dist/chunk-M7QV3IHH.js.map +1 -0
- package/dist/{chunk-RNZAKSME.js → chunk-MA6Z6EIM.js} +3 -3
- package/dist/{chunk-RNZAKSME.js.map → chunk-MA6Z6EIM.js.map} +1 -1
- package/dist/chunk-MA73TA6D.js +42 -0
- package/dist/chunk-MA73TA6D.js.map +1 -0
- package/dist/{chunk-ZMBU522F.js → chunk-MEY33VWB.js} +2 -2
- package/dist/{chunk-ZMBU522F.js.map → chunk-MEY33VWB.js.map} +1 -1
- package/dist/{chunk-T22EM4ET.js → chunk-MOBRFZH3.js} +81 -31
- package/dist/chunk-MOBRFZH3.js.map +1 -0
- package/dist/chunk-MP2GDBQZ.js +50 -0
- package/dist/chunk-MP2GDBQZ.js.map +1 -0
- package/dist/{chunk-3NBL3OUQ.js → chunk-NAPE7WUS.js} +2 -2
- package/dist/chunk-NAPE7WUS.js.map +1 -0
- package/dist/{chunk-CMUIXJZM.js → chunk-NBYTIVHS.js} +2 -2
- package/dist/{chunk-CMUIXJZM.js.map → chunk-NBYTIVHS.js.map} +1 -1
- package/dist/chunk-O3EXIBEZ.js +114 -0
- package/dist/chunk-O3EXIBEZ.js.map +1 -0
- package/dist/{chunk-KPNTVB7A.js → chunk-PK4N5QTO.js} +8 -7
- package/dist/chunk-PK4N5QTO.js.map +1 -0
- package/dist/chunk-QQOTQTDD.js +415 -0
- package/dist/chunk-QQOTQTDD.js.map +1 -0
- package/dist/{chunk-BJJKFVWW.js → chunk-T4UZTNZ4.js} +5 -5
- package/dist/chunk-T4UZTNZ4.js.map +1 -0
- package/dist/chunk-V65EOWNF.js +83 -0
- package/dist/chunk-V65EOWNF.js.map +1 -0
- package/dist/{chunk-GUIHMIT2.js → chunk-VNPQDCQZ.js} +3 -3
- package/dist/{chunk-GUIHMIT2.js.map → chunk-VNPQDCQZ.js.map} +1 -1
- package/dist/{chunk-5I22LMCV.js → chunk-VZOFZPSO.js} +2 -2
- package/dist/chunk-VZOFZPSO.js.map +1 -0
- package/dist/chunk-WLG6SSNT.js +94 -0
- package/dist/chunk-WLG6SSNT.js.map +1 -0
- package/dist/{chunk-NE5JAOQS.js → chunk-WOUF7YXM.js} +3 -3
- package/dist/{chunk-NE5JAOQS.js.map → chunk-WOUF7YXM.js.map} +1 -1
- package/dist/collapsible-panel.d.ts +51 -13
- package/dist/collapsible-panel.js +38 -10
- package/dist/collapsible-panel.js.map +1 -1
- package/dist/content-item.d.ts +46 -0
- package/dist/content-item.js +4 -0
- package/dist/content-item.js.map +1 -0
- package/dist/css-values.d.ts +5 -11
- package/dist/css-values.js +1 -1
- package/dist/disclosure-arrow.d.ts +4 -1
- package/dist/disclosure-arrow.js +1 -1
- package/dist/floating-toolbar.d.ts +17 -6
- package/dist/floating-toolbar.js +1 -1
- package/dist/grid.js +1 -1
- package/dist/help-tags-register.d.ts +13 -0
- package/dist/help-tags-register.js +9 -0
- package/dist/help-tags-register.js.map +1 -0
- package/dist/index.d.ts +7 -5
- package/dist/index.js +31 -29
- package/dist/list-action-row.js +1 -1
- package/dist/list-header.d.ts +14 -1
- package/dist/list-header.js +1 -1
- package/dist/list-inset-control.d.ts +1 -1
- package/dist/list-inset-control.js +1 -1
- package/dist/list-inset-text.d.ts +9 -10
- package/dist/list-inset-text.js +2 -1
- package/dist/list-item.js +1 -1
- package/dist/list.d.ts +10 -3
- package/dist/list.js +1 -1
- package/dist/nav-stack.d.ts +38 -5
- package/dist/nav-stack.js +4 -1
- package/dist/pane.d.ts +20 -2
- package/dist/pane.js +1 -1
- package/dist/panel-toolbar-C8sF-YZC.d.ts +63 -0
- package/dist/popup-menu-register.d.ts +9 -0
- package/dist/popup-menu-register.js +31 -0
- package/dist/popup-menu-register.js.map +1 -0
- package/dist/popup-menu.d.ts +71 -0
- package/dist/popup-menu.js +3 -0
- package/dist/popup-menu.js.map +1 -0
- package/dist/row.d.ts +1 -1
- package/dist/row.js +1 -1
- package/dist/select-register.js +70 -3
- package/dist/select-register.js.map +1 -1
- package/dist/select.d.ts +46 -8
- package/dist/select.js +2 -1
- package/dist/{divider-sides-BzB6rphT.d.ts → sides-BPSWde0A.d.ts} +1 -3
- package/dist/skeleton.js +1 -1
- package/dist/spacer.js +1 -1
- package/dist/split-view.d.ts +31 -3
- package/dist/split-view.js +33 -5
- package/dist/split-view.js.map +1 -1
- package/dist/state-banner.js +1 -1
- package/dist/styles/badge.css +13 -0
- package/dist/styles/catalog/components/catalog-example.css +1 -17
- package/dist/styles/catalog/components/catalog-stage.css +9 -14
- package/dist/styles/catalog/components/catalog.css +8 -18
- package/dist/styles/catalog.css +0 -5
- package/dist/styles/collapsible-panel.css +192 -39
- package/dist/styles/content-item.css +30 -0
- package/dist/styles/floating-toolbar.css +5 -0
- package/dist/styles/foundation.css +28 -19
- package/dist/styles/layout.css +1 -21
- package/dist/styles/list-action-row.css +13 -1
- package/dist/styles/list-inset-text.css +1 -2
- package/dist/styles/list-item.css +14 -1
- package/dist/styles/list.css +1 -1
- package/dist/styles/nav-stack.css +29 -64
- package/dist/styles/pane.css +33 -1
- package/dist/styles/popup-menu.css +90 -0
- package/dist/styles/resizable-region.css +53 -10
- package/dist/styles/select.css +39 -12
- package/dist/styles/split-view.css +21 -25
- package/dist/styles/state-banner.css +13 -4
- package/dist/styles/styles.css +1 -0
- package/dist/styles/tab-bar.css +31 -3
- package/dist/styles/tab-scaffold.css +36 -14
- package/dist/styles/text.css +1 -1
- package/dist/styles/token-search-field.css +4 -4
- package/dist/styles/toolbar-control-group.css +44 -12
- package/dist/styles/toolbar.css +57 -7
- package/dist/styles/value-table.css +19 -2
- package/dist/styles/webawesome.css +3 -1
- package/dist/styles/workbench.css +165 -31
- package/dist/tab-scaffold.d.ts +35 -1
- package/dist/tab-scaffold.js +50 -16
- package/dist/tab-scaffold.js.map +1 -1
- package/dist/text.js +1 -1
- package/dist/token-search-field.d.ts +13 -2
- package/dist/token-search-field.js +1 -1
- package/dist/toolbar-text.js +1 -1
- package/dist/toolbar.d.ts +12 -4
- package/dist/toolbar.js +1 -1
- package/dist/{types-CEsieBZi.d.ts → types-DXAGogOS.d.ts} +48 -0
- package/dist/value-table.js +1 -1
- package/dist/webawesome.d.ts +7 -1
- package/dist/wire-catalog.d.ts +24 -1
- package/dist/wire-catalog.js +26 -3
- package/dist/wire-catalog.js.map +1 -1
- package/dist/wire-sidebar.js +6 -3
- package/dist/wire-sidebar.js.map +1 -1
- package/dist/wire-token-search-fields.js +1 -1
- package/dist/wire-workbench.js +1 -350
- package/dist/wire-workbench.js.map +1 -1
- package/dist/workbench.d.ts +144 -6
- package/dist/workbench.js +11 -208
- package/dist/workbench.js.map +1 -1
- package/docs/accessibility.md +126 -6
- package/docs/app-layouts.md +9 -7
- package/docs/catalog.md +41 -9
- package/docs/collapsible-panel.md +79 -5
- package/docs/component-contract.md +38 -12
- package/docs/component-selection.md +64 -55
- package/docs/design/templates/empty-state/with-action-dark.svg +1 -1
- package/docs/design/templates/empty-state/with-action.svg +1 -1
- package/docs/design/templates/empty-state-dark.svg +1 -1
- package/docs/design/templates/empty-state.svg +1 -1
- package/docs/design/templates/list/compact-dark.svg +1 -1
- package/docs/design/templates/list/compact.svg +1 -1
- package/docs/design/templates/list/stack-dark.svg +1 -1
- package/docs/design/templates/list/stack.svg +1 -1
- package/docs/design/templates/list-action-row/default-dark.svg +1 -1
- package/docs/design/templates/list-action-row/default.svg +1 -1
- package/docs/design/templates/list-action-row/selected-dark.svg +1 -1
- package/docs/design/templates/list-action-row/selected.svg +1 -1
- package/docs/design/templates/list-action-row-dark.svg +1 -1
- package/docs/design/templates/list-action-row.svg +1 -1
- package/docs/design/templates/list-dark.svg +1 -1
- package/docs/design/templates/list-item/default-dark.svg +1 -1
- package/docs/design/templates/list-item/default.svg +1 -1
- package/docs/design/templates/list-item/selected-dark.svg +1 -1
- package/docs/design/templates/list-item/selected.svg +1 -1
- package/docs/design/templates/list-item/trailing-dark.svg +1 -1
- package/docs/design/templates/list-item/trailing.svg +1 -1
- package/docs/design/templates/list-item-dark.svg +1 -1
- package/docs/design/templates/list-item.svg +1 -1
- package/docs/design/templates/list.svg +1 -1
- package/docs/design/templates/state-banner/danger-dark.svg +1 -1
- package/docs/design/templates/state-banner/danger.svg +1 -1
- package/docs/design/templates/state-banner/info-dark.svg +1 -1
- package/docs/design/templates/state-banner/info.svg +1 -1
- package/docs/design/templates/state-banner/success-dark.svg +1 -1
- package/docs/design/templates/state-banner/success.svg +1 -1
- package/docs/design/templates/state-banner/warning-dark.svg +1 -1
- package/docs/design/templates/state-banner/warning.svg +1 -1
- package/docs/design/templates/state-banner-dark.svg +1 -1
- package/docs/design/templates/state-banner.svg +1 -1
- package/docs/design/templates/value-table/details-dark.svg +1 -1
- package/docs/design/templates/value-table/details.svg +1 -1
- package/docs/design/templates/value-table-dark.svg +1 -1
- package/docs/design/templates/value-table.svg +1 -1
- package/docs/design-philosophy.md +1 -1
- package/docs/examples/command-palette-adapter.tsx +3 -2
- package/docs/layout.md +74 -29
- package/docs/nav-stack.md +45 -1
- package/docs/recipes.md +48 -40
- package/docs/split-view.md +46 -2
- package/docs/surface-scaffold.md +1 -1
- package/docs/tab-scaffold.md +50 -1
- package/docs/type-contracts.md +17 -17
- package/docs/ux-demo.md +8 -4
- package/docs/webawesome-theme.md +1 -2
- package/docs/workbench.md +131 -10
- package/llms.txt +38 -9
- package/package.json +24 -2
- package/ux-demo/recipes/app-shell.tsx +141 -223
- package/ux-demo/recipes/collapsible-sidebar.tsx +47 -77
- package/ux-demo/recipes/list-detail-dialog.tsx +150 -54
- package/ux-demo/recipes/mount-recipe.ts +0 -5
- package/ux-demo/recipes/navigation-sidebar.tsx +3 -2
- package/ux-demo/recipes/navigation-stack.tsx +3 -2
- package/ux-demo/recipes/types.ts +0 -1
- package/dist/chunk-3NBL3OUQ.js.map +0 -1
- package/dist/chunk-5I22LMCV.js.map +0 -1
- package/dist/chunk-5NDQABWK.js.map +0 -1
- package/dist/chunk-7GUQYHKA.js.map +0 -1
- package/dist/chunk-7IUSV4XG.js.map +0 -1
- package/dist/chunk-BJJKFVWW.js.map +0 -1
- package/dist/chunk-D7GWXIAS.js.map +0 -1
- package/dist/chunk-DQA5FMOX.js +0 -85
- package/dist/chunk-DQA5FMOX.js.map +0 -1
- package/dist/chunk-HJKRCKDR.js.map +0 -1
- package/dist/chunk-HMQ2ZDGG.js.map +0 -1
- package/dist/chunk-KPNTVB7A.js.map +0 -1
- package/dist/chunk-MTM43SJO.js.map +0 -1
- package/dist/chunk-T22EM4ET.js.map +0 -1
- package/dist/chunk-WZ2GLEY4.js.map +0 -1
- package/dist/chunk-XD7DWYXG.js +0 -34
- package/dist/chunk-XD7DWYXG.js.map +0 -1
- package/dist/chunk-ZK5EGVFP.js +0 -27
- package/dist/chunk-ZK5EGVFP.js.map +0 -1
- package/dist/styles/catalog/components/catalog-detail.css +0 -35
- package/dist/styles/catalog/components/catalog-resource-footer.css +0 -37
- package/dist/styles/catalog/components/catalog-secondary-sections.css +0 -38
- package/dist/styles/catalog/components/catalog-section-list.css +0 -22
- package/dist/styles/catalog/components/catalog-sidebar.css +0 -82
package/README.md
CHANGED
|
@@ -168,8 +168,8 @@ The same property-specific boundary applies beyond spacing: use `flex()` (or a
|
|
|
168
168
|
finite keyword) for `Row.flex`, `Grid.flex`, and `List.flex`; length builders and intrinsic-size keywords for
|
|
169
169
|
`Skeleton.width`/`height`; length builders for `Skeleton.radius`; and
|
|
170
170
|
a foreground color for `SelectChoice.color` — `uiColor()` with a foreground
|
|
171
|
-
token such as `success-on-quiet`, or `foregroundColorVar()` (fill
|
|
172
|
-
as `uiColor('success')` are rejected). These grammars are not
|
|
171
|
+
token such as `success-on-quiet`, or `foregroundColorVar()` (fill tokens such
|
|
172
|
+
as `uiColor('success-fill-quiet')` are rejected). These grammars are not
|
|
173
173
|
interchangeable. `ListItem` and `ListActionRow` deliberately expose no raw
|
|
174
174
|
`style` declarations; use `className`, public tokens, and component props.
|
|
175
175
|
|
|
@@ -184,6 +184,7 @@ interchangeable. `ListItem` and `ListActionRow` deliberately expose no raw
|
|
|
184
184
|
| `ToolbarControlGroup`, `ToolbarActionLink` | `@kerfjs/ui/toolbar-control-group` | `@kerfjs/ui/toolbar-control-group.css` |
|
|
185
185
|
| `DialogSurface`, `PopupSurface` | `@kerfjs/ui/surface-scaffold` | `@kerfjs/ui/surface-scaffold.css` |
|
|
186
186
|
| `FloatingToolbar` | `@kerfjs/ui/floating-toolbar` | `@kerfjs/ui/floating-toolbar.css` |
|
|
187
|
+
| `PopupMenu` (register with `@kerfjs/ui/popup-menu/register`) | `@kerfjs/ui/popup-menu` | `@kerfjs/ui/popup-menu.css` |
|
|
187
188
|
| `ToolbarText` | `@kerfjs/ui/toolbar-text` | `@kerfjs/ui/toolbar-text.css` |
|
|
188
189
|
| `Text` | `@kerfjs/ui/text` | `@kerfjs/ui/text.css` |
|
|
189
190
|
| `List` | `@kerfjs/ui/list` | `@kerfjs/ui/list.css` |
|
|
@@ -196,6 +197,7 @@ interchangeable. `ListItem` and `ListActionRow` deliberately expose no raw
|
|
|
196
197
|
| `ListHeader` | `@kerfjs/ui/list-header` | `@kerfjs/ui/list-header.css` |
|
|
197
198
|
| `ListInsetControl` | `@kerfjs/ui/list-inset-control` | `@kerfjs/ui/list-inset-control.css` |
|
|
198
199
|
| `ListInsetText` | `@kerfjs/ui/list-inset-text` | `@kerfjs/ui/list-inset-text.css` |
|
|
200
|
+
| `ContentItem` | `@kerfjs/ui/content-item` | `@kerfjs/ui/content-item.css` |
|
|
199
201
|
| `Pane` | `@kerfjs/ui/pane` | `@kerfjs/ui/pane.css` |
|
|
200
202
|
| `NavStack` | `@kerfjs/ui/nav-stack` | `@kerfjs/ui/nav-stack.css` |
|
|
201
203
|
| `wireNavStack` | `@kerfjs/ui/wire-nav-stack` | — |
|
|
@@ -246,11 +248,11 @@ onto another trailing-aligned row under every `responsive` policy, and a
|
|
|
246
248
|
same way. Wrapping keeps every command visible at its full 44px target without
|
|
247
249
|
moving focus or DOM identity. When a product wants fewer visible commands at
|
|
248
250
|
narrow widths, it chooses them: render a lower-priority command inside an
|
|
249
|
-
app-owned "More"
|
|
251
|
+
app-owned "More" `PopupMenu` (in a `single` group with `nestedDropdown`).
|
|
250
252
|
|
|
251
|
-
`DisclosureArrow` defaults to an 18px root-scaled decorative visual.
|
|
252
|
-
|
|
253
|
-
needs another size; the owning control still supplies interaction, naming, and
|
|
253
|
+
`DisclosureArrow` defaults to an 18px root-scaled decorative visual. Pass a
|
|
254
|
+
typed `size` (for example `size={remify(24)}` from `@kerfjs/ui/css-values`)
|
|
255
|
+
when a consumer needs another size; the owning control still supplies interaction, naming, and
|
|
254
256
|
expanded state. Kerf `Select` retains its independent Web Awesome expand-glyph
|
|
255
257
|
scale of `.5` through `--kui-disclosure-icon-scale`. Author replacement
|
|
256
258
|
`DisclosureArrow` icon content facing right before its configured direction
|
|
@@ -473,14 +475,15 @@ Add `.kui-content` to make its major children a vertical stack with 24px gaps.
|
|
|
473
475
|
<ListItem action="open" label="Inbox" icon={inboxIcon} />
|
|
474
476
|
<ListItem action="open" label="Drafts" />
|
|
475
477
|
</section>
|
|
476
|
-
<
|
|
478
|
+
<ContentItem>Workspace details</ContentItem>
|
|
477
479
|
</nav>
|
|
478
480
|
</aside>
|
|
479
481
|
```
|
|
480
482
|
|
|
481
|
-
Ordinary children use
|
|
482
|
-
(transparent by default), 8px padding, and 12px
|
|
483
|
-
|
|
483
|
+
Ordinary children use `ContentItem` (`@kerfjs/ui/content-item`): 8px inline
|
|
484
|
+
margin, a real 1px border (transparent by default), 8px padding, and 12px
|
|
485
|
+
rounded corners. `shape="pill"` uses a 22px radius, and `frame="framed"` paints
|
|
486
|
+
the neutral border only when the item marks a real distinction. A component can expose a transparent border or
|
|
484
487
|
background without changing layout. `ListHeader` follows the same rule while
|
|
485
488
|
keeping its dormant title and count-or-badge cluster separate from its optional
|
|
486
489
|
44px action.
|
|
@@ -645,7 +648,7 @@ import "@kerfjs/ui/webawesome.css";
|
|
|
645
648
|
import "@kerfjs/ui/select/register";
|
|
646
649
|
```
|
|
647
650
|
|
|
648
|
-
That boundary keeps Web Awesome and its custom-element side effects out of bundles that use unrelated components. Automated consumer-bundle tests enforce it.
|
|
651
|
+
That boundary keeps Web Awesome and its custom-element side effects out of bundles that use unrelated components. Automated consumer-bundle tests enforce it. `PopupMenu` follows the same rule: import `@kerfjs/ui/popup-menu/register` once to register the dropdown, item, button, and divider elements it renders. Either registration also installs help tags: an icon-only Select, PopupMenu, or `aria-label`-named `<button>` in a `ToolbarControlGroup` shows its name in an `aria-hidden` tooltip on hover and keyboard focus. A toolbar with icon-only buttons but neither control imports `@kerfjs/ui/help-tags/register`, which registers only the tooltip.
|
|
649
652
|
Use `label` for a visible label or `ariaLabel` for a visually hidden name. A
|
|
650
653
|
nonempty visible label takes precedence when both are supplied. Kerf names the
|
|
651
654
|
actual shadow combobox without adding visible label spacing; this also works
|
|
@@ -79,7 +79,7 @@
|
|
|
79
79
|
"id": "KUI-T010",
|
|
80
80
|
"publicImport": "@kerfjs/ui",
|
|
81
81
|
"symbols": [
|
|
82
|
-
"
|
|
82
|
+
"Sides",
|
|
83
83
|
"StateBannerUrgency",
|
|
84
84
|
"TabActivation",
|
|
85
85
|
"TextVariant",
|
|
@@ -89,7 +89,7 @@
|
|
|
89
89
|
"ToolbarControlGroupTone"
|
|
90
90
|
],
|
|
91
91
|
"kind": "finite-vocabulary",
|
|
92
|
-
"summary": "Finite public variant vocabularies, including canonical
|
|
92
|
+
"summary": "Finite public variant vocabularies, including canonical edge combinations, are named exported unions rather than anonymous string sets."
|
|
93
93
|
},
|
|
94
94
|
{
|
|
95
95
|
"id": "KUI-T011",
|
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
},
|
|
45
45
|
"accessibility": {
|
|
46
46
|
"obligations": [
|
|
47
|
-
"Badge is non-interactive. Supply label when visible content is abbreviated, and ariaHidden when it repeats an accessible name owned by the surrounding component.",
|
|
47
|
+
"Badge is non-interactive. Supply label when visible content is abbreviated, and ariaHidden when it repeats an accessible name owned by the surrounding component. A text-free dot must take either label (exposed as an image) or ariaHidden, which the types enforce.",
|
|
48
48
|
"Keep meaningful text visible because tone is supplementary."
|
|
49
49
|
]
|
|
50
50
|
},
|
|
@@ -139,7 +139,19 @@
|
|
|
139
139
|
"The arrow is decorative; expose expanded state through aria-expanded on its owning control and keep that control's accessible name stable."
|
|
140
140
|
]
|
|
141
141
|
},
|
|
142
|
-
"cssValueProps": [
|
|
142
|
+
"cssValueProps": [
|
|
143
|
+
{
|
|
144
|
+
"path": "size",
|
|
145
|
+
"grammar": "length",
|
|
146
|
+
"helpers": ["px", "rem", "em", "pct", "space", "lengthVar", "calc"],
|
|
147
|
+
"nonStandaloneHelpers": ["plus"],
|
|
148
|
+
"shorthands": [],
|
|
149
|
+
"canonicalShorthands": [],
|
|
150
|
+
"exceptionalShorthands": [],
|
|
151
|
+
"rawPolicy": "forbid",
|
|
152
|
+
"examples": ["size={remify(24)}"]
|
|
153
|
+
}
|
|
154
|
+
],
|
|
143
155
|
"boundaries": {
|
|
144
156
|
"rootClass": "kui-disclosure-arrow",
|
|
145
157
|
"publicClasses": ["kui-disclosure-arrow"],
|
|
@@ -306,18 +318,6 @@
|
|
|
306
318
|
"--kui-color-danger-on-normal",
|
|
307
319
|
"--kui-color-danger-on-loud",
|
|
308
320
|
"--kui-color-danger-on-fill",
|
|
309
|
-
"--kui-color-border",
|
|
310
|
-
"--kui-color-border-quiet",
|
|
311
|
-
"--kui-color-accent",
|
|
312
|
-
"--kui-color-accent-text",
|
|
313
|
-
"--kui-color-pop",
|
|
314
|
-
"--kui-color-pop-text",
|
|
315
|
-
"--kui-color-success",
|
|
316
|
-
"--kui-color-success-text",
|
|
317
|
-
"--kui-color-warning",
|
|
318
|
-
"--kui-color-warning-text",
|
|
319
|
-
"--kui-color-danger",
|
|
320
|
-
"--kui-color-danger-text",
|
|
321
321
|
"--kui-focus-ring",
|
|
322
322
|
"--kui-shadow-s",
|
|
323
323
|
"--kui-shadow-l"
|
|
@@ -434,8 +434,6 @@
|
|
|
434
434
|
"rootClass": "kui-content",
|
|
435
435
|
"publicClasses": [
|
|
436
436
|
"kui-content",
|
|
437
|
-
"kui-content-item",
|
|
438
|
-
"kui-content-item--pill",
|
|
439
437
|
"kui-control-cluster",
|
|
440
438
|
"kui-inline-metadata",
|
|
441
439
|
"kui-scroll-owner"
|
|
@@ -614,6 +612,16 @@
|
|
|
614
612
|
"id": "per-view bottom toolbar content or a persistent fallback",
|
|
615
613
|
"owner": "application",
|
|
616
614
|
"required": false
|
|
615
|
+
},
|
|
616
|
+
{
|
|
617
|
+
"id": "per-view leading, center, and trailing top-toolbar groups",
|
|
618
|
+
"owner": "application",
|
|
619
|
+
"required": false
|
|
620
|
+
},
|
|
621
|
+
{
|
|
622
|
+
"id": "top-toolbar configuration, title size, and heading level",
|
|
623
|
+
"owner": "application",
|
|
624
|
+
"required": false
|
|
617
625
|
}
|
|
618
626
|
],
|
|
619
627
|
"wiring": {
|
|
@@ -655,7 +663,8 @@
|
|
|
655
663
|
},
|
|
656
664
|
"accessibility": {
|
|
657
665
|
"obligations": [
|
|
658
|
-
"Give the stack region an accessible label and every back control a stable action label.",
|
|
666
|
+
"Give the stack region an accessible label and every back control a stable action label; visible backText names the control itself.",
|
|
667
|
+
"Set toolbarConfig.headingLevel when the view title is the page's or section's heading landmark.",
|
|
659
668
|
"Use wireNavStack so each controlled push moves focus into the new top view and each pop restores the revealed view's remembered descendant.",
|
|
660
669
|
"Mark a preferred initial heading or control with data-nav-focus when the first enabled focusable descendant is not the right target."
|
|
661
670
|
]
|
|
@@ -671,11 +680,8 @@
|
|
|
671
680
|
"kui-nav-stack__chrome-copy",
|
|
672
681
|
"kui-nav-stack__chrome-copy--bottom",
|
|
673
682
|
"kui-nav-stack__chrome-copy--exiting",
|
|
674
|
-
"kui-nav-
|
|
675
|
-
"kui-nav-stack__back",
|
|
676
|
-
"kui-nav-stack__back-icon",
|
|
683
|
+
"kui-nav-stack__toolbar",
|
|
677
684
|
"kui-nav-stack__title",
|
|
678
|
-
"kui-nav-stack__actions",
|
|
679
685
|
"kui-nav-stack__viewport",
|
|
680
686
|
"kui-nav-stack__view",
|
|
681
687
|
"kui-nav-stack__view--entering",
|
|
@@ -736,6 +742,16 @@
|
|
|
736
742
|
"owner": "application",
|
|
737
743
|
"required": false
|
|
738
744
|
},
|
|
745
|
+
{
|
|
746
|
+
"id": "optional list collapse state and its restore control",
|
|
747
|
+
"owner": "application",
|
|
748
|
+
"required": false
|
|
749
|
+
},
|
|
750
|
+
{
|
|
751
|
+
"id": "compact list and detail toolbar groups and toolbar configuration",
|
|
752
|
+
"owner": "application",
|
|
753
|
+
"required": false
|
|
754
|
+
},
|
|
739
755
|
{ "id": "back action", "owner": "application", "required": false }
|
|
740
756
|
],
|
|
741
757
|
"wiring": {
|
|
@@ -832,6 +848,11 @@
|
|
|
832
848
|
"owner": "application",
|
|
833
849
|
"required": false
|
|
834
850
|
},
|
|
851
|
+
{
|
|
852
|
+
"id": "tab badge counts or dots and their localized badgeLabel phrases",
|
|
853
|
+
"owner": "application",
|
|
854
|
+
"required": false
|
|
855
|
+
},
|
|
835
856
|
{
|
|
836
857
|
"id": "routing and persistence",
|
|
837
858
|
"owner": "application",
|
|
@@ -864,7 +885,8 @@
|
|
|
864
885
|
"accessibility": {
|
|
865
886
|
"obligations": [
|
|
866
887
|
"Give the tablist an accessible label and keep exactly the active tab in the sequential focus order.",
|
|
867
|
-
"Wire selection through the controlled active id while leaving inactive scenes mounted and hidden."
|
|
888
|
+
"Wire selection through the controlled active id while leaving inactive scenes mounted and hidden.",
|
|
889
|
+
"A tab badge is aria-hidden; supply badgeLabel so the tab's accessible name becomes \"<label>, <badgeLabel>\" (it defaults to the badge text). The dot form, badge: true, has no text, so its badgeLabel is required."
|
|
868
890
|
]
|
|
869
891
|
},
|
|
870
892
|
"cssValueProps": [],
|
|
@@ -877,6 +899,7 @@
|
|
|
877
899
|
"kui-tab-scaffold__bar",
|
|
878
900
|
"kui-tab-scaffold__tab",
|
|
879
901
|
"kui-tab-scaffold__tab-icon",
|
|
902
|
+
"kui-tab-scaffold__tab-badge",
|
|
880
903
|
"kui-tab-scaffold__tab-label"
|
|
881
904
|
],
|
|
882
905
|
"publicTokens": []
|
|
@@ -1007,7 +1030,8 @@
|
|
|
1007
1030
|
"--kui-workbench-overlay-max-width",
|
|
1008
1031
|
"--kui-workbench-overlay-max-height",
|
|
1009
1032
|
"--kui-workbench-restore-inset",
|
|
1010
|
-
"--kui-workbench-restore-z"
|
|
1033
|
+
"--kui-workbench-restore-z",
|
|
1034
|
+
"--kui-workbench-overlay-dismiss-margin"
|
|
1011
1035
|
]
|
|
1012
1036
|
},
|
|
1013
1037
|
"diagnostics": [],
|
|
@@ -1282,7 +1306,7 @@
|
|
|
1282
1306
|
"kui-toolbar__trailing"
|
|
1283
1307
|
],
|
|
1284
1308
|
"publicTokens": [
|
|
1285
|
-
"--kui-color-border",
|
|
1309
|
+
"--kui-color-neutral-border-normal",
|
|
1286
1310
|
"--kui-font-sans",
|
|
1287
1311
|
"--kui-toolbar-divider-color"
|
|
1288
1312
|
]
|
|
@@ -1346,7 +1370,8 @@
|
|
|
1346
1370
|
},
|
|
1347
1371
|
"accessibility": {
|
|
1348
1372
|
"obligations": [
|
|
1349
|
-
"Name the group when its relationship is not evident from context."
|
|
1373
|
+
"Name the group when its relationship is not evident from context.",
|
|
1374
|
+
"Name an icon-only button or link with aria-label, not title. Once any help-tag installer is imported (select/register, popup-menu/register, or help-tags/register), it shows an aria-hidden Web Awesome help tag repeating that name after a 500ms hover and at once on keyboard focus, hidden on a press and on Escape, and never joins aria-labelledby. A native title keeps the browser tooltip and gets no second tag."
|
|
1350
1375
|
]
|
|
1351
1376
|
},
|
|
1352
1377
|
"cssValueProps": [],
|
|
@@ -1473,7 +1498,19 @@
|
|
|
1473
1498
|
"Give the toolbar an accessible name (label is required — it exposes role=\"toolbar\")."
|
|
1474
1499
|
]
|
|
1475
1500
|
},
|
|
1476
|
-
"cssValueProps": [
|
|
1501
|
+
"cssValueProps": [
|
|
1502
|
+
{
|
|
1503
|
+
"path": "inset",
|
|
1504
|
+
"grammar": "length",
|
|
1505
|
+
"helpers": ["px", "rem", "em", "pct", "space", "lengthVar", "calc"],
|
|
1506
|
+
"nonStandaloneHelpers": ["plus"],
|
|
1507
|
+
"shorthands": [],
|
|
1508
|
+
"canonicalShorthands": [],
|
|
1509
|
+
"exceptionalShorthands": [],
|
|
1510
|
+
"rawPolicy": "forbid",
|
|
1511
|
+
"examples": ["inset={space(\"xs\")}"]
|
|
1512
|
+
}
|
|
1513
|
+
],
|
|
1477
1514
|
"boundaries": {
|
|
1478
1515
|
"rootClass": "kui-floating-toolbar",
|
|
1479
1516
|
"publicClasses": ["kui-floating-toolbar"],
|
|
@@ -1597,7 +1634,7 @@
|
|
|
1597
1634
|
"rootClass": "kui-text",
|
|
1598
1635
|
"publicClasses": ["kui-text"],
|
|
1599
1636
|
"publicTokens": [
|
|
1600
|
-
"--kui-color-danger-
|
|
1637
|
+
"--kui-color-danger-on-quiet",
|
|
1601
1638
|
"--kui-color-text-quiet",
|
|
1602
1639
|
"--kui-font-mono",
|
|
1603
1640
|
"--kui-font-xs",
|
|
@@ -1696,7 +1733,7 @@
|
|
|
1696
1733
|
"kui-value-table__label"
|
|
1697
1734
|
],
|
|
1698
1735
|
"publicTokens": [
|
|
1699
|
-
"--kui-color-border",
|
|
1736
|
+
"--kui-color-neutral-border-normal",
|
|
1700
1737
|
"--kui-color-surface-lowered",
|
|
1701
1738
|
"--kui-color-text",
|
|
1702
1739
|
"--kui-color-text-quiet",
|
|
@@ -2070,7 +2107,7 @@
|
|
|
2070
2107
|
"rootClass": "kui-list",
|
|
2071
2108
|
"publicClasses": ["kui-list"],
|
|
2072
2109
|
"publicTokens": [
|
|
2073
|
-
"--kui-color-border",
|
|
2110
|
+
"--kui-color-neutral-border-normal",
|
|
2074
2111
|
"--kui-layout-item-gap",
|
|
2075
2112
|
"--kui-list-divider-color",
|
|
2076
2113
|
"--kui-list-gap"
|
|
@@ -2412,11 +2449,83 @@
|
|
|
2412
2449
|
"cssValueProps": [],
|
|
2413
2450
|
"boundaries": {
|
|
2414
2451
|
"rootClass": "kui-list-inset-text",
|
|
2452
|
+
"publicClasses": ["kui-list-inset-text"],
|
|
2453
|
+
"publicTokens": []
|
|
2454
|
+
},
|
|
2455
|
+
"diagnostics": [],
|
|
2456
|
+
"provenance": {
|
|
2457
|
+
"selection": "ai/component-catalog.json",
|
|
2458
|
+
"composition": "generated-permissive-default"
|
|
2459
|
+
}
|
|
2460
|
+
},
|
|
2461
|
+
{
|
|
2462
|
+
"key": "@kerfjs/ui:content-item",
|
|
2463
|
+
"package": "@kerfjs/ui",
|
|
2464
|
+
"id": "content-item",
|
|
2465
|
+
"name": "ContentItem",
|
|
2466
|
+
"kind": "component",
|
|
2467
|
+
"source": "kerf",
|
|
2468
|
+
"parents": { "mode": "any", "entries": [] },
|
|
2469
|
+
"contexts": ["application-ui"],
|
|
2470
|
+
"zones": [],
|
|
2471
|
+
"children": { "mode": "any", "concepts": [], "requiredConcepts": [] },
|
|
2472
|
+
"state": [
|
|
2473
|
+
{ "id": "the item content", "owner": "application", "required": false },
|
|
2474
|
+
{
|
|
2475
|
+
"id": "whether the item marks a real distinction that warrants a visible frame",
|
|
2476
|
+
"owner": "application",
|
|
2477
|
+
"required": false
|
|
2478
|
+
},
|
|
2479
|
+
{ "id": "corner shape", "owner": "application", "required": false },
|
|
2480
|
+
{
|
|
2481
|
+
"id": "region semantics and accessible name",
|
|
2482
|
+
"owner": "application",
|
|
2483
|
+
"required": false
|
|
2484
|
+
},
|
|
2485
|
+
{
|
|
2486
|
+
"id": "whether the item is a programmatic focus target",
|
|
2487
|
+
"owner": "application",
|
|
2488
|
+
"required": false
|
|
2489
|
+
}
|
|
2490
|
+
],
|
|
2491
|
+
"wiring": {
|
|
2492
|
+
"required": false,
|
|
2493
|
+
"helpers": [],
|
|
2494
|
+
"obligations": [],
|
|
2495
|
+
"stateAttributes": []
|
|
2496
|
+
},
|
|
2497
|
+
"responsive": { "owner": "not-applicable", "behaviors": [] },
|
|
2498
|
+
"layout": {
|
|
2499
|
+
"roles": ["structure"],
|
|
2500
|
+
"geometry": {
|
|
2501
|
+
"margin": "self",
|
|
2502
|
+
"border": "self",
|
|
2503
|
+
"padding": "self",
|
|
2504
|
+
"notes": [
|
|
2505
|
+
"The 1px border is always reserved and transparent unless frame=\"framed\", so framed and unframed items share the same geometry."
|
|
2506
|
+
]
|
|
2507
|
+
}
|
|
2508
|
+
},
|
|
2509
|
+
"accessibility": {
|
|
2510
|
+
"obligations": [
|
|
2511
|
+
"An ordinary item adds no role or name; pass ariaLabel only when the item is a distinct named region (it then renders role=\"region\").",
|
|
2512
|
+
"focusTarget makes the item a programmatic focus target (tabindex=\"-1\", never a tab stop), such as a NavStack view's data-nav-focus target.",
|
|
2513
|
+
"The frame is decorative and never the only signal of state."
|
|
2514
|
+
]
|
|
2515
|
+
},
|
|
2516
|
+
"cssValueProps": [],
|
|
2517
|
+
"boundaries": {
|
|
2518
|
+
"rootClass": "kui-content-item",
|
|
2415
2519
|
"publicClasses": [
|
|
2416
|
-
"kui-
|
|
2417
|
-
"kui-
|
|
2520
|
+
"kui-content-item",
|
|
2521
|
+
"kui-content-item--pill",
|
|
2522
|
+
"kui-content-item--framed"
|
|
2418
2523
|
],
|
|
2419
|
-
"publicTokens": [
|
|
2524
|
+
"publicTokens": [
|
|
2525
|
+
"--kui-content-item-border",
|
|
2526
|
+
"--kui-content-item-radius",
|
|
2527
|
+
"--kui-content-item-background"
|
|
2528
|
+
]
|
|
2420
2529
|
},
|
|
2421
2530
|
"diagnostics": [],
|
|
2422
2531
|
"provenance": {
|
|
@@ -2848,9 +2957,9 @@
|
|
|
2848
2957
|
"kui-token-search__trailing"
|
|
2849
2958
|
],
|
|
2850
2959
|
"publicTokens": [
|
|
2851
|
-
"--kui-color-
|
|
2852
|
-
"--kui-color-
|
|
2853
|
-
"--kui-color-border",
|
|
2960
|
+
"--kui-color-brand-fill-normal",
|
|
2961
|
+
"--kui-color-brand-on-quiet",
|
|
2962
|
+
"--kui-color-neutral-border-normal",
|
|
2854
2963
|
"--kui-color-text-link",
|
|
2855
2964
|
"--kui-color-surface",
|
|
2856
2965
|
"--kui-color-text",
|
|
@@ -2943,7 +3052,7 @@
|
|
|
2943
3052
|
"kui-resizable-region__restore"
|
|
2944
3053
|
],
|
|
2945
3054
|
"publicTokens": [
|
|
2946
|
-
"--kui-color-border",
|
|
3055
|
+
"--kui-color-neutral-border-normal",
|
|
2947
3056
|
"--kui-color-neutral-on-quiet",
|
|
2948
3057
|
"--kui-color-text-link",
|
|
2949
3058
|
"--kui-focus-ring",
|
|
@@ -3002,7 +3111,10 @@
|
|
|
3002
3111
|
"Verify the live value, standard events, focus, and rendered output.",
|
|
3003
3112
|
"A nonempty label names the internal combobox; otherwise ariaLabel supplies a visually hidden label without adding control height, including custom selected content.",
|
|
3004
3113
|
"Hint text is visible below the control through Web Awesome's native hint relationship; placeholderText remains the empty value inside the closed control.",
|
|
3005
|
-
"Import select/register once; its scoped lifecycle adapter keeps the latest open/close request authoritative across animation reversals, canceled transitions, and removal. Do not add consumer popup timing or position repairs."
|
|
3114
|
+
"Import select/register once; its scoped lifecycle adapter keeps the latest open/close request authoritative across animation reversals, canceled transitions, and removal. Do not add consumer popup timing or position repairs.",
|
|
3115
|
+
"With multiple, the popup stays open while choices toggle (pointer, Enter, or Space) and closes on an outside press, Escape, or focus leaving; each chosen option shows a check, and the closed control summarizes the chosen labels in choice order.",
|
|
3116
|
+
"A multiple icon-only trigger shows its fixed triggerIcon and, while any choice is chosen, an aria-hidden count Badge; the combobox's accessible name ends with the chosen labels in choice order, and its hidden value stays empty.",
|
|
3117
|
+
"Once registered, an icon-only trigger (single or multiple) shows an aria-hidden Web Awesome help tag repeating its accessible name (a single Select adds its current choice) after a 500ms hover and at once on keyboard focus; it hides while the popup is open, on a press, and on Escape, and never joins aria-labelledby. Do not add a title or another tooltip."
|
|
3006
3118
|
]
|
|
3007
3119
|
},
|
|
3008
3120
|
"cssValueProps": [
|
|
@@ -3034,8 +3146,6 @@
|
|
|
3034
3146
|
"kui-select__icon"
|
|
3035
3147
|
],
|
|
3036
3148
|
"publicTokens": [
|
|
3037
|
-
"--kui-color-brand-fill-normal",
|
|
3038
|
-
"--kui-color-brand-on-fill",
|
|
3039
3149
|
"--kui-color-neutral-border-quiet",
|
|
3040
3150
|
"--kui-color-neutral-on-quiet",
|
|
3041
3151
|
"--kui-disclosure-icon-scale",
|
|
@@ -3055,6 +3165,63 @@
|
|
|
3055
3165
|
"composition": "README.md#web-awesome-theme"
|
|
3056
3166
|
}
|
|
3057
3167
|
},
|
|
3168
|
+
{
|
|
3169
|
+
"key": "@kerfjs/ui:popup-menu",
|
|
3170
|
+
"package": "@kerfjs/ui",
|
|
3171
|
+
"id": "popup-menu",
|
|
3172
|
+
"name": "PopupMenu",
|
|
3173
|
+
"kind": "component",
|
|
3174
|
+
"source": "kerf",
|
|
3175
|
+
"parents": { "mode": "any", "entries": [] },
|
|
3176
|
+
"contexts": ["application-ui"],
|
|
3177
|
+
"zones": [],
|
|
3178
|
+
"children": { "mode": "any", "concepts": [], "requiredConcepts": [] },
|
|
3179
|
+
"state": [
|
|
3180
|
+
{
|
|
3181
|
+
"id": "commands and their delegated actions",
|
|
3182
|
+
"owner": "application",
|
|
3183
|
+
"required": false
|
|
3184
|
+
},
|
|
3185
|
+
{
|
|
3186
|
+
"id": "which items are enabled",
|
|
3187
|
+
"owner": "application",
|
|
3188
|
+
"required": false
|
|
3189
|
+
},
|
|
3190
|
+
{
|
|
3191
|
+
"id": "reactions to the menu opening or closing",
|
|
3192
|
+
"owner": "application",
|
|
3193
|
+
"required": false
|
|
3194
|
+
}
|
|
3195
|
+
],
|
|
3196
|
+
"wiring": {
|
|
3197
|
+
"required": false,
|
|
3198
|
+
"helpers": [],
|
|
3199
|
+
"obligations": [],
|
|
3200
|
+
"stateAttributes": []
|
|
3201
|
+
},
|
|
3202
|
+
"responsive": { "owner": "not-applicable", "behaviors": [] },
|
|
3203
|
+
"layout": {
|
|
3204
|
+
"roles": ["controls"],
|
|
3205
|
+
"geometry": { "margin": "none", "border": "child", "padding": "child" }
|
|
3206
|
+
},
|
|
3207
|
+
"accessibility": {
|
|
3208
|
+
"obligations": [
|
|
3209
|
+
"An icon-only trigger requires label, rendered as visually hidden slotted text because a Web Awesome button takes its accessible name from its content; a trigger with visible text is named by that text. Web Awesome provides menu roles, arrow-key navigation, typeahead, and Escape.",
|
|
3210
|
+
"Once registered, an icon-only trigger shows its label as an aria-hidden Web Awesome help tag after a 500ms hover and at once on keyboard focus; it hides while the menu is open, on a press, and on Escape, and never joins aria-labelledby. Do not add a title or another tooltip."
|
|
3211
|
+
]
|
|
3212
|
+
},
|
|
3213
|
+
"cssValueProps": [],
|
|
3214
|
+
"boundaries": {
|
|
3215
|
+
"rootClass": "kui-popup-menu",
|
|
3216
|
+
"publicClasses": ["kui-popup-menu", "kui-popup-menu__label"],
|
|
3217
|
+
"publicTokens": []
|
|
3218
|
+
},
|
|
3219
|
+
"diagnostics": [],
|
|
3220
|
+
"provenance": {
|
|
3221
|
+
"selection": "ai/component-catalog.json",
|
|
3222
|
+
"composition": "generated-permissive-default"
|
|
3223
|
+
}
|
|
3224
|
+
},
|
|
3058
3225
|
{
|
|
3059
3226
|
"key": "@kerfjs/ui:feedback",
|
|
3060
3227
|
"package": "@kerfjs/ui",
|