@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
@@ -1,4 +1,4 @@
1
- import type { HTMLAttributes } from "vue";
1
+ import { type HTMLAttributes } from "vue";
2
2
  /**
3
3
  * LabeledField — parent SFC for the labeled-field family (V.W3.T5 / A5 §5.5).
4
4
  *
@@ -15,15 +15,29 @@ import type { HTMLAttributes } from "vue";
15
15
  * paints the canonical typography (font-display + body-size + muted-fg +
16
16
  * cursor-help). The previous mixed `text-base` / `text-lg` literals
17
17
  * harmonise on a single body-size token.
18
+ *
19
+ * AQ.W4 §W4.5 — `required` threads a `aria-hidden` asterisk onto the label
20
+ * (the `required` attr on the slotted control is the semantic carrier). The
21
+ * `error` slot renders an error-message region that the W3.1c
22
+ * `:has(:user-invalid)` group rule reveals; it carries `aria-live="polite"`
23
+ * so the message is announced when shown. The region's id is exposed as the
24
+ * default slot's `errorId` slot-prop so the slotted control can bind
25
+ * `aria-errormessage="errorId"` (the four wrappers auto-wire it; a raw
26
+ * `<LabeledField>` slot binds it manually).
18
27
  */
19
28
  type __VLS_Props = {
20
29
  label: string;
21
30
  tooltip?: string;
22
31
  labelClass?: HTMLAttributes["class"];
32
+ required?: boolean;
23
33
  };
24
- declare var __VLS_7: {};
34
+ declare var __VLS_7: {
35
+ errorId: string;
36
+ }, __VLS_9: {};
25
37
  type __VLS_Slots = {} & {
26
38
  default?: (props: typeof __VLS_7) => any;
39
+ } & {
40
+ error?: (props: typeof __VLS_9) => any;
27
41
  };
28
42
  declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
29
43
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
@@ -5,11 +5,27 @@ type __VLS_Props = {
5
5
  labelClass?: string;
6
6
  inputClass?: string;
7
7
  type?: string;
8
+ /**
9
+ * AQ.W4 §W4.5 — mark the field required. Threads the `aria-hidden`
10
+ * asterisk onto the label AND sets the native `required` attribute on the
11
+ * inner `<Input>` (the semantic carrier that drives `:user-invalid`).
12
+ */
13
+ required?: boolean;
8
14
  };
9
- declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
15
+ declare var __VLS_17: {};
16
+ type __VLS_Slots = {} & {
17
+ error?: (props: typeof __VLS_17) => any;
18
+ };
19
+ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
10
20
  "update:modelValue": (value: string) => any;
11
21
  }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
12
22
  "onUpdate:modelValue"?: ((value: string) => any) | undefined;
13
23
  }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
24
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
14
25
  declare const _default: typeof __VLS_export;
15
26
  export default _default;
27
+ type __VLS_WithSlots<T, S> = T & {
28
+ new (): {
29
+ $slots: S;
30
+ };
31
+ };
@@ -6,6 +6,8 @@ type __VLS_Props = {
6
6
  label: string;
7
7
  tooltip: string;
8
8
  labelClass?: string;
9
+ /** AQ.W4 §W4.5 — thread the required-field asterisk onto the label. */
10
+ required?: boolean;
9
11
  };
10
12
  declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
11
13
  "update:open": (value: boolean) => any;
@@ -6,6 +6,8 @@ type __VLS_Props = {
6
6
  min: number;
7
7
  max: number;
8
8
  step: number;
9
+ /** AQ.W4 §W4.5 — thread the required-field asterisk onto the label. */
10
+ required?: boolean;
9
11
  };
10
12
  declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
11
13
  "update:modelValue": (value: number) => any;
@@ -3,6 +3,8 @@ type __VLS_Props = {
3
3
  label: string;
4
4
  tooltip: string;
5
5
  labelClass?: string;
6
+ /** AQ.W4 §W4.5 — thread the required-field asterisk onto the label. */
7
+ required?: boolean;
6
8
  };
7
9
  declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
8
10
  "update:checked": (value: boolean) => any;
@@ -5,13 +5,15 @@
5
5
  * selectors or `variant="cell"` for square icon + label cards.
6
6
  *
7
7
  * Usage:
8
- * <ToggleChip v-model:pressed="isActive" variant="chip">
8
+ * <ToggleChip v-model="isActive" variant="chip">
9
9
  * Label
10
10
  * </ToggleChip>
11
11
  *
12
- * When multiple chips share an exclusive selection, wire them up via
13
- * `pressed` / `@update:pressed` rather than reaching for ToggleGroup —
14
- * this component is deliberately unopinionated about selection mode.
12
+ * The toggle state is the reka-ui Toggle `modelValue` contract bind it via
13
+ * `v-model` (or `:model-value` / `@update:model-value`). When multiple chips
14
+ * share an exclusive selection, wire them up this way rather than reaching for
15
+ * ToggleGroup — this component is deliberately unopinionated about selection
16
+ * mode.
15
17
  */
16
18
  import type { HTMLAttributes } from "vue";
17
19
  import { type ToggleProps } from "reka-ui";
@@ -1,13 +1,16 @@
1
1
  import type { HTMLAttributes } from 'vue';
2
- type __VLS_Props = {
2
+ declare const _default: typeof __VLS_export;
3
+ export default _default;
4
+ declare const __VLS_export: import("vue").DefineComponent<{
3
5
  defaultValue?: string | number;
4
6
  modelValue?: string | number;
5
- class?: HTMLAttributes['class'];
6
- };
7
- declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
7
+ class?: HTMLAttributes["class"];
8
+ }, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
8
9
  "update:modelValue": (payload: string | number) => any;
9
- }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
10
+ }, string, import("vue").PublicProps, Readonly<{
11
+ defaultValue?: string | number;
12
+ modelValue?: string | number;
13
+ class?: HTMLAttributes["class"];
14
+ }> & Readonly<{
10
15
  "onUpdate:modelValue"?: ((payload: string | number) => any) | undefined;
11
16
  }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
12
- declare const _default: typeof __VLS_export;
13
- export default _default;
@@ -2,6 +2,14 @@ import { type HTMLAttributes } from 'vue';
2
2
  import { type LabelProps } from 'reka-ui';
3
3
  type __VLS_Props = LabelProps & {
4
4
  class?: HTMLAttributes['class'];
5
+ /**
6
+ * AQ.W4 §W4.5 — render a required-field asterisk after the label text.
7
+ * The asterisk is decorative-to-AT (the `required` attribute on the input
8
+ * is the semantic carrier), so it is marked `aria-hidden`. Indicate
9
+ * required fields visually BEFORE interaction (required-field-feedback
10
+ * guide).
11
+ */
12
+ required?: boolean;
5
13
  };
6
14
  declare var __VLS_8: {};
7
15
  type __VLS_Slots = {} & {
@@ -1,13 +1,50 @@
1
1
  import type { HTMLAttributes } from 'vue';
2
- type __VLS_Props = {
3
- class?: HTMLAttributes['class'];
2
+ declare const _default: typeof __VLS_export;
3
+ export default _default;
4
+ declare const __VLS_export: import("vue").DefineComponent<{
5
+ class?: HTMLAttributes["class"];
4
6
  defaultValue?: string | number;
5
7
  modelValue?: string | number;
6
- };
7
- declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
8
+ /**
9
+ * AQ.W4 §W4.3 opt into `field-sizing: content` auto-grow. When `true`,
10
+ * the textarea grows vertically with its content between a 3-line floor
11
+ * and a `--textarea-autosize-max` ceiling (default `12lh`), then scrolls;
12
+ * the manual resize handle stays. Default `false` keeps the fixed
13
+ * `min-h-20` height (the unchanged no-op fallback).
14
+ *
15
+ * `field-sizing` is Baseline Newly (Chromium 2024) — on a non-supporting
16
+ * engine the element degrades to the fixed `min-block-size: 3lh` floor
17
+ * with standard scroll (no JS, no polyfill).
18
+ *
19
+ * Caveat: a grid/flex parent stretches children, defeating `field-sizing`.
20
+ * Inside a flex column, add `align-self: start` on the `<Textarea>` so it
21
+ * sizes to content rather than the track.
22
+ */
23
+ autosize?: boolean;
24
+ }, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
8
25
  "update:modelValue": (payload: string | number) => any;
9
- }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
26
+ }, string, import("vue").PublicProps, Readonly<{
27
+ class?: HTMLAttributes["class"];
28
+ defaultValue?: string | number;
29
+ modelValue?: string | number;
30
+ /**
31
+ * AQ.W4 §W4.3 — opt into `field-sizing: content` auto-grow. When `true`,
32
+ * the textarea grows vertically with its content between a 3-line floor
33
+ * and a `--textarea-autosize-max` ceiling (default `12lh`), then scrolls;
34
+ * the manual resize handle stays. Default `false` keeps the fixed
35
+ * `min-h-20` height (the unchanged no-op fallback).
36
+ *
37
+ * `field-sizing` is Baseline Newly (Chromium 2024) — on a non-supporting
38
+ * engine the element degrades to the fixed `min-block-size: 3lh` floor
39
+ * with standard scroll (no JS, no polyfill).
40
+ *
41
+ * Caveat: a grid/flex parent stretches children, defeating `field-sizing`.
42
+ * Inside a flex column, add `align-self: start` on the `<Textarea>` so it
43
+ * sizes to content rather than the track.
44
+ */
45
+ autosize?: boolean;
46
+ }> & Readonly<{
10
47
  "onUpdate:modelValue"?: ((payload: string | number) => any) | undefined;
11
- }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
12
- declare const _default: typeof __VLS_export;
13
- export default _default;
48
+ }>, {
49
+ autosize: boolean;
50
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
@@ -1,3 +1,9 @@
1
- declare const __VLS_export: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
1
+ export type ToasterPosition = 'top-left' | 'top-center' | 'top-right' | 'bottom-left' | 'bottom-center' | 'bottom-right';
2
+ type __VLS_Props = {
3
+ position?: ToasterPosition;
4
+ };
5
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {
6
+ position: ToasterPosition;
7
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
2
8
  declare const _default: typeof __VLS_export;
3
9
  export default _default;
@@ -6,3 +6,4 @@ export { default as ToastTitle } from './ToastTitle.vue';
6
6
  export { default as Toaster } from './Toaster.vue';
7
7
  export { toast, useToast } from './use-toast';
8
8
  export type { Toast as ToastType, ToastVariant } from './use-toast';
9
+ export type { ToasterPosition } from './Toaster.vue';
@@ -1 +1,2 @@
1
1
  export { useGlobalDark } from "./useGlobalDark";
2
+ export { installDarkModeSync } from "./installDarkModeSync";
@@ -4,3 +4,5 @@ export * from "./useTokenColor";
4
4
  export * from "./useClipboard";
5
5
  export * from "./useViewportReady";
6
6
  export * from "./useBreakpoint";
7
+ export * from "./useIdleReady";
8
+ export * from "./useUserInvalidAria";
@@ -0,0 +1,63 @@
1
+ import { type Ref } from "vue";
2
+ export interface UseIdleReadyOptions {
3
+ /**
4
+ * `requestIdleCallback` timeout, in ms. Default 2_000 — the canonical
5
+ * value at every speedtest hand-rolled site (App.vue + useIPInfo both
6
+ * pass `{ timeout: 2000 }`). Unlike useViewportReady's 10s (which fronts
7
+ * the budget with an IO gate), useIdleReady has no visibility stage, so
8
+ * the timeout is the only ceiling — 2s matches the consumer sites and
9
+ * keeps the deferred work inside a reasonable post-paint window.
10
+ */
11
+ timeout?: number;
12
+ /**
13
+ * Optional task run the moment the gate flips (the scope-aware variant —
14
+ * useIPInfo's `() => void refresh()`). Runs exactly once; auto-cancelled
15
+ * on scope dispose with the rIC handle so a short-lived consumer cannot
16
+ * leak a deferred write to disposed refs. Consumers that only need the
17
+ * `ready` ref omit it.
18
+ */
19
+ onReady?: () => void;
20
+ }
21
+ export interface UseIdleReadyControls {
22
+ /** Flips `false → true` exactly once on the first idle tick (post-mount). */
23
+ readonly ready: Ref<boolean>;
24
+ /** Tear down the pending idle/timer handle. Auto-called on scope dispose. */
25
+ stop: () => void;
26
+ }
27
+ /**
28
+ * `useIdleReady(options?)` — `requestIdleCallback` (+ `setTimeout(0)` Safari
29
+ * fallback) post-mount idle gate that flips a `Ref<boolean>` exactly once on
30
+ * the first idle tick, and optionally runs an `onReady` task at that moment.
31
+ *
32
+ * The rIC-only sibling of `useViewportReady` — same one-shot `ready` ref +
33
+ * `stop()` shape, same auto-dispose discipline — minus the
34
+ * `IntersectionObserver` visibility stage. The gate is "idle, full stop", not
35
+ * "visible AND idle"; reach for it when there is no element to gate on (a
36
+ * top-level lazy mount, a composable's first-idle data fetch).
37
+ *
38
+ * Two unified use shapes:
39
+ *
40
+ * 1. `ready`-flag — `v-if`-gate a heavy mount on the returned ref:
41
+ * const { ready } = useIdleReady();
42
+ * // <Aurora v-if="ready" />
43
+ * 2. scope-aware task — run a callback on first idle, cancelled on dispose:
44
+ * useIdleReady({ onReady: () => void refresh() });
45
+ * The handle is auto-cancelled on Vue scope disposal so a short-lived
46
+ * consumer cannot leak a deferred write to disposed refs.
47
+ *
48
+ * The composable schedules synchronously at call time (NOT inside an
49
+ * `onMounted`) so it works outside a component too (e.g. inside `useIPInfo`,
50
+ * a composable not a component). SSR / non-browser flips synchronously so
51
+ * consumers don't stall.
52
+ *
53
+ * Why this exists (speedtest origin, glass-ui promotion AO.W3): the gate is
54
+ * hand-rolled at 5 speedtest sites (App.vue, MapView.vue, DashboardMap.vue,
55
+ * useAutoStart.ts, useIPInfo.ts) — the ≥2-consumer substrate-promotion gate
56
+ * (J inv 10 / L inv 8) fires for a publisher-side absorption.
57
+ *
58
+ * @param options.timeout Default `2000` ms — forwarded to `requestIdleCallback`.
59
+ * @param options.onReady Optional one-shot task run on the idle flip.
60
+ * @returns Object with `ready: Ref<boolean>` (flips false → true once) and
61
+ * `stop()` for manual disposal outside a Vue scope.
62
+ */
63
+ export declare function useIdleReady(options?: UseIdleReadyOptions): UseIdleReadyControls;
@@ -0,0 +1,32 @@
1
+ export interface UseUserInvalidAriaOptions {
2
+ /**
3
+ * Also toggle the `.user-invalid-fallback` / `.user-valid-fallback`
4
+ * classes the W4.1 CSS rungs key off (for engines without `:user-invalid`
5
+ * support).
6
+ *
7
+ * Default: auto — `true` only when `CSS.supports('selector(:user-invalid)')`
8
+ * resolves `false`. Pass an explicit boolean to force the path (e.g. for a
9
+ * test that stubs feature detection).
10
+ */
11
+ fallbackClasses?: boolean;
12
+ }
13
+ export interface UseUserInvalidAriaReturn {
14
+ /**
15
+ * Attach the bridge to a scope root (a `<form>`, `<fieldset>`, or field
16
+ * wrapper). Wires capture-phase `blur` + `input` + `submit` listeners that
17
+ * sync `aria-invalid` (and, in fallback mode, the validity classes) on the
18
+ * scope's form controls. Idempotent per call; returns a stop fn that
19
+ * removes the listeners and clears the per-control interaction tracking.
20
+ */
21
+ bind: (root: HTMLElement) => () => void;
22
+ }
23
+ /**
24
+ * The `:user-invalid` → `aria-invalid` bridge. Wired on `blur` (capture —
25
+ * show error on field-exit), `input` (clear error on correction), and
26
+ * `submit` (sync all controls; submission counts as interaction). The setting
27
+ * of `aria-invalid="true"` is gated on first interaction per control (a
28
+ * `WeakSet`) so a pristine required-empty field is never flagged on mount;
29
+ * the `input` handler only CLEARS — never sets — so a programmatic `v-model`
30
+ * write can at worst clear a stale error, never mint a false one.
31
+ */
32
+ export declare function useUserInvalidAria(opts?: UseUserInvalidAriaOptions): UseUserInvalidAriaReturn;
@@ -3,6 +3,7 @@ export * from "./keyboard";
3
3
  export * from "./reactive";
4
4
  export * from "./dom";
5
5
  export * from "./motion";
6
+ export * from "./motion/core";
6
7
  export * from "./glass";
7
8
  export * from "./sortable";
8
9
  export * from "./sidebar";
@@ -0,0 +1,8 @@
1
+ export * from "../constants";
2
+ export * from "../useStaggerReveal";
3
+ export * from "../useScrollProgress";
4
+ export * from "../useRAFLoop";
5
+ export * from "../useIntersectionPause";
6
+ export * from "../useStagger";
7
+ export * from "../useYieldToMain";
8
+ export * from "../useViewTransition";
@@ -3,12 +3,5 @@ export * from "./useSpring";
3
3
  export * from "./useSpringMount";
4
4
  export * from "./useSpringPress";
5
5
  export * from "./useNumericTransition";
6
- export * from "./useSpringOrchestrator";
7
- export * from "./useStaggerReveal";
8
- export * from "./useScrollProgress";
9
6
  export * from "./useAnimatedNumber";
10
7
  export * from "./useAnimatedNumberMap";
11
- export * from "./installDarkModeSync";
12
- export * from "./useRAFLoop";
13
- export * from "./useIntersectionPause";
14
- export * from "./useStagger";
@@ -0,0 +1,8 @@
1
+ /** Genuine support for a `scroll()` timeline (the `.scroll-progress` recipe). */
2
+ export declare function supportsScrollTimeline(): boolean;
3
+ /**
4
+ * Genuine support for a `view()` timeline + `animation-range` (the
5
+ * `[data-scroll-reveal]` recipe). The `view()` value carries the range probe
6
+ * implicitly — an engine new enough for `view()` carries `animation-range`.
7
+ */
8
+ export declare function supportsViewTimeline(): boolean;
@@ -35,6 +35,13 @@ export interface RAFLoopControls {
35
35
  resume: () => void;
36
36
  /** Stop the loop and detach document/media listeners. */
37
37
  dispose: () => void;
38
+ /**
39
+ * Yield to the main thread between chunks of heavy per-frame work (the INP
40
+ * lever). Native `scheduler.yield()` when available, else a MessageChannel/
41
+ * setTimeout fallback. `await` it inside the frame callback when a single
42
+ * frame's work would otherwise block input/paint. See {@link yieldToMain}.
43
+ */
44
+ yieldToMain: () => Promise<void>;
38
45
  }
39
46
  /**
40
47
  * Scope-aware requestAnimationFrame loop with manual controls plus document
@@ -16,8 +16,12 @@ interface ScrollProgressConfig {
16
16
  * `Ref<number>` in [0, 1]. Drives things like scroll-linked typography
17
17
  * axes, parallax depth, or progress indicators.
18
18
  *
19
- * Uses a rAF-coalesced scroll listener plus ResizeObserver so the mapping
20
- * stays accurate when layout shifts.
19
+ * AQ.W5: on an engine with native scroll-driven animations, the listener +
20
+ * `ResizeObserver` machinery does NOT attach — prefer the `.scroll-progress`
21
+ * CSS recipe (scroll-driven.css), which runs the same 0..1 axis on the
22
+ * compositor. This composable is the feature-detected fallback (the sole writer
23
+ * when the native feature is absent); `computeProgress()` still runs once on
24
+ * mount for a correct initial value.
21
25
  */
22
26
  export declare function useScrollProgress(options: ScrollProgressConfig): Ref<number>;
23
27
  export {};
@@ -13,6 +13,12 @@ interface StaggerRevealConfig {
13
13
  * gets a staggered `revealed` flag once it crosses the viewport threshold.
14
14
  * Consumers bind the flag to a Tailwind class (e.g. `opacity-100 translate-y-0`)
15
15
  * and let CSS transitions handle the visual entry.
16
+ *
17
+ * AQ.W5: on an engine with native `view()` timelines, no `IntersectionObserver`
18
+ * is constructed — prefer the `[data-scroll-reveal]` CSS recipe
19
+ * (scroll-driven.css). This composable is the feature-detected fallback (the
20
+ * sole writer when the native feature is absent); under native, `register()`
21
+ * reveals immediately so the terminal state is correct and the CSS animates.
16
22
  */
17
23
  export declare function useStaggerReveal(options?: StaggerRevealConfig): {
18
24
  targets: import("vue").Ref<HTMLElement[], HTMLElement[]>;
@@ -0,0 +1,31 @@
1
+ export interface ViewTransitionResult {
2
+ /**
3
+ * Resolves when the transition's `finished` promise settles (or
4
+ * immediately in the fallback path). Use to route focus per the a11y
5
+ * MANDATORY: `await startViewTransition(mutate).finished; el.focus()`.
6
+ * Never rejects — a skipped/aborted transition settles cleanly.
7
+ */
8
+ finished: Promise<void>;
9
+ /** True when the native API ran; false when the instant fallback ran. */
10
+ transitioned: boolean;
11
+ }
12
+ /**
13
+ * True when `document.startViewTransition` is available — the feature-detected
14
+ * predicate consumers gate optional VT-only styling on.
15
+ */
16
+ export declare function supportsViewTransitions(): boolean;
17
+ /**
18
+ * Wrap a synchronous DOM mutation in `document.startViewTransition` with an
19
+ * instant fallback. `mutate` performs the DOM/state change and is called
20
+ * synchronously in BOTH paths (native and fallback), so the post-mutation DOM
21
+ * is identical regardless of support.
22
+ *
23
+ * @param mutate the synchronous DOM/state change to animate between.
24
+ * @returns `{ finished, transitioned }` — await `finished` to route focus.
25
+ *
26
+ * @example
27
+ * const { finished } = startViewTransition(() => { rows.value = reranked });
28
+ * await finished; // animation done
29
+ * firstRow.value?.focus(); // consumer routes focus (the a11y MANDATORY)
30
+ */
31
+ export declare function startViewTransition(mutate: () => void): ViewTransitionResult;
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Yield control to the main thread, returning a promise that resolves after the
3
+ * browser has had a chance to run pending input/render work. Native
4
+ * `scheduler.yield()` when available; otherwise a `MessageChannel` macrotask
5
+ * (with a `setTimeout(0)` floor). Await it between chunks of a long task to keep
6
+ * input responsive (the INP lever).
7
+ *
8
+ * @example
9
+ * for (const chunk of chunks) {
10
+ * processChunk(chunk);
11
+ * await yieldToMain(); // let the browser breathe between chunks
12
+ * }
13
+ */
14
+ export declare function yieldToMain(): Promise<void>;
15
+ export interface UseYieldToMainReturn {
16
+ /** True when the native `scheduler.yield()` is available (vs the fallback). */
17
+ readonly hasNativeYield: boolean;
18
+ /** Yield to the main thread. Native `scheduler.yield()` or the fallback. */
19
+ yield: () => Promise<void>;
20
+ }
21
+ /**
22
+ * Composable wrapper over {@link yieldToMain} that exposes the native-yield
23
+ * feature flag alongside the bound `yield` function. Consumers loop their work
24
+ * units and `await ctx.yield()` between chunks to keep input responsive.
25
+ *
26
+ * Pure-native (no `vue` import) — call it from setup or anywhere; it owns no
27
+ * reactive state and no lifecycle, so it has no cleanup obligation.
28
+ */
29
+ export declare function useYieldToMain(): UseYieldToMainReturn;
@@ -1,2 +1,2 @@
1
- import { a as e, i as t, n, o as r, r as i, s as a, t as o } from "./useConfiguratorState-BlaevW0S.js";
1
+ import { a as e, i as t, n, o as r, r as i, s as a, t as o } from "./useConfiguratorState-BR5vUDL8.js";
2
2
  export { e as CONFIGURATOR_DENSITY_KEY, t as Configurator, i as ConfiguratorLayer, n as ConfiguratorRow, r as provideConfiguratorDensity, o as useConfiguratorState, a as useOptionalConfiguratorDensity };
@@ -1,6 +1,6 @@
1
1
  import { t as e } from "./createLucideIcon-Bn9a1b70.js";
2
- import { n as t } from "./button-BlOW34DT.js";
3
- import { t as n } from "./_plugin-vue_export-helper-n-_DRHWS.js";
2
+ import { n as t } from "./button-C0aHmBbt.js";
3
+ import { t as n } from "./_plugin-vue_export-helper-Dq1MygBL.js";
4
4
  import { Transition as r, createBlock as i, createCommentVNode as a, createElementBlock as o, createElementVNode as s, createTextVNode as c, createVNode as l, defineComponent as u, mergeModels as d, openBlock as f, renderSlot as p, toDisplayString as m, unref as h, useModel as g, withCtx as _, withKeys as v, withModifiers as y } from "vue";
5
5
  var b = e("loader-circle", [["path", {
6
6
  d: "M21 12a9 9 0 1 1-6.219-8.56",
@@ -0,0 +1,13 @@
1
+ //#region src/composables/motion/constants.ts
2
+ var e = {
3
+ canvasNeedle: .08,
4
+ domHero: .12,
5
+ domPill: .14,
6
+ domProgress: .18
7
+ }, t = {
8
+ canvas: .002,
9
+ dom: .05,
10
+ domProgress: .5
11
+ };
12
+ //#endregion
13
+ export { t as n, e as t };
@@ -1,3 +1,3 @@
1
- import { a as e, c as t, i as n, l as r, n as i, o as a, r as o, s, t as c } from "./ContextMenuSubContent-DCkweFW9.js";
2
- import { n as l, r as u, t as d } from "./ContextMenuContent-CvXfU5qz.js";
1
+ import { a as e, c as t, i as n, l as r, n as i, o as a, r as o, s, t as c } from "./ContextMenuSubContent-gAFxJ-qi.js";
2
+ import { n as l, r as u, t as d } from "./ContextMenuContent-otjFIu8v.js";
3
3
  export { u as ContextMenu, s as ContextMenuCheckboxItem, d as ContextMenuContent, t as ContextMenuItem, o as ContextMenuLabel, r as ContextMenuRadioGroup, a as ContextMenuRadioItem, n as ContextMenuSeparator, e as ContextMenuShortcut, c as ContextMenuSubContent, i as ContextMenuSubTrigger, l as ContextMenuTrigger };
package/dist/controls.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { t as e } from "./cn-DJXf4yaB.js";
2
- import { t } from "./_plugin-vue_export-helper-n-_DRHWS.js";
3
- import { t as n } from "./useGlobalDark-PMiP5Jku.js";
2
+ import { t } from "./_plugin-vue_export-helper-Dq1MygBL.js";
3
+ import { t as n } from "./useGlobalDark-B0WvLJE3.js";
4
4
  import { computed as r, createBlock as i, createElementVNode as a, defineComponent as o, mergeProps as s, openBlock as c, resolveDynamicComponent as l, unref as u, useAttrs as d, watchEffect as f, withCtx as p } from "vue";
5
5
  //#endregion
6
6
  //#region src/components/custom/controls/DarkModeToggle.vue
package/dist/dark.d.ts CHANGED
@@ -1 +1 @@
1
- export { useGlobalDark } from "./composables/dark";
1
+ export { useGlobalDark, installDarkModeSync } from "./composables/dark";
package/dist/dark.js CHANGED
@@ -1,2 +1,13 @@
1
- import { t as e } from "./useGlobalDark-PMiP5Jku.js";
2
- export { e as useGlobalDark };
1
+ import { t as e } from "./useGlobalDark-B0WvLJE3.js";
2
+ import { nextTick as t, watch as n } from "vue";
3
+ //#region src/composables/dark/installDarkModeSync.ts
4
+ function r(r) {
5
+ let { isDark: i } = e();
6
+ n(i, () => {
7
+ t(() => {
8
+ requestAnimationFrame(r);
9
+ });
10
+ });
11
+ }
12
+ //#endregion
13
+ export { r as installDarkModeSync, e as useGlobalDark };
@@ -1,2 +1,2 @@
1
- import { n as e, t } from "./DataTable-Ce00dbHD.js";
1
+ import { n as e, t } from "./DataTable-R8-Zidms.js";
2
2
  export { t as DataTable, e as DataTablePagination };
package/dist/dialog.js CHANGED
@@ -1,3 +1,3 @@
1
- import { n as e, t } from "./DialogContent-CmCijgX9.js";
2
- import { a as n, i as r, n as i, o as a, r as o, s, t as c } from "./DialogFooter-DRdaCok0.js";
1
+ import { n as e, t } from "./DialogContent-2fALDSvc.js";
2
+ import { a as n, i as r, n as i, o as a, r as o, s, t as c } from "./DialogFooter-ClrNEOVU.js";
3
3
  export { e as Dialog, s as DialogClose, t as DialogContent, o as DialogDescription, c as DialogFooter, n as DialogHeader, i as DialogScrollContent, r as DialogTitle, a as DialogTrigger };
@@ -1,2 +1,2 @@
1
- import { t as e } from "./DiscoGlyph-wRA02zAJ.js";
1
+ import { t as e } from "./DiscoGlyph-C3JfMnRV.js";
2
2
  export { e as DiscoGlyph };