@kerfjs/ui 5.0.0-beta.18 → 5.0.0-beta.22
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 +114 -3
- package/ai/application-ui-diagnostic-ids-v1.json +92 -0
- package/ai/application-ui-profile-sync.cjs +529 -0
- package/ai/application-ui-profile.d.mts +1 -0
- package/ai/application-ui-profile.d.ts +102 -0
- package/ai/application-ui-profile.defaults.json +41 -0
- package/ai/application-ui-profile.mjs +626 -0
- package/ai/application-ui-profile.schema.json +130 -0
- package/ai/catalog-authoring.json +25 -0
- package/ai/catalog-authoring.schema.json +61 -0
- package/ai/compile-time-contracts-v1.json +101 -0
- package/ai/compile-time-contracts-v1.schema.json +49 -0
- package/ai/component-catalog-extension-v2.d.ts +7 -0
- package/ai/component-catalog-extension-v2.schema.json +7 -0
- package/ai/component-catalog-v2-overrides.json +326 -0
- package/ai/component-catalog-v2.d.ts +67 -0
- package/ai/component-catalog-v2.json +4441 -0
- package/ai/component-catalog-v2.schema.json +246 -0
- package/ai/component-catalog.json +150 -6
- package/ai/public-api-signatures-v1.md +294 -64
- package/ai/skill.md +41 -5
- package/ai/webawesome-jsx-signatures-v1.md +1 -1
- package/analyzer/cli.mjs +46 -0
- package/analyzer/index.d.mts +45 -0
- package/analyzer/index.mjs +743 -0
- package/analyzer/report.schema.json +66 -0
- package/dist/browser/pane.js +3 -0
- package/dist/browser/sunken-panel.js +3 -0
- package/dist/catalog-resources.d.ts +34 -0
- package/dist/catalog-resources.js +22 -0
- package/dist/catalog-resources.js.map +1 -0
- package/dist/catalog.d.ts +21 -3
- package/dist/catalog.js +239 -210
- package/dist/catalog.js.map +1 -1
- package/dist/{chunk-ZK2G3VR5.js → chunk-5VTB2BKP.js} +1 -1
- package/dist/chunk-5VTB2BKP.js.map +1 -0
- package/dist/{chunk-S3HKPI7I.js → chunk-7KEUJIIC.js} +1 -1
- package/dist/chunk-7KEUJIIC.js.map +1 -0
- package/dist/{chunk-NVWXKU37.js → chunk-AASLYRGE.js} +1 -1
- package/dist/chunk-AASLYRGE.js.map +1 -0
- package/dist/{chunk-QIRXYKCE.js → chunk-DSNIYOZ3.js} +3 -2
- package/dist/chunk-DSNIYOZ3.js.map +1 -0
- package/dist/{chunk-ENVTNLYC.js → chunk-GP5DP5DL.js} +55 -15
- package/dist/chunk-GP5DP5DL.js.map +1 -0
- package/dist/chunk-JRKSK2HX.js +79 -0
- package/dist/chunk-JRKSK2HX.js.map +1 -0
- package/dist/{chunk-U5IFGQCD.js → chunk-K57KRAOV.js} +1 -1
- package/dist/chunk-K57KRAOV.js.map +1 -0
- package/dist/{chunk-ZVI5YST2.js → chunk-M7JBER5U.js} +1 -1
- package/dist/chunk-M7JBER5U.js.map +1 -0
- package/dist/{chunk-43FUQH35.js → chunk-OHU6CI22.js} +2 -2
- package/dist/{chunk-43FUQH35.js.map → chunk-OHU6CI22.js.map} +1 -1
- package/dist/{chunk-4TRDV6RL.js → chunk-OZWU5ZPZ.js} +1 -1
- package/dist/chunk-OZWU5ZPZ.js.map +1 -0
- package/dist/{chunk-JTHUXDN2.js → chunk-RYRIFZCT.js} +3 -3
- package/dist/chunk-RYRIFZCT.js.map +1 -0
- package/dist/{chunk-6ETZKKAE.js → chunk-VLYV65LK.js} +1 -1
- package/dist/chunk-VLYV65LK.js.map +1 -0
- package/dist/chunk-W4CXQYSG.js +23 -0
- package/dist/chunk-W4CXQYSG.js.map +1 -0
- package/dist/{chunk-S3PCZ7NV.js → chunk-W7YD6E4N.js} +1 -1
- package/dist/chunk-W7YD6E4N.js.map +1 -0
- package/dist/index.d.ts +6 -4
- package/dist/index.js +14 -12
- package/dist/list-header.d.ts +29 -8
- package/dist/list-header.js +1 -1
- package/dist/nav-stack.js +1 -1
- package/dist/pane.d.ts +49 -0
- package/dist/pane.js +4 -0
- package/dist/pane.js.map +1 -0
- package/dist/panel-header.d.ts +9 -3
- package/dist/panel-header.js +1 -1
- package/dist/segmented-control.d.ts +6 -6
- package/dist/segmented-control.js +1 -1
- package/dist/select.d.ts +10 -4
- package/dist/select.js +1 -1
- package/dist/split-view.js +2 -2
- package/dist/state-banner.d.ts +3 -2
- package/dist/state-banner.js +1 -1
- package/dist/styles/catalog.css +6 -6
- package/dist/styles/layout.css +2 -20
- package/dist/styles/pane.css +62 -0
- package/dist/styles/segmented-control.css +3 -7
- package/dist/styles/sunken-panel.css +18 -0
- package/dist/sunken-panel.d.ts +16 -0
- package/dist/sunken-panel.js +3 -0
- package/dist/sunken-panel.js.map +1 -0
- package/dist/tab-bar.d.ts +3 -2
- package/dist/tab-bar.js +1 -1
- package/dist/tab-scaffold.d.ts +6 -6
- package/dist/tab-scaffold.js.map +1 -1
- package/dist/token-search-field.d.ts +25 -9
- package/dist/token-search-field.js +1 -1
- package/dist/toolbar-control-group.d.ts +9 -5
- package/dist/toolbar-control-group.js +1 -1
- package/dist/toolbar-text.d.ts +10 -11
- package/dist/toolbar-text.js +1 -1
- package/dist/wire-tab-bars.d.ts +5 -2
- package/dist/wire-tab-bars.js +1 -1
- package/dist/wire-token-search-fields.d.ts +11 -6
- package/dist/wire-token-search-fields.js +1 -1
- package/docs/catalog.md +186 -67
- package/docs/component-contract.md +102 -5
- package/docs/component-selection.md +9 -5
- package/docs/design/templates/panel-header/icon-actions-dark.svg +1 -1
- package/docs/design/templates/panel-header/icon-actions.svg +1 -1
- package/docs/design/templates/panel-header/icon-summary-actions-dark.svg +1 -1
- package/docs/design/templates/panel-header/icon-summary-actions.svg +1 -1
- package/docs/design/templates/panel-header/no-icon-dark.svg +1 -1
- package/docs/design/templates/panel-header/no-icon.svg +1 -1
- package/docs/design/templates/panel-header/page-heading-dark.svg +1 -1
- package/docs/design/templates/panel-header/page-heading.svg +1 -1
- package/docs/design/templates/panel-header/title-only-dark.svg +1 -1
- package/docs/design/templates/panel-header/title-only.svg +1 -1
- package/docs/design/templates/panel-header-dark.svg +5 -5
- package/docs/design/templates/panel-header.svg +5 -5
- 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-dark.svg +1 -1
- package/docs/design/templates/segmented-control.svg +1 -1
- package/docs/design/templates/toolbar/title-and-actions-dark.svg +1 -1
- package/docs/design/templates/toolbar/title-and-actions.svg +1 -1
- package/docs/design/templates/toolbar-control-group/with-text-dark.svg +1 -1
- package/docs/design/templates/toolbar-control-group/with-text.svg +1 -1
- package/docs/design/templates/toolbar-control-group-dark.svg +1 -1
- package/docs/design/templates/toolbar-control-group.svg +1 -1
- package/docs/design/templates/toolbar-dark.svg +1 -1
- package/docs/design/templates/toolbar-text/default-dark.svg +1 -1
- package/docs/design/templates/toolbar-text/default.svg +1 -1
- package/docs/design/templates/toolbar-text/large-dark.svg +1 -1
- package/docs/design/templates/toolbar-text/large.svg +1 -1
- package/docs/design/templates/toolbar-text/small-dark.svg +1 -1
- package/docs/design/templates/toolbar-text/small.svg +1 -1
- package/docs/design/templates/toolbar-text-dark.svg +3 -3
- package/docs/design/templates/toolbar-text.svg +3 -3
- package/docs/design/templates/toolbar.svg +1 -1
- package/docs/design/templates.md +11 -6
- package/docs/design-philosophy.md +2 -4
- package/docs/examples/application-ui-profile.json +60 -0
- package/docs/examples/component-catalog-extension-v2.json +81 -0
- package/docs/layout.md +42 -23
- package/docs/sunken-panel.md +43 -0
- package/docs/type-contracts.md +99 -0
- package/docs/ui-analyzer.md +81 -0
- package/docs/ui-doctor.md +77 -0
- package/docs/ui-evaluator.md +122 -0
- package/doctor/cli.mjs +115 -0
- package/doctor/config.schema.json +68 -0
- package/doctor/index.d.mts +116 -0
- package/doctor/index.mjs +1256 -0
- package/doctor/report.schema.json +118 -0
- package/evaluator/cli.mjs +89 -0
- package/evaluator/index.d.mts +90 -0
- package/evaluator/index.mjs +1138 -0
- package/evaluator/report.schema.json +152 -0
- package/llms.txt +40 -3
- package/package.json +66 -8
- package/ux-demo/recipes/compact-toolbar.tsx +2 -2
- package/ux-demo/recipes/composer-form.tsx +1 -1
- package/dist/chunk-4TRDV6RL.js.map +0 -1
- package/dist/chunk-6ETZKKAE.js.map +0 -1
- package/dist/chunk-ENVTNLYC.js.map +0 -1
- package/dist/chunk-JTHUXDN2.js.map +0 -1
- package/dist/chunk-NVWXKU37.js.map +0 -1
- package/dist/chunk-QIRXYKCE.js.map +0 -1
- package/dist/chunk-S3HKPI7I.js.map +0 -1
- package/dist/chunk-S3PCZ7NV.js.map +0 -1
- package/dist/chunk-U5IFGQCD.js.map +0 -1
- package/dist/chunk-ZK2G3VR5.js.map +0 -1
- package/dist/chunk-ZVI5YST2.js.map +0 -1
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://raw.githubusercontent.com/brianwestphal/kerf/main/ui/ai/component-catalog-v2.schema.json",
|
|
4
|
+
"title": "Kerf UI composition catalog v2",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"required": ["schemaVersion", "package", "compatibility", "entries"],
|
|
7
|
+
"properties": {
|
|
8
|
+
"$schema": { "type": "string" },
|
|
9
|
+
"schemaVersion": { "const": 2 },
|
|
10
|
+
"package": { "type": "string", "minLength": 1 },
|
|
11
|
+
"compatibility": {
|
|
12
|
+
"type": "object",
|
|
13
|
+
"required": ["v1Catalog", "identity"],
|
|
14
|
+
"properties": {
|
|
15
|
+
"v1Catalog": { "type": "string", "minLength": 1 },
|
|
16
|
+
"identity": { "const": "package:id" }
|
|
17
|
+
},
|
|
18
|
+
"additionalProperties": false
|
|
19
|
+
},
|
|
20
|
+
"entries": { "type": "array", "items": { "$ref": "#/$defs/entry" } }
|
|
21
|
+
},
|
|
22
|
+
"additionalProperties": false,
|
|
23
|
+
"$defs": {
|
|
24
|
+
"stringList": {
|
|
25
|
+
"type": "array",
|
|
26
|
+
"items": { "type": "string", "minLength": 1 },
|
|
27
|
+
"uniqueItems": true
|
|
28
|
+
},
|
|
29
|
+
"cardinality": {
|
|
30
|
+
"type": "object",
|
|
31
|
+
"required": ["min", "max"],
|
|
32
|
+
"properties": {
|
|
33
|
+
"min": { "type": "integer", "minimum": 0 },
|
|
34
|
+
"max": {
|
|
35
|
+
"anyOf": [
|
|
36
|
+
{ "type": "integer", "minimum": 1 },
|
|
37
|
+
{ "const": "unbounded" }
|
|
38
|
+
]
|
|
39
|
+
}
|
|
40
|
+
},
|
|
41
|
+
"additionalProperties": false
|
|
42
|
+
},
|
|
43
|
+
"zone": {
|
|
44
|
+
"type": "object",
|
|
45
|
+
"required": ["id", "accepts", "cardinality", "exclusiveWith"],
|
|
46
|
+
"properties": {
|
|
47
|
+
"id": { "type": "string", "minLength": 1 },
|
|
48
|
+
"accepts": { "$ref": "#/$defs/stringList" },
|
|
49
|
+
"cardinality": { "$ref": "#/$defs/cardinality" },
|
|
50
|
+
"exclusiveWith": { "$ref": "#/$defs/stringList" }
|
|
51
|
+
},
|
|
52
|
+
"additionalProperties": false
|
|
53
|
+
},
|
|
54
|
+
"state": {
|
|
55
|
+
"type": "object",
|
|
56
|
+
"required": ["id", "owner", "required"],
|
|
57
|
+
"properties": {
|
|
58
|
+
"id": { "type": "string", "minLength": 1 },
|
|
59
|
+
"owner": { "enum": ["application", "controlled", "component"] },
|
|
60
|
+
"required": { "type": "boolean" }
|
|
61
|
+
},
|
|
62
|
+
"additionalProperties": false
|
|
63
|
+
},
|
|
64
|
+
"diagnostic": {
|
|
65
|
+
"type": "object",
|
|
66
|
+
"required": ["id", "severity", "when", "message"],
|
|
67
|
+
"properties": {
|
|
68
|
+
"id": { "type": "string", "pattern": "^KUI-C[0-9]{3}$" },
|
|
69
|
+
"severity": { "enum": ["error", "warning"] },
|
|
70
|
+
"when": { "type": "string", "minLength": 1 },
|
|
71
|
+
"message": { "type": "string", "minLength": 1 }
|
|
72
|
+
},
|
|
73
|
+
"additionalProperties": false
|
|
74
|
+
},
|
|
75
|
+
"entry": {
|
|
76
|
+
"type": "object",
|
|
77
|
+
"required": [
|
|
78
|
+
"key",
|
|
79
|
+
"package",
|
|
80
|
+
"id",
|
|
81
|
+
"name",
|
|
82
|
+
"kind",
|
|
83
|
+
"source",
|
|
84
|
+
"parents",
|
|
85
|
+
"contexts",
|
|
86
|
+
"zones",
|
|
87
|
+
"children",
|
|
88
|
+
"state",
|
|
89
|
+
"wiring",
|
|
90
|
+
"responsive",
|
|
91
|
+
"layout",
|
|
92
|
+
"accessibility",
|
|
93
|
+
"boundaries",
|
|
94
|
+
"diagnostics",
|
|
95
|
+
"provenance"
|
|
96
|
+
],
|
|
97
|
+
"properties": {
|
|
98
|
+
"key": { "type": "string", "minLength": 3 },
|
|
99
|
+
"package": { "type": "string", "minLength": 1 },
|
|
100
|
+
"id": { "type": "string", "minLength": 1 },
|
|
101
|
+
"name": { "type": "string", "minLength": 1 },
|
|
102
|
+
"kind": { "enum": ["component", "composition", "recipe"] },
|
|
103
|
+
"purpose": { "type": "string", "minLength": 1 },
|
|
104
|
+
"publicExports": {
|
|
105
|
+
"type": "array",
|
|
106
|
+
"items": {
|
|
107
|
+
"type": "object",
|
|
108
|
+
"required": ["name", "subpath"],
|
|
109
|
+
"properties": {
|
|
110
|
+
"name": { "type": "string", "minLength": 1 },
|
|
111
|
+
"subpath": { "type": "string", "pattern": "^\\." }
|
|
112
|
+
},
|
|
113
|
+
"additionalProperties": false
|
|
114
|
+
},
|
|
115
|
+
"minItems": 1
|
|
116
|
+
},
|
|
117
|
+
"sourceLinks": { "$ref": "#/$defs/stringList" },
|
|
118
|
+
"source": { "type": "string", "minLength": 1 },
|
|
119
|
+
"parents": {
|
|
120
|
+
"type": "object",
|
|
121
|
+
"required": ["mode", "entries"],
|
|
122
|
+
"properties": {
|
|
123
|
+
"mode": { "enum": ["any", "root", "listed"] },
|
|
124
|
+
"entries": { "$ref": "#/$defs/stringList" }
|
|
125
|
+
},
|
|
126
|
+
"additionalProperties": false
|
|
127
|
+
},
|
|
128
|
+
"contexts": { "$ref": "#/$defs/stringList" },
|
|
129
|
+
"zones": { "type": "array", "items": { "$ref": "#/$defs/zone" } },
|
|
130
|
+
"children": {
|
|
131
|
+
"type": "object",
|
|
132
|
+
"required": ["mode", "concepts", "requiredConcepts"],
|
|
133
|
+
"properties": {
|
|
134
|
+
"mode": { "enum": ["any", "none", "listed"] },
|
|
135
|
+
"concepts": { "$ref": "#/$defs/stringList" },
|
|
136
|
+
"requiredConcepts": { "$ref": "#/$defs/stringList" }
|
|
137
|
+
},
|
|
138
|
+
"additionalProperties": false
|
|
139
|
+
},
|
|
140
|
+
"state": { "type": "array", "items": { "$ref": "#/$defs/state" } },
|
|
141
|
+
"wiring": {
|
|
142
|
+
"type": "object",
|
|
143
|
+
"required": ["required", "helpers", "obligations"],
|
|
144
|
+
"properties": {
|
|
145
|
+
"required": { "type": "boolean" },
|
|
146
|
+
"helpers": { "$ref": "#/$defs/stringList" },
|
|
147
|
+
"obligations": { "$ref": "#/$defs/stringList" }
|
|
148
|
+
},
|
|
149
|
+
"additionalProperties": false
|
|
150
|
+
},
|
|
151
|
+
"responsive": {
|
|
152
|
+
"type": "object",
|
|
153
|
+
"required": ["owner", "behaviors"],
|
|
154
|
+
"properties": {
|
|
155
|
+
"owner": {
|
|
156
|
+
"enum": ["application", "component", "shared", "not-applicable"]
|
|
157
|
+
},
|
|
158
|
+
"behaviors": { "$ref": "#/$defs/stringList" }
|
|
159
|
+
},
|
|
160
|
+
"additionalProperties": false
|
|
161
|
+
},
|
|
162
|
+
"layout": {
|
|
163
|
+
"type": "object",
|
|
164
|
+
"required": ["roles", "geometry"],
|
|
165
|
+
"properties": {
|
|
166
|
+
"roles": { "$ref": "#/$defs/stringList" },
|
|
167
|
+
"geometry": {
|
|
168
|
+
"type": "object",
|
|
169
|
+
"required": ["margin", "border", "padding"],
|
|
170
|
+
"properties": {
|
|
171
|
+
"margin": {
|
|
172
|
+
"enum": [
|
|
173
|
+
"self",
|
|
174
|
+
"parent",
|
|
175
|
+
"child",
|
|
176
|
+
"none",
|
|
177
|
+
"conditional",
|
|
178
|
+
"composed"
|
|
179
|
+
]
|
|
180
|
+
},
|
|
181
|
+
"border": {
|
|
182
|
+
"enum": [
|
|
183
|
+
"self",
|
|
184
|
+
"parent",
|
|
185
|
+
"child",
|
|
186
|
+
"none",
|
|
187
|
+
"conditional",
|
|
188
|
+
"composed"
|
|
189
|
+
]
|
|
190
|
+
},
|
|
191
|
+
"padding": {
|
|
192
|
+
"enum": [
|
|
193
|
+
"self",
|
|
194
|
+
"parent",
|
|
195
|
+
"child",
|
|
196
|
+
"none",
|
|
197
|
+
"conditional",
|
|
198
|
+
"composed"
|
|
199
|
+
]
|
|
200
|
+
},
|
|
201
|
+
"notes": { "$ref": "#/$defs/stringList" }
|
|
202
|
+
},
|
|
203
|
+
"additionalProperties": false
|
|
204
|
+
}
|
|
205
|
+
},
|
|
206
|
+
"additionalProperties": false
|
|
207
|
+
},
|
|
208
|
+
"accessibility": {
|
|
209
|
+
"type": "object",
|
|
210
|
+
"required": ["obligations"],
|
|
211
|
+
"properties": { "obligations": { "$ref": "#/$defs/stringList" } },
|
|
212
|
+
"additionalProperties": false
|
|
213
|
+
},
|
|
214
|
+
"boundaries": {
|
|
215
|
+
"type": "object",
|
|
216
|
+
"required": ["rootClass", "publicClasses", "publicTokens"],
|
|
217
|
+
"properties": {
|
|
218
|
+
"rootClass": {
|
|
219
|
+
"oneOf": [
|
|
220
|
+
{ "type": "string", "minLength": 1 },
|
|
221
|
+
{ "type": "null" }
|
|
222
|
+
]
|
|
223
|
+
},
|
|
224
|
+
"publicClasses": { "$ref": "#/$defs/stringList" },
|
|
225
|
+
"publicTokens": { "$ref": "#/$defs/stringList" }
|
|
226
|
+
},
|
|
227
|
+
"additionalProperties": false
|
|
228
|
+
},
|
|
229
|
+
"diagnostics": {
|
|
230
|
+
"type": "array",
|
|
231
|
+
"items": { "$ref": "#/$defs/diagnostic" }
|
|
232
|
+
},
|
|
233
|
+
"provenance": {
|
|
234
|
+
"type": "object",
|
|
235
|
+
"required": ["selection", "composition"],
|
|
236
|
+
"properties": {
|
|
237
|
+
"selection": { "type": "string", "minLength": 1 },
|
|
238
|
+
"composition": { "type": "string", "minLength": 1 }
|
|
239
|
+
},
|
|
240
|
+
"additionalProperties": false
|
|
241
|
+
}
|
|
242
|
+
},
|
|
243
|
+
"additionalProperties": false
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
}
|
|
@@ -303,10 +303,6 @@
|
|
|
303
303
|
"kui-content-item--pill",
|
|
304
304
|
"kui-control-cluster",
|
|
305
305
|
"kui-inline-metadata",
|
|
306
|
-
"kui-pane",
|
|
307
|
-
"kui-pane__content",
|
|
308
|
-
"kui-pane__footer",
|
|
309
|
-
"kui-pane__toolbar",
|
|
310
306
|
"kui-scroll-owner"
|
|
311
307
|
],
|
|
312
308
|
"publicTokens": [
|
|
@@ -325,6 +321,155 @@
|
|
|
325
321
|
"recipe": "docs/layout.md#public-roles-and-tokens"
|
|
326
322
|
}
|
|
327
323
|
},
|
|
324
|
+
{
|
|
325
|
+
"id": "pane",
|
|
326
|
+
"name": "Pane",
|
|
327
|
+
"category": "Structure",
|
|
328
|
+
"kind": "component",
|
|
329
|
+
"source": "kerf",
|
|
330
|
+
"description": "An unpadded application column with optional vertical header/footer slots, one scrolling vertical content stack, and independent logical-edge separators.",
|
|
331
|
+
"uses": [],
|
|
332
|
+
"purpose": "Organize a sidebar, main area, inspector, or dialog column into fixed vertical header/footer chrome around one scrolling content owner.",
|
|
333
|
+
"publicExports": [
|
|
334
|
+
"Pane"
|
|
335
|
+
],
|
|
336
|
+
"useWhen": [
|
|
337
|
+
"An application column needs shared header, content, and optional footer organization with exactly one scrolling content owner.",
|
|
338
|
+
"A pane boundary needs an opt-in separator on any combination of logical sides."
|
|
339
|
+
],
|
|
340
|
+
"avoidWhen": [
|
|
341
|
+
"Do not use Pane as a padded card or add a competing scroll owner around its content slot.",
|
|
342
|
+
"Do not enable separators merely as decoration; use them only where the pane owns a real boundary."
|
|
343
|
+
],
|
|
344
|
+
"alternatives": [
|
|
345
|
+
{
|
|
346
|
+
"id": "layout",
|
|
347
|
+
"relationship": "composes-with",
|
|
348
|
+
"when": "Use the layout content-item and control classes inside Pane when children need shared geometry."
|
|
349
|
+
}
|
|
350
|
+
],
|
|
351
|
+
"appOwns": [
|
|
352
|
+
"root and content semantics",
|
|
353
|
+
"accessible labels",
|
|
354
|
+
"header, content, and footer children",
|
|
355
|
+
"which logical boundaries show separators",
|
|
356
|
+
"responsive placement and visibility"
|
|
357
|
+
],
|
|
358
|
+
"variants": [
|
|
359
|
+
"content only",
|
|
360
|
+
"header + content",
|
|
361
|
+
"header + content + footer",
|
|
362
|
+
"block-start separator",
|
|
363
|
+
"block-end separator",
|
|
364
|
+
"inline-start separator",
|
|
365
|
+
"inline-end separator"
|
|
366
|
+
],
|
|
367
|
+
"accessibility": [
|
|
368
|
+
"Choose semantic root and content elements that match the region and provide labels for landmark elements.",
|
|
369
|
+
"Keep fixed header/footer chrome outside the single scrolling content slot so reading and focus order remain coherent."
|
|
370
|
+
],
|
|
371
|
+
"geometry": {
|
|
372
|
+
"margin": "child",
|
|
373
|
+
"border": "conditional",
|
|
374
|
+
"padding": "child",
|
|
375
|
+
"notes": [
|
|
376
|
+
"The pane is unpadded; separators are independently opt-in on logical edges and default off."
|
|
377
|
+
]
|
|
378
|
+
},
|
|
379
|
+
"delivery": {
|
|
380
|
+
"browserImport": "@kerfjs/ui/pane",
|
|
381
|
+
"manualCssImport": "@kerfjs/ui/pane.css",
|
|
382
|
+
"sideEffects": [
|
|
383
|
+
"browser-condition-css"
|
|
384
|
+
]
|
|
385
|
+
},
|
|
386
|
+
"wiring": [],
|
|
387
|
+
"publicClasses": [
|
|
388
|
+
"kui-pane",
|
|
389
|
+
"kui-pane__content",
|
|
390
|
+
"kui-pane__footer",
|
|
391
|
+
"kui-pane__header",
|
|
392
|
+
"kui-pane__toolbar"
|
|
393
|
+
],
|
|
394
|
+
"publicTokens": [
|
|
395
|
+
"--kui-pane-separator-color",
|
|
396
|
+
"--kui-pane-separator-width"
|
|
397
|
+
],
|
|
398
|
+
"links": {
|
|
399
|
+
"catalogRoute": "?component=pane",
|
|
400
|
+
"documentation": "docs/component-selection.md",
|
|
401
|
+
"recipe": "docs/layout.md#anatomy"
|
|
402
|
+
}
|
|
403
|
+
},
|
|
404
|
+
{
|
|
405
|
+
"id": "sunken-panel",
|
|
406
|
+
"name": "SunkenPanel",
|
|
407
|
+
"category": "Structure",
|
|
408
|
+
"kind": "component",
|
|
409
|
+
"source": "kerf",
|
|
410
|
+
"description": "A lowered application surface with one compact inset and a vertical content stack.",
|
|
411
|
+
"uses": [],
|
|
412
|
+
"purpose": "Group a vertical list of application content on a visually lowered surface with one owned 8px inset.",
|
|
413
|
+
"publicExports": [
|
|
414
|
+
"SunkenPanel"
|
|
415
|
+
],
|
|
416
|
+
"useWhen": [
|
|
417
|
+
"A main content region or nested work area needs a darker/lowered background and one compact inset around a vertical stack."
|
|
418
|
+
],
|
|
419
|
+
"avoidWhen": [
|
|
420
|
+
"Do not use it merely to add padding, as a substitute for Pane anatomy, or around children that already own the same outer surface."
|
|
421
|
+
],
|
|
422
|
+
"alternatives": [
|
|
423
|
+
{
|
|
424
|
+
"id": "layout",
|
|
425
|
+
"relationship": "composes-with",
|
|
426
|
+
"when": "Use layout roles for pane, toolbar, scroll, and ordinary content-stack ownership."
|
|
427
|
+
}
|
|
428
|
+
],
|
|
429
|
+
"appOwns": [
|
|
430
|
+
"region semantics and accessible name",
|
|
431
|
+
"scroll ownership",
|
|
432
|
+
"child ordering and content"
|
|
433
|
+
],
|
|
434
|
+
"variants": [
|
|
435
|
+
"unnamed surface",
|
|
436
|
+
"named region"
|
|
437
|
+
],
|
|
438
|
+
"accessibility": [
|
|
439
|
+
"Pass ariaLabel only when the surface is a distinct named region; otherwise it remains a non-landmark grouping."
|
|
440
|
+
],
|
|
441
|
+
"geometry": {
|
|
442
|
+
"margin": "none",
|
|
443
|
+
"border": "none",
|
|
444
|
+
"padding": "self",
|
|
445
|
+
"notes": [
|
|
446
|
+
"The root owns one 8px inset and vertical gap; children own their borders and internal geometry."
|
|
447
|
+
]
|
|
448
|
+
},
|
|
449
|
+
"delivery": {
|
|
450
|
+
"browserImport": "@kerfjs/ui/sunken-panel",
|
|
451
|
+
"manualCssImport": "@kerfjs/ui/sunken-panel.css",
|
|
452
|
+
"sideEffects": [
|
|
453
|
+
"browser-condition-css"
|
|
454
|
+
]
|
|
455
|
+
},
|
|
456
|
+
"wiring": [],
|
|
457
|
+
"publicClasses": [
|
|
458
|
+
"kui-sunken-panel"
|
|
459
|
+
],
|
|
460
|
+
"publicTokens": [
|
|
461
|
+
"--kui-sunken-panel-background",
|
|
462
|
+
"--kui-sunken-panel-foreground",
|
|
463
|
+
"--kui-sunken-panel-gap",
|
|
464
|
+
"--kui-sunken-panel-padding",
|
|
465
|
+
"--kui-sunken-panel-radius"
|
|
466
|
+
],
|
|
467
|
+
"links": {
|
|
468
|
+
"catalogRoute": "?component=sunken-panel",
|
|
469
|
+
"documentation": "docs/sunken-panel.md",
|
|
470
|
+
"recipe": "docs/sunken-panel.md#ownership"
|
|
471
|
+
}
|
|
472
|
+
},
|
|
328
473
|
{
|
|
329
474
|
"id": "toolbar",
|
|
330
475
|
"name": "Toolbar",
|
|
@@ -894,8 +1039,7 @@
|
|
|
894
1039
|
"wiring": [],
|
|
895
1040
|
"publicClasses": [
|
|
896
1041
|
"kui-content",
|
|
897
|
-
"kui-content-item"
|
|
898
|
-
"kui-pane"
|
|
1042
|
+
"kui-content-item"
|
|
899
1043
|
],
|
|
900
1044
|
"publicTokens": [
|
|
901
1045
|
"--kui-layout-content-gap",
|