@adia-ai/web-components 0.8.43 → 0.8.45

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 (113) hide show
  1. package/CHANGELOG.md +54 -0
  2. package/components/avatar/avatar.class.js +12 -1
  3. package/components/button/button.d.ts +4 -0
  4. package/components/chart/chart.a2ui.json +26 -0
  5. package/components/chart/chart.class.js +1304 -222
  6. package/components/chart/chart.css +151 -1
  7. package/components/chart/chart.d.ts +6 -0
  8. package/components/chart/chart.yaml +57 -0
  9. package/components/chart-legend/chart-legend.a2ui.json +17 -2
  10. package/components/chart-legend/chart-legend.class.js +69 -4
  11. package/components/chart-legend/chart-legend.css +65 -1
  12. package/components/chart-legend/chart-legend.d.ts +4 -2
  13. package/components/chart-legend/chart-legend.examples.md +4 -4
  14. package/components/chart-legend/chart-legend.yaml +43 -3
  15. package/components/combobox/combobox.a2ui.json +3 -0
  16. package/components/combobox/combobox.class.js +9 -8
  17. package/components/combobox/combobox.css +25 -4
  18. package/components/combobox/combobox.yaml +6 -0
  19. package/components/command/command.css +17 -1
  20. package/components/context-menu/context-menu.a2ui.json +8 -3
  21. package/components/context-menu/context-menu.class.js +46 -5
  22. package/components/context-menu/context-menu.d.ts +8 -3
  23. package/components/context-menu/context-menu.examples.md +2 -2
  24. package/components/context-menu/context-menu.yaml +22 -5
  25. package/components/heatmap/heatmap.a2ui.json +5 -0
  26. package/components/heatmap/heatmap.d.ts +2 -0
  27. package/components/heatmap/heatmap.yaml +8 -0
  28. package/components/input/input.a2ui.json +2 -2
  29. package/components/input/input.class.js +12 -7
  30. package/components/input/input.yaml +6 -5
  31. package/components/integration-card/integration-card.d.ts +2 -0
  32. package/components/nav/nav.a2ui.json +2 -2
  33. package/components/nav/nav.css +1 -1
  34. package/components/nav/nav.d.ts +1 -1
  35. package/components/nav/nav.yaml +14 -3
  36. package/components/nav-group/nav-group.css +37 -3
  37. package/components/noodles/noodles.a2ui.json +0 -15
  38. package/components/noodles/noodles.yaml +0 -12
  39. package/components/number-format/number-format.class.js +10 -0
  40. package/components/pagination/pagination.class.js +140 -26
  41. package/components/popover/popover.d.ts +2 -0
  42. package/components/progress/progress.class.js +11 -6
  43. package/components/range/range.class.js +9 -1
  44. package/components/search/search.class.js +39 -5
  45. package/components/select/select.a2ui.json +10 -1
  46. package/components/select/select.class.js +34 -14
  47. package/components/select/select.css +39 -1
  48. package/components/select/select.d.ts +2 -0
  49. package/components/select/select.yaml +19 -1
  50. package/components/stream/stream.d.ts +2 -0
  51. package/components/table/cell-types.js +9 -0
  52. package/components/table/table.a2ui.json +6 -1
  53. package/components/table/table.class.js +265 -34
  54. package/components/table/table.css +38 -10
  55. package/components/table/table.d.ts +3 -1
  56. package/components/table/table.examples.md +2 -2
  57. package/components/table/table.yaml +15 -2
  58. package/components/table-toolbar/table-toolbar.a2ui.json +43 -4
  59. package/components/table-toolbar/table-toolbar.class.js +407 -28
  60. package/components/table-toolbar/table-toolbar.css +299 -0
  61. package/components/table-toolbar/table-toolbar.d.ts +15 -1
  62. package/components/table-toolbar/table-toolbar.yaml +162 -15
  63. package/components/tag/tag.class.js +13 -1
  64. package/components/text/text.a2ui.json +3 -3
  65. package/components/text/text.d.ts +5 -3
  66. package/components/text/text.yaml +3 -3
  67. package/components/textarea/textarea.class.js +9 -1
  68. package/components/tour/tour.d.ts +10 -0
  69. package/core/a11y.d.ts +22 -0
  70. package/core/a11y.js +64 -0
  71. package/core/anchor.js +9 -5
  72. package/core/data-stream.js +37 -2
  73. package/core/element.js +1 -1
  74. package/core/index.d.ts +1 -0
  75. package/core/index.js +1 -0
  76. package/core/provider.d.ts +9 -13
  77. package/core/provider.js +9 -113
  78. package/core/store.d.ts +46 -0
  79. package/core/store.js +89 -0
  80. package/custom-elements.json +127 -33
  81. package/dist/host.min.css +1 -1
  82. package/dist/host.sheet.js +1 -1
  83. package/dist/theme-provider.min.js +1 -1
  84. package/dist/web-components.min.css +1 -1
  85. package/dist/web-components.min.js +119 -119
  86. package/dist/web-components.sheet.js +1 -1
  87. package/package.json +1 -1
  88. package/patterns/access-requests/access-requests.examples.html +1 -1
  89. package/patterns/admin-keys-and-export/admin-keys-and-export.examples.html +7 -7
  90. package/patterns/agent-cost/agent-cost.examples.html +6 -6
  91. package/patterns/agent-memory/agent-memory.examples.html +3 -3
  92. package/patterns/agent-prompt-library/agent-prompt-library.examples.html +8 -8
  93. package/patterns/agent-tool-call/agent-tool-call.examples.html +1 -1
  94. package/patterns/approvals/approvals.examples.html +6 -6
  95. package/patterns/audit-log/audit-log.examples.html +1 -1
  96. package/patterns/bulk-action-toolbar/bulk-action-toolbar.examples.html +4 -4
  97. package/patterns/chart-in-card/chart-in-card.examples.html +114 -0
  98. package/patterns/chart-in-card/chart-in-card.examples.js +37 -0
  99. package/patterns/comments-and-collaboration/comments-and-collaboration.examples.html +5 -5
  100. package/patterns/data-tables-inline-edit-and-tree/data-tables-inline-edit-and-tree.examples.html +2 -2
  101. package/patterns/diff-review/diff-review.examples.html +6 -6
  102. package/patterns/export-flow/export-flow.examples.html +2 -2
  103. package/patterns/filter-bar/filter-bar.examples.html +2 -2
  104. package/patterns/forms-conditional-and-autocomplete/forms-conditional-and-autocomplete.examples.html +2 -2
  105. package/patterns/inline-dialog/inline-dialog.examples.html +2 -2
  106. package/patterns/marketing-engagement/marketing-engagement.examples.html +4 -4
  107. package/patterns/notifications-bell-and-digest/notifications-bell-and-digest.examples.html +1 -1
  108. package/patterns/permissions-matrix/permissions-matrix.examples.html +1 -1
  109. package/patterns/permissions-sharing/permissions-sharing.examples.html +2 -2
  110. package/patterns/profile-public-and-verification/profile-public-and-verification.examples.html +4 -4
  111. package/patterns/search-discovery/search-discovery.examples.html +2 -2
  112. package/styles/api/sizing.css +46 -0
  113. package/styles/type/roles.css +29 -9
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@adia-ai/web-components",
3
- "version": "0.8.43",
3
+ "version": "0.8.45",
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>
@@ -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;
@@ -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>
@@ -33,7 +33,7 @@
33
33
  <header>
34
34
  <span slot="heading" variant="section">Pricing matrix</span>
35
35
  <text-ui slot="description" color="subtle">12 rows · 1 unsaved</text-ui>
36
- <button-ui slot="action" text="Add row" variant="ghost" size="sm" icon-leading="plus"></button-ui>
36
+ <button-ui slot="action" text="Add row" variant="ghost" size="sm" icon="plus"></button-ui>
37
37
  </header>
38
38
  <section bleed>
39
39
  <!-- A real <table> in <table-ui frameless raw> (consumer-owns-body mode) gives
@@ -90,7 +90,7 @@
90
90
  <span slot="heading" variant="section">Inventory — Q4 forecast</span>
91
91
  <text-ui slot="description" color="subtle">Auto-saving · 3 cells dirty</text-ui>
92
92
  <row-ui slot="action" gap="2">
93
- <button-ui text="Undo" variant="ghost" size="sm" icon-leading="arrow-counter-clockwise"></button-ui>
93
+ <button-ui text="Undo" variant="ghost" size="sm" icon="arrow-counter-clockwise"></button-ui>
94
94
  <button-ui text="Save now" variant="primary" size="sm"></button-ui>
95
95
  </row-ui>
96
96
  </header>
@@ -109,22 +109,22 @@
109
109
  <dt>Workspace name</dt>
110
110
  <dd>
111
111
  <row-ui gap="2" align="center">
112
- <tag-ui variant="danger" icon-leading="minus">Adia</tag-ui>
113
- <tag-ui variant="success" icon-leading="plus">Adia AI</tag-ui>
112
+ <tag-ui variant="danger">Adia</tag-ui>
113
+ <tag-ui variant="success">Adia AI</tag-ui>
114
114
  </row-ui>
115
115
  </dd>
116
116
  <dt>Default theme</dt>
117
117
  <dd>
118
118
  <row-ui gap="2" align="center">
119
- <tag-ui variant="danger" icon-leading="minus">light</tag-ui>
120
- <tag-ui variant="success" icon-leading="plus">auto</tag-ui>
119
+ <tag-ui variant="danger">light</tag-ui>
120
+ <tag-ui variant="success">auto</tag-ui>
121
121
  </row-ui>
122
122
  </dd>
123
123
  <dt>Member invites</dt>
124
124
  <dd>
125
125
  <row-ui gap="2" align="center">
126
- <tag-ui variant="danger" icon-leading="minus">Admin only</tag-ui>
127
- <tag-ui variant="success" icon-leading="plus">Anyone with link</tag-ui>
126
+ <tag-ui variant="danger">Admin only</tag-ui>
127
+ <tag-ui variant="success">Anyone with link</tag-ui>
128
128
  </row-ui>
129
129
  </dd>
130
130
  </description-list-ui>
@@ -45,7 +45,7 @@
45
45
  </section>
46
46
  <footer divider>
47
47
  <button-ui slot="action" text="Cancel" variant="ghost"></button-ui>
48
- <button-ui id="export-sync-submit" slot="action" text="Download CSV" variant="primary" icon-leading="download-simple"></button-ui>
48
+ <button-ui id="export-sync-submit" slot="action" text="Download CSV" variant="primary" icon="download-simple"></button-ui>
49
49
  </footer>
50
50
  </card-ui>
51
51
  </div>
@@ -134,7 +134,7 @@
134
134
  </section>
135
135
  <footer divider>
136
136
  <button-ui slot="action" text="Cancel" variant="ghost"></button-ui>
137
- <button-ui id="export-delivery-submit" slot="action" text="Download PDF" variant="primary" icon-leading="download-simple"></button-ui>
137
+ <button-ui id="export-delivery-submit" slot="action" text="Download PDF" variant="primary" icon="download-simple"></button-ui>
138
138
  </footer>
139
139
  </card-ui>
140
140
  </div>
@@ -35,7 +35,7 @@
35
35
  <span data-spacer></span>
36
36
  <button-ui text="Clear all" variant="ghost" size="sm"></button-ui>
37
37
  </row-ui>
38
- <popover-ui id="pat-filter-menu" anchor="previous">
38
+ <popover-ui id="pat-filter-menu">
39
39
  <action-list-ui>
40
40
  <action-item-ui icon="flag" text="Status" value="status"></action-item-ui>
41
41
  <action-item-ui icon="user" text="Owner" value="owner"></action-item-ui>
@@ -111,7 +111,7 @@
111
111
  &lt;button-ui text="Clear all" variant="ghost"&gt;&lt;/button-ui&gt;
112
112
  &lt;/row-ui&gt;
113
113
 
114
- &lt;popover-ui id="filter-menu" anchor="previous"&gt;
114
+ &lt;popover-ui id="filter-menu"&gt;
115
115
  &lt;action-list-ui&gt;...facets...&lt;/action-list-ui&gt;
116
116
  &lt;/popover-ui&gt;</code-ui>
117
117
  </section>
@@ -81,7 +81,7 @@
81
81
  <section>
82
82
  <col-ui gap="2">
83
83
  <field-ui label="Search address" hint="Start typing — we'll suggest matches">
84
- <input-ui name="address_query" placeholder="123 Main St" icon-leading="map-pin" value="500 market"></input-ui>
84
+ <input-ui name="address_query" placeholder="123 Main St" prefix="map-pin" value="500 market"></input-ui>
85
85
  </field-ui>
86
86
  <card-ui raw style="max-width: 100%;" data-shape="popover">
87
87
  <section>
@@ -133,7 +133,7 @@
133
133
  data-chunk-keywords="address fields street apt suite city state zip postal form expanded manual billing shipping layout" style="max-width: 560px;">
134
134
  <header>
135
135
  <span slot="heading" variant="section">Address details</span>
136
- <button-ui slot="action" text="Search again" variant="ghost" size="sm" icon-leading="arrow-counter-clockwise"></button-ui>
136
+ <button-ui slot="action" text="Search again" variant="ghost" size="sm" icon="arrow-counter-clockwise"></button-ui>
137
137
  </header>
138
138
  <section>
139
139
  <col-ui gap="3">
@@ -25,7 +25,7 @@
25
25
  data-chunk-domain="overlay"
26
26
  data-chunk-description="Inline rename popover — a Rename trigger opens an anchored mini-dialog card with a new-name input and Cancel / Save actions; no modal needed for a one-field edit."
27
27
  data-chunk-keywords="inline dialog rename popover anchored file name input save cancel mini one-field edit quick" placement="bottom-start">
28
- <button-ui slot="trigger" text="Rename" variant="ghost" size="sm" icon-leading="pencil-simple"></button-ui>
28
+ <button-ui slot="trigger" text="Rename" variant="ghost" size="sm" icon="pencil-simple"></button-ui>
29
29
  <card-ui slot="content" style="min-width: 320px;">
30
30
  <header>
31
31
  <span slot="heading" variant="section">Rename file</span>
@@ -120,7 +120,7 @@
120
120
  </section>
121
121
  <footer divider>
122
122
  <button-ui slot="action" text="Cancel" variant="ghost" data-popover-close></button-ui>
123
- <button-ui slot="action" text="Schedule" variant="primary" icon-leading="clock"></button-ui>
123
+ <button-ui slot="action" text="Schedule" variant="primary" icon="clock"></button-ui>
124
124
  </footer>
125
125
  </card-ui>
126
126
  </popover-ui>