@adia-ai/web-components 0.7.3 → 0.7.4

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 (136) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/components/accordion/accordion.css +2 -2
  3. package/components/action-list/action-list.css +2 -2
  4. package/components/agent-artifact/agent-artifact.css +31 -31
  5. package/components/agent-feedback-bar/agent-feedback-bar.css +10 -10
  6. package/components/agent-questions/agent-questions.css +59 -57
  7. package/components/agent-reasoning/agent-reasoning.css +54 -54
  8. package/components/agent-suggestions/agent-suggestions.css +4 -4
  9. package/components/agent-trace/agent-trace.css +53 -53
  10. package/components/alert/alert.css +53 -53
  11. package/components/avatar/avatar.css +27 -27
  12. package/components/badge/badge.css +56 -53
  13. package/components/block/block.css +16 -16
  14. package/components/blockquote/blockquote.css +16 -16
  15. package/components/breadcrumb/breadcrumb.css +23 -23
  16. package/components/button/button.css +99 -100
  17. package/components/calendar-grid/calendar-grid.css +95 -92
  18. package/components/calendar-picker/calendar-picker.css +141 -139
  19. package/components/canvas/canvas.css +12 -12
  20. package/components/card/card.css +83 -83
  21. package/components/chart/chart.css +218 -218
  22. package/components/chart-legend/chart-legend.css +26 -26
  23. package/components/check/check.css +40 -40
  24. package/components/code/code.css +125 -125
  25. package/components/col/col.css +15 -15
  26. package/components/color-picker/color-picker.css +55 -55
  27. package/components/combobox/combobox.css +64 -62
  28. package/components/command/command.css +91 -91
  29. package/components/context-menu/context-menu.css +1 -1
  30. package/components/date-range-picker/date-range-picker.css +59 -59
  31. package/components/datetime-picker/datetime-picker.css +25 -25
  32. package/components/demo-toggle/demo-toggle.css +27 -27
  33. package/components/description-list/description-list.css +18 -18
  34. package/components/divider/divider.css +24 -24
  35. package/components/embed/embed.css +6 -6
  36. package/components/empty-state/empty-state.css +29 -29
  37. package/components/feed/feed.css +12 -12
  38. package/components/field/field.css +28 -28
  39. package/components/field/field.test.js +2 -2
  40. package/components/fields/fields.css +5 -5
  41. package/components/grid/grid.a2ui.json +10 -0
  42. package/components/grid/grid.css +23 -5
  43. package/components/grid/grid.d.ts +4 -0
  44. package/components/grid/grid.yaml +13 -0
  45. package/components/heatmap/heatmap.css +61 -61
  46. package/components/icon/icon.css +12 -12
  47. package/components/image/image.css +14 -14
  48. package/components/inline-edit/inline-edit.css +16 -16
  49. package/components/inline-message/inline-message.css +16 -16
  50. package/components/input/input.css +69 -66
  51. package/components/inspector/inspector.css +6 -6
  52. package/components/integration-card/integration-card.css +41 -41
  53. package/components/integration-card/integration-card.test.js +4 -4
  54. package/components/kbd/kbd.css +47 -40
  55. package/components/link/link.css +12 -12
  56. package/components/list/list.css +8 -8
  57. package/components/list-window/list-window.css +10 -10
  58. package/components/loading-overlay/loading-overlay.css +17 -18
  59. package/components/loading-overlay/loading-overlay.test.js +8 -8
  60. package/components/mark/mark.css +16 -16
  61. package/components/menu/menu.css +9 -9
  62. package/components/modal/modal.class.js +5 -9
  63. package/components/modal/modal.css +43 -43
  64. package/components/nav/nav.css +40 -40
  65. package/components/nav-group/nav-group.css +54 -54
  66. package/components/nav-item/nav-item.css +44 -44
  67. package/components/noodles/noodles.css +31 -31
  68. package/components/number-format/number-format.css +4 -4
  69. package/components/option-card/option-card.css +70 -70
  70. package/components/otp-input/otp-input.css +29 -29
  71. package/components/page/page.a2ui.json +1 -1
  72. package/components/page/page.css +27 -27
  73. package/components/page/page.d.ts +1 -1
  74. package/components/page/page.yaml +1 -1
  75. package/components/pagination/pagination.css +6 -6
  76. package/components/pane/pane.css +57 -57
  77. package/components/password-strength/password-strength.css +32 -32
  78. package/components/pipeline-status/pipeline-status.css +67 -67
  79. package/components/popover/popover.css +11 -11
  80. package/components/preview/preview.css +21 -21
  81. package/components/progress/progress.css +23 -23
  82. package/components/progress-row/progress-row.css +17 -17
  83. package/components/qr-code/qr-code.css +4 -4
  84. package/components/radio/radio.css +39 -39
  85. package/components/range/range.css +58 -55
  86. package/components/rating/rating.css +28 -28
  87. package/components/relative-time/relative-time.css +6 -6
  88. package/components/richtext/richtext.css +133 -133
  89. package/components/row/row.css +19 -19
  90. package/components/search/search.css +5 -5
  91. package/components/segment/segment.css +29 -24
  92. package/components/segmented/segmented.css +30 -25
  93. package/components/select/select.css +95 -93
  94. package/components/skeleton/skeleton.css +14 -14
  95. package/components/skip-nav/skip-nav.css +4 -4
  96. package/components/slider/slider.css +61 -61
  97. package/components/spinner/spinner.css +40 -40
  98. package/components/spinner/spinner.test.js +10 -12
  99. package/components/stack/stack.css +11 -11
  100. package/components/stat/stat.css +27 -27
  101. package/components/step-progress/step-progress.css +20 -20
  102. package/components/stepper/stepper.css +29 -29
  103. package/components/stream/stream.css +12 -12
  104. package/components/swatch/swatch.css +68 -68
  105. package/components/swiper/swiper.class.js +5 -12
  106. package/components/swiper/swiper.css +57 -57
  107. package/components/switch/switch.css +53 -53
  108. package/components/table/table.css +166 -163
  109. package/components/table-toolbar/table-toolbar.css +33 -33
  110. package/components/tabs/tabs.css +54 -51
  111. package/components/tag/tag.css +74 -71
  112. package/components/tag/tag.test.js +14 -14
  113. package/components/tags-input/tags-input.css +51 -49
  114. package/components/text/text.css +44 -44
  115. package/components/textarea/textarea.css +49 -46
  116. package/components/time-picker/time-picker.css +47 -47
  117. package/components/timeline/timeline.css +54 -54
  118. package/components/toast/toast.css +58 -58
  119. package/components/toc/toc.css +28 -28
  120. package/components/toggle-group/toggle-group.css +9 -6
  121. package/components/toggle-scheme/toggle-scheme.css +2 -2
  122. package/components/toolbar/toolbar.css +18 -18
  123. package/components/tooltip/tooltip.css +2 -2
  124. package/components/tour/tour.css +4 -4
  125. package/components/tree/tree.css +37 -37
  126. package/components/upload/upload.css +49 -49
  127. package/dist/host.min.css +1 -0
  128. package/dist/web-components.min.css +1 -1
  129. package/dist/web-components.min.js +2 -2
  130. package/package.json +1 -1
  131. package/styles/foundation/space.css +19 -18
  132. package/styles/host.css +48 -0
  133. package/styles/prose.css +187 -173
  134. package/styles/type/scale.css +6 -0
  135. package/styles/typography.css +10 -5
  136. package/styles/verse.css +122 -0
@@ -7,16 +7,16 @@
7
7
 
8
8
  @scope (link-ui) {
9
9
  :where(:scope) {
10
- --link-fg-default: var(--a-link);
11
- --link-fg-hover-default: var(--a-link-hover);
12
- --link-fg-visited-default: var(--a-link-visited);
13
- --link-underline-offset-default: 2px;
14
- --link-focus-ring-default: var(--a-focus-ring);
10
+ --link-fg: var(--a-link);
11
+ --link-fg-hover: var(--a-link-hover);
12
+ --link-fg-visited: var(--a-link-visited);
13
+ --link-underline-offset: 2px;
14
+ --link-focus-ring: var(--a-focus-ring);
15
15
  }
16
16
 
17
17
  :scope {
18
18
  display: inline;
19
- color: var(--link-fg, var(--link-fg-default));
19
+ color: var(--link-fg);
20
20
  /* The text-decoration is on the inner <a>, not the host, so that
21
21
  host-level color overrides cascade correctly. */
22
22
  }
@@ -24,7 +24,7 @@
24
24
  :scope > a {
25
25
  color: inherit;
26
26
  text-decoration: underline;
27
- text-underline-offset: var(--link-underline-offset, var(--link-underline-offset-default));
27
+ text-underline-offset: var(--link-underline-offset);
28
28
  cursor: pointer;
29
29
  /* Standard transition for color hover. */
30
30
  transition: color var(--a-duration-fast) var(--a-easing);
@@ -38,17 +38,17 @@
38
38
  }
39
39
 
40
40
  :scope > a:hover {
41
- color: var(--link-fg-hover, var(--link-fg-hover-default));
41
+ color: var(--link-fg-hover);
42
42
  }
43
43
 
44
44
  :scope > a:visited {
45
- color: var(--link-fg-visited, var(--link-fg-visited-default));
45
+ color: var(--link-fg-visited);
46
46
  }
47
47
 
48
48
  /* Focus ring on the anchor (the actual focusable element). */
49
49
  :scope > a:focus-visible {
50
50
  outline: none;
51
- box-shadow: var(--link-focus-ring, var(--link-focus-ring-default));
51
+ box-shadow: var(--link-focus-ring);
52
52
  border-radius: var(--a-radius-sm);
53
53
  }
54
54
 
@@ -67,8 +67,8 @@
67
67
  affordance is implied by hover behavior + cursor. For "Already
68
68
  have an account?" type prose where the link role is contextual. */
69
69
  :scope[variant="quiet"] {
70
- --link-fg-default: inherit;
71
- --link-fg-hover-default: var(--a-link-hover);
70
+ --link-fg: inherit;
71
+ --link-fg-hover: var(--a-link-hover);
72
72
  }
73
73
  :scope[variant="quiet"] > a {
74
74
  text-decoration: none;
@@ -1,10 +1,10 @@
1
1
  @scope (list-ui) {
2
2
  :where(:scope) {
3
3
  /* ── Colors ── */
4
- --list-divider-color-default: var(--a-border-subtle);
5
- --list-bg-selected-default: var(--a-accent-muted);
6
- --list-fg-selected-default: var(--a-accent-strong);
7
- --list-border-selected-default: var(--a-accent-strong);
4
+ --list-divider-color: var(--a-border-subtle);
5
+ --list-bg-selected: var(--a-accent-muted);
6
+ --list-fg-selected: var(--a-accent-strong);
7
+ --list-border-selected: var(--a-accent-strong);
8
8
  }
9
9
 
10
10
  :scope {
@@ -17,7 +17,7 @@
17
17
 
18
18
  /* ── Divider ── */
19
19
  :scope[divider] list-item-ui + list-item-ui {
20
- border-top: 1px solid var(--list-divider-color, var(--list-divider-color-default));
20
+ border-top: 1px solid var(--list-divider-color);
21
21
  }
22
22
 
23
23
  /* ── Item padding / margin (controlled by list-ui attributes) ──
@@ -68,9 +68,9 @@
68
68
  }
69
69
 
70
70
  :scope[selectable] > [role="listitem"][aria-selected="true"] {
71
- background: var(--list-bg-selected, var(--list-bg-selected-default));
72
- color: var(--list-fg-selected, var(--list-fg-selected-default));
73
- border-inline-start-color: var(--list-border-selected, var(--list-border-selected-default));
71
+ background: var(--list-bg-selected);
72
+ color: var(--list-fg-selected);
73
+ border-inline-start-color: var(--list-border-selected);
74
74
  }
75
75
 
76
76
  :scope[selectable] > [role="listitem"]:focus-visible {
@@ -1,10 +1,10 @@
1
1
  @scope (list-window-ui) {
2
2
  /* ── Block 1 — TOKENS (zero-specificity, exposable for theming) ── */
3
3
  :where(:scope) {
4
- --list-window-bg-default: var(--a-bg);
5
- --list-window-row-gap-default: var(--a-space-1);
6
- --list-window-overscan-bg-default: transparent;
7
- --list-window-sentinel-size-default: var(--a-space-2);
4
+ --list-window-bg: var(--a-bg);
5
+ --list-window-row-gap: var(--a-space-1);
6
+ --list-window-overscan-bg: transparent;
7
+ --list-window-sentinel-size: var(--a-space-2);
8
8
  }
9
9
 
10
10
  /* ── Block 2 — BASE styles consuming the tokens above ── */
@@ -14,7 +14,7 @@
14
14
  position: relative;
15
15
  overflow: auto;
16
16
  contain: strict;
17
- background: var(--list-window-bg, var(--list-window-bg-default));
17
+ background: var(--list-window-bg);
18
18
  isolation: isolate;
19
19
  outline: none;
20
20
  }
@@ -43,7 +43,7 @@
43
43
  inset-inline-end: 0;
44
44
  display: flex;
45
45
  flex-direction: column;
46
- gap: var(--list-window-row-gap, var(--list-window-row-gap-default));
46
+ gap: var(--list-window-row-gap);
47
47
  will-change: transform;
48
48
  }
49
49
 
@@ -63,7 +63,7 @@
63
63
  position: absolute;
64
64
  inset-inline-start: 0;
65
65
  inset-inline-end: 0;
66
- height: var(--list-window-sentinel-size, var(--list-window-sentinel-size-default));
66
+ height: var(--list-window-sentinel-size);
67
67
  pointer-events: none;
68
68
  }
69
69
  :scope > [data-sentinel="top"] { top: 0; }
@@ -75,13 +75,13 @@
75
75
  position: sticky;
76
76
  top: 0;
77
77
  z-index: 1;
78
- background: var(--list-window-bg, var(--list-window-bg-default));
78
+ background: var(--list-window-bg);
79
79
  }
80
80
  :scope [slot="after"] {
81
81
  position: sticky;
82
82
  bottom: 0;
83
83
  z-index: 1;
84
- background: var(--list-window-bg, var(--list-window-bg-default));
84
+ background: var(--list-window-bg);
85
85
  }
86
86
 
87
87
  /* ── Horizontal mode ── */
@@ -89,7 +89,7 @@
89
89
  flex-direction: row;
90
90
  }
91
91
  :scope[direction="horizontal"] > [data-sentinel] {
92
- width: var(--list-window-sentinel-size, var(--list-window-sentinel-size-default));
92
+ width: var(--list-window-sentinel-size);
93
93
  height: auto;
94
94
  top: 0;
95
95
  bottom: 0;
@@ -1,16 +1,15 @@
1
1
  @scope (loading-overlay-ui) {
2
2
  /* ── Block 1 — TOKENS ─────────────────────────────────────────────
3
- Loading-overlay covers a positioned parent. Backdrop tint, corner
4
- radius, stacking order, and motion are all consumer-overridable
5
- via the `var(--public, var(--public-default))` chain (per
6
- component-token-contract.md §"The two-block @scope pattern"). */
3
+ Loading-overlay covers a positioned parent: backdrop tint, corner
4
+ radius, stacking order, and motion. Variants below re-point these
5
+ component-named tokens (per component-token-contract.md). */
7
6
  :where(:scope) {
8
- --loading-overlay-bg-default: var(--a-scrim-default);
9
- --loading-overlay-radius-default: var(--a-radius-md);
10
- --loading-overlay-z-default: 50;
11
- --loading-overlay-duration-default: var(--a-duration);
12
- --loading-overlay-easing-default: var(--a-easing-out);
13
- --loading-overlay-gap-default: var(--a-space-3);
7
+ --loading-overlay-bg: var(--a-scrim-default);
8
+ --loading-overlay-radius: var(--a-radius-md);
9
+ --loading-overlay-z: 50;
10
+ --loading-overlay-duration: var(--a-duration);
11
+ --loading-overlay-easing: var(--a-easing-out);
12
+ --loading-overlay-gap: var(--a-space-3);
14
13
  }
15
14
 
16
15
  /* ── Block 2 — BASE
@@ -25,15 +24,15 @@
25
24
  inset: 0;
26
25
  display: grid;
27
26
  place-items: center;
28
- gap: var(--loading-overlay-gap, var(--loading-overlay-gap-default));
29
- background: var(--loading-overlay-bg, var(--loading-overlay-bg-default));
30
- border-radius: var(--loading-overlay-radius, var(--loading-overlay-radius-default));
31
- z-index: var(--loading-overlay-z, var(--loading-overlay-z-default));
27
+ gap: var(--loading-overlay-gap);
28
+ background: var(--loading-overlay-bg);
29
+ border-radius: var(--loading-overlay-radius);
30
+ z-index: var(--loading-overlay-z);
32
31
  opacity: 0;
33
32
  pointer-events: none;
34
33
  transition:
35
- opacity var(--loading-overlay-duration, var(--loading-overlay-duration-default))
36
- var(--loading-overlay-easing, var(--loading-overlay-easing-default));
34
+ opacity var(--loading-overlay-duration)
35
+ var(--loading-overlay-easing);
37
36
  }
38
37
 
39
38
  /* ── Active state — fade in + capture pointer events ─────────────
@@ -52,11 +51,11 @@
52
51
  blur: light scrim plus backdrop-filter blur on the underlying
53
52
  content. Use sparingly — Safari < 18 paint cost. */
54
53
  :scope[variant="transparent"] {
55
- --loading-overlay-bg-default: transparent;
54
+ --loading-overlay-bg: transparent;
56
55
  }
57
56
 
58
57
  :scope[variant="blur"] {
59
- --loading-overlay-bg-default: var(--a-scrim-weak);
58
+ --loading-overlay-bg: var(--a-scrim-weak);
60
59
  backdrop-filter: blur(4px);
61
60
  -webkit-backdrop-filter: blur(4px);
62
61
  }
@@ -207,14 +207,14 @@ describe('loading-overlay-ui — CSS source contract', () => {
207
207
  expect(LO_CSS).toMatch(/^\s*:scope\s*\{/m);
208
208
  });
209
209
 
210
- it('declares the documented component tokens with -default suffix', () => {
210
+ it('declares the documented component tokens', () => {
211
211
  for (const tok of [
212
- '--loading-overlay-bg-default',
213
- '--loading-overlay-radius-default',
214
- '--loading-overlay-z-default',
215
- '--loading-overlay-duration-default',
216
- '--loading-overlay-easing-default',
217
- '--loading-overlay-gap-default',
212
+ '--loading-overlay-bg',
213
+ '--loading-overlay-radius',
214
+ '--loading-overlay-z',
215
+ '--loading-overlay-duration',
216
+ '--loading-overlay-easing',
217
+ '--loading-overlay-gap',
218
218
  ]) {
219
219
  expect(LO_CSS).toContain(tok);
220
220
  }
@@ -237,7 +237,7 @@ describe('loading-overlay-ui — CSS source contract', () => {
237
237
  });
238
238
 
239
239
  it('transparent variant drops the backdrop fill', () => {
240
- expect(LO_CSS).toMatch(/:scope\[variant="transparent"\][^}]*--loading-overlay-bg-default:\s*transparent/);
240
+ expect(LO_CSS).toMatch(/:scope\[variant="transparent"\][^}]*--loading-overlay-bg:\s*transparent/);
241
241
  });
242
242
 
243
243
  it('blur variant applies backdrop-filter blur', () => {
@@ -1,9 +1,9 @@
1
1
  @scope (mark-ui) {
2
2
  :where(:scope) {
3
- --mark-bg-default: var(--a-warning-muted);
4
- --mark-fg-default: var(--a-warning-text);
5
- --mark-px-default: var(--a-space-0-5);
6
- --mark-radius-default: var(--a-radius-xs);
3
+ --mark-bg: var(--a-warning-muted);
4
+ --mark-fg: var(--a-warning-text);
5
+ --mark-px: var(--a-space-0-5);
6
+ --mark-radius: var(--a-radius-xs);
7
7
  }
8
8
 
9
9
  :scope {
@@ -11,29 +11,29 @@
11
11
  Padding-inline only — vertical padding would push line-height. */
12
12
  display: inline;
13
13
  box-sizing: border-box;
14
- padding-inline: var(--mark-px, var(--mark-px-default));
15
- background: var(--mark-bg, var(--mark-bg-default));
16
- color: var(--mark-fg, var(--mark-fg-default));
17
- border-radius: var(--mark-radius, var(--mark-radius-default));
14
+ padding-inline: var(--mark-px);
15
+ background: var(--mark-bg);
16
+ color: var(--mark-fg);
17
+ border-radius: var(--mark-radius);
18
18
  /* Preserve text decoration from ancestors (e.g. link underlines) */
19
19
  text-decoration: inherit;
20
20
  }
21
21
 
22
22
  /* Variants — same role × state pair as alert-ui / tag-ui */
23
23
  :scope[variant="info"] {
24
- --mark-bg-default: var(--a-info-muted);
25
- --mark-fg-default: var(--a-info-text);
24
+ --mark-bg: var(--a-info-muted);
25
+ --mark-fg: var(--a-info-text);
26
26
  }
27
27
  :scope[variant="success"] {
28
- --mark-bg-default: var(--a-success-muted);
29
- --mark-fg-default: var(--a-success-text);
28
+ --mark-bg: var(--a-success-muted);
29
+ --mark-fg: var(--a-success-text);
30
30
  }
31
31
  :scope[variant="danger"] {
32
- --mark-bg-default: var(--a-danger-muted);
33
- --mark-fg-default: var(--a-danger-text);
32
+ --mark-bg: var(--a-danger-muted);
33
+ --mark-fg: var(--a-danger-text);
34
34
  }
35
35
  :scope[variant="muted"] {
36
- --mark-bg-default: var(--a-bg-muted);
37
- --mark-fg-default: var(--a-fg);
36
+ --mark-bg: var(--a-bg-muted);
37
+ --mark-fg: var(--a-fg);
38
38
  }
39
39
  }
@@ -1,13 +1,13 @@
1
1
  @scope (menu-ui) {
2
2
  :where(:scope) {
3
- --menu-popover-padding-default: var(--a-space-1);
4
- --menu-popover-border-default: var(--a-border-subtle);
5
- --menu-popover-radius-default: var(--a-radius-lg);
6
- --menu-popover-bg-default: var(--a-bg-subtle);
7
- --menu-popover-shadow-default: var(--a-shadow-lg);
8
- --menu-popover-min-width-default: 10rem;
9
- --menu-popover-font-size-default: var(--a-ui-size);
10
- --menu-popover-fg-default: var(--a-fg);
3
+ --menu-popover-padding: var(--a-space-1);
4
+ --menu-popover-border: var(--a-border-subtle);
5
+ --menu-popover-radius: var(--a-radius-lg);
6
+ --menu-popover-bg: var(--a-bg-subtle);
7
+ --menu-popover-shadow: var(--a-shadow-lg);
8
+ --menu-popover-min-width: 10rem;
9
+ --menu-popover-font-size: var(--a-ui-size);
10
+ --menu-popover-fg: var(--a-fg);
11
11
  }
12
12
 
13
13
  :scope {
@@ -38,7 +38,7 @@ menu-ui [data-menu-popover] {
38
38
  background: var(--a-bg-subtle);
39
39
  box-shadow: var(--a-shadow-lg);
40
40
  min-width: 10rem;
41
- font-family: inherit;
41
+ font-family: var(--menu-font-family, var(--a-font-family-ui));
42
42
  font-size: var(--a-ui-size);
43
43
  color: var(--a-fg);
44
44
  /* Fade + lift in on first paint via @starting-style. Plain `transition`
@@ -122,16 +122,12 @@ export class UIModal extends UIElement {
122
122
  }
123
123
 
124
124
  #getDuration() {
125
- // Read the same fallback chain the CSS transitions use
126
- // var(--modal-duration, var(--modal-duration-default)). Reading only the
127
- // public token (unset unless a consumer overrides) made this always fall
128
- // back to 200ms while the CSS exit animation ran for --modal-duration-default
129
- // (= --a-duration = 250ms), so the dialog closed 50ms early, clipping the
130
- // animation. Same class as swiper bug-29 (the OD-5 -default token sweep left
131
- // JS read-sites pointed at the now-unset public token).
125
+ // Read the computed `--modal-duration` (= --a-duration = 250ms unless a
126
+ // consumer overrides) so the JS close timer matches the CSS exit animation
127
+ // exactly a stale/unset value clipped the animation ~50ms early
128
+ // (bug class shared with swiper bug-29).
132
129
  const cs = getComputedStyle(this);
133
- const raw = cs.getPropertyValue('--modal-duration').trim()
134
- || cs.getPropertyValue('--modal-duration-default').trim();
130
+ const raw = cs.getPropertyValue('--modal-duration').trim();
135
131
  return parseFloat(raw) || 200;
136
132
  }
137
133
 
@@ -9,24 +9,24 @@
9
9
 
10
10
  @scope (modal-ui) {
11
11
  :where(:scope) {
12
- --modal-width-default: 32rem;
13
- --modal-radius-default: var(--a-radius-lg);
14
- --modal-bg-default: var(--a-bg-subtle);
15
- --modal-border-default: var(--a-border-subtle);
16
- --modal-shadow-default: var(--a-shadow-lg);
17
- --modal-backdrop-default: var(--a-scrim-dialog);
18
- --modal-duration-default: var(--a-duration);
19
- --modal-easing-default: var(--a-easing-out);
20
- --modal-heading-size-default: var(--a-ui-lg);
21
- --modal-heading-weight-default: var(--a-weight-semibold);
22
- --modal-header-fg-default: var(--a-fg);
23
- --modal-close-fg-default: var(--a-fg-muted);
24
- --modal-close-hover-default: var(--a-fg);
25
- --modal-pad-header-default: var(--a-space-3);
26
- --modal-pad-body-default: var(--a-space-4);
27
- --modal-pad-footer-default: var(--a-space-3);
28
- --modal-font-family-default: var(--a-font-family);
29
- --modal-footer-gap-default: var(--a-space-2);
12
+ --modal-width: 32rem;
13
+ --modal-radius: var(--a-radius-lg);
14
+ --modal-bg: var(--a-bg-subtle);
15
+ --modal-border: var(--a-border-subtle);
16
+ --modal-shadow: var(--a-shadow-lg);
17
+ --modal-backdrop: var(--a-scrim-dialog);
18
+ --modal-duration: var(--a-duration);
19
+ --modal-easing: var(--a-easing-out);
20
+ --modal-heading-size: var(--a-ui-lg);
21
+ --modal-heading-weight: var(--a-weight-semibold);
22
+ --modal-header-fg: var(--a-fg);
23
+ --modal-close-fg: var(--a-fg-muted);
24
+ --modal-close-hover: var(--a-fg);
25
+ --modal-pad-header: var(--a-space-3);
26
+ --modal-pad-body: var(--a-space-4);
27
+ --modal-pad-footer: var(--a-space-3);
28
+ --modal-font-family: var(--a-font-family);
29
+ --modal-footer-gap: var(--a-space-2);
30
30
  }
31
31
 
32
32
  :scope {
@@ -35,9 +35,9 @@
35
35
  }
36
36
 
37
37
  /* ── Size variants ── */
38
- :scope[size="sm"] { --modal-width-default: min(24rem, 90vw); }
39
- :scope[size="md"] { --modal-width-default: min(32rem, 90vw); }
40
- :scope[size="lg"] { --modal-width-default: min(48rem, 90vw); }
38
+ :scope[size="sm"] { --modal-width: min(24rem, 90vw); }
39
+ :scope[size="md"] { --modal-width: min(32rem, 90vw); }
40
+ :scope[size="lg"] { --modal-width: min(48rem, 90vw); }
41
41
 
42
42
  /* ═══════ Closed ═══════ */
43
43
  :scope [slot="dialog"]:not([open]) { display: none; }
@@ -63,9 +63,9 @@
63
63
 
64
64
  /* ═══════ Backdrop ═══════ */
65
65
  :scope [slot="dialog"]::backdrop {
66
- background: var(--modal-backdrop, var(--modal-backdrop-default));
66
+ background: var(--modal-backdrop);
67
67
  opacity: 0;
68
- transition: opacity var(--modal-duration, var(--modal-duration-default)) var(--modal-easing, var(--modal-easing-default));
68
+ transition: opacity var(--modal-duration) var(--modal-easing);
69
69
  }
70
70
  :scope [slot="dialog"][data-open]::backdrop { opacity: 1; }
71
71
  :scope [slot="dialog"][data-closing]::backdrop { opacity: 0; }
@@ -75,14 +75,14 @@
75
75
  box-sizing: border-box;
76
76
  display: flex;
77
77
  flex-direction: column;
78
- width: var(--modal-width, var(--modal-width-default));
78
+ width: var(--modal-width);
79
79
  max-height: 85vh;
80
- background: var(--modal-bg, var(--modal-bg-default));
81
- color: var(--modal-header-fg, var(--modal-header-fg-default));
82
- font-family: var(--modal-font-family, var(--modal-font-family-default));
83
- border: 1px solid var(--modal-border, var(--modal-border-default));
84
- border-radius: var(--modal-radius, var(--modal-radius-default));
85
- box-shadow: var(--modal-shadow, var(--modal-shadow-default));
80
+ background: var(--modal-bg);
81
+ color: var(--modal-header-fg);
82
+ font-family: var(--modal-font-family);
83
+ border: 1px solid var(--modal-border);
84
+ border-radius: var(--modal-radius);
85
+ box-shadow: var(--modal-shadow);
86
86
  overflow: hidden;
87
87
  opacity: 0;
88
88
  transform: scale(0.95);
@@ -90,16 +90,16 @@
90
90
 
91
91
  /* ═══════ Open animation ═══════ */
92
92
  :scope [slot="dialog"][data-open] [slot="panel"] {
93
- transition: transform var(--modal-duration, var(--modal-duration-default)) var(--modal-easing, var(--modal-easing-default)),
94
- opacity var(--modal-duration, var(--modal-duration-default)) var(--modal-easing, var(--modal-easing-default));
93
+ transition: transform var(--modal-duration) var(--modal-easing),
94
+ opacity var(--modal-duration) var(--modal-easing);
95
95
  transform: scale(1);
96
96
  opacity: 1;
97
97
  }
98
98
 
99
99
  /* ═══════ Close animation ═══════ */
100
100
  :scope [slot="dialog"][data-closing] [slot="panel"] {
101
- transition: transform var(--modal-duration, var(--modal-duration-default)) var(--modal-easing, var(--modal-easing-default)),
102
- opacity var(--modal-duration, var(--modal-duration-default)) var(--modal-easing, var(--modal-easing-default));
101
+ transition: transform var(--modal-duration) var(--modal-easing),
102
+ opacity var(--modal-duration) var(--modal-easing);
103
103
  transform: scale(0.95);
104
104
  opacity: 0;
105
105
  }
@@ -109,11 +109,11 @@
109
109
  display: flex;
110
110
  align-items: center;
111
111
  justify-content: space-between;
112
- padding: var(--modal-pad-header, var(--modal-pad-header-default)) var(--modal-pad-body, var(--modal-pad-body-default));
113
- border-bottom: 1px solid var(--modal-border, var(--modal-border-default));
114
- font-size: var(--modal-heading-size, var(--modal-heading-size-default));
115
- font-weight: var(--modal-heading-weight, var(--modal-heading-weight-default));
116
- color: var(--modal-header-fg, var(--modal-header-fg-default));
112
+ padding: var(--modal-pad-header) var(--modal-pad-body);
113
+ border-bottom: 1px solid var(--modal-border);
114
+ font-size: var(--modal-heading-size);
115
+ font-weight: var(--modal-heading-weight);
116
+ color: var(--modal-header-fg);
117
117
  flex-shrink: 0;
118
118
  }
119
119
  /* `[text]` gate — same drift class as button-ui / tag-ui / badge-ui /
@@ -138,7 +138,7 @@
138
138
 
139
139
  /* ═══════ Body ═══════ */
140
140
  :scope [slot="body"] {
141
- padding: var(--modal-pad-body, var(--modal-pad-body-default));
141
+ padding: var(--modal-pad-body);
142
142
  flex: 1;
143
143
  overflow: auto;
144
144
  }
@@ -154,9 +154,9 @@
154
154
  display: flex;
155
155
  align-items: center;
156
156
  justify-content: flex-end;
157
- gap: var(--modal-footer-gap, var(--modal-footer-gap-default));
158
- padding: var(--modal-pad-footer, var(--modal-pad-footer-default)) var(--modal-pad-body, var(--modal-pad-body-default));
159
- border-top: 1px solid var(--modal-border, var(--modal-border-default));
157
+ gap: var(--modal-footer-gap);
158
+ padding: var(--modal-pad-footer) var(--modal-pad-body);
159
+ border-top: 1px solid var(--modal-border);
160
160
  flex-shrink: 0;
161
161
  }
162
162
  /* No content → no footer chrome: an empty footer slot otherwise renders a
@@ -6,36 +6,36 @@
6
6
  @scope (nav-ui) {
7
7
  :where(:scope) {
8
8
  /* Shared */
9
- --nav-gap-default: var(--a-space-1);
10
- --nav-px-default: var(--a-space-2);
11
- --nav-py-default: var(--a-space-2);
12
- --nav-font-size-default: var(--a-ui-size);
13
- --nav-bg-default: transparent;
14
- --nav-divider-bg-default: var(--a-border-subtle);
15
- --nav-divider-my-default: var(--a-space-1);
9
+ --nav-gap: var(--a-space-1);
10
+ --nav-px: var(--a-space-2);
11
+ --nav-py: var(--a-space-2);
12
+ --nav-font-size: var(--a-ui-size);
13
+ --nav-bg: transparent;
14
+ --nav-divider-bg: var(--a-border-subtle);
15
+ --nav-divider-my: var(--a-space-1);
16
16
 
17
17
  /* Primary-variant collapse */
18
- --nav-width-default: auto;
19
- --nav-width-collapsed-default: 48px;
20
- --nav-duration-default: var(--a-duration); /* §230-bundle (v0.5.9): canonical mid-tier duration (250ms). Was orphaned --a-duration-base. */
21
- --nav-easing-default: var(--a-easing, ease);
18
+ --nav-width: auto;
19
+ --nav-width-collapsed: 48px;
20
+ --nav-duration: var(--a-duration); /* §230-bundle (v0.5.9): canonical mid-tier duration (250ms). Was orphaned --a-duration-base. */
21
+ --nav-easing: var(--a-easing, ease);
22
22
 
23
23
  /* Group-heading kicker */
24
- --nav-label-fg-default: var(--a-fg-muted);
25
- --nav-label-font-size-default: var(--a-kicker-sm);
26
- --nav-label-weight-default: var(--a-weight-medium);
27
- --nav-label-px-default: var(--a-space-2);
28
- --nav-label-py-default: var(--a-space-3) var(--a-space-1);
24
+ --nav-label-fg: var(--a-fg-muted);
25
+ --nav-label-font-size: var(--a-kicker-sm);
26
+ --nav-label-weight: var(--a-weight-medium);
27
+ --nav-label-px: var(--a-space-2);
28
+ --nav-label-py: var(--a-space-3) var(--a-space-1);
29
29
  }
30
30
 
31
31
  :scope {
32
32
  box-sizing: border-box;
33
33
  display: flex;
34
34
  flex-direction: column;
35
- gap: var(--nav-gap, var(--nav-gap-default));
36
- padding: var(--nav-py, var(--nav-py-default)) var(--nav-px, var(--nav-px-default));
37
- background: var(--nav-bg, var(--nav-bg-default));
38
- font-size: var(--nav-font-size, var(--nav-font-size-default));
35
+ gap: var(--nav-gap);
36
+ padding: var(--nav-py) var(--nav-px);
37
+ background: var(--nav-bg);
38
+ font-size: var(--nav-font-size);
39
39
  min-width: 0;
40
40
  overflow-y: auto;
41
41
  overflow-x: hidden;
@@ -47,30 +47,30 @@
47
47
  /* ── Primary variant (default) ── */
48
48
 
49
49
  :scope:not([variant="section"]) {
50
- width: var(--nav-width, var(--nav-width-default));
51
- transition: width var(--nav-duration, var(--nav-duration-default)) var(--nav-easing, var(--nav-easing-default));
50
+ width: var(--nav-width);
51
+ transition: width var(--nav-duration) var(--nav-easing);
52
52
  }
53
53
 
54
54
  :scope:not([variant="section"])[collapsed] {
55
- width: var(--nav-width-collapsed, var(--nav-width-collapsed-default));
56
- --nav-px-default: var(--a-space-1);
55
+ width: var(--nav-width-collapsed);
56
+ --nav-px: var(--a-space-1);
57
57
  }
58
58
 
59
59
  /* Container-query collapse — when nav lives in a sidebar that goes
60
60
  narrow, behave as if [collapsed] regardless of attribute. */
61
61
  @container sidebar (max-width: 96px) {
62
62
  :scope:not([variant="section"]) {
63
- --nav-px-default: var(--a-space-1);
63
+ --nav-px: var(--a-space-1);
64
64
  }
65
65
  }
66
66
 
67
67
  /* Group label kicker (group header text inside nav-group) */
68
68
  [data-nav-label] {
69
69
  display: block;
70
- padding: var(--nav-label-py, var(--nav-label-py-default)) var(--nav-label-px, var(--nav-label-px-default));
71
- font-size: var(--nav-label-font-size, var(--nav-label-font-size-default));
72
- font-weight: var(--nav-label-weight, var(--nav-label-weight-default));
73
- color: var(--nav-label-fg, var(--nav-label-fg-default));
70
+ padding: var(--nav-label-py) var(--nav-label-px);
71
+ font-size: var(--nav-label-font-size);
72
+ font-weight: var(--nav-label-weight);
73
+ color: var(--nav-label-fg);
74
74
  text-transform: uppercase;
75
75
  letter-spacing: 0.06em;
76
76
  white-space: nowrap;
@@ -81,17 +81,17 @@
81
81
  [data-nav-divider] {
82
82
  border: none;
83
83
  height: 1px;
84
- background: var(--nav-divider-bg, var(--nav-divider-bg-default));
85
- margin: var(--nav-divider-my, var(--nav-divider-my-default)) 0;
84
+ background: var(--nav-divider-bg);
85
+ margin: var(--nav-divider-my) 0;
86
86
  }
87
87
 
88
88
  /* Auto-dividers between groups when [divider] set */
89
89
  :scope[divider] > nav-group-ui + nav-group-ui,
90
90
  :scope[divider] > nav-item-ui + nav-group-ui,
91
91
  :scope[divider] > nav-group-ui + nav-item-ui {
92
- border-top: 1px solid var(--nav-divider-bg, var(--nav-divider-bg-default));
93
- margin-top: var(--nav-divider-my, var(--nav-divider-my-default));
94
- padding-top: var(--nav-divider-my, var(--nav-divider-my-default));
92
+ border-top: 1px solid var(--nav-divider-bg);
93
+ margin-top: var(--nav-divider-my);
94
+ padding-top: var(--nav-divider-my);
95
95
  }
96
96
 
97
97
  /* Spacer — pushes items below to bottom */
@@ -113,18 +113,18 @@
113
113
  /* ── Section variant ── */
114
114
 
115
115
  :scope[variant="section"] {
116
- --nav-px-default: 0;
117
- --nav-py-default: 0;
116
+ --nav-px: 0;
117
+ --nav-py: 0;
118
118
  }
119
119
 
120
120
  /* Heading rendered from [heading] attribute on section variant. */
121
121
  :scope[variant="section"][heading]:not([heading=""])::before {
122
122
  content: attr(heading);
123
123
  display: block;
124
- padding: var(--nav-label-py, var(--nav-label-py-default)) var(--nav-label-px, var(--nav-label-px-default));
125
- font-size: var(--nav-label-font-size, var(--nav-label-font-size-default));
126
- font-weight: var(--nav-label-weight, var(--nav-label-weight-default));
127
- color: var(--nav-label-fg, var(--nav-label-fg-default));
124
+ padding: var(--nav-label-py) var(--nav-label-px);
125
+ font-size: var(--nav-label-font-size);
126
+ font-weight: var(--nav-label-weight);
127
+ color: var(--nav-label-fg);
128
128
  text-transform: uppercase;
129
129
  letter-spacing: 0.06em;
130
130
  white-space: nowrap;