@mkbabb/glass-ui 3.0.0 → 3.1.1

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 (184) hide show
  1. package/dist/{CardFooter-Yi0xtLLd.js → CardFooter-CSGcJkqa.js} +1 -1
  2. package/dist/{CommandShortcut-BNDzfFnB.js → CommandShortcut-DWT19a2Y.js} +3 -3
  3. package/dist/{ContextMenuSubContent-DLEyeqbh.js → ContextMenuSubContent-gAFxJ-qi.js} +4 -4
  4. package/dist/{DataTable-Ce00dbHD.js → DataTable-R8-Zidms.js} +3 -3
  5. package/dist/{DialogContent-DSo7PKlU.js → DialogContent-2fALDSvc.js} +3 -3
  6. package/dist/{DialogFooter-D5KY6sCX.js → DialogFooter-ClrNEOVU.js} +2 -2
  7. package/dist/{DiscoGlyph-wRA02zAJ.js → DiscoGlyph-C3JfMnRV.js} +1 -1
  8. package/dist/{GlyphFace-BnPMUZ16.js → GlyphFace-BRS8vUb7.js} +1 -1
  9. package/dist/HoverPopover-CWFCfLx3.js +96 -0
  10. package/dist/{IconTooltip-GIeWdo64.js → IconTooltip-BkaA7tZ2.js} +1 -1
  11. package/dist/{Input-CBvqW8kZ.js → Input-DDpFn568.js} +3 -5
  12. package/dist/Label-DJty89bp.js +36 -0
  13. package/dist/{MetricBadge-DRBB18Xq.js → MetricBadge-DmAihkXd.js} +1 -1
  14. package/dist/{Notification-D97JO0fK.js → Notification-OqIpADml.js} +3 -3
  15. package/dist/NumberFieldContent-DTH9gb_N.js +141 -0
  16. package/dist/{PopoverContent-BCH4eYs8.js → PopoverContent-EiklFrna.js} +1 -1
  17. package/dist/{Progress-CCH-2UBR.js → Progress-FApA9fm_.js} +1 -1
  18. package/dist/{ScrollingText-7P8skg5W.js → ScrollingText-BFd0i2zJ.js} +2 -2
  19. package/dist/{SelectScrollDownButton-BwTexKeY.js → SelectScrollDownButton-Dth8-wXQ.js} +4 -4
  20. package/dist/{Toaster-CY8gJu9E.js → Toaster-Bjlunvq4.js} +1 -1
  21. package/dist/UnderlineTabs-DAWMLmJG.js +37 -0
  22. package/dist/animated-digit.js +2 -2
  23. package/dist/api/index.d.ts +2 -0
  24. package/dist/api.js +1 -1
  25. package/dist/aurora.js +3 -3
  26. package/dist/badge.js +1 -1
  27. package/dist/{button-BlOW34DT.js → button-C0aHmBbt.js} +2 -0
  28. package/dist/button.js +1 -1
  29. package/dist/card.js +1 -1
  30. package/dist/carousel.js +5 -5
  31. package/dist/{check-Nuw7H9Yh.js → check-dwgetki8.js} +1 -1
  32. package/dist/{chevron-down-Du2b9vY_.js → chevron-down-DILQA1t6.js} +1 -1
  33. package/dist/{chevron-right-CtDxpE3w.js → chevron-right-fS7fal2t.js} +1 -1
  34. package/dist/{chevron-up-CenYokvI.js → chevron-up-BtYjYQOS.js} +1 -1
  35. package/dist/collapsible.js +1 -1
  36. package/dist/command.js +1 -1
  37. package/dist/components/custom/dialog-native/GlassDialogNative.vue.d.ts +57 -0
  38. package/dist/components/custom/dialog-native/index.d.ts +1 -0
  39. package/dist/components/custom/dock/composables/useLayerTransition.d.ts +20 -10
  40. package/dist/components/custom/hover-popover/HoverPopover.vue.d.ts +26 -4
  41. package/dist/components/custom/labeled-field/LabeledField.vue.d.ts +16 -2
  42. package/dist/components/custom/labeled-field/LabeledInput.vue.d.ts +17 -1
  43. package/dist/components/custom/labeled-field/LabeledSelect.vue.d.ts +2 -0
  44. package/dist/components/custom/labeled-field/LabeledSlider.vue.d.ts +2 -0
  45. package/dist/components/custom/labeled-field/LabeledSwitch.vue.d.ts +2 -0
  46. package/dist/components/ui/input/Input.vue.d.ts +10 -7
  47. package/dist/components/ui/label/Label.vue.d.ts +8 -0
  48. package/dist/components/ui/textarea/Textarea.vue.d.ts +45 -8
  49. package/dist/composables/dom/index.d.ts +1 -0
  50. package/dist/composables/dom/useUserInvalidAria.d.ts +32 -0
  51. package/dist/composables/motion/core/index.d.ts +2 -0
  52. package/dist/composables/motion/supportsCssTimeline.d.ts +8 -0
  53. package/dist/composables/motion/useRAFLoop.d.ts +7 -0
  54. package/dist/composables/motion/useScrollProgress.d.ts +6 -2
  55. package/dist/composables/motion/useStaggerReveal.d.ts +6 -0
  56. package/dist/composables/motion/useViewTransition.d.ts +31 -0
  57. package/dist/composables/motion/useYieldToMain.d.ts +29 -0
  58. package/dist/configurator.js +1 -1
  59. package/dist/confirm-dialog.js +3 -3
  60. package/dist/context-menu.js +2 -2
  61. package/dist/controls.js +2 -2
  62. package/dist/{createLucideIcon-rHu18UQW.js → createLucideIcon-Bn9a1b70.js} +2 -2
  63. package/dist/dark.js +1 -1
  64. package/dist/data-table.js +1 -1
  65. package/dist/dialog.js +2 -2
  66. package/dist/disco-glyph.js +1 -1
  67. package/dist/dock.js +215 -196
  68. package/dist/dom.js +5 -4
  69. package/dist/{dropdown-menu-gHSkffW7.js → dropdown-menu-BvRUamNs.js} +4 -4
  70. package/dist/dropdown-menu.js +1 -1
  71. package/dist/expandable-container.js +4 -4
  72. package/dist/forms.d.ts +1 -0
  73. package/dist/forms.js +47 -42
  74. package/dist/glass-carousel.js +1 -1
  75. package/dist/glass-panel.js +2 -2
  76. package/dist/glass-ui.css +1 -1
  77. package/dist/glass-ui.js +156 -275
  78. package/dist/glyph-face.js +2 -2
  79. package/dist/header-ribbon.js +1 -1
  80. package/dist/hover-card.js +1 -1
  81. package/dist/hover-popover.js +1 -1
  82. package/dist/icon-tooltip.js +1 -1
  83. package/dist/index.d.ts +1 -0
  84. package/dist/instrument-chassis.js +1 -1
  85. package/dist/instrument-rail.js +1 -1
  86. package/dist/keyboard.js +1 -1
  87. package/dist/label.js +1 -1
  88. package/dist/labeled-field.js +96 -57
  89. package/dist/metric-badge.js +1 -1
  90. package/dist/metric-stack.js +1 -1
  91. package/dist/{minimize-2-C_oyKVwZ.js → minimize-2-LsCJ_eNt.js} +1 -1
  92. package/dist/motion-core.js +135 -98
  93. package/dist/motion.js +3 -3
  94. package/dist/notification.js +1 -1
  95. package/dist/number-field.d.ts +1 -0
  96. package/dist/number-field.js +2 -0
  97. package/dist/paper-backdrop.js +1 -1
  98. package/dist/popover.js +1 -1
  99. package/dist/progress.js +1 -1
  100. package/dist/pulse.js +1 -1
  101. package/dist/reactive.js +2 -2
  102. package/dist/responsive-tabs.js +3 -3
  103. package/dist/scrolling-text.js +1 -1
  104. package/dist/{search-7XEx_6hq.js → search-DBAiUABx.js} +1 -1
  105. package/dist/search.js +7 -7
  106. package/dist/select.js +3 -3
  107. package/dist/separator.js +1 -1
  108. package/dist/{sheet-BsBdO5jq.js → sheet-CukNDezz.js} +53 -53
  109. package/dist/sheet.js +1 -1
  110. package/dist/{slider-BQaLYFLh.js → slider-DJvHkTRe.js} +3 -3
  111. package/dist/slider.js +1 -1
  112. package/dist/sortable-list.js +2 -2
  113. package/dist/styles/animations.css +77 -0
  114. package/dist/styles/cards.css +6 -2
  115. package/dist/styles/dock.css +37 -14
  116. package/dist/styles/glass.css +89 -6
  117. package/dist/styles/index.css +10 -1
  118. package/dist/styles/scroll-driven.css +72 -0
  119. package/dist/styles/theme.css +3 -0
  120. package/dist/styles/tokens.css +237 -24
  121. package/dist/styles/typography.css +21 -0
  122. package/dist/styles/utilities.css +176 -23
  123. package/dist/styles/view-transition.css +62 -0
  124. package/dist/switch.d.ts +1 -0
  125. package/dist/switch.js +2 -0
  126. package/dist/tabs.js +40 -36
  127. package/dist/timeline.js +2 -2
  128. package/dist/toast.js +1 -1
  129. package/dist/toggle-group.js +1 -1
  130. package/dist/tooltip.js +1 -1
  131. package/dist/typewriter.js +1 -1
  132. package/dist/{useAnimatedNumber-2l13GibX.js → useAnimatedNumber-DKQYVB7s.js} +1 -1
  133. package/dist/{useConfiguratorState-BpZi8QJu.js → useConfiguratorState-CtRBE0m_.js} +8 -6
  134. package/dist/{useIdleReady-DlzJicQH.js → useIdleReady-Cmkhm03v.js} +1 -1
  135. package/dist/{useTouchGate-BhhEMlwJ.js → useTouchGate-D9Zvrzyc.js} +1 -1
  136. package/dist/useUserInvalidAria-DVu1eTXG.js +29 -0
  137. package/dist/useViewTransition-DYIK6Gzb.js +16 -0
  138. package/dist/utils/index.d.ts +1 -0
  139. package/dist/utils/moveBefore.d.ts +15 -0
  140. package/dist/{x-Cb3NE2Ne.js → x-q7pJa83X.js} +1 -1
  141. package/package.json +19 -4
  142. package/src/styles/animations.css +77 -0
  143. package/src/styles/cards.css +6 -2
  144. package/src/styles/dock.css +37 -14
  145. package/src/styles/glass.css +89 -6
  146. package/src/styles/index.css +10 -1
  147. package/src/styles/scroll-driven.css +72 -0
  148. package/src/styles/theme.css +3 -0
  149. package/src/styles/tokens.css +237 -24
  150. package/src/styles/typography.css +21 -0
  151. package/src/styles/utilities.css +176 -23
  152. package/src/styles/view-transition.css +62 -0
  153. package/dist/HoverPopover-Btv4RQfv.js +0 -80
  154. package/dist/Label-C8QMJSsf.js +0 -32
  155. package/dist/UnderlineTabs-BtrUcXn-.js +0 -64
  156. /package/dist/{CollapsibleContent-DHRuXE3P.js → CollapsibleContent-CVMOcYlV.js} +0 -0
  157. /package/dist/{ContextMenuContent-CvXfU5qz.js → ContextMenuContent-otjFIu8v.js} +0 -0
  158. /package/dist/{HoverCardContent-4nN5-5bz.js → HoverCardContent-DaGrgJBO.js} +0 -0
  159. /package/dist/{InstrumentChassis-DOaVYyWq.js → InstrumentChassis-CnHTMxds.js} +0 -0
  160. /package/dist/{InstrumentRail-jHDqXj70.js → InstrumentRail-C6dEbi8E.js} +0 -0
  161. /package/dist/{ModalOverlay-DKLVY-cj.js → ModalOverlay-iWiAgbYH.js} +0 -0
  162. /package/dist/{PaperBackdrop-Bc2drCqJ.js → PaperBackdrop-CeZ-w0R0.js} +0 -0
  163. /package/dist/{SelectGroup-O69GTQ77.js → SelectGroup-DdR4tdDY.js} +0 -0
  164. /package/dist/{SelectSeparator-GTHxKO0a.js → SelectSeparator-CXm_hlqA.js} +0 -0
  165. /package/dist/{Separator-_NCypg_C.js → Separator-D8AUMhxY.js} +0 -0
  166. /package/dist/{Switch-CL0uxu8F.js → Switch-Cr1t_F_U.js} +0 -0
  167. /package/dist/{ToggleGroupItem-BYG_8M9M.js → ToggleGroupItem-OesUouE7.js} +0 -0
  168. /package/dist/{TooltipProvider-C5QLSPto.js → TooltipProvider-DE78vbEP.js} +0 -0
  169. /package/dist/{_plugin-vue_export-helper-n-_DRHWS.js → _plugin-vue_export-helper-Dq1MygBL.js} +0 -0
  170. /package/dist/{badge-BbxVKZfw.js → badge-x46my_Fo.js} +0 -0
  171. /package/dist/{constants-D-8FN28s.js → constants-DwBwnG8N.js} +0 -0
  172. /package/dist/{dockContext-BDGSrwsV.js → dockContext-D5NZCWJs.js} +0 -0
  173. /package/dist/{keys-DVkcUktU.js → keys-CaTQS-vx.js} +0 -0
  174. /package/dist/{menuItemVariants-B2nDL7zH.js → menuItemVariants-BsbGNq9C.js} +0 -0
  175. /package/dist/{presets-BMzCDrmR.js → presets-a-D93K1S.js} +0 -0
  176. /package/dist/{useGlassRenderer-DMDdMH55.js → useGlassRenderer-Ds-nmrGz.js} +0 -0
  177. /package/dist/{useGlobalDark-PMiP5Jku.js → useGlobalDark-B0WvLJE3.js} +0 -0
  178. /package/dist/{useIntersectionPause-CXYfYg_C.js → useIntersectionPause-IY2CwPQb.js} +0 -0
  179. /package/dist/{useInterval-COlTCeVa.js → useInterval-DVgGUf_y.js} +0 -0
  180. /package/dist/{useKeyboardShortcuts-CPO4AhLx.js → useKeyboardShortcuts-Dpw_RUcB.js} +0 -0
  181. /package/dist/{useResizeObserver-F4aRR4Cj.js → useResizeObserver-Cg9npuM3.js} +0 -0
  182. /package/dist/{useSortable-Ck0rBJ4g.js → useSortable-Cq2Y1JLO.js} +0 -0
  183. /package/dist/{useSpringMount-BTRBNzXP.js → useSpringMount-Cfk1XK1R.js} +0 -0
  184. /package/dist/{useTimer-lp5NlH4w.js → useTimer-NAaj9zNq.js} +0 -0
@@ -33,6 +33,7 @@
33
33
  font-size: var(--type-body);
34
34
  color: var(--muted-foreground);
35
35
  line-height: 1.5;
36
+ text-wrap: pretty; /* AQ.W3 §W3.3 — prose-register orphan/river fix */
36
37
  }
37
38
 
38
39
  /* ── Labeled-field label (V.W3.T5 / A5 §5.5) ────────────────────
@@ -44,10 +45,49 @@
44
45
  .labeled-field-label {
45
46
  font-family: var(--font-display);
46
47
  font-size: var(--type-body);
47
- color: var(--muted-foreground);
48
+ /* AQ.W4 §W3.1c — the label color reads the group-state variable so the
49
+ `:has(:user-invalid)` rule below reddens it (one source of the
50
+ override value, shared with the `.has-error` fallback class). */
51
+ color: var(--field-label-color, var(--muted-foreground));
48
52
  cursor: help;
49
53
  }
50
54
 
55
+ /* AQ.W4 §W3.1c — LabeledField group error highlight. When any descendant
56
+ control is `:user-invalid`, the whole field group marks (the label
57
+ reddens via `--field-label-color`, the error region reveals). Scoped to
58
+ `.labeled-field` — never `body`, never a bare element. `:has()` Baseline
59
+ Widely; the `.has-error` / `.has-valid` fallback classes (toggled by the
60
+ `useUserInvalidAria` fallback path) are the SOLE degradation for engines
61
+ without `:has()`/`:user-invalid` (not a live+dead alias). */
62
+ .labeled-field {
63
+ --field-label-color: var(--muted-foreground);
64
+ }
65
+ .labeled-field:has(:user-invalid),
66
+ .labeled-field.has-error {
67
+ --field-label-color: var(--destructive);
68
+ }
69
+
70
+ /* The error region: hidden at rest, revealed once a descendant is
71
+ `:user-invalid` (or the `.has-error` fallback class is set). Non-color
72
+ reinforcement for the validity tint — the error TEXT is the primary
73
+ cue, the border/bg shift the supplement (forms guide: never color
74
+ alone). */
75
+ .labeled-field-error {
76
+ display: none;
77
+ font-size: var(--type-small);
78
+ color: var(--destructive);
79
+ margin-block-start: 0.25rem;
80
+ }
81
+ .labeled-field:has(:user-invalid) .labeled-field-error,
82
+ .labeled-field.has-error .labeled-field-error {
83
+ display: block;
84
+ }
85
+ /* Hide the error text once the field reads valid (the user corrected it). */
86
+ .labeled-field:has(:user-valid) .labeled-field-error,
87
+ .labeled-field.has-valid .labeled-field-error {
88
+ display: none;
89
+ }
90
+
51
91
  /* ── Popover-content recipe (V.W3.T3 / A5 §3.2) ─────────────────
52
92
  Canonical recipe for floating-tier portal containers
53
93
  (PopoverContent, DropdownMenuContent, SelectContent, etc.).
@@ -72,9 +112,28 @@
72
112
  display: none;
73
113
  }
74
114
 
115
+ /* AQ.W3 §W3.4 — tokenized thin scrollbar. Standard `scrollbar-width` +
116
+ `scrollbar-color` (Baseline Widely, Chromium 121+) is the primary path,
117
+ reading `--scrollbar-{thumb,track}` (auto-dark via `--muted-foreground`).
118
+ The legacy `::-webkit-scrollbar` family is the SOLE fallback for older
119
+ WebKit/Blink, gated on `@supports not (scrollbar-color: auto)` so modern
120
+ engines never paint it — not a live+dead alias. */
75
121
  .scrollbar-thin {
76
122
  scrollbar-width: thin;
77
- scrollbar-color: color-mix(in srgb, var(--muted-foreground) 25%, transparent) transparent;
123
+ scrollbar-color: var(--scrollbar-thumb) var(--scrollbar-track);
124
+ }
125
+ @supports not (scrollbar-color: auto) {
126
+ .scrollbar-thin::-webkit-scrollbar {
127
+ width: 8px;
128
+ height: 8px;
129
+ }
130
+ .scrollbar-thin::-webkit-scrollbar-track {
131
+ background: var(--scrollbar-track);
132
+ }
133
+ .scrollbar-thin::-webkit-scrollbar-thumb {
134
+ background: var(--scrollbar-thumb);
135
+ border-radius: var(--radius-pill);
136
+ }
78
137
  }
79
138
 
80
139
  /* ── Focus ring — auto-activates on :focus-visible ── */
@@ -95,6 +154,8 @@
95
154
 
96
155
  /* ── Interactive item (hover bg + focus ring + active scale) ── */
97
156
  .interactive-item {
157
+ /* AQ.W3 §W3.2 identity base */
158
+ scale: 1;
98
159
  border-radius: var(--radius-lg);
99
160
  user-select: none;
100
161
  transition:
@@ -102,7 +163,7 @@
102
163
  color var(--duration-fast) var(--ease-standard),
103
164
  border-color var(--duration-fast) var(--ease-standard),
104
165
  box-shadow var(--duration-fast) var(--ease-standard),
105
- transform var(--duration-fast) var(--ease-standard);
166
+ scale var(--duration-fast) var(--ease-standard);
106
167
  }
107
168
  .interactive-item:hover {
108
169
  background-color: color-mix(in srgb, var(--accent) 50%, transparent);
@@ -112,7 +173,7 @@
112
173
  box-shadow: var(--focus-ring-shadow);
113
174
  }
114
175
  .interactive-item:active {
115
- transform: scale(0.98);
176
+ scale: 0.98;
116
177
  }
117
178
  .interactive-item:disabled,
118
179
  .interactive-item[data-disabled] {
@@ -136,15 +197,19 @@
136
197
  consumer's own hover/active bg-tint cascade to acknowledge the
137
198
  press. */
138
199
  .tap-squish {
139
- transition: transform var(--duration-fast) var(--spring-snappy);
200
+ /* AQ.W3 §W3.2 identity base */
201
+ scale: 1;
202
+ transition: scale var(--duration-fast) var(--spring-snappy);
140
203
  transform-origin: center center;
141
204
  }
142
205
  .tap-squish:active {
143
- transform: scale(var(--scale-press));
206
+ scale: var(--scale-press);
144
207
  }
145
208
  @media (prefers-reduced-motion: reduce) {
146
209
  .tap-squish:active {
147
- transform: none;
210
+ /* Reset to the longhand identity (not `transform: none`) so the
211
+ press scale is neutralized under PRM. */
212
+ scale: 1;
148
213
  }
149
214
  }
150
215
 
@@ -212,6 +277,29 @@
212
277
  -webkit-mask-image: linear-gradient(to bottom, transparent, black var(--mask-fade-width), black calc(100% - var(--mask-fade-width)), transparent);
213
278
  }
214
279
 
280
+ /* ── Deferred section — render-skip an offscreen subtree (AQ.W3 §5) ──────
281
+ `content-visibility: auto` skips layout/paint/style of an offscreen
282
+ subtree — the INP-under-load lever (fourier γ, muster, speedtest, words).
283
+ `contain-intrinsic-size: auto <estimate>` is measurement-safe: the `auto`
284
+ prefix makes the engine REMEMBER the last-rendered size (no scroll-jump on
285
+ re-entry); plain `<estimate>` freezes the section + thrashes the scrollbar
286
+ — the trap this closes. Estimate is token-driven (`--deferred-section-
287
+ size`, default 30rem). `.deferred-section--cached` →
288
+ `content-visibility: hidden` (always skipped, state CACHED — cheaper to
289
+ re-show than `display:none`). Baseline Widely; unsupporting engines render
290
+ normally. JS HOOK: the engine fires `contentvisibilityautostatechange`
291
+ { skipped } at the render-skip boundary — pair with `useRAFLoop`
292
+ pause/resume: `el.addEventListener('contentvisibilityautostatechange',
293
+ e => e.skipped ? loop.pause() : loop.resume())`. */
294
+ .deferred-section {
295
+ content-visibility: auto;
296
+ contain-intrinsic-size: auto var(--deferred-section-size, 30rem);
297
+ }
298
+ .deferred-section--cached {
299
+ content-visibility: hidden;
300
+ contain-intrinsic-size: auto var(--deferred-section-size, 30rem);
301
+ }
302
+
215
303
  /* ── Card scroll-timeline host (AI.W1-α) ───────────────────────────────
216
304
  Canonical scroll-overflow host that emits the `--card-scroll` named
217
305
  scroll-timeline consumed by `<CardHeader shrink>`. Apply to the
@@ -273,6 +361,8 @@
273
361
  align-items: center;
274
362
  justify-content: center;
275
363
  text-align: center;
364
+ /* AQ.W3 §W3.2 identity base */
365
+ scale: 1;
276
366
  gap: var(--metric-badge-gap, 0.125rem);
277
367
  max-width: var(--metric-badge-max-width, 8rem);
278
368
  min-height: var(--metric-badge-min-height, 1.5rem);
@@ -297,7 +387,7 @@
297
387
  background var(--duration-fast) var(--ease-standard),
298
388
  border-color var(--duration-fast) var(--ease-standard),
299
389
  box-shadow var(--duration-fast) var(--ease-standard),
300
- transform var(--duration-fast) var(--ease-standard);
390
+ scale var(--duration-fast) var(--ease-standard);
301
391
  }
302
392
 
303
393
  .metric-badge > span {
@@ -310,11 +400,11 @@
310
400
  border-color: var(--metric-badge-hover-border, var(--glass-border-resting));
311
401
  background: var(--metric-badge-hover-bg, var(--glass-bg-resting));
312
402
  box-shadow: var(--metric-badge-hover-shadow, 0 2px 10px color-mix(in srgb, var(--shadow-color) 12%, transparent), var(--glass-highlight));
313
- transform: scale(var(--metric-badge-hover-scale, 1.02));
403
+ scale: var(--metric-badge-hover-scale, 1.02);
314
404
  }
315
405
 
316
406
  .metric-badge:active {
317
- transform: scale(var(--metric-badge-press-scale, 0.96));
407
+ scale: var(--metric-badge-press-scale, 0.96);
318
408
  }
319
409
 
320
410
  .metric-badge:focus-visible {
@@ -464,20 +554,24 @@
464
554
  The shared transition is expressed once over the family; the three
465
555
  :hover rules carry the per-level translate + shadow. */
466
556
  :where(.hover-lift, .hover-lift-md, .hover-lift-lg) {
467
- transition-property: transform, box-shadow;
557
+ /* Individual-transform identity base (AQ.W3 §W3.2) — `translate: 0` at
558
+ rest mints the stacking context once so the hover lift does not
559
+ flicker it into being. */
560
+ translate: 0;
561
+ transition-property: translate, box-shadow;
468
562
  transition-duration: var(--duration-normal);
469
563
  transition-timing-function: var(--ease-standard);
470
564
  }
471
565
  .hover-lift:hover:not(:disabled):not([aria-disabled='true']) {
472
- transform: translateY(var(--lift-sm));
566
+ translate: 0 var(--lift-sm);
473
567
  box-shadow: var(--shadow-md);
474
568
  }
475
569
  .hover-lift-md:hover:not(:disabled):not([aria-disabled='true']) {
476
- transform: translateY(var(--lift-md));
570
+ translate: 0 var(--lift-md);
477
571
  box-shadow: var(--shadow-md);
478
572
  }
479
573
  .hover-lift-lg:hover:not(:disabled):not([aria-disabled='true']) {
480
- transform: translateY(var(--lift-lg));
574
+ translate: 0 var(--lift-lg);
481
575
  box-shadow: var(--shadow-lg);
482
576
  }
483
577
 
@@ -494,17 +588,20 @@
494
588
  :where(.shadow-cartoon-sm, .shadow-cartoon-md, .shadow-cartoon-lg) {
495
589
  border: 2px solid var(--border);
496
590
  }
591
+ /* Static cartoon-stamp lift (AQ.W3 §W3.2). NOT state-driven, so the
592
+ identity base is not strictly required, but the `translate:` longhand
593
+ keeps the family uniform with the state-driven sites above. */
497
594
  .shadow-cartoon-sm {
498
595
  box-shadow: var(--shadow-cartoon-sm);
499
- transform: translateY(-1px);
596
+ translate: 0 -1px;
500
597
  }
501
598
  .shadow-cartoon-md {
502
599
  box-shadow: var(--shadow-cartoon-md);
503
- transform: translateY(-1px);
600
+ translate: 0 -1px;
504
601
  }
505
602
  .shadow-cartoon-lg {
506
603
  box-shadow: var(--shadow-cartoon-lg);
507
- transform: translateY(-2px);
604
+ translate: 0 -2px;
508
605
  }
509
606
 
510
607
  /* ── Divider utilities ── */
@@ -542,10 +639,13 @@
542
639
  `class="scale-on-hover"`; transition + easing bind to the canonical
543
640
  `--duration-fast` + `--ease-standard` tokens. */
544
641
  @utility scale-on-hover {
545
- @apply transition-transform duration-fast ease-standard;
642
+ /* Individual-transform identity base (AQ.W3 §W3.2). Transition the `scale`
643
+ longhand (not `transform`) so the migrated hover scale animates. */
644
+ scale: 1;
645
+ transition: scale var(--duration-fast) var(--ease-standard);
546
646
 
547
647
  &:hover {
548
- transform: scale(var(--scale-hover));
648
+ scale: var(--scale-hover);
549
649
  }
550
650
  }
551
651
 
@@ -802,18 +902,20 @@
802
902
  this is the canonical opt-in that adds the spring-hover lift. Consumed by
803
903
  keyframes.js at 7 sites. */
804
904
  @utility btn-interactive {
905
+ /* AQ.W3 §W3.2 identity base */
906
+ scale: 1;
805
907
  transition:
806
908
  background-color var(--duration-fast) var(--ease-standard),
807
909
  color var(--duration-fast) var(--ease-standard),
808
- transform var(--duration-fast) var(--ease-standard),
910
+ scale var(--duration-fast) var(--ease-standard),
809
911
  opacity var(--duration-fast) var(--ease-standard);
810
912
 
811
913
  &:hover {
812
- transform: scale(var(--scale-hover));
914
+ scale: var(--scale-hover);
813
915
  }
814
916
 
815
917
  &:active {
816
- transform: scale(var(--scale-press));
918
+ scale: var(--scale-press);
817
919
  }
818
920
 
819
921
  &:disabled {
@@ -829,7 +931,7 @@
829
931
  transition:
830
932
  background-color var(--duration-fast) var(--ease-standard),
831
933
  color var(--duration-fast) var(--ease-standard),
832
- transform var(--duration-fast) var(--ease-standard),
934
+ scale var(--duration-fast) var(--ease-standard),
833
935
  opacity var(--duration-fast) var(--ease-standard),
834
936
  box-shadow var(--duration-fast) var(--ease-standard);
835
937
  }
@@ -856,3 +958,54 @@ html.no-transition *::before,
856
958
  html.no-transition *::after {
857
959
  transition-duration: 0s !important;
858
960
  }
961
+
962
+ /* ── Forced-colors restoration (AQ.W2 §5) ──────────────────────────────
963
+ Windows High Contrast / forced-colors mode STRIPS `box-shadow` — so the
964
+ glass focus rings (box-shadow + `outline: none`) vanish, leaving keyboard
965
+ users with no visible focus (a WCAG 2.4.7 failure forced-colors exposes).
966
+ Restore a real `outline` keyed to the system `Highlight` color (outline
967
+ survives forced-colors; box-shadow does not). The box-shadow ring stays the
968
+ primary in normal mode (it carries the glass aesthetic) — these two are
969
+ mutually exclusive by media query, NOT a parallel path.
970
+
971
+ `forced-color-adjust: none` is deliberately NOT used — glass-ui's
972
+ glassmorphic chrome is decorative and yields to the user's forced palette
973
+ (css forced-colors guidance). Baseline Widely Available; this IS the
974
+ fallback mechanism (it only activates under forced-colors), so no nested
975
+ guard. */
976
+ @media (forced-colors: active) {
977
+ .focus-ring:focus-visible,
978
+ .glass-btn:focus-visible,
979
+ .interactive-item:focus-visible,
980
+ .input-pill:focus,
981
+ .input-pill:focus-visible {
982
+ outline: 2px solid Highlight;
983
+ outline-offset: 2px;
984
+ }
985
+
986
+ /* Structural edges borne ONLY by box-shadow (the hairline catch-light /
987
+ glass pill edge / card plate) also vanish — restore a real border so
988
+ the silhouette survives. CanvasText is the system text/border color. */
989
+ .hairline-accent,
990
+ .glass-dock,
991
+ .glass-card {
992
+ border: 1px solid CanvasText;
993
+ }
994
+ }
995
+
996
+ /* ── Coarse-pointer touch-target floor (AQ.W3 §7) ───────────────────────────
997
+ General-surface companion to the dock-scoped R0G-6 floor (dock.css). On
998
+ coarse pointers the small icon-button/trigger surfaces OUTSIDE the dock lift
999
+ to the WCAG 2.5.5 (44px) minimum — ONE amendment retiring the per-consumer
1000
+ `min-h-[44px]` one-liners. Token-driven (`--touch-target`); fine-pointer
1001
+ byte-identical. Targets `Button size="icon"` (via the `data-size="icon"`
1002
+ attr Button.vue reflects), ExpandableContainer + ResponsiveTabs triggers.
1003
+ `min-block/inline-size` only RAISES — a larger explicit size is never lost. */
1004
+ @media (pointer: coarse) {
1005
+ [data-size="icon"],
1006
+ .expandable-container__trigger,
1007
+ .responsive-tabs__trigger {
1008
+ min-block-size: var(--touch-target, 2.75rem);
1009
+ min-inline-size: var(--touch-target, 2.75rem);
1010
+ }
1011
+ }
@@ -0,0 +1,62 @@
1
+ /*
2
+ * view-transition.css — the View-Transitions CSS substrate (AQ.W5 §Design 3b).
3
+ *
4
+ * Cascade rung after scroll-driven.css. Token-first shared-class recipes for the
5
+ * group-transition case — the substrate the `useViewTransition` helper
6
+ * (`@mkbabb/glass-ui/motion-core`) pairs with. The helper wraps the DOM
7
+ * mutation; this CSS owns the LOOK of the cross-fade/slide. The consumer adds
8
+ * `view-transition-class: gl-list-item` plus a UNIQUE `view-transition-name`
9
+ * per tracked element (the runtime MANDATORY — ≤ 1 element per name per state,
10
+ * else the transition is skipped silently).
11
+ *
12
+ * Consumed across the AQ↔muster J seam: J.W5's verdict re-rank tags each row
13
+ * `view-transition-class: gl-list-item; view-transition-name: row-<id>` and
14
+ * calls `startViewTransition(() => render())`; the dock layer swap (W6) reuses
15
+ * the same group recipe.
16
+ *
17
+ * Baseline: same-document `view-transitions` + `view-transition-class` = Newly
18
+ * Available. The helper's instant-update fallback (calls `mutate()` synchronously
19
+ * when `document.startViewTransition` is absent) is the ≤ 20-LOC feature-detected
20
+ * fallback — no CSS counterpart is needed because a non-supporting engine simply
21
+ * never generates the `::view-transition*` pseudo tree.
22
+ *
23
+ * Reduced-motion: `animation: none` on every VT pseudo. The native swap still
24
+ * runs (state mutates instantly), just without motion — the correct PRM degrade.
25
+ */
26
+
27
+ @media (prefers-reduced-motion: reduce) {
28
+ ::view-transition-group(*),
29
+ ::view-transition-old(*),
30
+ ::view-transition-new(*) {
31
+ animation: none !important;
32
+ }
33
+ }
34
+
35
+ /* Shared group class — consumers add `view-transition-class: gl-list-item` on
36
+ * each tracked element plus a unique `view-transition-name` per element. */
37
+ ::view-transition-group(.gl-list-item) {
38
+ animation-duration: var(--vt-duration, var(--duration-normal));
39
+ animation-timing-function: var(--vt-ease, var(--ease-apple-spring));
40
+ }
41
+
42
+ /* Added / removed members — the `:only-child` trick from the group guide: a
43
+ * member present in only ONE of the old/new states slides instead of cross-fades. */
44
+ ::view-transition-new(.gl-list-item):only-child { animation-name: gl-vt-slide-in; }
45
+ ::view-transition-old(.gl-list-item):only-child { animation-name: gl-vt-slide-out; }
46
+
47
+ /* AQ.W6 §Design 7 — the dock layer group recipe. `<GlassDock>` (.dock-layers)
48
+ * and `<DockLayerGroup>` (.dock-layer-stack) carry `view-transition-class:
49
+ * gl-dock-layer` + a page-unique `view-transition-name` on a View-Transitions
50
+ * engine, so the collapsed↔expanded width + the layer-pane swap morph as a VT
51
+ * group instead of the JS FLIP. The `--dock-motion-resize` spring maps here to
52
+ * `--vt-ease`; both default to the apple-spring. PRM zeroes the animation above. */
53
+ ::view-transition-group(.gl-dock-layer) {
54
+ animation-duration: var(--vt-duration, var(--duration-normal));
55
+ animation-timing-function: var(--vt-ease, var(--ease-apple-spring));
56
+ }
57
+
58
+ @keyframes gl-vt-slide-in { from { opacity: 0; translate: 0 var(--vt-rise, 8px); } }
59
+ @keyframes gl-vt-slide-out { to { opacity: 0; translate: 0 var(--vt-rise, 8px); } }
60
+
61
+ /* Keep the non-transitioned UI interactive while the snapshot animates. */
62
+ ::view-transition { pointer-events: none; }
@@ -0,0 +1 @@
1
+ export * from "./components/ui/switch";
package/dist/switch.js ADDED
@@ -0,0 +1,2 @@
1
+ import { t as e } from "./Switch-Cr1t_F_U.js";
2
+ export { e as Switch };
package/dist/tabs.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import { t as e } from "./cn-DJXf4yaB.js";
2
- import { t } from "./_plugin-vue_export-helper-n-_DRHWS.js";
3
- import { i as n, n as r, r as i, t as a } from "./TooltipProvider-C5QLSPto.js";
4
- import { t as o } from "./UnderlineTabs-BtrUcXn-.js";
2
+ import { t } from "./_plugin-vue_export-helper-Dq1MygBL.js";
3
+ import { i as n, n as r, r as i, t as a } from "./TooltipProvider-DE78vbEP.js";
4
+ import { t as o } from "./UnderlineTabs-DAWMLmJG.js";
5
5
  import { Fragment as s, computed as c, createBlock as l, createCommentVNode as u, createElementBlock as d, createElementVNode as f, createTextVNode as p, createVNode as m, defineComponent as h, nextTick as g, normalizeClass as _, normalizeStyle as v, onMounted as y, onUnmounted as b, openBlock as x, ref as S, renderList as C, renderSlot as w, toDisplayString as T, unref as E, watch as D, withCtx as O } from "vue";
6
6
  //#region src/components/custom/tabs/BouncyToggle.vue?vue&type=script&setup=true&lang.ts
7
7
  var k = [
@@ -36,27 +36,27 @@ var k = [
36
36
  function h(e, t) {
37
37
  return typeof document > "u" ? t : getComputedStyle(document.documentElement).getPropertyValue(e).trim() || t;
38
38
  }
39
- let j = t, M = o, N = S(null), P = S([]), F = c(() => j.variant === "pill"), I = c(() => j.overflow === "scroll"), L = c(() => j.overflow === "auto"), R = c(() => j.multiSelect && Array.isArray(j.modelValue) ? j.modelValue : [j.modelValue]), z = (e) => R.value.includes(e), B = S({
39
+ let j = t, M = o, N = S(null), P = S([]), F = typeof CSS < "u" && typeof CSS.supports == "function" && CSS.supports("position-anchor", "--x"), I = c(() => j.variant === "pill"), L = c(() => j.overflow === "scroll"), R = c(() => j.overflow === "auto"), z = c(() => j.multiSelect && Array.isArray(j.modelValue) ? j.modelValue : [j.modelValue]), B = (e) => z.value.includes(e), V = c(() => !j.multiSelect && !F), H = c(() => j.multiSelect || !F), U = S({
40
40
  width: "0px",
41
41
  transform: "translateX(0px)",
42
42
  opacity: "0"
43
43
  });
44
- function V() {
45
- if (j.multiSelect) return;
44
+ function W() {
45
+ if (j.multiSelect || F) return;
46
46
  let e = j.options.findIndex((e) => e.value === j.modelValue);
47
47
  if (e < 0 || !P.value[e]) return;
48
48
  let t = P.value[e];
49
- B.value = {
49
+ U.value = {
50
50
  width: `${t.offsetWidth}px`,
51
51
  transform: `translateX(${t.offsetLeft}px)`,
52
52
  opacity: "1"
53
53
  };
54
54
  }
55
- let H = S({});
56
- function U() {
55
+ let G = S({});
56
+ function K() {
57
57
  if (!j.multiSelect) return;
58
58
  let e = {};
59
- for (let t of R.value) {
59
+ for (let t of z.value) {
60
60
  let n = j.options.findIndex((e) => e.value === t), r = P.value[n];
61
61
  r && (e[t] = {
62
62
  width: `${r.offsetWidth}px`,
@@ -64,12 +64,12 @@ var k = [
64
64
  opacity: "1"
65
65
  });
66
66
  }
67
- H.value = e;
67
+ G.value = e;
68
68
  }
69
- function W() {
70
- j.multiSelect ? U() : V();
69
+ function q() {
70
+ j.multiSelect ? K() : W();
71
71
  }
72
- function G(e) {
72
+ function J(e) {
73
73
  if (typeof window < "u" && window.matchMedia("(prefers-reduced-motion: reduce)").matches) return;
74
74
  e.getAnimations().forEach((e) => e.cancel());
75
75
  let t = h("--ease-apple-spring", "cubic-bezier(0.175, 0.885, 0.32, 1.275)"), n = h("--scale-press", "0.95"), r = h("--scale-hover", "1.08");
@@ -89,34 +89,38 @@ var k = [
89
89
  easing: t
90
90
  });
91
91
  }
92
- function K(e, t) {
92
+ function Y(e, t) {
93
93
  if (j.options[t]?.disabled) return;
94
94
  let n = P.value[t];
95
- if (n && G(n), j.multiSelect) {
96
- let t = [...R.value], n = t.indexOf(e);
95
+ if (n && J(n), j.multiSelect) {
96
+ let t = [...z.value], n = t.indexOf(e);
97
97
  n > -1 ? t.length > 1 && t.splice(n, 1) : t.push(e), M("update:modelValue", t);
98
98
  } else M("update:modelValue", e);
99
99
  }
100
- D(() => j.modelValue, () => g(W), { deep: !0 }), D(() => j.options, () => g(W), { deep: !0 });
101
- let q = null;
100
+ D(() => j.modelValue, () => {
101
+ H.value && g(q);
102
+ }, { deep: !0 }), D(() => j.options, () => {
103
+ H.value && g(q);
104
+ }, { deep: !0 });
105
+ let X = null;
102
106
  return y(() => {
103
- g(W), N.value && (q = new ResizeObserver(() => W()), q.observe(N.value));
107
+ H.value && (g(q), N.value && (X = new ResizeObserver(() => q()), X.observe(N.value)));
104
108
  }), b(() => {
105
- q?.disconnect();
109
+ X?.disconnect();
106
110
  }), (o, c) => (x(), d("div", {
107
111
  ref_key: "containerRef",
108
112
  ref: N,
109
- class: _(E(e)(F.value ? "bouncy-toggle bouncy-toggle--pill" : "bouncy-toggle", I.value && "bouncy-toggle--scroll scroll-fade-mask scrollbar-hidden", L.value && "bouncy-toggle--auto scrollbar-hidden", j.class))
113
+ class: _(E(e)(I.value ? "bouncy-toggle bouncy-toggle--pill" : "bouncy-toggle", L.value && "bouncy-toggle--scroll scroll-fade-mask scrollbar-hidden", R.value && "bouncy-toggle--auto scrollbar-hidden", j.class))
110
114
  }, [
111
115
  t.multiSelect ? u("", !0) : (x(), d("div", {
112
116
  key: 0,
113
- class: _(F.value ? "bouncy-slider bouncy-slider--pill" : "bouncy-slider"),
114
- style: v(B.value)
117
+ class: _([I.value ? "bouncy-slider bouncy-slider--pill" : "bouncy-slider", V.value ? "bouncy-slider--js" : "bouncy-slider--anchor"]),
118
+ style: v(V.value ? U.value : void 0)
115
119
  }, null, 6)),
116
- t.multiSelect ? (x(!0), d(s, { key: 1 }, C(R.value, (e) => (x(), d("div", {
120
+ t.multiSelect ? (x(!0), d(s, { key: 1 }, C(z.value, (e) => (x(), d("div", {
117
121
  key: "slider-" + e,
118
- class: _(F.value ? "bouncy-slider bouncy-slider--pill" : "bouncy-slider"),
119
- style: v(H.value[e] ?? { opacity: "0" })
122
+ class: _([I.value ? "bouncy-slider bouncy-slider--pill" : "bouncy-slider", "bouncy-slider--js"]),
123
+ style: v(G.value[e] ?? { opacity: "0" })
120
124
  }, null, 6))), 128)) : u("", !0),
121
125
  (x(!0), d(s, null, C(t.options, (e, t) => (x(), d(s, { key: e.value }, [e.tooltip ? (x(), l(E(a), {
122
126
  key: 0,
@@ -129,13 +133,13 @@ var k = [
129
133
  ref: (e) => {
130
134
  e && (P.value[t] = e);
131
135
  },
132
- class: _([F.value ? "bouncy-btn bouncy-btn--pill" : "bouncy-btn", e.disabled && "is-disabled"]),
133
- "aria-pressed": z(e.value) ? "true" : "false",
136
+ class: _([I.value ? "bouncy-btn bouncy-btn--pill" : "bouncy-btn", e.disabled && "is-disabled"]),
137
+ "aria-pressed": B(e.value) ? "true" : "false",
134
138
  disabled: e.disabled,
135
- onClick: (n) => K(e.value, t)
139
+ onClick: (n) => Y(e.value, t)
136
140
  }, [w(o.$slots, "option", {
137
141
  option: e,
138
- active: z(e.value)
142
+ active: B(e.value)
139
143
  }, () => [p(T(e.label), 1)], !0)], 10, k)]),
140
144
  _: 2
141
145
  }, 1024), m(E(i), {
@@ -154,17 +158,17 @@ var k = [
154
158
  ref: (e) => {
155
159
  e && (P.value[t] = e);
156
160
  },
157
- class: _([F.value ? "bouncy-btn bouncy-btn--pill" : "bouncy-btn", e.disabled && "is-disabled"]),
158
- "aria-pressed": z(e.value) ? "true" : "false",
161
+ class: _([I.value ? "bouncy-btn bouncy-btn--pill" : "bouncy-btn", e.disabled && "is-disabled"]),
162
+ "aria-pressed": B(e.value) ? "true" : "false",
159
163
  disabled: e.disabled,
160
- onClick: (n) => K(e.value, t)
164
+ onClick: (n) => Y(e.value, t)
161
165
  }, [w(o.$slots, "option", {
162
166
  option: e,
163
- active: z(e.value)
167
+ active: B(e.value)
164
168
  }, () => [p(T(e.label), 1)], !0)], 10, A))], 64))), 128))
165
169
  ], 2));
166
170
  }
167
- }), [["__scopeId", "data-v-61c8392f"]]), M = /* @__PURE__ */ h({
171
+ }), [["__scopeId", "data-v-25e9946f"]]), M = /* @__PURE__ */ h({
168
172
  __name: "BouncyTabs",
169
173
  props: {
170
174
  options: {},
package/dist/timeline.js CHANGED
@@ -1,5 +1,5 @@
1
- import { t as e } from "./_plugin-vue_export-helper-n-_DRHWS.js";
2
- import { t } from "./HoverPopover-Btv4RQfv.js";
1
+ import { t as e } from "./_plugin-vue_export-helper-Dq1MygBL.js";
2
+ import { t } from "./HoverPopover-CWFCfLx3.js";
3
3
  import { Fragment as n, computed as r, createBlock as i, createCommentVNode as a, createElementBlock as o, createElementVNode as s, createSlots as c, defineComponent as l, guardReactiveProps as u, normalizeClass as d, normalizeProps as f, normalizeStyle as p, openBlock as m, ref as h, renderList as g, renderSlot as _, toDisplayString as v, unref as y, withCtx as b } from "vue";
4
4
  //#region src/components/custom/timeline/geometry.ts
5
5
  function x(e) {
package/dist/toast.js CHANGED
@@ -1,2 +1,2 @@
1
- import { a as e, c as t, i as n, n as r, o as i, r as a, s as o, t as s } from "./Toaster-CY8gJu9E.js";
1
+ import { a as e, c as t, i as n, n as r, o as i, r as a, s as o, t as s } from "./Toaster-Bjlunvq4.js";
2
2
  export { t as Toast, o as ToastAction, i as ToastClose, e as ToastDescription, n as ToastTitle, s as Toaster, r as toast, a as useToast };
@@ -1,2 +1,2 @@
1
- import { n as e, t } from "./ToggleGroupItem-BYG_8M9M.js";
1
+ import { n as e, t } from "./ToggleGroupItem-OesUouE7.js";
2
2
  export { e as ToggleGroup, t as ToggleGroupItem };
package/dist/tooltip.js CHANGED
@@ -1,2 +1,2 @@
1
- import { i as e, n as t, r as n, t as r } from "./TooltipProvider-C5QLSPto.js";
1
+ import { i as e, n as t, r as n, t as r } from "./TooltipProvider-DE78vbEP.js";
2
2
  export { e as Tooltip, n as TooltipContent, r as TooltipProvider, t as TooltipTrigger };
@@ -1,4 +1,4 @@
1
- import { t as e } from "./_plugin-vue_export-helper-n-_DRHWS.js";
1
+ import { t as e } from "./_plugin-vue_export-helper-Dq1MygBL.js";
2
2
  import { Fragment as t, computed as n, createCommentVNode as r, createElementBlock as i, createElementVNode as a, defineComponent as o, normalizeClass as s, onMounted as c, onUnmounted as l, openBlock as u, ref as d, renderList as f, toDisplayString as p, unref as m, watch as h } from "vue";
3
3
  //#region src/components/custom/typewriter/types.ts
4
4
  var g = {
@@ -1,4 +1,4 @@
1
- import { n as e, t } from "./constants-D-8FN28s.js";
1
+ import { n as e, t } from "./constants-DwBwnG8N.js";
2
2
  import { getCurrentScope as n, onScopeDispose as r, readonly as i, ref as a, shallowRef as o, toValue as s, watch as c } from "vue";
3
3
  import { SmoothProgress as l } from "@mkbabb/keyframes.js";
4
4
  //#region src/composables/motion/useAnimatedNumber.ts
@@ -1,8 +1,8 @@
1
1
  import { t as e } from "./cn-DJXf4yaB.js";
2
- import { t } from "./createLucideIcon-rHu18UQW.js";
3
- import { t as n } from "./chevron-down-Du2b9vY_.js";
4
- import { t as r } from "./_plugin-vue_export-helper-n-_DRHWS.js";
5
- import { t as i } from "./Label-C8QMJSsf.js";
2
+ import { t } from "./createLucideIcon-Bn9a1b70.js";
3
+ import { t as n } from "./chevron-down-DILQA1t6.js";
4
+ import { t as r } from "./_plugin-vue_export-helper-Dq1MygBL.js";
5
+ import { t as i } from "./Label-DJty89bp.js";
6
6
  import { Fragment as a, computed as o, createCommentVNode as s, createElementBlock as c, createElementVNode as l, createTextVNode as u, createVNode as d, defineComponent as f, inject as p, normalizeClass as m, normalizeStyle as h, openBlock as g, provide as _, reactive as v, ref as y, renderList as b, renderSlot as x, toDisplayString as S, toRaw as C, unref as w, useId as T, watch as E, withCtx as D } from "vue";
7
7
  var O = t("rotate-ccw", [["path", {
8
8
  d: "M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8",
@@ -91,6 +91,7 @@ var M = { class: "configurator-stage relative min-h-0 min-w-0 overflow-hidden" }
91
91
  }, G = [
92
92
  "id",
93
93
  "aria-hidden",
94
+ "inert",
94
95
  "data-state"
95
96
  ], K = { class: "min-h-0 overflow-hidden" }, q = /* @__PURE__ */ f({
96
97
  __name: "ConfiguratorLayer",
@@ -134,11 +135,11 @@ var M = { class: "configurator-stage relative min-h-0 min-w-0 overflow-hidden" }
134
135
  }
135
136
  let v = o(() => u.value ? "open" : "closed");
136
137
  return (r, a) => (g(), c("div", {
137
- class: m(w(e)("configurator-layer rounded-panel border-b border-border/40 last:border-b-0", i.class)),
138
+ class: m(w(e)("configurator-layer border-b border-border/40 last:border-b-0", i.class)),
138
139
  "data-state": v.value
139
140
  }, [l("button", {
140
141
  type: "button",
141
- class: m(w(e)("configurator-layer-trigger", "rounded-panel", "group flex w-full items-center justify-between gap-2 px-3 py-2", "text-left transition-colors hover:bg-foreground/5 focus-ring")),
142
+ class: m(w(e)("configurator-layer-trigger", "group flex w-full items-center justify-between gap-2 px-3 py-2", "text-left transition-colors hover:bg-foreground/5 focus-ring")),
142
143
  "aria-expanded": u.value,
143
144
  "aria-controls": p.value,
144
145
  "data-state": v.value,
@@ -150,6 +151,7 @@ var M = { class: "configurator-stage relative min-h-0 min-w-0 overflow-hidden" }
150
151
  id: p.value,
151
152
  role: "region",
152
153
  "aria-hidden": !u.value,
154
+ inert: !u.value,
153
155
  "data-state": v.value,
154
156
  class: "configurator-layer-region grid transition-[grid-template-rows] duration-200 ease-out motion-reduce:transition-none",
155
157
  style: h({ gridTemplateRows: u.value ? "1fr" : "0fr" })