@kerfjs/ui 5.0.0-beta.60 → 5.0.0-beta.62
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/component-catalog.json +141 -24
- package/ai/component-composition-rules.json +8 -0
- package/ai/component-composition.d.ts +10 -0
- package/ai/component-composition.json +117 -8
- package/ai/component-composition.schema.json +21 -0
- package/ai/components/README.md +5 -4
- package/ai/components/chip.md +72 -0
- package/ai/components/grid.md +10 -7
- package/ai/components/list-item.md +10 -7
- package/ai/components/pane.md +3 -2
- package/ai/components/select.md +6 -2
- package/ai/components/tabs.md +8 -4
- package/ai/components/toolbar-text.md +2 -1
- package/ai/components/toolbar.md +3 -2
- package/ai/public-api-signatures-v1.md +116 -24
- package/ai/skill.md +24 -4
- package/ai/webawesome-jsx-signatures-v1.md +1 -1
- package/dist/app-tab.d.ts +12 -2
- package/dist/app-tab.js +1 -1
- package/dist/browser/chip.js +3 -0
- package/dist/catalog.js +8 -8
- package/dist/chip.d.ts +29 -0
- package/dist/chip.js +3 -0
- package/dist/chip.js.map +1 -0
- package/dist/{chunk-WPLIO5WJ.js → chunk-4MG3KXJM.js} +40 -5
- package/dist/chunk-4MG3KXJM.js.map +1 -0
- package/dist/{chunk-F7F7KRO2.js → chunk-4SQK27MR.js} +33 -18
- package/dist/chunk-4SQK27MR.js.map +1 -0
- package/dist/chunk-EAC4CDY7.js +57 -0
- package/dist/chunk-EAC4CDY7.js.map +1 -0
- package/dist/{chunk-T57AXDFM.js → chunk-ENGVYQPG.js} +4 -3
- package/dist/chunk-ENGVYQPG.js.map +1 -0
- package/dist/{chunk-5PESG2VP.js → chunk-KYDDCJXU.js} +4 -3
- package/dist/chunk-KYDDCJXU.js.map +1 -0
- package/dist/{chunk-MERWRTBG.js → chunk-N2DRU35S.js} +1 -1
- package/dist/chunk-N2DRU35S.js.map +1 -0
- package/dist/{chunk-EZVNC4J6.js → chunk-OD2VXAPL.js} +4 -1
- package/dist/chunk-OD2VXAPL.js.map +1 -0
- package/dist/{chunk-T66UNBXL.js → chunk-Q6YU3BT7.js} +11 -2
- package/dist/chunk-Q6YU3BT7.js.map +1 -0
- package/dist/{chunk-N3GKMPDW.js → chunk-RKTTF3L4.js} +3 -1
- package/dist/chunk-RKTTF3L4.js.map +1 -0
- package/dist/chunk-SWVW56CV.js +188 -0
- package/dist/chunk-SWVW56CV.js.map +1 -0
- package/dist/{chunk-46263QLK.js → chunk-UA6JW52D.js} +53 -7
- package/dist/chunk-UA6JW52D.js.map +1 -0
- package/dist/{chunk-AGXQQFKZ.js → chunk-UCKKT6KO.js} +13 -4
- package/dist/chunk-UCKKT6KO.js.map +1 -0
- package/dist/{chunk-3SXMEK3B.js → chunk-V3DX3K65.js} +1 -1
- package/dist/chunk-V3DX3K65.js.map +1 -0
- package/dist/{chunk-UWONG4QE.js → chunk-VCBTX62E.js} +11 -3
- package/dist/chunk-VCBTX62E.js.map +1 -0
- package/dist/{chunk-2OXQHM7I.js → chunk-X6ADHJNI.js} +45 -20
- package/dist/chunk-X6ADHJNI.js.map +1 -0
- package/dist/collapsible-panel.js +2 -2
- package/dist/grid.d.ts +13 -5
- package/dist/grid.js +1 -1
- package/dist/index.d.ts +5 -4
- package/dist/index.js +17 -16
- package/dist/list-item.d.ts +11 -1
- package/dist/list-item.js +1 -1
- package/dist/nav-stack.d.ts +3 -1
- package/dist/nav-stack.js +1 -1
- package/dist/pane.d.ts +8 -3
- package/dist/pane.js +1 -1
- package/dist/popup-menu.d.ts +2 -2
- package/dist/popup-menu.js +1 -1
- package/dist/select-register.js +46 -0
- package/dist/select-register.js.map +1 -1
- package/dist/select.d.ts +16 -0
- package/dist/select.js +1 -1
- package/dist/split-view.d.ts +1 -1
- package/dist/split-view.js +1 -1
- package/dist/styles/app-tab.css +119 -0
- package/dist/styles/chip.css +118 -0
- package/dist/styles/grid.css +7 -0
- package/dist/styles/list-item.css +14 -9
- package/dist/styles/nav-stack.css +13 -0
- package/dist/styles/pane.css +33 -0
- package/dist/styles/popup-menu.css +2 -1
- package/dist/styles/resizable-region.css +9 -0
- package/dist/styles/segmented-control.css +2 -1
- package/dist/styles/select.css +45 -0
- package/dist/styles/split-view.css +6 -0
- package/dist/styles/styles.css +1 -0
- package/dist/styles/tab-bar.css +3 -0
- package/dist/styles/tab-scaffold.css +13 -0
- package/dist/styles/toolbar-text.css +15 -6
- package/dist/styles/toolbar.css +15 -5
- package/dist/styles/workbench.css +117 -93
- package/dist/tab-bar.d.ts +6 -2
- package/dist/tab-bar.js +1 -1
- package/dist/tab-scaffold.d.ts +3 -0
- package/dist/tab-scaffold.js +1 -0
- package/dist/tab-scaffold.js.map +1 -1
- package/dist/{token-search-field-CCke1yvQ.d.ts → token-search-field-DvgFLhLL.d.ts} +6 -2
- package/dist/token-search-field.d.ts +1 -1
- package/dist/token-search-model.d.ts +1 -1
- package/dist/token-search-model.js +1 -1
- package/dist/toolbar-text.d.ts +1 -1
- package/dist/toolbar-text.js +1 -1
- package/dist/toolbar.d.ts +2 -2
- package/dist/toolbar.js +1 -1
- package/dist/wire-catalog.js +1 -1
- package/dist/wire-tab-bars.js +1 -1
- package/dist/wire-token-search-fields.d.ts +1 -1
- package/dist/workbench.js +1 -1
- package/docs/accessibility.md +29 -3
- package/docs/collapsible-panel.md +4 -3
- package/docs/component-contract.md +5 -0
- package/docs/component-selection.md +92 -11
- 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/layout.md +51 -9
- package/docs/nav-stack.md +5 -0
- package/docs/split-view.md +5 -0
- package/docs/sunken-panel.md +12 -0
- package/docs/tab-scaffold.md +5 -0
- package/docs/webawesome-theme.md +62 -0
- package/docs/workbench.md +22 -10
- package/llms.txt +40 -8
- package/package.json +7 -1
- package/dist/chunk-2OXQHM7I.js.map +0 -1
- package/dist/chunk-3SXMEK3B.js.map +0 -1
- package/dist/chunk-46263QLK.js.map +0 -1
- package/dist/chunk-5I7OHCIP.js +0 -96
- package/dist/chunk-5I7OHCIP.js.map +0 -1
- package/dist/chunk-5PESG2VP.js.map +0 -1
- package/dist/chunk-AGXQQFKZ.js.map +0 -1
- package/dist/chunk-EZVNC4J6.js.map +0 -1
- package/dist/chunk-F7F7KRO2.js.map +0 -1
- package/dist/chunk-MERWRTBG.js.map +0 -1
- package/dist/chunk-N3GKMPDW.js.map +0 -1
- package/dist/chunk-T57AXDFM.js.map +0 -1
- package/dist/chunk-T66UNBXL.js.map +0 -1
- package/dist/chunk-UWONG4QE.js.map +0 -1
- package/dist/chunk-WPLIO5WJ.js.map +0 -1
package/README.md
CHANGED
|
@@ -181,6 +181,7 @@ interchangeable. `ListItem` and `ListActionRow` deliberately expose no raw
|
|
|
181
181
|
| ------------------------------------------------------------------- | --------------------------------------- | -------------------------------------- |
|
|
182
182
|
| `LucideIcon` | `@kerfjs/ui/lucide-icon` | `@kerfjs/ui/lucide-icon.css` |
|
|
183
183
|
| `Badge` | `@kerfjs/ui/badge` | `@kerfjs/ui/badge.css` |
|
|
184
|
+
| `Chip` | `@kerfjs/ui/chip` | `@kerfjs/ui/chip.css` |
|
|
184
185
|
| `DisclosureArrow` | `@kerfjs/ui/disclosure-arrow` | `@kerfjs/ui/disclosure-arrow.css` |
|
|
185
186
|
| `Toolbar` | `@kerfjs/ui/toolbar` | `@kerfjs/ui/toolbar.css` |
|
|
186
187
|
| `ToolbarControlGroup`, `ToolbarActionLink` | `@kerfjs/ui/toolbar-control-group` | `@kerfjs/ui/toolbar-control-group.css` |
|
|
@@ -63,6 +63,65 @@
|
|
|
63
63
|
"recipe": "docs/component-selection.md#problem-to-component-matrix"
|
|
64
64
|
}
|
|
65
65
|
},
|
|
66
|
+
{
|
|
67
|
+
"id": "chip",
|
|
68
|
+
"name": "Chip",
|
|
69
|
+
"category": "Foundation",
|
|
70
|
+
"kind": "component",
|
|
71
|
+
"source": "kerf",
|
|
72
|
+
"description": "A short tag with semantic tone and an optional accessible remove button, including compact and disabled variants.",
|
|
73
|
+
"uses": [],
|
|
74
|
+
"purpose": "Render removable tags without application rules on Web Awesome internals.",
|
|
75
|
+
"publicExports": [
|
|
76
|
+
"Chip"
|
|
77
|
+
],
|
|
78
|
+
"useWhen": [
|
|
79
|
+
"Show a short tag that the application can remove through a delegated action, including a compact or disabled tag."
|
|
80
|
+
],
|
|
81
|
+
"avoidWhen": [
|
|
82
|
+
"Use Badge for non-interactive status and count metadata.",
|
|
83
|
+
"Do not use the remove button without a specific accessible name."
|
|
84
|
+
],
|
|
85
|
+
"alternatives": [],
|
|
86
|
+
"appOwns": [
|
|
87
|
+
"tag text and identity",
|
|
88
|
+
"remove action and list update",
|
|
89
|
+
"disabled policy"
|
|
90
|
+
],
|
|
91
|
+
"variants": [
|
|
92
|
+
"neutral, brand, pop, success, warning, or danger tone",
|
|
93
|
+
"quiet, solid, or outline appearance",
|
|
94
|
+
"pill or rounded shape",
|
|
95
|
+
"compact or default size",
|
|
96
|
+
"removable or plain, enabled or disabled"
|
|
97
|
+
],
|
|
98
|
+
"accessibility": [
|
|
99
|
+
"The remove control is a native button and requires an action and a specific removeLabel. A disabled chip disables that button and removes it from keyboard interaction.",
|
|
100
|
+
"Keep meaningful tag text visible because tone is supplementary."
|
|
101
|
+
],
|
|
102
|
+
"geometry": {
|
|
103
|
+
"margin": "none",
|
|
104
|
+
"border": "self",
|
|
105
|
+
"padding": "self"
|
|
106
|
+
},
|
|
107
|
+
"delivery": {
|
|
108
|
+
"browserImport": "@kerfjs/ui/chip",
|
|
109
|
+
"manualCssImport": "@kerfjs/ui/chip.css",
|
|
110
|
+
"sideEffects": [
|
|
111
|
+
"browser-condition-css"
|
|
112
|
+
]
|
|
113
|
+
},
|
|
114
|
+
"wiring": [],
|
|
115
|
+
"publicClasses": [
|
|
116
|
+
"kui-chip"
|
|
117
|
+
],
|
|
118
|
+
"publicTokens": [],
|
|
119
|
+
"links": {
|
|
120
|
+
"catalogRoute": "?component=chip",
|
|
121
|
+
"documentation": "docs/component-selection.md",
|
|
122
|
+
"recipe": "docs/component-selection.md#problem-to-component-matrix"
|
|
123
|
+
}
|
|
124
|
+
},
|
|
66
125
|
{
|
|
67
126
|
"id": "lucide-icon",
|
|
68
127
|
"name": "LucideIcon",
|
|
@@ -523,7 +582,8 @@
|
|
|
523
582
|
"useWhen": [
|
|
524
583
|
"An application column needs shared header, content, and optional footer organization with exactly one scrolling content owner.",
|
|
525
584
|
"A pane boundary needs an opt-in separator on any combination of logical sides.",
|
|
526
|
-
"Pinned chrome needs a divider from the scrolling content only while content is scrolled beneath it (wireScrollDividers)."
|
|
585
|
+
"Pinned chrome needs a divider from the scrolling content only while content is scrolled beneath it (wireScrollDividers).",
|
|
586
|
+
"A lowered background must cover the scrolling work viewport and blank space after short content without a second scroll container (appearance: sunken)."
|
|
527
587
|
],
|
|
528
588
|
"avoidWhen": [
|
|
529
589
|
"Do not use Pane as a padded card or add a competing scroll owner around its content slot.",
|
|
@@ -543,7 +603,8 @@
|
|
|
543
603
|
"which logical boundaries show separators",
|
|
544
604
|
"which sides may compensate for device safe areas in an app-owned arrangement (safeAreaEdges)",
|
|
545
605
|
"responsive placement and visibility",
|
|
546
|
-
"whether the chrome dividers follow the scroll, always show, or never show (chromeDividers)"
|
|
606
|
+
"whether the chrome dividers follow the scroll, always show, or never show (chromeDividers)",
|
|
607
|
+
"default or sunken scrolling work surface (appearance)"
|
|
547
608
|
],
|
|
548
609
|
"variants": [
|
|
549
610
|
"content only",
|
|
@@ -608,7 +669,9 @@
|
|
|
608
669
|
"--kui-edge-inset-inline-end",
|
|
609
670
|
"--kui-edge-inset-inline-start",
|
|
610
671
|
"--kui-pane-separator-color",
|
|
611
|
-
"--kui-pane-separator-width"
|
|
672
|
+
"--kui-pane-separator-width",
|
|
673
|
+
"--kui-pane-chrome-background",
|
|
674
|
+
"--kui-sunken-panel-background"
|
|
612
675
|
],
|
|
613
676
|
"links": {
|
|
614
677
|
"catalogRoute": "?component=pane",
|
|
@@ -1422,6 +1485,7 @@
|
|
|
1422
1485
|
"center priority for an expanded center control",
|
|
1423
1486
|
"trailing priority for an expanded trailing control at compact or narrow widths",
|
|
1424
1487
|
"trailing groups wrap instead of clipping",
|
|
1488
|
+
"outer inset independently configurable from zone gap",
|
|
1425
1489
|
"app bar or bottom bar claiming its screen edges (safeAreaEdges)"
|
|
1426
1490
|
],
|
|
1427
1491
|
"accessibility": [
|
|
@@ -1432,7 +1496,7 @@
|
|
|
1432
1496
|
"border": "conditional",
|
|
1433
1497
|
"padding": "self",
|
|
1434
1498
|
"notes": [
|
|
1435
|
-
"Padding belongs to the toolbar; dividerSides selects any canonical combination of its physical top, right, bottom, and left edges.",
|
|
1499
|
+
"Padding belongs to the toolbar; --kui-toolbar-inset controls outer padding and minimum height independently of --kui-toolbar-gap. dividerSides selects any canonical combination of its physical top, right, bottom, and left edges.",
|
|
1436
1500
|
"Safe areas: a Pane header or footer hands a sole Toolbar its inline edges; an app bar or bottom bar at a screen edge claims its sides with safeAreaEdges and pads each claimed side by the --kui-edge-inset-* context or the full device inset, while its box and dividers paint through."
|
|
1437
1501
|
]
|
|
1438
1502
|
},
|
|
@@ -1473,6 +1537,7 @@
|
|
|
1473
1537
|
"--kui-font-sans",
|
|
1474
1538
|
"--kui-toolbar-center-padding-inline",
|
|
1475
1539
|
"--kui-toolbar-divider-color",
|
|
1540
|
+
"--kui-toolbar-inset",
|
|
1476
1541
|
"--kui-toolbar-leading-min-width",
|
|
1477
1542
|
"--kui-toolbar-leading-padding-inline",
|
|
1478
1543
|
"--kui-toolbar-trailing-gap",
|
|
@@ -1789,7 +1854,7 @@
|
|
|
1789
1854
|
],
|
|
1790
1855
|
"avoidWhen": [
|
|
1791
1856
|
"Do not omit headingLevel when the text is the page or section heading.",
|
|
1792
|
-
"
|
|
1857
|
+
"Large, default, and small are intentionally quiet toolbar identity text and have no tone option. Use xlarge-fixed for a normal-color toolbar heading at the fixed font-l step; use Text with an h2-h6 variant for a content subsection title, or ListHeader for a list or menu section."
|
|
1793
1858
|
],
|
|
1794
1859
|
"alternatives": [
|
|
1795
1860
|
{
|
|
@@ -1809,6 +1874,7 @@
|
|
|
1809
1874
|
],
|
|
1810
1875
|
"variants": [
|
|
1811
1876
|
"xlarge",
|
|
1877
|
+
"xlarge-fixed (fixed font-l heading)",
|
|
1812
1878
|
"large",
|
|
1813
1879
|
"default",
|
|
1814
1880
|
"small",
|
|
@@ -2224,13 +2290,36 @@
|
|
|
2224
2290
|
"category": "Structure",
|
|
2225
2291
|
"kind": "component",
|
|
2226
2292
|
"source": "kerf",
|
|
2227
|
-
"description": "
|
|
2293
|
+
"description": "Equal-width columns with a fixed count or a minimum-width responsive mode, typed gaps, and optional flex participation.",
|
|
2228
2294
|
"uses": [],
|
|
2229
|
-
"purpose": "Arrange related siblings in equal-width columns
|
|
2295
|
+
"purpose": "Arrange related siblings in equal-width columns with either a fixed count or automatic container-width collapse.",
|
|
2230
2296
|
"publicExports": [
|
|
2231
2297
|
"Grid"
|
|
2232
2298
|
],
|
|
2233
2299
|
"cssValueProps": [
|
|
2300
|
+
{
|
|
2301
|
+
"path": "minColumnWidth",
|
|
2302
|
+
"grammar": "length",
|
|
2303
|
+
"helpers": [
|
|
2304
|
+
"px",
|
|
2305
|
+
"rem",
|
|
2306
|
+
"em",
|
|
2307
|
+
"pct",
|
|
2308
|
+
"space",
|
|
2309
|
+
"lengthVar",
|
|
2310
|
+
"calc"
|
|
2311
|
+
],
|
|
2312
|
+
"nonStandaloneHelpers": [
|
|
2313
|
+
"plus"
|
|
2314
|
+
],
|
|
2315
|
+
"shorthands": [],
|
|
2316
|
+
"canonicalShorthands": [],
|
|
2317
|
+
"exceptionalShorthands": [],
|
|
2318
|
+
"rawPolicy": "forbid",
|
|
2319
|
+
"examples": [
|
|
2320
|
+
"minColumnWidth={px(376)}"
|
|
2321
|
+
]
|
|
2322
|
+
},
|
|
2234
2323
|
{
|
|
2235
2324
|
"path": "gap",
|
|
2236
2325
|
"grammar": "length",
|
|
@@ -2300,13 +2389,14 @@
|
|
|
2300
2389
|
],
|
|
2301
2390
|
"useWhen": [
|
|
2302
2391
|
"Arrange related siblings into a fixed positive number of equal-width columns.",
|
|
2392
|
+
"Fit equal-width columns down to a typed minimum and collapse as the container narrows.",
|
|
2303
2393
|
"Prevent wider intrinsic content from making one fractional track wider than its peers.",
|
|
2304
2394
|
"Use a finite flex keyword or the flex() builder when Grid participates in a flexible parent layout."
|
|
2305
2395
|
],
|
|
2306
2396
|
"avoidWhen": [
|
|
2307
|
-
"Do not use Grid for intrinsic, asymmetric, spanning,
|
|
2397
|
+
"Do not use Grid for intrinsic, asymmetric, spanning, or masonry tracks; use application-owned CSS grid.",
|
|
2308
2398
|
"Do not use Grid when columns need a user-operable separator; use ResizableRegion.",
|
|
2309
|
-
"Do not
|
|
2399
|
+
"Do not combine fixed columns with minColumnWidth; choose one layout mode.",
|
|
2310
2400
|
"Do not pass raw CSS strings to gap or flex, mix their distinct grammars, or use s/xl spacing steps without a deliberate exception."
|
|
2311
2401
|
],
|
|
2312
2402
|
"alternatives": [
|
|
@@ -2328,11 +2418,12 @@
|
|
|
2328
2418
|
],
|
|
2329
2419
|
"appOwns": [
|
|
2330
2420
|
"child semantics and content",
|
|
2331
|
-
"column count
|
|
2421
|
+
"fixed column count or responsive minimum width",
|
|
2332
2422
|
"typed gap and flex choices"
|
|
2333
2423
|
],
|
|
2334
2424
|
"variants": [
|
|
2335
2425
|
"any positive safe-integer equal-track count",
|
|
2426
|
+
"typed minimum column width with automatic container-width collapse",
|
|
2336
2427
|
"named none/2xs/xs/s/m/l/xl token gap",
|
|
2337
2428
|
"typed CssLength gap",
|
|
2338
2429
|
"boolean, finite-keyword, or typed CssFlex flex",
|
|
@@ -2341,14 +2432,14 @@
|
|
|
2341
2432
|
],
|
|
2342
2433
|
"accessibility": [
|
|
2343
2434
|
"Grid adds layout only and no grid role; children retain responsibility for native or ARIA semantics.",
|
|
2344
|
-
"Responsive column-count changes
|
|
2435
|
+
"Responsive column-count changes preserve source and focus order."
|
|
2345
2436
|
],
|
|
2346
2437
|
"geometry": {
|
|
2347
2438
|
"margin": "none",
|
|
2348
2439
|
"border": "none",
|
|
2349
2440
|
"padding": "none",
|
|
2350
2441
|
"notes": [
|
|
2351
|
-
"
|
|
2442
|
+
"Fixed tracks use minmax(0, 1fr); responsive tracks use auto-fit with a minimum width capped at 100%, preserving equal distribution without narrow overflow."
|
|
2352
2443
|
]
|
|
2353
2444
|
},
|
|
2354
2445
|
"delivery": {
|
|
@@ -2941,14 +3032,15 @@
|
|
|
2941
3032
|
"category": "Navigation",
|
|
2942
3033
|
"kind": "component",
|
|
2943
3034
|
"source": "kerf",
|
|
2944
|
-
"description": "Configurable native-button navigation rows with structured labels, status/busy metadata, density, group dividers, protected domain metadata hooks, and rounded-boundary overflow clipping.",
|
|
3035
|
+
"description": "Configurable native-button action rows and native-anchor navigation rows with structured labels, status/busy metadata, density, group dividers, protected domain metadata hooks, and rounded-boundary overflow clipping.",
|
|
2945
3036
|
"uses": [
|
|
2946
3037
|
"lucide-icon",
|
|
2947
3038
|
"loading-spinner"
|
|
2948
3039
|
],
|
|
2949
|
-
"purpose": "Selectable, disabled, trailing, and multiline
|
|
3040
|
+
"purpose": "Selectable, disabled, trailing, and multiline action or link rows.",
|
|
2950
3041
|
"publicExports": [
|
|
2951
|
-
"ListItem"
|
|
3042
|
+
"ListItem",
|
|
3043
|
+
"ListItemLink"
|
|
2952
3044
|
],
|
|
2953
3045
|
"cssValueProps": [
|
|
2954
3046
|
{
|
|
@@ -2965,7 +3057,7 @@
|
|
|
2965
3057
|
}
|
|
2966
3058
|
],
|
|
2967
3059
|
"useWhen": [
|
|
2968
|
-
"Render a selectable, disabled, trailing, or multiline sidebar
|
|
3060
|
+
"Render a selectable, disabled, trailing, or multiline sidebar action row whose descendants must remain clipped to the rounded row boundary; use ListItemLink when the destination has an href and needs native link activation."
|
|
2969
3061
|
],
|
|
2970
3062
|
"avoidWhen": [
|
|
2971
3063
|
"Do not use for an ordinary inline link, form button, isolated ARIA menuitem, or an interactive trailing action; use ListActionRow for sibling row actions.",
|
|
@@ -2980,12 +3072,14 @@
|
|
|
2980
3072
|
],
|
|
2981
3073
|
"appOwns": [
|
|
2982
3074
|
"routing",
|
|
3075
|
+
"link destinations",
|
|
2983
3076
|
"selection",
|
|
2984
3077
|
"permissions",
|
|
2985
3078
|
"action handling",
|
|
2986
3079
|
"domain data attributes"
|
|
2987
3080
|
],
|
|
2988
3081
|
"variants": [
|
|
3082
|
+
"native link and external link",
|
|
2989
3083
|
"selected",
|
|
2990
3084
|
"pressed",
|
|
2991
3085
|
"disabled",
|
|
@@ -3001,12 +3095,15 @@
|
|
|
3001
3095
|
"before, after, or paired group divider"
|
|
3002
3096
|
],
|
|
3003
3097
|
"accessibility": [
|
|
3004
|
-
"
|
|
3098
|
+
"ListItem uses native button activation and pressed maps to aria-pressed; ListItemLink uses native anchor activation and external opens a new tab with safe rel and an announced default label. Both map selected to aria-current; disabled or loading links omit href and leave the tab order. rootAttributes cannot add role=menuitem or replace owned ARIA; trailing is dormant content and must not contain controls."
|
|
3005
3099
|
],
|
|
3006
3100
|
"geometry": {
|
|
3007
3101
|
"margin": "self",
|
|
3008
3102
|
"border": "self",
|
|
3009
|
-
"padding": "self"
|
|
3103
|
+
"padding": "self",
|
|
3104
|
+
"notes": [
|
|
3105
|
+
"Public resting background and border, hover border, and selected border tokens can be scoped to a row or its containing list without changing the default tones."
|
|
3106
|
+
]
|
|
3010
3107
|
},
|
|
3011
3108
|
"delivery": {
|
|
3012
3109
|
"browserImport": "@kerfjs/ui/list-item",
|
|
@@ -3027,22 +3124,27 @@
|
|
|
3027
3124
|
],
|
|
3028
3125
|
"publicTokens": [
|
|
3029
3126
|
"--kui-color-brand-border-normal",
|
|
3127
|
+
"--kui-color-brand-border-quiet",
|
|
3030
3128
|
"--kui-color-brand-fill-quiet",
|
|
3031
3129
|
"--kui-color-brand-fill-normal",
|
|
3032
3130
|
"--kui-color-neutral-fill-quiet",
|
|
3033
3131
|
"--kui-color-neutral-on-normal",
|
|
3034
3132
|
"--kui-color-neutral-on-quiet",
|
|
3035
3133
|
"--kui-color-neutral-border-quiet",
|
|
3134
|
+
"--kui-color-neutral-border-normal",
|
|
3036
3135
|
"--kui-focus-ring",
|
|
3037
3136
|
"--kui-list-item-color",
|
|
3137
|
+
"--kui-list-item-background",
|
|
3038
3138
|
"--kui-list-item-align-items",
|
|
3039
3139
|
"--kui-list-item-border-width",
|
|
3140
|
+
"--kui-list-item-border",
|
|
3040
3141
|
"--kui-list-item-columns",
|
|
3041
3142
|
"--kui-list-item-drag-target-background",
|
|
3042
3143
|
"--kui-list-item-drag-target-outline",
|
|
3043
3144
|
"--kui-list-item-drag-target-outline-offset",
|
|
3044
3145
|
"--kui-list-item-gap",
|
|
3045
3146
|
"--kui-list-item-hover-background",
|
|
3147
|
+
"--kui-list-item-hover-border",
|
|
3046
3148
|
"--kui-list-item-icon-color",
|
|
3047
3149
|
"--kui-list-item-icon-size",
|
|
3048
3150
|
"--kui-list-item-label-max-width",
|
|
@@ -3052,6 +3154,7 @@
|
|
|
3052
3154
|
"--kui-list-item-padding-inline",
|
|
3053
3155
|
"--kui-list-item-radius",
|
|
3054
3156
|
"--kui-list-item-selected-background",
|
|
3157
|
+
"--kui-list-item-selected-border",
|
|
3055
3158
|
"--kui-list-item-selected-color",
|
|
3056
3159
|
"--kui-list-item-trailing-color",
|
|
3057
3160
|
"--kui-list-group-divider-color",
|
|
@@ -3343,11 +3446,11 @@
|
|
|
3343
3446
|
"category": "Navigation",
|
|
3344
3447
|
"kind": "component",
|
|
3345
3448
|
"source": "kerf",
|
|
3346
|
-
"description": "Roving-tabindex-ready tabs with typed compact, segmented, icon-only, and
|
|
3449
|
+
"description": "Roving-tabindex-ready tabs with typed compact, segmented, icon-only, drop-target, pinned, and name-overflow presentations.",
|
|
3347
3450
|
"uses": [
|
|
3348
3451
|
"lucide-icon"
|
|
3349
3452
|
],
|
|
3350
|
-
"purpose": "
|
|
3453
|
+
"purpose": "Render a controlled application tab with compact or icon-only presentation, a visible drop target, optional full-name display, and an optional pinned leading position.",
|
|
3351
3454
|
"publicExports": [
|
|
3352
3455
|
"AppTab"
|
|
3353
3456
|
],
|
|
@@ -3366,6 +3469,7 @@
|
|
|
3366
3469
|
"appOwns": [
|
|
3367
3470
|
"tab identity",
|
|
3368
3471
|
"selection",
|
|
3472
|
+
"drop-target state",
|
|
3369
3473
|
"close policy",
|
|
3370
3474
|
"content",
|
|
3371
3475
|
"application data attribute values",
|
|
@@ -3382,7 +3486,9 @@
|
|
|
3382
3486
|
"compact size",
|
|
3383
3487
|
"segmented presentation",
|
|
3384
3488
|
"icon-only accessible presentation",
|
|
3385
|
-
"label maximum width and
|
|
3489
|
+
"label maximum width and ellipsis or visible name overflow",
|
|
3490
|
+
"drop-target highlight",
|
|
3491
|
+
"pinned leading position within a scrolling tablist",
|
|
3386
3492
|
"attention name color"
|
|
3387
3493
|
],
|
|
3388
3494
|
"accessibility": [
|
|
@@ -3415,7 +3521,12 @@
|
|
|
3415
3521
|
"--kui-app-tab-attention-color",
|
|
3416
3522
|
"--kui-app-tab-color",
|
|
3417
3523
|
"--kui-app-tab-drop-indicator",
|
|
3524
|
+
"--kui-app-tab-drop-target-background",
|
|
3525
|
+
"--kui-app-tab-drop-target-color",
|
|
3526
|
+
"--kui-app-tab-drop-target-ring",
|
|
3418
3527
|
"--kui-app-tab-hover-background",
|
|
3528
|
+
"--kui-app-tab-pinned-background",
|
|
3529
|
+
"--kui-app-tab-pinned-hover-background",
|
|
3419
3530
|
"--kui-app-tab-selected-background",
|
|
3420
3531
|
"--kui-app-tab-selected-border",
|
|
3421
3532
|
"--kui-app-tab-selected-color",
|
|
@@ -3495,7 +3606,8 @@
|
|
|
3495
3606
|
"overflow dividers on each side with tabs scrolled out of view (wired by wireScrollDividers)"
|
|
3496
3607
|
],
|
|
3497
3608
|
"accessibility": [
|
|
3498
|
-
"Keep exactly one selected tab at tabindex 0 and preserve the wiring keyboard model."
|
|
3609
|
+
"Keep exactly one selected tab at tabindex 0 and preserve the wiring keyboard model.",
|
|
3610
|
+
"Call wireTabBars for keyboard focus and selection, including the pinned leading tab's WebKit RTL scroll correction."
|
|
3499
3611
|
],
|
|
3500
3612
|
"geometry": {
|
|
3501
3613
|
"margin": "none",
|
|
@@ -3973,14 +4085,14 @@
|
|
|
3973
4085
|
"category": "Controls",
|
|
3974
4086
|
"kind": "component",
|
|
3975
4087
|
"source": "kerf",
|
|
3976
|
-
"description": "Controlled Web Awesome select with typed single or multiple values and form, toolbar, navigation, compact, icon-only, truncating, hint, and grouped-choice presentations.",
|
|
4088
|
+
"description": "Controlled Web Awesome select with typed single or multiple values, disabled choices, optional bulk actions, and form, toolbar, navigation, compact, icon-only, truncating, hint, and grouped-choice presentations.",
|
|
3977
4089
|
"uses": [
|
|
3978
4090
|
"lucide-icon",
|
|
3979
4091
|
"badge",
|
|
3980
4092
|
"wa-select",
|
|
3981
4093
|
"wa-option"
|
|
3982
4094
|
],
|
|
3983
|
-
"purpose": "
|
|
4095
|
+
"purpose": "Choose one or more controlled values, keep unavailable choices visible, and optionally select all enabled choices or clear a multiple selection.",
|
|
3984
4096
|
"publicExports": [
|
|
3985
4097
|
"Select",
|
|
3986
4098
|
"uiColor",
|
|
@@ -4030,6 +4142,7 @@
|
|
|
4030
4142
|
"value",
|
|
4031
4143
|
"validation",
|
|
4032
4144
|
"choices",
|
|
4145
|
+
"localized bulk-action labels",
|
|
4033
4146
|
"hint copy",
|
|
4034
4147
|
"domain mapping",
|
|
4035
4148
|
"outer placement"
|
|
@@ -4045,11 +4158,14 @@
|
|
|
4045
4158
|
"form, toolbar-borderless, or navigation presentation",
|
|
4046
4159
|
"default or compact size",
|
|
4047
4160
|
"label or icon-only selected presentation",
|
|
4161
|
+
"optional caret-free round icon-only trigger",
|
|
4048
4162
|
"select- or group-owned focus ring",
|
|
4049
4163
|
"label maximum width and truncation",
|
|
4050
4164
|
"fit-content, max-content, or fill trigger width",
|
|
4051
4165
|
"custom selected content typography and ellipsis",
|
|
4052
4166
|
"multiple selection",
|
|
4167
|
+
"disabled choice with an optional reason",
|
|
4168
|
+
"opt-in select-all and clear actions for multiple selection",
|
|
4053
4169
|
"multiple icon-only filter trigger with a fixed triggerIcon"
|
|
4054
4170
|
],
|
|
4055
4171
|
"accessibility": [
|
|
@@ -4058,6 +4174,7 @@
|
|
|
4058
4174
|
"Hint text is visible below the control through Web Awesome's native hint relationship; placeholderText remains the empty value inside the closed control.",
|
|
4059
4175
|
"Import select/register once; its scoped lifecycle adapter keeps the latest open/close request authoritative across animation reversals, canceled transitions, and removal. Do not add consumer popup timing or position repairs.",
|
|
4060
4176
|
"With multiple, the popup stays open while choices toggle (pointer, Enter, or Space) and closes on an outside press, Escape, or focus leaving; each chosen option shows a check, and the closed control summarizes the chosen labels in choice order.",
|
|
4177
|
+
"Disabled choices stay visible but cannot be selected; disabledReason exposes a tooltip. A multiple Select can opt in to localized select-all and clear buttons, which skip disabled choices and publish ordinary input/change events for changed values.",
|
|
4061
4178
|
"A multiple icon-only trigger shows its fixed triggerIcon and, while any choice is chosen, an aria-hidden count Badge; the combobox's accessible name ends with the chosen labels in choice order, and its hidden value stays empty.",
|
|
4062
4179
|
"Once registered, an icon-only trigger (single or multiple) shows an aria-hidden Web Awesome help tag repeating its accessible name (a single Select adds its current choice) after a 500ms hover and at once on keyboard focus; it hides while the popup is open, on a press, and on Escape, and never joins aria-labelledby. Do not add a title or another tooltip."
|
|
4063
4180
|
],
|
|
@@ -79,6 +79,14 @@
|
|
|
79
79
|
},
|
|
80
80
|
"@kerfjs/ui:toolbar-control-group": {
|
|
81
81
|
"_source": "docs/component-selection.md#toolbar-composition",
|
|
82
|
+
"jsxExports": {
|
|
83
|
+
"ToolbarActionLink": {
|
|
84
|
+
"parents": {
|
|
85
|
+
"mode": "listed",
|
|
86
|
+
"entries": ["@kerfjs/ui:toolbar-control-group"]
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
},
|
|
82
90
|
"parents": {
|
|
83
91
|
"mode": "listed",
|
|
84
92
|
"entries": ["@kerfjs/ui:toolbar"]
|
|
@@ -52,6 +52,16 @@ export interface CatalogCompositionEntry {
|
|
|
52
52
|
/** For a wrapper component: the cataloged roots it renders (any one of
|
|
53
53
|
* them, or nothing). Composition checks treat its elements as each root. */
|
|
54
54
|
rendersAs?: CatalogQualifiedKey[];
|
|
55
|
+
/** Additional JSX exports in this selection entry with their own placement. */
|
|
56
|
+
jsxExports?: Record<
|
|
57
|
+
string,
|
|
58
|
+
{
|
|
59
|
+
parents: {
|
|
60
|
+
mode: 'any' | 'root' | 'listed';
|
|
61
|
+
entries: CatalogQualifiedKey[];
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
>;
|
|
55
65
|
parents: { mode: 'any' | 'root' | 'listed'; entries: CatalogQualifiedKey[] };
|
|
56
66
|
contexts: string[];
|
|
57
67
|
zones: Array<{
|