@adia-ai/web-components 0.8.34 → 0.8.35

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 (89) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/components/agent-questions/agent-questions.class.js +0 -1
  3. package/components/badge/badge.css +27 -3
  4. package/components/badge/badge.examples.md +4 -4
  5. package/components/card/card.css +44 -1
  6. package/components/check/check.a2ui.json +25 -11
  7. package/components/check/check.class.js +5 -0
  8. package/components/check/check.css +21 -0
  9. package/components/check/check.d.ts +2 -0
  10. package/components/check/check.examples.md +4 -4
  11. package/components/check/check.yaml +26 -7
  12. package/components/demo-toggle/demo-toggle.css +4 -0
  13. package/components/demo-toggle/demo-toggle.examples.md +4 -4
  14. package/components/feed/feed-item.a2ui.json +3 -2
  15. package/components/feed/feed-item.yaml +7 -1
  16. package/components/feed/feed.css +28 -5
  17. package/components/field/field.examples.md +4 -4
  18. package/components/image/image.class.js +8 -0
  19. package/components/nav-group/nav-group.css +12 -1
  20. package/components/option-card/option-card.a2ui.json +10 -10
  21. package/components/option-card/option-card.css +32 -16
  22. package/components/option-card/option-card.yaml +19 -15
  23. package/components/radio/radio.examples.md +4 -4
  24. package/components/range/range.css +8 -4
  25. package/components/slider/slider.a2ui.json +6 -3
  26. package/components/slider/slider.css +28 -12
  27. package/components/slider/slider.yaml +11 -3
  28. package/components/stat/stat.examples.md +4 -4
  29. package/components/swatch/swatch.css +14 -6
  30. package/components/switch/switch.examples.md +4 -4
  31. package/components/table-toolbar/table-toolbar.css +10 -1
  32. package/components/tabs/tabs.css +10 -4
  33. package/components/tag/tag.class.js +14 -1
  34. package/components/tag/tag.css +63 -5
  35. package/components/text/text.examples.md +4 -4
  36. package/components/timeline/timeline-item.a2ui.json +2 -2
  37. package/components/timeline/timeline-item.yaml +2 -2
  38. package/components/timeline/timeline.css +33 -5
  39. package/components/timeline/timeline.d.ts +2 -2
  40. package/components/toast/toast.css +28 -5
  41. package/custom-elements.json +469 -46
  42. package/dist/theme-provider.min.js +1 -1
  43. package/dist/web-components.min.css +1 -1
  44. package/dist/web-components.min.js +4 -4
  45. package/dist/web-components.sheet.js +1 -1
  46. package/package.json +1 -1
  47. package/patterns/access-requests/access-requests.examples.html +3 -3
  48. package/patterns/admin-keys-and-export/admin-keys-and-export.examples.html +3 -3
  49. package/patterns/admin-shell/admin-shell.examples.html +3 -4
  50. package/patterns/agent-cost/agent-cost.examples.html +3 -3
  51. package/patterns/agent-memory/agent-memory.examples.html +3 -3
  52. package/patterns/agent-prompt-library/agent-prompt-library.examples.html +3 -3
  53. package/patterns/agent-tool-call/agent-tool-call.examples.html +3 -3
  54. package/patterns/alert-dialog/alert-dialog.examples.html +3 -3
  55. package/patterns/app-nav/app-nav.examples.html +4 -4
  56. package/patterns/approvals/approvals.examples.html +3 -3
  57. package/patterns/audit-log/audit-log.examples.html +3 -3
  58. package/patterns/bulk-action-toolbar/bulk-action-toolbar.examples.html +19 -9
  59. package/patterns/bulk-action-toolbar/bulk-action-toolbar.examples.js +2 -2
  60. package/patterns/changelog-feed/changelog-feed.examples.html +3 -3
  61. package/patterns/chart-in-card/chart-in-card.examples.html +37 -3
  62. package/patterns/chart-in-card/chart-in-card.examples.js +12 -0
  63. package/patterns/chart-in-card/chart-in-card.html +6 -0
  64. package/patterns/chat-shell/chat-shell.examples.html +3 -4
  65. package/patterns/comments-and-collaboration/comments-and-collaboration.examples.html +3 -3
  66. package/patterns/conversion-funnel/conversion-funnel.examples.html +3 -3
  67. package/patterns/data-tables-inline-edit-and-tree/data-tables-inline-edit-and-tree.examples.html +3 -3
  68. package/patterns/diff-review/diff-review.examples.html +3 -3
  69. package/patterns/editor-shell/editor-shell.examples.html +3 -4
  70. package/patterns/export-flow/export-flow.examples.html +3 -3
  71. package/patterns/filter-bar/filter-bar.examples.html +3 -3
  72. package/patterns/form-drawer/form-drawer.examples.html +3 -3
  73. package/patterns/forms-conditional-and-autocomplete/forms-conditional-and-autocomplete.examples.html +3 -3
  74. package/patterns/inline-dialog/inline-dialog.examples.html +3 -3
  75. package/patterns/kanban-board/kanban-board.examples.html +3 -3
  76. package/patterns/layout/layout.examples.html +4 -7
  77. package/patterns/marketing-engagement/marketing-engagement.examples.html +3 -3
  78. package/patterns/notifications-bell-and-digest/notifications-bell-and-digest.examples.html +3 -3
  79. package/patterns/permissions-matrix/permissions-matrix.examples.html +3 -3
  80. package/patterns/permissions-role-picker/permissions-role-picker.examples.html +3 -3
  81. package/patterns/permissions-sharing/permissions-sharing.examples.html +3 -3
  82. package/patterns/profile-public-and-verification/profile-public-and-verification.examples.html +3 -3
  83. package/patterns/record-detail-drawer/record-detail-drawer.examples.html +3 -3
  84. package/patterns/responsive-shell-sidebar/responsive-shell-sidebar.examples.html +3 -3
  85. package/patterns/retention-cohort/retention-cohort.examples.html +3 -3
  86. package/patterns/search-discovery/search-discovery.examples.html +3 -3
  87. package/patterns/system-banners/system-banners.examples.html +3 -3
  88. package/patterns/timezone-selector/timezone-selector.examples.html +3 -3
  89. package/patterns/wizard-drawer/wizard-drawer.examples.html +3 -3
@@ -11,8 +11,8 @@
11
11
  ```html
12
12
  <row-ui gap="6" align="start" wrap>
13
13
  <col-ui gap="2">
14
- <text-ui variant="caption" color="muted">verse</text-ui>
15
- <div verse style="max-width:240px">
14
+ <text-ui variant="caption" color="muted">scale="ui-sm"</text-ui>
15
+ <div scale="ui-sm" style="max-width:240px">
16
16
  <col-ui gap="2">
17
17
  <text-ui variant="heading">Heading</text-ui>
18
18
  <text-ui variant="body">Body copy showing how this register sizes running text and the leading between lines.</text-ui>
@@ -31,8 +31,8 @@
31
31
  </div>
32
32
  </col-ui>
33
33
  <col-ui gap="2">
34
- <text-ui variant="caption" color="muted">prose</text-ui>
35
- <div prose style="max-width:240px">
34
+ <text-ui variant="caption" color="muted">scale="content-md"</text-ui>
35
+ <div scale="content-md" style="max-width:240px">
36
36
  <col-ui gap="2">
37
37
  <text-ui variant="heading">Heading</text-ui>
38
38
  <text-ui variant="body">Body copy showing how this register sizes running text and the leading between lines.</text-ui>
@@ -29,12 +29,12 @@
29
29
  "type": "string"
30
30
  },
31
31
  "spinner": {
32
- "description": "Show a spinner instead of the icon while status=pending.",
32
+ "description": "Show a spinner instead of the dot/icon while status=\"active\".",
33
33
  "type": "boolean",
34
34
  "default": false
35
35
  },
36
36
  "status": {
37
- "description": "Lifecycle state (idle | pending | done | failed).",
37
+ "description": "Lifecycle state (idle | active | completed | error). Pairs with `spinner` on \"active\" for an in-progress step.",
38
38
  "type": "string",
39
39
  "default": "idle"
40
40
  },
@@ -39,11 +39,11 @@ props:
39
39
  type: string
40
40
  default: 'default'
41
41
  status:
42
- description: Lifecycle state (idle | pending | done | failed).
42
+ description: Lifecycle state (idle | active | completed | error). Pairs with `spinner` on "active" for an in-progress step.
43
43
  type: string
44
44
  default: 'idle'
45
45
  spinner:
46
- description: Show a spinner instead of the icon while status=pending.
46
+ description: Show a spinner instead of the dot/icon while status="active".
47
47
  type: boolean
48
48
  default: false
49
49
 
@@ -176,6 +176,17 @@ agent-reasoning-ui timeline-ui:not([orientation="horizontal"]),
176
176
  --timeline-item-toggle-px: var(--a-space-0-5);
177
177
  --timeline-item-toggle-time-margin: 1.5rem;
178
178
  --timeline-item-outcome-indent: 0.75rem;
179
+
180
+ /* Row-1's rendered height — [slot="label"]'s own line-height (1.4,
181
+ set at var(--timeline-item-label-size), timeline.css below). Marker
182
+ centering (dot/line/icon/caret) must measure against THIS, not a
183
+ bare `1.4em`: `em` on the marker's own box resolves against
184
+ timeline-item-ui's ambient/inherited font-size, which is NOT
185
+ guaranteed to equal --timeline-item-label-size (it doesn't, by
186
+ default — nothing sets font-size on timeline-item-ui itself), so a
187
+ literal `1.4em` silently drifted off the label's real line-height
188
+ and threw every marker's vertical center off by that gap (gh#1090). */
189
+ --timeline-item-row-h: calc(var(--timeline-item-label-size) * 1.4);
179
190
  }
180
191
 
181
192
  :scope {
@@ -200,7 +211,7 @@ agent-reasoning-ui timeline-ui:not([orientation="horizontal"]),
200
211
  content: '';
201
212
  position: absolute;
202
213
  left: calc((var(--timeline-item-marker-w) - var(--timeline-item-dot-size)) / 2);
203
- top: calc((1.4em - var(--timeline-item-dot-size)) / 2 + 1px);
214
+ top: calc((var(--timeline-item-row-h) - var(--timeline-item-dot-size)) / 2 + 1px);
204
215
  width: var(--timeline-item-dot-size);
205
216
  height: var(--timeline-item-dot-size);
206
217
  border-radius: 50%;
@@ -235,7 +246,7 @@ agent-reasoning-ui timeline-ui:not([orientation="horizontal"]),
235
246
  content: '';
236
247
  position: absolute;
237
248
  left: calc((var(--timeline-item-marker-w) - var(--timeline-item-line-size)) / 2);
238
- top: calc((1.4em + var(--timeline-item-dot-size)) / 2 + 2px);
249
+ top: calc((var(--timeline-item-row-h) + var(--timeline-item-dot-size)) / 2 + 2px);
239
250
  bottom: calc(-1 * var(--timeline-item-gap-row));
240
251
  width: var(--timeline-item-line-size);
241
252
  background: var(--timeline-item-line-fg);
@@ -252,8 +263,17 @@ agent-reasoning-ui timeline-ui:not([orientation="horizontal"]),
252
263
  grid-column: marker;
253
264
  grid-row: 1;
254
265
  justify-self: center;
255
- align-self: baseline;
256
- margin-top: calc((1.4em - var(--timeline-item-icon-size)) / 2);
266
+ /* `baseline` anchors a baseline-less box (icon-ui has no text) by its
267
+ synthesized baseline — the bottom margin edge (CSS Box Alignment)
268
+ to the row's shared text baseline. That pins the icon's BOTTOM to
269
+ near the bottom of the label's glyphs and makes the margin-top
270
+ centering below a no-op (the alignment step repositions the box
271
+ after margin is applied, so no margin-top value moves the rendered
272
+ circle). `start` anchors the row's block-start instead, so
273
+ margin-top's `(row-h - icon-size)/2` genuinely centers the icon
274
+ against the label's line-height (gh#1090). */
275
+ align-self: start;
276
+ margin-top: calc((var(--timeline-item-row-h) - var(--timeline-item-icon-size)) / 2);
257
277
  width: var(--timeline-item-icon-size);
258
278
  height: var(--timeline-item-icon-size);
259
279
  border-radius: 50%;
@@ -278,7 +298,7 @@ agent-reasoning-ui timeline-ui:not([orientation="horizontal"]),
278
298
 
279
299
  /* Push connector line past the icon circle */
280
300
  :scope:has([slot="icon"])::after {
281
- top: calc((1.4em + var(--timeline-item-icon-size)) / 2 + 2px);
301
+ top: calc((var(--timeline-item-row-h) + var(--timeline-item-icon-size)) / 2 + 2px);
282
302
  }
283
303
 
284
304
  /* ═══════ Content slots ═══════ */
@@ -400,6 +420,14 @@ timeline-ui[size="sm"] > timeline-item-ui[status="active"][spinner]::before {
400
420
  timeline-ui[orientation="horizontal"] > timeline-item-ui {
401
421
  display: flex;
402
422
  flex-direction: column;
423
+ /* Reset the vertical-mode grid's `align-items: baseline` (timeline.css
424
+ above) — baseline is incompatible with cross-axis stretch, so without
425
+ this reset [slot="label"]/[slot="description"]/[slot="time"] (plain
426
+ <span>s) shrink-to-fit their own text instead of spanning the item's
427
+ full width, leaving `text-align: center` below with no extra width to
428
+ center within (labels rendered flush against the item's left edge —
429
+ gh#1090). */
430
+ align-items: stretch;
403
431
  flex: 1 1 0;
404
432
  min-width: 0;
405
433
  padding-top: calc(var(--timeline-dot-size) + var(--timeline-gap-col));
@@ -40,9 +40,9 @@ export class UITimelineItem extends UIElement {
40
40
  duration: string;
41
41
  /** Optional leading icon name (Phosphor). */
42
42
  icon: string;
43
- /** Show a spinner instead of the icon while status=pending. */
43
+ /** Show a spinner instead of the dot/icon while status="active". */
44
44
  spinner: boolean;
45
- /** Lifecycle state (idle | pending | done | failed). */
45
+ /** Lifecycle state (idle | active | completed | error). Pairs with `spinner` on "active" for an in-progress step. */
46
46
  status: string;
47
47
  /** Primary step label. */
48
48
  text: string;
@@ -2,6 +2,17 @@
2
2
  TOAST-N — Notification popup with auto-dismiss.
3
3
  ═══════════════════════════════════════════════════════════════ */
4
4
 
5
+ /* DEAD-CODE NOTICE (gh#1104, ties to Phase 4 of
6
+ .claude/docs/specs/feed-channel.md / SPEC-FEED-CHANNEL-001):
7
+ <toast-ui> is a self-removing facade — toast.class.js's
8
+ `connected()` posts into <feed-ui>/UIFeed then `queueMicrotask`s
9
+ `this.remove()`, so this element never survives to a paint. Every
10
+ rule below (including the `primary` variant) is unreachable at
11
+ runtime. The real paint site is feed.css's `@scope (feed-item-ui)`
12
+ block — edit THAT file to change what a posted toast looks like.
13
+ Kept here (not deleted) as the documented visual contract + the
14
+ reference the feed-item-ui `primary` variant was ported from. */
15
+
5
16
  /* Safari 17.x bug: `:scope[data-open]` and `:scope[data-closing]`
6
17
  (Flavor B — attribute-removal restyle) don't reliably restyle on
7
18
  attribute toggling inside `@scope`. Selectors moved out as plain
@@ -73,6 +84,10 @@ toast-ui[data-closing][position="top-left"] {
73
84
  box-shadow: var(--toast-shadow);
74
85
  opacity: 0;
75
86
  pointer-events: auto;
87
+ /* Elevated-surface separation over busy page content (gh#1091) —
88
+ mirrors loading-overlay.css's [variant="blur"] treatment. */
89
+ backdrop-filter: blur(4px);
90
+ -webkit-backdrop-filter: blur(4px);
76
91
  }
77
92
 
78
93
  /* ── Position variants ── */
@@ -112,26 +127,34 @@ toast-ui[data-closing][position="top-left"] {
112
127
  light-dark scheme-aware token), NOT `--a-{variant}-text-strong`
113
128
  (the latter is locked dark for warning + light for the others —
114
129
  designed for solid `--variant-strong` fills, where the bg never
115
- flips). Mirrors alert.css's variant wiring. */
130
+ flips). Mirrors alert.css's variant wiring.
131
+
132
+ `--toast-bg` rides `-container-high` (NOT the plain `-container`
133
+ alert.css uses) — a floating overlay over arbitrary page content
134
+ needs a stronger tonal step than an inline, already-boxed alert to
135
+ read as separated (gh#1091). `-container-high` is a real generated
136
+ role per family in colors/material-static.css (the same tier
137
+ `--a-{family}-subtle` aliases to per component-token-contract.md's
138
+ `-strong` semantics note) — not a hand-authored addition. */
116
139
 
117
140
  :where(:scope),
118
141
  :where(:scope[variant="info"]) {
119
- --toast-bg: var(--md-sys-color-info-container);
142
+ --toast-bg: var(--md-sys-color-info-container-high);
120
143
  --toast-fg: var(--md-sys-color-info-on-surface);
121
144
  --toast-border: var(--md-sys-color-info-outline-variant);
122
145
  }
123
146
  :where(:scope[variant="success"]) {
124
- --toast-bg: var(--md-sys-color-success-container);
147
+ --toast-bg: var(--md-sys-color-success-container-high);
125
148
  --toast-fg: var(--md-sys-color-success-on-surface);
126
149
  --toast-border: var(--md-sys-color-success-outline-variant);
127
150
  }
128
151
  :where(:scope[variant="warning"]) {
129
- --toast-bg: var(--md-sys-color-warning-container);
152
+ --toast-bg: var(--md-sys-color-warning-container-high);
130
153
  --toast-fg: var(--md-sys-color-warning-on-surface);
131
154
  --toast-border: var(--md-sys-color-warning-outline-variant);
132
155
  }
133
156
  :where(:scope[variant="danger"]) {
134
- --toast-bg: var(--md-sys-color-danger-container);
157
+ --toast-bg: var(--md-sys-color-danger-container-high);
135
158
  --toast-fg: var(--md-sys-color-danger-on-surface);
136
159
  --toast-border: var(--md-sys-color-danger-outline-variant);
137
160
  }