@mkbabb/glass-ui 10.1.3 → 11.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (219) hide show
  1. package/MIGRATION.md +1024 -1461
  2. package/README.md +2 -2
  3. package/dist/DialogContent-DG5kseRQ.js +159 -0
  4. package/dist/DropdownMenuTrigger-uhSXgEfK.js +76 -0
  5. package/dist/{Surface-1nPoabc3.js → Surface-C7wq2j0A.js} +3 -0
  6. package/dist/aurora.css +1 -0
  7. package/dist/aurora.js +246 -2472
  8. package/dist/auroraImageSource-xNLDUjcy.js +30 -0
  9. package/dist/axes.js +8 -8
  10. package/dist/blob.css +1 -0
  11. package/dist/blob.js +57 -54
  12. package/dist/budget-CJfhLIIV.js +13 -0
  13. package/dist/button-CAKhiOZy.js +113 -0
  14. package/dist/button.js +1 -1
  15. package/dist/{card-ByyqRBvK.js → card-D_uXphvL.js} +4 -1
  16. package/dist/card.js +1 -1
  17. package/dist/carousel.js +3 -2
  18. package/dist/{checkbox-B1qn65se.js → checkbox-COLnvULu.js} +1 -0
  19. package/dist/checkbox.css +1 -0
  20. package/dist/checkbox.js +1 -1
  21. package/dist/{collapsible-DFzK29Oh.js → collapsible-Bd4Et730.js} +1 -0
  22. package/dist/collapsible.css +1 -0
  23. package/dist/collapsible.js +1 -1
  24. package/dist/color-HkUaTAJj.js +270 -0
  25. package/dist/{color.glsl-DTJhdekG.js → color.glsl-bFJm8k5R.js} +4 -16
  26. package/dist/color.wgsl-B-qDJ_OM.js +4 -0
  27. package/dist/{command-CatrAsrl.js → command-BsFOGZwB.js} +3 -2
  28. package/dist/command.css +1 -0
  29. package/dist/command.js +1 -1
  30. package/dist/component-styles.css +0 -1
  31. package/dist/components/_shared/axes.d.ts +7 -0
  32. package/dist/components/_shared/feedback/dot-ring.css +1 -1
  33. package/dist/components/_shared/overlay/focus-return.d.ts +9 -0
  34. package/dist/components/_shared/overlay/index.d.ts +3 -0
  35. package/dist/components/_shared/overlay/root-scroll-lock.d.ts +4 -0
  36. package/dist/components/_shared/overlay/sheet-width.d.ts +2 -0
  37. package/dist/components/_shared/shape/useBarShape.d.ts +4 -0
  38. package/dist/components/aurora/composables/auroraFallbackGround.d.ts +12 -0
  39. package/dist/components/aurora/constants/presets.d.ts +21 -0
  40. package/dist/components/aurora/index.d.ts +2 -2
  41. package/dist/components/button/styles.css +1 -1
  42. package/dist/components/dark-mode-toggle/dark-mode-toggle.css +1 -1
  43. package/dist/components/data-table/composables/useDataTableResponsive.d.ts +2 -0
  44. package/dist/components/deck/styles/capture.css +1 -1
  45. package/dist/components/dialog/DialogContent.vue.d.ts +2 -2
  46. package/dist/components/dialog/ModalOverlay.vue.d.ts +2 -2
  47. package/dist/components/dialog/ModalScrim.vue.d.ts +26 -0
  48. package/dist/components/dialog/styles.css +1 -1
  49. package/dist/components/dock/GlassDock.vue.d.ts +4 -1
  50. package/dist/components/dock/composables/useDockClickIntegrity.d.ts +4 -0
  51. package/dist/components/dock/composables/useDockShellProps.d.ts +34 -2
  52. package/dist/components/dock/composables/useDockState.d.ts +5 -0
  53. package/dist/components/dock/index.d.ts +1 -2
  54. package/dist/components/dock/styles/controls/icon-button.css +1 -1
  55. package/dist/components/dock/styles/controls/tab-button.css +1 -1
  56. package/dist/components/dock/styles/morph.css +1 -1
  57. package/dist/components/dock/styles/run.css +1 -1
  58. package/dist/components/dock/trigger.d.ts +1 -0
  59. package/dist/components/expandable-container/ExpandableContainer.vue.d.ts +30 -29
  60. package/dist/components/menu/ContextMenu.vue.d.ts +27 -0
  61. package/dist/components/menu/DropdownMenu.vue.d.ts +5 -23
  62. package/dist/components/menu/context.d.ts +18 -5
  63. package/dist/components/menu/family-click.d.ts +2 -0
  64. package/dist/components/menu/family-context.d.ts +2 -0
  65. package/dist/components/menu/index.d.ts +1 -1
  66. package/dist/components/sheet/SheetContent.vue.d.ts +2 -2
  67. package/dist/components/sortable-list/styles.css +1 -0
  68. package/dist/components/surface/Surface.vue.d.ts +4 -1
  69. package/dist/components/tabs/composables/useTabDragMorph.d.ts +4 -7
  70. package/dist/components/tabs/styles/segmented.css +1 -1
  71. package/dist/components/tabs/types.d.ts +7 -8
  72. package/dist/composables/dom/useResizeObserver.d.ts +3 -1
  73. package/dist/composables/glass/fieldPaint.d.ts +4 -0
  74. package/dist/composables/glass/useGlassBackdropLuminance.d.ts +7 -6
  75. package/dist/composables/glass/webgpu/useGpuSubstrate.d.ts +8 -0
  76. package/dist/composables/motion/core/motionTempo.d.ts +2 -1
  77. package/dist/composables/motion/morph/useDragMorph.d.ts +2 -2
  78. package/dist/composables/motion/morph/useSelectionGroup.d.ts +6 -25
  79. package/dist/composables/motion/morph/useSelectionIndicator.d.ts +8 -54
  80. package/dist/composables/motion/spring/useLiquidFlex.d.ts +3 -5
  81. package/dist/composables/motion/spring/useSpringMount.d.ts +0 -9
  82. package/dist/{configurator-CPxIo3q2.js → configurator-C1ZKEf1b.js} +7 -5
  83. package/dist/configurator.css +1 -0
  84. package/dist/configurator.js +1 -1
  85. package/dist/constants-DfrO-IaH.js +8 -0
  86. package/dist/constellation.css +1 -0
  87. package/dist/constellation.js +2 -1
  88. package/dist/control.css +1 -0
  89. package/dist/{control.css_vue_type_style_index_0_src_true_lang-BIdufaDG.js → control.css_vue_type_style_index_0_src_true_lang-D2hdtjs4.js} +1 -0
  90. package/dist/{createCanvasLifecycle-hJHobVTn.js → createCanvasLifecycle-DS0vEs_G.js} +76 -75
  91. package/dist/dark-mode-toggle.js +1 -1
  92. package/dist/{data-table-Cs93-uY7.js → data-table-lDykVYuo.js} +113 -107
  93. package/dist/data-table.css +1 -0
  94. package/dist/data-table.js +1 -1
  95. package/dist/{deck-Cm_VmyNL.js → deck-Bc-2mEKE.js} +1 -0
  96. package/dist/deck.js +1 -1
  97. package/dist/dialog.js +1 -1
  98. package/dist/dock-trigger.d.ts +1 -0
  99. package/dist/dock-trigger.js +88 -0
  100. package/dist/dock.js +677 -689
  101. package/dist/dom.js +1 -1
  102. package/dist/easing.js +4 -4
  103. package/dist/expandable-container-wS1awXGd.js +135 -0
  104. package/dist/expandable-container.css +1 -0
  105. package/dist/expandable-container.js +1 -1
  106. package/dist/{fading-scroll-CTeW3KNS.js → fading-scroll-D3Y20ibL.js} +2 -2
  107. package/dist/fading-scroll.js +1 -1
  108. package/dist/fieldPaint-Ci77oajZ.js +7 -0
  109. package/dist/fourier-field.css +1 -0
  110. package/dist/fourier-field.js +15 -13
  111. package/dist/glSetup-DMaDgrEj.js +577 -0
  112. package/dist/glass-ui.js +67 -66
  113. package/dist/handmark.css +1 -0
  114. package/dist/handmark.js +82 -71
  115. package/dist/index.css +1 -0
  116. package/dist/index.d.ts +1 -1
  117. package/dist/{input-eLZ_AU7l.js → input-BLF2pMHE.js} +1 -1
  118. package/dist/input.js +1 -1
  119. package/dist/{label-CE03H1KL.js → label-ryNPL7e6.js} +1 -0
  120. package/dist/label.css +1 -0
  121. package/dist/label.js +1 -1
  122. package/dist/labeled-field.css +1 -0
  123. package/dist/labeled-field.js +5 -4
  124. package/dist/{menu-DaYAZiVW.js → menu-C_l2Sslf.js} +162 -112
  125. package/dist/menu.js +3 -3
  126. package/dist/metric.js +1 -0
  127. package/dist/motion-core.js +138 -44
  128. package/dist/motion-lHDAQHEE.js +91 -0
  129. package/dist/motion.js +5 -5
  130. package/dist/motionTempo-DXdVbCWr.js +13 -0
  131. package/dist/music-staff.js +1 -0
  132. package/dist/{number-field-RP89046a.js → number-field-BXFUP49Z.js} +3 -2
  133. package/dist/number-field.css +1 -0
  134. package/dist/number-field.js +1 -1
  135. package/dist/pager-dots.css +1 -0
  136. package/dist/pager-dots.js +4 -3
  137. package/dist/participation-C5y5VZTN.js +52 -0
  138. package/dist/{popover-BdpoE4Ar.js → popover-DQUmwuAa.js} +3 -2
  139. package/dist/popover.js +1 -1
  140. package/dist/{progress-eVa-mc7J.js → progress-BUn0Bw7Z.js} +1 -0
  141. package/dist/progress.css +1 -0
  142. package/dist/progress.js +1 -1
  143. package/dist/{radio-group-B58Bz16F.js → radio-group-xdEy2tdi.js} +1 -0
  144. package/dist/radio-group.css +1 -0
  145. package/dist/radio-group.js +1 -1
  146. package/dist/root-scroll-lock-DJFrQhMa.js +22 -0
  147. package/dist/select-Dt5dXm87.js +309 -0
  148. package/dist/select.js +1 -1
  149. package/dist/{separator-D4EZM10u.js → separator-C4y9p_ky.js} +1 -0
  150. package/dist/separator.css +1 -0
  151. package/dist/separator.js +1 -1
  152. package/dist/sheet-DLqNUIZl.js +347 -0
  153. package/dist/sheet-width-DgXgJNa5.js +18 -0
  154. package/dist/sheet.js +2 -2
  155. package/dist/{slider-5uoY-cLG.js → slider-CZiKrWGg.js} +8 -8
  156. package/dist/slider.js +1 -1
  157. package/dist/sortable-list.js +2 -1
  158. package/dist/{status-dot-W4LFiJps.js → status-dot-BDZKcRxy.js} +2 -1
  159. package/dist/status-dot.css +1 -0
  160. package/dist/status-dot.js +1 -1
  161. package/dist/styles/components.css +1 -1
  162. package/dist/styles/glass/glass-capsule.css +1 -1
  163. package/dist/styles/glass/glass-chip.css +1 -1
  164. package/dist/styles/glass/mark.css +1 -1
  165. package/dist/styles/glass/overlay-plate.css +1 -1
  166. package/dist/styles/glass/surface-axis.css +1 -1
  167. package/dist/styles/index.css +1 -1
  168. package/dist/styles/theme/radius.css +1 -1
  169. package/dist/styles/tokens/color-radius.css +1 -1
  170. package/dist/styles/tokens/manifest.d.ts +1 -1
  171. package/dist/styles/tokens/scale-paper.css +1 -1
  172. package/dist/styles/utilities/base-misc.css +1 -1
  173. package/dist/surface.js +1 -1
  174. package/dist/{switch-BYUZ6g9G.js → switch-DLfGYU35.js} +1 -0
  175. package/dist/switch.css +1 -0
  176. package/dist/switch.js +1 -1
  177. package/dist/tabs-NgTRPGZx.js +229 -0
  178. package/dist/tabs.js +1 -1
  179. package/dist/textarea.js +1 -1
  180. package/dist/timeline.css +1 -0
  181. package/dist/timeline.js +4 -3
  182. package/dist/toggle-group-DgXcJGD6.js +129 -0
  183. package/dist/toggle-group.css +1 -0
  184. package/dist/toggle-group.js +1 -1
  185. package/dist/tokens.js +2 -0
  186. package/dist/{tooltip-CZVubnJf.js → tooltip-Do3qCw0r.js} +1 -1
  187. package/dist/tooltip.js +1 -1
  188. package/dist/typewriter.css +1 -0
  189. package/dist/typewriter.js +1 -0
  190. package/dist/uniformBridge-CJyy7NOn.js +150 -0
  191. package/dist/useBarShape-CmP35Z8o.js +24 -0
  192. package/dist/{useCanvas2D-CQRElMyE.js → useCanvas2D-Bhpwua98.js} +1 -1
  193. package/dist/{useDockCtaReceive-BSSgD6mu.js → useDockCtaReceive-Dn_-paqP.js} +1 -1
  194. package/dist/{useDragMorph-B363RUbF.js → useDragMorph-BEI74U0t.js} +51 -40
  195. package/dist/{color.wgsl-BTszLY39.js → useGpuSubstrate-Y5XAdU8d.js} +7 -7
  196. package/dist/{useLiquidPress-h1scrPtP.js → useLiquidPress-D5mjZC6U.js} +2 -2
  197. package/dist/{useResizeObserver-CdUlm2QZ.js → useResizeObserver-Bv3nN46q.js} +4 -7
  198. package/dist/useScrollChrome-DMP6kDI9.js +67 -0
  199. package/dist/useSelectionGroup-DAQv5Lb5.js +186 -0
  200. package/dist/{useSpring-9u2_shxV.js → useSpring-Aof0nTRt.js} +1 -1
  201. package/dist/useSpringMount-jgNkymRl.js +73 -0
  202. package/dist/wgpuSetup-CFuqd_RP.js +1278 -0
  203. package/package.json +8 -1
  204. package/dist/DialogContent-CwIBvou_.js +0 -157
  205. package/dist/DropdownMenuTrigger-CKRnhDSQ.js +0 -93
  206. package/dist/button-BOFTUPyU.js +0 -110
  207. package/dist/composables/motion/morph/eyeglass.d.ts +0 -141
  208. package/dist/expandable-container-CZUj9BzY.js +0 -142
  209. package/dist/glass-ui.css +0 -2
  210. package/dist/motion-BvV1_24p.js +0 -61
  211. package/dist/motionTempo-tscp92Nm.js +0 -7
  212. package/dist/participation-B7UFdgXB.js +0 -55
  213. package/dist/select-BiF0FCZf.js +0 -292
  214. package/dist/sheet-DmJxgAHc.js +0 -345
  215. package/dist/tabs-C5sC0fBE.js +0 -269
  216. package/dist/toggle-group-CC5b3o1R.js +0 -125
  217. package/dist/useScrollChrome-BJbWV32F.js +0 -162
  218. package/dist/useSelectionGroup-zsEwitF6.js +0 -291
  219. package/dist/useSpringMount-OA-0mTNv.js +0 -73
@@ -24,8 +24,8 @@ export interface UseDragMorphParams<V = string> {
24
24
  */
25
25
  snapTargets: readonly DragMorphSnapTarget<V>[] | (() => readonly DragMorphSnapTarget<V>[]);
26
26
  /**
27
- * The live cap getter for the squish (`--tab-indicator-max-stretch`, ≤1.08).
28
- * Defaults to the shared 1.08 fence; a getter re-reads the cascade override.
27
+ * The live cap getter for the squish (≤1.08). Defaults to the shared 1.08
28
+ * fence; a getter can re-read a cascade override.
29
29
  */
30
30
  maxStretch?: () => number;
31
31
  /**
@@ -1,5 +1,5 @@
1
1
  import { type ComputedRef, type Ref } from "vue";
2
- import { type SelectionDeform, type SelectionOption } from "./useSelectionIndicator.js";
2
+ import { type SelectionOption } from "./useSelectionIndicator.js";
3
3
  import type { SelectionValue } from "../../../components/_shared/selection.js";
4
4
  import { type TabActivation } from "../../../components/tabs/composables/useTabRovingFocus.js";
5
5
  /**
@@ -23,7 +23,7 @@ import { type TabActivation } from "../../../components/tabs/composables/useTabR
23
23
  * • the ROVING MACHINE — `useTabRovingFocus` composed VERBATIM (exactly-one-
24
24
  * tabstop, axis-derived arrows, Home/End, wrap, disabled-skip);
25
25
  * • the ONE TRAVELING-INDICATOR WRITER — `useSelectionIndicator` (the
26
- * center-anchored ResizeObserver measure + the `--stretch` squish), so the
26
+ * center-anchored ResizeObserver measure), so the
27
27
  * dock and tabs indicator is Safari-identical by construction;
28
28
  * • the RECENTER CALL — `el.scrollIntoView({inline:'nearest', block:'nearest'})`
29
29
  * on every select, so a selection past the fold pulls itself into view.
@@ -62,15 +62,13 @@ export interface UseSelectionGroupParams<O extends SelectionOption> {
62
62
  /** The container scroller root (observed by the indicator's ResizeObserver). */
63
63
  containerRef: Ref<HTMLElement | null>;
64
64
  /**
65
- * The traveling-indicator element (the deform write target). Omit (or leave
66
- * null) for a group with no glide indicator at all (a paper-hairline strip, a
67
- * plain toggle row) — the SQUISH then no-ops, which is HEAD's accurate half and
68
- * is restored here. ~~The MEASURE does not no-op, and BK #84's rewording asserted
65
+ * The traveling-indicator element (the measured node). Omit (or leave null) for
66
+ * a group with no glide indicator at all (a plain toggle row). ~~The MEASURE does not no-op, and BK #84's rewording asserted
69
67
  * that it did: `useSelectionIndicator` attaches its `ResizeObserver`
70
68
  * unconditionally — that is the Safari-identical guarantee — and
71
69
  * `updateSingleSlider` keeps writing a `singleSliderStyle` such a caller never
72
70
  * reads. Economizing it is the indicator writer's own change to make.~~
73
- * [2026-08-08 · BK #71 W-EYEGLASS, RT-84O: the change was made, in the file this
71
+ * [2026-08-08 · BK #71, RT-84O: the change was made, in the file this
74
72
  * text routed it to. `updateSingleSlider` now returns before its first rect read
75
73
  * when `indicatorRef` is null, so such a caller runs ZERO layout. What #84 wrote
76
74
  * was true of #84's HEAD and is false of this one — the `ResizeObserver` still
@@ -79,23 +77,8 @@ export interface UseSelectionGroupParams<O extends SelectionOption> {
79
77
  * container, so the container watcher already covers it.]
80
78
  */
81
79
  indicatorRef?: Ref<HTMLElement | null>;
82
- /**
83
- * What the travelling body is made of — `"plate"` (default, the full body and
84
- * the eyeglass host), `"mark"` (a hairline: length only), `"none"`. STATED, not
85
- * inferred: a multi-toggle group has no single travelling body, and that is a
86
- * different fact from a hairline having no area, even though the old null-ref
87
- * sentinel spelled both the same way.
88
- */
89
- deform?: ComputedRef<SelectionDeform>;
90
80
  /** Per-option item refs, index-aligned to `options`. */
91
81
  buttonRefs: Ref<HTMLElement[]>;
92
- /**
93
- * A per-commit side effect the CALLER owns, fired on every committed selection
94
- * (pointer AND keyboard) before the model write — e.g. SegmentedTabs' press
95
- * squish on the pressed button. The engine stays the one selection path; a
96
- * caller that needs a local flourish hangs it here rather than forking `select`.
97
- */
98
- onSelect?: (value: O["value"], idx: number) => void;
99
82
  }
100
83
  export interface UseSelectionGroupReturn<V extends SelectionValue = string> {
101
84
  /** The active option values (one for `single`, N for `multiple`). */
@@ -104,7 +87,7 @@ export interface UseSelectionGroupReturn<V extends SelectionValue = string> {
104
87
  isSelected: (value: V) => boolean;
105
88
  /**
106
89
  * Commit a selection at `idx` — writes the model (toggle in `multiple`),
107
- * fires the travel-squish, and recenters the item via `scrollIntoView`.
90
+ * and recenters the item via `scrollIntoView`.
108
91
  */
109
92
  select: (value: V, idx: number) => void;
110
93
  /** The roving tabindex for option `idx` (`0` for the tabstop, `-1` else). */
@@ -113,8 +96,6 @@ export interface UseSelectionGroupReturn<V extends SelectionValue = string> {
113
96
  onKeydown: (e: KeyboardEvent) => void;
114
97
  /** Inline style for the single-select traveling indicator (the ONE writer). */
115
98
  singleSliderStyle: Ref<Record<string, string>>;
116
- /** Imperatively kick the travel-squish on a selection at `idx`. */
117
- squishOnTravel: (toIdx: number) => void;
118
99
  /** The resolved group `role` (`radiogroup` | `tablist` | `group`). */
119
100
  groupRole: ComputedRef<SelectionRole>;
120
101
  /** The per-item ARIA attributes for `value`, role-per-mode. */
@@ -12,35 +12,16 @@ import type { SelectionValue } from "../../../components/_shared/selection.js";
12
12
  * indicator writer in the library.
13
13
  *
14
14
  * It owns the JS-measured single-select slider style (the slider geometry, the
15
- * offset measure, the model/options re-measure watchers, the RO lifecycle) AND
16
- * the travel deform: a velocity-driven `--stretch` scalar the active indicator
17
- * reads so it lengthens along its travel axis as it glides and settles to fit
18
- * (the Material-3 ELASTIC, Apple Liquid-Glass register). Honors
19
- * `prefers-reduced-motion` (no deform under reduce).
20
- *
21
- * WHAT DEFORMS IS A POLICY, AND IT IS A PARAMETER. It used to be inferred from
22
- * `indicatorRef` being null, which was an OVERLOADED sentinel: the same null meant
23
- * "this group has no single slider" to `useSelectionGroup` and "this material does
24
- * not squish" here, so neither meaning could be stated without lying about the
25
- * other. `deform` says it outright:
26
- * • `"plate"` (default) — the full body: `--stretch` plus, where the surface arms
27
- * the organ, the EYEGLASS span/swell/lean. A body of glass with area to move.
28
- * • `"mark"` — `--stretch` only. A hairline lengthens along its travel; it has no
29
- * area to inflate and no cross axis to swell.
30
- * • `"none"` — no deform at all (a multi-toggle group has no single travelling
31
- * body to deform).
32
- * The `if (!el)` guard below stays what it always should have been: null-safety.
33
- *
34
- * THE EYEGLASS is armed by the SURFACE, in its own cascade, by declaring
35
- * `--eyeglass-span-max`. Where it is armed the deform stops being a centre-pump and
36
- * becomes the measured organ — it spans origin and destination, leans 2:1 into its
37
- * travel, swells across, and clamps at the track's inner edge. Where it is not
38
- * declared the fraction law is byte-identical to what shipped. See `eyeglass.ts`.
15
+ * offset measure, the model/options re-measure watchers, the RO lifecycle). The
16
+ * indicator glides by CSS on the inline `translate`/`width`/`height` this writes, at
17
+ * its own size: nothing here deforms it. The velocity `--stretch` law it once wrote
18
+ * (the `plate` and `mark` deforms, the `--tab-indicator-max-stretch` cap) is gone
19
+ * with its last consumer.
39
20
  *
40
21
  * The writer emits the selected item's full physical border box from the
41
22
  * container's padding-box origin. Measuring both axes keeps the resting fill
42
- * exact across orientation, fractional geometry, and writing direction; the
43
- * `vertical` param only selects the transient squish axis.
23
+ * exact across orientation, fractional geometry, and writing direction; a change
24
+ * of `vertical` re-measures.
44
25
  *
45
26
  * Generic over the minimal `SelectionOption` shape (`value` + optional
46
27
  * `disabled`), so it is decoupled from any consumer's option type. ~~the
@@ -65,31 +46,10 @@ export interface SelectionOption {
65
46
  value: SelectionValue;
66
47
  disabled?: boolean;
67
48
  }
68
- /**
69
- * Fallback for `--tab-indicator-max-stretch` when the cascade leaves it unset —
70
- * the default travel-squish cap. `--stretch = 1 + frac · (cap − 1)`, so a
71
- * full-width jump reaches the cap and a tiny hop stays near 1. The token is the
72
- * authority; this is the no-token floor (the SOLE cap source, shared by the
73
- * click travel-squish AND the drag pull-morph — the constant + the token in
74
- * lockstep, never a fork).
75
- */
76
- export declare const DEFAULT_INDICATOR_MAX_STRETCH = 1.11;
77
- /**
78
- * The travel-progress fraction at which the squish RELEASES — the Material
79
- * "grow then shrink" close, keyed to ARRIVAL. The squish opens with the glide
80
- * and releases when the indicator is within this fraction of its target, so the
81
- * stretch peaks DURING travel and shrinks to fit AT arrival, never before.
82
- */
83
- export declare const INDICATOR_RELEASE_AT_ARRIVAL = 0.82;
84
- /**
85
- * The deform POLICY — what the travelling body is made of, stated rather than
86
- * inferred from a null ref. See the module docstring for why the sentinel had to go.
87
- */
88
- export type SelectionDeform = "plate" | "mark" | "none";
89
49
  export interface UseSelectionIndicatorParams<O extends SelectionOption> {
90
50
  /** The container scroller root (observed by the ResizeObserver). */
91
51
  containerRef: Ref<HTMLElement | null>;
92
- /** The active indicator element (the squish `--stretch` write target). */
52
+ /** The active indicator element (the measured node). */
93
53
  indicatorRef: Ref<HTMLElement | null>;
94
54
  /** Per-option item refs, index-aligned to `options`. */
95
55
  buttonRefs: Ref<HTMLElement[]>;
@@ -97,17 +57,11 @@ export interface UseSelectionIndicatorParams<O extends SelectionOption> {
97
57
  options: ComputedRef<O[]>;
98
58
  /** The active value (re-measure on change), at the option type's own scalar. */
99
59
  model: Ref<O["value"] | undefined>;
100
- /** The active option values (used by the initial squish seed). */
101
- activeValues: ComputedRef<O["value"][]>;
102
60
  /** True for the vertical (block-axis) orientation. */
103
61
  vertical: ComputedRef<boolean>;
104
- /** What the travelling body is made of. Defaults to `"plate"`. */
105
- deform?: ComputedRef<SelectionDeform>;
106
62
  }
107
63
  export interface UseSelectionIndicatorReturn {
108
64
  /** Inline style for the single-select JS slider — the ONE writer. */
109
65
  singleSliderStyle: Ref<Record<string, string>>;
110
- /** Imperatively kick the travel-squish on a selection at `idx`. */
111
- squishOnTravel: (toIdx: number) => void;
112
66
  }
113
67
  export declare function useSelectionIndicator<O extends SelectionOption>(params: UseSelectionIndicatorParams<O>): UseSelectionIndicatorReturn;
@@ -12,11 +12,9 @@ export interface UseLiquidFlexParams {
12
12
  /**
13
13
  * The LOW squish cap — the maximum `--stretch` the travel can reach (a +N%
14
14
  * elongation along the travel axis). Defaults to 1.14. Kept LOW: the liquid
15
- * register is a lively settle, never a rubber-band taffy-pull. The tabs indicator
16
- * passes its own tighter cap explicitly (`DEFAULT_INDICATOR_MAX_STRETCH`, 1.11).
17
- * May be a getter so a consumer reading a live cascade override
18
- * (`--tab-indicator-max-stretch`) re-resolves the cap per-read without
19
- * reconstructing the primitive.
15
+ * register is a lively settle, never a rubber-band taffy-pull. May be a getter
16
+ * so a consumer reading a live cascade override re-resolves the cap per-read
17
+ * without reconstructing the primitive.
20
18
  */
21
19
  maxStretch?: number | (() => number);
22
20
  /**
@@ -50,13 +50,4 @@ export interface SpringMountRef {
50
50
  onPointercancel: (e: PointerEvent) => void;
51
51
  };
52
52
  }
53
- /**
54
- * Spring-driven mount with optional pointer drag-dismiss.
55
- *
56
- * The spring target lives between 0 (fully mounted) and 1 (fully dismissed).
57
- * The host watches `open` to seat the entrance (1 → 0). Pointer drags
58
- * re-seat the target mid-flight; on release the threshold decides bounce
59
- * vs. dismiss. The mid-flight re-target preserves spring continuity per
60
- * SpringProgress.
61
- */
62
53
  export declare function useSpringMount(options: UseSpringMountOptions): SpringMountRef;
@@ -1,11 +1,13 @@
1
+ import "./configurator.css";
1
2
  import { t as e } from "./class-names-FlXcvRRT.js";
2
3
  import { t } from "./createContext-BhkE9mLH.js";
3
4
  import { t as n } from "./_plugin-vue_export-helper-B3ysoDQm.js";
4
- import { t as r } from "./label-CE03H1KL.js";
5
- import { t as i } from "./expandable-container-CZUj9BzY.js";
6
- import { t as a } from "./fading-scroll-CTeW3KNS.js";
5
+ import { t as r } from "./label-ryNPL7e6.js";
6
+ import { t as i } from "./expandable-container-wS1awXGd.js";
7
+ import { t as a } from "./fading-scroll-D3Y20ibL.js";
7
8
  import { Fragment as o, computed as s, createBlock as c, createCommentVNode as l, createElementBlock as u, createElementVNode as d, createTextVNode as f, createVNode as p, defineComponent as m, mergeModels as h, mergeProps as g, normalizeClass as _, normalizeStyle as v, openBlock as y, reactive as b, ref as x, renderList as S, renderSlot as C, resolveDynamicComponent as ee, toDisplayString as w, toRaw as T, unref as E, useId as D, useModel as O, useSlots as k, withCtx as A, withModifiers as j } from "vue";
8
9
  import { ChevronDown as M, RotateCcw as N } from "@lucide/vue";
10
+ import "./components/configurator/styles.css";
9
11
  //#region src/components/configurator/size.ts
10
12
  var P = t("configuratorSize"), F = P.KEY;
11
13
  function I(e) {
@@ -229,7 +231,7 @@ var L = P.use, R = [
229
231
  class: _(E(e)("configurator-layer-body py-2 space-y-2", n.dividers && "[&>*+*]:border-t [&>*+*]:pt-2", n.bodyClass))
230
232
  }, [C(r.$slots, "default", {}, void 0, !0)], 10, ne)])], 12, Q)], 10, G));
231
233
  }
232
- }), [["__scopeId", "data-v-2f76a595"]]), ie = ["data-size"], ae = { class: "flex items-baseline justify-between gap-3" }, oe = { class: "flex min-w-0 items-baseline gap-2" }, $ = {
234
+ }), [["__scopeId", "data-v-238d4e7b"]]), ie = ["data-size"], ae = { class: "flex items-baseline justify-between gap-3" }, oe = { class: "flex min-w-0 items-baseline gap-2" }, $ = {
233
235
  key: 0,
234
236
  class: "truncate text-small font-normal text-muted-foreground"
235
237
  }, se = {
@@ -288,7 +290,7 @@ var L = P.use, R = [
288
290
  t.description ? (y(), u("p", ue, w(t.description), 1)) : l("", !0)
289
291
  ], 10, ie));
290
292
  }
291
- }), [["__scopeId", "data-v-ed1debd3"]]);
293
+ }), [["__scopeId", "data-v-6dddcbbf"]]);
292
294
  //#endregion
293
295
  //#region src/components/configurator/useConfiguratorState.ts
294
296
  function fe(e) {
@@ -0,0 +1 @@
1
+ @layer theme, base, components, utilities;@layer components{.configurator-layer-region[data-v-238d4e7b]{transition:grid-template-rows var(--spring-dock-duration) var(--spring-dock)}@media (prefers-reduced-motion:reduce){.configurator-layer-region[data-v-238d4e7b]{transition:none}}.configurator-row[data-size=sm][data-v-6dddcbbf]{gap:var(--configurator-row-gap-compact);padding-block:var(--configurator-row-py-compact)}.configurator-row[data-size=md][data-v-6dddcbbf]{gap:var(--configurator-row-gap-comfortable);padding-block:var(--configurator-row-py-comfortable)}.configurator-row[data-size=lg][data-v-6dddcbbf]{gap:var(--configurator-row-gap-spacious);padding-block:var(--configurator-row-py-spacious)}@container style(--configurator-size:sm){.configurator-row[data-v-6dddcbbf]{gap:var(--configurator-row-gap-compact);padding-block:var(--configurator-row-py-compact)}}@container style(--configurator-size:md){.configurator-row[data-v-6dddcbbf]{gap:var(--configurator-row-gap-comfortable);padding-block:var(--configurator-row-py-comfortable)}}@container style(--configurator-size:lg){.configurator-row[data-v-6dddcbbf]{gap:var(--configurator-row-gap-spacious);padding-block:var(--configurator-row-py-spacious)}}}
@@ -1,2 +1,2 @@
1
- import { a as e, i as t, n, o as r, r as i, s as a, t as o } from "./configurator-CPxIo3q2.js";
1
+ import { a as e, i as t, n, o as r, r as i, s as a, t as o } from "./configurator-C1ZKEf1b.js";
2
2
  export { e as CONFIGURATOR_SIZE_KEY, t as Configurator, i as ConfiguratorLayer, n as ConfiguratorRow, r as provideConfiguratorSize, o as useConfiguratorState, a as useOptionalConfiguratorSize };
@@ -0,0 +1,8 @@
1
+ import { n as e } from "./springPresets-Cbe0Voqg.js";
2
+ //#region src/components/dock/constants.ts
3
+ var t = {
4
+ response: e("dock").response,
5
+ dampingFraction: e("dock").dampingFraction
6
+ }, n = "[data-dismissable-layer]:not([data-state=\"closed\"])", r = "glass-ui:dock-context", i = "glass-ui:dock-layer-group", a = 3600, o = "data-glass-dock-seat";
7
+ //#endregion
8
+ export { t as a, o as i, r as n, n as o, i as r, a as t };
@@ -0,0 +1 @@
1
+ @layer theme, base, components, utilities;@layer components{.constellation[data-v-18aad161]{contain:layout style;content-visibility:auto;contain-intrinsic-size:auto none}.constellation[role=button][data-v-18aad161]:focus-visible{outline:2px solid var(--focus-ring-color);outline-offset:2px}:where(.constellation[data-v-18aad161]){block-size:100%;inline-size:100%;position:relative}.constellation-canvas[data-v-18aad161]{block-size:100%;inline-size:100%;display:block;position:absolute;inset:0}}
@@ -1,6 +1,7 @@
1
+ import "./constellation.css";
1
2
  import { t as e } from "./class-names-FlXcvRRT.js";
2
3
  import { t } from "./useReducedMotion-vCXA_vyM.js";
3
- import { t as n } from "./useCanvas2D-CQRElMyE.js";
4
+ import { t as n } from "./useCanvas2D-Bhpwua98.js";
4
5
  import { t as r } from "./_plugin-vue_export-helper-B3ysoDQm.js";
5
6
  import { t as i } from "./usePointerVelocityField-Lx26_Yap.js";
6
7
  import { t as a } from "./useRoutePointer-B8itM7Ka.js";
@@ -0,0 +1 @@
1
+ @layer theme, base, components, utilities;@layer components{.field-control{--field-control-height:var(--control-h-md);--field-control-ink:color-mix(in oklab, var(--foreground) calc(var(--ink-perimeter) * 100%), transparent);--field-control-well:var(--ink-seam);--control-edge-inner:inset 0 1px 2px color-mix(in oklab, var(--foreground) calc(var(--field-control-well) * 100%), transparent);--control-surface-bg:var(--input-on-glass);--field-control-duration:var(--duration-control);--field-control-ease:var(--spring-press);border-style:solid;border-width:1px;border-color:var(--field-control-ink);background-color:var(--control-surface-bg);inline-size:100%;min-inline-size:0;max-inline-size:100%;-webkit-backdrop-filter:var(--control-surface-blur);backdrop-filter:var(--control-surface-blur);padding-inline:calc(.75rem * var(--ui-scale));color:var(--foreground);caret-color:currentColor;font:inherit;font-size:var(--type-small);transition:background-color var(--field-control-duration) var(--field-control-ease), border-color var(--field-control-duration) var(--field-control-ease), box-shadow var(--field-control-duration) var(--field-control-ease), outline-color var(--field-control-duration) var(--field-control-ease), backdrop-filter var(--field-control-duration) var(--field-control-ease);outline-color:#0000;display:block}.field-control[data-kind=input]{block-size:var(--field-control-height);border-radius:var(--radius-pill)}.field-control[data-kind=textarea]{field-sizing:content;min-block-size:calc(var(--field-rows,2) * 1lh + 2 * (.75rem * var(--ui-scale)) + 2px);max-block-size:var(--textarea-content-max);border-radius:var(--radius-field);padding-block:calc(.75rem * var(--ui-scale));line-height:var(--type-leading-body);overflow:auto}.field-control[data-size=sm]{--field-control-height:var(--control-h-sm)}.field-control[data-size=lg]{--field-control-height:var(--control-h-lg)}.field-control::placeholder{color:var(--muted-foreground)}@media (hover:hover){.field-control:hover:not([data-state=disabled],[data-state=readonly]){--field-control-well:var(--ink-edge);--control-surface-blur:var(--glass-blur-floating)}}.field-control:focus-visible{outline:var(--focus-ring-width) solid var(--field-control-ink);outline-offset:2px;--control-edge-ring:0 0 8px color-mix(in srgb, var(--focus-ring-color) 15%, transparent)}.field-control:is(:user-invalid,[data-state=invalid]){--field-control-duration:var(--duration-fast);--field-control-ease:var(--ease-out);--control-surface-bg:color-mix(in srgb, var(--destructive) 8%, var(--input-on-glass));--control-edge-ring:var(--invalid-ring);border-color:var(--destructive)}.field-control:is(:user-invalid,[data-state=invalid]):focus-visible{outline-color:var(--destructive);--control-edge-ring:var(--invalid-ring), 0 0 8px color-mix(in srgb, var(--destructive) 15%, transparent)}.field-control[data-state=readonly]{--control-surface-bg:color-mix(in oklab, var(--input-on-glass), var(--muted) 18%);caret-color:#0000;cursor:text}.field-control[data-state=disabled]{--field-control-ink:color-mix(in oklab, var(--foreground) calc(var(--ink-perimeter) * 45%), transparent);--control-surface-bg:color-mix(in oklab, var(--input-on-glass), var(--muted) 40%);color:color-mix(in oklab, var(--foreground) 45%, transparent);cursor:not-allowed}.field-control[data-kind=textarea][data-resize=none]{resize:none}.field-control[data-kind=textarea][data-resize=horizontal]{resize:horizontal}.field-control[data-kind=textarea][data-resize=both]{resize:both}.field-control[data-kind=textarea][data-resize=vertical]{resize:vertical}@media (width<=768px){.field-control{padding-inline:calc(.5rem * var(--ui-scale))}}@media (prefers-reduced-motion:reduce){.field-control{--field-control-duration:.01ms}}}
@@ -1,3 +1,4 @@
1
+ import "./control.css";
1
2
  import { computed as e } from "vue";
2
3
  //#region src/components/_shared/field/control.ts
3
4
  function t(e) {
@@ -1,7 +1,8 @@
1
1
  import { n as e } from "./useReducedMotion-vCXA_vyM.js";
2
- import { watch as t } from "vue";
2
+ import { n as t } from "./fieldPaint-Ci77oajZ.js";
3
+ import { watch as n } from "vue";
3
4
  //#region src/composables/glass/webgl/backingSize.ts
4
- function n(e, t) {
5
+ function r(e, t) {
5
6
  let n = e.getBoundingClientRect(), r = n.width, i = n.height, a = e.parentElement, o = 0, s = typeof getComputedStyle < "u";
6
7
  for (; (r === 0 || i === 0) && a && o < 3;) {
7
8
  let e = a.getBoundingClientRect();
@@ -24,7 +25,7 @@ function n(e, t) {
24
25
  }
25
26
  //#endregion
26
27
  //#region src/composables/glass/webgl/visibility.ts
27
- function r(e) {
28
+ function i(e) {
28
29
  let { canvas: t } = e, n = typeof document < "u";
29
30
  function r() {
30
31
  document.hidden ? e.suspend("tab-hidden") : e.resume("tab-hidden");
@@ -111,101 +112,101 @@ function r(e) {
111
112
  dispose: C
112
113
  };
113
114
  }
114
- var i = 2e3;
115
- function a(a) {
116
- let { canvas: o, buildContext: s } = a, c = a.respectReducedMotion ?? a.mode !== "capture", l = a.dprPolicy, u = a.composeIntersectionPark ?? !1;
117
- function d() {
118
- a.resize(n(o, l));
119
- }
120
- let f = d, p = /* @__PURE__ */ new Set();
121
- a.mode === "capture" && p.add("manual");
122
- let m = () => p.size === 0, h = 0, g = typeof performance < "u" ? performance.now() : 0, _ = null, v = !1, y = !1, b = c ? e() : null, x = b?.value ?? !1;
123
- function S() {
124
- if (!m() || !_) return;
125
- let e = (performance.now() - g) / 1e3, t = _.time ? _.time(e) : e;
126
- _.frame(t), h = !x && _.shouldContinue() ? requestAnimationFrame(S) : 0;
115
+ var a = 2e3;
116
+ function o(o) {
117
+ let { canvas: s, buildContext: c } = o, l = o.respectReducedMotion ?? o.mode !== "capture", u = o.dprPolicy, d = o.composeIntersectionPark ?? !1;
118
+ function f() {
119
+ o.resize(r(s, u));
127
120
  }
121
+ let p = f, m = /* @__PURE__ */ new Set();
122
+ o.mode === "capture" && m.add("manual");
123
+ let h = () => m.size === 0, g = 0, _ = typeof performance < "u" ? performance.now() : 0, v = null, y = !1, b = !1, x = l ? e() : null, S = x?.value ?? !1;
128
124
  function C() {
129
- !v || !m() || h || !_ || (x ? S() : h = requestAnimationFrame(S));
125
+ if (!h() || !v) return;
126
+ let e = (performance.now() - _) / 1e3, n = v.time ? v.time(e) : e;
127
+ v.frame(n), t(s), g = !S && v.shouldContinue() ? requestAnimationFrame(C) : 0;
130
128
  }
131
- function w(e) {
132
- e !== x && (x = e, e ? (cancelAnimationFrame(h), h = 0, v && m() && _ && S()) : (g = performance.now(), v && m() && _?.shouldContinue() && C()));
129
+ function w() {
130
+ !y || !h() || g || !v || (S ? C() : g = requestAnimationFrame(C));
133
131
  }
134
- let T = b ? t(b, w, { flush: "sync" }) : () => {};
135
- function E(e = "manual") {
136
- let t = m();
137
- p.add(e), t && !m() && (cancelAnimationFrame(h), h = 0);
132
+ function T(e) {
133
+ e !== S && (S = e, e ? (cancelAnimationFrame(g), g = 0, y && h() && v && C()) : (_ = performance.now(), y && h() && v?.shouldContinue() && w()));
138
134
  }
135
+ let E = x ? n(x, T, { flush: "sync" }) : () => {};
139
136
  function D(e = "manual") {
140
- let t = !m();
141
- p.delete(e), t && m() && v && _ && (g = performance.now() - 1e3, f(), S());
142
- }
143
- let O = r({
144
- canvas: o,
145
- suspend: E,
146
- resume: D,
147
- resize: f,
148
- wake: C,
149
- isArmed: () => v,
150
- hasHooks: () => _ !== null,
151
- isDisposed: () => y,
152
- isReducedMotion: () => x,
153
- composeIntersectionPark: u,
154
- intersectionRootMargin: a.intersectionRootMargin,
155
- revealBloom: a.revealBloom ?? !1
137
+ let t = h();
138
+ m.add(e), t && !h() && (cancelAnimationFrame(g), g = 0);
139
+ }
140
+ function O(e = "manual") {
141
+ let t = !h();
142
+ m.delete(e), t && h() && y && v && (_ = performance.now() - 1e3, p(), C());
143
+ }
144
+ let k = i({
145
+ canvas: s,
146
+ suspend: D,
147
+ resume: O,
148
+ resize: p,
149
+ wake: w,
150
+ isArmed: () => y,
151
+ hasHooks: () => v !== null,
152
+ isDisposed: () => b,
153
+ isReducedMotion: () => S,
154
+ composeIntersectionPark: d,
155
+ intersectionRootMargin: o.intersectionRootMargin,
156
+ revealBloom: o.revealBloom ?? !1
156
157
  });
157
- function k() {
158
- _ = s(), f();
159
- }
160
- let A = [], j = 0, M = !1, N = () => typeof performance < "u" ? performance.now() : Date.now();
161
- function P() {
162
- j &&= (clearTimeout(j), 0);
158
+ function A() {
159
+ v = c(), p();
163
160
  }
161
+ let j = [], M = 0, N = !1, P = () => typeof performance < "u" ? performance.now() : Date.now();
164
162
  function F() {
165
- v || y || (a.bindContextEvents?.(() => {
166
- y || M || (P(), j = setTimeout(() => {
167
- if (j = 0, !(y || M)) try {
168
- k(), a.onContextStateChange?.("restored"), m() && C();
163
+ M &&= (clearTimeout(M), 0);
164
+ }
165
+ function I() {
166
+ y || b || (o.bindContextEvents?.(() => {
167
+ b || N || (F(), M = setTimeout(() => {
168
+ if (M = 0, !(b || N)) try {
169
+ A(), o.onContextStateChange?.("restored"), h() && w();
169
170
  } catch (e) {
170
- _ = null, a.onContextError?.(e instanceof Error ? e : Error(String(e)));
171
+ v = null, o.onContextError?.(e instanceof Error ? e : Error(String(e)));
171
172
  }
172
173
  }, 100));
173
174
  }, () => {
174
- _ = null, cancelAnimationFrame(h), h = 0, a.onContextStateChange?.("lost"), P();
175
- let e = N();
176
- A.push(e), A = A.filter((t) => e - t <= i), A.length <= 1 && (M = !1), A.length > 3 && !M && (M = !0, a.onContextError?.(/* @__PURE__ */ Error("[Canvas] repeated context loss; rendering is parked")));
177
- }), O.presize(), k(), O.bindPark(), v = !0, g = performance.now(), O.armRevealBloom(), m() && (x ? S() : h = requestAnimationFrame(S)));
178
- }
179
- function I(e) {
180
- v || F(), _?.frame(e);
181
- }
182
- function L() {
183
- y = !0, cancelAnimationFrame(h), h = 0, P(), T(), O.dispose(), a.unbindContextEvents?.(), _?.teardown?.(), _ = null, p.clear();
184
- }
185
- return a.mode === "capture" && F(), {
186
- arm: F,
187
- presize: O.presize,
188
- suspend: E,
189
- resume: D,
190
- wake: C,
191
- renderAt: I,
192
- dispose: L,
175
+ v = null, cancelAnimationFrame(g), g = 0, o.onContextStateChange?.("lost"), F();
176
+ let e = P();
177
+ j.push(e), j = j.filter((t) => e - t <= a), j.length <= 1 && (N = !1), j.length > 3 && !N && (N = !0, o.onContextError?.(/* @__PURE__ */ Error("[Canvas] repeated context loss; rendering is parked")));
178
+ }), k.presize(), A(), k.bindPark(), y = !0, _ = performance.now(), k.armRevealBloom(), h() && (S ? C() : g = requestAnimationFrame(C)));
179
+ }
180
+ function L(e) {
181
+ y || I(), v && (v.frame(e), t(s));
182
+ }
183
+ function R() {
184
+ b = !0, cancelAnimationFrame(g), g = 0, F(), E(), k.dispose(), o.unbindContextEvents?.(), v?.teardown?.(), v = null, m.clear();
185
+ }
186
+ return o.mode === "capture" && I(), {
187
+ arm: I,
188
+ presize: k.presize,
189
+ suspend: D,
190
+ resume: O,
191
+ wake: w,
192
+ renderAt: L,
193
+ dispose: R,
193
194
  get armed() {
194
- return v;
195
+ return y;
195
196
  },
196
197
  get disposed() {
197
- return y;
198
+ return b;
198
199
  },
199
200
  get running() {
200
- return m();
201
+ return h();
201
202
  },
202
203
  get reducedMotion() {
203
- return x;
204
+ return S;
204
205
  },
205
206
  get contextHeld() {
206
- return M;
207
+ return N;
207
208
  }
208
209
  };
209
210
  }
210
211
  //#endregion
211
- export { n, a as t };
212
+ export { r as n, o as t };
@@ -1,5 +1,5 @@
1
1
  import { t as e } from "./class-names-FlXcvRRT.js";
2
- import { t } from "./useLiquidPress-h1scrPtP.js";
2
+ import { t } from "./useLiquidPress-D5mjZC6U.js";
3
3
  import { i as n } from "./dark-pONY3x93.js";
4
4
  import { computed as r, createElementBlock as i, createStaticVNode as a, defineComponent as o, mergeProps as s, openBlock as c, ref as l, unref as u, useAttrs as d, watchEffect as f } from "vue";
5
5
  //#region src/components/dark-mode-toggle/DarkModeToggle.vue?vue&type=script&setup=true&lang.ts