@kerfjs/ui 5.0.0-beta.65 → 5.0.0-beta.67
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 -1
- package/ai/component-catalog.json +26 -10
- package/ai/component-composition-rules.json +1 -1
- package/ai/component-composition.json +26 -5
- package/ai/components/grid.md +3 -1
- package/ai/components/nav-stack.md +4 -3
- package/ai/components/text.md +8 -6
- package/ai/components/toolbar-control-group.md +1 -1
- package/ai/components/workbench.md +5 -3
- package/ai/public-api-signatures-v1.md +64 -37
- package/ai/skill.md +6 -0
- package/ai/webawesome-jsx-signatures-v1.md +1 -1
- package/analyzer/component-ownership.d.mts +1 -1
- package/analyzer/component-ownership.mjs +24 -5
- package/analyzer/index.mjs +3 -1
- package/dist/browser/catalog.js +2 -1
- package/dist/browser/workbench.js +4 -1
- package/dist/catalog-resources.d.ts +2 -0
- package/dist/catalog.d.ts +2 -0
- package/dist/catalog.js +4 -3
- package/dist/catalog.js.map +1 -1
- package/dist/{chunk-5IJ6UGNZ.js → chunk-3BCJGM36.js} +2 -2
- package/dist/{chunk-5IJ6UGNZ.js.map → chunk-3BCJGM36.js.map} +1 -1
- package/dist/{chunk-2EKHENQK.js → chunk-B2ZMR7NY.js} +9 -1
- package/dist/chunk-B2ZMR7NY.js.map +1 -0
- package/dist/{chunk-FJSZYEBM.js → chunk-C74LITXE.js} +4 -4
- package/dist/{chunk-FJSZYEBM.js.map → chunk-C74LITXE.js.map} +1 -1
- package/dist/{chunk-PWQAVNON.js → chunk-TGM424PI.js} +34 -4
- package/dist/chunk-TGM424PI.js.map +1 -0
- package/dist/chunk-VY6YRCTV.js +123 -0
- package/dist/chunk-VY6YRCTV.js.map +1 -0
- package/dist/{chunk-CQHN45XR.js → chunk-YDGNU2OD.js} +11 -2
- package/dist/chunk-YDGNU2OD.js.map +1 -0
- package/dist/collapsible-panel.js +2 -2
- package/dist/grid.d.ts +5 -1
- package/dist/grid.js +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +3 -3
- package/dist/list-header.js +1 -1
- package/dist/nav-stack.d.ts +5 -1
- package/dist/nav-stack.js +1 -1
- package/dist/split-view.js +1 -1
- package/dist/styles/nav-stack.css +4 -0
- package/dist/styles/text.css +18 -0
- package/dist/styles/token-search-field.css +9 -2
- package/dist/styles/toolbar.css +5 -1
- package/dist/text.d.ts +8 -1
- package/dist/text.js +1 -1
- package/dist/wire-content-items.js +32 -4
- package/dist/wire-content-items.js.map +1 -1
- package/dist/workbench.d.ts +41 -33
- package/dist/workbench.js +4 -1
- package/docs/accessibility.md +9 -2
- package/docs/component-selection.md +17 -0
- package/docs/layout.md +30 -1
- package/docs/nav-stack.md +7 -0
- package/docs/ui-analyzer.md +5 -1
- package/docs/webawesome-theme.md +6 -0
- package/docs/workbench.md +27 -3
- package/llms.txt +7 -0
- package/package.json +1 -1
- package/dist/chunk-2EKHENQK.js.map +0 -1
- package/dist/chunk-CQHN45XR.js.map +0 -1
- package/dist/chunk-HXCMWANP.js +0 -116
- package/dist/chunk-HXCMWANP.js.map +0 -1
- package/dist/chunk-PWQAVNON.js.map +0 -1
package/README.md
CHANGED
|
@@ -189,7 +189,7 @@ interchangeable. `ListItem` and `ListActionRow` deliberately expose no raw
|
|
|
189
189
|
| `FloatingToolbar` | `@kerfjs/ui/floating-toolbar` | `@kerfjs/ui/floating-toolbar.css` |
|
|
190
190
|
| `PopupMenu` (register with `@kerfjs/ui/popup-menu/register`) | `@kerfjs/ui/popup-menu` | `@kerfjs/ui/popup-menu.css` |
|
|
191
191
|
| `ToolbarText` | `@kerfjs/ui/toolbar-text` | `@kerfjs/ui/toolbar-text.css` |
|
|
192
|
-
| `Text`
|
|
192
|
+
| `Text`, `FieldLabel` | `@kerfjs/ui/text` | `@kerfjs/ui/text.css` |
|
|
193
193
|
| `List` | `@kerfjs/ui/list` | `@kerfjs/ui/list.css` |
|
|
194
194
|
| `Row` | `@kerfjs/ui/row` | `@kerfjs/ui/row.css` |
|
|
195
195
|
| `Grid` | `@kerfjs/ui/grid` | `@kerfjs/ui/grid.css` |
|
|
@@ -725,6 +725,7 @@
|
|
|
725
725
|
"preferred initial focus targets when DOM order is insufficient",
|
|
726
726
|
"per-view bottom toolbar content or a persistent fallback",
|
|
727
727
|
"per-view leading, center, and trailing top-toolbar groups",
|
|
728
|
+
"per-view fixed header content above the active view's scroll area",
|
|
728
729
|
"top-toolbar configuration, title size, and heading level",
|
|
729
730
|
"whether the chrome and bottom-toolbar dividers follow the scroll, always show, or never show (chromeDividers)"
|
|
730
731
|
],
|
|
@@ -735,6 +736,7 @@
|
|
|
735
736
|
"configured top toolbar",
|
|
736
737
|
"custom back icon or visible back text",
|
|
737
738
|
"per-view bottom toolbar",
|
|
739
|
+
"persistent final top-toolbar group (panelToggle) when embedded in a Workbench panel",
|
|
738
740
|
"persistent bottom-toolbar fallback",
|
|
739
741
|
"chrome and bottom-toolbar dividers only while the active view scrolls beneath them (wired by wireScrollDividers)",
|
|
740
742
|
"permanent or no chrome dividers (chromeDividers always or none)"
|
|
@@ -811,6 +813,7 @@
|
|
|
811
813
|
"kui-nav-stack__chrome-copy",
|
|
812
814
|
"kui-nav-stack__chrome-copy--bottom",
|
|
813
815
|
"kui-nav-stack__chrome-copy--exiting",
|
|
816
|
+
"kui-nav-stack__header",
|
|
814
817
|
"kui-nav-stack__viewport",
|
|
815
818
|
"kui-nav-stack__view",
|
|
816
819
|
"kui-nav-stack__view--entering",
|
|
@@ -1079,7 +1082,9 @@
|
|
|
1079
1082
|
"kind": "component",
|
|
1080
1083
|
"source": "kerf",
|
|
1081
1084
|
"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.",
|
|
1082
|
-
"uses": [
|
|
1085
|
+
"uses": [
|
|
1086
|
+
"nav-stack"
|
|
1087
|
+
],
|
|
1083
1088
|
"purpose": "Arrange a complex tool or editor as a stable central work area with optional peripheral rails and a bottom drawer.",
|
|
1084
1089
|
"publicExports": [
|
|
1085
1090
|
"Workbench",
|
|
@@ -1088,6 +1093,8 @@
|
|
|
1088
1093
|
"WorkbenchMainBottomToolbar",
|
|
1089
1094
|
"WorkbenchMainToolbar",
|
|
1090
1095
|
"WorkbenchPanel",
|
|
1096
|
+
"WorkbenchStaticPanel",
|
|
1097
|
+
"WorkbenchNavigationPanel",
|
|
1091
1098
|
"WorkbenchPanelResizable",
|
|
1092
1099
|
"WorkbenchPanelToggle",
|
|
1093
1100
|
"WorkbenchPanelToolbar",
|
|
@@ -1114,6 +1121,7 @@
|
|
|
1114
1121
|
"panel presence and content",
|
|
1115
1122
|
"collapsed state",
|
|
1116
1123
|
"panel sizes",
|
|
1124
|
+
"navigation panel view stack and push/pop actions when navStack is supplied",
|
|
1117
1125
|
"responsive replacement below desktop",
|
|
1118
1126
|
"collapse controls and focus policy"
|
|
1119
1127
|
],
|
|
@@ -1124,6 +1132,7 @@
|
|
|
1124
1132
|
"bottom drawer",
|
|
1125
1133
|
"all panels",
|
|
1126
1134
|
"independently collapsed panels",
|
|
1135
|
+
"navigation panel with per-screen toolbar, fixed header, and one scroll owner; standard toggle remains last and relocates while collapsed",
|
|
1127
1136
|
"opt-in drag and keyboard resizable panels with min/max limits",
|
|
1128
1137
|
"resizable rails that leave the work area a minimum width and shrink in proportion when the Workbench narrows",
|
|
1129
1138
|
"rails or a drawer that present as overlays below a narrow or compact Workbench container breakpoint",
|
|
@@ -1933,14 +1942,16 @@
|
|
|
1933
1942
|
"category": "Structure",
|
|
1934
1943
|
"kind": "component",
|
|
1935
1944
|
"source": "kerf",
|
|
1936
|
-
"description": "Semantic native
|
|
1945
|
+
"description": "Semantic native text plus a FieldLabel heading for read-only field previews that matches themed Web Awesome form labels.",
|
|
1937
1946
|
"uses": [],
|
|
1938
1947
|
"purpose": "Render paragraph semantics by default, h1 through h6 when selected, or geometry-free inline secondary text as a span while independently configuring quiet or danger tone, compact through extra-large size, or monospace font.",
|
|
1939
1948
|
"publicExports": [
|
|
1940
|
-
"Text"
|
|
1949
|
+
"Text",
|
|
1950
|
+
"FieldLabel"
|
|
1941
1951
|
],
|
|
1942
1952
|
"useWhen": [
|
|
1943
|
-
"Render ordinary application headings or paragraphs with native document semantics, or inline secondary text inside rows, labels, and table cells."
|
|
1953
|
+
"Render ordinary application headings or paragraphs with native document semantics, or inline secondary text inside rows, labels, and table cells.",
|
|
1954
|
+
"Render FieldLabel over a read-only or click-to-edit preview that replaces a Web Awesome form control."
|
|
1944
1955
|
],
|
|
1945
1956
|
"avoidWhen": [
|
|
1946
1957
|
"Do not use Text for toolbar identity or title content; use ToolbarText inside a Toolbar zone.",
|
|
@@ -1962,7 +1973,8 @@
|
|
|
1962
1973
|
"size",
|
|
1963
1974
|
"font",
|
|
1964
1975
|
"copy",
|
|
1965
|
-
"document heading hierarchy"
|
|
1976
|
+
"document heading hierarchy",
|
|
1977
|
+
"FieldLabel copy, preview/edit state, and aria-labelledby association"
|
|
1966
1978
|
],
|
|
1967
1979
|
"variants": [
|
|
1968
1980
|
"p, h1 through h6, or inline span semantic variant",
|
|
@@ -1974,14 +1986,15 @@
|
|
|
1974
1986
|
"accessibility": [
|
|
1975
1987
|
"Text renders a native paragraph by default; choose an h1 through h6 variant by document outline rather than appearance, or span for inline secondary text.",
|
|
1976
1988
|
"Ordinary global, data, and ARIA attributes pass through to the native element.",
|
|
1977
|
-
"Choose tone, size, and font independently of the heading level so appearance does not distort the document outline."
|
|
1989
|
+
"Choose tone, size, and font independently of the heading level so appearance does not distort the document outline.",
|
|
1990
|
+
"FieldLabel is plain text, not a native label; give it an id and associate the preview group with aria-labelledby."
|
|
1978
1991
|
],
|
|
1979
1992
|
"geometry": {
|
|
1980
1993
|
"margin": "none",
|
|
1981
1994
|
"border": "self",
|
|
1982
1995
|
"padding": "self",
|
|
1983
1996
|
"notes": [
|
|
1984
|
-
"Block Text variants reset native margins and add a 1px transparent border plus the standard 8px item padding; flush removes the border and padding. Tight line height is available for compact copy. Span has no margin, border, or padding."
|
|
1997
|
+
"Block Text variants reset native margins and add a 1px transparent border plus the standard 8px item padding; flush removes the border and padding. Tight line height is available for compact copy. Span has no margin, border, or padding. FieldLabel mirrors the themed Web Awesome label typography, 9px inline inset, and bottom gap."
|
|
1985
1998
|
]
|
|
1986
1999
|
},
|
|
1987
2000
|
"delivery": {
|
|
@@ -1993,7 +2006,8 @@
|
|
|
1993
2006
|
},
|
|
1994
2007
|
"wiring": [],
|
|
1995
2008
|
"publicClasses": [
|
|
1996
|
-
"kui-text"
|
|
2009
|
+
"kui-text",
|
|
2010
|
+
"kui-text__field-label"
|
|
1997
2011
|
],
|
|
1998
2012
|
"publicTokens": [
|
|
1999
2013
|
"--kui-color-danger-on-quiet",
|
|
@@ -2439,10 +2453,12 @@
|
|
|
2439
2453
|
"typed CssLength gap",
|
|
2440
2454
|
"boolean, finite-keyword, or typed CssFlex flex",
|
|
2441
2455
|
"fill: the layout root fills a definite-height parent",
|
|
2442
|
-
"rootAttributes: safe data-* metadata on the root"
|
|
2456
|
+
"rootAttributes: safe data-* metadata on the root",
|
|
2457
|
+
"selectionMode=multiple: labeled multi-select grid for ContentItem tiles"
|
|
2443
2458
|
],
|
|
2444
2459
|
"accessibility": [
|
|
2445
|
-
"Grid adds
|
|
2460
|
+
"Grid adds no role by default; selectionMode=multiple requires ariaLabel and supplies a multi-select grid for ContentItem row/gridcell tiles.",
|
|
2461
|
+
"wireContentItems uses rendered tile positions for Left/Right/Up/Down and reaches the first or last tile with Home/End.",
|
|
2446
2462
|
"Responsive column-count changes preserve source and focus order."
|
|
2447
2463
|
],
|
|
2448
2464
|
"geometry": {
|
|
@@ -703,6 +703,11 @@
|
|
|
703
703
|
"owner": "application",
|
|
704
704
|
"required": false
|
|
705
705
|
},
|
|
706
|
+
{
|
|
707
|
+
"id": "per-view fixed header content above the active view's scroll area",
|
|
708
|
+
"owner": "application",
|
|
709
|
+
"required": false
|
|
710
|
+
},
|
|
706
711
|
{
|
|
707
712
|
"id": "top-toolbar configuration, title size, and heading level",
|
|
708
713
|
"owner": "application",
|
|
@@ -783,6 +788,7 @@
|
|
|
783
788
|
"kui-nav-stack__chrome-copy",
|
|
784
789
|
"kui-nav-stack__chrome-copy--bottom",
|
|
785
790
|
"kui-nav-stack__chrome-copy--exiting",
|
|
791
|
+
"kui-nav-stack__header",
|
|
786
792
|
"kui-nav-stack__viewport",
|
|
787
793
|
"kui-nav-stack__view",
|
|
788
794
|
"kui-nav-stack__view--entering",
|
|
@@ -1075,6 +1081,11 @@
|
|
|
1075
1081
|
},
|
|
1076
1082
|
{ "id": "collapsed state", "owner": "application", "required": false },
|
|
1077
1083
|
{ "id": "panel sizes", "owner": "application", "required": false },
|
|
1084
|
+
{
|
|
1085
|
+
"id": "navigation panel view stack and push/pop actions when navStack is supplied",
|
|
1086
|
+
"owner": "application",
|
|
1087
|
+
"required": false
|
|
1088
|
+
},
|
|
1078
1089
|
{
|
|
1079
1090
|
"id": "responsive replacement below desktop",
|
|
1080
1091
|
"owner": "application",
|
|
@@ -1510,7 +1521,10 @@
|
|
|
1510
1521
|
"name": "ToolbarControlGroup",
|
|
1511
1522
|
"kind": "component",
|
|
1512
1523
|
"source": "kerf",
|
|
1513
|
-
"parents": {
|
|
1524
|
+
"parents": {
|
|
1525
|
+
"mode": "listed",
|
|
1526
|
+
"entries": ["@kerfjs/ui:toolbar", "@kerfjs/ui:floating-toolbar"]
|
|
1527
|
+
},
|
|
1514
1528
|
"contexts": ["toolbar-zone"],
|
|
1515
1529
|
"zones": [
|
|
1516
1530
|
{
|
|
@@ -1794,6 +1808,11 @@
|
|
|
1794
1808
|
"id": "document heading hierarchy",
|
|
1795
1809
|
"owner": "application",
|
|
1796
1810
|
"required": false
|
|
1811
|
+
},
|
|
1812
|
+
{
|
|
1813
|
+
"id": "FieldLabel copy, preview/edit state, and aria-labelledby association",
|
|
1814
|
+
"owner": "application",
|
|
1815
|
+
"required": false
|
|
1797
1816
|
}
|
|
1798
1817
|
],
|
|
1799
1818
|
"wiring": {
|
|
@@ -1810,7 +1829,7 @@
|
|
|
1810
1829
|
"border": "self",
|
|
1811
1830
|
"padding": "self",
|
|
1812
1831
|
"notes": [
|
|
1813
|
-
"Block Text variants reset native margins and add a 1px transparent border plus the standard 8px item padding; flush removes the border and padding. Tight line height is available for compact copy. Span has no margin, border, or padding."
|
|
1832
|
+
"Block Text variants reset native margins and add a 1px transparent border plus the standard 8px item padding; flush removes the border and padding. Tight line height is available for compact copy. Span has no margin, border, or padding. FieldLabel mirrors the themed Web Awesome label typography, 9px inline inset, and bottom gap."
|
|
1814
1833
|
]
|
|
1815
1834
|
}
|
|
1816
1835
|
},
|
|
@@ -1818,13 +1837,14 @@
|
|
|
1818
1837
|
"obligations": [
|
|
1819
1838
|
"Text renders a native paragraph by default; choose an h1 through h6 variant by document outline rather than appearance, or span for inline secondary text.",
|
|
1820
1839
|
"Ordinary global, data, and ARIA attributes pass through to the native element.",
|
|
1821
|
-
"Choose tone, size, and font independently of the heading level so appearance does not distort the document outline."
|
|
1840
|
+
"Choose tone, size, and font independently of the heading level so appearance does not distort the document outline.",
|
|
1841
|
+
"FieldLabel is plain text, not a native label; give it an id and associate the preview group with aria-labelledby."
|
|
1822
1842
|
]
|
|
1823
1843
|
},
|
|
1824
1844
|
"cssValueProps": [],
|
|
1825
1845
|
"boundaries": {
|
|
1826
1846
|
"rootClass": "kui-text",
|
|
1827
|
-
"publicClasses": ["kui-text"],
|
|
1847
|
+
"publicClasses": ["kui-text", "kui-text__field-label"],
|
|
1828
1848
|
"publicTokens": [
|
|
1829
1849
|
"--kui-color-danger-on-quiet",
|
|
1830
1850
|
"--kui-color-text-quiet",
|
|
@@ -2088,7 +2108,8 @@
|
|
|
2088
2108
|
},
|
|
2089
2109
|
"accessibility": {
|
|
2090
2110
|
"obligations": [
|
|
2091
|
-
"Grid adds
|
|
2111
|
+
"Grid adds no role by default; selectionMode=multiple requires ariaLabel and supplies a multi-select grid for ContentItem row/gridcell tiles.",
|
|
2112
|
+
"wireContentItems uses rendered tile positions for Left/Right/Up/Down and reaches the first or last tile with Home/End.",
|
|
2092
2113
|
"Responsive column-count changes preserve source and focus order."
|
|
2093
2114
|
]
|
|
2094
2115
|
},
|
package/ai/components/grid.md
CHANGED
|
@@ -47,6 +47,7 @@ Exact prop names and types: [`@kerfjs/ui/grid`](../public-api-signatures-v1.md#k
|
|
|
47
47
|
- boolean, finite-keyword, or typed CssFlex flex
|
|
48
48
|
- fill: the layout root fills a definite-height parent
|
|
49
49
|
- rootAttributes: safe data-\* metadata on the root
|
|
50
|
+
- selectionMode=multiple: labeled multi-select grid for ContentItem tiles
|
|
50
51
|
|
|
51
52
|
**CSS-value props** (typed builders from `@kerfjs/ui/css-values`; raw CSS strings are rejected):
|
|
52
53
|
|
|
@@ -74,7 +75,8 @@ Margin: none · border: none · padding: none (layout role: structure). `self` m
|
|
|
74
75
|
|
|
75
76
|
## Accessibility
|
|
76
77
|
|
|
77
|
-
- Grid adds
|
|
78
|
+
- Grid adds no role by default; selectionMode=multiple requires ariaLabel and supplies a multi-select grid for ContentItem row/gridcell tiles.
|
|
79
|
+
- wireContentItems uses rendered tile positions for Left/Right/Up/Down and reaches the first or last tile with Home/End.
|
|
78
80
|
- Responsive column-count changes preserve source and focus order.
|
|
79
81
|
|
|
80
82
|
## Styling boundary
|
|
@@ -43,6 +43,7 @@ Exact prop names and types: [`@kerfjs/ui/nav-stack`](../public-api-signatures-v1
|
|
|
43
43
|
- configured top toolbar
|
|
44
44
|
- custom back icon or visible back text
|
|
45
45
|
- per-view bottom toolbar
|
|
46
|
+
- persistent final top-toolbar group (panelToggle) when embedded in a Workbench panel
|
|
46
47
|
- persistent bottom-toolbar fallback
|
|
47
48
|
- chrome and bottom-toolbar dividers only while the active view scrolls beneath them (wired by wireScrollDividers)
|
|
48
49
|
- permanent or no chrome dividers (chromeDividers always or none)
|
|
@@ -56,7 +57,7 @@ Exact prop names and types: [`@kerfjs/ui/nav-stack`](../public-api-signatures-v1
|
|
|
56
57
|
|
|
57
58
|
## State and wiring
|
|
58
59
|
|
|
59
|
-
**The app owns:** ordered view stack and stable keys; view content and titles; push and pop actions; preferred initial focus targets when DOM order is insufficient; per-view bottom toolbar content or a persistent fallback; per-view leading, center, and trailing top-toolbar groups; top-toolbar configuration, title size, and heading level; whether the chrome and bottom-toolbar dividers follow the scroll, always show, or never show (chromeDividers).
|
|
60
|
+
**The app owns:** ordered view stack and stable keys; view content and titles; push and pop actions; preferred initial focus targets when DOM order is insufficient; per-view bottom toolbar content or a persistent fallback; per-view leading, center, and trailing top-toolbar groups; per-view fixed header content above the active view's scroll area; top-toolbar configuration, title size, and heading level; whether the chrome and bottom-toolbar dividers follow the scroll, always show, or never show (chromeDividers).
|
|
60
61
|
|
|
61
62
|
**Wiring:** `wireNavStack`, `wireScrollDividers` is required.
|
|
62
63
|
|
|
@@ -88,9 +89,9 @@ Margin: none · border: conditional · padding: child (layout role: structure).
|
|
|
88
89
|
|
|
89
90
|
The component owns its own styles. Configure it through its props and variants; do not override its internals.
|
|
90
91
|
|
|
91
|
-
Public class hooks (select for layout placement only, never to change the component's look): `kui-nav-stack`, `kui-nav-stack__chrome`, `kui-nav-stack__bottom`, `kui-nav-stack__chrome--entering`, `kui-nav-stack__chrome-copy`, `kui-nav-stack__chrome-copy--bottom`, `kui-nav-stack__chrome-copy--exiting`, `kui-nav-stack__viewport`, `kui-nav-stack__view`, `kui-nav-stack__view--entering`, `kui-nav-stack__view--exiting`.
|
|
92
|
+
Public class hooks (select for layout placement only, never to change the component's look): `kui-nav-stack`, `kui-nav-stack__chrome`, `kui-nav-stack__bottom`, `kui-nav-stack__chrome--entering`, `kui-nav-stack__chrome-copy`, `kui-nav-stack__chrome-copy--bottom`, `kui-nav-stack__chrome-copy--exiting`, `kui-nav-stack__header`, `kui-nav-stack__viewport`, `kui-nav-stack__view`, `kui-nav-stack__view--entering`, `kui-nav-stack__view--exiting`.
|
|
92
93
|
|
|
93
|
-
Never put `kui-nav-stack`, `kui-nav-stack__chrome`, `kui-nav-stack__bottom`, `kui-nav-stack__chrome--entering`, `kui-nav-stack__chrome-copy`, `kui-nav-stack__chrome-copy--bottom`, `kui-nav-stack__chrome-copy--exiting`, `kui-nav-stack__viewport`, `kui-nav-stack__view`, `kui-nav-stack__view--entering`, `kui-nav-stack__view--exiting` on an element you write; render `NavStack` instead (`KUI-L103`).
|
|
94
|
+
Never put `kui-nav-stack`, `kui-nav-stack__chrome`, `kui-nav-stack__bottom`, `kui-nav-stack__chrome--entering`, `kui-nav-stack__chrome-copy`, `kui-nav-stack__chrome-copy--bottom`, `kui-nav-stack__chrome-copy--exiting`, `kui-nav-stack__header`, `kui-nav-stack__viewport`, `kui-nav-stack__view`, `kui-nav-stack__view--entering`, `kui-nav-stack__view--exiting` on an element you write; render `NavStack` instead (`KUI-L103`).
|
|
94
95
|
|
|
95
96
|
Public tokens it reads: `--kui-nav-stack-transition-duration`. Set a token only where its public contract allows; prefer a prop.
|
|
96
97
|
|
package/ai/components/text.md
CHANGED
|
@@ -4,13 +4,14 @@
|
|
|
4
4
|
|
|
5
5
|
`@kerfjs/ui:text` · Kerf UI · component · Structure
|
|
6
6
|
|
|
7
|
-
Semantic native
|
|
7
|
+
Semantic native text plus a FieldLabel heading for read-only field previews that matches themed Web Awesome form labels.
|
|
8
8
|
|
|
9
9
|
## When to use
|
|
10
10
|
|
|
11
11
|
Render paragraph semantics by default, h1 through h6 when selected, or geometry-free inline secondary text as a span while independently configuring quiet or danger tone, compact through extra-large size, or monospace font.
|
|
12
12
|
|
|
13
13
|
- Render ordinary application headings or paragraphs with native document semantics, or inline secondary text inside rows, labels, and table cells.
|
|
14
|
+
- Render FieldLabel over a read-only or click-to-edit preview that replaces a Web Awesome form control.
|
|
14
15
|
|
|
15
16
|
**Not when:**
|
|
16
17
|
|
|
@@ -24,7 +25,7 @@ Render paragraph semantics by default, h1 through h6 when selected, or geometry-
|
|
|
24
25
|
|
|
25
26
|
## Imports
|
|
26
27
|
|
|
27
|
-
- JavaScript: `@kerfjs/ui/text` — exports `Text`.
|
|
28
|
+
- JavaScript: `@kerfjs/ui/text` — exports `Text`, `FieldLabel`.
|
|
28
29
|
- CSS: the browser build of `@kerfjs/ui/text` pulls its CSS automatically; import `@kerfjs/ui/text.css` manually only without the `browser` export condition.
|
|
29
30
|
- Declared side effects: browser-condition-css.
|
|
30
31
|
|
|
@@ -48,7 +49,7 @@ Exact prop names and types: [`@kerfjs/ui/text`](../public-api-signatures-v1.md#k
|
|
|
48
49
|
|
|
49
50
|
## State and wiring
|
|
50
51
|
|
|
51
|
-
**The app owns:** semantic variant; tone; size; font; copy; document heading hierarchy.
|
|
52
|
+
**The app owns:** semantic variant; tone; size; font; copy; document heading hierarchy; FieldLabel copy, preview/edit state, and aria-labelledby association.
|
|
52
53
|
|
|
53
54
|
No wiring helper.
|
|
54
55
|
|
|
@@ -56,21 +57,22 @@ No wiring helper.
|
|
|
56
57
|
|
|
57
58
|
Margin: none · border: self · padding: self (layout role: structure). `self` means the component already owns it — do not add wrapper padding, margin, or borders around it.
|
|
58
59
|
|
|
59
|
-
- Block Text variants reset native margins and add a 1px transparent border plus the standard 8px item padding; flush removes the border and padding. Tight line height is available for compact copy. Span has no margin, border, or padding.
|
|
60
|
+
- Block Text variants reset native margins and add a 1px transparent border plus the standard 8px item padding; flush removes the border and padding. Tight line height is available for compact copy. Span has no margin, border, or padding. FieldLabel mirrors the themed Web Awesome label typography, 9px inline inset, and bottom gap.
|
|
60
61
|
|
|
61
62
|
## Accessibility
|
|
62
63
|
|
|
63
64
|
- Text renders a native paragraph by default; choose an h1 through h6 variant by document outline rather than appearance, or span for inline secondary text.
|
|
64
65
|
- Ordinary global, data, and ARIA attributes pass through to the native element.
|
|
65
66
|
- Choose tone, size, and font independently of the heading level so appearance does not distort the document outline.
|
|
67
|
+
- FieldLabel is plain text, not a native label; give it an id and associate the preview group with aria-labelledby.
|
|
66
68
|
|
|
67
69
|
## Styling boundary
|
|
68
70
|
|
|
69
71
|
The component owns its own styles. Configure it through its props and variants; do not override its internals.
|
|
70
72
|
|
|
71
|
-
Public class hooks (select for layout placement only, never to change the component's look): `kui-text`.
|
|
73
|
+
Public class hooks (select for layout placement only, never to change the component's look): `kui-text`, `kui-text__field-label`.
|
|
72
74
|
|
|
73
|
-
Never put `kui-text` on an element you write; render `Text` instead (`KUI-L103`).
|
|
75
|
+
Never put `kui-text`, `kui-text__field-label` on an element you write; render `Text` instead (`KUI-L103`).
|
|
74
76
|
|
|
75
77
|
Public tokens it reads: `--kui-color-danger-on-quiet`, `--kui-color-text-quiet`, `--kui-font-2xl`, `--kui-font-l`, `--kui-font-mono`, `--kui-font-xs`, `--kui-layout-item-padding`. Set a token only where its public contract allows; prefer a prop.
|
|
76
78
|
|
|
@@ -57,7 +57,7 @@ Exact prop names and types: [`@kerfjs/ui/toolbar-control-group`](../public-api-s
|
|
|
57
57
|
|
|
58
58
|
## Composition
|
|
59
59
|
|
|
60
|
-
- Parents: only inside [Toolbar](./toolbar.md).
|
|
60
|
+
- Parents: only inside [Toolbar](./toolbar.md) or [FloatingToolbar](./floating-toolbar.md).
|
|
61
61
|
- Contexts: `toolbar-zone`.
|
|
62
62
|
- Children: only `control` (required: `control`).
|
|
63
63
|
- Built from: [LucideIcon](./lucide-icon.md), [SegmentedControl](./segmented-control.md).
|
|
@@ -25,7 +25,7 @@ Arrange a complex tool or editor as a stable central work area with optional per
|
|
|
25
25
|
|
|
26
26
|
## Imports
|
|
27
27
|
|
|
28
|
-
- JavaScript: `@kerfjs/ui/workbench` — exports `Workbench`, `WorkbenchChromePlacement`, `WorkbenchCompactOverlay`, `WorkbenchMainBottomToolbar`, `WorkbenchMainToolbar`, `WorkbenchPanel`, `WorkbenchPanelResizable`, `WorkbenchPanelToggle`, `WorkbenchPanelToolbar`, `WorkbenchProps`, `WorkbenchResponsiveOverlayAt`.
|
|
28
|
+
- JavaScript: `@kerfjs/ui/workbench` — exports `Workbench`, `WorkbenchChromePlacement`, `WorkbenchCompactOverlay`, `WorkbenchMainBottomToolbar`, `WorkbenchMainToolbar`, `WorkbenchPanel`, `WorkbenchStaticPanel`, `WorkbenchNavigationPanel`, `WorkbenchPanelResizable`, `WorkbenchPanelToggle`, `WorkbenchPanelToolbar`, `WorkbenchProps`, `WorkbenchResponsiveOverlayAt`.
|
|
29
29
|
- CSS: the browser build of `@kerfjs/ui/workbench` pulls its CSS automatically; import `@kerfjs/ui/workbench.css` manually only without the `browser` export condition.
|
|
30
30
|
- Wiring: `wireWorkbench` from `@kerfjs/ui/wire-workbench` (optional).
|
|
31
31
|
- Wiring: `wireScrollDividers` from `@kerfjs/ui/wire-scroll-dividers` (optional).
|
|
@@ -43,6 +43,7 @@ Exact prop names and types: [`@kerfjs/ui/workbench`](../public-api-signatures-v1
|
|
|
43
43
|
- bottom drawer
|
|
44
44
|
- all panels
|
|
45
45
|
- independently collapsed panels
|
|
46
|
+
- navigation panel with per-screen toolbar, fixed header, and one scroll owner; standard toggle remains last and relocates while collapsed
|
|
46
47
|
- opt-in drag and keyboard resizable panels with min/max limits
|
|
47
48
|
- resizable rails that leave the work area a minimum width and shrink in proportion when the Workbench narrows
|
|
48
49
|
- rails or a drawer that present as overlays below a narrow or compact Workbench container breakpoint
|
|
@@ -60,6 +61,7 @@ Exact prop names and types: [`@kerfjs/ui/workbench`](../public-api-signatures-v1
|
|
|
60
61
|
- Parents: any.
|
|
61
62
|
- Contexts: `desktop-application-shell`.
|
|
62
63
|
- Children: unrestricted.
|
|
64
|
+
- Built from: [NavStack](./nav-stack.md).
|
|
63
65
|
|
|
64
66
|
Zones (a zone is bound to JSX only through its listed prop; never assume the zone id is a prop):
|
|
65
67
|
|
|
@@ -70,7 +72,7 @@ Zones (a zone is bound to JSX only through its listed prop; never assume the zon
|
|
|
70
72
|
|
|
71
73
|
## State and wiring
|
|
72
74
|
|
|
73
|
-
**The app owns:** panel presence and content; collapsed state; panel sizes; responsive replacement below desktop; collapse controls and focus policy.
|
|
75
|
+
**The app owns:** panel presence and content; collapsed state; panel sizes; navigation panel view stack and push/pop actions when navStack is supplied; responsive replacement below desktop; collapse controls and focus policy.
|
|
74
76
|
|
|
75
77
|
**Wiring:** `wireWorkbench`, `wireScrollDividers` is optional.
|
|
76
78
|
|
|
@@ -111,6 +113,6 @@ Everything else is internal: `kerf-ui-analyze` reports private or unknown `.kui-
|
|
|
111
113
|
|
|
112
114
|
## Related
|
|
113
115
|
|
|
114
|
-
- Components: [Pane](./pane.md).
|
|
116
|
+
- Components: [NavStack](./nav-stack.md), [Pane](./pane.md).
|
|
115
117
|
- Docs: [`docs/workbench.md`](../../docs/workbench.md), [`docs/workbench.md#state-lives-in-the-app`](../../docs/workbench.md#state-lives-in-the-app).
|
|
116
118
|
- UX catalog route: `?component=workbench`.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Public API signatures for the UI authoring corpus
|
|
2
2
|
|
|
3
|
-
Generated from emitted declarations for `@kerfjs/ui@5.0.0-beta.
|
|
3
|
+
Generated from emitted declarations for `@kerfjs/ui@5.0.0-beta.67` and `kerfjs@5.0.0-beta.67`. This bounded reference covers only APIs used by the seven-task corpus. It is interface evidence, not an implementation or runtime guarantee.
|
|
4
4
|
|
|
5
5
|
## `@kerfjs/ui/css-values`
|
|
6
6
|
|
|
@@ -1250,6 +1250,8 @@ interface NavStackView {
|
|
|
1250
1250
|
center?: KerfUiContent;
|
|
1251
1251
|
/** Trailing actions for this view's top toolbar. */
|
|
1252
1252
|
toolbar?: KerfUiContent;
|
|
1253
|
+
/** Fixed chrome below this view's toolbar, above its scrolling content. */
|
|
1254
|
+
header?: KerfUiContent;
|
|
1253
1255
|
/** Bottom toolbar for this view. Cross-fades with the top chrome on navigation. */
|
|
1254
1256
|
bottomToolbar?: KerfUiContent;
|
|
1255
1257
|
}
|
|
@@ -1284,6 +1286,8 @@ interface NavStackProps {
|
|
|
1284
1286
|
backText?: string;
|
|
1285
1287
|
/** The top toolbar's configuration, forwarded to its `Toolbar`. */
|
|
1286
1288
|
toolbarConfig?: NavStackToolbarConfig;
|
|
1289
|
+
/** Persistent last group in every view's top toolbar, supplied by a hosting panel. */
|
|
1290
|
+
panelToggle?: KerfUiContent;
|
|
1287
1291
|
/** Hide the top toolbar entirely (rare — a fully custom-chrome view). */
|
|
1288
1292
|
hideToolbar?: boolean;
|
|
1289
1293
|
/** Optional persistent bottom toolbar used when the active view does not provide one. */
|
|
@@ -1312,7 +1316,7 @@ interface NavStackProps {
|
|
|
1312
1316
|
* content fills the zones, and `toolbarConfig` configures it. A single-pane
|
|
1313
1317
|
* layout is a `NavStack` with one entry. See `docs/23-app-layouts.md` §3.1.
|
|
1314
1318
|
*/
|
|
1315
|
-
declare function NavStack({ id, label, views, backLabel, backIcon, backText, toolbarConfig, hideToolbar, bottomToolbar, chromeDividers, className, slot, }: NavStackProps): kerfjs.SafeHtml;
|
|
1319
|
+
declare function NavStack({ id, label, views, backLabel, backIcon, backText, toolbarConfig, panelToggle, hideToolbar, bottomToolbar, chromeDividers, className, slot, }: NavStackProps): kerfjs.SafeHtml;
|
|
1316
1320
|
|
|
1317
1321
|
export { NavStack, type NavStackProps, type NavStackToolbarConfig, type NavStackView };
|
|
1318
1322
|
```
|
|
@@ -1537,14 +1541,16 @@ export { Pane, type PaneAppearance, type PaneChromeDividers, type PaneChromePlac
|
|
|
1537
1541
|
```ts
|
|
1538
1542
|
import { SafeHtml } from 'kerfjs';
|
|
1539
1543
|
import { ListConfig } from './list.js';
|
|
1544
|
+
import { NavStackProps } from './nav-stack.js';
|
|
1540
1545
|
import { PaneConfig } from './pane.js';
|
|
1541
1546
|
import { ResizableRegionSeparator, ResizableRegionCollapseMotion, ResizableRegionContentOverflow, ResizableRegionPresentation, ResizableRegionRestorePosition } from './resizable-region.js';
|
|
1542
1547
|
import { K as KerfUiContent } from './semantic-content-BbzjvSu9.js';
|
|
1543
|
-
import { a as PanelToolbar, b as PanelChromePlacement, c as PanelBottomToolbar, d as PanelToggle } from './panel-toolbar-DDKh4uKd.js';
|
|
1544
1548
|
import { ToolbarConfig } from './toolbar.js';
|
|
1549
|
+
import { a as PanelToolbar, b as PanelChromePlacement, c as PanelBottomToolbar, d as PanelToggle } from './panel-toolbar-DDKh4uKd.js';
|
|
1545
1550
|
import './css-values.js';
|
|
1546
1551
|
import './flex-alignment-4ms8ZbV8.js';
|
|
1547
1552
|
import './sides-BPSWde0A.js';
|
|
1553
|
+
import './toolbar-text.js';
|
|
1548
1554
|
import './lucide-icon.js';
|
|
1549
1555
|
import 'lucide';
|
|
1550
1556
|
|
|
@@ -1617,37 +1623,8 @@ interface WorkbenchPanelResizable {
|
|
|
1617
1623
|
/** Largest size (default 480). */
|
|
1618
1624
|
max?: number;
|
|
1619
1625
|
}
|
|
1620
|
-
/**
|
|
1621
|
-
interface
|
|
1622
|
-
content: KerfUiContent;
|
|
1623
|
-
/**
|
|
1624
|
-
* The panel's top toolbar, composed by the Workbench: its marked groups
|
|
1625
|
-
* and standard `toggle` move to the work area's toolbar while the panel is
|
|
1626
|
-
* collapsed. With it, `content` renders in a `Pane` below the toolbar.
|
|
1627
|
-
*/
|
|
1628
|
-
toolbar?: WorkbenchPanelToolbar;
|
|
1629
|
-
/** Fixed content below a toolbar panel's top toolbar, above its scroll region. */
|
|
1630
|
-
header?: KerfUiContent;
|
|
1631
|
-
/** List layout for `header`; omitted fields keep List defaults. */
|
|
1632
|
-
headerList?: ListConfig;
|
|
1633
|
-
/** Placement of the top toolbar and header together; default `fixed`. */
|
|
1634
|
-
headerPlacement?: WorkbenchChromePlacement;
|
|
1635
|
-
/** Fixed content above a toolbar panel's bottom toolbar. */
|
|
1636
|
-
footer?: KerfUiContent;
|
|
1637
|
-
/** List layout for `footer`; omitted fields keep List defaults. */
|
|
1638
|
-
footerList?: ListConfig;
|
|
1639
|
-
/** Fixed toolbar below `footer`, using footer semantics. */
|
|
1640
|
-
bottomToolbar?: WorkbenchPanelBottomToolbar;
|
|
1641
|
-
/** Placement of the footer and bottom toolbar together; default `fixed`. */
|
|
1642
|
-
footerPlacement?: WorkbenchChromePlacement;
|
|
1643
|
-
/**
|
|
1644
|
-
* Configuration for a `toolbar` panel's `Pane` (`contentElement`,
|
|
1645
|
-
* `contentLabel`, `separators`, `safeAreaEdges`, `chromeDividers`) — for example
|
|
1646
|
-
* `{ contentElement: 'nav', contentLabel: 'Sections' }` for a navigation
|
|
1647
|
-
* rail. Omitted or `undefined` fields keep the `Pane` defaults. Ignored
|
|
1648
|
-
* without a `toolbar`, where `content` renders as given.
|
|
1649
|
-
*/
|
|
1650
|
-
pane?: PaneConfig;
|
|
1626
|
+
/** Region sizing, collapse, and presentation shared by either panel body. */
|
|
1627
|
+
interface WorkbenchPanelBase {
|
|
1651
1628
|
/** Whether the panel is currently collapsed (the app owns this). */
|
|
1652
1629
|
collapsed?: boolean;
|
|
1653
1630
|
/**
|
|
@@ -1694,6 +1671,41 @@ interface WorkbenchPanel {
|
|
|
1694
1671
|
restoreControl?: SafeHtml;
|
|
1695
1672
|
restorePosition?: ResizableRegionRestorePosition;
|
|
1696
1673
|
}
|
|
1674
|
+
/** The original static panel body: one toolbar, optional fixed chrome, and one Pane. */
|
|
1675
|
+
interface WorkbenchStaticPanel extends WorkbenchPanelBase {
|
|
1676
|
+
content: KerfUiContent;
|
|
1677
|
+
/** The composed toolbar; marked groups and its toggle relocate on collapse. */
|
|
1678
|
+
toolbar?: WorkbenchPanelToolbar;
|
|
1679
|
+
header?: KerfUiContent;
|
|
1680
|
+
headerList?: ListConfig;
|
|
1681
|
+
headerPlacement?: WorkbenchChromePlacement;
|
|
1682
|
+
footer?: KerfUiContent;
|
|
1683
|
+
footerList?: ListConfig;
|
|
1684
|
+
bottomToolbar?: WorkbenchPanelBottomToolbar;
|
|
1685
|
+
footerPlacement?: WorkbenchChromePlacement;
|
|
1686
|
+
/** Configuration for the static toolbar panel's Pane. */
|
|
1687
|
+
pane?: PaneConfig;
|
|
1688
|
+
navStack?: never;
|
|
1689
|
+
}
|
|
1690
|
+
/** A panel whose active NavStack view supplies the toolbar, fixed header, and scroll body. */
|
|
1691
|
+
interface WorkbenchNavigationPanel extends WorkbenchPanelBase {
|
|
1692
|
+
navStack: Omit<NavStackProps, 'panelToggle' | 'hideToolbar' | 'className' | 'slot'>;
|
|
1693
|
+
/** Supplies the standard toggle; active view groups precede it and may relocate on collapse. */
|
|
1694
|
+
toolbar: Omit<WorkbenchPanelToolbar, 'title' | 'leading' | 'center' | 'trailing'> & {
|
|
1695
|
+
toggle: NonNullable<WorkbenchPanelToolbar['toggle']>;
|
|
1696
|
+
};
|
|
1697
|
+
content?: never;
|
|
1698
|
+
header?: never;
|
|
1699
|
+
headerList?: never;
|
|
1700
|
+
headerPlacement?: never;
|
|
1701
|
+
footer?: never;
|
|
1702
|
+
footerList?: never;
|
|
1703
|
+
bottomToolbar?: never;
|
|
1704
|
+
footerPlacement?: never;
|
|
1705
|
+
pane?: never;
|
|
1706
|
+
}
|
|
1707
|
+
/** A collapsible Workbench side rail or bottom drawer. */
|
|
1708
|
+
type WorkbenchPanel = WorkbenchStaticPanel | WorkbenchNavigationPanel;
|
|
1697
1709
|
interface WorkbenchProps {
|
|
1698
1710
|
/**
|
|
1699
1711
|
* The Workbench's `id`. Each panel's `id` derives from it —
|
|
@@ -1794,7 +1806,7 @@ interface WorkbenchProps {
|
|
|
1794
1806
|
*/
|
|
1795
1807
|
declare function Workbench({ id, label, main, leftRail, rightRail, bottomDrawer, mainToolbar, mainHeader, mainFooter, mainBottomToolbar, mainHeaderPlacement, mainFooterPlacement, mainPane, mainHeaderList, mainFooterList, mainMinSize, mainMinHeight, overlayBackdrop, className, slot, }: WorkbenchProps): SafeHtml;
|
|
1796
1808
|
|
|
1797
|
-
export { Workbench, type WorkbenchChromePlacement, type WorkbenchCompactOverlay, type WorkbenchMainBottomToolbar, type WorkbenchMainToolbar, type WorkbenchPanel, type WorkbenchPanelBottomToolbar, type WorkbenchPanelResizable, type WorkbenchPanelToggle, type WorkbenchPanelToolbar, type WorkbenchProps, type WorkbenchResponsiveOverlayAt };
|
|
1809
|
+
export { Workbench, type WorkbenchChromePlacement, type WorkbenchCompactOverlay, type WorkbenchMainBottomToolbar, type WorkbenchMainToolbar, type WorkbenchNavigationPanel, type WorkbenchPanel, type WorkbenchPanelBottomToolbar, type WorkbenchPanelResizable, type WorkbenchPanelToggle, type WorkbenchPanelToolbar, type WorkbenchProps, type WorkbenchResponsiveOverlayAt, type WorkbenchStaticPanel };
|
|
1798
1810
|
```
|
|
1799
1811
|
|
|
1800
1812
|
## `@kerfjs/ui/wire-workbench`
|
|
@@ -2385,6 +2397,8 @@ import './workbench.js';
|
|
|
2385
2397
|
import './list.js';
|
|
2386
2398
|
import './css-values.js';
|
|
2387
2399
|
import './flex-alignment-4ms8ZbV8.js';
|
|
2400
|
+
import './nav-stack.js';
|
|
2401
|
+
import './toolbar-text.js';
|
|
2388
2402
|
import './resizable-region.js';
|
|
2389
2403
|
import './panel-toolbar-DDKh4uKd.js';
|
|
2390
2404
|
import './lucide-icon.js';
|
|
@@ -2478,6 +2492,8 @@ import './workbench.js';
|
|
|
2478
2492
|
import './list.js';
|
|
2479
2493
|
import './css-values.js';
|
|
2480
2494
|
import './flex-alignment-4ms8ZbV8.js';
|
|
2495
|
+
import './nav-stack.js';
|
|
2496
|
+
import './toolbar-text.js';
|
|
2481
2497
|
import './resizable-region.js';
|
|
2482
2498
|
import './panel-toolbar-DDKh4uKd.js';
|
|
2483
2499
|
import './lucide-icon.js';
|
|
@@ -3285,6 +3301,13 @@ type TextBorder = 'transparent' | 'none';
|
|
|
3285
3301
|
type TextLineHeight = 'default' | 'tight';
|
|
3286
3302
|
type TextWrap = 'normal' | 'anywhere' | 'nowrap' | 'truncate';
|
|
3287
3303
|
type TextContent = KerfUiContent | string | number | readonly TextContent[];
|
|
3304
|
+
type FieldLabelProps = Omit<KerfBaseAttrs, 'children' | 'class' | 'className'> & {
|
|
3305
|
+
children: string;
|
|
3306
|
+
class?: string;
|
|
3307
|
+
className?: string;
|
|
3308
|
+
};
|
|
3309
|
+
/** Visible field heading for a read-only preview; use its id with aria-labelledby on the preview group. */
|
|
3310
|
+
declare function FieldLabel({ children, class: classValue, className, ...attributes }: FieldLabelProps): kerfjs.SafeHtml;
|
|
3288
3311
|
type TextCommonProps = Omit<KerfBaseAttrs, 'children' | 'class' | 'className'> & {
|
|
3289
3312
|
/** Native heading, paragraph, or inline span element to render. Defaults to `p`. */
|
|
3290
3313
|
variant?: TextVariant;
|
|
@@ -3321,7 +3344,7 @@ type TextProps = TextCommonProps & ({
|
|
|
3321
3344
|
*/
|
|
3322
3345
|
declare function Text({ variant: Variant, tone, size, font, border, flush, lineHeight, wrap, maxLines, children, class: classValue, className, ...attributes }: TextProps): kerfjs.SafeHtml;
|
|
3323
3346
|
|
|
3324
|
-
export { Text, type TextBorder, type TextContent, type TextFont, type TextLineHeight, type TextProps, type TextSize, type TextTone, type TextVariant, type TextWrap };
|
|
3347
|
+
export { FieldLabel, type FieldLabelProps, Text, type TextBorder, type TextContent, type TextFont, type TextLineHeight, type TextProps, type TextSize, type TextTone, type TextVariant, type TextWrap };
|
|
3325
3348
|
```
|
|
3326
3349
|
|
|
3327
3350
|
## `@kerfjs/ui/row`
|
|
@@ -3394,6 +3417,10 @@ type GridRootAttributes = Readonly<Record<`data-${string}`, string | undefined>
|
|
|
3394
3417
|
}>;
|
|
3395
3418
|
interface GridCommonProps {
|
|
3396
3419
|
children?: KerfUiContent;
|
|
3420
|
+
/** Make this a labeled multi-select grid for `ContentItem selectionMode="multiple"` tiles. */
|
|
3421
|
+
selectionMode?: 'multiple';
|
|
3422
|
+
/** Accessible name for the multi-select grid. */
|
|
3423
|
+
ariaLabel?: string;
|
|
3397
3424
|
/** A named UI spacing token or typed CSS length. Defaults to xs. */
|
|
3398
3425
|
gap?: UiSpaceName | CssLength;
|
|
3399
3426
|
/** Allow this grid to grow/shrink, use a keyword, or supply a typed CSS flex shorthand. */
|
|
@@ -3423,7 +3450,7 @@ type GridProps = GridCommonProps & ({
|
|
|
3423
3450
|
autoFill?: boolean;
|
|
3424
3451
|
});
|
|
3425
3452
|
/** Render equal tracks with a fixed count or a responsive minimum width. */
|
|
3426
|
-
declare function Grid({ children, columns, minColumnWidth, autoFill, gap, flex, fill, className, rootAttributes, slot, }: GridProps): kerfjs.SafeHtml;
|
|
3453
|
+
declare function Grid({ children, selectionMode, ariaLabel, columns, minColumnWidth, autoFill, gap, flex, fill, className, rootAttributes, slot, }: GridProps): kerfjs.SafeHtml;
|
|
3427
3454
|
|
|
3428
3455
|
export { CssFlex, CssFlexKeyword, CssLength, Grid, type GridProps, UiSpaceName };
|
|
3429
3456
|
```
|
package/ai/skill.md
CHANGED
|
@@ -160,6 +160,10 @@ For equal-width responsive forms, set `Grid minColumnWidth={px(376)}` instead of
|
|
|
160
160
|
`columns`. Grid fits tracks from its own container width and collapses to one
|
|
161
161
|
when a second minimum-width track plus the gap no longer fits. Constrain the
|
|
162
162
|
outer Grid width when the form should have a maximum column count.
|
|
163
|
+
For selectable document tiles, set `Grid selectionMode="multiple"` and
|
|
164
|
+
`ariaLabel`, render `ContentItem selectionMode="multiple"` children, and wire
|
|
165
|
+
`wireContentItems` for arrows, Home/End, and card activation. The app owns the
|
|
166
|
+
selection set and each tile's nested controls.
|
|
163
167
|
|
|
164
168
|
For a complete shell, sidebar, workspace header, list-detail dialog, composer
|
|
165
169
|
form, list-state lifecycle, or mixed-control toolbar, start from the runnable
|
|
@@ -242,6 +246,8 @@ Set `--kui-toolbar-inset: 0px` on an embedded Toolbar to remove its outer paddin
|
|
|
242
246
|
|
|
243
247
|
For compact dialog copy, use `Text flush lineHeight="tight"`; for compact metadata, use `ValueTable density="compact"` and its public row columns/padding/gap tokens. `ToolbarText size="xsmall"` fits a dense rail heading. A `TokenSearchField` editor shrinks inside a narrow group by default; set `--kui-token-search-editor-min-width` when a minimum is needed. A full-height shell uses the one `.kui-app-root` mount container documented in `docs/document-baseline.md`.
|
|
244
248
|
|
|
249
|
+
For a read-only field preview that replaces a Web Awesome input, use `FieldLabel` from `@kerfjs/ui/text` above the preview. Put it in `ListInsetControl sides="trl"` beside a `ContentItem` value; give it an id and use `aria-labelledby` on the preview group. The app owns preview/edit state and hint copy.
|
|
250
|
+
|
|
245
251
|
Common mistakes:
|
|
246
252
|
|
|
247
253
|
| Mistake | Fix |
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Web Awesome JSX signatures for the UI authoring corpus
|
|
2
2
|
|
|
3
|
-
Generated from the emitted `@kerfjs/ui@5.0.0-beta.
|
|
3
|
+
Generated from the emitted `@kerfjs/ui@5.0.0-beta.67` declaration boundary. Import `@kerfjs/ui/webawesome` for type effects when authoring direct `wa-*` JSX. The module emits no runtime behavior and does not register custom elements.
|
|
4
4
|
|
|
5
5
|
```ts
|
|
6
6
|
import { KerfCustomElement } from 'kerfjs/jsx-runtime';
|