@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.
Files changed (170) hide show
  1. package/README.md +114 -3
  2. package/ai/application-ui-diagnostic-ids-v1.json +92 -0
  3. package/ai/application-ui-profile-sync.cjs +529 -0
  4. package/ai/application-ui-profile.d.mts +1 -0
  5. package/ai/application-ui-profile.d.ts +102 -0
  6. package/ai/application-ui-profile.defaults.json +41 -0
  7. package/ai/application-ui-profile.mjs +626 -0
  8. package/ai/application-ui-profile.schema.json +130 -0
  9. package/ai/catalog-authoring.json +25 -0
  10. package/ai/catalog-authoring.schema.json +61 -0
  11. package/ai/compile-time-contracts-v1.json +101 -0
  12. package/ai/compile-time-contracts-v1.schema.json +49 -0
  13. package/ai/component-catalog-extension-v2.d.ts +7 -0
  14. package/ai/component-catalog-extension-v2.schema.json +7 -0
  15. package/ai/component-catalog-v2-overrides.json +326 -0
  16. package/ai/component-catalog-v2.d.ts +67 -0
  17. package/ai/component-catalog-v2.json +4441 -0
  18. package/ai/component-catalog-v2.schema.json +246 -0
  19. package/ai/component-catalog.json +150 -6
  20. package/ai/public-api-signatures-v1.md +294 -64
  21. package/ai/skill.md +41 -5
  22. package/ai/webawesome-jsx-signatures-v1.md +1 -1
  23. package/analyzer/cli.mjs +46 -0
  24. package/analyzer/index.d.mts +45 -0
  25. package/analyzer/index.mjs +743 -0
  26. package/analyzer/report.schema.json +66 -0
  27. package/dist/browser/pane.js +3 -0
  28. package/dist/browser/sunken-panel.js +3 -0
  29. package/dist/catalog-resources.d.ts +34 -0
  30. package/dist/catalog-resources.js +22 -0
  31. package/dist/catalog-resources.js.map +1 -0
  32. package/dist/catalog.d.ts +21 -3
  33. package/dist/catalog.js +239 -210
  34. package/dist/catalog.js.map +1 -1
  35. package/dist/{chunk-ZK2G3VR5.js → chunk-5VTB2BKP.js} +1 -1
  36. package/dist/chunk-5VTB2BKP.js.map +1 -0
  37. package/dist/{chunk-S3HKPI7I.js → chunk-7KEUJIIC.js} +1 -1
  38. package/dist/chunk-7KEUJIIC.js.map +1 -0
  39. package/dist/{chunk-NVWXKU37.js → chunk-AASLYRGE.js} +1 -1
  40. package/dist/chunk-AASLYRGE.js.map +1 -0
  41. package/dist/{chunk-QIRXYKCE.js → chunk-DSNIYOZ3.js} +3 -2
  42. package/dist/chunk-DSNIYOZ3.js.map +1 -0
  43. package/dist/{chunk-ENVTNLYC.js → chunk-GP5DP5DL.js} +55 -15
  44. package/dist/chunk-GP5DP5DL.js.map +1 -0
  45. package/dist/chunk-JRKSK2HX.js +79 -0
  46. package/dist/chunk-JRKSK2HX.js.map +1 -0
  47. package/dist/{chunk-U5IFGQCD.js → chunk-K57KRAOV.js} +1 -1
  48. package/dist/chunk-K57KRAOV.js.map +1 -0
  49. package/dist/{chunk-ZVI5YST2.js → chunk-M7JBER5U.js} +1 -1
  50. package/dist/chunk-M7JBER5U.js.map +1 -0
  51. package/dist/{chunk-43FUQH35.js → chunk-OHU6CI22.js} +2 -2
  52. package/dist/{chunk-43FUQH35.js.map → chunk-OHU6CI22.js.map} +1 -1
  53. package/dist/{chunk-4TRDV6RL.js → chunk-OZWU5ZPZ.js} +1 -1
  54. package/dist/chunk-OZWU5ZPZ.js.map +1 -0
  55. package/dist/{chunk-JTHUXDN2.js → chunk-RYRIFZCT.js} +3 -3
  56. package/dist/chunk-RYRIFZCT.js.map +1 -0
  57. package/dist/{chunk-6ETZKKAE.js → chunk-VLYV65LK.js} +1 -1
  58. package/dist/chunk-VLYV65LK.js.map +1 -0
  59. package/dist/chunk-W4CXQYSG.js +23 -0
  60. package/dist/chunk-W4CXQYSG.js.map +1 -0
  61. package/dist/{chunk-S3PCZ7NV.js → chunk-W7YD6E4N.js} +1 -1
  62. package/dist/chunk-W7YD6E4N.js.map +1 -0
  63. package/dist/index.d.ts +6 -4
  64. package/dist/index.js +14 -12
  65. package/dist/list-header.d.ts +29 -8
  66. package/dist/list-header.js +1 -1
  67. package/dist/nav-stack.js +1 -1
  68. package/dist/pane.d.ts +49 -0
  69. package/dist/pane.js +4 -0
  70. package/dist/pane.js.map +1 -0
  71. package/dist/panel-header.d.ts +9 -3
  72. package/dist/panel-header.js +1 -1
  73. package/dist/segmented-control.d.ts +6 -6
  74. package/dist/segmented-control.js +1 -1
  75. package/dist/select.d.ts +10 -4
  76. package/dist/select.js +1 -1
  77. package/dist/split-view.js +2 -2
  78. package/dist/state-banner.d.ts +3 -2
  79. package/dist/state-banner.js +1 -1
  80. package/dist/styles/catalog.css +6 -6
  81. package/dist/styles/layout.css +2 -20
  82. package/dist/styles/pane.css +62 -0
  83. package/dist/styles/segmented-control.css +3 -7
  84. package/dist/styles/sunken-panel.css +18 -0
  85. package/dist/sunken-panel.d.ts +16 -0
  86. package/dist/sunken-panel.js +3 -0
  87. package/dist/sunken-panel.js.map +1 -0
  88. package/dist/tab-bar.d.ts +3 -2
  89. package/dist/tab-bar.js +1 -1
  90. package/dist/tab-scaffold.d.ts +6 -6
  91. package/dist/tab-scaffold.js.map +1 -1
  92. package/dist/token-search-field.d.ts +25 -9
  93. package/dist/token-search-field.js +1 -1
  94. package/dist/toolbar-control-group.d.ts +9 -5
  95. package/dist/toolbar-control-group.js +1 -1
  96. package/dist/toolbar-text.d.ts +10 -11
  97. package/dist/toolbar-text.js +1 -1
  98. package/dist/wire-tab-bars.d.ts +5 -2
  99. package/dist/wire-tab-bars.js +1 -1
  100. package/dist/wire-token-search-fields.d.ts +11 -6
  101. package/dist/wire-token-search-fields.js +1 -1
  102. package/docs/catalog.md +186 -67
  103. package/docs/component-contract.md +102 -5
  104. package/docs/component-selection.md +9 -5
  105. package/docs/design/templates/panel-header/icon-actions-dark.svg +1 -1
  106. package/docs/design/templates/panel-header/icon-actions.svg +1 -1
  107. package/docs/design/templates/panel-header/icon-summary-actions-dark.svg +1 -1
  108. package/docs/design/templates/panel-header/icon-summary-actions.svg +1 -1
  109. package/docs/design/templates/panel-header/no-icon-dark.svg +1 -1
  110. package/docs/design/templates/panel-header/no-icon.svg +1 -1
  111. package/docs/design/templates/panel-header/page-heading-dark.svg +1 -1
  112. package/docs/design/templates/panel-header/page-heading.svg +1 -1
  113. package/docs/design/templates/panel-header/title-only-dark.svg +1 -1
  114. package/docs/design/templates/panel-header/title-only.svg +1 -1
  115. package/docs/design/templates/panel-header-dark.svg +5 -5
  116. package/docs/design/templates/panel-header.svg +5 -5
  117. package/docs/design/templates/segmented-control/equal-dark.svg +1 -1
  118. package/docs/design/templates/segmented-control/equal.svg +1 -1
  119. package/docs/design/templates/segmented-control-dark.svg +1 -1
  120. package/docs/design/templates/segmented-control.svg +1 -1
  121. package/docs/design/templates/toolbar/title-and-actions-dark.svg +1 -1
  122. package/docs/design/templates/toolbar/title-and-actions.svg +1 -1
  123. package/docs/design/templates/toolbar-control-group/with-text-dark.svg +1 -1
  124. package/docs/design/templates/toolbar-control-group/with-text.svg +1 -1
  125. package/docs/design/templates/toolbar-control-group-dark.svg +1 -1
  126. package/docs/design/templates/toolbar-control-group.svg +1 -1
  127. package/docs/design/templates/toolbar-dark.svg +1 -1
  128. package/docs/design/templates/toolbar-text/default-dark.svg +1 -1
  129. package/docs/design/templates/toolbar-text/default.svg +1 -1
  130. package/docs/design/templates/toolbar-text/large-dark.svg +1 -1
  131. package/docs/design/templates/toolbar-text/large.svg +1 -1
  132. package/docs/design/templates/toolbar-text/small-dark.svg +1 -1
  133. package/docs/design/templates/toolbar-text/small.svg +1 -1
  134. package/docs/design/templates/toolbar-text-dark.svg +3 -3
  135. package/docs/design/templates/toolbar-text.svg +3 -3
  136. package/docs/design/templates/toolbar.svg +1 -1
  137. package/docs/design/templates.md +11 -6
  138. package/docs/design-philosophy.md +2 -4
  139. package/docs/examples/application-ui-profile.json +60 -0
  140. package/docs/examples/component-catalog-extension-v2.json +81 -0
  141. package/docs/layout.md +42 -23
  142. package/docs/sunken-panel.md +43 -0
  143. package/docs/type-contracts.md +99 -0
  144. package/docs/ui-analyzer.md +81 -0
  145. package/docs/ui-doctor.md +77 -0
  146. package/docs/ui-evaluator.md +122 -0
  147. package/doctor/cli.mjs +115 -0
  148. package/doctor/config.schema.json +68 -0
  149. package/doctor/index.d.mts +116 -0
  150. package/doctor/index.mjs +1256 -0
  151. package/doctor/report.schema.json +118 -0
  152. package/evaluator/cli.mjs +89 -0
  153. package/evaluator/index.d.mts +90 -0
  154. package/evaluator/index.mjs +1138 -0
  155. package/evaluator/report.schema.json +152 -0
  156. package/llms.txt +40 -3
  157. package/package.json +66 -8
  158. package/ux-demo/recipes/compact-toolbar.tsx +2 -2
  159. package/ux-demo/recipes/composer-form.tsx +1 -1
  160. package/dist/chunk-4TRDV6RL.js.map +0 -1
  161. package/dist/chunk-6ETZKKAE.js.map +0 -1
  162. package/dist/chunk-ENVTNLYC.js.map +0 -1
  163. package/dist/chunk-JTHUXDN2.js.map +0 -1
  164. package/dist/chunk-NVWXKU37.js.map +0 -1
  165. package/dist/chunk-QIRXYKCE.js.map +0 -1
  166. package/dist/chunk-S3HKPI7I.js.map +0 -1
  167. package/dist/chunk-S3PCZ7NV.js.map +0 -1
  168. package/dist/chunk-U5IFGQCD.js.map +0 -1
  169. package/dist/chunk-ZK2G3VR5.js.map +0 -1
  170. package/dist/chunk-ZVI5YST2.js.map +0 -1
@@ -0,0 +1,4441 @@
1
+ {
2
+ "$schema": "./component-catalog-v2.schema.json",
3
+ "schemaVersion": 2,
4
+ "package": "@kerfjs/ui",
5
+ "compatibility": {
6
+ "v1Catalog": "./component-catalog.json",
7
+ "identity": "package:id"
8
+ },
9
+ "entries": [
10
+ {
11
+ "key": "@kerfjs/ui:lucide-icon",
12
+ "package": "@kerfjs/ui",
13
+ "id": "lucide-icon",
14
+ "name": "LucideIcon",
15
+ "kind": "component",
16
+ "source": "kerf",
17
+ "parents": { "mode": "any", "entries": [] },
18
+ "contexts": ["application-ui"],
19
+ "zones": [],
20
+ "children": { "mode": "any", "concepts": [], "requiredConcepts": [] },
21
+ "state": [
22
+ { "id": "icon choice", "owner": "application", "required": false },
23
+ { "id": "meaningful label", "owner": "application", "required": false }
24
+ ],
25
+ "wiring": { "required": false, "helpers": [], "obligations": [] },
26
+ "responsive": { "owner": "not-applicable", "behaviors": [] },
27
+ "layout": {
28
+ "roles": ["foundation"],
29
+ "geometry": { "margin": "none", "border": "none", "padding": "none" }
30
+ },
31
+ "accessibility": {
32
+ "obligations": [
33
+ "Decorative icons are aria-hidden; meaningful icons require a label."
34
+ ]
35
+ },
36
+ "boundaries": {
37
+ "rootClass": null,
38
+ "publicClasses": [],
39
+ "publicTokens": []
40
+ },
41
+ "diagnostics": [],
42
+ "provenance": {
43
+ "selection": "ai/component-catalog.json",
44
+ "composition": "generated-permissive-default"
45
+ }
46
+ },
47
+ {
48
+ "key": "@kerfjs/ui:disclosure-arrow",
49
+ "package": "@kerfjs/ui",
50
+ "id": "disclosure-arrow",
51
+ "name": "DisclosureArrow",
52
+ "kind": "component",
53
+ "source": "kerf",
54
+ "parents": { "mode": "any", "entries": [] },
55
+ "contexts": ["application-ui"],
56
+ "zones": [],
57
+ "children": { "mode": "any", "concepts": [], "requiredConcepts": [] },
58
+ "state": [
59
+ { "id": "open state", "owner": "application", "required": false },
60
+ { "id": "interaction", "owner": "application", "required": false },
61
+ {
62
+ "id": "accessible control label",
63
+ "owner": "application",
64
+ "required": false
65
+ }
66
+ ],
67
+ "wiring": { "required": false, "helpers": [], "obligations": [] },
68
+ "responsive": { "owner": "not-applicable", "behaviors": [] },
69
+ "layout": {
70
+ "roles": ["foundation"],
71
+ "geometry": { "margin": "none", "border": "none", "padding": "none" }
72
+ },
73
+ "accessibility": {
74
+ "obligations": [
75
+ "The arrow is decorative; expose expanded state through aria-expanded on its owning control and keep that control's accessible name stable."
76
+ ]
77
+ },
78
+ "boundaries": {
79
+ "rootClass": "kui-disclosure-arrow",
80
+ "publicClasses": ["kui-disclosure-arrow"],
81
+ "publicTokens": [
82
+ "--kui-disclosure-arrow-duration",
83
+ "--kui-disclosure-arrow-size"
84
+ ]
85
+ },
86
+ "diagnostics": [],
87
+ "provenance": {
88
+ "selection": "ai/component-catalog.json",
89
+ "composition": "generated-permissive-default"
90
+ }
91
+ },
92
+ {
93
+ "key": "@kerfjs/ui:webawesome-theme",
94
+ "package": "@kerfjs/ui",
95
+ "id": "webawesome-theme",
96
+ "name": "Web Awesome theme",
97
+ "kind": "composition",
98
+ "source": "kerf",
99
+ "parents": { "mode": "any", "entries": [] },
100
+ "contexts": ["application-ui"],
101
+ "zones": [],
102
+ "children": { "mode": "any", "concepts": [], "requiredConcepts": [] },
103
+ "state": [
104
+ {
105
+ "id": "individual component registration",
106
+ "owner": "application",
107
+ "required": false
108
+ },
109
+ {
110
+ "id": "semantic token overrides",
111
+ "owner": "application",
112
+ "required": false
113
+ }
114
+ ],
115
+ "wiring": { "required": false, "helpers": [], "obligations": [] },
116
+ "responsive": { "owner": "not-applicable", "behaviors": [] },
117
+ "layout": {
118
+ "roles": ["foundation"],
119
+ "geometry": { "margin": "child", "border": "child", "padding": "child" }
120
+ },
121
+ "accessibility": {
122
+ "obligations": [
123
+ "Preserve Web Awesome semantics and Kerf focus/contrast tokens."
124
+ ]
125
+ },
126
+ "boundaries": {
127
+ "rootClass": null,
128
+ "publicClasses": [],
129
+ "publicTokens": [
130
+ "--kui-disclosure-icon-scale",
131
+ "--kui-wa-carousel-control-size",
132
+ "--kui-wa-carousel-dot-hit-size",
133
+ "--kui-wa-carousel-dot-size",
134
+ "--kui-wa-carousel-icon-size",
135
+ "--kui-wa-popover-arrow-size"
136
+ ]
137
+ },
138
+ "diagnostics": [],
139
+ "provenance": {
140
+ "selection": "ai/component-catalog.json",
141
+ "composition": "generated-permissive-default"
142
+ }
143
+ },
144
+ {
145
+ "key": "@kerfjs/ui:layout",
146
+ "package": "@kerfjs/ui",
147
+ "id": "layout",
148
+ "name": "Application layout",
149
+ "kind": "composition",
150
+ "source": "kerf",
151
+ "parents": { "mode": "any", "entries": [] },
152
+ "contexts": ["application-ui"],
153
+ "zones": [],
154
+ "children": { "mode": "any", "concepts": [], "requiredConcepts": [] },
155
+ "state": [
156
+ { "id": "layout hierarchy", "owner": "application", "required": false },
157
+ { "id": "reading width", "owner": "application", "required": false },
158
+ {
159
+ "id": "responsive relocation",
160
+ "owner": "application",
161
+ "required": false
162
+ },
163
+ {
164
+ "id": "pane visibility and matching collapse/restore controls",
165
+ "owner": "application",
166
+ "required": false
167
+ }
168
+ ],
169
+ "wiring": { "required": false, "helpers": [], "obligations": [] },
170
+ "responsive": { "owner": "not-applicable", "behaviors": [] },
171
+ "layout": {
172
+ "roles": ["foundation"],
173
+ "geometry": { "margin": "child", "border": "child", "padding": "child" }
174
+ },
175
+ "accessibility": {
176
+ "obligations": [
177
+ "Keep reading and focus order coherent when controls wrap or panes relocate, and preserve one scroll owner per pane.",
178
+ "When collapse replaces one control with its counterpart in another toolbar, move focus to the newly rendered restore or collapse control."
179
+ ]
180
+ },
181
+ "boundaries": {
182
+ "rootClass": "kui-content",
183
+ "publicClasses": [
184
+ "kui-content",
185
+ "kui-content-item",
186
+ "kui-content-item--pill",
187
+ "kui-control-cluster",
188
+ "kui-inline-metadata",
189
+ "kui-scroll-owner"
190
+ ],
191
+ "publicTokens": [
192
+ "--kui-layout-control-gap",
193
+ "--kui-layout-content-gap",
194
+ "--kui-layout-inline-margin",
195
+ "--kui-layout-item-border-width",
196
+ "--kui-layout-item-padding",
197
+ "--kui-layout-metadata-gap",
198
+ "--kui-layout-pill-radius",
199
+ "--kui-layout-rounded-radius"
200
+ ]
201
+ },
202
+ "diagnostics": [],
203
+ "provenance": {
204
+ "selection": "ai/component-catalog.json",
205
+ "composition": "generated-permissive-default"
206
+ }
207
+ },
208
+ {
209
+ "key": "@kerfjs/ui:pane",
210
+ "package": "@kerfjs/ui",
211
+ "id": "pane",
212
+ "name": "Pane",
213
+ "kind": "component",
214
+ "source": "kerf",
215
+ "parents": { "mode": "any", "entries": [] },
216
+ "contexts": ["application-ui"],
217
+ "zones": [],
218
+ "children": { "mode": "any", "concepts": [], "requiredConcepts": [] },
219
+ "state": [
220
+ {
221
+ "id": "root and content semantics",
222
+ "owner": "application",
223
+ "required": false
224
+ },
225
+ {
226
+ "id": "accessible labels",
227
+ "owner": "application",
228
+ "required": false
229
+ },
230
+ {
231
+ "id": "header, content, and footer children",
232
+ "owner": "application",
233
+ "required": false
234
+ },
235
+ {
236
+ "id": "which logical boundaries show separators",
237
+ "owner": "application",
238
+ "required": false
239
+ },
240
+ {
241
+ "id": "responsive placement and visibility",
242
+ "owner": "application",
243
+ "required": false
244
+ }
245
+ ],
246
+ "wiring": { "required": false, "helpers": [], "obligations": [] },
247
+ "responsive": { "owner": "not-applicable", "behaviors": [] },
248
+ "layout": {
249
+ "roles": ["structure"],
250
+ "geometry": {
251
+ "margin": "child",
252
+ "border": "conditional",
253
+ "padding": "child",
254
+ "notes": [
255
+ "The pane is unpadded; separators are independently opt-in on logical edges and default off."
256
+ ]
257
+ }
258
+ },
259
+ "accessibility": {
260
+ "obligations": [
261
+ "Choose semantic root and content elements that match the region and provide labels for landmark elements.",
262
+ "Keep fixed header/footer chrome outside the single scrolling content slot so reading and focus order remain coherent."
263
+ ]
264
+ },
265
+ "boundaries": {
266
+ "rootClass": "kui-pane",
267
+ "publicClasses": [
268
+ "kui-pane",
269
+ "kui-pane__content",
270
+ "kui-pane__footer",
271
+ "kui-pane__header",
272
+ "kui-pane__toolbar"
273
+ ],
274
+ "publicTokens": [
275
+ "--kui-pane-separator-color",
276
+ "--kui-pane-separator-width"
277
+ ]
278
+ },
279
+ "diagnostics": [],
280
+ "provenance": {
281
+ "selection": "ai/component-catalog.json",
282
+ "composition": "generated-permissive-default"
283
+ }
284
+ },
285
+ {
286
+ "key": "@kerfjs/ui:sunken-panel",
287
+ "package": "@kerfjs/ui",
288
+ "id": "sunken-panel",
289
+ "name": "SunkenPanel",
290
+ "kind": "component",
291
+ "source": "kerf",
292
+ "parents": { "mode": "any", "entries": [] },
293
+ "contexts": ["application-ui"],
294
+ "zones": [],
295
+ "children": { "mode": "any", "concepts": [], "requiredConcepts": [] },
296
+ "state": [
297
+ {
298
+ "id": "region semantics and accessible name",
299
+ "owner": "application",
300
+ "required": false
301
+ },
302
+ { "id": "scroll ownership", "owner": "application", "required": false },
303
+ {
304
+ "id": "child ordering and content",
305
+ "owner": "application",
306
+ "required": false
307
+ }
308
+ ],
309
+ "wiring": { "required": false, "helpers": [], "obligations": [] },
310
+ "responsive": { "owner": "not-applicable", "behaviors": [] },
311
+ "layout": {
312
+ "roles": ["structure"],
313
+ "geometry": {
314
+ "margin": "none",
315
+ "border": "none",
316
+ "padding": "self",
317
+ "notes": [
318
+ "The root owns one 8px inset and vertical gap; children own their borders and internal geometry."
319
+ ]
320
+ }
321
+ },
322
+ "accessibility": {
323
+ "obligations": [
324
+ "Pass ariaLabel only when the surface is a distinct named region; otherwise it remains a non-landmark grouping."
325
+ ]
326
+ },
327
+ "boundaries": {
328
+ "rootClass": "kui-sunken-panel",
329
+ "publicClasses": ["kui-sunken-panel"],
330
+ "publicTokens": [
331
+ "--kui-sunken-panel-background",
332
+ "--kui-sunken-panel-foreground",
333
+ "--kui-sunken-panel-gap",
334
+ "--kui-sunken-panel-padding",
335
+ "--kui-sunken-panel-radius"
336
+ ]
337
+ },
338
+ "diagnostics": [],
339
+ "provenance": {
340
+ "selection": "ai/component-catalog.json",
341
+ "composition": "generated-permissive-default"
342
+ }
343
+ },
344
+ {
345
+ "key": "@kerfjs/ui:toolbar",
346
+ "package": "@kerfjs/ui",
347
+ "id": "toolbar",
348
+ "name": "Toolbar",
349
+ "kind": "component",
350
+ "source": "kerf",
351
+ "parents": { "mode": "any", "entries": [] },
352
+ "contexts": ["application-chrome", "panel-header"],
353
+ "zones": [
354
+ {
355
+ "id": "leading",
356
+ "accepts": ["toolbar-text", "toolbar-control-group"],
357
+ "cardinality": { "min": 0, "max": "unbounded" },
358
+ "exclusiveWith": []
359
+ },
360
+ {
361
+ "id": "center",
362
+ "accepts": ["toolbar-text", "toolbar-control-group"],
363
+ "cardinality": { "min": 0, "max": "unbounded" },
364
+ "exclusiveWith": []
365
+ },
366
+ {
367
+ "id": "trailing",
368
+ "accepts": ["toolbar-text", "toolbar-control-group"],
369
+ "cardinality": { "min": 0, "max": "unbounded" },
370
+ "exclusiveWith": []
371
+ }
372
+ ],
373
+ "children": {
374
+ "mode": "listed",
375
+ "concepts": ["toolbar-text", "toolbar-control-group"],
376
+ "requiredConcepts": []
377
+ },
378
+ "state": [
379
+ { "id": "actions", "owner": "application", "required": false },
380
+ {
381
+ "id": "command availability",
382
+ "owner": "application",
383
+ "required": false
384
+ },
385
+ {
386
+ "id": "responsive relocation",
387
+ "owner": "application",
388
+ "required": false
389
+ }
390
+ ],
391
+ "wiring": { "required": false, "helpers": [], "obligations": [] },
392
+ "responsive": { "owner": "not-applicable", "behaviors": [] },
393
+ "layout": {
394
+ "roles": ["structure"],
395
+ "geometry": {
396
+ "margin": "none",
397
+ "border": "conditional",
398
+ "padding": "self",
399
+ "notes": [
400
+ "Padding belongs to the toolbar; the optional divider variant also owns its border."
401
+ ]
402
+ }
403
+ },
404
+ "accessibility": {
405
+ "obligations": [
406
+ "Supply a label when the toolbar needs an accessible name."
407
+ ]
408
+ },
409
+ "boundaries": {
410
+ "rootClass": "kui-toolbar",
411
+ "publicClasses": [
412
+ "kui-toolbar",
413
+ "kui-toolbar__center",
414
+ "kui-toolbar__leading",
415
+ "kui-toolbar__trailing"
416
+ ],
417
+ "publicTokens": ["--kui-color-border", "--kui-font-sans"]
418
+ },
419
+ "diagnostics": [
420
+ {
421
+ "id": "KUI-C101",
422
+ "severity": "error",
423
+ "when": "a direct zone child is neither ToolbarText nor ToolbarControlGroup",
424
+ "message": "Wrap toolbar controls in ToolbarControlGroup; only ToolbarText and ToolbarControlGroup are direct zone children."
425
+ }
426
+ ],
427
+ "provenance": {
428
+ "selection": "ai/component-catalog.json",
429
+ "composition": "docs/component-selection.md#toolbar-composition"
430
+ }
431
+ },
432
+ {
433
+ "key": "@kerfjs/ui:toolbar-control-group",
434
+ "package": "@kerfjs/ui",
435
+ "id": "toolbar-control-group",
436
+ "name": "ToolbarControlGroup",
437
+ "kind": "component",
438
+ "source": "kerf",
439
+ "parents": {
440
+ "mode": "listed",
441
+ "entries": ["@kerfjs/ui:toolbar", "@kerfjs/ui:panel-header"]
442
+ },
443
+ "contexts": ["toolbar-zone"],
444
+ "zones": [
445
+ {
446
+ "id": "controls",
447
+ "accepts": ["control"],
448
+ "cardinality": { "min": 1, "max": "unbounded" },
449
+ "exclusiveWith": []
450
+ }
451
+ ],
452
+ "children": {
453
+ "mode": "listed",
454
+ "concepts": ["control"],
455
+ "requiredConcepts": ["control"]
456
+ },
457
+ "state": [
458
+ { "id": "actions", "owner": "application", "required": false },
459
+ { "id": "pressed state", "owner": "application", "required": false },
460
+ { "id": "expanded state", "owner": "application", "required": false }
461
+ ],
462
+ "wiring": { "required": false, "helpers": [], "obligations": [] },
463
+ "responsive": { "owner": "not-applicable", "behaviors": [] },
464
+ "layout": {
465
+ "roles": ["structure"],
466
+ "geometry": { "margin": "none", "border": "self", "padding": "self" }
467
+ },
468
+ "accessibility": {
469
+ "obligations": [
470
+ "Name the group when its relationship is not evident from context."
471
+ ]
472
+ },
473
+ "boundaries": {
474
+ "rootClass": "kui-toolbar-control-group",
475
+ "publicClasses": ["kui-toolbar-control-group"],
476
+ "publicTokens": [
477
+ "--kui-color-brand-on-quiet",
478
+ "--kui-color-neutral-border-loud",
479
+ "--kui-color-neutral-border-normal",
480
+ "--kui-color-neutral-fill-loud",
481
+ "--kui-color-neutral-fill-normal",
482
+ "--kui-color-neutral-on-loud",
483
+ "--kui-color-neutral-on-quiet",
484
+ "--kui-color-surface",
485
+ "--kui-focus-ring",
486
+ "--kui-shadow-s",
487
+ "--kui-toolbar-control-background",
488
+ "--kui-toolbar-control-border",
489
+ "--kui-toolbar-control-color",
490
+ "--kui-toolbar-control-dark-border",
491
+ "--kui-toolbar-control-hover-background",
492
+ "--kui-toolbar-control-pressed-background",
493
+ "--kui-toolbar-control-pressed-border",
494
+ "--kui-toolbar-control-pressed-color",
495
+ "--kui-toolbar-control-selected-background",
496
+ "--kui-toolbar-control-selected-color",
497
+ "--kui-toolbar-control-selected-shadow"
498
+ ]
499
+ },
500
+ "diagnostics": [],
501
+ "provenance": {
502
+ "selection": "ai/component-catalog.json",
503
+ "composition": "docs/component-selection.md#toolbar-composition"
504
+ }
505
+ },
506
+ {
507
+ "key": "@kerfjs/ui:floating-toolbar",
508
+ "package": "@kerfjs/ui",
509
+ "id": "floating-toolbar",
510
+ "name": "FloatingToolbar",
511
+ "kind": "component",
512
+ "source": "kerf",
513
+ "parents": { "mode": "any", "entries": [] },
514
+ "contexts": ["application-ui"],
515
+ "zones": [],
516
+ "children": { "mode": "any", "concepts": [], "requiredConcepts": [] },
517
+ "state": [
518
+ { "id": "controls", "owner": "application", "required": false },
519
+ { "id": "position", "owner": "application", "required": false },
520
+ { "id": "visibility", "owner": "application", "required": false }
521
+ ],
522
+ "wiring": { "required": false, "helpers": [], "obligations": [] },
523
+ "responsive": { "owner": "not-applicable", "behaviors": [] },
524
+ "layout": {
525
+ "roles": ["structure"],
526
+ "geometry": { "margin": "none", "border": "child", "padding": "child" }
527
+ },
528
+ "accessibility": {
529
+ "obligations": [
530
+ "Give the toolbar an accessible name (label is required — it exposes role=\"toolbar\")."
531
+ ]
532
+ },
533
+ "boundaries": {
534
+ "rootClass": "kui-floating-toolbar",
535
+ "publicClasses": ["kui-floating-toolbar"],
536
+ "publicTokens": [
537
+ "--kui-floating-toolbar-inset",
538
+ "--kui-space-m",
539
+ "--kui-space-xs"
540
+ ]
541
+ },
542
+ "diagnostics": [],
543
+ "provenance": {
544
+ "selection": "ai/component-catalog.json",
545
+ "composition": "generated-permissive-default"
546
+ }
547
+ },
548
+ {
549
+ "key": "@kerfjs/ui:toolbar-text",
550
+ "package": "@kerfjs/ui",
551
+ "id": "toolbar-text",
552
+ "name": "ToolbarText",
553
+ "kind": "component",
554
+ "source": "kerf",
555
+ "parents": { "mode": "any", "entries": [] },
556
+ "contexts": ["application-ui"],
557
+ "zones": [],
558
+ "children": { "mode": "any", "concepts": [], "requiredConcepts": [] },
559
+ "state": [
560
+ { "id": "text", "owner": "application", "required": false },
561
+ {
562
+ "id": "responsive priority",
563
+ "owner": "application",
564
+ "required": false
565
+ }
566
+ ],
567
+ "wiring": { "required": false, "helpers": [], "obligations": [] },
568
+ "responsive": { "owner": "not-applicable", "behaviors": [] },
569
+ "layout": {
570
+ "roles": ["structure"],
571
+ "geometry": { "margin": "none", "border": "none", "padding": "none" }
572
+ },
573
+ "accessibility": {
574
+ "obligations": [
575
+ "Plain text is not a heading; pass headingLevel to expose role=heading + aria-level for a page/section title."
576
+ ]
577
+ },
578
+ "boundaries": {
579
+ "rootClass": "kui-toolbar-text",
580
+ "publicClasses": ["kui-toolbar-text"],
581
+ "publicTokens": [
582
+ "--kui-color-neutral-on-quiet",
583
+ "--kui-font-m",
584
+ "--kui-font-mono",
585
+ "--kui-font-s",
586
+ "--kui-font-xs"
587
+ ]
588
+ },
589
+ "diagnostics": [],
590
+ "provenance": {
591
+ "selection": "ai/component-catalog.json",
592
+ "composition": "generated-permissive-default"
593
+ }
594
+ },
595
+ {
596
+ "key": "@kerfjs/ui:headers",
597
+ "package": "@kerfjs/ui",
598
+ "id": "headers",
599
+ "name": "Header composition",
600
+ "kind": "composition",
601
+ "source": "kerf",
602
+ "parents": { "mode": "any", "entries": [] },
603
+ "contexts": ["application-ui"],
604
+ "zones": [],
605
+ "children": { "mode": "any", "concepts": [], "requiredConcepts": [] },
606
+ "state": [
607
+ { "id": "scope hierarchy", "owner": "application", "required": false },
608
+ { "id": "copy", "owner": "application", "required": false },
609
+ { "id": "actions", "owner": "application", "required": false }
610
+ ],
611
+ "wiring": { "required": false, "helpers": [], "obligations": [] },
612
+ "responsive": { "owner": "not-applicable", "behaviors": [] },
613
+ "layout": {
614
+ "roles": ["structure"],
615
+ "geometry": { "margin": "child", "border": "child", "padding": "child" }
616
+ },
617
+ "accessibility": {
618
+ "obligations": [
619
+ "Preserve heading and description relationships for the containing surface."
620
+ ]
621
+ },
622
+ "boundaries": {
623
+ "rootClass": null,
624
+ "publicClasses": [],
625
+ "publicTokens": []
626
+ },
627
+ "diagnostics": [],
628
+ "provenance": {
629
+ "selection": "ai/component-catalog.json",
630
+ "composition": "generated-permissive-default"
631
+ }
632
+ },
633
+ {
634
+ "key": "@kerfjs/ui:panel-header",
635
+ "package": "@kerfjs/ui",
636
+ "id": "panel-header",
637
+ "name": "PanelHeader",
638
+ "kind": "component",
639
+ "source": "kerf",
640
+ "parents": { "mode": "any", "entries": [] },
641
+ "contexts": ["page-header", "panel-header", "dialog-header"],
642
+ "zones": [
643
+ {
644
+ "id": "title",
645
+ "accepts": ["text"],
646
+ "cardinality": { "min": 1, "max": 1 },
647
+ "exclusiveWith": []
648
+ },
649
+ {
650
+ "id": "subtitle",
651
+ "accepts": ["text"],
652
+ "cardinality": { "min": 0, "max": 1 },
653
+ "exclusiveWith": []
654
+ },
655
+ {
656
+ "id": "controls",
657
+ "accepts": ["control"],
658
+ "cardinality": { "min": 0, "max": "unbounded" },
659
+ "exclusiveWith": []
660
+ }
661
+ ],
662
+ "children": { "mode": "any", "concepts": [], "requiredConcepts": [] },
663
+ "state": [
664
+ { "id": "placeholder", "owner": "controlled", "required": false }
665
+ ],
666
+ "wiring": { "required": false, "helpers": [], "obligations": [] },
667
+ "responsive": { "owner": "not-applicable", "behaviors": [] },
668
+ "layout": {
669
+ "roles": ["structure"],
670
+ "geometry": { "margin": "none", "border": "child", "padding": "child" }
671
+ },
672
+ "accessibility": {
673
+ "obligations": [
674
+ "Connect the title id and any provided summary id to the dialog or panel host.",
675
+ "Pass the trailing actions as a labeled ToolbarControlGroup when the group needs an accessible name.",
676
+ "For a page/view title pass headingLevel (usually 1) so the title exposes role=heading + aria-level as a heading landmark; omit it for a dialog title, which is referenced via aria-labelledby to titleId."
677
+ ]
678
+ },
679
+ "boundaries": {
680
+ "rootClass": "kui-panel-header",
681
+ "publicClasses": [
682
+ "kui-panel-header",
683
+ "kui-panel-header__icon",
684
+ "kui-panel-header__summary"
685
+ ],
686
+ "publicTokens": [
687
+ "--kui-color-brand-fill-quiet",
688
+ "--kui-color-brand-on-quiet",
689
+ "--kui-color-text-quiet",
690
+ "--kui-panel-header-icon-background",
691
+ "--kui-panel-header-icon-border",
692
+ "--kui-panel-header-icon-foreground"
693
+ ]
694
+ },
695
+ "diagnostics": [
696
+ {
697
+ "id": "KUI-C102",
698
+ "severity": "error",
699
+ "when": "the title is absent",
700
+ "message": "PanelHeader requires a title that names its page, panel, or dialog."
701
+ }
702
+ ],
703
+ "provenance": {
704
+ "selection": "ai/component-catalog.json",
705
+ "composition": "docs/component-selection.md#problem-to-component-matrix"
706
+ }
707
+ },
708
+ {
709
+ "key": "@kerfjs/ui:value-table",
710
+ "package": "@kerfjs/ui",
711
+ "id": "value-table",
712
+ "name": "ValueTable",
713
+ "kind": "component",
714
+ "source": "kerf",
715
+ "parents": { "mode": "any", "entries": [] },
716
+ "contexts": ["application-ui"],
717
+ "zones": [],
718
+ "children": { "mode": "any", "concepts": [], "requiredConcepts": [] },
719
+ "state": [
720
+ { "id": "values", "owner": "application", "required": false },
721
+ { "id": "formatting", "owner": "application", "required": false },
722
+ { "id": "empty policy", "owner": "application", "required": false }
723
+ ],
724
+ "wiring": { "required": false, "helpers": [], "obligations": [] },
725
+ "responsive": { "owner": "not-applicable", "behaviors": [] },
726
+ "layout": {
727
+ "roles": ["structure"],
728
+ "geometry": { "margin": "self", "border": "self", "padding": "self" }
729
+ },
730
+ "accessibility": {
731
+ "obligations": [
732
+ "Name ValueTable with its label; ValueTableRow supplies dt/dd semantics, and row icons stay decorative unless meaning requires an accessible label."
733
+ ]
734
+ },
735
+ "boundaries": {
736
+ "rootClass": "kui-value-table",
737
+ "publicClasses": [
738
+ "kui-value-table",
739
+ "kui-value-table__row",
740
+ "kui-value-table__icon",
741
+ "kui-value-table__label"
742
+ ],
743
+ "publicTokens": [
744
+ "--kui-color-border",
745
+ "--kui-color-surface-lowered",
746
+ "--kui-color-text",
747
+ "--kui-color-text-quiet",
748
+ "--kui-font-weight-semibold",
749
+ "--kui-layout-inline-margin",
750
+ "--kui-layout-item-gap",
751
+ "--kui-layout-item-padding",
752
+ "--kui-space-2xs",
753
+ "--kui-value-table-background",
754
+ "--kui-value-table-border",
755
+ "--kui-value-table-icon-size"
756
+ ]
757
+ },
758
+ "diagnostics": [],
759
+ "provenance": {
760
+ "selection": "ai/component-catalog.json",
761
+ "composition": "generated-permissive-default"
762
+ }
763
+ },
764
+ {
765
+ "key": "@kerfjs/ui:list",
766
+ "package": "@kerfjs/ui",
767
+ "id": "list",
768
+ "name": "List composition",
769
+ "kind": "composition",
770
+ "source": "kerf",
771
+ "parents": { "mode": "any", "entries": [] },
772
+ "contexts": ["navigation-list"],
773
+ "zones": [
774
+ {
775
+ "id": "rows",
776
+ "accepts": ["list-header", "list-item", "list-action-row"],
777
+ "cardinality": { "min": 1, "max": "unbounded" },
778
+ "exclusiveWith": []
779
+ }
780
+ ],
781
+ "children": {
782
+ "mode": "listed",
783
+ "concepts": ["list-header", "list-item", "list-action-row"],
784
+ "requiredConcepts": []
785
+ },
786
+ "state": [
787
+ {
788
+ "id": "information architecture",
789
+ "owner": "application",
790
+ "required": false
791
+ },
792
+ { "id": "routing", "owner": "application", "required": false },
793
+ {
794
+ "id": "responsive shell behavior",
795
+ "owner": "application",
796
+ "required": false
797
+ }
798
+ ],
799
+ "wiring": { "required": false, "helpers": [], "obligations": [] },
800
+ "responsive": { "owner": "not-applicable", "behaviors": [] },
801
+ "layout": {
802
+ "roles": ["navigation"],
803
+ "geometry": { "margin": "child", "border": "child", "padding": "child" }
804
+ },
805
+ "accessibility": {
806
+ "obligations": [
807
+ "Use native links for link navigation, retain ListItem button semantics for actions, and keep standalone header and toolbar actions at least 44px square.",
808
+ "A ListHeader disclosure controls real content, keeps a stable accessible name and aria-expanded state, and uses the production DisclosureArrow visual."
809
+ ]
810
+ },
811
+ "boundaries": {
812
+ "rootClass": "kui-content",
813
+ "publicClasses": ["kui-content", "kui-content-item"],
814
+ "publicTokens": [
815
+ "--kui-layout-content-gap",
816
+ "--kui-layout-inline-margin",
817
+ "--kui-layout-item-padding",
818
+ "--kui-layout-rounded-radius"
819
+ ]
820
+ },
821
+ "diagnostics": [],
822
+ "provenance": {
823
+ "selection": "ai/component-catalog.json",
824
+ "composition": "docs/component-selection.md#correct-composition-and-duplicated-markup-trap"
825
+ }
826
+ },
827
+ {
828
+ "key": "@kerfjs/ui:list-header",
829
+ "package": "@kerfjs/ui",
830
+ "id": "list-header",
831
+ "name": "ListHeader",
832
+ "kind": "component",
833
+ "source": "kerf",
834
+ "parents": { "mode": "any", "entries": [] },
835
+ "contexts": ["navigation-list"],
836
+ "zones": [],
837
+ "children": { "mode": "any", "concepts": [], "requiredConcepts": [] },
838
+ "state": [{ "id": "expanded", "owner": "controlled", "required": false }],
839
+ "wiring": { "required": false, "helpers": [], "obligations": [] },
840
+ "responsive": { "owner": "not-applicable", "behaviors": [] },
841
+ "layout": {
842
+ "roles": ["navigation"],
843
+ "geometry": { "margin": "self", "border": "self", "padding": "self" }
844
+ },
845
+ "accessibility": {
846
+ "obligations": [
847
+ "When toggle mode is used, the application reveals matching content and keeps expanded state synchronized.",
848
+ "The owning control retains a stable accessible name."
849
+ ]
850
+ },
851
+ "boundaries": {
852
+ "rootClass": "kui-list-header",
853
+ "publicClasses": [
854
+ "kui-list-header",
855
+ "kui-list-header__action",
856
+ "kui-list-header__action-layer",
857
+ "kui-list-header__badge",
858
+ "kui-list-header__count",
859
+ "kui-list-header__label",
860
+ "kui-list-header__title",
861
+ "kui-list-header__toggle"
862
+ ],
863
+ "publicTokens": [
864
+ "--kui-color-neutral-border-quiet",
865
+ "--kui-color-neutral-fill-quiet",
866
+ "--kui-color-neutral-on-quiet",
867
+ "--kui-focus-ring",
868
+ "--kui-font-xs",
869
+ "--kui-list-header-action-icon-size",
870
+ "--kui-list-header-color",
871
+ "--kui-layout-inline-margin",
872
+ "--kui-layout-item-gap",
873
+ "--kui-layout-item-padding",
874
+ "--kui-layout-pill-radius",
875
+ "--kui-list-header-count-font-size",
876
+ "--kui-list-header-hover-background"
877
+ ]
878
+ },
879
+ "diagnostics": [
880
+ {
881
+ "id": "KUI-C103",
882
+ "severity": "error",
883
+ "when": "toggle mode does not reveal matching controlled content",
884
+ "message": "ListHeader expanded state must match real revealed content."
885
+ }
886
+ ],
887
+ "provenance": {
888
+ "selection": "ai/component-catalog.json",
889
+ "composition": "docs/accessibility.md#shared-rules"
890
+ }
891
+ },
892
+ {
893
+ "key": "@kerfjs/ui:list-action-row",
894
+ "package": "@kerfjs/ui",
895
+ "id": "list-action-row",
896
+ "name": "ListActionRow",
897
+ "kind": "component",
898
+ "source": "kerf",
899
+ "parents": { "mode": "any", "entries": [] },
900
+ "contexts": ["application-ui"],
901
+ "zones": [],
902
+ "children": { "mode": "any", "concepts": [], "requiredConcepts": [] },
903
+ "state": [
904
+ { "id": "routing", "owner": "application", "required": false },
905
+ { "id": "selection", "owner": "application", "required": false },
906
+ { "id": "action handling", "owner": "application", "required": false },
907
+ {
908
+ "id": "domain data attributes",
909
+ "owner": "application",
910
+ "required": false
911
+ },
912
+ {
913
+ "id": "popover or context-menu policy",
914
+ "owner": "application",
915
+ "required": false
916
+ }
917
+ ],
918
+ "wiring": { "required": false, "helpers": [], "obligations": [] },
919
+ "responsive": { "owner": "not-applicable", "behaviors": [] },
920
+ "layout": {
921
+ "roles": ["navigation"],
922
+ "geometry": { "margin": "self", "border": "self", "padding": "self" }
923
+ },
924
+ "accessibility": {
925
+ "obligations": [
926
+ "The noninteractive root contains two sibling native buttons in primary-then-trailing focus order; each button has its own action, item identity, accessible name, and disabled state.",
927
+ "Selection semantics are exposed only by the primary button; label, icon, and trailingActionIcon are dormant SafeHtml and must not contain interactive descendants; never place an interactive descendant in ListItem.trailing."
928
+ ]
929
+ },
930
+ "boundaries": {
931
+ "rootClass": "kui-list-action-row",
932
+ "publicClasses": [
933
+ "kui-list-action-row",
934
+ "kui-list-action-row__icon",
935
+ "kui-list-action-row__label",
936
+ "kui-list-action-row__primary",
937
+ "kui-list-action-row__trailing-action"
938
+ ],
939
+ "publicTokens": [
940
+ "--kui-color-brand-border-quiet",
941
+ "--kui-color-brand-fill-normal",
942
+ "--kui-color-neutral-border-normal",
943
+ "--kui-color-neutral-fill-normal",
944
+ "--kui-color-neutral-fill-quiet",
945
+ "--kui-color-neutral-on-normal",
946
+ "--kui-focus-ring",
947
+ "--kui-layout-inline-margin",
948
+ "--kui-layout-item-gap",
949
+ "--kui-layout-item-padding",
950
+ "--kui-layout-rounded-radius",
951
+ "--kui-radius-pill",
952
+ "--kui-list-action-row-background",
953
+ "--kui-list-action-row-border",
954
+ "--kui-list-action-row-color",
955
+ "--kui-list-action-row-hover-background",
956
+ "--kui-list-action-row-hover-border",
957
+ "--kui-list-action-row-selected-background",
958
+ "--kui-list-action-row-selected-border",
959
+ "--kui-list-action-row-selected-color",
960
+ "--kui-list-action-row-trailing-hover-background"
961
+ ]
962
+ },
963
+ "diagnostics": [],
964
+ "provenance": {
965
+ "selection": "ai/component-catalog.json",
966
+ "composition": "generated-permissive-default"
967
+ }
968
+ },
969
+ {
970
+ "key": "@kerfjs/ui:list-item",
971
+ "package": "@kerfjs/ui",
972
+ "id": "list-item",
973
+ "name": "ListItem",
974
+ "kind": "component",
975
+ "source": "kerf",
976
+ "parents": { "mode": "any", "entries": [] },
977
+ "contexts": ["application-ui"],
978
+ "zones": [],
979
+ "children": { "mode": "any", "concepts": [], "requiredConcepts": [] },
980
+ "state": [
981
+ { "id": "routing", "owner": "application", "required": false },
982
+ { "id": "selection", "owner": "application", "required": false },
983
+ { "id": "permissions", "owner": "application", "required": false },
984
+ { "id": "action handling", "owner": "application", "required": false },
985
+ {
986
+ "id": "domain data attributes",
987
+ "owner": "application",
988
+ "required": false
989
+ }
990
+ ],
991
+ "wiring": { "required": false, "helpers": [], "obligations": [] },
992
+ "responsive": { "owner": "not-applicable", "behaviors": [] },
993
+ "layout": {
994
+ "roles": ["navigation"],
995
+ "geometry": { "margin": "self", "border": "self", "padding": "self" }
996
+ },
997
+ "accessibility": {
998
+ "obligations": [
999
+ "Uses native button activation; selected maps to aria-current and pressed to aria-pressed; rootAttributes cannot add role=menuitem or replace owned ARIA; trailing is dormant content and must not contain controls."
1000
+ ]
1001
+ },
1002
+ "boundaries": {
1003
+ "rootClass": "kui-list-item",
1004
+ "publicClasses": [
1005
+ "kui-list-item",
1006
+ "kui-list-item__icon",
1007
+ "kui-list-item__label",
1008
+ "kui-list-item__trailing"
1009
+ ],
1010
+ "publicTokens": [
1011
+ "--kui-color-brand-fill-normal",
1012
+ "--kui-color-neutral-fill-quiet",
1013
+ "--kui-color-neutral-on-normal",
1014
+ "--kui-color-neutral-on-quiet",
1015
+ "--kui-focus-ring",
1016
+ "--kui-list-item-color",
1017
+ "--kui-list-item-hover-background",
1018
+ "--kui-list-item-selected-background",
1019
+ "--kui-list-item-selected-color",
1020
+ "--kui-layout-inline-margin",
1021
+ "--kui-layout-item-gap",
1022
+ "--kui-layout-item-padding",
1023
+ "--kui-layout-rounded-radius"
1024
+ ]
1025
+ },
1026
+ "diagnostics": [],
1027
+ "provenance": {
1028
+ "selection": "ai/component-catalog.json",
1029
+ "composition": "generated-permissive-default"
1030
+ }
1031
+ },
1032
+ {
1033
+ "key": "@kerfjs/ui:list-inset-control",
1034
+ "package": "@kerfjs/ui",
1035
+ "id": "list-inset-control",
1036
+ "name": "ListInsetControl",
1037
+ "kind": "component",
1038
+ "source": "kerf",
1039
+ "parents": { "mode": "any", "entries": [] },
1040
+ "contexts": ["application-ui"],
1041
+ "zones": [],
1042
+ "children": { "mode": "any", "concepts": [], "requiredConcepts": [] },
1043
+ "state": [
1044
+ {
1045
+ "id": "the wrapped control and its behavior",
1046
+ "owner": "application",
1047
+ "required": false
1048
+ }
1049
+ ],
1050
+ "wiring": { "required": false, "helpers": [], "obligations": [] },
1051
+ "responsive": { "owner": "not-applicable", "behaviors": [] },
1052
+ "layout": {
1053
+ "roles": ["structure"],
1054
+ "geometry": { "margin": "self", "border": "child", "padding": "child" }
1055
+ },
1056
+ "accessibility": {
1057
+ "obligations": [
1058
+ "A layout wrapper only; it adds no role or name — the wrapped control keeps its own."
1059
+ ]
1060
+ },
1061
+ "boundaries": {
1062
+ "rootClass": "kui-list-inset-control",
1063
+ "publicClasses": ["kui-list-inset-control"],
1064
+ "publicTokens": ["--kui-layout-inline-margin"]
1065
+ },
1066
+ "diagnostics": [],
1067
+ "provenance": {
1068
+ "selection": "ai/component-catalog.json",
1069
+ "composition": "generated-permissive-default"
1070
+ }
1071
+ },
1072
+ {
1073
+ "key": "@kerfjs/ui:list-inset-text",
1074
+ "package": "@kerfjs/ui",
1075
+ "id": "list-inset-text",
1076
+ "name": "ListInsetText",
1077
+ "kind": "component",
1078
+ "source": "kerf",
1079
+ "parents": { "mode": "any", "entries": [] },
1080
+ "contexts": ["application-ui"],
1081
+ "zones": [],
1082
+ "children": { "mode": "any", "concepts": [], "requiredConcepts": [] },
1083
+ "state": [
1084
+ { "id": "the text content", "owner": "application", "required": false }
1085
+ ],
1086
+ "wiring": { "required": false, "helpers": [], "obligations": [] },
1087
+ "responsive": { "owner": "not-applicable", "behaviors": [] },
1088
+ "layout": {
1089
+ "roles": ["structure"],
1090
+ "geometry": { "margin": "self", "border": "self", "padding": "self" }
1091
+ },
1092
+ "accessibility": {
1093
+ "obligations": ["A layout wrapper only; it adds no role or name."]
1094
+ },
1095
+ "boundaries": {
1096
+ "rootClass": "kui-list-inset-text",
1097
+ "publicClasses": [
1098
+ "kui-list-inset-text",
1099
+ "kui-list-inset-text--horizontal"
1100
+ ],
1101
+ "publicTokens": []
1102
+ },
1103
+ "diagnostics": [],
1104
+ "provenance": {
1105
+ "selection": "ai/component-catalog.json",
1106
+ "composition": "generated-permissive-default"
1107
+ }
1108
+ },
1109
+ {
1110
+ "key": "@kerfjs/ui:tabs",
1111
+ "package": "@kerfjs/ui",
1112
+ "id": "tabs",
1113
+ "name": "AppTab",
1114
+ "kind": "component",
1115
+ "source": "kerf",
1116
+ "parents": { "mode": "any", "entries": [] },
1117
+ "contexts": ["application-ui"],
1118
+ "zones": [],
1119
+ "children": { "mode": "any", "concepts": [], "requiredConcepts": [] },
1120
+ "state": [
1121
+ { "id": "tab identity", "owner": "application", "required": false },
1122
+ { "id": "selection", "owner": "application", "required": false },
1123
+ { "id": "close policy", "owner": "application", "required": false },
1124
+ { "id": "content", "owner": "application", "required": false },
1125
+ {
1126
+ "id": "application data attribute values",
1127
+ "owner": "application",
1128
+ "required": false
1129
+ }
1130
+ ],
1131
+ "wiring": { "required": false, "helpers": [], "obligations": [] },
1132
+ "responsive": { "owner": "not-applicable", "behaviors": [] },
1133
+ "layout": {
1134
+ "roles": ["navigation"],
1135
+ "geometry": { "margin": "none", "border": "self", "padding": "self" }
1136
+ },
1137
+ "accessibility": {
1138
+ "obligations": [
1139
+ "Compose in a tablist and pair with an application-owned tabpanel.",
1140
+ "Keep closeIcon decorative and free of interactive descendants; the owning close button supplies its accessible name and interaction.",
1141
+ "Use rootAttributes only for application data-* metadata; component-owned identity, state, action, and role semantics are protected at runtime."
1142
+ ]
1143
+ },
1144
+ "boundaries": {
1145
+ "rootClass": "kui-app-tab",
1146
+ "publicClasses": [
1147
+ "kui-app-tab",
1148
+ "kui-app-tab__close",
1149
+ "kui-app-tab__close-icon",
1150
+ "kui-app-tab__name",
1151
+ "kui-app-tab__select",
1152
+ "kui-app-tab__trailing"
1153
+ ],
1154
+ "publicTokens": [
1155
+ "--kui-app-tab-color",
1156
+ "--kui-app-tab-drop-indicator",
1157
+ "--kui-app-tab-hover-background",
1158
+ "--kui-app-tab-selected-background",
1159
+ "--kui-app-tab-selected-border",
1160
+ "--kui-app-tab-selected-color",
1161
+ "--kui-color-brand-border-normal",
1162
+ "--kui-color-brand-on-quiet",
1163
+ "--kui-color-neutral-border-normal",
1164
+ "--kui-color-neutral-on-quiet",
1165
+ "--kui-color-surface",
1166
+ "--kui-color-text",
1167
+ "--kui-focus-ring",
1168
+ "--kui-font-xs",
1169
+ "--kui-radius-pill",
1170
+ "--kui-shadow-s",
1171
+ "--kui-space-2xs",
1172
+ "--kui-space-xs"
1173
+ ]
1174
+ },
1175
+ "diagnostics": [],
1176
+ "provenance": {
1177
+ "selection": "ai/component-catalog.json",
1178
+ "composition": "generated-permissive-default"
1179
+ }
1180
+ },
1181
+ {
1182
+ "key": "@kerfjs/ui:tab-bar",
1183
+ "package": "@kerfjs/ui",
1184
+ "id": "tab-bar",
1185
+ "name": "TabBar",
1186
+ "kind": "component",
1187
+ "source": "kerf",
1188
+ "parents": { "mode": "any", "entries": [] },
1189
+ "contexts": ["tabpanel-navigation"],
1190
+ "zones": [
1191
+ {
1192
+ "id": "tabs",
1193
+ "accepts": ["app-tab"],
1194
+ "cardinality": { "min": 1, "max": "unbounded" },
1195
+ "exclusiveWith": []
1196
+ }
1197
+ ],
1198
+ "children": {
1199
+ "mode": "listed",
1200
+ "concepts": ["app-tab"],
1201
+ "requiredConcepts": ["app-tab"]
1202
+ },
1203
+ "state": [
1204
+ { "id": "selected-tab", "owner": "controlled", "required": true }
1205
+ ],
1206
+ "wiring": {
1207
+ "required": true,
1208
+ "helpers": ["wireTabBars"],
1209
+ "obligations": [
1210
+ "Retain and invoke the disposer.",
1211
+ "Apply onReorder to application-owned order."
1212
+ ]
1213
+ },
1214
+ "responsive": { "owner": "not-applicable", "behaviors": [] },
1215
+ "layout": {
1216
+ "roles": ["navigation"],
1217
+ "geometry": { "margin": "none", "border": "self", "padding": "self" }
1218
+ },
1219
+ "accessibility": {
1220
+ "obligations": [
1221
+ "Each tab controls a matching tabpanel.",
1222
+ "Selection and focus behavior follow the configured activation mode."
1223
+ ]
1224
+ },
1225
+ "boundaries": {
1226
+ "rootClass": "kui-tab-bar",
1227
+ "publicClasses": [
1228
+ "kui-tab-bar",
1229
+ "kui-tab-bar__leading",
1230
+ "kui-tab-bar__tabs",
1231
+ "kui-tab-bar__trailing"
1232
+ ],
1233
+ "publicTokens": ["--kui-tab-bar-background", "--kui-tab-bar-border"]
1234
+ },
1235
+ "diagnostics": [
1236
+ {
1237
+ "id": "KUI-C104",
1238
+ "severity": "error",
1239
+ "when": "wireTabBars is absent",
1240
+ "message": "TabBar requires wireTabBars for keyboard and reorder behavior."
1241
+ }
1242
+ ],
1243
+ "provenance": {
1244
+ "selection": "ai/component-catalog.json",
1245
+ "composition": "docs/accessibility.md#tabs"
1246
+ }
1247
+ },
1248
+ {
1249
+ "key": "@kerfjs/ui:segmented-control",
1250
+ "package": "@kerfjs/ui",
1251
+ "id": "segmented-control",
1252
+ "name": "SegmentedControl",
1253
+ "kind": "component",
1254
+ "source": "kerf",
1255
+ "parents": { "mode": "any", "entries": [] },
1256
+ "contexts": ["compact-exclusive-choice"],
1257
+ "zones": [],
1258
+ "children": { "mode": "any", "concepts": [], "requiredConcepts": [] },
1259
+ "state": [{ "id": "value", "owner": "controlled", "required": true }],
1260
+ "wiring": { "required": false, "helpers": [], "obligations": [] },
1261
+ "responsive": { "owner": "not-applicable", "behaviors": [] },
1262
+ "layout": {
1263
+ "roles": ["controls"],
1264
+ "geometry": { "margin": "none", "border": "self", "padding": "self" }
1265
+ },
1266
+ "accessibility": {
1267
+ "obligations": [
1268
+ "Every enabled choice remains in sequential tab order.",
1269
+ "Every choice has a meaningful label."
1270
+ ]
1271
+ },
1272
+ "boundaries": {
1273
+ "rootClass": "kui-segmented-control",
1274
+ "publicClasses": [
1275
+ "kui-segmented-control",
1276
+ "kui-segmented-control__item"
1277
+ ],
1278
+ "publicTokens": [
1279
+ "--kui-color-brand-on-quiet",
1280
+ "--kui-color-neutral-border-normal",
1281
+ "--kui-color-neutral-fill-normal",
1282
+ "--kui-color-neutral-on-quiet",
1283
+ "--kui-color-surface",
1284
+ "--kui-focus-ring",
1285
+ "--kui-font-2xs",
1286
+ "--kui-font-weight-semibold",
1287
+ "--kui-font-xs",
1288
+ "--kui-segmented-background",
1289
+ "--kui-segmented-border",
1290
+ "--kui-segmented-foreground",
1291
+ "--kui-segmented-hover-background",
1292
+ "--kui-segmented-item-radius",
1293
+ "--kui-segmented-radius",
1294
+ "--kui-segmented-selected-background",
1295
+ "--kui-segmented-selected-border",
1296
+ "--kui-segmented-selected-foreground",
1297
+ "--kui-segmented-selected-shadow",
1298
+ "--kui-shadow-s",
1299
+ "--kui-toolbar-control-color",
1300
+ "--kui-toolbar-control-hover-background",
1301
+ "--kui-toolbar-control-selected-background",
1302
+ "--kui-toolbar-control-selected-color",
1303
+ "--kui-toolbar-control-selected-shadow"
1304
+ ]
1305
+ },
1306
+ "diagnostics": [],
1307
+ "provenance": {
1308
+ "selection": "ai/component-catalog.json",
1309
+ "composition": "docs/accessibility.md#segmentedcontrol"
1310
+ }
1311
+ },
1312
+ {
1313
+ "key": "@kerfjs/ui:token-search-field",
1314
+ "package": "@kerfjs/ui",
1315
+ "id": "token-search-field",
1316
+ "name": "TokenSearchField",
1317
+ "kind": "component",
1318
+ "source": "kerf",
1319
+ "parents": { "mode": "any", "entries": [] },
1320
+ "contexts": ["structured-search-editor"],
1321
+ "zones": [],
1322
+ "children": { "mode": "any", "concepts": [], "requiredConcepts": [] },
1323
+ "state": [
1324
+ { "id": "tokens", "owner": "controlled", "required": true },
1325
+ { "id": "text", "owner": "component", "required": true },
1326
+ { "id": "expanded", "owner": "controlled", "required": false }
1327
+ ],
1328
+ "wiring": {
1329
+ "required": true,
1330
+ "helpers": ["wireTokenSearchFields"],
1331
+ "obligations": [
1332
+ "Retain and invoke the disposer.",
1333
+ "Use readTokenSearchField for DOM-owned text."
1334
+ ]
1335
+ },
1336
+ "responsive": { "owner": "not-applicable", "behaviors": [] },
1337
+ "layout": {
1338
+ "roles": ["controls"],
1339
+ "geometry": { "margin": "none", "border": "self", "padding": "self" }
1340
+ },
1341
+ "accessibility": {
1342
+ "obligations": [
1343
+ "Announce result changes when useful and keep tokens atomic during editing.",
1344
+ "Keep leading and trailing controls aligned to the first text line while content wraps.",
1345
+ "Wire Enter to submit without inserting a contenteditable line break and preserve focus plus the text-relative caret across controlled keyboard chip deletion; visual wrapping remains available.",
1346
+ "In collapsible mode, wireTokenSearchFields manages this by default: activating the trigger reveals the searchbox and moves focus into it, Escape on an empty field collapses and returns focus to the trigger, and focus leaving an empty field collapses it; each behavior is individually opt-out."
1347
+ ]
1348
+ },
1349
+ "boundaries": {
1350
+ "rootClass": "kui-token-search",
1351
+ "publicClasses": [
1352
+ "kui-token-search",
1353
+ "kui-token-search__clear",
1354
+ "kui-token-search__editor",
1355
+ "kui-token-search__expand",
1356
+ "kui-token-search__leading",
1357
+ "kui-token-search__token",
1358
+ "kui-token-search__token-edit",
1359
+ "kui-token-search__token-remove",
1360
+ "kui-token-search__trailing"
1361
+ ],
1362
+ "publicTokens": [
1363
+ "--kui-color-accent",
1364
+ "--kui-color-accent-text",
1365
+ "--kui-color-border",
1366
+ "--kui-color-text-link",
1367
+ "--kui-color-surface",
1368
+ "--kui-color-text",
1369
+ "--kui-color-text-quiet",
1370
+ "--kui-focus-ring",
1371
+ "--kui-font-s",
1372
+ "--kui-font-xs",
1373
+ "--kui-radius-pill",
1374
+ "--kui-token-search-background",
1375
+ "--kui-token-search-border",
1376
+ "--kui-token-search-line-size",
1377
+ "--kui-token-search-token-background",
1378
+ "--kui-token-search-token-foreground",
1379
+ "--kui-token-search-expanded-width"
1380
+ ]
1381
+ },
1382
+ "diagnostics": [
1383
+ {
1384
+ "id": "KUI-C105",
1385
+ "severity": "error",
1386
+ "when": "wireTokenSearchFields is absent",
1387
+ "message": "TokenSearchField requires its public wiring helper for keyboard and collapsible behavior."
1388
+ }
1389
+ ],
1390
+ "provenance": {
1391
+ "selection": "ai/component-catalog.json",
1392
+ "composition": "docs/accessibility.md#tokensearchfield"
1393
+ }
1394
+ },
1395
+ {
1396
+ "key": "@kerfjs/ui:resize",
1397
+ "package": "@kerfjs/ui",
1398
+ "id": "resize",
1399
+ "name": "ResizableRegion",
1400
+ "kind": "component",
1401
+ "source": "kerf",
1402
+ "parents": { "mode": "any", "entries": [] },
1403
+ "contexts": ["adjustable-pane-boundary"],
1404
+ "zones": [],
1405
+ "children": { "mode": "any", "concepts": [], "requiredConcepts": [] },
1406
+ "state": [{ "id": "size", "owner": "controlled", "required": true }],
1407
+ "wiring": {
1408
+ "required": true,
1409
+ "helpers": ["wireResizableRegions"],
1410
+ "obligations": [
1411
+ "Retain and invoke the disposer.",
1412
+ "Persist committed size in the application when persistence is required."
1413
+ ]
1414
+ },
1415
+ "responsive": { "owner": "not-applicable", "behaviors": [] },
1416
+ "layout": {
1417
+ "roles": ["controls"],
1418
+ "geometry": {
1419
+ "margin": "none",
1420
+ "border": "conditional",
1421
+ "padding": "conditional",
1422
+ "notes": [
1423
+ "The region delegates visible separator geometry and hit-area padding to its orientation-specific handle."
1424
+ ]
1425
+ }
1426
+ },
1427
+ "accessibility": {
1428
+ "obligations": [
1429
+ "Preserve separator naming, value ARIA, and keyboard behavior.",
1430
+ "Keep handleIcon decorative and free of interactive descendants; the separator owns focus, naming, and pointer/keyboard interaction."
1431
+ ]
1432
+ },
1433
+ "boundaries": {
1434
+ "rootClass": "kui-resizable-region",
1435
+ "publicClasses": [
1436
+ "kui-resizable-region",
1437
+ "kui-resizable-region__content",
1438
+ "kui-resizable-region__handle",
1439
+ "kui-resizable-region__handle-icon"
1440
+ ],
1441
+ "publicTokens": [
1442
+ "--kui-color-border",
1443
+ "--kui-color-neutral-on-quiet",
1444
+ "--kui-color-text-link",
1445
+ "--kui-focus-ring",
1446
+ "--kui-radius-s",
1447
+ "--kui-resizable-region-handle-active-color",
1448
+ "--kui-resizable-region-handle-color",
1449
+ "--kui-resizable-region-separator-color",
1450
+ "--kui-resizable-region-size"
1451
+ ]
1452
+ },
1453
+ "diagnostics": [
1454
+ {
1455
+ "id": "KUI-C106",
1456
+ "severity": "error",
1457
+ "when": "wireResizableRegions is absent",
1458
+ "message": "ResizableRegion requires wireResizableRegions for pointer and keyboard operation."
1459
+ }
1460
+ ],
1461
+ "provenance": {
1462
+ "selection": "ai/component-catalog.json",
1463
+ "composition": "docs/accessibility.md#resizableregion"
1464
+ }
1465
+ },
1466
+ {
1467
+ "key": "@kerfjs/ui:select",
1468
+ "package": "@kerfjs/ui",
1469
+ "id": "select",
1470
+ "name": "Select",
1471
+ "kind": "component",
1472
+ "source": "kerf",
1473
+ "parents": { "mode": "any", "entries": [] },
1474
+ "contexts": ["controlled-value-selection"],
1475
+ "zones": [],
1476
+ "children": { "mode": "any", "concepts": [], "requiredConcepts": [] },
1477
+ "state": [{ "id": "value", "owner": "controlled", "required": true }],
1478
+ "wiring": {
1479
+ "required": true,
1480
+ "helpers": ["@kerfjs/ui/select/register"],
1481
+ "obligations": [
1482
+ "Import the registration module once in the application."
1483
+ ]
1484
+ },
1485
+ "responsive": { "owner": "not-applicable", "behaviors": [] },
1486
+ "layout": {
1487
+ "roles": ["controls"],
1488
+ "geometry": { "margin": "none", "border": "self", "padding": "self" }
1489
+ },
1490
+ "accessibility": {
1491
+ "obligations": [
1492
+ "Verify the live value, standard events, focus, and rendered output."
1493
+ ]
1494
+ },
1495
+ "boundaries": {
1496
+ "rootClass": "kui-select",
1497
+ "publicClasses": [
1498
+ "kui-select",
1499
+ "kui-select--custom-selected",
1500
+ "kui-select--fit-menu",
1501
+ "kui-select__custom-selected",
1502
+ "kui-select__group",
1503
+ "kui-select__group--separated",
1504
+ "kui-select__group-title",
1505
+ "kui-select__icon"
1506
+ ],
1507
+ "publicTokens": [
1508
+ "--kui-color-brand-fill-normal",
1509
+ "--kui-color-brand-on-fill",
1510
+ "--kui-color-neutral-border-quiet",
1511
+ "--kui-color-neutral-on-quiet",
1512
+ "--kui-disclosure-icon-scale",
1513
+ "--kui-font-2xs"
1514
+ ]
1515
+ },
1516
+ "diagnostics": [
1517
+ {
1518
+ "id": "KUI-C107",
1519
+ "severity": "error",
1520
+ "when": "the registration import is absent",
1521
+ "message": "Select requires @kerfjs/ui/select/register once per application."
1522
+ }
1523
+ ],
1524
+ "provenance": {
1525
+ "selection": "ai/component-catalog.json",
1526
+ "composition": "README.md#web-awesome-theme"
1527
+ }
1528
+ },
1529
+ {
1530
+ "key": "@kerfjs/ui:feedback",
1531
+ "package": "@kerfjs/ui",
1532
+ "id": "feedback",
1533
+ "name": "Feedback composition",
1534
+ "kind": "composition",
1535
+ "source": "kerf",
1536
+ "parents": { "mode": "any", "entries": [] },
1537
+ "contexts": ["application-ui"],
1538
+ "zones": [],
1539
+ "children": { "mode": "any", "concepts": [], "requiredConcepts": [] },
1540
+ "state": [
1541
+ { "id": "state mapping", "owner": "application", "required": false },
1542
+ { "id": "message lifetime", "owner": "application", "required": false },
1543
+ { "id": "recovery policy", "owner": "application", "required": false }
1544
+ ],
1545
+ "wiring": { "required": false, "helpers": [], "obligations": [] },
1546
+ "responsive": { "owner": "not-applicable", "behaviors": [] },
1547
+ "layout": {
1548
+ "roles": ["feedback"],
1549
+ "geometry": { "margin": "child", "border": "child", "padding": "child" }
1550
+ },
1551
+ "accessibility": {
1552
+ "obligations": [
1553
+ "Choose polite status versus assertive alert deliberately."
1554
+ ]
1555
+ },
1556
+ "boundaries": {
1557
+ "rootClass": null,
1558
+ "publicClasses": [],
1559
+ "publicTokens": []
1560
+ },
1561
+ "diagnostics": [],
1562
+ "provenance": {
1563
+ "selection": "ai/component-catalog.json",
1564
+ "composition": "generated-permissive-default"
1565
+ }
1566
+ },
1567
+ {
1568
+ "key": "@kerfjs/ui:state-banner",
1569
+ "package": "@kerfjs/ui",
1570
+ "id": "state-banner",
1571
+ "name": "StateBanner",
1572
+ "kind": "component",
1573
+ "source": "kerf",
1574
+ "parents": { "mode": "any", "entries": [] },
1575
+ "contexts": ["application-ui"],
1576
+ "zones": [],
1577
+ "children": { "mode": "any", "concepts": [], "requiredConcepts": [] },
1578
+ "state": [
1579
+ { "id": "state mapping", "owner": "application", "required": false },
1580
+ { "id": "message lifetime", "owner": "application", "required": false },
1581
+ { "id": "retry behavior", "owner": "application", "required": false },
1582
+ { "id": "copy", "owner": "application", "required": false }
1583
+ ],
1584
+ "wiring": { "required": false, "helpers": [], "obligations": [] },
1585
+ "responsive": { "owner": "not-applicable", "behaviors": [] },
1586
+ "layout": {
1587
+ "roles": ["feedback"],
1588
+ "geometry": { "margin": "self", "border": "self", "padding": "self" }
1589
+ },
1590
+ "accessibility": {
1591
+ "obligations": [
1592
+ "Use alert urgency only for an attention-requiring failure."
1593
+ ]
1594
+ },
1595
+ "boundaries": {
1596
+ "rootClass": "kui-state-banner",
1597
+ "publicClasses": [
1598
+ "kui-state-banner",
1599
+ "kui-state-banner__action",
1600
+ "kui-state-banner__copy",
1601
+ "kui-state-banner__icon"
1602
+ ],
1603
+ "publicTokens": [
1604
+ "--kui-color-brand-border-quiet",
1605
+ "--kui-color-brand-fill-quiet",
1606
+ "--kui-color-brand-on-fill",
1607
+ "--kui-color-danger-border-quiet",
1608
+ "--kui-color-danger-fill-quiet",
1609
+ "--kui-color-danger-on-quiet",
1610
+ "--kui-color-neutral-border-normal",
1611
+ "--kui-color-neutral-fill-quiet",
1612
+ "--kui-color-neutral-on-normal",
1613
+ "--kui-color-success-border-normal",
1614
+ "--kui-color-success-fill-quiet",
1615
+ "--kui-color-success-on-fill",
1616
+ "--kui-color-surface",
1617
+ "--kui-color-text-link",
1618
+ "--kui-color-warning-border-normal",
1619
+ "--kui-color-warning-fill-quiet",
1620
+ "--kui-color-warning-on-fill",
1621
+ "--kui-font-2xs",
1622
+ "--kui-font-xs",
1623
+ "--kui-radius-pill",
1624
+ "--kui-state-banner-action-background",
1625
+ "--kui-state-banner-action-hover-background",
1626
+ "--kui-state-banner-background",
1627
+ "--kui-state-banner-border",
1628
+ "--kui-state-banner-danger-background",
1629
+ "--kui-state-banner-danger-border",
1630
+ "--kui-state-banner-danger-foreground",
1631
+ "--kui-state-banner-detail",
1632
+ "--kui-state-banner-foreground",
1633
+ "--kui-state-banner-info-background",
1634
+ "--kui-state-banner-info-border",
1635
+ "--kui-state-banner-info-foreground",
1636
+ "--kui-state-banner-neutral-background",
1637
+ "--kui-state-banner-neutral-border",
1638
+ "--kui-state-banner-neutral-foreground",
1639
+ "--kui-state-banner-success-background",
1640
+ "--kui-state-banner-success-border",
1641
+ "--kui-state-banner-success-foreground",
1642
+ "--kui-state-banner-warning-background",
1643
+ "--kui-state-banner-warning-border",
1644
+ "--kui-state-banner-warning-foreground"
1645
+ ]
1646
+ },
1647
+ "diagnostics": [],
1648
+ "provenance": {
1649
+ "selection": "ai/component-catalog.json",
1650
+ "composition": "generated-permissive-default"
1651
+ }
1652
+ },
1653
+ {
1654
+ "key": "@kerfjs/ui:empty-state",
1655
+ "package": "@kerfjs/ui",
1656
+ "id": "empty-state",
1657
+ "name": "EmptyState",
1658
+ "kind": "component",
1659
+ "source": "kerf",
1660
+ "parents": { "mode": "any", "entries": [] },
1661
+ "contexts": ["application-ui"],
1662
+ "zones": [],
1663
+ "children": { "mode": "any", "concepts": [], "requiredConcepts": [] },
1664
+ "state": [
1665
+ {
1666
+ "id": "empty/busy policy",
1667
+ "owner": "application",
1668
+ "required": false
1669
+ },
1670
+ { "id": "recovery action", "owner": "application", "required": false },
1671
+ { "id": "copy", "owner": "application", "required": false }
1672
+ ],
1673
+ "wiring": { "required": false, "helpers": [], "obligations": [] },
1674
+ "responsive": { "owner": "not-applicable", "behaviors": [] },
1675
+ "layout": {
1676
+ "roles": ["feedback"],
1677
+ "geometry": { "margin": "self", "border": "self", "padding": "self" }
1678
+ },
1679
+ "accessibility": {
1680
+ "obligations": [
1681
+ "Busy state uses aria-busy; the illustration never supplies the only label."
1682
+ ]
1683
+ },
1684
+ "boundaries": {
1685
+ "rootClass": "kui-empty-state",
1686
+ "publicClasses": [
1687
+ "kui-empty-state",
1688
+ "kui-empty-state__action",
1689
+ "kui-empty-state__icon"
1690
+ ],
1691
+ "publicTokens": [
1692
+ "--kui-color-neutral-on-quiet",
1693
+ "--kui-color-text",
1694
+ "--kui-empty-state-foreground",
1695
+ "--kui-empty-state-title",
1696
+ "--kui-font-l",
1697
+ "--kui-font-s",
1698
+ "--kui-space-xl",
1699
+ "--kui-space-xs"
1700
+ ]
1701
+ },
1702
+ "diagnostics": [],
1703
+ "provenance": {
1704
+ "selection": "ai/component-catalog.json",
1705
+ "composition": "generated-permissive-default"
1706
+ }
1707
+ },
1708
+ {
1709
+ "key": "@kerfjs/ui:loading-spinner",
1710
+ "package": "@kerfjs/ui",
1711
+ "id": "loading-spinner",
1712
+ "name": "LoadingSpinner",
1713
+ "kind": "component",
1714
+ "source": "kerf",
1715
+ "parents": { "mode": "any", "entries": [] },
1716
+ "contexts": ["application-ui"],
1717
+ "zones": [],
1718
+ "children": { "mode": "any", "concepts": [], "requiredConcepts": [] },
1719
+ "state": [
1720
+ {
1721
+ "id": "loading lifecycle",
1722
+ "owner": "application",
1723
+ "required": false
1724
+ },
1725
+ {
1726
+ "id": "adjacent status copy",
1727
+ "owner": "application",
1728
+ "required": false
1729
+ }
1730
+ ],
1731
+ "wiring": { "required": false, "helpers": [], "obligations": [] },
1732
+ "responsive": { "owner": "not-applicable", "behaviors": [] },
1733
+ "layout": {
1734
+ "roles": ["feedback"],
1735
+ "geometry": { "margin": "none", "border": "none", "padding": "none" }
1736
+ },
1737
+ "accessibility": {
1738
+ "obligations": [
1739
+ "Labeled spinners use role img; decorative spinners are hidden and stop for reduced motion."
1740
+ ]
1741
+ },
1742
+ "boundaries": {
1743
+ "rootClass": "kui-loading-spinner",
1744
+ "publicClasses": ["kui-loading-spinner"],
1745
+ "publicTokens": []
1746
+ },
1747
+ "diagnostics": [],
1748
+ "provenance": {
1749
+ "selection": "ai/component-catalog.json",
1750
+ "composition": "generated-permissive-default"
1751
+ }
1752
+ },
1753
+ {
1754
+ "key": "@kerfjs/ui:skeleton",
1755
+ "package": "@kerfjs/ui",
1756
+ "id": "skeleton",
1757
+ "name": "Skeleton",
1758
+ "kind": "component",
1759
+ "source": "kerf",
1760
+ "parents": { "mode": "any", "entries": [] },
1761
+ "contexts": ["application-ui"],
1762
+ "zones": [],
1763
+ "children": { "mode": "any", "concepts": [], "requiredConcepts": [] },
1764
+ "state": [
1765
+ {
1766
+ "id": "loading lifecycle",
1767
+ "owner": "application",
1768
+ "required": false
1769
+ },
1770
+ {
1771
+ "id": "which slots are unknown",
1772
+ "owner": "application",
1773
+ "required": false
1774
+ },
1775
+ {
1776
+ "id": "announcing the loading region",
1777
+ "owner": "application",
1778
+ "required": false
1779
+ }
1780
+ ],
1781
+ "wiring": { "required": false, "helpers": [], "obligations": [] },
1782
+ "responsive": { "owner": "not-applicable", "behaviors": [] },
1783
+ "layout": {
1784
+ "roles": ["feedback"],
1785
+ "geometry": { "margin": "none", "border": "none", "padding": "none" }
1786
+ },
1787
+ "accessibility": {
1788
+ "obligations": [
1789
+ "Decorative by default (aria-hidden); pass label to announce it as an image. A component in placeholder mode marks itself aria-busy and disables its own controls."
1790
+ ]
1791
+ },
1792
+ "boundaries": {
1793
+ "rootClass": "kui-skeleton",
1794
+ "publicClasses": ["kui-skeleton", "kui-skeleton-lines"],
1795
+ "publicTokens": ["--kui-skeleton-radius"]
1796
+ },
1797
+ "diagnostics": [],
1798
+ "provenance": {
1799
+ "selection": "ai/component-catalog.json",
1800
+ "composition": "generated-permissive-default"
1801
+ }
1802
+ },
1803
+ {
1804
+ "key": "@kerfjs/ui:wa-button",
1805
+ "package": "@kerfjs/ui",
1806
+ "id": "wa-button",
1807
+ "name": "Button",
1808
+ "kind": "component",
1809
+ "source": "webawesome",
1810
+ "parents": { "mode": "any", "entries": [] },
1811
+ "contexts": ["application-ui"],
1812
+ "zones": [],
1813
+ "children": { "mode": "any", "concepts": [], "requiredConcepts": [] },
1814
+ "state": [],
1815
+ "wiring": { "required": false, "helpers": [], "obligations": [] },
1816
+ "responsive": { "owner": "not-applicable", "behaviors": [] },
1817
+ "layout": {
1818
+ "roles": ["actions"],
1819
+ "geometry": { "margin": "none", "border": "self", "padding": "self" }
1820
+ },
1821
+ "accessibility": { "obligations": [] },
1822
+ "boundaries": {
1823
+ "rootClass": null,
1824
+ "publicClasses": [],
1825
+ "publicTokens": []
1826
+ },
1827
+ "diagnostics": [],
1828
+ "provenance": {
1829
+ "selection": "ai/component-catalog.json",
1830
+ "composition": "generated-permissive-default"
1831
+ }
1832
+ },
1833
+ {
1834
+ "key": "@kerfjs/ui:wa-button-group",
1835
+ "package": "@kerfjs/ui",
1836
+ "id": "wa-button-group",
1837
+ "name": "Button Group",
1838
+ "kind": "component",
1839
+ "source": "webawesome",
1840
+ "parents": { "mode": "any", "entries": [] },
1841
+ "contexts": ["application-ui"],
1842
+ "zones": [],
1843
+ "children": { "mode": "any", "concepts": [], "requiredConcepts": [] },
1844
+ "state": [],
1845
+ "wiring": { "required": false, "helpers": [], "obligations": [] },
1846
+ "responsive": { "owner": "not-applicable", "behaviors": [] },
1847
+ "layout": {
1848
+ "roles": ["actions"],
1849
+ "geometry": { "margin": "none", "border": "child", "padding": "child" }
1850
+ },
1851
+ "accessibility": { "obligations": [] },
1852
+ "boundaries": {
1853
+ "rootClass": null,
1854
+ "publicClasses": [],
1855
+ "publicTokens": []
1856
+ },
1857
+ "diagnostics": [],
1858
+ "provenance": {
1859
+ "selection": "ai/component-catalog.json",
1860
+ "composition": "generated-permissive-default"
1861
+ }
1862
+ },
1863
+ {
1864
+ "key": "@kerfjs/ui:wa-copy-button",
1865
+ "package": "@kerfjs/ui",
1866
+ "id": "wa-copy-button",
1867
+ "name": "Copy Button",
1868
+ "kind": "component",
1869
+ "source": "webawesome",
1870
+ "parents": { "mode": "any", "entries": [] },
1871
+ "contexts": ["application-ui"],
1872
+ "zones": [],
1873
+ "children": { "mode": "any", "concepts": [], "requiredConcepts": [] },
1874
+ "state": [],
1875
+ "wiring": { "required": false, "helpers": [], "obligations": [] },
1876
+ "responsive": { "owner": "not-applicable", "behaviors": [] },
1877
+ "layout": {
1878
+ "roles": ["actions"],
1879
+ "geometry": { "margin": "none", "border": "self", "padding": "self" }
1880
+ },
1881
+ "accessibility": { "obligations": [] },
1882
+ "boundaries": {
1883
+ "rootClass": null,
1884
+ "publicClasses": [],
1885
+ "publicTokens": []
1886
+ },
1887
+ "diagnostics": [],
1888
+ "provenance": {
1889
+ "selection": "ai/component-catalog.json",
1890
+ "composition": "generated-permissive-default"
1891
+ }
1892
+ },
1893
+ {
1894
+ "key": "@kerfjs/ui:wa-dropdown",
1895
+ "package": "@kerfjs/ui",
1896
+ "id": "wa-dropdown",
1897
+ "name": "Dropdown",
1898
+ "kind": "component",
1899
+ "source": "webawesome",
1900
+ "parents": { "mode": "any", "entries": [] },
1901
+ "contexts": ["application-ui"],
1902
+ "zones": [],
1903
+ "children": { "mode": "any", "concepts": [], "requiredConcepts": [] },
1904
+ "state": [],
1905
+ "wiring": { "required": false, "helpers": [], "obligations": [] },
1906
+ "responsive": { "owner": "not-applicable", "behaviors": [] },
1907
+ "layout": {
1908
+ "roles": ["actions"],
1909
+ "geometry": { "margin": "none", "border": "child", "padding": "child" }
1910
+ },
1911
+ "accessibility": { "obligations": [] },
1912
+ "boundaries": {
1913
+ "rootClass": null,
1914
+ "publicClasses": [],
1915
+ "publicTokens": []
1916
+ },
1917
+ "diagnostics": [],
1918
+ "provenance": {
1919
+ "selection": "ai/component-catalog.json",
1920
+ "composition": "generated-permissive-default"
1921
+ }
1922
+ },
1923
+ {
1924
+ "key": "@kerfjs/ui:wa-dropdown-item",
1925
+ "package": "@kerfjs/ui",
1926
+ "id": "wa-dropdown-item",
1927
+ "name": "Dropdown Item",
1928
+ "kind": "component",
1929
+ "source": "webawesome",
1930
+ "parents": { "mode": "any", "entries": [] },
1931
+ "contexts": ["application-ui"],
1932
+ "zones": [],
1933
+ "children": { "mode": "any", "concepts": [], "requiredConcepts": [] },
1934
+ "state": [],
1935
+ "wiring": { "required": false, "helpers": [], "obligations": [] },
1936
+ "responsive": { "owner": "not-applicable", "behaviors": [] },
1937
+ "layout": {
1938
+ "roles": ["actions"],
1939
+ "geometry": { "margin": "none", "border": "self", "padding": "self" }
1940
+ },
1941
+ "accessibility": { "obligations": [] },
1942
+ "boundaries": {
1943
+ "rootClass": null,
1944
+ "publicClasses": [],
1945
+ "publicTokens": []
1946
+ },
1947
+ "diagnostics": [],
1948
+ "provenance": {
1949
+ "selection": "ai/component-catalog.json",
1950
+ "composition": "generated-permissive-default"
1951
+ }
1952
+ },
1953
+ {
1954
+ "key": "@kerfjs/ui:wa-checkbox",
1955
+ "package": "@kerfjs/ui",
1956
+ "id": "wa-checkbox",
1957
+ "name": "Checkbox",
1958
+ "kind": "component",
1959
+ "source": "webawesome",
1960
+ "parents": { "mode": "any", "entries": [] },
1961
+ "contexts": ["application-ui"],
1962
+ "zones": [],
1963
+ "children": { "mode": "any", "concepts": [], "requiredConcepts": [] },
1964
+ "state": [],
1965
+ "wiring": { "required": false, "helpers": [], "obligations": [] },
1966
+ "responsive": { "owner": "not-applicable", "behaviors": [] },
1967
+ "layout": {
1968
+ "roles": ["forms"],
1969
+ "geometry": { "margin": "none", "border": "self", "padding": "self" }
1970
+ },
1971
+ "accessibility": { "obligations": [] },
1972
+ "boundaries": {
1973
+ "rootClass": null,
1974
+ "publicClasses": [],
1975
+ "publicTokens": []
1976
+ },
1977
+ "diagnostics": [],
1978
+ "provenance": {
1979
+ "selection": "ai/component-catalog.json",
1980
+ "composition": "generated-permissive-default"
1981
+ }
1982
+ },
1983
+ {
1984
+ "key": "@kerfjs/ui:wa-checkbox-group",
1985
+ "package": "@kerfjs/ui",
1986
+ "id": "wa-checkbox-group",
1987
+ "name": "Checkbox Group",
1988
+ "kind": "component",
1989
+ "source": "webawesome",
1990
+ "parents": { "mode": "any", "entries": [] },
1991
+ "contexts": ["application-ui"],
1992
+ "zones": [],
1993
+ "children": { "mode": "any", "concepts": [], "requiredConcepts": [] },
1994
+ "state": [],
1995
+ "wiring": { "required": false, "helpers": [], "obligations": [] },
1996
+ "responsive": { "owner": "not-applicable", "behaviors": [] },
1997
+ "layout": {
1998
+ "roles": ["forms"],
1999
+ "geometry": { "margin": "self", "border": "child", "padding": "child" }
2000
+ },
2001
+ "accessibility": { "obligations": [] },
2002
+ "boundaries": {
2003
+ "rootClass": null,
2004
+ "publicClasses": [],
2005
+ "publicTokens": []
2006
+ },
2007
+ "diagnostics": [],
2008
+ "provenance": {
2009
+ "selection": "ai/component-catalog.json",
2010
+ "composition": "generated-permissive-default"
2011
+ }
2012
+ },
2013
+ {
2014
+ "key": "@kerfjs/ui:wa-color-picker",
2015
+ "package": "@kerfjs/ui",
2016
+ "id": "wa-color-picker",
2017
+ "name": "Color Picker",
2018
+ "kind": "component",
2019
+ "source": "webawesome",
2020
+ "parents": { "mode": "any", "entries": [] },
2021
+ "contexts": ["application-ui"],
2022
+ "zones": [],
2023
+ "children": { "mode": "any", "concepts": [], "requiredConcepts": [] },
2024
+ "state": [],
2025
+ "wiring": { "required": false, "helpers": [], "obligations": [] },
2026
+ "responsive": { "owner": "not-applicable", "behaviors": [] },
2027
+ "layout": {
2028
+ "roles": ["forms"],
2029
+ "geometry": { "margin": "none", "border": "self", "padding": "self" }
2030
+ },
2031
+ "accessibility": { "obligations": [] },
2032
+ "boundaries": {
2033
+ "rootClass": null,
2034
+ "publicClasses": [],
2035
+ "publicTokens": []
2036
+ },
2037
+ "diagnostics": [],
2038
+ "provenance": {
2039
+ "selection": "ai/component-catalog.json",
2040
+ "composition": "generated-permissive-default"
2041
+ }
2042
+ },
2043
+ {
2044
+ "key": "@kerfjs/ui:wa-input",
2045
+ "package": "@kerfjs/ui",
2046
+ "id": "wa-input",
2047
+ "name": "Input",
2048
+ "kind": "component",
2049
+ "source": "webawesome",
2050
+ "parents": { "mode": "any", "entries": [] },
2051
+ "contexts": ["application-ui"],
2052
+ "zones": [],
2053
+ "children": { "mode": "any", "concepts": [], "requiredConcepts": [] },
2054
+ "state": [],
2055
+ "wiring": { "required": false, "helpers": [], "obligations": [] },
2056
+ "responsive": { "owner": "not-applicable", "behaviors": [] },
2057
+ "layout": {
2058
+ "roles": ["forms"],
2059
+ "geometry": { "margin": "none", "border": "self", "padding": "self" }
2060
+ },
2061
+ "accessibility": { "obligations": [] },
2062
+ "boundaries": {
2063
+ "rootClass": null,
2064
+ "publicClasses": [],
2065
+ "publicTokens": []
2066
+ },
2067
+ "diagnostics": [],
2068
+ "provenance": {
2069
+ "selection": "ai/component-catalog.json",
2070
+ "composition": "generated-permissive-default"
2071
+ }
2072
+ },
2073
+ {
2074
+ "key": "@kerfjs/ui:wa-known-date",
2075
+ "package": "@kerfjs/ui",
2076
+ "id": "wa-known-date",
2077
+ "name": "Known Date",
2078
+ "kind": "component",
2079
+ "source": "webawesome",
2080
+ "parents": { "mode": "any", "entries": [] },
2081
+ "contexts": ["application-ui"],
2082
+ "zones": [],
2083
+ "children": { "mode": "any", "concepts": [], "requiredConcepts": [] },
2084
+ "state": [],
2085
+ "wiring": { "required": false, "helpers": [], "obligations": [] },
2086
+ "responsive": { "owner": "not-applicable", "behaviors": [] },
2087
+ "layout": {
2088
+ "roles": ["forms"],
2089
+ "geometry": { "margin": "none", "border": "self", "padding": "self" }
2090
+ },
2091
+ "accessibility": { "obligations": [] },
2092
+ "boundaries": {
2093
+ "rootClass": null,
2094
+ "publicClasses": [],
2095
+ "publicTokens": []
2096
+ },
2097
+ "diagnostics": [],
2098
+ "provenance": {
2099
+ "selection": "ai/component-catalog.json",
2100
+ "composition": "generated-permissive-default"
2101
+ }
2102
+ },
2103
+ {
2104
+ "key": "@kerfjs/ui:wa-number-input",
2105
+ "package": "@kerfjs/ui",
2106
+ "id": "wa-number-input",
2107
+ "name": "Number Input",
2108
+ "kind": "component",
2109
+ "source": "webawesome",
2110
+ "parents": { "mode": "any", "entries": [] },
2111
+ "contexts": ["application-ui"],
2112
+ "zones": [],
2113
+ "children": { "mode": "any", "concepts": [], "requiredConcepts": [] },
2114
+ "state": [],
2115
+ "wiring": { "required": false, "helpers": [], "obligations": [] },
2116
+ "responsive": { "owner": "not-applicable", "behaviors": [] },
2117
+ "layout": {
2118
+ "roles": ["forms"],
2119
+ "geometry": { "margin": "none", "border": "self", "padding": "self" }
2120
+ },
2121
+ "accessibility": { "obligations": [] },
2122
+ "boundaries": {
2123
+ "rootClass": null,
2124
+ "publicClasses": [],
2125
+ "publicTokens": []
2126
+ },
2127
+ "diagnostics": [],
2128
+ "provenance": {
2129
+ "selection": "ai/component-catalog.json",
2130
+ "composition": "generated-permissive-default"
2131
+ }
2132
+ },
2133
+ {
2134
+ "key": "@kerfjs/ui:wa-option",
2135
+ "package": "@kerfjs/ui",
2136
+ "id": "wa-option",
2137
+ "name": "Option",
2138
+ "kind": "component",
2139
+ "source": "webawesome",
2140
+ "parents": { "mode": "any", "entries": [] },
2141
+ "contexts": ["application-ui"],
2142
+ "zones": [],
2143
+ "children": { "mode": "any", "concepts": [], "requiredConcepts": [] },
2144
+ "state": [],
2145
+ "wiring": { "required": false, "helpers": [], "obligations": [] },
2146
+ "responsive": { "owner": "not-applicable", "behaviors": [] },
2147
+ "layout": {
2148
+ "roles": ["forms"],
2149
+ "geometry": { "margin": "none", "border": "self", "padding": "self" }
2150
+ },
2151
+ "accessibility": { "obligations": [] },
2152
+ "boundaries": {
2153
+ "rootClass": null,
2154
+ "publicClasses": [],
2155
+ "publicTokens": []
2156
+ },
2157
+ "diagnostics": [],
2158
+ "provenance": {
2159
+ "selection": "ai/component-catalog.json",
2160
+ "composition": "generated-permissive-default"
2161
+ }
2162
+ },
2163
+ {
2164
+ "key": "@kerfjs/ui:wa-otp-input",
2165
+ "package": "@kerfjs/ui",
2166
+ "id": "wa-otp-input",
2167
+ "name": "OTP Input",
2168
+ "kind": "component",
2169
+ "source": "webawesome",
2170
+ "parents": { "mode": "any", "entries": [] },
2171
+ "contexts": ["application-ui"],
2172
+ "zones": [],
2173
+ "children": { "mode": "any", "concepts": [], "requiredConcepts": [] },
2174
+ "state": [],
2175
+ "wiring": { "required": false, "helpers": [], "obligations": [] },
2176
+ "responsive": { "owner": "not-applicable", "behaviors": [] },
2177
+ "layout": {
2178
+ "roles": ["forms"],
2179
+ "geometry": { "margin": "none", "border": "self", "padding": "self" }
2180
+ },
2181
+ "accessibility": { "obligations": [] },
2182
+ "boundaries": {
2183
+ "rootClass": null,
2184
+ "publicClasses": [],
2185
+ "publicTokens": []
2186
+ },
2187
+ "diagnostics": [],
2188
+ "provenance": {
2189
+ "selection": "ai/component-catalog.json",
2190
+ "composition": "generated-permissive-default"
2191
+ }
2192
+ },
2193
+ {
2194
+ "key": "@kerfjs/ui:wa-radio",
2195
+ "package": "@kerfjs/ui",
2196
+ "id": "wa-radio",
2197
+ "name": "Radio",
2198
+ "kind": "component",
2199
+ "source": "webawesome",
2200
+ "parents": { "mode": "any", "entries": [] },
2201
+ "contexts": ["application-ui"],
2202
+ "zones": [],
2203
+ "children": { "mode": "any", "concepts": [], "requiredConcepts": [] },
2204
+ "state": [],
2205
+ "wiring": { "required": false, "helpers": [], "obligations": [] },
2206
+ "responsive": { "owner": "not-applicable", "behaviors": [] },
2207
+ "layout": {
2208
+ "roles": ["forms"],
2209
+ "geometry": { "margin": "none", "border": "self", "padding": "self" }
2210
+ },
2211
+ "accessibility": { "obligations": [] },
2212
+ "boundaries": {
2213
+ "rootClass": null,
2214
+ "publicClasses": [],
2215
+ "publicTokens": []
2216
+ },
2217
+ "diagnostics": [],
2218
+ "provenance": {
2219
+ "selection": "ai/component-catalog.json",
2220
+ "composition": "generated-permissive-default"
2221
+ }
2222
+ },
2223
+ {
2224
+ "key": "@kerfjs/ui:wa-radio-group",
2225
+ "package": "@kerfjs/ui",
2226
+ "id": "wa-radio-group",
2227
+ "name": "Radio Group",
2228
+ "kind": "component",
2229
+ "source": "webawesome",
2230
+ "parents": { "mode": "any", "entries": [] },
2231
+ "contexts": ["application-ui"],
2232
+ "zones": [
2233
+ {
2234
+ "id": "options",
2235
+ "accepts": ["wa-radio"],
2236
+ "cardinality": { "min": 1, "max": "unbounded" },
2237
+ "exclusiveWith": []
2238
+ }
2239
+ ],
2240
+ "children": {
2241
+ "mode": "listed",
2242
+ "concepts": ["wa-radio"],
2243
+ "requiredConcepts": ["wa-radio"]
2244
+ },
2245
+ "state": [],
2246
+ "wiring": { "required": false, "helpers": [], "obligations": [] },
2247
+ "responsive": { "owner": "not-applicable", "behaviors": [] },
2248
+ "layout": {
2249
+ "roles": ["forms"],
2250
+ "geometry": { "margin": "self", "border": "child", "padding": "child" }
2251
+ },
2252
+ "accessibility": { "obligations": [] },
2253
+ "boundaries": {
2254
+ "rootClass": null,
2255
+ "publicClasses": [],
2256
+ "publicTokens": []
2257
+ },
2258
+ "diagnostics": [],
2259
+ "provenance": {
2260
+ "selection": "ai/component-catalog.json",
2261
+ "composition": "docs/webawesome-theme.md#coverage"
2262
+ }
2263
+ },
2264
+ {
2265
+ "key": "@kerfjs/ui:wa-rating",
2266
+ "package": "@kerfjs/ui",
2267
+ "id": "wa-rating",
2268
+ "name": "Rating",
2269
+ "kind": "component",
2270
+ "source": "webawesome",
2271
+ "parents": { "mode": "any", "entries": [] },
2272
+ "contexts": ["application-ui"],
2273
+ "zones": [],
2274
+ "children": { "mode": "any", "concepts": [], "requiredConcepts": [] },
2275
+ "state": [],
2276
+ "wiring": { "required": false, "helpers": [], "obligations": [] },
2277
+ "responsive": { "owner": "not-applicable", "behaviors": [] },
2278
+ "layout": {
2279
+ "roles": ["forms"],
2280
+ "geometry": { "margin": "none", "border": "none", "padding": "none" }
2281
+ },
2282
+ "accessibility": { "obligations": [] },
2283
+ "boundaries": {
2284
+ "rootClass": null,
2285
+ "publicClasses": [],
2286
+ "publicTokens": []
2287
+ },
2288
+ "diagnostics": [],
2289
+ "provenance": {
2290
+ "selection": "ai/component-catalog.json",
2291
+ "composition": "generated-permissive-default"
2292
+ }
2293
+ },
2294
+ {
2295
+ "key": "@kerfjs/ui:wa-select",
2296
+ "package": "@kerfjs/ui",
2297
+ "id": "wa-select",
2298
+ "name": "Select",
2299
+ "kind": "component",
2300
+ "source": "webawesome",
2301
+ "parents": { "mode": "any", "entries": [] },
2302
+ "contexts": ["application-ui"],
2303
+ "zones": [
2304
+ {
2305
+ "id": "options",
2306
+ "accepts": ["wa-option"],
2307
+ "cardinality": { "min": 1, "max": "unbounded" },
2308
+ "exclusiveWith": []
2309
+ }
2310
+ ],
2311
+ "children": {
2312
+ "mode": "listed",
2313
+ "concepts": ["wa-option"],
2314
+ "requiredConcepts": ["wa-option"]
2315
+ },
2316
+ "state": [],
2317
+ "wiring": { "required": false, "helpers": [], "obligations": [] },
2318
+ "responsive": { "owner": "not-applicable", "behaviors": [] },
2319
+ "layout": {
2320
+ "roles": ["forms"],
2321
+ "geometry": { "margin": "none", "border": "self", "padding": "self" }
2322
+ },
2323
+ "accessibility": { "obligations": [] },
2324
+ "boundaries": {
2325
+ "rootClass": null,
2326
+ "publicClasses": [],
2327
+ "publicTokens": []
2328
+ },
2329
+ "diagnostics": [],
2330
+ "provenance": {
2331
+ "selection": "ai/component-catalog.json",
2332
+ "composition": "docs/webawesome-theme.md#coverage"
2333
+ }
2334
+ },
2335
+ {
2336
+ "key": "@kerfjs/ui:wa-slider",
2337
+ "package": "@kerfjs/ui",
2338
+ "id": "wa-slider",
2339
+ "name": "Slider",
2340
+ "kind": "component",
2341
+ "source": "webawesome",
2342
+ "parents": { "mode": "any", "entries": [] },
2343
+ "contexts": ["application-ui"],
2344
+ "zones": [],
2345
+ "children": { "mode": "any", "concepts": [], "requiredConcepts": [] },
2346
+ "state": [],
2347
+ "wiring": { "required": false, "helpers": [], "obligations": [] },
2348
+ "responsive": { "owner": "not-applicable", "behaviors": [] },
2349
+ "layout": {
2350
+ "roles": ["forms"],
2351
+ "geometry": { "margin": "self", "border": "none", "padding": "child" }
2352
+ },
2353
+ "accessibility": { "obligations": [] },
2354
+ "boundaries": {
2355
+ "rootClass": null,
2356
+ "publicClasses": [],
2357
+ "publicTokens": []
2358
+ },
2359
+ "diagnostics": [],
2360
+ "provenance": {
2361
+ "selection": "ai/component-catalog.json",
2362
+ "composition": "generated-permissive-default"
2363
+ }
2364
+ },
2365
+ {
2366
+ "key": "@kerfjs/ui:wa-switch",
2367
+ "package": "@kerfjs/ui",
2368
+ "id": "wa-switch",
2369
+ "name": "Switch",
2370
+ "kind": "component",
2371
+ "source": "webawesome",
2372
+ "parents": { "mode": "any", "entries": [] },
2373
+ "contexts": ["application-ui"],
2374
+ "zones": [],
2375
+ "children": { "mode": "any", "concepts": [], "requiredConcepts": [] },
2376
+ "state": [],
2377
+ "wiring": { "required": false, "helpers": [], "obligations": [] },
2378
+ "responsive": { "owner": "not-applicable", "behaviors": [] },
2379
+ "layout": {
2380
+ "roles": ["forms"],
2381
+ "geometry": { "margin": "none", "border": "self", "padding": "self" }
2382
+ },
2383
+ "accessibility": { "obligations": [] },
2384
+ "boundaries": {
2385
+ "rootClass": null,
2386
+ "publicClasses": [],
2387
+ "publicTokens": []
2388
+ },
2389
+ "diagnostics": [],
2390
+ "provenance": {
2391
+ "selection": "ai/component-catalog.json",
2392
+ "composition": "generated-permissive-default"
2393
+ }
2394
+ },
2395
+ {
2396
+ "key": "@kerfjs/ui:wa-textarea",
2397
+ "package": "@kerfjs/ui",
2398
+ "id": "wa-textarea",
2399
+ "name": "Textarea",
2400
+ "kind": "component",
2401
+ "source": "webawesome",
2402
+ "parents": { "mode": "any", "entries": [] },
2403
+ "contexts": ["application-ui"],
2404
+ "zones": [],
2405
+ "children": { "mode": "any", "concepts": [], "requiredConcepts": [] },
2406
+ "state": [],
2407
+ "wiring": { "required": false, "helpers": [], "obligations": [] },
2408
+ "responsive": { "owner": "not-applicable", "behaviors": [] },
2409
+ "layout": {
2410
+ "roles": ["forms"],
2411
+ "geometry": { "margin": "none", "border": "self", "padding": "self" }
2412
+ },
2413
+ "accessibility": { "obligations": [] },
2414
+ "boundaries": {
2415
+ "rootClass": null,
2416
+ "publicClasses": [],
2417
+ "publicTokens": []
2418
+ },
2419
+ "diagnostics": [],
2420
+ "provenance": {
2421
+ "selection": "ai/component-catalog.json",
2422
+ "composition": "generated-permissive-default"
2423
+ }
2424
+ },
2425
+ {
2426
+ "key": "@kerfjs/ui:wa-time-input",
2427
+ "package": "@kerfjs/ui",
2428
+ "id": "wa-time-input",
2429
+ "name": "Time Input",
2430
+ "kind": "component",
2431
+ "source": "webawesome",
2432
+ "parents": { "mode": "any", "entries": [] },
2433
+ "contexts": ["application-ui"],
2434
+ "zones": [],
2435
+ "children": { "mode": "any", "concepts": [], "requiredConcepts": [] },
2436
+ "state": [],
2437
+ "wiring": { "required": false, "helpers": [], "obligations": [] },
2438
+ "responsive": { "owner": "not-applicable", "behaviors": [] },
2439
+ "layout": {
2440
+ "roles": ["forms"],
2441
+ "geometry": { "margin": "none", "border": "self", "padding": "self" }
2442
+ },
2443
+ "accessibility": { "obligations": [] },
2444
+ "boundaries": {
2445
+ "rootClass": null,
2446
+ "publicClasses": [],
2447
+ "publicTokens": []
2448
+ },
2449
+ "diagnostics": [],
2450
+ "provenance": {
2451
+ "selection": "ai/component-catalog.json",
2452
+ "composition": "generated-permissive-default"
2453
+ }
2454
+ },
2455
+ {
2456
+ "key": "@kerfjs/ui:wa-accordion",
2457
+ "package": "@kerfjs/ui",
2458
+ "id": "wa-accordion",
2459
+ "name": "Accordion",
2460
+ "kind": "component",
2461
+ "source": "webawesome",
2462
+ "parents": { "mode": "any", "entries": [] },
2463
+ "contexts": ["application-ui"],
2464
+ "zones": [
2465
+ {
2466
+ "id": "items",
2467
+ "accepts": ["wa-accordion-item"],
2468
+ "cardinality": { "min": 1, "max": "unbounded" },
2469
+ "exclusiveWith": []
2470
+ }
2471
+ ],
2472
+ "children": {
2473
+ "mode": "listed",
2474
+ "concepts": ["wa-accordion-item"],
2475
+ "requiredConcepts": ["wa-accordion-item"]
2476
+ },
2477
+ "state": [],
2478
+ "wiring": { "required": false, "helpers": [], "obligations": [] },
2479
+ "responsive": { "owner": "not-applicable", "behaviors": [] },
2480
+ "layout": {
2481
+ "roles": ["layout"],
2482
+ "geometry": { "margin": "self", "border": "self", "padding": "self" }
2483
+ },
2484
+ "accessibility": { "obligations": [] },
2485
+ "boundaries": {
2486
+ "rootClass": null,
2487
+ "publicClasses": [],
2488
+ "publicTokens": []
2489
+ },
2490
+ "diagnostics": [],
2491
+ "provenance": {
2492
+ "selection": "ai/component-catalog.json",
2493
+ "composition": "docs/webawesome-theme.md#coverage"
2494
+ }
2495
+ },
2496
+ {
2497
+ "key": "@kerfjs/ui:wa-accordion-item",
2498
+ "package": "@kerfjs/ui",
2499
+ "id": "wa-accordion-item",
2500
+ "name": "Accordion Item",
2501
+ "kind": "component",
2502
+ "source": "webawesome",
2503
+ "parents": { "mode": "any", "entries": [] },
2504
+ "contexts": ["application-ui"],
2505
+ "zones": [],
2506
+ "children": { "mode": "any", "concepts": [], "requiredConcepts": [] },
2507
+ "state": [],
2508
+ "wiring": { "required": false, "helpers": [], "obligations": [] },
2509
+ "responsive": { "owner": "not-applicable", "behaviors": [] },
2510
+ "layout": {
2511
+ "roles": ["layout"],
2512
+ "geometry": { "margin": "none", "border": "self", "padding": "self" }
2513
+ },
2514
+ "accessibility": { "obligations": [] },
2515
+ "boundaries": {
2516
+ "rootClass": null,
2517
+ "publicClasses": [],
2518
+ "publicTokens": []
2519
+ },
2520
+ "diagnostics": [],
2521
+ "provenance": {
2522
+ "selection": "ai/component-catalog.json",
2523
+ "composition": "generated-permissive-default"
2524
+ }
2525
+ },
2526
+ {
2527
+ "key": "@kerfjs/ui:wa-card",
2528
+ "package": "@kerfjs/ui",
2529
+ "id": "wa-card",
2530
+ "name": "Card",
2531
+ "kind": "component",
2532
+ "source": "webawesome",
2533
+ "parents": { "mode": "any", "entries": [] },
2534
+ "contexts": ["application-ui"],
2535
+ "zones": [],
2536
+ "children": { "mode": "any", "concepts": [], "requiredConcepts": [] },
2537
+ "state": [],
2538
+ "wiring": { "required": false, "helpers": [], "obligations": [] },
2539
+ "responsive": { "owner": "not-applicable", "behaviors": [] },
2540
+ "layout": {
2541
+ "roles": ["layout"],
2542
+ "geometry": { "margin": "self", "border": "self", "padding": "self" }
2543
+ },
2544
+ "accessibility": { "obligations": [] },
2545
+ "boundaries": {
2546
+ "rootClass": null,
2547
+ "publicClasses": [],
2548
+ "publicTokens": []
2549
+ },
2550
+ "diagnostics": [],
2551
+ "provenance": {
2552
+ "selection": "ai/component-catalog.json",
2553
+ "composition": "generated-permissive-default"
2554
+ }
2555
+ },
2556
+ {
2557
+ "key": "@kerfjs/ui:wa-details",
2558
+ "package": "@kerfjs/ui",
2559
+ "id": "wa-details",
2560
+ "name": "Details",
2561
+ "kind": "component",
2562
+ "source": "webawesome",
2563
+ "parents": { "mode": "any", "entries": [] },
2564
+ "contexts": ["application-ui"],
2565
+ "zones": [],
2566
+ "children": { "mode": "any", "concepts": [], "requiredConcepts": [] },
2567
+ "state": [],
2568
+ "wiring": { "required": false, "helpers": [], "obligations": [] },
2569
+ "responsive": { "owner": "not-applicable", "behaviors": [] },
2570
+ "layout": {
2571
+ "roles": ["layout"],
2572
+ "geometry": { "margin": "self", "border": "self", "padding": "self" }
2573
+ },
2574
+ "accessibility": { "obligations": [] },
2575
+ "boundaries": {
2576
+ "rootClass": null,
2577
+ "publicClasses": [],
2578
+ "publicTokens": []
2579
+ },
2580
+ "diagnostics": [],
2581
+ "provenance": {
2582
+ "selection": "ai/component-catalog.json",
2583
+ "composition": "generated-permissive-default"
2584
+ }
2585
+ },
2586
+ {
2587
+ "key": "@kerfjs/ui:wa-dialog",
2588
+ "package": "@kerfjs/ui",
2589
+ "id": "wa-dialog",
2590
+ "name": "Dialog",
2591
+ "kind": "component",
2592
+ "source": "webawesome",
2593
+ "parents": { "mode": "any", "entries": [] },
2594
+ "contexts": ["application-ui"],
2595
+ "zones": [],
2596
+ "children": { "mode": "any", "concepts": [], "requiredConcepts": [] },
2597
+ "state": [],
2598
+ "wiring": { "required": false, "helpers": [], "obligations": [] },
2599
+ "responsive": { "owner": "not-applicable", "behaviors": [] },
2600
+ "layout": {
2601
+ "roles": ["layout"],
2602
+ "geometry": { "margin": "none", "border": "child", "padding": "child" }
2603
+ },
2604
+ "accessibility": { "obligations": [] },
2605
+ "boundaries": {
2606
+ "rootClass": null,
2607
+ "publicClasses": [],
2608
+ "publicTokens": []
2609
+ },
2610
+ "diagnostics": [],
2611
+ "provenance": {
2612
+ "selection": "ai/component-catalog.json",
2613
+ "composition": "generated-permissive-default"
2614
+ }
2615
+ },
2616
+ {
2617
+ "key": "@kerfjs/ui:wa-divider",
2618
+ "package": "@kerfjs/ui",
2619
+ "id": "wa-divider",
2620
+ "name": "Divider",
2621
+ "kind": "component",
2622
+ "source": "webawesome",
2623
+ "parents": { "mode": "any", "entries": [] },
2624
+ "contexts": ["application-ui"],
2625
+ "zones": [],
2626
+ "children": { "mode": "any", "concepts": [], "requiredConcepts": [] },
2627
+ "state": [],
2628
+ "wiring": { "required": false, "helpers": [], "obligations": [] },
2629
+ "responsive": { "owner": "not-applicable", "behaviors": [] },
2630
+ "layout": {
2631
+ "roles": ["layout"],
2632
+ "geometry": { "margin": "parent", "border": "self", "padding": "none" }
2633
+ },
2634
+ "accessibility": { "obligations": [] },
2635
+ "boundaries": {
2636
+ "rootClass": null,
2637
+ "publicClasses": [],
2638
+ "publicTokens": []
2639
+ },
2640
+ "diagnostics": [],
2641
+ "provenance": {
2642
+ "selection": "ai/component-catalog.json",
2643
+ "composition": "generated-permissive-default"
2644
+ }
2645
+ },
2646
+ {
2647
+ "key": "@kerfjs/ui:wa-drawer",
2648
+ "package": "@kerfjs/ui",
2649
+ "id": "wa-drawer",
2650
+ "name": "Drawer",
2651
+ "kind": "component",
2652
+ "source": "webawesome",
2653
+ "parents": { "mode": "any", "entries": [] },
2654
+ "contexts": ["application-ui"],
2655
+ "zones": [],
2656
+ "children": { "mode": "any", "concepts": [], "requiredConcepts": [] },
2657
+ "state": [],
2658
+ "wiring": { "required": false, "helpers": [], "obligations": [] },
2659
+ "responsive": { "owner": "not-applicable", "behaviors": [] },
2660
+ "layout": {
2661
+ "roles": ["layout"],
2662
+ "geometry": { "margin": "none", "border": "child", "padding": "child" }
2663
+ },
2664
+ "accessibility": { "obligations": [] },
2665
+ "boundaries": {
2666
+ "rootClass": null,
2667
+ "publicClasses": [],
2668
+ "publicTokens": []
2669
+ },
2670
+ "diagnostics": [],
2671
+ "provenance": {
2672
+ "selection": "ai/component-catalog.json",
2673
+ "composition": "generated-permissive-default"
2674
+ }
2675
+ },
2676
+ {
2677
+ "key": "@kerfjs/ui:wa-page",
2678
+ "package": "@kerfjs/ui",
2679
+ "id": "wa-page",
2680
+ "name": "Page",
2681
+ "kind": "component",
2682
+ "source": "webawesome",
2683
+ "parents": { "mode": "any", "entries": [] },
2684
+ "contexts": ["application-ui"],
2685
+ "zones": [],
2686
+ "children": { "mode": "any", "concepts": [], "requiredConcepts": [] },
2687
+ "state": [],
2688
+ "wiring": { "required": false, "helpers": [], "obligations": [] },
2689
+ "responsive": { "owner": "not-applicable", "behaviors": [] },
2690
+ "layout": {
2691
+ "roles": ["layout"],
2692
+ "geometry": { "margin": "none", "border": "child", "padding": "child" }
2693
+ },
2694
+ "accessibility": { "obligations": [] },
2695
+ "boundaries": {
2696
+ "rootClass": null,
2697
+ "publicClasses": [],
2698
+ "publicTokens": []
2699
+ },
2700
+ "diagnostics": [],
2701
+ "provenance": {
2702
+ "selection": "ai/component-catalog.json",
2703
+ "composition": "generated-permissive-default"
2704
+ }
2705
+ },
2706
+ {
2707
+ "key": "@kerfjs/ui:wa-scroller",
2708
+ "package": "@kerfjs/ui",
2709
+ "id": "wa-scroller",
2710
+ "name": "Scroller",
2711
+ "kind": "component",
2712
+ "source": "webawesome",
2713
+ "parents": { "mode": "any", "entries": [] },
2714
+ "contexts": ["application-ui"],
2715
+ "zones": [],
2716
+ "children": { "mode": "any", "concepts": [], "requiredConcepts": [] },
2717
+ "state": [],
2718
+ "wiring": { "required": false, "helpers": [], "obligations": [] },
2719
+ "responsive": { "owner": "not-applicable", "behaviors": [] },
2720
+ "layout": {
2721
+ "roles": ["layout"],
2722
+ "geometry": { "margin": "none", "border": "child", "padding": "child" }
2723
+ },
2724
+ "accessibility": { "obligations": [] },
2725
+ "boundaries": {
2726
+ "rootClass": null,
2727
+ "publicClasses": [],
2728
+ "publicTokens": []
2729
+ },
2730
+ "diagnostics": [],
2731
+ "provenance": {
2732
+ "selection": "ai/component-catalog.json",
2733
+ "composition": "generated-permissive-default"
2734
+ }
2735
+ },
2736
+ {
2737
+ "key": "@kerfjs/ui:wa-split-panel",
2738
+ "package": "@kerfjs/ui",
2739
+ "id": "wa-split-panel",
2740
+ "name": "Split Panel",
2741
+ "kind": "component",
2742
+ "source": "webawesome",
2743
+ "parents": { "mode": "any", "entries": [] },
2744
+ "contexts": ["application-ui"],
2745
+ "zones": [],
2746
+ "children": { "mode": "any", "concepts": [], "requiredConcepts": [] },
2747
+ "state": [],
2748
+ "wiring": { "required": false, "helpers": [], "obligations": [] },
2749
+ "responsive": { "owner": "not-applicable", "behaviors": [] },
2750
+ "layout": {
2751
+ "roles": ["layout"],
2752
+ "geometry": { "margin": "none", "border": "child", "padding": "child" }
2753
+ },
2754
+ "accessibility": { "obligations": [] },
2755
+ "boundaries": {
2756
+ "rootClass": null,
2757
+ "publicClasses": [],
2758
+ "publicTokens": []
2759
+ },
2760
+ "diagnostics": [],
2761
+ "provenance": {
2762
+ "selection": "ai/component-catalog.json",
2763
+ "composition": "generated-permissive-default"
2764
+ }
2765
+ },
2766
+ {
2767
+ "key": "@kerfjs/ui:wa-breadcrumb",
2768
+ "package": "@kerfjs/ui",
2769
+ "id": "wa-breadcrumb",
2770
+ "name": "Breadcrumb",
2771
+ "kind": "component",
2772
+ "source": "webawesome",
2773
+ "parents": { "mode": "any", "entries": [] },
2774
+ "contexts": ["application-ui"],
2775
+ "zones": [],
2776
+ "children": { "mode": "any", "concepts": [], "requiredConcepts": [] },
2777
+ "state": [],
2778
+ "wiring": { "required": false, "helpers": [], "obligations": [] },
2779
+ "responsive": { "owner": "not-applicable", "behaviors": [] },
2780
+ "layout": {
2781
+ "roles": ["navigation"],
2782
+ "geometry": { "margin": "none", "border": "child", "padding": "child" }
2783
+ },
2784
+ "accessibility": { "obligations": [] },
2785
+ "boundaries": {
2786
+ "rootClass": null,
2787
+ "publicClasses": [],
2788
+ "publicTokens": []
2789
+ },
2790
+ "diagnostics": [],
2791
+ "provenance": {
2792
+ "selection": "ai/component-catalog.json",
2793
+ "composition": "generated-permissive-default"
2794
+ }
2795
+ },
2796
+ {
2797
+ "key": "@kerfjs/ui:wa-breadcrumb-item",
2798
+ "package": "@kerfjs/ui",
2799
+ "id": "wa-breadcrumb-item",
2800
+ "name": "Breadcrumb Item",
2801
+ "kind": "component",
2802
+ "source": "webawesome",
2803
+ "parents": { "mode": "any", "entries": [] },
2804
+ "contexts": ["application-ui"],
2805
+ "zones": [],
2806
+ "children": { "mode": "any", "concepts": [], "requiredConcepts": [] },
2807
+ "state": [],
2808
+ "wiring": { "required": false, "helpers": [], "obligations": [] },
2809
+ "responsive": { "owner": "not-applicable", "behaviors": [] },
2810
+ "layout": {
2811
+ "roles": ["navigation"],
2812
+ "geometry": { "margin": "none", "border": "none", "padding": "none" }
2813
+ },
2814
+ "accessibility": { "obligations": [] },
2815
+ "boundaries": {
2816
+ "rootClass": null,
2817
+ "publicClasses": [],
2818
+ "publicTokens": []
2819
+ },
2820
+ "diagnostics": [],
2821
+ "provenance": {
2822
+ "selection": "ai/component-catalog.json",
2823
+ "composition": "generated-permissive-default"
2824
+ }
2825
+ },
2826
+ {
2827
+ "key": "@kerfjs/ui:wa-pagination",
2828
+ "package": "@kerfjs/ui",
2829
+ "id": "wa-pagination",
2830
+ "name": "Pagination",
2831
+ "kind": "component",
2832
+ "source": "webawesome",
2833
+ "parents": { "mode": "any", "entries": [] },
2834
+ "contexts": ["application-ui"],
2835
+ "zones": [],
2836
+ "children": { "mode": "any", "concepts": [], "requiredConcepts": [] },
2837
+ "state": [],
2838
+ "wiring": { "required": false, "helpers": [], "obligations": [] },
2839
+ "responsive": { "owner": "not-applicable", "behaviors": [] },
2840
+ "layout": {
2841
+ "roles": ["navigation"],
2842
+ "geometry": { "margin": "none", "border": "child", "padding": "child" }
2843
+ },
2844
+ "accessibility": { "obligations": [] },
2845
+ "boundaries": {
2846
+ "rootClass": null,
2847
+ "publicClasses": [],
2848
+ "publicTokens": []
2849
+ },
2850
+ "diagnostics": [],
2851
+ "provenance": {
2852
+ "selection": "ai/component-catalog.json",
2853
+ "composition": "generated-permissive-default"
2854
+ }
2855
+ },
2856
+ {
2857
+ "key": "@kerfjs/ui:wa-tab",
2858
+ "package": "@kerfjs/ui",
2859
+ "id": "wa-tab",
2860
+ "name": "Tab",
2861
+ "kind": "component",
2862
+ "source": "webawesome",
2863
+ "parents": { "mode": "any", "entries": [] },
2864
+ "contexts": ["application-ui"],
2865
+ "zones": [],
2866
+ "children": { "mode": "any", "concepts": [], "requiredConcepts": [] },
2867
+ "state": [],
2868
+ "wiring": { "required": false, "helpers": [], "obligations": [] },
2869
+ "responsive": { "owner": "not-applicable", "behaviors": [] },
2870
+ "layout": {
2871
+ "roles": ["navigation"],
2872
+ "geometry": { "margin": "none", "border": "self", "padding": "self" }
2873
+ },
2874
+ "accessibility": { "obligations": [] },
2875
+ "boundaries": {
2876
+ "rootClass": null,
2877
+ "publicClasses": [],
2878
+ "publicTokens": []
2879
+ },
2880
+ "diagnostics": [],
2881
+ "provenance": {
2882
+ "selection": "ai/component-catalog.json",
2883
+ "composition": "generated-permissive-default"
2884
+ }
2885
+ },
2886
+ {
2887
+ "key": "@kerfjs/ui:wa-tab-group",
2888
+ "package": "@kerfjs/ui",
2889
+ "id": "wa-tab-group",
2890
+ "name": "Tab Group",
2891
+ "kind": "component",
2892
+ "source": "webawesome",
2893
+ "parents": { "mode": "any", "entries": [] },
2894
+ "contexts": ["application-ui"],
2895
+ "zones": [
2896
+ {
2897
+ "id": "tabs",
2898
+ "accepts": ["wa-tab"],
2899
+ "cardinality": { "min": 1, "max": "unbounded" },
2900
+ "exclusiveWith": []
2901
+ },
2902
+ {
2903
+ "id": "panels",
2904
+ "accepts": ["wa-tab-panel"],
2905
+ "cardinality": { "min": 1, "max": "unbounded" },
2906
+ "exclusiveWith": []
2907
+ }
2908
+ ],
2909
+ "children": {
2910
+ "mode": "listed",
2911
+ "concepts": ["wa-tab", "wa-tab-panel"],
2912
+ "requiredConcepts": ["wa-tab", "wa-tab-panel"]
2913
+ },
2914
+ "state": [],
2915
+ "wiring": { "required": false, "helpers": [], "obligations": [] },
2916
+ "responsive": { "owner": "not-applicable", "behaviors": [] },
2917
+ "layout": {
2918
+ "roles": ["navigation"],
2919
+ "geometry": { "margin": "none", "border": "child", "padding": "child" }
2920
+ },
2921
+ "accessibility": { "obligations": [] },
2922
+ "boundaries": {
2923
+ "rootClass": null,
2924
+ "publicClasses": [],
2925
+ "publicTokens": []
2926
+ },
2927
+ "diagnostics": [
2928
+ {
2929
+ "id": "KUI-C108",
2930
+ "severity": "error",
2931
+ "when": "tab and panel name sets differ",
2932
+ "message": "Every wa-tab must identify a matching wa-tab-panel and vice versa."
2933
+ }
2934
+ ],
2935
+ "provenance": {
2936
+ "selection": "ai/component-catalog.json",
2937
+ "composition": "docs/webawesome-theme.md#coverage"
2938
+ }
2939
+ },
2940
+ {
2941
+ "key": "@kerfjs/ui:wa-tab-panel",
2942
+ "package": "@kerfjs/ui",
2943
+ "id": "wa-tab-panel",
2944
+ "name": "Tab Panel",
2945
+ "kind": "component",
2946
+ "source": "webawesome",
2947
+ "parents": { "mode": "any", "entries": [] },
2948
+ "contexts": ["application-ui"],
2949
+ "zones": [],
2950
+ "children": { "mode": "any", "concepts": [], "requiredConcepts": [] },
2951
+ "state": [],
2952
+ "wiring": { "required": false, "helpers": [], "obligations": [] },
2953
+ "responsive": { "owner": "not-applicable", "behaviors": [] },
2954
+ "layout": {
2955
+ "roles": ["navigation"],
2956
+ "geometry": {
2957
+ "margin": "none",
2958
+ "border": "none",
2959
+ "padding": "conditional",
2960
+ "notes": [
2961
+ "Container-mode tab panels own the themed container inset; uncontained panels do not."
2962
+ ]
2963
+ }
2964
+ },
2965
+ "accessibility": { "obligations": [] },
2966
+ "boundaries": {
2967
+ "rootClass": null,
2968
+ "publicClasses": [],
2969
+ "publicTokens": []
2970
+ },
2971
+ "diagnostics": [],
2972
+ "provenance": {
2973
+ "selection": "ai/component-catalog.json",
2974
+ "composition": "generated-permissive-default"
2975
+ }
2976
+ },
2977
+ {
2978
+ "key": "@kerfjs/ui:wa-tree",
2979
+ "package": "@kerfjs/ui",
2980
+ "id": "wa-tree",
2981
+ "name": "Tree",
2982
+ "kind": "component",
2983
+ "source": "webawesome",
2984
+ "parents": { "mode": "any", "entries": [] },
2985
+ "contexts": ["application-ui"],
2986
+ "zones": [],
2987
+ "children": { "mode": "any", "concepts": [], "requiredConcepts": [] },
2988
+ "state": [],
2989
+ "wiring": { "required": false, "helpers": [], "obligations": [] },
2990
+ "responsive": { "owner": "not-applicable", "behaviors": [] },
2991
+ "layout": {
2992
+ "roles": ["navigation"],
2993
+ "geometry": { "margin": "none", "border": "child", "padding": "child" }
2994
+ },
2995
+ "accessibility": { "obligations": [] },
2996
+ "boundaries": {
2997
+ "rootClass": null,
2998
+ "publicClasses": [],
2999
+ "publicTokens": []
3000
+ },
3001
+ "diagnostics": [],
3002
+ "provenance": {
3003
+ "selection": "ai/component-catalog.json",
3004
+ "composition": "generated-permissive-default"
3005
+ }
3006
+ },
3007
+ {
3008
+ "key": "@kerfjs/ui:wa-tree-item",
3009
+ "package": "@kerfjs/ui",
3010
+ "id": "wa-tree-item",
3011
+ "name": "Tree Item",
3012
+ "kind": "component",
3013
+ "source": "webawesome",
3014
+ "parents": { "mode": "any", "entries": [] },
3015
+ "contexts": ["application-ui"],
3016
+ "zones": [],
3017
+ "children": { "mode": "any", "concepts": [], "requiredConcepts": [] },
3018
+ "state": [],
3019
+ "wiring": { "required": false, "helpers": [], "obligations": [] },
3020
+ "responsive": { "owner": "not-applicable", "behaviors": [] },
3021
+ "layout": {
3022
+ "roles": ["navigation"],
3023
+ "geometry": { "margin": "none", "border": "self", "padding": "self" }
3024
+ },
3025
+ "accessibility": { "obligations": [] },
3026
+ "boundaries": {
3027
+ "rootClass": null,
3028
+ "publicClasses": [],
3029
+ "publicTokens": []
3030
+ },
3031
+ "diagnostics": [],
3032
+ "provenance": {
3033
+ "selection": "ai/component-catalog.json",
3034
+ "composition": "generated-permissive-default"
3035
+ }
3036
+ },
3037
+ {
3038
+ "key": "@kerfjs/ui:wa-badge",
3039
+ "package": "@kerfjs/ui",
3040
+ "id": "wa-badge",
3041
+ "name": "Badge",
3042
+ "kind": "component",
3043
+ "source": "webawesome",
3044
+ "parents": { "mode": "any", "entries": [] },
3045
+ "contexts": ["application-ui"],
3046
+ "zones": [],
3047
+ "children": { "mode": "any", "concepts": [], "requiredConcepts": [] },
3048
+ "state": [],
3049
+ "wiring": { "required": false, "helpers": [], "obligations": [] },
3050
+ "responsive": { "owner": "not-applicable", "behaviors": [] },
3051
+ "layout": {
3052
+ "roles": ["feedback"],
3053
+ "geometry": { "margin": "none", "border": "self", "padding": "self" }
3054
+ },
3055
+ "accessibility": { "obligations": [] },
3056
+ "boundaries": {
3057
+ "rootClass": null,
3058
+ "publicClasses": [],
3059
+ "publicTokens": []
3060
+ },
3061
+ "diagnostics": [],
3062
+ "provenance": {
3063
+ "selection": "ai/component-catalog.json",
3064
+ "composition": "generated-permissive-default"
3065
+ }
3066
+ },
3067
+ {
3068
+ "key": "@kerfjs/ui:wa-callout",
3069
+ "package": "@kerfjs/ui",
3070
+ "id": "wa-callout",
3071
+ "name": "Callout",
3072
+ "kind": "component",
3073
+ "source": "webawesome",
3074
+ "parents": { "mode": "any", "entries": [] },
3075
+ "contexts": ["application-ui"],
3076
+ "zones": [],
3077
+ "children": { "mode": "any", "concepts": [], "requiredConcepts": [] },
3078
+ "state": [],
3079
+ "wiring": { "required": false, "helpers": [], "obligations": [] },
3080
+ "responsive": { "owner": "not-applicable", "behaviors": [] },
3081
+ "layout": {
3082
+ "roles": ["feedback"],
3083
+ "geometry": { "margin": "self", "border": "self", "padding": "self" }
3084
+ },
3085
+ "accessibility": { "obligations": [] },
3086
+ "boundaries": {
3087
+ "rootClass": null,
3088
+ "publicClasses": [],
3089
+ "publicTokens": []
3090
+ },
3091
+ "diagnostics": [],
3092
+ "provenance": {
3093
+ "selection": "ai/component-catalog.json",
3094
+ "composition": "generated-permissive-default"
3095
+ }
3096
+ },
3097
+ {
3098
+ "key": "@kerfjs/ui:wa-progress-bar",
3099
+ "package": "@kerfjs/ui",
3100
+ "id": "wa-progress-bar",
3101
+ "name": "Progress Bar",
3102
+ "kind": "component",
3103
+ "source": "webawesome",
3104
+ "parents": { "mode": "any", "entries": [] },
3105
+ "contexts": ["application-ui"],
3106
+ "zones": [],
3107
+ "children": { "mode": "any", "concepts": [], "requiredConcepts": [] },
3108
+ "state": [],
3109
+ "wiring": { "required": false, "helpers": [], "obligations": [] },
3110
+ "responsive": { "owner": "not-applicable", "behaviors": [] },
3111
+ "layout": {
3112
+ "roles": ["feedback"],
3113
+ "geometry": { "margin": "none", "border": "self", "padding": "self" }
3114
+ },
3115
+ "accessibility": { "obligations": [] },
3116
+ "boundaries": {
3117
+ "rootClass": null,
3118
+ "publicClasses": [],
3119
+ "publicTokens": []
3120
+ },
3121
+ "diagnostics": [],
3122
+ "provenance": {
3123
+ "selection": "ai/component-catalog.json",
3124
+ "composition": "generated-permissive-default"
3125
+ }
3126
+ },
3127
+ {
3128
+ "key": "@kerfjs/ui:wa-progress-ring",
3129
+ "package": "@kerfjs/ui",
3130
+ "id": "wa-progress-ring",
3131
+ "name": "Progress Ring",
3132
+ "kind": "component",
3133
+ "source": "webawesome",
3134
+ "parents": { "mode": "any", "entries": [] },
3135
+ "contexts": ["application-ui"],
3136
+ "zones": [],
3137
+ "children": { "mode": "any", "concepts": [], "requiredConcepts": [] },
3138
+ "state": [],
3139
+ "wiring": { "required": false, "helpers": [], "obligations": [] },
3140
+ "responsive": { "owner": "not-applicable", "behaviors": [] },
3141
+ "layout": {
3142
+ "roles": ["feedback"],
3143
+ "geometry": { "margin": "none", "border": "self", "padding": "self" }
3144
+ },
3145
+ "accessibility": { "obligations": [] },
3146
+ "boundaries": {
3147
+ "rootClass": null,
3148
+ "publicClasses": [],
3149
+ "publicTokens": []
3150
+ },
3151
+ "diagnostics": [],
3152
+ "provenance": {
3153
+ "selection": "ai/component-catalog.json",
3154
+ "composition": "generated-permissive-default"
3155
+ }
3156
+ },
3157
+ {
3158
+ "key": "@kerfjs/ui:wa-skeleton",
3159
+ "package": "@kerfjs/ui",
3160
+ "id": "wa-skeleton",
3161
+ "name": "Skeleton",
3162
+ "kind": "component",
3163
+ "source": "webawesome",
3164
+ "parents": { "mode": "any", "entries": [] },
3165
+ "contexts": ["application-ui"],
3166
+ "zones": [],
3167
+ "children": { "mode": "any", "concepts": [], "requiredConcepts": [] },
3168
+ "state": [],
3169
+ "wiring": { "required": false, "helpers": [], "obligations": [] },
3170
+ "responsive": { "owner": "not-applicable", "behaviors": [] },
3171
+ "layout": {
3172
+ "roles": ["feedback"],
3173
+ "geometry": { "margin": "none", "border": "none", "padding": "none" }
3174
+ },
3175
+ "accessibility": { "obligations": [] },
3176
+ "boundaries": {
3177
+ "rootClass": null,
3178
+ "publicClasses": [],
3179
+ "publicTokens": []
3180
+ },
3181
+ "diagnostics": [],
3182
+ "provenance": {
3183
+ "selection": "ai/component-catalog.json",
3184
+ "composition": "generated-permissive-default"
3185
+ }
3186
+ },
3187
+ {
3188
+ "key": "@kerfjs/ui:wa-spinner",
3189
+ "package": "@kerfjs/ui",
3190
+ "id": "wa-spinner",
3191
+ "name": "Spinner",
3192
+ "kind": "component",
3193
+ "source": "webawesome",
3194
+ "parents": { "mode": "any", "entries": [] },
3195
+ "contexts": ["application-ui"],
3196
+ "zones": [],
3197
+ "children": { "mode": "any", "concepts": [], "requiredConcepts": [] },
3198
+ "state": [],
3199
+ "wiring": { "required": false, "helpers": [], "obligations": [] },
3200
+ "responsive": { "owner": "not-applicable", "behaviors": [] },
3201
+ "layout": {
3202
+ "roles": ["feedback"],
3203
+ "geometry": { "margin": "none", "border": "none", "padding": "none" }
3204
+ },
3205
+ "accessibility": { "obligations": [] },
3206
+ "boundaries": {
3207
+ "rootClass": null,
3208
+ "publicClasses": [],
3209
+ "publicTokens": []
3210
+ },
3211
+ "diagnostics": [],
3212
+ "provenance": {
3213
+ "selection": "ai/component-catalog.json",
3214
+ "composition": "generated-permissive-default"
3215
+ }
3216
+ },
3217
+ {
3218
+ "key": "@kerfjs/ui:wa-tag",
3219
+ "package": "@kerfjs/ui",
3220
+ "id": "wa-tag",
3221
+ "name": "Tag",
3222
+ "kind": "component",
3223
+ "source": "webawesome",
3224
+ "parents": { "mode": "any", "entries": [] },
3225
+ "contexts": ["application-ui"],
3226
+ "zones": [],
3227
+ "children": { "mode": "any", "concepts": [], "requiredConcepts": [] },
3228
+ "state": [],
3229
+ "wiring": { "required": false, "helpers": [], "obligations": [] },
3230
+ "responsive": { "owner": "not-applicable", "behaviors": [] },
3231
+ "layout": {
3232
+ "roles": ["feedback"],
3233
+ "geometry": { "margin": "none", "border": "self", "padding": "self" }
3234
+ },
3235
+ "accessibility": { "obligations": [] },
3236
+ "boundaries": {
3237
+ "rootClass": null,
3238
+ "publicClasses": [],
3239
+ "publicTokens": []
3240
+ },
3241
+ "diagnostics": [],
3242
+ "provenance": {
3243
+ "selection": "ai/component-catalog.json",
3244
+ "composition": "generated-permissive-default"
3245
+ }
3246
+ },
3247
+ {
3248
+ "key": "@kerfjs/ui:wa-toast",
3249
+ "package": "@kerfjs/ui",
3250
+ "id": "wa-toast",
3251
+ "name": "Toast",
3252
+ "kind": "component",
3253
+ "source": "webawesome",
3254
+ "parents": { "mode": "any", "entries": [] },
3255
+ "contexts": ["application-ui"],
3256
+ "zones": [],
3257
+ "children": { "mode": "any", "concepts": [], "requiredConcepts": [] },
3258
+ "state": [],
3259
+ "wiring": { "required": false, "helpers": [], "obligations": [] },
3260
+ "responsive": { "owner": "not-applicable", "behaviors": [] },
3261
+ "layout": {
3262
+ "roles": ["feedback"],
3263
+ "geometry": { "margin": "none", "border": "child", "padding": "child" }
3264
+ },
3265
+ "accessibility": { "obligations": [] },
3266
+ "boundaries": {
3267
+ "rootClass": null,
3268
+ "publicClasses": [],
3269
+ "publicTokens": []
3270
+ },
3271
+ "diagnostics": [],
3272
+ "provenance": {
3273
+ "selection": "ai/component-catalog.json",
3274
+ "composition": "generated-permissive-default"
3275
+ }
3276
+ },
3277
+ {
3278
+ "key": "@kerfjs/ui:wa-toast-item",
3279
+ "package": "@kerfjs/ui",
3280
+ "id": "wa-toast-item",
3281
+ "name": "Toast Item",
3282
+ "kind": "component",
3283
+ "source": "webawesome",
3284
+ "parents": { "mode": "any", "entries": [] },
3285
+ "contexts": ["application-ui"],
3286
+ "zones": [],
3287
+ "children": { "mode": "any", "concepts": [], "requiredConcepts": [] },
3288
+ "state": [],
3289
+ "wiring": { "required": false, "helpers": [], "obligations": [] },
3290
+ "responsive": { "owner": "not-applicable", "behaviors": [] },
3291
+ "layout": {
3292
+ "roles": ["feedback"],
3293
+ "geometry": { "margin": "none", "border": "self", "padding": "self" }
3294
+ },
3295
+ "accessibility": { "obligations": [] },
3296
+ "boundaries": {
3297
+ "rootClass": null,
3298
+ "publicClasses": [],
3299
+ "publicTokens": []
3300
+ },
3301
+ "diagnostics": [],
3302
+ "provenance": {
3303
+ "selection": "ai/component-catalog.json",
3304
+ "composition": "generated-permissive-default"
3305
+ }
3306
+ },
3307
+ {
3308
+ "key": "@kerfjs/ui:wa-tooltip",
3309
+ "package": "@kerfjs/ui",
3310
+ "id": "wa-tooltip",
3311
+ "name": "Tooltip",
3312
+ "kind": "component",
3313
+ "source": "webawesome",
3314
+ "parents": { "mode": "any", "entries": [] },
3315
+ "contexts": ["application-ui"],
3316
+ "zones": [],
3317
+ "children": { "mode": "any", "concepts": [], "requiredConcepts": [] },
3318
+ "state": [],
3319
+ "wiring": { "required": false, "helpers": [], "obligations": [] },
3320
+ "responsive": { "owner": "not-applicable", "behaviors": [] },
3321
+ "layout": {
3322
+ "roles": ["feedback"],
3323
+ "geometry": { "margin": "none", "border": "self", "padding": "self" }
3324
+ },
3325
+ "accessibility": { "obligations": [] },
3326
+ "boundaries": {
3327
+ "rootClass": null,
3328
+ "publicClasses": [],
3329
+ "publicTokens": []
3330
+ },
3331
+ "diagnostics": [],
3332
+ "provenance": {
3333
+ "selection": "ai/component-catalog.json",
3334
+ "composition": "generated-permissive-default"
3335
+ }
3336
+ },
3337
+ {
3338
+ "key": "@kerfjs/ui:wa-animated-image",
3339
+ "package": "@kerfjs/ui",
3340
+ "id": "wa-animated-image",
3341
+ "name": "Animated Image",
3342
+ "kind": "component",
3343
+ "source": "webawesome",
3344
+ "parents": { "mode": "any", "entries": [] },
3345
+ "contexts": ["application-ui"],
3346
+ "zones": [],
3347
+ "children": { "mode": "any", "concepts": [], "requiredConcepts": [] },
3348
+ "state": [],
3349
+ "wiring": { "required": false, "helpers": [], "obligations": [] },
3350
+ "responsive": { "owner": "not-applicable", "behaviors": [] },
3351
+ "layout": {
3352
+ "roles": ["media"],
3353
+ "geometry": { "margin": "none", "border": "self", "padding": "none" }
3354
+ },
3355
+ "accessibility": { "obligations": [] },
3356
+ "boundaries": {
3357
+ "rootClass": null,
3358
+ "publicClasses": [],
3359
+ "publicTokens": []
3360
+ },
3361
+ "diagnostics": [],
3362
+ "provenance": {
3363
+ "selection": "ai/component-catalog.json",
3364
+ "composition": "generated-permissive-default"
3365
+ }
3366
+ },
3367
+ {
3368
+ "key": "@kerfjs/ui:wa-avatar",
3369
+ "package": "@kerfjs/ui",
3370
+ "id": "wa-avatar",
3371
+ "name": "Avatar",
3372
+ "kind": "component",
3373
+ "source": "webawesome",
3374
+ "parents": { "mode": "any", "entries": [] },
3375
+ "contexts": ["application-ui"],
3376
+ "zones": [],
3377
+ "children": { "mode": "any", "concepts": [], "requiredConcepts": [] },
3378
+ "state": [],
3379
+ "wiring": { "required": false, "helpers": [], "obligations": [] },
3380
+ "responsive": { "owner": "not-applicable", "behaviors": [] },
3381
+ "layout": {
3382
+ "roles": ["media"],
3383
+ "geometry": { "margin": "none", "border": "self", "padding": "none" }
3384
+ },
3385
+ "accessibility": { "obligations": [] },
3386
+ "boundaries": {
3387
+ "rootClass": null,
3388
+ "publicClasses": [],
3389
+ "publicTokens": []
3390
+ },
3391
+ "diagnostics": [],
3392
+ "provenance": {
3393
+ "selection": "ai/component-catalog.json",
3394
+ "composition": "generated-permissive-default"
3395
+ }
3396
+ },
3397
+ {
3398
+ "key": "@kerfjs/ui:wa-carousel",
3399
+ "package": "@kerfjs/ui",
3400
+ "id": "wa-carousel",
3401
+ "name": "Carousel",
3402
+ "kind": "component",
3403
+ "source": "webawesome",
3404
+ "parents": { "mode": "any", "entries": [] },
3405
+ "contexts": ["application-ui"],
3406
+ "zones": [],
3407
+ "children": { "mode": "any", "concepts": [], "requiredConcepts": [] },
3408
+ "state": [],
3409
+ "wiring": { "required": false, "helpers": [], "obligations": [] },
3410
+ "responsive": { "owner": "not-applicable", "behaviors": [] },
3411
+ "layout": {
3412
+ "roles": ["media"],
3413
+ "geometry": { "margin": "none", "border": "self", "padding": "child" }
3414
+ },
3415
+ "accessibility": { "obligations": [] },
3416
+ "boundaries": {
3417
+ "rootClass": null,
3418
+ "publicClasses": [],
3419
+ "publicTokens": []
3420
+ },
3421
+ "diagnostics": [],
3422
+ "provenance": {
3423
+ "selection": "ai/component-catalog.json",
3424
+ "composition": "generated-permissive-default"
3425
+ }
3426
+ },
3427
+ {
3428
+ "key": "@kerfjs/ui:wa-carousel-item",
3429
+ "package": "@kerfjs/ui",
3430
+ "id": "wa-carousel-item",
3431
+ "name": "Carousel Item",
3432
+ "kind": "component",
3433
+ "source": "webawesome",
3434
+ "parents": { "mode": "any", "entries": [] },
3435
+ "contexts": ["application-ui"],
3436
+ "zones": [],
3437
+ "children": { "mode": "any", "concepts": [], "requiredConcepts": [] },
3438
+ "state": [],
3439
+ "wiring": { "required": false, "helpers": [], "obligations": [] },
3440
+ "responsive": { "owner": "not-applicable", "behaviors": [] },
3441
+ "layout": {
3442
+ "roles": ["media"],
3443
+ "geometry": { "margin": "none", "border": "none", "padding": "none" }
3444
+ },
3445
+ "accessibility": { "obligations": [] },
3446
+ "boundaries": {
3447
+ "rootClass": null,
3448
+ "publicClasses": [],
3449
+ "publicTokens": []
3450
+ },
3451
+ "diagnostics": [],
3452
+ "provenance": {
3453
+ "selection": "ai/component-catalog.json",
3454
+ "composition": "generated-permissive-default"
3455
+ }
3456
+ },
3457
+ {
3458
+ "key": "@kerfjs/ui:wa-comparison",
3459
+ "package": "@kerfjs/ui",
3460
+ "id": "wa-comparison",
3461
+ "name": "Comparison",
3462
+ "kind": "component",
3463
+ "source": "webawesome",
3464
+ "parents": { "mode": "any", "entries": [] },
3465
+ "contexts": ["application-ui"],
3466
+ "zones": [],
3467
+ "children": { "mode": "any", "concepts": [], "requiredConcepts": [] },
3468
+ "state": [],
3469
+ "wiring": { "required": false, "helpers": [], "obligations": [] },
3470
+ "responsive": { "owner": "not-applicable", "behaviors": [] },
3471
+ "layout": {
3472
+ "roles": ["media"],
3473
+ "geometry": { "margin": "none", "border": "self", "padding": "child" }
3474
+ },
3475
+ "accessibility": { "obligations": [] },
3476
+ "boundaries": {
3477
+ "rootClass": null,
3478
+ "publicClasses": [],
3479
+ "publicTokens": []
3480
+ },
3481
+ "diagnostics": [],
3482
+ "provenance": {
3483
+ "selection": "ai/component-catalog.json",
3484
+ "composition": "generated-permissive-default"
3485
+ }
3486
+ },
3487
+ {
3488
+ "key": "@kerfjs/ui:wa-icon",
3489
+ "package": "@kerfjs/ui",
3490
+ "id": "wa-icon",
3491
+ "name": "Icon",
3492
+ "kind": "component",
3493
+ "source": "webawesome",
3494
+ "parents": { "mode": "any", "entries": [] },
3495
+ "contexts": ["application-ui"],
3496
+ "zones": [],
3497
+ "children": { "mode": "any", "concepts": [], "requiredConcepts": [] },
3498
+ "state": [],
3499
+ "wiring": { "required": false, "helpers": [], "obligations": [] },
3500
+ "responsive": { "owner": "not-applicable", "behaviors": [] },
3501
+ "layout": {
3502
+ "roles": ["media"],
3503
+ "geometry": { "margin": "none", "border": "none", "padding": "none" }
3504
+ },
3505
+ "accessibility": { "obligations": [] },
3506
+ "boundaries": {
3507
+ "rootClass": null,
3508
+ "publicClasses": [],
3509
+ "publicTokens": []
3510
+ },
3511
+ "diagnostics": [],
3512
+ "provenance": {
3513
+ "selection": "ai/component-catalog.json",
3514
+ "composition": "generated-permissive-default"
3515
+ }
3516
+ },
3517
+ {
3518
+ "key": "@kerfjs/ui:wa-markdown",
3519
+ "package": "@kerfjs/ui",
3520
+ "id": "wa-markdown",
3521
+ "name": "Markdown",
3522
+ "kind": "component",
3523
+ "source": "webawesome",
3524
+ "parents": { "mode": "any", "entries": [] },
3525
+ "contexts": ["application-ui"],
3526
+ "zones": [],
3527
+ "children": { "mode": "any", "concepts": [], "requiredConcepts": [] },
3528
+ "state": [],
3529
+ "wiring": { "required": false, "helpers": [], "obligations": [] },
3530
+ "responsive": { "owner": "not-applicable", "behaviors": [] },
3531
+ "layout": {
3532
+ "roles": ["media"],
3533
+ "geometry": { "margin": "none", "border": "child", "padding": "child" }
3534
+ },
3535
+ "accessibility": { "obligations": [] },
3536
+ "boundaries": {
3537
+ "rootClass": null,
3538
+ "publicClasses": [],
3539
+ "publicTokens": []
3540
+ },
3541
+ "diagnostics": [],
3542
+ "provenance": {
3543
+ "selection": "ai/component-catalog.json",
3544
+ "composition": "generated-permissive-default"
3545
+ }
3546
+ },
3547
+ {
3548
+ "key": "@kerfjs/ui:wa-qr-code",
3549
+ "package": "@kerfjs/ui",
3550
+ "id": "wa-qr-code",
3551
+ "name": "QR Code",
3552
+ "kind": "component",
3553
+ "source": "webawesome",
3554
+ "parents": { "mode": "any", "entries": [] },
3555
+ "contexts": ["application-ui"],
3556
+ "zones": [],
3557
+ "children": { "mode": "any", "concepts": [], "requiredConcepts": [] },
3558
+ "state": [],
3559
+ "wiring": { "required": false, "helpers": [], "obligations": [] },
3560
+ "responsive": { "owner": "not-applicable", "behaviors": [] },
3561
+ "layout": {
3562
+ "roles": ["media"],
3563
+ "geometry": { "margin": "none", "border": "self", "padding": "self" }
3564
+ },
3565
+ "accessibility": { "obligations": [] },
3566
+ "boundaries": {
3567
+ "rootClass": null,
3568
+ "publicClasses": [],
3569
+ "publicTokens": []
3570
+ },
3571
+ "diagnostics": [],
3572
+ "provenance": {
3573
+ "selection": "ai/component-catalog.json",
3574
+ "composition": "generated-permissive-default"
3575
+ }
3576
+ },
3577
+ {
3578
+ "key": "@kerfjs/ui:wa-zoomable-frame",
3579
+ "package": "@kerfjs/ui",
3580
+ "id": "wa-zoomable-frame",
3581
+ "name": "Zoomable Frame",
3582
+ "kind": "component",
3583
+ "source": "webawesome",
3584
+ "parents": { "mode": "any", "entries": [] },
3585
+ "contexts": ["application-ui"],
3586
+ "zones": [],
3587
+ "children": { "mode": "any", "concepts": [], "requiredConcepts": [] },
3588
+ "state": [],
3589
+ "wiring": { "required": false, "helpers": [], "obligations": [] },
3590
+ "responsive": { "owner": "not-applicable", "behaviors": [] },
3591
+ "layout": {
3592
+ "roles": ["media"],
3593
+ "geometry": { "margin": "none", "border": "self", "padding": "child" }
3594
+ },
3595
+ "accessibility": { "obligations": [] },
3596
+ "boundaries": {
3597
+ "rootClass": null,
3598
+ "publicClasses": [],
3599
+ "publicTokens": []
3600
+ },
3601
+ "diagnostics": [],
3602
+ "provenance": {
3603
+ "selection": "ai/component-catalog.json",
3604
+ "composition": "generated-permissive-default"
3605
+ }
3606
+ },
3607
+ {
3608
+ "key": "@kerfjs/ui:wa-animation",
3609
+ "package": "@kerfjs/ui",
3610
+ "id": "wa-animation",
3611
+ "name": "Animation",
3612
+ "kind": "component",
3613
+ "source": "webawesome",
3614
+ "parents": { "mode": "any", "entries": [] },
3615
+ "contexts": ["application-ui"],
3616
+ "zones": [],
3617
+ "children": { "mode": "any", "concepts": [], "requiredConcepts": [] },
3618
+ "state": [],
3619
+ "wiring": { "required": false, "helpers": [], "obligations": [] },
3620
+ "responsive": { "owner": "not-applicable", "behaviors": [] },
3621
+ "layout": {
3622
+ "roles": ["helpers"],
3623
+ "geometry": { "margin": "none", "border": "child", "padding": "child" }
3624
+ },
3625
+ "accessibility": { "obligations": [] },
3626
+ "boundaries": {
3627
+ "rootClass": null,
3628
+ "publicClasses": [],
3629
+ "publicTokens": []
3630
+ },
3631
+ "diagnostics": [],
3632
+ "provenance": {
3633
+ "selection": "ai/component-catalog.json",
3634
+ "composition": "generated-permissive-default"
3635
+ }
3636
+ },
3637
+ {
3638
+ "key": "@kerfjs/ui:wa-format-bytes",
3639
+ "package": "@kerfjs/ui",
3640
+ "id": "wa-format-bytes",
3641
+ "name": "Format Bytes",
3642
+ "kind": "component",
3643
+ "source": "webawesome",
3644
+ "parents": { "mode": "any", "entries": [] },
3645
+ "contexts": ["application-ui"],
3646
+ "zones": [],
3647
+ "children": { "mode": "any", "concepts": [], "requiredConcepts": [] },
3648
+ "state": [],
3649
+ "wiring": { "required": false, "helpers": [], "obligations": [] },
3650
+ "responsive": { "owner": "not-applicable", "behaviors": [] },
3651
+ "layout": {
3652
+ "roles": ["helpers"],
3653
+ "geometry": { "margin": "none", "border": "none", "padding": "none" }
3654
+ },
3655
+ "accessibility": { "obligations": [] },
3656
+ "boundaries": {
3657
+ "rootClass": null,
3658
+ "publicClasses": [],
3659
+ "publicTokens": []
3660
+ },
3661
+ "diagnostics": [],
3662
+ "provenance": {
3663
+ "selection": "ai/component-catalog.json",
3664
+ "composition": "generated-permissive-default"
3665
+ }
3666
+ },
3667
+ {
3668
+ "key": "@kerfjs/ui:wa-format-date",
3669
+ "package": "@kerfjs/ui",
3670
+ "id": "wa-format-date",
3671
+ "name": "Format Date",
3672
+ "kind": "component",
3673
+ "source": "webawesome",
3674
+ "parents": { "mode": "any", "entries": [] },
3675
+ "contexts": ["application-ui"],
3676
+ "zones": [],
3677
+ "children": { "mode": "any", "concepts": [], "requiredConcepts": [] },
3678
+ "state": [],
3679
+ "wiring": { "required": false, "helpers": [], "obligations": [] },
3680
+ "responsive": { "owner": "not-applicable", "behaviors": [] },
3681
+ "layout": {
3682
+ "roles": ["helpers"],
3683
+ "geometry": { "margin": "none", "border": "none", "padding": "none" }
3684
+ },
3685
+ "accessibility": { "obligations": [] },
3686
+ "boundaries": {
3687
+ "rootClass": null,
3688
+ "publicClasses": [],
3689
+ "publicTokens": []
3690
+ },
3691
+ "diagnostics": [],
3692
+ "provenance": {
3693
+ "selection": "ai/component-catalog.json",
3694
+ "composition": "generated-permissive-default"
3695
+ }
3696
+ },
3697
+ {
3698
+ "key": "@kerfjs/ui:wa-format-number",
3699
+ "package": "@kerfjs/ui",
3700
+ "id": "wa-format-number",
3701
+ "name": "Format Number",
3702
+ "kind": "component",
3703
+ "source": "webawesome",
3704
+ "parents": { "mode": "any", "entries": [] },
3705
+ "contexts": ["application-ui"],
3706
+ "zones": [],
3707
+ "children": { "mode": "any", "concepts": [], "requiredConcepts": [] },
3708
+ "state": [],
3709
+ "wiring": { "required": false, "helpers": [], "obligations": [] },
3710
+ "responsive": { "owner": "not-applicable", "behaviors": [] },
3711
+ "layout": {
3712
+ "roles": ["helpers"],
3713
+ "geometry": { "margin": "none", "border": "none", "padding": "none" }
3714
+ },
3715
+ "accessibility": { "obligations": [] },
3716
+ "boundaries": {
3717
+ "rootClass": null,
3718
+ "publicClasses": [],
3719
+ "publicTokens": []
3720
+ },
3721
+ "diagnostics": [],
3722
+ "provenance": {
3723
+ "selection": "ai/component-catalog.json",
3724
+ "composition": "generated-permissive-default"
3725
+ }
3726
+ },
3727
+ {
3728
+ "key": "@kerfjs/ui:wa-include",
3729
+ "package": "@kerfjs/ui",
3730
+ "id": "wa-include",
3731
+ "name": "Include",
3732
+ "kind": "component",
3733
+ "source": "webawesome",
3734
+ "parents": { "mode": "any", "entries": [] },
3735
+ "contexts": ["application-ui"],
3736
+ "zones": [],
3737
+ "children": { "mode": "any", "concepts": [], "requiredConcepts": [] },
3738
+ "state": [],
3739
+ "wiring": { "required": false, "helpers": [], "obligations": [] },
3740
+ "responsive": { "owner": "not-applicable", "behaviors": [] },
3741
+ "layout": {
3742
+ "roles": ["helpers"],
3743
+ "geometry": { "margin": "self", "border": "self", "padding": "self" }
3744
+ },
3745
+ "accessibility": { "obligations": [] },
3746
+ "boundaries": {
3747
+ "rootClass": null,
3748
+ "publicClasses": [],
3749
+ "publicTokens": []
3750
+ },
3751
+ "diagnostics": [],
3752
+ "provenance": {
3753
+ "selection": "ai/component-catalog.json",
3754
+ "composition": "generated-permissive-default"
3755
+ }
3756
+ },
3757
+ {
3758
+ "key": "@kerfjs/ui:wa-intersection-observer",
3759
+ "package": "@kerfjs/ui",
3760
+ "id": "wa-intersection-observer",
3761
+ "name": "Intersection Observer",
3762
+ "kind": "component",
3763
+ "source": "webawesome",
3764
+ "parents": { "mode": "any", "entries": [] },
3765
+ "contexts": ["application-ui"],
3766
+ "zones": [],
3767
+ "children": { "mode": "any", "concepts": [], "requiredConcepts": [] },
3768
+ "state": [],
3769
+ "wiring": { "required": false, "helpers": [], "obligations": [] },
3770
+ "responsive": { "owner": "not-applicable", "behaviors": [] },
3771
+ "layout": {
3772
+ "roles": ["helpers"],
3773
+ "geometry": { "margin": "none", "border": "none", "padding": "none" }
3774
+ },
3775
+ "accessibility": { "obligations": [] },
3776
+ "boundaries": {
3777
+ "rootClass": null,
3778
+ "publicClasses": [],
3779
+ "publicTokens": []
3780
+ },
3781
+ "diagnostics": [],
3782
+ "provenance": {
3783
+ "selection": "ai/component-catalog.json",
3784
+ "composition": "generated-permissive-default"
3785
+ }
3786
+ },
3787
+ {
3788
+ "key": "@kerfjs/ui:wa-mutation-observer",
3789
+ "package": "@kerfjs/ui",
3790
+ "id": "wa-mutation-observer",
3791
+ "name": "Mutation Observer",
3792
+ "kind": "component",
3793
+ "source": "webawesome",
3794
+ "parents": { "mode": "any", "entries": [] },
3795
+ "contexts": ["application-ui"],
3796
+ "zones": [],
3797
+ "children": { "mode": "any", "concepts": [], "requiredConcepts": [] },
3798
+ "state": [],
3799
+ "wiring": { "required": false, "helpers": [], "obligations": [] },
3800
+ "responsive": { "owner": "not-applicable", "behaviors": [] },
3801
+ "layout": {
3802
+ "roles": ["helpers"],
3803
+ "geometry": { "margin": "none", "border": "none", "padding": "none" }
3804
+ },
3805
+ "accessibility": { "obligations": [] },
3806
+ "boundaries": {
3807
+ "rootClass": null,
3808
+ "publicClasses": [],
3809
+ "publicTokens": []
3810
+ },
3811
+ "diagnostics": [],
3812
+ "provenance": {
3813
+ "selection": "ai/component-catalog.json",
3814
+ "composition": "generated-permissive-default"
3815
+ }
3816
+ },
3817
+ {
3818
+ "key": "@kerfjs/ui:wa-popover",
3819
+ "package": "@kerfjs/ui",
3820
+ "id": "wa-popover",
3821
+ "name": "Popover",
3822
+ "kind": "component",
3823
+ "source": "webawesome",
3824
+ "parents": { "mode": "any", "entries": [] },
3825
+ "contexts": ["application-ui"],
3826
+ "zones": [],
3827
+ "children": { "mode": "any", "concepts": [], "requiredConcepts": [] },
3828
+ "state": [],
3829
+ "wiring": { "required": false, "helpers": [], "obligations": [] },
3830
+ "responsive": { "owner": "not-applicable", "behaviors": [] },
3831
+ "layout": {
3832
+ "roles": ["helpers"],
3833
+ "geometry": { "margin": "none", "border": "self", "padding": "self" }
3834
+ },
3835
+ "accessibility": { "obligations": [] },
3836
+ "boundaries": {
3837
+ "rootClass": null,
3838
+ "publicClasses": [],
3839
+ "publicTokens": []
3840
+ },
3841
+ "diagnostics": [],
3842
+ "provenance": {
3843
+ "selection": "ai/component-catalog.json",
3844
+ "composition": "generated-permissive-default"
3845
+ }
3846
+ },
3847
+ {
3848
+ "key": "@kerfjs/ui:wa-popup",
3849
+ "package": "@kerfjs/ui",
3850
+ "id": "wa-popup",
3851
+ "name": "Popup",
3852
+ "kind": "component",
3853
+ "source": "webawesome",
3854
+ "parents": { "mode": "any", "entries": [] },
3855
+ "contexts": ["application-ui"],
3856
+ "zones": [],
3857
+ "children": { "mode": "any", "concepts": [], "requiredConcepts": [] },
3858
+ "state": [],
3859
+ "wiring": { "required": false, "helpers": [], "obligations": [] },
3860
+ "responsive": { "owner": "not-applicable", "behaviors": [] },
3861
+ "layout": {
3862
+ "roles": ["helpers"],
3863
+ "geometry": { "margin": "none", "border": "child", "padding": "child" }
3864
+ },
3865
+ "accessibility": { "obligations": [] },
3866
+ "boundaries": {
3867
+ "rootClass": null,
3868
+ "publicClasses": [],
3869
+ "publicTokens": []
3870
+ },
3871
+ "diagnostics": [],
3872
+ "provenance": {
3873
+ "selection": "ai/component-catalog.json",
3874
+ "composition": "generated-permissive-default"
3875
+ }
3876
+ },
3877
+ {
3878
+ "key": "@kerfjs/ui:wa-random-content",
3879
+ "package": "@kerfjs/ui",
3880
+ "id": "wa-random-content",
3881
+ "name": "Random Content",
3882
+ "kind": "component",
3883
+ "source": "webawesome",
3884
+ "parents": { "mode": "any", "entries": [] },
3885
+ "contexts": ["application-ui"],
3886
+ "zones": [],
3887
+ "children": { "mode": "any", "concepts": [], "requiredConcepts": [] },
3888
+ "state": [],
3889
+ "wiring": { "required": false, "helpers": [], "obligations": [] },
3890
+ "responsive": { "owner": "not-applicable", "behaviors": [] },
3891
+ "layout": {
3892
+ "roles": ["helpers"],
3893
+ "geometry": { "margin": "none", "border": "child", "padding": "child" }
3894
+ },
3895
+ "accessibility": { "obligations": [] },
3896
+ "boundaries": {
3897
+ "rootClass": null,
3898
+ "publicClasses": [],
3899
+ "publicTokens": []
3900
+ },
3901
+ "diagnostics": [],
3902
+ "provenance": {
3903
+ "selection": "ai/component-catalog.json",
3904
+ "composition": "generated-permissive-default"
3905
+ }
3906
+ },
3907
+ {
3908
+ "key": "@kerfjs/ui:wa-relative-time",
3909
+ "package": "@kerfjs/ui",
3910
+ "id": "wa-relative-time",
3911
+ "name": "Relative Time",
3912
+ "kind": "component",
3913
+ "source": "webawesome",
3914
+ "parents": { "mode": "any", "entries": [] },
3915
+ "contexts": ["application-ui"],
3916
+ "zones": [],
3917
+ "children": { "mode": "any", "concepts": [], "requiredConcepts": [] },
3918
+ "state": [],
3919
+ "wiring": { "required": false, "helpers": [], "obligations": [] },
3920
+ "responsive": { "owner": "not-applicable", "behaviors": [] },
3921
+ "layout": {
3922
+ "roles": ["helpers"],
3923
+ "geometry": { "margin": "none", "border": "none", "padding": "none" }
3924
+ },
3925
+ "accessibility": { "obligations": [] },
3926
+ "boundaries": {
3927
+ "rootClass": null,
3928
+ "publicClasses": [],
3929
+ "publicTokens": []
3930
+ },
3931
+ "diagnostics": [],
3932
+ "provenance": {
3933
+ "selection": "ai/component-catalog.json",
3934
+ "composition": "generated-permissive-default"
3935
+ }
3936
+ },
3937
+ {
3938
+ "key": "@kerfjs/ui:wa-resize-observer",
3939
+ "package": "@kerfjs/ui",
3940
+ "id": "wa-resize-observer",
3941
+ "name": "Resize Observer",
3942
+ "kind": "component",
3943
+ "source": "webawesome",
3944
+ "parents": { "mode": "any", "entries": [] },
3945
+ "contexts": ["application-ui"],
3946
+ "zones": [],
3947
+ "children": { "mode": "any", "concepts": [], "requiredConcepts": [] },
3948
+ "state": [],
3949
+ "wiring": { "required": false, "helpers": [], "obligations": [] },
3950
+ "responsive": { "owner": "not-applicable", "behaviors": [] },
3951
+ "layout": {
3952
+ "roles": ["helpers"],
3953
+ "geometry": { "margin": "none", "border": "none", "padding": "none" }
3954
+ },
3955
+ "accessibility": { "obligations": [] },
3956
+ "boundaries": {
3957
+ "rootClass": null,
3958
+ "publicClasses": [],
3959
+ "publicTokens": []
3960
+ },
3961
+ "diagnostics": [],
3962
+ "provenance": {
3963
+ "selection": "ai/component-catalog.json",
3964
+ "composition": "generated-permissive-default"
3965
+ }
3966
+ },
3967
+ {
3968
+ "key": "@kerfjs/ui:recipe-app-shell",
3969
+ "package": "@kerfjs/ui",
3970
+ "id": "recipe-app-shell",
3971
+ "name": "Desktop application shell",
3972
+ "kind": "recipe",
3973
+ "source": "kerf",
3974
+ "parents": { "mode": "root", "entries": [] },
3975
+ "contexts": ["application-reference"],
3976
+ "zones": [],
3977
+ "children": { "mode": "any", "concepts": [], "requiredConcepts": [] },
3978
+ "state": [
3979
+ { "id": "routing", "owner": "application", "required": false },
3980
+ { "id": "pane visibility", "owner": "application", "required": false },
3981
+ {
3982
+ "id": "pane sizes and persistence",
3983
+ "owner": "application",
3984
+ "required": false
3985
+ },
3986
+ { "id": "workspace data", "owner": "application", "required": false }
3987
+ ],
3988
+ "wiring": { "required": false, "helpers": [], "obligations": [] },
3989
+ "responsive": { "owner": "application", "behaviors": [] },
3990
+ "layout": {
3991
+ "roles": ["reference-composition"],
3992
+ "geometry": {
3993
+ "margin": "composed",
3994
+ "border": "composed",
3995
+ "padding": "composed"
3996
+ }
3997
+ },
3998
+ "accessibility": {
3999
+ "obligations": [
4000
+ "Each pane has one scroll owner and each resize handle keeps its separator keyboard contract."
4001
+ ]
4002
+ },
4003
+ "boundaries": {
4004
+ "rootClass": null,
4005
+ "publicClasses": [],
4006
+ "publicTokens": []
4007
+ },
4008
+ "diagnostics": [],
4009
+ "provenance": {
4010
+ "selection": "ai/component-catalog.json",
4011
+ "composition": "generated-permissive-default"
4012
+ }
4013
+ },
4014
+ {
4015
+ "key": "@kerfjs/ui:recipe-navigation-sidebar",
4016
+ "package": "@kerfjs/ui",
4017
+ "id": "recipe-navigation-sidebar",
4018
+ "name": "Navigation sidebar",
4019
+ "kind": "recipe",
4020
+ "source": "kerf",
4021
+ "parents": { "mode": "root", "entries": [] },
4022
+ "contexts": ["application-reference"],
4023
+ "zones": [],
4024
+ "children": { "mode": "any", "concepts": [], "requiredConcepts": [] },
4025
+ "state": [
4026
+ {
4027
+ "id": "information architecture",
4028
+ "owner": "application",
4029
+ "required": false
4030
+ },
4031
+ { "id": "routing", "owner": "application", "required": false },
4032
+ { "id": "permissions", "owner": "application", "required": false },
4033
+ { "id": "disclosure state", "owner": "application", "required": false }
4034
+ ],
4035
+ "wiring": { "required": false, "helpers": [], "obligations": [] },
4036
+ "responsive": { "owner": "application", "behaviors": [] },
4037
+ "layout": {
4038
+ "roles": ["reference-composition"],
4039
+ "geometry": {
4040
+ "margin": "composed",
4041
+ "border": "composed",
4042
+ "padding": "composed"
4043
+ }
4044
+ },
4045
+ "accessibility": {
4046
+ "obligations": [
4047
+ "Native buttons retain names, current state, sequential focus, and disclosure state; rows and standalone footer actions remain at least 44px tall."
4048
+ ]
4049
+ },
4050
+ "boundaries": {
4051
+ "rootClass": null,
4052
+ "publicClasses": [],
4053
+ "publicTokens": []
4054
+ },
4055
+ "diagnostics": [],
4056
+ "provenance": {
4057
+ "selection": "ai/component-catalog.json",
4058
+ "composition": "generated-permissive-default"
4059
+ }
4060
+ },
4061
+ {
4062
+ "key": "@kerfjs/ui:recipe-workspace-header",
4063
+ "package": "@kerfjs/ui",
4064
+ "id": "recipe-workspace-header",
4065
+ "name": "Workspace header",
4066
+ "kind": "recipe",
4067
+ "source": "kerf",
4068
+ "parents": { "mode": "root", "entries": [] },
4069
+ "contexts": ["application-reference"],
4070
+ "zones": [],
4071
+ "children": { "mode": "any", "concepts": [], "requiredConcepts": [] },
4072
+ "state": [
4073
+ { "id": "authorization", "owner": "application", "required": false },
4074
+ { "id": "command behavior", "owner": "application", "required": false },
4075
+ { "id": "breadcrumbs", "owner": "application", "required": false },
4076
+ { "id": "product copy", "owner": "application", "required": false }
4077
+ ],
4078
+ "wiring": { "required": false, "helpers": [], "obligations": [] },
4079
+ "responsive": { "owner": "application", "behaviors": [] },
4080
+ "layout": {
4081
+ "roles": ["reference-composition"],
4082
+ "geometry": {
4083
+ "margin": "composed",
4084
+ "border": "composed",
4085
+ "padding": "composed"
4086
+ }
4087
+ },
4088
+ "accessibility": {
4089
+ "obligations": [
4090
+ "Heading order and action focus order remain stable when controls wrap."
4091
+ ]
4092
+ },
4093
+ "boundaries": {
4094
+ "rootClass": null,
4095
+ "publicClasses": [],
4096
+ "publicTokens": []
4097
+ },
4098
+ "diagnostics": [],
4099
+ "provenance": {
4100
+ "selection": "ai/component-catalog.json",
4101
+ "composition": "generated-permissive-default"
4102
+ }
4103
+ },
4104
+ {
4105
+ "key": "@kerfjs/ui:recipe-list-detail-dialog",
4106
+ "package": "@kerfjs/ui",
4107
+ "id": "recipe-list-detail-dialog",
4108
+ "name": "List-detail dialog",
4109
+ "kind": "recipe",
4110
+ "source": "kerf",
4111
+ "parents": { "mode": "root", "entries": [] },
4112
+ "contexts": ["application-reference"],
4113
+ "zones": [],
4114
+ "children": { "mode": "any", "concepts": [], "requiredConcepts": [] },
4115
+ "state": [
4116
+ { "id": "open state", "owner": "application", "required": false },
4117
+ { "id": "selected record", "owner": "application", "required": false },
4118
+ { "id": "dismiss policy", "owner": "application", "required": false },
4119
+ { "id": "record actions", "owner": "application", "required": false }
4120
+ ],
4121
+ "wiring": { "required": false, "helpers": [], "obligations": [] },
4122
+ "responsive": { "owner": "application", "behaviors": [] },
4123
+ "layout": {
4124
+ "roles": ["reference-composition"],
4125
+ "geometry": {
4126
+ "margin": "composed",
4127
+ "border": "composed",
4128
+ "padding": "composed"
4129
+ }
4130
+ },
4131
+ "accessibility": {
4132
+ "obligations": [
4133
+ "Web Awesome owns modal focus and Escape; the application adapter restores the invoking control after hide, and PanelHeader supplies the visible hierarchy."
4134
+ ]
4135
+ },
4136
+ "boundaries": {
4137
+ "rootClass": null,
4138
+ "publicClasses": [],
4139
+ "publicTokens": []
4140
+ },
4141
+ "diagnostics": [],
4142
+ "provenance": {
4143
+ "selection": "ai/component-catalog.json",
4144
+ "composition": "generated-permissive-default"
4145
+ }
4146
+ },
4147
+ {
4148
+ "key": "@kerfjs/ui:recipe-composer-form",
4149
+ "package": "@kerfjs/ui",
4150
+ "id": "recipe-composer-form",
4151
+ "name": "Composer form",
4152
+ "kind": "recipe",
4153
+ "source": "kerf",
4154
+ "parents": { "mode": "root", "entries": [] },
4155
+ "contexts": ["application-reference"],
4156
+ "zones": [],
4157
+ "children": { "mode": "any", "concepts": [], "requiredConcepts": [] },
4158
+ "state": [
4159
+ { "id": "validation rules", "owner": "application", "required": false },
4160
+ {
4161
+ "id": "draft persistence",
4162
+ "owner": "application",
4163
+ "required": false
4164
+ },
4165
+ { "id": "permissions", "owner": "application", "required": false },
4166
+ { "id": "transport", "owner": "application", "required": false }
4167
+ ],
4168
+ "wiring": { "required": false, "helpers": [], "obligations": [] },
4169
+ "responsive": { "owner": "application", "behaviors": [] },
4170
+ "layout": {
4171
+ "roles": ["reference-composition"],
4172
+ "geometry": {
4173
+ "margin": "composed",
4174
+ "border": "composed",
4175
+ "padding": "composed"
4176
+ }
4177
+ },
4178
+ "accessibility": {
4179
+ "obligations": [
4180
+ "The form references PanelHeader's title and summary ids; production fields own labels and help; invalid submission creates an assertive persistent StateBanner while successful submission creates a polite persistent banner."
4181
+ ]
4182
+ },
4183
+ "boundaries": {
4184
+ "rootClass": null,
4185
+ "publicClasses": [],
4186
+ "publicTokens": []
4187
+ },
4188
+ "diagnostics": [],
4189
+ "provenance": {
4190
+ "selection": "ai/component-catalog.json",
4191
+ "composition": "generated-permissive-default"
4192
+ }
4193
+ },
4194
+ {
4195
+ "key": "@kerfjs/ui:recipe-list-workspace-states",
4196
+ "package": "@kerfjs/ui",
4197
+ "id": "recipe-list-workspace-states",
4198
+ "name": "List workspace states",
4199
+ "kind": "recipe",
4200
+ "source": "kerf",
4201
+ "parents": { "mode": "root", "entries": [] },
4202
+ "contexts": ["application-reference"],
4203
+ "zones": [],
4204
+ "children": { "mode": "any", "concepts": [], "requiredConcepts": [] },
4205
+ "state": [
4206
+ { "id": "fetching", "owner": "application", "required": false },
4207
+ { "id": "cache age", "owner": "application", "required": false },
4208
+ { "id": "retry policy", "owner": "application", "required": false },
4209
+ { "id": "domain rows", "owner": "application", "required": false }
4210
+ ],
4211
+ "wiring": { "required": false, "helpers": [], "obligations": [] },
4212
+ "responsive": { "owner": "application", "behaviors": [] },
4213
+ "layout": {
4214
+ "roles": ["reference-composition"],
4215
+ "geometry": {
4216
+ "margin": "composed",
4217
+ "border": "composed",
4218
+ "padding": "composed"
4219
+ }
4220
+ },
4221
+ "accessibility": {
4222
+ "obligations": [
4223
+ "Busy, polite, and assertive states use the appropriate production feedback semantics."
4224
+ ]
4225
+ },
4226
+ "boundaries": {
4227
+ "rootClass": null,
4228
+ "publicClasses": [],
4229
+ "publicTokens": []
4230
+ },
4231
+ "diagnostics": [],
4232
+ "provenance": {
4233
+ "selection": "ai/component-catalog.json",
4234
+ "composition": "generated-permissive-default"
4235
+ }
4236
+ },
4237
+ {
4238
+ "key": "@kerfjs/ui:recipe-compact-toolbar",
4239
+ "package": "@kerfjs/ui",
4240
+ "id": "recipe-compact-toolbar",
4241
+ "name": "Compact toolbar choices and actions",
4242
+ "kind": "recipe",
4243
+ "source": "kerf",
4244
+ "parents": { "mode": "root", "entries": [] },
4245
+ "contexts": ["application-reference"],
4246
+ "zones": [],
4247
+ "children": { "mode": "any", "concepts": [], "requiredConcepts": [] },
4248
+ "state": [
4249
+ {
4250
+ "id": "controlled values",
4251
+ "owner": "application",
4252
+ "required": false
4253
+ },
4254
+ { "id": "actions", "owner": "application", "required": false },
4255
+ { "id": "persistence", "owner": "application", "required": false },
4256
+ {
4257
+ "id": "responsive priority",
4258
+ "owner": "application",
4259
+ "required": false
4260
+ }
4261
+ ],
4262
+ "wiring": { "required": false, "helpers": [], "obligations": [] },
4263
+ "responsive": { "owner": "application", "behaviors": [] },
4264
+ "layout": {
4265
+ "roles": ["reference-composition"],
4266
+ "geometry": {
4267
+ "margin": "composed",
4268
+ "border": "composed",
4269
+ "padding": "composed"
4270
+ }
4271
+ },
4272
+ "accessibility": {
4273
+ "obligations": [
4274
+ "Each control retains its own native name, pressed/value state, and keyboard contract."
4275
+ ]
4276
+ },
4277
+ "boundaries": {
4278
+ "rootClass": null,
4279
+ "publicClasses": [],
4280
+ "publicTokens": []
4281
+ },
4282
+ "diagnostics": [],
4283
+ "provenance": {
4284
+ "selection": "ai/component-catalog.json",
4285
+ "composition": "generated-permissive-default"
4286
+ }
4287
+ },
4288
+ {
4289
+ "key": "@kerfjs/ui:recipe-navigation-stack",
4290
+ "package": "@kerfjs/ui",
4291
+ "id": "recipe-navigation-stack",
4292
+ "name": "Navigation stack",
4293
+ "kind": "recipe",
4294
+ "source": "kerf",
4295
+ "parents": { "mode": "root", "entries": [] },
4296
+ "contexts": ["application-reference"],
4297
+ "zones": [],
4298
+ "children": { "mode": "any", "concepts": [], "requiredConcepts": [] },
4299
+ "state": [
4300
+ {
4301
+ "id": "the stack (a signal of views)",
4302
+ "owner": "application",
4303
+ "required": false
4304
+ },
4305
+ { "id": "selection", "owner": "application", "required": false },
4306
+ { "id": "routing", "owner": "application", "required": false },
4307
+ { "id": "data", "owner": "application", "required": false }
4308
+ ],
4309
+ "wiring": { "required": false, "helpers": [], "obligations": [] },
4310
+ "responsive": { "owner": "application", "behaviors": [] },
4311
+ "layout": {
4312
+ "roles": ["reference-composition"],
4313
+ "geometry": {
4314
+ "margin": "composed",
4315
+ "border": "composed",
4316
+ "padding": "composed"
4317
+ }
4318
+ },
4319
+ "accessibility": {
4320
+ "obligations": [
4321
+ "The back control is a real button; reduced motion collapses the slide to instant."
4322
+ ]
4323
+ },
4324
+ "boundaries": {
4325
+ "rootClass": null,
4326
+ "publicClasses": [],
4327
+ "publicTokens": []
4328
+ },
4329
+ "diagnostics": [],
4330
+ "provenance": {
4331
+ "selection": "ai/component-catalog.json",
4332
+ "composition": "generated-permissive-default"
4333
+ }
4334
+ },
4335
+ {
4336
+ "key": "@kerfjs/ui:recipe-loading-inspector",
4337
+ "package": "@kerfjs/ui",
4338
+ "id": "recipe-loading-inspector",
4339
+ "name": "Loading inspector",
4340
+ "kind": "recipe",
4341
+ "source": "kerf",
4342
+ "parents": { "mode": "root", "entries": [] },
4343
+ "contexts": ["application-reference"],
4344
+ "zones": [],
4345
+ "children": { "mode": "any", "concepts": [], "requiredConcepts": [] },
4346
+ "state": [
4347
+ {
4348
+ "id": "loading lifecycle",
4349
+ "owner": "application",
4350
+ "required": false
4351
+ },
4352
+ {
4353
+ "id": "which values are unknown",
4354
+ "owner": "application",
4355
+ "required": false
4356
+ },
4357
+ {
4358
+ "id": "fetching, transport, and domain data",
4359
+ "owner": "application",
4360
+ "required": false
4361
+ }
4362
+ ],
4363
+ "wiring": { "required": false, "helpers": [], "obligations": [] },
4364
+ "responsive": { "owner": "application", "behaviors": [] },
4365
+ "layout": {
4366
+ "roles": ["reference-composition"],
4367
+ "geometry": {
4368
+ "margin": "composed",
4369
+ "border": "composed",
4370
+ "padding": "composed"
4371
+ }
4372
+ },
4373
+ "accessibility": {
4374
+ "obligations": [
4375
+ "Each component marks itself aria-busy and disables its own controls while loading; the composition keeps labels and structure stable across the transition."
4376
+ ]
4377
+ },
4378
+ "boundaries": {
4379
+ "rootClass": null,
4380
+ "publicClasses": [],
4381
+ "publicTokens": []
4382
+ },
4383
+ "diagnostics": [],
4384
+ "provenance": {
4385
+ "selection": "ai/component-catalog.json",
4386
+ "composition": "generated-permissive-default"
4387
+ }
4388
+ },
4389
+ {
4390
+ "key": "@kerfjs/ui:recipe-collapsible-sidebar",
4391
+ "package": "@kerfjs/ui",
4392
+ "id": "recipe-collapsible-sidebar",
4393
+ "name": "Collapsible sidebar",
4394
+ "kind": "recipe",
4395
+ "source": "kerf",
4396
+ "parents": { "mode": "root", "entries": [] },
4397
+ "contexts": ["application-reference"],
4398
+ "zones": [],
4399
+ "children": { "mode": "any", "concepts": [], "requiredConcepts": [] },
4400
+ "state": [
4401
+ {
4402
+ "id": "each panel's collapsed signal",
4403
+ "owner": "application",
4404
+ "required": false
4405
+ },
4406
+ { "id": "panel sizes", "owner": "application", "required": false },
4407
+ {
4408
+ "id": "routing and selection",
4409
+ "owner": "application",
4410
+ "required": false
4411
+ },
4412
+ { "id": "content", "owner": "application", "required": false }
4413
+ ],
4414
+ "wiring": { "required": false, "helpers": [], "obligations": [] },
4415
+ "responsive": { "owner": "application", "behaviors": [] },
4416
+ "layout": {
4417
+ "roles": ["reference-composition"],
4418
+ "geometry": {
4419
+ "margin": "composed",
4420
+ "border": "composed",
4421
+ "padding": "composed"
4422
+ }
4423
+ },
4424
+ "accessibility": {
4425
+ "obligations": [
4426
+ "Each panel is a labeled aside that is aria-hidden while collapsed; toggles carry aria-expanded and the standard per-side glyph; while compact an open panel is an overlay with a backdrop, Escape and backdrop-click dismiss, and a trapped Tab ring."
4427
+ ]
4428
+ },
4429
+ "boundaries": {
4430
+ "rootClass": null,
4431
+ "publicClasses": [],
4432
+ "publicTokens": []
4433
+ },
4434
+ "diagnostics": [],
4435
+ "provenance": {
4436
+ "selection": "ai/component-catalog.json",
4437
+ "composition": "generated-permissive-default"
4438
+ }
4439
+ }
4440
+ ]
4441
+ }