@adia-ai/web-components 0.6.50 → 0.7.0

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 (100) hide show
  1. package/CHANGELOG.md +120 -0
  2. package/components/action-list/action-list.css +1 -1
  3. package/components/agent-artifact/agent-artifact.class.js +10 -10
  4. package/components/agent-artifact/agent-artifact.css +1 -1
  5. package/components/agent-reasoning/agent-reasoning.class.js +51 -0
  6. package/components/agent-reasoning/agent-reasoning.css +49 -22
  7. package/components/alert/alert.class.js +8 -1
  8. package/components/alert/alert.css +13 -1
  9. package/components/avatar/avatar.a2ui.json +2 -14
  10. package/components/avatar/avatar.class.js +3 -15
  11. package/components/avatar/avatar.d.ts +2 -4
  12. package/components/avatar/avatar.yaml +1 -18
  13. package/components/breadcrumb/breadcrumb.css +4 -1
  14. package/components/button/button.a2ui.json +3 -0
  15. package/components/button/button.css +14 -3
  16. package/components/button/button.yaml +5 -0
  17. package/components/calendar-grid/calendar-grid.css +1 -1
  18. package/components/calendar-picker/calendar-picker.css +5 -2
  19. package/components/chart/chart.a2ui.json +0 -18
  20. package/components/chart/chart.class.js +8 -50
  21. package/components/chart/chart.css +1 -15
  22. package/components/chart/chart.d.ts +0 -4
  23. package/components/chart/chart.yaml +0 -24
  24. package/components/color-input/color-input.css +4 -1
  25. package/components/combobox/combobox.class.js +11 -0
  26. package/components/combobox/combobox.css +8 -0
  27. package/components/date-range-picker/date-range-picker.class.js +5 -1
  28. package/components/date-range-picker/date-range-picker.css +12 -2
  29. package/components/datetime-picker/datetime-picker.class.js +3 -0
  30. package/components/datetime-picker/datetime-picker.css +16 -2
  31. package/components/empty-state/empty-state.css +11 -4
  32. package/components/field/field.css +17 -6
  33. package/components/grid/grid.a2ui.json +5 -0
  34. package/components/grid/grid.class.js +16 -6
  35. package/components/grid/grid.css +17 -3
  36. package/components/grid/grid.d.ts +2 -0
  37. package/components/grid/grid.yaml +9 -0
  38. package/components/heatmap/heatmap.class.js +9 -3
  39. package/components/heatmap/heatmap.css +19 -2
  40. package/components/image/image.css +4 -1
  41. package/components/input/input.css +1 -1
  42. package/components/integration-card/integration-card.class.js +31 -7
  43. package/components/integration-card/integration-card.test.js +12 -1
  44. package/components/kbd/kbd.a2ui.json +3 -2
  45. package/components/kbd/kbd.css +7 -4
  46. package/components/kbd/kbd.d.ts +2 -2
  47. package/components/kbd/kbd.yaml +2 -1
  48. package/components/list/list.class.js +8 -1
  49. package/components/menu/menu.css +4 -1
  50. package/components/modal/modal.class.js +10 -1
  51. package/components/modal/modal.css +9 -0
  52. package/components/option-card/option-card.a2ui.json +3 -0
  53. package/components/option-card/option-card.css +44 -19
  54. package/components/option-card/option-card.yaml +5 -0
  55. package/components/otp-input/otp-input.css +25 -10
  56. package/components/page/page.css +64 -11
  57. package/components/pagination/pagination.class.js +1 -1
  58. package/components/pagination/pagination.css +9 -1
  59. package/components/pipeline-status/pipeline-status.css +6 -0
  60. package/components/popover/popover.css +12 -1
  61. package/components/preview/preview.css +30 -3
  62. package/components/progress-row/progress-row.css +3 -1
  63. package/components/qr-code/qr-code.css +4 -1
  64. package/components/segmented/segmented.css +4 -1
  65. package/components/select/select.a2ui.json +1 -1
  66. package/components/select/select.class.js +63 -7
  67. package/components/select/select.css +18 -0
  68. package/components/select/select.yaml +9 -2
  69. package/components/stack/stack.a2ui.json +12 -1
  70. package/components/stack/stack.d.ts +2 -2
  71. package/components/stack/stack.yaml +13 -1
  72. package/components/stat/stat.a2ui.json +5 -0
  73. package/components/stat/stat.css +55 -0
  74. package/components/stat/stat.d.ts +2 -0
  75. package/components/stat/stat.js +4 -0
  76. package/components/stat/stat.yaml +9 -0
  77. package/components/swiper/swiper.class.js +14 -6
  78. package/components/switch/switch.css +13 -0
  79. package/components/table/table.a2ui.json +2 -2
  80. package/components/table/table.css +13 -1
  81. package/components/table/table.yaml +2 -2
  82. package/components/time-picker/time-picker.css +4 -1
  83. package/components/timeline/timeline.class.js +3 -3
  84. package/components/timeline/timeline.css +23 -5
  85. package/components/toggle-group/toggle-group.css +4 -1
  86. package/components/toggle-scheme/toggle-scheme.css +4 -1
  87. package/dist/web-components.min.css +1 -1
  88. package/dist/web-components.min.js +81 -81
  89. package/package.json +3 -3
  90. package/styles/api/layout.css +7 -0
  91. package/styles/api/text.css +9 -5
  92. package/styles/index.css +11 -2
  93. package/styles/prose.css +8 -0
  94. package/styles/resets.css +5 -5
  95. package/styles/themes.css +8 -1
  96. package/styles/tokens.css +3 -3
  97. package/styles/type/elements.css +73 -0
  98. package/styles/type/roles.css +14 -49
  99. package/styles/type/scale.css +0 -5
  100. package/styles/typography.css +3 -3
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@adia-ai/web-components",
3
- "version": "0.6.50",
3
+ "version": "0.7.0",
4
4
  "description": "AdiaUI web components \u2014 vanilla custom elements. A2UI runtime (renderer, registry, streams, wiring) lives in @adia-ai/a2ui-runtime.",
5
5
  "type": "module",
6
6
  "types": "./index.d.ts",
@@ -115,7 +115,7 @@
115
115
  "./core/icons-phosphor.js"
116
116
  ],
117
117
  "dependencies": {
118
- "@adia-ai/a2ui-runtime": "^0.6.0",
118
+ "@adia-ai/a2ui-runtime": "^0.7.0",
119
119
  "@codemirror/commands": "^6.10.3",
120
120
  "@codemirror/language": "^6.12.3",
121
121
  "@codemirror/lint": "^6.9.5",
@@ -124,7 +124,7 @@
124
124
  "@lezer/highlight": "^1.2.3"
125
125
  },
126
126
  "optionalDependencies": {
127
- "@adia-ai/web-modules": "^0.6.0",
127
+ "@adia-ai/web-modules": "^0.7.0",
128
128
  "@codemirror/lang-css": "^6.3.1",
129
129
  "@codemirror/lang-html": "^6.4.11",
130
130
  "@codemirror/lang-javascript": "^6.2.5",
@@ -17,3 +17,10 @@
17
17
  flex: 1;
18
18
  min-width: 0;
19
19
  }
20
+
21
+ /* [inline] — display-flip to inline-level. Deliberately NOT a global rule here:
22
+ it must override each component's own `:scope{display}` (specificity 0,1,0),
23
+ so it lives per-component as `:scope[inline]` (0,2,0) inside each @scope. A
24
+ bare global `[inline]` would tie and be cascade-order-fragile. Block-level is
25
+ the default for composite/control/container primitives; text-flow atoms stay
26
+ inline. See ADR-0037 + docs/specs/attribute-api-system.md §5. */
@@ -7,11 +7,15 @@
7
7
  GLOBAL PRESENTATIONAL ATTRIBUTES
8
8
  Work on any element. Attribute-driven, not class-based.
9
9
 
10
- NOTE: These have lower specificity than @scope component CSS.
11
- Using [weight="bold"] on a component like <text-ui> will be
12
- overridden by the component's own font-weight rule. Use these
13
- on plain elements (<span>, <p>, <div>) or choose the right
14
- [variant] instead.
10
+ PRECEDENCE (ADR-0038): these attributes are the `utilities` layer
11
+ (currently unlayered, a named `utilities` layer in migration step 6),
12
+ which sits ABOVE the `components` layer in cascade order. So
13
+ [weight="bold"] on a component like <text-ui> now OVERRIDES the
14
+ component's own font-weight rule — utilities win over components by layer,
15
+ on any element. Before the @layer migration (step 5) these LOST to
16
+ component @scope by proximity; that limitation is retired. The full set of
17
+ component×property honorings (39: 25 color · 10 weight · 3 text-align ·
18
+ 1 transform) is enumerated by scripts/qa/cascade-component-attr-sweep.mjs.
15
19
  ═══════════════════════════════════════════════════════════ */
16
20
 
17
21
  /* Text alignment */
package/styles/index.css CHANGED
@@ -9,6 +9,15 @@
9
9
  Opt-in layers (theme presets, prose context) are linked separately —
10
10
  styles/themes.css and styles/prose.css. */
11
11
 
12
+ /* Cascade-layer order — ADR-0038, GS-P2-SPEC-1 §8 step 1.
13
+ Declares the precedence order once, up front. INERT until rules are assigned
14
+ to layers: with every import below still unlayered, all rules stay in the
15
+ (highest-priority) unlayered context, so the resolved cascade is unchanged —
16
+ proven behavior-neutral by the dist-bundle fingerprint at commit time.
17
+ Later cuts move each import into its layer (e.g. `… layer(tokens)`), one at
18
+ a time, each re-fingerprinted. */
19
+ @layer reset, tokens, elements, components, utilities, context, overrides;
20
+
12
21
  @import "./tokens.css";
13
- @import "./components.css";
14
- @import "./resets.css";
22
+ @import "./components.css" layer(components);
23
+ @import "./resets.css" layer(reset);
package/styles/prose.css CHANGED
@@ -10,6 +10,12 @@
10
10
  <div prose size="lg">...</div> — spacious prose
11
11
  ═══════════════════════════════════════════════════════════════ */
12
12
 
13
+ /* All rules below are the `context` layer (ADR-0038 step 7): theme/prose
14
+ context sits above `utilities`+`components`, so a [data-theme]/[prose] scope
15
+ re-skins everything within it. The @layer order is declared by the co-loaded
16
+ barrel (styles/index.css); this file only contributes to `context`. */
17
+ @layer context {
18
+
13
19
  [prose] {
14
20
  /* ── Radius — larger bases than UI ── */
15
21
  --a-radius-sm: clamp(var(--a-radius-min), calc(var(--a-radius-k) * var(--a-radius-max) * var(--a-radius-sm-k)), var(--a-radius-max));
@@ -180,3 +186,5 @@
180
186
  [prose] img {
181
187
  border-radius: var(--a-radius-lg);
182
188
  }
189
+
190
+ }
package/styles/resets.css CHANGED
@@ -73,11 +73,11 @@ canvas {
73
73
  block-size: auto;
74
74
  }
75
75
 
76
- ul[role='list'],
77
- ol[role='list'] {
78
- list-style: none;
79
- padding: 0;
80
- }
76
+ /* The `ul/ol[role="list"]` semantic-list opt-out moved to
77
+ styles/type/elements.css (with the other element list defaults) during the
78
+ @layer migration — it's an element-default refinement that must win by
79
+ specificity, not a floor-reset that may be demoted to the `reset` layer.
80
+ See ADR-0038 step 2 + the cascade-reset-layer probe. */
81
81
 
82
82
  /* ── Size-query provider utility ──────────────────────────────────
83
83
  Opt any element into being a container-query size provider for
package/styles/themes.css CHANGED
@@ -10,6 +10,12 @@
10
10
  <html data-theme="slate">...entire app...</html>
11
11
  ═══════════════════════════════════════════════════════════════ */
12
12
 
13
+ /* All rules below are the `context` layer (ADR-0038 step 7): theme/prose
14
+ context sits above `utilities`+`components`, so a [data-theme]/[prose] scope
15
+ re-skins everything within it. The @layer order is declared by the co-loaded
16
+ barrel (styles/index.css); this file only contributes to `context`. */
17
+ @layer context {
18
+
13
19
  /* ── Default (cool indigo, balanced) ── */
14
20
 
15
21
  [data-scheme="light"] {
@@ -35,7 +41,6 @@
35
41
  --a-info-hue: 200;
36
42
  --a-radius-k: 1;
37
43
  --a-density: 1;
38
- --a-density: 1;
39
44
  --a-shadow-intensity: 1;
40
45
  }
41
46
 
@@ -153,3 +158,5 @@
153
158
  --a-radius-k: 1.25;
154
159
  --a-density: 1.1;
155
160
  }
161
+
162
+ }
package/styles/tokens.css CHANGED
@@ -15,7 +15,7 @@
15
15
  API. Splitting the former single :root block into per-dimension files is
16
16
  cascade-inert (every token is declared exactly once). */
17
17
 
18
- @import "./colors/index.css";
18
+ @import "./colors/index.css" layer(tokens);
19
19
  @import "./typography.css";
20
- @import "./foundation/index.css";
21
- @import "./api/sizing.css";
20
+ @import "./foundation/index.css" layer(tokens);
21
+ @import "./api/sizing.css" layer(utilities);
@@ -60,6 +60,22 @@
60
60
  color: var(--a-fg-muted);
61
61
  }
62
62
 
63
+ /* Semantic-list opt-out: `role="list"` restores the ARIA list role that
64
+ `list-style: none` strips in Safari/VoiceOver, and removes the default
65
+ indent so a de-listed list reads as plain content. An element-default
66
+ *refinement*, not a floor-reset — its real specificity (0,1,1) beats the
67
+ `:where(ul, ol)` default (0,0,0) within this layer, so it wins by
68
+ specificity rather than by source order or by being unlayered. Relocated
69
+ from styles/resets.css during the @layer migration (ADR-0038 step 2):
70
+ under `@layer`, a rule in the low `reset` layer would lose to this
71
+ unlayered/`elements`-layer default — the win must come from specificity,
72
+ here, not from precedence trickery. */
73
+ ul[role='list'],
74
+ ol[role='list'] {
75
+ list-style: none;
76
+ padding: 0;
77
+ }
78
+
63
79
  /* ── Blockquote ── */
64
80
  :where(blockquote) {
65
81
  margin: 1em 0;
@@ -200,6 +216,63 @@
200
216
  border-radius: var(--a-radius-md);
201
217
  }
202
218
 
219
+ /* ── Heading role defaults (h1–h6) ──
220
+ Each native heading defaults to a sensible typographic role. Zero specificity
221
+ via :where() (0,0,0) so [variant] and component @scope always win. Relocated
222
+ from styles/type/roles.css during the @layer migration (ADR-0038 step 4) to
223
+ consolidate all native h1–h6 styling in the element-defaults file / `elements`
224
+ layer; co-located with the bare h1–h6 rule below, whose real specificity
225
+ (0,0,1) intentionally wins line-height (1.1) over these (the relationship is
226
+ specificity-decided, so it survives both rules landing in the same layer). */
227
+ :where(h1) {
228
+ font-family: var(--a-title-family);
229
+ font-weight: var(--a-title-weight);
230
+ font-size: var(--a-title-size);
231
+ line-height: var(--a-title-leading);
232
+ letter-spacing: var(--a-title-tracking);
233
+ color: var(--a-title-color);
234
+ }
235
+ :where(h2) {
236
+ font-family: var(--a-heading-family);
237
+ font-weight: var(--a-heading-weight);
238
+ font-size: var(--a-heading-size);
239
+ line-height: var(--a-heading-leading);
240
+ letter-spacing: var(--a-heading-tracking);
241
+ color: var(--a-heading-color);
242
+ }
243
+ :where(h3) {
244
+ font-family: var(--a-section-family);
245
+ font-weight: var(--a-section-weight);
246
+ font-size: var(--a-section-size);
247
+ line-height: var(--a-section-leading);
248
+ letter-spacing: var(--a-section-tracking);
249
+ color: var(--a-section-color);
250
+ }
251
+ :where(h4) {
252
+ font-family: var(--a-subsection-family);
253
+ font-weight: var(--a-subsection-weight);
254
+ font-size: var(--a-subsection-size);
255
+ line-height: var(--a-subsection-leading);
256
+ letter-spacing: var(--a-subsection-tracking);
257
+ color: var(--a-subsection-color);
258
+ }
259
+ :where(h5) {
260
+ font-family: var(--a-caption-family);
261
+ font-weight: var(--a-caption-weight);
262
+ font-size: var(--a-caption-size);
263
+ line-height: var(--a-caption-leading);
264
+ letter-spacing: var(--a-caption-tracking);
265
+ color: var(--a-caption-color);
266
+ }
267
+ :where(h6) {
268
+ font-family: var(--a-label-family);
269
+ font-weight: var(--a-label-weight);
270
+ font-size: var(--a-label-size);
271
+ line-height: var(--a-label-leading);
272
+ letter-spacing: var(--a-label-tracking);
273
+ color: var(--a-label-color);
274
+ }
275
+
203
276
  /* ── Native element typography consolidated from resets.css ──
204
277
  (v0.6.48 reorg, ADR-0035). These are (0,0,1)/(0,1,1) and only compete
205
278
  with the :where() (0,0,0) defaults above, so specificity decides — the
@@ -259,56 +259,20 @@
259
259
  <span variant="kicker">Category</span>
260
260
  ═══════════════════════════════════════════════════════════ */
261
261
 
262
- /* ── h1–h6 defaults sensible roles, zero specificity so [variant] wins ── */
263
- :where(h1) {
264
- font-family: var(--a-title-family);
265
- font-weight: var(--a-title-weight);
266
- font-size: var(--a-title-size);
267
- line-height: var(--a-title-leading);
268
- letter-spacing: var(--a-title-tracking);
269
- color: var(--a-title-color);
270
- }
271
- :where(h2) {
272
- font-family: var(--a-heading-family);
273
- font-weight: var(--a-heading-weight);
274
- font-size: var(--a-heading-size);
275
- line-height: var(--a-heading-leading);
276
- letter-spacing: var(--a-heading-tracking);
277
- color: var(--a-heading-color);
278
- }
279
- :where(h3) {
280
- font-family: var(--a-section-family);
281
- font-weight: var(--a-section-weight);
282
- font-size: var(--a-section-size);
283
- line-height: var(--a-section-leading);
284
- letter-spacing: var(--a-section-tracking);
285
- color: var(--a-section-color);
286
- }
287
- :where(h4) {
288
- font-family: var(--a-subsection-family);
289
- font-weight: var(--a-subsection-weight);
290
- font-size: var(--a-subsection-size);
291
- line-height: var(--a-subsection-leading);
292
- letter-spacing: var(--a-subsection-tracking);
293
- color: var(--a-subsection-color);
294
- }
295
- :where(h5) {
296
- font-family: var(--a-caption-family);
297
- font-weight: var(--a-caption-weight);
298
- font-size: var(--a-caption-size);
299
- line-height: var(--a-caption-leading);
300
- letter-spacing: var(--a-caption-tracking);
301
- color: var(--a-caption-color);
302
- }
303
- :where(h6) {
304
- font-family: var(--a-label-family);
305
- font-weight: var(--a-label-weight);
306
- font-size: var(--a-label-size);
307
- line-height: var(--a-label-leading);
308
- letter-spacing: var(--a-label-tracking);
309
- color: var(--a-label-color);
310
- }
262
+ /* The h1–h6 :where() defaults moved to styles/type/elements.css (the
263
+ element-defaults file, which already owns the bare h1–h6 text-wrap/leading
264
+ rule) during the @layer migration — ADR-0038 step 4. They belong in the
265
+ `elements` layer alongside the rest of the native-element baseline. Role
266
+ *tokens* (above) stay here (unlayered → `tokens`); the [variant] API (below)
267
+ is now the `utilities` layer (step 6). */
311
268
 
269
+ /* [variant] attribute API → `utilities` layer (ADR-0038 step 6). Above
270
+ `components` and `elements`, so a [variant] on any element (component,
271
+ heading, span) wins by layer order — not specificity. Within `utilities` it
272
+ ties with [weight]/[color] (all (0,1,0)); source order decides, and api/text
273
+ imports AFTER this block, so [weight] still wins that tie — preserved by both
274
+ landing in the same layer. */
275
+ @layer utilities {
312
276
  [variant="display"] {
313
277
  font-family: var(--a-display-family);
314
278
  font-weight: var(--a-display-weight);
@@ -417,3 +381,4 @@
417
381
  text-transform: var(--a-code-case);
418
382
  color: var(--a-code-color);
419
383
  }
384
+ } /* @layer utilities — [variant] API */
@@ -12,10 +12,6 @@
12
12
 
13
13
  /* ── Font families ── */
14
14
 
15
- /*--a-font-family-sans: var(--a-font-gt-standard);*/
16
- /*--a-font-family-mono: var(--a-font-gt-standard-mono);*/
17
- /*--a-font-family-sans: var(--a-font-neu-montreal-sans);*/
18
- /*--a-font-family-mono: var(--a-font-neu-montreal-mono);*/
19
15
  --a-font-family-display: var(--a-font-family-sans);
20
16
  --a-font-family-text: var(--a-font-family-sans);
21
17
  --a-font-family-heading: var(--a-font-family-sans);
@@ -23,7 +19,6 @@
23
19
  --a-font-family-code: var(--a-font-family-mono);
24
20
  --a-font-family-control: var(--a-font-family-mono);
25
21
  --a-font-family: var(--a-font-family-sans);
26
- --a-font-family-text: var(--a-font-family-sans);
27
22
 
28
23
  /* ── Type scale ──
29
24
  Ratio: ~1.25 (major third) with dramatic hero jump.
@@ -60,6 +60,6 @@
60
60
 
61
61
  @import "./type/scale.css"; /* L1/L2 — families, weights, leading, tracking */
62
62
  @import "./type/roles.css"; /* L3 — 13 roles + h1-h6 + [variant] */
63
- @import "./type/elements.css"; /* native element defaults */
64
- @import "./api/text.css"; /* [text-align][weight][color][transform][truncate] */
65
- @import "./api/layout.css"; /* [hidden][nomargin][grow] */
63
+ @import "./type/elements.css" layer(elements); /* native element defaults → elements layer (ADR-0038 step 4) */
64
+ @import "./api/text.css" layer(utilities); /* [text-align][weight][color][transform][truncate] → utilities (ADR-0038 step 6) */
65
+ @import "./api/layout.css" layer(utilities); /* [hidden][nomargin][grow] → utilities */