@mkbabb/glass-ui 3.10.0 → 3.10.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 (269) hide show
  1. package/dist/{CardAction-DuArVky-.js → CardAction-DrAcAV4d.js} +2 -2
  2. package/dist/{CommandShortcut-CefCj5mt.js → CommandShortcut-mV2e1aG6.js} +2 -2
  3. package/dist/{DataTable-CUHMukiQ.js → DataTable-C3E6jZ5B.js} +2 -2
  4. package/dist/{DialogContent-BRkT1cjP.js → DialogContent-BxaaafFi.js} +1 -1
  5. package/dist/{HoverPopover-2LOIW34a.js → HoverPopover-CDA_SaCe.js} +1 -1
  6. package/dist/{MetricBadge-BZVWIxNy.js → MetricBadge-idgrkqoP.js} +5 -7
  7. package/dist/{Notification-DLMhblXR.js → Notification-Cu0nN17_.js} +1 -1
  8. package/dist/{NumberFieldContent-BbLOh8RU.js → NumberFieldContent-CHEWghnY.js} +2 -2
  9. package/dist/{PopoverContent-BId6ggf_.js → PopoverContent-DpUvdYY-.js} +1 -1
  10. package/dist/{Progress-iEuD9pxG.js → Progress-BW-StFw2.js} +1 -1
  11. package/dist/{ScrollingText-BPP84wKo.js → ScrollingText-DruYCni_.js} +1 -1
  12. package/dist/{SelectScrollDownButton-T32cVFeM.js → SelectScrollDownButton-pirzjm--.js} +3 -3
  13. package/dist/{Switch-Ch-k3Rv-.js → Switch-DeAqg6pi.js} +1 -1
  14. package/dist/{TabsList-B8CVOQPC.js → TabsList-BAVzOZpg.js} +2 -2
  15. package/dist/{Toaster-1rYWrmAm.js → Toaster-CvuuW_y9.js} +49 -46
  16. package/dist/{ToggleGroupItem-Cev4pOVK.js → ToggleGroupItem-DtD37b4G.js} +4 -4
  17. package/dist/animated-digit.js +2 -2
  18. package/dist/api/index.d.ts +3 -4
  19. package/dist/api.js +1 -1
  20. package/dist/aurora.js +66 -66
  21. package/dist/{badge-CaoFJzRb.js → badge-NdCQMvvB.js} +1 -1
  22. package/dist/badge.js +1 -1
  23. package/dist/{button-DN39cGqL.js → button-DyiWFAOE.js} +12 -12
  24. package/dist/button.js +1 -1
  25. package/dist/canvas.js +2 -2
  26. package/dist/card.js +1 -1
  27. package/dist/carousel.js +5 -5
  28. package/dist/collapsible.js +1 -1
  29. package/dist/{color-C5ls_QF7.js → color-B65wWyQz.js} +9 -7
  30. package/dist/color.js +1 -1
  31. package/dist/command.js +1 -1
  32. package/dist/components/custom/aurora/constants/shaders/mediums.glsl.d.ts +1 -1
  33. package/dist/components/custom/aurora/constants/shaders/vangogh-medium.glsl.d.ts +1 -0
  34. package/dist/components/custom/constellation/Constellation.vue.d.ts +12 -0
  35. package/dist/components/custom/constellation/composables/createConstellationField.d.ts +35 -0
  36. package/dist/components/custom/constellation/composables/useConstellationPointer.d.ts +35 -0
  37. package/dist/components/custom/constellation/constants.d.ts +36 -0
  38. package/dist/components/custom/constellation/constellationDraw.d.ts +18 -0
  39. package/dist/components/custom/constellation/constellationField.d.ts +10 -151
  40. package/dist/components/custom/constellation/constellationInteraction.d.ts +102 -0
  41. package/dist/components/custom/constellation/index.d.ts +3 -1
  42. package/dist/components/custom/controls/DarkModeToggle.vue.d.ts +11 -0
  43. package/dist/components/custom/dock/DockTabButton.vue.d.ts +3 -4
  44. package/dist/components/custom/dock/GlassDock.vue.d.ts +2 -110
  45. package/dist/components/custom/dock/composables/dockMorphContext.d.ts +36 -0
  46. package/dist/components/custom/dock/composables/useDockMorphWindow.d.ts +15 -0
  47. package/dist/components/custom/dock/composables/useDockShellProps.d.ts +131 -0
  48. package/dist/components/custom/dock/composables/useLayerTransition.d.ts +44 -0
  49. package/dist/components/custom/dock/constants.d.ts +23 -0
  50. package/dist/components/custom/expandable-container/ExpandableContainer.vue.d.ts +0 -29
  51. package/dist/components/custom/fourier-field/index.d.ts +1 -1
  52. package/dist/components/custom/fourier-field/math.d.ts +17 -0
  53. package/dist/components/custom/fourier-field/presets.d.ts +54 -0
  54. package/dist/components/custom/goo-blob/composables/buildMetaballProgram.d.ts +18 -0
  55. package/dist/components/custom/goo-blob/composables/uploadBlobUniforms.d.ts +41 -0
  56. package/dist/components/custom/goo-blob/composables/useBlobPointer.d.ts +4 -3
  57. package/dist/components/custom/goo-blob/composables/useMetaballRenderer.d.ts +11 -8
  58. package/dist/components/custom/goo-blob/constants.d.ts +52 -0
  59. package/dist/components/custom/goo-blob/shaders/metaball-uniforms.glsl.d.ts +1 -0
  60. package/dist/components/custom/instrument-chassis/InstrumentChassis.vue.d.ts +2 -2
  61. package/dist/components/custom/metric-badge/MetricBadge.vue.d.ts +0 -8
  62. package/dist/components/custom/tabs/constants.d.ts +12 -0
  63. package/dist/components/custom/underline/GlassUnderline.vue.d.ts +84 -0
  64. package/dist/components/custom/underline/index.d.ts +2 -0
  65. package/dist/components/custom/underline/types.d.ts +56 -0
  66. package/dist/components/ui/drawer/Drawer.vue.d.ts +1 -0
  67. package/dist/components/ui/dropdown-menu/DropdownMenuSubContent.vue.d.ts +2 -2
  68. package/dist/components/ui/slider/index.d.ts +22 -19
  69. package/dist/components/ui/toast/use-toast.d.ts +2 -2
  70. package/dist/composables/color/index.d.ts +12 -0
  71. package/dist/composables/glass/useSpecularTracking.d.ts +12 -3
  72. package/dist/composables/motion/core/index.d.ts +0 -1
  73. package/dist/composables/motion/curves.d.ts +48 -0
  74. package/dist/composables/motion/index.d.ts +2 -0
  75. package/dist/composables/motion/springPresets.d.ts +33 -0
  76. package/dist/composables/motion/suite.d.ts +2 -0
  77. package/dist/composables/motion/useSpringMount.d.ts +1 -1
  78. package/dist/configurator.js +1 -1
  79. package/dist/confirm-dialog.js +2 -2
  80. package/dist/constellation.js +260 -225
  81. package/dist/controls.js +48 -14
  82. package/dist/dark.js +1 -1
  83. package/dist/data-table.js +1 -1
  84. package/dist/dialog.js +2 -2
  85. package/dist/dock.js +339 -327
  86. package/dist/dockContext-bho8B1A4.js +17 -0
  87. package/dist/{dropdown-menu-D77jX6Df.js → dropdown-menu-DVnQcA0E.js} +7 -4
  88. package/dist/dropdown-menu.js +1 -1
  89. package/dist/expandable-container.js +38 -61
  90. package/dist/forms.js +2 -2
  91. package/dist/fourier-field.js +137 -102
  92. package/dist/fourier-math.js +2 -2
  93. package/dist/glass-ui.css +1 -1
  94. package/dist/glass-ui.js +287 -209
  95. package/dist/goo-blob.js +243 -212
  96. package/dist/hover-popover.js +1 -1
  97. package/dist/icon-tooltip.js +1 -1
  98. package/dist/index.d.ts +0 -3
  99. package/dist/keyboard.js +1 -1
  100. package/dist/labeled-field.js +5 -5
  101. package/dist/{math-DTpRVC0e.js → math-BUU9hHID.js} +18 -2
  102. package/dist/metric-badge.js +1 -1
  103. package/dist/metric-stack.js +1 -1
  104. package/dist/motion-core.js +69 -70
  105. package/dist/motion-curves.d.ts +1 -0
  106. package/dist/motion-curves.js +130 -0
  107. package/dist/motion.js +38 -37
  108. package/dist/notification.js +1 -1
  109. package/dist/number-field.js +1 -1
  110. package/dist/popover.js +1 -1
  111. package/dist/progress.js +1 -1
  112. package/dist/pulse.js +1 -1
  113. package/dist/reactive.js +1 -1
  114. package/dist/scrolling-text.js +1 -1
  115. package/dist/search.js +6 -6
  116. package/dist/select.js +1 -1
  117. package/dist/{sheet-VZEtNFvO.js → sheet-ChSXcJpU.js} +1 -1
  118. package/dist/sheet.js +1 -1
  119. package/dist/{slider-CyzcxBoh.js → slider-sfl8gFDD.js} +4 -4
  120. package/dist/slider.js +1 -1
  121. package/dist/sortable-list.js +2 -2
  122. package/dist/springPresets-aRSm-4_k.js +40 -0
  123. package/dist/stacked-icons.js +6 -6
  124. package/dist/styles/animations.css +18 -74
  125. package/dist/styles/components.css +1 -1
  126. package/dist/styles/dock/layer-group.css +22 -0
  127. package/dist/styles/dock/layers.css +11 -1
  128. package/dist/styles/dock/morph.css +95 -19
  129. package/dist/styles/dock/shell.css +12 -0
  130. package/dist/styles/dock-controls.css +28 -31
  131. package/dist/styles/drawer.css +2 -0
  132. package/dist/styles/floating-panel.css +2 -0
  133. package/dist/styles/glass/a11y-fallback.css +245 -0
  134. package/dist/styles/glass/ladder.css +304 -0
  135. package/dist/styles/glass/material.css +238 -0
  136. package/dist/styles/glass/progress-rail.css +78 -0
  137. package/dist/styles/glass/squircle.css +66 -0
  138. package/dist/styles/glass/surfaces.css +306 -0
  139. package/dist/styles/glass-refract.css +2 -0
  140. package/dist/styles/glass.css +31 -1188
  141. package/dist/styles/hover-popover.css +2 -0
  142. package/dist/styles/index.css +24 -6
  143. package/dist/styles/instrument-chassis.css +4 -0
  144. package/dist/styles/paper.css +2 -68
  145. package/dist/styles/theme.css +13 -20
  146. package/dist/styles/tokens/color-radius.css +250 -0
  147. package/dist/styles/tokens/dark-arm.css +194 -0
  148. package/dist/styles/tokens/glass.css +413 -0
  149. package/dist/styles/tokens/light-dark.css +158 -0
  150. package/dist/styles/tokens/offsets-sizing.css +406 -0
  151. package/dist/styles/tokens/property-regs.css +169 -0
  152. package/dist/styles/tokens/scale-paper.css +361 -0
  153. package/dist/styles/tokens/scheme-motion.css +334 -0
  154. package/dist/styles/tokens/shadow.css +132 -0
  155. package/dist/styles/tokens.css +22 -2355
  156. package/dist/styles/typography.css +18 -6
  157. package/dist/styles/utilities/a11y-overrides.css +140 -0
  158. package/dist/styles/utilities/animate.css +26 -0
  159. package/dist/styles/utilities/base.css +365 -0
  160. package/dist/styles/utilities/btn.css +399 -0
  161. package/dist/styles/utilities/components.css +317 -0
  162. package/dist/styles/utilities.css +19 -1260
  163. package/dist/styles/view-transition.css +0 -51
  164. package/dist/switch.js +1 -1
  165. package/dist/tabs.js +98 -98
  166. package/dist/timeline.js +2 -2
  167. package/dist/toast.js +1 -1
  168. package/dist/toggle-group.js +1 -1
  169. package/dist/typewriter.js +1 -1
  170. package/dist/underline.d.ts +1 -0
  171. package/dist/underline.js +85 -0
  172. package/dist/{useAnimatedNumber-Bcpy5Etf.js → useAnimatedNumber-DfVgP4te.js} +1 -1
  173. package/dist/{useConfiguratorState-DxAqksK6.js → useConfiguratorState-BdQXh9ie.js} +1 -1
  174. package/dist/useSpecularTracking-DFK_fhpG.js +32 -0
  175. package/dist/useSpringMount-DXUzxBjV.js +108 -0
  176. package/dist/vReveal-CqaCz_mC.js +44 -0
  177. package/dist/watercolor-dot.js +2 -2
  178. package/package.json +34 -52
  179. package/src/styles/animations.css +18 -74
  180. package/src/styles/dock/layer-group.css +22 -0
  181. package/src/styles/dock/layers.css +11 -1
  182. package/src/styles/dock/morph.css +95 -19
  183. package/src/styles/dock/shell.css +12 -0
  184. package/src/styles/dock-controls.css +28 -31
  185. package/src/styles/glass/a11y-fallback.css +245 -0
  186. package/src/styles/glass/ladder.css +304 -0
  187. package/src/styles/glass/material.css +238 -0
  188. package/src/styles/glass/progress-rail.css +78 -0
  189. package/src/styles/glass/squircle.css +66 -0
  190. package/src/styles/glass/surfaces.css +306 -0
  191. package/src/styles/glass.css +31 -1188
  192. package/src/styles/index.css +24 -6
  193. package/src/styles/paper.css +2 -68
  194. package/src/styles/theme.css +13 -20
  195. package/src/styles/tokens/color-radius.css +250 -0
  196. package/src/styles/tokens/dark-arm.css +194 -0
  197. package/src/styles/tokens/glass.css +413 -0
  198. package/src/styles/tokens/light-dark.css +158 -0
  199. package/src/styles/tokens/offsets-sizing.css +406 -0
  200. package/src/styles/tokens/property-regs.css +169 -0
  201. package/src/styles/tokens/scale-paper.css +361 -0
  202. package/src/styles/tokens/scheme-motion.css +334 -0
  203. package/src/styles/tokens/shadow.css +132 -0
  204. package/src/styles/tokens.css +22 -2355
  205. package/src/styles/typography.css +18 -6
  206. package/src/styles/utilities/a11y-overrides.css +140 -0
  207. package/src/styles/utilities/animate.css +26 -0
  208. package/src/styles/utilities/base.css +365 -0
  209. package/src/styles/utilities/btn.css +399 -0
  210. package/src/styles/utilities/components.css +317 -0
  211. package/src/styles/utilities.css +19 -1260
  212. package/src/styles/view-transition.css +0 -51
  213. package/dist/DeckProgress-Dmk4_AKN.js +0 -23
  214. package/dist/InstrumentRail-CUJ05YVG.js +0 -44
  215. package/dist/components/custom/deck-progress/DeckProgress.vue.d.ts +0 -27
  216. package/dist/components/custom/deck-progress/index.d.ts +0 -2
  217. package/dist/components/custom/dialog-native/GlassDialogNative.vue.d.ts +0 -57
  218. package/dist/components/custom/dialog-native/index.d.ts +0 -1
  219. package/dist/components/custom/glass-panel/GlassPanel.vue.d.ts +0 -41
  220. package/dist/components/custom/glass-panel/index.d.ts +0 -2
  221. package/dist/components/custom/handmark/HandMark.vue.d.ts +0 -29
  222. package/dist/components/custom/handmark/brush.d.ts +0 -219
  223. package/dist/components/custom/handmark/freehand.d.ts +0 -69
  224. package/dist/components/custom/handmark/geometry.d.ts +0 -32
  225. package/dist/components/custom/handmark/index.d.ts +0 -21
  226. package/dist/components/custom/handmark/ink.d.ts +0 -11
  227. package/dist/components/custom/handmark/texture.d.ts +0 -39
  228. package/dist/components/custom/handmark/types.d.ts +0 -53
  229. package/dist/components/custom/handmark/useHandMark.d.ts +0 -66
  230. package/dist/components/custom/header-ribbon/HeaderRibbon.vue.d.ts +0 -31
  231. package/dist/components/custom/header-ribbon/index.d.ts +0 -2
  232. package/dist/components/custom/header-ribbon/types.d.ts +0 -7
  233. package/dist/components/custom/instrument-rail/InstrumentRail.vue.d.ts +0 -91
  234. package/dist/components/custom/instrument-rail/index.d.ts +0 -2
  235. package/dist/composables/motion/useRouteTransition.d.ts +0 -42
  236. package/dist/deck-progress.d.ts +0 -1
  237. package/dist/deck-progress.js +0 -2
  238. package/dist/dockContext-BKeIMmNk.js +0 -9
  239. package/dist/glass-panel.d.ts +0 -1
  240. package/dist/glass-panel.js +0 -44
  241. package/dist/handmark.d.ts +0 -1
  242. package/dist/handmark.js +0 -609
  243. package/dist/header-ribbon.d.ts +0 -1
  244. package/dist/header-ribbon.js +0 -63
  245. package/dist/instrument-rail.d.ts +0 -1
  246. package/dist/instrument-rail.js +0 -2
  247. package/dist/useGlassRenderer-D7YGOYiM.js +0 -69
  248. package/dist/useSpecularTracking-BVRZsRHA.js +0 -26
  249. package/dist/useSpringMount-BJSHcLl3.js +0 -113
  250. package/dist/useViewTransition-DaN5Zrox.js +0 -21
  251. package/dist/vReveal-zUIQk-rJ.js +0 -53
  252. /package/dist/{CollapsibleContent-CP9qF1v4.js → CollapsibleContent-Drow5WkV.js} +0 -0
  253. /package/dist/{DialogFooter-Gprw8H_A.js → DialogFooter-DufLHi0y.js} +0 -0
  254. /package/dist/{IconTooltip-Cus0fvK0.js → IconTooltip-BrQ5p181.js} +0 -0
  255. /package/dist/{Input-xuDwALQR.js → Input-B-F818RU.js} +0 -0
  256. /package/dist/{_plugin-vue_export-helper-ok8pgSl5.js → _plugin-vue_export-helper-DWghtRt7.js} +0 -0
  257. /package/dist/{compile-BOXjLUxu.js → compile-Ce_V55zi.js} +0 -0
  258. /package/dist/{constants-yKeKnE84.js → constants-C8NMonuo.js} +0 -0
  259. /package/dist/{presets-Dkdv55Gt.js → presets-1OhFpaIC.js} +0 -0
  260. /package/dist/{prng-D27-B3tK.js → prng-CjVgzjQT.js} +0 -0
  261. /package/dist/{resolveCanvasColor-BBiYfp8g.js → resolveCanvasColor-CRvVzOvP.js} +0 -0
  262. /package/dist/{useCanvas2D-ClrQuZtp.js → useCanvas2D-CSeH8h16.js} +0 -0
  263. /package/dist/{useGlobalDark-d6waty-X.js → useGlobalDark-D7R9OypB.js} +0 -0
  264. /package/dist/{useIntersectionPause-Cck5Uxk8.js → useIntersectionPause-DAdVPVp4.js} +0 -0
  265. /package/dist/{useInterval-Dsmqwi03.js → useInterval-D3USn0yc.js} +0 -0
  266. /package/dist/{useKeyboardShortcuts-CyIYrndH.js → useKeyboardShortcuts-i8tHd5WO.js} +0 -0
  267. /package/dist/{useScrollProgress-CffFGLa5.js → useScrollProgress-CcgmgMQt.js} +0 -0
  268. /package/dist/{useSortable-C8ReQ50P.js → useSortable-DnyGXKKY.js} +0 -0
  269. /package/dist/{useTextHighlight-CWEi25hf.js → useTextHighlight-B3b10W6r.js} +0 -0
@@ -1,5 +1,4 @@
1
- /** Reference width the `k` scale factor is keyed to (CSS px). */
2
- export declare const BASE_WIDTH = 1280;
1
+ export { BASE_WIDTH } from "./constants";
3
2
  export interface ConstellationNode {
4
3
  x: number;
5
4
  y: number;
@@ -71,15 +70,6 @@ export interface ConstellationWander {
71
70
  /** the random extra idle (ms) added per cadence (so the rhythm is not metronomic). */
72
71
  jitter: number;
73
72
  }
74
- /**
75
- * Auto-DRIFT cadence DEFAULTS (AY.W-CON1 source; tokenised in AY.W-CON2). The
76
- * `--constellation-wander-idle`/`-wander-jitter` tokens override these on mount via
77
- * `readInteractionConfig` (the SAME numeric `--constellation-*` cohort as the warp
78
- * spring + the well gains); a prop `{ minIdle, jitter }` still wins over the token.
79
- * The 8s/8s default rhythm re-targets the focal mark every 8–16s (the slides cadence).
80
- */
81
- export declare const DEFAULT_WANDER_IDLE = 8000;
82
- export declare const DEFAULT_WANDER_JITTER = 8000;
83
73
  /**
84
74
  * The warp-spring tuning the integrator reads (AY.W-CON2). Tokenised numeric (the
85
75
  * `--constellation-warp-*` cohort) so a consumer retunes the warp WITHOUT editing
@@ -206,6 +196,15 @@ export interface ConstellationProps {
206
196
  link?: number;
207
197
  /** Drift speed. Default 0.16. */
208
198
  speed?: number;
199
+ /**
200
+ * AY.W-COHERE E3 — the per-instance outer-envelope RECESSION knob (the aurora
201
+ * `opacityCeiling` / fourier `intensity` sibling — ONE recession vocabulary
202
+ * across the four live substrates). Scales the painted edge/node/web/ripple
203
+ * alpha OVER the mode-tuned `--constellation-alpha` base so the lattice can
204
+ * RECEDE behind content (0.4–0.6 in a hero). Default `1` is byte-identical to
205
+ * HEAD.
206
+ */
207
+ opacityCeiling?: number;
209
208
  /** Seed for a reproducible field (number or hashed string); omit for `Math.random`. */
210
209
  seed?: number | string;
211
210
  /** Steer-toward-cursor + tap ripples. Default true; auto-off under reduced-motion. */
@@ -261,31 +260,6 @@ export interface ConstellationProps {
261
260
  /** The skin seam — paints the consumer's focal mark on the live field. */
262
261
  drawOverlay?: (ctx: CanvasRenderingContext2D, field: ConstellationField, now: number) => void;
263
262
  }
264
- export declare const DEFAULT_PALETTE: ConstellationPalette;
265
- /**
266
- * Resolve the FULL neutral palette + legibility weights off a canvas's resolved
267
- * custom properties (AX.W17). The colors AND the alpha multipliers route through
268
- * the same `getComputedStyle` probe, so a dark-mode flip re-resolves BOTH the
269
- * `:root`/`.dark` color arms AND the per-mode alpha defaults in one read.
270
- */
271
- export declare function readPalette(canvas: HTMLCanvasElement): ConstellationPalette;
272
- /**
273
- * Read the NUMERIC interaction-tuning tokens (the warp spring + the gravity-well
274
- * gains) off a canvas's resolved custom properties — ONCE on mount (AY.W-CON2),
275
- * via `parseFloat`, NOT per-frame `getComputedStyle` (the hot loop stays clean).
276
- * Returns `{ warp, well }` configs the field carries; every member falls back to
277
- * the shipped default when the token is absent (an SSR / no-token mount reads the
278
- * byte-identical spring). The tokens are PLAIN numbers (`0.55`, `12000`), immune
279
- * to the W30 `light-dark()`-into-Canvas2D leak (they never reach a `fillStyle`).
280
- */
281
- export declare function readInteractionConfig(canvas: HTMLCanvasElement): {
282
- warp: ConstellationWarpConfig;
283
- well: ConstellationWellConfig;
284
- wander: {
285
- minIdle: number;
286
- jitter: number;
287
- };
288
- };
289
263
  /**
290
264
  * Seed `count` drifting nodes inside `w × h`. `rng` is a `() => number` in
291
265
  * `[0, 1)` (the glass-ui `mulberry32`/`Math.random`); a seeded `rng` lays out a
@@ -325,118 +299,3 @@ export declare function refitField(field: ConstellationField, prevW: number, pre
325
299
  * (a click-warp in flight pre-empts the cadence — `warpSettled` reports false).
326
300
  */
327
301
  export declare function stepField(field: ConstellationField, k: number, speed: number, pointer: ConstellationPointer | null, dt?: number, now?: number, rng?: () => number): void;
328
- /**
329
- * Advance the gravity-well one `dt` (AY.W-CON2). A transient held-pointer force
330
- * composed inside `stepField` (NO new rAF): ease `well.strength` toward
331
- * `well.target` (1 held / 0 released) at `cfg.ramp`/s; while active, add an
332
- * inverse-square pull toward the held point onto each node within `cfg.reach`
333
- * (the `max(d, soften)` no-singularity floor + the `cfg.maxSpeed` no-slingshot
334
- * clamp); ALWAYS ease every node's |v| back toward `speed` (the field-cools
335
- * invariant — so a released well re-settles). No-ops (entirely skipped) when
336
- * `field.well` is undefined → the default render is byte-identical to HEAD.
337
- *
338
- * `dt` is clamped to {@link WARP_DT_CLAMP} (the same park-resume guard the warp
339
- * uses) so a tab-throttle gap cannot slingshot the field in one giant step.
340
- */
341
- export declare function stepWell(field: ConstellationField, k: number, speed: number, dt: number): void;
342
- /**
343
- * Warp spring tuning DEFAULTS — gentle critically-damped (no overshoot on a focal
344
- * mark). The `--constellation-warp-response`/`-zeta` tokens override these on mount
345
- * via `field.warpCfg` (AY.W-CON2); these stay the byte-identical fallback.
346
- *
347
- * `WARP_RESPONSE` is the keyframes.js `(response, dampingFraction)` model's ANGULAR
348
- * PERIOD (the SwiftUI `.spring(response:)` axis), `ω₀ = 2π/response` — NOT a
349
- * settle-duration. At ζ=1 the 2%-settle lands at `t₂ ≈ 5.83/ω₀ ≈ 0.93·response`
350
- * (the `(1 + ω₀t)e^(−ω₀t)` critically-damped envelope); the shipped 0.55 settles
351
- * at ≈0.51s. This is the AY.W-CON2 ω-reconcile: the engine keeps the keyframes.js
352
- * `ω₀ = 2π/response` convention (the shared house model — `regen-spring-tokens.mjs`,
353
- * `keyframes.d.ts:860-882`) and mints NO second ω formula; the SEMANTIC honesty
354
- * (period, not settle) lives in this doc + the token comment + the settle-time unit
355
- * assertion, so a consumer setting the token gets the documented behaviour at ANY ζ.
356
- */
357
- export declare const WARP_RESPONSE = 0.55;
358
- export declare const WARP_ZETA = 1;
359
- /**
360
- * Gravity-well tuning DEFAULTS (AY.W-CON2). The `--constellation-well-*` tokens
361
- * override these on mount via `field.well.cfg`; these stay the fallback. SET by the
362
- * §6 egg-live π readback (the field-perturbs-then-cools capture is the binding
363
- * truth) — a moderate gain over a generous reach, a brisk ramp, a tight no-slingshot
364
- * speed cap, and the singularity-soften floor.
365
- */
366
- export declare const DEFAULT_WELL_CONFIG: ConstellationWellConfig;
367
- /**
368
- * The nearest DRIFTING node to `(px, py)` in canvas-local px — a linear O(count)
369
- * min-d² scan (count 64 default — negligible; matches the O(count²) edge pass).
370
- * "Lattice point" = the nearest drifting NODE (the constellation has NO fixed
371
- * lattice). `excludeIdx` drops a node from the candidate set (the focal node
372
- * excludes ITSELF, so a cursor-on-focal warp no-ops). Returns `-1` if no
373
- * eligible node exists (empty field, or only the excluded node).
374
- */
375
- export declare function nearestNode(field: ConstellationField, px: number, py: number, excludeIdx?: number): number;
376
- /**
377
- * Advance the focal-node warp spring one `dt` (seconds). A per-axis 2nd-order
378
- * critically-damped integrator over `field.warp.{x,y}` toward the LIVE position
379
- * of `field.nodes[field.warp.targetIdx]` — re-read EACH frame, so the spring
380
- * CHASES a drifting target and arrives ON it (the identity-ride). No-ops when no
381
- * warp is active (`targetIdx < 0`). `dt` is clamped to {@link WARP_DT_CLAMP} so a
382
- * tab-throttle / offscreen-park-resume gap cannot teleport the mark.
383
- *
384
- * x += v·dt ; v += (−2ζω·v − ω²·(x − target))·dt
385
- *
386
- * Reads `(response, ζ)` from `field.warpCfg` (the tokenised override — AY.W-CON2),
387
- * falling back to the shipped `WARP_RESPONSE`/`WARP_ZETA` defaults. `ω = 2π/response`
388
- * is the keyframes.js `(response, dampingFraction)` convention (the SHARED house
389
- * model — `ω₀` is the angular frequency, `response` its ANGULAR PERIOD, NOT a
390
- * settle-duration; at ζ=1 the 2%-settle is `t₂ ≈ 5.83/ω₀ ≈ 0.93·response`). NO
391
- * second ω formula is minted (the ω-reconcile). NOT its rAF — the FORBID-useSpring
392
- * contract (a second rAF would defeat the parked-substrate one-path freeze).
393
- */
394
- export declare function warpStep(field: ConstellationField, dt: number): void;
395
- /**
396
- * Point the warp at a node INDEX (the live target-source seam). The focal node
397
- * re-points to `idx`; the spring chases `nodes[idx]`'s LIVE position FROM the
398
- * focal mark's CURRENT position (`warp.{x,y}`) — a continuous spring-eased path,
399
- * never a snap. The component seeds `warp.{x,y}` at field-center on first layout,
400
- * so even the first warp springs from a real start point. `idx < 0` clears the
401
- * warp (the focal mark is removed). Re-pointing does NOT zero the velocity, so a
402
- * mid-flight re-target curves smoothly toward the new node.
403
- */
404
- export declare function setWarpTarget(field: ConstellationField, idx: number): void;
405
- /**
406
- * Warp the focal node to the nearest drifting node to a canvas-LOCAL px point
407
- * (the `warpTo(point)` primitive). The DEGENERATE case — the click's UNCONSTRAINED
408
- * nearest node is already the current focal (cursor on/closest to the focal mark)
409
- * — NO-OPS (returns the current focal; a click on yourself does not re-warp). Any
410
- * OTHER click re-points to the nearest node, with the focal EXCLUDED from the
411
- * candidate set (you never re-warp to yourself; the next-nearest wins). Returns
412
- * the chosen node index, or `-1` when no eligible node exists. The component's
413
- * `warpTo(clientX, clientY)` sugar maps client→local px via `toLocal` first.
414
- */
415
- export declare function warpTo(field: ConstellationField, px: number, py: number): number;
416
- /**
417
- * Is the warp spring ARRIVED on its target (AY.W-CON1)? True when there is no
418
- * active target (`targetIdx < 0`) OR the focal's gap to its LIVE target node is
419
- * within {@link WARP_SETTLE_BAND}. A click-warp in flight (hundreds of px out)
420
- * reports NOT arrived, so a user click always PRE-EMPTS the auto-drift cadence
421
- * (the wander only re-targets a spring that has reached its current node). The
422
- * gate is POSITION-only by design — a critically-damped spring tracking a drifting
423
- * node carries a non-zero steady-state velocity forever, so a velocity term would
424
- * never clear on a live field.
425
- */
426
- export declare function warpSettled(field: ConstellationField): boolean;
427
- /**
428
- * Pick a random eligible node index for the auto-drift re-target (AY.W-CON1) —
429
- * any node EXCEPT the current `focalIndex` (so the focal actually MOVES). `rng`
430
- * is the seeded `() => number` in `[0, 1)`. A degenerate field (≤1 node, or only
431
- * the current focal) returns the current focal, which `setWarpTarget` no-ops
432
- * cleanly (no crash, no jump).
433
- */
434
- export declare function pickWanderTarget(field: ConstellationField, rng: () => number): number;
435
- /** Pass 1 — hairline edges between any two nodes within `link` px (alpha falls off with distance). */
436
- export declare function drawEdges(ctx: CanvasRenderingContext2D, field: ConstellationField, link: number, palette: ConstellationPalette): void;
437
- /** Pass 2 — ambient node dots. */
438
- export declare function drawNodes(ctx: CanvasRenderingContext2D, field: ConstellationField, palette: ConstellationPalette): void;
439
- /** Pass 3 — the cursor joins the web: faint links to nodes within reach + a soft cursor node. */
440
- export declare function drawPointerWeb(ctx: CanvasRenderingContext2D, field: ConstellationField, link: number, palette: ConstellationPalette, pointer: ConstellationPointer | null): void;
441
- /** Pass 4 — tap ripples: expanding rings that fade over ~0.9s; consumed entries are spliced. */
442
- export declare function drawRipples(ctx: CanvasRenderingContext2D, field: ConstellationField, now: number, ripples: ConstellationRipple[], palette: ConstellationPalette): void;
@@ -0,0 +1,102 @@
1
+ import type { ConstellationField, ConstellationWarpConfig, ConstellationWellConfig } from "./constellationField";
2
+ import { DEFAULT_WANDER_IDLE, DEFAULT_WANDER_JITTER, DEFAULT_WELL_CONFIG, WARP_RESPONSE, WARP_ZETA } from "./constants";
3
+ export { DEFAULT_WANDER_IDLE, DEFAULT_WANDER_JITTER, DEFAULT_WELL_CONFIG, WARP_RESPONSE, WARP_ZETA };
4
+ /**
5
+ * Read the NUMERIC interaction-tuning tokens (the warp spring + the gravity-well
6
+ * gains) off a canvas's resolved custom properties — ONCE on mount (AY.W-CON2),
7
+ * via `parseFloat`, NOT per-frame `getComputedStyle` (the hot loop stays clean).
8
+ * Returns `{ warp, well }` configs the field carries; every member falls back to
9
+ * the shipped default when the token is absent (an SSR / no-token mount reads the
10
+ * byte-identical spring). The tokens are PLAIN numbers (`0.55`, `12000`), immune
11
+ * to the W30 `light-dark()`-into-Canvas2D leak (they never reach a `fillStyle`).
12
+ */
13
+ export declare function readInteractionConfig(canvas: HTMLCanvasElement): {
14
+ warp: ConstellationWarpConfig;
15
+ well: ConstellationWellConfig;
16
+ wander: {
17
+ minIdle: number;
18
+ jitter: number;
19
+ };
20
+ };
21
+ /**
22
+ * Advance the gravity-well one `dt` (AY.W-CON2). A transient held-pointer force
23
+ * composed inside `stepField` (NO new rAF): ease `well.strength` toward
24
+ * `well.target` (1 held / 0 released) at `cfg.ramp`/s; while active, add an
25
+ * inverse-square pull toward the held point onto each node within `cfg.reach`
26
+ * (the `max(d, soften)` no-singularity floor + the `cfg.maxSpeed` no-slingshot
27
+ * clamp); ALWAYS ease every node's |v| back toward `speed` (the field-cools
28
+ * invariant — so a released well re-settles). No-ops (entirely skipped) when
29
+ * `field.well` is undefined → the default render is byte-identical to HEAD.
30
+ *
31
+ * `dt` is clamped to {@link WARP_DT_CLAMP} (the same park-resume guard the warp
32
+ * uses) so a tab-throttle gap cannot slingshot the field in one giant step.
33
+ */
34
+ export declare function stepWell(field: ConstellationField, k: number, speed: number, dt: number): void;
35
+ /**
36
+ * The nearest DRIFTING node to `(px, py)` in canvas-local px — a linear O(count)
37
+ * min-d² scan (count 64 default — negligible; matches the O(count²) edge pass).
38
+ * "Lattice point" = the nearest drifting NODE (the constellation has NO fixed
39
+ * lattice). `excludeIdx` drops a node from the candidate set (the focal node
40
+ * excludes ITSELF, so a cursor-on-focal warp no-ops). Returns `-1` if no
41
+ * eligible node exists (empty field, or only the excluded node).
42
+ */
43
+ export declare function nearestNode(field: ConstellationField, px: number, py: number, excludeIdx?: number): number;
44
+ /**
45
+ * Advance the focal-node warp spring one `dt` (seconds). A per-axis 2nd-order
46
+ * critically-damped integrator over `field.warp.{x,y}` toward the LIVE position
47
+ * of `field.nodes[field.warp.targetIdx]` — re-read EACH frame, so the spring
48
+ * CHASES a drifting target and arrives ON it (the identity-ride). No-ops when no
49
+ * warp is active (`targetIdx < 0`). `dt` is clamped to {@link WARP_DT_CLAMP} so a
50
+ * tab-throttle / offscreen-park-resume gap cannot teleport the mark.
51
+ *
52
+ * x += v·dt ; v += (−2ζω·v − ω²·(x − target))·dt
53
+ *
54
+ * Reads `(response, ζ)` from `field.warpCfg` (the tokenised override — AY.W-CON2),
55
+ * falling back to the shipped `WARP_RESPONSE`/`WARP_ZETA` defaults. `ω = 2π/response`
56
+ * is the keyframes.js `(response, dampingFraction)` convention (the SHARED house
57
+ * model — `ω₀` is the angular frequency, `response` its ANGULAR PERIOD, NOT a
58
+ * settle-duration; at ζ=1 the 2%-settle is `t₂ ≈ 5.83/ω₀ ≈ 0.93·response`). NO
59
+ * second ω formula is minted (the ω-reconcile). NOT its rAF — the FORBID-useSpring
60
+ * contract (a second rAF would defeat the parked-substrate one-path freeze).
61
+ */
62
+ export declare function warpStep(field: ConstellationField, dt: number): void;
63
+ /**
64
+ * Point the warp at a node INDEX (the live target-source seam). The focal node
65
+ * re-points to `idx`; the spring chases `nodes[idx]`'s LIVE position FROM the
66
+ * focal mark's CURRENT position (`warp.{x,y}`) — a continuous spring-eased path,
67
+ * never a snap. The component seeds `warp.{x,y}` at field-center on first layout,
68
+ * so even the first warp springs from a real start point. `idx < 0` clears the
69
+ * warp (the focal mark is removed). Re-pointing does NOT zero the velocity, so a
70
+ * mid-flight re-target curves smoothly toward the new node.
71
+ */
72
+ export declare function setWarpTarget(field: ConstellationField, idx: number): void;
73
+ /**
74
+ * Warp the focal node to the nearest drifting node to a canvas-LOCAL px point
75
+ * (the `warpTo(point)` primitive). The DEGENERATE case — the click's UNCONSTRAINED
76
+ * nearest node is already the current focal (cursor on/closest to the focal mark)
77
+ * — NO-OPS (returns the current focal; a click on yourself does not re-warp). Any
78
+ * OTHER click re-points to the nearest node, with the focal EXCLUDED from the
79
+ * candidate set (you never re-warp to yourself; the next-nearest wins). Returns
80
+ * the chosen node index, or `-1` when no eligible node exists. The component's
81
+ * `warpTo(clientX, clientY)` sugar maps client→local px via `toLocal` first.
82
+ */
83
+ export declare function warpTo(field: ConstellationField, px: number, py: number): number;
84
+ /**
85
+ * Is the warp spring ARRIVED on its target (AY.W-CON1)? True when there is no
86
+ * active target (`targetIdx < 0`) OR the focal's gap to its LIVE target node is
87
+ * within {@link WARP_SETTLE_BAND}. A click-warp in flight (hundreds of px out)
88
+ * reports NOT arrived, so a user click always PRE-EMPTS the auto-drift cadence
89
+ * (the wander only re-targets a spring that has reached its current node). The
90
+ * gate is POSITION-only by design — a critically-damped spring tracking a drifting
91
+ * node carries a non-zero steady-state velocity forever, so a velocity term would
92
+ * never clear on a live field.
93
+ */
94
+ export declare function warpSettled(field: ConstellationField): boolean;
95
+ /**
96
+ * Pick a random eligible node index for the auto-drift re-target (AY.W-CON1) —
97
+ * any node EXCEPT the current `focalIndex` (so the focal actually MOVES). `rng`
98
+ * is the seeded `() => number` in `[0, 1)`. A degenerate field (≤1 node, or only
99
+ * the current focal) returns the current focal, which `setWarpTarget` no-ops
100
+ * cleanly (no crash, no jump).
101
+ */
102
+ export declare function pickWanderTarget(field: ConstellationField, rng: () => number): number;
@@ -1,3 +1,5 @@
1
1
  export { default as Constellation } from "./Constellation.vue";
2
- export { seedField, stepField, stepWell, refitField, readPalette, drawEdges, drawNodes, drawPointerWeb, drawRipples, nearestNode, readInteractionConfig, warpStep, warpTo, setWarpTarget, warpSettled, pickWanderTarget, BASE_WIDTH, DEFAULT_PALETTE, DEFAULT_WELL_CONFIG, DEFAULT_WANDER_IDLE, DEFAULT_WANDER_JITTER, WARP_RESPONSE, WARP_ZETA, } from "./constellationField";
2
+ export { seedField, stepField, refitField, BASE_WIDTH, } from "./constellationField";
3
+ export { stepWell, nearestNode, readInteractionConfig, warpStep, warpTo, setWarpTarget, warpSettled, pickWanderTarget, DEFAULT_WELL_CONFIG, DEFAULT_WANDER_IDLE, DEFAULT_WANDER_JITTER, WARP_RESPONSE, WARP_ZETA, } from "./constellationInteraction";
4
+ export { readPalette, drawEdges, drawNodes, drawPointerWeb, drawRipples, DEFAULT_PALETTE, } from "./constellationDraw";
3
5
  export type { ConstellationNode, ConstellationRipple, ConstellationPointer, ConstellationPalette, ConstellationField, ConstellationWarp, ConstellationWarpConfig, ConstellationWander, ConstellationWell, ConstellationWellConfig, ConstellationProps, } from "./constellationField";
@@ -13,11 +13,22 @@ type __VLS_Props = {
13
13
  * @default false
14
14
  */
15
15
  disableTransitions?: boolean;
16
+ /**
17
+ * Opt-in slow-ECLIPSE register: a LONG-PRESS (vs the normal click) flips
18
+ * the mode through an indulgent, stretched sun↔moon cross-fade — the
19
+ * `--toggle-eclipse-duration` (≈1600ms) over the default 750ms. The bare
20
+ * `@click` flip is UNCHANGED (the default-path canary). Under
21
+ * `prefers-reduced-motion: reduce` the long-press flips INSTANTLY (no
22
+ * eclipse). Default false — the toggle behaves exactly as before.
23
+ * @default false
24
+ */
25
+ eclipse?: boolean;
16
26
  };
17
27
  declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {
18
28
  size: DarkModeToggleSize;
19
29
  passive: boolean;
20
30
  disableTransitions: boolean;
31
+ eclipse: boolean;
21
32
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
22
33
  declare const _default: typeof __VLS_export;
23
34
  export default _default;
@@ -12,10 +12,9 @@ import { type HTMLAttributes } from "vue";
12
12
  *
13
13
  * K.W6 Lane B — when the consumer attaches `data-tier="primary"`, the
14
14
  * button composes the canonical `btn-audacious` utility (the lifted
15
- * disco-grain + specular-highlight recipe at `utilities.css`; the
16
- * sparkle-sweep star was excised at D6 — the gold identity now rides the
17
- * `--gold-rim` gilt edge). `dock.css` retains the dock-local
18
- * phase-tinting + structural shell on top of the canonical recipe.
15
+ * disco-grain + sparkle-sweep + specular-highlight recipe at
16
+ * `utilities.css`). `dock.css` retains the dock-local phase-tinting +
17
+ * structural shell on top of the canonical recipe.
19
18
  */
20
19
  type __VLS_Props = {
21
20
  as?: string;
@@ -1,111 +1,3 @@
1
- type DockDensity = "compact" | "comfortable" | "spacious" | "audacious";
2
- interface DockCommonProps {
3
- fitContent?: boolean;
4
- position?: "fixed" | "inline" | "sticky";
5
- alwaysExpanded?: boolean;
6
- /**
7
- * Corner treatment.
8
- * `"pill"` — the stadium silhouette (default).
9
- * `"rounded"` — a finite rounded radius (`--radius-xl`).
10
- * `"card"` — the AW.W3b big-dock card shell: a finite concentric
11
- * radius (`--dock-card-radius`, default `--radius-3xl`)
12
- * ABOVE 2xl, below pill — does NOT collapse to a stadium.
13
- * Collapsed it returns to a pill; the pill↔card swap
14
- * morphs on the `--dock-motion-resize` spring. AX.W56's
15
- * squircle policy applies `corner-shape:
16
- * var(--corner-shape-bigdock)` here under `@supports
17
- * (corner-shape: superellipse(2))` — the big-dock is the ONE
18
- * surface where the superellipse reads (cards/pills stay
19
- * round); the border-radius arc is the cross-engine contract.
20
- *
21
- * `"pill"`/`"rounded"` previously bound ONLY under the vertical rail
22
- * variant — on a horizontal dock the prop silently no-op'd. AW.W3b adds
23
- * the horizontal-root shape rules (closing that documented-but-dead prop),
24
- * so `shape` now paints on a horizontal dock too.
25
- */
26
- shape?: "pill" | "rounded" | "card";
27
- /**
28
- * Layout axis of the dock. `"horizontal"` (default) lays items out
29
- * left-to-right and animates `width`; `"vertical"` lays items out
30
- * top-to-bottom and animates `height`. IGNORED under `variant="rail"` /
31
- * `"instrument-strip"` (those force vertical by construction).
32
- */
33
- orientation?: "horizontal" | "vertical";
34
- /**
35
- * Density controls dock padding, gaps, layer height, and inherited
36
- * dock control sizing. Root CSS variables can override each density.
37
- */
38
- density?: DockDensity;
39
- /**
40
- * Overflow strategy when the expanded content exceeds the dock's
41
- * axis cap (`--dock-max-inline-size` horizontally,
42
- * `--dock-max-block-size` vertically). The ONE knob governing every
43
- * overflow behaviour (AT.W7-dock-a clean break — collapsed from the
44
- * prior `wrap` boolean + `overflow` pair + `containerName` clip-lift,
45
- * which all touched overflow divergently).
46
- * `"grow"` — content grows to fit then overflows visibly past
47
- * the cap (the default; nothing clips or scrolls).
48
- * `"wrap"` — expanded content wraps to multiple rows via CONTENT-DRIVEN
49
- * intrinsic flex-wrap (the `.dock-overflow-wrap` recipe). The
50
- * dock shrink-wraps to content and caps that intrinsic width
51
- * at `max-inline-size: var(--dock-max-inline-size)`, so the row
52
- * reflows to N rows EXACTLY when its intrinsic width exceeds
53
- * the cap — at ANY viewport width — and collapses to one row
54
- * when it fits (no viewport breakpoint). The wrapped multi-row silhouette lifts
55
- * onto the card/floating shadow tier as the dock expands.
56
- * HORIZONTAL-ONLY: a vertical rail grows-to-fit + clamps via
57
- * `--dock-max-block-size` (its own overflow story), so the
58
- * `.dock-overflow-wrap` class is not emitted for a vertical
59
- * orientation.
60
- * `"scroll"` — the dock becomes the scroll port. Horizontal docks
61
- * scroll the active layer on the inline axis
62
- * (`.dock-scroll-x`); vertical rails scroll on the
63
- * block axis (`.dock-scroll-y`), keeping the
64
- * `max-block-size` cap. The rounded pill masks the
65
- * scroll edge; the scrollbar is hidden. The axis is
66
- * chosen automatically from `orientation`.
67
- */
68
- overflow?: "grow" | "wrap" | "scroll";
69
- /**
70
- * When set, the dock root establishes an inline-size container query
71
- * subject (`container-type: inline-size; container-name: <value>`) so
72
- * descendants can query the named container via `@container <value>
73
- * (...)` rules. ORTHOGONAL to the `overflow` clip: opting into a
74
- * container subject does NOT silently change the dock's clip shell
75
- * (AT.W7-dock-a — the prior clip-lift was folded out; use
76
- * `overflow="wrap"` to allow multi-line content).
77
- *
78
- * T.B audit §1.3 cornerstone: the cluster's container subject must
79
- * live on the dock primitive, never on a descendant whose intrinsic
80
- * size the dock relies on.
81
- */
82
- containerName?: string;
83
- }
84
- interface DockVariantProps extends DockCommonProps {
85
- variant?: "dock";
86
- /** Idle-collapse delay in ms (default 2000). DOCK-ONLY — a rail never collapses. */
87
- collapseDelay?: number;
88
- /** Start in the collapsed state (default true). DOCK-ONLY — a rail is always expanded. */
89
- startCollapsed?: boolean;
90
- /**
91
- * In-cap arrangement. `"linear"` (default) lays the active layer out as a
92
- * linear row/column. `"grid"` makes the active layer a self-wrapping tile
93
- * grid (Launchpad/Stage-Manager track symmetry — `auto-fill` columns of
94
- * `--dock-tile-min`). ORTHOGONAL to `overflow` (the OVER-cap strategy):
95
- * `layout` is the IN-cap arrangement.
96
- *
97
- * Hard contract: a `layout="grid"` dock is `alwaysExpanded` (a 2D panel
98
- * does not read as a collapsible pill, and no width morph means no
99
- * per-frame grid reflow). The canonical pairing is
100
- * `shape="card" layout="grid"` (the props stay independent — no
101
- * auto-implication of `shape`). DOCK-ONLY — the grid is a horizontal big-dock
102
- * arrangement, never a rail's.
103
- */
104
- layout?: "linear" | "grid";
105
- }
106
- interface DockRailProps extends DockCommonProps {
107
- variant: "rail" | "instrument-strip";
108
- }
109
1
  declare var __VLS_1: {}, __VLS_3: {}, __VLS_5: {}, __VLS_7: {}, __VLS_14: {};
110
2
  type __VLS_Slots = {} & {
111
3
  persistent?: (props: typeof __VLS_1) => any;
@@ -118,7 +10,7 @@ type __VLS_Slots = {} & {
118
10
  } & {
119
11
  collapsed?: (props: typeof __VLS_14) => any;
120
12
  };
121
- declare const __VLS_base: import("vue").DefineComponent<DockVariantProps | DockRailProps, {
13
+ declare const __VLS_base: import("vue").DefineComponent<import("./composables/useDockShellProps").DockVariantProps | import("./composables/useDockShellProps").DockRailProps, {
122
14
  expanded: import("vue").Ref<boolean, boolean>;
123
15
  isPinned: import("vue").Ref<boolean, boolean>;
124
16
  isHeld: import("vue").ComputedRef<boolean>;
@@ -127,7 +19,7 @@ declare const __VLS_base: import("vue").DefineComponent<DockVariantProps | DockR
127
19
  collapse: () => void;
128
20
  keepOpen: () => void;
129
21
  release: () => void;
130
- }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<DockVariantProps | DockRailProps> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
22
+ }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("./composables/useDockShellProps").DockVariantProps | import("./composables/useDockShellProps").DockRailProps> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
131
23
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
132
24
  declare const _default: typeof __VLS_export;
133
25
  export default _default;
@@ -1,4 +1,40 @@
1
1
  import type { Ref } from "vue";
2
+ /**
3
+ * AX.W02 — ONE morph orchestrator per dock. The dock is a single morph stack
4
+ * whose active "layer" is `(expandedState × activePane)`: the outer
5
+ * collapse↔expand swap and the inner `<DockLayerGroup>` pane swaps are
6
+ * transitions in the SAME group — ONE spring, ONE scalar (`--dock-morph-t`,
7
+ * established by W01), ONE clock. No second engine.
8
+ *
9
+ * Re-derived from first principles on W01's settled single-scalar substrate:
10
+ * - `--dock-morph-t` is written to the `.glass-dock` root and INHERITS to every
11
+ * descendant (dock.css `@property … inherits:true`), so ONE spring writing
12
+ * that one scalar drives EVERY registered container's size calc at once.
13
+ * - Each morphing container carries its OWN `--dock-morph-from`/`--dock-morph-to`
14
+ * px span (the allowed one-time FLIP measurement) and interpolates it against
15
+ * the shared scalar — `from + (to − from) · t`. So a simultaneous
16
+ * collapse + pane-swap reads as one continuous spring: the box, the nested
17
+ * stack, and every child stagger ramp on the same `t`.
18
+ *
19
+ * The orchestrator OWNS one `SpringProgress`. The OUTER collapse↔expand pair
20
+ * registers as a target; a NESTED `<DockLayerGroup>` registers a SECOND target
21
+ * instead of minting its own `useLayerTransition` engine. A re-toggle mid-flight
22
+ * re-bases the live solver onto the new span from its current velocity (the iOS
23
+ * interruptible-physics contract W01 keeps), so even an interrupted morph stays
24
+ * one continuous trajectory.
25
+ *
26
+ * This is the dock-flavored first instance of the general `MorphGroup` /
27
+ * `GlassEffectContainer` facility (the iOS-26 Liquid-Glass corpus, facet 26 —
28
+ * the `provideMorphGroup` two-part seam: a per-element driver + a provide/inject
29
+ * orchestrator). AX.W42 generalizes it; W02 establishes the seam it builds on.
30
+ *
31
+ * LIGHT-surface only: `SpringProgress` owns its own rAF via `.play(onFrame)` and
32
+ * carries no static value.js edge — never import `AnimationGroup` / `./engine`
33
+ * (that pulls value.js into the dock bundle).
34
+ *
35
+ * The `DOCK_SPRING` tuning this orchestrator drives is the ONE authority shared with
36
+ * `useLayerTransition` — it lives in `../constants` (the feature-dir constants home).
37
+ */
2
38
  export interface DockMorphGroupRegistration {
3
39
  /** The container element owning this group's grid-stacked panes. */
4
40
  containerEl: Ref<HTMLElement | null>;
@@ -0,0 +1,15 @@
1
+ import { type Ref } from "vue";
2
+ /** The morph-window handlers the GlassDock SFC wires. */
3
+ export interface DockMorphWindow {
4
+ markTransitioning: () => void;
5
+ onDockTransitionDone: (event: TransitionEvent) => void;
6
+ clearTransitionTimer: () => void;
7
+ }
8
+ /**
9
+ * Own the `isTransitioning` flag's morph-window lifecycle. `markTransitioning`
10
+ * (every `visualExpanded` flip) bumps a private generation so any in-flight
11
+ * morph's pending timer / `transitionend` self-cancels (the A→B→A no-skip /
12
+ * no-queue invariant); `onDockTransitionDone` resolves the flag on a resize-morph
13
+ * property finishing. Clears its timer on unmount.
14
+ */
15
+ export declare function useDockMorphWindow(dockEl: Ref<HTMLElement | null>, isTransitioning: Ref<boolean>): DockMorphWindow;