@adia-ai/web-components 0.6.20 → 0.6.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 (252) 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.css +9 -4
  93. package/components/feed/feed.yaml +26 -0
  94. package/components/fields/fields.yaml +7 -1
  95. package/components/footer/footer.a2ui.json +7 -1
  96. package/components/footer/footer.yaml +27 -2
  97. package/components/grid/class.js +57 -0
  98. package/components/grid/grid.a2ui.json +3 -3
  99. package/components/grid/grid.d.ts +3 -3
  100. package/components/grid/grid.yaml +22 -8
  101. package/components/header/header.a2ui.json +8 -1
  102. package/components/header/header.yaml +30 -2
  103. package/components/heatmap/heatmap.yaml +7 -1
  104. package/components/icon/icon.a2ui.json +9 -2
  105. package/components/icon/icon.d.ts +1 -1
  106. package/components/icon/icon.yaml +32 -3
  107. package/components/image/image.yaml +7 -1
  108. package/components/input/input.css +8 -1
  109. package/components/input/input.yaml +29 -1
  110. package/components/inspector/inspector.a2ui.json +7 -2
  111. package/components/inspector/inspector.d.ts +9 -1
  112. package/components/inspector/inspector.yaml +23 -3
  113. package/components/kbd/kbd.a2ui.json +1 -1
  114. package/components/kbd/kbd.d.ts +1 -1
  115. package/components/kbd/kbd.yaml +11 -2
  116. package/components/list/list-item.a2ui.json +21 -3
  117. package/components/list/list-item.yaml +25 -0
  118. package/components/list/list.a2ui.json +7 -2
  119. package/components/list/list.d.ts +9 -1
  120. package/components/list/list.yaml +21 -3
  121. package/components/menu/menu-divider.a2ui.json +17 -3
  122. package/components/menu/menu-divider.yaml +35 -0
  123. package/components/menu/menu-item.a2ui.json +19 -3
  124. package/components/menu/menu-item.yaml +42 -0
  125. package/components/menu/menu.a2ui.json +7 -1
  126. package/components/menu/menu.yaml +33 -2
  127. package/components/modal/modal.a2ui.json +7 -2
  128. package/components/modal/modal.d.ts +10 -1
  129. package/components/modal/modal.yaml +48 -3
  130. package/components/nav/nav.a2ui.json +16 -2
  131. package/components/nav/nav.yaml +40 -3
  132. package/components/nav-group/nav-group.a2ui.json +12 -2
  133. package/components/nav-group/nav-group.yaml +37 -3
  134. package/components/nav-item/nav-item.a2ui.json +13 -2
  135. package/components/nav-item/nav-item.yaml +40 -3
  136. package/components/noodles/noodles.a2ui.json +12 -2
  137. package/components/noodles/noodles.yaml +14 -3
  138. package/components/option-card/option-card.yaml +27 -1
  139. package/components/otp-input/otp-input.yaml +24 -1
  140. package/components/page/page.a2ui.json +7 -1
  141. package/components/page/page.yaml +9 -2
  142. package/components/pagination/pagination.a2ui.json +1 -1
  143. package/components/pagination/pagination.d.ts +1 -1
  144. package/components/pagination/pagination.yaml +13 -2
  145. package/components/pane/pane.a2ui.json +1 -1
  146. package/components/pane/pane.d.ts +7 -1
  147. package/components/pane/pane.yaml +33 -2
  148. package/components/pipeline-status/pipeline-status.a2ui.json +6 -2
  149. package/components/pipeline-status/pipeline-status.d.ts +1 -1
  150. package/components/pipeline-status/pipeline-status.yaml +18 -3
  151. package/components/popover/popover.yaml +30 -1
  152. package/components/progress/progress.a2ui.json +1 -1
  153. package/components/progress/progress.d.ts +1 -1
  154. package/components/progress/progress.yaml +13 -2
  155. package/components/progress-row/progress-row.a2ui.json +12 -2
  156. package/components/progress-row/progress-row.yaml +13 -3
  157. package/components/radio/radio.a2ui.json +1 -1
  158. package/components/radio/radio.yaml +9 -1
  159. package/components/range/range.yaml +7 -1
  160. package/components/rating/rating.a2ui.json +4 -1
  161. package/components/rating/rating.yaml +10 -2
  162. package/components/richtext/richtext.a2ui.json +6 -2
  163. package/components/richtext/richtext.d.ts +9 -1
  164. package/components/richtext/richtext.yaml +20 -3
  165. package/components/row/class.js +34 -0
  166. package/components/row/row.a2ui.json +11 -5
  167. package/components/row/row.d.ts +11 -4
  168. package/components/row/row.yaml +25 -7
  169. package/components/search/search.a2ui.json +5 -1
  170. package/components/search/search.yaml +11 -2
  171. package/components/section/section.a2ui.json +7 -1
  172. package/components/section/section.yaml +36 -2
  173. package/components/segment/segment.a2ui.json +8 -2
  174. package/components/segment/segment.d.ts +7 -1
  175. package/components/segment/segment.yaml +16 -3
  176. package/components/segmented/segmented.a2ui.json +6 -1
  177. package/components/segmented/segmented.css +5 -0
  178. package/components/segmented/segmented.yaml +12 -2
  179. package/components/select/select.a2ui.json +1 -1
  180. package/components/select/select.yaml +34 -2
  181. package/components/skeleton/skeleton.a2ui.json +7 -2
  182. package/components/skeleton/skeleton.d.ts +1 -1
  183. package/components/skeleton/skeleton.yaml +17 -3
  184. package/components/slider/slider.yaml +7 -1
  185. package/components/stack/stack.a2ui.json +14 -3
  186. package/components/stack/stack.d.ts +9 -1
  187. package/components/stack/stack.yaml +22 -4
  188. package/components/stat/stat.a2ui.json +6 -2
  189. package/components/stat/stat.css +5 -2
  190. package/components/stat/stat.d.ts +1 -1
  191. package/components/stat/stat.yaml +16 -3
  192. package/components/step-progress/step-progress.yaml +7 -1
  193. package/components/stepper/stepper-item.a2ui.json +20 -3
  194. package/components/stepper/stepper-item.yaml +24 -0
  195. package/components/stepper/stepper.a2ui.json +1 -1
  196. package/components/stepper/stepper.d.ts +1 -1
  197. package/components/stepper/stepper.yaml +13 -2
  198. package/components/stream/stream.a2ui.json +12 -2
  199. package/components/stream/stream.yaml +15 -3
  200. package/components/swatch/swatch.yaml +7 -1
  201. package/components/swiper/swiper.yaml +7 -1
  202. package/components/switch/switch.a2ui.json +6 -2
  203. package/components/switch/switch.yaml +16 -2
  204. package/components/table/cell-types.js +23 -10
  205. package/components/table/class.js +12 -2
  206. package/components/table/table.a2ui.json +6 -1
  207. package/components/table/table.css +68 -1
  208. package/components/table/table.d.ts +3 -1
  209. package/components/table/table.test.js +64 -0
  210. package/components/table/table.yaml +39 -2
  211. package/components/table-toolbar/table-toolbar.yaml +27 -1
  212. package/components/tabs/tab.a2ui.json +17 -3
  213. package/components/tabs/tab.yaml +39 -0
  214. package/components/tabs/tabs.a2ui.json +1 -1
  215. package/components/tabs/tabs.d.ts +1 -1
  216. package/components/tabs/tabs.yaml +36 -2
  217. package/components/tag/tag.a2ui.json +6 -2
  218. package/components/tag/tag.d.ts +9 -1
  219. package/components/tag/tag.yaml +38 -3
  220. package/components/text/class.js +13 -0
  221. package/components/text/text.a2ui.json +9 -2
  222. package/components/text/text.d.ts +1 -1
  223. package/components/text/text.yaml +12 -5
  224. package/components/textarea/textarea.a2ui.json +15 -3
  225. package/components/textarea/textarea.yaml +41 -4
  226. package/components/timeline/timeline-item.a2ui.json +20 -3
  227. package/components/timeline/timeline-item.yaml +24 -0
  228. package/components/timeline/timeline.a2ui.json +8 -1
  229. package/components/timeline/timeline.yaml +9 -2
  230. package/components/toast/toast.a2ui.json +6 -2
  231. package/components/toast/toast.yaml +19 -3
  232. package/components/toggle-group/toggle-group.a2ui.json +13 -3
  233. package/components/toggle-group/toggle-group.d.ts +1 -1
  234. package/components/toggle-group/toggle-group.yaml +19 -4
  235. package/components/toggle-group/toggle-option.a2ui.json +18 -3
  236. package/components/toggle-group/toggle-option.yaml +23 -0
  237. package/components/toggle-scheme/toggle-scheme.yaml +4 -0
  238. package/components/toolbar/toolbar-group.a2ui.json +18 -3
  239. package/components/toolbar/toolbar-group.yaml +23 -0
  240. package/components/toolbar/toolbar.yaml +7 -1
  241. package/components/tooltip/tooltip.yaml +24 -1
  242. package/components/tree/tree-item.a2ui.json +19 -3
  243. package/components/tree/tree-item.yaml +42 -0
  244. package/components/tree/tree.a2ui.json +6 -1
  245. package/components/tree/tree.yaml +31 -2
  246. package/components/upload/upload.yaml +7 -1
  247. package/core/index.js +1 -0
  248. package/core/responsive.d.ts +29 -0
  249. package/core/responsive.js +120 -0
  250. package/core/responsive.test.js +121 -0
  251. package/package.json +1 -1
  252. package/styles/tokens.css +6 -6
@@ -6,7 +6,13 @@ tag: agent-suggestions-ui
6
6
  component: AgentSuggestions
7
7
  category: agent
8
8
  version: 1
9
- description: Row of follow-up suggestion chips.
9
+ description: |
10
+ Row of follow-up suggestion chips presented under an agent response.
11
+ Each suggestion is a <button-ui> child the user can tap to send the
12
+ text back as the next prompt. Composes <button-ui> with chip-style
13
+ visual treatment; the variant + size props cascade to children. Use
14
+ to lower input friction at the bottom of a chat response; not for
15
+ permanent navigation (that's <nav-ui>).
10
16
  # Per ADR-0027 — primitives that programmatically create other primitives
11
17
  # do NOT auto-import them. Consumer (or demo shell) must explicitly import.
12
18
  composes:
@@ -50,7 +56,15 @@ states:
50
56
  traits: []
51
57
  tokens: {}
52
58
  a2ui:
53
- rules: []
59
+ rules:
60
+ - rule: 'Row of follow-up suggestion chips presented under an agent response. User taps to send the chip text as the next prompt.'
61
+ reason: 'Follow-up pattern.'
62
+ - rule: 'Hosts <button-ui> children with chip-style variant; auto-applies variant if children don''t set one.'
63
+ reason: 'Composition behavior.'
64
+ - rule: 'Different from <agent-questions-ui> (required disambiguation) — suggestions are optional and the agent doesn''t wait.'
65
+ reason: 'Optional vs gating.'
66
+ - rule: 'Place at the end of an assistant message in <chat-thread-ui>; not for first-message empty-state suggestions (use <empty-state-ui>).'
67
+ reason: 'Surface scope.'
54
68
  anti_patterns: []
55
69
  examples:
56
70
  - name: basic
@@ -67,7 +81,8 @@ keywords:
67
81
  - chips
68
82
  - follow-up
69
83
  - quick replies
70
- synonyms: {}
84
+ synonyms:
85
+ suggestions: [follow-ups, follow-up-chips, prompts, completions]
71
86
  related:
72
87
  - agent-questions-ui
73
88
  - agent-feedback-bar-ui
@@ -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/AgentTrace.json",
4
4
  "title": "AgentTrace",
5
- "description": "Collapsible metrics + training-feedback panel for an agent turn.",
5
+ "description": "Collapsible metrics + training-feedback panel for an agent turn. Shows reasoning steps, tool calls, latency, and token counts with a thumbs-up/down feedback affordance. Use inside <chat-thread-ui> message bodies for expert/debug views; hide by default in user-facing chat.",
6
6
  "type": "object",
7
7
  "allOf": [
8
8
  {
@@ -76,7 +76,14 @@
76
76
  "name": "idle"
77
77
  }
78
78
  ],
79
- "synonyms": {},
79
+ "synonyms": {
80
+ "trace": [
81
+ "agent-trace",
82
+ "reasoning-trace",
83
+ "tool-trace",
84
+ "agent-log"
85
+ ]
86
+ },
80
87
  "tag": "agent-trace-ui",
81
88
  "tokens": {},
82
89
  "traits": [],
@@ -1,5 +1,5 @@
1
1
  /**
2
- * `<agent-trace-ui>` — Collapsible metrics + training-feedback panel for an agent turn.
2
+ * `<agent-trace-ui>` — Collapsible metrics + training-feedback panel for an agent turn. Shows reasoning steps, tool calls, latency, and token counts with a thumbs-up/down feedback affordance. Use inside <chat-thread-ui> message bodies for expert/debug views; hide by default in user-facing chat.
3
3
  *
4
4
  * @see https://ui-kit.exe.xyz/site/components/agent-trace
5
5
  *
@@ -6,7 +6,11 @@ tag: agent-trace-ui
6
6
  component: AgentTrace
7
7
  category: agent
8
8
  version: 1
9
- description: Collapsible metrics + training-feedback panel for an agent turn.
9
+ description: >-
10
+ Collapsible metrics + training-feedback panel for an agent turn. Shows
11
+ reasoning steps, tool calls, latency, and token counts with a
12
+ thumbs-up/down feedback affordance. Use inside <chat-thread-ui> message
13
+ bodies for expert/debug views; hide by default in user-facing chat.
10
14
  props:
11
15
  label:
12
16
  description: Fallback summary label.
@@ -36,7 +40,15 @@ requiredIcons:
36
40
  - caret-right
37
41
  - circle-fill
38
42
  a2ui:
39
- rules: []
43
+ rules:
44
+ - rule: 'Collapsible metrics + training-feedback panel showing reasoning steps, tool calls, latency, and token counts.'
45
+ reason: 'Diagnostic surface.'
46
+ - rule: 'Place inside <chat-thread-ui> message bodies for expert/debug views; hide by default in user-facing chat.'
47
+ reason: 'Audience scope.'
48
+ - rule: 'Different from <agent-reasoning-ui> (narrative inner monologue) — agent-trace is structured metrics.'
49
+ reason: 'Structured vs narrative boundary.'
50
+ - rule: 'Default collapsed=true; expand-on-demand keeps chat-thread visual density low.'
51
+ reason: 'Density discipline.'
40
52
  anti_patterns: []
41
53
  examples:
42
54
  - name: basic
@@ -54,7 +66,8 @@ keywords:
54
66
  - confidence
55
67
  - telemetry
56
68
  - training feedback
57
- synonyms: {}
69
+ synonyms:
70
+ trace: [agent-trace, reasoning-trace, tool-trace, agent-log]
58
71
  related:
59
72
  - agent-reasoning-ui
60
73
  - agent-feedback-bar-ui
@@ -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/Alert.json",
4
4
  "title": "Alert",
5
- "description": "Inline alert banner with optional icon and close button.",
5
+ "description": "Inline alert banner — a persistent, in-flow notice with icon +\ntitle + description + optional dismiss + slotted action. Variants\nmap to semantic severity (info / success / warning / danger).\nDistinct from <toast-ui> (transient global notification with\nauto-dismiss) and from <empty-state-ui> (zero-data placeholder).\nUse alert-ui for inline contextual notices the user should see\nbefore continuing — form-level errors, banner-style status,\ninline upgrade prompts.\n",
6
6
  "type": "object",
7
7
  "allOf": [
8
8
  {
@@ -99,6 +99,14 @@
99
99
  min-width: 0;
100
100
  }
101
101
 
102
+ /* Trailing action area — optional single button or small button group.
103
+ flex-shrink:0 keeps it from collapsing; align-self:start anchors it
104
+ to the first text line under the `align-items:start` root. */
105
+ :scope [slot="action"] {
106
+ flex-shrink: 0;
107
+ align-self: start;
108
+ }
109
+
102
110
  /* Close button is a `<button-ui icon="x" variant="ghost" size="sm">`
103
111
  stamped by alert.js — it brings its own focus ring, hover state,
104
112
  and transitions. Box height matches the leading slot so X and icon
@@ -1,5 +1,13 @@
1
1
  /**
2
- * `<alert-ui>` — Inline alert banner with optional icon and close button.
2
+ * `<alert-ui>` — Inline alert banner a persistent, in-flow notice with icon +
3
+ title + description + optional dismiss + slotted action. Variants
4
+ map to semantic severity (info / success / warning / danger).
5
+ Distinct from <toast-ui> (transient global notification with
6
+ auto-dismiss) and from <empty-state-ui> (zero-data placeholder).
7
+ Use alert-ui for inline contextual notices the user should see
8
+ before continuing — form-level errors, banner-style status,
9
+ inline upgrade prompts.
10
+
3
11
  *
4
12
  * @see https://ui-kit.exe.xyz/site/components/alert
5
13
  *
@@ -6,7 +6,15 @@ tag: alert-ui
6
6
  component: Alert
7
7
  category: container
8
8
  version: 1
9
- description: Inline alert banner with optional icon and close button.
9
+ description: |
10
+ Inline alert banner — a persistent, in-flow notice with icon +
11
+ title + description + optional dismiss + slotted action. Variants
12
+ map to semantic severity (info / success / warning / danger).
13
+ Distinct from <toast-ui> (transient global notification with
14
+ auto-dismiss) and from <empty-state-ui> (zero-data placeholder).
15
+ Use alert-ui for inline contextual notices the user should see
16
+ before continuing — form-level errors, banner-style status,
17
+ inline upgrade prompts.
10
18
  props:
11
19
  closable:
12
20
  description: >-
@@ -91,7 +99,13 @@ states:
91
99
  traits: []
92
100
  tokens: {}
93
101
  a2ui:
94
- rules: []
102
+ rules:
103
+ - rule: 'Inline alert/banner for status messages within a content region. Severity via variant (info, success, warn, error).'
104
+ reason: 'Canonical inline-alert primitive.'
105
+ - rule: 'For ephemeral toast notifications use <toast-ui> (or post to <feed-ui>); alert-ui is persistent inline.'
106
+ reason: 'Ephemeral vs persistent boundary.'
107
+ - rule: 'For modal-style critical alerts use <modal-ui> with alert content.'
108
+ reason: 'Inline vs modal.'
95
109
  anti_patterns: []
96
110
  examples:
97
111
  - name: alert-banner
@@ -76,7 +76,13 @@
76
76
  "name": "idle"
77
77
  }
78
78
  ],
79
- "synonyms": {},
79
+ "synonyms": {
80
+ "aside": [
81
+ "side-region",
82
+ "side-panel-slot",
83
+ "secondary-rail"
84
+ ]
85
+ },
80
86
  "tag": "aside-ui",
81
87
  "tokens": {},
82
88
  "traits": [],
@@ -44,7 +44,37 @@ states:
44
44
  traits: []
45
45
  tokens: {}
46
46
  a2ui:
47
- rules: []
47
+ rules:
48
+ - >-
49
+ Use <aside-ui> as a slot stub inside an IN-PAGE primitive
50
+ container parent (<card-ui>, <drawer-ui>, <modal-ui>, <page-ui>)
51
+ for two-column layouts with a semantic side region. It ships no
52
+ behavior; the parent reads [collapsible] and [width] via @scope.
53
+ Typical contents: <list-ui> / <tree-ui> / <nav-ui variant="section">.
54
+ - >-
55
+ Do NOT use <aside-ui> for app-shell sidebars. <admin-shell> no
56
+ longer reads <aside-ui slot="leading|trailing"> (retired in v0.4.0
57
+ per ADR-0024). Use the bespoke <admin-sidebar slot="leading|trailing"
58
+ collapsible resizable> with reflected [collapsed] / [resizing]
59
+ state. Same rule for <chat-sidebar> under <chat-shell> and
60
+ <editor-sidebar> under <editor-shell>.
61
+ - >-
62
+ Do NOT confuse <aside-ui> with <pane-ui>: aside-ui declares the
63
+ semantic side role (a11y + parent layout hint); <pane-ui> owns
64
+ resize / collapse interaction. When you need interactive resize
65
+ inside an aside, nest <pane-ui resizable> inside.
66
+ - >-
67
+ Width hints map to tokens: `width="rail"` ≈ icon-only nav,
68
+ `width="panel"` ≈ nav with labels, `width="wide"` ≈ workspace
69
+ pane. Unset defers to the parent default. Only pair `collapsible`
70
+ with parents that wire a toggle (the prop is a hint, not a
71
+ behavior).
72
+ - >-
73
+ For the settings-page description rail (label + help text on the
74
+ left, controls on the right) use plain HTML <aside> inside a
75
+ [data-section] flex layout — see apps/saas/billing and
76
+ apps/saas/members. That pattern is NOT aside-ui; the primitive
77
+ is for slotted container parents only.
48
78
  anti_patterns: []
49
79
  examples:
50
80
  - name: card-with-side-nav
@@ -91,7 +121,8 @@ keywords:
91
121
  - panel
92
122
  - side-region
93
123
  - nav-rail
94
- synonyms: {}
124
+ synonyms:
125
+ aside: [side-region, side-panel-slot, secondary-rail]
95
126
  related:
96
127
  - app-shell
97
128
  - drawer
@@ -36,12 +36,29 @@
36
36
  "composes": [],
37
37
  "events": {},
38
38
  "examples": [],
39
- "keywords": [],
39
+ "keywords": [
40
+ "avatar-group",
41
+ "avatar-stack",
42
+ "user-group",
43
+ "facepile",
44
+ "people-stack",
45
+ "overflow-avatars"
46
+ ],
40
47
  "name": "UIAvatarGroup",
41
- "related": [],
48
+ "related": [
49
+ "Avatar",
50
+ "Tag"
51
+ ],
42
52
  "slots": {},
43
53
  "states": [],
44
- "synonyms": {},
54
+ "synonyms": {
55
+ "avatar-group": [
56
+ "facepile",
57
+ "user-stack",
58
+ "people-pile",
59
+ "avatar-pile"
60
+ ]
61
+ },
45
62
  "tag": "avatar-group-ui",
46
63
  "tokens": {},
47
64
  "traits": [],
@@ -24,3 +24,27 @@ props:
24
24
  size:
25
25
  description: Forwards to each child <avatar-ui> (xs|sm|md|lg|xl). Empty uses the per-avatar size.
26
26
  type: string
27
+
28
+ keywords:
29
+ - avatar-group
30
+ - avatar-stack
31
+ - user-group
32
+ - facepile
33
+ - people-stack
34
+ - overflow-avatars
35
+
36
+ synonyms:
37
+ avatar-group: [facepile, user-stack, people-pile, avatar-pile]
38
+
39
+ related:
40
+ - Avatar
41
+ - Tag
42
+
43
+ a2ui:
44
+ rules:
45
+ - rule: 'Cluster of overlapping <avatar-ui> children with negative-margin stacking + +N overflow indicator.'
46
+ reason: 'Facepile primitive.'
47
+ - rule: 'max attribute controls visible-avatar count before +N overflow kicks in.'
48
+ reason: 'Overflow knob.'
49
+ - rule: 'For a single user use <avatar-ui> standalone; avatar-group only for 2+ users.'
50
+ reason: 'Capacity boundary.'
@@ -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/Avatar.json",
4
4
  "title": "Avatar",
5
- "description": "Avatar with image → initials → empty fallback chain.",
5
+ "description": "User-portrait primitive with an image → initials → icon fallback\nchain. Resolves the leading [src] image; on load failure falls back\nto [text]-derived initials; on missing text falls back to a slotted\nor default <icon-ui>. Use for user identity in chat surfaces,\nmember tables, statusbar account chips, comment threads. Pair via\n<avatar-group-ui> for stacked / overflowed sets.\n",
6
6
  "type": "object",
7
7
  "allOf": [
8
8
  {
@@ -1,5 +1,11 @@
1
1
  /**
2
- * `<avatar-ui>` — Avatar with image → initials → empty fallback chain.
2
+ * `<avatar-ui>` — User-portrait primitive with an image → initials → icon fallback
3
+ chain. Resolves the leading [src] image; on load failure falls back
4
+ to [text]-derived initials; on missing text falls back to a slotted
5
+ or default <icon-ui>. Use for user identity in chat surfaces,
6
+ member tables, statusbar account chips, comment threads. Pair via
7
+ <avatar-group-ui> for stacked / overflowed sets.
8
+
3
9
  *
4
10
  * @see https://ui-kit.exe.xyz/site/components/avatar
5
11
  *
@@ -6,7 +6,13 @@ tag: avatar-ui
6
6
  component: Avatar
7
7
  category: display
8
8
  version: 1
9
- description: Avatar with image → initials → empty fallback chain.
9
+ description: |
10
+ User-portrait primitive with an image → initials → icon fallback
11
+ chain. Resolves the leading [src] image; on load failure falls back
12
+ to [text]-derived initials; on missing text falls back to a slotted
13
+ or default <icon-ui>. Use for user identity in chat surfaces,
14
+ member tables, statusbar account chips, comment threads. Pair via
15
+ <avatar-group-ui> for stacked / overflowed sets.
10
16
  # Per ADR-0027 — primitives that programmatically create other primitives
11
17
  # do NOT auto-import them. Consumer (or demo shell) must explicitly import.
12
18
  composes:
@@ -72,7 +78,13 @@ states:
72
78
  traits: []
73
79
  tokens: {}
74
80
  a2ui:
75
- rules: []
81
+ rules:
82
+ - rule: 'Use for representing a single person, account, or entity. Image, initials, or icon fallback in priority order.'
83
+ reason: 'Canonical user-identity surface.'
84
+ - rule: 'For clusters of multiple users, wrap multiple <avatar-ui> in <avatar-group-ui> instead of placing them inline.'
85
+ reason: 'Group handles overlap-stacking + +N overflow.'
86
+ - rule: 'Do not embed inside <button-ui> for clickable avatars — make the <avatar-ui> itself the click target with role=''button''.'
87
+ reason: 'Button-inside-button is invalid; the avatar is the affordance.'
76
88
  anti_patterns: []
77
89
  examples:
78
90
  - name: chat-interface
@@ -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/Badge.json",
4
4
  "title": "Badge",
5
- "description": "Inline pill-shaped badge/tag. Text rendered via CSS attr().",
5
+ "description": "Inline pill-shaped badge — READ-ONLY status flag, count, or\nnotification dot. Text rendered via CSS `attr(text)`. Distinct from\n<tag-ui>, which is INTERACTIVE / removable and fires a `remove`\nevent. Use badge-ui for status flags (Beta / New / Deprecated),\nnotification counts, and unread indicators; use tag-ui for filter\nchips or user-managed labels.\n",
6
6
  "type": "object",
7
7
  "allOf": [
8
8
  {
@@ -1,5 +1,11 @@
1
1
  /**
2
- * `<badge-ui>` — Inline pill-shaped badge/tag. Text rendered via CSS attr().
2
+ * `<badge-ui>` — Inline pill-shaped badge READ-ONLY status flag, count, or
3
+ notification dot. Text rendered via CSS `attr(text)`. Distinct from
4
+ <tag-ui>, which is INTERACTIVE / removable and fires a `remove`
5
+ event. Use badge-ui for status flags (Beta / New / Deprecated),
6
+ notification counts, and unread indicators; use tag-ui for filter
7
+ chips or user-managed labels.
8
+
3
9
  *
4
10
  * @see https://ui-kit.exe.xyz/site/components/badge
5
11
  *
@@ -6,7 +6,13 @@ tag: badge-ui
6
6
  component: Badge
7
7
  category: display
8
8
  version: 1
9
- description: Inline pill-shaped badge/tag. Text rendered via CSS attr().
9
+ description: |
10
+ Inline pill-shaped badge — READ-ONLY status flag, count, or
11
+ notification dot. Text rendered via CSS `attr(text)`. Distinct from
12
+ <tag-ui>, which is INTERACTIVE / removable and fires a `remove`
13
+ event. Use badge-ui for status flags (Beta / New / Deprecated),
14
+ notification counts, and unread indicators; use tag-ui for filter
15
+ chips or user-managed labels.
10
16
  # Per ADR-0027 — primitives that programmatically create other primitives
11
17
  # do NOT auto-import them. Consumer (or demo shell) must explicitly import.
12
18
  composes:
@@ -70,7 +76,13 @@ states:
70
76
  traits: []
71
77
  tokens: {}
72
78
  a2ui:
73
- rules: []
79
+ rules:
80
+ - rule: 'Use for small status/count labels attached to another element (notification counts, status pills, version tags).'
81
+ reason: 'Different from <tag-ui> which is for free-standing taxonomy/filter labels.'
82
+ - rule: 'Place adjacent to or absolutely-positioned over the badged element, not inside it.'
83
+ reason: 'Light-DOM positioning; do not nest inside the badged element''s slot.'
84
+ - rule: 'For dismissable taxonomy labels (filter chips, selected items in multi-select), use <tag-ui> instead.'
85
+ reason: 'Badge is non-interactive; tag has close affordance.'
74
86
  anti_patterns: []
75
87
  examples:
76
88
  - name: chart-legend
@@ -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/Block.json",
4
4
  "title": "Block",
5
- "description": "Generic padded/margined content wrapper.",
5
+ "description": "Generic padded / margined content wrapper. Applies a configurable\npadding + margin scale via [padding] / [margin] attribute props,\nmapping to the canonical spacing tokens. Use as a lightweight\nspacing wrapper when <section-ui> would imply chrome the parent\ncontainer doesn't own. Not a layout primitive (no flex / grid) —\nfor layout use <col-ui> / <row-ui> / <stack-ui> / <grid-ui>.\n",
6
6
  "type": "object",
7
7
  "allOf": [
8
8
  {
@@ -17,7 +17,7 @@
17
17
  "const": "Block"
18
18
  },
19
19
  "margin": {
20
- "description": "Margin size",
20
+ "description": "Margin size (none/xs/sm/md/lg/xl). Accepts `@bp` notation: margin=\"none sm@md\" = no margin below md, sm from md up.",
21
21
  "type": "string",
22
22
  "enum": [
23
23
  "none",
@@ -30,7 +30,7 @@
30
30
  "default": "none"
31
31
  },
32
32
  "padding": {
33
- "description": "Padding amount, maps to spacing tokens",
33
+ "description": "Padding amount (none/xs/sm/md/lg/xl spacing tokens). Accepts `@bp` notation: padding=\"sm md@lg\" = sm below lg, md from lg up.",
34
34
  "type": "string",
35
35
  "enum": [
36
36
  "none",
@@ -71,7 +71,12 @@
71
71
  "developer"
72
72
  ],
73
73
  "name": "UIBlock",
74
- "related": [],
74
+ "related": [
75
+ "Section",
76
+ "Col",
77
+ "Row",
78
+ "Stack"
79
+ ],
75
80
  "slots": {},
76
81
  "states": [
77
82
  {
@@ -1,5 +1,11 @@
1
1
  /**
2
- * `<block-ui>` — Generic padded/margined content wrapper.
2
+ * `<block-ui>` — Generic padded / margined content wrapper. Applies a configurable
3
+ padding + margin scale via [padding] / [margin] attribute props,
4
+ mapping to the canonical spacing tokens. Use as a lightweight
5
+ spacing wrapper when <section-ui> would imply chrome the parent
6
+ container doesn't own. Not a layout primitive (no flex / grid) —
7
+ for layout use <col-ui> / <row-ui> / <stack-ui> / <grid-ui>.
8
+
3
9
  *
4
10
  * @see https://ui-kit.exe.xyz/site/components/block
5
11
  *
@@ -13,8 +19,8 @@
13
19
  import { UIElement } from '../../core/element.js';
14
20
 
15
21
  export class UIBlock extends UIElement {
16
- /** Margin size */
22
+ /** Margin size (none/xs/sm/md/lg/xl). Accepts `@bp` notation: margin="none sm@md" = no margin below md, sm from md up. */
17
23
  margin: 'none' | 'xs' | 'sm' | 'md' | 'lg' | 'xl';
18
- /** Padding amount, maps to spacing tokens */
24
+ /** Padding amount (none/xs/sm/md/lg/xl spacing tokens). Accepts `@bp` notation: padding="sm md@lg" = sm below lg, md from lg up. */
19
25
  padding: 'none' | 'xs' | 'sm' | 'md' | 'lg' | 'xl';
20
26
  }
@@ -6,10 +6,18 @@ tag: block-ui
6
6
  component: Block
7
7
  category: layout
8
8
  version: 1
9
- description: Generic padded/margined content wrapper.
9
+ description: |
10
+ Generic padded / margined content wrapper. Applies a configurable
11
+ padding + margin scale via [padding] / [margin] attribute props,
12
+ mapping to the canonical spacing tokens. Use as a lightweight
13
+ spacing wrapper when <section-ui> would imply chrome the parent
14
+ container doesn't own. Not a layout primitive (no flex / grid) —
15
+ for layout use <col-ui> / <row-ui> / <stack-ui> / <grid-ui>.
10
16
  props:
11
17
  margin:
12
- description: Margin size
18
+ description: >-
19
+ Margin size (none/xs/sm/md/lg/xl). Accepts `@bp` notation:
20
+ margin="none sm@md" = no margin below md, sm from md up.
13
21
  type: string
14
22
  default: none
15
23
  enum:
@@ -20,7 +28,9 @@ props:
20
28
  - lg
21
29
  - xl
22
30
  padding:
23
- description: Padding amount, maps to spacing tokens
31
+ description: >-
32
+ Padding amount (none/xs/sm/md/lg/xl → spacing tokens). Accepts `@bp`
33
+ notation: padding="sm md@lg" = sm below lg, md from lg up.
24
34
  type: string
25
35
  default: md
26
36
  enum:
@@ -40,7 +50,13 @@ tokens:
40
50
  --block-padding:
41
51
  description: Override padding value
42
52
  a2ui:
43
- rules: []
53
+ rules:
54
+ - rule: 'Generic semantic block — use for arbitrary content groupings without strong layout semantics.'
55
+ reason: 'Lowest-specificity layout primitive.'
56
+ - rule: 'For row/column layouts use <row-ui> / <col-ui>; for grid use <stack-ui>; block is for content-flow groupings.'
57
+ reason: 'Decision rule vs layout siblings.'
58
+ - rule: 'Block-ui does not impose padding/gap by default — wrap in <section-ui> if you want chrome.'
59
+ reason: 'Composition discipline.'
44
60
  anti_patterns: []
45
61
  examples:
46
62
  - name: basic-block
@@ -112,4 +128,8 @@ synonyms:
112
128
  - code
113
129
  - block
114
130
  - command
115
- related: []
131
+ related:
132
+ - Section
133
+ - Col
134
+ - Row
135
+ - Stack
@@ -22,6 +22,10 @@
22
22
  */
23
23
 
24
24
  import { UIElement } from '../../core/element.js';
25
+ import { parseResponsive, breakpoint } from '../../core/responsive.js';
26
+
27
+ const _SPACE = { none: '0', xs: 'var(--a-space-1)', sm: 'var(--a-space-2)', md: 'var(--a-space-4)', lg: 'var(--a-space-6)', xl: 'var(--a-space-10)' };
28
+ function _spaceToCss(v) { return _SPACE[v] ?? (/^\d+$/.test(v ?? '') ? `var(--a-space-${v})` : v ?? ''); }
25
29
 
26
30
  export class UIBlock extends UIElement {
27
31
  static properties = {
@@ -30,4 +34,23 @@ export class UIBlock extends UIElement {
30
34
  };
31
35
 
32
36
  static template = () => null;
37
+
38
+ render() {
39
+ const padding = this.padding;
40
+ const margin = this.margin;
41
+ const anyR = padding?.includes('@') || margin?.includes('@');
42
+ const bp = anyR ? breakpoint.value : '';
43
+
44
+ if (padding?.includes('@')) {
45
+ this.style.setProperty('--block-padding', _spaceToCss(parseResponsive(padding, bp)));
46
+ } else {
47
+ this.style.removeProperty('--block-padding');
48
+ }
49
+
50
+ if (margin?.includes('@')) {
51
+ this.style.setProperty('--block-margin', _spaceToCss(parseResponsive(margin, bp)));
52
+ } else {
53
+ this.style.removeProperty('--block-margin');
54
+ }
55
+ }
33
56
  }
@@ -65,7 +65,11 @@
65
65
  "back"
66
66
  ],
67
67
  "name": "UIBreadcrumb",
68
- "related": [],
68
+ "related": [
69
+ "AdminTopbar",
70
+ "Nav",
71
+ "Tabs"
72
+ ],
69
73
  "slots": {},
70
74
  "states": [
71
75
  {
@@ -40,7 +40,35 @@ states:
40
40
  traits: []
41
41
  tokens: {}
42
42
  a2ui:
43
- rules: []
43
+ rules:
44
+ - >-
45
+ Canonical placement: render <breadcrumb-ui> inside <admin-topbar>
46
+ for hierarchical page-context display. It is the topbar's heading
47
+ region — typically preceded by a sidebar-toggle <button-ui
48
+ icon="sidebar" variant="ghost" size="sm"> and followed by topbar
49
+ actions in [slot="action"]. The host stamps role="navigation" +
50
+ aria-label="Breadcrumb" automatically.
51
+ - >-
52
+ Child shape: each crumb is either an <a href> (ancestor link) or
53
+ a plain <span> (terminal / non-link current page). The LAST child
54
+ is the current page and MUST be a plain <span> — the component
55
+ auto-applies aria-current="page" and disables pointer events on
56
+ it. Optional first child may be an <icon-ui> (or <a> wrapping
57
+ one with aria-label) for an app / home glyph.
58
+ - >-
59
+ Separator + overflow: do NOT insert your own separator elements
60
+ ([data-sep] spans are stamped automatically between children).
61
+ For deep trails (4+ items) prefer the `collapse` attribute over
62
+ manual truncation; tune visible edges with [collapse-keep-leading]
63
+ / [collapse-keep-trailing]. Collapsed middle crumbs are presented
64
+ as a `…` <menu-ui data-overflow> popover.
65
+ - >-
66
+ Decision rule: <breadcrumb-ui> is read-only PATH-CONTEXT display
67
+ ("where am I"). For primary navigation (sidebar) use <nav-ui> +
68
+ <nav-item-ui> inside <admin-sidebar>. For switching sub-views
69
+ within a page use <tabs-ui>. Never use <breadcrumb-ui> as the
70
+ primary navigation control or wrap navigation controls (selects,
71
+ tabs, form controls) inside it.
44
72
  anti_patterns: []
45
73
  examples:
46
74
  - name: breadcrumb-nav
@@ -101,4 +129,7 @@ synonyms:
101
129
  - tabs
102
130
  - menu
103
131
  - pagination
104
- related: []
132
+ related:
133
+ - AdminTopbar
134
+ - Nav
135
+ - Tabs