@mkbabb/glass-ui 3.7.0 → 3.9.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 (261) hide show
  1. package/README.md +1 -6
  2. package/dist/CardAction-DuArVky-.js +157 -0
  3. package/dist/{CommandShortcut-CY0aQTz5.js → CommandShortcut-CefCj5mt.js} +7 -7
  4. package/dist/{ContextMenuSubContent-BeDz7G6f.js → ContextMenuSubContent-Bhg4f5jX.js} +3 -3
  5. package/dist/{DataTable-gtPOLZvl.js → DataTable-CUHMukiQ.js} +4 -4
  6. package/dist/DeckProgress-Dmk4_AKN.js +23 -0
  7. package/dist/{DialogContent-DG1YMR-P.js → DialogContent-BRkT1cjP.js} +3 -3
  8. package/dist/{DialogFooter-BCIaDP15.js → DialogFooter-Gprw8H_A.js} +1 -1
  9. package/dist/{HoverPopover-DXpOEw1P.js → HoverPopover-2LOIW34a.js} +1 -1
  10. package/dist/{IconTooltip-Cu86JR4e.js → IconTooltip-yefK7cJc.js} +1 -1
  11. package/dist/{MetricBadge-D-bRaQUD.js → MetricBadge-lTc002u2.js} +1 -1
  12. package/dist/{Notification-B5WHP3_1.js → Notification-BxK8LZMw.js} +1 -1
  13. package/dist/{NumberFieldContent-CLNVR1iY.js → NumberFieldContent-BbLOh8RU.js} +2 -2
  14. package/dist/{PopoverContent-F1bWnYoh.js → PopoverContent-BId6ggf_.js} +1 -1
  15. package/dist/{Progress-c4vo4ALi.js → Progress-iEuD9pxG.js} +4 -4
  16. package/dist/{ScrollingText-BEp377U5.js → ScrollingText-BPP84wKo.js} +2 -2
  17. package/dist/{SelectScrollDownButton-DAo5NmY_.js → SelectScrollDownButton-T32cVFeM.js} +4 -4
  18. package/dist/{SelectSeparator-COFMJGng.js → SelectSeparator-C4Ql0gzV.js} +1 -1
  19. package/dist/{TabsList-COqIdW7i.js → TabsList-B8CVOQPC.js} +2 -2
  20. package/dist/{Toaster-BMaeziJJ.js → Toaster-1rYWrmAm.js} +1 -1
  21. package/dist/{ToggleGroupItem-C-AIkBUw.js → ToggleGroupItem-Cev4pOVK.js} +5 -5
  22. package/dist/animated-digit.js +1 -1
  23. package/dist/api/index.d.ts +5 -3
  24. package/dist/aurora.js +339 -408
  25. package/dist/{badge-DHQrc_GQ.js → badge-BvwvT50i.js} +4 -4
  26. package/dist/badge.js +1 -1
  27. package/dist/{button-CAywcrhO.js → button-DN39cGqL.js} +13 -12
  28. package/dist/button.js +1 -1
  29. package/dist/canvas.d.ts +1 -0
  30. package/dist/canvas.js +3 -0
  31. package/dist/card.js +1 -1
  32. package/dist/carousel.js +106 -105
  33. package/dist/collapsible.js +1 -1
  34. package/dist/{color-DjJCAQ6f.js → color-8jBjWiJ6.js} +22 -14
  35. package/dist/color.js +2 -2
  36. package/dist/command.js +1 -1
  37. package/dist/compile-DAjIoEy2.js +158 -0
  38. package/dist/components/custom/aurora/composables/atoms.d.ts +90 -25
  39. package/dist/components/custom/aurora/composables/color.d.ts +0 -12
  40. package/dist/components/custom/aurora/composables/uniformBridge.d.ts +34 -23
  41. package/dist/components/custom/aurora/constants/presets.d.ts +10 -7
  42. package/dist/components/custom/aurora/constants/renderMode.d.ts +22 -0
  43. package/dist/components/custom/aurora/constants/shaders/aurora.wgsl.d.ts +1 -1
  44. package/dist/components/custom/aurora/constants/shaders/brush.glsl.d.ts +1 -1
  45. package/dist/components/custom/aurora/constants/shaders/composition.glsl.d.ts +1 -1
  46. package/dist/components/custom/aurora/constants/shaders/mediums.glsl.d.ts +1 -1
  47. package/dist/components/custom/aurora/index.d.ts +3 -3
  48. package/dist/components/custom/configurator/ConfiguratorLayer.vue.d.ts +1 -1
  49. package/dist/components/custom/constellation/Constellation.vue.d.ts +40 -5
  50. package/dist/components/custom/constellation/constellationField.d.ts +110 -5
  51. package/dist/components/custom/constellation/index.d.ts +2 -2
  52. package/dist/components/custom/dock/DockSeparator.vue.d.ts +3 -0
  53. package/dist/components/custom/dock/GlassDock.vue.d.ts +57 -67
  54. package/dist/components/custom/dock/composables/dockContext.d.ts +7 -0
  55. package/dist/components/custom/dock/composables/dockMorphContext.d.ts +57 -0
  56. package/dist/components/custom/dock/composables/index.d.ts +3 -0
  57. package/dist/components/custom/dock/composables/useDockHold.d.ts +61 -0
  58. package/dist/components/custom/dock/composables/useLayerTransition.d.ts +13 -59
  59. package/dist/components/custom/dock/index.d.ts +4 -1
  60. package/dist/components/custom/goo-blob/GooBlob.vue.d.ts +13 -0
  61. package/dist/components/custom/goo-blob/composables/useBlobMood.d.ts +23 -5
  62. package/dist/components/custom/goo-blob/composables/useBlobPointer.d.ts +2 -0
  63. package/dist/components/custom/goo-blob/composables/useBlobSatellites.d.ts +2 -0
  64. package/dist/components/custom/goo-blob/composables/useMetaballRenderer.d.ts +20 -5
  65. package/dist/components/custom/goo-blob/index.d.ts +1 -1
  66. package/dist/components/custom/goo-blob/shaders/sdf-body.glsl.d.ts +1 -1
  67. package/dist/components/custom/goo-blob/shaders/watercolor-edges.glsl.d.ts +2 -2
  68. package/dist/components/custom/goo-blob/types.d.ts +8 -0
  69. package/dist/components/custom/tabs/SegmentedTabs.vue.d.ts +92 -0
  70. package/dist/components/custom/tabs/composables/useTabIndicator.d.ts +49 -0
  71. package/dist/components/custom/tabs/index.d.ts +2 -5
  72. package/dist/components/ui/button/index.d.ts +1 -1
  73. package/dist/components/ui/card/Card.vue.d.ts +28 -10
  74. package/dist/components/ui/card/index.d.ts +1 -1
  75. package/dist/components/ui/carousel/CarouselNext.vue.d.ts +1 -1
  76. package/dist/components/ui/carousel/CarouselPrevious.vue.d.ts +1 -1
  77. package/dist/components/ui/carousel/GlassCarouselPager.vue.d.ts +3 -4
  78. package/dist/components/ui/progress/ProgressDefault.vue.d.ts +14 -4
  79. package/dist/components/ui/slider/Slider.vue.d.ts +3 -1
  80. package/dist/components/ui/slider/index.d.ts +14 -7
  81. package/dist/components/ui/tabs/TabsList.vue.d.ts +1 -1
  82. package/dist/composables/color/index.d.ts +19 -0
  83. package/dist/composables/context/createContext.d.ts +1 -1
  84. package/dist/composables/dom/index.d.ts +1 -1
  85. package/dist/composables/dom/useResolveTokenColor.d.ts +27 -0
  86. package/dist/composables/glass/canvas2d/index.d.ts +2 -1
  87. package/dist/composables/glass/canvas2d/resolveCanvasColor.d.ts +20 -0
  88. package/dist/composables/glass/canvas2d/useCanvas2D.d.ts +15 -1
  89. package/dist/composables/glass/index.d.ts +3 -1
  90. package/dist/composables/glass/useSpecularTracking.d.ts +33 -0
  91. package/dist/composables/glass/webgl/createCanvasLifecycle.d.ts +1 -1
  92. package/dist/composables/glass/webgl/shaders/procedural-color.glsl.d.ts +4 -0
  93. package/dist/composables/glass/webgl/useWebGLCanvas.d.ts +1 -1
  94. package/dist/composables/motion/core/index.d.ts +1 -0
  95. package/dist/configurator.js +1 -1
  96. package/dist/confirm-dialog.js +2 -2
  97. package/dist/constellation.js +143 -74
  98. package/dist/context-menu.js +2 -2
  99. package/dist/controls.js +1 -1
  100. package/dist/data-table.js +1 -1
  101. package/dist/deck-progress.d.ts +1 -0
  102. package/dist/deck-progress.js +2 -0
  103. package/dist/dialog.js +2 -2
  104. package/dist/dock.js +468 -354
  105. package/dist/{dockContext-DLgrVWsU.js → dockContext-BKeIMmNk.js} +1 -1
  106. package/dist/dom.js +6 -6
  107. package/dist/{dropdown-menu-BWpwutt0.js → dropdown-menu-D77jX6Df.js} +4 -4
  108. package/dist/dropdown-menu.js +1 -1
  109. package/dist/fonts/README.md +26 -18
  110. package/dist/forms.js +5 -5
  111. package/dist/fourier-field.js +35 -35
  112. package/dist/glass-panel.js +7 -7
  113. package/dist/glass-ui.css +1 -1
  114. package/dist/glass-ui.js +154 -169
  115. package/dist/goo-blob.js +361 -274
  116. package/dist/header-ribbon.js +1 -1
  117. package/dist/hover-card.js +1 -1
  118. package/dist/hover-popover.js +1 -1
  119. package/dist/icon-tooltip.js +1 -1
  120. package/dist/index.d.ts +1 -2
  121. package/dist/instrument-chassis.js +1 -1
  122. package/dist/instrument-rail.js +1 -1
  123. package/dist/label.js +1 -1
  124. package/dist/labeled-field.js +5 -5
  125. package/dist/{menuItemVariants-B4eFR5Ix.js → menuItemVariants-CCoBNkU5.js} +1 -1
  126. package/dist/metric-badge.js +1 -1
  127. package/dist/metric-stack.js +1 -1
  128. package/dist/motion-core.js +65 -65
  129. package/dist/motion.js +1 -1
  130. package/dist/notification.js +1 -1
  131. package/dist/number-field.js +1 -1
  132. package/dist/paper-backdrop.js +1 -1
  133. package/dist/popover.js +1 -1
  134. package/dist/progress.js +1 -1
  135. package/dist/pulse.js +2 -2
  136. package/dist/reactive.js +2 -2
  137. package/dist/resolveCanvasColor-BBiYfp8g.js +11 -0
  138. package/dist/scrolling-text.js +1 -1
  139. package/dist/search.js +9 -9
  140. package/dist/select.js +3 -3
  141. package/dist/separator.js +1 -1
  142. package/dist/{sheet-Cv1uO-Gq.js → sheet-VZEtNFvO.js} +2 -2
  143. package/dist/sheet.js +1 -1
  144. package/dist/slider-DC2mwuoe.js +142 -0
  145. package/dist/slider.js +1 -1
  146. package/dist/sortable-list.js +2 -2
  147. package/dist/status-dot.js +17 -16
  148. package/dist/styles/animations.css +6 -2
  149. package/dist/styles/components.css +1 -1
  150. package/dist/styles/dock/density.css +230 -0
  151. package/dist/styles/dock/layer-group.css +263 -0
  152. package/dist/styles/dock/layers.css +355 -0
  153. package/dist/styles/dock/morph.css +244 -0
  154. package/dist/styles/dock/overflow.css +201 -0
  155. package/dist/styles/dock/shell.css +457 -0
  156. package/dist/styles/dock-controls.css +187 -50
  157. package/dist/styles/dock.css +65 -1181
  158. package/dist/styles/fonts.css +0 -25
  159. package/dist/styles/glass.css +482 -102
  160. package/dist/styles/index.css +12 -11
  161. package/dist/styles/theme.css +60 -2
  162. package/dist/styles/tokens.css +625 -72
  163. package/dist/styles/typography.css +52 -69
  164. package/dist/styles/utilities.css +91 -40
  165. package/dist/styles/view-transition.css +12 -40
  166. package/dist/switch.js +1 -1
  167. package/dist/tabs.js +183 -152
  168. package/dist/timeline.js +3 -3
  169. package/dist/toast.js +1 -1
  170. package/dist/toggle-group.js +1 -1
  171. package/dist/tooltip.js +1 -1
  172. package/dist/typewriter.js +1 -1
  173. package/dist/{useCanvas2D-C31yfUGY.js → useCanvas2D-ClrQuZtp.js} +2 -1
  174. package/dist/{useConfiguratorState-B24TcgIn.js → useConfiguratorState-DxAqksK6.js} +24 -13
  175. package/dist/useResolveTokenColor-r9pnNjqK.js +24 -0
  176. package/dist/useSpecularTracking-BVRZsRHA.js +26 -0
  177. package/dist/{useTextHighlight-aMPdEpkq.js → useTextHighlight-DON84L8w.js} +1 -1
  178. package/dist/{useTouchGate-YQRwyUGU.js → useTouchGate-WFyJYsth.js} +1 -1
  179. package/dist/vReveal-CqaCz_mC.js +44 -0
  180. package/dist/watercolor-dot.js +1 -1
  181. package/package.json +67 -36
  182. package/src/fonts/README.md +26 -18
  183. package/src/styles/animations.css +6 -2
  184. package/src/styles/dock/density.css +230 -0
  185. package/src/styles/dock/layer-group.css +263 -0
  186. package/src/styles/dock/layers.css +355 -0
  187. package/src/styles/dock/morph.css +244 -0
  188. package/src/styles/dock/overflow.css +201 -0
  189. package/src/styles/dock/shell.css +457 -0
  190. package/src/styles/dock-controls.css +187 -50
  191. package/src/styles/dock.css +65 -1181
  192. package/src/styles/fonts.css +0 -25
  193. package/src/styles/glass.css +482 -102
  194. package/src/styles/index.css +12 -11
  195. package/src/styles/theme.css +60 -2
  196. package/src/styles/tokens.css +625 -72
  197. package/src/styles/typography.css +52 -69
  198. package/src/styles/utilities.css +91 -40
  199. package/src/styles/view-transition.css +12 -40
  200. package/dist/CardAction-D8nSE62a.js +0 -163
  201. package/dist/DiscoGlyph-ZoBYpoxI.js +0 -132
  202. package/dist/GlyphFace-Ce_oe3tM.js +0 -51
  203. package/dist/UnderlineTabs-D_c1iYo-.js +0 -39
  204. package/dist/compile-iM4IUB66.js +0 -158
  205. package/dist/components/custom/aurora/constants/shaders/painterly.wgsl.d.ts +0 -7
  206. package/dist/components/custom/aurora/constants/shaders/wake.wgsl.d.ts +0 -4
  207. package/dist/components/custom/disco-glyph/DiscoGlyph.vue.d.ts +0 -58
  208. package/dist/components/custom/disco-glyph/index.d.ts +0 -1
  209. package/dist/components/custom/glass-carousel/GlassCarousel.vue.d.ts +0 -36
  210. package/dist/components/custom/glass-carousel/GlassCarouselItem.vue.d.ts +0 -28
  211. package/dist/components/custom/glass-carousel/index.d.ts +0 -4
  212. package/dist/components/custom/glass-carousel/useGlassCarousel.d.ts +0 -30
  213. package/dist/components/custom/glyph-face/GlyphFace.vue.d.ts +0 -64
  214. package/dist/components/custom/glyph-face/index.d.ts +0 -2
  215. package/dist/components/custom/glyph-face/keys.d.ts +0 -9
  216. package/dist/components/custom/responsive-tabs/ResponsiveTabs.vue.d.ts +0 -73
  217. package/dist/components/custom/responsive-tabs/index.d.ts +0 -2
  218. package/dist/components/custom/tabs/BouncyTabs.vue.d.ts +0 -27
  219. package/dist/components/custom/tabs/BouncyToggle.vue.d.ts +0 -60
  220. package/dist/components/custom/tabs/UnderlineTabs.vue.d.ts +0 -20
  221. package/dist/components/custom/tabs/composables/useBouncySlider.d.ts +0 -39
  222. package/dist/disco-glyph.d.ts +0 -1
  223. package/dist/disco-glyph.js +0 -2
  224. package/dist/fonts/fraunces/fraunces-latin.woff2 +0 -0
  225. package/dist/glass-carousel.d.ts +0 -1
  226. package/dist/glass-carousel.js +0 -214
  227. package/dist/glyph-face.d.ts +0 -1
  228. package/dist/glyph-face.js +0 -3
  229. package/dist/keys-Dyf_uTs5.js +0 -9
  230. package/dist/responsive-tabs.d.ts +0 -1
  231. package/dist/responsive-tabs.js +0 -95
  232. package/dist/slider-BA9wIs5e.js +0 -130
  233. package/dist/styles/disco-glyph.css +0 -26
  234. package/dist/styles/glyph-face.css +0 -92
  235. package/dist/useViewTransition-DaN5Zrox.js +0 -21
  236. package/dist/vReveal-BE2TsPoR.js +0 -24
  237. package/src/fonts/fraunces/fraunces-latin.woff2 +0 -0
  238. package/src/styles/disco-glyph.css +0 -26
  239. package/src/styles/glyph-face.css +0 -92
  240. /package/dist/{CollapsibleContent-D7UNsXQr.js → CollapsibleContent-CP9qF1v4.js} +0 -0
  241. /package/dist/{ContextMenuContent-DGKZX1Du.js → ContextMenuContent-DDa0v27s.js} +0 -0
  242. /package/dist/{HoverCardContent-Bn0UBMY9.js → HoverCardContent-B6CcQ8He.js} +0 -0
  243. /package/dist/{InstrumentChassis-BLJBl1BW.js → InstrumentChassis-C2f6cBaQ.js} +0 -0
  244. /package/dist/{InstrumentRail-BElFwKyt.js → InstrumentRail-CUJ05YVG.js} +0 -0
  245. /package/dist/{Label-DBc7bKzZ.js → Label-zRfbQdCn.js} +0 -0
  246. /package/dist/{ModalOverlay-D1VrWyoi.js → ModalOverlay-B1GkAjNb.js} +0 -0
  247. /package/dist/{PaperBackdrop-DCGoGatv.js → PaperBackdrop-CqwjnfLv.js} +0 -0
  248. /package/dist/{SelectGroup-BcaFjvP4.js → SelectGroup-BFiod7X2.js} +0 -0
  249. /package/dist/{Separator-DZyqsCum.js → Separator-D7sD7RKj.js} +0 -0
  250. /package/dist/{Switch-2rsAtDfA.js → Switch-LDKLmmgx.js} +0 -0
  251. /package/dist/{TooltipProvider-CD2IXfRv.js → TooltipProvider-CmZzCuaG.js} +0 -0
  252. /package/dist/{_plugin-vue_export-helper-gLzyemvl.js → _plugin-vue_export-helper-ok8pgSl5.js} +0 -0
  253. /package/dist/composables/{dom → motion}/useTextHighlight.d.ts +0 -0
  254. /package/dist/{createContext-CvNyBk4o.js → createContext-B44Sah_H.js} +0 -0
  255. /package/dist/{useGlassRenderer-HebgSEgN.js → useGlassRenderer-5I0YkI4t.js} +0 -0
  256. /package/dist/{useInterval-D3USn0yc.js → useInterval-Dsmqwi03.js} +0 -0
  257. /package/dist/{useResizeObserver-CSyxGxIX.js → useResizeObserver-CWCbk5Px.js} +0 -0
  258. /package/dist/{useSpringMount-LRZqJTaF.js → useSpringMount-BJSHcLl3.js} +0 -0
  259. /package/dist/{useTimer-DEJonOZa.js → useTimer-3xqf_54b.js} +0 -0
  260. /package/dist/{useUserInvalidAria-CQKjEfwP.js → useUserInvalidAria-DoJKMZ3s.js} +0 -0
  261. /package/dist/{useViewportReady-K96m-Mdv.js → useViewportReady-RIr5Wgkh.js} +0 -0
@@ -0,0 +1,230 @@
1
+ /* dock/density.css — the density × `--dock-scale` cascade (AX.W06 carve).
2
+ *
3
+ * Carved from the dock.css god-module (slice 25). This partial owns the W45
4
+ * density cascade: every per-density geometry axis (padding / control-size /
5
+ * layer-height / gap / tile-min / trigger+tab padding) is `calc(<base> *
6
+ * var(--dock-scale))` so the ONE `--dock-scale` multiplier grows box+pad+gap+
7
+ * tab+tile in lockstep on touch, with the inner `max(…, --dock-control-floor)`
8
+ * WCAG 2.5.5 clamp. The four rungs (compact · comfortable · spacious · audacious)
9
+ * + the audacious narrow-box `@container` label compression.
10
+ *
11
+ * @import-ed by dock.css in cascade order, in the SAME `@layer components` — the
12
+ * carve is isomorphic (same layer, same source order → ZERO visual delta). */
13
+
14
+ @layer components {
15
+ /* AX.W45 — the density cascade is threaded by the ONE `--dock-scale`
16
+ multiplier (default 1, lifted to `--dock-mobile-scale` on coarse pointers).
17
+ EVERY per-density geometry axis is `calc(<base> * var(--dock-scale))` so a
18
+ single knob grows box+pad+gap+tab+tile-min in lockstep on touch — the desktop
19
+ proportion preserved, never a 44px box around a desktop glyph. The
20
+ control-size carries an INNER `max(…, 44px)` WCAG 2.5.5 clamp (the coarse
21
+ block sets `--dock-control-floor: var(--dock-touch-target)`) so a consumer
22
+ dialing `--dock-mobile-scale` below 1.0 cannot drop the touch target under the
23
+ floor — the floor survives as a CLAMP, not a parallel `@media` rule. `--dock-
24
+ tile-min` is now IN the cascade (DK4-b) so the grid tile scales with the
25
+ control + glyph; it is a proportional `calc(control-size + tile-pad)` so the
26
+ icon-to-tile margin is ONE knob, not a per-density literal. */
27
+ .glass-dock[data-density="compact"] {
28
+ --dock-padding-block: calc(
29
+ var(--dock-density-compact-padding-block, 0.25rem) * var(--dock-scale)
30
+ );
31
+ --dock-padding-inline: calc(
32
+ var(--dock-density-compact-padding-inline, 0.375rem) * var(--dock-scale)
33
+ );
34
+ --dock-control-size: max(
35
+ calc(var(--dock-density-compact-control-size, 2rem) * var(--dock-scale)),
36
+ var(--dock-control-floor, 0px)
37
+ );
38
+ --dock-layer-height: max(
39
+ calc(var(--dock-density-compact-layer-height, 2rem) * var(--dock-scale)),
40
+ var(--dock-control-floor, 0px)
41
+ );
42
+ --dock-layer-gap: calc(
43
+ var(--dock-density-compact-gap, 0.25rem) * var(--dock-scale)
44
+ );
45
+ --dock-tile-min: calc(
46
+ var(--dock-control-size) + var(--dock-tile-pad, 1rem) * var(--dock-scale)
47
+ );
48
+ --dock-trigger-padding-block: calc(
49
+ var(--dock-density-compact-trigger-padding-block, 0.1875rem) *
50
+ var(--dock-scale)
51
+ );
52
+ --dock-trigger-padding-inline: calc(
53
+ var(--dock-density-compact-trigger-padding-inline, 0.4375rem) *
54
+ var(--dock-scale)
55
+ );
56
+ --dock-tab-padding-block: calc(
57
+ var(--dock-density-compact-tab-padding-block, 0.3125rem) *
58
+ var(--dock-scale)
59
+ );
60
+ --dock-tab-padding-inline: calc(
61
+ var(--dock-density-compact-tab-padding-inline, 0.625rem) *
62
+ var(--dock-scale)
63
+ );
64
+ --dock-tab-h: calc(32px * var(--dock-scale));
65
+ }
66
+
67
+ /* Comfortable density — the GlassDock default. Sits between compact
68
+ and spacious. */
69
+ .glass-dock[data-density="comfortable"] {
70
+ --dock-padding-block: calc(
71
+ var(--dock-density-comfortable-padding-block, 0.375rem) * var(--dock-scale)
72
+ );
73
+ --dock-padding-inline: calc(
74
+ var(--dock-density-comfortable-padding-inline, 0.5rem) * var(--dock-scale)
75
+ );
76
+ --dock-control-size: max(
77
+ calc(
78
+ var(--dock-density-comfortable-control-size, 2.5rem) *
79
+ var(--dock-scale)
80
+ ),
81
+ var(--dock-control-floor, 0px)
82
+ );
83
+ --dock-layer-height: max(
84
+ calc(
85
+ var(--dock-density-comfortable-layer-height, 2.5rem) *
86
+ var(--dock-scale)
87
+ ),
88
+ var(--dock-control-floor, 0px)
89
+ );
90
+ --dock-layer-gap: calc(
91
+ var(--dock-density-comfortable-gap, 0.375rem) * var(--dock-scale)
92
+ );
93
+ --dock-tile-min: calc(
94
+ var(--dock-control-size) + var(--dock-tile-pad, 2rem) * var(--dock-scale)
95
+ );
96
+ --dock-trigger-padding-block: calc(
97
+ var(--dock-density-comfortable-trigger-padding-block, 0.25rem) *
98
+ var(--dock-scale)
99
+ );
100
+ --dock-trigger-padding-inline: calc(
101
+ var(--dock-density-comfortable-trigger-padding-inline, 0.5rem) *
102
+ var(--dock-scale)
103
+ );
104
+ --dock-tab-padding-block: calc(
105
+ var(--dock-density-comfortable-tab-padding-block, 0.4375rem) *
106
+ var(--dock-scale)
107
+ );
108
+ --dock-tab-padding-inline: calc(
109
+ var(--dock-density-comfortable-tab-padding-inline, 0.75rem) *
110
+ var(--dock-scale)
111
+ );
112
+ --dock-tab-h: calc(38px * var(--dock-scale));
113
+ }
114
+
115
+ .glass-dock[data-density="spacious"] {
116
+ --dock-padding-block: calc(
117
+ var(--dock-density-spacious-padding-block, 0.5rem) * var(--dock-scale)
118
+ );
119
+ --dock-padding-inline: calc(
120
+ var(--dock-density-spacious-padding-inline, 0.75rem) * var(--dock-scale)
121
+ );
122
+ --dock-control-size: max(
123
+ calc(
124
+ var(--dock-density-spacious-control-size, 2.75rem) * var(--dock-scale)
125
+ ),
126
+ var(--dock-control-floor, 0px)
127
+ );
128
+ --dock-layer-height: max(
129
+ calc(
130
+ var(--dock-density-spacious-layer-height, 2.75rem) * var(--dock-scale)
131
+ ),
132
+ var(--dock-control-floor, 0px)
133
+ );
134
+ --dock-layer-gap: calc(
135
+ var(--dock-density-spacious-gap, 0.5rem) * var(--dock-scale)
136
+ );
137
+ --dock-tile-min: calc(
138
+ var(--dock-control-size) + var(--dock-tile-pad, 2.75rem) * var(--dock-scale)
139
+ );
140
+ --dock-trigger-padding-block: calc(
141
+ var(--dock-density-spacious-trigger-padding-block, 0.375rem) *
142
+ var(--dock-scale)
143
+ );
144
+ --dock-trigger-padding-inline: calc(
145
+ var(--dock-density-spacious-trigger-padding-inline, 0.625rem) *
146
+ var(--dock-scale)
147
+ );
148
+ --dock-tab-padding-block: calc(
149
+ var(--dock-density-spacious-tab-padding-block, 0.5rem) * var(--dock-scale)
150
+ );
151
+ --dock-tab-padding-inline: calc(
152
+ var(--dock-density-spacious-tab-padding-inline, 0.875rem) *
153
+ var(--dock-scale)
154
+ );
155
+ --dock-tab-h: calc(44px * var(--dock-scale));
156
+ }
157
+
158
+ /* Audacious density — typography-forward chrome where the dock reads as
159
+ a primary surface, not a tray. Tab buttons set their own min-height so
160
+ consumer-bumped fonts no longer drift the button height — the
161
+ `--dock-tab-min-height` token reserves the row regardless of glyph rise. */
162
+ .glass-dock[data-density="audacious"] {
163
+ --dock-padding-block: calc(
164
+ var(--dock-density-audacious-padding-block, 0.5rem) * var(--dock-scale)
165
+ );
166
+ --dock-padding-inline: calc(
167
+ var(--dock-density-audacious-padding-inline, 0.875rem) * var(--dock-scale)
168
+ );
169
+ --dock-control-size: max(
170
+ calc(var(--dock-density-audacious-control-size, 4rem) * var(--dock-scale)),
171
+ var(--dock-control-floor, 0px)
172
+ );
173
+ --dock-layer-height: max(
174
+ calc(var(--dock-density-audacious-layer-height, 4rem) * var(--dock-scale)),
175
+ var(--dock-control-floor, 0px)
176
+ );
177
+ --dock-layer-gap: calc(
178
+ var(--dock-density-audacious-gap, 0.875rem) * var(--dock-scale)
179
+ );
180
+ --dock-tile-min: calc(
181
+ var(--dock-control-size) + var(--dock-tile-pad, 2.75rem) * var(--dock-scale)
182
+ );
183
+ --dock-trigger-padding-block: calc(
184
+ var(--dock-density-audacious-trigger-padding-block, 0.625rem) *
185
+ var(--dock-scale)
186
+ );
187
+ --dock-trigger-padding-inline: calc(
188
+ var(--dock-density-audacious-trigger-padding-inline, 1rem) *
189
+ var(--dock-scale)
190
+ );
191
+ --dock-tab-padding-block: calc(
192
+ var(--dock-density-audacious-tab-padding-block, 0.5rem) * var(--dock-scale)
193
+ );
194
+ --dock-tab-padding-inline: calc(
195
+ var(--dock-density-audacious-tab-padding-inline, 1.5rem) *
196
+ var(--dock-scale)
197
+ );
198
+ --dock-tab-min-height: calc(
199
+ var(--dock-density-audacious-tab-min-height, 3.5rem) * var(--dock-scale)
200
+ );
201
+ --dock-tab-h: calc(
202
+ var(--dock-density-audacious-tab-min-height, 3.5rem) * var(--dock-scale)
203
+ );
204
+ }
205
+
206
+ /* Density-audacious narrow-box carve (AV.W16 TW3) — when the dock's OWN
207
+ box is narrow the audacious-dock label glyphs compress so the chrome
208
+ doesn't overflow its host (≤14px below 30rem, 15px 30–45rem). Keyed off
209
+ the dock's `dock` inline-size container — now OPT-IN via the
210
+ `containerName="dock"` prop (AW.W1 removed the always-on default that
211
+ broke shrink-to-fit), so it fires only for a dock the consumer has
212
+ width-CONSTRAINED into a host (the 320px sidebar case) where the
213
+ compression is meaningful and the containment does not collapse the box.
214
+ A free-floating dock shrink-wraps (box == content) so there is nothing to
215
+ compress. The var
216
+ is set on the `.dock-label` descendant (which reads it via
217
+ `font-size: var(--dock-label-size)`, typography.css). Thresholds keep
218
+ the prior 479/719px viewport cadence as box widths (30rem ≈ 480px,
219
+ 45rem ≈ 720px at the 16px root). */
220
+ @container dock (max-width: 29.9375rem) {
221
+ .glass-dock[data-density="audacious"] .dock-label {
222
+ --dock-label-size: 14px;
223
+ }
224
+ }
225
+ @container dock (min-width: 30rem) and (max-width: 44.9375rem) {
226
+ .glass-dock[data-density="audacious"] .dock-label {
227
+ --dock-label-size: 15px;
228
+ }
229
+ }
230
+ }
@@ -0,0 +1,263 @@
1
+ /* dock/layer-group.css — `.dock-layer-group` / layer-switcher rail / stack
2
+ * (AX.W06 carve).
3
+ *
4
+ * Carved from the dock.css god-module (slice 25). This partial owns the
5
+ * `<DockLayerGroup>` family: the `<DockSeparator>` orientation+layout-aware
6
+ * paint (vertical hairline · horizontal rule · grid section-break), the
7
+ * `.dock-spacer`, the `.dock-layer-group` flex axes, the `.dock-layer-rail`
8
+ * layer-switcher rail (the W45 DK8 rail-bg plate + the axis-aware travelling
9
+ * `.dock-layer-tab-indicator`), the `.dock-layer-stack`, and the axis-aware
10
+ * `.dock-layer-item-host` pane.
11
+ *
12
+ * NOTE: this `.dock-layer-rail` is the LAYER-SWITCHER rail inside a
13
+ * `<DockLayerGroup>` — distinct from the `GlassDock variant="rail"` navigation
14
+ * column (dock/shell.css + dock-controls.css) and the `<InstrumentRail>` cockpit
15
+ * chassis (instrument-rail). The three share the noun, not the architecture.
16
+ *
17
+ * @import-ed by dock.css in cascade order, in the SAME `@layer components` — the
18
+ * carve is isomorphic (same layer, same source order → ZERO visual delta). */
19
+
20
+ @layer components {
21
+ /* AX.W45 D13-c / DK5 — the `<DockSeparator>` paint source. The separator is now
22
+ a first-class orientation+layout-aware primitive (DockSeparator.vue) that
23
+ carries the orientation contract the bare class could not. It demarcates dock
24
+ item GROUPS (transport | navigation | settings) for affordance hierarchy. The
25
+ paint is PERPENDICULAR to the layout axis:
26
+ - row dock (horizontal, the default) → a VERTICAL 1px hairline
27
+ - column dock (vertical / rail) → a HORIZONTAL 1px rule, cross-extent
28
+ - grid dock (`layout="grid"`) → a full-row SECTION BREAK
29
+ The component sets `data-orientation` from `useOptionalDockContext`; the
30
+ dock-root ancestor class (`.glass-dock.vertical` / `.layout-grid`) drives the
31
+ perpendicular paint so the same primitive reads correctly at every layout. */
32
+ .dock-separator {
33
+ @apply flex-shrink-0;
34
+ width: 1px;
35
+ height: var(--dock-separator-height);
36
+ margin: 0 0.375rem;
37
+ background: var(--surface-tint-15);
38
+ }
39
+
40
+ /* Column (vertical) dock — a HORIZONTAL hairline across the column's cross
41
+ extent (a 1px-WIDE vertical sliver does not divide a stack). */
42
+ .glass-dock.vertical .dock-separator,
43
+ .dock-layer-group.vertical .dock-separator,
44
+ .dock-separator[data-orientation="vertical"] {
45
+ width: var(--dock-separator-height);
46
+ height: 1px;
47
+ align-self: center;
48
+ margin: 0.375rem 0;
49
+ }
50
+
51
+ /* Grid (big-dock) — a full-row SECTION BREAK spanning every column, the
52
+ Launchpad-style group demarcation (a 1px sliver in one cell is useless). */
53
+ .glass-dock.layout-grid .dock-separator {
54
+ grid-column: 1 / -1;
55
+ width: 100%;
56
+ height: 1px;
57
+ margin: var(--dock-layer-gap, 0.375rem) 0;
58
+ align-self: center;
59
+ }
60
+
61
+ .dock-spacer {
62
+ @apply flex-1;
63
+ }
64
+
65
+ .dock-layer-group {
66
+ display: flex;
67
+ gap: var(--dock-layer-group-gap, var(--dock-layer-gap, 0.25rem));
68
+ min-width: 0;
69
+ min-height: 0;
70
+ }
71
+
72
+ .dock-layer-group.horizontal {
73
+ flex-direction: row;
74
+ align-items: stretch;
75
+ }
76
+
77
+ .dock-layer-group.horizontal.rail-end {
78
+ flex-direction: row-reverse;
79
+ }
80
+
81
+ .dock-layer-group.vertical {
82
+ flex-direction: column;
83
+ align-items: stretch;
84
+ }
85
+
86
+ .dock-layer-group.vertical.rail-end {
87
+ flex-direction: column-reverse;
88
+ }
89
+
90
+ /* AX.W45 DK8 — the rail gets its OWN surface plate. Previously the rail was a
91
+ bare bordered gutter (a hairline `border-right`, no background), so its
92
+ `--primary 15%` indicator + `--accent 40%` hover were tuned against an absent
93
+ plate (the "bg's not right"). The `--dock-layer-rail-bg` rung (a quiet
94
+ `--surface-tint-8` default, consumer-overridable) gives the rail a finished
95
+ glass-quiet surface; the hover/active affordance reads the `--dock-layer-rail-
96
+ {hover,active}` tokens, so the whole rail ladder is tunable from §10. */
97
+ .dock-layer-rail {
98
+ display: flex;
99
+ flex-direction: column;
100
+ flex-shrink: 0;
101
+ gap: var(--dock-layer-rail-gap, 0.125rem);
102
+ padding: var(--dock-layer-rail-padding, 0.125rem);
103
+ background: var(--dock-layer-rail-bg, var(--surface-tint-8));
104
+ border-radius: var(--dock-layer-rail-radius, var(--radius-md));
105
+ border-right: 1px solid color-mix(in srgb, var(--border) 30%, transparent);
106
+ }
107
+
108
+ .dock-layer-group.vertical .dock-layer-rail {
109
+ flex-direction: row;
110
+ border-right: none;
111
+ border-bottom: 1px solid color-mix(in srgb, var(--border) 30%, transparent);
112
+ }
113
+
114
+ .dock-layer-group.horizontal.rail-end .dock-layer-rail {
115
+ border-right: none;
116
+ border-left: 1px solid color-mix(in srgb, var(--border) 30%, transparent);
117
+ }
118
+
119
+ .dock-layer-group.vertical.rail-end .dock-layer-rail {
120
+ border-bottom: none;
121
+ border-top: 1px solid color-mix(in srgb, var(--border) 30%, transparent);
122
+ }
123
+
124
+ /* AU.W8.4 — the rail is a reka-ui Tabs contract. The travelling
125
+ `.dock-layer-tab-indicator` (the reka TabsIndicator) now carries the
126
+ active affordance; the rail is `position: relative` so the indicator's
127
+ absolute placement is rail-local. */
128
+ .dock-layer-rail {
129
+ position: relative;
130
+ }
131
+
132
+ .dock-layer-rail .dock-layer-tab {
133
+ position: relative;
134
+ display: inline-flex;
135
+ align-items: center;
136
+ justify-content: center;
137
+ width: var(--dock-layer-tab-size, var(--dock-control-size, 1.75rem));
138
+ height: var(--dock-layer-tab-size, var(--dock-control-size, 1.75rem));
139
+ border: 0;
140
+ border-radius: var(--dock-layer-tab-radius, var(--radius-sm));
141
+ background: transparent;
142
+ color: var(--muted-foreground);
143
+ cursor: pointer;
144
+ font: inherit;
145
+ font-size: 0.75rem;
146
+ /* The tab glyph rides above the travelling indicator backplate. */
147
+ z-index: 1;
148
+ transition:
149
+ background var(--dock-motion-fast),
150
+ color var(--dock-motion-fast);
151
+ }
152
+
153
+ .dock-layer-rail .dock-layer-tab:hover {
154
+ background: var(
155
+ --dock-layer-rail-hover,
156
+ color-mix(in srgb, var(--accent) 40%, transparent)
157
+ );
158
+ color: var(--foreground);
159
+ }
160
+
161
+ /* AU.W8.4 — KEEP the active glyph tint on the selected tab (reka emits
162
+ `data-state="active"` + `aria-selected="true"`); the per-button active
163
+ BACKGROUND is RETIRED — the travelling indicator carries that affordance. */
164
+ .dock-layer-rail .dock-layer-tab[data-state="active"] {
165
+ color: var(--primary);
166
+ }
167
+
168
+ /* AU.W8.4 — the dock control focus-ring contract does not cover
169
+ `.dock-layer-tab` (the rail tab is not in the `.dock-icon-button` family).
170
+ The roving tabindex means only the active tab is in the tab order; a
171
+ focus-visible tab paints the shared dock ring. */
172
+ .dock-layer-rail [role="tab"]:focus-visible {
173
+ box-shadow: var(--focus-ring-shadow);
174
+ outline: none;
175
+ }
176
+
177
+ /* AX.W45 DK8 — the travelling indicator is now AXIS-AWARE. reka computes
178
+ `--reka-tabs-indicator-position`/`-size` for the axis the `<Tabs orientation>`
179
+ names; DockLayerGroup threads the group axis into it (`orientation="vertical"`
180
+ for the DEFAULT column rail, `"horizontal"` for the `.vertical` group's row
181
+ rail). The DEFAULT (horizontal-group) rail is a COLUMN of stacked tabs, so the
182
+ indicator travels the BLOCK (Y) axis — the prior `translateX` + `top:0` pinned
183
+ it at the top tab and it NEVER reached the active tab below (the mis-alignment
184
+ the user screenshotted). The default rule below travels Y; the `.vertical`
185
+ group's ROW rail overrides back to X. The active-tab plate reads the tunable
186
+ `--dock-layer-rail-active` rung. Both morph on `--dock-motion-resize`. */
187
+ .dock-layer-rail .dock-layer-tab-indicator {
188
+ position: absolute;
189
+ left: 0;
190
+ top: 0;
191
+ width: var(--dock-layer-tab-size, var(--dock-control-size, 1.75rem));
192
+ height: var(--reka-tabs-indicator-size);
193
+ transform: translateY(var(--reka-tabs-indicator-position));
194
+ border-radius: var(--dock-layer-tab-radius, var(--radius-sm));
195
+ background: var(
196
+ --dock-layer-rail-active,
197
+ color-mix(in srgb, var(--primary) 15%, transparent)
198
+ );
199
+ transition:
200
+ width var(--dock-motion-resize),
201
+ height var(--dock-motion-resize),
202
+ transform var(--dock-motion-resize);
203
+ pointer-events: none;
204
+ }
205
+
206
+ /* The `.vertical` group's rail is a ROW of tabs (flex-direction: row), so the
207
+ indicator travels the INLINE (X) axis — the row layout, reka
208
+ `orientation="horizontal"`. */
209
+ .dock-layer-group.vertical .dock-layer-rail .dock-layer-tab-indicator {
210
+ height: var(--dock-layer-tab-size, var(--dock-control-size, 1.75rem));
211
+ width: var(--reka-tabs-indicator-size);
212
+ transform: translateX(var(--reka-tabs-indicator-position));
213
+ }
214
+
215
+ .dock-layer-stack {
216
+ position: relative;
217
+ display: grid;
218
+ /* AW.W2 — the morph axis (width for a horizontal group, height for a
219
+ vertical one) is driven by the `useLayerTransition` SpringProgress in
220
+ pixel space (FLIP path) or the View-Transition (native path); a CSS
221
+ `width`/`height` transition here would be a SECOND driver on the same
222
+ axis (the AV.W9.0 dual-driver race that froze the dock). The cross axis
223
+ is intrinsic-sized and never morphs. So NO size transition on the stack
224
+ — one owner per axis. */
225
+ }
226
+
227
+ /* Base layout — the crossfade + hit-test contract is shared with
228
+ `.dock-layer` above (see "Layer crossfade + hit-test contract"). The
229
+ default state is inactive: absolute + inset:0. */
230
+ .dock-layer-item-host {
231
+ grid-area: 1 / 1;
232
+ display: flex;
233
+ align-items: center;
234
+ white-space: nowrap;
235
+ gap: var(--dock-layer-gap, 0.375rem);
236
+ position: absolute;
237
+ inset: 0;
238
+ }
239
+
240
+ .dock-layer-item-host.is-active {
241
+ position: relative;
242
+ inset: auto;
243
+ width: max-content;
244
+ min-width: 0;
245
+ }
246
+
247
+ /* AP.W3 — axis-aware layer pane. The stack + `useLayerTransition` are
248
+ axis-aware, but the pane was hardcoded to a no-wrap ROW with
249
+ `width: max-content` — forcing a `vertical` group's content onto one
250
+ horizontal line that could not grow down (the vertical-overflow fight).
251
+ A vertical group stacks in a column, stretches, wraps, and block-sizes
252
+ to the height the stack animates. Horizontal byte-identical. */
253
+ .dock-layer-group.vertical .dock-layer-item-host {
254
+ flex-direction: column;
255
+ align-items: stretch;
256
+ white-space: normal;
257
+ }
258
+
259
+ .dock-layer-group.vertical .dock-layer-item-host.is-active {
260
+ width: auto;
261
+ height: max-content;
262
+ }
263
+ }