@kerfjs/ui 5.0.0-beta.29 → 5.0.0-beta.30
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 +43 -8
- package/ai/application-ui-diagnostic-ids-v1.json +5 -0
- package/ai/compile-time-contracts-v1.json +37 -0
- package/ai/compile-time-contracts-v1.schema.json +3 -1
- package/ai/component-catalog-v2-overrides.json +198 -1
- package/ai/component-catalog-v2.d.ts +22 -0
- package/ai/component-catalog-v2.json +488 -32
- package/ai/component-catalog-v2.schema.json +51 -0
- package/ai/component-catalog.json +251 -36
- package/ai/component-catalog.schema.json +23 -0
- package/ai/public-api-signatures-v1.md +231 -84
- package/ai/skill.md +32 -10
- package/ai/webawesome-jsx-signatures-v1.md +1 -1
- package/analyzer/index.mjs +247 -5
- package/dist/app-tab.d.ts +3 -2
- package/dist/app-tab.js +2 -1
- package/dist/catalog-resources.d.ts +1 -0
- package/dist/catalog.d.ts +7 -6
- package/dist/catalog.js +8 -7
- package/dist/catalog.js.map +1 -1
- package/dist/{chunk-PX3YSS5C.js → chunk-6NDBE2OK.js} +1 -1
- package/dist/chunk-6NDBE2OK.js.map +1 -0
- package/dist/{chunk-B3A3IVO5.js → chunk-AQFWBG23.js} +3 -3
- package/dist/chunk-AQFWBG23.js.map +1 -0
- package/dist/{chunk-WNWD54GR.js → chunk-B6JYRX3P.js} +4 -2
- package/dist/chunk-B6JYRX3P.js.map +1 -0
- package/dist/{chunk-HP2B2L26.js → chunk-CAB6NQ2T.js} +1 -1
- package/dist/chunk-CAB6NQ2T.js.map +1 -0
- package/dist/{chunk-2NMQW7FX.js → chunk-CK6P5AUK.js} +4 -3
- package/dist/chunk-CK6P5AUK.js.map +1 -0
- package/dist/{chunk-VCE4MPVE.js → chunk-DAO2VFTT.js} +5 -6
- package/dist/chunk-DAO2VFTT.js.map +1 -0
- package/dist/{chunk-LPOMRC4C.js → chunk-DYBPI5O2.js} +1 -1
- package/dist/chunk-DYBPI5O2.js.map +1 -0
- package/dist/{chunk-IJBSZ4NX.js → chunk-E34TE2ZI.js} +4 -3
- package/dist/chunk-E34TE2ZI.js.map +1 -0
- package/dist/{chunk-4EF2CMYS.js → chunk-I45QO2IZ.js} +8 -7
- package/dist/chunk-I45QO2IZ.js.map +1 -0
- package/dist/{chunk-JRKSK2HX.js → chunk-I4V3UDSA.js} +1 -1
- package/dist/chunk-I4V3UDSA.js.map +1 -0
- package/dist/{chunk-FEY65TBV.js → chunk-KFUUFNTS.js} +1 -1
- package/dist/chunk-KFUUFNTS.js.map +1 -0
- package/dist/{chunk-QO55FN2Y.js → chunk-MFR2IIFG.js} +1 -1
- package/dist/chunk-MFR2IIFG.js.map +1 -0
- package/dist/{chunk-GWEAPEZI.js → chunk-OC275HHS.js} +4 -3
- package/dist/chunk-OC275HHS.js.map +1 -0
- package/dist/chunk-OL4TC3U2.js +156 -0
- package/dist/chunk-OL4TC3U2.js.map +1 -0
- package/dist/{chunk-OT6RPYAP.js → chunk-OMSRSL3B.js} +4 -3
- package/dist/chunk-OMSRSL3B.js.map +1 -0
- package/dist/{chunk-J5BFYY7Q.js → chunk-RL6COPKF.js} +12 -3
- package/dist/chunk-RL6COPKF.js.map +1 -0
- package/dist/{chunk-TB6DY7H5.js → chunk-SOK5EUF7.js} +1 -1
- package/dist/chunk-SOK5EUF7.js.map +1 -0
- package/dist/{chunk-RKVQEH4J.js → chunk-T7DOWS6T.js} +3 -3
- package/dist/chunk-T7DOWS6T.js.map +1 -0
- package/dist/{chunk-7KEUJIIC.js → chunk-TIGSG6BX.js} +1 -1
- package/dist/chunk-TIGSG6BX.js.map +1 -0
- package/dist/{chunk-W5L2JSBY.js → chunk-UDHHKZWO.js} +6 -5
- package/dist/chunk-UDHHKZWO.js.map +1 -0
- package/dist/{chunk-R7ZWUN64.js → chunk-V6GQKOX2.js} +4 -3
- package/dist/chunk-V6GQKOX2.js.map +1 -0
- package/dist/{chunk-KWWR5VMS.js → chunk-V6HCTCVD.js} +4 -3
- package/dist/chunk-V6HCTCVD.js.map +1 -0
- package/dist/{chunk-JFGXQBIP.js → chunk-VDUJZF5G.js} +76 -13
- package/dist/chunk-VDUJZF5G.js.map +1 -0
- package/dist/{chunk-SYDMYBPG.js → chunk-VXFGMDA7.js} +1 -1
- package/dist/chunk-VXFGMDA7.js.map +1 -0
- package/dist/{chunk-YMKH5XTF.js → chunk-WN52USHV.js} +2 -2
- package/dist/{chunk-YMKH5XTF.js.map → chunk-WN52USHV.js.map} +1 -1
- package/dist/{chunk-OBLTAKSX.js → chunk-WSXUPSID.js} +1 -1
- package/dist/chunk-WSXUPSID.js.map +1 -0
- package/dist/{chunk-X2U3QJCJ.js → chunk-ZPWZIVI6.js} +1 -1
- package/dist/chunk-ZPWZIVI6.js.map +1 -0
- package/dist/collapsible-panel.d.ts +5 -2
- package/dist/collapsible-panel.js.map +1 -1
- package/dist/css-values.d.ts +75 -0
- package/dist/css-values.js +3 -0
- package/dist/css-values.js.map +1 -0
- package/dist/empty-state.d.ts +2 -1
- package/dist/empty-state.js +1 -1
- package/dist/floating-toolbar.d.ts +4 -3
- package/dist/floating-toolbar.js +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.js +26 -25
- package/dist/list-action-row.d.ts +1 -2
- package/dist/list-action-row.js +2 -1
- package/dist/list-header.d.ts +1 -1
- package/dist/list-header.js +2 -1
- package/dist/list-inset-control.d.ts +4 -3
- package/dist/list-inset-control.js +1 -1
- package/dist/list-inset-text.d.ts +4 -3
- package/dist/list-inset-text.js +1 -1
- package/dist/list-item.d.ts +4 -3
- package/dist/list-item.js +2 -1
- package/dist/list.d.ts +10 -8
- package/dist/list.js +2 -1
- package/dist/nav-stack.d.ts +9 -6
- package/dist/nav-stack.js +2 -1
- package/dist/pane.d.ts +6 -5
- package/dist/pane.js +1 -1
- package/dist/resizable-region.d.ts +2 -1
- package/dist/resizable-region.js +1 -1
- package/dist/segmented-control.d.ts +4 -3
- package/dist/segmented-control.js +2 -1
- package/dist/select.d.ts +3 -1
- package/dist/select.js +2 -1
- package/dist/semantic-content-BbzjvSu9.d.ts +14 -0
- package/dist/skeleton.d.ts +7 -6
- package/dist/skeleton.js +2 -1
- package/dist/split-view.d.ts +5 -4
- package/dist/split-view.js +3 -2
- package/dist/split-view.js.map +1 -1
- package/dist/state-banner.d.ts +3 -2
- package/dist/state-banner.js +2 -1
- package/dist/styles/catalog.css +8 -1
- package/dist/styles/collapsible-panel.css +6 -2
- package/dist/styles/foundation.css +44 -0
- package/dist/styles/list-header.css +6 -0
- package/dist/styles/list-item.css +9 -0
- package/dist/styles/nav-stack.css +32 -2
- package/dist/styles/segmented-control.css +8 -1
- package/dist/styles/select.css +2 -1
- package/dist/styles/state-banner.css +14 -0
- package/dist/styles/tab-scaffold.css +1 -0
- package/dist/styles/token-search-field.css +4 -0
- package/dist/styles/toolbar-control-group.css +98 -16
- package/dist/styles/webawesome.css +22 -0
- package/dist/styles/workbench.css +4 -0
- package/dist/sunken-panel.d.ts +4 -3
- package/dist/sunken-panel.js +1 -1
- package/dist/surface-scaffold.d.ts +6 -5
- package/dist/surface-scaffold.js +1 -1
- package/dist/tab-bar.d.ts +6 -5
- package/dist/tab-bar.js +1 -1
- package/dist/tab-scaffold.d.ts +2 -1
- package/dist/tab-scaffold.js.map +1 -1
- package/dist/token-search-field.d.ts +5 -4
- package/dist/token-search-field.js +1 -1
- package/dist/toolbar-control-group.d.ts +10 -4
- package/dist/toolbar-control-group.js +1 -1
- package/dist/toolbar-text.js +2 -1
- package/dist/toolbar.d.ts +6 -5
- package/dist/toolbar.js +1 -1
- package/dist/value-table.d.ts +4 -2
- package/dist/value-table.js +2 -1
- package/dist/wire-nav-stack.d.ts +4 -1
- package/dist/wire-nav-stack.js +125 -0
- package/dist/wire-nav-stack.js.map +1 -1
- package/dist/wire-resizable-regions.js +1 -1
- package/dist/wire-tab-bars.d.ts +1 -0
- package/dist/wire-token-search-fields.js +1 -1
- package/dist/workbench.d.ts +7 -4
- package/dist/workbench.js.map +1 -1
- package/docs/accessibility.md +9 -3
- package/docs/collapsible-panel.md +4 -1
- package/docs/component-contract.md +56 -8
- package/docs/component-selection.md +45 -8
- 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/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 -1
- package/docs/design/templates/list-item.svg +1 -1
- package/docs/design/templates/list.svg +1 -1
- package/docs/design-philosophy.md +4 -2
- package/docs/examples/component-catalog-extension-v2.json +2 -0
- package/docs/layout.md +12 -4
- package/docs/nav-stack.md +29 -8
- package/docs/recipes.md +8 -4
- package/docs/split-view.md +6 -0
- package/docs/surface-scaffold.md +8 -0
- package/docs/tab-scaffold.md +3 -1
- package/docs/type-contracts.md +39 -12
- package/docs/ui-analyzer.md +17 -3
- package/docs/ui-doctor.md +7 -0
- package/docs/ux-demo.md +10 -4
- package/docs/webawesome-theme.md +6 -0
- package/docs/workbench.md +6 -4
- package/llms.txt +46 -6
- package/package.json +5 -1
- package/ux-demo/recipes/compact-toolbar.tsx +10 -9
- package/ux-demo/recipes/composer-form.tsx +6 -3
- package/ux-demo/recipes/loading-inspector.tsx +2 -1
- package/dist/chunk-2NMQW7FX.js.map +0 -1
- package/dist/chunk-4EF2CMYS.js.map +0 -1
- package/dist/chunk-7KEUJIIC.js.map +0 -1
- package/dist/chunk-B3A3IVO5.js.map +0 -1
- package/dist/chunk-FEY65TBV.js.map +0 -1
- package/dist/chunk-GWEAPEZI.js.map +0 -1
- package/dist/chunk-HP2B2L26.js.map +0 -1
- package/dist/chunk-IJBSZ4NX.js.map +0 -1
- package/dist/chunk-J5BFYY7Q.js.map +0 -1
- package/dist/chunk-JFGXQBIP.js.map +0 -1
- package/dist/chunk-JRKSK2HX.js.map +0 -1
- package/dist/chunk-KWWR5VMS.js.map +0 -1
- package/dist/chunk-LPOMRC4C.js.map +0 -1
- package/dist/chunk-OBLTAKSX.js.map +0 -1
- package/dist/chunk-OT6RPYAP.js.map +0 -1
- package/dist/chunk-PX3YSS5C.js.map +0 -1
- package/dist/chunk-QO55FN2Y.js.map +0 -1
- package/dist/chunk-R7ZWUN64.js.map +0 -1
- package/dist/chunk-RKVQEH4J.js.map +0 -1
- package/dist/chunk-SYDMYBPG.js.map +0 -1
- package/dist/chunk-TB6DY7H5.js.map +0 -1
- package/dist/chunk-VCE4MPVE.js.map +0 -1
- package/dist/chunk-W5L2JSBY.js.map +0 -1
- package/dist/chunk-WNWD54GR.js.map +0 -1
- package/dist/chunk-X2U3QJCJ.js.map +0 -1
|
@@ -1,6 +1,86 @@
|
|
|
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.30` and `kerfjs@5.0.0-beta.30`. This bounded reference covers only APIs used by the seven-task corpus. It is interface evidence, not an implementation or runtime guarantee.
|
|
4
|
+
|
|
5
|
+
## `@kerfjs/ui/css-values`
|
|
6
|
+
|
|
7
|
+
```ts
|
|
8
|
+
declare const cssValueBrand: unique symbol;
|
|
9
|
+
declare const cssLengthBrand: unique symbol;
|
|
10
|
+
declare const cssLengthExpressionBrand: unique symbol;
|
|
11
|
+
declare const cssFlexBrand: unique symbol;
|
|
12
|
+
declare const cssColorBrand: unique symbol;
|
|
13
|
+
/**
|
|
14
|
+
* A complete typed CSS value minted by a property-specific Kerf UI builder.
|
|
15
|
+
*
|
|
16
|
+
* This brand is an authoring correctness aid, not a sanitizer or security
|
|
17
|
+
* boundary. Prefer the narrower property grammar, such as {@link CssLength},
|
|
18
|
+
* whenever one is available.
|
|
19
|
+
*/
|
|
20
|
+
type CssValue = string & {
|
|
21
|
+
readonly [cssValueBrand]: 'CssValue';
|
|
22
|
+
};
|
|
23
|
+
/**
|
|
24
|
+
* A complete CSS length-percentage value suitable for dimension-valued UI
|
|
25
|
+
* props. Despite the concise name, percentages are intentionally included.
|
|
26
|
+
*/
|
|
27
|
+
type CssLength = CssValue & {
|
|
28
|
+
readonly [cssLengthBrand]: 'CssLength';
|
|
29
|
+
};
|
|
30
|
+
/**
|
|
31
|
+
* An incomplete arithmetic expression. Wrap it with {@link calc} before
|
|
32
|
+
* passing it to a prop that accepts {@link CssLength}.
|
|
33
|
+
*/
|
|
34
|
+
type CssLengthExpression = string & {
|
|
35
|
+
readonly [cssLengthExpressionBrand]: 'CssLengthExpression';
|
|
36
|
+
};
|
|
37
|
+
/** A complete CSS `flex` shorthand. It is not interchangeable with a length. */
|
|
38
|
+
type CssFlex = CssValue & {
|
|
39
|
+
readonly [cssFlexBrand]: 'CssFlex';
|
|
40
|
+
};
|
|
41
|
+
/** A complete CSS color value. It is not interchangeable with a length. */
|
|
42
|
+
type CssColor = CssValue & {
|
|
43
|
+
readonly [cssColorBrand]: 'CssColor';
|
|
44
|
+
};
|
|
45
|
+
type CssFlexKeyword = 'none' | 'auto' | 'initial';
|
|
46
|
+
type CssFlexBasis = CssLength | 'auto' | 'content' | 'min-content' | 'max-content' | 'fit-content';
|
|
47
|
+
type CssSizeKeyword = 'auto' | 'min-content' | 'max-content' | 'fit-content';
|
|
48
|
+
/** A complete width/height value accepted by dimension-valued UI props. */
|
|
49
|
+
type CssSize = CssLength | CssSizeKeyword;
|
|
50
|
+
declare const uiColorNames: readonly ["accent", "accent-text", "border", "border-quiet", "brand-border-loud", "brand-border-normal", "brand-border-quiet", "brand-fill-loud", "brand-fill-normal", "brand-fill-quiet", "brand-on-fill", "brand-on-loud", "brand-on-normal", "brand-on-quiet", "danger", "danger-border-loud", "danger-border-normal", "danger-border-quiet", "danger-fill-loud", "danger-fill-normal", "danger-fill-quiet", "danger-on-loud", "danger-on-normal", "danger-on-quiet", "danger-text", "neutral-border-loud", "neutral-border-normal", "neutral-border-quiet", "neutral-fill-loud", "neutral-fill-normal", "neutral-fill-quiet", "neutral-on-loud", "neutral-on-normal", "neutral-on-quiet", "pop", "pop-border-loud", "pop-border-normal", "pop-border-quiet", "pop-fill-loud", "pop-fill-normal", "pop-fill-quiet", "pop-on-fill", "pop-on-loud", "pop-on-normal", "pop-on-quiet", "pop-text", "success", "success-border-loud", "success-border-normal", "success-border-quiet", "success-fill-loud", "success-fill-normal", "success-fill-quiet", "success-on-fill", "success-on-loud", "success-on-normal", "success-on-quiet", "success-text", "surface", "surface-lowered", "surface-raised", "text", "text-link", "text-quiet", "warning", "warning-border-loud", "warning-border-normal", "warning-border-quiet", "warning-fill-loud", "warning-fill-normal", "warning-fill-quiet", "warning-on-fill", "warning-on-loud", "warning-on-normal", "warning-on-quiet", "warning-text"];
|
|
51
|
+
/** Names of the public `--kui-color-*` semantic tokens. */
|
|
52
|
+
type UiColorName = (typeof uiColorNames)[number];
|
|
53
|
+
/** Kerf UI's complete spacing-token vocabulary. `s` and `xl` are exceptions. */
|
|
54
|
+
type UiSpaceName = 'none' | '2xs' | 'xs' | 's' | 'm' | 'l' | 'xl';
|
|
55
|
+
/** Create a complete pixel length. */
|
|
56
|
+
declare function px(value: number): CssLength;
|
|
57
|
+
/** Create a complete root-font-relative length. */
|
|
58
|
+
declare function rem(value: number): CssLength;
|
|
59
|
+
/** Create a complete current-font-relative length. */
|
|
60
|
+
declare function em(value: number): CssLength;
|
|
61
|
+
/** Create a complete percentage length. */
|
|
62
|
+
declare function pct(value: number): CssLength;
|
|
63
|
+
/** Resolve a Kerf UI spacing step to its public custom property. */
|
|
64
|
+
declare function space(name: UiSpaceName): CssLength;
|
|
65
|
+
/**
|
|
66
|
+
* Reference an application-owned custom property whose contract is a CSS
|
|
67
|
+
* length-percentage. The deliberately narrow name grammar keeps this helper
|
|
68
|
+
* from becoming an arbitrary CSS-string constructor.
|
|
69
|
+
*/
|
|
70
|
+
declare function lengthVar(name: `--${string}`, fallback?: CssLength): CssLength;
|
|
71
|
+
/** Combine two or more complete lengths into a non-standalone sum. */
|
|
72
|
+
declare function plus(first: CssLength, second: CssLength, ...rest: readonly CssLength[]): CssLengthExpression;
|
|
73
|
+
/** Turn a typed length expression into a complete CSS `calc()` value. */
|
|
74
|
+
declare function calc(expression: CssLengthExpression): CssLength;
|
|
75
|
+
/** Build a complete, structured CSS flex shorthand. */
|
|
76
|
+
declare function flex(grow: number, shrink?: number, basis?: CssFlexBasis): CssFlex;
|
|
77
|
+
/** Resolve a public Kerf UI semantic color token. */
|
|
78
|
+
declare function uiColor(name: UiColorName): CssColor;
|
|
79
|
+
/** Reference an application-owned custom property whose contract is a color. */
|
|
80
|
+
declare function colorVar(name: `--${string}`, fallback?: CssColor): CssColor;
|
|
81
|
+
|
|
82
|
+
export { type CssColor, type CssFlex, type CssFlexBasis, type CssFlexKeyword, type CssLength, type CssLengthExpression, type CssSize, type CssSizeKeyword, type CssValue, type UiColorName, type UiSpaceName, calc, colorVar, em, flex, lengthVar, pct, plus, px, rem, space, uiColor };
|
|
83
|
+
```
|
|
4
84
|
|
|
5
85
|
## `@kerfjs/ui/disclosure-arrow`
|
|
6
86
|
|
|
@@ -24,19 +104,20 @@ export { DisclosureArrow, type DisclosureArrowProps, type DisclosureDirection };
|
|
|
24
104
|
## `@kerfjs/ui/toolbar`
|
|
25
105
|
|
|
26
106
|
```ts
|
|
27
|
-
import
|
|
107
|
+
import * as kerfjs from 'kerfjs';
|
|
28
108
|
import { D as DividerSides } from './divider-sides-267FA7sY.js';
|
|
109
|
+
import { K as KerfUiContent } from './semantic-content-BbzjvSu9.js';
|
|
29
110
|
|
|
30
111
|
interface ToolbarProps {
|
|
31
|
-
leading?:
|
|
32
|
-
center?:
|
|
33
|
-
trailing?:
|
|
112
|
+
leading?: KerfUiContent;
|
|
113
|
+
center?: KerfUiContent;
|
|
114
|
+
trailing?: KerfUiContent;
|
|
34
115
|
label?: string;
|
|
35
116
|
/** Physical divider edges in canonical top/right/bottom/left order. Defaults to bottom. */
|
|
36
117
|
dividerSides?: DividerSides;
|
|
37
118
|
className?: string;
|
|
38
119
|
}
|
|
39
|
-
declare function Toolbar({ leading, center, trailing, label, dividerSides, className, }: ToolbarProps): SafeHtml;
|
|
120
|
+
declare function Toolbar({ leading, center, trailing, label, dividerSides, className, }: ToolbarProps): kerfjs.SafeHtml;
|
|
40
121
|
|
|
41
122
|
export { DividerSides, Toolbar, type ToolbarProps };
|
|
42
123
|
```
|
|
@@ -87,7 +168,8 @@ export { type HeadingLevel, ToolbarText, type ToolbarTextProps, type ToolbarText
|
|
|
87
168
|
## `@kerfjs/ui/toolbar-control-group`
|
|
88
169
|
|
|
89
170
|
```ts
|
|
90
|
-
import
|
|
171
|
+
import * as kerfjs from 'kerfjs';
|
|
172
|
+
import { K as KerfUiContent } from './semantic-content-BbzjvSu9.js';
|
|
91
173
|
|
|
92
174
|
type ToolbarControlGroupAppearance = 'contained' | 'borderless';
|
|
93
175
|
type ToolbarControlGroupTone = 'default' | 'dark';
|
|
@@ -97,9 +179,9 @@ type ToolbarControlGroupSize = 'default' | 'compact';
|
|
|
97
179
|
type ToolbarControlGroupDensity = 'comfortable' | 'tight';
|
|
98
180
|
type ToolbarControlGroupContent = 'icon' | 'text' | 'mixed' | 'avatar';
|
|
99
181
|
type ToolbarControlGroupSelectedChrome = 'raised' | 'filled' | 'outline';
|
|
100
|
-
type ToolbarControlGroupSelectedTone = 'brand' | 'neutral';
|
|
182
|
+
type ToolbarControlGroupSelectedTone = 'brand' | 'neutral' | 'pop';
|
|
101
183
|
interface ToolbarControlGroupProps {
|
|
102
|
-
children:
|
|
184
|
+
children: KerfUiContent;
|
|
103
185
|
label?: string;
|
|
104
186
|
className?: string;
|
|
105
187
|
expanded?: boolean;
|
|
@@ -118,8 +200,13 @@ interface ToolbarControlGroupProps {
|
|
|
118
200
|
nestedDropdown?: boolean;
|
|
119
201
|
/** Add contrast behind photo-backed avatar content. */
|
|
120
202
|
scrim?: boolean;
|
|
203
|
+
/**
|
|
204
|
+
* Avatar image URL. A single-control group paints it on the group; a
|
|
205
|
+
* multi-control group paints it only on the pressed selection highlight.
|
|
206
|
+
*/
|
|
207
|
+
avatarImage?: string;
|
|
121
208
|
}
|
|
122
|
-
declare function ToolbarControlGroup({ children, label, className, expanded, single, appearance, tone, buttonAppearance, shape, size, density, content, selectedChrome, selectedTone, nestedDropdown, scrim, }: ToolbarControlGroupProps): SafeHtml;
|
|
209
|
+
declare function ToolbarControlGroup({ children, label, className, expanded, single, appearance, tone, buttonAppearance, shape, size, density, content, selectedChrome, selectedTone, nestedDropdown, scrim, avatarImage, }: ToolbarControlGroupProps): kerfjs.SafeHtml;
|
|
123
210
|
|
|
124
211
|
export { ToolbarControlGroup, type ToolbarControlGroupAppearance, type ToolbarControlGroupButtonAppearance, type ToolbarControlGroupContent, type ToolbarControlGroupDensity, type ToolbarControlGroupProps, type ToolbarControlGroupSelectedChrome, type ToolbarControlGroupSelectedTone, type ToolbarControlGroupShape, type ToolbarControlGroupSize, type ToolbarControlGroupTone };
|
|
125
212
|
```
|
|
@@ -127,13 +214,14 @@ export { ToolbarControlGroup, type ToolbarControlGroupAppearance, type ToolbarCo
|
|
|
127
214
|
## `@kerfjs/ui/floating-toolbar`
|
|
128
215
|
|
|
129
216
|
```ts
|
|
130
|
-
import
|
|
217
|
+
import * as kerfjs from 'kerfjs';
|
|
218
|
+
import { K as KerfUiContent } from './semantic-content-BbzjvSu9.js';
|
|
131
219
|
|
|
132
220
|
/** Where a {@link FloatingToolbar} floats within its positioned container. */
|
|
133
221
|
type FloatingToolbarPosition = 'bottom' | 'bottom-start' | 'bottom-end' | 'top' | 'top-start' | 'top-end';
|
|
134
222
|
interface FloatingToolbarProps {
|
|
135
223
|
/** Toolbar contents — normally one or more `ToolbarControlGroup`s. */
|
|
136
|
-
children:
|
|
224
|
+
children: KerfUiContent;
|
|
137
225
|
/** Accessible name for the toolbar (required — it exposes `role="toolbar"`). */
|
|
138
226
|
label: string;
|
|
139
227
|
/**
|
|
@@ -152,7 +240,7 @@ interface FloatingToolbarProps {
|
|
|
152
240
|
* top toolbar's own inset); override that token to move it. The app owns the
|
|
153
241
|
* controls and their behavior — wire them with `delegate()` as usual.
|
|
154
242
|
*/
|
|
155
|
-
declare function FloatingToolbar({ children, label, position, className, }: FloatingToolbarProps): SafeHtml;
|
|
243
|
+
declare function FloatingToolbar({ children, label, position, className, }: FloatingToolbarProps): kerfjs.SafeHtml;
|
|
156
244
|
|
|
157
245
|
export { FloatingToolbar, type FloatingToolbarPosition, type FloatingToolbarProps };
|
|
158
246
|
```
|
|
@@ -183,7 +271,7 @@ interface ListHeaderBaseProps {
|
|
|
183
271
|
label: string;
|
|
184
272
|
density?: 'standard' | 'compact';
|
|
185
273
|
divider?: 'none' | 'before' | 'after' | 'both';
|
|
186
|
-
indicatorTone?: 'neutral' | 'accent' | 'danger';
|
|
274
|
+
indicatorTone?: 'neutral' | 'accent' | 'pop' | 'danger';
|
|
187
275
|
/** Render as an unanimated loading skeleton: keep the label and action affordance, disable interaction. */
|
|
188
276
|
placeholder?: boolean;
|
|
189
277
|
rootAttributes?: ListHeaderRootAttributes;
|
|
@@ -239,6 +327,32 @@ declare function ListHeader({ label, count, countLabel, badge, status, density,
|
|
|
239
327
|
export { ListHeader, type ListHeaderProps };
|
|
240
328
|
```
|
|
241
329
|
|
|
330
|
+
## `@kerfjs/ui/list`
|
|
331
|
+
|
|
332
|
+
```ts
|
|
333
|
+
import * as kerfjs from 'kerfjs';
|
|
334
|
+
import { UiSpaceName, CssLength, CssFlexKeyword, CssFlex } from './css-values.js';
|
|
335
|
+
import { D as DividerSides } from './divider-sides-267FA7sY.js';
|
|
336
|
+
import { K as KerfUiContent } from './semantic-content-BbzjvSu9.js';
|
|
337
|
+
|
|
338
|
+
interface ListProps {
|
|
339
|
+
children?: KerfUiContent;
|
|
340
|
+
/** Use the standard item gap, a named UI spacing token, or a typed CSS length. Defaults to no gap. */
|
|
341
|
+
gap?: boolean | UiSpaceName | CssLength;
|
|
342
|
+
/** Allow this list to grow/shrink, use a keyword, or supply a typed CSS flex shorthand. */
|
|
343
|
+
flex?: boolean | CssFlexKeyword | CssFlex;
|
|
344
|
+
/** Own vertical scrolling and overscroll containment. */
|
|
345
|
+
scrollable?: boolean;
|
|
346
|
+
/** Physical divider edges in canonical top/right/bottom/left order. */
|
|
347
|
+
dividerSides?: DividerSides;
|
|
348
|
+
className?: string;
|
|
349
|
+
}
|
|
350
|
+
/** A stretch-aligned vertical stack with optional gap, flex, scroll, and dividers. */
|
|
351
|
+
declare function List({ children, gap, flex, scrollable, dividerSides, className, }: ListProps): kerfjs.SafeHtml;
|
|
352
|
+
|
|
353
|
+
export { CssFlex, CssFlexKeyword, CssLength, DividerSides, List, type ListProps, UiSpaceName };
|
|
354
|
+
```
|
|
355
|
+
|
|
242
356
|
## `@kerfjs/ui/list-action-row`
|
|
243
357
|
|
|
244
358
|
```ts
|
|
@@ -297,11 +411,10 @@ interface ListActionRowProps {
|
|
|
297
411
|
trailingActionTitle?: string;
|
|
298
412
|
trailingActionVisibility?: 'always' | 'interaction';
|
|
299
413
|
className?: string;
|
|
300
|
-
style?: string;
|
|
301
414
|
rootAttributes?: ListActionRowRootAttributes;
|
|
302
415
|
trailingActionAttributes?: ListActionRowTrailingAttributes;
|
|
303
416
|
}
|
|
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,
|
|
417
|
+
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, rootAttributes, trailingActionAttributes, }: ListActionRowProps): SafeHtml;
|
|
305
418
|
|
|
306
419
|
export { ListActionRow, type ListActionRowProps };
|
|
307
420
|
```
|
|
@@ -310,12 +423,14 @@ export { ListActionRow, type ListActionRowProps };
|
|
|
310
423
|
|
|
311
424
|
```ts
|
|
312
425
|
import { SafeHtml } from 'kerfjs';
|
|
426
|
+
import { K as KerfUiContent } from './semantic-content-BbzjvSu9.js';
|
|
313
427
|
|
|
314
428
|
type ListItemRootAttributes = Readonly<Record<`data-${string}`, string | undefined> & {
|
|
315
429
|
'data-component'?: never;
|
|
316
430
|
'data-action'?: never;
|
|
317
431
|
'data-item-id'?: never;
|
|
318
432
|
'data-has-icon'?: never;
|
|
433
|
+
'data-has-description'?: never;
|
|
319
434
|
'data-multiline'?: never;
|
|
320
435
|
'data-density'?: never;
|
|
321
436
|
'data-divider'?: never;
|
|
@@ -327,7 +442,7 @@ interface ListItemProps {
|
|
|
327
442
|
/** App-owned supporting text rendered in the component's stable label stack. */
|
|
328
443
|
description?: string | SafeHtml;
|
|
329
444
|
icon?: SafeHtml;
|
|
330
|
-
trailing?:
|
|
445
|
+
trailing?: KerfUiContent;
|
|
331
446
|
/** Dormant status metadata rendered before trailing content. */
|
|
332
447
|
status?: string | SafeHtml;
|
|
333
448
|
/** Show a progress indicator and expose the row as busy without replacing its content. */
|
|
@@ -338,7 +453,6 @@ interface ListItemProps {
|
|
|
338
453
|
action: string;
|
|
339
454
|
itemId?: string;
|
|
340
455
|
className?: string;
|
|
341
|
-
style?: string;
|
|
342
456
|
pressed?: boolean;
|
|
343
457
|
accessibleLabel?: string;
|
|
344
458
|
title?: string;
|
|
@@ -350,7 +464,7 @@ interface ListItemProps {
|
|
|
350
464
|
placeholder?: boolean;
|
|
351
465
|
rootAttributes?: ListItemRootAttributes;
|
|
352
466
|
}
|
|
353
|
-
declare function ListItem({ label, description, icon, trailing, status, busy, density, divider, selected, action, itemId, className,
|
|
467
|
+
declare function ListItem({ label, description, icon, trailing, status, busy, density, divider, selected, action, itemId, className, pressed, accessibleLabel, title, multiline, state, disabled, tabIndex, placeholder, rootAttributes, }: ListItemProps): SafeHtml;
|
|
354
468
|
|
|
355
469
|
export { ListItem, type ListItemProps };
|
|
356
470
|
```
|
|
@@ -358,11 +472,12 @@ export { ListItem, type ListItemProps };
|
|
|
358
472
|
## `@kerfjs/ui/list-inset-control`
|
|
359
473
|
|
|
360
474
|
```ts
|
|
361
|
-
import
|
|
475
|
+
import * as kerfjs from 'kerfjs';
|
|
476
|
+
import { K as KerfUiContent } from './semantic-content-BbzjvSu9.js';
|
|
362
477
|
|
|
363
478
|
interface ListInsetControlProps {
|
|
364
479
|
/** Control(s) that own their own border and padding (e.g. an input, a `wa-*`). */
|
|
365
|
-
children:
|
|
480
|
+
children: KerfUiContent;
|
|
366
481
|
className?: string;
|
|
367
482
|
}
|
|
368
483
|
/**
|
|
@@ -371,7 +486,7 @@ interface ListInsetControlProps {
|
|
|
371
486
|
* Use it for controls that carry their own border and padding but no outer margin
|
|
372
487
|
* — the wrapper adds only the alignment margin and layout, not a second inset.
|
|
373
488
|
*/
|
|
374
|
-
declare function ListInsetControl({ children, className, }: ListInsetControlProps): SafeHtml;
|
|
489
|
+
declare function ListInsetControl({ children, className, }: ListInsetControlProps): kerfjs.SafeHtml;
|
|
375
490
|
|
|
376
491
|
export { ListInsetControl, type ListInsetControlProps };
|
|
377
492
|
```
|
|
@@ -379,11 +494,12 @@ export { ListInsetControl, type ListInsetControlProps };
|
|
|
379
494
|
## `@kerfjs/ui/list-inset-text`
|
|
380
495
|
|
|
381
496
|
```ts
|
|
382
|
-
import
|
|
497
|
+
import * as kerfjs from 'kerfjs';
|
|
498
|
+
import { K as KerfUiContent } from './semantic-content-BbzjvSu9.js';
|
|
383
499
|
|
|
384
500
|
interface ListInsetTextProps {
|
|
385
501
|
/** Text (or inline content) that carries no margin, border, or padding of its own. */
|
|
386
|
-
children:
|
|
502
|
+
children: KerfUiContent | string;
|
|
387
503
|
/**
|
|
388
504
|
* Keep only the horizontal geometry (inline margin, left/right border, and
|
|
389
505
|
* left/right padding) and drop the vertical margin, border, and padding. Use it
|
|
@@ -401,7 +517,7 @@ interface ListInsetTextProps {
|
|
|
401
517
|
* Pass `horizontalOnly` to keep the horizontal inset but drop the vertical box
|
|
402
518
|
* space for tight text layout.
|
|
403
519
|
*/
|
|
404
|
-
declare function ListInsetText({ children, horizontalOnly, className, }: ListInsetTextProps): SafeHtml;
|
|
520
|
+
declare function ListInsetText({ children, horizontalOnly, className, }: ListInsetTextProps): kerfjs.SafeHtml;
|
|
405
521
|
|
|
406
522
|
export { ListInsetText, type ListInsetTextProps };
|
|
407
523
|
```
|
|
@@ -409,7 +525,9 @@ export { ListInsetText, type ListInsetTextProps };
|
|
|
409
525
|
## `@kerfjs/ui/value-table`
|
|
410
526
|
|
|
411
527
|
```ts
|
|
528
|
+
import * as kerfjs from 'kerfjs';
|
|
412
529
|
import { SafeHtml } from 'kerfjs';
|
|
530
|
+
import { K as KerfUiContent } from './semantic-content-BbzjvSu9.js';
|
|
413
531
|
|
|
414
532
|
interface ValueTableRowProps {
|
|
415
533
|
label: string | SafeHtml;
|
|
@@ -424,9 +542,9 @@ declare function ValueTableRow({ label, value, icon, className, placeholder, }:
|
|
|
424
542
|
interface ValueTableProps {
|
|
425
543
|
label: string;
|
|
426
544
|
className?: string;
|
|
427
|
-
children:
|
|
545
|
+
children: KerfUiContent;
|
|
428
546
|
}
|
|
429
|
-
declare function ValueTable({ label, className, children, }: ValueTableProps): SafeHtml;
|
|
547
|
+
declare function ValueTable({ label, className, children, }: ValueTableProps): kerfjs.SafeHtml;
|
|
430
548
|
|
|
431
549
|
export { ValueTable, type ValueTableProps, ValueTableRow, type ValueTableRowProps };
|
|
432
550
|
```
|
|
@@ -435,6 +553,7 @@ export { ValueTable, type ValueTableProps, ValueTableRow, type ValueTableRowProp
|
|
|
435
553
|
|
|
436
554
|
```ts
|
|
437
555
|
import { SafeHtml } from 'kerfjs';
|
|
556
|
+
import { K as KerfUiContent } from './semantic-content-BbzjvSu9.js';
|
|
438
557
|
|
|
439
558
|
type AppTabRootAttributes = Readonly<Record<`data-${string}`, string | undefined> & {
|
|
440
559
|
'data-component'?: never;
|
|
@@ -452,8 +571,8 @@ interface AppTabProps {
|
|
|
452
571
|
selected?: boolean;
|
|
453
572
|
closable?: boolean;
|
|
454
573
|
draggable?: boolean;
|
|
455
|
-
leading?:
|
|
456
|
-
trailing?:
|
|
574
|
+
leading?: KerfUiContent;
|
|
575
|
+
trailing?: KerfUiContent;
|
|
457
576
|
/** Visual treatment within a TabBar. Icon-only tabs retain `name` as their accessible name. */
|
|
458
577
|
presentation?: AppTabPresentation;
|
|
459
578
|
/** Compact tabs use the 32px application-rail height. */
|
|
@@ -477,7 +596,8 @@ export { AppTab, type AppTabPresentation, type AppTabProps, type AppTabSize };
|
|
|
477
596
|
## `@kerfjs/ui/tab-bar`
|
|
478
597
|
|
|
479
598
|
```ts
|
|
480
|
-
import
|
|
599
|
+
import * as kerfjs from 'kerfjs';
|
|
600
|
+
import { K as KerfUiContent } from './semantic-content-BbzjvSu9.js';
|
|
481
601
|
|
|
482
602
|
type TabActivation = 'automatic' | 'manual';
|
|
483
603
|
type TabBarAllocation = 'intrinsic' | 'fill';
|
|
@@ -486,9 +606,9 @@ type TabBarTrailingPlacement = 'separate' | 'adjacent';
|
|
|
486
606
|
interface TabBarProps {
|
|
487
607
|
id: string;
|
|
488
608
|
label: string;
|
|
489
|
-
children:
|
|
490
|
-
leading?:
|
|
491
|
-
trailing?:
|
|
609
|
+
children: KerfUiContent;
|
|
610
|
+
leading?: KerfUiContent;
|
|
611
|
+
trailing?: KerfUiContent;
|
|
492
612
|
className?: string;
|
|
493
613
|
/**
|
|
494
614
|
* Keyboard activation mode for this strip, emitted as `data-tab-activation` for
|
|
@@ -505,7 +625,7 @@ interface TabBarProps {
|
|
|
505
625
|
trailingPlacement?: TabBarTrailingPlacement;
|
|
506
626
|
}
|
|
507
627
|
/** Render a controlled tab strip. The application owns selection, order, and persistence. */
|
|
508
|
-
declare function TabBar({ id, label, children, leading, trailing, className, activation, allocation, presentation, trailingPlacement, }: TabBarProps): SafeHtml;
|
|
628
|
+
declare function TabBar({ id, label, children, leading, trailing, className, activation, allocation, presentation, trailingPlacement, }: TabBarProps): kerfjs.SafeHtml;
|
|
509
629
|
|
|
510
630
|
export { type TabActivation, TabBar, type TabBarAllocation, type TabBarPresentation, type TabBarProps, type TabBarTrailingPlacement };
|
|
511
631
|
```
|
|
@@ -515,6 +635,7 @@ export { type TabActivation, TabBar, type TabBarAllocation, type TabBarPresentat
|
|
|
515
635
|
```ts
|
|
516
636
|
import { TabActivation } from './tab-bar.js';
|
|
517
637
|
import 'kerfjs';
|
|
638
|
+
import './semantic-content-BbzjvSu9.js';
|
|
518
639
|
|
|
519
640
|
type TabReorderSource = 'pointer' | 'keyboard';
|
|
520
641
|
type TabDropPosition = 'before' | 'after';
|
|
@@ -551,7 +672,8 @@ export { TabActivation, type TabDropPosition, type TabReorder, type TabReorderSo
|
|
|
551
672
|
## `@kerfjs/ui/nav-stack`
|
|
552
673
|
|
|
553
674
|
```ts
|
|
554
|
-
import
|
|
675
|
+
import * as kerfjs from 'kerfjs';
|
|
676
|
+
import { K as KerfUiContent } from './semantic-content-BbzjvSu9.js';
|
|
555
677
|
|
|
556
678
|
/**
|
|
557
679
|
* One entry in a {@link NavStack}. The app owns the stack as an array (usually a
|
|
@@ -560,11 +682,13 @@ import { SafeHtml } from 'kerfjs';
|
|
|
560
682
|
interface NavStackView {
|
|
561
683
|
/** Stable identity for keyed reconcile and transition direction. */
|
|
562
684
|
key: string;
|
|
563
|
-
content:
|
|
685
|
+
content: KerfUiContent;
|
|
564
686
|
/** Title shown in the top toolbar for this view. */
|
|
565
687
|
title?: string;
|
|
566
688
|
/** Trailing actions for this view's top toolbar. */
|
|
567
|
-
toolbar?:
|
|
689
|
+
toolbar?: KerfUiContent;
|
|
690
|
+
/** Bottom toolbar for this view. Cross-fades with the top chrome on navigation. */
|
|
691
|
+
bottomToolbar?: KerfUiContent;
|
|
568
692
|
}
|
|
569
693
|
interface NavStackProps {
|
|
570
694
|
id: string;
|
|
@@ -576,8 +700,8 @@ interface NavStackProps {
|
|
|
576
700
|
backLabel?: string;
|
|
577
701
|
/** Hide the top toolbar entirely (rare — a fully custom-chrome view). */
|
|
578
702
|
hideToolbar?: boolean;
|
|
579
|
-
/** Optional persistent bottom toolbar. */
|
|
580
|
-
bottomToolbar?:
|
|
703
|
+
/** Optional persistent bottom toolbar used when the active view does not provide one. */
|
|
704
|
+
bottomToolbar?: KerfUiContent;
|
|
581
705
|
className?: string;
|
|
582
706
|
}
|
|
583
707
|
/**
|
|
@@ -586,7 +710,7 @@ interface NavStackProps {
|
|
|
586
710
|
* cross-fades the chrome across a change. A single-pane layout is a `NavStack`
|
|
587
711
|
* with one entry. See `docs/23-app-layouts.md` §3.1.
|
|
588
712
|
*/
|
|
589
|
-
declare function NavStack({ id, label, views, backLabel, hideToolbar, bottomToolbar, className, }: NavStackProps): SafeHtml;
|
|
713
|
+
declare function NavStack({ id, label, views, backLabel, hideToolbar, bottomToolbar, className, }: NavStackProps): kerfjs.SafeHtml;
|
|
590
714
|
|
|
591
715
|
export { NavStack, type NavStackProps, type NavStackView };
|
|
592
716
|
```
|
|
@@ -604,7 +728,10 @@ interface WireNavStackOptions {
|
|
|
604
728
|
* Animate a `NavStack`'s push/pop transitions and wire its back control. The app
|
|
605
729
|
* owns the stack (a signal of `NavStackView[]`) and re-renders `NavStack` when it
|
|
606
730
|
* changes; this helper slides the content and settles the chrome across each
|
|
607
|
-
* change,
|
|
731
|
+
* change, moves focus into every new top view, restores that view's last focused
|
|
732
|
+
* descendant on pop, and calls `onBack` when the back control is used. Mark a
|
|
733
|
+
* preferred initial target with `data-nav-focus`; otherwise the first focusable
|
|
734
|
+
* descendant (or the view itself) receives focus. Returns a disposer.
|
|
608
735
|
*/
|
|
609
736
|
declare function wireNavStack(root: Element, options?: WireNavStackOptions): () => void;
|
|
610
737
|
|
|
@@ -614,7 +741,8 @@ export { type WireNavStackOptions, wireNavStack };
|
|
|
614
741
|
## `@kerfjs/ui/split-view`
|
|
615
742
|
|
|
616
743
|
```ts
|
|
617
|
-
import
|
|
744
|
+
import * as kerfjs from 'kerfjs';
|
|
745
|
+
import { K as KerfUiContent } from './semantic-content-BbzjvSu9.js';
|
|
618
746
|
|
|
619
747
|
interface SplitViewResizable {
|
|
620
748
|
size: number;
|
|
@@ -625,9 +753,9 @@ interface SplitViewProps {
|
|
|
625
753
|
id: string;
|
|
626
754
|
label: string;
|
|
627
755
|
/** The list (primary) pane. */
|
|
628
|
-
list:
|
|
756
|
+
list: KerfUiContent;
|
|
629
757
|
/** The detail (secondary) pane. */
|
|
630
|
-
detail:
|
|
758
|
+
detail: KerfUiContent;
|
|
631
759
|
/**
|
|
632
760
|
* Compact ("one pane at a time") classes — a handset or portrait tablet.
|
|
633
761
|
* Derive from `deviceClass().value.compact`. When true the split collapses to
|
|
@@ -653,7 +781,7 @@ interface SplitViewProps {
|
|
|
653
781
|
* resizable wiring with `wireResizableRegions` and the compact back with
|
|
654
782
|
* `wireNavStack`.
|
|
655
783
|
*/
|
|
656
|
-
declare function SplitView({ id, label, list, detail, compact, detailActive, listTitle, detailTitle, backLabel, resizable, className, }: SplitViewProps): SafeHtml;
|
|
784
|
+
declare function SplitView({ id, label, list, detail, compact, detailActive, listTitle, detailTitle, backLabel, resizable, className, }: SplitViewProps): kerfjs.SafeHtml;
|
|
657
785
|
|
|
658
786
|
export { SplitView, type SplitViewProps, type SplitViewResizable };
|
|
659
787
|
```
|
|
@@ -661,7 +789,8 @@ export { SplitView, type SplitViewProps, type SplitViewResizable };
|
|
|
661
789
|
## `@kerfjs/ui/pane`
|
|
662
790
|
|
|
663
791
|
```ts
|
|
664
|
-
import
|
|
792
|
+
import * as kerfjs from 'kerfjs';
|
|
793
|
+
import { K as KerfUiContent } from './semantic-content-BbzjvSu9.js';
|
|
665
794
|
|
|
666
795
|
/** Logical sides that can show a {@link Pane} separator. */
|
|
667
796
|
type PaneSeparatorSide = 'block-start' | 'block-end' | 'inline-start' | 'inline-end';
|
|
@@ -678,11 +807,11 @@ type PaneRootAttributes = Readonly<Record<`data-${string}`, string | undefined>
|
|
|
678
807
|
}>;
|
|
679
808
|
interface PaneProps {
|
|
680
809
|
/** Optional fixed chrome above the scrolling content, arranged vertically. */
|
|
681
|
-
header?:
|
|
810
|
+
header?: KerfUiContent;
|
|
682
811
|
/** The pane's primary vertical, scrolling content stack. */
|
|
683
|
-
children?:
|
|
812
|
+
children?: KerfUiContent;
|
|
684
813
|
/** Optional fixed chrome below the scrolling content. */
|
|
685
|
-
footer?:
|
|
814
|
+
footer?: KerfUiContent;
|
|
686
815
|
/** Root semantics. Defaults to `div`. */
|
|
687
816
|
element?: PaneElement;
|
|
688
817
|
/** Scrolling content semantics. Defaults to `div`. */
|
|
@@ -707,7 +836,7 @@ interface PaneProps {
|
|
|
707
836
|
* each logical edge, so the same component works as a sidebar, main area,
|
|
708
837
|
* inspector, or dialog column.
|
|
709
838
|
*/
|
|
710
|
-
declare function Pane({ header, children, footer, element, contentElement, separators, id, label, contentLabel, className, headerClassName, contentClassName, footerClassName, rootAttributes, }: PaneProps): SafeHtml;
|
|
839
|
+
declare function Pane({ header, children, footer, element, contentElement, separators, id, label, contentLabel, className, headerClassName, contentClassName, footerClassName, rootAttributes, }: PaneProps): kerfjs.SafeHtml;
|
|
711
840
|
|
|
712
841
|
export { Pane, type PaneContentElement, type PaneElement, type PaneProps, type PaneSeparatorSide };
|
|
713
842
|
```
|
|
@@ -717,10 +846,11 @@ export { Pane, type PaneContentElement, type PaneElement, type PaneProps, type P
|
|
|
717
846
|
```ts
|
|
718
847
|
import { SafeHtml } from 'kerfjs';
|
|
719
848
|
import { ResizableRegionSeparator, ResizableRegionCollapseMotion, ResizableRegionContentOverflow, ResizableRegionPresentation, ResizableRegionRestorePosition } from './resizable-region.js';
|
|
849
|
+
import { K as KerfUiContent } from './semantic-content-BbzjvSu9.js';
|
|
720
850
|
|
|
721
851
|
/** A collapsible Workbench panel — a side rail or the bottom drawer. */
|
|
722
852
|
interface WorkbenchPanel {
|
|
723
|
-
content:
|
|
853
|
+
content: KerfUiContent;
|
|
724
854
|
/** Whether the panel is currently collapsed (the app owns this). */
|
|
725
855
|
collapsed?: boolean;
|
|
726
856
|
/** Rail width, or drawer height, in px. Overrides the CSS default. */
|
|
@@ -739,7 +869,7 @@ interface WorkbenchProps {
|
|
|
739
869
|
id: string;
|
|
740
870
|
label: string;
|
|
741
871
|
/** The central work area. */
|
|
742
|
-
main:
|
|
872
|
+
main: KerfUiContent;
|
|
743
873
|
leftRail?: WorkbenchPanel;
|
|
744
874
|
rightRail?: WorkbenchPanel;
|
|
745
875
|
bottomDrawer?: WorkbenchPanel;
|
|
@@ -750,8 +880,10 @@ interface WorkbenchProps {
|
|
|
750
880
|
* bottom drawer around a central work area (any absent). Collapsing snaps the
|
|
751
881
|
* panel's track to zero in one reflow while its fixed-size content slides out via
|
|
752
882
|
* a composited transform — the instant-width / sliding-content technique, so the
|
|
753
|
-
* work area relayouts once, not per frame.
|
|
754
|
-
* the
|
|
883
|
+
* work area relayouts once, not per frame. Bottom-drawer content stays anchored
|
|
884
|
+
* to the shell's stable bottom edge throughout that transition. The app owns
|
|
885
|
+
* each `collapsed` flag; the collapse is pure CSS (no wire). See
|
|
886
|
+
* `docs/23-app-layouts.md` §3.3.
|
|
755
887
|
*/
|
|
756
888
|
declare function Workbench({ id, label, main, leftRail, rightRail, bottomDrawer, className, }: WorkbenchProps): SafeHtml;
|
|
757
889
|
|
|
@@ -764,6 +896,7 @@ export { Workbench, type WorkbenchPanel, type WorkbenchProps };
|
|
|
764
896
|
import { SafeHtml } from 'kerfjs';
|
|
765
897
|
import { LucideIcon } from './lucide-icon.js';
|
|
766
898
|
import { ResizableRegionSeparator, ResizableRegionCollapseMotion, ResizableRegionContentOverflow, ResizableRegionPresentation, ResizableRegionRestorePosition } from './resizable-region.js';
|
|
899
|
+
import { K as KerfUiContent } from './semantic-content-BbzjvSu9.js';
|
|
767
900
|
import 'lucide';
|
|
768
901
|
|
|
769
902
|
/** Which edge a {@link CollapsiblePanel} docks to. */
|
|
@@ -812,7 +945,7 @@ interface CollapsiblePanelProps {
|
|
|
812
945
|
/** Accessible label for the panel region. */
|
|
813
946
|
label?: string;
|
|
814
947
|
/** Panel content. */
|
|
815
|
-
children?:
|
|
948
|
+
children?: KerfUiContent;
|
|
816
949
|
separator?: ResizableRegionSeparator;
|
|
817
950
|
collapseMotion?: ResizableRegionCollapseMotion;
|
|
818
951
|
contentOverflow?: ResizableRegionContentOverflow;
|
|
@@ -827,7 +960,9 @@ interface CollapsiblePanelProps {
|
|
|
827
960
|
* {@link Workbench} shell. It owns only the presentation: a fixed-size content
|
|
828
961
|
* area that stays laid out while the panel's track snaps to zero and the content
|
|
829
962
|
* slides out via `transform` (one reflow, composited — the same technique
|
|
830
|
-
* `Workbench` and the catalog sidebar use).
|
|
963
|
+
* `Workbench` and the catalog sidebar use). Bottom-drawer content stays anchored
|
|
964
|
+
* to the panel's fixed bottom edge, so the track cannot move its layout origin
|
|
965
|
+
* underneath the transform transition. The app owns the `collapsed` signal;
|
|
831
966
|
* pair it with `wireSidebar` for the toggle, focus, compact-overlay, keyboard,
|
|
832
967
|
* and persistence semantics, and with `CollapsiblePanelToggle` for the standard
|
|
833
968
|
* affordance. See `docs/24-collapsible-panel.md`.
|
|
@@ -894,6 +1029,7 @@ export { type SidebarStorage, type WireSidebarOptions, type WireSidebarPanel, wi
|
|
|
894
1029
|
|
|
895
1030
|
```ts
|
|
896
1031
|
import { SafeHtml } from 'kerfjs';
|
|
1032
|
+
import { K as KerfUiContent } from './semantic-content-BbzjvSu9.js';
|
|
897
1033
|
|
|
898
1034
|
interface TabScaffoldTab<Id extends string = string> {
|
|
899
1035
|
id: Id;
|
|
@@ -901,7 +1037,7 @@ interface TabScaffoldTab<Id extends string = string> {
|
|
|
901
1037
|
/** Decorative icon shown above the label in the bottom bar. */
|
|
902
1038
|
icon?: SafeHtml;
|
|
903
1039
|
/** The tab's content — typically a `NavStack` so each tab keeps its own stack. */
|
|
904
|
-
content:
|
|
1040
|
+
content: KerfUiContent;
|
|
905
1041
|
}
|
|
906
1042
|
interface TabScaffoldProps<Id extends string = string> {
|
|
907
1043
|
id: string;
|
|
@@ -945,6 +1081,7 @@ export { type WireTabScaffoldOptions, wireTabScaffold };
|
|
|
945
1081
|
|
|
946
1082
|
```ts
|
|
947
1083
|
import { SafeHtml } from 'kerfjs';
|
|
1084
|
+
import { K as KerfUiContent } from './semantic-content-BbzjvSu9.js';
|
|
948
1085
|
|
|
949
1086
|
type ResizableRegionAxis = 'horizontal' | 'vertical';
|
|
950
1087
|
type ResizableRegionEdge = 'start' | 'end';
|
|
@@ -977,7 +1114,7 @@ interface ResizableRegionProps {
|
|
|
977
1114
|
restorePosition?: ResizableRegionRestorePosition;
|
|
978
1115
|
/** Decorative dormant content for the separator handle. Must not contain interactive descendants. */
|
|
979
1116
|
handleIcon?: SafeHtml;
|
|
980
|
-
children:
|
|
1117
|
+
children: KerfUiContent;
|
|
981
1118
|
}
|
|
982
1119
|
declare const clampRegionSize: (size: number, min: number, max: number) => number;
|
|
983
1120
|
declare const resizeRegionFromPointer: (startSize: number, delta: number, edge: ResizableRegionEdge) => number;
|
|
@@ -1077,6 +1214,7 @@ export { DEFAULT_BREAKPOINTS, type DeviceBreakpoints, type DeviceClass, type Dev
|
|
|
1077
1214
|
|
|
1078
1215
|
```ts
|
|
1079
1216
|
import { SafeHtml } from 'kerfjs';
|
|
1217
|
+
import { K as KerfUiContent } from './semantic-content-BbzjvSu9.js';
|
|
1080
1218
|
|
|
1081
1219
|
/** A reference link shown in the detail footer for the active entry. */
|
|
1082
1220
|
interface CatalogResource {
|
|
@@ -1131,19 +1269,19 @@ interface CatalogProps {
|
|
|
1131
1269
|
/** The controlled active entry id — the app owns this signal. */
|
|
1132
1270
|
active: string;
|
|
1133
1271
|
/** The rendered preview for the active entry; the app computes it from `active`. */
|
|
1134
|
-
content:
|
|
1272
|
+
content: KerfUiContent;
|
|
1135
1273
|
/** Whether the sidebar is collapsed (controlled). */
|
|
1136
1274
|
collapsed?: boolean;
|
|
1137
1275
|
/** Current theme; when set, a theme toggle is shown that switches to the opposite. Omit to hide it. */
|
|
1138
1276
|
theme?: 'light' | 'dark';
|
|
1139
1277
|
/** Extra header controls placed before the theme toggle (each a `ToolbarControlGroup`). */
|
|
1140
|
-
headerActions?:
|
|
1278
|
+
headerActions?: KerfUiContent;
|
|
1141
1279
|
/** A secondary "ecosystem" group of sections below the primary category groups. */
|
|
1142
1280
|
secondarySections?: CatalogSecondaryGroup;
|
|
1143
1281
|
/** Extra sidebar content below the category groups (and the secondary group). */
|
|
1144
|
-
sidebarFooter?:
|
|
1282
|
+
sidebarFooter?: KerfUiContent;
|
|
1145
1283
|
/** Status line content shown at the start of the detail footer. */
|
|
1146
|
-
status?:
|
|
1284
|
+
status?: KerfUiContent;
|
|
1147
1285
|
/**
|
|
1148
1286
|
* Whether to highlight specimens' computed borders (or transparent outer
|
|
1149
1287
|
* bounds) and non-zero margins. Pass a boolean (rather than omitting the
|
|
@@ -1199,7 +1337,7 @@ interface CatalogExampleProps {
|
|
|
1199
1337
|
/** Safe authoring `data-*` metadata for the rendered section. Helper-owned structural attributes remain protected. */
|
|
1200
1338
|
rootAttributes?: CatalogExampleRootAttributes;
|
|
1201
1339
|
className?: string;
|
|
1202
|
-
children?:
|
|
1340
|
+
children?: KerfUiContent;
|
|
1203
1341
|
}
|
|
1204
1342
|
/**
|
|
1205
1343
|
* One labeled example in a catalog preview: a `ListHeader` label, an optional
|
|
@@ -1216,7 +1354,7 @@ interface CatalogExampleStackProps {
|
|
|
1216
1354
|
/** Safe authoring `data-*` metadata for the rendered stack. Helper-owned structural attributes remain protected. */
|
|
1217
1355
|
rootAttributes?: CatalogExampleStackRootAttributes;
|
|
1218
1356
|
className?: string;
|
|
1219
|
-
children?:
|
|
1357
|
+
children?: KerfUiContent;
|
|
1220
1358
|
}
|
|
1221
1359
|
/**
|
|
1222
1360
|
* A vertically-stacked group of {@link CatalogExample}s with the catalog's
|
|
@@ -1233,6 +1371,7 @@ export { Catalog, type CatalogBrand, type CatalogEntry, CatalogExample, type Cat
|
|
|
1233
1371
|
```ts
|
|
1234
1372
|
import { CatalogResource } from './catalog.js';
|
|
1235
1373
|
import 'kerfjs';
|
|
1374
|
+
import './semantic-content-BbzjvSu9.js';
|
|
1236
1375
|
|
|
1237
1376
|
/**
|
|
1238
1377
|
* Standard resource labels for a Kerf catalog detail footer. Keep these labels
|
|
@@ -1332,7 +1471,8 @@ export { type CatalogRevealOptions, type WireCatalogOptions, revealCatalogEntry,
|
|
|
1332
1471
|
## `@kerfjs/ui/segmented-control`
|
|
1333
1472
|
|
|
1334
1473
|
```ts
|
|
1335
|
-
import
|
|
1474
|
+
import * as kerfjs from 'kerfjs';
|
|
1475
|
+
import { K as KerfUiContent } from './semantic-content-BbzjvSu9.js';
|
|
1336
1476
|
|
|
1337
1477
|
type SegmentedControlAppearance = 'filled' | 'outlined' | 'toolbar';
|
|
1338
1478
|
type SegmentedControlShape = 'rounded' | 'pill';
|
|
@@ -1341,7 +1481,7 @@ type SegmentedControlLayout = 'content' | 'equal';
|
|
|
1341
1481
|
interface SegmentedControlChoice<Value extends string = string> {
|
|
1342
1482
|
value: Value;
|
|
1343
1483
|
label: string;
|
|
1344
|
-
content?:
|
|
1484
|
+
content?: KerfUiContent;
|
|
1345
1485
|
title?: string;
|
|
1346
1486
|
disabled?: boolean;
|
|
1347
1487
|
}
|
|
@@ -1359,7 +1499,7 @@ interface SegmentedControlProps<Value extends string = string> {
|
|
|
1359
1499
|
/** Render as an unanimated loading skeleton, disabling every segment. */
|
|
1360
1500
|
placeholder?: boolean;
|
|
1361
1501
|
}
|
|
1362
|
-
declare function SegmentedControl<Value extends string>({ id, label, value, choices, action, appearance, shape, size, layout, className, placeholder, }: SegmentedControlProps<Value>): SafeHtml;
|
|
1502
|
+
declare function SegmentedControl<Value extends string>({ id, label, value, choices, action, appearance, shape, size, layout, className, placeholder, }: SegmentedControlProps<Value>): kerfjs.SafeHtml;
|
|
1363
1503
|
|
|
1364
1504
|
export { SegmentedControl, type SegmentedControlAppearance, type SegmentedControlChoice, type SegmentedControlLayout, type SegmentedControlProps, type SegmentedControlShape, type SegmentedControlSize };
|
|
1365
1505
|
```
|
|
@@ -1368,6 +1508,7 @@ export { SegmentedControl, type SegmentedControlAppearance, type SegmentedContro
|
|
|
1368
1508
|
|
|
1369
1509
|
```ts
|
|
1370
1510
|
import { SafeHtml } from 'kerfjs';
|
|
1511
|
+
import { CssColor } from './css-values.js';
|
|
1371
1512
|
import { LucideNode } from './lucide-icon.js';
|
|
1372
1513
|
import 'lucide';
|
|
1373
1514
|
|
|
@@ -1376,7 +1517,8 @@ interface SelectChoice<Value extends string = string> {
|
|
|
1376
1517
|
label: string;
|
|
1377
1518
|
icon?: LucideNode;
|
|
1378
1519
|
iconName?: string;
|
|
1379
|
-
color
|
|
1520
|
+
/** Typed semantic or application-owned color for the optional icon. */
|
|
1521
|
+
color?: CssColor;
|
|
1380
1522
|
group?: string;
|
|
1381
1523
|
separatorBefore?: boolean;
|
|
1382
1524
|
}
|
|
@@ -1425,8 +1567,9 @@ export { Select, type SelectChoice, type SelectFocusRingOwner, type SelectPresen
|
|
|
1425
1567
|
|
|
1426
1568
|
```ts
|
|
1427
1569
|
import { SafeHtml } from 'kerfjs';
|
|
1570
|
+
import { K as KerfUiContent } from './semantic-content-BbzjvSu9.js';
|
|
1428
1571
|
|
|
1429
|
-
type StateBannerTone = 'neutral' | 'info' | 'success' | 'warning' | 'danger';
|
|
1572
|
+
type StateBannerTone = 'neutral' | 'info' | 'pop' | 'success' | 'warning' | 'danger';
|
|
1430
1573
|
type StateBannerUrgency = 'status' | 'alert';
|
|
1431
1574
|
interface StateBannerProps {
|
|
1432
1575
|
title: string;
|
|
@@ -1434,7 +1577,7 @@ interface StateBannerProps {
|
|
|
1434
1577
|
/** Optional compact status or count shown beside the title. */
|
|
1435
1578
|
badge?: string;
|
|
1436
1579
|
icon?: SafeHtml;
|
|
1437
|
-
action?:
|
|
1580
|
+
action?: KerfUiContent;
|
|
1438
1581
|
tone?: StateBannerTone;
|
|
1439
1582
|
urgency?: StateBannerUrgency;
|
|
1440
1583
|
className?: string;
|
|
@@ -1450,12 +1593,13 @@ export { StateBanner, type StateBannerProps, type StateBannerTone, type StateBan
|
|
|
1450
1593
|
|
|
1451
1594
|
```ts
|
|
1452
1595
|
import { SafeHtml } from 'kerfjs';
|
|
1596
|
+
import { K as KerfUiContent } from './semantic-content-BbzjvSu9.js';
|
|
1453
1597
|
|
|
1454
1598
|
interface EmptyStateProps {
|
|
1455
1599
|
title: string;
|
|
1456
1600
|
detail?: string;
|
|
1457
1601
|
icon?: SafeHtml;
|
|
1458
|
-
action?:
|
|
1602
|
+
action?: KerfUiContent;
|
|
1459
1603
|
busy?: boolean;
|
|
1460
1604
|
className?: string;
|
|
1461
1605
|
}
|
|
@@ -1483,14 +1627,15 @@ export { LoadingSpinner, type LoadingSpinnerProps };
|
|
|
1483
1627
|
|
|
1484
1628
|
```ts
|
|
1485
1629
|
import * as kerfjs from 'kerfjs';
|
|
1630
|
+
import { CssSize, CssLength } from './css-values.js';
|
|
1486
1631
|
|
|
1487
1632
|
interface SkeletonProps {
|
|
1488
|
-
/**
|
|
1489
|
-
width?:
|
|
1490
|
-
/**
|
|
1491
|
-
height?:
|
|
1492
|
-
/**
|
|
1493
|
-
radius?:
|
|
1633
|
+
/** Typed width or intrinsic sizing keyword. Defaults to filling its slot. */
|
|
1634
|
+
width?: CssSize;
|
|
1635
|
+
/** Typed height or intrinsic sizing keyword. Defaults to a single text line. */
|
|
1636
|
+
height?: CssSize;
|
|
1637
|
+
/** Typed corner-radius override. Defaults to the small radius token. */
|
|
1638
|
+
radius?: CssLength;
|
|
1494
1639
|
/** Render this many stacked lines (the last one shorter), for multi-line text. */
|
|
1495
1640
|
lines?: number;
|
|
1496
1641
|
/** Accessible label. Omit to keep the block decorative (`aria-hidden`). */
|
|
@@ -1511,11 +1656,12 @@ export { Skeleton, type SkeletonProps };
|
|
|
1511
1656
|
## `@kerfjs/ui/sunken-panel`
|
|
1512
1657
|
|
|
1513
1658
|
```ts
|
|
1514
|
-
import
|
|
1659
|
+
import * as kerfjs from 'kerfjs';
|
|
1660
|
+
import { K as KerfUiContent } from './semantic-content-BbzjvSu9.js';
|
|
1515
1661
|
|
|
1516
1662
|
type SunkenPanelShape = 'rounded' | 'square';
|
|
1517
1663
|
interface SunkenPanelProps {
|
|
1518
|
-
children?:
|
|
1664
|
+
children?: KerfUiContent;
|
|
1519
1665
|
/** Optional accessible landmark name for a distinct application region. */
|
|
1520
1666
|
ariaLabel?: string;
|
|
1521
1667
|
/** Corner shape: a rounded rectangle (default) or square corners. */
|
|
@@ -1527,7 +1673,7 @@ interface SunkenPanelProps {
|
|
|
1527
1673
|
* stack. The panel owns its background and padding; children own their own
|
|
1528
1674
|
* borders and internal geometry.
|
|
1529
1675
|
*/
|
|
1530
|
-
declare function SunkenPanel({ children, ariaLabel, shape, className, }: SunkenPanelProps): SafeHtml;
|
|
1676
|
+
declare function SunkenPanel({ children, ariaLabel, shape, className, }: SunkenPanelProps): kerfjs.SafeHtml;
|
|
1531
1677
|
|
|
1532
1678
|
export { SunkenPanel, type SunkenPanelProps, type SunkenPanelShape };
|
|
1533
1679
|
```
|
|
@@ -1535,7 +1681,8 @@ export { SunkenPanel, type SunkenPanelProps, type SunkenPanelShape };
|
|
|
1535
1681
|
## `@kerfjs/ui/token-search-field`
|
|
1536
1682
|
|
|
1537
1683
|
```ts
|
|
1538
|
-
import
|
|
1684
|
+
import * as kerfjs from 'kerfjs';
|
|
1685
|
+
import { K as KerfUiContent } from './semantic-content-BbzjvSu9.js';
|
|
1539
1686
|
|
|
1540
1687
|
interface TokenSearchToken {
|
|
1541
1688
|
value: string;
|
|
@@ -1560,8 +1707,8 @@ interface TokenSearchFieldBaseProps {
|
|
|
1560
1707
|
tokenPlaceholder?: string;
|
|
1561
1708
|
disabled?: boolean;
|
|
1562
1709
|
autofocus?: boolean;
|
|
1563
|
-
leading?:
|
|
1564
|
-
trailing?:
|
|
1710
|
+
leading?: KerfUiContent;
|
|
1711
|
+
trailing?: KerfUiContent;
|
|
1565
1712
|
editAction?: string;
|
|
1566
1713
|
removeAction?: string;
|
|
1567
1714
|
clearAction?: string;
|
|
@@ -1587,7 +1734,7 @@ interface TokenSearchFieldValue {
|
|
|
1587
1734
|
query: string;
|
|
1588
1735
|
tokens: TokenSearchToken[];
|
|
1589
1736
|
}
|
|
1590
|
-
declare function TokenSearchField({ id, label, query, tokens, placeholder, tokenPlaceholder, disabled, autofocus, collapsible, expanded, expandAction, expandLabel, leading, trailing, editAction, removeAction, clearAction, clearLabel, className, editorAttributes, }: TokenSearchFieldProps): SafeHtml;
|
|
1737
|
+
declare function TokenSearchField({ id, label, query, tokens, placeholder, tokenPlaceholder, disabled, autofocus, collapsible, expanded, expandAction, expandLabel, leading, trailing, editAction, removeAction, clearAction, clearLabel, className, editorAttributes, }: TokenSearchFieldProps): kerfjs.SafeHtml;
|
|
1591
1738
|
/** Read editable text and ordered token offsets from a rendered TokenSearchField editor. */
|
|
1592
1739
|
declare function readTokenSearchField(editor: HTMLElement, knownTokens?: readonly TokenSearchToken[]): TokenSearchFieldValue;
|
|
1593
1740
|
/** Focus an editor and place its caret at a text offset, skipping atomic token chips. */
|