@kerfjs/ui 5.0.0-beta.23 → 5.0.0-beta.25
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 +45 -23
- package/ai/application-ui-diagnostic-ids-v1.json +3 -0
- package/ai/application-ui-profile.defaults.json +1 -1
- package/ai/compile-time-contracts-v1.json +5 -12
- package/ai/component-catalog-v2-overrides.json +12 -49
- package/ai/component-catalog-v2.d.ts +1 -0
- package/ai/component-catalog-v2.json +458 -123
- package/ai/component-catalog-v2.schema.json +2 -1
- package/ai/component-catalog.json +658 -195
- package/ai/public-api-signatures-v1.md +160 -80
- package/ai/skill.md +22 -22
- package/ai/webawesome-jsx-signatures-v1.md +2 -1
- package/analyzer/cli.mjs +5 -2
- package/analyzer/index.d.mts +1 -0
- package/analyzer/index.mjs +117 -10
- package/dist/app-tab.d.ts +10 -2
- package/dist/app-tab.js +1 -1
- package/dist/browser/list-action-row.js +1 -0
- package/dist/browser/list-item.js +1 -0
- package/dist/browser/list.js +3 -0
- package/dist/browser/surface-scaffold.js +3 -0
- package/dist/catalog.d.ts +8 -4
- package/dist/catalog.js +21 -11
- package/dist/catalog.js.map +1 -1
- package/dist/{chunk-ELSJX4W7.js → chunk-4EF2CMYS.js} +25 -6
- package/dist/chunk-4EF2CMYS.js.map +1 -0
- package/dist/{chunk-OHU6CI22.js → chunk-B3A3IVO5.js} +2 -2
- package/dist/{chunk-OHU6CI22.js.map → chunk-B3A3IVO5.js.map} +1 -1
- package/dist/{chunk-K57KRAOV.js → chunk-FRVS5RFM.js} +24 -6
- package/dist/chunk-FRVS5RFM.js.map +1 -0
- package/dist/{chunk-DSNIYOZ3.js → chunk-GWEAPEZI.js} +16 -3
- package/dist/chunk-GWEAPEZI.js.map +1 -0
- package/dist/chunk-HP2B2L26.js +102 -0
- package/dist/chunk-HP2B2L26.js.map +1 -0
- package/dist/{chunk-OZWU5ZPZ.js → chunk-IJBSZ4NX.js} +2 -2
- package/dist/{chunk-OZWU5ZPZ.js.map → chunk-IJBSZ4NX.js.map} +1 -1
- package/dist/chunk-J5BFYY7Q.js +35 -0
- package/dist/chunk-J5BFYY7Q.js.map +1 -0
- package/dist/{chunk-GP5DP5DL.js → chunk-JFGXQBIP.js} +85 -24
- package/dist/chunk-JFGXQBIP.js.map +1 -0
- package/dist/{chunk-QQFJMRIB.js → chunk-KWWR5VMS.js} +2 -2
- package/dist/{chunk-QQFJMRIB.js.map → chunk-KWWR5VMS.js.map} +1 -1
- package/dist/chunk-OBLTAKSX.js +43 -0
- package/dist/chunk-OBLTAKSX.js.map +1 -0
- package/dist/{chunk-PIDTEQ3U.js → chunk-OT6RPYAP.js} +17 -3
- package/dist/chunk-OT6RPYAP.js.map +1 -0
- package/dist/{chunk-W7YD6E4N.js → chunk-R7ZWUN64.js} +2 -2
- package/dist/{chunk-W7YD6E4N.js.map → chunk-R7ZWUN64.js.map} +1 -1
- package/dist/{chunk-PZQVSDLH.js → chunk-RKVQEH4J.js} +1 -1
- package/dist/chunk-RKVQEH4J.js.map +1 -0
- package/dist/{chunk-7L6EHUMV.js → chunk-SYDMYBPG.js} +3 -3
- package/dist/chunk-SYDMYBPG.js.map +1 -0
- package/dist/{chunk-W4CXQYSG.js → chunk-TB6DY7H5.js} +3 -1
- package/dist/chunk-TB6DY7H5.js.map +1 -0
- package/dist/{chunk-AASLYRGE.js → chunk-UKKSMZYT.js} +18 -7
- package/dist/chunk-UKKSMZYT.js.map +1 -0
- package/dist/{chunk-BBRXX6PF.js → chunk-VCE4MPVE.js} +26 -4
- package/dist/chunk-VCE4MPVE.js.map +1 -0
- package/dist/{chunk-VLYV65LK.js → chunk-W5L2JSBY.js} +5 -3
- package/dist/chunk-W5L2JSBY.js.map +1 -0
- package/dist/{chunk-5VTB2BKP.js → chunk-WNWD54GR.js} +16 -2
- package/dist/chunk-WNWD54GR.js.map +1 -0
- package/dist/{chunk-M7JBER5U.js → chunk-X2U3QJCJ.js} +8 -2
- package/dist/chunk-X2U3QJCJ.js.map +1 -0
- package/dist/{chunk-DPDBVKNA.js → chunk-YMKH5XTF.js} +5 -3
- package/dist/chunk-YMKH5XTF.js.map +1 -0
- package/dist/collapsible-panel.d.ts +9 -1
- package/dist/collapsible-panel.js +36 -15
- package/dist/collapsible-panel.js.map +1 -1
- package/dist/divider-sides-267FA7sY.d.ts +4 -0
- package/dist/index.d.ts +5 -3
- package/dist/index.js +20 -19
- package/dist/list-action-row.d.ts +11 -1
- package/dist/list-action-row.js +2 -1
- package/dist/list-header.d.ts +15 -2
- package/dist/list-header.js +1 -1
- package/dist/list-item.d.ts +12 -1
- package/dist/list-item.js +2 -1
- package/dist/list.d.ts +19 -0
- package/dist/list.js +3 -0
- package/dist/list.js.map +1 -0
- package/dist/nav-stack.js +1 -1
- package/dist/resizable-region.d.ts +19 -2
- package/dist/resizable-region.js +1 -1
- package/dist/segmented-control.js +1 -1
- package/dist/select.d.ts +12 -1
- package/dist/select.js +1 -1
- package/dist/skeleton.d.ts +1 -1
- package/dist/skeleton.js +1 -1
- package/dist/split-view.js +2 -2
- package/dist/state-banner.d.ts +4 -2
- package/dist/state-banner.js +1 -1
- package/dist/styles/app-tab.css +26 -0
- package/dist/styles/catalog.css +8 -2
- package/dist/styles/collapsible-panel.css +66 -4
- package/dist/styles/list-action-row.css +64 -0
- package/dist/styles/list-header.css +32 -0
- package/dist/styles/list-item.css +45 -6
- package/dist/styles/list.css +43 -0
- package/dist/styles/resizable-region.css +132 -0
- package/dist/styles/select.css +68 -0
- package/dist/styles/state-banner.css +32 -1
- package/dist/styles/styles.css +2 -1
- package/dist/styles/sunken-panel.css +4 -0
- package/dist/styles/surface-scaffold.css +51 -0
- package/dist/styles/tab-bar.css +24 -0
- package/dist/styles/toolbar-control-group.css +73 -1
- package/dist/styles/toolbar-text.css +1 -1
- package/dist/styles/toolbar.css +38 -2
- package/dist/styles/webawesome.css +12 -0
- package/dist/styles/workbench.css +89 -0
- package/dist/sunken-panel.d.ts +5 -2
- package/dist/sunken-panel.js +1 -1
- package/dist/surface-scaffold.d.ts +25 -0
- package/dist/surface-scaffold.js +3 -0
- package/dist/surface-scaffold.js.map +1 -0
- package/dist/tab-bar.d.ts +11 -2
- package/dist/tab-bar.js +1 -1
- package/dist/toolbar-control-group.d.ts +16 -2
- package/dist/toolbar-control-group.js +1 -1
- package/dist/toolbar-text.js +1 -1
- package/dist/toolbar.d.ts +5 -3
- package/dist/toolbar.js +1 -1
- package/dist/value-table.js +1 -1
- package/dist/webawesome.d.ts +1 -0
- package/dist/wire-catalog.d.ts +4 -2
- package/dist/wire-catalog.js +95 -36
- package/dist/wire-catalog.js.map +1 -1
- package/dist/wire-resizable-regions.js +1 -1
- package/dist/wire-sidebar.d.ts +6 -1
- package/dist/wire-sidebar.js +27 -8
- package/dist/wire-sidebar.js.map +1 -1
- package/dist/wire-tab-bars.js +1 -1
- package/dist/wire-token-search-fields.d.ts +1 -1
- package/dist/wire-token-search-fields.js +1 -1
- package/dist/workbench.d.ts +8 -0
- package/dist/workbench.js +42 -0
- package/dist/workbench.js.map +1 -1
- package/docs/accessibility.md +67 -15
- package/docs/catalog.md +17 -12
- package/docs/collapsible-panel.md +7 -0
- package/docs/component-contract.md +19 -9
- package/docs/component-selection.md +65 -31
- package/docs/design/templates/empty-state/filtered-dark.svg +1 -1
- package/docs/design/templates/empty-state/filtered.svg +1 -1
- 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 -7
- package/docs/design/templates/empty-state.svg +1 -7
- package/docs/design/templates/list/compact-dark.svg +1 -0
- package/docs/design/templates/list/compact.svg +1 -0
- package/docs/design/templates/list/stack-dark.svg +1 -0
- package/docs/design/templates/list/stack.svg +1 -0
- 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 -7
- package/docs/design/templates/list-action-row.svg +1 -7
- package/docs/design/templates/list-dark.svg +1 -0
- package/docs/design/templates/list-header/action-dark.svg +1 -1
- package/docs/design/templates/list-header/action.svg +1 -1
- package/docs/design/templates/list-header/toggle-collapsed-dark.svg +1 -1
- package/docs/design/templates/list-header/toggle-collapsed.svg +1 -1
- package/docs/design/templates/list-header/toggle-expanded-dark.svg +1 -1
- package/docs/design/templates/list-header/toggle-expanded.svg +1 -1
- package/docs/design/templates/list-header-dark.svg +1 -11
- package/docs/design/templates/list-header.svg +1 -11
- 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/multiline-dark.svg +1 -1
- package/docs/design/templates/list-item/multiline.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 -11
- package/docs/design/templates/list-item.svg +1 -11
- package/docs/design/templates/list.svg +1 -0
- package/docs/design/templates/segmented-control-dark.svg +1 -7
- package/docs/design/templates/segmented-control.svg +1 -7
- package/docs/design/templates/skeleton-dark.svg +1 -9
- package/docs/design/templates/skeleton.svg +1 -9
- 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-badge-dark.svg +1 -0
- package/docs/design/templates/state-banner/info-badge.svg +1 -0
- 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 -11
- package/docs/design/templates/state-banner.svg +1 -11
- package/docs/design/templates/tab-bar/workspace-tabs-dark.svg +1 -1
- package/docs/design/templates/tab-bar/workspace-tabs.svg +1 -1
- package/docs/design/templates/tab-bar-dark.svg +1 -5
- package/docs/design/templates/tab-bar.svg +1 -5
- package/docs/design/templates/token-search-field/empty-dark.svg +1 -1
- package/docs/design/templates/token-search-field/empty.svg +1 -1
- package/docs/design/templates/token-search-field/tokens-dark.svg +1 -1
- package/docs/design/templates/token-search-field/tokens.svg +1 -1
- package/docs/design/templates/token-search-field-dark.svg +1 -7
- package/docs/design/templates/token-search-field.svg +1 -7
- package/docs/design/templates/toolbar/title-and-actions-dark.svg +1 -1
- package/docs/design/templates/toolbar/title-and-actions.svg +1 -1
- package/docs/design/templates/toolbar-control-group/borderless-single-dark.svg +1 -1
- package/docs/design/templates/toolbar-control-group/borderless-single.svg +1 -1
- package/docs/design/templates/toolbar-control-group/icon-buttons-dark.svg +1 -1
- package/docs/design/templates/toolbar-control-group/icon-buttons.svg +1 -1
- package/docs/design/templates/toolbar-control-group/push-buttons-dark.svg +1 -1
- package/docs/design/templates/toolbar-control-group/push-buttons.svg +1 -1
- package/docs/design/templates/toolbar-control-group/with-text-dark.svg +1 -1
- package/docs/design/templates/toolbar-control-group/with-text.svg +1 -1
- package/docs/design/templates/toolbar-control-group-dark.svg +1 -11
- package/docs/design/templates/toolbar-control-group.svg +1 -11
- package/docs/design/templates/toolbar-dark.svg +1 -5
- package/docs/design/templates/toolbar-text-dark.svg +1 -9
- package/docs/design/templates/toolbar-text.svg +1 -9
- package/docs/design/templates/toolbar.svg +1 -5
- 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 -5
- package/docs/design/templates/value-table.svg +1 -5
- package/docs/design/templates.md +29 -20
- package/docs/examples/component-catalog-extension-v2.json +3 -6
- package/docs/examples/component-catalog-extension.json +1 -1
- package/docs/layout.md +7 -9
- package/docs/recipes.md +8 -7
- package/docs/sunken-panel.md +11 -1
- package/docs/surface-scaffold.md +17 -0
- package/docs/type-contracts.md +11 -10
- package/docs/ui-analyzer.md +19 -1
- package/docs/ui-doctor.md +7 -5
- package/docs/ux-demo.md +6 -3
- package/docs/webawesome-theme.md +4 -1
- package/docs/workbench.md +49 -2
- package/doctor/eslint-diagnostics.d.mts +16 -0
- package/doctor/eslint-diagnostics.mjs +17 -0
- package/doctor/index.mjs +21 -3
- package/llms.txt +33 -11
- package/package.json +14 -8
- package/traversal-exclusions.mjs +7 -1
- package/ux-demo/recipes/app-shell.tsx +36 -23
- package/ux-demo/recipes/collapsible-sidebar.tsx +23 -17
- package/ux-demo/recipes/composer-form.tsx +15 -6
- package/ux-demo/recipes/list-detail-dialog.tsx +31 -15
- package/ux-demo/recipes/list-workspace-states.tsx +16 -7
- package/ux-demo/recipes/loading-inspector.tsx +39 -18
- package/ux-demo/recipes/navigation-sidebar.tsx +1 -1
- package/ux-demo/recipes/recipes.css +7 -2
- package/ux-demo/recipes/workspace-header.tsx +17 -7
- package/dist/browser/panel-header.js +0 -7
- package/dist/chunk-5VTB2BKP.js.map +0 -1
- package/dist/chunk-7L6EHUMV.js.map +0 -1
- package/dist/chunk-AASLYRGE.js.map +0 -1
- package/dist/chunk-BBRXX6PF.js.map +0 -1
- package/dist/chunk-DPDBVKNA.js.map +0 -1
- package/dist/chunk-DSNIYOZ3.js.map +0 -1
- package/dist/chunk-ELSJX4W7.js.map +0 -1
- package/dist/chunk-GP5DP5DL.js.map +0 -1
- package/dist/chunk-K57KRAOV.js.map +0 -1
- package/dist/chunk-M7JBER5U.js.map +0 -1
- package/dist/chunk-NENBUYX5.js +0 -79
- package/dist/chunk-NENBUYX5.js.map +0 -1
- package/dist/chunk-PIDTEQ3U.js.map +0 -1
- package/dist/chunk-PZQVSDLH.js.map +0 -1
- package/dist/chunk-RYRIFZCT.js +0 -58
- package/dist/chunk-RYRIFZCT.js.map +0 -1
- package/dist/chunk-VLYV65LK.js.map +0 -1
- package/dist/chunk-W4CXQYSG.js.map +0 -1
- package/dist/panel-header.d.ts +0 -42
- package/dist/panel-header.js +0 -7
- package/dist/panel-header.js.map +0 -1
- package/dist/styles/panel-header.css +0 -64
- package/docs/design/templates/panel-header/icon-actions-dark.svg +0 -1
- package/docs/design/templates/panel-header/icon-actions.svg +0 -1
- package/docs/design/templates/panel-header/icon-summary-actions-dark.svg +0 -1
- package/docs/design/templates/panel-header/icon-summary-actions.svg +0 -1
- package/docs/design/templates/panel-header/no-icon-dark.svg +0 -1
- package/docs/design/templates/panel-header/no-icon.svg +0 -1
- package/docs/design/templates/panel-header/page-heading-dark.svg +0 -1
- package/docs/design/templates/panel-header/page-heading.svg +0 -1
- package/docs/design/templates/panel-header/title-only-dark.svg +0 -1
- package/docs/design/templates/panel-header/title-only.svg +0 -1
- package/docs/design/templates/panel-header-dark.svg +0 -13
- package/docs/design/templates/panel-header.svg +0 -13
package/README.md
CHANGED
|
@@ -15,7 +15,7 @@ For connective application patterns, use the seven [production composition
|
|
|
15
15
|
recipes](./docs/recipes.md). Each has a stable catalog route, runnable state,
|
|
16
16
|
public-subpath source, semantic layout ownership, and explicit application
|
|
17
17
|
customization boundaries. The composer recipe demonstrates one coherent form
|
|
18
|
-
surface with `
|
|
18
|
+
surface with a `Toolbar`/`ToolbarText` heading and field/action controls aligned to the
|
|
19
19
|
shared 8px gutter; only persistent feedback adds a nested semantic
|
|
20
20
|
`StateBanner` surface.
|
|
21
21
|
|
|
@@ -41,11 +41,7 @@ mount(root, () => (
|
|
|
41
41
|
<>
|
|
42
42
|
<Toolbar
|
|
43
43
|
label="Document"
|
|
44
|
-
leading={
|
|
45
|
-
<ToolbarControlGroup appearance="borderless" single>
|
|
46
|
-
<ToolbarText text="Notes" />
|
|
47
|
-
</ToolbarControlGroup>
|
|
48
|
-
}
|
|
44
|
+
leading={<ToolbarText text="Notes" />}
|
|
49
45
|
/>
|
|
50
46
|
<section>
|
|
51
47
|
<ListHeader
|
|
@@ -120,14 +116,24 @@ as a `New` marker.
|
|
|
120
116
|
| `DisclosureArrow` | `@kerfjs/ui/disclosure-arrow` | `@kerfjs/ui/disclosure-arrow.css` |
|
|
121
117
|
| `Toolbar` | `@kerfjs/ui/toolbar` | `@kerfjs/ui/toolbar.css` |
|
|
122
118
|
| `ToolbarControlGroup` | `@kerfjs/ui/toolbar-control-group` | `@kerfjs/ui/toolbar-control-group.css` |
|
|
119
|
+
| `DialogSurface`, `PopupSurface` | `@kerfjs/ui/surface-scaffold` | `@kerfjs/ui/surface-scaffold.css` |
|
|
123
120
|
| `FloatingToolbar` | `@kerfjs/ui/floating-toolbar` | `@kerfjs/ui/floating-toolbar.css` |
|
|
124
121
|
| `ToolbarText` | `@kerfjs/ui/toolbar-text` | `@kerfjs/ui/toolbar-text.css` |
|
|
122
|
+
| `List` | `@kerfjs/ui/list` | `@kerfjs/ui/list.css` |
|
|
125
123
|
| `ListActionRow` | `@kerfjs/ui/list-action-row` | `@kerfjs/ui/list-action-row.css` |
|
|
126
124
|
| `ListItem` | `@kerfjs/ui/list-item` | `@kerfjs/ui/list-item.css` |
|
|
127
125
|
| `ListHeader` | `@kerfjs/ui/list-header` | `@kerfjs/ui/list-header.css` |
|
|
128
126
|
| `ListInsetControl` | `@kerfjs/ui/list-inset-control` | `@kerfjs/ui/list-inset-control.css` |
|
|
129
127
|
| `ListInsetText` | `@kerfjs/ui/list-inset-text` | `@kerfjs/ui/list-inset-text.css` |
|
|
130
128
|
| `Pane` | `@kerfjs/ui/pane` | `@kerfjs/ui/pane.css` |
|
|
129
|
+
| `NavStack` | `@kerfjs/ui/nav-stack` | `@kerfjs/ui/nav-stack.css` |
|
|
130
|
+
| `wireNavStack` | `@kerfjs/ui/wire-nav-stack` | — |
|
|
131
|
+
| `SplitView` | `@kerfjs/ui/split-view` | `@kerfjs/ui/split-view.css` |
|
|
132
|
+
| `TabScaffold` | `@kerfjs/ui/tab-scaffold` | `@kerfjs/ui/tab-scaffold.css` |
|
|
133
|
+
| `wireTabScaffold` | `@kerfjs/ui/wire-tab-scaffold` | — |
|
|
134
|
+
| `Workbench` | `@kerfjs/ui/workbench` | `@kerfjs/ui/workbench.css` |
|
|
135
|
+
| `CollapsiblePanel`, `CollapsiblePanelToggle` | `@kerfjs/ui/collapsible-panel` | `@kerfjs/ui/collapsible-panel.css` |
|
|
136
|
+
| `wireSidebar` | `@kerfjs/ui/wire-sidebar` | — |
|
|
131
137
|
| Content and navigation composition | — | `@kerfjs/ui/layout.css` |
|
|
132
138
|
| `ResizableRegion` | `@kerfjs/ui/resizable-region` | `@kerfjs/ui/resizable-region.css` |
|
|
133
139
|
| `wireResizableRegions` | `@kerfjs/ui/wire-resizable-regions` | — |
|
|
@@ -143,22 +149,22 @@ as a `New` marker.
|
|
|
143
149
|
| `wireTokenSearchFields` | `@kerfjs/ui/wire-token-search-fields` | — |
|
|
144
150
|
| `StateBanner` | `@kerfjs/ui/state-banner` | `@kerfjs/ui/state-banner.css` |
|
|
145
151
|
| `EmptyState` | `@kerfjs/ui/empty-state` | `@kerfjs/ui/empty-state.css` |
|
|
146
|
-
| `PanelHeader` | `@kerfjs/ui/panel-header` | `@kerfjs/ui/panel-header.css` |
|
|
147
152
|
| `ValueTable`, `ValueTableRow` | `@kerfjs/ui/value-table` | `@kerfjs/ui/value-table.css` |
|
|
148
153
|
|
|
149
|
-
Opt-in application layouts keep JavaScript and CSS explicit.
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
`
|
|
154
|
+
Opt-in application layouts keep JavaScript and CSS explicit. Import each
|
|
155
|
+
layout from its component subpath, load the matching manual CSS export, and
|
|
156
|
+
add its wire subpath when the layout has interactive behavior. The catalog
|
|
157
|
+
entries for `nav-stack`, `split-view`, `tab-scaffold`, `workbench`, and
|
|
158
|
+
`collapsible-panel` document their selection rules, ownership boundaries,
|
|
159
|
+
public classes, tokens, and focused demos. See
|
|
160
|
+
[`docs/app-layouts.md`](./docs/app-layouts.md) for the layout decision matrix.
|
|
161
|
+
|
|
162
|
+
Compose panel, dialog, and page headings directly with `Toolbar`: put an optional
|
|
163
|
+
icon in a `ToolbarControlGroup`, use a direct extra-large `ToolbarText` for the
|
|
164
|
+
title, and put actions in the trailing zone inside their own control group. Set
|
|
165
|
+
`headingLevel` for page or section headings. Supporting copy is app-owned content
|
|
166
|
+
below the toolbar and should be connected to its host with `aria-describedby`
|
|
167
|
+
when it adds useful context.
|
|
162
168
|
|
|
163
169
|
`DisclosureArrow` defaults to an 18px root-scaled decorative visual. Override
|
|
164
170
|
`--kui-disclosure-arrow-size` at the narrowest useful scope when a consumer
|
|
@@ -302,7 +308,7 @@ retention policy, and a separate unscored human-visual rubric. See the
|
|
|
302
308
|
|
|
303
309
|
### Unified repair-loop doctor
|
|
304
310
|
|
|
305
|
-
Use `kerf-ui-doctor` for the supported application repair loop across profile/catalog validation, TypeScript, the Kerf UI ESLint preset, static layout analysis, and an optional explicitly authorized browser evaluation. It emits one portable versioned JSON report with deterministic exit codes, exact suppressions, monorepo package selection, changed/full modes, caching, and local-path redaction. See the [UI doctor guide](./docs/ui-doctor.md).
|
|
311
|
+
Use `kerf-ui-doctor` for the supported application repair loop across profile/catalog validation, TypeScript, the Kerf UI ESLint preset, static layout analysis, and an optional explicitly authorized browser evaluation. Its isolated Kerf lint pass preserves each file's applicable core-rule and suppression settings without executing consumer plugin rules. It emits one portable versioned JSON report with deterministic exit codes, exact suppressions, monorepo package selection, changed/full modes, caching, and local-path redaction. See the [UI doctor guide](./docs/ui-doctor.md).
|
|
306
312
|
|
|
307
313
|
For code generation, pair catalog selection guidance with the checked-in
|
|
308
314
|
[`public-api-signatures-v1.md`](./ai/public-api-signatures-v1.md) declaration
|
|
@@ -478,7 +484,12 @@ Call `wireTokenSearchFields()` once at a stable root to make Enter submit throug
|
|
|
478
484
|
`onSubmit` without inserting a contenteditable line break and to preserve focus
|
|
479
485
|
plus the text-relative caret when keyboard deletion of a chip causes controlled
|
|
480
486
|
rendering to replace the editor. A select-all deletion is normalized to a truly
|
|
481
|
-
empty editor even when the browser leaves an atomic chip or line break behind
|
|
487
|
+
empty editor even when the browser leaves an atomic chip or line break behind;
|
|
488
|
+
replacement typing consumes that intent so a later Backspace/Delete remains an
|
|
489
|
+
ordinary character edit.
|
|
490
|
+
Managed deletion keeps a collapsible replacement editor open and focused before
|
|
491
|
+
the next keystroke; applications must persist both query and tokens from the DOM
|
|
492
|
+
read. Genuine outside focus and Escape still collapse an empty field.
|
|
482
493
|
Text still wraps visually when it reaches the field edge.
|
|
483
494
|
Clear actions should empty the editor's `textContent` before clearing app state.
|
|
484
495
|
The leading icon, first text line, clear action, and trailing slot share one
|
|
@@ -516,6 +527,13 @@ import "@kerfjs/ui/select/register";
|
|
|
516
527
|
```
|
|
517
528
|
|
|
518
529
|
That boundary keeps Web Awesome and its custom-element side effects out of bundles that use unrelated components. Automated consumer-bundle tests enforce it.
|
|
530
|
+
Use `label` for a visible label or `ariaLabel` for a visually hidden name. A
|
|
531
|
+
nonempty visible label takes precedence when both are supplied. Kerf names the
|
|
532
|
+
actual shadow combobox without adding visible label spacing; this also works
|
|
533
|
+
with `renderSelected`, and needs no application shadow-DOM patch. Use `hint`
|
|
534
|
+
for persistent supporting text below the control and `placeholderText` for the
|
|
535
|
+
empty value inside the closed control. Loading placeholders preserve the hint.
|
|
536
|
+
|
|
519
537
|
`Select` also owns the Kerf/Web Awesome reconciliation boundary: option icons
|
|
520
538
|
keep stable slotted elements across rerenders, and `renderSelected` content is
|
|
521
539
|
replaced when the controlled value changes. Consumers do not need to add
|
|
@@ -528,7 +546,11 @@ Awesome Tabs, `LucideIcon` over Web Awesome Icon, and `ResizableRegion` over
|
|
|
528
546
|
Split Panel. `ResizableRegion` includes Hot Sheet 2's 1px separator and
|
|
529
547
|
hover/focus grip. Its optional `handleIcon` replaces only the decorative glyph;
|
|
530
548
|
the component and `wireResizableRegions()` retain separator semantics and
|
|
531
|
-
pointer/keyboard behavior.
|
|
549
|
+
pointer/keyboard behavior. Typed policies cover separator visibility,
|
|
550
|
+
instant-track/composited-content collapse, popup-safe overflow,
|
|
551
|
+
inline/overlay/hidden responsive presentation, and safe-area restore controls;
|
|
552
|
+
the same policies are available on `Workbench` and `CollapsiblePanel`. Consider
|
|
553
|
+
Web Awesome Popup when its anchored-positioning
|
|
532
554
|
engine removes custom placement code; treat Tree, Animated Image, Comparison,
|
|
533
555
|
Zoomable Frame, and the displaced alternatives above as exceptional rather
|
|
534
556
|
than default patterns. The detailed rationale lives in the theme contract.
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
"avoid": ["@kerfjs/ui:wa-button-group"]
|
|
20
20
|
},
|
|
21
21
|
"navigation-row": { "preferred": "@kerfjs/ui:list-item" },
|
|
22
|
-
"panel-heading": { "preferred": "@kerfjs/ui:
|
|
22
|
+
"panel-heading": { "preferred": "@kerfjs/ui:toolbar" },
|
|
23
23
|
"structured-search": { "preferred": "@kerfjs/ui:token-search-field" }
|
|
24
24
|
},
|
|
25
25
|
"theme": {
|
|
@@ -54,14 +54,6 @@
|
|
|
54
54
|
},
|
|
55
55
|
{
|
|
56
56
|
"id": "KUI-T007",
|
|
57
|
-
"catalogKey": "@kerfjs/ui:panel-header",
|
|
58
|
-
"publicImport": "@kerfjs/ui/panel-header",
|
|
59
|
-
"symbols": ["PanelHeaderProps"],
|
|
60
|
-
"kind": "conditional-property",
|
|
61
|
-
"summary": "PanelHeader summaryId cannot be supplied without rendered summary content."
|
|
62
|
-
},
|
|
63
|
-
{
|
|
64
|
-
"id": "KUI-T008",
|
|
65
57
|
"catalogKey": "@kerfjs/ui:toolbar-text",
|
|
66
58
|
"publicImport": "@kerfjs/ui/toolbar-text",
|
|
67
59
|
"symbols": ["ToolbarTextProps"],
|
|
@@ -69,14 +61,14 @@
|
|
|
69
61
|
"summary": "ToolbarText maxLines is accepted only when wrapping is enabled."
|
|
70
62
|
},
|
|
71
63
|
{
|
|
72
|
-
"id": "KUI-
|
|
64
|
+
"id": "KUI-T008",
|
|
73
65
|
"publicImport": "@kerfjs/ui/tab-scaffold",
|
|
74
66
|
"symbols": ["TabScaffoldTab", "TabScaffoldProps"],
|
|
75
67
|
"kind": "literal-identity",
|
|
76
68
|
"summary": "Literal TabScaffold active ids are constrained to the declared tab ids; dynamic integrations may widen the generic to string."
|
|
77
69
|
},
|
|
78
70
|
{
|
|
79
|
-
"id": "KUI-
|
|
71
|
+
"id": "KUI-T009",
|
|
80
72
|
"catalogKey": "@kerfjs/ui:token-search-field",
|
|
81
73
|
"publicImport": "@kerfjs/ui/wire-token-search-fields",
|
|
82
74
|
"symbols": ["TokenSearchKeyboardOptions", "WireTokenSearchFieldsOptions"],
|
|
@@ -84,9 +76,10 @@
|
|
|
84
76
|
"summary": "Adjacent-token removal requires the callback that commits removal to application-owned state."
|
|
85
77
|
},
|
|
86
78
|
{
|
|
87
|
-
"id": "KUI-
|
|
79
|
+
"id": "KUI-T010",
|
|
88
80
|
"publicImport": "@kerfjs/ui",
|
|
89
81
|
"symbols": [
|
|
82
|
+
"DividerSides",
|
|
90
83
|
"StateBannerUrgency",
|
|
91
84
|
"TabActivation",
|
|
92
85
|
"ToolbarControlGroupAppearance",
|
|
@@ -95,7 +88,7 @@
|
|
|
95
88
|
"ToolbarControlGroupTone"
|
|
96
89
|
],
|
|
97
90
|
"kind": "finite-vocabulary",
|
|
98
|
-
"summary": "Finite public variant vocabularies are named exported unions rather than anonymous string sets."
|
|
91
|
+
"summary": "Finite public variant vocabularies, including canonical divider-edge combinations, are named exported unions rather than anonymous string sets."
|
|
99
92
|
}
|
|
100
93
|
]
|
|
101
94
|
}
|
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"@kerfjs/ui:toolbar": {
|
|
3
3
|
"_source": "docs/component-selection.md#toolbar-composition",
|
|
4
|
-
"contexts": [
|
|
4
|
+
"contexts": [
|
|
5
|
+
"application-chrome",
|
|
6
|
+
"page-header",
|
|
7
|
+
"panel-header",
|
|
8
|
+
"dialog-header"
|
|
9
|
+
],
|
|
5
10
|
"zones": [
|
|
6
11
|
{
|
|
7
12
|
"id": "leading",
|
|
@@ -40,7 +45,7 @@
|
|
|
40
45
|
"_source": "docs/component-selection.md#toolbar-composition",
|
|
41
46
|
"parents": {
|
|
42
47
|
"mode": "listed",
|
|
43
|
-
"entries": ["@kerfjs/ui:toolbar"
|
|
48
|
+
"entries": ["@kerfjs/ui:toolbar"]
|
|
44
49
|
},
|
|
45
50
|
"contexts": ["toolbar-zone"],
|
|
46
51
|
"zones": [
|
|
@@ -57,57 +62,15 @@
|
|
|
57
62
|
"requiredConcepts": ["control"]
|
|
58
63
|
}
|
|
59
64
|
},
|
|
60
|
-
"@kerfjs/ui:panel-header": {
|
|
61
|
-
"_source": "docs/component-selection.md#problem-to-component-matrix",
|
|
62
|
-
"contexts": ["page-header", "panel-header", "dialog-header"],
|
|
63
|
-
"zones": [
|
|
64
|
-
{
|
|
65
|
-
"id": "title",
|
|
66
|
-
"accepts": ["text"],
|
|
67
|
-
"cardinality": { "min": 1, "max": 1 },
|
|
68
|
-
"exclusiveWith": []
|
|
69
|
-
},
|
|
70
|
-
{
|
|
71
|
-
"id": "subtitle",
|
|
72
|
-
"accepts": ["text"],
|
|
73
|
-
"cardinality": { "min": 0, "max": 1 },
|
|
74
|
-
"exclusiveWith": []
|
|
75
|
-
},
|
|
76
|
-
{
|
|
77
|
-
"id": "controls",
|
|
78
|
-
"accepts": ["control"],
|
|
79
|
-
"cardinality": { "min": 0, "max": "unbounded" },
|
|
80
|
-
"exclusiveWith": []
|
|
81
|
-
}
|
|
82
|
-
],
|
|
83
|
-
"state": [
|
|
84
|
-
{ "id": "placeholder", "owner": "controlled", "required": false }
|
|
85
|
-
],
|
|
86
|
-
"diagnostics": [
|
|
87
|
-
{
|
|
88
|
-
"id": "KUI-C102",
|
|
89
|
-
"severity": "error",
|
|
90
|
-
"when": "the title is absent",
|
|
91
|
-
"message": "PanelHeader requires a title that names its page, panel, or dialog."
|
|
92
|
-
}
|
|
93
|
-
]
|
|
94
|
-
},
|
|
95
65
|
"@kerfjs/ui:list": {
|
|
96
|
-
"_source": "docs/component-selection.md#
|
|
97
|
-
"contexts": ["navigation-list"],
|
|
66
|
+
"_source": "docs/component-selection.md#problem-to-component-matrix",
|
|
67
|
+
"contexts": ["application-ui", "navigation-list", "vertical-layout"],
|
|
98
68
|
"children": {
|
|
99
|
-
"mode": "
|
|
100
|
-
"concepts": [
|
|
69
|
+
"mode": "any",
|
|
70
|
+
"concepts": [],
|
|
101
71
|
"requiredConcepts": []
|
|
102
72
|
},
|
|
103
|
-
"zones": [
|
|
104
|
-
{
|
|
105
|
-
"id": "rows",
|
|
106
|
-
"accepts": ["list-header", "list-item", "list-action-row"],
|
|
107
|
-
"cardinality": { "min": 1, "max": "unbounded" },
|
|
108
|
-
"exclusiveWith": []
|
|
109
|
-
}
|
|
110
|
-
]
|
|
73
|
+
"zones": []
|
|
111
74
|
},
|
|
112
75
|
"@kerfjs/ui:list-header": {
|
|
113
76
|
"_source": "docs/accessibility.md#shared-rules",
|