@mkbabb/glass-ui 3.10.1 → 3.11.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 (279) hide show
  1. package/dist/{CardAction-DrAcAV4d.js → CardAction-DuArVky-.js} +2 -2
  2. package/dist/{CommandShortcut-mV2e1aG6.js → CommandShortcut-CefCj5mt.js} +2 -2
  3. package/dist/{DataTable-C3E6jZ5B.js → DataTable-CUHMukiQ.js} +2 -2
  4. package/dist/DeckProgress-Dmk4_AKN.js +23 -0
  5. package/dist/{DialogContent-BxaaafFi.js → DialogContent-BRkT1cjP.js} +1 -1
  6. package/dist/{HoverPopover-CDA_SaCe.js → HoverPopover-2LOIW34a.js} +1 -1
  7. package/dist/InstrumentRail-CUJ05YVG.js +44 -0
  8. package/dist/{MetricBadge-idgrkqoP.js → MetricBadge-BZVWIxNy.js} +7 -5
  9. package/dist/{Notification-Cu0nN17_.js → Notification-DLMhblXR.js} +1 -1
  10. package/dist/{NumberFieldContent-CHEWghnY.js → NumberFieldContent-BbLOh8RU.js} +2 -2
  11. package/dist/{PopoverContent-DpUvdYY-.js → PopoverContent-BId6ggf_.js} +1 -1
  12. package/dist/{Progress-BW-StFw2.js → Progress-iEuD9pxG.js} +1 -1
  13. package/dist/{ScrollingText-DruYCni_.js → ScrollingText-BPP84wKo.js} +1 -1
  14. package/dist/{SelectScrollDownButton-pirzjm--.js → SelectScrollDownButton-T32cVFeM.js} +3 -3
  15. package/dist/{Switch-DeAqg6pi.js → Switch-Ch-k3Rv-.js} +1 -1
  16. package/dist/{TabsList-BAVzOZpg.js → TabsList-B8CVOQPC.js} +2 -2
  17. package/dist/{Toaster-CvuuW_y9.js → Toaster-1rYWrmAm.js} +46 -49
  18. package/dist/{ToggleGroupItem-DtD37b4G.js → ToggleGroupItem-COu_4IW4.js} +21 -17
  19. package/dist/animated-digit.js +2 -2
  20. package/dist/api/index.d.ts +5 -4
  21. package/dist/api.js +2 -2
  22. package/dist/aurora.js +70 -70
  23. package/dist/{badge-NdCQMvvB.js → badge-CaoFJzRb.js} +1 -1
  24. package/dist/badge.js +1 -1
  25. package/dist/{button-DyiWFAOE.js → button-DN39cGqL.js} +12 -12
  26. package/dist/button.js +1 -1
  27. package/dist/canvas.js +2 -2
  28. package/dist/card.js +1 -1
  29. package/dist/carousel.js +5 -5
  30. package/dist/collapsible.js +1 -1
  31. package/dist/{color-B65wWyQz.js → color-C5ls_QF7.js} +7 -9
  32. package/dist/color.js +1 -1
  33. package/dist/command.js +1 -1
  34. package/dist/components/custom/aurora/constants/presets.d.ts +62 -5
  35. package/dist/components/custom/aurora/constants/shaders/mediums.glsl.d.ts +1 -1
  36. package/dist/components/custom/aurora/index.d.ts +1 -1
  37. package/dist/components/custom/constellation/Constellation.vue.d.ts +0 -12
  38. package/dist/components/custom/constellation/constellationField.d.ts +151 -10
  39. package/dist/components/custom/constellation/index.d.ts +1 -3
  40. package/dist/components/custom/controls/DarkModeToggle.vue.d.ts +0 -11
  41. package/dist/components/custom/deck-progress/DeckProgress.vue.d.ts +27 -0
  42. package/dist/components/custom/deck-progress/index.d.ts +2 -0
  43. package/dist/components/custom/dialog-native/GlassDialogNative.vue.d.ts +57 -0
  44. package/dist/components/custom/dialog-native/index.d.ts +1 -0
  45. package/dist/components/custom/dock/DockTabButton.vue.d.ts +4 -3
  46. package/dist/components/custom/dock/GlassDock.vue.d.ts +115 -3
  47. package/dist/components/custom/dock/composables/dockMorphContext.d.ts +0 -36
  48. package/dist/components/custom/dock/composables/useLayerTransition.d.ts +0 -44
  49. package/dist/components/custom/expandable-container/ExpandableContainer.vue.d.ts +37 -5
  50. package/dist/components/custom/fourier-field/index.d.ts +1 -1
  51. package/dist/components/custom/fourier-field/math.d.ts +0 -17
  52. package/dist/components/custom/glass-panel/GlassPanel.vue.d.ts +41 -0
  53. package/dist/components/custom/glass-panel/index.d.ts +2 -0
  54. package/dist/components/custom/goo-blob/composables/useBlobPointer.d.ts +3 -4
  55. package/dist/components/custom/goo-blob/composables/useMetaballRenderer.d.ts +8 -11
  56. package/dist/components/custom/handmark/HandMark.vue.d.ts +29 -0
  57. package/dist/components/custom/handmark/brush.d.ts +242 -0
  58. package/dist/components/custom/handmark/freehand.d.ts +69 -0
  59. package/dist/components/custom/handmark/geometry.d.ts +50 -0
  60. package/dist/components/custom/handmark/index.d.ts +21 -0
  61. package/dist/components/custom/handmark/ink.d.ts +11 -0
  62. package/dist/components/custom/handmark/texture.d.ts +39 -0
  63. package/dist/components/custom/handmark/types.d.ts +53 -0
  64. package/dist/components/custom/handmark/useHandMark.d.ts +87 -0
  65. package/dist/components/custom/header-ribbon/HeaderRibbon.vue.d.ts +31 -0
  66. package/dist/components/custom/header-ribbon/index.d.ts +2 -0
  67. package/dist/components/custom/header-ribbon/types.d.ts +7 -0
  68. package/dist/components/custom/instrument-chassis/InstrumentChassis.vue.d.ts +2 -2
  69. package/dist/components/custom/instrument-rail/InstrumentRail.vue.d.ts +91 -0
  70. package/dist/components/custom/instrument-rail/index.d.ts +2 -0
  71. package/dist/components/custom/metric-badge/MetricBadge.vue.d.ts +8 -0
  72. package/dist/components/ui/drawer/Drawer.vue.d.ts +0 -1
  73. package/dist/components/ui/dropdown-menu/DropdownMenuSubContent.vue.d.ts +2 -2
  74. package/dist/components/ui/slider/index.d.ts +19 -22
  75. package/dist/components/ui/toast/use-toast.d.ts +2 -2
  76. package/dist/components/ui/toggle/Toggle.vue.d.ts +1 -1
  77. package/dist/components/ui/toggle/index.d.ts +1 -1
  78. package/dist/components/ui/toggle-group/ToggleGroup.vue.d.ts +7 -1
  79. package/dist/components/ui/toggle-group/ToggleGroupItem.vue.d.ts +3 -1
  80. package/dist/components/ui/toggle-group/toggleGroupContext.d.ts +13 -0
  81. package/dist/composables/color/index.d.ts +0 -12
  82. package/dist/composables/dark/index.d.ts +1 -1
  83. package/dist/composables/dark/useGlobalDark.d.ts +21 -1
  84. package/dist/composables/glass/useSpecularTracking.d.ts +3 -12
  85. package/dist/composables/motion/core/index.d.ts +1 -0
  86. package/dist/composables/motion/index.d.ts +0 -2
  87. package/dist/composables/motion/useRouteTransition.d.ts +42 -0
  88. package/dist/composables/motion/useSpringMount.d.ts +1 -1
  89. package/dist/configurator.js +1 -1
  90. package/dist/confirm-dialog.js +2 -2
  91. package/dist/constellation.js +225 -260
  92. package/dist/controls.js +14 -48
  93. package/dist/dark.d.ts +1 -1
  94. package/dist/dark.js +1 -1
  95. package/dist/data-table.js +1 -1
  96. package/dist/deck-progress.d.ts +1 -0
  97. package/dist/deck-progress.js +2 -0
  98. package/dist/dialog.js +2 -2
  99. package/dist/dock.js +345 -340
  100. package/dist/dockContext-BKeIMmNk.js +9 -0
  101. package/dist/{dropdown-menu-DVnQcA0E.js → dropdown-menu-D77jX6Df.js} +4 -7
  102. package/dist/dropdown-menu.js +1 -1
  103. package/dist/expandable-container.js +79 -38
  104. package/dist/forms.js +2 -2
  105. package/dist/fourier-field.js +102 -137
  106. package/dist/fourier-math.js +2 -2
  107. package/dist/glass-panel.d.ts +1 -0
  108. package/dist/glass-panel.js +44 -0
  109. package/dist/glass-ui.css +1 -1
  110. package/dist/glass-ui.js +209 -287
  111. package/dist/goo-blob.js +212 -243
  112. package/dist/handmark.d.ts +1 -0
  113. package/dist/handmark.js +662 -0
  114. package/dist/header-ribbon.d.ts +1 -0
  115. package/dist/header-ribbon.js +63 -0
  116. package/dist/hover-popover.js +1 -1
  117. package/dist/icon-tooltip.js +1 -1
  118. package/dist/index.d.ts +3 -0
  119. package/dist/instrument-rail.d.ts +1 -0
  120. package/dist/instrument-rail.js +2 -0
  121. package/dist/keyboard.js +1 -1
  122. package/dist/labeled-field.js +5 -5
  123. package/dist/{math-BUU9hHID.js → math-DTpRVC0e.js} +2 -18
  124. package/dist/metric-badge.js +1 -1
  125. package/dist/metric-stack.js +1 -1
  126. package/dist/motion-core.js +70 -69
  127. package/dist/motion.js +37 -38
  128. package/dist/notification.js +1 -1
  129. package/dist/number-field.js +1 -1
  130. package/dist/popover.js +1 -1
  131. package/dist/{presets-1OhFpaIC.js → presets-BP_ALM0m.js} +14 -1
  132. package/dist/progress.js +1 -1
  133. package/dist/pulse.js +1 -1
  134. package/dist/reactive.js +1 -1
  135. package/dist/scrolling-text.js +1 -1
  136. package/dist/search.js +6 -6
  137. package/dist/select.js +1 -1
  138. package/dist/{sheet-ChSXcJpU.js → sheet-VZEtNFvO.js} +1 -1
  139. package/dist/sheet.js +1 -1
  140. package/dist/{slider-sfl8gFDD.js → slider-ClgpP7EB.js} +4 -4
  141. package/dist/slider.js +1 -1
  142. package/dist/sortable-list.js +2 -2
  143. package/dist/stacked-icons.js +6 -6
  144. package/dist/styles/animations.css +111 -15
  145. package/dist/styles/components.css +1 -1
  146. package/dist/styles/dock/layer-group.css +0 -22
  147. package/dist/styles/dock/layers.css +1 -11
  148. package/dist/styles/dock/morph.css +19 -95
  149. package/dist/styles/dock/shell.css +0 -12
  150. package/dist/styles/dock-controls.css +31 -28
  151. package/dist/styles/drawer.css +0 -2
  152. package/dist/styles/floating-panel.css +0 -2
  153. package/dist/styles/glass-refract.css +0 -2
  154. package/dist/styles/glass.css +1188 -31
  155. package/dist/styles/hover-popover.css +0 -2
  156. package/dist/styles/index.css +6 -24
  157. package/dist/styles/instrument-chassis.css +0 -4
  158. package/dist/styles/paper.css +68 -2
  159. package/dist/styles/theme.css +20 -13
  160. package/dist/styles/tokens.css +2360 -22
  161. package/dist/styles/typography.css +6 -18
  162. package/dist/styles/utilities.css +1291 -19
  163. package/dist/styles/view-transition.css +51 -0
  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/{useAnimatedNumber-DfVgP4te.js → useAnimatedNumber-Bcpy5Etf.js} +1 -1
  171. package/dist/{useConfiguratorState-BdQXh9ie.js → useConfiguratorState-DxAqksK6.js} +1 -1
  172. package/dist/useGlassRenderer-D7YGOYiM.js +69 -0
  173. package/dist/{useGlobalDark-D7R9OypB.js → useGlobalDark-D1wgEqfW.js} +21 -2
  174. package/dist/useSpecularTracking-BVRZsRHA.js +26 -0
  175. package/dist/useSpringMount-BJSHcLl3.js +113 -0
  176. package/dist/useViewTransition-DaN5Zrox.js +21 -0
  177. package/dist/vReveal-zUIQk-rJ.js +53 -0
  178. package/dist/watercolor-dot.js +2 -2
  179. package/package.json +57 -33
  180. package/src/styles/animations.css +111 -15
  181. package/src/styles/dock/layer-group.css +0 -22
  182. package/src/styles/dock/layers.css +1 -11
  183. package/src/styles/dock/morph.css +19 -95
  184. package/src/styles/dock/shell.css +0 -12
  185. package/src/styles/dock-controls.css +31 -28
  186. package/src/styles/glass.css +1188 -31
  187. package/src/styles/index.css +6 -24
  188. package/src/styles/paper.css +68 -2
  189. package/src/styles/theme.css +20 -13
  190. package/src/styles/tokens.css +2360 -22
  191. package/src/styles/typography.css +6 -18
  192. package/src/styles/utilities.css +1291 -19
  193. package/src/styles/view-transition.css +51 -0
  194. package/dist/components/custom/aurora/constants/shaders/vangogh-medium.glsl.d.ts +0 -1
  195. package/dist/components/custom/constellation/composables/createConstellationField.d.ts +0 -35
  196. package/dist/components/custom/constellation/composables/useConstellationPointer.d.ts +0 -35
  197. package/dist/components/custom/constellation/constants.d.ts +0 -36
  198. package/dist/components/custom/constellation/constellationDraw.d.ts +0 -18
  199. package/dist/components/custom/constellation/constellationInteraction.d.ts +0 -102
  200. package/dist/components/custom/dock/composables/useDockMorphWindow.d.ts +0 -15
  201. package/dist/components/custom/dock/composables/useDockShellProps.d.ts +0 -131
  202. package/dist/components/custom/dock/constants.d.ts +0 -23
  203. package/dist/components/custom/fourier-field/presets.d.ts +0 -54
  204. package/dist/components/custom/goo-blob/composables/buildMetaballProgram.d.ts +0 -18
  205. package/dist/components/custom/goo-blob/composables/uploadBlobUniforms.d.ts +0 -41
  206. package/dist/components/custom/goo-blob/constants.d.ts +0 -52
  207. package/dist/components/custom/goo-blob/shaders/metaball-uniforms.glsl.d.ts +0 -1
  208. package/dist/components/custom/tabs/constants.d.ts +0 -12
  209. package/dist/components/custom/underline/GlassUnderline.vue.d.ts +0 -84
  210. package/dist/components/custom/underline/index.d.ts +0 -2
  211. package/dist/components/custom/underline/types.d.ts +0 -56
  212. package/dist/composables/motion/curves.d.ts +0 -48
  213. package/dist/composables/motion/springPresets.d.ts +0 -33
  214. package/dist/composables/motion/suite.d.ts +0 -2
  215. package/dist/dockContext-bho8B1A4.js +0 -17
  216. package/dist/motion-curves.d.ts +0 -1
  217. package/dist/motion-curves.js +0 -130
  218. package/dist/springPresets-aRSm-4_k.js +0 -40
  219. package/dist/styles/glass/a11y-fallback.css +0 -245
  220. package/dist/styles/glass/ladder.css +0 -304
  221. package/dist/styles/glass/material.css +0 -238
  222. package/dist/styles/glass/progress-rail.css +0 -78
  223. package/dist/styles/glass/squircle.css +0 -66
  224. package/dist/styles/glass/surfaces.css +0 -306
  225. package/dist/styles/tokens/color-radius.css +0 -250
  226. package/dist/styles/tokens/dark-arm.css +0 -194
  227. package/dist/styles/tokens/glass.css +0 -413
  228. package/dist/styles/tokens/light-dark.css +0 -158
  229. package/dist/styles/tokens/offsets-sizing.css +0 -406
  230. package/dist/styles/tokens/property-regs.css +0 -169
  231. package/dist/styles/tokens/scale-paper.css +0 -361
  232. package/dist/styles/tokens/scheme-motion.css +0 -334
  233. package/dist/styles/tokens/shadow.css +0 -132
  234. package/dist/styles/utilities/a11y-overrides.css +0 -140
  235. package/dist/styles/utilities/animate.css +0 -26
  236. package/dist/styles/utilities/base.css +0 -365
  237. package/dist/styles/utilities/btn.css +0 -399
  238. package/dist/styles/utilities/components.css +0 -317
  239. package/dist/underline.d.ts +0 -1
  240. package/dist/underline.js +0 -85
  241. package/dist/useSpecularTracking-DFK_fhpG.js +0 -32
  242. package/dist/useSpringMount-DXUzxBjV.js +0 -108
  243. package/dist/vReveal-CqaCz_mC.js +0 -44
  244. package/src/styles/glass/a11y-fallback.css +0 -245
  245. package/src/styles/glass/ladder.css +0 -304
  246. package/src/styles/glass/material.css +0 -238
  247. package/src/styles/glass/progress-rail.css +0 -78
  248. package/src/styles/glass/squircle.css +0 -66
  249. package/src/styles/glass/surfaces.css +0 -306
  250. package/src/styles/tokens/color-radius.css +0 -250
  251. package/src/styles/tokens/dark-arm.css +0 -194
  252. package/src/styles/tokens/glass.css +0 -413
  253. package/src/styles/tokens/light-dark.css +0 -158
  254. package/src/styles/tokens/offsets-sizing.css +0 -406
  255. package/src/styles/tokens/property-regs.css +0 -169
  256. package/src/styles/tokens/scale-paper.css +0 -361
  257. package/src/styles/tokens/scheme-motion.css +0 -334
  258. package/src/styles/tokens/shadow.css +0 -132
  259. package/src/styles/utilities/a11y-overrides.css +0 -140
  260. package/src/styles/utilities/animate.css +0 -26
  261. package/src/styles/utilities/base.css +0 -365
  262. package/src/styles/utilities/btn.css +0 -399
  263. package/src/styles/utilities/components.css +0 -317
  264. /package/dist/{CollapsibleContent-Drow5WkV.js → CollapsibleContent-CP9qF1v4.js} +0 -0
  265. /package/dist/{DialogFooter-DufLHi0y.js → DialogFooter-Gprw8H_A.js} +0 -0
  266. /package/dist/{IconTooltip-BrQ5p181.js → IconTooltip-Cus0fvK0.js} +0 -0
  267. /package/dist/{Input-B-F818RU.js → Input-xuDwALQR.js} +0 -0
  268. /package/dist/{_plugin-vue_export-helper-DWghtRt7.js → _plugin-vue_export-helper-ok8pgSl5.js} +0 -0
  269. /package/dist/{compile-Ce_V55zi.js → compile-BOXjLUxu.js} +0 -0
  270. /package/dist/{constants-C8NMonuo.js → constants-yKeKnE84.js} +0 -0
  271. /package/dist/{prng-CjVgzjQT.js → prng-D27-B3tK.js} +0 -0
  272. /package/dist/{resolveCanvasColor-CRvVzOvP.js → resolveCanvasColor-BBiYfp8g.js} +0 -0
  273. /package/dist/{useCanvas2D-CSeH8h16.js → useCanvas2D-ClrQuZtp.js} +0 -0
  274. /package/dist/{useIntersectionPause-DAdVPVp4.js → useIntersectionPause-Cck5Uxk8.js} +0 -0
  275. /package/dist/{useInterval-D3USn0yc.js → useInterval-Dsmqwi03.js} +0 -0
  276. /package/dist/{useKeyboardShortcuts-i8tHd5WO.js → useKeyboardShortcuts-CyIYrndH.js} +0 -0
  277. /package/dist/{useScrollProgress-CcgmgMQt.js → useScrollProgress-CffFGLa5.js} +0 -0
  278. /package/dist/{useSortable-DnyGXKKY.js → useSortable-C8ReQ50P.js} +0 -0
  279. /package/dist/{useTextHighlight-B3b10W6r.js → useTextHighlight-CWEi25hf.js} +0 -0
@@ -0,0 +1,113 @@
1
+ import { computed as e, getCurrentScope as t, nextTick as n, onMounted as r, onScopeDispose as i, readonly as a, ref as o, shallowRef as s, toValue as c, watch as l } from "vue";
2
+ import { SpringProgress as u } from "@mkbabb/keyframes.js";
3
+ //#region src/composables/motion/useSpring.ts
4
+ function d(e, n = {}) {
5
+ let r = n.initial ?? 0, d = n.initialVelocity ?? 0, f = o(r), p = o(d), m = o(d === 0), h = s(new u({
6
+ response: n.response ?? .5,
7
+ dampingFraction: n.dampingFraction ?? .86,
8
+ initial: r,
9
+ initialVelocity: d,
10
+ settleThreshold: n.settleThreshold ?? .001,
11
+ velocitySettleThreshold: n.velocitySettleThreshold ?? .001,
12
+ respectReducedMotion: n.respectReducedMotion !== !1
13
+ })), g = h.value.subscribe((e, t) => {
14
+ f.value = e, p.value = t, m.value = h.value.settled, n.onValue?.(e, t);
15
+ });
16
+ h.value.play(() => {});
17
+ let _ = l(() => c(e), (e) => {
18
+ e != null && (h.value.target = e);
19
+ }, { immediate: !0 });
20
+ function v() {
21
+ f.value = h.value.value, p.value = h.value.velocity, m.value = h.value.settled;
22
+ }
23
+ function y() {
24
+ _(), g(), h.value.dispose();
25
+ }
26
+ return t() && i(y), {
27
+ value: a(f),
28
+ velocity: a(p),
29
+ isSettled: a(m),
30
+ snap: () => {
31
+ h.value.snap(), v();
32
+ },
33
+ reset: (e, t) => {
34
+ h.value.reset(e ?? 0, t ?? 0), v();
35
+ },
36
+ dispose: y
37
+ };
38
+ }
39
+ //#endregion
40
+ //#region src/composables/motion/useSpringMount.ts
41
+ var f = {
42
+ smooth: {
43
+ response: .5,
44
+ dampingFraction: .86
45
+ },
46
+ snappy: {
47
+ response: .35,
48
+ dampingFraction: .65
49
+ },
50
+ bouncy: {
51
+ response: .5,
52
+ dampingFraction: .45
53
+ },
54
+ gentle: {
55
+ response: .7,
56
+ dampingFraction: 1
57
+ }
58
+ };
59
+ function p(t) {
60
+ let a = f[t.preset ?? "smooth"], s = o(1), c = o(!1), u = 0, p = 0, m = null, h = !1, g = d(s, {
61
+ response: a.response,
62
+ dampingFraction: a.dampingFraction,
63
+ initial: 1,
64
+ settleThreshold: .001,
65
+ velocitySettleThreshold: .001,
66
+ respectReducedMotion: t.respectReducedMotion !== !1
67
+ });
68
+ r(() => {
69
+ t.open.value && n(() => {
70
+ s.value = 0;
71
+ });
72
+ });
73
+ let _ = l(() => t.open.value, (e, t) => {
74
+ e !== t && (c.value || (s.value = +!e));
75
+ }, { immediate: !1 }), v = l(() => g.isSettled.value, (e) => {
76
+ e && h && s.value >= 1 && (h = !1, t.onDismiss?.());
77
+ });
78
+ function y(e) {
79
+ if (e.button !== 0) return;
80
+ let t = e.currentTarget;
81
+ p = t.getBoundingClientRect().height || 1, u = e.clientY, m = e.pointerId, c.value = !0, t.setPointerCapture(e.pointerId);
82
+ }
83
+ function b(e) {
84
+ if (!c.value || e.pointerId !== m) return;
85
+ let t = e.clientY - u;
86
+ if (t <= 0) {
87
+ s.value = 0;
88
+ return;
89
+ }
90
+ s.value = Math.min(1, t / p);
91
+ }
92
+ function x(e) {
93
+ if (!c.value || e.pointerId !== m) return;
94
+ let n = e.currentTarget;
95
+ n.hasPointerCapture(e.pointerId) && n.releasePointerCapture(e.pointerId), c.value = !1, m = null;
96
+ let r = t.dismissThreshold ?? .3;
97
+ s.value >= r ? (h = !0, s.value = 1) : s.value = 0;
98
+ }
99
+ return i(() => {
100
+ _(), v();
101
+ }), {
102
+ position: g.value,
103
+ isDragging: e(() => c.value),
104
+ dragHandlers: {
105
+ onPointerdown: y,
106
+ onPointermove: b,
107
+ onPointerup: x,
108
+ onPointercancel: x
109
+ }
110
+ };
111
+ }
112
+ //#endregion
113
+ export { d as n, p as t };
@@ -0,0 +1,21 @@
1
+ //#region src/composables/motion/useViewTransition.ts
2
+ function e() {
3
+ return typeof document < "u" && typeof document.startViewTransition == "function";
4
+ }
5
+ function t(e, t) {
6
+ let n = typeof document > "u" ? void 0 : document;
7
+ if (!n || typeof n.startViewTransition != "function") return e(), {
8
+ finished: Promise.resolve(),
9
+ transitioned: !1
10
+ };
11
+ let r = t?.types && t.types.length > 0 ? n.startViewTransition({
12
+ update: () => e(),
13
+ types: t.types
14
+ }) : n.startViewTransition(() => e());
15
+ return r.ready?.catch(() => {}), {
16
+ finished: r.finished.then(() => void 0, () => void 0),
17
+ transitioned: !0
18
+ };
19
+ }
20
+ //#endregion
21
+ export { e as n, t };
@@ -0,0 +1,53 @@
1
+ //#region src/utils/moveBefore.ts
2
+ function e(e, t, n) {
3
+ let r = e;
4
+ typeof r.moveBefore == "function" ? r.moveBefore(t, n) : e.insertBefore(t, n);
5
+ }
6
+ function t() {
7
+ return typeof Element < "u" && "moveBefore" in Element.prototype;
8
+ }
9
+ //#endregion
10
+ //#region src/utils/platformSupport.ts
11
+ function n() {
12
+ return typeof globalThis.scheduler?.postTask == "function";
13
+ }
14
+ //#endregion
15
+ //#region src/composables/motion/useRouteTransition.ts
16
+ function r() {
17
+ return typeof window > "u" || typeof window.matchMedia != "function" ? !1 : window.matchMedia("(prefers-reduced-motion: reduce)").matches;
18
+ }
19
+ function i() {
20
+ return typeof document < "u" && typeof document.startViewTransition == "function";
21
+ }
22
+ function a() {
23
+ function e(e, t) {
24
+ let n = typeof document > "u" ? void 0 : document;
25
+ if (!n || typeof n.startViewTransition != "function" || r()) return {
26
+ finished: (async () => e())().then(() => void 0, () => void 0),
27
+ transitioned: !1
28
+ };
29
+ let i = t?.types && t.types.length > 0 ? n.startViewTransition({
30
+ update: () => e(),
31
+ types: t.types
32
+ }) : n.startViewTransition(() => e());
33
+ return i.ready?.catch(() => {}), {
34
+ finished: i.finished.then(() => void 0, () => void 0),
35
+ transitioned: !0
36
+ };
37
+ }
38
+ return {
39
+ navigate: e,
40
+ supported: i()
41
+ };
42
+ }
43
+ //#endregion
44
+ //#region src/composables/motion/vReveal.ts
45
+ function o(e, t) {
46
+ e.setAttribute("data-reveal", t.arg === "fade" ? "fade" : ""), e.style.setProperty("--d", String(t.value ?? 0));
47
+ }
48
+ var s = {
49
+ mounted: o,
50
+ updated: o
51
+ };
52
+ //#endregion
53
+ export { e as a, n as i, i as n, t as o, a as r, s as t };
@@ -1,5 +1,5 @@
1
- import { t as e } from "./_plugin-vue_export-helper-DWghtRt7.js";
2
- import { n as t, t as n } from "./prng-CjVgzjQT.js";
1
+ import { t as e } from "./_plugin-vue_export-helper-ok8pgSl5.js";
2
+ import { n as t, t as n } from "./prng-D27-B3tK.js";
3
3
  import { computed as r, createBlock as i, createElementVNode as a, defineComponent as o, normalizeClass as s, normalizeStyle as c, onUnmounted as l, openBlock as u, ref as d, renderSlot as f, resolveDynamicComponent as p, toRef as m, useId as h, watch as g, withCtx as _ } from "vue";
4
4
  //#region src/components/custom/watercolor-dot/prng.ts
5
5
  function v(e, t, n) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mkbabb/glass-ui",
3
- "version": "3.10.1",
3
+ "version": "3.11.0",
4
4
  "description": "Glassmorphic design system — Vue 3.5 components, reka-ui primitives, Tailwind CSS v4 tokens",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -79,6 +79,9 @@
79
79
  "status-dot": [
80
80
  "dist/status-dot.d.ts"
81
81
  ],
82
+ "deck-progress": [
83
+ "dist/deck-progress.d.ts"
84
+ ],
82
85
  "pulse": [
83
86
  "dist/pulse.d.ts"
84
87
  ],
@@ -88,6 +91,9 @@
88
91
  "toggle-chip": [
89
92
  "dist/toggle-chip.d.ts"
90
93
  ],
94
+ "glass-panel": [
95
+ "dist/glass-panel.d.ts"
96
+ ],
91
97
  "sortable-list": [
92
98
  "dist/sortable-list.d.ts"
93
99
  ],
@@ -106,21 +112,24 @@
106
112
  "instrument-chassis": [
107
113
  "dist/instrument-chassis.d.ts"
108
114
  ],
115
+ "instrument-rail": [
116
+ "dist/instrument-rail.d.ts"
117
+ ],
109
118
  "hover-popover": [
110
119
  "dist/hover-popover.d.ts"
111
120
  ],
112
121
  "configurator": [
113
122
  "dist/configurator.d.ts"
114
123
  ],
124
+ "header-ribbon": [
125
+ "dist/header-ribbon.d.ts"
126
+ ],
115
127
  "constellation": [
116
128
  "dist/constellation.d.ts"
117
129
  ],
118
130
  "scrolling-text": [
119
131
  "dist/scrolling-text.d.ts"
120
132
  ],
121
- "underline": [
122
- "dist/underline.d.ts"
123
- ],
124
133
  "forms": [
125
134
  "dist/forms.d.ts"
126
135
  ],
@@ -145,9 +154,6 @@
145
154
  "motion-core": [
146
155
  "dist/motion-core.d.ts"
147
156
  ],
148
- "motion-curves": [
149
- "dist/motion-curves.d.ts"
150
- ],
151
157
  "button": [
152
158
  "dist/button.d.ts"
153
159
  ],
@@ -306,10 +312,18 @@
306
312
  "types": "./dist/watercolor-dot.d.ts",
307
313
  "import": "./dist/watercolor-dot.js"
308
314
  },
315
+ "./handmark": {
316
+ "types": "./dist/handmark.d.ts",
317
+ "import": "./dist/handmark.js"
318
+ },
309
319
  "./configurator": {
310
320
  "types": "./dist/configurator.d.ts",
311
321
  "import": "./dist/configurator.js"
312
322
  },
323
+ "./header-ribbon": {
324
+ "types": "./dist/header-ribbon.d.ts",
325
+ "import": "./dist/header-ribbon.js"
326
+ },
313
327
  "./constellation": {
314
328
  "types": "./dist/constellation.d.ts",
315
329
  "import": "./dist/constellation.js"
@@ -334,6 +348,10 @@
334
348
  "types": "./dist/status-dot.d.ts",
335
349
  "import": "./dist/status-dot.js"
336
350
  },
351
+ "./deck-progress": {
352
+ "types": "./dist/deck-progress.d.ts",
353
+ "import": "./dist/deck-progress.js"
354
+ },
337
355
  "./pulse": {
338
356
  "types": "./dist/pulse.d.ts",
339
357
  "import": "./dist/pulse.js"
@@ -346,6 +364,10 @@
346
364
  "types": "./dist/toggle-chip.d.ts",
347
365
  "import": "./dist/toggle-chip.js"
348
366
  },
367
+ "./glass-panel": {
368
+ "types": "./dist/glass-panel.d.ts",
369
+ "import": "./dist/glass-panel.js"
370
+ },
349
371
  "./sortable-list": {
350
372
  "types": "./dist/sortable-list.d.ts",
351
373
  "import": "./dist/sortable-list.js"
@@ -370,6 +392,10 @@
370
392
  "types": "./dist/instrument-chassis.d.ts",
371
393
  "import": "./dist/instrument-chassis.js"
372
394
  },
395
+ "./instrument-rail": {
396
+ "types": "./dist/instrument-rail.d.ts",
397
+ "import": "./dist/instrument-rail.js"
398
+ },
373
399
  "./hover-popover": {
374
400
  "types": "./dist/hover-popover.d.ts",
375
401
  "import": "./dist/hover-popover.js"
@@ -378,10 +404,6 @@
378
404
  "types": "./dist/scrolling-text.d.ts",
379
405
  "import": "./dist/scrolling-text.js"
380
406
  },
381
- "./underline": {
382
- "types": "./dist/underline.d.ts",
383
- "import": "./dist/underline.js"
384
- },
385
407
  "./forms": {
386
408
  "types": "./dist/forms.d.ts",
387
409
  "import": "./dist/forms.js"
@@ -410,10 +432,6 @@
410
432
  "types": "./dist/motion-core.d.ts",
411
433
  "import": "./dist/motion-core.js"
412
434
  },
413
- "./motion-curves": {
414
- "types": "./dist/motion-curves.d.ts",
415
- "import": "./dist/motion-curves.js"
416
- },
417
435
  "./button": {
418
436
  "types": "./dist/button.d.ts",
419
437
  "import": "./dist/button.js"
@@ -557,6 +575,10 @@
557
575
  "proof:dock-hold-contract": "node scripts/proof-dock-hold-contract.mjs",
558
576
  "proof:dock-opacity-lockstep": "node scripts/proof-dock-opacity-lockstep.mjs",
559
577
  "proof:dock-a11y-contract": "vitest run tests/components/custom/dock/DockLayerRail.a11y.test.ts",
578
+ "proof:dock-collapse-contract": "vitest run tests/components/custom/dock/GlassDock.collapse-contract.test.ts",
579
+ "proof:expand-reparent-determinism": "vitest run tests/components/custom/expandable-container/single-surface-reparent.test.ts",
580
+ "proof:dark-flip-settle": "vitest run tests/composables/dark/flip-settle.test.ts",
581
+ "proof:control-glass-register": "vitest run tests/components/ui/toggle-group/glass-register.test.ts tests/components/ui/slider/track-frost.test.ts",
560
582
  "proof:dock-vocabulary": "node scripts/proof-dock-vocabulary.mjs",
561
583
  "proof:dock-region-model": "node scripts/proof-dock-region-model.mjs",
562
584
  "proof:dock-perfection": "node scripts/proof-dock-perfection.mjs",
@@ -564,7 +586,6 @@
564
586
  "proof:dock-css-carve": "node scripts/proof-dock-css-carve.mjs",
565
587
  "proof:dock-css-split": "node scripts/proof-dock-controls-split.mjs",
566
588
  "proof:design-idiom-localization": "node scripts/proof-design-idiom-localization.mjs",
567
- "proof:colocation": "node scripts/proof-colocation.mjs",
568
589
  "proof:tailwind-v4-idiom": "node scripts/proof-tailwind-v4-idiom.mjs",
569
590
  "proof:au-w9-consumers": "node scripts/proof-au-w9-consumers.mjs",
570
591
  "proof:shadow-contract": "node scripts/proof-shadow-contract.mjs",
@@ -575,7 +596,6 @@
575
596
  "proof:ay-w0-reground": "node scripts/proof-ay-w0-reground.mjs",
576
597
  "proof:au-w1-design": "node scripts/proof-au-w1-design.mjs",
577
598
  "proof:au-final": "node scripts/proof-au-final.mjs",
578
- "proof:ay-final": "node scripts/proof-ay-final.mjs",
579
599
  "proof:strict-templates": "node scripts/proof-strict-templates.mjs",
580
600
  "proof:peer-optional": "node scripts/proof-peer-optional.mjs",
581
601
  "proof:vueuse-free-root": "node scripts/proof-vueuse-free-root.mjs",
@@ -597,7 +617,7 @@
597
617
  "proof:blob-value-free": "node scripts/proof-blob-value-free.mjs",
598
618
  "proof:motion-composables-consumer": "node scripts/proof-motion-composables-consumer.mjs",
599
619
  "proof:motion-value-free": "node scripts/proof-motion-value-free.mjs",
600
- "proof:motion-suite": "node scripts/proof-motion-suite.mjs",
620
+ "proof:no-value-default": "node scripts/proof-no-value-default.mjs",
601
621
  "proof:blob-space-gamma": "node scripts/proof-blob-space-gamma.mjs",
602
622
  "proof:blob-smin-normalized": "node scripts/proof-blob-smin-normalized.mjs",
603
623
  "proof:blob-gradient-unit-length": "node scripts/proof-blob-gradient-unit-length.mjs",
@@ -609,6 +629,7 @@
609
629
  "proof:aurora-space-gamma": "node scripts/proof-aurora-space-gamma.mjs",
610
630
  "proof:aurora-oklch-interp": "node scripts/proof-aurora-oklch-interp.mjs",
611
631
  "proof:aurora-derive-gamut": "vitest run tests/components/custom/aurora/derive-color.test.ts",
632
+ "proof:aurora-paper-ground": "vitest run tests/components/custom/aurora/paper-ground.test.ts",
612
633
  "proof:aurora-tensor-field": "node scripts/proof-aurora-tensor-field.mjs && vitest run tests/components/custom/aurora/painterly.test.ts",
613
634
  "proof:aurora-impasto-relight": "node scripts/proof-aurora-impasto-relight.mjs",
614
635
  "proof:aurora-vangogh-preset": "node scripts/proof-aurora-vangogh-preset.mjs",
@@ -626,11 +647,7 @@
626
647
  "proof:blob-color-equivalence": "vitest run tests/components/custom/goo-blob/blob-color-equivalence.test.ts",
627
648
  "proof:fail-explicit": "node scripts/proof-fail-explicit.mjs",
628
649
  "proof:no-god-module": "node scripts/proof-no-god-module.mjs",
629
- "proof:composable-return-types": "node scripts/proof-composable-return-types.mjs",
630
650
  "proof:no-legacy-commentary": "node scripts/proof-no-legacy-commentary.mjs",
631
- "proof:no-retired-survivor": "node scripts/proof-no-retired-survivor.mjs",
632
- "proof:tag-parity": "node scripts/proof-tag-parity.mjs",
633
- "proof:var-in-arbitrary-guard": "node scripts/proof-var-in-arbitrary-guard.mjs",
634
651
  "proof:story-language": "node scripts/proof-story-language.mjs",
635
652
  "proof:gate-detrap": "node scripts/proof-gate-detrap.mjs",
636
653
  "proof:liquid-glass-tokens": "node scripts/proof-liquid-glass-tokens.mjs",
@@ -654,6 +671,14 @@
654
671
  "proof:constellation-field": "vitest run tests/components/custom/constellation/constellationField.test.ts",
655
672
  "proof:input-invalid-aria": "node scripts/proof-input-invalid-aria.mjs",
656
673
  "proof:subpath-enumeration": "node scripts/proof-subpath-enumeration.mjs",
674
+ "proof:handmark-export": "node scripts/proof-handmark-export.mjs",
675
+ "proof:handmark-tests": "vitest run tests/components/custom/handmark",
676
+ "proof:no-disco-star": "node scripts/proof-no-disco-star.mjs",
677
+ "proof:gold-ink-contrast": "node scripts/proof-gold-ink-contrast.mjs",
678
+ "proof:gold-seal-roundtrip": "node scripts/proof-gold-seal-roundtrip.mjs",
679
+ "proof:glass-gilt": "node scripts/proof-glass-gilt.mjs",
680
+ "proof:crayon-wipe-compositor": "node scripts/proof-crayon-wipe-compositor.mjs",
681
+ "proof:metric-badge-record": "vitest run tests/components/custom/metric-badge/MetricBadge.record.test.ts",
657
682
  "proof:no-orphan-composable": "node scripts/proof-no-orphan-composable.mjs",
658
683
  "proof:speedtest-boundary": "node scripts/proof-speedtest-boundary.mjs",
659
684
  "proof:glass-material-unified": "node scripts/proof-glass-material-unified.mjs",
@@ -664,19 +689,9 @@
664
689
  "proof:aurora-chrome-idiomatic": "node scripts/proof-aurora-chrome-idiomatic.mjs",
665
690
  "proof:aurora-preset-roster": "node scripts/proof-aurora-preset-roster.mjs",
666
691
  "proof:ui-scale": "node scripts/proof-ui-scale.mjs",
667
- "proof:touch-target": "node scripts/proof-touch-target.mjs",
668
- "proof:webkit-backdrop": "node scripts/proof-webkit-backdrop.mjs",
669
- "proof:nested-backdrop-budget": "node scripts/proof-nested-backdrop-budget.mjs",
670
692
  "proof:dropdown-type-scale": "node scripts/proof-dropdown-type-scale.mjs",
671
693
  "proof:forced-colors-skin": "node scripts/proof-forced-colors-skin.mjs",
672
694
  "proof:glass-cohesion": "node scripts/proof-glass-cohesion.mjs",
673
- "proof:substrate-cohesion": "node scripts/proof-substrate-cohesion.mjs",
674
- "proof:component-orphan": "node scripts/proof-component-orphan.mjs",
675
- "proof:substrate-staging": "node scripts/proof-substrate-staging.mjs",
676
- "proof:easter-eggs": "node scripts/proof-easter-eggs.mjs",
677
- "proof:instrument-scope": "node scripts/proof-instrument-scope.mjs",
678
- "proof:readme-meta-clean": "node scripts/proof-readme-meta-clean.mjs",
679
- "proof:convergence-fit-coherent": "node scripts/proof-convergence-fit-coherent.mjs",
680
695
  "proof:adaptive-glass": "node scripts/proof-adaptive-glass.mjs",
681
696
  "proof:dark-semantic-contrast": "node scripts/proof-dark-semantic-contrast.mjs",
682
697
  "proof:glass-material-demo": "node scripts/proof-glass-material-demo.mjs",
@@ -718,11 +733,13 @@
718
733
  "peerDependencies": {
719
734
  "@lucide/vue": "^1.16.0",
720
735
  "@mkbabb/keyframes.js": "^2.2.0 || ^3.0.0 || ^4.0.0",
736
+ "@mkbabb/pencil-boil": "^0.4.1",
721
737
  "@mkbabb/value.js": "^0.10.0 || ^0.11.0",
722
738
  "@vueuse/core": "^14.0",
723
739
  "class-variance-authority": "^0.7",
724
740
  "clsx": "^2.0",
725
741
  "embla-carousel-vue": "^8.0",
742
+ "perfect-freehand": "^1.2.3",
726
743
  "reka-ui": "^2.0",
727
744
  "tailwindcss": "^4.0",
728
745
  "tw-animate-css": "^1.2.5",
@@ -739,16 +756,23 @@
739
756
  "@mkbabb/keyframes.js": {
740
757
  "optional": true
741
758
  },
759
+ "@mkbabb/pencil-boil": {
760
+ "optional": true
761
+ },
742
762
  "@mkbabb/value.js": {
743
763
  "optional": true
744
764
  },
765
+ "perfect-freehand": {
766
+ "optional": true
767
+ },
745
768
  "tw-animate-css": {
746
769
  "optional": true
747
770
  }
748
771
  },
749
772
  "devDependencies": {
750
773
  "@lucide/vue": "^1.16.0",
751
- "@mkbabb/keyframes.js": "^4.1.0",
774
+ "@mkbabb/keyframes.js": "^2.2.0",
775
+ "@mkbabb/pencil-boil": "^0.4.1",
752
776
  "@mkbabb/value.js": "^0.10.0",
753
777
  "@tailwindcss/postcss": "^4.3.0",
754
778
  "@tailwindcss/vite": "^4.3.0",
@@ -141,33 +141,129 @@
141
141
  100% { background-position: -200% 0; }
142
142
  }
143
143
 
144
- /* ── Sparkle sweep: four-point star traverses a surface diagonally ──
144
+ /* ── Gold ONE-SHOT round-trip: the pressed seal (E7c — the to-AND-fro) ──────────
145
145
  *
146
- * Reserved for the chassis primary-action hover (dock-tab-button[data-tier="primary"])
147
- * and the `Complete!` shimmer cycle. Single keyframe, ~600ms per pass; the
148
- * consumer rule sets the duration and easing. Reduced-motion guard at the
149
- * consumer site (per surface — not all sparkle uses share the same gate).
150
- */
151
- @keyframes sparkle-sweep {
146
+ * A seal is PRESSED, catches the light ONCE, and RECEDES — a full ease-IN-AND-OUT
147
+ * envelope, not a fire-and-yank. The defect this replaces: `.text-gilt` used the
148
+ * infinite `gold-shimmer-slide` (`1 forwards`), which HELD its gilt terminal frame
149
+ * forever, and the consumer ripped the class off on a `setTimeout` — but the gold
150
+ * gradient lives in `background-image`, which no transition covers, so it SNAPPED
151
+ * off in one frame.
152
+ *
153
+ * This keyframe owns the WHOLE envelope and RESOLVES TO THE RESTING INK — there is
154
+ * nothing left to yank when it ends:
155
+ * - `-webkit-text-fill-color` (and `color`) ride from the figure's OWN ink
156
+ * (`currentColor` — the consumer's data-pole green/red) → `transparent` (the
157
+ * gilt gradient shows through `background-clip:text`) → back to `currentColor`.
158
+ * So the gilt FADES UP and FADES DOWN; at 0% and 100% the figure paints its own
159
+ * ink and the gradient is occluded — the resting state, by construction.
160
+ * - `background-position` slides the gradient across through the same window.
161
+ * No `forwards` is needed (the final keyframe IS rest), so on completion the class
162
+ * may simply stop mattering — the snap is structurally impossible. */
163
+ @keyframes gold-shimmer-pulse {
152
164
  0% {
153
- transform: translate(-30%, -30%) scale(0.5);
154
- opacity: 0;
165
+ background-position: 150% 0;
166
+ color: currentColor;
167
+ -webkit-text-fill-color: currentColor;
155
168
  }
156
169
  25% {
157
- opacity: 1;
170
+ color: transparent;
171
+ -webkit-text-fill-color: transparent;
172
+ }
173
+ 75% {
174
+ color: transparent;
175
+ -webkit-text-fill-color: transparent;
158
176
  }
159
177
  100% {
160
- transform: translate(180%, 180%) scale(1.2);
161
- opacity: 0;
178
+ background-position: -150% 0;
179
+ color: currentColor;
180
+ -webkit-text-fill-color: currentColor;
162
181
  }
163
182
  }
164
183
 
165
- @media (prefers-reduced-motion: reduce) {
166
- @keyframes sparkle-sweep {
167
- 0%, 100% { opacity: 0; transform: none; }
184
+ /* ── Crayon-wipe: the scroll-scrubbed draw-on (D6.c M1) ──────────────────────
185
+ *
186
+ * The bidirectional, scroll-scrubbed DRAW-ON of a hand-mark (the crayon/pen
187
+ * underline, a drawn rule). The wipe is a `clip-path: inset()` of the LEFT edge
188
+ * only — the mark draws from inset(0 100% 0 0) (fully clipped from the right, so
189
+ * NOTHING shows) to inset(0) (fully revealed) — so the underline DRAWS as the
190
+ * figure scrolls into view and UN-DRAWS as it scrolls back up. `clip-path` is the
191
+ * compositor-eligible, FILTER-STABLE wipe (the medium's grain `feTurbulence`
192
+ * rasters ONCE and is untouched by the clip — the cardinal "no per-frame raster"
193
+ * discipline ds2-motion-field M1 names): clip-path animates on the compositor and
194
+ * never re-runs the static filter, unlike a `stroke-dashoffset` draw under the
195
+ * grain filter (which re-rasters per frame). The grammar mirrors scroll-driven.css
196
+ * (the `view()`/`scroll()` timeline home): the keyframe lives here (the shared
197
+ * @keyframes register); a consumer binds it to a NAMED `view-timeline` so the
198
+ * draw-on SCRUBS bidirectionally with scroll (forward → draws, back → un-draws),
199
+ * never a one-shot. The `.crayon-wipe` utility below is the binding.
200
+ *
201
+ * The keyframe itself is timeline-agnostic — it is equally a load-clock draw-on
202
+ * (bound to a keyframes.js Sequence) or a scroll scrub (bound to a view-timeline).
203
+ * The DEFAULT consumer is the scroll scrub (the figure-item underline drawing into
204
+ * the lower third), hence the utility's `view()` binding.
205
+ *
206
+ * Reduced-motion: the utility (NOT the keyframe) gates — under PRM the mark is SET
207
+ * to inset(0) (fully drawn, never animated), the correct degrade for a permanent
208
+ * structural draw (information parity: the underline is present, just not drawn).
209
+ */
210
+ @keyframes crayon-wipe {
211
+ from {
212
+ /* clipped from the RIGHT by 100% → the mark is fully hidden (nothing
213
+ drawn yet); the left edge is the pen-tip about to move right. */
214
+ clip-path: inset(0 100% 0 0);
215
+ }
216
+ to {
217
+ /* fully revealed — the mark is wholly drawn. */
218
+ clip-path: inset(0 0 0 0);
219
+ }
220
+ }
221
+
222
+ /* ── .crayon-wipe — bind the wipe to a scroll view-timeline (D6.c M1) ──────────
223
+ * The scroll-scrubbed draw-on utility. A consumer puts `.crayon-wipe` on a
224
+ * hand-mark surface (the underline span, a drawn rule) and the mark draws/un-draws
225
+ * as it scrolls through its OWN `view()` timeline — a bidirectional scrub, free,
226
+ * off the main thread. The animation is `paused` with `animation-timeline: view()`
227
+ * so the scroll position IS the playhead (the native scroll-driven model — the
228
+ * timeline drives the frame, time does not). The named timeline is overridable
229
+ * (`--crayon-wipe-timeline`, default the element's own `view()`) so a consumer can
230
+ * scrub off a SHARED beat timeline (the §--beat-tl the atlas scroll-driven.css
231
+ * names) instead of the per-element view — that is the "named view-timeline so a
232
+ * consumer scrubs a draw-on bidirectionally" contract.
233
+ *
234
+ * @supports-gated + PRM-OUTER-gated, mirroring scroll-driven.css exactly: the
235
+ * whole binding sits under `prefers-reduced-motion: no-preference`, so under PRM
236
+ * the animation never attaches and the mark renders in its terminal `inset(0)`
237
+ * (fully-drawn) state — the static-draw degrade. The draw range is `entry`-keyed
238
+ * (the mark draws as it ENTERS the lower viewport), tunable via
239
+ * `--crayon-wipe-range-{start,end}`. */
240
+ @media (prefers-reduced-motion: no-preference) {
241
+ @supports ((animation-timeline: view()) and (animation-range: entry)) {
242
+ .crayon-wipe {
243
+ animation: crayon-wipe auto linear both;
244
+ animation-timeline: var(--crayon-wipe-timeline, view(block));
245
+ animation-range: var(--crayon-wipe-range-start, entry 0%)
246
+ var(--crayon-wipe-range-end, cover 35%);
247
+ }
168
248
  }
169
249
  }
170
250
 
251
+ /* ── Sparkle sweep: TOMBSTONE (D6.b — the disco-star excision) ──
252
+ *
253
+ * @deprecated 3.10 — DELETE in 3.11. The four-point `✦` star sweep was the one
254
+ * garish gesture in the library; the user named it for removal ("remove the disco
255
+ * star from all glass-ui elements"). Every in-tree consumer is re-homed: the
256
+ * `btn-audacious` hover affirmation now rides the specular catch-light alone; the
257
+ * gold-CTA rides the `btn-gold-bg-sweep` metal-catch; the chassis `complete`
258
+ * celebration re-homes to the `.text-gilt` one-shot (utilities.css). The keyframe
259
+ * body is EMPTIED rather than deleted for ONE minor so any out-of-tree consumer
260
+ * (the slides decks) fails SOFT — a no-op animation, not an unknown-animation
261
+ * error. The `--duration-sparkle` token is `@deprecated` alongside (tokens.css).
262
+ * Full delete (this block + the token + the theme bridge) lands in 3.11. */
263
+ @keyframes sparkle-sweep {
264
+ /* intentionally empty — tombstoned, see deprecation note above */
265
+ }
266
+
171
267
  /* ── Pulse dot bounce: dots variant of <Pulse> ──
172
268
  *
173
269
  * Three-dot loading indicator. Opacity 0.35 ↔ 1, scale 0.8 ↔ 1.2. Consumer
@@ -98,22 +98,6 @@
98
98
  display: flex;
99
99
  flex-direction: column;
100
100
  flex-shrink: 0;
101
- /* AY.W-DOCK-NAV B6 — `align-self: start` (not the group's `stretch`
102
- default) so the column rail reports its OWN intrinsic content height
103
- (the stacked tabs) to the group's cross-axis sizing rather than being
104
- stretched to the group's content-row height. Under `stretch` the rail's
105
- height resolved to the group height, which was the single content-row
106
- height — circular: the rail's 3 tall tabs overflowed a 40px rail and the
107
- lower tabs + the indicator fell below the dock floor (the B6 break). With
108
- `align-self: start` the rail demands its natural column height, the group
109
- grows to it, and the dock grows to contain the whole rail. The
110
- `min-height: max-content` belt makes the demand explicit — a row-flex
111
- child's cross-size can otherwise resolve to the (smaller) container row
112
- height even under `align-self: start`; `max-content` floors the rail at
113
- its stacked-tab content height so the chain (group → pane → dock) grows
114
- to fit. */
115
- align-self: start;
116
- min-height: max-content;
117
101
  gap: var(--dock-layer-rail-gap, 0.125rem);
118
102
  padding: var(--dock-layer-rail-padding, 0.125rem);
119
103
  background: var(--dock-layer-rail-bg, var(--surface-tint-8));
@@ -150,12 +134,6 @@
150
134
  display: inline-flex;
151
135
  align-items: center;
152
136
  justify-content: center;
153
- /* AY.W-DOCK-NAV B6 — `flex-shrink: 0` so the stacked tabs in the column rail
154
- hold their full size and the rail demands its natural content height (no
155
- tab squish). With the rail's `align-self: start` this makes the rail report
156
- its true column height to the group's cross-axis sizing, growing the dock
157
- to contain all the tabs + the travelling indicator (the B6 un-clip). */
158
- flex-shrink: 0;
159
137
  width: var(--dock-layer-tab-size, var(--dock-control-size, 1.75rem));
160
138
  height: var(--dock-layer-tab-size, var(--dock-control-size, 1.75rem));
161
139
  border: 0;
@@ -196,19 +196,9 @@
196
196
  block-axis morph reveals a column) is NOT forced onto one nowrap row — the
197
197
  vertical group's active host block-sizes to `height: max-content` below
198
198
  (the AP.W3 column treatment, KEPT). */
199
- /* AY.W-DOCK-NAV B6 — the height is a FLOOR (`min-height`), not a fixed lock. A
200
- single-row content pane's intrinsic height already equals
201
- `--dock-layer-height` (the controls + line-height sum to it), so `min-height`
202
- is byte-identical for the common case. But a horizontal dock hosting a COLUMN
203
- switcher-rail (`<DockLayerGroup>` with `show-rail`) lays the rail out as a
204
- stack of tabs taller than one row — the prior fixed `height` clipped the
205
- rail's lower tabs + the active indicator BELOW the dock floor (the B6 "no rail
206
- line / broken" read, measured: 2 of 3 tabs clipped). The floor lets the pane
207
- block-size to the rail's natural column height so the dock grows to contain
208
- the whole rail. The cross axis keeps `nowrap`. */
209
199
  .glass-dock:not(.vertical) .dock-layer {
210
200
  white-space: nowrap;
211
- min-height: var(--dock-layer-height, 2.5rem);
201
+ height: var(--dock-layer-height, 2.5rem);
212
202
  }
213
203
 
214
204
  .dock-layer.is-active {