@mkbabb/glass-ui 9.0.0 → 10.0.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 (171) hide show
  1. package/MIGRATION.md +4768 -0
  2. package/README.md +57 -13
  3. package/dist/DialogContent-CwIBvou_.js +157 -0
  4. package/dist/{DropdownMenuTrigger-8UZsBtZ8.js → DropdownMenuTrigger-CKRnhDSQ.js} +1 -1
  5. package/dist/{Surface-i1tWC-Ga.js → Surface-1nPoabc3.js} +1 -1
  6. package/dist/{accent-tone-solve-Cw7WkRD9.js → accent-tone-solve-5H6FY2QO.js} +1 -1
  7. package/dist/aurora.js +22 -13
  8. package/dist/{badge-owUOaaba.js → badge-BO6BC4G5.js} +1 -1
  9. package/dist/badge.js +1 -1
  10. package/dist/blob.js +2 -2
  11. package/dist/{button-yvGPb0Bx.js → button-BOFTUPyU.js} +1 -1
  12. package/dist/button.js +1 -1
  13. package/dist/{card-3HFFpC7_.js → card-ByyqRBvK.js} +2 -2
  14. package/dist/card.js +1 -1
  15. package/dist/carousel.js +3 -3
  16. package/dist/chip.js +8 -3
  17. package/dist/{class-names-q-UGOkHH.js → class-names-FlXcvRRT.js} +65 -18
  18. package/dist/{collapsible-B7O6m-Ch.js → collapsible-DFzK29Oh.js} +5 -2
  19. package/dist/collapsible.js +1 -1
  20. package/dist/color.js +11 -11
  21. package/dist/{command-tEzAaVY_.js → command-C-5xSEJ2.js} +8 -8
  22. package/dist/command.js +1 -1
  23. package/dist/component-styles.css +1 -0
  24. package/dist/components/_shared/class-names.d.ts +10 -1
  25. package/dist/components/_shared/menu/menu.css +1 -1
  26. package/dist/components/_shared/overlay/index.d.ts +1 -0
  27. package/dist/components/_shared/overlay/shortcuts.d.ts +12 -0
  28. package/dist/components/aurora/composables/atoms.d.ts +22 -6
  29. package/dist/components/aurora/composables/runtime.d.ts +6 -4
  30. package/dist/components/aurora/constants/presets.d.ts +19 -1
  31. package/dist/components/blob/Blob.vue.d.ts +3 -3
  32. package/dist/components/button/styles.css +1 -1
  33. package/dist/components/card/Card.vue.d.ts +8 -2
  34. package/dist/components/chip/Chip.vue.d.ts +1 -7
  35. package/dist/components/chip/chipVariants.d.ts +1 -0
  36. package/dist/components/collapsible/Collapsible.vue.d.ts +1 -0
  37. package/dist/components/command/CommandDialog.vue.d.ts +1 -1
  38. package/dist/components/configurator/styles.css +1 -1
  39. package/dist/components/dark-mode-toggle/dark-mode-toggle.css +1 -1
  40. package/dist/components/deck/styles/capture.css +1 -1
  41. package/dist/components/dialog/styles.css +1 -1
  42. package/dist/components/dock/composables/dockCrossfadeContext.d.ts +0 -2
  43. package/dist/components/dock/composables/index.d.ts +1 -1
  44. package/dist/components/dock/composables/useDockHold.d.ts +16 -12
  45. package/dist/components/dock/styles/layers.css +1 -1
  46. package/dist/components/fourier-field/FourierField.vue.d.ts +1 -1
  47. package/dist/components/fourier-field/constants.d.ts +8 -7
  48. package/dist/components/fourier-field/index.d.ts +2 -2
  49. package/dist/components/labeled-field/LabeledSwitch.vue.d.ts +3 -1
  50. package/dist/components/labeled-field/types.d.ts +1 -1
  51. package/dist/components/menu/DropdownMenu.vue.d.ts +1 -1
  52. package/dist/components/metric/coalesce-metric.d.ts +6 -1
  53. package/dist/components/metric/styles.css +1 -1
  54. package/dist/components/popover/Popover.vue.d.ts +1 -1
  55. package/dist/components/scroll-progress-rim/styles.css +1 -1
  56. package/dist/components/sheet/styles.css +1 -1
  57. package/dist/components/slider/styles.css +1 -1
  58. package/dist/components/tabs/SegmentedTabs.vue.d.ts +25 -112
  59. package/dist/components/tabs/composables/useTabDragMorph.d.ts +1 -1
  60. package/dist/components/tabs/composables/useTabResponsive.d.ts +11 -11
  61. package/dist/components/tabs/index.d.ts +1 -1
  62. package/dist/components/tabs/styles/drag.css +1 -1
  63. package/dist/components/tabs/styles/segmented.css +1 -1
  64. package/dist/components/tabs/types.d.ts +85 -0
  65. package/dist/components/timeline/index.d.ts +2 -0
  66. package/dist/components/toast/Toast.vue.d.ts +2 -2
  67. package/dist/composables/color/index.d.ts +0 -15
  68. package/dist/composables/dark/darkModeSyncScript.d.ts +24 -1
  69. package/dist/composables/dom/useResolveTokenColor.d.ts +1 -1
  70. package/dist/composables/glass/index.d.ts +2 -0
  71. package/dist/composables/keyboard/useKeyboardShortcuts.d.ts +47 -1
  72. package/dist/composables/sidebar/types.d.ts +5 -1
  73. package/dist/{configurator-BHJymdrF.js → configurator-DiwVN573.js} +16 -16
  74. package/dist/configurator.js +1 -1
  75. package/dist/constellation.js +3 -3
  76. package/dist/{content-CWO-XL7o.js → content-So3j6SOe.js} +1 -1
  77. package/dist/dark-mode-toggle.js +2 -2
  78. package/dist/{dark-CLlmo7dD.js → dark-pONY3x93.js} +2 -2
  79. package/dist/dark.js +1 -1
  80. package/dist/{data-table-_RrOEdiw.js → data-table-Ba_uTfPc.js} +3 -3
  81. package/dist/data-table.js +1 -1
  82. package/dist/{deck-Ci6YjB5e.js → deck-Cm_VmyNL.js} +1 -1
  83. package/dist/deck.js +1 -1
  84. package/dist/{dialog-CbRnTRtg.js → dialog-BZoFG0j8.js} +1 -1
  85. package/dist/dialog.js +2 -2
  86. package/dist/dock.js +9 -13
  87. package/dist/easing.js +4 -4
  88. package/dist/{expandable-container-BY1hQXi4.js → expandable-container-CZUj9BzY.js} +9 -9
  89. package/dist/expandable-container.js +1 -1
  90. package/dist/fourier-field.js +53 -58
  91. package/dist/glass-ui.css +1 -1
  92. package/dist/glass-ui.js +27 -27
  93. package/dist/handmark.js +1 -1
  94. package/dist/index.d.ts +1 -1
  95. package/dist/infinite-scroll.js +16 -17
  96. package/dist/{input-Bls2A4Tt.js → input-eLZ_AU7l.js} +1 -1
  97. package/dist/input.js +1 -1
  98. package/dist/keyboard.js +64 -21
  99. package/dist/{label-BQEZhnK_.js → label-CE03H1KL.js} +2 -2
  100. package/dist/label.js +1 -1
  101. package/dist/labeled-field.js +8 -5
  102. package/dist/{menu-TDMNtZjG.js → menu-BnmCOa3y.js} +92 -89
  103. package/dist/menu.js +2 -2
  104. package/dist/metric.js +12 -7
  105. package/dist/{motion-D4uYE0UM.js → motion-BvV1_24p.js} +1 -1
  106. package/dist/motion-core.js +1 -1
  107. package/dist/{number-field-NFAwQ0HK.js → number-field-RP89046a.js} +2 -2
  108. package/dist/number-field.js +1 -1
  109. package/dist/pager-dots.js +3 -3
  110. package/dist/popover-DA87hFBx.js +184 -0
  111. package/dist/popover.js +1 -1
  112. package/dist/{progress-DF8dWZIX.js → progress-eVa-mc7J.js} +1 -1
  113. package/dist/progress.js +1 -1
  114. package/dist/{radio-group-BNV7PN1O.js → radio-group-B58Bz16F.js} +1 -1
  115. package/dist/radio-group.js +1 -1
  116. package/dist/{select-COox45Kv.js → select-fy3vtArm.js} +13 -13
  117. package/dist/select.js +1 -1
  118. package/dist/{separator-CN11t406.js → separator-D4EZM10u.js} +2 -2
  119. package/dist/separator.js +1 -1
  120. package/dist/{sheet-BEFvnO_u.js → sheet-BQJyER59.js} +120 -115
  121. package/dist/sheet.js +2 -2
  122. package/dist/shortcuts-DGGWNRNe.js +13 -0
  123. package/dist/sidebar.js +4 -4
  124. package/dist/{status-dot-BpnqOP5N.js → status-dot-W4LFiJps.js} +2 -2
  125. package/dist/status-dot.js +1 -1
  126. package/dist/styles/accessibility.css +1 -1
  127. package/dist/styles/animations.css +1 -1
  128. package/dist/styles/components.css +1 -1
  129. package/dist/styles/glass/a11y-fallback.css +1 -1
  130. package/dist/styles/glass/dissolve.css +1 -1
  131. package/dist/styles/glass/focus-veil.css +1 -1
  132. package/dist/styles/glass/ladder.css +1 -1
  133. package/dist/styles/glass/overlay-plate.css +1 -1
  134. package/dist/styles/glass/reveal.css +1 -1
  135. package/dist/styles/glass-specular-track.css +1 -1
  136. package/dist/styles/paper.css +1 -1
  137. package/dist/styles/scroll-choreography.css +1 -1
  138. package/dist/styles/scroll-chrome.css +1 -1
  139. package/dist/styles/scroll-driven.css +1 -1
  140. package/dist/styles/theme/literals.css +1 -1
  141. package/dist/styles/tokens/color-radius.css +1 -1
  142. package/dist/styles/tokens/dark-arm-glass.css +1 -1
  143. package/dist/styles/tokens/light-dark.css +1 -1
  144. package/dist/styles/tokens/offsets.css +1 -1
  145. package/dist/styles/tokens/scheme-motion.css +1 -1
  146. package/dist/styles/tokens/sizing.css +1 -1
  147. package/dist/styles/typography/semantic.css +1 -1
  148. package/dist/styles/typography/utilities.css +1 -1
  149. package/dist/styles/utilities/a11y-overrides.css +1 -1
  150. package/dist/styles/utilities/responsive.css +1 -1
  151. package/dist/styles/view-transition.css +1 -1
  152. package/dist/styles/viz-reveal.css +1 -1
  153. package/dist/surface.js +1 -1
  154. package/dist/{switch-lLkbREB-.js → switch-BYUZ6g9G.js} +1 -1
  155. package/dist/switch.js +1 -1
  156. package/dist/{tabs-DSJMd1Et.js → tabs-rdRXKXxd.js} +4 -3
  157. package/dist/tabs.js +1 -1
  158. package/dist/textarea.js +1 -1
  159. package/dist/timeline.js +44 -42
  160. package/dist/{toast-9c6Kp58L.js → toast-DVOwo6GB.js} +1 -1
  161. package/dist/toast.js +1 -1
  162. package/dist/{toggle-group-DUcmKnDw.js → toggle-group-CC5b3o1R.js} +1 -1
  163. package/dist/toggle-group.js +1 -1
  164. package/dist/{tooltip-BKk2qVDn.js → tooltip-DhTHhtJN.js} +1 -1
  165. package/dist/tooltip.js +1 -1
  166. package/dist/typewriter.js +1 -1
  167. package/dist/{useAccentTone-DFAh1osB.js → useAccentTone-DitmKfGL.js} +1 -1
  168. package/dist/{usePointerVelocityField-DsIf7yyq.js → usePointerVelocityField-Lx26_Yap.js} +1 -1
  169. package/package.json +4 -2
  170. package/dist/DialogContent-4hzLiaCQ.js +0 -152
  171. package/dist/popover-C04Rrdcz.js +0 -181
@@ -1,2 +1,2 @@
1
- import { n as e, r as t, t as n } from "./collapsible-B7O6m-Ch.js";
1
+ import { n as e, r as t, t as n } from "./collapsible-DFzK29Oh.js";
2
2
  export { t as Collapsible, n as CollapsibleContent, e as CollapsibleTrigger };
package/dist/color.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { i as e, n as t, r as n, t as r } from "./value-DMhh2R94.js";
2
- import { t as i } from "./useAccentTone-DFAh1osB.js";
2
+ import { t as i } from "./useAccentTone-DitmKfGL.js";
3
3
  import { convertColor as a, interpolateHue as o, mapColorToGamut as s, toRgba8 as c } from "@mkbabb/value.js/color";
4
4
  //#region src/composables/color/index.ts
5
5
  function l(e) {
@@ -38,18 +38,18 @@ function p(e) {
38
38
  let [t, i, a] = r("oklchStopToHex", c(n(e), { gamut: "clip" })), o = (e) => e.toString(16).padStart(2, "0");
39
39
  return `#${o(t)}${o(i)}${o(a)}`;
40
40
  }
41
- var m = (e) => d(f(e)), h = {
41
+ var m = {
42
42
  complementary: "longer",
43
43
  "split-complementary": "longer",
44
44
  analogous: "shorter",
45
45
  monochrome: "shorter",
46
46
  triad: "increasing",
47
47
  tetradic: "increasing"
48
- }, g = (e) => (e % 360 + 360) % 360;
49
- function _(e, t, n, i) {
50
- let a = h[t], s = (e, t) => g(r("deriveHue", o(g(e), g(t), i, a)));
48
+ }, h = (e) => (e % 360 + 360) % 360;
49
+ function g(e, t, n, i) {
50
+ let a = m[t], s = (e, t) => h(r("deriveHue", o(h(e), h(t), i, a)));
51
51
  switch (t) {
52
- case "monochrome": return g(e);
52
+ case "monochrome": return h(e);
53
53
  case "complementary": return s(e, e + 180);
54
54
  case "split-complementary": return s(e + 150, e + 210);
55
55
  case "triad": return s(e, e + 240);
@@ -57,7 +57,7 @@ function _(e, t, n, i) {
57
57
  default: return s(e - n, e + n);
58
58
  }
59
59
  }
60
- function v(e) {
60
+ function _(e) {
61
61
  let [i, a, o] = r("gamutMapStop", s(n(e), "srgb")).channels;
62
62
  return {
63
63
  L: t(i, "gamutMapStop"),
@@ -65,13 +65,13 @@ function v(e) {
65
65
  h: t(o, "gamutMapStop")
66
66
  };
67
67
  }
68
- function y(e, t = {}) {
68
+ function v(e, t = {}) {
69
69
  let n = typeof e == "string" ? f(e) : e, { stopCount: r = 3, harmony: i = "analogous", lightnessSpread: a = .18, hueSpread: o = 24, chromaBump: s = .03, chromaCeiling: c, bodyLightness: l, lightnessFloor: u } = t, d = l === void 0 ? n.L - a / 2 : l, p = u === void 0 ? .05 : u, m = Math.max(2, Math.min(4, Math.round(r))), h = [];
70
70
  for (let e = 0; e < m; e++) {
71
71
  let t = m === 1 ? 0 : e / (m - 1), r = d + a * t, l = Math.max(0, n.C + s * Math.sin(Math.PI * t));
72
72
  c !== void 0 && (l = Math.min(l, c));
73
- let u = _(n.h, i, o, t);
74
- h.push(v({
73
+ let u = g(n.h, i, o, t);
74
+ h.push(_({
75
75
  L: Math.min(.98, Math.max(p, r)),
76
76
  C: l,
77
77
  h: u
@@ -80,4 +80,4 @@ function y(e, t = {}) {
80
80
  return h;
81
81
  }
82
82
  //#endregion
83
- export { f as cssToOklch, m as defaultBlobColorResolver, y as deriveBlobPalette, _ as deriveHue, v as gamutMapStop, p as oklchStopToHex, d as oklchToGammaRgb, l as oklchToLinear, i as useAccentTone, u as warmCatchLight };
83
+ export { f as cssToOklch, v as deriveBlobPalette, g as deriveHue, _ as gamutMapStop, p as oklchStopToHex, d as oklchToGammaRgb, l as oklchToLinear, i as useAccentTone, u as warmCatchLight };
@@ -1,9 +1,9 @@
1
- import { t as e } from "./class-names-q-UGOkHH.js";
1
+ import { t as e } from "./class-names-FlXcvRRT.js";
2
2
  import { t } from "./primitive-B2t2jdqM.js";
3
3
  import { t as n } from "./selection-DqIULxRG.js";
4
- import { n as r, t as i } from "./DialogContent-4hzLiaCQ.js";
5
- import { t as a } from "./rowClass-DYOXwxhO.js";
6
- import { t as o } from "./participation-Di4UHbzk.js";
4
+ import { n as r, t as i } from "./DialogContent-CwIBvou_.js";
5
+ import { t as a } from "./participation-Di4UHbzk.js";
6
+ import { t as o } from "./rowClass-DYOXwxhO.js";
7
7
  import { computed as s, createBlock as c, createCommentVNode as l, createElementBlock as u, createTextVNode as d, createVNode as f, defineComponent as p, mergeProps as m, normalizeClass as h, openBlock as g, renderSlot as _, toDisplayString as v, unref as y, useAttrs as b, withCtx as x } from "vue";
8
8
  import { ComboboxContent as S, ComboboxEmpty as C, ComboboxGroup as w, ComboboxInput as T, ComboboxItem as E, ComboboxLabel as D, ComboboxRoot as O, ComboboxSeparator as k } from "reka-ui";
9
9
  import { Search as A } from "@lucide/vue";
@@ -231,20 +231,20 @@ var j = /* @__PURE__ */ p({
231
231
  },
232
232
  emits: ["select"],
233
233
  setup(n, { emit: r }) {
234
- let i = n, o = r, l = b(), u = s(() => t(l));
234
+ let i = n, a = r, l = b(), u = s(() => t(l));
235
235
  function d(e) {
236
236
  if (i.disabled) {
237
237
  e.preventDefault();
238
238
  return;
239
239
  }
240
- o("select", e);
240
+ a("select", e);
241
241
  }
242
242
  return (t, n) => (g(), c(y(E), m(u.value, {
243
243
  "data-slot": "command-item",
244
244
  value: i.value,
245
245
  disabled: i.disabled,
246
246
  "text-value": i.textValue,
247
- class: y(e)("command__item", y(a)(), i.class),
247
+ class: y(e)("command__item", y(o)(), i.class),
248
248
  onSelect: d
249
249
  }), {
250
250
  default: x(() => [_(t.$slots, "default")]),
@@ -277,7 +277,7 @@ var j = /* @__PURE__ */ p({
277
277
  "interactOutside"
278
278
  ],
279
279
  setup(t, { emit: n }) {
280
- let r = t, i = n, a = b(), l = s(() => ({ ...a })), u = o();
280
+ let r = t, i = n, o = b(), l = s(() => ({ ...o })), u = a();
281
281
  return (t, n) => (g(), c(y(S), m({
282
282
  ...l.value,
283
283
  ...y(u).portalAttrs.value
package/dist/command.js CHANGED
@@ -1,2 +1,2 @@
1
- import { a as e, c as t, i as n, l as r, n as i, o as a, r as o, s, t as c } from "./command-tEzAaVY_.js";
1
+ import { a as e, c as t, i as n, l as r, n as i, o as a, r as o, s, t as c } from "./command-C-5xSEJ2.js";
2
2
  export { r as Command, t as CommandDialog, s as CommandEmpty, a as CommandGroup, e as CommandInput, n as CommandItem, o as CommandList, i as CommandSeparator, c as CommandShortcut };
@@ -1,3 +1,4 @@
1
+ @layer theme, base, components, utilities;
1
2
  @import "./styles/track-well.css";
2
3
  @import "./styles/glass/value-marks.css";
3
4
  @import "./styles/glass/track-flow.css";
@@ -21,7 +21,16 @@ export type ClassValue = string | number | false | null | undefined | ClassValue
21
21
  *
22
22
  * Tokens that don't match a known bucket pass through untouched (custom
23
23
  * classes, arbitrary-value utilities like `[&::after]:hidden`, anything
24
- * not in the conflict table).
24
+ * not in the conflict table), and between two of them the winner is
25
+ * stylesheet emission order, not argument order.
26
+ * [2026-09-22 · O-32 §4.2 / O-23 L-2: the families that fall through at
27
+ * 10.0.0, named so an override can be priced — the theme font registers
28
+ * `font-text` / `font-display` / `font-serif-math` (the family bucket is
29
+ * `font-sans|serif|mono` only), `tracking-*`, `leading-*`, and the semantic
30
+ * `border-*` / `ring-*` colours (`border-border`, `ring-ring`; those buckets
31
+ * match palette-number names only). Every `text-*` and `shadow-*` name
32
+ * `.published-roster` carries IS bucketed, by its true property — a unit in
33
+ * `tests/components/_shared/classNames.test.ts` reads the roster to hold it.]
25
34
  */
26
35
  export declare function cn(...inputs: ClassValue[]): string;
27
36
  /** Normalize Vue-compatible class values without shipping a runtime class helper. */
@@ -1 +1 @@
1
- @layer components{.glass-menu-row{--menu-row-bg: var(--glass-plate-quiet);--menu-row-lift: -1px;min-block-size: max(2rem,var(--touch-target,2.75rem));transition: background-color var(--engage-control-engage-release) var(--ease-standard),color var(--engage-control-engage-release) var(--ease-standard),border-color var(--engage-control-engage-release) var(--ease-standard),box-shadow var(--engage-control-engage-release) var(--ease-standard),translate var(--spring-dock-duration) var(--spring-dock),scale var(--spring-press-duration) var(--transition-liquid-spatial);translate: 0 0;}.glass-menu-row:focus:not([data-disabled]),.glass-menu-row[data-highlighted]:not([data-disabled]),.glass-menu-row[data-state="open"]:not([data-disabled]){background: var(--menu-row-bg);color: var(--accent-foreground);transition: background-color var(--engage-control-engage-attack) var(--ease-standard),color var(--engage-control-engage-attack) var(--ease-standard),border-color var(--engage-control-engage-attack) var(--ease-standard),box-shadow var(--engage-control-engage-attack) var(--ease-standard),translate var(--spring-dock-duration) var(--spring-dock),scale var(--spring-press-duration) var(--transition-liquid-spatial);}@media (hover: hover){.glass-menu-row:hover:not([data-disabled]){background: var(--menu-row-bg);color: var(--accent-foreground);translate: 0 var(--menu-row-lift);transition: background-color var(--engage-control-engage-attack) var(--ease-standard),color var(--engage-control-engage-attack) var(--ease-standard),border-color var(--engage-control-engage-attack) var(--ease-standard),box-shadow var(--engage-control-engage-attack) var(--ease-standard),translate var(--spring-dock-duration) var(--spring-dock),scale var(--spring-press-duration) var(--transition-liquid-spatial);}}}@media (prefers-reduced-motion: reduce){.glass-menu-row{--menu-row-lift: 0px;transition: background-color var(--engage-control-engage-release) var(--ease-standard),color var(--engage-control-engage-release) var(--ease-standard),border-color var(--engage-control-engage-release) var(--ease-standard),box-shadow var(--engage-control-engage-release) var(--ease-standard);}}@layer components{.glass-menu-divider{block-size: 1px;background: color-mix( in oklab,var(--foreground) calc(var(--ink-seam) * 100%),transparent );}}
1
+ @layer components{.glass-menu-row{--menu-row-bg: var(--glass-plate-quiet);--menu-row-lift: -1px;min-block-size: max(2rem,var(--touch-target,2.75rem));transition: background-color var(--engage-control-engage-release) var(--ease-standard),color var(--engage-control-engage-release) var(--ease-standard),border-color var(--engage-control-engage-release) var(--ease-standard),box-shadow var(--engage-control-engage-release) var(--ease-standard),translate var(--spring-dock-duration) var(--spring-dock),scale var(--spring-press-duration) var(--transition-liquid-spatial);translate: 0 0;}.glass-menu-row:focus:not([data-disabled]),.glass-menu-row[data-highlighted]:not([data-disabled]),.glass-menu-row[data-state="open"]:not([data-disabled]){background: var(--menu-row-bg);color: var(--accent-foreground);transition: background-color var(--engage-control-engage-attack) var(--ease-standard),color var(--engage-control-engage-attack) var(--ease-standard),border-color var(--engage-control-engage-attack) var(--ease-standard),box-shadow var(--engage-control-engage-attack) var(--ease-standard),translate var(--spring-dock-duration) var(--spring-dock),scale var(--spring-press-duration) var(--transition-liquid-spatial);}@media (hover: hover){.glass-menu-row:hover:not([data-disabled]){background: var(--menu-row-bg);color: var(--accent-foreground);translate: 0 var(--menu-row-lift);transition: background-color var(--engage-control-engage-attack) var(--ease-standard),color var(--engage-control-engage-attack) var(--ease-standard),border-color var(--engage-control-engage-attack) var(--ease-standard),box-shadow var(--engage-control-engage-attack) var(--ease-standard),translate var(--spring-dock-duration) var(--spring-dock),scale var(--spring-press-duration) var(--transition-liquid-spatial);}}@media (prefers-reduced-motion: reduce){.glass-menu-row{--menu-row-lift: 0px;transition: background-color var(--engage-control-engage-release) var(--ease-standard),color var(--engage-control-engage-release) var(--ease-standard),border-color var(--engage-control-engage-release) var(--ease-standard),box-shadow var(--engage-control-engage-release) var(--ease-standard);}}}@layer components{.glass-menu-divider{block-size: 1px;background: color-mix( in oklab,var(--foreground) calc(var(--ink-seam) * 100%),transparent );}}
@@ -10,3 +10,4 @@ export { overlayContentAttrs, type OverlayAttrs, type OverlayRole } from "./cont
10
10
  export { isTeleportedTarget } from "./isTeleportedTarget.js";
11
11
  export { useDockParticipation, useHoldToken, type DockParticipation, type DockPortalAttrs, type HoldTarget, type HoldToken, } from "./participation.js";
12
12
  export type { FloatingAlign, FloatingPlacementProps, FloatingSide, } from "./placement.js";
13
+ export { useModalShortcutBarrier } from "./shortcuts.js";
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Hold a shortcut barrier for as long as `active` reads true.
3
+ *
4
+ * ORDERING is the whole contract and it is why this runs `immediate` in SETUP:
5
+ * the barrier admits registrations made AFTER it, so it has to be raised before
6
+ * the overlay's own content mounts and registers anything. A `pre`-flush watch
7
+ * fires ahead of the render that mounts that content, and the immediate arm covers
8
+ * an overlay that is open on its first frame.
9
+ *
10
+ * The release is idempotent, so the scope-dispose arm is safe beside a close.
11
+ */
12
+ export declare function useModalShortcutBarrier(active: () => boolean): void;
@@ -74,14 +74,16 @@ export interface AuroraFieldInteractivityAtom {
74
74
  */
75
75
  amplitude?: number;
76
76
  }
77
- /** Smooth fields expose the cursor field but have no directional impasto light. */
77
+ /** No impasto to relight (smooth, and every medium but oil/vangogh): no `light`. */
78
78
  export interface AuroraSmoothInteractivityAtom extends AuroraFieldInteractivityAtom {
79
79
  light?: never;
80
80
  }
81
- /** Textured media may additionally steer their directional light from the cursor. */
81
+ /** The impasto media (oil, vangogh) may also steer their light from the cursor. */
82
82
  export interface AuroraPainterlyInteractivityAtom extends AuroraFieldInteractivityAtom {
83
83
  light?: boolean;
84
84
  }
85
+ /** Media whose texture amount writes `impasto` — the only ones `light` relights. */
86
+ type AuroraImpastoMedium = "oil" | "vangogh";
85
87
  export type AuroraInteractivityAtom = AuroraSmoothInteractivityAtom | AuroraPainterlyInteractivityAtom;
86
88
  /**
87
89
  * The Tier-1 atoms of control (≤7) — the user's named control elements. EVERY atom is
@@ -89,7 +91,14 @@ export type AuroraInteractivityAtom = AuroraSmoothInteractivityAtom | AuroraPain
89
91
  * so `DEFAULT_ATOMS` (the empty set) resolves to `DEFAULT_AURORA_CONFIG`.
90
92
  */
91
93
  interface AuroraAtomsBase {
92
- /** A seed color (CSS string or an OklchStop anchor) → drives the derived palette. */
94
+ /**
95
+ * A seed color (CSS string or an OklchStop anchor) → drives the derived palette.
96
+ *
97
+ * A string is parsed by `cssToOklch`, which THROWS `GlassColorError` on a contextual
98
+ * value (`var(--x)`, `currentColor`) or a non-opaque one — it resolves nothing from
99
+ * the DOM and invents no stock palette. Resolve the token yourself and pass either
100
+ * the resolved string or the `OklchStop` form.
101
+ */
93
102
  seed?: string | OklchStop;
94
103
  /** The hue scheme across the derived ramp. Default `analogous` (when a seed is set). */
95
104
  harmony?: AuroraHarmony;
@@ -154,8 +163,9 @@ interface AuroraAtomsBase {
154
163
  motion?: AuroraMotionAtom;
155
164
  }
156
165
  /**
157
- * The medium-discriminated atoms surface. Smooth fields retain swirl/scroll/amplitude but
158
- * reject the directional `light` axis; textured media expose it explicitly.
166
+ * The medium-discriminated atoms surface. Every medium retains swirl/scroll/amplitude;
167
+ * the directional `light` axis is admitted only where the medium writes impasto for it
168
+ * to relight (oil, vangogh) and is `never` on every other arm.
159
169
  */
160
170
  export type AuroraAtoms = AuroraAtomsBase & ({
161
171
  medium?: {
@@ -164,7 +174,13 @@ export type AuroraAtoms = AuroraAtomsBase & ({
164
174
  interactivity?: AuroraSmoothInteractivityAtom;
165
175
  } | {
166
176
  medium: {
167
- kind: Exclude<AuroraMedium, "smooth">;
177
+ kind: Exclude<AuroraMedium, "smooth" | AuroraImpastoMedium>;
178
+ amount?: number;
179
+ };
180
+ interactivity?: AuroraSmoothInteractivityAtom;
181
+ } | {
182
+ medium: {
183
+ kind: AuroraImpastoMedium;
168
184
  amount?: number;
169
185
  };
170
186
  interactivity?: AuroraPainterlyInteractivityAtom;
@@ -146,16 +146,18 @@ export interface AuroraRuntime extends Omit<AuroraInstance, "pause" | "resume">
146
146
  readonly reducedMotion: boolean;
147
147
  }
148
148
  /**
149
- * One medium-aware predicate shared by pointer writes and uniform projection.
149
+ * One impasto-keyed predicate shared by pointer writes and uniform projection.
150
150
  *
151
151
  * `swirl` is the DEFAULT-ON axis: every aurora shapes under the pointer unless its
152
152
  * config says `swirl: false`. Suppression is not this predicate's job — the master
153
153
  * tempo scalar zeroes the field tick under reduced motion and under the background
154
154
  * pause, so a PRM reader never sees the cursor regardless of what this returns.
155
155
  *
156
- * `light` stays an explicit opt-in AND stays medium-aware: it steers the impasto light
157
- * direction, and the smooth body has no impasto, so `light` alone over `smooth` shapes
158
- * nothing and must not arm a pointer path.
156
+ * `light` stays an explicit opt-in AND is keyed on the impasto AMOUNT, not the medium
157
+ * name: it steers `uLightDir`, which only `relightImpasto` reads, and every term there is
158
+ * multiplied by `uImpasto`. `impasto` defaults to 0, so `light` alone paints nothing on
159
+ * crayon or pastel exactly as it paints nothing on smooth, and must not arm a pointer
160
+ * path that provably cannot change a pixel.
159
161
  */
160
162
  export declare function isAuroraPointerEnabled(config: AuroraConfig): boolean;
161
163
  /** One shader-time projection shared by the WebGPU and WebGL2 bridges. */
@@ -73,10 +73,18 @@ export type WarpMode = "fbm" | "cellular" | "hybrid" | "curl";
73
73
  * `swirl` is ON by default — a config opts OUT with `swirl: false`. Every aurora is
74
74
  * pointer-shapeable, and a capability parked behind an opt-in flag is a capability the
75
75
  * surface does not have. `light` and `scroll` remain explicit opt-ins: `light` is only
76
- * meaningful over a painterly body (smooth has no impasto to relight), and `scroll`
76
+ * meaningful where the config carries impasto to relight (see its own note), and `scroll`
77
77
  * re-times the shader clock against page position, which no surface should inherit.
78
78
  */
79
79
  export interface AuroraInteractivity {
80
+ /**
81
+ * Cursor-driven impasto relight. Steers `uLightDir`, which only `relightImpasto`
82
+ * consumes, and every term of that is multiplied by `uImpasto` — so `light` steers
83
+ * relighting ONLY where `impasto > 0`. The medium name is not the key: `impasto`
84
+ * defaults to 0 (`DEFAULT_AURORA_CONFIG`) and the atoms door raises it for `oil` and
85
+ * `vangogh` alone, so `light` over crayon, pastel, watercolor, oil-pastel, kuwahara
86
+ * or either metal shapes nothing unless the config sets `impasto` itself.
87
+ */
80
88
  light?: boolean;
81
89
  scroll?: boolean;
82
90
  /**
@@ -193,6 +201,16 @@ export interface AuroraConfig {
193
201
  breathPeriod: number;
194
202
  saturation: number;
195
203
  paperGrain: number;
204
+ /**
205
+ * Pigment alpha of the PAINTED image, 0..1. Live presentation applies it once as the
206
+ * canvas element's own opacity; capture keeps it in the transparent GPU buffer.
207
+ *
208
+ * It composites over the palette-derived GROUND placeholder, which is mounted
209
+ * unconditionally at full opacity and is alpha-blind — a raster of the same field —
210
+ * so `alpha` re-weights the ground→field dissolve, not the surface's delivered
211
+ * presence. The presence envelope is the `opacityCeiling` prop, applied once around
212
+ * placeholder + canvas together.
213
+ */
196
214
  alpha: number;
197
215
  /**
198
216
  * the §3 chroma FLOOR (the warm-field vividness contract).
@@ -62,14 +62,14 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {
62
62
  resume: () => void;
63
63
  settled: Readonly<import("vue").Ref<boolean, boolean>>;
64
64
  settledFrame: Readonly<import("vue").Ref<import(".").BlobSettledFrame | null, import(".").BlobSettledFrame | null>>;
65
- rendererStatus: Readonly<import("vue").Ref<import("../../composables/glass/webgpu/rendererStatus.js").RendererStatus, import("../../composables/glass/webgpu/rendererStatus.js").RendererStatus>>;
65
+ rendererStatus: Readonly<import("vue").Ref<import("../../index.js").RendererStatus, import("../../index.js").RendererStatus>>;
66
66
  }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
67
67
  click: () => any;
68
- rendererStatus: (status: import("../../composables/glass/webgpu/rendererStatus.js").RendererStatus) => any;
68
+ rendererStatus: (status: import("../../index.js").RendererStatus) => any;
69
69
  "update:paused": (value: boolean) => any;
70
70
  }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
71
71
  onClick?: (() => any) | undefined;
72
- onRendererStatus?: ((status: import("../../composables/glass/webgpu/rendererStatus.js").RendererStatus) => any) | undefined;
72
+ onRendererStatus?: ((status: import("../../index.js").RendererStatus) => any) | undefined;
73
73
  "onUpdate:paused"?: ((value: boolean) => any) | undefined;
74
74
  }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
75
75
  declare const _default: typeof __VLS_export;
@@ -1 +1 @@
1
- @layer components{.button{--button-size: var(--control-h-md);--button-tone: var(--foreground);--button-accent: var(--primary);--button-quiet-ink: var(--muted-foreground);--button-ink: var(--button-tone);--button-edge: transparent;display: inline-flex;min-inline-size: 0;max-inline-size: 100%;min-block-size: var(--button-size);align-items: center;justify-content: center;gap: var(--space-atom);padding-inline: var(--space-body);border: 1px solid var(--button-edge);border-radius: calc(var(--button-size) / 2);color: var(--button-ink);font: inherit;font-size: var(--control-text);font-weight: 500;line-height: 1.1;text-align: center;text-decoration: none;cursor: pointer;appearance: none;touch-action: manipulation;user-select: none;scale: 1;--scale-press: var(--scale-press-sm);transition: background-color var(--engage-control-engage-release) var(--ease-standard),border-color var(--engage-control-engage-release) var(--ease-standard),box-shadow var(--engage-control-engage-release) var(--ease-standard),color var(--engage-control-engage-release) var(--ease-standard),opacity var(--engage-control-engage-release) var(--ease-standard),scale var(--spring-press-duration) var(--transition-liquid-spatial);}.button > svg{flex: none;pointer-events: none;}.button > svg:not([class*="size-"]){inline-size: var(--ui-glyph);block-size: var(--ui-glyph);}.button > .button-mark{flex: none;inline-size: var(--ui-glyph);}.button[data-emphasis="primary"]{--glass-depth: var(--glass-depth-content);font-weight: 600;}.button[data-emphasis="secondary"]{--glass-veil-tier: var(--glass-veil-quiet);--glass-blur-floating: var(--glass-blur-quiet);}.button[data-tone="destructive"]{--button-tone: var(--destructive);--button-accent: var(--destructive);--button-quiet-ink: var(--destructive);--button-edge: color-mix( in oklab,var(--destructive) calc(var(--ink-perimeter) * 100%),transparent );--glass-capsule-fill: color-mix( in oklab,var(--glass-veil),var(--destructive) var(--feedback-tone-strength) );}.button[data-emphasis="quiet"],.button[data-emphasis="text"]{--button-edge: transparent;--button-ink: var(--button-quiet-ink);background: transparent;box-shadow: none;}.button[data-emphasis="text"]{--button-ink: var(--button-accent);padding-inline: var(--space-residue);text-underline-offset: 0.25em;}@media (hover: hover){.button[data-emphasis="quiet"]:hover:not(:disabled,[aria-disabled="true"]){--button-ink: var(--button-tone);background: color-mix( in oklab,var(--button-tone) calc(var(--fill-hover) * 100%),transparent );}.button[data-emphasis="text"]:hover:not(:disabled,[aria-disabled="true"]){text-decoration: underline;}}.button[data-emphasis="quiet"]:active:not(:disabled,[aria-disabled="true"]){background: color-mix( in oklab,var(--button-tone) calc(var(--fill-selected) * 100%),transparent );}.button[data-emphasis="text"]:active:not(:disabled,[aria-disabled="true"]){background: color-mix( in oklab,var(--button-accent) calc(var(--fill-hover) * 100%),transparent );}.button[data-size="xs"]{--button-size: var(--control-h-xs);gap: var(--space-residue);padding-inline: var(--space-atom);font-size: var(--control-text-sm);}.button[data-size="sm"]{--button-size: var(--control-h-sm);gap: var(--space-residue);padding-inline: var(--space-atom);font-size: var(--control-text-sm);}.button[data-size="lg"]{--button-size: var(--control-h-lg);font-size: var(--type-body);}.button[data-icon-only]{inline-size: var(--button-size);block-size: var(--button-size);min-block-size: var(--button-size);padding: 0;}.button:disabled,.button[aria-disabled="true"]{--button-ink: oklch(from var(--foreground) l 0 h / var(--opacity-disabled));cursor: not-allowed;}.button[data-loading]{cursor: progress;}.button.glass-specular-track:active::before{--specular-intensity: calc( var(--glass-specular-intensity-hover) + ( var(--glass-specular-intensity-active) - var(--glass-specular-intensity-hover) ) * var(--glass-btn-press-t) );}}
1
+ @layer components{.button{--button-size: var(--control-h-md);--button-tone: var(--foreground);--button-accent: var(--primary);--button-quiet-ink: var(--muted-foreground);--button-ink: var(--button-tone);--button-edge: transparent;display: inline-flex;min-inline-size: 0;max-inline-size: 100%;min-block-size: var(--button-size);align-items: center;justify-content: center;gap: var(--space-atom);padding-inline: calc(var(--button-size) / 2 - var(--space-residue));border: 1px solid var(--button-edge);border-radius: calc(var(--button-size) / 2);color: var(--button-ink);font: inherit;font-size: var(--control-text);font-weight: 500;line-height: 1.1;text-align: center;text-decoration: none;cursor: pointer;appearance: none;touch-action: manipulation;user-select: none;scale: 1;--scale-press: var(--scale-press-sm);transition: background-color var(--engage-control-engage-release) var(--ease-standard),border-color var(--engage-control-engage-release) var(--ease-standard),box-shadow var(--engage-control-engage-release) var(--ease-standard),color var(--engage-control-engage-release) var(--ease-standard),opacity var(--engage-control-engage-release) var(--ease-standard),scale var(--spring-press-duration) var(--transition-liquid-spatial);}.button > svg{flex: none;pointer-events: none;}.button > svg:not([class*="size-"]){inline-size: var(--ui-glyph);block-size: var(--ui-glyph);}.button > .button-mark{flex: none;inline-size: var(--ui-glyph);}.button[data-emphasis="primary"]{--glass-depth: var(--glass-depth-content);font-weight: 600;}.button[data-emphasis="secondary"]{--glass-veil-tier: var(--glass-veil-quiet);--glass-blur-floating: var(--glass-blur-quiet);}.button[data-tone="destructive"]{--button-tone: var(--destructive);--button-accent: var(--destructive);--button-quiet-ink: var(--destructive);--button-edge: color-mix( in oklab,var(--destructive) calc(var(--ink-perimeter) * 100%),transparent );--glass-capsule-fill: color-mix( in oklab,var(--glass-veil),var(--destructive) var(--feedback-tone-strength) );}.button[data-emphasis="quiet"],.button[data-emphasis="text"]{--button-edge: transparent;--button-ink: var(--button-quiet-ink);background: transparent;box-shadow: none;}.button[data-emphasis="text"]{--button-ink: var(--button-accent);padding-inline: var(--space-residue);text-underline-offset: 0.25em;}@media (hover: hover){.button[data-emphasis="quiet"]:hover:not(:disabled,[aria-disabled="true"]){--button-ink: var(--button-tone);background: color-mix( in oklab,var(--button-tone) calc(var(--fill-hover) * 100%),transparent );}.button[data-emphasis="text"]:hover:not(:disabled,[aria-disabled="true"]){text-decoration: underline;}}.button[data-emphasis="quiet"]:active:not(:disabled,[aria-disabled="true"]){background: color-mix( in oklab,var(--button-tone) calc(var(--fill-selected) * 100%),transparent );}.button[data-emphasis="text"]:active:not(:disabled,[aria-disabled="true"]){background: color-mix( in oklab,var(--button-accent) calc(var(--fill-hover) * 100%),transparent );}.button[data-size="xs"]{--button-size: var(--control-h-xs);gap: var(--space-residue);font-size: var(--control-text-sm);}.button[data-size="sm"]{--button-size: var(--control-h-sm);gap: var(--space-residue);font-size: var(--control-text-sm);}.button[data-size="lg"]{--button-size: var(--control-h-lg);font-size: var(--type-body);}.button[data-icon-only]{inline-size: var(--button-size);block-size: var(--button-size);min-block-size: var(--button-size);padding: 0;}.button:disabled,.button[aria-disabled="true"]{--button-ink: oklch(from var(--foreground) l 0 h / var(--opacity-disabled));cursor: not-allowed;}.button[data-loading]{cursor: progress;}.button.glass-specular-track:active::before{--specular-intensity: calc( var(--glass-specular-intensity-hover) + ( var(--glass-specular-intensity-active) - var(--glass-specular-intensity-hover) ) * var(--glass-btn-press-t) );}}
@@ -9,8 +9,14 @@ export type CardSize = "sm" | "md";
9
9
  * and no capacity. `shadow` is CARD's own — Surface went three-prop and the
10
10
  * card is the one component with a real elevation grammar, so it stamps its own
11
11
  * `data-shadow` for the edge keying instead of routing the flag through a
12
- * primitive that no longer reads it. `grain` and `specular` are gone from the
13
- * whole library. `cartoon` / `grid` / `metal` / `variant` / `dataHue` /
12
+ * primitive that no longer reads it. `grain` and `specular` are gone as PROPS,
13
+ * not as capacities: `v-specular` ships with `createSpecularWriter` and
14
+ * `useSpecularTracking` (`src/index.ts:475-479`) over the
15
+ * `.glass-specular-track` opt-in (`styles/index.css:205`), and grain lives on
16
+ * as `--glass-grain-opacity` (`styles/tokens/glass-fx.css:10`) and
17
+ * `@utility paper-grain-overlay` (`styles/paper.css:125`). A card that wants
18
+ * either arms it on the element.
19
+ * `cartoon` / `grid` / `metal` / `variant` / `dataHue` /
14
20
  * `dataHueStrength` are struck: three of them wrote a class a consumer can write
15
21
  * (`cartoon-surface`, `paper-grid`), and `variant`+`dataHue`+`selected` were one
16
22
  * state wearing three props. A per-instance rim hue is `--glass-accent`, written
@@ -8,13 +8,7 @@ type __VLS_Slots = {} & {
8
8
  } & {
9
9
  default?: (props: typeof __VLS_16) => any;
10
10
  };
11
- declare const __VLS_base: import("vue").DefineComponent<import("./types.js").StaticChipProps | import("./types.js").SelectableChipProps | import("./types.js").ActionChipProps | import("./types.js").RemovableChipProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
12
- "update:modelValue": (value: boolean) => any;
13
- remove: (event: MouseEvent) => any;
14
- }, string, import("vue").PublicProps, Readonly<import("./types.js").StaticChipProps | import("./types.js").SelectableChipProps | import("./types.js").ActionChipProps | import("./types.js").RemovableChipProps> & Readonly<{
15
- "onUpdate:modelValue"?: ((value: boolean) => any) | undefined;
16
- onRemove?: ((event: MouseEvent) => any) | undefined;
17
- }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
11
+ declare const __VLS_base: import("vue").DefineSetupFnComponent<Record<string, any>, {}, {}, Record<string, any> & {}, import("vue").PublicProps>;
18
12
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
19
13
  declare const _default: typeof __VLS_export;
20
14
  export default _default;
@@ -1,5 +1,6 @@
1
1
  import { type ClassValue } from "../_shared/class-names.js";
2
2
  declare const SIZE: {
3
+ readonly xs: "gap-0.5 px-1 py-0.5 text-micro";
3
4
  readonly sm: "gap-1 px-2.5 py-1 text-caption";
4
5
  readonly md: "gap-1.5 px-3.5 py-1.5 text-small";
5
6
  readonly lg: "gap-2 px-5 py-2 text-base";
@@ -21,6 +21,7 @@ declare const __VLS_base: import("vue").DefineComponent<CollapsibleProps, {}, {}
21
21
  "onUpdate:open"?: ((value: boolean) => any) | undefined;
22
22
  }>, {
23
23
  disabled: boolean;
24
+ open: boolean;
24
25
  defaultOpen: boolean;
25
26
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
26
27
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
@@ -10,11 +10,11 @@ declare const __VLS_base: import("vue").DefineComponent<CommandDialogProps, {},
10
10
  "onUpdate:modelValue"?: ((value: import("./index.js").ComboboxValue) => any) | undefined;
11
11
  "onUpdate:open"?: ((value: boolean) => any) | undefined;
12
12
  }>, {
13
+ modal: boolean;
13
14
  unmountOnHide: boolean;
14
15
  open: boolean;
15
16
  defaultOpen: boolean;
16
17
  surface: import("../_shared/axes.js").Surface;
17
- modal: boolean;
18
18
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
19
19
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
20
20
  declare const _default: typeof __VLS_export;
@@ -1 +1 @@
1
- :root{--configurator-pad-inline: 1.25rem;}.configurator-shell{-webkit-backdrop-filter: none;backdrop-filter: none;container-type: inline-size;display: grid;grid-template-rows: minmax(0,1fr);min-block-size: 0;min-inline-size: min(20rem,100%);}.configurator > .configurator-presets,.configurator > .configurator-aside{-webkit-backdrop-filter: var(--glass-blur-floating);backdrop-filter: var(--glass-blur-floating);}.configurator-section-label{font-family: var(--font-text);font-size: var(--configurator-section-size);line-height: var(--type-leading-body);font-weight: var(--configurator-section-weight);letter-spacing: var(--type-tracking-tight);color: var(--foreground);}.configurator-presets{padding-block: var(--configurator-preset-row-weight);}.configurator-presets .configurator-gallery-track,.configurator-presets [role="group"]{gap: var(--configurator-preset-row-gap);}.configurator-layer{border-color: var(--configurator-divider-section);background-color: var(--configurator-section-tint);border-radius: max( var(--radius-floor),calc(var(--radius-ctx) - var(--radius-inset)) );}.configurator-layer:has(+ .configurator-layer){border-end-start-radius: 0;border-end-end-radius: 0;border-bottom-width: 0;}.configurator-layer + .configurator-layer{margin-block-start: 0;border-start-start-radius: 0;border-start-end-radius: 0;}.configurator-layer-trigger{padding-inline: var(--configurator-pad-inline);}.configurator-layer-body{padding-inline: var(--configurator-pad-inline);}.configurator-layer-body[data-dividers] > * + *{border-color: var(--configurator-divider);}.configurator-aside,.configurator-presets,.configurator-footer{border-color: var(--configurator-divider);}[data-slot="configurator"] > [data-gallery-dock]{grid-row: 1;grid-column: 1;}[data-slot="configurator"] > .configurator-stage{grid-row: 2;grid-column: 1;}[data-slot="configurator"] > .configurator-aside{grid-row: 3;grid-column: 1;}@container (inline-size >= 64rem){[data-slot="configurator"]{grid-template-columns: minmax(0,1fr) minmax( var(--configurator-aside-min,300px),var(--configurator-aside-max,400px) );grid-template-rows: auto minmax(0,1fr);}[data-slot="configurator"][data-gallery="aside"] > [data-gallery-dock]{grid-row: 1;grid-column: 2;}[data-slot="configurator"][data-gallery="aside"] > .configurator-stage{grid-row: 1 / span 2;grid-column: 1;}[data-slot="configurator"][data-gallery="aside"] > .configurator-aside{grid-row: 2;grid-column: 2;}[data-slot="configurator"][data-gallery="top"] > [data-gallery-dock]{grid-row: 1;grid-column: 1 / span 2;}[data-slot="configurator"][data-gallery="top"] > .configurator-stage{grid-row: 2;grid-column: 1;}[data-slot="configurator"][data-gallery="top"] > .configurator-aside{grid-row: 2;grid-column: 2;}[data-slot="configurator"] > .configurator-aside{border-block-start-width: 0;border-inline-start-width: 1px;}[data-slot="configurator"][data-aside-side="left"] > .configurator-aside{border-inline-start-width: 0;border-inline-end-width: 1px;}}[data-slot="configurator"] > [data-gallery-dock]{border-color: var(--configurator-divider);}[data-slot="configurator"][data-gallery="aside"] > [data-gallery-dock]{border-bottom-width: 1px;}@container (inline-size >= 64rem){[data-slot="configurator"][data-gallery="top"] > [data-gallery-dock]{border-bottom-width: 1px;}}.configurator-preset-tile{inline-size: clamp(160px,22cqi,232px);border-radius: var(--radius-card);}[data-slot="configurator"][data-gallery="top"] .configurator-preset-tile{inline-size: clamp(200px,20cqi,288px);}.configurator-preset-well{background-size: cover;background-position: center;image-rendering: auto;}.configurator-preset-well.is-loading{background-image: linear-gradient( 100deg,color-mix(in oklab,var(--card) 84%,transparent) 30%,color-mix(in oklab,var(--foreground) 8%,var(--card)) 50%,color-mix(in oklab,var(--card) 84%,transparent) 70% );background-size: 200% 100%;animation: configurator-preset-shimmer 1.2s ease-in-out infinite;}@media (prefers-reduced-motion: reduce){.configurator-preset-well.is-loading{animation: none;}}@keyframes configurator-preset-shimmer{from{background-position: 200% 0;}to{background-position: -200% 0;}}.configurator-preset-tile.is-active{box-shadow: inset 0 0 0 2px var(--focus-ring-color),var(--shadow-cartoon-lg);}.configurator-preset-chip{border-radius: var(--radius-pill);}.configurator-preset-chip.is-active{--glass-capsule-fill: var(--glass-plate-quiet);}@container (inline-size >= 64rem){[data-slot="configurator"][data-aside-side="left"] > .configurator-stage{grid-column: 2;}[data-slot="configurator"][data-aside-side="left"] > .configurator-aside{grid-column: 1;}[data-slot="configurator"][data-aside-side="left"][data-gallery="aside"] > [data-gallery-dock]{grid-column: 1;}}.configurator-expand-host[data-state="expanded"] > [data-part="panel"]{padding: var(--space-section);}.configurator-expand-host[data-state="expanded"] .configurator-shell{block-size: 100%;}
1
+ :root{--configurator-pad-inline: 1.25rem;}@layer components{.configurator-shell{-webkit-backdrop-filter: none;backdrop-filter: none;container-type: inline-size;display: grid;grid-template-rows: minmax(0,1fr);min-block-size: 0;min-inline-size: min(20rem,100%);}.configurator > .configurator-presets,.configurator > .configurator-aside{-webkit-backdrop-filter: var(--glass-blur-floating);backdrop-filter: var(--glass-blur-floating);}.configurator-section-label{font-family: var(--font-text);font-size: var(--configurator-section-size);line-height: var(--type-leading-body);font-weight: var(--configurator-section-weight);letter-spacing: var(--type-tracking-tight);color: var(--foreground);}.configurator-presets{padding-block: var(--configurator-preset-row-weight);}.configurator-presets .configurator-gallery-track,.configurator-presets [role="group"]{gap: var(--configurator-preset-row-gap);}.configurator-layer{border-width: 1px;border-color: var(--configurator-divider-section);background-color: var(--configurator-section-tint);border-radius: max( var(--radius-floor),calc(var(--radius-ctx) - var(--radius-inset)) );}.configurator-layer:has(+ .configurator-layer){border-end-start-radius: 0;border-end-end-radius: 0;border-bottom-width: 0;}.configurator-layer + .configurator-layer{margin-block-start: 0;border-start-start-radius: 0;border-start-end-radius: 0;}.configurator-layer-trigger{padding-inline: var(--configurator-pad-inline);}.configurator-layer-body{padding-inline: var(--configurator-pad-inline);}@media (hover: hover){[data-slot="configurator-reset"]:hover{background: color-mix( in oklab,var(--foreground) calc(var(--fill-hover) * 100%),transparent );color: var(--foreground);}.configurator-layer-trigger:hover{background: color-mix( in oklab,var(--foreground) calc(var(--fill-hover) * 100%),transparent );}}.configurator-layer-body[data-dividers] > * + *{border-color: var(--configurator-divider);}.configurator-aside,.configurator-presets,.configurator-footer{border-color: var(--configurator-divider);}.configurator-aside{border-block-start-width: 1px;}[data-slot="configurator"]{grid-template-columns: minmax(0,1fr);grid-template-rows: auto minmax(var(--configurator-stage-min,18rem),auto) minmax(0,1fr);}[data-slot="configurator"] > [data-gallery-dock]{grid-row: 1;grid-column: 1;}[data-slot="configurator"] > .configurator-stage{grid-row: 2;grid-column: 1;}[data-slot="configurator"] > .configurator-aside{grid-row: 3;grid-column: 1;}@container (inline-size >= 64rem){[data-slot="configurator"]{grid-template-columns: minmax(0,1fr) minmax( var(--configurator-aside-min,300px),var(--configurator-aside-max,400px) );grid-template-rows: auto minmax(0,1fr);}[data-slot="configurator"][data-gallery="aside"] > [data-gallery-dock]{grid-row: 1;grid-column: 2;}[data-slot="configurator"][data-gallery="aside"] > .configurator-stage{grid-row: 1 / span 2;grid-column: 1;}[data-slot="configurator"][data-gallery="aside"] > .configurator-aside{grid-row: 2;grid-column: 2;}[data-slot="configurator"][data-gallery="top"] > [data-gallery-dock]{grid-row: 1;grid-column: 1 / span 2;}[data-slot="configurator"][data-gallery="top"] > .configurator-stage{grid-row: 2;grid-column: 1;}[data-slot="configurator"][data-gallery="top"] > .configurator-aside{grid-row: 2;grid-column: 2;}[data-slot="configurator"] > .configurator-aside{border-block-start-width: 0;border-inline-start-width: 1px;}[data-slot="configurator"][data-aside-side="left"] > .configurator-aside{border-inline-start-width: 0;border-inline-end-width: 1px;}}[data-slot="configurator"] > [data-gallery-dock]{border-color: var(--configurator-divider);}[data-slot="configurator"][data-gallery="aside"] > [data-gallery-dock]{border-bottom-width: 1px;}@container (inline-size >= 64rem){[data-slot="configurator"][data-gallery="top"] > [data-gallery-dock]{border-bottom-width: 1px;}}.configurator-preset-tile{inline-size: clamp(160px,22cqi,232px);border-radius: var(--radius-card);}[data-slot="configurator"][data-gallery="top"] .configurator-preset-tile{inline-size: clamp(200px,20cqi,288px);}.configurator-preset-well{background-size: cover;background-position: center;image-rendering: auto;}.configurator-preset-well.is-loading{background-image: linear-gradient( 100deg,color-mix(in oklab,var(--card) 84%,transparent) 30%,color-mix(in oklab,var(--foreground) 8%,var(--card)) 50%,color-mix(in oklab,var(--card) 84%,transparent) 70% );background-size: 200% 100%;animation: configurator-preset-shimmer 1.2s ease-in-out infinite;}@media (prefers-reduced-motion: reduce){.configurator-preset-well.is-loading{animation: none;}}}@keyframes configurator-preset-shimmer{from{background-position: 200% 0;}to{background-position: -200% 0;}}@layer components{.configurator-preset-tile.is-active{box-shadow: inset 0 0 0 2px var(--focus-ring-color),var(--shadow-cartoon-lg);}.configurator-preset-chip{border-radius: var(--radius-pill);}.configurator-preset-chip.is-active{--glass-capsule-fill: var(--glass-plate-quiet);}@container (inline-size >= 64rem){[data-slot="configurator"][data-aside-side="left"] > .configurator-stage{grid-column: 2;}[data-slot="configurator"][data-aside-side="left"] > .configurator-aside{grid-column: 1;}[data-slot="configurator"][data-aside-side="left"][data-gallery="aside"] > [data-gallery-dock]{grid-column: 1;}}.configurator-expand-host[data-state="expanded"] > [data-part="panel"]{padding: var(--space-section);}.configurator-expand-host[data-state="expanded"] .configurator-shell{block-size: 100%;}}
@@ -1 +1 @@
1
- @layer components{.dark-mode-toggle-button{--dark-mode-toggle-size: 2.25rem;--dark-mode-toggle-padding: 0.375rem;appearance: none;display: inline-grid;place-items: center;flex: none;width: var(--dark-mode-toggle-size);height: var(--dark-mode-toggle-size);padding: var(--dark-mode-toggle-padding);border: 0;border-radius: var(--radius-pill);color: var(--foreground);background: transparent;opacity: 0.8;cursor: pointer;transition: opacity var(--duration-fast) var(--ease-standard),background-color var(--duration-fast) var(--ease-standard),box-shadow var(--duration-fast) var(--ease-standard);}.dark-mode-toggle-button:hover{background: var(--surface-tint-10);opacity: 1;}.dark-mode-toggle-button:focus-visible{outline: none;box-shadow: var(--focus-ring-shadow,var(--dock-ring));opacity: 1;}.dark-mode-toggle-button > svg{display: block;width: 100%;height: 100%;fill: currentColor;}.dark-mode-toggle-button[data-size="sm"]{--dark-mode-toggle-size: 1.75rem;--dark-mode-toggle-padding: 0.25rem;}.dark-mode-toggle-button[data-size="lg"]{--dark-mode-toggle-size: 2.75rem;--dark-mode-toggle-padding: 0.5rem;}.dark-mode-toggle-button[data-size="control"]{--dark-mode-toggle-size: var(--control-size,2.25rem);--dark-mode-toggle-padding: var(--control-icon-padding,0.375rem);}.dark-mode-toggle-button[data-size="dock"],.glass-dock .dark-mode-toggle-button:not([data-size="sm"]):not([data-size="lg"]):not( [data-size="control"] ){--dark-mode-toggle-size: var(--dock-control-size,var(--size-icon-btn));--dark-mode-toggle-padding: calc( ( var(--dock-control-size,var(--size-icon-btn)) - var(--dock-control-glyph-size,var(--dock-icon-glyph,1.25rem)) ) / 2 );}.toggle-sun,.toggle-circle{transform-origin: center;transition-property: transform;transition-duration: var(--spring-dock-duration);transition-timing-function: var(--spring-dock);}:where(.dark) .dark-mode-toggle-button .toggle-sun{transform: rotate(0.5turn);}:where(.dark) .dark-mode-toggle-button .toggle-circle{transform: translateX(-15%);}}@media (prefers-reduced-motion: reduce){.dark-mode-toggle-button,.dark-mode-toggle-button .toggle-sun,.dark-mode-toggle-button .toggle-circle{transition: none;}}
1
+ @layer components{.dark-mode-toggle-button{--dark-mode-toggle-size: 2.25rem;--dark-mode-toggle-padding: 0.375rem;appearance: none;display: inline-grid;place-items: center;flex: none;width: var(--dark-mode-toggle-size);height: var(--dark-mode-toggle-size);padding: var(--dark-mode-toggle-padding);border: 0;border-radius: var(--radius-pill);color: var(--foreground);background: transparent;opacity: 0.8;cursor: pointer;transition: opacity var(--duration-fast) var(--ease-standard),background-color var(--duration-fast) var(--ease-standard),box-shadow var(--duration-fast) var(--ease-standard);}.dark-mode-toggle-button:hover{background: var(--surface-tint-10);opacity: 1;}.dark-mode-toggle-button:focus-visible{outline: none;box-shadow: var(--focus-ring-shadow,var(--dock-ring));opacity: 1;}.dark-mode-toggle-button > svg{display: block;width: 100%;height: 100%;fill: currentColor;}.dark-mode-toggle-button[data-size="sm"]{--dark-mode-toggle-size: 1.75rem;--dark-mode-toggle-padding: 0.25rem;}.dark-mode-toggle-button[data-size="lg"]{--dark-mode-toggle-size: 2.75rem;--dark-mode-toggle-padding: 0.5rem;}.dark-mode-toggle-button[data-size="control"]{--dark-mode-toggle-size: var(--control-size,2.25rem);--dark-mode-toggle-padding: var(--control-icon-padding,0.375rem);}.dark-mode-toggle-button[data-size="dock"],.glass-dock .dark-mode-toggle-button:not([data-size="sm"]):not([data-size="lg"]):not( [data-size="control"] ){--dark-mode-toggle-size: var(--dock-control-size,var(--size-icon-btn));--dark-mode-toggle-padding: calc( ( var(--dock-control-size,var(--size-icon-btn)) - var(--dock-control-glyph-size,var(--dock-icon-glyph,1.25rem)) ) / 2 );}.toggle-sun,.toggle-circle{transform-origin: center;transition-property: transform;transition-duration: var(--spring-dock-duration);transition-timing-function: var(--spring-dock);}:where(.dark) .dark-mode-toggle-button .toggle-sun{transform: rotate(0.5turn);}:where(.dark) .dark-mode-toggle-button .toggle-circle{transform: translateX(-15%);}}@layer components{@media (prefers-reduced-motion: reduce){.dark-mode-toggle-button,.dark-mode-toggle-button .toggle-sun,.dark-mode-toggle-button .toggle-circle{transition: none;}}}
@@ -1 +1 @@
1
- @layer components{[data-deck-capture="export"] .deck-stage{--deck-export-inline: 1280px;--deck-export-block: 720px;position: relative;inset: auto;margin: 0;aspect-ratio: auto;inline-size: var(--deck-export-inline);block-size: var(--deck-export-block);max-inline-size: none;max-block-size: none;border-radius: 0;}[data-deck-capture="export"] .deck-slide{border-radius: 0;box-shadow: none;}[data-deck-capture="export"] .deck-ground,[data-deck-capture="freeze"] .deck-ground,[data-deck-capture="export"] .deck-slide,[data-deck-capture="freeze"] .deck-slide{transition: none !important;animation: none !important;}[data-deck-capture="export"] .deck-slide[data-state="active"],[data-deck-capture="freeze"] .deck-slide[data-state="active"]{--turn-x: 0px !important;--turn-s: 1 !important;--turn-r: 0deg !important;}[data-deck-capture="export"] .deck-slide::before,[data-deck-capture="export"] .deck-slide::after,[data-deck-capture="freeze"] .deck-slide::before,[data-deck-capture="freeze"] .deck-slide::after{opacity: 0 !important;animation: none !important;}[data-deck-capture="export"] [data-reveal],[data-deck-capture="freeze"] [data-reveal],[data-deck-capture="print"] [data-reveal]{opacity: 1 !important;animation: none !important;}[data-deck-capture="print"] .deck-stage{position: static;display: block;aspect-ratio: auto;inline-size: auto;block-size: auto;overflow: visible;}[data-deck-capture="print"] .deck-strip{display: block;overflow: visible;perspective: none;}[data-deck-capture="print"] .deck-ground{display: none;}[data-deck-capture="print"] .deck-slide{position: relative;opacity: 1 !important;visibility: visible !important;transform: none !important;pointer-events: auto;margin-block: var(--space-family);background: var(--background);}[data-deck-capture="print"] .deck-slide::before,[data-deck-capture="print"] .deck-slide::after{opacity: 0 !important;}}@media print{@page{size: 1280px 720px;margin: 0;}html,body{overflow: visible !important;margin: 0 !important;padding: 0 !important;print-color-adjust: exact;-webkit-print-color-adjust: exact;}html,body,#app{block-size: auto !important;min-block-size: 0 !important;}.deck-stage{position: static !important;display: block !important;aspect-ratio: auto !important;inline-size: auto !important;block-size: auto !important;overflow: visible !important;}.deck-strip{display: block !important;overflow: visible !important;perspective: none !important;}.deck-ground{display: none !important;}.deck-slide{position: relative !important;opacity: 1 !important;visibility: visible !important;transform: none !important;box-shadow: none !important;border-radius: 0 !important;margin: 0 !important;block-size: 719px !important;overflow: hidden !important;background: var(--background) !important;}.deck-slide::before,.deck-slide::after{opacity: 0 !important;}.deck-slide:not(:last-child){break-after: page;}.deck-stage .sr-only{display: none !important;}}
1
+ @layer components{[data-deck-capture="export"] .deck-stage{--deck-export-inline: 1280px;--deck-export-block: 720px;position: relative;inset: auto;margin: 0;aspect-ratio: auto;inline-size: var(--deck-export-inline);block-size: var(--deck-export-block);max-inline-size: none;max-block-size: none;border-radius: 0;}[data-deck-capture="export"] .deck-slide{border-radius: 0;box-shadow: none;}[data-deck-capture="export"] .deck-ground,[data-deck-capture="freeze"] .deck-ground,[data-deck-capture="export"] .deck-slide,[data-deck-capture="freeze"] .deck-slide{transition: none !important;animation: none !important;}[data-deck-capture="export"] .deck-slide[data-state="active"],[data-deck-capture="freeze"] .deck-slide[data-state="active"]{--turn-x: 0px !important;--turn-s: 1 !important;--turn-r: 0deg !important;}[data-deck-capture="export"] .deck-slide::before,[data-deck-capture="export"] .deck-slide::after,[data-deck-capture="freeze"] .deck-slide::before,[data-deck-capture="freeze"] .deck-slide::after{opacity: 0 !important;animation: none !important;}[data-deck-capture="export"] [data-reveal],[data-deck-capture="freeze"] [data-reveal],[data-deck-capture="print"] [data-reveal]{opacity: 1 !important;animation: none !important;}[data-deck-capture="print"] .deck-stage{position: static;display: block;aspect-ratio: auto;inline-size: auto;block-size: auto;overflow: visible;}[data-deck-capture="print"] .deck-strip{display: block;overflow: visible;perspective: none;}[data-deck-capture="print"] .deck-ground{display: none;}[data-deck-capture="print"] .deck-slide{position: relative;opacity: 1 !important;visibility: visible !important;transform: none !important;pointer-events: auto;margin-block: var(--space-family);background: var(--background);}[data-deck-capture="print"] .deck-slide::before,[data-deck-capture="print"] .deck-slide::after{opacity: 0 !important;}}@layer components{@media print{@page{size: 1280px 720px;margin: 0;}html,body{overflow: visible !important;margin: 0 !important;padding: 0 !important;print-color-adjust: exact;-webkit-print-color-adjust: exact;}html,body,#app{block-size: auto !important;min-block-size: 0 !important;}.deck-stage{position: static !important;display: block !important;aspect-ratio: auto !important;inline-size: auto !important;block-size: auto !important;overflow: visible !important;}.deck-strip{display: block !important;overflow: visible !important;perspective: none !important;}.deck-ground{display: none !important;}.deck-slide{position: relative !important;opacity: 1 !important;visibility: visible !important;transform: none !important;box-shadow: none !important;border-radius: 0 !important;margin: 0 !important;block-size: 719px !important;overflow: hidden !important;background: var(--background) !important;}.deck-slide::before,.deck-slide::after{opacity: 0 !important;}.deck-slide:not(:last-child){break-after: page;}.deck-stage .sr-only{display: none !important;}}}
@@ -1 +1 @@
1
- :where([data-slot="dialog-content"]){border-radius: var(--radius-3xl);display: grid;gap: var(--space-body);inline-size: min(100% - 2 * var(--space-section),32rem);padding-inline: var(--space-family);padding-block: var(--space-family);translate: -50% -50%;}:where([data-slot="dialog-header"]){display: flex;flex-direction: column;gap: var(--space-atom);text-align: start;}:where([data-slot="dialog-content"]:has([data-slot="dialog-close"])) :where([data-slot="dialog-header"]){padding-inline-end: calc(var(--touch-target) + var(--space-atom));}:where([data-slot="dialog-title"]){font-size: calc(var(--type-body) * 1.272);line-height: var(--type-leading-body);letter-spacing: var(--type-tracking-tight);}:where([data-slot="dialog-description"]){font-size: var(--type-body);line-height: var(--type-leading-body);color: var(--foreground);}:where([data-slot="dialog-footer"]){display: flex;flex-direction: row;justify-content: flex-end;gap: var(--space-body);}:where([data-slot="dialog-close"]){position: absolute;inset-block-start: var(--space-family);inset-inline-end: var(--space-family);display: inline-flex;align-items: center;justify-content: center;inline-size: var(--touch-target);block-size: var(--touch-target);border-radius: var(--radius-pill);color: var(--foreground);cursor: pointer;isolation: isolate;}:where([data-slot="dialog-close"])::before{content: "";position: absolute;inset: 0;z-index: -1;border-radius: inherit;background: transparent;transition: background-color var(--spring-press-duration) var(--spring-press),scale var(--spring-press-duration) var(--spring-press);}@media (hover: hover){:where([data-slot="dialog-close"]):hover::before{background: color-mix(in oklab,var(--foreground) 5%,transparent);scale: var(--scale-hover);}}:where([data-slot="dialog-close"]):active::before{background: color-mix(in oklab,var(--foreground) 12%,transparent);scale: var(--scale-press);}:where([data-slot="dialog-close"]):focus-visible{outline: 2px solid color-mix(in oklab,var(--foreground) 48%,transparent);outline-offset: 2px;}@property --rebuff-x{syntax: "<length>";inherits: false;initial-value: 0px;}@keyframes glass-dialog-rebuff-a{0%{--rebuff-x: 0px;}22%{--rebuff-x: -4px;}48%{--rebuff-x: 3px;}72%{--rebuff-x: -1.6px;}88%{--rebuff-x: 0.6px;}100%{--rebuff-x: 0px;}}@keyframes glass-dialog-rebuff-b{0%{--rebuff-x: 0px;}22%{--rebuff-x: -4px;}48%{--rebuff-x: 3px;}72%{--rebuff-x: -1.6px;}88%{--rebuff-x: 0.6px;}100%{--rebuff-x: 0px;}}:where([data-slot="dialog-content"][data-rebuff]){translate: calc(-50% + var(--rebuff-x)) -50%;}:where([data-slot="dialog-content"][data-rebuff="a"]){animation: glass-dialog-rebuff-a var(--spring-press-duration) var(--spring-press);}:where([data-slot="dialog-content"][data-rebuff="b"]){animation: glass-dialog-rebuff-b var(--spring-press-duration) var(--spring-press);}@keyframes glass-dialog-rebuff-flash{0%,100%{outline-color: transparent;}50%{outline-color: color-mix(in oklab,var(--foreground) 48%,transparent);}}@media (prefers-reduced-motion: reduce){:where([data-slot="dialog-content"][data-rebuff]){outline: 2px solid transparent;outline-offset: 0;animation: glass-dialog-rebuff-flash var(--spring-press-duration) linear;}}
1
+ @layer components{:where([data-slot="dialog-content"]){border-radius: var(--radius-3xl);display: grid;gap: var(--space-body);inline-size: min(100% - 2 * var(--space-section),32rem);padding-inline: var(--space-family);padding-block: var(--space-family);translate: -50% -50%;}:where([data-slot="dialog-header"]){display: flex;flex-direction: column;gap: var(--space-atom);text-align: start;}:where([data-slot="dialog-content"]:has([data-slot="dialog-close"])) :where([data-slot="dialog-header"]){padding-inline-end: calc(var(--touch-target) + var(--space-atom));}:where([data-slot="dialog-title"]){font-size: calc(var(--type-body) * 1.272);line-height: var(--type-leading-body);letter-spacing: var(--type-tracking-tight);}:where([data-slot="dialog-description"]){font-size: var(--type-body);line-height: var(--type-leading-body);color: var(--foreground);}:where([data-slot="dialog-footer"]){display: flex;flex-direction: row;justify-content: flex-end;gap: var(--space-body);}:where([data-slot="dialog-close"]){position: absolute;inset-block-start: var(--space-family);inset-inline-end: var(--space-family);display: inline-flex;align-items: center;justify-content: center;inline-size: var(--touch-target);block-size: var(--touch-target);border-radius: var(--radius-pill);color: var(--foreground);cursor: pointer;isolation: isolate;}:where([data-slot="dialog-close"])::before{content: "";position: absolute;inset: 0;z-index: -1;border-radius: inherit;background: transparent;transition: background-color var(--spring-press-duration) var(--spring-press),scale var(--spring-press-duration) var(--spring-press);}@media (hover: hover){:where([data-slot="dialog-close"]):hover::before{background: color-mix(in oklab,var(--foreground) 5%,transparent);scale: var(--scale-hover);}}:where([data-slot="dialog-close"]):active::before{background: color-mix(in oklab,var(--foreground) 12%,transparent);scale: var(--scale-press);}:where([data-slot="dialog-close"]):focus-visible{outline: 2px solid color-mix(in oklab,var(--foreground) 48%,transparent);outline-offset: 2px;}}@property --rebuff-x{syntax: "<length>";inherits: false;initial-value: 0px;}@keyframes glass-dialog-rebuff-a{0%{--rebuff-x: 0px;}22%{--rebuff-x: -4px;}48%{--rebuff-x: 3px;}72%{--rebuff-x: -1.6px;}88%{--rebuff-x: 0.6px;}100%{--rebuff-x: 0px;}}@keyframes glass-dialog-rebuff-b{0%{--rebuff-x: 0px;}22%{--rebuff-x: -4px;}48%{--rebuff-x: 3px;}72%{--rebuff-x: -1.6px;}88%{--rebuff-x: 0.6px;}100%{--rebuff-x: 0px;}}@layer components{:where([data-slot="dialog-content"][data-rebuff]){translate: calc(-50% + var(--rebuff-x)) -50%;}:where([data-slot="dialog-content"][data-rebuff="a"]){animation: glass-dialog-rebuff-a var(--spring-press-duration) var(--spring-press);}:where([data-slot="dialog-content"][data-rebuff="b"]){animation: glass-dialog-rebuff-b var(--spring-press-duration) var(--spring-press);}}@keyframes glass-dialog-rebuff-flash{0%,100%{outline-color: transparent;}50%{outline-color: color-mix(in oklab,var(--foreground) 48%,transparent);}}@layer components{@media (prefers-reduced-motion: reduce){:where([data-slot="dialog-content"][data-rebuff]){outline: 2px solid transparent;outline-offset: 0;animation: glass-dialog-rebuff-flash var(--spring-press-duration) linear;}}}
@@ -52,5 +52,3 @@ export declare const DOCK_CROSSFADE_KEY: import("vue").InjectionKey<DockCrossfad
52
52
  export declare function provideDockCrossfadeContext(context: DockCrossfadeContext): void;
53
53
  /** Strict — throws when used outside `<DockCrossfade>`. */
54
54
  export declare const useDockCrossfadeContext: () => DockCrossfadeContext;
55
- /** Befitting silent default; reserved for future consumers. */
56
- export declare const useOptionalDockCrossfadeContext: () => DockCrossfadeContext | null;
@@ -6,5 +6,5 @@ export { useDockHold } from "./useDockHold.js";
6
6
  export type { UseDockHoldOptions, UseDockHoldReturn } from "./useDockHold.js";
7
7
  export { isTeleportedTarget } from "../../_shared/overlay/isTeleportedTarget.js";
8
8
  export { provideDockContext, useDockContext, useOptionalDockContext, DOCK_CONTEXT_KEY, type DockContext, type DockOrientation, } from "./dockContext.js";
9
- export { provideDockCrossfadeContext, useDockCrossfadeContext, useOptionalDockCrossfadeContext, DOCK_CROSSFADE_KEY, type DockFaceDescriptor, type DockFaceRegistration, type DockCrossfadeContext, } from "./dockCrossfadeContext.js";
9
+ export { provideDockCrossfadeContext, useDockCrossfadeContext, DOCK_CROSSFADE_KEY, type DockFaceDescriptor, type DockFaceRegistration, type DockCrossfadeContext, } from "./dockCrossfadeContext.js";
10
10
  export { useDockMorphOrchestrator, type UseDockMorphOrchestratorOptions, type UseDockMorphOrchestratorReturn, } from "./useDockMorph.js";
@@ -16,18 +16,22 @@ import type { Ref } from "vue";
16
16
  * STANDALONE control engages on its own drag and a control inside a dock does NOT
17
17
  * co-engage off a sibling's hold.
18
18
  *
19
- * Why NATIVE host listeners (not a Vue `@pointerdown` template binding):
20
- * reka-ui's `<SliderRoot>` is a FORWARDING component — it renders through a
21
- * `CollectionSlot` + `resolveDynamicComponent` (SliderHorizontal/Vertical) +
22
- * `forwardRef` chain and binds its OWN cached `onPointerdown`
23
- * (`SliderRoot.js → SliderImpl.js`, which calls `setPointerCapture`). A consumer
24
- * `@pointerdown` arrives as `$attrs.onPointerdown` and is DROPPED across that
25
- * Slot/forwardRef boundary — vue-tsc + units pass, only a real drag catches it
26
- * (the canonical binding-verification class, `feedback_glass_ui_binding_*`). A
27
- * native `addEventListener` on the RESOLVED host element is immune: the event
28
- * always reaches the DOM node the user actually presses. This host-native behavior is
29
- * preferable to a Reka `dragging`-ref subscription, which Reka does not publicly expose
30
- * and which would re-introduce the same forwarding fragility).
19
+ * Why NATIVE host listeners (not a Vue `@pointerdown` template binding) — and NOT
20
+ * because the binding would be lost. reka-ui's `<SliderRoot>` is a forwarding
21
+ * component and does set `inheritAttrs: false` (`SliderRoot.js:17`), but it re-merges
22
+ * `$attrs` by hand on the way out — `mergeProps(_ctx.$attrs, { … onPointerdown })`
23
+ * (`:149`) — and `mergeProps` CHAINS `onX` handlers rather than overwriting them, so a
24
+ * consumer `@pointerdown` arrives and runs. Measured at our pin and at the consumer's:
25
+ * the merged order is reka's slide start, reka's update, then the consumer — LAST,
26
+ * which is the one real limit (it cannot `preventDefault` ahead of the slide).
27
+ * `tests/components/ui/slider/attrs-pointerdown-channel.test.ts` holds the arrival as a
28
+ * standing arm; the order was measured at the seat and is not asserted there.
29
+ *
30
+ * The native listeners are taken for three reasons that do hold: `pointerdown` AND
31
+ * `touchstart` fold onto ONE acquire under one owner; the release is window-scoped and
32
+ * so survives reka's `setPointerCapture` retarget; and the acquire is
33
+ * capture-independent, which is what makes it instant-on. A Reka `dragging`-ref
34
+ * subscription serves none of the three and is not publicly exposed.
31
35
  *
32
36
  * The hold is INSTANT-ON (Apple "Building Fluid Interfaces", facet 5): the first
33
37
  * line `keepOpen()` is capture-independent and synchronous, so the halo +
@@ -1 +1 @@
1
- @layer components{:where(.glass-dock,.dock-layer-group) .dock-layers{display: grid;min-width: 0;}.glass-dock[data-morphing]{--dock-live: calc( var(--dock-collapsed-px,var(--dock-expanded-px,0px)) + ( var(--dock-expanded-px,0px) - var(--dock-collapsed-px,var(--dock-expanded-px,0px)) ) * clamp(0,var(--dock-expand-t),1) );--dock-size-scale: clamp( 0.06,calc(var(--dock-live) / max(var(--dock-expanded-px,1px),1px)),1 );transform-origin: center center;will-change: transform;}.glass-dock[data-morphing]:not(.vertical){inline-size: var(--dock-expanded-px);}.glass-dock[data-morphing].vertical{block-size: var(--dock-expanded-px);}.glass-dock.expanded > .dock-controls > .dock-layers{overflow-x: visible;}:where(.glass-dock,.dock-layer-group) .dock-layer{transition: visibility 0s linear var(--duration-normal);}:where(.glass-dock,.dock-layer-group) .dock-layer:not(.is-active):not(.is-leaving){opacity: 0;visibility: hidden;pointer-events: none;}:where(.glass-dock,.dock-layer-group) .dock-layer.is-active{opacity: 1;visibility: visible;pointer-events: auto;transition: visibility 0s;}:where(.glass-dock,.dock-layer-group) .dock-layer.is-leaving{opacity: 0;visibility: visible;pointer-events: none;}.glass-dock[data-morphing] .dock-layer.is-leaving{opacity: calc(1 - var(--dock-morph-t));}.glass-dock .dock-layer.is-leaving.is-press-keepalive{opacity: 1;visibility: visible;pointer-events: none;}.glass-dock .dock-layer.is-leaving.is-press-keepalive [inert]{visibility: hidden;}.glass-dock .dock-layer.is-leaving.is-press-keepalive [data-dock-press-origin]{position: relative;z-index: 1;pointer-events: auto;}:where(.glass-dock,.dock-layer-group) .dock-layer{display: flex;align-items: center;grid-area: 1 / 1;gap: var(--dock-layer-gap,0.375rem);}.glass-dock:not(.vertical) .dock-layer{white-space: nowrap;min-height: var(--dock-layer-height,2.5rem);}:where(.glass-dock,.dock-layer-group) .dock-layer.is-active{position: relative;}:where(.glass-dock,.dock-layer-group) .dock-layer:not(.is-active){position: absolute;inset: 0;}.glass-dock[data-morphing] .dock-layer.is-active > *{--dock-stagger-window: var(--dock-stagger-window-size,0.55);--dock-stagger-onset: 0;--child-reveal: clamp( 0,calc( (var(--dock-expand-t) - var(--dock-stagger-onset)) / var(--dock-stagger-window) ),1 );opacity: var(--child-reveal);scale: calc(0.82 + 0.18 * var(--child-reveal));transform-origin: center;}.glass-dock[data-morphing] .dock-layer.is-active > *:nth-child(2 of *),.glass-dock[data-morphing] .dock-layer.is-active > *:nth-last-child(2 of *){--dock-stagger-onset: calc(var(--dock-stagger-step) * 1);}.glass-dock[data-morphing] .dock-layer.is-active > *:nth-child(3 of *),.glass-dock[data-morphing] .dock-layer.is-active > *:nth-last-child(3 of *){--dock-stagger-onset: calc(var(--dock-stagger-step) * 2);}.glass-dock[data-morphing] .dock-layer.is-active > *:nth-child(n + 4):nth-child(-n + 5){--dock-stagger-onset: calc(var(--dock-stagger-step) * 3);}.glass-dock.expanded:not(.fit-content):not([data-morphing]) .dock-layers{width: 100%;}.glass-dock.expanded:not(.fit-content) .dock-layer--full{width: 100%;}.glass-dock.always-expanded{cursor: default;}}
1
+ @layer components{:where(.glass-dock,.dock-layer-group) .dock-layers{display: grid;min-width: 0;}.glass-dock[data-morphing]{--dock-live: calc( var(--dock-collapsed-px,var(--dock-expanded-px,0px)) + ( var(--dock-expanded-px,0px) - var(--dock-collapsed-px,var(--dock-expanded-px,0px)) ) * clamp(0,var(--dock-expand-t),1) );--dock-size-scale: clamp( 0.06,calc(var(--dock-live) / max(var(--dock-expanded-px,1px),1px)),1 );transform-origin: center center;will-change: transform;}.glass-dock[data-morphing]:not(.vertical){inline-size: var(--dock-expanded-px);}.glass-dock[data-morphing].vertical{block-size: var(--dock-expanded-px);}.glass-dock.expanded > .dock-controls > .dock-layers{overflow-x: visible;}:where(.glass-dock,.dock-layer-group) .dock-layer{transition: visibility 0s linear var(--duration-normal);}:where(.glass-dock,.dock-layer-group) .dock-layer:not(.is-active):not(.is-leaving){opacity: 0;visibility: hidden;pointer-events: none;}:where(.glass-dock,.dock-layer-group) .dock-layer.is-active{opacity: 1;visibility: visible;pointer-events: auto;transition: visibility 0s;}:where(.glass-dock,.dock-layer-group) .dock-layer.is-leaving{opacity: 0;visibility: visible;pointer-events: none;}.glass-dock[data-morphing] .dock-layer.is-leaving{opacity: calc(1 - var(--dock-morph-t));}.glass-dock .dock-layer.is-leaving.is-press-keepalive{opacity: 1;visibility: visible;pointer-events: none;}.glass-dock .dock-layer.is-leaving.is-press-keepalive [inert]{visibility: hidden;}.glass-dock .dock-layer.is-leaving.is-press-keepalive [data-dock-press-origin]{position: relative;z-index: 1;pointer-events: auto;}:where(.glass-dock,.dock-layer-group) .dock-layer{display: flex;align-items: center;grid-area: 1 / 1;gap: var(--dock-layer-gap,0.375rem);}.glass-dock:not(.vertical) .dock-layer{white-space: nowrap;min-height: var(--dock-layer-height,2.5rem);}:where(.glass-dock,.dock-layer-group) .dock-layer.is-active{position: relative;}:where(.glass-dock,.dock-layer-group) .dock-layer:not(.is-active){position: absolute;inset: 0;}.glass-dock[data-morphing] .dock-layer.is-active > *{--dock-stagger-window: var(--dock-stagger-window-size,0.55);--dock-stagger-onset: 0;--child-reveal: clamp( 0,calc( (var(--dock-expand-t) - var(--dock-stagger-onset)) / var(--dock-stagger-window) ),1 );opacity: var(--child-reveal);scale: calc(0.82 + 0.18 * var(--child-reveal));transform-origin: center;}.glass-dock[data-morphing] .dock-layer.is-active > *:nth-child(2 of :not(.dock-separator)):nth-last-child(n + 2 of :not(.dock-separator)),.glass-dock[data-morphing] .dock-layer.is-active > *:nth-last-child(2 of :not(.dock-separator)):nth-child(n + 2 of :not(.dock-separator)){--dock-stagger-onset: calc(var(--dock-stagger-step) * 1);}.glass-dock[data-morphing] .dock-layer.is-active > *:nth-child(3 of :not(.dock-separator)):nth-last-child(n + 3 of :not(.dock-separator)),.glass-dock[data-morphing] .dock-layer.is-active > *:nth-last-child(3 of :not(.dock-separator)):nth-child(n + 3 of :not(.dock-separator)){--dock-stagger-onset: calc(var(--dock-stagger-step) * 2);}.glass-dock[data-morphing] .dock-layer.is-active > *:nth-child(n + 4 of :not(.dock-separator)):nth-last-child(n + 4 of :not(.dock-separator)){--dock-stagger-onset: calc(var(--dock-stagger-step) * 3);}.glass-dock.expanded:not(.fit-content):not([data-morphing]) .dock-layers{width: 100%;}.glass-dock.expanded:not(.fit-content) .dock-layer--full{width: 100%;}.glass-dock.always-expanded{cursor: default;}}
@@ -37,7 +37,7 @@ type __VLS_Props = {
37
37
  interactive?: boolean;
38
38
  };
39
39
  declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {
40
- backend: () => import("../../composables/glass/webgpu/useGpuSubstrate.js").GpuBackend;
40
+ backend: () => import("../../index.js").GpuBackend;
41
41
  pause: () => void;
42
42
  resume: () => void;
43
43
  wake: () => void;