@adia-ai/web-components 0.8.42 → 0.8.44

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 (186) hide show
  1. package/CHANGELOG.md +44 -0
  2. package/MIGRATION.md +130 -80
  3. package/USAGE.md +1 -1
  4. package/color/index.js +1 -1
  5. package/components/action-list/action-item.a2ui.json +3 -8
  6. package/components/action-list/action-item.yaml +10 -16
  7. package/components/action-list/action-list.class.js +5 -61
  8. package/components/action-list/action-list.d.ts +1 -3
  9. package/components/avatar/avatar.class.js +12 -1
  10. package/components/button/button.d.ts +4 -0
  11. package/components/button/button.yaml +1 -1
  12. package/components/calendar-picker/calendar-picker.a2ui.json +1 -1
  13. package/components/calendar-picker/calendar-picker.class.js +2 -3
  14. package/components/calendar-picker/calendar-picker.css +16 -18
  15. package/components/calendar-picker/calendar-picker.yaml +2 -2
  16. package/components/card/card.css +3 -3
  17. package/components/chart/chart.a2ui.json +29 -18
  18. package/components/chart/chart.class.js +1308 -266
  19. package/components/chart/chart.css +151 -1
  20. package/components/chart/chart.d.ts +9 -9
  21. package/components/chart/chart.yaml +63 -31
  22. package/components/chart-legend/chart-legend.a2ui.json +20 -14
  23. package/components/chart-legend/chart-legend.class.js +79 -58
  24. package/components/chart-legend/chart-legend.css +65 -1
  25. package/components/chart-legend/chart-legend.d.ts +5 -5
  26. package/components/chart-legend/chart-legend.examples.md +4 -4
  27. package/components/chart-legend/chart-legend.yaml +50 -20
  28. package/components/check/check.css +9 -0
  29. package/components/color-area/color-area.a2ui.json +1 -1
  30. package/components/color-area/color-area.class.js +2 -2
  31. package/components/color-area/color-area.css +4 -7
  32. package/components/color-area/color-area.d.ts +1 -1
  33. package/components/color-area/color-area.yaml +3 -3
  34. package/components/color-input/color-input.a2ui.json +1 -1
  35. package/components/color-input/color-input.class.js +1 -1
  36. package/components/color-input/color-input.yaml +2 -2
  37. package/components/combobox/combobox.a2ui.json +3 -0
  38. package/components/combobox/combobox.class.js +9 -8
  39. package/components/combobox/combobox.css +25 -4
  40. package/components/combobox/combobox.yaml +6 -0
  41. package/components/command/command.css +17 -1
  42. package/components/context-menu/context-menu.d.ts +2 -0
  43. package/components/drilldown/drilldown.a2ui.json +3 -0
  44. package/components/drilldown/drilldown.css +8 -1
  45. package/components/drilldown/drilldown.yaml +2 -0
  46. package/components/field/field.class.js +5 -5
  47. package/components/heatmap/heatmap.a2ui.json +5 -0
  48. package/components/heatmap/heatmap.d.ts +2 -0
  49. package/components/heatmap/heatmap.yaml +8 -0
  50. package/components/index.js +0 -4
  51. package/components/input/input.a2ui.json +4 -4
  52. package/components/input/input.class.js +20 -7
  53. package/components/input/input.css +6 -0
  54. package/components/input/input.yaml +15 -11
  55. package/components/integration-card/integration-card.d.ts +2 -0
  56. package/components/menu/menu-item.a2ui.json +3 -8
  57. package/components/menu/menu-item.yaml +13 -21
  58. package/components/menu/menu.class.js +5 -27
  59. package/components/menu/menu.d.ts +1 -3
  60. package/components/noodles/noodles.a2ui.json +0 -15
  61. package/components/noodles/noodles.yaml +0 -12
  62. package/components/number-format/number-format.class.js +10 -0
  63. package/components/pagination/pagination.class.js +88 -4
  64. package/components/pane/pane.a2ui.json +2 -12
  65. package/components/pane/pane.class.js +5 -30
  66. package/components/pane/pane.d.ts +3 -5
  67. package/components/pane/pane.yaml +7 -19
  68. package/components/popover/popover.d.ts +2 -0
  69. package/components/progress/progress.a2ui.json +1 -1
  70. package/components/progress/progress.class.js +13 -8
  71. package/components/progress/progress.d.ts +1 -1
  72. package/components/progress/progress.yaml +2 -2
  73. package/components/radio/radio.css +7 -0
  74. package/components/range/range.class.js +9 -1
  75. package/components/search/search.css +10 -1
  76. package/components/segment/segment.a2ui.json +1 -2
  77. package/components/segment/segment.css +10 -0
  78. package/components/segment/segment.yaml +1 -2
  79. package/components/segmented/segmented.a2ui.json +1 -3
  80. package/components/segmented/segmented.class.js +2 -2
  81. package/components/segmented/segmented.yaml +2 -4
  82. package/components/select/select.a2ui.json +5 -1
  83. package/components/select/select.class.js +14 -14
  84. package/components/select/select.css +20 -1
  85. package/components/select/select.yaml +7 -1
  86. package/components/step-progress/step-progress.yaml +1 -1
  87. package/components/stream/stream.d.ts +2 -0
  88. package/components/switch/switch.css +8 -0
  89. package/components/table/table.a2ui.json +6 -1
  90. package/components/table/table.class.js +18 -1
  91. package/components/table/table.css +31 -6
  92. package/components/table/table.d.ts +3 -1
  93. package/components/table/table.examples.md +2 -2
  94. package/components/table/table.yaml +9 -1
  95. package/components/table-toolbar/table-toolbar.a2ui.json +67 -2
  96. package/components/table-toolbar/table-toolbar.class.js +492 -17
  97. package/components/table-toolbar/table-toolbar.css +311 -0
  98. package/components/table-toolbar/table-toolbar.d.ts +17 -1
  99. package/components/table-toolbar/table-toolbar.yaml +220 -15
  100. package/components/tag/tag.class.js +13 -1
  101. package/components/text/text.a2ui.json +3 -3
  102. package/components/text/text.d.ts +5 -3
  103. package/components/text/text.yaml +3 -3
  104. package/components/textarea/textarea.class.js +9 -1
  105. package/components/textarea/textarea.css +4 -0
  106. package/components/time-picker/time-picker.yaml +3 -2
  107. package/components/tour/tour.d.ts +10 -0
  108. package/components/tree/tree.yaml +1 -1
  109. package/components/upload/upload.class.js +16 -0
  110. package/components/upload/upload.d.ts +7 -0
  111. package/components/upload/upload.yaml +7 -3
  112. package/core/a11y.d.ts +22 -0
  113. package/core/a11y.js +64 -0
  114. package/core/anchor.js +9 -5
  115. package/core/element.js +1 -1
  116. package/core/icons.js +2 -5
  117. package/custom-elements.json +142 -594
  118. package/dist/host.min.css +1 -1
  119. package/dist/host.sheet.js +1 -1
  120. package/dist/theme-provider.min.js +1 -1
  121. package/dist/web-components.min.css +1 -1
  122. package/dist/web-components.min.js +122 -119
  123. package/dist/web-components.sheet.js +1 -1
  124. package/index.d.ts +0 -15
  125. package/package.json +1 -1
  126. package/patterns/access-requests/access-requests.examples.html +1 -1
  127. package/patterns/admin-keys-and-export/admin-keys-and-export.examples.html +7 -7
  128. package/patterns/agent-cost/agent-cost.examples.html +6 -6
  129. package/patterns/agent-memory/agent-memory.examples.html +3 -3
  130. package/patterns/agent-prompt-library/agent-prompt-library.examples.html +8 -8
  131. package/patterns/agent-tool-call/agent-tool-call.examples.html +1 -1
  132. package/patterns/approvals/approvals.examples.html +6 -6
  133. package/patterns/audit-log/audit-log.examples.html +1 -1
  134. package/patterns/bulk-action-toolbar/bulk-action-toolbar.examples.html +4 -4
  135. package/patterns/chart-in-card/chart-in-card.examples.html +124 -10
  136. package/patterns/chart-in-card/chart-in-card.examples.js +37 -0
  137. package/patterns/comments-and-collaboration/comments-and-collaboration.examples.html +5 -5
  138. package/patterns/conversion-funnel/conversion-funnel.html +2 -2
  139. package/patterns/data-tables-inline-edit-and-tree/data-tables-inline-edit-and-tree.examples.html +2 -2
  140. package/patterns/diff-review/diff-review.examples.html +6 -6
  141. package/patterns/editor-shell/editor-shell.examples.html +3 -3
  142. package/patterns/export-flow/export-flow.examples.html +2 -2
  143. package/patterns/filter-bar/filter-bar.examples.html +2 -2
  144. package/patterns/forms-conditional-and-autocomplete/forms-conditional-and-autocomplete.examples.html +2 -2
  145. package/patterns/inline-dialog/inline-dialog.examples.html +2 -2
  146. package/patterns/marketing-engagement/marketing-engagement.examples.html +4 -4
  147. package/patterns/notifications-bell-and-digest/notifications-bell-and-digest.examples.html +1 -1
  148. package/patterns/permissions-matrix/permissions-matrix.examples.html +1 -1
  149. package/patterns/permissions-sharing/permissions-sharing.examples.html +2 -2
  150. package/patterns/profile-public-and-verification/profile-public-and-verification.examples.html +4 -4
  151. package/patterns/search-discovery/search-discovery.examples.html +2 -2
  152. package/styles/colors/semantics/features.css +8 -1
  153. package/styles/components.css +0 -4
  154. package/styles/type/roles.css +29 -9
  155. package/traits/arrow-grid-nav/arrow-grid-nav.js +1 -1
  156. package/traits/resize-observer/resize-observer.js +1 -1
  157. package/components/color-picker/color-picker.a2ui.json +0 -148
  158. package/components/color-picker/color-picker.class.js +0 -46
  159. package/components/color-picker/color-picker.css +0 -14
  160. package/components/color-picker/color-picker.d.ts +0 -99
  161. package/components/color-picker/color-picker.examples.md +0 -19
  162. package/components/color-picker/color-picker.js +0 -17
  163. package/components/color-picker/color-picker.yaml +0 -175
  164. package/components/datetime-picker/datetime-picker.a2ui.json +0 -256
  165. package/components/datetime-picker/datetime-picker.class.js +0 -58
  166. package/components/datetime-picker/datetime-picker.css +0 -11
  167. package/components/datetime-picker/datetime-picker.d.ts +0 -87
  168. package/components/datetime-picker/datetime-picker.examples.md +0 -25
  169. package/components/datetime-picker/datetime-picker.js +0 -17
  170. package/components/datetime-picker/datetime-picker.yaml +0 -254
  171. package/components/progress-row/progress-row.a2ui.json +0 -107
  172. package/components/progress-row/progress-row.class.js +0 -118
  173. package/components/progress-row/progress-row.css +0 -60
  174. package/components/progress-row/progress-row.d.ts +0 -24
  175. package/components/progress-row/progress-row.examples.md +0 -7
  176. package/components/progress-row/progress-row.js +0 -17
  177. package/components/progress-row/progress-row.yaml +0 -85
  178. package/components/toggle-group/toggle-group.a2ui.json +0 -148
  179. package/components/toggle-group/toggle-group.class.js +0 -195
  180. package/components/toggle-group/toggle-group.css +0 -127
  181. package/components/toggle-group/toggle-group.d.ts +0 -50
  182. package/components/toggle-group/toggle-group.examples.md +0 -33
  183. package/components/toggle-group/toggle-group.js +0 -18
  184. package/components/toggle-group/toggle-group.yaml +0 -135
  185. package/components/toggle-group/toggle-option.a2ui.json +0 -86
  186. package/components/toggle-group/toggle-option.yaml +0 -75
package/index.d.ts CHANGED
@@ -107,16 +107,6 @@ export type {
107
107
  ColorAreaConstraintClampEventDetail,
108
108
  } from './components/color-area/color-area.js';
109
109
 
110
- export type {
111
- UIColorPicker,
112
- ColorPickerChangeEvent,
113
- ColorPickerInputEvent,
114
- ColorPickerChangeEventDetail,
115
- ColorPickerClampRecord,
116
- ColorPickerConstraintClampEvent,
117
- ColorPickerConstraintClampEventDetail,
118
- } from './components/color-picker/color-picker.js';
119
-
120
110
  export type {
121
111
  UIRating,
122
112
  RatingChangeEvent,
@@ -201,7 +191,6 @@ export * from './components/pane/pane.js';
201
191
  export * from './components/pipeline-status/pipeline-status.js';
202
192
  export * from './components/popover/popover.js';
203
193
  export * from './components/progress/progress.js';
204
- export * from './components/progress-row/progress-row.js';
205
194
  export * from './components/richtext/richtext.js';
206
195
  export * from './components/row/row.js';
207
196
  export * from './components/segment/segment.js';
@@ -219,7 +208,6 @@ export * from './components/tag/tag.js';
219
208
  export * from './components/text/text.js';
220
209
  export * from './components/timeline/timeline.js';
221
210
  export * from './components/toast/toast.js';
222
- export * from './components/toggle-group/toggle-group.js';
223
211
  export * from './components/toggle-scheme/toggle-scheme.js';
224
212
  export * from './components/toolbar/toolbar.js';
225
213
  export * from './components/tooltip/tooltip.js';
@@ -251,7 +239,6 @@ declare global {
251
239
  'otp-input-ui': import('./components/otp-input/otp-input.js').UIOtpInput;
252
240
  'option-card-ui': import('./components/option-card/option-card.js').UIOptionCard;
253
241
  'color-area-ui': import('./components/color-area/color-area.js').UIColorArea;
254
- 'color-picker-ui': import('./components/color-picker/color-picker.js').UIColorPicker;
255
242
  'rating-ui': import('./components/rating/rating.js').UIRating;
256
243
  'code-ui': import('./components/code/code.js').UICode;
257
244
  'calendar-picker-ui': import('./components/calendar-picker/calendar-picker.js').UICalendarPicker;
@@ -307,7 +294,6 @@ declare global {
307
294
  'pipeline-status-ui': import('./components/pipeline-status/pipeline-status.js').UIPipelineStatus;
308
295
  'popover-ui': import('./components/popover/popover.js').UIPopover;
309
296
  'progress-ui': import('./components/progress/progress.js').UIProgress;
310
- 'progress-row-ui': import('./components/progress-row/progress-row.js').UIProgressRow;
311
297
  'richtext-ui': import('./components/richtext/richtext.js').UIRichText;
312
298
  'row-ui': import('./components/row/row.js').UIRow;
313
299
  'segment-ui': import('./components/segment/segment.js').UISegment;
@@ -325,7 +311,6 @@ declare global {
325
311
  'text-ui': import('./components/text/text.js').UIText;
326
312
  'timeline-ui': import('./components/timeline/timeline.js').UITimeline;
327
313
  'toast-ui': import('./components/toast/toast.js').UIToast;
328
- 'toggle-group-ui': import('./components/toggle-group/toggle-group.js').UIToggleGroup;
329
314
  'toggle-scheme-ui': import('./components/toggle-scheme/toggle-scheme.js').UIToggleScheme;
330
315
  'toolbar-ui': import('./components/toolbar/toolbar.js').UIToolbar;
331
316
  'tooltip-ui': import('./components/tooltip/tooltip.js').UITooltip;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@adia-ai/web-components",
3
- "version": "0.8.42",
3
+ "version": "0.8.44",
4
4
  "description": "AdiaUI web components \u2014 vanilla custom elements. A2UI runtime (renderer, registry, streams, wiring) lives in @adia-ai/a2ui.",
5
5
  "type": "module",
6
6
  "types": "./index.d.ts",
@@ -41,7 +41,7 @@
41
41
  </section>
42
42
  <footer divider>
43
43
  <button-ui slot="action" text="Go back" variant="ghost"></button-ui>
44
- <button-ui slot="action" text="Request access" variant="primary" icon-leading="paper-plane-tilt"></button-ui>
44
+ <button-ui slot="action" text="Request access" variant="primary" icon="paper-plane-tilt"></button-ui>
45
45
  </footer>
46
46
  </card-ui>
47
47
  </div>
@@ -33,13 +33,13 @@
33
33
  <header>
34
34
  <span slot="heading" variant="section">API keys</span>
35
35
  <text-ui slot="description" color="subtle">3 active · last rotated 12 days ago</text-ui>
36
- <button-ui slot="action" text="Create key" variant="primary" size="sm" icon-leading="plus"></button-ui>
36
+ <button-ui slot="action" text="Create key" variant="primary" size="sm" icon="plus"></button-ui>
37
37
  </header>
38
38
  <section bleed>
39
39
  <list-ui divider contained>
40
40
  <list-item-ui text="Production — backend">
41
41
  <icon-ui slot="icon" name="key" size="sm"></icon-ui>
42
- <span slot="description"><code>sk_live_…A4F2</code> · last used 4 minutes ago</span>
42
+ <span slot="description"><code>sk_test_…A4F2</code> · last used 4 minutes ago</span>
43
43
  <row-ui slot="action" gap="2" align="center">
44
44
  <tag-ui variant="primary">read · write</tag-ui>
45
45
  <button-ui icon="dots-three-vertical" variant="ghost" size="sm" aria-label="Manage"></button-ui>
@@ -47,7 +47,7 @@
47
47
  </list-item-ui>
48
48
  <list-item-ui text="CI — read-only">
49
49
  <icon-ui slot="icon" name="key" size="sm"></icon-ui>
50
- <span slot="description"><code>sk_live_…9821</code> · last used 2 hours ago</span>
50
+ <span slot="description"><code>sk_test_…9821</code> · last used 2 hours ago</span>
51
51
  <row-ui slot="action" gap="2" align="center">
52
52
  <tag-ui>read</tag-ui>
53
53
  <button-ui icon="dots-three-vertical" variant="ghost" size="sm" aria-label="Manage"></button-ui>
@@ -84,7 +84,7 @@
84
84
  <section>
85
85
  <col-ui gap="3">
86
86
  <field-ui label="Production — backend">
87
- <input-ui name="api_key" value="sk_live_4f8b2e7c91d2a48fA4F2" readonly icon-trailing="copy"></input-ui>
87
+ <input-ui name="api_key" value="sk_test_FAKEDEMOKEY0000A4F2" readonly suffix="copy"></input-ui>
88
88
  </field-ui>
89
89
  <alert-ui variant="warning" icon="warning">
90
90
  <col-ui slot="content" gap="0-5">
@@ -114,7 +114,7 @@
114
114
  <header>
115
115
  <span slot="heading" variant="section">Webhooks</span>
116
116
  <text-ui slot="description" color="subtle">2 endpoints · 1 failing</text-ui>
117
- <button-ui slot="action" text="Add endpoint" variant="primary" size="sm" icon-leading="plus"></button-ui>
117
+ <button-ui slot="action" text="Add endpoint" variant="primary" size="sm" icon="plus"></button-ui>
118
118
  </header>
119
119
  <section bleed>
120
120
  <list-ui divider contained>
@@ -211,7 +211,7 @@
211
211
  <span slot="description">Ready 2 hours ago · 4.2 MB · expires in 6 days</span>
212
212
  <row-ui slot="action" gap="2" align="center">
213
213
  <tag-ui variant="success">Ready</tag-ui>
214
- <button-ui text="Download" variant="primary" size="sm" icon-leading="download-simple"></button-ui>
214
+ <button-ui text="Download" variant="primary" size="sm" icon="download-simple"></button-ui>
215
215
  </row-ui>
216
216
  </list-item-ui>
217
217
  <list-item-ui text="Workspace · JSON">
@@ -229,7 +229,7 @@
229
229
  <section data-section data-property="composition">
230
230
  <h2 variant="section">Composition rules</h2>
231
231
  <ul>
232
- <li><strong>Show the prefix, never the full key</strong> — the list view always renders <code>sk_live_…A4F2</code>. The full secret only ever appears in the one-time reveal card; if the user lost it, they have to revoke + recreate. Storing the full key in the DB plaintext is the smell this convention prevents.</li>
232
+ <li><strong>Show the prefix, never the full key</strong> — the list view always renders <code>sk_test_…A4F2</code>. The full secret only ever appears in the one-time reveal card; if the user lost it, they have to revoke + recreate. Storing the full key in the DB plaintext is the smell this convention prevents.</li>
233
233
  <li><strong>One-time reveal needs a confirmation gate</strong> — the "I've stored it safely" button is the user's acknowledgment that they grabbed the key. Closing the modal/page without clicking it should still hide the secret (security default).</li>
234
234
  <li><strong>Webhook failures are first-class</strong> — a 503 tag + Retry button is the canonical row. Hiding failures in a sub-page guarantees they get ignored.</li>
235
235
  <li><strong>Data export is async, not sync</strong> — never block the UI on a "Generate now" call. Queue the job; email the link. Users with 1M-record workspaces shouldn't see a spinner.</li>
@@ -29,9 +29,9 @@
29
29
  data-chunk-domain="agent"
30
30
  data-chunk-description="Inline agent-cost strip — compact tag row showing per-response cost, token count, and latency, with the model name right-aligned. Rides under an agent reply as a usage footer."
31
31
  data-chunk-keywords="agent cost tokens latency model usage inline strip tags price per-response footer telemetry llm" gap="2" align="center" padding="2" style="max-width: 560px;">
32
- <tag-ui icon="coins">$0.014</tag-ui>
33
- <tag-ui icon="hash">2,184 tok</tag-ui>
34
- <tag-ui icon="timer">3.2s</tag-ui>
32
+ <tag-ui>$0.014</tag-ui>
33
+ <tag-ui>2,184 tok</tag-ui>
34
+ <tag-ui>3.2s</tag-ui>
35
35
  <row-ui grow></row-ui>
36
36
  <text-ui color="subtle" size="sm">claude-opus-4-7</text-ui>
37
37
  </row-ui>
@@ -55,8 +55,8 @@
55
55
  <section>
56
56
  <col-ui gap="3">
57
57
  <grid-ui columns="3" gap="2">
58
- <stat-ui label="Cost" value="$2.41" trend="up" delta="+18%"></stat-ui>
59
- <stat-ui label="Tokens" value="184k" trend="up" delta="+12%"></stat-ui>
58
+ <stat-ui label="Cost" value="$2.41" trend="up" change="+18%"></stat-ui>
59
+ <stat-ui label="Tokens" value="184k" trend="up" change="+12%"></stat-ui>
60
60
  <stat-ui label="Calls" value="47" trend="flat"></stat-ui>
61
61
  </grid-ui>
62
62
  <description-list-ui layout="inline" align="between">
@@ -69,7 +69,7 @@
69
69
  </section>
70
70
  <footer divider>
71
71
  <text-ui slot="description" color="subtle" size="sm">Plan limit: 1M tokens / day</text-ui>
72
- <button-ui slot="action" text="View invoice" variant="ghost" size="sm" icon-leading="receipt"></button-ui>
72
+ <button-ui slot="action" text="View invoice" variant="ghost" size="sm" icon="receipt"></button-ui>
73
73
  </footer>
74
74
  </card-ui>
75
75
  </div>
@@ -32,7 +32,7 @@
32
32
  <header>
33
33
  <span slot="heading" variant="section">Agent memory</span>
34
34
  <text-ui slot="description" color="subtle">14 entries across 3 sources</text-ui>
35
- <button-ui slot="action" text="Add memory" variant="ghost" size="sm" icon-leading="plus"></button-ui>
35
+ <button-ui slot="action" text="Add memory" variant="ghost" size="sm" icon="plus"></button-ui>
36
36
  </header>
37
37
  <section bleed>
38
38
  <list-ui divider contained>
@@ -96,8 +96,8 @@
96
96
  </col-ui>
97
97
  </section>
98
98
  <footer divider>
99
- <button-ui slot="action" text="Delete" variant="ghost" color="danger" size="sm" icon-leading="trash"></button-ui>
100
- <button-ui slot="action" text="Edit" variant="outline" size="sm" icon-leading="pencil"></button-ui>
99
+ <button-ui slot="action" text="Delete" variant="ghost" color="danger" size="sm" icon="trash"></button-ui>
100
+ <button-ui slot="action" text="Edit" variant="outline" size="sm" icon="pencil"></button-ui>
101
101
  </footer>
102
102
  </card-ui>
103
103
  </div>
@@ -32,7 +32,7 @@
32
32
  <header>
33
33
  <span slot="heading" variant="section">Prompt library</span>
34
34
  <text-ui slot="description" color="subtle">12 prompts · 4 categories</text-ui>
35
- <button-ui slot="action" text="New prompt" variant="primary" size="sm" icon-leading="plus"></button-ui>
35
+ <button-ui slot="action" text="New prompt" variant="primary" size="sm" icon="plus"></button-ui>
36
36
  </header>
37
37
  <section>
38
38
  <col-ui gap="3">
@@ -48,19 +48,19 @@
48
48
  <tag-ui>Personal · 2</tag-ui>
49
49
  </row-ui>
50
50
  <grid-ui columns="2" gap="2">
51
- <card-ui compact>
51
+ <card-ui size="sm">
52
52
  <header><span slot="heading">Code review</span><tag-ui slot="action">Pinned</tag-ui></header>
53
53
  <section><text-ui color="subtle" size="sm">Review the diff for security, perf, and naming. Flag with file:line. Suggest fixes inline.</text-ui></section>
54
54
  </card-ui>
55
- <card-ui compact>
55
+ <card-ui size="sm">
56
56
  <header><span slot="heading">Standup draft</span></header>
57
57
  <section><text-ui color="subtle" size="sm">Summarize what I did yesterday from my git log. Group by repo. End with today's plan.</text-ui></section>
58
58
  </card-ui>
59
- <card-ui compact>
59
+ <card-ui size="sm">
60
60
  <header><span slot="heading">Spec from notes</span></header>
61
61
  <section><text-ui color="subtle" size="sm">Turn these notes into a spec doc with sections: problem, design, alternatives, open questions.</text-ui></section>
62
62
  </card-ui>
63
- <card-ui compact>
63
+ <card-ui size="sm">
64
64
  <header><span slot="heading">Bug repro</span></header>
65
65
  <section><text-ui color="subtle" size="sm">Given this stack trace, propose three hypotheses ordered by likelihood. Show the test that would falsify each.</text-ui></section>
66
66
  </card-ui>
@@ -159,9 +159,9 @@
159
159
  </col-ui>
160
160
  </section>
161
161
  <footer divider>
162
- <button-ui slot="action" text="Delete" variant="ghost" color="danger" size="sm" icon-leading="trash"></button-ui>
163
- <button-ui slot="action" text="Edit" variant="ghost" size="sm" icon-leading="pencil"></button-ui>
164
- <button-ui slot="action" text="Run" variant="primary" size="sm" icon-leading="play"></button-ui>
162
+ <button-ui slot="action" text="Delete" variant="ghost" color="danger" size="sm" icon="trash"></button-ui>
163
+ <button-ui slot="action" text="Edit" variant="ghost" size="sm" icon="pencil"></button-ui>
164
+ <button-ui slot="action" text="Run" variant="primary" size="sm" icon="play"></button-ui>
165
165
  </footer>
166
166
  </card-ui>
167
167
  </div>
@@ -32,7 +32,7 @@
32
32
  <col-ui gap="2">
33
33
  <code-ui language="json">{ "query": "claude opus tool use latency", "max_results": 5 }</code-ui>
34
34
  <row-ui align="center" gap="2">
35
- <progress-ui indeterminate size="sm" style="flex: 1;"></progress-ui>
35
+ <progress-ui size="sm" style="flex: 1;"></progress-ui>
36
36
  <text-ui color="subtle" size="sm">Running…</text-ui>
37
37
  </row-ui>
38
38
  </col-ui>
@@ -30,7 +30,7 @@
30
30
  <header>
31
31
  <span slot="heading" variant="section">Pending your approval</span>
32
32
  <text-ui slot="description" color="subtle">5 items · 2 high priority</text-ui>
33
- <button-ui slot="action" text="Approve all" variant="ghost" size="sm" icon-leading="check"></button-ui>
33
+ <button-ui slot="action" text="Approve all" variant="ghost" size="sm" icon="check"></button-ui>
34
34
  </header>
35
35
  <section bleed>
36
36
  <!-- Canonical list-item rows: text + slot="description" + slot="icon" +
@@ -44,7 +44,7 @@
44
44
  <span slot="description"><tag-ui variant="warning">High</tag-ui> Jordan Lee · Engineering · 2 hours ago</span>
45
45
  <row-ui slot="action" gap="2" align="center">
46
46
  <button-ui text="Reject" variant="ghost" size="sm"></button-ui>
47
- <button-ui text="Approve" variant="primary" size="sm" icon-leading="check"></button-ui>
47
+ <button-ui text="Approve" variant="primary" size="sm" icon="check"></button-ui>
48
48
  </row-ui>
49
49
  </list-item-ui>
50
50
  <list-item-ui text="Vendor contract — Adobe Creative Cloud">
@@ -52,7 +52,7 @@
52
52
  <span slot="description">Avery Chen · Design · 5 hours ago</span>
53
53
  <row-ui slot="action" gap="2" align="center">
54
54
  <button-ui text="Reject" variant="ghost" size="sm"></button-ui>
55
- <button-ui text="Approve" variant="primary" size="sm" icon-leading="check"></button-ui>
55
+ <button-ui text="Approve" variant="primary" size="sm" icon="check"></button-ui>
56
56
  </row-ui>
57
57
  </list-item-ui>
58
58
  <list-item-ui text="Access request — production database">
@@ -60,7 +60,7 @@
60
60
  <span slot="description"><tag-ui variant="warning">High</tag-ui> Sam Park · Data · 1 day ago</span>
61
61
  <row-ui slot="action" gap="2" align="center">
62
62
  <button-ui text="Reject" variant="ghost" size="sm"></button-ui>
63
- <button-ui text="Approve" variant="primary" size="sm" icon-leading="check"></button-ui>
63
+ <button-ui text="Approve" variant="primary" size="sm" icon="check"></button-ui>
64
64
  </row-ui>
65
65
  </list-item-ui>
66
66
  <list-item-ui text="Travel — SF → NYC, May 12–14">
@@ -68,7 +68,7 @@
68
68
  <span slot="description">Riley Tan · Sales · 2 days ago</span>
69
69
  <row-ui slot="action" gap="2" align="center">
70
70
  <button-ui text="Reject" variant="ghost" size="sm"></button-ui>
71
- <button-ui text="Approve" variant="primary" size="sm" icon-leading="check"></button-ui>
71
+ <button-ui text="Approve" variant="primary" size="sm" icon="check"></button-ui>
72
72
  </row-ui>
73
73
  </list-item-ui>
74
74
  </list-ui>
@@ -105,7 +105,7 @@
105
105
  <footer divider>
106
106
  <button-ui slot="action" text="Reject" variant="ghost"></button-ui>
107
107
  <button-ui slot="action" text="Request changes" variant="ghost"></button-ui>
108
- <button-ui slot="action" text="Approve" variant="primary" icon-leading="check"></button-ui>
108
+ <button-ui slot="action" text="Approve" variant="primary" icon="check"></button-ui>
109
109
  </footer>
110
110
  </card-ui>
111
111
  </div>
@@ -46,7 +46,7 @@
46
46
  <footer divider>
47
47
  <text-ui color="subtle" size="sm">Showing 8 of 247 events</text-ui>
48
48
  <row-ui slot="action" gap="2">
49
- <button-ui text="Export" variant="ghost" size="sm" icon-leading="download-simple"></button-ui>
49
+ <button-ui text="Export" variant="ghost" size="sm" icon="download-simple"></button-ui>
50
50
  <button-ui text="Load older" variant="ghost" size="sm"></button-ui>
51
51
  </row-ui>
52
52
  </footer>
@@ -113,11 +113,11 @@
113
113
  <span data-bulk-controls></span>
114
114
  </toolbar-group-ui>
115
115
  <toolbar-group-ui>
116
- <button-ui icon="archive" icon-only aria-label="Archive" variant="ghost" size="sm" data-bulk-action="archive"></button-ui>
117
- <button-ui icon="download-simple" icon-only aria-label="Export" variant="ghost" size="sm" data-bulk-action="export"></button-ui>
118
- <button-ui icon="folder-simple" icon-only aria-label="Move" variant="ghost" size="sm" data-bulk-action="move"></button-ui>
116
+ <button-ui icon="archive" aria-label="Archive" variant="ghost" size="sm" data-bulk-action="archive"></button-ui>
117
+ <button-ui icon="download-simple" aria-label="Export" variant="ghost" size="sm" data-bulk-action="export"></button-ui>
118
+ <button-ui icon="folder-simple" aria-label="Move" variant="ghost" size="sm" data-bulk-action="move"></button-ui>
119
119
  <divider-ui vertical></divider-ui>
120
- <button-ui icon="trash" icon-only aria-label="Delete" variant="ghost" size="sm" data-bulk-action="delete"></button-ui>
120
+ <button-ui icon="trash" aria-label="Delete" variant="ghost" size="sm" data-bulk-action="delete"></button-ui>
121
121
  <divider-ui vertical></divider-ui>
122
122
  <button-ui text="Clear" variant="ghost" size="sm" data-bulk-clear></button-ui>
123
123
  </toolbar-group-ui>
@@ -52,7 +52,7 @@
52
52
  <text-ui slot="description" color="subtle">Last 12 months</text-ui>
53
53
  </header>
54
54
  <section>
55
- <chart-ui id="pat-revenue" type="bar" x="month" y="revenue" hide-values></chart-ui>
55
+ <chart-ui id="pat-revenue" type="bar" x="month" y="revenue" no-values></chart-ui>
56
56
  </section>
57
57
  <footer>
58
58
  <button-ui text="View report" variant="outline" stretch></button-ui>
@@ -77,7 +77,7 @@
77
77
  </span>
78
78
  </header>
79
79
  <section>
80
- <chart-ui id="pat-mrr" type="line" x="month" y="revenue" smooth="0.4" hide-values></chart-ui>
80
+ <chart-ui id="pat-mrr" type="line" x="month" y="revenue" smooth="0.4" no-values></chart-ui>
81
81
  </section>
82
82
  </card-ui>
83
83
  </div>
@@ -99,7 +99,7 @@
99
99
  </header>
100
100
  <section>
101
101
  <col-ui gap="3">
102
- <chart-ui id="pat-sessions" type="bar" x="day" y="sessions" hide-values></chart-ui>
102
+ <chart-ui id="pat-sessions" type="bar" x="day" y="sessions" no-values></chart-ui>
103
103
  <grid-ui columns="3" gap="2">
104
104
  <card-ui><section><stat-ui label="Desktop" value="2,840"></stat-ui></section></card-ui>
105
105
  <card-ui><section><stat-ui label="Mobile" value="1,590"></stat-ui></section></card-ui>
@@ -126,7 +126,7 @@
126
126
  <text-ui slot="description" color="subtle">January – March 2024</text-ui>
127
127
  </header>
128
128
  <section>
129
- <chart-ui id="pat-trend-revenue" type="area" x="month" y="revenue" hide-values></chart-ui>
129
+ <chart-ui id="pat-trend-revenue" type="area" x="month" y="revenue" no-values></chart-ui>
130
130
  </section>
131
131
  <footer>
132
132
  <span slot="heading">Trending up by 5.2% this month</span>
@@ -175,7 +175,7 @@
175
175
  </segmented-ui>
176
176
  </header>
177
177
  <section>
178
- <chart-ui id="pat-filter-sessions" type="line" x="day" y="sessions" hide-values></chart-ui>
178
+ <chart-ui id="pat-filter-sessions" type="line" x="day" y="sessions" no-values></chart-ui>
179
179
  </section>
180
180
  </card-ui>
181
181
  </div>
@@ -186,8 +186,8 @@
186
186
  <h2 variant="section">Full-bleed chart + legend band</h2>
187
187
  <p data-note>
188
188
  <code>bleed</code> only earns true edge-to-edge treatment for bare plotted
189
- marks — a sparkline, or another chart type with both <code>hide-grid</code>
190
- and <code>hide-values</code> set (gh#1095). A multi-series chart still
189
+ marks — a sparkline, or another chart type with both <code>no-grid</code>
190
+ and <code>no-values</code> set (gh#1095). A multi-series chart still
191
191
  needs a legend, so keep <code>&lt;chart-legend-ui&gt;</code> OUT of the
192
192
  bled section — wire it to the chart via <code>[for]</code> in a normal
193
193
  (inset) section below instead. It reads as its own band beneath the
@@ -204,7 +204,7 @@
204
204
  <text-ui slot="description" color="subtle">Last 6 months</text-ui>
205
205
  </header>
206
206
  <section bleed>
207
- <chart-ui id="pat-bleed-legend-chart" type="multi-line" x="month" y="revenue,users,churn" hide-grid hide-values></chart-ui>
207
+ <chart-ui id="pat-bleed-legend-chart" type="multi-line" x="month" y="revenue,users,churn" no-grid no-values></chart-ui>
208
208
  </section>
209
209
  <section>
210
210
  <chart-legend-ui for="pat-bleed-legend-chart" shape="line"></chart-legend-ui>
@@ -214,6 +214,120 @@
214
214
  </div>
215
215
  </section>
216
216
 
217
+ <section data-section data-property="full-bleed-card-padding-none">
218
+ <h2 variant="section">Full-bleed via card padding="none" (Chart 2.0)</h2>
219
+ <p data-note>
220
+ Chart 2.0's own full-bleed mechanism (<a href="/site/docs/adr/adr-0074">ADR-0074</a>'s
221
+ <code>ratio</code> grammar + <a href="/site/docs/spec/spec-charts-2-0-ratio-and-surface">the
222
+ ratio-and-surface SPEC</a>'s REQ-R-001) is <strong>not</strong> the same affordance as
223
+ <code>section[bleed]</code> above — <code>&lt;card-ui padding="none"&gt;</code> zeroes the
224
+ CARD's own outer inset while the chart keeps its own internal plot margins (axis-label
225
+ gutters, computed per-ratio — REQ-R-004), so axis ticks and value labels render normally
226
+ with no clipping risk; <code>[bleed]</code> instead asks the chart itself to render bare
227
+ marks (hence its own <code>no-grid</code>/<code>no-values</code> requirement above). Pick
228
+ <code>padding="none"</code> for a premium edge-to-edge card tile that still shows a full
229
+ axis; pick <code>[bleed]</code> for a truly bare sparkline-style mark.
230
+ </p>
231
+ <div data-artifact-container>
232
+ <div data-artifact-item data-artifact-label="full-bleed bar, 3:2 (wide)">
233
+ <card-ui padding="none" data-chunk="chart-in-card-full-bleed-bar-wide" data-chunk-kind="block"
234
+ data-chunk-domain="dashboard"
235
+ data-chunk-description="Full-bleed bar chart card pinned to the 3:2 wide ratio — Revenue by month, edge-to-edge against the card's own quiet container-low background, no outer card padding."
236
+ data-chunk-keywords="chart card bar full-bleed edge-to-edge revenue wide ratio padding none dashboard analytics premium" style="max-width:420px;">
237
+ <section>
238
+ <chart-ui id="pat-bleed-bar-wide" type="bar" ratio="3:2" x="month" y="revenue"></chart-ui>
239
+ </section>
240
+ </card-ui>
241
+ </div>
242
+ <div data-artifact-item data-artifact-label="full-bleed line, 1:1 (square)">
243
+ <card-ui padding="none" data-chunk="chart-in-card-full-bleed-line-square" data-chunk-kind="block"
244
+ data-chunk-domain="dashboard"
245
+ data-chunk-description="Full-bleed line chart card pinned to the 1:1 square ratio — Users trend, edge-to-edge against the card's own quiet container-low background, no outer card padding."
246
+ data-chunk-keywords="chart card line full-bleed edge-to-edge users square ratio padding none dashboard analytics premium" style="max-width:320px;">
247
+ <section>
248
+ <chart-ui id="pat-bleed-line-square" type="line" ratio="1:1" x="month" y="users" smooth="0.4"></chart-ui>
249
+ </section>
250
+ </card-ui>
251
+ </div>
252
+ <div data-artifact-item data-artifact-label="full-bleed bar, 2:3 (tall)">
253
+ <card-ui padding="none" data-chunk="chart-in-card-full-bleed-bar-tall" data-chunk-kind="block"
254
+ data-chunk-domain="dashboard"
255
+ data-chunk-description="Full-bleed bar chart card pinned to the 2:3 tall ratio — Sessions by day, rendered in horizontal-bar orientation (category on Y) for the narrow column, edge-to-edge against the card's own quiet container-low background."
256
+ data-chunk-keywords="chart card bar full-bleed edge-to-edge sessions tall ratio horizontal padding none dashboard analytics premium" style="max-width:220px;">
257
+ <section>
258
+ <chart-ui id="pat-bleed-bar-tall" type="bar" ratio="2:3" x="day" y="sessions"></chart-ui>
259
+ </section>
260
+ </card-ui>
261
+ </div>
262
+ </div>
263
+ </section>
264
+
265
+ <section data-section data-property="full-bleed-ratio-legend">
266
+ <h2 variant="section">Full-bleed + ratio + legend, together (plan step 7)</h2>
267
+ <p data-note>
268
+ The full-bleed proof above (bar/line/bar) uses single-series, no-legend
269
+ types — REQ-R-006's own ≥3-instance floor. This trio completes the
270
+ pattern for the more common multi-series case: a full-bleed
271
+ (<code>card-ui padding="none"</code>) chart pinned to a studied ratio,
272
+ paired with a <code>&lt;chart-legend-ui for&gt;</code> that mirrors the
273
+ same resolved bucket (<a href="/site/components/chart-legend">step 5</a>,
274
+ REQ-R-005) rather than running its own classification. The legend sits
275
+ in a plain <code>&lt;section&gt;</code> below the chart's — its own
276
+ internal row padding (<code>--chart-legend-py</code>) supplies the
277
+ breathing room a zero-inset card no longer provides.
278
+ </p>
279
+ <div data-artifact-container>
280
+ <div data-artifact-item data-artifact-label="full-bleed stacked-bar + row legend, 3:2 (wide)">
281
+ <card-ui padding="none" data-chunk="chart-in-card-full-bleed-legend-stacked-wide" data-chunk-kind="block"
282
+ data-chunk-domain="dashboard"
283
+ data-chunk-description="Full-bleed stacked-bar chart card pinned to the 3:2 wide ratio with a mirrored horizontal-row legend below — Sessions by device segment, edge-to-edge against the card's own quiet container-low background."
284
+ data-chunk-keywords="chart card stacked-bar full-bleed edge-to-edge legend row wide ratio segments sessions device dashboard analytics premium" style="max-width:420px;">
285
+ <header>
286
+ <span slot="heading"><h3>Sessions by device</h3></span>
287
+ </header>
288
+ <section>
289
+ <chart-ui id="pat-fb-legend-32-chart" type="stacked-bar" ratio="3:2" x="quarter" y="desktop,mobile,tablet"></chart-ui>
290
+ </section>
291
+ <section>
292
+ <chart-legend-ui for="pat-fb-legend-32-chart"></chart-legend-ui>
293
+ </section>
294
+ </card-ui>
295
+ </div>
296
+ <div data-artifact-item data-artifact-label="full-bleed composed + grid legend, 1:1 (square, deemphasized secondary)">
297
+ <card-ui padding="none" data-chunk="chart-in-card-full-bleed-legend-composed-square" data-chunk-kind="block"
298
+ data-chunk-domain="dashboard"
299
+ data-chunk-description="Full-bleed composed bar+line chart card pinned to the 1:1 square ratio with a mirrored 2-column grid legend below — Revenue bars with a de-emphasized Growth line overlay, edge-to-edge against the card's own quiet container-low background."
300
+ data-chunk-keywords="chart card composed full-bleed edge-to-edge legend grid square ratio revenue growth deemphasized dashboard analytics premium" style="max-width:320px;">
301
+ <header>
302
+ <span slot="heading"><h3>Revenue vs. growth</h3></span>
303
+ </header>
304
+ <section>
305
+ <chart-ui id="pat-fb-legend-11-chart" type="composed" ratio="1:1" x="quarter" y="revenue,growth"></chart-ui>
306
+ </section>
307
+ <section>
308
+ <chart-legend-ui for="pat-fb-legend-11-chart"></chart-legend-ui>
309
+ </section>
310
+ </card-ui>
311
+ </div>
312
+ <div data-artifact-item data-artifact-label="full-bleed grouped-bar + list legend, 2:3 (tall)">
313
+ <card-ui padding="none" data-chunk="chart-in-card-full-bleed-legend-grouped-tall" data-chunk-kind="block"
314
+ data-chunk-domain="dashboard"
315
+ data-chunk-description="Full-bleed grouped-bar chart card pinned to the 2:3 tall ratio with a mirrored vertical-list legend below — Desktop vs Mobile signups by quarter, rotated to horizontal bars for the narrow column, edge-to-edge against the card's own quiet container-low background."
316
+ data-chunk-keywords="chart card grouped-bar full-bleed edge-to-edge legend list tall ratio desktop mobile signups quarter dashboard analytics premium" style="max-width:220px;">
317
+ <header>
318
+ <span slot="heading"><h3>Signups by platform</h3></span>
319
+ </header>
320
+ <section>
321
+ <chart-ui id="pat-fb-legend-23-chart" type="grouped-bar" ratio="2:3" x="quarter" y="desktop,mobile"></chart-ui>
322
+ </section>
323
+ <section>
324
+ <chart-legend-ui for="pat-fb-legend-23-chart"></chart-legend-ui>
325
+ </section>
326
+ </card-ui>
327
+ </div>
328
+ </div>
329
+ </section>
330
+
217
331
  <section data-section data-property="anatomy">
218
332
  <h2 variant="section">Anatomy</h2>
219
333
  <code-ui language="html">&lt;card-ui&gt;
@@ -239,9 +353,9 @@
239
353
  <h2 variant="section">Rules</h2>
240
354
  <ul>
241
355
  <li>For sparklines, set <code>bleed</code> on the card's <code>&lt;section&gt;</code> so the line touches the edges.</li>
242
- <li><code>bleed</code> is a bare-marks affordance, not a general "edge-to-edge chart" switch (gh#1095). It's safe for a sparkline, or for any other chart <code>type</code> that also sets both <code>hide-grid</code> and <code>hide-values</code> — i.e. nothing that renders axis ticks, gridlines, or value text. A chart that still shows guides or values needs the card's normal inset so that text doesn't collide with (and clip under) the card's rounded corners; card.css restores the inset automatically if it detects either case, so a forgotten <code>hide-grid</code>/<code>hide-values</code> fails safe rather than clipping silently.</li>
356
+ <li><code>bleed</code> is a bare-marks affordance, not a general "edge-to-edge chart" switch (gh#1095). It's safe for a sparkline, or for any other chart <code>type</code> that also sets both <code>no-grid</code> and <code>no-values</code> — i.e. nothing that renders axis ticks, gridlines, or value text. A chart that still shows guides or values needs the card's normal inset so that text doesn't collide with (and clip under) the card's rounded corners; card.css restores the inset automatically if it detects either case, so a forgotten <code>no-grid</code>/<code>no-values</code> fails safe rather than clipping silently.</li>
243
357
  <li>Never put <code>&lt;chart-legend-ui&gt;</code> inside a <code>bleed</code> section — its badge rows need their own breathing room too. Place it in a plain <code>&lt;section&gt;</code> immediately after the chart's section, wired via <code>chart-legend-ui[for="&lt;chart id&gt;"]</code> (mirrors <code>.legendData</code>; see the "Full-bleed chart + legend band" example above and <a href="/site/components/chart-legend">chart-legend-ui</a>'s own <code>for</code> docs). card.css also restores the section's inset if a legend ends up inside a bled section anyway, so the fallback stays readable rather than edge-clipped.</li>
244
- <li>Put <code>hide-values</code> on bar/line charts inside cards — the stat in the header already shows the current number.</li>
358
+ <li>Put <code>no-values</code> on bar/line charts inside cards — the stat in the header already shows the current number.</li>
245
359
  <li>Use <code>&lt;stat-ui&gt;</code> in the heading slot only when the card's primary metric is a single number; otherwise use <code>&lt;h3&gt;</code> + description.</li>
246
360
  <li>Keep breakdowns shallow — 3–4 stats max. More belongs in a full section, not inside a tile.</li>
247
361
  </ul>
@@ -55,4 +55,41 @@ export default function setup(router) {
55
55
 
56
56
  const bleedLegend = router.querySelector('#pat-bleed-legend-chart');
57
57
  if (bleedLegend) bleedLegend.data = growthMetrics;
58
+
59
+ // Wave A (gh#1624 plan step 2) — full-bleed `card-ui[padding="none"]`
60
+ // proof set, one instance per ratio bucket.
61
+ const bleedBarWide = router.querySelector('#pat-bleed-bar-wide');
62
+ if (bleedBarWide) bleedBarWide.data = monthlyRevenue;
63
+
64
+ const bleedLineSquare = router.querySelector('#pat-bleed-line-square');
65
+ if (bleedLineSquare) bleedLineSquare.data = monthlyRevenue.map(d => ({ month: d.month, users: Math.round(d.revenue / 3) }));
66
+
67
+ const bleedBarTall = router.querySelector('#pat-bleed-bar-tall');
68
+ if (bleedBarTall) bleedBarTall.data = sessions;
69
+
70
+ // Step 7 (gh#1624 plan step 7) — full-bleed × ratio × chart-legend-ui
71
+ // mirroring, together, across three multi-series types (one per ratio).
72
+ const fbLegendStacked = router.querySelector('#pat-fb-legend-32-chart');
73
+ if (fbLegendStacked) fbLegendStacked.data = [
74
+ { quarter: 'Q1', desktop: 1200, mobile: 640, tablet: 180 },
75
+ { quarter: 'Q2', desktop: 1350, mobile: 780, tablet: 210 },
76
+ { quarter: 'Q3', desktop: 1180, mobile: 860, tablet: 195 },
77
+ { quarter: 'Q4', desktop: 1420, mobile: 910, tablet: 230 },
78
+ ];
79
+
80
+ const fbLegendComposed = router.querySelector('#pat-fb-legend-11-chart');
81
+ if (fbLegendComposed) fbLegendComposed.data = [
82
+ { quarter: 'Q1', revenue: 40, growth: 60 },
83
+ { quarter: 'Q2', revenue: 55, growth: 70 },
84
+ { quarter: 'Q3', revenue: 45, growth: 58 },
85
+ { quarter: 'Q4', revenue: 70, growth: 82 },
86
+ ];
87
+
88
+ const fbLegendGrouped = router.querySelector('#pat-fb-legend-23-chart');
89
+ if (fbLegendGrouped) fbLegendGrouped.data = [
90
+ { quarter: 'Q1', desktop: 820, mobile: 640 },
91
+ { quarter: 'Q2', desktop: 910, mobile: 780 },
92
+ { quarter: 'Q3', desktop: 860, mobile: 890 },
93
+ { quarter: 'Q4', desktop: 1020, mobile: 950 },
94
+ ];
58
95
  }
@@ -31,7 +31,7 @@
31
31
  <header>
32
32
  <span slot="heading" variant="section">Discussion</span>
33
33
  <text-ui slot="description" color="subtle">3 comments · 2 participants</text-ui>
34
- <button-ui slot="action" text="Resolve" variant="ghost" size="sm" icon-leading="check"></button-ui>
34
+ <button-ui slot="action" text="Resolve" variant="ghost" size="sm" icon="check"></button-ui>
35
35
  </header>
36
36
  <section>
37
37
  <col-ui gap="3">
@@ -44,8 +44,8 @@
44
44
  </row-ui>
45
45
  <text-ui>Should the OKLCH ramp here use the chrome or the data scale? <text-ui color="accent">@Kim</text-ui> what's the convention?</text-ui>
46
46
  <row-ui gap="1">
47
- <tag-ui icon-leading="thumbs-up">2</tag-ui>
48
- <tag-ui icon-leading="eyes">1</tag-ui>
47
+ <tag-ui>2</tag-ui>
48
+ <tag-ui>1</tag-ui>
49
49
  <button-ui text="Reply" variant="ghost" size="sm"></button-ui>
50
50
  </row-ui>
51
51
  </col-ui>
@@ -59,7 +59,7 @@
59
59
  </row-ui>
60
60
  <text-ui>Chrome — the data scale is reserved for visualization series. Spec at <text-ui color="accent">.claude/docs/specs/component-token-contract.md</text-ui>.</text-ui>
61
61
  <row-ui gap="1">
62
- <tag-ui icon-leading="thumbs-up">3</tag-ui>
62
+ <tag-ui>3</tag-ui>
63
63
  <button-ui text="Reply" variant="ghost" size="sm"></button-ui>
64
64
  </row-ui>
65
65
  </col-ui>
@@ -196,7 +196,7 @@
196
196
  <section>
197
197
  <col-ui gap="2">
198
198
  <field-ui>
199
- <input-ui placeholder="Search emoji…" icon-leading="magnifying-glass"></input-ui>
199
+ <input-ui placeholder="Search emoji…" prefix="magnifying-glass"></input-ui>
200
200
  </field-ui>
201
201
  <col-ui gap="1">
202
202
  <text-ui strong size="sm" color="subtle">Frequently used</text-ui>