@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
|
@@ -58,6 +58,7 @@
|
|
|
58
58
|
--kui-layout-content-gap: var(--kui-space-l);
|
|
59
59
|
--kui-layout-control-gap: var(--kui-space-xs);
|
|
60
60
|
--kui-layout-metadata-gap: var(--kui-space-2xs);
|
|
61
|
+
--kui-layout-highlight-inset: 2px;
|
|
61
62
|
--kui-layout-rounded-radius: calc(1px + 0.6875rem);
|
|
62
63
|
--kui-layout-pill-radius: calc(1px + 1.3125rem);
|
|
63
64
|
--kui-toolbar-group-inner-size: 2.625rem;
|
|
@@ -186,6 +187,35 @@
|
|
|
186
187
|
value matches brand-on-quiet, which already passes over the dark fills. */
|
|
187
188
|
--kui-color-brand-on-fill: light-dark(#1a5dcf, #8acbff);
|
|
188
189
|
|
|
190
|
+
/* Pop is attractive emphasis without status meaning: use it for featured,
|
|
191
|
+
novel, or celebratory content, never as a success/danger substitute. */
|
|
192
|
+
--kui-color-pop-fill-loud: light-dark(#af34d4, #da8fff);
|
|
193
|
+
--kui-color-pop-fill-quiet: color-mix(
|
|
194
|
+
in srgb,
|
|
195
|
+
var(--kui-color-pop-fill-loud) 10%,
|
|
196
|
+
var(--kui-color-surface)
|
|
197
|
+
);
|
|
198
|
+
--kui-color-pop-fill-normal: color-mix(
|
|
199
|
+
in srgb,
|
|
200
|
+
var(--kui-color-pop-fill-loud) 18%,
|
|
201
|
+
var(--kui-color-surface)
|
|
202
|
+
);
|
|
203
|
+
--kui-color-pop-border-quiet: color-mix(
|
|
204
|
+
in srgb,
|
|
205
|
+
var(--kui-color-pop-fill-loud) 36%,
|
|
206
|
+
var(--kui-color-surface)
|
|
207
|
+
);
|
|
208
|
+
--kui-color-pop-border-normal: color-mix(
|
|
209
|
+
in srgb,
|
|
210
|
+
var(--kui-color-pop-fill-loud) 58%,
|
|
211
|
+
var(--kui-color-surface)
|
|
212
|
+
);
|
|
213
|
+
--kui-color-pop-border-loud: var(--kui-color-pop-fill-loud);
|
|
214
|
+
--kui-color-pop-on-quiet: light-dark(#792498, #e8a5ff);
|
|
215
|
+
--kui-color-pop-on-normal: var(--kui-color-pop-on-quiet);
|
|
216
|
+
--kui-color-pop-on-loud: light-dark(#fff, #241126);
|
|
217
|
+
--kui-color-pop-on-fill: var(--kui-color-pop-on-quiet);
|
|
218
|
+
|
|
189
219
|
--kui-color-success-fill-loud: var(--wa-color-success-fill-loud, #34c759);
|
|
190
220
|
--kui-color-success-fill-quiet: var(
|
|
191
221
|
--wa-color-success-fill-quiet,
|
|
@@ -337,6 +367,8 @@
|
|
|
337
367
|
--kui-color-border-quiet: var(--kui-color-neutral-border-quiet);
|
|
338
368
|
--kui-color-accent: var(--kui-color-brand-fill-normal);
|
|
339
369
|
--kui-color-accent-text: var(--kui-color-brand-on-quiet);
|
|
370
|
+
--kui-color-pop: var(--kui-color-pop-fill-quiet);
|
|
371
|
+
--kui-color-pop-text: var(--kui-color-pop-on-fill);
|
|
340
372
|
--kui-color-success: var(--kui-color-success-fill-quiet);
|
|
341
373
|
--kui-color-success-text: var(--kui-color-success-on-quiet);
|
|
342
374
|
--kui-color-warning: var(--kui-color-warning-fill-quiet);
|
|
@@ -356,6 +388,18 @@
|
|
|
356
388
|
|
|
357
389
|
@media (prefers-contrast: more) {
|
|
358
390
|
:root {
|
|
391
|
+
--kui-color-pop-fill-quiet: Canvas;
|
|
392
|
+
--kui-color-pop-fill-normal: Canvas;
|
|
393
|
+
--kui-color-pop-fill-loud: Highlight;
|
|
394
|
+
--kui-color-pop-border-quiet: currentColor;
|
|
395
|
+
--kui-color-pop-border-normal: currentColor;
|
|
396
|
+
--kui-color-pop-border-loud: currentColor;
|
|
397
|
+
--kui-color-pop-on-quiet: currentColor;
|
|
398
|
+
--kui-color-pop-on-normal: currentColor;
|
|
399
|
+
--kui-color-pop-on-loud: HighlightText;
|
|
400
|
+
--kui-color-pop-on-fill: currentColor;
|
|
401
|
+
--kui-color-pop: Canvas;
|
|
402
|
+
--kui-color-pop-text: currentColor;
|
|
359
403
|
--kui-color-border: currentColor;
|
|
360
404
|
--kui-focus-ring: 3px solid currentColor;
|
|
361
405
|
}
|
|
@@ -112,6 +112,12 @@
|
|
|
112
112
|
background: var(--kui-color-brand-fill-normal);
|
|
113
113
|
}
|
|
114
114
|
|
|
115
|
+
.kui-list-header[data-indicator-tone="pop"]
|
|
116
|
+
:is(.kui-list-header__count, .kui-list-header__badge) {
|
|
117
|
+
color: var(--kui-color-pop-on-normal);
|
|
118
|
+
background: var(--kui-color-pop-fill-normal);
|
|
119
|
+
}
|
|
120
|
+
|
|
115
121
|
.kui-list-header[data-indicator-tone="danger"]
|
|
116
122
|
:is(.kui-list-header__count, .kui-list-header__badge) {
|
|
117
123
|
color: var(--kui-color-danger-on-normal);
|
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
display: grid;
|
|
12
12
|
width: calc(100% - (2 * var(--kui-layout-inline-margin, 0.5rem)));
|
|
13
13
|
min-height: 2.75rem;
|
|
14
|
+
overflow: hidden;
|
|
14
15
|
margin-inline: var(--kui-layout-inline-margin, 0.5rem);
|
|
15
16
|
padding: var(--kui-layout-item-padding, 0.5rem);
|
|
16
17
|
box-sizing: border-box;
|
|
@@ -31,6 +32,14 @@
|
|
|
31
32
|
padding-block: 0.25rem;
|
|
32
33
|
}
|
|
33
34
|
|
|
35
|
+
.kui-list-item[data-has-description="true"] {
|
|
36
|
+
min-height: 3.25rem;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
.kui-list-item[data-density="compact"][data-has-description="true"] {
|
|
40
|
+
min-height: 2.75rem;
|
|
41
|
+
}
|
|
42
|
+
|
|
34
43
|
.kui-list-item[data-divider="before"],
|
|
35
44
|
.kui-list-item[data-divider="both"] {
|
|
36
45
|
border-block-start-color: var(--kui-list-group-divider-color);
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
.kui-nav-stack {
|
|
2
|
+
position: relative;
|
|
2
3
|
display: flex;
|
|
3
4
|
min-width: 0;
|
|
4
5
|
min-height: 0;
|
|
@@ -8,6 +9,32 @@
|
|
|
8
9
|
background: var(--kui-color-surface);
|
|
9
10
|
}
|
|
10
11
|
|
|
12
|
+
.kui-nav-stack__chrome,
|
|
13
|
+
.kui-nav-stack__bottom {
|
|
14
|
+
transition: opacity var(--kui-nav-stack-transition-duration, 200ms) ease;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
.kui-nav-stack__chrome--entering {
|
|
18
|
+
opacity: 0;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
.kui-nav-stack__chrome-copy {
|
|
22
|
+
position: absolute;
|
|
23
|
+
z-index: 2;
|
|
24
|
+
inset-block-start: 0;
|
|
25
|
+
inset-inline: 0;
|
|
26
|
+
pointer-events: none;
|
|
27
|
+
transition: opacity var(--kui-nav-stack-transition-duration, 200ms) ease;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
.kui-nav-stack__chrome-copy--bottom {
|
|
31
|
+
inset-block: auto 0;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
.kui-nav-stack__chrome-copy--exiting {
|
|
35
|
+
opacity: 0;
|
|
36
|
+
}
|
|
37
|
+
|
|
11
38
|
.kui-nav-stack__chrome {
|
|
12
39
|
display: flex;
|
|
13
40
|
min-width: 0;
|
|
@@ -77,7 +104,7 @@
|
|
|
77
104
|
position: absolute;
|
|
78
105
|
overflow: auto;
|
|
79
106
|
background: var(--kui-color-surface);
|
|
80
|
-
transition: transform 200ms ease;
|
|
107
|
+
transition: transform var(--kui-nav-stack-transition-duration, 200ms) ease;
|
|
81
108
|
inset: 0;
|
|
82
109
|
}
|
|
83
110
|
|
|
@@ -105,7 +132,10 @@
|
|
|
105
132
|
}
|
|
106
133
|
|
|
107
134
|
@media (prefers-reduced-motion: reduce) {
|
|
108
|
-
.kui-nav-stack__view
|
|
135
|
+
.kui-nav-stack__view,
|
|
136
|
+
.kui-nav-stack__chrome,
|
|
137
|
+
.kui-nav-stack__bottom,
|
|
138
|
+
.kui-nav-stack__chrome-copy {
|
|
109
139
|
transition: none;
|
|
110
140
|
}
|
|
111
141
|
}
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
);
|
|
15
15
|
--kui-segmented-item-radius: max(
|
|
16
16
|
0px,
|
|
17
|
-
calc(var(--kui-segmented-radius) - 2px)
|
|
17
|
+
calc(var(--kui-segmented-radius) - var(--kui-layout-highlight-inset, 2px))
|
|
18
18
|
);
|
|
19
19
|
display: inline-flex;
|
|
20
20
|
max-width: 100%;
|
|
@@ -41,6 +41,13 @@
|
|
|
41
41
|
}
|
|
42
42
|
|
|
43
43
|
.kui-segmented-control[data-appearance="toolbar"] {
|
|
44
|
+
--kui-segmented-item-radius: var(
|
|
45
|
+
--kui-control-highlight-radius,
|
|
46
|
+
max(
|
|
47
|
+
0px,
|
|
48
|
+
calc(var(--kui-segmented-radius) - var(--kui-layout-highlight-inset, 2px))
|
|
49
|
+
)
|
|
50
|
+
);
|
|
44
51
|
--kui-segmented-background: transparent;
|
|
45
52
|
--kui-segmented-foreground: var(
|
|
46
53
|
--kui-toolbar-control-color,
|
package/dist/styles/select.css
CHANGED
|
@@ -86,6 +86,7 @@
|
|
|
86
86
|
}
|
|
87
87
|
.kui-select wa-option::part(start) {
|
|
88
88
|
align-self: center;
|
|
89
|
+
margin-inline-end: 0.5rem;
|
|
89
90
|
margin-top: 0;
|
|
90
91
|
}
|
|
91
92
|
.kui-select wa-option::part(label) {
|
|
@@ -102,7 +103,7 @@
|
|
|
102
103
|
height: 1rem;
|
|
103
104
|
flex: none;
|
|
104
105
|
}
|
|
105
|
-
.kui-select__icon[slot="start"] {
|
|
106
|
+
.kui-select > .kui-select__icon[slot="start"] {
|
|
106
107
|
margin-inline-end: 0.5rem !important;
|
|
107
108
|
}
|
|
108
109
|
.kui-select__icon svg {
|
|
@@ -63,6 +63,20 @@
|
|
|
63
63
|
var(--kui-state-banner-info-foreground, var(--kui-color-brand-on-fill))
|
|
64
64
|
);
|
|
65
65
|
}
|
|
66
|
+
.kui-state-banner[data-tone="pop"] {
|
|
67
|
+
--_kui-state-banner-background: var(
|
|
68
|
+
--kui-state-banner-background,
|
|
69
|
+
var(--kui-state-banner-pop-background, var(--kui-color-pop-fill-quiet))
|
|
70
|
+
);
|
|
71
|
+
--_kui-state-banner-border: var(
|
|
72
|
+
--kui-state-banner-border,
|
|
73
|
+
var(--kui-state-banner-pop-border, var(--kui-color-pop-border-normal))
|
|
74
|
+
);
|
|
75
|
+
--_kui-state-banner-foreground: var(
|
|
76
|
+
--kui-state-banner-foreground,
|
|
77
|
+
var(--kui-state-banner-pop-foreground, var(--kui-color-pop-on-fill))
|
|
78
|
+
);
|
|
79
|
+
}
|
|
66
80
|
.kui-state-banner[data-tone="success"] {
|
|
67
81
|
--_kui-state-banner-background: var(
|
|
68
82
|
--kui-state-banner-background,
|
|
@@ -242,6 +242,10 @@
|
|
|
242
242
|
min-height: 2.5rem;
|
|
243
243
|
padding: 0.25rem 0.375rem;
|
|
244
244
|
border: 0;
|
|
245
|
+
/* This field is the group's inset visual layer. Inherit the same concentric
|
|
246
|
+
radius contract as buttons instead of retaining TokenSearchField's own pill
|
|
247
|
+
radius when the group switches to `shape="rounded"`. */
|
|
248
|
+
border-radius: var(--kui-control-highlight-radius);
|
|
245
249
|
background: transparent;
|
|
246
250
|
box-shadow: none;
|
|
247
251
|
}
|
|
@@ -10,16 +10,24 @@
|
|
|
10
10
|
--kui-toolbar-control-pressed-background: var(--kui-color-neutral-fill-loud);
|
|
11
11
|
--kui-toolbar-control-pressed-border: var(--kui-color-neutral-border-loud);
|
|
12
12
|
--kui-toolbar-control-pressed-color: var(--kui-color-neutral-on-loud);
|
|
13
|
+
--kui-toolbar-group-radius: var(
|
|
14
|
+
--kui-layout-pill-radius,
|
|
15
|
+
calc(1px + 1.3125rem)
|
|
16
|
+
);
|
|
17
|
+
--kui-control-highlight-radius: max(
|
|
18
|
+
0px,
|
|
19
|
+
calc(
|
|
20
|
+
var(--kui-toolbar-group-radius) - var(--kui-layout-highlight-inset, 2px)
|
|
21
|
+
)
|
|
22
|
+
);
|
|
23
|
+
--kui-toolbar-item-radius: var(--kui-control-highlight-radius);
|
|
13
24
|
display: inline-flex;
|
|
14
25
|
height: var(--kui-toolbar-group-size, calc(2px + 2.625rem));
|
|
15
26
|
min-width: var(--kui-toolbar-group-size, calc(2px + 2.625rem));
|
|
16
27
|
padding: 1px;
|
|
17
28
|
box-sizing: border-box;
|
|
18
29
|
border: 1px solid var(--kui-toolbar-control-border);
|
|
19
|
-
border-radius: var(
|
|
20
|
-
--kui-toolbar-group-radius,
|
|
21
|
-
var(--kui-layout-pill-radius, calc(1px + 1.3125rem))
|
|
22
|
-
);
|
|
30
|
+
border-radius: var(--kui-toolbar-group-radius);
|
|
23
31
|
color: var(--kui-toolbar-control-color);
|
|
24
32
|
background: var(--kui-toolbar-control-background);
|
|
25
33
|
align-items: center;
|
|
@@ -28,17 +36,13 @@
|
|
|
28
36
|
}
|
|
29
37
|
|
|
30
38
|
/* `shape="rounded"` swaps the default pill radius for the design system's softer
|
|
31
|
-
rounded
|
|
32
|
-
|
|
39
|
+
rounded rectangle. The shared highlight contract derives every inner hover or
|
|
40
|
+
selected surface from this outer radius and the group's full inset. */
|
|
33
41
|
.kui-toolbar-control-group[data-shape="rounded"] {
|
|
34
42
|
--kui-toolbar-group-radius: var(
|
|
35
43
|
--kui-layout-rounded-radius,
|
|
36
44
|
calc(1px + 0.6875rem)
|
|
37
45
|
);
|
|
38
|
-
--kui-toolbar-item-radius: var(
|
|
39
|
-
--kui-layout-rounded-radius,
|
|
40
|
-
calc(1px + 0.6875rem)
|
|
41
|
-
);
|
|
42
46
|
}
|
|
43
47
|
|
|
44
48
|
.kui-toolbar-control-group[data-tone="dark"] {
|
|
@@ -76,12 +80,6 @@
|
|
|
76
80
|
padding-inline-start: 0.375rem;
|
|
77
81
|
border-inline-start: 1px solid var(--kui-toolbar-control-border);
|
|
78
82
|
}
|
|
79
|
-
.kui-toolbar-control-group[data-content="avatar"] img {
|
|
80
|
-
width: 1.5rem;
|
|
81
|
-
height: 1.5rem;
|
|
82
|
-
border-radius: var(--kui-radius-pill);
|
|
83
|
-
object-fit: cover;
|
|
84
|
-
}
|
|
85
83
|
.kui-toolbar-control-group[data-content="avatar"][data-scrim="true"] {
|
|
86
84
|
--kui-toolbar-control-background: color-mix(
|
|
87
85
|
in srgb,
|
|
@@ -96,6 +94,9 @@
|
|
|
96
94
|
--kui-color-neutral-fill-normal
|
|
97
95
|
);
|
|
98
96
|
}
|
|
97
|
+
.kui-toolbar-control-group[data-selected-tone="pop"] {
|
|
98
|
+
--kui-toolbar-control-selected-color: var(--kui-color-pop-on-quiet);
|
|
99
|
+
}
|
|
99
100
|
.kui-toolbar-control-group[data-selected-chrome="filled"] {
|
|
100
101
|
--kui-toolbar-control-selected-shadow: none;
|
|
101
102
|
--kui-toolbar-control-selected-border: transparent;
|
|
@@ -107,6 +108,14 @@
|
|
|
107
108
|
--kui-toolbar-control-selected-background: transparent;
|
|
108
109
|
--kui-toolbar-control-selected-border: var(--kui-color-brand-border-normal);
|
|
109
110
|
}
|
|
111
|
+
.kui-toolbar-control-group[data-selected-tone="pop"][data-selected-chrome="filled"] {
|
|
112
|
+
--kui-toolbar-control-selected-background: var(--kui-color-pop-fill-normal);
|
|
113
|
+
--kui-toolbar-control-selected-color: var(--kui-color-pop-on-normal);
|
|
114
|
+
}
|
|
115
|
+
.kui-toolbar-control-group[data-selected-tone="pop"][data-selected-chrome="outline"] {
|
|
116
|
+
--kui-toolbar-control-selected-border: var(--kui-color-pop-border-normal);
|
|
117
|
+
--kui-toolbar-control-selected-color: var(--kui-color-pop-on-quiet);
|
|
118
|
+
}
|
|
110
119
|
|
|
111
120
|
.kui-toolbar-control-group[data-appearance="borderless"] {
|
|
112
121
|
/* A borderless group has no base fill to lift from, so the default
|
|
@@ -184,6 +193,28 @@
|
|
|
184
193
|
min-height: 2rem;
|
|
185
194
|
}
|
|
186
195
|
|
|
196
|
+
/* A compact icon-only trigger may stay square, but a mixed-content dropdown
|
|
197
|
+
trigger must grow for its slotted label plus Web Awesome's caret. Otherwise
|
|
198
|
+
the fixed 32px base centers both outside its host, painting the label across
|
|
199
|
+
the separator and the caret beyond the group border. */
|
|
200
|
+
.kui-toolbar-control-group[data-content="mixed"][data-nested-dropdown="true"]
|
|
201
|
+
> wa-dropdown
|
|
202
|
+
> wa-button,
|
|
203
|
+
.kui-toolbar-control-group[data-content="mixed"][data-nested-dropdown="true"]
|
|
204
|
+
> wa-dropdown
|
|
205
|
+
> wa-button::part(base) {
|
|
206
|
+
min-width: max-content;
|
|
207
|
+
}
|
|
208
|
+
.kui-toolbar-control-group[data-content="mixed"][data-nested-dropdown="true"]
|
|
209
|
+
> wa-dropdown
|
|
210
|
+
> wa-button {
|
|
211
|
+
/* WebKit does not contribute a custom element's shadow-part caret to the
|
|
212
|
+
host's intrinsic inline size. Give the standard short text trigger an
|
|
213
|
+
engine-stable floor; max-content still wins for longer light-DOM labels,
|
|
214
|
+
and consumers can raise the public variable for localized copy. */
|
|
215
|
+
width: var(--kui-toolbar-dropdown-trigger-width, 4.125rem);
|
|
216
|
+
}
|
|
217
|
+
|
|
187
218
|
.kui-toolbar-control-group[data-single="true"] > wa-dropdown,
|
|
188
219
|
.kui-toolbar-control-group[data-single="true"] > wa-dropdown > wa-button,
|
|
189
220
|
.kui-toolbar-control-group[data-single="true"]
|
|
@@ -282,6 +313,16 @@
|
|
|
282
313
|
outline-offset: 1px;
|
|
283
314
|
}
|
|
284
315
|
|
|
316
|
+
/* A composed Select can delegate focus paint to the group so the visible ring
|
|
317
|
+
follows the group's selected pill/rounded geometry instead of Web Awesome's
|
|
318
|
+
form-control radius. */
|
|
319
|
+
.kui-toolbar-control-group:has(
|
|
320
|
+
> .kui-select[data-focus-ring-owner="group"]:is(:focus-within, [open])
|
|
321
|
+
) {
|
|
322
|
+
outline: var(--kui-focus-ring);
|
|
323
|
+
outline-offset: 1px;
|
|
324
|
+
}
|
|
325
|
+
|
|
285
326
|
.kui-toolbar-control-group[data-button-appearance="push"][data-single="true"]:has(
|
|
286
327
|
> :is(button, wa-button)[aria-pressed="true"]
|
|
287
328
|
) {
|
|
@@ -295,3 +336,44 @@
|
|
|
295
336
|
> :is(button, wa-button)[aria-pressed="true"] {
|
|
296
337
|
color: var(--kui-toolbar-control-pressed-color);
|
|
297
338
|
}
|
|
339
|
+
|
|
340
|
+
/* Avatar controls paint the image as chrome rather than inserting a replaced
|
|
341
|
+
<img> into the control. `background-size: contain` is the background-image
|
|
342
|
+
equivalent of `object-fit: contain`: the whole avatar remains visible. A
|
|
343
|
+
lone control belongs to the outer group surface; in a group of choices the
|
|
344
|
+
image belongs only to the selected highlight. */
|
|
345
|
+
.kui-toolbar-control-group[data-content="avatar"] {
|
|
346
|
+
background-position: center;
|
|
347
|
+
background-repeat: no-repeat;
|
|
348
|
+
background-size: contain;
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
.kui-toolbar-control-group[data-content="avatar"]:is(
|
|
352
|
+
[data-single="true"],
|
|
353
|
+
:has(> :is(button, wa-button):only-child)
|
|
354
|
+
) {
|
|
355
|
+
background-image: var(--kui-toolbar-avatar-image);
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
.kui-toolbar-control-group[data-content="avatar"]:is(
|
|
359
|
+
[data-single="true"],
|
|
360
|
+
:has(> :is(button, wa-button):only-child)
|
|
361
|
+
)
|
|
362
|
+
> :is(button, wa-button) {
|
|
363
|
+
color: transparent;
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
.kui-toolbar-control-group[data-content="avatar"][data-single="false"]:not(
|
|
367
|
+
:has(> :is(button, wa-button):only-child)
|
|
368
|
+
)
|
|
369
|
+
> button[aria-pressed="true"],
|
|
370
|
+
.kui-toolbar-control-group[data-content="avatar"][data-single="false"]:not(
|
|
371
|
+
:has(> :is(button, wa-button):only-child)
|
|
372
|
+
)
|
|
373
|
+
> wa-button[aria-pressed="true"]::part(base) {
|
|
374
|
+
color: transparent;
|
|
375
|
+
background-image: var(--kui-toolbar-avatar-image);
|
|
376
|
+
background-position: center;
|
|
377
|
+
background-repeat: no-repeat;
|
|
378
|
+
background-size: contain;
|
|
379
|
+
}
|
|
@@ -287,13 +287,27 @@
|
|
|
287
287
|
/* Card halves --spacing for its header block padding upstream, so pin the
|
|
288
288
|
public part to the same full surface inset as its body and footer. */
|
|
289
289
|
wa-card::part(header) {
|
|
290
|
+
border-bottom: none;
|
|
290
291
|
padding: var(--kui-wa-surface-inset);
|
|
291
292
|
}
|
|
292
293
|
|
|
294
|
+
wa-card::part(body) {
|
|
295
|
+
padding: var(--kui-wa-surface-inset);
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
wa-card::part(footer) {
|
|
299
|
+
border-top: none;
|
|
300
|
+
padding: var(--kui-wa-container-inset);
|
|
301
|
+
}
|
|
302
|
+
|
|
293
303
|
/* Dialog content follows the compact surface inset, while its action region
|
|
294
304
|
retains the roomier homogeneous-group step. Keep these independent of
|
|
295
305
|
Web Awesome's shared --spacing property so applications can tune the
|
|
296
306
|
header without accidentally moving body or footer content. */
|
|
307
|
+
wa-dialog::part(header) {
|
|
308
|
+
padding: var(--kui-wa-surface-inset);
|
|
309
|
+
}
|
|
310
|
+
|
|
297
311
|
wa-dialog::part(body) {
|
|
298
312
|
padding: var(--kui-wa-surface-inset);
|
|
299
313
|
}
|
|
@@ -302,6 +316,14 @@
|
|
|
302
316
|
padding: var(--kui-wa-container-inset);
|
|
303
317
|
}
|
|
304
318
|
|
|
319
|
+
/* Dialogs that provide their own dismissal affordance can opt out of Web
|
|
320
|
+
Awesome's header action region without reaching through the shadow root.
|
|
321
|
+
`header-actions` is a directly exported part, so it must be targeted from
|
|
322
|
+
the host rather than chained through the `dialog` and `header` parts. */
|
|
323
|
+
wa-dialog.hide-actions::part(header-actions) {
|
|
324
|
+
display: none;
|
|
325
|
+
}
|
|
326
|
+
|
|
305
327
|
wa-callout {
|
|
306
328
|
padding: var(--kui-wa-surface-inset) !important;
|
|
307
329
|
}
|
|
@@ -53,6 +53,7 @@
|
|
|
53
53
|
|
|
54
54
|
/* Bottom drawer — the vertical analogue of a rail. */
|
|
55
55
|
.kui-workbench__drawer {
|
|
56
|
+
position: relative;
|
|
56
57
|
flex: 0 0 var(--kui-workbench-drawer-height, 13.75rem);
|
|
57
58
|
min-height: 0;
|
|
58
59
|
overflow: hidden;
|
|
@@ -85,6 +86,9 @@
|
|
|
85
86
|
}
|
|
86
87
|
|
|
87
88
|
.kui-workbench__drawer .kui-workbench__panel-content {
|
|
89
|
+
position: absolute;
|
|
90
|
+
inset-inline: 0;
|
|
91
|
+
inset-block-end: 0;
|
|
88
92
|
width: 100%;
|
|
89
93
|
height: var(--kui-workbench-drawer-height, 13.75rem);
|
|
90
94
|
transition: transform 200ms ease;
|
package/dist/sunken-panel.d.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import
|
|
1
|
+
import * as kerfjs from 'kerfjs';
|
|
2
|
+
import { K as KerfUiContent } from './semantic-content-BbzjvSu9.js';
|
|
2
3
|
|
|
3
4
|
type SunkenPanelShape = 'rounded' | 'square';
|
|
4
5
|
interface SunkenPanelProps {
|
|
5
|
-
children?:
|
|
6
|
+
children?: KerfUiContent;
|
|
6
7
|
/** Optional accessible landmark name for a distinct application region. */
|
|
7
8
|
ariaLabel?: string;
|
|
8
9
|
/** Corner shape: a rounded rectangle (default) or square corners. */
|
|
@@ -14,6 +15,6 @@ interface SunkenPanelProps {
|
|
|
14
15
|
* stack. The panel owns its background and padding; children own their own
|
|
15
16
|
* borders and internal geometry.
|
|
16
17
|
*/
|
|
17
|
-
declare function SunkenPanel({ children, ariaLabel, shape, className, }: SunkenPanelProps): SafeHtml;
|
|
18
|
+
declare function SunkenPanel({ children, ariaLabel, shape, className, }: SunkenPanelProps): kerfjs.SafeHtml;
|
|
18
19
|
|
|
19
20
|
export { SunkenPanel, type SunkenPanelProps, type SunkenPanelShape };
|
package/dist/sunken-panel.js
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import
|
|
1
|
+
import * as kerfjs from 'kerfjs';
|
|
2
|
+
import { K as KerfUiContent } from './semantic-content-BbzjvSu9.js';
|
|
2
3
|
|
|
3
4
|
type DialogSurfaceSize = 'small' | 'medium' | 'large';
|
|
4
5
|
type DialogSurfacePresentation = 'modal' | 'side-sheet' | 'fullscreen';
|
|
5
6
|
type SurfaceInset = 'none' | 'compact' | 'comfortable';
|
|
6
7
|
interface DialogSurfaceProps {
|
|
7
|
-
children:
|
|
8
|
+
children: KerfUiContent;
|
|
8
9
|
size?: DialogSurfaceSize;
|
|
9
10
|
presentation?: DialogSurfacePresentation;
|
|
10
11
|
bodyInset?: SurfaceInset;
|
|
@@ -12,14 +13,14 @@ interface DialogSurfaceProps {
|
|
|
12
13
|
className?: string;
|
|
13
14
|
}
|
|
14
15
|
/** Configure recurring Web Awesome dialog geometry without consumer ::part() CSS. */
|
|
15
|
-
declare function DialogSurface({ children, size, presentation, bodyInset, footerInset, className, }: DialogSurfaceProps): SafeHtml;
|
|
16
|
+
declare function DialogSurface({ children, size, presentation, bodyInset, footerInset, className, }: DialogSurfaceProps): kerfjs.SafeHtml;
|
|
16
17
|
type PopupSurfaceInset = 'standard' | 'compact' | 'list-zero';
|
|
17
18
|
interface PopupSurfaceProps {
|
|
18
|
-
children:
|
|
19
|
+
children: KerfUiContent;
|
|
19
20
|
inset?: PopupSurfaceInset;
|
|
20
21
|
className?: string;
|
|
21
22
|
}
|
|
22
23
|
/** Configure recurring Web Awesome dropdown-menu geometry without consumer ::part() CSS. */
|
|
23
|
-
declare function PopupSurface({ children, inset, className, }: PopupSurfaceProps): SafeHtml;
|
|
24
|
+
declare function PopupSurface({ children, inset, className, }: PopupSurfaceProps): kerfjs.SafeHtml;
|
|
24
25
|
|
|
25
26
|
export { DialogSurface, type DialogSurfacePresentation, type DialogSurfaceProps, type DialogSurfaceSize, PopupSurface, type PopupSurfaceInset, type PopupSurfaceProps, type SurfaceInset };
|
package/dist/surface-scaffold.js
CHANGED
package/dist/tab-bar.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import
|
|
1
|
+
import * as kerfjs from 'kerfjs';
|
|
2
|
+
import { K as KerfUiContent } from './semantic-content-BbzjvSu9.js';
|
|
2
3
|
|
|
3
4
|
type TabActivation = 'automatic' | 'manual';
|
|
4
5
|
type TabBarAllocation = 'intrinsic' | 'fill';
|
|
@@ -7,9 +8,9 @@ type TabBarTrailingPlacement = 'separate' | 'adjacent';
|
|
|
7
8
|
interface TabBarProps {
|
|
8
9
|
id: string;
|
|
9
10
|
label: string;
|
|
10
|
-
children:
|
|
11
|
-
leading?:
|
|
12
|
-
trailing?:
|
|
11
|
+
children: KerfUiContent;
|
|
12
|
+
leading?: KerfUiContent;
|
|
13
|
+
trailing?: KerfUiContent;
|
|
13
14
|
className?: string;
|
|
14
15
|
/**
|
|
15
16
|
* Keyboard activation mode for this strip, emitted as `data-tab-activation` for
|
|
@@ -26,6 +27,6 @@ interface TabBarProps {
|
|
|
26
27
|
trailingPlacement?: TabBarTrailingPlacement;
|
|
27
28
|
}
|
|
28
29
|
/** Render a controlled tab strip. The application owns selection, order, and persistence. */
|
|
29
|
-
declare function TabBar({ id, label, children, leading, trailing, className, activation, allocation, presentation, trailingPlacement, }: TabBarProps): SafeHtml;
|
|
30
|
+
declare function TabBar({ id, label, children, leading, trailing, className, activation, allocation, presentation, trailingPlacement, }: TabBarProps): kerfjs.SafeHtml;
|
|
30
31
|
|
|
31
32
|
export { type TabActivation, TabBar, type TabBarAllocation, type TabBarPresentation, type TabBarProps, type TabBarTrailingPlacement };
|
package/dist/tab-bar.js
CHANGED
package/dist/tab-scaffold.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { SafeHtml } from 'kerfjs';
|
|
2
|
+
import { K as KerfUiContent } from './semantic-content-BbzjvSu9.js';
|
|
2
3
|
|
|
3
4
|
interface TabScaffoldTab<Id extends string = string> {
|
|
4
5
|
id: Id;
|
|
@@ -6,7 +7,7 @@ interface TabScaffoldTab<Id extends string = string> {
|
|
|
6
7
|
/** Decorative icon shown above the label in the bottom bar. */
|
|
7
8
|
icon?: SafeHtml;
|
|
8
9
|
/** The tab's content — typically a `NavStack` so each tab keeps its own stack. */
|
|
9
|
-
content:
|
|
10
|
+
content: KerfUiContent;
|
|
10
11
|
}
|
|
11
12
|
interface TabScaffoldProps<Id extends string = string> {
|
|
12
13
|
id: string;
|
package/dist/tab-scaffold.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/tab-scaffold.tsx"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"sources":["../src/tab-scaffold.tsx"],"names":[],"mappings":";;;AA+BO,SAAS,WAAA,CAA+B;AAAA,EAC7C,EAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA,GAAY;AACd,CAAA,EAAyB;AACvB,EAAA,uBACE,IAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,CAAA,iBAAA,EAAoB,SAAS,CAAA,CAAA,CAAG,IAAA,EAAK;AAAA,MAC5C,EAAA;AAAA,MACA,gBAAA,EAAe,cAAA;AAAA,MACf,sBAAA,EAAsB,EAAA;AAAA,MAEtB,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,SAAI,KAAA,EAAM,0BAAA,EACR,QAAA,EAAA,IAAA,CAAK,GAAA,CAAI,CAAC,GAAA,qBACT,GAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAM,yBAAA;AAAA,YACN,2BAAyB,GAAA,CAAI,EAAA;AAAA,YAC7B,aAAA,EAAa,MAAA,CAAO,GAAA,CAAI,EAAA,KAAO,MAAM,CAAA;AAAA,YACrC,aAAA,EAAa,MAAA,CAAO,GAAA,CAAI,EAAA,KAAO,MAAM,CAAA;AAAA,YAEpC,QAAA,EAAA,GAAA,CAAI;AAAA;AAAA,SAER,CAAA,EACH,CAAA;AAAA,wBACA,GAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,uBAAA,EAAwB,IAAA,EAAK,SAAA,EAAU,YAAA,EAAY,KAAA,EAC3D,QAAA,EAAA,IAAA,CAAK,GAAA,CAAI,CAAC,GAAA,qBACT,IAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,QAAA;AAAA,YACL,KAAA,EAAM,uBAAA;AAAA,YACN,IAAA,EAAK,KAAA;AAAA,YACL,yBAAuB,GAAA,CAAI,EAAA;AAAA,YAC3B,eAAA,EAAe,MAAA,CAAO,GAAA,CAAI,EAAA,KAAO,MAAM,CAAA;AAAA,YACvC,QAAA,EAAU,GAAA,CAAI,EAAA,KAAO,MAAA,GAAS,GAAA,GAAM,IAAA;AAAA,YAEnC,QAAA,EAAA;AAAA,cAAA,GAAA,CAAI,IAAA,wBACF,MAAA,EAAA,EAAK,KAAA,EAAM,8BAA6B,aAAA,EAAY,MAAA,EAClD,cAAI,IAAA,EACP,CAAA;AAAA,8BAEF,GAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAM,6BAAA,EAA+B,cAAI,KAAA,EAAM;AAAA;AAAA;AAAA,SAExD,CAAA,EACH;AAAA;AAAA;AAAA,GACF;AAEJ","file":"tab-scaffold.js","sourcesContent":["import type { SafeHtml } from 'kerfjs';\n\nimport type { KerfUiContent } from './semantic-content.js';\n\nexport interface TabScaffoldTab<Id extends string = string> {\n id: Id;\n label: string;\n /** Decorative icon shown above the label in the bottom bar. */\n icon?: SafeHtml;\n /** The tab's content — typically a `NavStack` so each tab keeps its own stack. */\n content: KerfUiContent;\n}\n\nexport interface TabScaffoldProps<Id extends string = string> {\n id: string;\n /** Accessible name for the tab bar. */\n label: string;\n tabs: readonly TabScaffoldTab<Id>[];\n /** The controlled active tab id (the app owns selection). */\n active: NoInfer<Id>;\n className?: string;\n}\n\n/**\n * A mobile-first, iOS-like bottom tab scaffold: a bottom tab bar that switches\n * between major sections, each tab keeping its own content (usually a `NavStack`)\n * mounted so its stack and scroll survive a switch. Controlled — the app owns\n * `active`; wire selection with `@kerfjs/ui/wire-tab-scaffold`'s `wireTabScaffold`.\n * On larger classes, promote the tabs to a `Workbench` rail or sidebar instead of\n * a bottom bar. See `docs/23-app-layouts.md` §3.4.\n */\nexport function TabScaffold<Id extends string>({\n id,\n label,\n tabs,\n active,\n className = '',\n}: TabScaffoldProps<Id>) {\n return (\n <section\n class={`kui-tab-scaffold ${className}`.trim()}\n id={id}\n data-component=\"tab-scaffold\"\n data-tab-scaffold-id={id}\n >\n <div class=\"kui-tab-scaffold__scenes\">\n {tabs.map((tab) => (\n <div\n class=\"kui-tab-scaffold__scene\"\n data-tab-scaffold-scene={tab.id}\n data-active={String(tab.id === active)}\n aria-hidden={String(tab.id !== active)}\n >\n {tab.content}\n </div>\n ))}\n </div>\n <nav class=\"kui-tab-scaffold__bar\" role=\"tablist\" aria-label={label}>\n {tabs.map((tab) => (\n <button\n type=\"button\"\n class=\"kui-tab-scaffold__tab\"\n role=\"tab\"\n data-tab-scaffold-tab={tab.id}\n aria-selected={String(tab.id === active)}\n tabindex={tab.id === active ? '0' : '-1'}\n >\n {tab.icon && (\n <span class=\"kui-tab-scaffold__tab-icon\" aria-hidden=\"true\">\n {tab.icon}\n </span>\n )}\n <span class=\"kui-tab-scaffold__tab-label\">{tab.label}</span>\n </button>\n ))}\n </nav>\n </section>\n );\n}\n"]}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import
|
|
1
|
+
import * as kerfjs from 'kerfjs';
|
|
2
|
+
import { K as KerfUiContent } from './semantic-content-BbzjvSu9.js';
|
|
2
3
|
|
|
3
4
|
interface TokenSearchToken {
|
|
4
5
|
value: string;
|
|
@@ -23,8 +24,8 @@ interface TokenSearchFieldBaseProps {
|
|
|
23
24
|
tokenPlaceholder?: string;
|
|
24
25
|
disabled?: boolean;
|
|
25
26
|
autofocus?: boolean;
|
|
26
|
-
leading?:
|
|
27
|
-
trailing?:
|
|
27
|
+
leading?: KerfUiContent;
|
|
28
|
+
trailing?: KerfUiContent;
|
|
28
29
|
editAction?: string;
|
|
29
30
|
removeAction?: string;
|
|
30
31
|
clearAction?: string;
|
|
@@ -50,7 +51,7 @@ interface TokenSearchFieldValue {
|
|
|
50
51
|
query: string;
|
|
51
52
|
tokens: TokenSearchToken[];
|
|
52
53
|
}
|
|
53
|
-
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;
|
|
54
|
+
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;
|
|
54
55
|
/** Read editable text and ordered token offsets from a rendered TokenSearchField editor. */
|
|
55
56
|
declare function readTokenSearchField(editor: HTMLElement, knownTokens?: readonly TokenSearchToken[]): TokenSearchFieldValue;
|
|
56
57
|
/** Focus an editor and place its caret at a text offset, skipping atomic token chips. */
|