@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
@@ -0,0 +1,108 @@
1
+ import { n as e } from "./springPresets-aRSm-4_k.js";
2
+ import { computed as t, getCurrentScope as n, nextTick as r, onMounted as i, onScopeDispose as a, readonly as o, ref as s, shallowRef as c, toValue as l, watch as u } from "vue";
3
+ import { SpringProgress as d } from "@mkbabb/keyframes.js";
4
+ //#region src/composables/motion/useSpring.ts
5
+ function f(e, t = {}) {
6
+ let r = t.initial ?? 0, i = t.initialVelocity ?? 0, f = s(r), p = s(i), m = s(i === 0), h = c(new d({
7
+ response: t.response ?? .5,
8
+ dampingFraction: t.dampingFraction ?? .86,
9
+ initial: r,
10
+ initialVelocity: i,
11
+ settleThreshold: t.settleThreshold ?? .001,
12
+ velocitySettleThreshold: t.velocitySettleThreshold ?? .001,
13
+ respectReducedMotion: t.respectReducedMotion !== !1
14
+ })), g = h.value.subscribe((e, n) => {
15
+ f.value = e, p.value = n, m.value = h.value.settled, t.onValue?.(e, n);
16
+ });
17
+ h.value.play(() => {});
18
+ let _ = u(() => l(e), (e) => {
19
+ e != null && (h.value.target = e);
20
+ }, { immediate: !0 });
21
+ function v() {
22
+ f.value = h.value.value, p.value = h.value.velocity, m.value = h.value.settled;
23
+ }
24
+ function y() {
25
+ _(), g(), h.value.dispose();
26
+ }
27
+ return n() && a(y), {
28
+ value: o(f),
29
+ velocity: o(p),
30
+ isSettled: o(m),
31
+ snap: () => {
32
+ h.value.snap(), v();
33
+ },
34
+ reset: (e, t) => {
35
+ h.value.reset(e ?? 0, t ?? 0), v();
36
+ },
37
+ dispose: y
38
+ };
39
+ }
40
+ //#endregion
41
+ //#region src/composables/motion/useSpringMount.ts
42
+ var p = Object.fromEntries([
43
+ "smooth",
44
+ "snappy",
45
+ "bouncy",
46
+ "gentle"
47
+ ].map((t) => {
48
+ let { response: n, dampingFraction: r } = e(t);
49
+ return [t, {
50
+ response: n,
51
+ dampingFraction: r
52
+ }];
53
+ }));
54
+ function m(e) {
55
+ let n = p[e.preset ?? "smooth"], o = s(1), c = s(!1), l = 0, d = 0, m = null, h = !1, g = f(o, {
56
+ response: n.response,
57
+ dampingFraction: n.dampingFraction,
58
+ initial: 1,
59
+ settleThreshold: .001,
60
+ velocitySettleThreshold: .001,
61
+ respectReducedMotion: e.respectReducedMotion !== !1
62
+ });
63
+ i(() => {
64
+ e.open.value && r(() => {
65
+ o.value = 0;
66
+ });
67
+ });
68
+ let _ = u(() => e.open.value, (e, t) => {
69
+ e !== t && (c.value || (o.value = +!e));
70
+ }, { immediate: !1 }), v = u(() => g.isSettled.value, (t) => {
71
+ t && h && o.value >= 1 && (h = !1, e.onDismiss?.());
72
+ });
73
+ function y(e) {
74
+ if (e.button !== 0) return;
75
+ let t = e.currentTarget;
76
+ d = t.getBoundingClientRect().height || 1, l = e.clientY, m = e.pointerId, c.value = !0, t.setPointerCapture(e.pointerId);
77
+ }
78
+ function b(e) {
79
+ if (!c.value || e.pointerId !== m) return;
80
+ let t = e.clientY - l;
81
+ if (t <= 0) {
82
+ o.value = 0;
83
+ return;
84
+ }
85
+ o.value = Math.min(1, t / d);
86
+ }
87
+ function x(t) {
88
+ if (!c.value || t.pointerId !== m) return;
89
+ let n = t.currentTarget;
90
+ n.hasPointerCapture(t.pointerId) && n.releasePointerCapture(t.pointerId), c.value = !1, m = null;
91
+ let r = e.dismissThreshold ?? .3;
92
+ o.value >= r ? (h = !0, o.value = 1) : o.value = 0;
93
+ }
94
+ return a(() => {
95
+ _(), v();
96
+ }), {
97
+ position: g.value,
98
+ isDragging: t(() => c.value),
99
+ dragHandlers: {
100
+ onPointerdown: y,
101
+ onPointermove: b,
102
+ onPointerup: x,
103
+ onPointercancel: x
104
+ }
105
+ };
106
+ }
107
+ //#endregion
108
+ export { f as n, m as t };
@@ -0,0 +1,44 @@
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/useViewTransition.ts
16
+ function r() {
17
+ return typeof document < "u" && typeof document.startViewTransition == "function";
18
+ }
19
+ function i(e, t) {
20
+ let n = typeof document > "u" ? void 0 : document;
21
+ if (!n || typeof n.startViewTransition != "function") return e(), {
22
+ finished: Promise.resolve(),
23
+ transitioned: !1
24
+ };
25
+ let r = t?.types && t.types.length > 0 ? n.startViewTransition({
26
+ update: () => e(),
27
+ types: t.types
28
+ }) : n.startViewTransition(() => e());
29
+ return r.ready?.catch(() => {}), {
30
+ finished: r.finished.then(() => void 0, () => void 0),
31
+ transitioned: !0
32
+ };
33
+ }
34
+ //#endregion
35
+ //#region src/composables/motion/vReveal.ts
36
+ function a(e, t) {
37
+ e.setAttribute("data-reveal", t.arg === "fade" ? "fade" : ""), e.style.setProperty("--d", String(t.value ?? 0));
38
+ }
39
+ var o = {
40
+ mounted: a,
41
+ updated: a
42
+ };
43
+ //#endregion
44
+ export { e as a, n as i, i as n, t as o, r, o as t };
@@ -1,5 +1,5 @@
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";
1
+ import { t as e } from "./_plugin-vue_export-helper-DWghtRt7.js";
2
+ import { n as t, t as n } from "./prng-CjVgzjQT.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,7 +1,7 @@
1
1
  {
2
2
  "name": "@mkbabb/glass-ui",
3
- "version": "3.10.0",
4
- "description": "Glassmorphic design system \u2014 Vue 3.5 components, reka-ui primitives, Tailwind CSS v4 tokens",
3
+ "version": "3.10.1",
4
+ "description": "Glassmorphic design system — Vue 3.5 components, reka-ui primitives, Tailwind CSS v4 tokens",
5
5
  "license": "MIT",
6
6
  "repository": {
7
7
  "type": "git",
@@ -79,9 +79,6 @@
79
79
  "status-dot": [
80
80
  "dist/status-dot.d.ts"
81
81
  ],
82
- "deck-progress": [
83
- "dist/deck-progress.d.ts"
84
- ],
85
82
  "pulse": [
86
83
  "dist/pulse.d.ts"
87
84
  ],
@@ -91,9 +88,6 @@
91
88
  "toggle-chip": [
92
89
  "dist/toggle-chip.d.ts"
93
90
  ],
94
- "glass-panel": [
95
- "dist/glass-panel.d.ts"
96
- ],
97
91
  "sortable-list": [
98
92
  "dist/sortable-list.d.ts"
99
93
  ],
@@ -112,24 +106,21 @@
112
106
  "instrument-chassis": [
113
107
  "dist/instrument-chassis.d.ts"
114
108
  ],
115
- "instrument-rail": [
116
- "dist/instrument-rail.d.ts"
117
- ],
118
109
  "hover-popover": [
119
110
  "dist/hover-popover.d.ts"
120
111
  ],
121
112
  "configurator": [
122
113
  "dist/configurator.d.ts"
123
114
  ],
124
- "header-ribbon": [
125
- "dist/header-ribbon.d.ts"
126
- ],
127
115
  "constellation": [
128
116
  "dist/constellation.d.ts"
129
117
  ],
130
118
  "scrolling-text": [
131
119
  "dist/scrolling-text.d.ts"
132
120
  ],
121
+ "underline": [
122
+ "dist/underline.d.ts"
123
+ ],
133
124
  "forms": [
134
125
  "dist/forms.d.ts"
135
126
  ],
@@ -154,6 +145,9 @@
154
145
  "motion-core": [
155
146
  "dist/motion-core.d.ts"
156
147
  ],
148
+ "motion-curves": [
149
+ "dist/motion-curves.d.ts"
150
+ ],
157
151
  "button": [
158
152
  "dist/button.d.ts"
159
153
  ],
@@ -312,18 +306,10 @@
312
306
  "types": "./dist/watercolor-dot.d.ts",
313
307
  "import": "./dist/watercolor-dot.js"
314
308
  },
315
- "./handmark": {
316
- "types": "./dist/handmark.d.ts",
317
- "import": "./dist/handmark.js"
318
- },
319
309
  "./configurator": {
320
310
  "types": "./dist/configurator.d.ts",
321
311
  "import": "./dist/configurator.js"
322
312
  },
323
- "./header-ribbon": {
324
- "types": "./dist/header-ribbon.d.ts",
325
- "import": "./dist/header-ribbon.js"
326
- },
327
313
  "./constellation": {
328
314
  "types": "./dist/constellation.d.ts",
329
315
  "import": "./dist/constellation.js"
@@ -348,10 +334,6 @@
348
334
  "types": "./dist/status-dot.d.ts",
349
335
  "import": "./dist/status-dot.js"
350
336
  },
351
- "./deck-progress": {
352
- "types": "./dist/deck-progress.d.ts",
353
- "import": "./dist/deck-progress.js"
354
- },
355
337
  "./pulse": {
356
338
  "types": "./dist/pulse.d.ts",
357
339
  "import": "./dist/pulse.js"
@@ -364,10 +346,6 @@
364
346
  "types": "./dist/toggle-chip.d.ts",
365
347
  "import": "./dist/toggle-chip.js"
366
348
  },
367
- "./glass-panel": {
368
- "types": "./dist/glass-panel.d.ts",
369
- "import": "./dist/glass-panel.js"
370
- },
371
349
  "./sortable-list": {
372
350
  "types": "./dist/sortable-list.d.ts",
373
351
  "import": "./dist/sortable-list.js"
@@ -392,10 +370,6 @@
392
370
  "types": "./dist/instrument-chassis.d.ts",
393
371
  "import": "./dist/instrument-chassis.js"
394
372
  },
395
- "./instrument-rail": {
396
- "types": "./dist/instrument-rail.d.ts",
397
- "import": "./dist/instrument-rail.js"
398
- },
399
373
  "./hover-popover": {
400
374
  "types": "./dist/hover-popover.d.ts",
401
375
  "import": "./dist/hover-popover.js"
@@ -404,6 +378,10 @@
404
378
  "types": "./dist/scrolling-text.d.ts",
405
379
  "import": "./dist/scrolling-text.js"
406
380
  },
381
+ "./underline": {
382
+ "types": "./dist/underline.d.ts",
383
+ "import": "./dist/underline.js"
384
+ },
407
385
  "./forms": {
408
386
  "types": "./dist/forms.d.ts",
409
387
  "import": "./dist/forms.js"
@@ -432,6 +410,10 @@
432
410
  "types": "./dist/motion-core.d.ts",
433
411
  "import": "./dist/motion-core.js"
434
412
  },
413
+ "./motion-curves": {
414
+ "types": "./dist/motion-curves.d.ts",
415
+ "import": "./dist/motion-curves.js"
416
+ },
435
417
  "./button": {
436
418
  "types": "./dist/button.d.ts",
437
419
  "import": "./dist/button.js"
@@ -582,6 +564,7 @@
582
564
  "proof:dock-css-carve": "node scripts/proof-dock-css-carve.mjs",
583
565
  "proof:dock-css-split": "node scripts/proof-dock-controls-split.mjs",
584
566
  "proof:design-idiom-localization": "node scripts/proof-design-idiom-localization.mjs",
567
+ "proof:colocation": "node scripts/proof-colocation.mjs",
585
568
  "proof:tailwind-v4-idiom": "node scripts/proof-tailwind-v4-idiom.mjs",
586
569
  "proof:au-w9-consumers": "node scripts/proof-au-w9-consumers.mjs",
587
570
  "proof:shadow-contract": "node scripts/proof-shadow-contract.mjs",
@@ -592,6 +575,7 @@
592
575
  "proof:ay-w0-reground": "node scripts/proof-ay-w0-reground.mjs",
593
576
  "proof:au-w1-design": "node scripts/proof-au-w1-design.mjs",
594
577
  "proof:au-final": "node scripts/proof-au-final.mjs",
578
+ "proof:ay-final": "node scripts/proof-ay-final.mjs",
595
579
  "proof:strict-templates": "node scripts/proof-strict-templates.mjs",
596
580
  "proof:peer-optional": "node scripts/proof-peer-optional.mjs",
597
581
  "proof:vueuse-free-root": "node scripts/proof-vueuse-free-root.mjs",
@@ -613,7 +597,7 @@
613
597
  "proof:blob-value-free": "node scripts/proof-blob-value-free.mjs",
614
598
  "proof:motion-composables-consumer": "node scripts/proof-motion-composables-consumer.mjs",
615
599
  "proof:motion-value-free": "node scripts/proof-motion-value-free.mjs",
616
- "proof:no-value-default": "node scripts/proof-no-value-default.mjs",
600
+ "proof:motion-suite": "node scripts/proof-motion-suite.mjs",
617
601
  "proof:blob-space-gamma": "node scripts/proof-blob-space-gamma.mjs",
618
602
  "proof:blob-smin-normalized": "node scripts/proof-blob-smin-normalized.mjs",
619
603
  "proof:blob-gradient-unit-length": "node scripts/proof-blob-gradient-unit-length.mjs",
@@ -642,7 +626,11 @@
642
626
  "proof:blob-color-equivalence": "vitest run tests/components/custom/goo-blob/blob-color-equivalence.test.ts",
643
627
  "proof:fail-explicit": "node scripts/proof-fail-explicit.mjs",
644
628
  "proof:no-god-module": "node scripts/proof-no-god-module.mjs",
629
+ "proof:composable-return-types": "node scripts/proof-composable-return-types.mjs",
645
630
  "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",
646
634
  "proof:story-language": "node scripts/proof-story-language.mjs",
647
635
  "proof:gate-detrap": "node scripts/proof-gate-detrap.mjs",
648
636
  "proof:liquid-glass-tokens": "node scripts/proof-liquid-glass-tokens.mjs",
@@ -666,13 +654,6 @@
666
654
  "proof:constellation-field": "vitest run tests/components/custom/constellation/constellationField.test.ts",
667
655
  "proof:input-invalid-aria": "node scripts/proof-input-invalid-aria.mjs",
668
656
  "proof:subpath-enumeration": "node scripts/proof-subpath-enumeration.mjs",
669
- "proof:handmark-export": "node scripts/proof-handmark-export.mjs",
670
- "proof:handmark-tests": "vitest run tests/components/custom/handmark",
671
- "proof:no-disco-star": "node scripts/proof-no-disco-star.mjs",
672
- "proof:gold-ink-contrast": "node scripts/proof-gold-ink-contrast.mjs",
673
- "proof:glass-gilt": "node scripts/proof-glass-gilt.mjs",
674
- "proof:crayon-wipe-compositor": "node scripts/proof-crayon-wipe-compositor.mjs",
675
- "proof:metric-badge-record": "vitest run tests/components/custom/metric-badge/MetricBadge.record.test.ts",
676
657
  "proof:no-orphan-composable": "node scripts/proof-no-orphan-composable.mjs",
677
658
  "proof:speedtest-boundary": "node scripts/proof-speedtest-boundary.mjs",
678
659
  "proof:glass-material-unified": "node scripts/proof-glass-material-unified.mjs",
@@ -683,9 +664,19 @@
683
664
  "proof:aurora-chrome-idiomatic": "node scripts/proof-aurora-chrome-idiomatic.mjs",
684
665
  "proof:aurora-preset-roster": "node scripts/proof-aurora-preset-roster.mjs",
685
666
  "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",
686
670
  "proof:dropdown-type-scale": "node scripts/proof-dropdown-type-scale.mjs",
687
671
  "proof:forced-colors-skin": "node scripts/proof-forced-colors-skin.mjs",
688
672
  "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",
689
680
  "proof:adaptive-glass": "node scripts/proof-adaptive-glass.mjs",
690
681
  "proof:dark-semantic-contrast": "node scripts/proof-dark-semantic-contrast.mjs",
691
682
  "proof:glass-material-demo": "node scripts/proof-glass-material-demo.mjs",
@@ -727,13 +718,11 @@
727
718
  "peerDependencies": {
728
719
  "@lucide/vue": "^1.16.0",
729
720
  "@mkbabb/keyframes.js": "^2.2.0 || ^3.0.0 || ^4.0.0",
730
- "@mkbabb/pencil-boil": "^0.4.0",
731
721
  "@mkbabb/value.js": "^0.10.0 || ^0.11.0",
732
722
  "@vueuse/core": "^14.0",
733
723
  "class-variance-authority": "^0.7",
734
724
  "clsx": "^2.0",
735
725
  "embla-carousel-vue": "^8.0",
736
- "perfect-freehand": "^1.2.3",
737
726
  "reka-ui": "^2.0",
738
727
  "tailwindcss": "^4.0",
739
728
  "tw-animate-css": "^1.2.5",
@@ -750,23 +739,16 @@
750
739
  "@mkbabb/keyframes.js": {
751
740
  "optional": true
752
741
  },
753
- "@mkbabb/pencil-boil": {
754
- "optional": true
755
- },
756
742
  "@mkbabb/value.js": {
757
743
  "optional": true
758
744
  },
759
- "perfect-freehand": {
760
- "optional": true
761
- },
762
745
  "tw-animate-css": {
763
746
  "optional": true
764
747
  }
765
748
  },
766
749
  "devDependencies": {
767
750
  "@lucide/vue": "^1.16.0",
768
- "@mkbabb/keyframes.js": "^2.2.0",
769
- "@mkbabb/pencil-boil": "^0.4.0",
751
+ "@mkbabb/keyframes.js": "^4.1.0",
770
752
  "@mkbabb/value.js": "^0.10.0",
771
753
  "@tailwindcss/postcss": "^4.3.0",
772
754
  "@tailwindcss/vite": "^4.3.0",
@@ -141,87 +141,31 @@
141
141
  100% { background-position: -200% 0; }
142
142
  }
143
143
 
144
- /* ── Crayon-wipe: the scroll-scrubbed draw-on (D6.c M1) ──────────────────────
144
+ /* ── Sparkle sweep: four-point star traverses a surface diagonally ──
145
145
  *
146
- * The bidirectional, scroll-scrubbed DRAW-ON of a hand-mark (the crayon/pen
147
- * underline, a drawn rule). The wipe is a `clip-path: inset()` of the LEFT edge
148
- * only — the mark draws from inset(0 100% 0 0) (fully clipped from the right, so
149
- * NOTHING shows) to inset(0) (fully revealed) — so the underline DRAWS as the
150
- * figure scrolls into view and UN-DRAWS as it scrolls back up. `clip-path` is the
151
- * compositor-eligible, FILTER-STABLE wipe (the medium's grain `feTurbulence`
152
- * rasters ONCE and is untouched by the clip — the cardinal "no per-frame raster"
153
- * discipline ds2-motion-field M1 names): clip-path animates on the compositor and
154
- * never re-runs the static filter, unlike a `stroke-dashoffset` draw under the
155
- * grain filter (which re-rasters per frame). The grammar mirrors scroll-driven.css
156
- * (the `view()`/`scroll()` timeline home): the keyframe lives here (the shared
157
- * @keyframes register); a consumer binds it to a NAMED `view-timeline` so the
158
- * draw-on SCRUBS bidirectionally with scroll (forward → draws, back → un-draws),
159
- * never a one-shot. The `.crayon-wipe` utility below is the binding.
160
- *
161
- * The keyframe itself is timeline-agnostic — it is equally a load-clock draw-on
162
- * (bound to a keyframes.js Sequence) or a scroll scrub (bound to a view-timeline).
163
- * The DEFAULT consumer is the scroll scrub (the figure-item underline drawing into
164
- * the lower third), hence the utility's `view()` binding.
165
- *
166
- * Reduced-motion: the utility (NOT the keyframe) gates — under PRM the mark is SET
167
- * to inset(0) (fully drawn, never animated), the correct degrade for a permanent
168
- * structural draw (information parity: the underline is present, just not drawn).
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).
169
150
  */
170
- @keyframes crayon-wipe {
171
- from {
172
- /* clipped from the RIGHT by 100% → the mark is fully hidden (nothing
173
- drawn yet); the left edge is the pen-tip about to move right. */
174
- clip-path: inset(0 100% 0 0);
151
+ @keyframes sparkle-sweep {
152
+ 0% {
153
+ transform: translate(-30%, -30%) scale(0.5);
154
+ opacity: 0;
175
155
  }
176
- to {
177
- /* fully revealed — the mark is wholly drawn. */
178
- clip-path: inset(0 0 0 0);
156
+ 25% {
157
+ opacity: 1;
179
158
  }
180
- }
181
-
182
- /* ── .crayon-wipe — bind the wipe to a scroll view-timeline (D6.c M1) ──────────
183
- * The scroll-scrubbed draw-on utility. A consumer puts `.crayon-wipe` on a
184
- * hand-mark surface (the underline span, a drawn rule) and the mark draws/un-draws
185
- * as it scrolls through its OWN `view()` timeline — a bidirectional scrub, free,
186
- * off the main thread. The animation is `paused` with `animation-timeline: view()`
187
- * so the scroll position IS the playhead (the native scroll-driven model — the
188
- * timeline drives the frame, time does not). The named timeline is overridable
189
- * (`--crayon-wipe-timeline`, default the element's own `view()`) so a consumer can
190
- * scrub off a SHARED beat timeline (the §--beat-tl the atlas scroll-driven.css
191
- * names) instead of the per-element view — that is the "named view-timeline so a
192
- * consumer scrubs a draw-on bidirectionally" contract.
193
- *
194
- * @supports-gated + PRM-OUTER-gated, mirroring scroll-driven.css exactly: the
195
- * whole binding sits under `prefers-reduced-motion: no-preference`, so under PRM
196
- * the animation never attaches and the mark renders in its terminal `inset(0)`
197
- * (fully-drawn) state — the static-draw degrade. The draw range is `entry`-keyed
198
- * (the mark draws as it ENTERS the lower viewport), tunable via
199
- * `--crayon-wipe-range-{start,end}`. */
200
- @media (prefers-reduced-motion: no-preference) {
201
- @supports ((animation-timeline: view()) and (animation-range: entry)) {
202
- .crayon-wipe {
203
- animation: crayon-wipe auto linear both;
204
- animation-timeline: var(--crayon-wipe-timeline, view(block));
205
- animation-range: var(--crayon-wipe-range-start, entry 0%)
206
- var(--crayon-wipe-range-end, cover 35%);
207
- }
159
+ 100% {
160
+ transform: translate(180%, 180%) scale(1.2);
161
+ opacity: 0;
208
162
  }
209
163
  }
210
164
 
211
- /* ── Sparkle sweep: TOMBSTONE (D6.b — the disco-star excision) ──
212
- *
213
- * @deprecated 3.10 — DELETE in 3.11. The four-point `✦` star sweep was the one
214
- * garish gesture in the library; the user named it for removal ("remove the disco
215
- * star from all glass-ui elements"). Every in-tree consumer is re-homed: the
216
- * `btn-audacious` hover affirmation now rides the specular catch-light alone; the
217
- * gold-CTA rides the `btn-gold-bg-sweep` metal-catch; the chassis `complete`
218
- * celebration re-homes to the `.text-gilt` one-shot (utilities.css). The keyframe
219
- * body is EMPTIED rather than deleted for ONE minor so any out-of-tree consumer
220
- * (the slides decks) fails SOFT — a no-op animation, not an unknown-animation
221
- * error. The `--duration-sparkle` token is `@deprecated` alongside (tokens.css).
222
- * Full delete (this block + the token + the theme bridge) lands in 3.11. */
223
- @keyframes sparkle-sweep {
224
- /* intentionally empty — tombstoned, see deprecation note above */
165
+ @media (prefers-reduced-motion: reduce) {
166
+ @keyframes sparkle-sweep {
167
+ 0%, 100% { opacity: 0; transform: none; }
168
+ }
225
169
  }
226
170
 
227
171
  /* ── Pulse dot bounce: dots variant of <Pulse> ──
@@ -98,6 +98,22 @@
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;
101
117
  gap: var(--dock-layer-rail-gap, 0.125rem);
102
118
  padding: var(--dock-layer-rail-padding, 0.125rem);
103
119
  background: var(--dock-layer-rail-bg, var(--surface-tint-8));
@@ -134,6 +150,12 @@
134
150
  display: inline-flex;
135
151
  align-items: center;
136
152
  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;
137
159
  width: var(--dock-layer-tab-size, var(--dock-control-size, 1.75rem));
138
160
  height: var(--dock-layer-tab-size, var(--dock-control-size, 1.75rem));
139
161
  border: 0;
@@ -196,9 +196,19 @@
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`. */
199
209
  .glass-dock:not(.vertical) .dock-layer {
200
210
  white-space: nowrap;
201
- height: var(--dock-layer-height, 2.5rem);
211
+ min-height: var(--dock-layer-height, 2.5rem);
202
212
  }
203
213
 
204
214
  .dock-layer.is-active {