@mkbabb/glass-ui 2.1.0 → 3.1.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 (194) hide show
  1. package/dist/{CardFooter-Yi0xtLLd.js → CardFooter-CSGcJkqa.js} +1 -1
  2. package/dist/{CommandShortcut-_INFUMu6.js → CommandShortcut-DWT19a2Y.js} +3 -3
  3. package/dist/{ContextMenuSubContent-DCkweFW9.js → ContextMenuSubContent-gAFxJ-qi.js} +1 -1
  4. package/dist/{DataTable-Ce00dbHD.js → DataTable-R8-Zidms.js} +3 -3
  5. package/dist/{DialogContent-CmCijgX9.js → DialogContent-2fALDSvc.js} +3 -3
  6. package/dist/{DialogFooter-DRdaCok0.js → DialogFooter-ClrNEOVU.js} +2 -2
  7. package/dist/{DiscoGlyph-wRA02zAJ.js → DiscoGlyph-C3JfMnRV.js} +1 -1
  8. package/dist/{GlyphFace-BnPMUZ16.js → GlyphFace-BRS8vUb7.js} +1 -1
  9. package/dist/HoverPopover-CWFCfLx3.js +96 -0
  10. package/dist/{IconTooltip-ge_mBSWR.js → IconTooltip-BkaA7tZ2.js} +1 -1
  11. package/dist/{Input-CbakTe3B.js → Input-DDpFn568.js} +3 -5
  12. package/dist/Label-DJty89bp.js +36 -0
  13. package/dist/{MetricBadge-DRBB18Xq.js → MetricBadge-DmAihkXd.js} +1 -1
  14. package/dist/{Notification-DrI1DT2v.js → Notification-OqIpADml.js} +2 -2
  15. package/dist/NumberFieldContent-DTH9gb_N.js +141 -0
  16. package/dist/{PopoverContent-BCH4eYs8.js → PopoverContent-EiklFrna.js} +1 -1
  17. package/dist/{Progress-CCH-2UBR.js → Progress-FApA9fm_.js} +1 -1
  18. package/dist/{ScrollingText-7P8skg5W.js → ScrollingText-BFd0i2zJ.js} +2 -2
  19. package/dist/{SelectScrollDownButton-yu8EYUnu.js → SelectScrollDownButton-Dth8-wXQ.js} +2 -2
  20. package/dist/{Toaster-DY8_jtHv.js → Toaster-Bjlunvq4.js} +69 -58
  21. package/dist/UnderlineTabs-DAWMLmJG.js +37 -0
  22. package/dist/animated-digit.js +2 -2
  23. package/dist/api/index.d.ts +2 -0
  24. package/dist/api.js +1 -1
  25. package/dist/aurora.js +103 -90
  26. package/dist/badge.js +1 -1
  27. package/dist/{button-BlOW34DT.js → button-C0aHmBbt.js} +2 -0
  28. package/dist/button.js +1 -1
  29. package/dist/card.js +1 -1
  30. package/dist/carousel.js +1 -1
  31. package/dist/collapsible.js +1 -1
  32. package/dist/command.js +1 -1
  33. package/dist/components/custom/aurora/composables/runtime.d.ts +24 -1
  34. package/dist/components/custom/dialog-native/GlassDialogNative.vue.d.ts +57 -0
  35. package/dist/components/custom/dialog-native/index.d.ts +1 -0
  36. package/dist/components/custom/dock/composables/useLayerTransition.d.ts +20 -10
  37. package/dist/components/custom/hover-popover/HoverPopover.vue.d.ts +26 -4
  38. package/dist/components/custom/labeled-field/LabeledField.vue.d.ts +16 -2
  39. package/dist/components/custom/labeled-field/LabeledInput.vue.d.ts +17 -1
  40. package/dist/components/custom/labeled-field/LabeledSelect.vue.d.ts +2 -0
  41. package/dist/components/custom/labeled-field/LabeledSlider.vue.d.ts +2 -0
  42. package/dist/components/custom/labeled-field/LabeledSwitch.vue.d.ts +2 -0
  43. package/dist/components/custom/toggle-chip/ToggleChip.vue.d.ts +6 -4
  44. package/dist/components/ui/input/Input.vue.d.ts +10 -7
  45. package/dist/components/ui/label/Label.vue.d.ts +8 -0
  46. package/dist/components/ui/textarea/Textarea.vue.d.ts +45 -8
  47. package/dist/components/ui/toast/Toaster.vue.d.ts +7 -1
  48. package/dist/components/ui/toast/index.d.ts +1 -0
  49. package/dist/composables/dark/index.d.ts +1 -0
  50. package/dist/composables/dom/index.d.ts +2 -0
  51. package/dist/composables/dom/useIdleReady.d.ts +63 -0
  52. package/dist/composables/dom/useUserInvalidAria.d.ts +32 -0
  53. package/dist/composables/index.d.ts +1 -0
  54. package/dist/composables/motion/core/index.d.ts +8 -0
  55. package/dist/composables/motion/index.d.ts +0 -7
  56. package/dist/composables/motion/supportsCssTimeline.d.ts +8 -0
  57. package/dist/composables/motion/useRAFLoop.d.ts +7 -0
  58. package/dist/composables/motion/useScrollProgress.d.ts +6 -2
  59. package/dist/composables/motion/useStaggerReveal.d.ts +6 -0
  60. package/dist/composables/motion/useViewTransition.d.ts +31 -0
  61. package/dist/composables/motion/useYieldToMain.d.ts +29 -0
  62. package/dist/configurator.js +1 -1
  63. package/dist/confirm-dialog.js +2 -2
  64. package/dist/constants-DwBwnG8N.js +13 -0
  65. package/dist/context-menu.js +2 -2
  66. package/dist/controls.js +2 -2
  67. package/dist/dark.d.ts +1 -1
  68. package/dist/dark.js +13 -2
  69. package/dist/data-table.js +1 -1
  70. package/dist/dialog.js +2 -2
  71. package/dist/disco-glyph.js +1 -1
  72. package/dist/dock.js +195 -176
  73. package/dist/dom.js +5 -4
  74. package/dist/{dropdown-menu-2K-SGkZU.js → dropdown-menu-BvRUamNs.js} +2 -2
  75. package/dist/dropdown-menu.js +1 -1
  76. package/dist/expandable-container.js +3 -3
  77. package/dist/forms.d.ts +1 -0
  78. package/dist/forms.js +47 -42
  79. package/dist/glass-carousel.js +1 -1
  80. package/dist/glass-panel.js +2 -2
  81. package/dist/glass-ui.css +1 -1
  82. package/dist/glass-ui.js +156 -275
  83. package/dist/glyph-face.js +2 -2
  84. package/dist/header-ribbon.js +1 -1
  85. package/dist/hover-card.js +1 -1
  86. package/dist/hover-popover.js +1 -1
  87. package/dist/icon-tooltip.js +1 -1
  88. package/dist/index.d.ts +1 -0
  89. package/dist/instrument-chassis.js +1 -1
  90. package/dist/instrument-rail.js +1 -1
  91. package/dist/keyboard.js +1 -1
  92. package/dist/label.js +1 -1
  93. package/dist/labeled-field.js +96 -57
  94. package/dist/metric-badge.js +1 -1
  95. package/dist/metric-stack.js +1 -1
  96. package/dist/motion-core.d.ts +1 -0
  97. package/dist/motion-core.js +229 -0
  98. package/dist/motion.js +26 -228
  99. package/dist/notification.js +1 -1
  100. package/dist/number-field.d.ts +1 -0
  101. package/dist/number-field.js +2 -0
  102. package/dist/paper-backdrop.js +1 -1
  103. package/dist/popover.js +1 -1
  104. package/dist/progress.js +1 -1
  105. package/dist/pulse.js +1 -1
  106. package/dist/reactive.js +2 -2
  107. package/dist/responsive-tabs.js +3 -3
  108. package/dist/scrolling-text.js +1 -1
  109. package/dist/search.js +6 -6
  110. package/dist/select.js +3 -3
  111. package/dist/separator.js +1 -1
  112. package/dist/{sheet-CLVkb3AO.js → sheet-CukNDezz.js} +53 -53
  113. package/dist/sheet.js +1 -1
  114. package/dist/{slider-BQaLYFLh.js → slider-DJvHkTRe.js} +3 -3
  115. package/dist/slider.js +1 -1
  116. package/dist/sortable-list.js +2 -2
  117. package/dist/styles/animations.css +77 -0
  118. package/dist/styles/cards.css +6 -2
  119. package/dist/styles/dock.css +109 -109
  120. package/dist/styles/drawer.css +2 -2
  121. package/dist/styles/glass.css +89 -6
  122. package/dist/styles/index.css +10 -1
  123. package/dist/styles/instrument-chassis.css +28 -1
  124. package/dist/styles/scroll-driven.css +72 -0
  125. package/dist/styles/theme.css +6 -0
  126. package/dist/styles/tokens.css +345 -289
  127. package/dist/styles/typography.css +65 -131
  128. package/dist/styles/utilities.css +199 -81
  129. package/dist/styles/view-transition.css +62 -0
  130. package/dist/switch.d.ts +1 -0
  131. package/dist/switch.js +2 -0
  132. package/dist/tabs.js +40 -36
  133. package/dist/timeline.js +2 -2
  134. package/dist/toast.js +1 -1
  135. package/dist/toggle-group.js +1 -1
  136. package/dist/tooltip.js +1 -1
  137. package/dist/typewriter.js +1 -1
  138. package/dist/{useAnimatedNumber-DcvTR9B4.js → useAnimatedNumber-DKQYVB7s.js} +9 -20
  139. package/dist/{useConfiguratorState-BlaevW0S.js → useConfiguratorState-BR5vUDL8.js} +5 -5
  140. package/dist/{useBreakpoint-BHlX-MhR.js → useIdleReady-Cmkhm03v.js} +30 -2
  141. package/dist/{useTouchGate-BhhEMlwJ.js → useTouchGate-D9Zvrzyc.js} +1 -1
  142. package/dist/useUserInvalidAria-DVu1eTXG.js +29 -0
  143. package/dist/useViewTransition-DYIK6Gzb.js +16 -0
  144. package/dist/utils/index.d.ts +1 -0
  145. package/dist/utils/moveBefore.d.ts +15 -0
  146. package/package.json +27 -6
  147. package/src/styles/animations.css +77 -0
  148. package/src/styles/cards.css +6 -2
  149. package/src/styles/dock.css +109 -109
  150. package/src/styles/drawer.css +2 -2
  151. package/src/styles/glass.css +89 -6
  152. package/src/styles/index.css +10 -1
  153. package/src/styles/instrument-chassis.css +28 -1
  154. package/src/styles/scroll-driven.css +72 -0
  155. package/src/styles/theme.css +6 -0
  156. package/src/styles/tokens.css +345 -289
  157. package/src/styles/typography.css +65 -131
  158. package/src/styles/utilities.css +199 -81
  159. package/src/styles/view-transition.css +62 -0
  160. package/dist/HoverPopover-Btv4RQfv.js +0 -80
  161. package/dist/Label-C8QMJSsf.js +0 -32
  162. package/dist/UnderlineTabs-BtrUcXn-.js +0 -64
  163. package/dist/composables/motion/useSpringOrchestrator.d.ts +0 -15
  164. /package/dist/{CollapsibleContent-DHRuXE3P.js → CollapsibleContent-CVMOcYlV.js} +0 -0
  165. /package/dist/{ContextMenuContent-CvXfU5qz.js → ContextMenuContent-otjFIu8v.js} +0 -0
  166. /package/dist/{HoverCardContent-4nN5-5bz.js → HoverCardContent-DaGrgJBO.js} +0 -0
  167. /package/dist/{InstrumentChassis-DOaVYyWq.js → InstrumentChassis-CnHTMxds.js} +0 -0
  168. /package/dist/{InstrumentRail-jHDqXj70.js → InstrumentRail-C6dEbi8E.js} +0 -0
  169. /package/dist/{ModalOverlay-DKLVY-cj.js → ModalOverlay-iWiAgbYH.js} +0 -0
  170. /package/dist/{PaperBackdrop-Bc2drCqJ.js → PaperBackdrop-CeZ-w0R0.js} +0 -0
  171. /package/dist/{SelectGroup-O69GTQ77.js → SelectGroup-DdR4tdDY.js} +0 -0
  172. /package/dist/{SelectSeparator-GTHxKO0a.js → SelectSeparator-CXm_hlqA.js} +0 -0
  173. /package/dist/{Separator-_NCypg_C.js → Separator-D8AUMhxY.js} +0 -0
  174. /package/dist/{Switch-CL0uxu8F.js → Switch-Cr1t_F_U.js} +0 -0
  175. /package/dist/{ToggleGroupItem-BYG_8M9M.js → ToggleGroupItem-OesUouE7.js} +0 -0
  176. /package/dist/{TooltipProvider-C5QLSPto.js → TooltipProvider-DE78vbEP.js} +0 -0
  177. /package/dist/{_plugin-vue_export-helper-n-_DRHWS.js → _plugin-vue_export-helper-Dq1MygBL.js} +0 -0
  178. /package/dist/{badge-BbxVKZfw.js → badge-x46my_Fo.js} +0 -0
  179. /package/dist/composables/{motion → dark}/installDarkModeSync.d.ts +0 -0
  180. /package/dist/{dockContext-BDGSrwsV.js → dockContext-D5NZCWJs.js} +0 -0
  181. /package/dist/{keys-DVkcUktU.js → keys-CaTQS-vx.js} +0 -0
  182. /package/dist/{menuItemVariants-B2nDL7zH.js → menuItemVariants-BsbGNq9C.js} +0 -0
  183. /package/dist/{presets-BMzCDrmR.js → presets-a-D93K1S.js} +0 -0
  184. /package/dist/{search-ocd8tmL9.js → search-DBAiUABx.js} +0 -0
  185. /package/dist/{useGlassRenderer-DMDdMH55.js → useGlassRenderer-Ds-nmrGz.js} +0 -0
  186. /package/dist/{useGlobalDark-PMiP5Jku.js → useGlobalDark-B0WvLJE3.js} +0 -0
  187. /package/dist/{useIntersectionPause-CXYfYg_C.js → useIntersectionPause-IY2CwPQb.js} +0 -0
  188. /package/dist/{useInterval-COlTCeVa.js → useInterval-DVgGUf_y.js} +0 -0
  189. /package/dist/{useKeyboardShortcuts-B1ev1YEC.js → useKeyboardShortcuts-Dpw_RUcB.js} +0 -0
  190. /package/dist/{useResizeObserver-F4aRR4Cj.js → useResizeObserver-Cg9npuM3.js} +0 -0
  191. /package/dist/{useSortable-Ck0rBJ4g.js → useSortable-Cq2Y1JLO.js} +0 -0
  192. /package/dist/{useSpringMount-BTRBNzXP.js → useSpringMount-Cfk1XK1R.js} +0 -0
  193. /package/dist/{useTimer-lp5NlH4w.js → useTimer-NAaj9zNq.js} +0 -0
  194. /package/dist/{x-cdWAmO-q.js → x-q7pJa83X.js} +0 -0
package/dist/tabs.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import { t as e } from "./cn-DJXf4yaB.js";
2
- import { t } from "./_plugin-vue_export-helper-n-_DRHWS.js";
3
- import { i as n, n as r, r as i, t as a } from "./TooltipProvider-C5QLSPto.js";
4
- import { t as o } from "./UnderlineTabs-BtrUcXn-.js";
2
+ import { t } from "./_plugin-vue_export-helper-Dq1MygBL.js";
3
+ import { i as n, n as r, r as i, t as a } from "./TooltipProvider-DE78vbEP.js";
4
+ import { t as o } from "./UnderlineTabs-DAWMLmJG.js";
5
5
  import { Fragment as s, computed as c, createBlock as l, createCommentVNode as u, createElementBlock as d, createElementVNode as f, createTextVNode as p, createVNode as m, defineComponent as h, nextTick as g, normalizeClass as _, normalizeStyle as v, onMounted as y, onUnmounted as b, openBlock as x, ref as S, renderList as C, renderSlot as w, toDisplayString as T, unref as E, watch as D, withCtx as O } from "vue";
6
6
  //#region src/components/custom/tabs/BouncyToggle.vue?vue&type=script&setup=true&lang.ts
7
7
  var k = [
@@ -36,27 +36,27 @@ var k = [
36
36
  function h(e, t) {
37
37
  return typeof document > "u" ? t : getComputedStyle(document.documentElement).getPropertyValue(e).trim() || t;
38
38
  }
39
- let j = t, M = o, N = S(null), P = S([]), F = c(() => j.variant === "pill"), I = c(() => j.overflow === "scroll"), L = c(() => j.overflow === "auto"), R = c(() => j.multiSelect && Array.isArray(j.modelValue) ? j.modelValue : [j.modelValue]), z = (e) => R.value.includes(e), B = S({
39
+ let j = t, M = o, N = S(null), P = S([]), F = typeof CSS < "u" && typeof CSS.supports == "function" && CSS.supports("position-anchor", "--x"), I = c(() => j.variant === "pill"), L = c(() => j.overflow === "scroll"), R = c(() => j.overflow === "auto"), z = c(() => j.multiSelect && Array.isArray(j.modelValue) ? j.modelValue : [j.modelValue]), B = (e) => z.value.includes(e), V = c(() => !j.multiSelect && !F), H = c(() => j.multiSelect || !F), U = S({
40
40
  width: "0px",
41
41
  transform: "translateX(0px)",
42
42
  opacity: "0"
43
43
  });
44
- function V() {
45
- if (j.multiSelect) return;
44
+ function W() {
45
+ if (j.multiSelect || F) return;
46
46
  let e = j.options.findIndex((e) => e.value === j.modelValue);
47
47
  if (e < 0 || !P.value[e]) return;
48
48
  let t = P.value[e];
49
- B.value = {
49
+ U.value = {
50
50
  width: `${t.offsetWidth}px`,
51
51
  transform: `translateX(${t.offsetLeft}px)`,
52
52
  opacity: "1"
53
53
  };
54
54
  }
55
- let H = S({});
56
- function U() {
55
+ let G = S({});
56
+ function K() {
57
57
  if (!j.multiSelect) return;
58
58
  let e = {};
59
- for (let t of R.value) {
59
+ for (let t of z.value) {
60
60
  let n = j.options.findIndex((e) => e.value === t), r = P.value[n];
61
61
  r && (e[t] = {
62
62
  width: `${r.offsetWidth}px`,
@@ -64,12 +64,12 @@ var k = [
64
64
  opacity: "1"
65
65
  });
66
66
  }
67
- H.value = e;
67
+ G.value = e;
68
68
  }
69
- function W() {
70
- j.multiSelect ? U() : V();
69
+ function q() {
70
+ j.multiSelect ? K() : W();
71
71
  }
72
- function G(e) {
72
+ function J(e) {
73
73
  if (typeof window < "u" && window.matchMedia("(prefers-reduced-motion: reduce)").matches) return;
74
74
  e.getAnimations().forEach((e) => e.cancel());
75
75
  let t = h("--ease-apple-spring", "cubic-bezier(0.175, 0.885, 0.32, 1.275)"), n = h("--scale-press", "0.95"), r = h("--scale-hover", "1.08");
@@ -89,34 +89,38 @@ var k = [
89
89
  easing: t
90
90
  });
91
91
  }
92
- function K(e, t) {
92
+ function Y(e, t) {
93
93
  if (j.options[t]?.disabled) return;
94
94
  let n = P.value[t];
95
- if (n && G(n), j.multiSelect) {
96
- let t = [...R.value], n = t.indexOf(e);
95
+ if (n && J(n), j.multiSelect) {
96
+ let t = [...z.value], n = t.indexOf(e);
97
97
  n > -1 ? t.length > 1 && t.splice(n, 1) : t.push(e), M("update:modelValue", t);
98
98
  } else M("update:modelValue", e);
99
99
  }
100
- D(() => j.modelValue, () => g(W), { deep: !0 }), D(() => j.options, () => g(W), { deep: !0 });
101
- let q = null;
100
+ D(() => j.modelValue, () => {
101
+ H.value && g(q);
102
+ }, { deep: !0 }), D(() => j.options, () => {
103
+ H.value && g(q);
104
+ }, { deep: !0 });
105
+ let X = null;
102
106
  return y(() => {
103
- g(W), N.value && (q = new ResizeObserver(() => W()), q.observe(N.value));
107
+ H.value && (g(q), N.value && (X = new ResizeObserver(() => q()), X.observe(N.value)));
104
108
  }), b(() => {
105
- q?.disconnect();
109
+ X?.disconnect();
106
110
  }), (o, c) => (x(), d("div", {
107
111
  ref_key: "containerRef",
108
112
  ref: N,
109
- class: _(E(e)(F.value ? "bouncy-toggle bouncy-toggle--pill" : "bouncy-toggle", I.value && "bouncy-toggle--scroll scroll-fade-mask scrollbar-hidden", L.value && "bouncy-toggle--auto scrollbar-hidden", j.class))
113
+ class: _(E(e)(I.value ? "bouncy-toggle bouncy-toggle--pill" : "bouncy-toggle", L.value && "bouncy-toggle--scroll scroll-fade-mask scrollbar-hidden", R.value && "bouncy-toggle--auto scrollbar-hidden", j.class))
110
114
  }, [
111
115
  t.multiSelect ? u("", !0) : (x(), d("div", {
112
116
  key: 0,
113
- class: _(F.value ? "bouncy-slider bouncy-slider--pill" : "bouncy-slider"),
114
- style: v(B.value)
117
+ class: _([I.value ? "bouncy-slider bouncy-slider--pill" : "bouncy-slider", V.value ? "bouncy-slider--js" : "bouncy-slider--anchor"]),
118
+ style: v(V.value ? U.value : void 0)
115
119
  }, null, 6)),
116
- t.multiSelect ? (x(!0), d(s, { key: 1 }, C(R.value, (e) => (x(), d("div", {
120
+ t.multiSelect ? (x(!0), d(s, { key: 1 }, C(z.value, (e) => (x(), d("div", {
117
121
  key: "slider-" + e,
118
- class: _(F.value ? "bouncy-slider bouncy-slider--pill" : "bouncy-slider"),
119
- style: v(H.value[e] ?? { opacity: "0" })
122
+ class: _([I.value ? "bouncy-slider bouncy-slider--pill" : "bouncy-slider", "bouncy-slider--js"]),
123
+ style: v(G.value[e] ?? { opacity: "0" })
120
124
  }, null, 6))), 128)) : u("", !0),
121
125
  (x(!0), d(s, null, C(t.options, (e, t) => (x(), d(s, { key: e.value }, [e.tooltip ? (x(), l(E(a), {
122
126
  key: 0,
@@ -129,13 +133,13 @@ var k = [
129
133
  ref: (e) => {
130
134
  e && (P.value[t] = e);
131
135
  },
132
- class: _([F.value ? "bouncy-btn bouncy-btn--pill" : "bouncy-btn", e.disabled && "is-disabled"]),
133
- "aria-pressed": z(e.value) ? "true" : "false",
136
+ class: _([I.value ? "bouncy-btn bouncy-btn--pill" : "bouncy-btn", e.disabled && "is-disabled"]),
137
+ "aria-pressed": B(e.value) ? "true" : "false",
134
138
  disabled: e.disabled,
135
- onClick: (n) => K(e.value, t)
139
+ onClick: (n) => Y(e.value, t)
136
140
  }, [w(o.$slots, "option", {
137
141
  option: e,
138
- active: z(e.value)
142
+ active: B(e.value)
139
143
  }, () => [p(T(e.label), 1)], !0)], 10, k)]),
140
144
  _: 2
141
145
  }, 1024), m(E(i), {
@@ -154,17 +158,17 @@ var k = [
154
158
  ref: (e) => {
155
159
  e && (P.value[t] = e);
156
160
  },
157
- class: _([F.value ? "bouncy-btn bouncy-btn--pill" : "bouncy-btn", e.disabled && "is-disabled"]),
158
- "aria-pressed": z(e.value) ? "true" : "false",
161
+ class: _([I.value ? "bouncy-btn bouncy-btn--pill" : "bouncy-btn", e.disabled && "is-disabled"]),
162
+ "aria-pressed": B(e.value) ? "true" : "false",
159
163
  disabled: e.disabled,
160
- onClick: (n) => K(e.value, t)
164
+ onClick: (n) => Y(e.value, t)
161
165
  }, [w(o.$slots, "option", {
162
166
  option: e,
163
- active: z(e.value)
167
+ active: B(e.value)
164
168
  }, () => [p(T(e.label), 1)], !0)], 10, A))], 64))), 128))
165
169
  ], 2));
166
170
  }
167
- }), [["__scopeId", "data-v-61c8392f"]]), M = /* @__PURE__ */ h({
171
+ }), [["__scopeId", "data-v-25e9946f"]]), M = /* @__PURE__ */ h({
168
172
  __name: "BouncyTabs",
169
173
  props: {
170
174
  options: {},
package/dist/timeline.js CHANGED
@@ -1,5 +1,5 @@
1
- import { t as e } from "./_plugin-vue_export-helper-n-_DRHWS.js";
2
- import { t } from "./HoverPopover-Btv4RQfv.js";
1
+ import { t as e } from "./_plugin-vue_export-helper-Dq1MygBL.js";
2
+ import { t } from "./HoverPopover-CWFCfLx3.js";
3
3
  import { Fragment as n, computed as r, createBlock as i, createCommentVNode as a, createElementBlock as o, createElementVNode as s, createSlots as c, defineComponent as l, guardReactiveProps as u, normalizeClass as d, normalizeProps as f, normalizeStyle as p, openBlock as m, ref as h, renderList as g, renderSlot as _, toDisplayString as v, unref as y, withCtx as b } from "vue";
4
4
  //#region src/components/custom/timeline/geometry.ts
5
5
  function x(e) {
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-DY8_jtHv.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-Bjlunvq4.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-BYG_8M9M.js";
1
+ import { n as e, t } from "./ToggleGroupItem-OesUouE7.js";
2
2
  export { e as ToggleGroup, t as ToggleGroupItem };
package/dist/tooltip.js CHANGED
@@ -1,2 +1,2 @@
1
- import { i as e, n as t, r as n, t as r } from "./TooltipProvider-C5QLSPto.js";
1
+ import { i as e, n as t, r as n, t as r } from "./TooltipProvider-DE78vbEP.js";
2
2
  export { e as Tooltip, n as TooltipContent, r as TooltipProvider, t as TooltipTrigger };
@@ -1,4 +1,4 @@
1
- import { t as e } from "./_plugin-vue_export-helper-n-_DRHWS.js";
1
+ import { t as e } from "./_plugin-vue_export-helper-Dq1MygBL.js";
2
2
  import { Fragment as t, computed as n, createCommentVNode as r, createElementBlock as i, createElementVNode as a, defineComponent as o, normalizeClass as s, onMounted as c, onUnmounted as l, openBlock as u, ref as d, renderList as f, toDisplayString as p, unref as m, watch as h } from "vue";
3
3
  //#region src/components/custom/typewriter/types.ts
4
4
  var g = {
@@ -1,23 +1,12 @@
1
- import { getCurrentScope as e, onScopeDispose as t, readonly as n, ref as r, shallowRef as i, toValue as a, watch as o } from "vue";
2
- import { SmoothProgress as s } from "@mkbabb/keyframes.js";
3
- //#region src/composables/motion/constants.ts
4
- var c = {
5
- canvasNeedle: .08,
6
- domHero: .12,
7
- domPill: .14,
8
- domProgress: .18
9
- }, l = {
10
- canvas: .002,
11
- dom: .05,
12
- domProgress: .5
13
- };
14
- //#endregion
1
+ import { n as e, t } from "./constants-DwBwnG8N.js";
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
+ import { SmoothProgress as l } from "@mkbabb/keyframes.js";
15
4
  //#region src/composables/motion/useAnimatedNumber.ts
16
5
  function u(e) {
17
6
  return Math.max(0, Math.min(100, e));
18
7
  }
19
8
  function d(d, f = {}) {
20
- let p = f.mode ?? "absolute", m = p === "progress" ? (e) => u(e) / 100 : (e) => e, h = p === "progress" ? (e) => e * 100 : (e) => e, g = p === "progress" ? u(f.initial ?? 0) : f.initial ?? 0, _ = m(g), v = r(g), y = r(!1), b = p === "progress" ? c.domProgress : c.domHero, x = p === "progress" ? l.domProgress : l.dom, S = p === "progress" ? (f.snapThreshold ?? x) / 100 : f.snapThreshold ?? x, C = i(new s({
9
+ let p = f.mode ?? "absolute", m = p === "progress" ? (e) => u(e) / 100 : (e) => e, h = p === "progress" ? (e) => e * 100 : (e) => e, g = p === "progress" ? u(f.initial ?? 0) : f.initial ?? 0, _ = m(g), v = a(g), y = a(!1), b = p === "progress" ? t.domProgress : t.domHero, x = p === "progress" ? e.domProgress : e.dom, S = p === "progress" ? (f.snapThreshold ?? x) / 100 : f.snapThreshold ?? x, C = o(new l({
21
10
  damping: f.damping ?? b,
22
11
  snapThreshold: S,
23
12
  targetEpsilon: p === "progress" ? (f.targetEpsilon ?? 0) / 100 : f.targetEpsilon ?? 0,
@@ -28,15 +17,15 @@ function d(d, f = {}) {
28
17
  C.value.play((e) => {
29
18
  v.value = h(e), y.value = !C.value.settled, f.onValue?.(v.value);
30
19
  });
31
- let w = o(() => a(d), (e) => {
20
+ let w = c(() => s(d), (e) => {
32
21
  e != null && C.value.setTarget(m(e));
33
22
  }, { immediate: !0 });
34
23
  function T() {
35
24
  w(), C.value.stop(), y.value = !1;
36
25
  }
37
- return e() && t(T), {
38
- current: n(v),
39
- isAnimating: n(y),
26
+ return n() && r(T), {
27
+ current: i(v),
28
+ isAnimating: i(y),
40
29
  snap: () => {
41
30
  C.value.snap(), v.value = h(C.value.current), y.value = !1;
42
31
  },
@@ -48,4 +37,4 @@ function d(d, f = {}) {
48
37
  };
49
38
  }
50
39
  //#endregion
51
- export { c as n, l as r, d as t };
40
+ export { d as t };
@@ -1,8 +1,8 @@
1
1
  import { t as e } from "./cn-DJXf4yaB.js";
2
2
  import { t } from "./createLucideIcon-Bn9a1b70.js";
3
3
  import { t as n } from "./chevron-down-DILQA1t6.js";
4
- import { t as r } from "./_plugin-vue_export-helper-n-_DRHWS.js";
5
- import { t as i } from "./Label-C8QMJSsf.js";
4
+ import { t as r } from "./_plugin-vue_export-helper-Dq1MygBL.js";
5
+ import { t as i } from "./Label-DJty89bp.js";
6
6
  import { Fragment as a, computed as o, createCommentVNode as s, createElementBlock as c, createElementVNode as l, createTextVNode as u, createVNode as d, defineComponent as f, inject as p, normalizeClass as m, normalizeStyle as h, openBlock as g, provide as _, reactive as v, ref as y, renderList as b, renderSlot as x, toDisplayString as S, toRaw as C, unref as w, useId as T, watch as E, withCtx as D } from "vue";
7
7
  var O = t("rotate-ccw", [["path", {
8
8
  d: "M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8",
@@ -54,7 +54,7 @@ var M = { class: "configurator-stage relative min-h-0 min-w-0 overflow-hidden" }
54
54
  setup(t, { emit: n }) {
55
55
  let r = t;
56
56
  A(o(() => r.density));
57
- let i = n, u = o(() => e("configurator glass-floating rounded-card border border-border/60 overflow-hidden", "grid grid-cols-1 lg:grid-cols-[minmax(0,1fr)_minmax(280px,360px)]", "min-h-0", r.class)), d = o(() => {
57
+ let i = n, u = o(() => e("configurator glass-floating rounded-panel border border-border/60 overflow-hidden", "grid grid-cols-1 lg:grid-cols-[minmax(0,1fr)_minmax(280px,360px)]", "min-h-0", r.class)), d = o(() => {
58
58
  switch (r.scrollMode) {
59
59
  case "always": return "overflow-y-auto scroll-fade-y scrollbar-thin";
60
60
  case "never": return "overflow-visible";
@@ -134,11 +134,11 @@ var M = { class: "configurator-stage relative min-h-0 min-w-0 overflow-hidden" }
134
134
  }
135
135
  let v = o(() => u.value ? "open" : "closed");
136
136
  return (r, a) => (g(), c("div", {
137
- class: m(w(e)("configurator-layer border-b border-border/40 last:border-b-0", i.class)),
137
+ class: m(w(e)("configurator-layer rounded-panel border-b border-border/40 last:border-b-0", i.class)),
138
138
  "data-state": v.value
139
139
  }, [l("button", {
140
140
  type: "button",
141
- class: m(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")),
141
+ class: m(w(e)("configurator-layer-trigger", "rounded-panel", "group flex w-full items-center justify-between gap-2 px-3 py-2", "text-left transition-colors hover:bg-foreground/5 focus-ring")),
142
142
  "aria-expanded": u.value,
143
143
  "aria-controls": p.value,
144
144
  "data-state": v.value,
@@ -1,4 +1,4 @@
1
- import { t as e } from "./useGlobalDark-PMiP5Jku.js";
1
+ import { t as e } from "./useGlobalDark-B0WvLJE3.js";
2
2
  import { getCurrentScope as t, onMounted as n, onScopeDispose as r, readonly as i, ref as a, toValue as o, watch as s } from "vue";
3
3
  //#region src/composables/dom/useTokenColor.ts
4
4
  function c(t, r = {}) {
@@ -131,4 +131,32 @@ function m(e) {
131
131
  };
132
132
  }
133
133
  //#endregion
134
- export { c as a, f as i, p as n, d as r, m as t };
134
+ //#region src/composables/dom/useIdleReady.ts
135
+ function h(e = {}) {
136
+ let n = e.timeout ?? 2e3, i = a(!1), o = null, s = null, c = !1;
137
+ function l() {
138
+ c || i.value || (i.value = !0, e.onReady?.(), u());
139
+ }
140
+ function u() {
141
+ o !== null && typeof window < "u" && "cancelIdleCallback" in window && (window.cancelIdleCallback(o), o = null), s !== null && (clearTimeout(s), s = null);
142
+ }
143
+ function d() {
144
+ if (!c) {
145
+ if (typeof window > "u") {
146
+ l();
147
+ return;
148
+ }
149
+ "requestIdleCallback" in window ? o = window.requestIdleCallback(l, { timeout: n }) : s = setTimeout(l, 0);
150
+ }
151
+ }
152
+ d();
153
+ function f() {
154
+ c || (c = !0, u());
155
+ }
156
+ return t() && r(f), {
157
+ ready: i,
158
+ stop: f
159
+ };
160
+ }
161
+ //#endregion
162
+ export { f as a, d as i, m as n, c as o, p as r, h as t };
@@ -1,4 +1,4 @@
1
- import { t as e } from "./useTimer-lp5NlH4w.js";
1
+ import { t as e } from "./useTimer-NAaj9zNq.js";
2
2
  import { getCurrentScope as t, onScopeDispose as n, ref as r } from "vue";
3
3
  //#region src/composables/dom/useTouchGate.ts
4
4
  var i = /* @__PURE__ */ new Set(), a = !1;
@@ -0,0 +1,29 @@
1
+ //#region src/composables/dom/useUserInvalidAria.ts
2
+ function e() {
3
+ return typeof CSS < "u" && typeof CSS.supports == "function" && CSS.supports("selector(:user-invalid)");
4
+ }
5
+ function t(t = {}) {
6
+ let n = t.fallbackClasses ?? !e();
7
+ return { bind: (e) => {
8
+ let t = /* @__PURE__ */ new WeakSet(), r = (e) => {
9
+ let t = e;
10
+ if (!t?.checkValidity) return;
11
+ let r = t.checkValidity();
12
+ t.setAttribute("aria-invalid", r ? "false" : "true"), n && (t.classList.toggle("user-invalid-fallback", !r), t.classList.toggle("user-valid-fallback", r));
13
+ }, i = (e) => {
14
+ let n = e.target;
15
+ n?.checkValidity && (t.add(n), r(n));
16
+ }, a = (e) => {
17
+ let n = e.target;
18
+ !n?.checkValidity || !t.has(n) || n.checkValidity() && r(n);
19
+ }, o = () => {
20
+ let n = e.querySelectorAll("input, textarea, select");
21
+ for (let e of n) e.checkValidity && (t.add(e), r(e));
22
+ };
23
+ return e.addEventListener("blur", i, !0), e.addEventListener("input", a, !0), e.addEventListener("submit", o, !0), () => {
24
+ e.removeEventListener("blur", i, !0), e.removeEventListener("input", a, !0), e.removeEventListener("submit", o, !0);
25
+ };
26
+ } };
27
+ }
28
+ //#endregion
29
+ export { t };
@@ -0,0 +1,16 @@
1
+ //#region src/composables/motion/useViewTransition.ts
2
+ function e() {
3
+ return typeof document < "u" && typeof document.startViewTransition == "function";
4
+ }
5
+ function t(e) {
6
+ let t = typeof document > "u" ? void 0 : document;
7
+ return !t || typeof t.startViewTransition != "function" ? (e(), {
8
+ finished: Promise.resolve(),
9
+ transitioned: !1
10
+ }) : {
11
+ finished: t.startViewTransition(() => e()).finished.then(() => void 0, () => void 0),
12
+ transitioned: !0
13
+ };
14
+ }
15
+ //#endregion
16
+ export { e as n, t };
@@ -1 +1,2 @@
1
1
  export { cn } from "./cn";
2
+ export { moveBeforeSafe, supportsMoveBefore } from "./moveBefore";
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Move `node` into `parent` immediately before `ref` (or to the end when `ref`
3
+ * is `null`), preserving the node's live state when `Element.moveBefore` is
4
+ * supported, and falling back to `insertBefore` otherwise.
5
+ *
6
+ * @param parent the destination parent element.
7
+ * @param node the node to move (may currently live elsewhere in the tree).
8
+ * @param ref the child to insert before, or `null` to append.
9
+ */
10
+ export declare function moveBeforeSafe(parent: Element, node: Node, ref: Node | null): void;
11
+ /**
12
+ * True when `Element.moveBefore` is available — the feature-detected predicate
13
+ * for consumers that want to branch their own re-parent logic.
14
+ */
15
+ export declare function supportsMoveBefore(): boolean;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mkbabb/glass-ui",
3
- "version": "2.1.0",
3
+ "version": "3.1.0",
4
4
  "description": "Glassmorphic design system — Vue 3.5 components, reka-ui primitives, Tailwind CSS v4 tokens",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -130,6 +130,9 @@
130
130
  "motion": [
131
131
  "dist/motion.d.ts"
132
132
  ],
133
+ "motion-core": [
134
+ "dist/motion-core.d.ts"
135
+ ],
133
136
  "button": [
134
137
  "dist/button.d.ts"
135
138
  ],
@@ -198,6 +201,12 @@
198
201
  ],
199
202
  "command": [
200
203
  "dist/command.d.ts"
204
+ ],
205
+ "number-field": [
206
+ "dist/number-field.d.ts"
207
+ ],
208
+ "switch": [
209
+ "dist/switch.d.ts"
201
210
  ]
202
211
  }
203
212
  },
@@ -378,6 +387,10 @@
378
387
  "types": "./dist/motion.d.ts",
379
388
  "import": "./dist/motion.js"
380
389
  },
390
+ "./motion-core": {
391
+ "types": "./dist/motion-core.d.ts",
392
+ "import": "./dist/motion-core.js"
393
+ },
381
394
  "./button": {
382
395
  "types": "./dist/button.d.ts",
383
396
  "import": "./dist/button.js"
@@ -469,6 +482,14 @@
469
482
  "./command": {
470
483
  "types": "./dist/command.d.ts",
471
484
  "import": "./dist/command.js"
485
+ },
486
+ "./number-field": {
487
+ "types": "./dist/number-field.d.ts",
488
+ "import": "./dist/number-field.js"
489
+ },
490
+ "./switch": {
491
+ "types": "./dist/switch.d.ts",
492
+ "import": "./dist/switch.js"
472
493
  }
473
494
  },
474
495
  "files": [
@@ -478,9 +499,9 @@
478
499
  ],
479
500
  "scripts": {
480
501
  "dev": "vite",
481
- "build": "NODE_OPTIONS=--max-old-space-size=8192 vite build && npm run emit-types",
482
- "build:watch": "NODE_OPTIONS=--max-old-space-size=8192 vite build --watch",
483
- "prepare": "test -f dist/glass-ui.js || npm run build",
502
+ "build": "vite build && npm run emit-types",
503
+ "build:watch": "vite build --watch",
504
+ "prepare": "test -f dist/glass-ui.js -a -f dist/index.d.ts || npm run build",
484
505
  "typecheck": "vue-tsc --noEmit",
485
506
  "test": "vitest run",
486
507
  "verify-export-types": "node scripts/verify-export-types.mjs",
@@ -511,7 +532,7 @@
511
532
  },
512
533
  "peerDependencies": {
513
534
  "@lucide/vue": "^1.16.0",
514
- "@mkbabb/keyframes.js": "^2.0.0",
535
+ "@mkbabb/keyframes.js": "^2.2.0",
515
536
  "@vueuse/core": "^14.0",
516
537
  "class-variance-authority": "^0.7",
517
538
  "clsx": "^2.0",
@@ -527,7 +548,7 @@
527
548
  },
528
549
  "devDependencies": {
529
550
  "@lucide/vue": "^1.16.0",
530
- "@mkbabb/keyframes.js": "^2.1.1",
551
+ "@mkbabb/keyframes.js": "^2.2.0",
531
552
  "@mkbabb/value.js": "^0.10.0",
532
553
  "@tailwindcss/postcss": "^4.3.0",
533
554
  "@tailwindcss/vite": "^4.3.0",
@@ -296,3 +296,80 @@
296
296
  animation: none;
297
297
  }
298
298
  }
299
+
300
+ /* ── §TOP-LAYER ENTRY/EXIT (AQ.W5 §Design 2) ───────────────────────────────
301
+ *
302
+ * A pure-CSS entry/exit grammar for NATIVE top-layer surfaces — `[popover]`
303
+ * elements and native `<dialog>` — keyed off `:popover-open` / `dialog[open]`,
304
+ * plus a glass `::backdrop`. This replaces the per-frame inline-style entry the
305
+ * platform now owns: `@starting-style` + `transition` + `transition-behavior:
306
+ * allow-discrete` + `overlay`.
307
+ *
308
+ * SCOPE: this applies ONLY to elements tagged `.glass-top-layer`. It does NOT
309
+ * touch reka-ui's portaled overlays — those keep their `tw-animate-css`
310
+ * data-state fade (distinct selectors, no cascade fight, mirroring the
311
+ * `[data-scrim-animation]` discipline above). `DialogContent`'s `spring` opt-in
312
+ * (`useSpringMount`) is also untouched — a legitimate iOS-physics variant, not a
313
+ * duplicate of this fade.
314
+ *
315
+ * Baseline: `@starting-style` = Widely Available; `transition-behavior:
316
+ * allow-discrete` + `overlay` = Newly Available → adopt natively, gate the
317
+ * whole grammar on `@supports (overlay: auto)`. A non-supporting engine shows
318
+ * the element instantly (acceptable for a native top-layer surface; glass-ui
319
+ * ships no JS top-layer coordinator — that is reka-ui Dialog's remit).
320
+ *
321
+ * Uses `scale:` (the longhand) not `transform: scale()` so it composes with the
322
+ * identity-base transform work and does not mint a stacking context. Every
323
+ * visual axis reads a `--top-layer-*` token (tokens.css §20).
324
+ */
325
+ @supports (overlay: auto) {
326
+ /* Base (closed / exit) + the transition list. `allow-discrete` MUST come
327
+ * after the property longhands, never negated. */
328
+ .glass-top-layer[popover],
329
+ dialog.glass-top-layer {
330
+ opacity: 0;
331
+ scale: var(--top-layer-enter-scale, 0.96);
332
+ transition-property: opacity, scale, display, overlay;
333
+ transition-duration: var(--duration-normal);
334
+ transition-timing-function: var(--ease-apple-spring);
335
+ transition-behavior: allow-discrete;
336
+ }
337
+
338
+ /* Open state + `@starting-style` entry (starting-style AFTER the open
339
+ * selector so the entry interpolates from the closed values). */
340
+ .glass-top-layer[popover]:popover-open,
341
+ dialog.glass-top-layer[open] {
342
+ opacity: 1;
343
+ scale: 1;
344
+ @starting-style {
345
+ opacity: 0;
346
+ scale: var(--top-layer-enter-scale, 0.96);
347
+ }
348
+ }
349
+
350
+ /* Glass backdrop — blur + dim, animated discretely. `::backdrop` only
351
+ * exists for `showModal()` dialogs, NOT `[popover]` (popovers are
352
+ * non-modal — correct, no scrim). */
353
+ dialog.glass-top-layer::backdrop {
354
+ background-color: hsl(var(--background) / 0);
355
+ backdrop-filter: blur(var(--top-layer-backdrop-blur, 8px));
356
+ transition: display var(--duration-normal) allow-discrete,
357
+ overlay var(--duration-normal) allow-discrete,
358
+ background-color var(--duration-normal) var(--ease-standard);
359
+ }
360
+ dialog.glass-top-layer[open]::backdrop {
361
+ background-color: hsl(var(--background) / var(--top-layer-backdrop-dim, 0.5));
362
+ @starting-style {
363
+ background-color: hsl(var(--background) / 0);
364
+ }
365
+ }
366
+ }
367
+
368
+ /* Reduced-motion carve — flatten the scale to a fade, shorten the duration. */
369
+ @media (prefers-reduced-motion: reduce) {
370
+ .glass-top-layer[popover],
371
+ dialog.glass-top-layer {
372
+ scale: none;
373
+ transition-duration: var(--duration-fast);
374
+ }
375
+ }
@@ -33,12 +33,16 @@
33
33
  @utility cartoon-surface {
34
34
  border-width: 2px;
35
35
  box-shadow: var(--shadow-cartoon-md);
36
+ /* Individual-transform identity base (AQ.W3 §W3.2) — state-driven 2D lift on
37
+ a card surface that often hosts portaled content; `translate: 0` at rest
38
+ mints the stacking context once. Longhand maps `translate(x, y)` 1:1. */
39
+ translate: 0;
36
40
  transition:
37
- transform var(--duration-normal) var(--ease-apple-spring),
41
+ translate var(--duration-normal) var(--ease-apple-spring),
38
42
  box-shadow var(--duration-normal) var(--ease-apple);
39
43
 
40
44
  &:hover:not(:disabled) {
41
- transform: translate(var(--lift-sm), var(--lift-sm));
45
+ translate: var(--lift-sm) var(--lift-sm);
42
46
  box-shadow: var(--shadow-cartoon-lg);
43
47
  }
44
48
  }