@mkbabb/glass-ui 3.8.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 (164) hide show
  1. package/README.md +1 -6
  2. package/dist/{CardAction-q2qHCJFG.js → CardAction-DuArVky-.js} +4 -4
  3. package/dist/{CommandShortcut-SzWRhROC.js → CommandShortcut-CefCj5mt.js} +7 -7
  4. package/dist/{ContextMenuSubContent-Do977Cbf.js → ContextMenuSubContent-Bhg4f5jX.js} +3 -3
  5. package/dist/{DataTable-CvlWXz65.js → DataTable-CUHMukiQ.js} +1 -1
  6. package/dist/{DialogContent-DjZWT3lK.js → DialogContent-BRkT1cjP.js} +1 -1
  7. package/dist/{NumberFieldContent-CLNVR1iY.js → NumberFieldContent-BbLOh8RU.js} +2 -2
  8. package/dist/{SelectScrollDownButton-C7TRe-ep.js → SelectScrollDownButton-T32cVFeM.js} +3 -3
  9. package/dist/{SelectSeparator-L8pPEn4L.js → SelectSeparator-C4Ql0gzV.js} +1 -1
  10. package/dist/{TabsList-qyHZ2lKY.js → TabsList-B8CVOQPC.js} +2 -2
  11. package/dist/{Toaster-CabYEEF_.js → Toaster-1rYWrmAm.js} +1 -1
  12. package/dist/{ToggleGroupItem-CkXUcBlt.js → ToggleGroupItem-Cev4pOVK.js} +4 -4
  13. package/dist/animated-digit.js +1 -1
  14. package/dist/api/index.d.ts +1 -1
  15. package/dist/api.js +1 -1
  16. package/dist/aurora.js +10 -10
  17. package/dist/{badge-DHQrc_GQ.js → badge-BvwvT50i.js} +4 -4
  18. package/dist/badge.js +1 -1
  19. package/dist/{button-CAywcrhO.js → button-DN39cGqL.js} +13 -12
  20. package/dist/button.js +1 -1
  21. package/dist/card.js +1 -1
  22. package/dist/carousel.js +1 -1
  23. package/dist/color.js +1 -1
  24. package/dist/command.js +1 -1
  25. package/dist/{compile-BBTRjvQS.js → compile-DAjIoEy2.js} +1 -1
  26. package/dist/components/custom/configurator/ConfiguratorLayer.vue.d.ts +1 -1
  27. package/dist/components/custom/dock/DockSeparator.vue.d.ts +3 -0
  28. package/dist/components/custom/dock/GlassDock.vue.d.ts +45 -63
  29. package/dist/components/custom/dock/composables/dockContext.d.ts +7 -0
  30. package/dist/components/custom/dock/index.d.ts +2 -1
  31. package/dist/components/custom/goo-blob/composables/useBlobMood.d.ts +19 -5
  32. package/dist/components/custom/tabs/SegmentedTabs.vue.d.ts +92 -0
  33. package/dist/components/custom/tabs/composables/useTabIndicator.d.ts +49 -0
  34. package/dist/components/custom/tabs/index.d.ts +2 -5
  35. package/dist/components/ui/button/index.d.ts +1 -1
  36. package/dist/components/ui/card/Card.vue.d.ts +5 -3
  37. package/dist/components/ui/carousel/CarouselNext.vue.d.ts +1 -1
  38. package/dist/components/ui/carousel/CarouselPrevious.vue.d.ts +1 -1
  39. package/dist/components/ui/carousel/GlassCarouselPager.vue.d.ts +3 -4
  40. package/dist/components/ui/slider/index.d.ts +14 -7
  41. package/dist/components/ui/tabs/TabsList.vue.d.ts +1 -1
  42. package/dist/composables/context/createContext.d.ts +1 -1
  43. package/dist/configurator.js +1 -1
  44. package/dist/confirm-dialog.js +1 -1
  45. package/dist/constellation.js +1 -1
  46. package/dist/context-menu.js +1 -1
  47. package/dist/controls.js +1 -1
  48. package/dist/dark.js +1 -1
  49. package/dist/data-table.js +1 -1
  50. package/dist/deck-progress.js +1 -1
  51. package/dist/dialog.js +1 -1
  52. package/dist/dock.js +256 -243
  53. package/dist/{dropdown-menu-B_4bWyyG.js → dropdown-menu-D77jX6Df.js} +3 -3
  54. package/dist/dropdown-menu.js +1 -1
  55. package/dist/expandable-container.js +1 -1
  56. package/dist/forms.js +5 -5
  57. package/dist/fourier-field.js +3 -3
  58. package/dist/glass-ui.css +1 -1
  59. package/dist/glass-ui.js +101 -104
  60. package/dist/goo-blob.js +36 -32
  61. package/dist/hover-popover.js +1 -1
  62. package/dist/icon-tooltip.js +1 -1
  63. package/dist/index.d.ts +0 -2
  64. package/dist/keyboard.js +1 -1
  65. package/dist/labeled-field.js +4 -4
  66. package/dist/{menuItemVariants-DKM85SNE.js → menuItemVariants-CCoBNkU5.js} +1 -1
  67. package/dist/motion-core.js +4 -4
  68. package/dist/motion.js +2 -2
  69. package/dist/number-field.js +1 -1
  70. package/dist/pulse.js +1 -1
  71. package/dist/reactive.js +1 -1
  72. package/dist/scrolling-text.js +1 -1
  73. package/dist/search.js +4 -4
  74. package/dist/select.js +2 -2
  75. package/dist/{slider-D9puf-Ko.js → slider-DC2mwuoe.js} +1 -1
  76. package/dist/slider.js +1 -1
  77. package/dist/sortable-list.js +1 -1
  78. package/dist/status-dot.js +17 -16
  79. package/dist/styles/animations.css +6 -2
  80. package/dist/styles/components.css +1 -1
  81. package/dist/styles/dock/density.css +230 -0
  82. package/dist/styles/dock/layer-group.css +263 -0
  83. package/dist/styles/dock/layers.css +355 -0
  84. package/dist/styles/dock/morph.css +244 -0
  85. package/dist/styles/dock/overflow.css +201 -0
  86. package/dist/styles/dock/shell.css +457 -0
  87. package/dist/styles/dock-controls.css +166 -32
  88. package/dist/styles/dock.css +42 -1349
  89. package/dist/styles/glass.css +396 -75
  90. package/dist/styles/index.css +12 -11
  91. package/dist/styles/theme.css +51 -0
  92. package/dist/styles/tokens.css +501 -55
  93. package/dist/styles/utilities.css +89 -39
  94. package/dist/tabs.js +182 -151
  95. package/dist/timeline.js +1 -1
  96. package/dist/toast.js +1 -1
  97. package/dist/toggle-group.js +1 -1
  98. package/dist/{useAnimatedNumber-C_3wZLx4.js → useAnimatedNumber-C5I3wWd8.js} +1 -1
  99. package/dist/{useConfiguratorState-CMff4GzH.js → useConfiguratorState-DxAqksK6.js} +21 -10
  100. package/dist/watercolor-dot.js +1 -1
  101. package/package.json +32 -33
  102. package/src/styles/animations.css +6 -2
  103. package/src/styles/dock/density.css +230 -0
  104. package/src/styles/dock/layer-group.css +263 -0
  105. package/src/styles/dock/layers.css +355 -0
  106. package/src/styles/dock/morph.css +244 -0
  107. package/src/styles/dock/overflow.css +201 -0
  108. package/src/styles/dock/shell.css +457 -0
  109. package/src/styles/dock-controls.css +166 -32
  110. package/src/styles/dock.css +42 -1349
  111. package/src/styles/glass.css +396 -75
  112. package/src/styles/index.css +12 -11
  113. package/src/styles/theme.css +51 -0
  114. package/src/styles/tokens.css +501 -55
  115. package/src/styles/utilities.css +89 -39
  116. package/dist/DiscoGlyph-CG0F410s.js +0 -132
  117. package/dist/GlyphFace-DRjDkB0s.js +0 -51
  118. package/dist/UnderlineTabs-Uxn-R3MT.js +0 -39
  119. package/dist/components/custom/aurora/constants/shaders/painterly.wgsl.d.ts +0 -7
  120. package/dist/components/custom/aurora/constants/shaders/wake.wgsl.d.ts +0 -4
  121. package/dist/components/custom/disco-glyph/DiscoGlyph.vue.d.ts +0 -58
  122. package/dist/components/custom/disco-glyph/index.d.ts +0 -1
  123. package/dist/components/custom/glass-carousel/GlassCarousel.vue.d.ts +0 -36
  124. package/dist/components/custom/glass-carousel/GlassCarouselItem.vue.d.ts +0 -28
  125. package/dist/components/custom/glass-carousel/index.d.ts +0 -4
  126. package/dist/components/custom/glass-carousel/useGlassCarousel.d.ts +0 -30
  127. package/dist/components/custom/glyph-face/GlyphFace.vue.d.ts +0 -64
  128. package/dist/components/custom/glyph-face/index.d.ts +0 -2
  129. package/dist/components/custom/glyph-face/keys.d.ts +0 -9
  130. package/dist/components/custom/responsive-tabs/ResponsiveTabs.vue.d.ts +0 -73
  131. package/dist/components/custom/responsive-tabs/index.d.ts +0 -2
  132. package/dist/components/custom/tabs/BouncyTabs.vue.d.ts +0 -27
  133. package/dist/components/custom/tabs/BouncyToggle.vue.d.ts +0 -60
  134. package/dist/components/custom/tabs/UnderlineTabs.vue.d.ts +0 -20
  135. package/dist/components/custom/tabs/composables/useBouncySlider.d.ts +0 -39
  136. package/dist/disco-glyph.d.ts +0 -1
  137. package/dist/disco-glyph.js +0 -2
  138. package/dist/glass-carousel.d.ts +0 -1
  139. package/dist/glass-carousel.js +0 -219
  140. package/dist/glyph-face.d.ts +0 -1
  141. package/dist/glyph-face.js +0 -3
  142. package/dist/keys-BsYjEFOW.js +0 -9
  143. package/dist/responsive-tabs.d.ts +0 -1
  144. package/dist/responsive-tabs.js +0 -95
  145. package/dist/styles/disco-glyph.css +0 -26
  146. package/dist/styles/glyph-face.css +0 -92
  147. package/src/styles/disco-glyph.css +0 -26
  148. package/src/styles/glyph-face.css +0 -92
  149. /package/dist/{DeckProgress-AVgbIULY.js → DeckProgress-Dmk4_AKN.js} +0 -0
  150. /package/dist/{HoverPopover-D56O6Ylp.js → HoverPopover-2LOIW34a.js} +0 -0
  151. /package/dist/{IconTooltip-D2T5nYOM.js → IconTooltip-yefK7cJc.js} +0 -0
  152. /package/dist/{Input-DVG_J0ne.js → Input-DWQQIOC4.js} +0 -0
  153. /package/dist/{ScrollingText-CVyqxvfv.js → ScrollingText-BPP84wKo.js} +0 -0
  154. /package/dist/{color-DMLTunJK.js → color-8jBjWiJ6.js} +0 -0
  155. /package/dist/{constants-BPOqYJAm.js → constants-CS75AWHG.js} +0 -0
  156. /package/dist/{presets-D1XPuTj-.js → presets-BKVyQfbt.js} +0 -0
  157. /package/dist/{prng-COGhh02-.js → prng-wHuHlNHE.js} +0 -0
  158. /package/dist/{useGlobalDark-D3EBWzXK.js → useGlobalDark-yhL4Wp-s.js} +0 -0
  159. /package/dist/{useIntersectionPause-Bj4sPkMh.js → useIntersectionPause-Cc-H9ees.js} +0 -0
  160. /package/dist/{useInterval-CcLfq2WU.js → useInterval-Dsmqwi03.js} +0 -0
  161. /package/dist/{useKeyboardShortcuts-BXWXOZ-9.js → useKeyboardShortcuts-Be3w_Rwk.js} +0 -0
  162. /package/dist/{useScrollProgress-C9ysDic5.js → useScrollProgress-CAH8Ofwt.js} +0 -0
  163. /package/dist/{useSortable-MGAbCGVJ.js → useSortable-C8ReQ50P.js} +0 -0
  164. /package/dist/{useTextHighlight-9nMW23Qb.js → useTextHighlight-DON84L8w.js} +0 -0
package/dist/toast.js CHANGED
@@ -1,2 +1,2 @@
1
- import { a as e, c as t, i as n, n as r, o as i, r as a, s as o, t as s } from "./Toaster-CabYEEF_.js";
1
+ import { a as e, c as t, i as n, n as r, o as i, r as a, s as o, t as s } from "./Toaster-1rYWrmAm.js";
2
2
  export { t as Toast, o as ToastAction, i as ToastClose, e as ToastDescription, n as ToastTitle, s as Toaster, r as toast, a as useToast };
@@ -1,2 +1,2 @@
1
- import { n as e, t } from "./ToggleGroupItem-CkXUcBlt.js";
1
+ import { n as e, t } from "./ToggleGroupItem-Cev4pOVK.js";
2
2
  export { e as ToggleGroup, t as ToggleGroupItem };
@@ -1,4 +1,4 @@
1
- import { n as e, t } from "./constants-BPOqYJAm.js";
1
+ import { n as e, t } from "./constants-CS75AWHG.js";
2
2
  import { getCurrentScope as n, onScopeDispose as r, readonly as i, ref as a, shallowRef as o, toValue as s, watch as c } from "vue";
3
3
  import { SmoothProgress as l } from "@mkbabb/keyframes.js";
4
4
  //#region src/composables/motion/useAnimatedNumber.ts
@@ -22,7 +22,11 @@ var M = k.use, N = {
22
22
  class: "flex gap-2 overflow-x-auto scroll-fade-mask scrollbar-hidden",
23
23
  role: "tablist",
24
24
  "aria-label": "Presets"
25
- }, F = ["aria-selected", "onClick"], I = { class: "flex flex-col" }, L = {
25
+ }, F = [
26
+ "aria-selected",
27
+ "data-active",
28
+ "onClick"
29
+ ], I = { class: "flex flex-col" }, L = {
26
30
  key: 1,
27
31
  class: "configurator-footer shrink-0 border-t border-border/40 px-3 py-2"
28
32
  }, R = /* @__PURE__ */ p({
@@ -67,6 +71,7 @@ var M = k.use, N = {
67
71
  }
68
72
  });
69
73
  return (n, r) => (_(), l("section", {
74
+ "data-slot": "configurator",
70
75
  class: h(a.value),
71
76
  style: g(d.value)
72
77
  }, [u("div", { class: h(w(e)("configurator-stage relative min-h-0 min-w-0 overflow-hidden", f.value)) }, [x(n.$slots, "stage")], 2), u("aside", { class: h(w(e)("configurator-aside flex min-h-0 min-w-0 flex-col border-t border-border/40 lg:border-t-0", m.value, p.value)) }, [
@@ -77,8 +82,10 @@ var M = k.use, N = {
77
82
  key: n.key,
78
83
  type: "button",
79
84
  role: "tab",
85
+ "data-slot": "configurator-preset",
80
86
  "aria-selected": n.key === t.activePreset,
81
- class: h(w(e)("focus-ring shrink-0 rounded-pill border px-3 py-1 text-xs font-medium transition-colors", n.key === t.activePreset ? "border-foreground/40 bg-foreground text-background" : "border-border/40 bg-card/40 text-foreground hover:bg-card/70")),
87
+ "data-active": n.key === t.activePreset || void 0,
88
+ class: h(w(e)("tap-squish focus-ring transition-control shrink-0 rounded-pill border px-3 py-1 text-xs font-medium", n.key === t.activePreset ? "glass-quiet border-border/50 text-foreground" : "border-border/40 bg-card/40 text-foreground hover:bg-card/70")),
82
89
  onClick: (e) => i("select-preset", n.key)
83
90
  }, S(n.label), 11, F))), 128))])])])) : c("", !0),
84
91
  u("div", { class: h(w(e)("configurator-controls flex-1 min-h-0", v.value)) }, [x(n.$slots, "controls", {
@@ -101,7 +108,7 @@ var M = k.use, N = {
101
108
  "aria-hidden",
102
109
  "inert",
103
110
  "data-state"
104
- ], G = { class: "min-h-0 overflow-hidden" }, K = /* @__PURE__ */ p({
111
+ ], G = { class: "min-h-0 overflow-hidden" }, K = /* @__PURE__ */ r(/* @__PURE__ */ p({
105
112
  __name: "ConfiguratorLayer",
106
113
  props: /* @__PURE__ */ m({
107
114
  label: {},
@@ -143,17 +150,19 @@ var M = k.use, N = {
143
150
  }
144
151
  let p = s(() => i.value ? "open" : "closed");
145
152
  return (a, s) => (_(), l("div", {
153
+ "data-slot": "configurator-layer",
146
154
  class: h(w(e)("configurator-layer border-b border-border/40 last:border-b-0", r.class)),
147
155
  "data-state": p.value
148
156
  }, [u("button", {
149
157
  type: "button",
150
- class: h(w(e)("configurator-layer-trigger", "group flex w-full items-center justify-between gap-2 px-3 py-2", "text-left transition-colors hover:bg-foreground/5 focus-ring")),
158
+ "data-slot": "configurator-layer-trigger",
159
+ class: h(w(e)("configurator-layer-trigger", "group flex w-full items-center justify-between gap-2 px-3 py-2", "tap-squish transition-control text-left hover:bg-foreground/5 focus-ring")),
151
160
  "aria-expanded": i.value,
152
161
  "aria-controls": o.value,
153
162
  "data-state": p.value,
154
163
  onClick: d
155
164
  }, [u("div", V, [u("span", H, S(t.label), 1), t.sub ? (_(), l("span", U, S(t.sub), 1)) : c("", !0)]), f(w(n), {
156
- class: "h-4 w-4 shrink-0 text-muted-foreground transition-transform duration-200 group-data-[state=open]:rotate-180",
165
+ class: "configurator-layer-chevron h-4 w-4 shrink-0 text-muted-foreground group-data-[state=open]:rotate-180",
157
166
  "aria-hidden": "true"
158
167
  })], 10, B), u("div", {
159
168
  id: o.value,
@@ -161,11 +170,11 @@ var M = k.use, N = {
161
170
  "aria-hidden": !i.value,
162
171
  inert: !i.value || void 0,
163
172
  "data-state": p.value,
164
- class: "configurator-layer-region grid transition-[grid-template-rows] duration-200 ease-out motion-reduce:transition-none",
173
+ class: "configurator-layer-region grid motion-reduce:transition-none",
165
174
  style: g({ gridTemplateRows: i.value ? "1fr" : "0fr" })
166
- }, [u("div", G, [u("div", { class: h(w(e)("configurator-layer-body px-3 py-2 space-y-2", r.dividers && "[&>*+*]:border-t [&>*+*]:border-border/30 [&>*+*]:pt-2", r.bodyClass)) }, [x(a.$slots, "default")], 2)])], 12, W)], 10, z));
175
+ }, [u("div", G, [u("div", { class: h(w(e)("configurator-layer-body px-3 py-2 space-y-2", r.dividers && "[&>*+*]:border-t [&>*+*]:border-border/30 [&>*+*]:pt-2", r.bodyClass)) }, [x(a.$slots, "default", {}, void 0, !0)], 2)])], 12, W)], 10, z));
167
176
  }
168
- }), q = ["data-density"], J = { class: "flex items-baseline justify-between gap-3" }, Y = { class: "flex min-w-0 items-baseline gap-2" }, X = {
177
+ }), [["__scopeId", "data-v-1e14935d"]]), q = ["data-density"], J = { class: "flex items-baseline justify-between gap-3" }, Y = { class: "flex min-w-0 items-baseline gap-2" }, X = {
169
178
  key: 0,
170
179
  class: "truncate text-micro font-mono text-muted-foreground/70"
171
180
  }, Z = ["aria-label"], Q = { class: "flex items-center" }, $ = {
@@ -191,6 +200,7 @@ var M = k.use, N = {
191
200
  setup(t, { emit: n }) {
192
201
  let r = t, i = n, o = M(), p = s(() => r.density ?? o?.value ?? void 0);
193
202
  return (n, o) => (_(), l("div", {
203
+ "data-slot": "configurator-row",
194
204
  class: h(w(e)("configurator-row flex flex-col gap-1.5 py-2", r.class)),
195
205
  "data-density": p.value
196
206
  }, [
@@ -200,7 +210,8 @@ var M = k.use, N = {
200
210
  }), t.name ? (_(), l("span", X, S(t.name), 1)) : c("", !0)]), t.canReset ? (_(), l("button", {
201
211
  key: 0,
202
212
  type: "button",
203
- class: "focus-ring inline-flex h-6 w-6 items-center justify-center rounded-pill text-muted-foreground/60 transition-colors hover:bg-foreground/5 hover:text-foreground active:scale-[var(--scale-press,0.97)]",
213
+ "data-slot": "configurator-reset",
214
+ class: "tap-squish transition-control focus-ring inline-flex h-6 w-6 items-center justify-center rounded-pill text-muted-foreground/60 hover:bg-foreground/5 hover:text-foreground",
204
215
  "aria-label": `Reset ${t.label}`,
205
216
  onClick: o[0] ||= (e) => i("reset")
206
217
  }, [f(w(O), {
@@ -211,7 +222,7 @@ var M = k.use, N = {
211
222
  t.description ? (_(), l("p", $, S(t.description), 1)) : c("", !0)
212
223
  ], 10, q));
213
224
  }
214
- }), [["__scopeId", "data-v-1b71284c"]]);
225
+ }), [["__scopeId", "data-v-377e5920"]]);
215
226
  //#endregion
216
227
  //#region src/components/custom/configurator/useConfiguratorState.ts
217
228
  function te(e) {
@@ -1,5 +1,5 @@
1
1
  import { t as e } from "./_plugin-vue_export-helper-ok8pgSl5.js";
2
- import { n as t, t as n } from "./prng-COGhh02-.js";
2
+ import { n as t, t as n } from "./prng-wHuHlNHE.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.8.0",
3
+ "version": "3.9.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": {
@@ -46,9 +46,6 @@
46
46
  "stacked-icons": [
47
47
  "dist/stacked-icons.d.ts"
48
48
  ],
49
- "glass-carousel": [
50
- "dist/glass-carousel.d.ts"
51
- ],
52
49
  "aurora": [
53
50
  "dist/aurora.d.ts"
54
51
  ],
@@ -115,12 +112,6 @@
115
112
  "instrument-rail": [
116
113
  "dist/instrument-rail.d.ts"
117
114
  ],
118
- "glyph-face": [
119
- "dist/glyph-face.d.ts"
120
- ],
121
- "disco-glyph": [
122
- "dist/disco-glyph.d.ts"
123
- ],
124
115
  "hover-popover": [
125
116
  "dist/hover-popover.d.ts"
126
117
  ],
@@ -154,9 +145,6 @@
154
145
  "animated-digit": [
155
146
  "dist/animated-digit.d.ts"
156
147
  ],
157
- "responsive-tabs": [
158
- "dist/responsive-tabs.d.ts"
159
- ],
160
148
  "motion": [
161
149
  "dist/motion.d.ts"
162
150
  ],
@@ -293,10 +281,6 @@
293
281
  "types": "./dist/stacked-icons.d.ts",
294
282
  "import": "./dist/stacked-icons.js"
295
283
  },
296
- "./glass-carousel": {
297
- "types": "./dist/glass-carousel.d.ts",
298
- "import": "./dist/glass-carousel.js"
299
- },
300
284
  "./aurora": {
301
285
  "types": "./dist/aurora.d.ts",
302
286
  "import": "./dist/aurora.js"
@@ -349,10 +333,6 @@
349
333
  "types": "./dist/animated-digit.d.ts",
350
334
  "import": "./dist/animated-digit.js"
351
335
  },
352
- "./responsive-tabs": {
353
- "types": "./dist/responsive-tabs.d.ts",
354
- "import": "./dist/responsive-tabs.js"
355
- },
356
336
  "./status-dot": {
357
337
  "types": "./dist/status-dot.d.ts",
358
338
  "import": "./dist/status-dot.js"
@@ -405,14 +385,6 @@
405
385
  "types": "./dist/instrument-rail.d.ts",
406
386
  "import": "./dist/instrument-rail.js"
407
387
  },
408
- "./glyph-face": {
409
- "types": "./dist/glyph-face.d.ts",
410
- "import": "./dist/glyph-face.js"
411
- },
412
- "./disco-glyph": {
413
- "types": "./dist/disco-glyph.d.ts",
414
- "import": "./dist/disco-glyph.js"
415
- },
416
388
  "./hover-popover": {
417
389
  "types": "./dist/hover-popover.d.ts",
418
390
  "import": "./dist/hover-popover.js"
@@ -559,8 +531,8 @@
559
531
  "dev": "vite",
560
532
  "build": "vite build && npm run emit-types",
561
533
  "build:watch": "vite build --watch",
562
- "prepare": "test -f dist/glass-ui.js -a -f dist/index.d.ts || npm run build",
563
- "typecheck": "vue-tsc --noEmit",
534
+ "prepare": "node scripts/install-hooks.mjs && (test -f dist/glass-ui.js -a -f dist/index.d.ts || npm run build)",
535
+ "typecheck": "vue-tsc --noEmit && vue-tsc --noEmit -p tsconfig.test.json",
564
536
  "test": "vitest run",
565
537
  "verify-export-types": "node scripts/verify-export-types.mjs",
566
538
  "audit:stash": "node scripts/audit-stash-list.mjs",
@@ -577,6 +549,7 @@
577
549
  "proof:theme": "node scripts/proof-theme-style.mjs",
578
550
  "proof:components-css": "node scripts/proof-components-css.mjs",
579
551
  "proof:resolution": "node scripts/proof-resolution-contract.mjs",
552
+ "proof:consumer-staleness": "node scripts/proof-consumer-staleness.mjs",
580
553
  "proof:peer-conformance": "node scripts/proof-peer-conformance.mjs",
581
554
  "proof:phantom-classes": "node scripts/proof-phantom-classes.mjs",
582
555
  "proof:vt-names": "node scripts/proof-vt-names.mjs",
@@ -589,11 +562,16 @@
589
562
  "proof:dock-opacity-lockstep": "node scripts/proof-dock-opacity-lockstep.mjs",
590
563
  "proof:dock-a11y-contract": "vitest run tests/components/custom/dock/DockLayerRail.a11y.test.ts",
591
564
  "proof:dock-vocabulary": "node scripts/proof-dock-vocabulary.mjs",
565
+ "proof:dock-region-model": "node scripts/proof-dock-region-model.mjs",
566
+ "proof:dock-perfection": "node scripts/proof-dock-perfection.mjs",
567
+ "proof:dock-unify": "node scripts/proof-dock-unify.mjs",
568
+ "proof:dock-css-carve": "node scripts/proof-dock-css-carve.mjs",
592
569
  "proof:dock-css-split": "node scripts/proof-dock-controls-split.mjs",
593
570
  "proof:design-idiom-localization": "node scripts/proof-design-idiom-localization.mjs",
594
571
  "proof:tailwind-v4-idiom": "node scripts/proof-tailwind-v4-idiom.mjs",
595
572
  "proof:au-w9-consumers": "node scripts/proof-au-w9-consumers.mjs",
596
573
  "proof:shadow-contract": "node scripts/proof-shadow-contract.mjs",
574
+ "proof:squircle-language": "node scripts/proof-squircle-language.mjs",
597
575
  "proof:card-cartoon-consumers": "node scripts/proof-card-cartoon-consumers.mjs",
598
576
  "proof:doc-consistency": "node scripts/proof-doc-consistency.mjs",
599
577
  "proof:au-w0-reground": "node scripts/proof-au-w0-reground.mjs",
@@ -613,6 +591,7 @@
613
591
  "proof:no-orphan-demo-route": "node scripts/proof-no-orphan-demo-route.mjs",
614
592
  "proof:demo-dock-nav": "node scripts/proof-demo-dock-nav.mjs",
615
593
  "proof:demo-dock-nav-runtime": "node scripts/proof-demo-dock-nav-runtime.mjs",
594
+ "proof:demo-radial-calm": "node scripts/proof-demo-radial-calm.mjs",
616
595
  "proof:font-canon": "node scripts/proof-font-canon.mjs",
617
596
  "proof:font-cascade-live": "node scripts/proof-font-cascade-live.mjs",
618
597
  "proof:webgl-substrate-single": "node scripts/proof-webgl-substrate-single.mjs",
@@ -627,6 +606,7 @@
627
606
  "proof:blob-interaction-prm": "node scripts/proof-blob-interaction-prm.mjs",
628
607
  "proof:blob-mood-resolved": "node scripts/proof-blob-mood-resolved.mjs",
629
608
  "proof:blob-tempo-suppression": "node scripts/proof-blob-tempo-suppression.mjs",
609
+ "proof:aurora-fill-resize": "node scripts/proof-aurora-fill-resize.mjs",
630
610
  "proof:aurora-space-gamma": "node scripts/proof-aurora-space-gamma.mjs",
631
611
  "proof:aurora-oklch-interp": "node scripts/proof-aurora-oklch-interp.mjs",
632
612
  "proof:aurora-derive-gamut": "vitest run tests/components/custom/aurora/derive-color.test.ts",
@@ -648,6 +628,8 @@
648
628
  "proof:fail-explicit": "node scripts/proof-fail-explicit.mjs",
649
629
  "proof:no-god-module": "node scripts/proof-no-god-module.mjs",
650
630
  "proof:no-legacy-commentary": "node scripts/proof-no-legacy-commentary.mjs",
631
+ "proof:story-language": "node scripts/proof-story-language.mjs",
632
+ "proof:gate-detrap": "node scripts/proof-gate-detrap.mjs",
651
633
  "proof:liquid-glass-tokens": "node scripts/proof-liquid-glass-tokens.mjs",
652
634
  "proof:lockfile": "node scripts/proof-lockfile.mjs",
653
635
  "proof:di-consistency": "node scripts/proof-di-consistency.mjs",
@@ -663,13 +645,26 @@
663
645
  "proof:text-highlight": "vitest run tests/composables/motion/text-highlight-home.test.ts tests/composables/motion/useTextHighlight.test.ts",
664
646
  "proof:constellation-field": "vitest run tests/components/custom/constellation/constellationField.test.ts",
665
647
  "proof:input-invalid-aria": "node scripts/proof-input-invalid-aria.mjs",
666
- "proof:styling-hygiene": "node scripts/proof-styling-hygiene.mjs",
667
648
  "proof:subpath-enumeration": "node scripts/proof-subpath-enumeration.mjs",
668
649
  "proof:no-orphan-composable": "node scripts/proof-no-orphan-composable.mjs",
669
650
  "proof:speedtest-boundary": "node scripts/proof-speedtest-boundary.mjs",
670
651
  "proof:glass-material-unified": "node scripts/proof-glass-material-unified.mjs",
652
+ "proof:liquid-glass-material": "node scripts/proof-liquid-glass-material.mjs",
653
+ "proof:glass-level": "node scripts/proof-glass-level.mjs",
654
+ "proof:page-redesign": "node scripts/proof-page-redesign.mjs",
655
+ "proof:configurator-glass-atoms": "node scripts/proof-configurator-glass-atoms.mjs",
656
+ "proof:aurora-chrome-idiomatic": "node scripts/proof-aurora-chrome-idiomatic.mjs",
657
+ "proof:aurora-preset-roster": "node scripts/proof-aurora-preset-roster.mjs",
658
+ "proof:ui-scale": "node scripts/proof-ui-scale.mjs",
659
+ "proof:dropdown-type-scale": "node scripts/proof-dropdown-type-scale.mjs",
660
+ "proof:forced-colors-skin": "node scripts/proof-forced-colors-skin.mjs",
661
+ "proof:glass-one-model": "node scripts/proof-glass-level.mjs --one-model",
662
+ "proof:adaptive-glass": "node scripts/proof-adaptive-glass.mjs",
663
+ "proof:dark-semantic-contrast": "node scripts/proof-dark-semantic-contrast.mjs",
664
+ "proof:glass-material-demo": "node scripts/proof-glass-material-demo.mjs",
665
+ "proof:blob-live-truth": "node scripts/proof-blob-live-truth.mjs",
666
+ "proof:tabs-unified": "node scripts/proof-tabs-unified.mjs",
671
667
  "proof:glass-material-sota": "node scripts/proof-glass-material-sota.mjs",
672
- "proof:glass-card-tiers": "node scripts/proof-glass-card-tiers.mjs",
673
668
  "proof:primitive-affordance": "node scripts/proof-primitive-affordance.mjs",
674
669
  "proof:reka-binding-idiom": "node scripts/proof-reka-binding-idiom.mjs",
675
670
  "proof:animation-coherence": "node scripts/proof-animation-coherence.mjs",
@@ -681,7 +676,11 @@
681
676
  "proof:blob-integration": "node scripts/proof-blob-integration.mjs",
682
677
  "proof:gate-script-parity": "node scripts/proof-gate-script-parity.mjs",
683
678
  "proof:all": "node scripts/gates.mjs --run local",
679
+ "proof:live-verified-ledger": "node scripts/proof-live-verified-ledger.mjs",
680
+ "proof:disposition-live": "node scripts/proof-disposition-live.mjs",
681
+ "proof:gen-ci-fresh": "node scripts/proof-gen-ci-fresh.mjs",
684
682
  "gates:verify-ci": "node scripts/gates.mjs --verify-ci",
683
+ "gates:emit-ci": "node scripts/gates.mjs --emit-ci",
685
684
  "profile:bundle": "node scripts/profile-bundle.mjs",
686
685
  "profile:budget": "node scripts/profile-bundle.mjs --enforce",
687
686
  "profile:aurora": "node scripts/profile-aurora.mjs",
@@ -214,14 +214,18 @@
214
214
  * through <Pulse variant="aura">.
215
215
  */
216
216
  @keyframes ambient-pulse {
217
+ /* AX.W57 (P6) — the aura breath reads its OWN element-opacity range
218
+ (`--pulse-aura-breath-{min,max}`, 0.28↔0.42), decoupled from the
219
+ shared `--pulse-aura-opacity-*` skeleton-shimmer stops so the halo
220
+ breathes as an ambient wash, never up to the 0.95 shimmer peak. */
217
221
  0%,
218
222
  100% {
219
223
  transform: scale(var(--animate-ambient-pulse-scale-min, 1));
220
- opacity: var(--pulse-aura-opacity-min, 0.55);
224
+ opacity: var(--pulse-aura-breath-min, 0.28);
221
225
  }
222
226
  50% {
223
227
  transform: scale(var(--animate-ambient-pulse-scale-max, 1.15));
224
- opacity: var(--pulse-aura-opacity-max, 0.95);
228
+ opacity: var(--pulse-aura-breath-max, 0.42);
225
229
  }
226
230
  }
227
231
 
@@ -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
+ }