@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
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Public API signatures for the UI authoring corpus
|
|
2
2
|
|
|
3
|
-
Generated from emitted declarations for `@kerfjs/ui@5.0.0-beta.
|
|
3
|
+
Generated from emitted declarations for `@kerfjs/ui@5.0.0-beta.25` and `kerfjs@5.0.0-beta.25`. This bounded reference covers only APIs used by the seven-task corpus. It is interface evidence, not an implementation or runtime guarantee.
|
|
4
4
|
|
|
5
5
|
## `@kerfjs/ui/disclosure-arrow`
|
|
6
6
|
|
|
@@ -25,18 +25,20 @@ export { DisclosureArrow, type DisclosureArrowProps, type DisclosureDirection };
|
|
|
25
25
|
|
|
26
26
|
```ts
|
|
27
27
|
import { SafeHtml } from 'kerfjs';
|
|
28
|
+
import { D as DividerSides } from './divider-sides-267FA7sY.js';
|
|
28
29
|
|
|
29
30
|
interface ToolbarProps {
|
|
30
31
|
leading?: SafeHtml;
|
|
31
32
|
center?: SafeHtml;
|
|
32
33
|
trailing?: SafeHtml;
|
|
33
34
|
label?: string;
|
|
34
|
-
divider
|
|
35
|
+
/** Physical divider edges in canonical top/right/bottom/left order. Defaults to bottom. */
|
|
36
|
+
dividerSides?: DividerSides;
|
|
35
37
|
className?: string;
|
|
36
38
|
}
|
|
37
|
-
declare function Toolbar({ leading, center, trailing, label,
|
|
39
|
+
declare function Toolbar({ leading, center, trailing, label, dividerSides, className, }: ToolbarProps): SafeHtml;
|
|
38
40
|
|
|
39
|
-
export { Toolbar, type ToolbarProps };
|
|
41
|
+
export { DividerSides, Toolbar, type ToolbarProps };
|
|
40
42
|
```
|
|
41
43
|
|
|
42
44
|
## `@kerfjs/ui/toolbar-text`
|
|
@@ -91,6 +93,11 @@ type ToolbarControlGroupAppearance = 'contained' | 'borderless';
|
|
|
91
93
|
type ToolbarControlGroupTone = 'default' | 'dark';
|
|
92
94
|
type ToolbarControlGroupButtonAppearance = 'plain' | 'push';
|
|
93
95
|
type ToolbarControlGroupShape = 'pill' | 'rounded';
|
|
96
|
+
type ToolbarControlGroupSize = 'default' | 'compact';
|
|
97
|
+
type ToolbarControlGroupDensity = 'comfortable' | 'tight';
|
|
98
|
+
type ToolbarControlGroupContent = 'icon' | 'text' | 'mixed' | 'avatar';
|
|
99
|
+
type ToolbarControlGroupSelectedChrome = 'raised' | 'filled' | 'outline';
|
|
100
|
+
type ToolbarControlGroupSelectedTone = 'brand' | 'neutral';
|
|
94
101
|
interface ToolbarControlGroupProps {
|
|
95
102
|
children: SafeHtml | SafeHtml[];
|
|
96
103
|
label?: string;
|
|
@@ -102,10 +109,19 @@ interface ToolbarControlGroupProps {
|
|
|
102
109
|
buttonAppearance?: ToolbarControlGroupButtonAppearance;
|
|
103
110
|
/** Corner shape: fully round `pill` (default) or a softer `rounded` rectangle. */
|
|
104
111
|
shape?: ToolbarControlGroupShape;
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
112
|
+
size?: ToolbarControlGroupSize;
|
|
113
|
+
density?: ToolbarControlGroupDensity;
|
|
114
|
+
content?: ToolbarControlGroupContent;
|
|
115
|
+
selectedChrome?: ToolbarControlGroupSelectedChrome;
|
|
116
|
+
selectedTone?: ToolbarControlGroupSelectedTone;
|
|
117
|
+
/** Size a nested Web Awesome dropdown trigger as part of this group. */
|
|
118
|
+
nestedDropdown?: boolean;
|
|
119
|
+
/** Add contrast behind photo-backed avatar content. */
|
|
120
|
+
scrim?: boolean;
|
|
121
|
+
}
|
|
122
|
+
declare function ToolbarControlGroup({ children, label, className, expanded, single, appearance, tone, buttonAppearance, shape, size, density, content, selectedChrome, selectedTone, nestedDropdown, scrim, }: ToolbarControlGroupProps): SafeHtml;
|
|
123
|
+
|
|
124
|
+
export { ToolbarControlGroup, type ToolbarControlGroupAppearance, type ToolbarControlGroupButtonAppearance, type ToolbarControlGroupContent, type ToolbarControlGroupDensity, type ToolbarControlGroupProps, type ToolbarControlGroupSelectedChrome, type ToolbarControlGroupSelectedTone, type ToolbarControlGroupShape, type ToolbarControlGroupSize, type ToolbarControlGroupTone };
|
|
109
125
|
```
|
|
110
126
|
|
|
111
127
|
## `@kerfjs/ui/floating-toolbar`
|
|
@@ -151,6 +167,9 @@ type ListHeaderRootAttributes = Readonly<Record<`data-${string}`, string | undef
|
|
|
151
167
|
'data-action'?: never;
|
|
152
168
|
'data-has-badge'?: never;
|
|
153
169
|
'data-has-count'?: never;
|
|
170
|
+
'data-density'?: never;
|
|
171
|
+
'data-divider'?: never;
|
|
172
|
+
'data-indicator-tone'?: never;
|
|
154
173
|
'data-toggle'?: never;
|
|
155
174
|
}>;
|
|
156
175
|
type ListHeaderTriggerAttributes = Readonly<Record<`data-${string}`, string | undefined> & {
|
|
@@ -162,6 +181,9 @@ type ListHeaderTriggerAttributes = Readonly<Record<`data-${string}`, string | un
|
|
|
162
181
|
}>;
|
|
163
182
|
interface ListHeaderBaseProps {
|
|
164
183
|
label: string;
|
|
184
|
+
density?: 'standard' | 'compact';
|
|
185
|
+
divider?: 'none' | 'before' | 'after' | 'both';
|
|
186
|
+
indicatorTone?: 'neutral' | 'accent' | 'danger';
|
|
165
187
|
/** Render as an unanimated loading skeleton: keep the label and action affordance, disable interaction. */
|
|
166
188
|
placeholder?: boolean;
|
|
167
189
|
rootAttributes?: ListHeaderRootAttributes;
|
|
@@ -199,13 +221,20 @@ type ListHeaderIndicatorProps = {
|
|
|
199
221
|
count: number;
|
|
200
222
|
countLabel: string;
|
|
201
223
|
badge?: never;
|
|
224
|
+
status?: never;
|
|
225
|
+
} | {
|
|
226
|
+
count?: never;
|
|
227
|
+
countLabel?: never;
|
|
228
|
+
badge: SafeHtml;
|
|
229
|
+
status?: never;
|
|
202
230
|
} | {
|
|
203
231
|
count?: never;
|
|
204
232
|
countLabel?: never;
|
|
205
|
-
badge?:
|
|
233
|
+
badge?: never;
|
|
234
|
+
status?: SafeHtml;
|
|
206
235
|
};
|
|
207
236
|
type ListHeaderProps = ListHeaderBaseProps & ListHeaderIndicatorProps & ListHeaderModeProps;
|
|
208
|
-
declare function ListHeader({ label, count, countLabel, badge, action, actionLabel, actionIcon, actionDisabled, disabledReason, expanded, toggle, placeholder, rootAttributes, triggerAttributes, }: ListHeaderProps): SafeHtml;
|
|
237
|
+
declare function ListHeader({ label, count, countLabel, badge, status, density, divider, indicatorTone, action, actionLabel, actionIcon, actionDisabled, disabledReason, expanded, toggle, placeholder, rootAttributes, triggerAttributes, }: ListHeaderProps): SafeHtml;
|
|
209
238
|
|
|
210
239
|
export { ListHeader, type ListHeaderProps };
|
|
211
240
|
```
|
|
@@ -221,6 +250,10 @@ type ListActionRowRootAttributes = Readonly<Record<`data-${string}`, string | un
|
|
|
221
250
|
'data-item-id'?: never;
|
|
222
251
|
'data-has-icon'?: never;
|
|
223
252
|
'data-multiline'?: never;
|
|
253
|
+
'data-density'?: never;
|
|
254
|
+
'data-divider'?: never;
|
|
255
|
+
'data-busy'?: never;
|
|
256
|
+
'data-trailing-visibility'?: never;
|
|
224
257
|
'data-state'?: never;
|
|
225
258
|
'data-selected'?: never;
|
|
226
259
|
'data-pressed'?: never;
|
|
@@ -237,6 +270,11 @@ type ListActionRowTrailingAttributes = Readonly<Record<`data-${string}`, string
|
|
|
237
270
|
interface ListActionRowProps {
|
|
238
271
|
/** Visible dormant content for the primary button. Must not contain interactive descendants. */
|
|
239
272
|
label: string | SafeHtml;
|
|
273
|
+
description?: string | SafeHtml;
|
|
274
|
+
status?: string | SafeHtml;
|
|
275
|
+
busy?: boolean;
|
|
276
|
+
density?: 'standard' | 'compact';
|
|
277
|
+
divider?: 'none' | 'before' | 'after' | 'both';
|
|
240
278
|
/** Decorative dormant content for the primary button. Must not contain interactive descendants. */
|
|
241
279
|
icon?: SafeHtml;
|
|
242
280
|
action: string;
|
|
@@ -257,12 +295,13 @@ interface ListActionRowProps {
|
|
|
257
295
|
trailingActionIcon: SafeHtml;
|
|
258
296
|
trailingActionDisabled?: boolean;
|
|
259
297
|
trailingActionTitle?: string;
|
|
298
|
+
trailingActionVisibility?: 'always' | 'interaction';
|
|
260
299
|
className?: string;
|
|
261
300
|
style?: string;
|
|
262
301
|
rootAttributes?: ListActionRowRootAttributes;
|
|
263
302
|
trailingActionAttributes?: ListActionRowTrailingAttributes;
|
|
264
303
|
}
|
|
265
|
-
declare function ListActionRow({ label, icon, action, itemId, selected, pressed, accessibleLabel, title, multiline, state, disabled, tabIndex, placeholder, trailingAction, trailingActionLabel, trailingActionIcon, trailingActionDisabled, trailingActionTitle, className, style, rootAttributes, trailingActionAttributes, }: ListActionRowProps): SafeHtml;
|
|
304
|
+
declare function ListActionRow({ label, description, status, busy, density, divider, icon, action, itemId, selected, pressed, accessibleLabel, title, multiline, state, disabled, tabIndex, placeholder, trailingAction, trailingActionLabel, trailingActionIcon, trailingActionDisabled, trailingActionTitle, trailingActionVisibility, className, style, rootAttributes, trailingActionAttributes, }: ListActionRowProps): SafeHtml;
|
|
266
305
|
|
|
267
306
|
export { ListActionRow, type ListActionRowProps };
|
|
268
307
|
```
|
|
@@ -278,12 +317,23 @@ type ListItemRootAttributes = Readonly<Record<`data-${string}`, string | undefin
|
|
|
278
317
|
'data-item-id'?: never;
|
|
279
318
|
'data-has-icon'?: never;
|
|
280
319
|
'data-multiline'?: never;
|
|
320
|
+
'data-density'?: never;
|
|
321
|
+
'data-divider'?: never;
|
|
322
|
+
'data-busy'?: never;
|
|
281
323
|
'data-state'?: never;
|
|
282
324
|
}>;
|
|
283
325
|
interface ListItemProps {
|
|
284
326
|
label: string | SafeHtml;
|
|
327
|
+
/** App-owned supporting text rendered in the component's stable label stack. */
|
|
328
|
+
description?: string | SafeHtml;
|
|
285
329
|
icon?: SafeHtml;
|
|
286
330
|
trailing?: SafeHtml;
|
|
331
|
+
/** Dormant status metadata rendered before trailing content. */
|
|
332
|
+
status?: string | SafeHtml;
|
|
333
|
+
/** Show a progress indicator and expose the row as busy without replacing its content. */
|
|
334
|
+
busy?: boolean;
|
|
335
|
+
density?: 'standard' | 'compact';
|
|
336
|
+
divider?: 'none' | 'before' | 'after' | 'both';
|
|
287
337
|
selected?: boolean;
|
|
288
338
|
action: string;
|
|
289
339
|
itemId?: string;
|
|
@@ -300,7 +350,7 @@ interface ListItemProps {
|
|
|
300
350
|
placeholder?: boolean;
|
|
301
351
|
rootAttributes?: ListItemRootAttributes;
|
|
302
352
|
}
|
|
303
|
-
declare function ListItem({ label, icon, trailing, selected, action, itemId, className, style, pressed, accessibleLabel, title, multiline, state, disabled, tabIndex, placeholder, rootAttributes, }: ListItemProps): SafeHtml;
|
|
353
|
+
declare function ListItem({ label, description, icon, trailing, status, busy, density, divider, selected, action, itemId, className, style, pressed, accessibleLabel, title, multiline, state, disabled, tabIndex, placeholder, rootAttributes, }: ListItemProps): SafeHtml;
|
|
304
354
|
|
|
305
355
|
export { ListItem, type ListItemProps };
|
|
306
356
|
```
|
|
@@ -356,53 +406,6 @@ declare function ListInsetText({ children, horizontalOnly, className, }: ListIns
|
|
|
356
406
|
export { ListInsetText, type ListInsetTextProps };
|
|
357
407
|
```
|
|
358
408
|
|
|
359
|
-
## `@kerfjs/ui/panel-header`
|
|
360
|
-
|
|
361
|
-
```ts
|
|
362
|
-
import { SafeHtml } from 'kerfjs';
|
|
363
|
-
import { HeadingLevel } from './toolbar-text.js';
|
|
364
|
-
|
|
365
|
-
interface PanelHeaderBaseProps {
|
|
366
|
-
title: string;
|
|
367
|
-
titleId: string;
|
|
368
|
-
icon?: SafeHtml;
|
|
369
|
-
iconClassName?: string;
|
|
370
|
-
actions?: SafeHtml;
|
|
371
|
-
/**
|
|
372
|
-
* Expose the title as a heading landmark (`role="heading"` + `aria-level`). Set it
|
|
373
|
-
* for a PAGE or view heading so screen-reader heading navigation works and the view
|
|
374
|
-
* has a primary heading; omit it (the default) for a dialog title, which is instead
|
|
375
|
-
* referenced via `aria-labelledby={titleId}` and needs no heading landmark.
|
|
376
|
-
*/
|
|
377
|
-
headingLevel?: HeadingLevel;
|
|
378
|
-
/** Render the title and summary as unanimated loading skeletons, keeping the icon and actions. */
|
|
379
|
-
placeholder?: boolean;
|
|
380
|
-
}
|
|
381
|
-
type PanelHeaderSummaryProps = {
|
|
382
|
-
summary: string;
|
|
383
|
-
summaryId?: string;
|
|
384
|
-
} | {
|
|
385
|
-
summary?: never;
|
|
386
|
-
summaryId?: never;
|
|
387
|
-
};
|
|
388
|
-
type PanelHeaderProps = PanelHeaderBaseProps & PanelHeaderSummaryProps;
|
|
389
|
-
/**
|
|
390
|
-
* The heading of a panel, dialog, or page: a plain `Toolbar` whose leading zone
|
|
391
|
-
* holds an optional icon control group and the title as extra-large `ToolbarText`,
|
|
392
|
-
* whose trailing zone holds the app's action controls, and with an optional
|
|
393
|
-
* subtitle on its own row, left-aligned with the title.
|
|
394
|
-
*
|
|
395
|
-
* PanelHeader overrides no Toolbar styles — it is just a Toolbar with an xl title.
|
|
396
|
-
* The only styling it adds is the icon group's fill/border color and the subtitle.
|
|
397
|
-
* When no icon is provided, the icon group is omitted entirely. The `actions` slot
|
|
398
|
-
* is passed straight into the toolbar's trailing zone; the app supplies whatever
|
|
399
|
-
* trailing controls it needs (typically a `ToolbarControlGroup`).
|
|
400
|
-
*/
|
|
401
|
-
declare function PanelHeader({ title, titleId, summary, summaryId, icon, iconClassName, actions, headingLevel, placeholder, }: PanelHeaderProps): SafeHtml;
|
|
402
|
-
|
|
403
|
-
export { PanelHeader, type PanelHeaderProps };
|
|
404
|
-
```
|
|
405
|
-
|
|
406
409
|
## `@kerfjs/ui/value-table`
|
|
407
410
|
|
|
408
411
|
```ts
|
|
@@ -441,6 +444,8 @@ type AppTabRootAttributes = Readonly<Record<`data-${string}`, string | undefined
|
|
|
441
444
|
'data-tab-dragging'?: never;
|
|
442
445
|
'data-tab-drop-position'?: never;
|
|
443
446
|
}>;
|
|
447
|
+
type AppTabPresentation = 'pill' | 'segmented' | 'icon-only';
|
|
448
|
+
type AppTabSize = 'default' | 'compact';
|
|
444
449
|
interface AppTabProps {
|
|
445
450
|
id: string;
|
|
446
451
|
name: string;
|
|
@@ -449,6 +454,12 @@ interface AppTabProps {
|
|
|
449
454
|
draggable?: boolean;
|
|
450
455
|
leading?: SafeHtml;
|
|
451
456
|
trailing?: SafeHtml;
|
|
457
|
+
/** Visual treatment within a TabBar. Icon-only tabs retain `name` as their accessible name. */
|
|
458
|
+
presentation?: AppTabPresentation;
|
|
459
|
+
/** Compact tabs use the 32px application-rail height. */
|
|
460
|
+
size?: AppTabSize;
|
|
461
|
+
/** Maximum visible label width in CSS pixels before ellipsis. */
|
|
462
|
+
labelMaxWidth?: number;
|
|
452
463
|
/** Decorative dormant content for the close button. Must not contain interactive descendants. */
|
|
453
464
|
closeIcon?: SafeHtml;
|
|
454
465
|
selectAction?: string;
|
|
@@ -458,9 +469,9 @@ interface AppTabProps {
|
|
|
458
469
|
placeholder?: boolean;
|
|
459
470
|
rootAttributes?: AppTabRootAttributes;
|
|
460
471
|
}
|
|
461
|
-
declare function AppTab({ id, name, selected, closable, draggable, leading, trailing, closeIcon, selectAction, closeAction, className, placeholder, rootAttributes, }: AppTabProps): SafeHtml;
|
|
472
|
+
declare function AppTab({ id, name, selected, closable, draggable, leading, trailing, presentation, size, labelMaxWidth, closeIcon, selectAction, closeAction, className, placeholder, rootAttributes, }: AppTabProps): SafeHtml;
|
|
462
473
|
|
|
463
|
-
export { AppTab, type AppTabProps };
|
|
474
|
+
export { AppTab, type AppTabPresentation, type AppTabProps, type AppTabSize };
|
|
464
475
|
```
|
|
465
476
|
|
|
466
477
|
## `@kerfjs/ui/tab-bar`
|
|
@@ -469,6 +480,9 @@ export { AppTab, type AppTabProps };
|
|
|
469
480
|
import { SafeHtml } from 'kerfjs';
|
|
470
481
|
|
|
471
482
|
type TabActivation = 'automatic' | 'manual';
|
|
483
|
+
type TabBarAllocation = 'intrinsic' | 'fill';
|
|
484
|
+
type TabBarPresentation = 'rail' | 'segmented' | 'inspector';
|
|
485
|
+
type TabBarTrailingPlacement = 'separate' | 'adjacent';
|
|
472
486
|
interface TabBarProps {
|
|
473
487
|
id: string;
|
|
474
488
|
label: string;
|
|
@@ -483,11 +497,17 @@ interface TabBarProps {
|
|
|
483
497
|
* selects with Enter / Space / click — use it when selecting a tab is a heavy action.
|
|
484
498
|
*/
|
|
485
499
|
activation?: TabActivation;
|
|
500
|
+
/** How available strip width is allocated across child AppTabs. */
|
|
501
|
+
allocation?: TabBarAllocation;
|
|
502
|
+
/** Named strip chrome for application rails, segmented tabs, or inspectors. */
|
|
503
|
+
presentation?: TabBarPresentation;
|
|
504
|
+
/** Keep a trailing action beside the final tab or at the far edge of the bar. */
|
|
505
|
+
trailingPlacement?: TabBarTrailingPlacement;
|
|
486
506
|
}
|
|
487
507
|
/** Render a controlled tab strip. The application owns selection, order, and persistence. */
|
|
488
|
-
declare function TabBar({ id, label, children, leading, trailing, className, activation, }: TabBarProps): SafeHtml;
|
|
508
|
+
declare function TabBar({ id, label, children, leading, trailing, className, activation, allocation, presentation, trailingPlacement, }: TabBarProps): SafeHtml;
|
|
489
509
|
|
|
490
|
-
export { type TabActivation, TabBar, type TabBarProps };
|
|
510
|
+
export { type TabActivation, TabBar, type TabBarAllocation, type TabBarPresentation, type TabBarProps, type TabBarTrailingPlacement };
|
|
491
511
|
```
|
|
492
512
|
|
|
493
513
|
## `@kerfjs/ui/wire-tab-bars`
|
|
@@ -696,6 +716,7 @@ export { Pane, type PaneContentElement, type PaneElement, type PaneProps, type P
|
|
|
696
716
|
|
|
697
717
|
```ts
|
|
698
718
|
import { SafeHtml } from 'kerfjs';
|
|
719
|
+
import { ResizableRegionSeparator, ResizableRegionCollapseMotion, ResizableRegionContentOverflow, ResizableRegionPresentation, ResizableRegionRestorePosition } from './resizable-region.js';
|
|
699
720
|
|
|
700
721
|
/** A collapsible Workbench panel — a side rail or the bottom drawer. */
|
|
701
722
|
interface WorkbenchPanel {
|
|
@@ -706,6 +727,13 @@ interface WorkbenchPanel {
|
|
|
706
727
|
size?: number;
|
|
707
728
|
/** Accessible name for the panel region. */
|
|
708
729
|
label?: string;
|
|
730
|
+
separator?: ResizableRegionSeparator;
|
|
731
|
+
collapseMotion?: ResizableRegionCollapseMotion;
|
|
732
|
+
contentOverflow?: ResizableRegionContentOverflow;
|
|
733
|
+
presentation?: ResizableRegionPresentation;
|
|
734
|
+
/** Control shown in a safe-area-aware viewport corner while collapsed. */
|
|
735
|
+
restoreControl?: SafeHtml;
|
|
736
|
+
restorePosition?: ResizableRegionRestorePosition;
|
|
709
737
|
}
|
|
710
738
|
interface WorkbenchProps {
|
|
711
739
|
id: string;
|
|
@@ -735,6 +763,7 @@ export { Workbench, type WorkbenchPanel, type WorkbenchProps };
|
|
|
735
763
|
```ts
|
|
736
764
|
import { SafeHtml } from 'kerfjs';
|
|
737
765
|
import { LucideIcon } from './lucide-icon.js';
|
|
766
|
+
import { ResizableRegionSeparator, ResizableRegionCollapseMotion, ResizableRegionContentOverflow, ResizableRegionPresentation, ResizableRegionRestorePosition } from './resizable-region.js';
|
|
738
767
|
import 'lucide';
|
|
739
768
|
|
|
740
769
|
/** Which edge a {@link CollapsiblePanel} docks to. */
|
|
@@ -784,6 +813,13 @@ interface CollapsiblePanelProps {
|
|
|
784
813
|
label?: string;
|
|
785
814
|
/** Panel content. */
|
|
786
815
|
children?: SafeHtml | readonly SafeHtml[];
|
|
816
|
+
separator?: ResizableRegionSeparator;
|
|
817
|
+
collapseMotion?: ResizableRegionCollapseMotion;
|
|
818
|
+
contentOverflow?: ResizableRegionContentOverflow;
|
|
819
|
+
presentation?: ResizableRegionPresentation;
|
|
820
|
+
/** Control shown in a safe-area-aware viewport corner while collapsed. */
|
|
821
|
+
restoreControl?: SafeHtml;
|
|
822
|
+
restorePosition?: ResizableRegionRestorePosition;
|
|
787
823
|
className?: string;
|
|
788
824
|
}
|
|
789
825
|
/**
|
|
@@ -796,7 +832,7 @@ interface CollapsiblePanelProps {
|
|
|
796
832
|
* and persistence semantics, and with `CollapsiblePanelToggle` for the standard
|
|
797
833
|
* affordance. See `docs/24-collapsible-panel.md`.
|
|
798
834
|
*/
|
|
799
|
-
declare function CollapsiblePanel({ id, side, collapsed, size, label, children, className, }: CollapsiblePanelProps): SafeHtml;
|
|
835
|
+
declare function CollapsiblePanel({ id, side, collapsed, size, label, children, separator, collapseMotion, contentOverflow, presentation, restoreControl, restorePosition, className, }: CollapsiblePanelProps): SafeHtml;
|
|
800
836
|
|
|
801
837
|
export { CollapsiblePanel, type CollapsiblePanelProps, type CollapsiblePanelSide, CollapsiblePanelToggle, type CollapsiblePanelToggleProps, collapsiblePanelToggleIcon };
|
|
802
838
|
```
|
|
@@ -834,6 +870,11 @@ interface WireSidebarOptions {
|
|
|
834
870
|
* is always inline.
|
|
835
871
|
*/
|
|
836
872
|
deviceClass?: ReadonlySignal<DeviceClass>;
|
|
873
|
+
/** Compact devices either overlay the panels (default) or hide them in favor
|
|
874
|
+
* of an application-owned responsive replacement. */
|
|
875
|
+
compactPresentation?: 'overlay' | 'hidden';
|
|
876
|
+
/** Collapse the other panels when one opens in compact overlay mode. */
|
|
877
|
+
exclusiveCompact?: boolean;
|
|
837
878
|
/** Persistence store (default `globalThis.localStorage`, if present). */
|
|
838
879
|
storage?: SidebarStorage;
|
|
839
880
|
}
|
|
@@ -844,7 +885,7 @@ interface WireSidebarOptions {
|
|
|
844
885
|
* persistence hook. The app owns each `collapsed` signal and the layout; this wire
|
|
845
886
|
* owns the interaction. Returns a disposer. See `docs/24-collapsible-panel.md`.
|
|
846
887
|
*/
|
|
847
|
-
declare function wireSidebar(root: HTMLElement, { panels, deviceClass, storage }: WireSidebarOptions): () => void;
|
|
888
|
+
declare function wireSidebar(root: HTMLElement, { panels, deviceClass, compactPresentation, exclusiveCompact, storage, }: WireSidebarOptions): () => void;
|
|
848
889
|
|
|
849
890
|
export { type SidebarStorage, type WireSidebarOptions, type WireSidebarPanel, wireSidebar };
|
|
850
891
|
```
|
|
@@ -907,6 +948,11 @@ import { SafeHtml } from 'kerfjs';
|
|
|
907
948
|
|
|
908
949
|
type ResizableRegionAxis = 'horizontal' | 'vertical';
|
|
909
950
|
type ResizableRegionEdge = 'start' | 'end';
|
|
951
|
+
type ResizableRegionSeparator = 'auto' | 'hidden';
|
|
952
|
+
type ResizableRegionCollapseMotion = 'none' | 'slide' | 'fade-slide';
|
|
953
|
+
type ResizableRegionContentOverflow = 'clip' | 'auto' | 'visible';
|
|
954
|
+
type ResizableRegionPresentation = 'inline' | 'overlay' | 'hidden';
|
|
955
|
+
type ResizableRegionRestorePosition = 'bottom-start' | 'bottom-end';
|
|
910
956
|
interface ResizableRegionProps {
|
|
911
957
|
id: string;
|
|
912
958
|
label: string;
|
|
@@ -917,15 +963,27 @@ interface ResizableRegionProps {
|
|
|
917
963
|
edge?: ResizableRegionEdge;
|
|
918
964
|
collapsed?: boolean;
|
|
919
965
|
transitioning?: boolean;
|
|
966
|
+
/** Whether the separator line is painted. The resize hit target remains available. */
|
|
967
|
+
separator?: ResizableRegionSeparator;
|
|
968
|
+
/** Keep the track change instant while optionally sliding the fixed-size content. */
|
|
969
|
+
collapseMotion?: ResizableRegionCollapseMotion;
|
|
970
|
+
/** Overflow policy for content such as an open popup inside a bottom drawer. */
|
|
971
|
+
contentOverflow?: ResizableRegionContentOverflow;
|
|
972
|
+
/** Inline layout, an edge overlay, or a responsive replacement that removes the region. */
|
|
973
|
+
presentation?: ResizableRegionPresentation;
|
|
974
|
+
/** Always-available control rendered while collapsed, outside the clipped region. */
|
|
975
|
+
restoreControl?: SafeHtml;
|
|
976
|
+
/** Safe-area-aware viewport corner for `restoreControl`. */
|
|
977
|
+
restorePosition?: ResizableRegionRestorePosition;
|
|
920
978
|
/** Decorative dormant content for the separator handle. Must not contain interactive descendants. */
|
|
921
979
|
handleIcon?: SafeHtml;
|
|
922
980
|
children: SafeHtml | SafeHtml[];
|
|
923
981
|
}
|
|
924
982
|
declare const clampRegionSize: (size: number, min: number, max: number) => number;
|
|
925
983
|
declare const resizeRegionFromPointer: (startSize: number, delta: number, edge: ResizableRegionEdge) => number;
|
|
926
|
-
declare function ResizableRegion({ id, label, size, min, max, axis, edge, collapsed, transitioning, handleIcon, children, }: ResizableRegionProps): SafeHtml;
|
|
984
|
+
declare function ResizableRegion({ id, label, size, min, max, axis, edge, collapsed, transitioning, separator, collapseMotion, contentOverflow, presentation, restoreControl, restorePosition, handleIcon, children, }: ResizableRegionProps): SafeHtml;
|
|
927
985
|
|
|
928
|
-
export { ResizableRegion, type ResizableRegionAxis, type ResizableRegionEdge, type ResizableRegionProps, clampRegionSize, resizeRegionFromPointer };
|
|
986
|
+
export { ResizableRegion, type ResizableRegionAxis, type ResizableRegionCollapseMotion, type ResizableRegionContentOverflow, type ResizableRegionEdge, type ResizableRegionPresentation, type ResizableRegionProps, type ResizableRegionRestorePosition, type ResizableRegionSeparator, clampRegionSize, resizeRegionFromPointer };
|
|
929
987
|
```
|
|
930
988
|
|
|
931
989
|
## `@kerfjs/ui/wire-resizable-regions`
|
|
@@ -1087,10 +1145,10 @@ interface CatalogProps {
|
|
|
1087
1145
|
/** Status line content shown at the start of the detail footer. */
|
|
1088
1146
|
status?: SafeHtml;
|
|
1089
1147
|
/**
|
|
1090
|
-
* Whether to highlight
|
|
1091
|
-
* margins. Pass a boolean (rather than omitting the
|
|
1092
|
-
* entry can switch between component and composition
|
|
1093
|
-
* `wireCatalogGeometryOverlay` keeps the overlay synchronized.
|
|
1148
|
+
* Whether to highlight specimens' computed borders (or transparent outer
|
|
1149
|
+
* bounds) and non-zero margins. Pass a boolean (rather than omitting the
|
|
1150
|
+
* prop) when the active entry can switch between component and composition
|
|
1151
|
+
* previews; `wireCatalogGeometryOverlay` keeps the overlay synchronized.
|
|
1094
1152
|
*/
|
|
1095
1153
|
geometryOverlay?: boolean;
|
|
1096
1154
|
selectAction?: string;
|
|
@@ -1120,11 +1178,15 @@ type CatalogExampleAlign = 'glyph' | 'inline-control' | 'none';
|
|
|
1120
1178
|
type CatalogExampleRootAttributes = Readonly<Record<`data-${string}`, string | undefined> & {
|
|
1121
1179
|
'data-catalog-example'?: never;
|
|
1122
1180
|
'data-catalog-example-stack'?: never;
|
|
1181
|
+
'data-catalog-example-label'?: never;
|
|
1182
|
+
'data-catalog-example-note'?: never;
|
|
1123
1183
|
'data-align'?: never;
|
|
1124
1184
|
}>;
|
|
1125
1185
|
type CatalogExampleStackRootAttributes = Readonly<Record<`data-${string}`, string | undefined> & {
|
|
1126
1186
|
'data-catalog-example'?: never;
|
|
1127
1187
|
'data-catalog-example-stack'?: never;
|
|
1188
|
+
'data-catalog-example-label'?: never;
|
|
1189
|
+
'data-catalog-example-note'?: never;
|
|
1128
1190
|
'data-align'?: never;
|
|
1129
1191
|
}>;
|
|
1130
1192
|
interface CatalogExampleProps {
|
|
@@ -1249,8 +1311,10 @@ interface CatalogRevealOptions {
|
|
|
1249
1311
|
declare function revealCatalogEntry(root: HTMLElement, id: string, { block, inline, behavior, media, }?: CatalogRevealOptions): () => void;
|
|
1250
1312
|
/**
|
|
1251
1313
|
* Keep a Catalog's opt-in geometry overlay synchronized with its preview.
|
|
1252
|
-
*
|
|
1253
|
-
*
|
|
1314
|
+
* Specimens receive computed border highlights (or a dashed bound when they
|
|
1315
|
+
* have no border and are transparent), while positive computed margins use
|
|
1316
|
+
* devtools-style orange bands. CSS/stylesheet-only changes are observed too.
|
|
1317
|
+
* Returns a disposer.
|
|
1254
1318
|
*/
|
|
1255
1319
|
declare function wireCatalogGeometryOverlay(root: HTMLElement): () => void;
|
|
1256
1320
|
/**
|
|
@@ -1330,14 +1394,25 @@ interface SelectBaseProps<Value extends string = string> {
|
|
|
1330
1394
|
className?: string;
|
|
1331
1395
|
/** Empty-value hint text shown in the closed control (the native select placeholder). */
|
|
1332
1396
|
placeholderText?: string;
|
|
1397
|
+
/** Supporting text shown below the control and associated with its combobox. */
|
|
1398
|
+
hint?: string;
|
|
1333
1399
|
disabled?: boolean;
|
|
1334
1400
|
fitMenu?: boolean;
|
|
1335
1401
|
renderSelected?: (choice: SelectChoice<Value>) => SafeHtml;
|
|
1336
1402
|
/** Render as an unanimated loading skeleton: the label above a static, empty control box. */
|
|
1337
1403
|
placeholder?: boolean;
|
|
1404
|
+
/** Form (default), borderless toolbar, or intrinsic navigation chrome. */
|
|
1405
|
+
presentation?: 'form' | 'toolbar-borderless' | 'navigation';
|
|
1406
|
+
size?: 'default' | 'compact';
|
|
1407
|
+
/** Show only the selected choice icon while retaining the Select's accessible name. */
|
|
1408
|
+
selectedPresentation?: 'label' | 'icon-only';
|
|
1409
|
+
/** Let an enclosing ToolbarControlGroup paint the composed focus ring. */
|
|
1410
|
+
focusRingOwner?: 'select' | 'group';
|
|
1411
|
+
/** Maximum closed-control label width in CSS pixels before ellipsis. */
|
|
1412
|
+
labelMaxWidth?: number;
|
|
1338
1413
|
}
|
|
1339
1414
|
type SelectProps<Value extends string = string> = SelectBaseProps<Value> & SelectAccessibleName;
|
|
1340
|
-
declare function Select<Value extends string>({ name, value, label, ariaLabel, choices, className, placeholderText, disabled, fitMenu, renderSelected, placeholder, }: SelectProps<Value>): SafeHtml;
|
|
1415
|
+
declare function Select<Value extends string>({ name, value, label, ariaLabel, choices, className, placeholderText, hint, disabled, fitMenu, renderSelected, placeholder, presentation, size, selectedPresentation, focusRingOwner, labelMaxWidth, }: SelectProps<Value>): SafeHtml;
|
|
1341
1416
|
|
|
1342
1417
|
export { Select, type SelectChoice, type SelectProps };
|
|
1343
1418
|
```
|
|
@@ -1352,15 +1427,17 @@ type StateBannerUrgency = 'status' | 'alert';
|
|
|
1352
1427
|
interface StateBannerProps {
|
|
1353
1428
|
title: string;
|
|
1354
1429
|
detail?: string;
|
|
1430
|
+
/** Optional compact status or count shown beside the title. */
|
|
1431
|
+
badge?: string;
|
|
1355
1432
|
icon?: SafeHtml;
|
|
1356
1433
|
action?: SafeHtml;
|
|
1357
1434
|
tone?: StateBannerTone;
|
|
1358
1435
|
urgency?: StateBannerUrgency;
|
|
1359
1436
|
className?: string;
|
|
1360
|
-
/** Render the title and detail as unanimated loading skeletons, keeping the icon and tone. */
|
|
1437
|
+
/** Render the title, badge, and detail as unanimated loading skeletons, keeping the icon and tone. */
|
|
1361
1438
|
placeholder?: boolean;
|
|
1362
1439
|
}
|
|
1363
|
-
declare function StateBanner({ title, detail, icon, action, tone, urgency, className, placeholder, }: StateBannerProps): SafeHtml;
|
|
1440
|
+
declare function StateBanner({ title, detail, badge, icon, action, tone, urgency, className, placeholder, }: StateBannerProps): SafeHtml;
|
|
1364
1441
|
|
|
1365
1442
|
export { StateBanner, type StateBannerProps, type StateBannerTone, type StateBannerUrgency };
|
|
1366
1443
|
```
|
|
@@ -1404,7 +1481,7 @@ export { LoadingSpinner, type LoadingSpinnerProps };
|
|
|
1404
1481
|
import * as kerfjs from 'kerfjs';
|
|
1405
1482
|
|
|
1406
1483
|
interface SkeletonProps {
|
|
1407
|
-
/** Width as any CSS length (e.g. `
|
|
1484
|
+
/** Width as any browser CSS length (e.g. `7.5rem`, `60%`). Defaults to filling its slot. */
|
|
1408
1485
|
width?: string;
|
|
1409
1486
|
/** Height as any CSS length. Defaults to a single text line. */
|
|
1410
1487
|
height?: string;
|
|
@@ -1432,10 +1509,13 @@ export { Skeleton, type SkeletonProps };
|
|
|
1432
1509
|
```ts
|
|
1433
1510
|
import { SafeHtml } from 'kerfjs';
|
|
1434
1511
|
|
|
1512
|
+
type SunkenPanelShape = 'rounded' | 'square';
|
|
1435
1513
|
interface SunkenPanelProps {
|
|
1436
1514
|
children?: SafeHtml | readonly SafeHtml[];
|
|
1437
1515
|
/** Optional accessible landmark name for a distinct application region. */
|
|
1438
1516
|
ariaLabel?: string;
|
|
1517
|
+
/** Corner shape: a rounded rectangle (default) or square corners. */
|
|
1518
|
+
shape?: SunkenPanelShape;
|
|
1439
1519
|
className?: string;
|
|
1440
1520
|
}
|
|
1441
1521
|
/**
|
|
@@ -1443,9 +1523,9 @@ interface SunkenPanelProps {
|
|
|
1443
1523
|
* stack. The panel owns its background and padding; children own their own
|
|
1444
1524
|
* borders and internal geometry.
|
|
1445
1525
|
*/
|
|
1446
|
-
declare function SunkenPanel({ children, ariaLabel, className, }: SunkenPanelProps): SafeHtml;
|
|
1526
|
+
declare function SunkenPanel({ children, ariaLabel, shape, className, }: SunkenPanelProps): SafeHtml;
|
|
1447
1527
|
|
|
1448
|
-
export { SunkenPanel, type SunkenPanelProps };
|
|
1528
|
+
export { SunkenPanel, type SunkenPanelProps, type SunkenPanelShape };
|
|
1449
1529
|
```
|
|
1450
1530
|
|
|
1451
1531
|
## `@kerfjs/ui/token-search-field`
|
|
@@ -1578,7 +1658,7 @@ interface TokenSearchCollapsibleOptions {
|
|
|
1578
1658
|
collapseOnEmptyBlur?: boolean;
|
|
1579
1659
|
/** Collapse an empty field on Escape and restore focus to its trigger. Default: true. */
|
|
1580
1660
|
collapseOnEscape?: boolean;
|
|
1581
|
-
/** Focus the editor on expand and the trigger on Escape-collapse. Default: true. */
|
|
1661
|
+
/** Focus the editor on expand/controlled clear and the trigger on Escape-collapse. Default: true. */
|
|
1582
1662
|
manageFocus?: boolean;
|
|
1583
1663
|
/**
|
|
1584
1664
|
* Keep an empty field expanded when focus moves to a caller-owned surface
|