@kerfjs/ui 5.0.0-beta.52 → 5.0.0-beta.54
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 +1 -0
- package/ai/application-ui-diagnostic-ids-v1.json +1 -0
- package/ai/component-catalog-v2.d.ts +3 -0
- package/ai/component-catalog-v2.json +85 -7
- package/ai/component-catalog-v2.schema.json +9 -1
- package/ai/component-catalog.json +108 -11
- package/ai/public-api-signatures-v1.md +215 -25
- package/ai/skill.md +23 -17
- package/ai/webawesome-jsx-signatures-v1.md +1 -1
- package/analyzer/index.mjs +48 -0
- package/analyzer/loud-pairs.d.mts +49 -0
- package/analyzer/loud-pairs.mjs +357 -0
- package/dist/app-tab.d.ts +7 -5
- package/dist/app-tab.js +1 -1
- package/dist/browser/segmented-control.js +0 -1
- package/dist/catalog.js +4 -4
- package/dist/{chunk-EKYZCRCX.js → chunk-3CGQ7ZNO.js} +54 -22
- package/dist/chunk-3CGQ7ZNO.js.map +1 -0
- package/dist/{chunk-7XJO4D6A.js → chunk-3NBL3OUQ.js} +2 -2
- package/dist/{chunk-7XJO4D6A.js.map → chunk-3NBL3OUQ.js.map} +1 -1
- package/dist/{chunk-2S7OWAEV.js → chunk-44IG7PFV.js} +3 -3
- package/dist/{chunk-2S7OWAEV.js.map → chunk-44IG7PFV.js.map} +1 -1
- package/dist/{chunk-UKKSMZYT.js → chunk-46263QLK.js} +51 -1
- package/dist/chunk-46263QLK.js.map +1 -0
- package/dist/{chunk-DNCOFEUL.js → chunk-5I22LMCV.js} +2 -2
- package/dist/{chunk-DNCOFEUL.js.map → chunk-5I22LMCV.js.map} +1 -1
- package/dist/{chunk-NDUGJ4TU.js → chunk-5NDQABWK.js} +1 -1
- package/dist/{chunk-NDUGJ4TU.js.map → chunk-5NDQABWK.js.map} +1 -1
- package/dist/{chunk-KAQUUTZR.js → chunk-ATHXW6RP.js} +2 -2
- package/dist/{chunk-KAQUUTZR.js.map → chunk-ATHXW6RP.js.map} +1 -1
- package/dist/{chunk-JGFZ42ZF.js → chunk-BJJKFVWW.js} +14 -5
- package/dist/chunk-BJJKFVWW.js.map +1 -0
- package/dist/{chunk-T7C2VZUB.js → chunk-C2FAYFDE.js} +2 -2
- package/dist/{chunk-T7C2VZUB.js.map → chunk-C2FAYFDE.js.map} +1 -1
- package/dist/{chunk-SV22UIW4.js → chunk-DQA5FMOX.js} +2 -2
- package/dist/{chunk-SV22UIW4.js.map → chunk-DQA5FMOX.js.map} +1 -1
- package/dist/{chunk-LIOXPQ7N.js → chunk-GUIHMIT2.js} +12 -10
- package/dist/chunk-GUIHMIT2.js.map +1 -0
- package/dist/{chunk-3S7OUHUN.js → chunk-KPNTVB7A.js} +9 -4
- package/dist/chunk-KPNTVB7A.js.map +1 -0
- package/dist/{chunk-IR53BQUJ.js → chunk-NE5JAOQS.js} +9 -9
- package/dist/chunk-NE5JAOQS.js.map +1 -0
- package/dist/chunk-PSHUSWQH.js +18 -0
- package/dist/chunk-PSHUSWQH.js.map +1 -0
- package/dist/{chunk-OSCL5TKR.js → chunk-RNZAKSME.js} +11 -8
- package/dist/chunk-RNZAKSME.js.map +1 -0
- package/dist/{chunk-ABAXNUXU.js → chunk-T22EM4ET.js} +7 -5
- package/dist/chunk-T22EM4ET.js.map +1 -0
- package/dist/{chunk-YZV2PTY4.js → chunk-TZ5IHWB2.js} +3 -3
- package/dist/{chunk-YZV2PTY4.js.map → chunk-TZ5IHWB2.js.map} +1 -1
- package/dist/{chunk-VOCPXGQN.js → chunk-VHADGP3B.js} +9 -8
- package/dist/chunk-VHADGP3B.js.map +1 -0
- package/dist/{chunk-2CE22Q2K.js → chunk-WZ2GLEY4.js} +2 -1
- package/dist/chunk-WZ2GLEY4.js.map +1 -0
- package/dist/{chunk-M6GLI6A6.js → chunk-X5QSICJ3.js} +5 -5
- package/dist/chunk-X5QSICJ3.js.map +1 -0
- package/dist/chunk-XQV2B4IL.js +14 -0
- package/dist/chunk-XQV2B4IL.js.map +1 -0
- package/dist/{chunk-4XE2CDYB.js → chunk-ZMBU522F.js} +2 -2
- package/dist/{chunk-4XE2CDYB.js.map → chunk-ZMBU522F.js.map} +1 -1
- package/dist/collapsible-panel.d.ts +6 -2
- package/dist/collapsible-panel.js +1 -0
- package/dist/collapsible-panel.js.map +1 -1
- package/dist/css-values.d.ts +1 -1
- package/dist/css-values.js +1 -1
- package/dist/floating-toolbar.d.ts +5 -2
- package/dist/floating-toolbar.js +1 -1
- package/dist/grid.js +1 -1
- package/dist/index.js +20 -19
- package/dist/list-action-row.d.ts +2 -1
- package/dist/list-action-row.js +1 -1
- package/dist/list-header.d.ts +1 -0
- package/dist/list-header.js +1 -1
- package/dist/list-item.d.ts +5 -3
- package/dist/list-item.js +1 -1
- package/dist/list.js +1 -1
- package/dist/nav-stack.js +1 -1
- package/dist/resizable-region.d.ts +4 -1
- package/dist/resizable-region.js +1 -1
- package/dist/row.js +1 -1
- package/dist/segmented-control.d.ts +1 -1
- package/dist/segmented-control.js +1 -3
- package/dist/select.js +1 -1
- package/dist/skeleton.js +1 -1
- package/dist/spacer.js +1 -1
- package/dist/split-view.js +2 -2
- package/dist/state-banner.d.ts +1 -1
- package/dist/state-banner.js +1 -1
- package/dist/styles/badge.css +17 -6
- package/dist/styles/collapsible-panel.css +89 -11
- package/dist/styles/floating-toolbar.css +11 -6
- package/dist/styles/foundation.css +82 -26
- package/dist/styles/list-action-row.css +29 -8
- package/dist/styles/list-header.css +19 -7
- package/dist/styles/list-item.css +11 -3
- package/dist/styles/resizable-region.css +82 -14
- package/dist/styles/segmented-control.css +21 -1
- package/dist/styles/select.css +24 -13
- package/dist/styles/skeleton.css +33 -2
- package/dist/styles/state-banner.css +48 -12
- package/dist/styles/webawesome.css +47 -20
- package/dist/styles/workbench.css +473 -11
- package/dist/toolbar-text.js +1 -1
- package/dist/value-table.js +1 -1
- package/dist/wire-resizable-regions.d.ts +2 -1
- package/dist/wire-resizable-regions.js +2 -1
- package/dist/wire-tab-bars.js +1 -1
- package/dist/wire-workbench.d.ts +109 -0
- package/dist/wire-workbench.js +355 -0
- package/dist/wire-workbench.js.map +1 -0
- package/dist/workbench.d.ts +65 -6
- package/dist/workbench.js +180 -76
- package/dist/workbench.js.map +1 -1
- package/docs/accessibility.md +54 -9
- package/docs/app-layouts.md +12 -1
- package/docs/collapsible-panel.md +59 -1
- package/docs/component-contract.md +76 -4
- package/docs/component-selection.md +16 -6
- package/docs/design/templates/empty-state/with-action-dark.svg +1 -1
- package/docs/design/templates/empty-state-dark.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/selected.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-header/action-dark.svg +1 -1
- package/docs/design/templates/list-header/action.svg +1 -1
- package/docs/design/templates/list-header/count-dark.svg +1 -1
- package/docs/design/templates/list-header/count.svg +1 -1
- package/docs/design/templates/list-header/inline-action-dark.svg +1 -1
- package/docs/design/templates/list-header/inline-action.svg +1 -1
- package/docs/design/templates/list-header/toggle-expanded-dark.svg +1 -1
- package/docs/design/templates/list-header/toggle-expanded.svg +1 -1
- package/docs/design/templates/list-header-dark.svg +1 -1
- package/docs/design/templates/list-header.svg +1 -1
- package/docs/design/templates/list-item/selected.svg +1 -1
- package/docs/design/templates/list-item.svg +1 -1
- package/docs/design/templates/list.svg +1 -1
- package/docs/design/templates/segmented-control/equal-dark.svg +1 -1
- package/docs/design/templates/segmented-control/equal.svg +1 -1
- package/docs/design/templates/segmented-control/pill-small-dark.svg +1 -1
- package/docs/design/templates/segmented-control/pill-small.svg +1 -1
- package/docs/design/templates/segmented-control-dark.svg +1 -1
- package/docs/design/templates/segmented-control.svg +1 -1
- package/docs/design/templates/state-banner/danger-dark.svg +1 -1
- package/docs/design/templates/state-banner/danger.svg +1 -1
- package/docs/design/templates/state-banner/info-badge-dark.svg +1 -1
- package/docs/design/templates/state-banner/info-badge.svg +1 -1
- package/docs/design/templates/state-banner/info-dark.svg +1 -1
- package/docs/design/templates/state-banner/info.svg +1 -1
- package/docs/design/templates/state-banner/success-dark.svg +1 -1
- package/docs/design/templates/state-banner/success.svg +1 -1
- package/docs/design/templates/state-banner/warning-dark.svg +1 -1
- package/docs/design/templates/state-banner/warning.svg +1 -1
- package/docs/design/templates/state-banner-dark.svg +1 -1
- package/docs/design/templates/state-banner.svg +1 -1
- package/docs/design/templates/tab-bar/workspace-tabs-dark.svg +1 -1
- package/docs/design/templates/tab-bar/workspace-tabs.svg +1 -1
- package/docs/design/templates/tab-bar-dark.svg +1 -1
- package/docs/design/templates/tab-bar.svg +1 -1
- package/docs/design/templates/token-search-field/tokens.svg +1 -1
- package/docs/design/templates/token-search-field.svg +1 -1
- package/docs/design/templates.md +11 -1
- package/docs/device-class.md +2 -1
- package/docs/document-baseline.md +4 -0
- package/docs/layout.md +5 -1
- package/docs/recipes.md +5 -3
- package/docs/type-contracts.md +2 -1
- package/docs/ui-analyzer.md +94 -19
- package/docs/ui-doctor.md +6 -0
- package/docs/ux-demo.md +2 -2
- package/docs/webawesome-theme.md +18 -2
- package/docs/workbench.md +302 -7
- package/llms.txt +14 -6
- package/package.json +5 -1
- package/ux-demo/recipes/collapsible-sidebar.tsx +8 -7
- package/ux-demo/recipes/loading-inspector.tsx +3 -2
- package/dist/chunk-2CE22Q2K.js.map +0 -1
- package/dist/chunk-3S7OUHUN.js.map +0 -1
- package/dist/chunk-ABAXNUXU.js.map +0 -1
- package/dist/chunk-EKYZCRCX.js.map +0 -1
- package/dist/chunk-IR53BQUJ.js.map +0 -1
- package/dist/chunk-JGFZ42ZF.js.map +0 -1
- package/dist/chunk-LIOXPQ7N.js.map +0 -1
- package/dist/chunk-M6GLI6A6.js.map +0 -1
- package/dist/chunk-OSCL5TKR.js.map +0 -1
- package/dist/chunk-UKKSMZYT.js.map +0 -1
- package/dist/chunk-VOCPXGQN.js.map +0 -1
package/README.md
CHANGED
|
@@ -203,6 +203,7 @@ interchangeable. `ListItem` and `ListActionRow` deliberately expose no raw
|
|
|
203
203
|
| `TabScaffold` | `@kerfjs/ui/tab-scaffold` | `@kerfjs/ui/tab-scaffold.css` |
|
|
204
204
|
| `wireTabScaffold` | `@kerfjs/ui/wire-tab-scaffold` | — |
|
|
205
205
|
| `Workbench` | `@kerfjs/ui/workbench` | `@kerfjs/ui/workbench.css` |
|
|
206
|
+
| `wireWorkbench` | `@kerfjs/ui/wire-workbench` | — |
|
|
206
207
|
| `CollapsiblePanel`, `CollapsiblePanelToggle` | `@kerfjs/ui/collapsible-panel` | `@kerfjs/ui/collapsible-panel.css` |
|
|
207
208
|
| `wireSidebar` | `@kerfjs/ui/wire-sidebar` | — |
|
|
208
209
|
| Content and navigation composition | — | `@kerfjs/ui/layout.css` |
|
|
@@ -49,6 +49,9 @@ export interface CatalogCompositionEntryV2 {
|
|
|
49
49
|
publicExports?: Array<{ name: string; subpath: string }>;
|
|
50
50
|
sourceLinks?: string[];
|
|
51
51
|
source: string;
|
|
52
|
+
/** For a wrapper component: the cataloged roots it renders (any one of
|
|
53
|
+
* them, or nothing). Composition checks treat its elements as each root. */
|
|
54
|
+
rendersAs?: CatalogQualifiedKey[];
|
|
52
55
|
parents: { mode: 'any' | 'root' | 'listed'; entries: CatalogQualifiedKey[] };
|
|
53
56
|
contexts: string[];
|
|
54
57
|
zones: Array<{
|
|
@@ -305,6 +305,7 @@
|
|
|
305
305
|
"--kui-color-danger-on-quiet",
|
|
306
306
|
"--kui-color-danger-on-normal",
|
|
307
307
|
"--kui-color-danger-on-loud",
|
|
308
|
+
"--kui-color-danger-on-fill",
|
|
308
309
|
"--kui-color-border",
|
|
309
310
|
"--kui-color-border-quiet",
|
|
310
311
|
"--kui-color-accent",
|
|
@@ -328,6 +329,64 @@
|
|
|
328
329
|
"composition": "generated-permissive-default"
|
|
329
330
|
}
|
|
330
331
|
},
|
|
332
|
+
{
|
|
333
|
+
"key": "@kerfjs/ui:document-baseline",
|
|
334
|
+
"package": "@kerfjs/ui",
|
|
335
|
+
"id": "document-baseline",
|
|
336
|
+
"name": "Document baseline",
|
|
337
|
+
"kind": "composition",
|
|
338
|
+
"source": "kerf",
|
|
339
|
+
"parents": { "mode": "any", "entries": [] },
|
|
340
|
+
"contexts": ["application-ui"],
|
|
341
|
+
"zones": [],
|
|
342
|
+
"children": { "mode": "any", "concepts": [], "requiredConcepts": [] },
|
|
343
|
+
"state": [
|
|
344
|
+
{
|
|
345
|
+
"id": "the one direct mount container",
|
|
346
|
+
"owner": "application",
|
|
347
|
+
"required": false
|
|
348
|
+
},
|
|
349
|
+
{
|
|
350
|
+
"id": "application overrides loaded after the baseline",
|
|
351
|
+
"owner": "application",
|
|
352
|
+
"required": false
|
|
353
|
+
}
|
|
354
|
+
],
|
|
355
|
+
"wiring": {
|
|
356
|
+
"required": false,
|
|
357
|
+
"helpers": [],
|
|
358
|
+
"obligations": [],
|
|
359
|
+
"stateAttributes": []
|
|
360
|
+
},
|
|
361
|
+
"responsive": { "owner": "not-applicable", "behaviors": [] },
|
|
362
|
+
"layout": {
|
|
363
|
+
"roles": ["foundation"],
|
|
364
|
+
"geometry": {
|
|
365
|
+
"margin": "none",
|
|
366
|
+
"border": "none",
|
|
367
|
+
"padding": "none",
|
|
368
|
+
"notes": [
|
|
369
|
+
"The body margin is removed; .kui-app-root only sets height: 100% and owns no inset."
|
|
370
|
+
]
|
|
371
|
+
}
|
|
372
|
+
},
|
|
373
|
+
"accessibility": {
|
|
374
|
+
"obligations": [
|
|
375
|
+
"Links keep the semantic link color at zero specificity so application focus and link styles still apply."
|
|
376
|
+
]
|
|
377
|
+
},
|
|
378
|
+
"cssValueProps": [],
|
|
379
|
+
"boundaries": {
|
|
380
|
+
"rootClass": "kui-app-root",
|
|
381
|
+
"publicClasses": ["kui-app-root"],
|
|
382
|
+
"publicTokens": []
|
|
383
|
+
},
|
|
384
|
+
"diagnostics": [],
|
|
385
|
+
"provenance": {
|
|
386
|
+
"selection": "ai/component-catalog.json",
|
|
387
|
+
"composition": "generated-permissive-default"
|
|
388
|
+
}
|
|
389
|
+
},
|
|
331
390
|
{
|
|
332
391
|
"key": "@kerfjs/ui:layout",
|
|
333
392
|
"package": "@kerfjs/ui",
|
|
@@ -886,9 +945,22 @@
|
|
|
886
945
|
],
|
|
887
946
|
"wiring": {
|
|
888
947
|
"required": false,
|
|
889
|
-
"helpers": [],
|
|
948
|
+
"helpers": ["wireWorkbench"],
|
|
890
949
|
"obligations": [],
|
|
891
|
-
"stateAttributes": [
|
|
950
|
+
"stateAttributes": [
|
|
951
|
+
{
|
|
952
|
+
"name": "data-handle-inset",
|
|
953
|
+
"on": "kui-workbench__rail",
|
|
954
|
+
"helper": "wireWorkbench",
|
|
955
|
+
"meaning": "Written by the shared resize wiring when the work-area minimum or a parent clamp holds a rail's maximum near its size. It carries no Workbench styling; the Workbench handle stays at the rail's inner edge."
|
|
956
|
+
},
|
|
957
|
+
{
|
|
958
|
+
"name": "data-resizing",
|
|
959
|
+
"on": "kui-workbench__rail",
|
|
960
|
+
"helper": "wireWorkbench",
|
|
961
|
+
"meaning": "Present on a resizable rail or the drawer while a pointer drag resizes it."
|
|
962
|
+
}
|
|
963
|
+
]
|
|
892
964
|
},
|
|
893
965
|
"responsive": { "owner": "not-applicable", "behaviors": [] },
|
|
894
966
|
"layout": {
|
|
@@ -905,7 +977,10 @@
|
|
|
905
977
|
"accessibility": {
|
|
906
978
|
"obligations": [
|
|
907
979
|
"Give the Workbench and each meaningful rail or drawer an accessible label.",
|
|
908
|
-
"Keep collapse controls outside the disappearing region and move focus when a controlled rerender replaces a collapse control with its restore control."
|
|
980
|
+
"Keep collapse controls outside the disappearing region and move focus when a controlled rerender replaces a collapse control with its restore control.",
|
|
981
|
+
"A resizable panel's separator is a focusable role=\"separator\" with its size in aria-valuenow and limits in aria-valuemin/aria-valuemax; arrow keys resize by 16px, Shift+arrow by 64px, and Home/End jump to the limits. It leaves the tab order while its panel is collapsed or not inline.",
|
|
982
|
+
"Given a panel's collapsed signal, wireWorkbench closes an open overlay panel on Escape or an outside press and, however the panel closed, returns focus stranded inside it to the control that opened it, else to its restore control.",
|
|
983
|
+
"An overlay panel can cover the toolbar toggle that opened it (a narrow right rail covers an editor toolbar's trailing toggle), so give every panel that may overlay its own close control in its header: a Pane header Toolbar with a single ToolbarControlGroup around the collapsiblePanelToggleIcon(side, false) button."
|
|
909
984
|
]
|
|
910
985
|
},
|
|
911
986
|
"cssValueProps": [],
|
|
@@ -920,6 +995,8 @@
|
|
|
920
995
|
"kui-workbench__center",
|
|
921
996
|
"kui-workbench__main",
|
|
922
997
|
"kui-workbench__panel-content",
|
|
998
|
+
"kui-workbench__handle",
|
|
999
|
+
"kui-workbench__handle-icon",
|
|
923
1000
|
"kui-workbench__restore"
|
|
924
1001
|
],
|
|
925
1002
|
"publicTokens": [
|
|
@@ -929,8 +1006,8 @@
|
|
|
929
1006
|
"--kui-workbench-overlay-z",
|
|
930
1007
|
"--kui-workbench-overlay-max-width",
|
|
931
1008
|
"--kui-workbench-overlay-max-height",
|
|
932
|
-
"--kui-workbench-restore-
|
|
933
|
-
"--kui-workbench-restore-
|
|
1009
|
+
"--kui-workbench-restore-inset",
|
|
1010
|
+
"--kui-workbench-restore-z"
|
|
934
1011
|
]
|
|
935
1012
|
},
|
|
936
1013
|
"diagnostics": [],
|
|
@@ -1034,8 +1111,8 @@
|
|
|
1034
1111
|
"--kui-collapsible-panel-height",
|
|
1035
1112
|
"--kui-collapsible-panel-popup-z",
|
|
1036
1113
|
"--kui-collapsible-panel-overlay-z",
|
|
1037
|
-
"--kui-collapsible-panel-restore-z",
|
|
1038
1114
|
"--kui-collapsible-panel-restore-inset",
|
|
1115
|
+
"--kui-collapsible-panel-restore-z",
|
|
1039
1116
|
"--kui-collapsible-panel-backdrop-z"
|
|
1040
1117
|
]
|
|
1041
1118
|
},
|
|
@@ -3091,10 +3168,11 @@
|
|
|
3091
3168
|
"--kui-color-pop-on-fill",
|
|
3092
3169
|
"--kui-color-danger-border-quiet",
|
|
3093
3170
|
"--kui-color-danger-fill-quiet",
|
|
3094
|
-
"--kui-color-danger-on-
|
|
3171
|
+
"--kui-color-danger-on-fill",
|
|
3095
3172
|
"--kui-color-neutral-border-normal",
|
|
3096
3173
|
"--kui-color-neutral-fill-quiet",
|
|
3097
3174
|
"--kui-color-neutral-on-normal",
|
|
3175
|
+
"--kui-color-neutral-on-quiet",
|
|
3098
3176
|
"--kui-color-success-border-normal",
|
|
3099
3177
|
"--kui-color-success-fill-quiet",
|
|
3100
3178
|
"--kui-color-success-on-fill",
|
|
@@ -137,10 +137,11 @@
|
|
|
137
137
|
"kind": { "enum": ["component", "composition", "recipe"] },
|
|
138
138
|
"purpose": { "type": "string", "minLength": 1 },
|
|
139
139
|
"publicExports": {
|
|
140
|
+
"description": "Each export's name and the package.json#exports subpath that serves it. An entry from a private application omits subpath: the application is bundled, never imported by package name, so the name resolves through the entry's source file.",
|
|
140
141
|
"type": "array",
|
|
141
142
|
"items": {
|
|
142
143
|
"type": "object",
|
|
143
|
-
"required": ["name"
|
|
144
|
+
"required": ["name"],
|
|
144
145
|
"properties": {
|
|
145
146
|
"name": { "type": "string", "minLength": 1 },
|
|
146
147
|
"subpath": { "type": "string", "pattern": "^\\." }
|
|
@@ -151,6 +152,13 @@
|
|
|
151
152
|
},
|
|
152
153
|
"sourceLinks": { "$ref": "#/$defs/stringList" },
|
|
153
154
|
"source": { "type": "string", "minLength": 1 },
|
|
155
|
+
"rendersAs": {
|
|
156
|
+
"description": "For a wrapper component: the cataloged roots it renders (package-qualified keys), any one of them or nothing. Composition checks treat an element of this entry as each declared root: a zone accepts it only if it accepts every root, and each root's parent contract applies to where it is placed.",
|
|
157
|
+
"type": "array",
|
|
158
|
+
"minItems": 1,
|
|
159
|
+
"items": { "type": "string", "pattern": "^[^:]+:[^:]+$" },
|
|
160
|
+
"uniqueItems": true
|
|
161
|
+
},
|
|
154
162
|
"parents": {
|
|
155
163
|
"type": "object",
|
|
156
164
|
"required": ["mode", "entries"],
|
|
@@ -330,6 +330,7 @@
|
|
|
330
330
|
"--kui-color-danger-on-quiet",
|
|
331
331
|
"--kui-color-danger-on-normal",
|
|
332
332
|
"--kui-color-danger-on-loud",
|
|
333
|
+
"--kui-color-danger-on-fill",
|
|
333
334
|
"--kui-color-border",
|
|
334
335
|
"--kui-color-border-quiet",
|
|
335
336
|
"--kui-color-accent",
|
|
@@ -352,6 +353,67 @@
|
|
|
352
353
|
"recipe": "docs/component-selection.md#foundation-tokens"
|
|
353
354
|
}
|
|
354
355
|
},
|
|
356
|
+
{
|
|
357
|
+
"id": "document-baseline",
|
|
358
|
+
"name": "Document baseline",
|
|
359
|
+
"category": "Foundation",
|
|
360
|
+
"kind": "composition",
|
|
361
|
+
"source": "kerf",
|
|
362
|
+
"description": "Opt-in document-level defaults: border-box sizing, body margin/font/surface, link color, and the html → body → .kui-app-root full-height chain.",
|
|
363
|
+
"uses": [],
|
|
364
|
+
"purpose": "Let an application opt into Kerf UI-owned document defaults and a definite full-height chain for a percentage-height application shell.",
|
|
365
|
+
"publicExports": [],
|
|
366
|
+
"useWhen": [
|
|
367
|
+
"An application wants Kerf UI to own document-level box sizing, body typography, surface, and link color.",
|
|
368
|
+
"A full-height shell (Workbench, SplitView, NavStack, or TabScaffold) mounts into one direct container: put .kui-app-root on that container."
|
|
369
|
+
],
|
|
370
|
+
"avoidWhen": [
|
|
371
|
+
"Do not put .kui-app-root on several sibling containers; each requests the full available document height.",
|
|
372
|
+
"Do not import it where the host page already owns document-level defaults it would override."
|
|
373
|
+
],
|
|
374
|
+
"alternatives": [
|
|
375
|
+
{
|
|
376
|
+
"id": "foundation",
|
|
377
|
+
"relationship": "composes-with",
|
|
378
|
+
"when": "Import the foundation tokens the baseline reads; the baseline itself adds only global document selectors."
|
|
379
|
+
}
|
|
380
|
+
],
|
|
381
|
+
"appOwns": [
|
|
382
|
+
"the one direct mount container",
|
|
383
|
+
"application overrides loaded after the baseline"
|
|
384
|
+
],
|
|
385
|
+
"variants": [
|
|
386
|
+
"document-flow page (no .kui-app-root)",
|
|
387
|
+
"full-height application root"
|
|
388
|
+
],
|
|
389
|
+
"accessibility": [
|
|
390
|
+
"Links keep the semantic link color at zero specificity so application focus and link styles still apply."
|
|
391
|
+
],
|
|
392
|
+
"geometry": {
|
|
393
|
+
"margin": "none",
|
|
394
|
+
"border": "none",
|
|
395
|
+
"padding": "none",
|
|
396
|
+
"notes": [
|
|
397
|
+
"The body margin is removed; .kui-app-root only sets height: 100% and owns no inset."
|
|
398
|
+
]
|
|
399
|
+
},
|
|
400
|
+
"delivery": {
|
|
401
|
+
"manualCssImport": "@kerfjs/ui/document.css",
|
|
402
|
+
"sideEffects": [
|
|
403
|
+
"css"
|
|
404
|
+
]
|
|
405
|
+
},
|
|
406
|
+
"wiring": [],
|
|
407
|
+
"publicClasses": [
|
|
408
|
+
"kui-app-root"
|
|
409
|
+
],
|
|
410
|
+
"publicTokens": [],
|
|
411
|
+
"links": {
|
|
412
|
+
"catalogRoute": "?component=document-baseline",
|
|
413
|
+
"documentation": "docs/document-baseline.md",
|
|
414
|
+
"recipe": "docs/document-baseline.md"
|
|
415
|
+
}
|
|
416
|
+
},
|
|
355
417
|
{
|
|
356
418
|
"id": "layout",
|
|
357
419
|
"name": "Application layout",
|
|
@@ -850,20 +912,24 @@
|
|
|
850
912
|
"category": "Structure",
|
|
851
913
|
"kind": "component",
|
|
852
914
|
"source": "kerf",
|
|
853
|
-
"description": "A desktop-class multi-panel workspace with independently collapsible left and right rails and a bottom drawer around one central work area.",
|
|
915
|
+
"description": "A desktop-class multi-panel workspace with independently collapsible, optionally drag-resizable left and right rails and a bottom drawer around one central work area.",
|
|
854
916
|
"uses": [],
|
|
855
917
|
"purpose": "Arrange a complex tool or editor as a stable central work area with optional peripheral rails and a bottom drawer.",
|
|
856
918
|
"publicExports": [
|
|
857
919
|
"Workbench",
|
|
858
920
|
"WorkbenchPanel",
|
|
859
|
-
"
|
|
921
|
+
"WorkbenchPanelResizable",
|
|
922
|
+
"WorkbenchProps",
|
|
923
|
+
"WorkbenchResponsiveOverlayAt"
|
|
860
924
|
],
|
|
861
925
|
"useWhen": [
|
|
862
|
-
"A desktop-class tool needs a central work area plus independently collapsible navigator, inspector, or console regions."
|
|
926
|
+
"A desktop-class tool needs a central work area plus independently collapsible navigator, inspector, or console regions.",
|
|
927
|
+
"A desktop-class tool should let people size its peripheral panels by dragging or with the keyboard; opt each panel in with resizable and wire it with wireWorkbench."
|
|
863
928
|
],
|
|
864
929
|
"avoidWhen": [
|
|
865
930
|
"Do not shrink the full multi-panel shell onto compact devices; present peripheral content through NavStack or overlay drawers instead.",
|
|
866
|
-
"Do not use Workbench for one standalone collapsible rail or drawer; use CollapsiblePanel."
|
|
931
|
+
"Do not use Workbench for one standalone collapsible rail or drawer; use CollapsiblePanel.",
|
|
932
|
+
"Do not offer resizing where rails present as compact overlay drawers or are replaced; set a panel's responsiveOverlayAt, or pass deviceClass so wireWorkbench suspends resizing on compact classes."
|
|
867
933
|
],
|
|
868
934
|
"alternatives": [
|
|
869
935
|
{
|
|
@@ -886,6 +952,10 @@
|
|
|
886
952
|
"bottom drawer",
|
|
887
953
|
"all panels",
|
|
888
954
|
"independently collapsed panels",
|
|
955
|
+
"opt-in drag and keyboard resizable panels with min/max limits",
|
|
956
|
+
"resizable rails that leave the work area a minimum width and shrink in proportion when the Workbench narrows",
|
|
957
|
+
"rails or a drawer that present as overlays below a narrow or compact Workbench container breakpoint",
|
|
958
|
+
"transient overlay panels wired with wireWorkbench: collapsed on entering the breakpoint, closed by Escape or an outside press",
|
|
889
959
|
"hidden separator",
|
|
890
960
|
"slide, fade-slide, or instant content",
|
|
891
961
|
"clipped, scrolling, or popup-visible content",
|
|
@@ -895,7 +965,10 @@
|
|
|
895
965
|
],
|
|
896
966
|
"accessibility": [
|
|
897
967
|
"Give the Workbench and each meaningful rail or drawer an accessible label.",
|
|
898
|
-
"Keep collapse controls outside the disappearing region and move focus when a controlled rerender replaces a collapse control with its restore control."
|
|
968
|
+
"Keep collapse controls outside the disappearing region and move focus when a controlled rerender replaces a collapse control with its restore control.",
|
|
969
|
+
"A resizable panel's separator is a focusable role=\"separator\" with its size in aria-valuenow and limits in aria-valuemin/aria-valuemax; arrow keys resize by 16px, Shift+arrow by 64px, and Home/End jump to the limits. It leaves the tab order while its panel is collapsed or not inline.",
|
|
970
|
+
"Given a panel's collapsed signal, wireWorkbench closes an open overlay panel on Escape or an outside press and, however the panel closed, returns focus stranded inside it to the control that opened it, else to its restore control.",
|
|
971
|
+
"An overlay panel can cover the toolbar toggle that opened it (a narrow right rail covers an editor toolbar's trailing toggle), so give every panel that may overlay its own close control in its header: a Pane header Toolbar with a single ToolbarControlGroup around the collapsiblePanelToggleIcon(side, false) button."
|
|
899
972
|
],
|
|
900
973
|
"geometry": {
|
|
901
974
|
"margin": "none",
|
|
@@ -912,7 +985,25 @@
|
|
|
912
985
|
"manual-css"
|
|
913
986
|
]
|
|
914
987
|
},
|
|
915
|
-
"wiring": [
|
|
988
|
+
"wiring": [
|
|
989
|
+
{
|
|
990
|
+
"export": "wireWorkbench",
|
|
991
|
+
"import": "@kerfjs/ui/wire-workbench",
|
|
992
|
+
"required": false,
|
|
993
|
+
"stateAttributes": [
|
|
994
|
+
{
|
|
995
|
+
"name": "data-handle-inset",
|
|
996
|
+
"on": "kui-workbench__rail",
|
|
997
|
+
"meaning": "Written by the shared resize wiring when the work-area minimum or a parent clamp holds a rail's maximum near its size. It carries no Workbench styling; the Workbench handle stays at the rail's inner edge."
|
|
998
|
+
},
|
|
999
|
+
{
|
|
1000
|
+
"name": "data-resizing",
|
|
1001
|
+
"on": "kui-workbench__rail",
|
|
1002
|
+
"meaning": "Present on a resizable rail or the drawer while a pointer drag resizes it."
|
|
1003
|
+
}
|
|
1004
|
+
]
|
|
1005
|
+
}
|
|
1006
|
+
],
|
|
916
1007
|
"publicClasses": [
|
|
917
1008
|
"kui-workbench",
|
|
918
1009
|
"kui-workbench__rail",
|
|
@@ -922,6 +1013,8 @@
|
|
|
922
1013
|
"kui-workbench__center",
|
|
923
1014
|
"kui-workbench__main",
|
|
924
1015
|
"kui-workbench__panel-content",
|
|
1016
|
+
"kui-workbench__handle",
|
|
1017
|
+
"kui-workbench__handle-icon",
|
|
925
1018
|
"kui-workbench__restore"
|
|
926
1019
|
],
|
|
927
1020
|
"publicTokens": [
|
|
@@ -931,8 +1024,8 @@
|
|
|
931
1024
|
"--kui-workbench-overlay-z",
|
|
932
1025
|
"--kui-workbench-overlay-max-width",
|
|
933
1026
|
"--kui-workbench-overlay-max-height",
|
|
934
|
-
"--kui-workbench-restore-
|
|
935
|
-
"--kui-workbench-restore-
|
|
1027
|
+
"--kui-workbench-restore-inset",
|
|
1028
|
+
"--kui-workbench-restore-z"
|
|
936
1029
|
],
|
|
937
1030
|
"links": {
|
|
938
1031
|
"catalogRoute": "?component=workbench",
|
|
@@ -1056,8 +1149,8 @@
|
|
|
1056
1149
|
"--kui-collapsible-panel-height",
|
|
1057
1150
|
"--kui-collapsible-panel-popup-z",
|
|
1058
1151
|
"--kui-collapsible-panel-overlay-z",
|
|
1059
|
-
"--kui-collapsible-panel-restore-z",
|
|
1060
1152
|
"--kui-collapsible-panel-restore-inset",
|
|
1153
|
+
"--kui-collapsible-panel-restore-z",
|
|
1061
1154
|
"--kui-collapsible-panel-backdrop-z"
|
|
1062
1155
|
],
|
|
1063
1156
|
"links": {
|
|
@@ -3491,7 +3584,10 @@
|
|
|
3491
3584
|
"canonicalShorthands": [],
|
|
3492
3585
|
"exceptionalShorthands": [],
|
|
3493
3586
|
"rawPolicy": "forbid",
|
|
3494
|
-
"examples": [
|
|
3587
|
+
"examples": [
|
|
3588
|
+
"color: uiColor(\"success-on-quiet\")",
|
|
3589
|
+
"color: foregroundColorVar(\"--app-choice-color\")"
|
|
3590
|
+
]
|
|
3495
3591
|
}
|
|
3496
3592
|
],
|
|
3497
3593
|
"useWhen": [
|
|
@@ -3741,10 +3837,11 @@
|
|
|
3741
3837
|
"--kui-color-pop-on-fill",
|
|
3742
3838
|
"--kui-color-danger-border-quiet",
|
|
3743
3839
|
"--kui-color-danger-fill-quiet",
|
|
3744
|
-
"--kui-color-danger-on-
|
|
3840
|
+
"--kui-color-danger-on-fill",
|
|
3745
3841
|
"--kui-color-neutral-border-normal",
|
|
3746
3842
|
"--kui-color-neutral-fill-quiet",
|
|
3747
3843
|
"--kui-color-neutral-on-normal",
|
|
3844
|
+
"--kui-color-neutral-on-quiet",
|
|
3748
3845
|
"--kui-color-success-border-normal",
|
|
3749
3846
|
"--kui-color-success-fill-quiet",
|
|
3750
3847
|
"--kui-color-success-on-fill",
|