@kerfjs/ui 5.0.0-beta.106 → 5.0.0-beta.108
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 +2 -1
- package/ai/application-ui-diagnostic-ids-v1.json +1 -0
- package/ai/application-ui-profile.defaults.json +6 -1
- package/ai/component-catalog.json +184 -39
- package/ai/component-composition-rules.json +20 -2
- package/ai/component-composition.d.ts +11 -0
- package/ai/component-composition.json +126 -21
- package/ai/component-composition.schema.json +32 -0
- package/ai/components/README.md +3 -2
- package/ai/components/button.md +9 -6
- package/ai/components/checkbox-group.md +89 -0
- package/ai/components/checkbox.md +3 -2
- package/ai/components/chip.md +1 -0
- package/ai/components/color-picker.md +10 -7
- package/ai/components/disclosure.md +6 -1
- package/ai/components/foundation.md +1 -1
- package/ai/components/list-detail-dialog.md +1 -1
- package/ai/components/list.md +1 -1
- package/ai/components/message-composer.md +2 -1
- package/ai/components/radio-group.md +4 -3
- package/ai/components/segmented-control.md +1 -0
- package/ai/components/split-button.md +5 -2
- package/ai/components/surface-scaffold.md +3 -1
- package/ai/components/switch.md +1 -1
- package/ai/components/text-field.md +3 -1
- package/ai/components/text.md +2 -0
- package/ai/components/toolbar-control-group.md +1 -0
- package/ai/components/toolbar.md +1 -1
- package/ai/components/wa-checkbox-group.md +5 -5
- package/ai/components/workbench-dialog.md +1 -1
- package/ai/public-api-signatures-v1.md +258 -35
- package/ai/skill.md +82 -65
- package/ai/webawesome-jsx-signatures-v1.md +1 -1
- package/dist/browser/checkbox-group.js +5 -0
- package/dist/button.d.ts +18 -5
- package/dist/button.js +1 -1
- package/dist/catalog.js +11 -10
- package/dist/catalog.js.map +1 -1
- package/dist/checkbox-group.d.ts +70 -0
- package/dist/checkbox-group.js +7 -0
- package/dist/checkbox-group.js.map +1 -0
- package/dist/chip.d.ts +20 -2
- package/dist/chip.js +2 -1
- package/dist/{chunk-SQ2Q3OQI.js → chunk-2LM3PYHA.js} +2 -2
- package/dist/{chunk-SQ2Q3OQI.js.map → chunk-2LM3PYHA.js.map} +1 -1
- package/dist/{chunk-HYORKKYP.js → chunk-3VZ6SFD4.js} +1 -1
- package/dist/chunk-3VZ6SFD4.js.map +1 -0
- package/dist/{chunk-EKBMUXFV.js → chunk-3Z7N2NAZ.js} +141 -54
- package/dist/chunk-3Z7N2NAZ.js.map +1 -0
- package/dist/{chunk-23PPPNH6.js → chunk-4OV272LF.js} +2 -2
- package/dist/{chunk-23PPPNH6.js.map → chunk-4OV272LF.js.map} +1 -1
- package/dist/{chunk-2PXZBFEC.js → chunk-5J6Z4BWY.js} +1 -1
- package/dist/{chunk-2PXZBFEC.js.map → chunk-5J6Z4BWY.js.map} +1 -1
- package/dist/{chunk-TAHR457X.js → chunk-6CDILXF4.js} +5 -1
- package/dist/chunk-6CDILXF4.js.map +1 -0
- package/dist/{chunk-DDSCVEO5.js → chunk-CPSGUGAY.js} +6 -6
- package/dist/{chunk-DDSCVEO5.js.map → chunk-CPSGUGAY.js.map} +1 -1
- package/dist/{chunk-C3RLKKFQ.js → chunk-EYDXFOSH.js} +13 -8
- package/dist/chunk-EYDXFOSH.js.map +1 -0
- package/dist/{chunk-PE2KPZDW.js → chunk-HDXUHLTQ.js} +7 -2
- package/dist/chunk-HDXUHLTQ.js.map +1 -0
- package/dist/chunk-HU5IHXCI.js +73 -0
- package/dist/chunk-HU5IHXCI.js.map +1 -0
- package/dist/{chunk-DF2YKGIX.js → chunk-JCCN3U6X.js} +2 -2
- package/dist/{chunk-DF2YKGIX.js.map → chunk-JCCN3U6X.js.map} +1 -1
- package/dist/{chunk-UTCAOOXU.js → chunk-KPINJHIC.js} +8 -2
- package/dist/chunk-KPINJHIC.js.map +1 -0
- package/dist/{chunk-N7MBGONH.js → chunk-LMHN2TJL.js} +22 -2
- package/dist/chunk-LMHN2TJL.js.map +1 -0
- package/dist/{chunk-NS2TBYM4.js → chunk-LZUUUHNH.js} +7 -3
- package/dist/chunk-LZUUUHNH.js.map +1 -0
- package/dist/{chunk-GCAK23PU.js → chunk-MVKHSAKE.js} +2 -2
- package/dist/{chunk-GCAK23PU.js.map → chunk-MVKHSAKE.js.map} +1 -1
- package/dist/{chunk-OY2MXIBB.js → chunk-NB6POCFH.js} +3 -1
- package/dist/chunk-NB6POCFH.js.map +1 -0
- package/dist/{chunk-ECFCAKWE.js → chunk-NR6O74ST.js} +5 -1
- package/dist/chunk-NR6O74ST.js.map +1 -0
- package/dist/{chunk-7W3GKMN4.js → chunk-OQP3PFKQ.js} +7 -4
- package/dist/chunk-OQP3PFKQ.js.map +1 -0
- package/dist/{chunk-FKKJHGN5.js → chunk-P7EJ4CAD.js} +2 -2
- package/dist/{chunk-FKKJHGN5.js.map → chunk-P7EJ4CAD.js.map} +1 -1
- package/dist/{chunk-ZXZAECHZ.js → chunk-SOFPUW3O.js} +4 -4
- package/dist/{chunk-ZXZAECHZ.js.map → chunk-SOFPUW3O.js.map} +1 -1
- package/dist/{chunk-WJKHLOP5.js → chunk-TI2GV36S.js} +8 -2
- package/dist/chunk-TI2GV36S.js.map +1 -0
- package/dist/{chunk-QLA25V2K.js → chunk-WPNIKZMJ.js} +15 -1
- package/dist/chunk-WPNIKZMJ.js.map +1 -0
- package/dist/{chunk-FG6U7KQQ.js → chunk-WSEJ2FDE.js} +4 -4
- package/dist/{chunk-FG6U7KQQ.js.map → chunk-WSEJ2FDE.js.map} +1 -1
- package/dist/{chunk-ACUKTVS3.js → chunk-XWNXGFX3.js} +52 -42
- package/dist/chunk-XWNXGFX3.js.map +1 -0
- package/dist/{chunk-WU57BYYM.js → chunk-YVZCKXR3.js} +8 -2
- package/dist/chunk-YVZCKXR3.js.map +1 -0
- package/dist/{chunk-CMLPFIC5.js → chunk-ZN7KUMPY.js} +3 -1
- package/dist/chunk-ZN7KUMPY.js.map +1 -0
- package/dist/collapsible-panel.js +2 -2
- package/dist/color-picker.d.ts +30 -5
- package/dist/color-picker.js +1 -1
- package/dist/disclosure.d.ts +13 -4
- package/dist/disclosure.js.map +1 -1
- package/dist/help-tags-register.js +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.js +24 -23
- package/dist/list-action-row.js +1 -1
- package/dist/list-detail-dialog.d.ts +7 -1
- package/dist/list-detail-dialog.js +7 -5
- package/dist/list-detail-dialog.js.map +1 -1
- package/dist/list-header.d.ts +8 -1
- package/dist/list-header.js +1 -1
- package/dist/list.d.ts +7 -1
- package/dist/list.js +1 -1
- package/dist/message-composer.js +1 -1
- package/dist/nav-stack.js +1 -1
- package/dist/popup-menu-register.js +2 -2
- package/dist/popup-menu.d.ts +15 -5
- package/dist/popup-menu.js +1 -1
- package/dist/segmented-control.d.ts +3 -1
- package/dist/segmented-control.js +1 -1
- package/dist/select-register.js +3 -3
- package/dist/split-button.d.ts +14 -2
- package/dist/split-button.js +1 -1
- package/dist/split-view.js +1 -1
- package/dist/styles/anchored-surface.css +3 -0
- package/dist/styles/button.css +57 -2
- package/dist/styles/catalog/components/catalog-example.css +55 -18
- package/dist/styles/checkbox-group.css +63 -0
- package/dist/styles/checkbox.css +7 -6
- package/dist/styles/color-picker.css +69 -34
- package/dist/styles/components/actions/button/button.css +57 -2
- package/dist/styles/components/actions/split-button/split-button.css +51 -5
- package/dist/styles/components/actions/toolbar/toolbar.css +9 -0
- package/dist/styles/components/actions/toolbar-control-group/toolbar-control-group.css +29 -1
- package/dist/styles/components/collections/framed-list/framed-list.css +6 -0
- package/dist/styles/components/collections/list/list.css +6 -0
- package/dist/styles/components/collections/list-header/list-header.css +7 -0
- package/dist/styles/components/feedback/anchored-surface/anchored-surface.css +3 -0
- package/dist/styles/components/forms/checkbox/checkbox.css +7 -6
- package/dist/styles/components/forms/checkbox-group/checkbox-group.css +63 -0
- package/dist/styles/components/forms/color-picker/color-picker.css +69 -34
- package/dist/styles/components/forms/radio-group/radio-group.css +7 -5
- package/dist/styles/components/forms/select/select.css +6 -2
- package/dist/styles/components/forms/switch/switch.css +3 -3
- package/dist/styles/components/layout/pane/pane.css +24 -0
- package/dist/styles/components/layout/workbench/workbench.css +4 -0
- package/dist/styles/components/navigation/nav-stack/nav-stack.css +77 -1
- package/dist/styles/components/navigation/tab-bar/tab-bar.css +6 -0
- package/dist/styles/components/navigation/tab-navigator/tab-navigator.css +17 -0
- package/dist/styles/components/surfaces/content-item/content-item.css +30 -0
- package/dist/styles/components/surfaces/disclosure/disclosure.css +38 -0
- package/dist/styles/components/surfaces/sunken-panel/sunken-panel.css +3 -0
- package/dist/styles/components/surfaces/surface-scaffold/surface-scaffold.css +8 -0
- package/dist/styles/components/typography/text/text.css +10 -0
- package/dist/styles/content-item.css +30 -0
- package/dist/styles/disclosure.css +38 -0
- package/dist/styles/foundation.css +78 -13
- package/dist/styles/framed-list.css +6 -0
- package/dist/styles/list-header.css +7 -0
- package/dist/styles/list.css +6 -0
- package/dist/styles/nav-stack.css +77 -1
- package/dist/styles/pane.css +24 -0
- package/dist/styles/radio-group.css +7 -5
- package/dist/styles/select.css +6 -2
- package/dist/styles/split-button.css +51 -5
- package/dist/styles/styles.css +1 -0
- package/dist/styles/sunken-panel.css +3 -0
- package/dist/styles/surface-scaffold.css +8 -0
- package/dist/styles/switch.css +3 -3
- package/dist/styles/tab-bar.css +6 -0
- package/dist/styles/tab-navigator.css +17 -0
- package/dist/styles/text.css +10 -0
- package/dist/styles/toolbar-control-group.css +29 -1
- package/dist/styles/toolbar.css +9 -0
- package/dist/styles/webawesome.css +56 -12
- package/dist/styles/workbench.css +4 -0
- package/dist/surface-scaffold.d.ts +15 -1
- package/dist/surface-scaffold.js +1 -1
- package/dist/text-field.d.ts +7 -1
- package/dist/text-field.js +1 -1
- package/dist/toolbar-control-group.d.ts +8 -2
- package/dist/toolbar-control-group.js +1 -1
- package/dist/toolbar.d.ts +6 -1
- package/dist/toolbar.js +1 -1
- package/dist/wire-catalog.js +1 -1
- package/dist/wire-color-fields.js +2 -2
- package/dist/wire-color-pickers.d.ts +4 -3
- package/dist/wire-color-pickers.js +1 -1
- package/dist/wire-comboboxes.js +1 -1
- package/dist/wire-workbench.js +1 -1
- package/dist/workbench-dialog.d.ts +11 -2
- package/dist/workbench-dialog.js +6 -3
- package/dist/workbench-dialog.js.map +1 -1
- package/dist/workbench.js +1 -1
- package/docs/accessibility.md +58 -3
- package/docs/anchored-surface.md +6 -1
- package/docs/catalog.md +26 -1
- package/docs/color-picker.md +39 -8
- package/docs/component-contract.md +47 -3
- package/docs/component-selection.md +58 -21
- package/docs/design/templates/button/full-width-dark.svg +1 -0
- package/docs/design/templates/button/full-width.svg +1 -0
- package/docs/design/templates/button/tones-dark.svg +1 -1
- package/docs/design/templates/button/tones.svg +1 -1
- package/docs/design/templates/button-dark.svg +1 -1
- package/docs/design/templates/button.svg +1 -1
- package/docs/design/templates/checkbox/error-dark.svg +1 -1
- package/docs/design/templates/checkbox/error.svg +1 -1
- package/docs/design/templates/checkbox/states-dark.svg +1 -1
- package/docs/design/templates/checkbox/states.svg +1 -1
- package/docs/design/templates/checkbox-dark.svg +1 -1
- package/docs/design/templates/checkbox-group/horizontal-dark.svg +1 -0
- package/docs/design/templates/checkbox-group/horizontal.svg +1 -0
- package/docs/design/templates/checkbox-group/vertical-dark.svg +1 -0
- package/docs/design/templates/checkbox-group/vertical.svg +1 -0
- package/docs/design/templates/checkbox-group-dark.svg +1 -0
- package/docs/design/templates/checkbox-group.svg +1 -0
- package/docs/design/templates/checkbox.svg +1 -1
- package/docs/design/templates/color-picker/gray-dark.svg +1 -1
- package/docs/design/templates/color-picker/gray.svg +1 -1
- package/docs/design/templates/color-picker/hsb-dark.svg +1 -0
- package/docs/design/templates/color-picker/hsb.svg +1 -0
- package/docs/design/templates/color-picker/rgb-dark.svg +1 -1
- package/docs/design/templates/color-picker/rgb.svg +1 -1
- package/docs/design/templates/color-picker-dark.svg +1 -1
- package/docs/design/templates/color-picker.svg +1 -1
- package/docs/design/templates/disclosure/embedded-dark.svg +1 -0
- package/docs/design/templates/disclosure/embedded.svg +1 -0
- package/docs/design/templates/disclosure-dark.svg +1 -1
- package/docs/design/templates/disclosure.svg +1 -1
- package/docs/design/templates/radio-group/horizontal-dark.svg +1 -1
- package/docs/design/templates/radio-group/horizontal.svg +1 -1
- package/docs/design/templates/radio-group/vertical-dark.svg +1 -1
- package/docs/design/templates/radio-group/vertical.svg +1 -1
- package/docs/design/templates/radio-group-dark.svg +1 -1
- package/docs/design/templates/radio-group.svg +1 -1
- package/docs/design/templates/split-button/full-width-dark.svg +1 -0
- package/docs/design/templates/split-button/full-width.svg +1 -0
- package/docs/design/templates/split-button/pill-dark.svg +1 -0
- package/docs/design/templates/split-button/pill.svg +1 -0
- package/docs/design/templates/split-button/states-dark.svg +1 -0
- package/docs/design/templates/split-button/states.svg +1 -0
- package/docs/design/templates/split-button/tones-dark.svg +1 -0
- package/docs/design/templates/split-button/tones.svg +1 -0
- package/docs/design/templates/split-button-dark.svg +1 -0
- package/docs/design/templates/split-button.svg +1 -0
- package/docs/design/templates/switch/states-dark.svg +1 -1
- package/docs/design/templates/switch/states.svg +1 -1
- package/docs/design/templates/switch-dark.svg +1 -1
- package/docs/design/templates/switch.svg +1 -1
- package/docs/design/templates/text-field/number-dark.svg +1 -0
- package/docs/design/templates/text-field/number.svg +1 -0
- package/docs/design/templates/text-field-dark.svg +1 -1
- package/docs/design/templates/text-field.svg +1 -1
- package/docs/design/templates.md +10 -3
- package/docs/disclosure.md +34 -0
- package/docs/layout.md +16 -5
- package/docs/list-detail-dialog.md +4 -0
- package/docs/nav-stack.md +6 -2
- package/docs/surface-scaffold.md +6 -2
- package/docs/ui-doctor.md +16 -4
- package/docs/webawesome-migration.md +3 -1
- package/docs/webawesome-theme.md +56 -18
- package/docs/workbench-dialog.md +4 -1
- package/docs/workbench.md +7 -1
- package/docs/writing.md +3 -3
- package/doctor/copy-capitalization-checks.mjs +10 -7
- package/llms.txt +65 -23
- package/package.json +7 -1
- package/dist/chunk-7W3GKMN4.js.map +0 -1
- package/dist/chunk-ACUKTVS3.js.map +0 -1
- package/dist/chunk-C3RLKKFQ.js.map +0 -1
- package/dist/chunk-CMLPFIC5.js.map +0 -1
- package/dist/chunk-ECFCAKWE.js.map +0 -1
- package/dist/chunk-EKBMUXFV.js.map +0 -1
- package/dist/chunk-HYORKKYP.js.map +0 -1
- package/dist/chunk-N7MBGONH.js.map +0 -1
- package/dist/chunk-NS2TBYM4.js.map +0 -1
- package/dist/chunk-OY2MXIBB.js.map +0 -1
- package/dist/chunk-PE2KPZDW.js.map +0 -1
- package/dist/chunk-QLA25V2K.js.map +0 -1
- package/dist/chunk-TAHR457X.js.map +0 -1
- package/dist/chunk-UTCAOOXU.js.map +0 -1
- package/dist/chunk-WJKHLOP5.js.map +0 -1
- package/dist/chunk-WU57BYYM.js.map +0 -1
|
@@ -224,6 +224,19 @@
|
|
|
224
224
|
background: var(--kui-chrome-material);
|
|
225
225
|
}
|
|
226
226
|
|
|
227
|
+
/* The material's surface context at rest (see pane.css); clear chrome keeps
|
|
228
|
+
the inherited context. */
|
|
229
|
+
.kui-nav-stack[data-chrome-presentation="overlay"]:not(
|
|
230
|
+
[data-chrome-material="clear"]
|
|
231
|
+
)
|
|
232
|
+
> .kui-nav-stack__chrome,
|
|
233
|
+
.kui-nav-stack[data-bottom-toolbar-presentation="overlay"]:not(
|
|
234
|
+
[data-bottom-toolbar-material="clear"]
|
|
235
|
+
)
|
|
236
|
+
> .kui-nav-stack__bottom {
|
|
237
|
+
--kui-color-surface-current-tint: var(--kui-chrome-material);
|
|
238
|
+
}
|
|
239
|
+
|
|
227
240
|
.kui-nav-stack[data-chrome-presentation="overlay"][data-chrome-overlay="measured"]
|
|
228
241
|
> .kui-nav-stack__chrome:not(.kui-nav-stack__chrome-copy) {
|
|
229
242
|
position: absolute;
|
|
@@ -291,6 +304,63 @@
|
|
|
291
304
|
}
|
|
292
305
|
}
|
|
293
306
|
|
|
307
|
+
/* An overlay bar cross-fades its contents, never its material. Fading the
|
|
308
|
+
bar itself would fade its backdrop filter with it (WebKit drops the blur
|
|
309
|
+
outright), so mid push or pop the sliding views would show through the
|
|
310
|
+
chrome. Instead the live bar keeps its material at full opacity while its
|
|
311
|
+
contents fade in, and the copy cross-fading out above it carries no
|
|
312
|
+
material of its own (nor a clear bar's scroll edge), only the old
|
|
313
|
+
contents and divider. */
|
|
314
|
+
.kui-nav-stack[data-chrome-presentation="overlay"] > .kui-nav-stack__chrome,
|
|
315
|
+
.kui-nav-stack[data-bottom-toolbar-presentation="overlay"]
|
|
316
|
+
> .kui-nav-stack__bottom {
|
|
317
|
+
opacity: 1;
|
|
318
|
+
transition: none;
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
.kui-nav-stack[data-chrome-presentation="overlay"]
|
|
322
|
+
> .kui-nav-stack__chrome:not(.kui-nav-stack__chrome-copy)
|
|
323
|
+
> *,
|
|
324
|
+
.kui-nav-stack[data-bottom-toolbar-presentation="overlay"]
|
|
325
|
+
> .kui-nav-stack__bottom:not(.kui-nav-stack__chrome-copy)
|
|
326
|
+
> * {
|
|
327
|
+
transition: opacity var(--kui-nav-stack-transition-duration, 200ms) ease;
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
.kui-nav-stack[data-chrome-presentation="overlay"]
|
|
331
|
+
> .kui-nav-stack__chrome--entering:not(.kui-nav-stack__chrome-copy)
|
|
332
|
+
> *,
|
|
333
|
+
.kui-nav-stack[data-bottom-toolbar-presentation="overlay"]
|
|
334
|
+
> .kui-nav-stack__chrome--entering:not(.kui-nav-stack__chrome-copy)
|
|
335
|
+
> * {
|
|
336
|
+
transition: none;
|
|
337
|
+
opacity: 0;
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
.kui-nav-stack[data-chrome-presentation="overlay"]
|
|
341
|
+
> .kui-nav-stack__chrome.kui-nav-stack__chrome-copy,
|
|
342
|
+
.kui-nav-stack[data-bottom-toolbar-presentation="overlay"]
|
|
343
|
+
> .kui-nav-stack__bottom.kui-nav-stack__chrome-copy {
|
|
344
|
+
-webkit-backdrop-filter: none;
|
|
345
|
+
backdrop-filter: none;
|
|
346
|
+
background: transparent;
|
|
347
|
+
transition: opacity var(--kui-nav-stack-transition-duration, 200ms) ease;
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
.kui-nav-stack[data-chrome-presentation="overlay"]
|
|
351
|
+
> .kui-nav-stack__chrome.kui-nav-stack__chrome-copy--exiting,
|
|
352
|
+
.kui-nav-stack[data-bottom-toolbar-presentation="overlay"]
|
|
353
|
+
> .kui-nav-stack__bottom.kui-nav-stack__chrome-copy--exiting {
|
|
354
|
+
opacity: 0;
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
.kui-nav-stack[data-chrome-material="clear"][data-scroll-edge]
|
|
358
|
+
> .kui-nav-stack__chrome.kui-nav-stack__chrome-copy::before,
|
|
359
|
+
.kui-nav-stack[data-bottom-toolbar-material="clear"][data-scroll-edge]
|
|
360
|
+
> .kui-nav-stack__bottom.kui-nav-stack__chrome-copy::before {
|
|
361
|
+
content: none;
|
|
362
|
+
}
|
|
363
|
+
|
|
294
364
|
/* `clear` chrome and bottom toolbar: overlay bars (the same measuring,
|
|
295
365
|
placement, and edge insets as above) that are fully transparent, for
|
|
296
366
|
chrome over imagery. With `scrollEdge="material"` a pseudo-element
|
|
@@ -521,7 +591,13 @@
|
|
|
521
591
|
.kui-nav-stack__view,
|
|
522
592
|
.kui-nav-stack__chrome,
|
|
523
593
|
.kui-nav-stack__bottom,
|
|
524
|
-
.kui-nav-stack__chrome-copy
|
|
594
|
+
.kui-nav-stack__chrome-copy,
|
|
595
|
+
.kui-nav-stack[data-chrome-presentation="overlay"]
|
|
596
|
+
> .kui-nav-stack__chrome
|
|
597
|
+
> *,
|
|
598
|
+
.kui-nav-stack[data-bottom-toolbar-presentation="overlay"]
|
|
599
|
+
> .kui-nav-stack__bottom
|
|
600
|
+
> * {
|
|
525
601
|
transition: none;
|
|
526
602
|
}
|
|
527
603
|
}
|
package/dist/styles/pane.css
CHANGED
|
@@ -45,10 +45,12 @@
|
|
|
45
45
|
root scroll in its short mode, while its content remains transparent. */
|
|
46
46
|
.kui-pane[data-appearance="sunken"] > .kui-pane__content {
|
|
47
47
|
background: var(--kui-sunken-panel-background, var(--kui-sunken-surface));
|
|
48
|
+
--kui-color-surface-current-region: var(--kui-color-surface-lowered);
|
|
48
49
|
}
|
|
49
50
|
|
|
50
51
|
.kui-pane[data-appearance="sunken"][data-chrome-placement="auto"] {
|
|
51
52
|
background: var(--kui-sunken-panel-background, var(--kui-sunken-surface));
|
|
53
|
+
--kui-color-surface-current-region: var(--kui-color-surface-lowered);
|
|
52
54
|
}
|
|
53
55
|
|
|
54
56
|
.kui-pane[data-appearance="sunken"][data-chrome-placement="auto"]
|
|
@@ -56,8 +58,15 @@
|
|
|
56
58
|
background: transparent;
|
|
57
59
|
}
|
|
58
60
|
|
|
61
|
+
/* The surface context follows the paint: the auto chrome is opaque again. */
|
|
59
62
|
.kui-pane[data-appearance="sunken"][data-chrome-placement="auto"]
|
|
60
63
|
> :is(.kui-pane__header, .kui-pane__footer) {
|
|
64
|
+
--kui-color-surface-current: var(
|
|
65
|
+
--kui-pane-chrome-background,
|
|
66
|
+
var(--kui-color-surface)
|
|
67
|
+
);
|
|
68
|
+
--kui-color-surface-current-region: transparent;
|
|
69
|
+
--kui-color-surface-current-tint: transparent;
|
|
61
70
|
background: var(--kui-pane-chrome-background, var(--kui-color-surface));
|
|
62
71
|
}
|
|
63
72
|
|
|
@@ -67,11 +76,16 @@
|
|
|
67
76
|
surface instead. */
|
|
68
77
|
.kui-pane[data-background] {
|
|
69
78
|
background: var(--_kui-pane-background);
|
|
79
|
+
--kui-color-surface-current-region: var(--_kui-pane-background);
|
|
70
80
|
}
|
|
71
81
|
|
|
82
|
+
/* The transparent slots keep the root's surface context. */
|
|
72
83
|
.kui-pane[data-background][data-appearance="sunken"] > .kui-pane__content,
|
|
73
84
|
.kui-pane[data-background][data-appearance="sunken"][data-chrome-placement="auto"]
|
|
74
85
|
> :is(.kui-pane__header, .kui-pane__footer) {
|
|
86
|
+
--kui-color-surface-current: inherit;
|
|
87
|
+
--kui-color-surface-current-region: inherit;
|
|
88
|
+
--kui-color-surface-current-tint: inherit;
|
|
75
89
|
background: transparent;
|
|
76
90
|
}
|
|
77
91
|
|
|
@@ -257,6 +271,16 @@
|
|
|
257
271
|
background: var(--kui-chrome-material);
|
|
258
272
|
}
|
|
259
273
|
|
|
274
|
+
/* The material has no single color over scrolling content; the surface
|
|
275
|
+
context takes it at rest, as a tint over the region it covers. A clear
|
|
276
|
+
header paints nothing and keeps the inherited context. */
|
|
277
|
+
.kui-pane[data-header-presentation="overlay"]:not(
|
|
278
|
+
[data-header-material="clear"]
|
|
279
|
+
)
|
|
280
|
+
> .kui-pane__header {
|
|
281
|
+
--kui-color-surface-current-tint: var(--kui-chrome-material);
|
|
282
|
+
}
|
|
283
|
+
|
|
260
284
|
.kui-pane[data-header-presentation="overlay"][data-header-overlay="measured"]:not(
|
|
261
285
|
[data-chrome-placement="auto"]
|
|
262
286
|
)
|
|
@@ -1,6 +1,9 @@
|
|
|
1
|
-
/* RadioGroup: the group label, the choices
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
/* RadioGroup: the group label, the choices (each a drawn circle beside its
|
|
2
|
+
label, the native radio invisibly over the circle), and hint and error text
|
|
3
|
+
below. Each circle sits on the group's inline-start edge, where a
|
|
4
|
+
Checkbox draws its box, so stacked checkboxes and radios share one control
|
|
5
|
+
column, and stacked choices sit 8px apart: the same 28px pitch as Checkboxes
|
|
6
|
+
in a List gap="xs". */
|
|
4
7
|
.kui-radio-group {
|
|
5
8
|
--_kui-radio-group-size: 1.25rem;
|
|
6
9
|
--_kui-radio-group-gap: 0.5rem;
|
|
@@ -36,8 +39,7 @@
|
|
|
36
39
|
.kui-radio-group__choices {
|
|
37
40
|
display: flex;
|
|
38
41
|
flex-direction: column;
|
|
39
|
-
gap:
|
|
40
|
-
padding-inline: var(--kui-layout-item-padding, 0.5rem);
|
|
42
|
+
gap: var(--kui-space-xs);
|
|
41
43
|
}
|
|
42
44
|
.kui-radio-group[data-orientation="horizontal"] .kui-radio-group__choices {
|
|
43
45
|
flex-direction: row;
|
package/dist/styles/select.css
CHANGED
|
@@ -67,8 +67,12 @@
|
|
|
67
67
|
outline-color: transparent;
|
|
68
68
|
}
|
|
69
69
|
/* Focus shows on the control (pointer or keyboard), but not while its
|
|
70
|
-
listbox is open: the listbox shows where focus is then.
|
|
71
|
-
|
|
70
|
+
listbox is open: the listbox shows where focus is then. A Select whose
|
|
71
|
+
enclosing group owns the ring (`focusRingOwner="group"`) never paints its
|
|
72
|
+
own here: the exclusion lives in this selector, not in a later override,
|
|
73
|
+
because the focus state outranks any plain owner rule. */
|
|
74
|
+
.kui-select:not([data-focus-ring-owner="group"]):not([open]):focus-within
|
|
75
|
+
> .kui-select__trigger {
|
|
72
76
|
outline: var(--kui-focus-ring);
|
|
73
77
|
outline-offset: 1px;
|
|
74
78
|
}
|
|
@@ -1,20 +1,32 @@
|
|
|
1
1
|
/* One loud semantic fill split into a primary half and a narrow options
|
|
2
2
|
trigger, with a hairline divider in the foreground color. Both halves are
|
|
3
|
-
native buttons on the shared fill; each brightens on its own hover.
|
|
3
|
+
native buttons on the shared fill; each brightens on its own hover. The
|
|
4
|
+
outer corners take the shared control radius, or full round ends as a
|
|
5
|
+
pill; the divider seam between the halves stays square. */
|
|
4
6
|
.kui-split-button {
|
|
5
7
|
--_kui-split-button-fill: var(--kui-color-brand-fill-loud);
|
|
6
8
|
--_kui-split-button-on: var(--kui-color-brand-on-loud);
|
|
9
|
+
--_kui-split-button-radius: var(
|
|
10
|
+
--kui-layout-rounded-radius,
|
|
11
|
+
calc(1px + 0.6875rem)
|
|
12
|
+
);
|
|
7
13
|
display: inline-grid;
|
|
8
14
|
min-width: 0;
|
|
9
15
|
min-height: 2.75rem;
|
|
10
|
-
|
|
11
|
-
border-radius: var(--kui-layout-rounded-radius, calc(1px + 0.6875rem));
|
|
16
|
+
border-radius: var(--_kui-split-button-radius);
|
|
12
17
|
color: var(--_kui-split-button-on);
|
|
13
18
|
background: var(--_kui-split-button-fill);
|
|
14
19
|
grid-template-columns: minmax(0, auto) 2.5rem;
|
|
15
20
|
font-weight: var(--kui-font-weight-semibold);
|
|
16
21
|
}
|
|
17
22
|
|
|
23
|
+
.kui-split-button[data-shape="pill"] {
|
|
24
|
+
--_kui-split-button-radius: var(
|
|
25
|
+
--kui-layout-pill-radius,
|
|
26
|
+
calc(1px + 1.3125rem)
|
|
27
|
+
);
|
|
28
|
+
}
|
|
29
|
+
|
|
18
30
|
.kui-split-button[data-tone="neutral"] {
|
|
19
31
|
--_kui-split-button-fill: var(--kui-color-neutral-fill-loud);
|
|
20
32
|
--_kui-split-button-on: var(--kui-color-neutral-on-loud);
|
|
@@ -50,6 +62,7 @@
|
|
|
50
62
|
padding-inline: var(--kui-space-s);
|
|
51
63
|
border: 0;
|
|
52
64
|
border-radius: 0;
|
|
65
|
+
appearance: none;
|
|
53
66
|
color: inherit;
|
|
54
67
|
background: transparent;
|
|
55
68
|
cursor: pointer;
|
|
@@ -69,11 +82,44 @@
|
|
|
69
82
|
background: color-mix(in srgb, currentColor 12%, transparent);
|
|
70
83
|
}
|
|
71
84
|
|
|
72
|
-
/*
|
|
73
|
-
|
|
85
|
+
/* Each half rounds its outer corners with the group, so its hover fill and
|
|
86
|
+
focus ring follow the rounded or pill end. The group does not clip, so
|
|
87
|
+
these radii are what keep a half's fill inside the group's corners. */
|
|
88
|
+
.kui-split-button > .kui-split-button__primary {
|
|
89
|
+
border-start-start-radius: var(--_kui-split-button-radius);
|
|
90
|
+
border-end-start-radius: var(--_kui-split-button-radius);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
.kui-split-button > .kui-split-button__options {
|
|
94
|
+
border-start-end-radius: var(--_kui-split-button-radius);
|
|
95
|
+
border-end-end-radius: var(--_kui-split-button-radius);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/* The ring sits outside the focused half, offset like Button's, so it is
|
|
99
|
+
drawn against the surrounding surface rather than the loud fill, whose
|
|
100
|
+
brand color can match the ring's own (an inset ring vanished there). The
|
|
101
|
+
segment along the divider overlaps the neighboring half, painted above it. */
|
|
102
|
+
.kui-split-button > button:focus {
|
|
103
|
+
outline: none;
|
|
104
|
+
}
|
|
105
|
+
|
|
74
106
|
.kui-split-button > button:focus-visible {
|
|
75
107
|
outline: var(--kui-focus-ring);
|
|
108
|
+
outline-offset: 1px;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/* focusRingInset: inside an ancestor that clips overflow, each half's ring
|
|
112
|
+
moves inside its box. The loud fill can share the ring's hue (brand), so a
|
|
113
|
+
surface-colored line runs inside the ring: the ring then meets the surface
|
|
114
|
+
on both edges, as the outside ring does, on every tone. The line runs 3px
|
|
115
|
+
past the ring, wide enough to stay solid at a fractional position. It
|
|
116
|
+
paints the surface context, as Button's does (foundation.css). */
|
|
117
|
+
.kui-split-button[data-focus-ring-inset="true"] > button:focus-visible {
|
|
76
118
|
outline-offset: -3px;
|
|
119
|
+
box-shadow:
|
|
120
|
+
inset 0 0 0 6px var(--kui-color-surface-current-tint, transparent),
|
|
121
|
+
inset 0 0 0 6px var(--kui-color-surface-current-region, transparent),
|
|
122
|
+
inset 0 0 0 6px var(--kui-color-surface-current, var(--kui-color-surface));
|
|
77
123
|
}
|
|
78
124
|
|
|
79
125
|
.kui-split-button > button:disabled {
|
package/dist/styles/styles.css
CHANGED
|
@@ -13,6 +13,9 @@
|
|
|
13
13
|
);
|
|
14
14
|
color: var(--kui-sunken-panel-foreground, var(--kui-color-text));
|
|
15
15
|
background: var(--kui-sunken-panel-background, var(--kui-sunken-surface));
|
|
16
|
+
/* The surface-context tint: an inset focus ring's line matches the lowered
|
|
17
|
+
color its controls sit on (foundation.css). */
|
|
18
|
+
--kui-color-surface-current-tint: var(--kui-color-surface-lowered);
|
|
16
19
|
flex-direction: column;
|
|
17
20
|
gap: var(--kui-sunken-panel-gap, 0.5rem);
|
|
18
21
|
}
|
|
@@ -29,6 +29,9 @@
|
|
|
29
29
|
color: var(--kui-color-text, inherit);
|
|
30
30
|
border: none;
|
|
31
31
|
border-radius: var(--_kui-dialog-surface-radius);
|
|
32
|
+
--kui-color-surface-current: var(--kui-color-surface-raised);
|
|
33
|
+
--kui-color-surface-current-region: transparent;
|
|
34
|
+
--kui-color-surface-current-tint: transparent;
|
|
32
35
|
background-color: var(--kui-color-surface-raised);
|
|
33
36
|
box-shadow: var(--kui-shadow-l);
|
|
34
37
|
/* Sizes apply at once: a theme's transition on bare dialog elements would
|
|
@@ -334,6 +337,8 @@ h2.kui-dialog-surface__title {
|
|
|
334
337
|
-webkit-backdrop-filter: var(--kui-chrome-material-filter);
|
|
335
338
|
backdrop-filter: var(--kui-chrome-material-filter);
|
|
336
339
|
background: var(--kui-chrome-material-raised);
|
|
340
|
+
/* The material's surface context at rest, over the raised panel. */
|
|
341
|
+
--kui-color-surface-current-tint: var(--kui-chrome-material-raised);
|
|
337
342
|
/* The divider is scroll state: the register publishes it only while
|
|
338
343
|
content is scrolled beneath the header. An inset shadow, so showing it
|
|
339
344
|
never moves the header or the content. */
|
|
@@ -637,6 +642,9 @@ h2.kui-dialog-surface__title {
|
|
|
637
642
|
var(--kui-layout-pill-radius, calc(1px + 1.3125rem)) +
|
|
638
643
|
var(--kui-wa-surface-inset, 0.5rem)
|
|
639
644
|
);
|
|
645
|
+
--kui-color-surface-current: var(--kui-color-surface-raised);
|
|
646
|
+
--kui-color-surface-current-region: transparent;
|
|
647
|
+
--kui-color-surface-current-tint: transparent;
|
|
640
648
|
background: var(--kui-color-surface-raised);
|
|
641
649
|
box-shadow: var(--kui-shadow-l);
|
|
642
650
|
}
|
package/dist/styles/switch.css
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
/* Switch: a track and thumb beside its label, with a hint
|
|
2
|
-
column. The native input sits
|
|
1
|
+
/* Switch: a track and thumb beside its label, with a hint directly under
|
|
2
|
+
the label on its column, as a Checkbox hint sits. The native input sits
|
|
3
|
+
invisibly over the track. */
|
|
3
4
|
.kui-switch {
|
|
4
5
|
--_kui-switch-height: 1.25rem;
|
|
5
6
|
--_kui-switch-gap: 0.5rem;
|
|
@@ -99,7 +100,6 @@
|
|
|
99
100
|
}
|
|
100
101
|
.kui-switch__hint {
|
|
101
102
|
display: block;
|
|
102
|
-
margin-block-start: 0.4375rem;
|
|
103
103
|
padding-inline-start: calc(
|
|
104
104
|
var(--_kui-switch-height) * 1.75 + var(--_kui-switch-gap)
|
|
105
105
|
);
|
package/dist/styles/tab-bar.css
CHANGED
|
@@ -38,6 +38,12 @@
|
|
|
38
38
|
--kui-tab-bar-strip-background,
|
|
39
39
|
var(--kui-tab-bar-background)
|
|
40
40
|
);
|
|
41
|
+
/* The surface context (foundation.css): the strip's fill is a tint over
|
|
42
|
+
whatever the bar sits on. */
|
|
43
|
+
--kui-color-surface-current-tint: var(
|
|
44
|
+
--kui-tab-bar-strip-background,
|
|
45
|
+
var(--kui-tab-bar-background)
|
|
46
|
+
);
|
|
41
47
|
scrollbar-width: none;
|
|
42
48
|
align-items: center;
|
|
43
49
|
flex: var(--kui-tab-bar-strip-flex, 1 1 auto);
|
|
@@ -53,6 +53,7 @@
|
|
|
53
53
|
|
|
54
54
|
.kui-tab-scaffold__scene[data-appearance="sunken"] {
|
|
55
55
|
background: var(--kui-sunken-panel-background, var(--kui-sunken-surface));
|
|
56
|
+
--kui-color-surface-current-region: var(--kui-color-surface-lowered);
|
|
56
57
|
}
|
|
57
58
|
|
|
58
59
|
/* `background`: the navigator's color paints the root and a docked bar (the
|
|
@@ -69,6 +70,13 @@
|
|
|
69
70
|
|
|
70
71
|
.kui-tab-scaffold__scene[data-background] {
|
|
71
72
|
background: var(--_kui-tab-scaffold-scene-background);
|
|
73
|
+
--kui-color-surface-current-region: var(--_kui-tab-scaffold-scene-background);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/* The navigator's color paints its root and a docked bar over whatever holds
|
|
77
|
+
the navigator: a region in the surface context. */
|
|
78
|
+
.kui-tab-scaffold[data-background] {
|
|
79
|
+
--kui-color-surface-current-region: var(--_kui-tab-scaffold-background);
|
|
72
80
|
}
|
|
73
81
|
|
|
74
82
|
@media (forced-colors: active) {
|
|
@@ -212,6 +220,15 @@
|
|
|
212
220
|
background: var(--kui-chrome-material);
|
|
213
221
|
}
|
|
214
222
|
|
|
223
|
+
/* The material's surface context at rest (see pane.css); a clear bar keeps
|
|
224
|
+
the inherited context. */
|
|
225
|
+
.kui-tab-scaffold[data-bar-presentation="overlay"]:not(
|
|
226
|
+
[data-bar-material="clear"]
|
|
227
|
+
)
|
|
228
|
+
> .kui-tab-scaffold__bar {
|
|
229
|
+
--kui-color-surface-current-tint: var(--kui-chrome-material);
|
|
230
|
+
}
|
|
231
|
+
|
|
215
232
|
.kui-tab-scaffold[data-bar-presentation="overlay"][data-bar-overlay="measured"] {
|
|
216
233
|
position: relative;
|
|
217
234
|
}
|
package/dist/styles/text.css
CHANGED
|
@@ -175,6 +175,16 @@ span.kui-text {
|
|
|
175
175
|
white-space: nowrap;
|
|
176
176
|
}
|
|
177
177
|
|
|
178
|
+
/* A wrapping header keeps the whole label: it breaks onto further lines
|
|
179
|
+
instead of ellipsizing, and `anywhere` lets a single long word break too, so
|
|
180
|
+
the label's minimum width never pushes the header past its column. */
|
|
181
|
+
.kui-list-header[data-wrap="true"] .kui-list-header__title > .kui-text {
|
|
182
|
+
overflow: visible;
|
|
183
|
+
overflow-wrap: anywhere;
|
|
184
|
+
text-overflow: clip;
|
|
185
|
+
white-space: normal;
|
|
186
|
+
}
|
|
187
|
+
|
|
178
188
|
.kui-list-header[data-size="xs"] .kui-list-header__title > .kui-text {
|
|
179
189
|
font-size: var(--kui-font-2xs);
|
|
180
190
|
text-transform: capitalize;
|
|
@@ -132,6 +132,31 @@
|
|
|
132
132
|
}
|
|
133
133
|
}
|
|
134
134
|
|
|
135
|
+
/* A sibling of an expanded trailing control yields to the trailing-priority
|
|
136
|
+
row the Toolbar moves that control onto: the same container queries and
|
|
137
|
+
responsiveAt keys as the Toolbar's own row (toolbar.css), so the group
|
|
138
|
+
hides exactly while the row is active and never wraps onto a third row at
|
|
139
|
+
a threshold restated with hideBelow. */
|
|
140
|
+
@container kui-toolbar (max-width: 52rem) {
|
|
141
|
+
.kui-toolbar[data-responsive="trailing-priority"][data-responsive-at="narrow"]
|
|
142
|
+
> .kui-toolbar__trailing:has(> [data-expanded="true"])
|
|
143
|
+
> .kui-toolbar-control-group[data-visibility="yield-to-priority-row"]:not(
|
|
144
|
+
[data-expanded="true"]
|
|
145
|
+
) {
|
|
146
|
+
display: none;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
@container kui-toolbar (max-width: 44rem) {
|
|
151
|
+
.kui-toolbar[data-responsive="trailing-priority"][data-responsive-at="compact"]
|
|
152
|
+
> .kui-toolbar__trailing:has(> [data-expanded="true"])
|
|
153
|
+
> .kui-toolbar-control-group[data-visibility="yield-to-priority-row"]:not(
|
|
154
|
+
[data-expanded="true"]
|
|
155
|
+
) {
|
|
156
|
+
display: none;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
|
|
135
160
|
/* `shape="rounded"` swaps the default pill radius for the design system's softer
|
|
136
161
|
rounded rectangle. The shared highlight contract derives every inner hover or
|
|
137
162
|
selected surface from this outer radius and the group's full inset. */
|
|
@@ -206,7 +231,10 @@
|
|
|
206
231
|
border-color 0.2s ease;
|
|
207
232
|
}
|
|
208
233
|
|
|
209
|
-
|
|
234
|
+
/* A fill search spans a content-sized group's line. A `sizing="grow"` group
|
|
235
|
+
keeps its own grow basis instead (below): taking the whole line would make
|
|
236
|
+
it the line's hypothetical size and wrap every sibling group. */
|
|
237
|
+
.kui-toolbar-control-group[data-content="search"]:not([data-sizing="grow"]):has(
|
|
210
238
|
> .kui-search-field[data-expanded="true"][data-fill="true"]
|
|
211
239
|
) {
|
|
212
240
|
width: 100%;
|
package/dist/styles/toolbar.css
CHANGED
|
@@ -16,6 +16,15 @@
|
|
|
16
16
|
font-family: var(--kui-font-sans);
|
|
17
17
|
}
|
|
18
18
|
|
|
19
|
+
/* In a List, a vertical stack, the toolbar is chrome and keeps its whole
|
|
20
|
+
natural height. Its explicit one-band min-height (below) replaces the flex
|
|
21
|
+
item's automatic content minimum, so a column shrinking toward a long
|
|
22
|
+
flex scroller beside it would otherwise squeeze a wrapped or stacked
|
|
23
|
+
toolbar onto its first row and clip the rest. */
|
|
24
|
+
.kui-list > .kui-toolbar {
|
|
25
|
+
flex-shrink: 0;
|
|
26
|
+
}
|
|
27
|
+
|
|
19
28
|
/* Safe areas: a toolbar compensates only for the inline edges its owner hands
|
|
20
29
|
it through `--kui-edge-inset-inline-*` (a Pane header or footer does), so its
|
|
21
30
|
box and dividers keep reaching the edge while its zones clear the unsafe
|
|
@@ -54,14 +54,19 @@
|
|
|
54
54
|
theme stylesheets build their shadows from this token, so an app that
|
|
55
55
|
layers one of them keeps kerf's scheme-aware shadow color. */
|
|
56
56
|
--wa-color-shadow: light-dark(rgb(0 0 0 / 0.14), rgb(0 0 0 / 0.5));
|
|
57
|
-
--
|
|
57
|
+
/* The brand tokens follow kerf's opt-in --kui-color-brand when the app
|
|
58
|
+
sets it (foundation.css derives the ramp); unset, the literals stand. */
|
|
59
|
+
--wa-color-focus: var(--_kui-brand-focus, light-dark(#007aff, #64d2ff));
|
|
58
60
|
/* Kerf-owned loud fills and on-loud text: every on-loud/fill-loud pair
|
|
59
61
|
clears WCAG AA (4.5:1) in both schemes. Light brand and danger keep
|
|
60
62
|
white text on a slightly deeper fill of the same hue (#0088ff ->
|
|
61
63
|
#0075db, #ff383c -> #eb0005); success keeps its bright green with dark
|
|
62
64
|
text, as warning already does; dark brand and danger keep their fills
|
|
63
65
|
with dark text. src/foundation.css mirrors these as fallbacks. */
|
|
64
|
-
--wa-color-brand-fill-loud:
|
|
66
|
+
--wa-color-brand-fill-loud: var(
|
|
67
|
+
--_kui-brand-fill-loud,
|
|
68
|
+
light-dark(#0075db, #64d2ff)
|
|
69
|
+
);
|
|
65
70
|
--wa-color-brand-fill-quiet: color-mix(
|
|
66
71
|
in srgb,
|
|
67
72
|
var(--wa-color-brand-fill-loud) 8%,
|
|
@@ -86,7 +91,10 @@
|
|
|
86
91
|
/* Kerf-owned light on-quiet values: darkened from Hot Sheet 2's hues so
|
|
87
92
|
they clear AA on the lowered page background (#f2f2f7) as well as on
|
|
88
93
|
the surface; src/foundation.css mirrors them as fallbacks. */
|
|
89
|
-
--wa-color-brand-on-quiet:
|
|
94
|
+
--wa-color-brand-on-quiet: var(
|
|
95
|
+
--_kui-brand-on-quiet,
|
|
96
|
+
light-dark(#0c62f3, #8acbff)
|
|
97
|
+
);
|
|
90
98
|
--wa-color-brand-on-normal: var(--wa-color-brand-on-quiet);
|
|
91
99
|
--wa-color-brand-on-loud: light-dark(#fff, #111113);
|
|
92
100
|
|
|
@@ -583,6 +591,7 @@
|
|
|
583
591
|
wa-number-input,
|
|
584
592
|
wa-radio-group,
|
|
585
593
|
wa-select,
|
|
594
|
+
wa-tag-input,
|
|
586
595
|
wa-textarea,
|
|
587
596
|
wa-time-input
|
|
588
597
|
):not([size="small"]) {
|
|
@@ -600,6 +609,7 @@
|
|
|
600
609
|
wa-number-input,
|
|
601
610
|
wa-radio-group,
|
|
602
611
|
wa-select,
|
|
612
|
+
wa-tag-input,
|
|
603
613
|
wa-textarea,
|
|
604
614
|
wa-time-input
|
|
605
615
|
)::part(form-control-label),
|
|
@@ -617,27 +627,46 @@
|
|
|
617
627
|
text-transform: uppercase;
|
|
618
628
|
}
|
|
619
629
|
|
|
620
|
-
/* Checkbox
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
630
|
+
/* Checkbox and radio groups and the color picker keep their control region
|
|
631
|
+
flush: each box, circle, or swatch trigger sits on the host's
|
|
632
|
+
inline-start edge, where a Kerf Checkbox, RadioGroup, or ColorField draws
|
|
633
|
+
it, while the label and hint stay on the 9px text column. The slider
|
|
634
|
+
alone insets its complete interactive region by the shared 8px. */
|
|
635
|
+
wa-slider::part(slider) {
|
|
625
636
|
margin-inline: var(--kui-layout-inline-margin, 0.5rem);
|
|
626
637
|
}
|
|
627
638
|
|
|
628
|
-
|
|
629
|
-
|
|
639
|
+
/* Stacked radios sit 8px apart (0.25em on each side at the 16px default)
|
|
640
|
+
instead of Web Awesome's 12px, the 28px pitch Kerf's RadioGroup and a
|
|
641
|
+
Checkbox List share. The first and last radio keep their flush outer
|
|
642
|
+
edges, and horizontal and button radios keep their own spacing. */
|
|
643
|
+
wa-radio[appearance="default"]:not(
|
|
644
|
+
[data-wa-radio-horizontal],
|
|
645
|
+
[data-wa-radio-first]
|
|
646
|
+
) {
|
|
647
|
+
margin-block-start: 0.25em;
|
|
648
|
+
}
|
|
649
|
+
|
|
650
|
+
wa-radio[appearance="default"]:not(
|
|
651
|
+
[data-wa-radio-horizontal],
|
|
652
|
+
[data-wa-radio-last]
|
|
653
|
+
) {
|
|
654
|
+
margin-block-end: 0.25em;
|
|
630
655
|
}
|
|
631
656
|
|
|
632
657
|
/* Secondary captions and hints align with the value inside bordered fields:
|
|
633
|
-
1px border + 8px field padding = a 9px logical inset.
|
|
658
|
+
1px border + 8px field padding = a 9px logical inset. Checkbox and radio
|
|
659
|
+
group hints share that text column with their group label. */
|
|
634
660
|
wa-known-date::part(field-label),
|
|
635
661
|
:is(
|
|
662
|
+
wa-checkbox-group,
|
|
636
663
|
wa-input,
|
|
637
664
|
wa-known-date,
|
|
638
665
|
wa-number-input,
|
|
639
666
|
wa-otp-input,
|
|
667
|
+
wa-radio-group,
|
|
640
668
|
wa-select,
|
|
669
|
+
wa-tag-input,
|
|
641
670
|
wa-textarea,
|
|
642
671
|
wa-time-input
|
|
643
672
|
)::part(hint) {
|
|
@@ -646,6 +675,21 @@
|
|
|
646
675
|
var(--wa-form-control-padding-inline)
|
|
647
676
|
);
|
|
648
677
|
}
|
|
678
|
+
|
|
679
|
+
/* An OTP input reserves its segments' focus-ring bleed with padding and an
|
|
680
|
+
equal negative margin, then caps the padded box at 100% of the host. In a
|
|
681
|
+
shrink-to-fit host (a start-aligned grid or flex item, an inline layout)
|
|
682
|
+
the host is only the segments' width minus that bleed, so the cap clips
|
|
683
|
+
the last cell's inline-end edge inside the scroll container. Cap the box
|
|
684
|
+
at the host's width plus the bleed instead, which is the space its
|
|
685
|
+
negative margins actually give it: the segments still scroll inside a
|
|
686
|
+
host narrower than the code, and never clip one that fits. The contained
|
|
687
|
+
appearance has no bleed and keeps upstream's cap. */
|
|
688
|
+
wa-otp-input:not([appearance="contained"])::part(segments) {
|
|
689
|
+
max-width: calc(
|
|
690
|
+
100% + 2 * (var(--wa-focus-ring-offset) + var(--wa-focus-ring-width))
|
|
691
|
+
);
|
|
692
|
+
}
|
|
649
693
|
}
|
|
650
694
|
|
|
651
695
|
/* Small Web Awesome fields have 14px hosts by default. Raise only the editable
|
|
@@ -653,7 +697,7 @@
|
|
|
653
697
|
their compact chrome and desktop typography keep their normal sizes. */
|
|
654
698
|
@media (hover: none) and (pointer: coarse) {
|
|
655
699
|
@layer wa-theme-overrides {
|
|
656
|
-
:is(wa-input, wa-number-input, wa-time-input):is(
|
|
700
|
+
:is(wa-input, wa-number-input, wa-tag-input, wa-time-input):is(
|
|
657
701
|
[size="xs"],
|
|
658
702
|
[size="s"],
|
|
659
703
|
[size="small"]
|
|
@@ -136,6 +136,7 @@
|
|
|
136
136
|
.kui-workbench__main[data-appearance="sunken"],
|
|
137
137
|
:is(.kui-workbench__rail, .kui-workbench__drawer)[data-appearance="sunken"] {
|
|
138
138
|
background: var(--kui-sunken-panel-background, var(--kui-sunken-surface));
|
|
139
|
+
--kui-color-surface-current-region: var(--kui-color-surface-lowered);
|
|
139
140
|
}
|
|
140
141
|
|
|
141
142
|
:is(
|
|
@@ -143,6 +144,8 @@
|
|
|
143
144
|
.kui-workbench__drawer
|
|
144
145
|
)[data-appearance="sunken"][data-resizable="true"][data-content-overflow="auto"] {
|
|
145
146
|
background: transparent;
|
|
147
|
+
/* Only the content paints; the root keeps the inherited context. */
|
|
148
|
+
--kui-color-surface-current-region: inherit;
|
|
146
149
|
}
|
|
147
150
|
|
|
148
151
|
:is(
|
|
@@ -151,6 +154,7 @@
|
|
|
151
154
|
)[data-appearance="sunken"][data-resizable="true"][data-content-overflow="auto"]
|
|
152
155
|
> .kui-workbench__panel-content {
|
|
153
156
|
background: var(--kui-sunken-panel-background, var(--kui-sunken-surface));
|
|
157
|
+
--kui-color-surface-current-region: var(--kui-color-surface-lowered);
|
|
154
158
|
}
|
|
155
159
|
|
|
156
160
|
.kui-workbench__main[data-drawer-inline-expanded="true"] {
|