@adia-ai/web-components 0.6.21 → 0.6.23

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 (248) hide show
  1. package/CHANGELOG.md +72 -0
  2. package/components/accordion/accordion-item.a2ui.json +20 -3
  3. package/components/accordion/accordion-item.yaml +24 -0
  4. package/components/accordion/accordion.a2ui.json +1 -1
  5. package/components/accordion/accordion.d.ts +8 -1
  6. package/components/accordion/accordion.yaml +15 -2
  7. package/components/action-list/action-item.a2ui.json +19 -3
  8. package/components/action-list/action-item.yaml +24 -0
  9. package/components/action-list/action-list.a2ui.json +12 -2
  10. package/components/action-list/action-list.yaml +13 -3
  11. package/components/agent-artifact/agent-artifact.a2ui.json +9 -2
  12. package/components/agent-artifact/agent-artifact.d.ts +1 -1
  13. package/components/agent-artifact/agent-artifact.yaml +17 -3
  14. package/components/agent-feedback-bar/agent-feedback-bar.a2ui.json +9 -2
  15. package/components/agent-feedback-bar/agent-feedback-bar.d.ts +8 -1
  16. package/components/agent-feedback-bar/agent-feedback-bar.yaml +19 -3
  17. package/components/agent-questions/agent-questions.a2ui.json +8 -2
  18. package/components/agent-questions/agent-questions.d.ts +8 -1
  19. package/components/agent-questions/agent-questions.yaml +19 -3
  20. package/components/agent-reasoning/agent-reasoning.yaml +9 -1
  21. package/components/agent-suggestions/agent-suggestions.a2ui.json +9 -2
  22. package/components/agent-suggestions/agent-suggestions.d.ts +7 -1
  23. package/components/agent-suggestions/agent-suggestions.yaml +18 -3
  24. package/components/agent-trace/agent-trace.a2ui.json +9 -2
  25. package/components/agent-trace/agent-trace.d.ts +1 -1
  26. package/components/agent-trace/agent-trace.yaml +16 -3
  27. package/components/alert/alert.a2ui.json +1 -1
  28. package/components/alert/alert.css +8 -0
  29. package/components/alert/alert.d.ts +9 -1
  30. package/components/alert/alert.yaml +16 -2
  31. package/components/aside/aside.a2ui.json +7 -1
  32. package/components/aside/aside.yaml +33 -2
  33. package/components/avatar/avatar-group.a2ui.json +20 -3
  34. package/components/avatar/avatar-group.yaml +24 -0
  35. package/components/avatar/avatar.a2ui.json +1 -1
  36. package/components/avatar/avatar.d.ts +7 -1
  37. package/components/avatar/avatar.yaml +14 -2
  38. package/components/badge/badge.a2ui.json +1 -1
  39. package/components/badge/badge.d.ts +7 -1
  40. package/components/badge/badge.yaml +14 -2
  41. package/components/block/block.a2ui.json +9 -4
  42. package/components/block/block.d.ts +9 -3
  43. package/components/block/block.yaml +25 -5
  44. package/components/block/class.js +23 -0
  45. package/components/breadcrumb/breadcrumb.a2ui.json +5 -1
  46. package/components/breadcrumb/breadcrumb.yaml +33 -2
  47. package/components/button/button.a2ui.json +22 -2
  48. package/components/button/button.yaml +21 -3
  49. package/components/calendar-picker/calendar-picker.a2ui.json +1 -1
  50. package/components/calendar-picker/calendar-picker.yaml +13 -2
  51. package/components/canvas/canvas.a2ui.json +6 -2
  52. package/components/canvas/canvas.yaml +20 -3
  53. package/components/card/card.css +23 -2
  54. package/components/card/card.yaml +12 -0
  55. package/components/chart/chart.css +4 -2
  56. package/components/chart/chart.yaml +9 -1
  57. package/components/chart-legend/chart-legend.yaml +7 -1
  58. package/components/chat-thread/chat-thread.a2ui.json +6 -2
  59. package/components/chat-thread/chat-thread.d.ts +8 -1
  60. package/components/chat-thread/chat-thread.yaml +21 -3
  61. package/components/check/check.a2ui.json +13 -3
  62. package/components/check/check.yaml +18 -3
  63. package/components/code/code.a2ui.json +1 -1
  64. package/components/code/code.yaml +13 -2
  65. package/components/col/class.js +39 -0
  66. package/components/col/col.a2ui.json +12 -5
  67. package/components/col/col.d.ts +12 -4
  68. package/components/col/col.yaml +27 -7
  69. package/components/color-input/color-input.yaml +27 -1
  70. package/components/color-picker/color-picker.a2ui.json +8 -2
  71. package/components/color-picker/color-picker.yaml +15 -3
  72. package/components/command/command.a2ui.json +7 -2
  73. package/components/command/command.d.ts +9 -1
  74. package/components/command/command.yaml +39 -3
  75. package/components/demo-toggle/demo-toggle.yaml +7 -1
  76. package/components/description-list/description-list.a2ui.json +5 -1
  77. package/components/description-list/description-list.yaml +11 -2
  78. package/components/divider/divider.a2ui.json +1 -1
  79. package/components/divider/divider.d.ts +8 -1
  80. package/components/divider/divider.yaml +15 -2
  81. package/components/drawer/drawer.yaml +32 -1
  82. package/components/embed/embed.a2ui.json +1 -1
  83. package/components/embed/embed.d.ts +8 -1
  84. package/components/embed/embed.yaml +17 -2
  85. package/components/empty-state/empty-state.a2ui.json +19 -2
  86. package/components/empty-state/empty-state.css +14 -0
  87. package/components/empty-state/empty-state.d.ts +3 -1
  88. package/components/empty-state/empty-state.yaml +50 -3
  89. package/components/feed/feed-item.a2ui.json +21 -3
  90. package/components/feed/feed-item.yaml +25 -0
  91. package/components/feed/feed.a2ui.json +23 -3
  92. package/components/feed/feed.yaml +26 -0
  93. package/components/fields/fields.yaml +7 -1
  94. package/components/footer/footer.a2ui.json +7 -1
  95. package/components/footer/footer.yaml +27 -2
  96. package/components/grid/class.js +57 -0
  97. package/components/grid/grid.a2ui.json +3 -3
  98. package/components/grid/grid.d.ts +3 -3
  99. package/components/grid/grid.yaml +22 -8
  100. package/components/header/header.a2ui.json +8 -1
  101. package/components/header/header.yaml +30 -2
  102. package/components/heatmap/heatmap.yaml +7 -1
  103. package/components/icon/icon.a2ui.json +9 -2
  104. package/components/icon/icon.d.ts +1 -1
  105. package/components/icon/icon.yaml +32 -3
  106. package/components/image/image.yaml +7 -1
  107. package/components/input/input.yaml +29 -1
  108. package/components/inspector/inspector.a2ui.json +7 -2
  109. package/components/inspector/inspector.d.ts +9 -1
  110. package/components/inspector/inspector.yaml +23 -3
  111. package/components/kbd/kbd.a2ui.json +1 -1
  112. package/components/kbd/kbd.d.ts +1 -1
  113. package/components/kbd/kbd.yaml +11 -2
  114. package/components/list/list-item.a2ui.json +21 -3
  115. package/components/list/list-item.yaml +25 -0
  116. package/components/list/list.a2ui.json +7 -2
  117. package/components/list/list.d.ts +9 -1
  118. package/components/list/list.yaml +21 -3
  119. package/components/menu/menu-divider.a2ui.json +17 -3
  120. package/components/menu/menu-divider.yaml +35 -0
  121. package/components/menu/menu-item.a2ui.json +19 -3
  122. package/components/menu/menu-item.yaml +42 -0
  123. package/components/menu/menu.a2ui.json +7 -1
  124. package/components/menu/menu.yaml +33 -2
  125. package/components/modal/modal.a2ui.json +7 -2
  126. package/components/modal/modal.d.ts +10 -1
  127. package/components/modal/modal.yaml +48 -3
  128. package/components/nav/nav.a2ui.json +16 -2
  129. package/components/nav/nav.yaml +40 -3
  130. package/components/nav-group/nav-group.a2ui.json +12 -2
  131. package/components/nav-group/nav-group.yaml +37 -3
  132. package/components/nav-item/nav-item.a2ui.json +13 -2
  133. package/components/nav-item/nav-item.yaml +40 -3
  134. package/components/noodles/noodles.a2ui.json +12 -2
  135. package/components/noodles/noodles.yaml +14 -3
  136. package/components/option-card/option-card.yaml +27 -1
  137. package/components/otp-input/otp-input.yaml +24 -1
  138. package/components/page/page.a2ui.json +7 -1
  139. package/components/page/page.yaml +9 -2
  140. package/components/pagination/pagination.a2ui.json +1 -1
  141. package/components/pagination/pagination.d.ts +1 -1
  142. package/components/pagination/pagination.yaml +13 -2
  143. package/components/pane/pane.a2ui.json +1 -1
  144. package/components/pane/pane.d.ts +7 -1
  145. package/components/pane/pane.yaml +33 -2
  146. package/components/pipeline-status/pipeline-status.a2ui.json +6 -2
  147. package/components/pipeline-status/pipeline-status.d.ts +1 -1
  148. package/components/pipeline-status/pipeline-status.yaml +18 -3
  149. package/components/popover/popover.yaml +30 -1
  150. package/components/progress/progress.a2ui.json +1 -1
  151. package/components/progress/progress.d.ts +1 -1
  152. package/components/progress/progress.yaml +13 -2
  153. package/components/progress-row/progress-row.a2ui.json +12 -2
  154. package/components/progress-row/progress-row.yaml +13 -3
  155. package/components/radio/radio.a2ui.json +1 -1
  156. package/components/radio/radio.yaml +9 -1
  157. package/components/range/range.yaml +7 -1
  158. package/components/rating/rating.a2ui.json +4 -1
  159. package/components/rating/rating.yaml +10 -2
  160. package/components/richtext/richtext.a2ui.json +6 -2
  161. package/components/richtext/richtext.d.ts +9 -1
  162. package/components/richtext/richtext.yaml +20 -3
  163. package/components/row/class.js +50 -0
  164. package/components/row/row.a2ui.json +17 -6
  165. package/components/row/row.d.ts +14 -5
  166. package/components/row/row.yaml +36 -8
  167. package/components/search/search.a2ui.json +5 -1
  168. package/components/search/search.yaml +11 -2
  169. package/components/section/section.a2ui.json +7 -1
  170. package/components/section/section.yaml +36 -2
  171. package/components/segment/segment.a2ui.json +8 -2
  172. package/components/segment/segment.d.ts +7 -1
  173. package/components/segment/segment.yaml +16 -3
  174. package/components/segmented/segmented.a2ui.json +6 -1
  175. package/components/segmented/segmented.css +5 -0
  176. package/components/segmented/segmented.yaml +12 -2
  177. package/components/select/select.a2ui.json +1 -1
  178. package/components/select/select.yaml +34 -2
  179. package/components/skeleton/skeleton.a2ui.json +7 -2
  180. package/components/skeleton/skeleton.d.ts +1 -1
  181. package/components/skeleton/skeleton.yaml +17 -3
  182. package/components/slider/slider.yaml +7 -1
  183. package/components/stack/stack.a2ui.json +14 -3
  184. package/components/stack/stack.d.ts +9 -1
  185. package/components/stack/stack.yaml +22 -4
  186. package/components/stat/stat.a2ui.json +6 -2
  187. package/components/stat/stat.css +5 -2
  188. package/components/stat/stat.d.ts +1 -1
  189. package/components/stat/stat.yaml +16 -3
  190. package/components/step-progress/step-progress.yaml +7 -1
  191. package/components/stepper/stepper-item.a2ui.json +20 -3
  192. package/components/stepper/stepper-item.yaml +24 -0
  193. package/components/stepper/stepper.a2ui.json +1 -1
  194. package/components/stepper/stepper.d.ts +1 -1
  195. package/components/stepper/stepper.yaml +13 -2
  196. package/components/stream/stream.a2ui.json +12 -2
  197. package/components/stream/stream.yaml +15 -3
  198. package/components/swatch/swatch.yaml +7 -1
  199. package/components/swiper/swiper.yaml +7 -1
  200. package/components/switch/switch.a2ui.json +6 -2
  201. package/components/switch/switch.yaml +16 -2
  202. package/components/table/cell-types.js +23 -10
  203. package/components/table/class.js +6 -2
  204. package/components/table/table.css +49 -1
  205. package/components/table/table.yaml +27 -1
  206. package/components/table-toolbar/table-toolbar.yaml +27 -1
  207. package/components/tabs/tab.a2ui.json +17 -3
  208. package/components/tabs/tab.yaml +39 -0
  209. package/components/tabs/tabs.a2ui.json +1 -1
  210. package/components/tabs/tabs.d.ts +1 -1
  211. package/components/tabs/tabs.yaml +36 -2
  212. package/components/tag/tag.a2ui.json +6 -2
  213. package/components/tag/tag.d.ts +9 -1
  214. package/components/tag/tag.yaml +38 -3
  215. package/components/text/class.js +13 -0
  216. package/components/text/text.a2ui.json +9 -2
  217. package/components/text/text.d.ts +1 -1
  218. package/components/text/text.yaml +12 -5
  219. package/components/textarea/textarea.a2ui.json +15 -3
  220. package/components/textarea/textarea.yaml +41 -4
  221. package/components/timeline/timeline-item.a2ui.json +20 -3
  222. package/components/timeline/timeline-item.yaml +24 -0
  223. package/components/timeline/timeline.a2ui.json +8 -1
  224. package/components/timeline/timeline.yaml +9 -2
  225. package/components/toast/toast.a2ui.json +6 -2
  226. package/components/toast/toast.yaml +19 -3
  227. package/components/toggle-group/toggle-group.a2ui.json +13 -3
  228. package/components/toggle-group/toggle-group.d.ts +1 -1
  229. package/components/toggle-group/toggle-group.yaml +19 -4
  230. package/components/toggle-group/toggle-option.a2ui.json +18 -3
  231. package/components/toggle-group/toggle-option.yaml +23 -0
  232. package/components/toggle-scheme/toggle-scheme.yaml +4 -0
  233. package/components/toolbar/toolbar-group.a2ui.json +18 -3
  234. package/components/toolbar/toolbar-group.yaml +23 -0
  235. package/components/toolbar/toolbar.yaml +7 -1
  236. package/components/tooltip/tooltip.yaml +24 -1
  237. package/components/tree/tree-item.a2ui.json +19 -3
  238. package/components/tree/tree-item.yaml +42 -0
  239. package/components/tree/tree.a2ui.json +6 -1
  240. package/components/tree/tree.yaml +31 -2
  241. package/components/upload/upload.yaml +7 -1
  242. package/core/index.js +1 -0
  243. package/core/responsive.d.ts +29 -0
  244. package/core/responsive.js +120 -0
  245. package/core/responsive.test.js +121 -0
  246. package/package.json +1 -1
  247. package/styles/tokens.css +6 -6
  248. package/styles/typography.css +1 -0
@@ -6,16 +6,27 @@ tag: col-ui
6
6
  component: Col
7
7
  category: layout
8
8
  version: 1
9
- description: Flex column layout primitive.
9
+ description: |
10
+ Flex column layout primitive — vertical stack of children with
11
+ [gap] / [align] / [justify] / [grow]. The most common layout
12
+ primitive in the repo. Use <col-ui> for vertical stacks, <row-ui>
13
+ for horizontal rows, <stack-ui> for overlay (children stack on top
14
+ of each other in a grid), <grid-ui> for 2D grids. Composes inside
15
+ <section-ui> for in-card layout; do NOT use as a child of
16
+ <header-ui> / <footer-ui> (the chrome scope already lays out
17
+ slots).
10
18
  props:
11
19
  align:
12
- description: Align items
20
+ description: >-
21
+ Cross-axis alignment (start/center/end/stretch). Accepts `@bp` notation:
22
+ align="stretch center@sm" applies stretch below sm, center from sm up.
13
23
  type: string
14
24
  default: stretch
15
25
  gap:
16
26
  description: >-
17
- Gap between children. Accepts either the named scale (xs/sm/md/lg/xl)
18
- or a numeric rung on the spacing scale ("1"…"16", mapped to --a-space-N).
27
+ Gap between children. Named scale (xs/sm/md/lg/xl) or numeric spacing
28
+ rung ("1"…"16", mapped to --a-space-N). Accepts `@bp` notation:
29
+ gap="2 4@md" = 2 below md, 4 from md upward.
19
30
  type: string
20
31
  default: md
21
32
  grow:
@@ -24,7 +35,9 @@ props:
24
35
  default: false
25
36
  reflect: true
26
37
  justify:
27
- description: Justify content
38
+ description: >-
39
+ Main-axis justify (start/center/end/space-between/space-around).
40
+ Accepts `@bp` notation: justify="start space-between@md".
28
41
  type: string
29
42
  default: start
30
43
  events: {}
@@ -37,7 +50,13 @@ states:
37
50
  traits: []
38
51
  tokens: {}
39
52
  a2ui:
40
- rules: []
53
+ rules:
54
+ - rule: 'Vertical-stack flex container. Children flow top-to-bottom with token-driven gap.'
55
+ reason: 'Canonical vertical layout.'
56
+ - rule: 'Pair with <row-ui> for horizontal layouts; both share the same gap-token contract.'
57
+ reason: 'Layout symmetry.'
58
+ - rule: 'Set align/justify attributes for cross-axis / main-axis alignment; default is start/start.'
59
+ reason: 'Standard flex knobs.'
41
60
  anti_patterns: []
42
61
  examples:
43
62
  - name: chat-interface
@@ -340,7 +359,8 @@ examples:
340
359
  keywords:
341
360
  - column
342
361
  - col
343
- synonyms: {}
362
+ synonyms:
363
+ column: [col, vstack, vertical-stack, vbox]
344
364
  related:
345
365
  - avatar
346
366
  - input
@@ -142,7 +142,33 @@ tokens:
142
142
  --color-input-swatch-size:
143
143
  description: Diameter (em) of the inline swatch circle inside the trigger button. Default 1em.
144
144
  a2ui:
145
- rules: []
145
+ rules:
146
+ - >-
147
+ Use <color-input-ui> for any form-row color field — it
148
+ canonicalizes the popover + button + color-picker recipe and is
149
+ the only form-bearing color primitive. Do not hand-roll the
150
+ composition; reach for color-input-ui directly.
151
+ - >-
152
+ Set [format="oklch"] when the persisted value feeds CSS tokens
153
+ or perceptual math; [format="hex"] for legacy / design-tool
154
+ interop. Event detail (`change` / `input`) carries BOTH `hex`
155
+ and `oklch` views regardless of [format], plus parsed `{l, c, h}`
156
+ channel scalars.
157
+ - >-
158
+ For brand-palette constraints, set [maxChroma] / [minL] / [maxL]
159
+ / [hueDriftMax] (with [baseHue]) on the host — they forward to
160
+ the inner <color-picker-ui> and clamp generation. Useful for
161
+ Tokens-Studio-style guarded color generation.
162
+ - >-
163
+ Use <color-picker-ui> DIRECTLY (no color-input-ui wrapper) only
164
+ for full-surface editors where the picker IS the page (e.g.
165
+ Tokens Studio main canvas). For inline form-row use, always
166
+ reach for <color-input-ui>.
167
+ - >-
168
+ Per ADR-0027 (cross-primitive composition imports), consumer
169
+ pages MUST explicitly import <button-ui>, <popover-ui>, and
170
+ <color-picker-ui> before <color-input-ui>. The primitive composes
171
+ them but does NOT auto-register them.
146
172
  anti_patterns: []
147
173
  examples:
148
174
  - name: color-input-basic
@@ -2,7 +2,7 @@
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
3
  "$id": "https://adiaui.dev/a2ui/v0_9/components/ColorPicker.json",
4
4
  "title": "ColorPicker",
5
- "description": "OKLCH-native color picker with 2D area and H/C/L sliders. Form-associated.",
5
+ "description": "OKLCH-native color picker with 2D area and H/C/L sliders. Form-associated input emitting OKLCH color strings; canonical color authoring surface in the AdiaUI token system. Use for color input in design tools or theming UIs; for simple color swatches use <swatch-ui> or <color-input-ui> instead.",
6
6
  "type": "object",
7
7
  "allOf": [
8
8
  {
@@ -128,7 +128,13 @@
128
128
  "name": "disabled"
129
129
  }
130
130
  ],
131
- "synonyms": {},
131
+ "synonyms": {
132
+ "color-picker": [
133
+ "color-canvas",
134
+ "color-surface",
135
+ "swatch-picker"
136
+ ]
137
+ },
132
138
  "tag": "color-picker-ui",
133
139
  "tokens": {},
134
140
  "traits": [],
@@ -6,7 +6,12 @@ tag: color-picker-ui
6
6
  component: ColorPicker
7
7
  category: input
8
8
  version: 1
9
- description: OKLCH-native color picker with 2D area and H/C/L sliders. Form-associated.
9
+ description: >-
10
+ OKLCH-native color picker with 2D area and H/C/L sliders.
11
+ Form-associated input emitting OKLCH color strings; canonical color
12
+ authoring surface in the AdiaUI token system. Use for color input in
13
+ design tools or theming UIs; for simple color swatches use <swatch-ui>
14
+ or <color-input-ui> instead.
10
15
  # Per ADR-0027 — primitives that programmatically create other primitives
11
16
  # do NOT auto-import them. Consumer (or demo shell) must explicitly import.
12
17
  composes:
@@ -100,7 +105,13 @@ requiredIcons:
100
105
  - check
101
106
  - warning
102
107
  a2ui:
103
- rules: []
108
+ rules:
109
+ - rule: 'OKLCH-native color picker with 2D color area + H/C/L sliders. Form-associated; emits OKLCH color strings.'
110
+ reason: 'Canonical color-authoring surface.'
111
+ - rule: 'For simple color swatches (read-only display) use <swatch-ui>; for hex/rgb text input use <color-input-ui>.'
112
+ reason: 'Surface boundary.'
113
+ - rule: 'Output format defaults to oklch(); set format= to override (hex, rgb, hsl).'
114
+ reason: 'Format knob.'
104
115
  anti_patterns: []
105
116
  examples:
106
117
  - name: color-picker-demo
@@ -156,7 +167,8 @@ keywords:
156
167
  - color-picker
157
168
  - color
158
169
  - picker
159
- synonyms: {}
170
+ synonyms:
171
+ color-picker: [color-canvas, color-surface, swatch-picker]
160
172
  related:
161
173
  - grid
162
174
  - button
@@ -2,7 +2,7 @@
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
3
  "$id": "https://adiaui.dev/a2ui/v0_9/components/Command.json",
4
4
  "title": "Command",
5
- "description": "Searchable command palette with keyboard navigation.",
5
+ "description": "Searchable command palette primitive combobox-style search input\nplus a scrollable list of <option value> items grouped by\n<optgroup label>. Content-only; does NOT own the dialog or the\nCmd+K shortcut. For canonical Cmd+K palettes wrap in <admin-command>\nat the shell tier, which provides the native <dialog> + focus\nmanagement + cross-platform Cmd+K listener. Distinct from <menu-ui>\n(small popover action menu, not searchable) and <modal-ui> (generic\ncentered dialog).\n",
6
6
  "type": "object",
7
7
  "allOf": [
8
8
  {
@@ -88,7 +88,12 @@
88
88
  "keybinding"
89
89
  ],
90
90
  "name": "UICommand",
91
- "related": [],
91
+ "related": [
92
+ "AdminCommand",
93
+ "Menu",
94
+ "Modal",
95
+ "Search"
96
+ ],
92
97
  "slots": {
93
98
  "empty": {
94
99
  "description": "Empty state shown when no items match"
@@ -1,5 +1,13 @@
1
1
  /**
2
- * `<command-ui>` — Searchable command palette with keyboard navigation.
2
+ * `<command-ui>` — Searchable command palette primitive combobox-style search input
3
+ plus a scrollable list of <option value> items grouped by
4
+ <optgroup label>. Content-only; does NOT own the dialog or the
5
+ Cmd+K shortcut. For canonical Cmd+K palettes wrap in <admin-command>
6
+ at the shell tier, which provides the native <dialog> + focus
7
+ management + cross-platform Cmd+K listener. Distinct from <menu-ui>
8
+ (small popover action menu, not searchable) and <modal-ui> (generic
9
+ centered dialog).
10
+
3
11
  *
4
12
  * @see https://ui-kit.exe.xyz/site/components/command
5
13
  *
@@ -4,7 +4,15 @@ tag: command-ui
4
4
  component: Command
5
5
  category: container
6
6
  version: 1
7
- description: Searchable command palette with keyboard navigation.
7
+ description: |
8
+ Searchable command palette primitive — combobox-style search input
9
+ plus a scrollable list of <option value> items grouped by
10
+ <optgroup label>. Content-only; does NOT own the dialog or the
11
+ Cmd+K shortcut. For canonical Cmd+K palettes wrap in <admin-command>
12
+ at the shell tier, which provides the native <dialog> + focus
13
+ management + cross-platform Cmd+K listener. Distinct from <menu-ui>
14
+ (small popover action menu, not searchable) and <modal-ui> (generic
15
+ centered dialog).
8
16
  props:
9
17
  open:
10
18
  description: Whether the command palette is visible
@@ -52,7 +60,31 @@ tokens: {}
52
60
  requiredIcons:
53
61
  - magnifying-glass
54
62
  a2ui:
55
- rules: []
63
+ rules:
64
+ - >-
65
+ <command-ui> is the searchable PALETTE primitive (input + option
66
+ list). For Cmd+K palettes, wrap it in <admin-command> at the
67
+ shell tier — admin-command owns the native <dialog>, focus
68
+ management, and the Cmd+K / Ctrl+K shortcut listener.
69
+ command-ui is content-only and does NOT own the dialog or
70
+ shortcut. Do NOT hand-roll a <dialog> + Cmd+K key listener.
71
+ - >-
72
+ Author items as native <option value data-icon data-shortcut>
73
+ elements inside <optgroup label="…"> for grouped sections. The
74
+ `select` event's detail.category mirrors the parent optgroup's
75
+ label. Detail = { value, label, category }.
76
+ - >-
77
+ Decision rule vs adjacent surfaces. Use <menu-ui> for small
78
+ NON-searchable popover menus (≤10 actions, triggered by a
79
+ button). Use <modal-ui> for generic centered dialogs. Reach
80
+ for <command-ui> only when you need a searchable,
81
+ keyboard-navigable list of commands or destinations.
82
+ - >-
83
+ command-ui MAY render inline (no dialog) for embedded search
84
+ panels, but the canonical AdiaUI admin pattern is exactly one
85
+ <command-ui placeholder="…"> as the sole child of
86
+ <admin-command> inside <admin-shell>. See site/index.html and
87
+ playgrounds/admin-shell/ for production references.
56
88
  anti_patterns: []
57
89
  examples:
58
90
  - name: basic-command
@@ -181,4 +213,8 @@ synonyms:
181
213
  - palette
182
214
  tags:
183
215
  - CommandPalette
184
- related: []
216
+ related:
217
+ - AdminCommand
218
+ - Menu
219
+ - Modal
220
+ - Search
@@ -81,7 +81,13 @@ tokens:
81
81
  --demo-toggle-stage-padding:
82
82
  description: Inner padding around each slot
83
83
  a2ui:
84
- rules: []
84
+ rules:
85
+ - rule: 'Demo-page-only — toggles between live and code views in component documentation surfaces.'
86
+ reason: 'Doc-tooling primitive; not for product surfaces.'
87
+ - rule: 'Do not use in apps/ — restrict to packages/web-components/components/*/<name>.html demo pages and docs surfaces.'
88
+ reason: 'Surface scope.'
89
+ - rule: 'Behavior: shows/hides the [data-code] block when toggled.'
90
+ reason: 'Built-in cascade.'
85
91
  anti_patterns: []
86
92
  examples:
87
93
  - name: with-without-trait
@@ -62,7 +62,11 @@
62
62
  "dl"
63
63
  ],
64
64
  "name": "UIDescriptionList",
65
- "related": [],
65
+ "related": [
66
+ "List",
67
+ "Field",
68
+ "Section"
69
+ ],
66
70
  "slots": {
67
71
  "[object Object]": {
68
72
  "description": "Child content region for the `[object Object]` slot."
@@ -46,7 +46,13 @@ states:
46
46
  traits: []
47
47
  tokens: {}
48
48
  a2ui:
49
- rules: []
49
+ rules:
50
+ - rule: 'Use for key:value pairs in dense detail views (user profile fields, metadata panels, audit logs).'
51
+ reason: 'Semantic <dl> with token-driven spacing; better than ad-hoc <row-ui> layouts.'
52
+ - rule: 'Do not use for editable forms — use <fields-ui> instead.'
53
+ reason: 'Description list is read-only display; fields handle input + validation.'
54
+ - rule: 'Pairs render as label + value on the same row by default; use vertical variant for narrow panes.'
55
+ reason: 'Responsive layout knob.'
50
56
  anti_patterns: []
51
57
  examples: []
52
58
  keywords:
@@ -65,4 +71,7 @@ synonyms:
65
71
  - spec list
66
72
  - metadata list
67
73
  - property list
68
- related: []
74
+ related:
75
+ - List
76
+ - Field
77
+ - Section
@@ -2,7 +2,7 @@
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
3
  "$id": "https://adiaui.dev/a2ui/v0_9/components/Divider.json",
4
4
  "title": "Divider",
5
- "description": "Horizontal or vertical divider with optional label.",
5
+ "description": "Horizontal or vertical divider with optional label — a semantic\nrule between content groups. Set [vertical] for column dividers\n(typically inside <row-ui>); set [label] for a labeled-rule pattern\nwhere the divider carries a short caption (e.g. \"OR\" between auth\nmethods, \"Today\" between message groups). Distinct from\n<hr data-nav-divider> (which is a CSS hook used by <nav-ui> for nav\nsection separation, not a primitive).\n",
6
6
  "type": "object",
7
7
  "allOf": [
8
8
  {
@@ -1,5 +1,12 @@
1
1
  /**
2
- * `<divider-ui>` — Horizontal or vertical divider with optional label.
2
+ * `<divider-ui>` — Horizontal or vertical divider with optional label — a semantic
3
+ rule between content groups. Set [vertical] for column dividers
4
+ (typically inside <row-ui>); set [label] for a labeled-rule pattern
5
+ where the divider carries a short caption (e.g. "OR" between auth
6
+ methods, "Today" between message groups). Distinct from
7
+ <hr data-nav-divider> (which is a CSS hook used by <nav-ui> for nav
8
+ section separation, not a primitive).
9
+
3
10
  *
4
11
  * @see https://ui-kit.exe.xyz/site/components/divider
5
12
  *
@@ -6,7 +6,14 @@ tag: divider-ui
6
6
  component: Divider
7
7
  category: display
8
8
  version: 1
9
- description: Horizontal or vertical divider with optional label.
9
+ description: |
10
+ Horizontal or vertical divider with optional label — a semantic
11
+ rule between content groups. Set [vertical] for column dividers
12
+ (typically inside <row-ui>); set [label] for a labeled-rule pattern
13
+ where the divider carries a short caption (e.g. "OR" between auth
14
+ methods, "Today" between message groups). Distinct from
15
+ <hr data-nav-divider> (which is a CSS hook used by <nav-ui> for nav
16
+ section separation, not a primitive).
10
17
  props:
11
18
  label:
12
19
  description: Center label text
@@ -24,7 +31,13 @@ states:
24
31
  traits: []
25
32
  tokens: {}
26
33
  a2ui:
27
- rules: []
34
+ rules:
35
+ - rule: 'Use to separate visually distinct sections within a container; horizontal default, vertical via orientation=''vertical''.'
36
+ reason: 'Single-purpose primitive — semantic rule + token-driven margin.'
37
+ - rule: 'Inside menus / popovers use <menu-divider-ui> instead; it has menu-specific token spacing.'
38
+ reason: 'Menu-divider is menu-namespaced; divider-ui is generic.'
39
+ - rule: 'Do not stack multiple consecutive dividers — use a single divider or restructure the section.'
40
+ reason: 'Visual rhythm.'
28
41
  anti_patterns: []
29
42
  examples:
30
43
  - name: settings-page
@@ -131,7 +131,38 @@ states:
131
131
  traits: []
132
132
  tokens: {}
133
133
  a2ui:
134
- rules: []
134
+ rules:
135
+ - >-
136
+ Direct children of <drawer-ui> MUST be <header>, <section> (1..n),
137
+ <footer>, or an element with slot="header|body|footer". Wrap stray
138
+ <col-ui> / <row-ui> / <div> / <text-ui> in a <section>. Enforced by
139
+ scripts/audit/audit-drawer-structure.mjs. Bypassing the body slot
140
+ loses the section inset and teaches the gen-UI corpus the wrong
141
+ pattern.
142
+ - >-
143
+ Reflect open state via the [open] boolean attribute on the host
144
+ (open=true / open=false). Do NOT toggle visibility with CSS,
145
+ [hidden], or a [data-open] proxy — drawer-ui owns the native
146
+ <dialog> lifecycle, focus trap, and ::backdrop. Listen for the
147
+ `close` event (detail.reason ∈ escape | backdrop | close-button |
148
+ programmatic) to react to dismiss.
149
+ - >-
150
+ Use drawer-ui (not modal-ui) for edge-anchored detail / edit panels
151
+ and mobile bottom-sheet patterns. Pick side="right" for inspector
152
+ flows opened FROM a row/list item, side="bottom" for sheets,
153
+ side="left" for navigation drawers on narrow viewports. Centered
154
+ confirmations belong in modal-ui.
155
+ - >-
156
+ Compose the drawer header with [slot="icon|heading|description|
157
+ action"] direct-child elements to activate the card-ui-aligned
158
+ 3-column grid (icon | heading+description | action+close). The
159
+ close button is auto-stamped; do not author your own X button
160
+ unless using [permanent] (which suppresses the close button).
161
+ - >-
162
+ Never set drawer.innerHTML wholesale — it wipes the stamped
163
+ <dialog> part and the author skeleton. Mutate a stable inner
164
+ element inside a persistent <section> instead. Same rule as
165
+ <modal-ui>.
135
166
  anti_patterns:
136
167
  - description: >-
137
168
  Replacing a drawer's children wholesale — `drawer.innerHTML = '…'` —
@@ -2,7 +2,7 @@
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
3
  "$id": "https://adiaui.dev/a2ui/v0_9/components/Embed.json",
4
4
  "title": "Embed",
5
- "description": "Responsive sandboxed iframe wrapper.",
5
+ "description": "Responsive sandboxed <iframe> wrapper — renders external content at\na constrained [aspect] ratio with optional [width] / [height] override.\nThe iframe is created in light DOM with safe sandbox attributes;\nauthors do NOT slot an <iframe> directly. Use for YouTube / Vimeo /\nFigma embeds in articles, marketing pages, or chat responses; not\nfor arbitrary cross-origin app integrations (use the platform's own\nSDK / portal instead).\n",
6
6
  "type": "object",
7
7
  "allOf": [
8
8
  {
@@ -1,5 +1,12 @@
1
1
  /**
2
- * `<embed-ui>` — Responsive sandboxed iframe wrapper.
2
+ * `<embed-ui>` — Responsive sandboxed <iframe> wrapper — renders external content at
3
+ a constrained [aspect] ratio with optional [width] / [height] override.
4
+ The iframe is created in light DOM with safe sandbox attributes;
5
+ authors do NOT slot an <iframe> directly. Use for YouTube / Vimeo /
6
+ Figma embeds in articles, marketing pages, or chat responses; not
7
+ for arbitrary cross-origin app integrations (use the platform's own
8
+ SDK / portal instead).
9
+
3
10
  *
4
11
  * @see https://ui-kit.exe.xyz/site/components/embed
5
12
  *
@@ -6,7 +6,14 @@ tag: embed-ui
6
6
  component: Embed
7
7
  category: agent
8
8
  version: 1
9
- description: Responsive sandboxed iframe wrapper.
9
+ description: |
10
+ Responsive sandboxed <iframe> wrapper — renders external content at
11
+ a constrained [aspect] ratio with optional [width] / [height] override.
12
+ The iframe is created in light DOM with safe sandbox attributes;
13
+ authors do NOT slot an <iframe> directly. Use for YouTube / Vimeo /
14
+ Figma embeds in articles, marketing pages, or chat responses; not
15
+ for arbitrary cross-origin app integrations (use the platform's own
16
+ SDK / portal instead).
10
17
  props:
11
18
  aspect:
12
19
  description: CSS aspect-ratio (e.g. 16/9)
@@ -34,7 +41,15 @@ states:
34
41
  traits: []
35
42
  tokens: {}
36
43
  a2ui:
37
- rules: []
44
+ rules:
45
+ - rule: 'Responsive sandboxed <iframe> wrapper at constrained aspect ratio. Safe sandbox attributes are applied by default.'
46
+ reason: 'Iframe primitive.'
47
+ - rule: 'For raster/vector images use <image-ui>; for icons use <icon-ui>; embed-ui is for live external content only.'
48
+ reason: 'Sibling decision rule.'
49
+ - rule: 'aspect attribute locks ratio (e.g. 16/9, 4/3) to prevent layout shift; width/height override when needed.'
50
+ reason: 'Dimension knobs.'
51
+ - rule: 'Do not embed first-party AdiaUI app routes — use direct component composition instead.'
52
+ reason: 'Cross-origin discipline.'
38
53
  anti_patterns: []
39
54
  examples:
40
55
  - name: embed-content
@@ -2,7 +2,7 @@
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
3
  "$id": "https://adiaui.dev/a2ui/v0_9/components/EmptyState.json",
4
4
  "title": "EmptyState",
5
- "description": "Placeholder for empty views with icon, heading, description, and action slot.",
5
+ "description": "Placeholder for empty views with icon, heading, description, and action slot. Renders centered inside lists, tables, panes, or cards when no data is present. Use as a zero-state inside containers; for app-loading shells use <skeleton-ui> instead.",
6
6
  "type": "object",
7
7
  "allOf": [
8
8
  {
@@ -35,6 +35,16 @@
35
35
  "description": "§223 (v0.5.9). Single-line muted layout — drops centered-column chrome\n(no vertical padding, no row-stack, no icon-size bump). Useful for\ninline empty-table-row / inline empty-list / placeholder cells where\nthe full-canvas placeholder is too prominent.",
36
36
  "type": "boolean",
37
37
  "default": false
38
+ },
39
+ "variant": {
40
+ "description": "Semantic color variant. Use `danger` or `warning` for full-section error states where the data cannot be shown (API failure, permission error) — the centered layout mirrors the empty state but uses danger/ warning tones. Leave unset (default) for the canonical zero-data case.",
41
+ "type": "string",
42
+ "enum": [
43
+ "default",
44
+ "danger",
45
+ "warning"
46
+ ],
47
+ "default": "default"
38
48
  }
39
49
  },
40
50
  "required": [
@@ -85,7 +95,14 @@
85
95
  "name": "idle"
86
96
  }
87
97
  ],
88
- "synonyms": {},
98
+ "synonyms": {
99
+ "empty-state": [
100
+ "zero-state",
101
+ "no-data",
102
+ "placeholder",
103
+ "empty"
104
+ ]
105
+ },
89
106
  "tag": "empty-state-ui",
90
107
  "tokens": {
91
108
  "--empty-state-action-mt": {
@@ -56,6 +56,20 @@
56
56
  margin-top: var(--empty-state-action-mt);
57
57
  }
58
58
 
59
+ /* ── Semantic color variants ──
60
+ Color the icon + text only; no background/border tint. */
61
+ :scope[variant="danger"] {
62
+ --empty-state-icon-fg: var(--a-danger-strong);
63
+ --empty-state-heading-fg: var(--a-danger-text);
64
+ --empty-state-desc-fg: var(--a-danger-text);
65
+ }
66
+
67
+ :scope[variant="warning"] {
68
+ --empty-state-icon-fg: var(--a-warning-strong);
69
+ --empty-state-heading-fg: var(--a-warning-text);
70
+ --empty-state-desc-fg: var(--a-warning-text);
71
+ }
72
+
59
73
  /* ── §223 (v0.5.9): [minimal] — single-line muted layout ──
60
74
  Drops centered-column chrome (no canvas-style padding, no flex-column
61
75
  stack). Renders as `[icon] heading [description]` inline in muted-fg.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * `<empty-state-ui>` — Placeholder for empty views with icon, heading, description, and action slot.
2
+ * `<empty-state-ui>` — Placeholder for empty views with icon, heading, description, and action slot. Renders centered inside lists, tables, panes, or cards when no data is present. Use as a zero-state inside containers; for app-loading shells use <skeleton-ui> instead.
3
3
  *
4
4
  * @see https://ui-kit.exe.xyz/site/components/empty-state
5
5
  *
@@ -24,4 +24,6 @@ export class UIEmptyState extends UIElement {
24
24
  inline empty-table-row / inline empty-list / placeholder cells where
25
25
  the full-canvas placeholder is too prominent. */
26
26
  minimal: boolean;
27
+ /** Semantic color variant. Use `danger` or `warning` for full-section error states where the data cannot be shown (API failure, permission error) — the centered layout mirrors the empty state but uses danger/ warning tones. Leave unset (default) for the canonical zero-data case. */
28
+ variant: 'default' | 'danger' | 'warning';
27
29
  }
@@ -6,7 +6,11 @@ tag: empty-state-ui
6
6
  component: EmptyState
7
7
  category: display
8
8
  version: 1
9
- description: Placeholder for empty views with icon, heading, description, and action slot.
9
+ description: >-
10
+ Placeholder for empty views with icon, heading, description, and action
11
+ slot. Renders centered inside lists, tables, panes, or cards when no
12
+ data is present. Use as a zero-state inside containers; for app-loading
13
+ shells use <skeleton-ui> instead.
10
14
  # Per ADR-0027 — primitives that programmatically create other primitives
11
15
  # do NOT auto-import them. Consumer (or demo shell) must explicitly import.
12
16
  composes:
@@ -33,6 +37,19 @@ props:
33
37
  type: boolean
34
38
  default: false
35
39
  reflect: true
40
+ variant:
41
+ description: >-
42
+ Semantic color variant. Use `danger` or `warning` for full-section
43
+ error states where the data cannot be shown (API failure, permission
44
+ error) — the centered layout mirrors the empty state but uses danger/
45
+ warning tones. Leave unset (default) for the canonical zero-data case.
46
+ type: string
47
+ default: default
48
+ enum:
49
+ - default
50
+ - danger
51
+ - warning
52
+ reflect: true
36
53
  events: {}
37
54
  slots:
38
55
  action:
@@ -65,7 +82,36 @@ tokens:
65
82
  --empty-state-py:
66
83
  description: Vertical padding
67
84
  a2ui:
68
- rules: []
85
+ rules:
86
+ - >-
87
+ Use <empty-state-ui> for zero-data states: empty lists, no-results
88
+ search, fresh accounts. Not for loading (use <skeleton-ui>). For
89
+ inline notices within populated content use <alert-ui>. For
90
+ full-section error states where the data cannot be shown at all
91
+ (API failure, permission error), use <empty-state-ui variant="danger">
92
+ — the centered layout is more appropriate than an inline banner when
93
+ the entire content area is replaced.
94
+ - >-
95
+ Canonical placement: slotted into cluster-specific wrappers —
96
+ <chat-empty> inside <chat-thread>, <editor-canvas-empty> inside
97
+ <editor-canvas>, OR inside <card-ui><section> for in-card empty
98
+ states. Compose with an <icon-ui> for the leading glyph (pick a
99
+ Phosphor name that mirrors the missing entity — folder, inbox,
100
+ magnifying-glass).
101
+ - >-
102
+ Put AT MOST ONE CTA in slot="action". It should be the single
103
+ next step (Create, Retry, Clear filters). Prefer
104
+ [variant="primary"] for create-flows; [variant="outline"] for
105
+ retry / secondary actions.
106
+ - >-
107
+ Use [minimal] for inline empty rows inside <table-ui> /
108
+ <list-ui> where full-canvas chrome is too prominent. The
109
+ `minimal` flag (§223 v0.5.9) drops chrome for a compact
110
+ placeholder cell.
111
+ - >-
112
+ Per ADR-0027, empty-state-ui composes <icon-ui> but does NOT
113
+ auto-register it. Consumer pages must explicitly import
114
+ <icon-ui> before <empty-state-ui> renders correctly.
69
115
  anti_patterns: []
70
116
  examples:
71
117
  - name: empty-state
@@ -313,7 +359,8 @@ keywords:
313
359
  - empty-state
314
360
  - empty
315
361
  - state
316
- synonyms: {}
362
+ synonyms:
363
+ empty-state: [zero-state, no-data, placeholder, empty]
317
364
  related:
318
365
  - button
319
366
  - drawer