@adia-ai/web-components 0.8.21 → 0.8.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (86) hide show
  1. package/CHANGELOG.md +56 -0
  2. package/MIGRATION.md +9 -0
  3. package/components/agent-trace/agent-trace.js +4 -1
  4. package/components/alert/alert.a2ui.json +1 -1
  5. package/components/alert/alert.css +44 -5
  6. package/components/alert/alert.yaml +8 -4
  7. package/components/canvas/canvas.js +4 -1
  8. package/components/chat-thread/chat-input.js +4 -1
  9. package/components/code/code.css +29 -26
  10. package/components/combobox/combobox.a2ui.json +1 -1
  11. package/components/combobox/combobox.class.js +14 -4
  12. package/components/combobox/combobox.css +52 -4
  13. package/components/combobox/combobox.yaml +5 -1
  14. package/components/description-list/description-list.css +9 -0
  15. package/components/drawer/drawer.css +16 -0
  16. package/components/field/field.css +4 -1
  17. package/components/list/list.css +12 -1
  18. package/components/nav-group/nav-group.class.js +45 -2
  19. package/components/nav-group/nav-group.css +11 -2
  20. package/components/progress-row/progress-row.class.js +10 -2
  21. package/components/richtext/richtext.css +7 -0
  22. package/components/select/select.a2ui.json +5 -0
  23. package/components/select/select.class.js +39 -9
  24. package/components/select/select.yaml +13 -0
  25. package/components/stat/stat.js +4 -1
  26. package/components/stepper/stepper.css +25 -20
  27. package/components/table/table.a2ui.json +15 -1
  28. package/components/table/table.class.js +14 -1
  29. package/components/table/table.css +68 -3
  30. package/components/table/table.d.ts +5 -1
  31. package/components/table/table.yaml +34 -1
  32. package/components/tabs/tab.js +4 -1
  33. package/components/tag/tag.css +15 -9
  34. package/core/provider.js +5 -1
  35. package/dist/host.min.css +1 -1
  36. package/dist/host.sheet.js +1 -1
  37. package/dist/scale.min.css +1 -1
  38. package/dist/scale.sheet.js +1 -1
  39. package/dist/theme-provider.min.js +2 -2
  40. package/dist/web-components.min.css +1 -1
  41. package/dist/web-components.min.js +93 -93
  42. package/dist/web-components.sheet.js +1 -1
  43. package/package.json +1 -1
  44. package/patterns/access-requests/access-requests.examples.html +12 -3
  45. package/patterns/admin-keys-and-export/admin-keys-and-export.examples.html +20 -5
  46. package/patterns/agent-cost/agent-cost.examples.html +12 -3
  47. package/patterns/agent-memory/agent-memory.examples.html +12 -3
  48. package/patterns/agent-prompt-library/agent-prompt-library.examples.html +12 -3
  49. package/patterns/agent-tool-call/agent-tool-call.examples.html +16 -4
  50. package/patterns/alert-dialog/alert-dialog.examples.html +12 -3
  51. package/patterns/app-nav/app-nav.examples.html +36 -9
  52. package/patterns/approvals/approvals.examples.html +14 -10
  53. package/patterns/audit-log/audit-log.examples.html +5 -2
  54. package/patterns/bulk-action-toolbar/bulk-action-toolbar.examples.html +210 -32
  55. package/patterns/bulk-action-toolbar/bulk-action-toolbar.examples.js +83 -4
  56. package/patterns/bulk-action-toolbar/bulk-action-toolbar.html +68 -0
  57. package/patterns/changelog-feed/changelog-feed.examples.html +4 -1
  58. package/patterns/chart-in-card/chart-in-card.examples.html +28 -7
  59. package/patterns/comments-and-collaboration/comments-and-collaboration.examples.html +20 -5
  60. package/patterns/conversion-funnel/conversion-funnel.examples.html +24 -15
  61. package/patterns/data-tables-inline-edit-and-tree/data-tables-inline-edit-and-tree.examples.html +15 -6
  62. package/patterns/diff-review/diff-review.examples.html +12 -3
  63. package/patterns/export-flow/export-flow.examples.html +12 -3
  64. package/patterns/filter-bar/filter-bar.examples.html +13 -4
  65. package/patterns/form-drawer/form-drawer.examples.html +15 -6
  66. package/patterns/form-system/form-system.examples.html +4 -1
  67. package/patterns/forms-conditional-and-autocomplete/forms-conditional-and-autocomplete.examples.html +12 -3
  68. package/patterns/inline-dialog/inline-dialog.examples.html +12 -3
  69. package/patterns/kanban-board/kanban-board.examples.html +4 -1
  70. package/patterns/marketing-engagement/marketing-engagement.examples.html +24 -6
  71. package/patterns/notifications-bell-and-digest/notifications-bell-and-digest.examples.html +12 -3
  72. package/patterns/permissions-matrix/permissions-matrix.examples.html +9 -3
  73. package/patterns/permissions-role-picker/permissions-role-picker.examples.html +8 -2
  74. package/patterns/permissions-sharing/permissions-sharing.examples.html +12 -3
  75. package/patterns/profile-public-and-verification/profile-public-and-verification.examples.html +16 -4
  76. package/patterns/record-detail-drawer/record-detail-drawer.examples.html +10 -4
  77. package/patterns/retention-cohort/retention-cohort.examples.html +15 -6
  78. package/patterns/search-discovery/search-discovery.examples.html +16 -4
  79. package/patterns/system-banners/system-banners.examples.html +54 -48
  80. package/patterns/timezone-selector/timezone-selector.examples.html +8 -2
  81. package/patterns/timezone-selector/timezone-selector.examples.js +3 -1
  82. package/patterns/wizard-drawer/wizard-drawer.examples.html +25 -23
  83. package/patterns/wizard-drawer/wizard-drawer.examples.js +12 -1
  84. package/styles/foundation/radius.css +2 -2
  85. package/styles/scale.css +2 -2
  86. package/styles/type/scale.css +6 -6
@@ -24,7 +24,10 @@
24
24
  <p data-note>A vertical stack of comments anchored to a parent object. Each row carries author avatar + name + timestamp + body + reactions strip + reply action. Threaded replies indent one level — deeper nesting collapses to "X replies" by default.</p>
25
25
  <div data-artifact-container>
26
26
  <div data-artifact-item data-artifact-label="comment thread">
27
- <card-ui data-chunk="comments-thread" style="max-width: 640px;">
27
+ <card-ui data-chunk="comments-thread" data-chunk-kind="block"
28
+ data-chunk-domain="content"
29
+ data-chunk-description="Comment thread card — 'Discussion' with comment count and participants, avatar-led comment rows with author, timestamp and body, and a Resolve header action."
30
+ data-chunk-keywords="comments thread discussion collaboration avatar author timestamp reply resolve participants conversation review feedback" style="max-width: 640px;">
28
31
  <header>
29
32
  <span slot="heading" variant="section">Discussion</span>
30
33
  <text-ui slot="description" color="subtle">3 comments · 2 participants</text-ui>
@@ -86,7 +89,10 @@
86
89
  <p data-note>The input field below a thread. Multiline, with attach + mention + emoji affordances inline, and Send / Cancel actions. Submits on Cmd/Ctrl+Enter; Enter inserts a newline.</p>
87
90
  <div data-artifact-container>
88
91
  <div data-artifact-item data-artifact-label="comment composer">
89
- <card-ui data-chunk="comments-composer" style="max-width: 640px;">
92
+ <card-ui data-chunk="comments-composer" data-chunk-kind="block"
93
+ data-chunk-domain="content"
94
+ data-chunk-description="Comment composer — avatar beside a write-a-comment textarea with attach / mention / emoji ghost buttons, a Cmd+Enter-to-send hint, and a primary Comment button."
95
+ data-chunk-keywords="comment composer write textarea mention attach emoji send cmd-enter reply input collaboration post" style="max-width: 640px;">
90
96
  <section>
91
97
  <row-ui gap="3" align="start">
92
98
  <avatar-ui size="sm" text="You"></avatar-ui>
@@ -114,7 +120,10 @@
114
120
  <p data-note>Popover that opens after the user types <code>@</code>. Shows team members + recently-mentioned at top, fuzzy-filtered by query. Each row carries avatar + name + handle + role tag. Arrow keys navigate; Enter inserts; Esc closes without inserting.</p>
115
121
  <div data-artifact-container>
116
122
  <div data-artifact-item data-artifact-label="mention picker menu">
117
- <card-ui data-chunk="comments-mention-menu" raw style="max-width: 320px;" data-shape="popover">
123
+ <card-ui data-chunk="comments-mention-menu" data-chunk-kind="block"
124
+ data-chunk-domain="content"
125
+ data-chunk-description="@-mention picker popover — 'Mention' list of people rows with avatar, name, handle and role, filtered as the user types after @ in a composer."
126
+ data-chunk-keywords="mention picker popover at-mention people avatar handle role autocomplete suggest composer collaboration tag-user" raw style="max-width: 320px;" data-shape="popover">
118
127
  <section>
119
128
  <col-ui gap="2">
120
129
  <text-ui strong size="sm" color="subtle">Mention</text-ui>
@@ -161,7 +170,10 @@
161
170
  <p data-note>The strip of reaction tags under a comment or message. Each tag shows emoji + count; the user's own reaction is highlighted. A trailing "+" opens the picker. Click a count to toggle the user's own reaction; long-press shows who reacted.</p>
162
171
  <div data-artifact-container>
163
172
  <div data-artifact-item data-artifact-label="reactions bar">
164
- <row-ui data-chunk="reactions-bar" gap="1">
173
+ <row-ui data-chunk="reactions-bar" data-chunk-kind="block"
174
+ data-chunk-domain="content"
175
+ data-chunk-description="Reactions bar — emoji reaction tags with counts (thumbs-up 4, party 2, eyes 1, rocket 1; own reaction highlighted) plus an add-reaction button. Rides under a comment or message."
176
+ data-chunk-keywords="reactions emoji bar counts thumbs-up party add react message comment collaboration engagement" gap="1">
165
177
  <tag-ui size="sm">👍 4</tag-ui>
166
178
  <tag-ui size="sm" variant="primary">🎉 2</tag-ui>
167
179
  <tag-ui size="sm">👀 1</tag-ui>
@@ -177,7 +189,10 @@
177
189
  <p data-note>The emoji-grid popover that opens from the "+" button. Recent + frequent emojis at top; full categorical grid below; search input above. Arrow + Enter for keyboard; click for pointer.</p>
178
190
  <div data-artifact-container>
179
191
  <div data-artifact-item data-artifact-label="reactions picker">
180
- <card-ui data-chunk="reactions-picker" style="max-width: 360px;">
192
+ <card-ui data-chunk="reactions-picker" data-chunk-kind="block"
193
+ data-chunk-domain="content"
194
+ data-chunk-description="Emoji reaction picker — search-emoji input over a 'Frequently used' wrap of emoji buttons for adding a reaction to a message or comment."
195
+ data-chunk-keywords="reactions picker emoji search frequently-used popover add react message comment collaboration" style="max-width: 360px;">
181
196
  <section>
182
197
  <col-ui gap="2">
183
198
  <field-ui>
@@ -24,7 +24,10 @@
24
24
  <p data-note>Top step is an explicit 100% baseline (no progress bar — it's the anchor). Subsequent steps use <code>progress-row-ui</code> with the count + percentage in the meta slot.</p>
25
25
  <div data-artifact-container>
26
26
  <div data-artifact-item data-artifact-label="conversion funnel">
27
- <card-ui data-chunk="conversion-funnel-4-step-funnel" style="max-width: 560px;">
27
+ <card-ui data-chunk="conversion-funnel-4-step-funnel" data-chunk-kind="block"
28
+ data-chunk-domain="dashboard"
29
+ data-chunk-description="4-step conversion funnel card — Visit → Sign up → Activate → Convert as rows with step name, visitor count, progress bar, and step-over-step percentage."
30
+ data-chunk-keywords="conversion funnel steps visit signup activate convert progress percentage drop-off analytics marketing pipeline" style="max-width: 560px;">
28
31
  <header>
29
32
  <h3>Conversion funnel</h3>
30
33
  <text-ui slot="description" color="subtle">Visit → Sign up → Activate → Convert</text-ui>
@@ -53,7 +56,10 @@
53
56
  <p data-note>Pair the funnel card with a segmented control in <code>slot="action"</code> so users can switch between cohorts (e.g. new-vs-returning, mobile-vs-desktop). Swap the <code>value</code> + <code>meta</code> attributes in setup.js on segment change.</p>
54
57
  <div data-artifact-container>
55
58
  <div data-artifact-item data-artifact-label="funnel with cohort toggle">
56
- <card-ui data-chunk="conversion-funnel-with-segment-compare" style="max-width: 560px;">
59
+ <card-ui data-chunk="conversion-funnel-with-segment-compare" data-chunk-kind="block"
60
+ data-chunk-domain="dashboard"
61
+ data-chunk-description="Checkout funnel with segment compare — funnel step rows plus a header segmented toggle (New / Returning) that switches which cohort's numbers are shown."
62
+ data-chunk-keywords="conversion funnel checkout segment compare new returning cohort toggle segmented analytics drop-off" style="max-width: 560px;">
57
63
  <header>
58
64
  <h3>Checkout funnel</h3>
59
65
  <text-ui slot="description" color="subtle">Last 30 days · by first-time vs returning</text-ui>
@@ -94,7 +100,10 @@
94
100
  <p data-note>For board reporting, combine the funnel with a step-over-step delta column so stakeholders can see exactly where the biggest drop-off happens. Delta is a <code>badge-ui</code> colored by severity.</p>
95
101
  <div data-artifact-container>
96
102
  <div data-artifact-item data-artifact-label="funnel with step-over-step">
97
- <card-ui data-chunk="conversion-funnel-wide-summary" style="max-width: 640px;">
103
+ <card-ui data-chunk="conversion-funnel-wide-summary" data-chunk-kind="block"
104
+ data-chunk-domain="dashboard"
105
+ data-chunk-description="Signup funnel with summary stats — step rows with counts and conversion bars, closed by a stat band summarizing overall conversion and biggest drop-off."
106
+ data-chunk-keywords="conversion funnel signup summary stats overall drop-off steps bars analytics wide report" style="max-width: 640px;">
98
107
  <header>
99
108
  <h3>Signup funnel</h3>
100
109
  <text-ui slot="description" color="subtle">Step-over-step conversion, last 7 days</text-ui>
@@ -108,18 +117,18 @@
108
117
  </col-ui>
109
118
  <text-ui strong>100%</text-ui>
110
119
  </row-ui>
111
- <row-ui align="center" gap="3">
112
- <progress-row-ui label="Email verified" value="68" meta="5,726 · 68%" grow></progress-row-ui>
113
- <badge-ui text="−32%" variant="warning"></badge-ui>
114
- </row-ui>
115
- <row-ui align="center" gap="3">
116
- <progress-row-ui label="Workspace created" value="54" meta="4,547 · 54%" grow></progress-row-ui>
117
- <badge-ui text="−21%" variant="muted"></badge-ui>
118
- </row-ui>
119
- <row-ui align="center" gap="3">
120
- <progress-row-ui label="Invited a teammate" value="22" meta="1,852 · 22%" grow></progress-row-ui>
121
- <badge-ui text="−59%" variant="danger"></badge-ui>
122
- </row-ui>
120
+ <!-- Delta badge rides INSIDE the meta slot (gh#502): authored
121
+ [slot="meta"] keeps text + badge on the meta text line,
122
+ instead of a sibling column centered against the whole row. -->
123
+ <progress-row-ui label="Email verified" value="68">
124
+ <span slot="meta">5,726 · 68% <badge-ui text="−32%" variant="warning"></badge-ui></span>
125
+ </progress-row-ui>
126
+ <progress-row-ui label="Workspace created" value="54">
127
+ <span slot="meta">4,547 · 54% <badge-ui text="−21%" variant="muted"></badge-ui></span>
128
+ </progress-row-ui>
129
+ <progress-row-ui label="Invited a teammate" value="22">
130
+ <span slot="meta">1,852 · 22% <badge-ui text="−59%" variant="danger"></badge-ui></span>
131
+ </progress-row-ui>
123
132
  </col-ui>
124
133
  </section>
125
134
  </card-ui>
@@ -26,17 +26,20 @@
26
26
  <p data-note>The most common shape: a normal table where one row at a time enters edit mode (double-click or pencil button). Cells become `&lt;input-ui&gt;` / `&lt;select-ui&gt;` / etc.; Save / Cancel actions appear in the row's trailing column.</p>
27
27
  <div data-artifact-container>
28
28
  <div data-artifact-item data-artifact-label="single editing row">
29
- <card-ui data-chunk="table-inline-edit-row">
29
+ <card-ui data-chunk="table-inline-edit-row" data-chunk-kind="block"
30
+ data-chunk-domain="data"
31
+ data-chunk-description="Table with inline row editing — pricing matrix where the editing row swaps its cells for inputs with save/cancel, unsaved count in the header, plus an Add-row action."
32
+ data-chunk-keywords="table inline edit row editing pricing inputs save cancel unsaved add-row data grid">
30
33
  <header>
31
34
  <span slot="heading" variant="section">Pricing matrix</span>
32
35
  <text-ui slot="description" color="subtle">12 rows · 1 unsaved</text-ui>
33
36
  <button-ui slot="action" text="Add row" variant="ghost" size="sm" icon-leading="plus"></button-ui>
34
37
  </header>
35
38
  <section bleed>
36
- <!-- A real <table> in <table-ui raw> (consumer-owns-body mode) gives
39
+ <!-- A real <table> in <table-ui frameless raw> (consumer-owns-body mode) gives
37
40
  true column alignment; the editing row (Pro) swaps its Price/Limits
38
41
  cells for <input-ui> and its action cell for Save/Cancel. -->
39
- <table-ui raw>
42
+ <table-ui frameless raw>
40
43
  <table>
41
44
  <thead>
42
45
  <tr><th>Plan</th><th>Price</th><th>Limits</th><th></th></tr>
@@ -79,7 +82,10 @@
79
82
  <p data-note>The full Excel-style shape: every cell renders an `&lt;input-ui&gt;` (or typed equivalent — number, select, date). Tab moves to the next cell, Enter commits + moves down. Saves are auto-debounced; the dirty state surfaces as a per-row tag.</p>
80
83
  <div data-artifact-container>
81
84
  <div data-artifact-item data-artifact-label="spreadsheet cells">
82
- <card-ui data-chunk="table-spreadsheet-cells">
85
+ <card-ui data-chunk="table-spreadsheet-cells" data-chunk-kind="block"
86
+ data-chunk-domain="data"
87
+ data-chunk-description="Spreadsheet-style editable table — per-cell editing with dirty-cell highlighting, auto-saving status in the header, and Undo / Save-now actions."
88
+ data-chunk-keywords="table spreadsheet cells editable dirty auto-save undo save forecast inventory grid excel">
83
89
  <header>
84
90
  <span slot="heading" variant="section">Inventory — Q4 forecast</span>
85
91
  <text-ui slot="description" color="subtle">Auto-saving · 3 cells dirty</text-ui>
@@ -92,7 +98,7 @@
92
98
  <!-- Every cell is an <input-ui>; a real <table> gives the Excel-style
93
99
  column alignment the list-item flex layout couldn't. The per-row
94
100
  dirty/clean state sits in its own Status column. -->
95
- <table-ui raw>
101
+ <table-ui frameless raw>
96
102
  <table>
97
103
  <thead>
98
104
  <tr><th>Item</th><th>Oct</th><th>Nov</th><th>Dec</th><th>Status</th></tr>
@@ -140,7 +146,10 @@
140
146
  <p data-note>Use <code>&lt;tree-ui&gt;</code> for the recursion. Each <code>&lt;tree-item-ui&gt;</code> renders the chevron + indent automatically; nested items go inside the parent's default slot. Common in budgets, org charts, file browsers.</p>
141
147
  <div data-artifact-container>
142
148
  <div data-artifact-item data-artifact-label="tree table">
143
- <card-ui data-chunk="tree-table-basic">
149
+ <card-ui data-chunk="tree-table-basic" data-chunk-kind="block"
150
+ data-chunk-domain="data"
151
+ data-chunk-description="Tree table card — hierarchical budget rollup (departments expand into categories, each row carrying its amount) with the grand total in the header."
152
+ data-chunk-keywords="tree table hierarchy budget departments categories expand collapse rollup total nested amounts">
144
153
  <header>
145
154
  <span slot="heading" variant="section">Q4 budget — by department</span>
146
155
  <text-ui slot="description" color="subtle">Total: $1.24M · 4 departments · 12 categories</text-ui>
@@ -25,7 +25,10 @@
25
25
  <p data-note>Two-column view with the old version on the left and the new on the right. Removed lines tinted danger; added lines tinted success. Compose two <code>code-ui line-numbers</code> blocks side-by-side; per-line tint comes from a <code>data-line-states</code> CSV (one entry per line: <code>unchanged</code>, <code>added</code>, or <code>removed</code>).</p>
26
26
  <div data-artifact-container>
27
27
  <div data-artifact-item data-artifact-label="side-by-side diff">
28
- <card-ui data-chunk="diff-side-by-side">
28
+ <card-ui data-chunk="diff-side-by-side" data-chunk-kind="block"
29
+ data-chunk-domain="data"
30
+ data-chunk-description="Side-by-side diff card — filename header with +3 −2 change stats and an Inline / Side-by-side view toggle, over a two-column before/after code comparison."
31
+ data-chunk-keywords="diff side-by-side code review compare before after columns changes additions deletions toggle file" >
29
32
  <header>
30
33
  <span slot="heading" variant="section">tokens.css</span>
31
34
  <text-ui slot="description" color="subtle">+3 −2 · 5 lines changed</text-ui>
@@ -63,7 +66,10 @@
63
66
  <p data-note>Single-column view with `+` and `−` line markers. Better for narrow columns and quick scan-reading. Compose <code>code-ui language="diff" line-numbers</code>; the `+`/`−`/space prefix on each line auto-resolves to <code>added</code> / <code>removed</code> / <code>unchanged</code> tint.</p>
64
67
  <div data-artifact-container>
65
68
  <div data-artifact-item data-artifact-label="inline unified diff">
66
- <card-ui data-chunk="diff-inline" style="max-width: 640px;">
69
+ <card-ui data-chunk="diff-inline" data-chunk-kind="block"
70
+ data-chunk-domain="data"
71
+ data-chunk-description="Inline diff card — filename header with change stats over a unified diff code block with line numbers, minus/plus lines marked."
72
+ data-chunk-keywords="diff inline unified code review changes line-numbers additions deletions patch file" style="max-width: 640px;">
67
73
  <header>
68
74
  <span slot="heading" variant="section">tokens.css — inline diff</span>
69
75
  <text-ui slot="description" color="subtle">+3 −2</text-ui>
@@ -90,7 +96,10 @@
90
96
  <p data-note>For settings or records where the underlying shape is a key-value object, not lines of text. Each row shows the field name + old → new value pair. <code>description-list-ui</code> for layout; <code>tag-ui</code> with diff variants for the value pair.</p>
91
97
  <div data-artifact-container>
92
98
  <div data-artifact-item data-artifact-label="structured field diff">
93
- <card-ui data-chunk="diff-structured" style="max-width: 640px;">
99
+ <card-ui data-chunk="diff-structured" data-chunk-kind="block"
100
+ data-chunk-domain="data"
101
+ data-chunk-description="Structured field diff card — settings change preview as a description list where each changed field shows a danger old-value tag and a success new-value tag."
102
+ data-chunk-keywords="diff structured fields change preview settings old new values tags before after review confirm" style="max-width: 640px;">
94
103
  <header>
95
104
  <span slot="heading" variant="section">Workspace settings — change preview</span>
96
105
  <text-ui slot="description" color="subtle">3 fields changed</text-ui>
@@ -18,7 +18,10 @@
18
18
  <p data-note>Small datasets (&lt; 10 k rows). User picks format, browser downloads on click. Submit button copy = the verb ("Download CSV"); format-picker change updates the button label.</p>
19
19
  <div data-artifact-container>
20
20
  <div data-artifact-item data-artifact-label="download now">
21
- <card-ui data-chunk="export-flow-sync" style="max-width: 480px;">
21
+ <card-ui data-chunk="export-flow-sync" data-chunk-kind="block"
22
+ data-chunk-domain="data-management"
23
+ data-chunk-description="Synchronous export card — 'Export users' with row count and applied-filter note, format select (CSV / JSON), column scope options, and an immediate Download button."
24
+ data-chunk-keywords="export sync download users csv json format columns filter rows immediate file data" style="max-width: 480px;">
22
25
  <header>
23
26
  <span slot="heading" variant="section">Export users</span>
24
27
  <text-ui slot="description" color="subtle">428 rows · current filter applied</text-ui>
@@ -54,7 +57,10 @@
54
57
  <p data-note>Large datasets (≥ 10 k rows / known-slow exports). Submit queues a job; the user gets an email with a download link when the archive is ready. The form acknowledges the latency up front in an info alert + uses the verb "Request" instead of "Download".</p>
55
58
  <div data-artifact-container>
56
59
  <div data-artifact-item data-artifact-label="request email export">
57
- <card-ui data-chunk="export-flow-async" style="max-width: 480px;">
60
+ <card-ui data-chunk="export-flow-async" data-chunk-kind="block"
61
+ data-chunk-domain="data-management"
62
+ data-chunk-description="Async export card — large dataset export (~1.4M events) with date-range and format selects and an email-when-ready flow instead of a blocking download."
63
+ data-chunk-keywords="export async large dataset events date-range format email notify background job analytics queue" style="max-width: 480px;">
58
64
  <header>
59
65
  <span slot="heading" variant="section">Export analytics</span>
60
66
  <text-ui slot="description" color="subtle">~1.4M events · last 90 days</text-ui>
@@ -101,7 +107,10 @@
101
107
  <p data-note>When both make sense (medium datasets, user preference matters). Radio choice up top toggles which submit verb fires; email field hides when "download" is selected.</p>
102
108
  <div data-artifact-container>
103
109
  <div data-artifact-item data-artifact-label="delivery picker">
104
- <card-ui data-chunk="export-flow-delivery" style="max-width: 480px;">
110
+ <card-ui data-chunk="export-flow-delivery" data-chunk-kind="block"
111
+ data-chunk-domain="data-management"
112
+ data-chunk-description="Export with delivery options card — invoice export offering format (PDF bundle / ZIP) and delivery destination choices (download, email, cloud storage)."
113
+ data-chunk-keywords="export delivery invoices pdf zip email cloud storage destination format fiscal download options" style="max-width: 480px;">
105
114
  <header>
106
115
  <span slot="heading" variant="section">Export invoices</span>
107
116
  <text-ui slot="description" color="subtle">2024 fiscal year · 1,247 invoices</text-ui>
@@ -18,7 +18,10 @@
18
18
  </p>
19
19
  </section>
20
20
 
21
- <section data-section data-property="active-filters" data-chunk="filter-bar-active-filters">
21
+ <section data-section data-property="active-filters" data-chunk="filter-bar-active-filters" data-chunk-kind="block"
22
+ data-chunk-domain="data"
23
+ data-chunk-description="Active-filters bar — removable chips for each applied filter (Status: Active, Owner, Updated range) with a trailing + Add filter button opening a facet popover."
24
+ data-chunk-keywords="filters active chips removable add-filter facets popover status owner updated bar refine query tags">
22
25
  <h2 variant="section">Active filters + Add filter</h2>
23
26
  <p data-note>Chips show each active filter. The trailing button opens a popover of available facets.</p>
24
27
  <card-ui>
@@ -45,7 +48,10 @@
45
48
  </card-ui>
46
49
  </section>
47
50
 
48
- <section data-section data-property="filter-bar-with-table" data-chunk="filter-bar-filter-bar-with-table">
51
+ <section data-section data-property="filter-bar-with-table" data-chunk="filter-bar-filter-bar-with-table" data-chunk-kind="block"
52
+ data-chunk-domain="data"
53
+ data-chunk-description="Filter bar over a table — removable filter chips and an Add-filter button in a toolbar directly above the table inside one card, so filters read as modifying the rows below."
54
+ data-chunk-keywords="filter bar table chips toolbar card rows data refine composition list results query">
49
55
  <h2 variant="section">Filter bar + table</h2>
50
56
  <p data-note>The common composition: filters sit above the table inside one card surface so they read as modifying the same data.</p>
51
57
  <card-ui>
@@ -58,12 +64,15 @@
58
64
  </row-ui>
59
65
  <search-ui placeholder="Search…" size="sm"></search-ui>
60
66
  </toolbar-ui>
61
- <table-ui id="pat-filter-table" sortable striped></table-ui>
67
+ <table-ui frameless id="pat-filter-table" sortable striped></table-ui>
62
68
  </section>
63
69
  </card-ui>
64
70
  </section>
65
71
 
66
- <section data-section data-property="saved-views" data-chunk="filter-bar-saved-views">
72
+ <section data-section data-property="saved-views" data-chunk="filter-bar-saved-views" data-chunk-kind="block"
73
+ data-chunk-domain="data"
74
+ data-chunk-description="Saved views bar — segmented control of named filter combinations (All / My open / Team / Archived) replacing chip-by-chip filtering with one-tap views."
75
+ data-chunk-keywords="saved views segmented filters named all my-open team archived presets quick-switch bar data">
67
76
  <h2 variant="section">Saved views</h2>
68
77
  <p data-note>Named combinations of filters. Segmented control replaces the active-filter chips while a view is applied.</p>
69
78
  <card-ui>
@@ -22,8 +22,11 @@
22
22
  <p data-note>3–5 fields with primary + cancel actions. The default shape for "+ New X" triggers.</p>
23
23
  <div data-artifact-container>
24
24
  <div data-artifact-item data-artifact-label="create form">
25
- <button-ui data-chunk="form-drawer-simple-form" text="+ New project" variant="primary" onclick="this.nextElementSibling.open=true"></button-ui>
26
- <drawer-ui text="New project" side="right" size="md">
25
+ <button-ui text="+ New project" variant="primary" onclick="this.nextElementSibling.open=true"></button-ui>
26
+ <drawer-ui data-chunk="form-drawer-simple-form" data-chunk-kind="block"
27
+ data-chunk-domain="forms"
28
+ data-chunk-description="Create-form drawer — 'New project' right-side drawer with name input, description textarea, and visibility select in the body, and Cancel / Create footer actions."
29
+ data-chunk-keywords="drawer form create new project name description visibility right-side panel cancel save quick-create" text="New project" side="right" size="md">
27
30
  <section slot="body">
28
31
  <col-ui gap="3">
29
32
  <field-ui label="Name">
@@ -57,8 +60,11 @@
57
60
  <p data-note>Edit drawers pair a primary action with a destructive one in the footer. Delete sits on the left, Save on the right — separated by the spacer.</p>
58
61
  <div data-artifact-container>
59
62
  <div data-artifact-item data-artifact-label="edit form">
60
- <button-ui data-chunk="form-drawer-edit-form" text="Edit project" icon="pencil" variant="outline" onclick="this.nextElementSibling.open=true"></button-ui>
61
- <drawer-ui text="Edit project" side="right" size="md">
63
+ <button-ui text="Edit project" icon="pencil" variant="outline" onclick="this.nextElementSibling.open=true"></button-ui>
64
+ <drawer-ui data-chunk="form-drawer-edit-form" data-chunk-kind="block"
65
+ data-chunk-domain="forms"
66
+ data-chunk-description="Edit-form drawer — right-side drawer pre-filled with the record's current values (name, description, status) for quick edits without leaving the page."
67
+ data-chunk-keywords="drawer form edit prefilled record name description status update quick-edit panel inspector save" text="Edit project" side="right" size="md">
62
68
  <section slot="body">
63
69
  <col-ui gap="3">
64
70
  <field-ui label="Name">
@@ -97,8 +103,11 @@
97
103
  <p data-note>The footer stays visible even when the form body overflows. This is why the sticky-footer pattern matters — users shouldn't have to scroll to find "Save".</p>
98
104
  <div data-artifact-container>
99
105
  <div data-artifact-item data-artifact-label="long form">
100
- <button-ui data-chunk="form-drawer-tall-form" text="Advanced settings" icon="gear" variant="outline" onclick="this.nextElementSibling.open=true"></button-ui>
101
- <drawer-ui text="Advanced settings" side="right" size="lg">
106
+ <button-ui text="Advanced settings" icon="gear" variant="outline" onclick="this.nextElementSibling.open=true"></button-ui>
107
+ <drawer-ui data-chunk="form-drawer-tall-form" data-chunk-kind="block"
108
+ data-chunk-domain="forms"
109
+ data-chunk-description="Tall sectioned form drawer — large right-side drawer whose body groups fields under headings (General, then advanced sections) with a scrolling body and pinned footer."
110
+ data-chunk-keywords="drawer form tall sections advanced settings general slug headings scroll long panel grouped fields" text="Advanced settings" side="right" size="lg">
102
111
  <section slot="body">
103
112
  <col-ui gap="4">
104
113
  <col-ui gap="3">
@@ -307,7 +307,10 @@ emailField.syncValue('new@example.com');</code-ui>
307
307
  <p>Try submitting the form below without filling in the fields to see auto-validation in action:</p>
308
308
  <div data-artifact-container>
309
309
  <div data-artifact-item data-artifact-label="form">
310
- <form data-chunk="form-system-live-demo" style="display:flex; flex-direction:column; gap:var(--a-space-3); max-width:400px;" onsubmit="event.preventDefault();">
310
+ <form data-chunk="form-system-live-demo" data-chunk-kind="block"
311
+ data-chunk-domain="forms"
312
+ data-chunk-description="Validated form — full name and email fields with required / minlength / pattern rules and custom per-rule error messages, submitted with native constraint validation."
313
+ data-chunk-keywords="form validation required pattern minlength error messages name email constraint submit live inline" style="display:flex; flex-direction:column; gap:var(--a-space-3); max-width:400px;" onsubmit="event.preventDefault();">
311
314
  <field-ui label="Full Name">
312
315
  <input-ui name="fullname" required minlength="2" data-msg-required="Please enter your name" data-msg-minlength="Name must be at least 2 characters">
313
316
  </input-ui>
@@ -24,7 +24,10 @@
24
24
  <p data-note>A select or radio determines which sub-fields render. Hidden fields are not just `display: none` — they're removed from the form so they don't submit. When revealed, they animate in and the form's height grows; focus moves to the first revealed field.</p>
25
25
  <div data-artifact-container>
26
26
  <div data-artifact-item data-artifact-label="conditional fields">
27
- <card-ui data-chunk="forms-conditional-reveal" style="max-width: 560px;">
27
+ <card-ui data-chunk="forms-conditional-reveal" data-chunk-kind="block"
28
+ data-chunk-domain="forms"
29
+ data-chunk-description="Conditional-reveal form card — an account-type select (Personal / Business) that reveals the business-only fields (company name, VAT id) when Business is chosen."
30
+ data-chunk-keywords="form conditional reveal account type personal business company vat dependent fields show hide branch dynamic" style="max-width: 560px;">
28
31
  <header>
29
32
  <span slot="heading" variant="section">Account type</span>
30
33
  <text-ui slot="description" color="subtle">We'll show the fields you need based on this</text-ui>
@@ -68,7 +71,10 @@
68
71
  <p data-note>Single input that opens a `menu-ui` of suggestions as the user types. Each suggestion shows the formatted address with the matched portion highlighted. Selecting a suggestion fills the structured fields below; clicking "Enter manually" reveals the structured fields directly.</p>
69
72
  <div data-artifact-container>
70
73
  <div data-artifact-item data-artifact-label="address autocomplete">
71
- <card-ui data-chunk="forms-address-autocomplete" style="max-width: 560px;">
74
+ <card-ui data-chunk="forms-address-autocomplete" data-chunk-kind="block"
75
+ data-chunk-domain="forms"
76
+ data-chunk-description="Address autocomplete card — search-address input with map-pin icon and a suggestions dropdown of matching addresses, plus an enter-manually escape hatch."
77
+ data-chunk-keywords="address autocomplete search suggestions dropdown billing street map-pin manual lookup typeahead form" style="max-width: 560px;">
72
78
  <header>
73
79
  <span slot="heading" variant="section">Billing address</span>
74
80
  </header>
@@ -121,7 +127,10 @@
121
127
  <p data-note>After a suggestion is picked (or the user chose "Enter manually"), the structured fields appear, prefilled. The user can correct any line. Country drives the field set — US postal codes are different shape from CA, UK, etc.</p>
122
128
  <div data-artifact-container>
123
129
  <div data-artifact-item data-artifact-label="resolved address fields">
124
- <card-ui data-chunk="forms-address-fields" style="max-width: 560px;">
130
+ <card-ui data-chunk="forms-address-fields" data-chunk-kind="block"
131
+ data-chunk-domain="forms"
132
+ data-chunk-description="Expanded address fields card — street, apt/suite, city, state and ZIP in a proper field layout after autocomplete, with a Search-again header action."
133
+ data-chunk-keywords="address fields street apt suite city state zip postal form expanded manual billing shipping layout" style="max-width: 560px;">
125
134
  <header>
126
135
  <span slot="heading" variant="section">Address details</span>
127
136
  <button-ui slot="action" text="Search again" variant="ghost" size="sm" icon-leading="arrow-counter-clockwise"></button-ui>
@@ -21,7 +21,10 @@
21
21
  <row-ui gap="3" align="center" style="padding: var(--a-space-4); border: 1px solid var(--md-sys-color-neutral-outline); border-radius: var(--a-radius-md); background: var(--md-sys-color-neutral-background);">
22
22
  <icon-ui name="file-text" size="sm"></icon-ui>
23
23
  <text-ui strong style="flex: 1;">Q4-budget-draft.xlsx</text-ui>
24
- <popover-ui data-chunk="inline-dialog-rename" placement="bottom-start">
24
+ <popover-ui data-chunk="inline-dialog-rename" data-chunk-kind="block"
25
+ data-chunk-domain="overlay"
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
+ data-chunk-keywords="inline dialog rename popover anchored file name input save cancel mini one-field edit quick" placement="bottom-start">
25
28
  <button-ui slot="trigger" text="Rename" variant="ghost" size="sm" icon-leading="pencil-simple"></button-ui>
26
29
  <card-ui slot="content" style="min-width: 320px;">
27
30
  <header>
@@ -50,7 +53,10 @@
50
53
  <div data-artifact-item data-artifact-label="status picker dialog">
51
54
  <row-ui gap="3" align="center" style="padding: var(--a-space-4); border: 1px solid var(--md-sys-color-neutral-outline); border-radius: var(--a-radius-md); background: var(--md-sys-color-neutral-background);">
52
55
  <text-ui strong style="flex: 1;">PR #3247 — Add cursor pagination</text-ui>
53
- <popover-ui data-chunk="inline-dialog-status" placement="bottom-start">
56
+ <popover-ui data-chunk="inline-dialog-status" data-chunk-kind="block"
57
+ data-chunk-domain="overlay"
58
+ data-chunk-description="Status-change popover — the current status tag is the trigger; the anchored card offers the status options with descriptions and an optional note field."
59
+ data-chunk-keywords="inline dialog status change popover anchored tag trigger options workflow state transition note quick" placement="bottom-start">
54
60
  <button-ui slot="trigger" variant="outline" size="sm">
55
61
  <tag-ui slot="leading" size="sm" variant="warning">In review</tag-ui>
56
62
  <icon-ui slot="trailing" name="caret-down" size="sm"></icon-ui>
@@ -92,7 +98,10 @@
92
98
  <div data-artifact-item data-artifact-label="schedule send dialog">
93
99
  <row-ui gap="0" align="center" style="padding: var(--a-space-4); background: var(--md-sys-color-neutral-background);">
94
100
  <button-ui text="Send now" variant="primary" size="sm"></button-ui>
95
- <popover-ui data-chunk="inline-dialog-schedule" placement="bottom-start">
101
+ <popover-ui data-chunk="inline-dialog-schedule" data-chunk-kind="block"
102
+ data-chunk-domain="overlay"
103
+ data-chunk-description="Schedule-send popover — split-button caret opens an anchored card with date and time fields (timezone-aware hint) and a Schedule action."
104
+ data-chunk-keywords="inline dialog schedule send popover date time timezone split-button email later anchored quick" placement="bottom-start">
96
105
  <button-ui slot="trigger" icon="caret-down" variant="primary" size="sm" aria-label="More send options"></button-ui>
97
106
  <card-ui slot="content" style="min-width: 320px;">
98
107
  <header>
@@ -24,7 +24,10 @@
24
24
  <p data-note>Single-column list where the row order is the data. Each row carries a leading drag handle (`dots-six-vertical`), the body content, and trailing meta. Hover reveals the handle; drag picks up the row with a shadow + ghost.</p>
25
25
  <div data-artifact-container>
26
26
  <div data-artifact-item data-artifact-label="sortable list">
27
- <card-ui data-chunk="sortable-list" style="max-width: 560px;">
27
+ <card-ui data-chunk="sortable-list" data-chunk-kind="block"
28
+ data-chunk-domain="data"
29
+ data-chunk-description="Sortable priority list card — 'Sprint priority' rows with drag handles, rank numbers, task titles and tags; drag to reorder."
30
+ data-chunk-keywords="sortable list drag reorder priority sprint rank handle tasks order manual arrange backlog" style="max-width: 560px;">
28
31
  <header>
29
32
  <span slot="heading" variant="section">Sprint priority</span>
30
33
  <text-ui slot="description" color="subtle">Drag to reorder · 4 items</text-ui>
@@ -25,7 +25,10 @@
25
25
  <p data-note>The minimal hero. Centered display headline, subtitle, primary CTA + secondary "Learn more" ghost. No supporting image — works when the headline carries the weight.</p>
26
26
  <div data-artifact-container>
27
27
  <div data-artifact-item data-artifact-label="simple hero">
28
- <card-ui data-chunk="hero-cta-simple" raw>
28
+ <card-ui data-chunk="hero-cta-simple" data-chunk-kind="block"
29
+ data-chunk-domain="marketing"
30
+ data-chunk-description="Centered hero CTA — release tag, display headline, deck subhead, and a primary Get-started / ghost See-demos button pair, all center-aligned."
31
+ data-chunk-keywords="hero cta centered headline display deck subhead get-started buttons landing marketing banner launch" raw>
29
32
  <section bleed>
30
33
  <col-ui gap="3" align="center" padding="10">
31
34
  <tag-ui size="sm" variant="muted">v0.0.27 — out today</tag-ui>
@@ -47,7 +50,10 @@
47
50
  <p data-note>Two-column hero. Headline + subtitle + CTA on the left, supporting visual on the right. The visual is a placeholder card here; in production it's a screenshot, animation, or video poster.</p>
48
51
  <div data-artifact-container>
49
52
  <div data-artifact-item data-artifact-label="split hero">
50
- <card-ui data-chunk="hero-cta-split" raw>
53
+ <card-ui data-chunk="hero-cta-split" data-chunk-kind="block"
54
+ data-chunk-domain="marketing"
55
+ data-chunk-description="Split hero CTA — two-column hero with tag, display headline, deck copy and CTA buttons on the left, and a product visual / proof panel on the right."
56
+ data-chunk-keywords="hero cta split two-column headline visual proof buttons start-free landing marketing grid feature" raw>
51
57
  <section bleed>
52
58
  <grid-ui columns="2" gap="6" align="center" padding="8">
53
59
  <col-ui gap="4" align="start">
@@ -83,7 +89,10 @@
83
89
  <p data-note>Read-only input prefilled with the user's referral URL + Copy button. Below it: per-channel share buttons (email, X, LinkedIn). Reward copy describes what referrer + referee get ("$10 credit each").</p>
84
90
  <div data-artifact-container>
85
91
  <div data-artifact-item data-artifact-label="referral share link">
86
- <card-ui data-chunk="referral-share-link">
92
+ <card-ui data-chunk="referral-share-link" data-chunk-kind="block"
93
+ data-chunk-domain="marketing"
94
+ data-chunk-description="Referral share card — 'Invite a friend, both get $10' with a readonly referral-link copy field and share buttons for email and social channels."
95
+ data-chunk-keywords="referral invite friend share link copy credit reward email social growth program" >
87
96
  <header>
88
97
  <span slot="heading" variant="section">Invite a friend, both get $10</span>
89
98
  <text-ui slot="description" color="subtle">When they sign up and verify, $10 in credit lands in both your accounts.</text-ui>
@@ -111,7 +120,10 @@
111
120
  <p data-note>The user's referral history. Stats grid (referrals sent / converted / credits earned), then a list of per-referral rows with avatar + status tag. Pending = invite sent, no signup; Joined = signed up, no verify; Verified = credit earned.</p>
112
121
  <div data-artifact-container>
113
122
  <div data-artifact-item data-artifact-label="referral status">
114
- <card-ui data-chunk="referral-status">
123
+ <card-ui data-chunk="referral-status" data-chunk-kind="block"
124
+ data-chunk-domain="marketing"
125
+ data-chunk-description="Referral status card — earned-credit summary with a 3-up stat grid (Sent / Joined / Credit) and a list of invited friends with per-invite status tags."
126
+ data-chunk-keywords="referral status credit earned stats sent joined friends invites pending verified rewards tracking" >
115
127
  <header>
116
128
  <span slot="heading" variant="section">Your referrals</span>
117
129
  <text-ui slot="description" color="subtle">$30 credit earned · 3 friends joined</text-ui>
@@ -157,7 +169,10 @@
157
169
  <p data-note>Grid of earned + locked badges. Each card shows the icon, name, description, and earn-date. Earned badges carry the date as a <code>success</code> tag; locked badges show progress as a <code>muted</code> tag and live in a <code>ghost</code> card so they read as quieter without raw opacity.</p>
158
170
  <div data-artifact-container>
159
171
  <div data-artifact-item data-artifact-label="achievement badges">
160
- <card-ui data-chunk="achievement-badges">
172
+ <card-ui data-chunk="achievement-badges" data-chunk-kind="block"
173
+ data-chunk-domain="marketing"
174
+ data-chunk-description="Achievement badges card — '5 of 12 unlocked' grid of badge tiles, unlocked ones with emoji icon, name and earned date, locked ones dimmed with progress hints."
175
+ data-chunk-keywords="achievements badges unlocked locked grid gamification streak milestones progress rewards engagement" >
161
176
  <header>
162
177
  <span slot="heading" variant="section">Achievements</span>
163
178
  <text-ui slot="description" color="subtle">5 of 12 unlocked</text-ui>
@@ -236,7 +251,10 @@
236
251
  <p data-note>The just-earned achievement card — usually appears as a toast or modal moment. Big icon, "You earned…" header, description, and a CTA to share or keep going. This is the dopamine hit; don't make it dismissive.</p>
237
252
  <div data-artifact-container>
238
253
  <div data-artifact-item data-artifact-label="achievement unlock">
239
- <card-ui data-chunk="achievement-unlock">
254
+ <card-ui data-chunk="achievement-unlock" data-chunk-kind="block"
255
+ data-chunk-domain="marketing"
256
+ data-chunk-description="Achievement-unlocked celebration card — big emoji, 'Achievement unlocked' tag, display-size achievement name (7-day streak), and a stats-recap line, center-aligned."
257
+ data-chunk-keywords="achievement unlocked celebration streak emoji milestone gamification congratulations reward moment" >
240
258
  <section>
241
259
  <col-ui gap="3" align="center" padding="6">
242
260
  <text-ui variant="display">🔥</text-ui>
@@ -26,7 +26,10 @@
26
26
  <p data-note>Default state when there are no unread notifications. Uses an empty-state-ui in the menu body so the popover doesn't feel broken; "View all" footer links to the full feed.</p>
27
27
  <div data-artifact-container>
28
28
  <div data-artifact-item data-artifact-label="bell menu empty">
29
- <card-ui data-chunk="bell-menu-empty" style="max-width: 360px;" data-shape="popover">
29
+ <card-ui data-chunk="bell-menu-empty" data-chunk-kind="block"
30
+ data-chunk-domain="display"
31
+ data-chunk-description="Empty notifications menu — bell popover showing an 'All caught up' empty state with a bell-slash icon and no unread items."
32
+ data-chunk-keywords="notifications bell menu empty state caught-up popover zero none inbox" style="max-width: 360px;" data-shape="popover">
30
33
  <header>
31
34
  <text-ui slot="heading" strong>Notifications</text-ui>
32
35
  </header>
@@ -54,7 +57,10 @@
54
57
  <p data-note>Each row carries an avatar (or icon for system events), a one-line summary, a timestamp, and a small unread-dot. Clicking a row marks it read and navigates to the source. "Mark all read" + "View all activity" in the footer.</p>
55
58
  <div data-artifact-container>
56
59
  <div data-artifact-item data-artifact-label="bell menu with unread">
57
- <card-ui data-chunk="bell-menu-unread" style="max-width: 380px;" data-shape="popover">
60
+ <card-ui data-chunk="bell-menu-unread" data-chunk-kind="block"
61
+ data-chunk-domain="display"
62
+ data-chunk-description="Notifications bell menu — '3 new' header tag over notification rows (avatar or icon, message, relative time; unread emphasized) with mark-all-read and view-all footer actions."
63
+ data-chunk-keywords="notifications bell menu unread new rows avatar time mark-read view-all popover inbox alerts" style="max-width: 380px;" data-shape="popover">
58
64
  <header>
59
65
  <row-ui slot="heading" align="center" gap="2">
60
66
  <text-ui strong>Notifications</text-ui>
@@ -125,7 +131,10 @@
125
131
  <p data-note>The in-app rendering of the digest email — frequency header, "What's in this digest" summary, sectioned content. Used inside notification prefs so the user can see exactly what a daily/weekly digest will look like before opting in.</p>
126
132
  <div data-artifact-container>
127
133
  <div data-artifact-item data-artifact-label="email digest preview">
128
- <card-ui data-chunk="digest-email-preview" style="max-width: 640px;">
134
+ <card-ui data-chunk="digest-email-preview" data-chunk-kind="block"
135
+ data-chunk-domain="display"
136
+ data-chunk-description="Weekly digest preview card — grouped summary of the week's activity (mentions, updates, stats) as it will appear in the Monday email, with a Send-test header action."
137
+ data-chunk-keywords="digest weekly email preview summary activity grouped mentions updates send-test notifications batch" style="max-width: 640px;">
129
138
  <header>
130
139
  <span slot="heading" variant="section">Weekly digest preview</span>
131
140
  <text-ui slot="description" color="subtle">This is what your Monday morning email will contain</text-ui>
@@ -23,14 +23,17 @@
23
23
  <p data-note>Capability per row, role per column, <code>check-ui</code> in each cell. Built-in roles (Viewer / Member / Admin / Owner) render <code>disabled</code> — they reflect the role's permissions but can't be edited from this surface. The <em>Custom</em> column is the authoring affordance: cells there toggle freely and save on change.</p>
24
24
  <div data-artifact-container>
25
25
  <div data-artifact-item data-artifact-label="permission matrix grid">
26
- <card-ui data-chunk="permissions-matrix-grid" data-perm-card>
26
+ <card-ui data-chunk="permissions-matrix-grid" data-chunk-kind="block"
27
+ data-chunk-domain="settings"
28
+ data-chunk-description="Permissions matrix card — capabilities-by-role table with auto-save note and an Add-custom-role header action; each cell toggles a capability for a role."
29
+ data-chunk-keywords="permissions matrix roles capabilities table grid toggle custom role admin rbac access-control checkboxes" data-perm-card>
27
30
  <header>
28
31
  <span slot="heading" variant="section">Permissions</span>
29
32
  <text-ui slot="description" color="subtle">Changes save automatically</text-ui>
30
33
  <button-ui slot="action" text="Add custom role" variant="ghost" size="sm" icon-leading="plus"></button-ui>
31
34
  </header>
32
35
  <section bleed>
33
- <table-ui id="pat-perm-matrix"></table-ui>
36
+ <table-ui frameless id="pat-perm-matrix"></table-ui>
34
37
  </section>
35
38
  <footer divider>
36
39
  <text-ui slot="description" color="subtle" size="sm">Built-in roles are read-only. The Custom column is editable.</text-ui>
@@ -45,7 +48,10 @@
45
48
  <p data-note>One card per role; <code>description-list-ui</code> with capability category as term, list of capabilities as description. Inline tag indicates whether the role is built-in or custom.</p>
46
49
  <div data-artifact-container>
47
50
  <div data-artifact-item data-artifact-label="role summary card">
48
- <card-ui data-chunk="permissions-matrix-summary" data-perm-summary>
51
+ <card-ui data-chunk="permissions-matrix-summary" data-chunk-kind="block"
52
+ data-chunk-domain="settings"
53
+ data-chunk-description="Role summary card — a single role (Admin, Built-in, 3 members) with a description list of its capability groups and what each allows."
54
+ data-chunk-keywords="role summary admin built-in members capabilities description permissions detail rbac card" data-perm-summary>
49
55
  <header>
50
56
  <span slot="heading" variant="section">Admin</span>
51
57
  <text-ui slot="description" color="subtle">Built-in role · 3 members</text-ui>