@mkbabb/glass-ui 3.6.0 → 3.7.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 (206) hide show
  1. package/dist/CardAction-D8nSE62a.js +163 -0
  2. package/dist/CollapsibleContent-D7UNsXQr.js +63 -0
  3. package/dist/{CommandShortcut-BiVyqipe.js → CommandShortcut-CY0aQTz5.js} +4 -4
  4. package/dist/{ContextMenuContent-De01_83g.js → ContextMenuContent-DGKZX1Du.js} +1 -1
  5. package/dist/{ContextMenuSubContent-DrWkXKQP.js → ContextMenuSubContent-BeDz7G6f.js} +4 -4
  6. package/dist/{DataTable-BGVXx0Ww.js → DataTable-gtPOLZvl.js} +14 -7
  7. package/dist/{DialogContent-IQ8_BRrC.js → DialogContent-DG1YMR-P.js} +24 -24
  8. package/dist/{DialogFooter-Er0wA3K6.js → DialogFooter-BCIaDP15.js} +2 -2
  9. package/dist/{DiscoGlyph-BaZ8OawK.js → DiscoGlyph-ZoBYpoxI.js} +1 -1
  10. package/dist/{GlyphFace-B_7vOmYn.js → GlyphFace-Ce_oe3tM.js} +1 -1
  11. package/dist/{HoverCardContent-ICfIMZX1.js → HoverCardContent-Bn0UBMY9.js} +1 -1
  12. package/dist/{HoverPopover-DTSYkJtw.js → HoverPopover-DXpOEw1P.js} +1 -1
  13. package/dist/{IconTooltip-DZlCkU-0.js → IconTooltip-Cu86JR4e.js} +1 -1
  14. package/dist/{Input-CRJ2owjN.js → Input-DWQQIOC4.js} +4 -1
  15. package/dist/{Label-CZk-3nTc.js → Label-DBc7bKzZ.js} +1 -1
  16. package/dist/{MetricBadge-BlrdbOGN.js → MetricBadge-D-bRaQUD.js} +1 -1
  17. package/dist/{Notification-DP_ApJLo.js → Notification-B5WHP3_1.js} +5 -4
  18. package/dist/{NumberFieldContent-Bhhmk95p.js → NumberFieldContent-CLNVR1iY.js} +5 -5
  19. package/dist/{PopoverContent-B8WtJECb.js → PopoverContent-F1bWnYoh.js} +2 -2
  20. package/dist/{Progress-DjM86vfb.js → Progress-c4vo4ALi.js} +6 -6
  21. package/dist/{ScrollingText-P9o_DuMn.js → ScrollingText-BEp377U5.js} +2 -2
  22. package/dist/{SelectScrollDownButton-BGn3rjs9.js → SelectScrollDownButton-DAo5NmY_.js} +8 -7
  23. package/dist/{Separator-C2XtAXRp.js → Separator-DZyqsCum.js} +1 -1
  24. package/dist/{Switch-x8n6husW.js → Switch-2rsAtDfA.js} +8 -2
  25. package/dist/TabsList-COqIdW7i.js +101 -0
  26. package/dist/{Toaster-DdhMKfus.js → Toaster-BMaeziJJ.js} +54 -60
  27. package/dist/{ToggleGroupItem-gyXj998A.js → ToggleGroupItem-C-AIkBUw.js} +13 -5
  28. package/dist/{TooltipProvider-D-JrSqDu.js → TooltipProvider-CD2IXfRv.js} +1 -1
  29. package/dist/{UnderlineTabs-CuIK16JI.js → UnderlineTabs-D_c1iYo-.js} +1 -1
  30. package/dist/animated-digit.js +2 -2
  31. package/dist/api/index.d.ts +1 -1
  32. package/dist/api.js +1 -1
  33. package/dist/aurora.js +690 -227
  34. package/dist/{badge-Cl6JZ1B7.js → badge-DHQrc_GQ.js} +13 -9
  35. package/dist/badge.js +1 -1
  36. package/dist/{button-BcMzVrqs.js → button-CAywcrhO.js} +6 -3
  37. package/dist/button.js +1 -1
  38. package/dist/card.js +2 -2
  39. package/dist/carousel.js +5 -5
  40. package/dist/{check-CdkxGxXJ.js → check-BBKKKSTf.js} +1 -1
  41. package/dist/{chevron-down-pBY8sYfV.js → chevron-down-BSkTP2aL.js} +1 -1
  42. package/dist/{chevron-right-BjeKC22V.js → chevron-right-sDM0Yvrf.js} +1 -1
  43. package/dist/{chevron-up-DBeNHUm1.js → chevron-up-CCOD_FTz.js} +1 -1
  44. package/dist/collapsible.js +1 -1
  45. package/dist/color-DjJCAQ6f.js +76 -0
  46. package/dist/color.js +2 -2
  47. package/dist/command.js +1 -1
  48. package/dist/compile-iM4IUB66.js +158 -0
  49. package/dist/components/custom/aurora/Aurora.vue.d.ts +1 -0
  50. package/dist/components/custom/aurora/composables/atoms.d.ts +60 -0
  51. package/dist/components/custom/aurora/composables/color.d.ts +7 -13
  52. package/dist/components/custom/aurora/composables/cursorModel.d.ts +35 -2
  53. package/dist/components/custom/aurora/composables/glSetup.d.ts +1 -1
  54. package/dist/components/custom/aurora/composables/gpuRuntime.d.ts +16 -0
  55. package/dist/components/custom/aurora/composables/runtime.d.ts +18 -0
  56. package/dist/components/custom/aurora/composables/uniformBridge.d.ts +23 -0
  57. package/dist/components/custom/aurora/composables/useAurora.d.ts +6 -0
  58. package/dist/components/custom/aurora/composables/useCursorInteraction.d.ts +8 -0
  59. package/dist/components/custom/aurora/constants/presets.d.ts +55 -2
  60. package/dist/components/custom/aurora/constants/renderMode.d.ts +10 -0
  61. package/dist/components/custom/aurora/constants/shaders/aurora.wgsl.d.ts +7 -0
  62. package/dist/components/custom/aurora/constants/shaders/brush.glsl.d.ts +1 -1
  63. package/dist/components/custom/aurora/constants/shaders/flow.glsl.d.ts +1 -1
  64. package/dist/components/custom/aurora/constants/shaders/mediums.glsl.d.ts +2 -2
  65. package/dist/components/custom/aurora/constants/shaders/painterly.wgsl.d.ts +7 -0
  66. package/dist/components/custom/aurora/constants/shaders/wake.wgsl.d.ts +4 -0
  67. package/dist/components/custom/aurora/index.d.ts +2 -1
  68. package/dist/components/custom/fourier-field/FourierField.vue.d.ts +38 -0
  69. package/dist/components/custom/fourier-field/index.d.ts +2 -0
  70. package/dist/components/custom/fourier-field/math.d.ts +57 -0
  71. package/dist/components/custom/goo-blob/GooBlob.vue.d.ts +2 -0
  72. package/dist/components/custom/goo-blob/composables/useBlobMood.d.ts +14 -2
  73. package/dist/components/custom/goo-blob/composables/useBlobPointer.d.ts +45 -4
  74. package/dist/components/custom/goo-blob/composables/useMetaballRenderer.d.ts +1 -1
  75. package/dist/components/custom/goo-blob/index.d.ts +1 -1
  76. package/dist/components/custom/goo-blob/shaders/sdf-body.glsl.d.ts +1 -1
  77. package/dist/components/custom/goo-blob/shaders/watercolor-edges.glsl.d.ts +2 -2
  78. package/dist/components/custom/goo-blob/types.d.ts +40 -0
  79. package/dist/components/custom/metric-cell/MetricCell.vue.d.ts +1 -1
  80. package/dist/components/custom/metric-stack/MetricStack.vue.d.ts +1 -1
  81. package/dist/components/ui/_shared/ModalOverlay.vue.d.ts +1 -1
  82. package/dist/components/ui/alert/index.d.ts +1 -1
  83. package/dist/components/ui/card/Card.vue.d.ts +10 -3
  84. package/dist/components/ui/card/CardAction.vue.d.ts +24 -0
  85. package/dist/components/ui/card/index.d.ts +1 -0
  86. package/dist/components/ui/collapsible/CollapsibleTrigger.vue.d.ts +5 -1
  87. package/dist/components/ui/tabs/TabsList.vue.d.ts +13 -3
  88. package/dist/components/ui/toast/Toast.vue.d.ts +5 -5
  89. package/dist/components/ui/toast/use-toast.d.ts +1 -1
  90. package/dist/composables/color/index.d.ts +50 -0
  91. package/dist/composables/glass/createGPUCanvas.d.ts +40 -0
  92. package/dist/composables/glass/webgl/createCanvasLifecycle.d.ts +45 -0
  93. package/dist/composables/glass/webgl/shaders/procedural-color.glsl.d.ts +3 -0
  94. package/dist/composables/glass/webgl/useWebGLCanvas.d.ts +4 -4
  95. package/dist/configurator.js +1 -1
  96. package/dist/confirm-dialog.js +3 -3
  97. package/dist/constellation.js +3 -3
  98. package/dist/context-menu.js +2 -2
  99. package/dist/controls.js +2 -2
  100. package/dist/dark.js +1 -1
  101. package/dist/data-table.js +1 -1
  102. package/dist/dialog.js +2 -2
  103. package/dist/disco-glyph.js +1 -1
  104. package/dist/dock.js +9 -9
  105. package/dist/{dockContext-spUj_-E5.js → dockContext-DLgrVWsU.js} +1 -1
  106. package/dist/dom.js +5 -5
  107. package/dist/{dropdown-menu-EFjl5iKo.js → dropdown-menu-BWpwutt0.js} +5 -5
  108. package/dist/dropdown-menu.js +1 -1
  109. package/dist/expandable-container.js +2 -2
  110. package/dist/forms.js +10 -7
  111. package/dist/fourier-field.d.ts +1 -0
  112. package/dist/fourier-field.js +166 -0
  113. package/dist/glass-carousel.js +1 -1
  114. package/dist/glass-panel.js +2 -2
  115. package/dist/glass-ui.css +1 -1
  116. package/dist/glass-ui.js +207 -192
  117. package/dist/glyph-face.js +2 -2
  118. package/dist/goo-blob.js +336 -234
  119. package/dist/header-ribbon.js +1 -1
  120. package/dist/hover-card.js +1 -1
  121. package/dist/hover-popover.js +1 -1
  122. package/dist/icon-tooltip.js +1 -1
  123. package/dist/instrument-chassis.js +1 -1
  124. package/dist/instrument-rail.js +1 -1
  125. package/dist/keyboard.js +1 -1
  126. package/dist/{keys-BFoma9vm.js → keys-Dyf_uTs5.js} +1 -1
  127. package/dist/label.js +1 -1
  128. package/dist/labeled-field.js +6 -6
  129. package/dist/metric-badge.js +1 -1
  130. package/dist/metric-stack.js +1 -1
  131. package/dist/{minimize-2-BP27-qBY.js → minimize-2-lcXOuc6V.js} +1 -1
  132. package/dist/motion-core.js +76 -106
  133. package/dist/motion.js +3 -3
  134. package/dist/notification.js +1 -1
  135. package/dist/number-field.js +1 -1
  136. package/dist/paper-backdrop.js +1 -1
  137. package/dist/popover.js +1 -1
  138. package/dist/progress.js +1 -1
  139. package/dist/pulse.js +1 -1
  140. package/dist/reactive.js +2 -2
  141. package/dist/responsive-tabs.js +2 -2
  142. package/dist/scrolling-text.js +1 -1
  143. package/dist/{search-DBG8qaRs.js → search-nbkvr2dC.js} +1 -1
  144. package/dist/search.js +8 -8
  145. package/dist/select.js +3 -3
  146. package/dist/separator.js +1 -1
  147. package/dist/{sheet-CQYYrkr9.js → sheet-Cv1uO-Gq.js} +4 -4
  148. package/dist/sheet.js +1 -1
  149. package/dist/{slider-CgNzRSh6.js → slider-BA9wIs5e.js} +5 -4
  150. package/dist/slider.js +1 -1
  151. package/dist/sortable-list.js +3 -3
  152. package/dist/styles/components.css +1 -1
  153. package/dist/styles/theme.css +49 -0
  154. package/dist/styles/typography.css +3 -3
  155. package/dist/styles/utilities.css +17 -13
  156. package/dist/supportsCssTimeline-C5oe0lnD.js +12 -0
  157. package/dist/switch.js +1 -1
  158. package/dist/tabs.js +3 -3
  159. package/dist/timeline.js +2 -2
  160. package/dist/toast.js +1 -1
  161. package/dist/toggle-group.js +1 -1
  162. package/dist/tooltip.js +1 -1
  163. package/dist/typewriter.js +1 -1
  164. package/dist/{useAnimatedNumber-DfVgP4te.js → useAnimatedNumber-C5I3wWd8.js} +1 -1
  165. package/dist/{useConfiguratorState-DUtC1jxr.js → useConfiguratorState-B24TcgIn.js} +5 -5
  166. package/dist/useScrollProgress-CAH8Ofwt.js +35 -0
  167. package/dist/{useTouchGate-CS5Csc2h.js → useTouchGate-YQRwyUGU.js} +1 -1
  168. package/dist/{vReveal-u2wSG2El.js → vReveal-BE2TsPoR.js} +6 -17
  169. package/dist/watercolor-dot.js +2 -2
  170. package/dist/{x-C4pz9nbD.js → x-Dfsegz9Y.js} +1 -1
  171. package/package.json +29 -1
  172. package/src/styles/theme.css +49 -0
  173. package/src/styles/typography.css +3 -3
  174. package/src/styles/utilities.css +17 -13
  175. package/dist/CardFooter-C390imy7.js +0 -129
  176. package/dist/CollapsibleContent-cauTbZEM.js +0 -52
  177. package/dist/TabsIndicator-DA0x9gPr.js +0 -97
  178. package/dist/color-DS-iLRVM.js +0 -33
  179. package/dist/compile-C62K_FpC.js +0 -106
  180. /package/dist/{InstrumentChassis-DaHIZCqy.js → InstrumentChassis-BLJBl1BW.js} +0 -0
  181. /package/dist/{InstrumentRail-B0qqLFN0.js → InstrumentRail-BElFwKyt.js} +0 -0
  182. /package/dist/{ModalOverlay-B_CBtqcE.js → ModalOverlay-D1VrWyoi.js} +0 -0
  183. /package/dist/{PaperBackdrop-D_YZW47j.js → PaperBackdrop-DCGoGatv.js} +0 -0
  184. /package/dist/{SelectGroup-CMdoCjRE.js → SelectGroup-BcaFjvP4.js} +0 -0
  185. /package/dist/{SelectSeparator-CaJnPF3_.js → SelectSeparator-COFMJGng.js} +0 -0
  186. /package/dist/{_plugin-vue_export-helper-C1je1s0u.js → _plugin-vue_export-helper-gLzyemvl.js} +0 -0
  187. /package/dist/{constants-C8NMonuo.js → constants-CS75AWHG.js} +0 -0
  188. /package/dist/{createContext-DBMGRlx4.js → createContext-CvNyBk4o.js} +0 -0
  189. /package/dist/{createLucideIcon-DuDoe_ra.js → createLucideIcon-B6uNAU9G.js} +0 -0
  190. /package/dist/{menuItemVariants-C2QlXqT3.js → menuItemVariants-B4eFR5Ix.js} +0 -0
  191. /package/dist/{presets-Dyv9Zl7W.js → presets-BKVyQfbt.js} +0 -0
  192. /package/dist/{prng-CjVgzjQT.js → prng-wHuHlNHE.js} +0 -0
  193. /package/dist/{useCanvas2D-BeNJqqIS.js → useCanvas2D-C31yfUGY.js} +0 -0
  194. /package/dist/{useGlassRenderer-Dn3WpfG-.js → useGlassRenderer-HebgSEgN.js} +0 -0
  195. /package/dist/{useGlobalDark-D7R9OypB.js → useGlobalDark-yhL4Wp-s.js} +0 -0
  196. /package/dist/{useIntersectionPause-DsQYGc8V.js → useIntersectionPause-Cc-H9ees.js} +0 -0
  197. /package/dist/{useInterval-CHVYFpXV.js → useInterval-D3USn0yc.js} +0 -0
  198. /package/dist/{useKeyboardShortcuts-i8tHd5WO.js → useKeyboardShortcuts-Be3w_Rwk.js} +0 -0
  199. /package/dist/{useResizeObserver-DX-STszm.js → useResizeObserver-CSyxGxIX.js} +0 -0
  200. /package/dist/{useSortable-muI29agz.js → useSortable-C8ReQ50P.js} +0 -0
  201. /package/dist/{useSpringMount-CnizvZGm.js → useSpringMount-LRZqJTaF.js} +0 -0
  202. /package/dist/{useTextHighlight-Dmtofpk2.js → useTextHighlight-aMPdEpkq.js} +0 -0
  203. /package/dist/{useTimer-DGgoxTXL.js → useTimer-DEJonOZa.js} +0 -0
  204. /package/dist/{useUserInvalidAria-DmvZ_6Dx.js → useUserInvalidAria-CQKjEfwP.js} +0 -0
  205. /package/dist/{useViewTransition-DI0Rs2rV.js → useViewTransition-DaN5Zrox.js} +0 -0
  206. /package/dist/{useViewportReady-Dcvf0c4p.js → useViewportReady-K96m-Mdv.js} +0 -0
@@ -1,9 +1,8 @@
1
1
  import { t as e } from "./cn-DJXf4yaB.js";
2
2
  import { createElementBlock as t, defineComponent as n, normalizeClass as r, openBlock as i, renderSlot as a, unref as o } from "vue";
3
3
  import { cva as s } from "class-variance-authority";
4
- //#endregion
5
- //#region src/components/ui/badge/Badge.vue
6
- var c = /* @__PURE__ */ n({
4
+ //#region src/components/ui/badge/Badge.vue?vue&type=script&setup=true&lang.ts
5
+ var c = ["data-variant", "data-size"], l = /* @__PURE__ */ n({
7
6
  __name: "Badge",
8
7
  props: {
9
8
  variant: {},
@@ -18,12 +17,17 @@ var c = /* @__PURE__ */ n({
18
17
  },
19
18
  setup(n) {
20
19
  let s = n;
21
- return (c, u) => (i(), t("div", { class: r(o(e)(o(l)({
22
- variant: n.variant,
23
- size: n.size
24
- }), s.class)) }, [a(c.$slots, "default")], 2));
20
+ return (l, d) => (i(), t("div", {
21
+ "data-slot": "badge",
22
+ "data-variant": n.variant,
23
+ "data-size": n.size,
24
+ class: r(o(e)(o(u)({
25
+ variant: n.variant,
26
+ size: n.size
27
+ }), s.class))
28
+ }, [a(l.$slots, "default")], 10, c));
25
29
  }
26
- }), l = s("focus-ring inline-flex items-center rounded-badge border font-semibold transition-colors", {
30
+ }), u = s("focus-ring inline-flex items-center gap-1.5 rounded-badge border font-semibold transition-control wrap-anywhere [&_svg:not([class*=size-])]:size-3.5 [&_svg]:shrink-0 [&_svg]:pointer-events-none", {
27
31
  variants: {
28
32
  variant: {
29
33
  default: "border-transparent bg-primary text-primary-foreground hover:bg-primary/80",
@@ -46,4 +50,4 @@ var c = /* @__PURE__ */ n({
46
50
  }
47
51
  });
48
52
  //#endregion
49
- export { c as n, l as t };
53
+ export { l as n, u as t };
package/dist/badge.js CHANGED
@@ -1,2 +1,2 @@
1
- import { n as e, t } from "./badge-Cl6JZ1B7.js";
1
+ import { n as e, t } from "./badge-DHQrc_GQ.js";
2
2
  export { e as Badge, t as badgeVariants };
@@ -29,6 +29,8 @@ var d = /* @__PURE__ */ r({
29
29
  return (t, p) => (a(), n(s(l), i({
30
30
  as: r.as,
31
31
  "as-child": r.asChild,
32
+ "data-slot": "button",
33
+ "data-variant": r.variant,
32
34
  "data-size": r.size
33
35
  }, d.value, { class: s(e)(s(f)({
34
36
  variant: r.variant,
@@ -39,11 +41,12 @@ var d = /* @__PURE__ */ r({
39
41
  }, 16, [
40
42
  "as",
41
43
  "as-child",
44
+ "data-variant",
42
45
  "data-size",
43
46
  "class"
44
47
  ]));
45
48
  }
46
- }), f = u("btn-pill focus-ring whitespace-nowrap text-sm font-medium cursor-pointer active:scale-[var(--scale-press-btn)] disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-disabled", {
49
+ }), f = u("btn-pill tap-squish focus-ring whitespace-nowrap text-sm font-medium cursor-pointer active:scale-[var(--scale-press-btn)] disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-disabled [&_svg:not([class*=size-])]:size-4 [&_svg]:shrink-0 [&_svg]:pointer-events-none", {
47
50
  variants: {
48
51
  variant: {
49
52
  default: "bg-primary text-primary-foreground hover:bg-primary/90 active:bg-primary/80 aria-pressed:bg-primary/85",
@@ -60,10 +63,10 @@ var d = /* @__PURE__ */ r({
60
63
  link: "text-primary underline-offset-4 hover:underline active:opacity-80 active:scale-100"
61
64
  },
62
65
  size: {
63
- default: "h-10 px-4 py-2",
66
+ default: "h-10 px-4 py-2 has-[>svg]:px-3",
64
67
  xs: "h-7 rounded-pill px-2 text-xs",
65
68
  sm: "h-9 rounded-pill px-3",
66
- lg: "h-11 rounded-pill px-8",
69
+ lg: "h-11 rounded-pill px-8 has-[>svg]:px-5",
67
70
  icon: "h-10 w-10 p-0",
68
71
  "icon-sm": "h-7 w-7 p-0"
69
72
  }
package/dist/button.js CHANGED
@@ -1,2 +1,2 @@
1
- import { n as e, t } from "./button-BcMzVrqs.js";
1
+ import { n as e, t } from "./button-CAywcrhO.js";
2
2
  export { e as Button, t as buttonVariants };
package/dist/card.js CHANGED
@@ -1,2 +1,2 @@
1
- import { a as e, i as t, n, o as r, r as i, t as a } from "./CardFooter-C390imy7.js";
2
- export { r as Card, n as CardContent, i as CardDescription, a as CardFooter, e as CardHeader, t as CardTitle };
1
+ import { a as e, i as t, n, o as r, r as i, s as a, t as o } from "./CardAction-D8nSE62a.js";
2
+ export { a as Card, o as CardAction, i as CardContent, t as CardDescription, n as CardFooter, r as CardHeader, e as CardTitle };
package/dist/carousel.js CHANGED
@@ -1,9 +1,9 @@
1
1
  import { t as e } from "./cn-DJXf4yaB.js";
2
- import { t } from "./createLucideIcon-DuDoe_ra.js";
3
- import { t as n } from "./chevron-down-pBY8sYfV.js";
4
- import { t as r } from "./chevron-right-BjeKC22V.js";
5
- import { t as i } from "./chevron-up-DBeNHUm1.js";
6
- import { n as a } from "./button-BcMzVrqs.js";
2
+ import { t } from "./createLucideIcon-B6uNAU9G.js";
3
+ import { t as n } from "./chevron-down-BSkTP2aL.js";
4
+ import { t as r } from "./chevron-right-sDM0Yvrf.js";
5
+ import { t as i } from "./chevron-up-CCOD_FTz.js";
6
+ import { n as a } from "./button-CAywcrhO.js";
7
7
  import { Fragment as o, computed as s, createBlock as c, createCommentVNode as l, createElementBlock as u, createElementVNode as d, createVNode as f, defineComponent as p, mergeProps as m, normalizeClass as h, onMounted as g, openBlock as _, ref as v, renderList as y, renderSlot as b, resolveDynamicComponent as x, toDisplayString as S, unref as C, watch as w, withCtx as T } from "vue";
8
8
  import { createInjectionState as E } from "@vueuse/core";
9
9
  import D from "embla-carousel-vue";
@@ -1,4 +1,4 @@
1
- import { t as e } from "./createLucideIcon-DuDoe_ra.js";
1
+ import { t as e } from "./createLucideIcon-B6uNAU9G.js";
2
2
  var t = e("check", [["path", {
3
3
  d: "M20 6 9 17l-5-5",
4
4
  key: "1gmf2c"
@@ -1,4 +1,4 @@
1
- import { t as e } from "./createLucideIcon-DuDoe_ra.js";
1
+ import { t as e } from "./createLucideIcon-B6uNAU9G.js";
2
2
  var t = e("chevron-down", [["path", {
3
3
  d: "m6 9 6 6 6-6",
4
4
  key: "qrunsl"
@@ -1,4 +1,4 @@
1
- import { t as e } from "./createLucideIcon-DuDoe_ra.js";
1
+ import { t as e } from "./createLucideIcon-B6uNAU9G.js";
2
2
  var t = e("chevron-right", [["path", {
3
3
  d: "m9 18 6-6-6-6",
4
4
  key: "mthhwq"
@@ -1,4 +1,4 @@
1
- import { t as e } from "./createLucideIcon-DuDoe_ra.js";
1
+ import { t as e } from "./createLucideIcon-B6uNAU9G.js";
2
2
  var t = e("chevron-up", [["path", {
3
3
  d: "m18 15-6-6-6 6",
4
4
  key: "153udz"
@@ -1,2 +1,2 @@
1
- import { n as e, r as t, t as n } from "./CollapsibleContent-cauTbZEM.js";
1
+ import { n as e, r as t, t as n } from "./CollapsibleContent-D7UNsXQr.js";
2
2
  export { t as Collapsible, n as CollapsibleContent, e as CollapsibleTrigger };
@@ -0,0 +1,76 @@
1
+ import { colorUnit2 as e, gamutMapOKLab as t, interpolateHue as n, isInSRGBGamut as r, oklabToLinearSRGB as i, oklabToRgb255 as a, parseCSSColor as o, rawOklabToOklch as s, rawOklchToOklab as c, srgbToOKLab as l } from "@mkbabb/value.js";
2
+ //#region src/composables/color/index.ts
3
+ function u(e) {
4
+ let [t, n, r] = c(e.L, e.C, e.h), [a, o, s] = i(t, n, r);
5
+ return [
6
+ Math.max(0, a),
7
+ Math.max(0, o),
8
+ Math.max(0, s)
9
+ ];
10
+ }
11
+ function d(e) {
12
+ let [t, n, r] = c(e.L, e.C, e.h), [i, o, s] = a(t, n, r), l = (e) => Math.min(1, Math.max(0, e / 255));
13
+ return [
14
+ l(i),
15
+ l(o),
16
+ l(s)
17
+ ];
18
+ }
19
+ function f(t) {
20
+ let n = e(o(t), "rgb").value, [r, i, a] = l(Number(n.r), Number(n.g), Number(n.b)), [c, u, d] = s(r, i, a);
21
+ return {
22
+ L: c,
23
+ C: u,
24
+ h: d
25
+ };
26
+ }
27
+ function p(e) {
28
+ let [t, n, r] = c(e.L, e.C, e.h), [i, o, s] = a(t, n, r), l = (e) => Math.round(e).toString(16).padStart(2, "0");
29
+ return `#${l(i)}${l(o)}${l(s)}`;
30
+ }
31
+ var m = (e) => d(f(e)), h = {
32
+ complementary: "longer",
33
+ "split-complementary": "longer",
34
+ analogous: "shorter",
35
+ monochrome: "shorter",
36
+ triad: "increasing",
37
+ tetradic: "increasing"
38
+ }, g = (e) => (e % 360 + 360) % 360;
39
+ function _(e, t, r, i) {
40
+ let a = h[t], o = (e, t) => g(n(g(e) / 360, g(t) / 360, i, a) * 360);
41
+ switch (t) {
42
+ case "monochrome": return g(e);
43
+ case "complementary": return o(e, e + 180);
44
+ case "split-complementary": return o(e + 150, e + 210);
45
+ case "triad": return o(e, e + 240);
46
+ case "tetradic": return o(e, e + 270);
47
+ default: return o(e - r, e + r);
48
+ }
49
+ }
50
+ function v(e) {
51
+ let [n, a, o] = c(e.L, e.C, e.h), [l, u, d] = t(n, a, o), [f, p, m] = s(l, u, d), h = p;
52
+ for (let e = 0; e < 6; e++) {
53
+ let [e, t, n] = c(f, h, m), [a, o, s] = i(e, t, n);
54
+ if (r(a, o, s)) break;
55
+ h *= .999;
56
+ }
57
+ return {
58
+ L: f,
59
+ C: h,
60
+ h: m
61
+ };
62
+ }
63
+ function y(e, t = {}) {
64
+ let n = typeof e == "string" ? f(e) : e, { stopCount: r = 3, harmony: i = "analogous", lightnessSpread: a = .18, hueSpread: o = 24, chromaBump: s = .03 } = t, c = Math.max(2, Math.min(4, Math.round(r))), l = [];
65
+ for (let e = 0; e < c; e++) {
66
+ let t = c === 1 ? 0 : e / (c - 1), r = n.L - a / 2 + a * t, u = Math.max(0, n.C + s * Math.sin(Math.PI * t)), d = _(n.h, i, o, t);
67
+ l.push(v({
68
+ L: Math.min(.98, Math.max(.05, r)),
69
+ C: u,
70
+ h: d
71
+ }));
72
+ }
73
+ return l;
74
+ }
75
+ //#endregion
76
+ export { v as a, u as c, _ as i, m as n, p as o, y as r, d as s, f as t };
package/dist/color.js CHANGED
@@ -1,2 +1,2 @@
1
- import { a as e, i as t, n, r, t as i } from "./color-DS-iLRVM.js";
2
- export { i as cssToOklch, n as defaultBlobColorResolver, r as oklchStopToHex, t as oklchToGammaRgb, e as oklchToLinear };
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 "./color-DjJCAQ6f.js";
2
+ export { s as cssToOklch, r as defaultBlobColorResolver, a as deriveBlobPalette, n as deriveHue, e as gamutMapStop, i as oklchStopToHex, o as oklchToGammaRgb, t as oklchToLinear };
package/dist/command.js CHANGED
@@ -1,2 +1,2 @@
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 "./CommandShortcut-BiVyqipe.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 "./CommandShortcut-CY0aQTz5.js";
2
2
  export { r as Command, t as CommandDialog, s as CommandEmpty, a as CommandGroup, e as CommandInput, n as CommandItem, o as CommandList, i as CommandSeparator, c as CommandShortcut };
@@ -0,0 +1,158 @@
1
+ //#region src/composables/glass/webgl/shaders/procedural-color.glsl.ts
2
+ var e = "\nfloat srgbToLinearCh(float c) {\n return c <= 0.04045 ? c / 12.92 : pow((c + 0.055) / 1.055, 2.4);\n}\nvec3 srgbToLinear(vec3 c) {\n return vec3(srgbToLinearCh(c.r), srgbToLinearCh(c.g), srgbToLinearCh(c.b));\n}\n\nfloat linearToSrgbCh(float c) {\n return c <= 0.0031308 ? c * 12.92 : 1.055 * pow(c, 1.0 / 2.4) - 0.055;\n}\nvec3 linearToSrgb(vec3 c) {\n return vec3(linearToSrgbCh(c.r), linearToSrgbCh(c.g), linearToSrgbCh(c.b));\n}", t = "const mat2 FBM_ROT = mat2(0.8, 0.6, -0.6, 0.8);", n = "\n// value.js LINEAR_SRGB_TO_LMS (constants.ts), row-major; written here as GLSL\n// columns (= the transpose) so mat3 * vec3 evaluates the row-major M·v.\nconst mat3 LINEAR_SRGB_TO_LMS = mat3(\n 0.4122214708, 0.2119034982, 0.0883024619,\n 0.5363325363, 0.6806995451, 0.2817188376,\n 0.0514459929, 0.1073969566, 0.6299787005\n);\n\n// value.js srgbToOKLab's INLINE LMS→OKLab coefficients (gamut.ts lines 295-297 —\n// these differ at the ~1e-9 digit from LMS_TO_OKLAB_MATRIX; use the inline ones to\n// mirror the exact value.js path), row-major → GLSL columns.\nconst mat3 LMS_TO_OKLAB = mat3(\n 0.2104542553, 1.9779984951, 0.0259040371,\n 0.7936177850, -2.4285922050, 0.7827717662,\n -0.0040720468, 0.4505937099, -0.8086757660\n);\n\n// value.js OKLAB_TO_LMS_COEFF (constants.ts), row-major → GLSL columns. Rows:\n// l = [1, 0.3963377774, 0.2158037573], m = [1, -0.1055613458, -0.0638541728],\n// s = [1, -0.0894841775, -1.2914855480].\nconst mat3 OKLAB_TO_LMS = mat3(\n 1.0, 1.0, 1.0,\n 0.3963377774, -0.1055613458, -0.0894841775,\n 0.2158037573, -0.0638541728, -1.2914855480\n);\n\n// value.js LMS_TO_LINEAR_SRGB (constants.ts), row-major → GLSL columns.\nconst mat3 LMS_TO_LINEAR_SRGB = mat3(\n 4.0767416621, -1.2684380046, -0.0041960863,\n -3.3077115913, 2.6097574011, -0.7034186147,\n 0.2309699292, -0.3413193965, 1.7076147010\n);\n\n// Gamma sRGB → raw OKLab (L, a, b). Mirrors value.js srgbToOKLab.\nvec3 srgbToOklab(vec3 c) {\n vec3 lin = srgbToLinear(c);\n vec3 lms = LINEAR_SRGB_TO_LMS * lin;\n vec3 lmsCbrt = sign(lms) * pow(abs(lms), vec3(1.0 / 3.0));\n return LMS_TO_OKLAB * lmsCbrt;\n}\n\n// Raw OKLab (L, a, b) → linear sRGB. Mirrors value.js oklabToLinearSRGB.\nvec3 oklabToLinearSrgb(vec3 lab) {\n vec3 lms_ = OKLAB_TO_LMS * lab;\n vec3 lms = lms_ * lms_ * lms_;\n return LMS_TO_LINEAR_SRGB * lms;\n}\n\n// OKLab → OKLCh: H in RADIANS. Mirrors value.js rawOklabToOklch (which returns\n// degrees; we stay in radians and only fold to [0, 2pi)).\nvec3 oklabToOklch(vec3 lab) {\n float C = length(lab.yz);\n float H = atan(lab.z, lab.y);\n if (H < 0.0) H += 2.0 * PI;\n return vec3(lab.x, C, H);\n}\n\n// OKLCh (H radians) → OKLab. Mirrors value.js rawOklchToOklab.\nvec3 oklchToOklab(vec3 lch) {\n return vec3(lch.x, lch.y * cos(lch.z), lch.y * sin(lch.z));\n}", r = "\nfn srgbToLinearCh(c: f32) -> f32 {\n return select(pow((c + 0.055) / 1.055, 2.4), c / 12.92, c <= 0.04045);\n}\nfn srgbToLinear(c: vec3f) -> vec3f {\n return vec3f(srgbToLinearCh(c.r), srgbToLinearCh(c.g), srgbToLinearCh(c.b));\n}\nfn linearToSrgbCh(c: f32) -> f32 {\n return select(1.055 * pow(c, 1.0 / 2.4) - 0.055, c * 12.92, c <= 0.0031308);\n}\nfn linearToSrgb(c: vec3f) -> vec3f {\n return vec3f(linearToSrgbCh(c.r), linearToSrgbCh(c.g), linearToSrgbCh(c.b));\n}", i = "const FBM_ROT: mat2x2f = mat2x2f(0.8, 0.6, -0.6, 0.8);", a = "\nconst LINEAR_SRGB_TO_LMS: mat3x3f = mat3x3f(\n 0.4122214708, 0.2119034982, 0.0883024619,\n 0.5363325363, 0.6806995451, 0.2817188376,\n 0.0514459929, 0.1073969566, 0.6299787005\n);\nconst LMS_TO_OKLAB: mat3x3f = mat3x3f(\n 0.2104542553, 1.9779984951, 0.0259040371,\n 0.7936177850, -2.4285922050, 0.7827717662,\n -0.0040720468, 0.4505937099, -0.8086757660\n);\nconst OKLAB_TO_LMS: mat3x3f = mat3x3f(\n 1.0, 1.0, 1.0,\n 0.3963377774, -0.1055613458, -0.0894841775,\n 0.2158037573, -0.0638541728, -1.2914855480\n);\nconst LMS_TO_LINEAR_SRGB: mat3x3f = mat3x3f(\n 4.0767416621, -1.2684380046, -0.0041960863,\n -3.3077115913, 2.6097574011, -0.7034186147,\n 0.2309699292, -0.3413193965, 1.7076147010\n);\n\nfn srgbToOklab(c: vec3f) -> vec3f {\n let lin = srgbToLinear(c);\n let lms = LINEAR_SRGB_TO_LMS * lin;\n let lmsCbrt = sign(lms) * pow(abs(lms), vec3f(1.0 / 3.0));\n return LMS_TO_OKLAB * lmsCbrt;\n}\nfn oklabToLinearSrgb(lab: vec3f) -> vec3f {\n let lms_ = OKLAB_TO_LMS * lab;\n let lms = lms_ * lms_ * lms_;\n return LMS_TO_LINEAR_SRGB * lms;\n}\nfn oklabToOklch(lab: vec3f) -> vec3f {\n let C = length(lab.yz);\n var H = atan2(lab.z, lab.y);\n if (H < 0.0) { H = H + 2.0 * PI; }\n return vec3f(lab.x, C, H);\n}\nfn oklchToOklab(lch: vec3f) -> vec3f {\n return vec3f(lch.x, lch.y * cos(lch.z), lch.y * sin(lch.z));\n}";
3
+ function o(e, t, n) {
4
+ return Math.max(t, Math.min(n, e));
5
+ }
6
+ function s() {
7
+ let e = typeof window < "u" && window.devicePixelRatio || 1;
8
+ return Math.min(e, 2);
9
+ }
10
+ //#endregion
11
+ //#region src/composables/glass/webgl/createCanvasLifecycle.ts
12
+ function c(e) {
13
+ let { canvas: t, buildContext: n, resize: r } = e, i = e.respectReducedMotion ?? e.mode !== "capture", a = /* @__PURE__ */ new Set();
14
+ e.mode === "capture" && a.add("manual");
15
+ let o = () => a.size === 0, s = 0, c = typeof performance < "u" ? performance.now() : 0, l = null, u = !1, d = !1, f = i && typeof window < "u" && window.matchMedia ? window.matchMedia("(prefers-reduced-motion: reduce)") : null, p = f?.matches ?? !1;
16
+ function m() {
17
+ if (!o() || !l) return;
18
+ let e = (performance.now() - c) / 1e3, t = l.time ? l.time(e) : e;
19
+ l.frame(t), s = !p && l.shouldContinue() ? requestAnimationFrame(m) : 0;
20
+ }
21
+ function h() {
22
+ u && o() && !s && l && (s = requestAnimationFrame(m));
23
+ }
24
+ function g() {
25
+ let e = f?.matches ?? !1;
26
+ e !== p && (p = e, e || (c = performance.now()), h());
27
+ }
28
+ f?.addEventListener("change", g);
29
+ function _(e = "manual") {
30
+ let t = o();
31
+ a.add(e), t && !o() && (cancelAnimationFrame(s), s = 0);
32
+ }
33
+ function v(e = "manual") {
34
+ let t = !o();
35
+ a.delete(e), t && o() && u && l && (c = performance.now() - 1e3, m());
36
+ }
37
+ let y = typeof document < "u";
38
+ function b() {
39
+ document.hidden ? _("tab-hidden") : v("tab-hidden");
40
+ }
41
+ y && document.addEventListener("visibilitychange", b), y && document.hidden && a.add("tab-hidden");
42
+ let x = null;
43
+ function S(e) {
44
+ e.skipped ? _("off-screen") : v("off-screen");
45
+ }
46
+ function C() {
47
+ if (x) return;
48
+ let e = t.parentElement;
49
+ e && (x = e, e.addEventListener("contentvisibilityautostatechange", S));
50
+ }
51
+ function w() {
52
+ x?.removeEventListener("contentvisibilityautostatechange", S), x = null;
53
+ }
54
+ function T() {
55
+ l = n(), r();
56
+ }
57
+ function E() {
58
+ u || d || (e.bindContextEvents?.(() => {
59
+ d || (T(), o() && h());
60
+ }, () => {
61
+ l = null, cancelAnimationFrame(s), s = 0;
62
+ }), T(), C(), u = !0, c = performance.now(), o() && (s = requestAnimationFrame(m)));
63
+ }
64
+ function D(e) {
65
+ u || E(), l?.frame(e);
66
+ }
67
+ function O() {
68
+ d = !0, cancelAnimationFrame(s), s = 0, y && document.removeEventListener("visibilitychange", b), f?.removeEventListener("change", g), w(), e.unbindContextEvents?.(), l?.teardown?.(), l = null, a.clear();
69
+ }
70
+ return e.mode === "capture" && E(), {
71
+ arm: E,
72
+ suspend: _,
73
+ resume: v,
74
+ wake: h,
75
+ renderAt: D,
76
+ dispose: O,
77
+ get armed() {
78
+ return u;
79
+ },
80
+ get disposed() {
81
+ return d;
82
+ },
83
+ get running() {
84
+ return o();
85
+ },
86
+ get reducedMotion() {
87
+ return p;
88
+ }
89
+ };
90
+ }
91
+ //#endregion
92
+ //#region src/composables/glass/webgl/useWebGLCanvas.ts
93
+ function l(e, t) {
94
+ let { setup: n, contextAttrs: r } = t, i = null, a = null, o = null;
95
+ function s() {
96
+ let t = e.getContext("webgl2", r ?? void 0);
97
+ if (!t) throw Error("[useWebGLCanvas] WebGL2 unavailable");
98
+ return i = t, o = n(i), a || (a = new ResizeObserver(() => o?.resize()), a.observe(e)), {
99
+ frame: o.frame,
100
+ shouldContinue: o.shouldContinue,
101
+ time: o.time,
102
+ teardown: () => {
103
+ o?.teardown?.(), i?.getExtension("WEBGL_lose_context")?.loseContext(), a?.disconnect(), a = null, i = null, o = null;
104
+ }
105
+ };
106
+ }
107
+ let l = null, u = null;
108
+ function d(e) {
109
+ e.preventDefault(), i = null, o = null, u?.();
110
+ }
111
+ let f = c({
112
+ canvas: e,
113
+ mode: t.mode,
114
+ respectReducedMotion: t.respectReducedMotion,
115
+ buildContext: s,
116
+ resize: () => o?.resize(),
117
+ bindContextEvents: (t, n) => {
118
+ l = t, u = n, e.addEventListener("webglcontextlost", d, !1), e.addEventListener("webglcontextrestored", l, !1);
119
+ },
120
+ unbindContextEvents: () => {
121
+ e.removeEventListener("webglcontextlost", d, !1), l && e.removeEventListener("webglcontextrestored", l, !1);
122
+ }
123
+ });
124
+ return {
125
+ arm: f.arm,
126
+ suspend: f.suspend,
127
+ resume: f.resume,
128
+ wake: f.wake,
129
+ renderAt: f.renderAt,
130
+ dispose: f.dispose,
131
+ get gl() {
132
+ return i;
133
+ },
134
+ get reducedMotion() {
135
+ return f.reducedMotion;
136
+ }
137
+ };
138
+ }
139
+ //#endregion
140
+ //#region src/composables/glass/webgl/compile.ts
141
+ function u(e, t, n, r = "[glass-ui:webgl]") {
142
+ let i = e.createShader(t);
143
+ if (e.shaderSource(i, n), e.compileShader(i), !e.getShaderParameter(i, e.COMPILE_STATUS)) {
144
+ let t = e.getShaderInfoLog(i) ?? "unknown";
145
+ throw e.deleteShader(i), Error(`${r} shader compile failed:\n${t}`);
146
+ }
147
+ return i;
148
+ }
149
+ function d(e, t, n, r = "[glass-ui:webgl]") {
150
+ let i = e.createProgram();
151
+ if (e.attachShader(i, t), e.attachShader(i, n), e.linkProgram(i), !e.getProgramParameter(i, e.LINK_STATUS)) {
152
+ let t = e.getProgramInfoLog(i) ?? "unknown";
153
+ throw e.deleteProgram(i), Error(`${r} program link failed:\n${t}`);
154
+ }
155
+ return i;
156
+ }
157
+ //#endregion
158
+ export { o as a, i as c, n as d, a as f, c as i, e as l, d as n, s as o, l as r, t as s, u as t, r as u };
@@ -82,6 +82,7 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {
82
82
  setCursor: (x: number, y: number, strength?: number) => void;
83
83
  clearCursor: () => void;
84
84
  setCursorRadius: (r: number) => void;
85
+ injectCursorVelocity: (dx: number, dy: number) => void;
85
86
  renderAt: (t: number) => void;
86
87
  pause: () => void;
87
88
  resume: () => void;
@@ -0,0 +1,60 @@
1
+ /**
2
+ * AW.W6 — the aurora "atoms of control" door: a PURE, TOTAL mapper from ≤7 intuitive
3
+ * atoms to the full `AuroraConfig`. The thin consumer surface over the ~28-field
4
+ * author schema (the Stripe/paper.design two-tier model) — nothing is removed from
5
+ * `AuroraConfig`; the full schema stays whole as the progressive-disclosure
6
+ * "Advanced" escape hatch. `resolveAtoms` is the NEW door, NOT a parallel config path.
7
+ *
8
+ * Contract (machine-asserted by proof:aurora-atoms-roundtrip):
9
+ * - TOTAL — every atom combination produces a VALID in-range `AuroraConfig`
10
+ * respecting every `budget.ts` cap (no NaN, no out-of-range field).
11
+ * - DEFAULT-PRESERVING — `resolveAtoms(DEFAULT_ATOMS)` deep-equals
12
+ * `DEFAULT_AURORA_CONFIG` (the wispy-sky default survives the new door).
13
+ *
14
+ * Mechanism: clone `DEFAULT_AURORA_CONFIG` and apply ONLY the atoms that are PRESENT
15
+ * as clamped overrides. An absent atom keeps the default's value, so the empty atom
16
+ * set (`DEFAULT_ATOMS`) resolves to exactly the wispy-sky default by construction.
17
+ */
18
+ import { type AuroraConfig, type AuroraMedium, type OklchStop } from "../constants/presets";
19
+ import { type AuroraHarmony } from "./color";
20
+ /** The mood/energy poles — one slider fans to the co-varying energy axes. */
21
+ export type AuroraMoodAtom = "calm" | "balanced" | "vivid";
22
+ /** The motion atom — the three motion registers. */
23
+ export type AuroraMotionAtom = "still" | "breathing" | "drifting";
24
+ /**
25
+ * The Tier-1 atoms of control (≤7). EVERY atom is OPTIONAL — an absent atom keeps the
26
+ * wispy-sky default's value for the fields it would drive, so `DEFAULT_ATOMS` (the
27
+ * empty set) resolves to `DEFAULT_AURORA_CONFIG`. The full `AuroraConfig` stays whole
28
+ * as the progressive-disclosure "Advanced" tier.
29
+ */
30
+ export interface AuroraAtoms {
31
+ /** A seed color (CSS string or an OklchStop anchor) → drives the derived palette. */
32
+ seed?: string | OklchStop;
33
+ /** The hue scheme across the derived ramp. Default `analogous` (when a seed is set). */
34
+ harmony?: AuroraHarmony;
35
+ /** calm ↔ vivid (one knob) — fans to saturation + warpAmount + valueVariance + breath. */
36
+ mood?: AuroraMoodAtom;
37
+ /** The painterly medium. */
38
+ medium?: AuroraMedium;
39
+ /** 0..1 — the medium's dominant texture knob (strokeAmount / wetEdge / canvasGrain). */
40
+ textureAmount?: number;
41
+ /** still | breathing | drifting — the three motion registers. */
42
+ motion?: AuroraMotionAtom;
43
+ /** 2..6 — the number of color zones (nuclei), auto-arranged on a rule-of-thirds prior. */
44
+ zones?: number;
45
+ /** The pointer/scroll interactivity axes (default OFF — declared at W6, wired at W8). */
46
+ interactivity?: AuroraConfig["interactivity"];
47
+ }
48
+ /**
49
+ * The default atoms — the EMPTY set. `resolveAtoms(DEFAULT_ATOMS)` deep-equals the
50
+ * wispy-sky `DEFAULT_AURORA_CONFIG` (machine-asserted). The user explicitly asked the
51
+ * default to be preserved; the empty-atom pass-through is how the new door honors it.
52
+ */
53
+ export declare const DEFAULT_ATOMS: AuroraAtoms;
54
+ /**
55
+ * Expand the ≤7 Tier-1 atoms into a full, valid, in-range `AuroraConfig`. A PURE,
56
+ * TOTAL function: clones the wispy-sky default and applies ONLY the present atoms as
57
+ * clamped overrides, so the empty atom set resolves to exactly `DEFAULT_AURORA_CONFIG`
58
+ * and every atom combination yields a config respecting every `budget.ts` cap.
59
+ */
60
+ export declare function resolveAtoms(atoms?: AuroraAtoms): AuroraConfig;
@@ -1,7 +1,8 @@
1
1
  import { type AuroraConfig } from "../constants/presets";
2
- import { type OklchStop } from "../../../../composables/color";
2
+ import { type ColorHarmony, type OklchStop } from "../../../../composables/color";
3
3
  export { cssToOklch, oklchStopToHex, oklchToLinear, } from "../../../../composables/color";
4
4
  export type { OklchStop } from "../../../../composables/color";
5
+ export type { ColorHarmony } from "../../../../composables/color";
5
6
  /**
6
7
  * Pack up to `maxStops` OklchStops into linear-sRGB triples. When `out` is
7
8
  * provided the buffer is filled in place (no allocation) — the runtime owns a
@@ -26,19 +27,12 @@ export declare function flattenPalette(stops: OklchStop[], maxStops?: number, ou
26
27
  export declare function paletteToCssGradient(stops: OklchStop[]): string;
27
28
  export declare function hexToOklchStop(hex: string): OklchStop;
28
29
  /**
29
- * Harmony schemes for {@link deriveAurora}. Each maps the seed hue onto the
30
- * derived stops differently:
31
- * - `analogous` — the ramp walks the seed hue ± a small spread (neighbouring
32
- * hues; the painterly default).
33
- * - `complementary` — stops travel from the seed hue toward its opposite (+180°)
34
- * along the LONG arc (keeps the ramp saturated; the short arc cuts through grey
35
- * on a warm→cool pair — the muddy-midtone defect).
36
- * - `split-complementary` — anchor + the two hues flanking the complement (±150/210).
37
- * - `triad` — stops distributed across the seed hue and its two 120° partners.
38
- * - `tetradic` — anchor + the three 90° partners (90/180/270).
39
- * - `monochrome` — every stop holds the seed hue; only L and C travel.
30
+ * Harmony schemes for {@link deriveAurora} — the PUBLIC alias of the shared
31
+ * `ColorHarmony` vocabulary hoisted to the `/color` leaf (AW.W11.b). The blob and
32
+ * aurora derive from this ONE union; aurora keeps the `AuroraHarmony` name for
33
+ * surface preservation. See `ColorHarmony` for the per-scheme semantics.
40
34
  */
41
- export type AuroraHarmony = "analogous" | "complementary" | "split-complementary" | "triad" | "tetradic" | "monochrome";
35
+ export type AuroraHarmony = ColorHarmony;
42
36
  /**
43
37
  * Eased L/C journey shapes for the derived ramp. `bell` (the W5 default for chroma)
44
38
  * peaks the chroma in the mids and desaturates the extremes — the painterly
@@ -20,6 +20,14 @@ export declare const CURSOR_DECAY_PER_FRAME = 0.992;
20
20
  * below this the next frame is visually identical, so the loop may park.
21
21
  */
22
22
  export declare const CURSOR_REST_EPSILON = 0.001;
23
+ /**
24
+ * AW.W8.1 — the velocity-burst decay per frame. A fast pointer flick injects a
25
+ * transient `burst` that eases out over ~1s (≈0.96^60 ≈ 0.09 after 1s at 60fps),
26
+ * distinct from the steady attraction. The velocity itself eases faster (it tracks
27
+ * the live pointer delta, not a lingering field).
28
+ */
29
+ export declare const CURSOR_BURST_DECAY_PER_FRAME = 0.96;
30
+ export declare const CURSOR_VELOCITY_LERP = 0.3;
23
31
  /** The mutable eased-cursor state. `strength` ramps in; `targetStrength` decays. */
24
32
  export interface CursorState {
25
33
  x: number;
@@ -29,14 +37,39 @@ export interface CursorState {
29
37
  strength: number;
30
38
  targetStrength: number;
31
39
  radius: number;
40
+ /**
41
+ * AW.W8.1 — the smoothed pointer velocity (delta per move, eased). The
42
+ * velocity-reactive flow consumes its magnitude; a fast flick spikes it. Units
43
+ * are normalized-screen per move (clamped to avoid a teleport spike).
44
+ */
45
+ velX: number;
46
+ velY: number;
47
+ /**
48
+ * AW.W8.1 — the transient swirl-BURST a fast flick injects (decays over ~1s).
49
+ * The flow shader reads this as a decaying velocity-driven term, distinct from
50
+ * the steady `strength` attraction.
51
+ */
52
+ burst: number;
32
53
  }
33
54
  /** A fresh at-rest cursor (centred, no attraction, default radius). */
34
55
  export declare function createCursorState(): CursorState;
35
56
  /**
36
57
  * Advance the cursor easing one frame — snappy approach toward the target
37
- * position, gentle decay of the attraction strength when idle.
58
+ * position, gentle decay of the attraction strength when idle. AW.W8.1: also eases
59
+ * the velocity toward zero and decays the swirl-burst. `tempo` (the master tempo
60
+ * scalar, default 1; 0 under PRM/pause) scales the velocity + burst toward stillness
61
+ * so the whole interactive stack freezes when tempo is 0 — `tempo` multiplies the
62
+ * retained fraction, NOT `uTime` (scaling the clock makes the flow jump; the
63
+ * integration step scales, the absolute clock keeps marching — the W11 discipline).
64
+ */
65
+ export declare function advanceCursor(cursor: CursorState, tempo?: number): void;
66
+ /**
67
+ * AW.W8.1 — feed a pointer delta into the velocity + burst. Called from the
68
+ * `pointermove` listener, which MUST early-out on reduced-motion BEFORE calling this
69
+ * (the cursor write-path PRM check — the listener fires independent of the rAF loop).
70
+ * The delta is clamped so a teleport (tab-in, scroll jump) does not spike a giant burst.
38
71
  */
39
- export declare function advanceCursor(cursor: CursorState): void;
72
+ export declare function injectCursorVelocity(cursor: CursorState, dx: number, dy: number): void;
40
73
  /**
41
74
  * True while the cursor is still easing (position not yet at target, or strength
42
75
  * not yet decayed below ε). The render-demand gate ORs this with the config drift
@@ -9,7 +9,7 @@
9
9
  * shader-uniform boundary: a NEW uniform name must be added here, and the cache is
10
10
  * keyed off it, so a fresh uniform always gets a location slot.
11
11
  */
12
- export declare const UNIFORM_NAMES: readonly ["uTime", "uPalette", "uStopCount", "uNucleiCount", "uNucleiPos", "uNucleiRadius", "uNucleiPaletteBias", "uNucleiValueBias", "uNucleiDriftRadius", "uNucleiDriftPhase", "uNucleiElong", "uNucleiAngle", "uSoftmaxBeta", "uValueVariance", "uWarpAmount", "uWarpScale", "uWarpDrift", "uWarpMode", "uNoiseOctaves", "uMedium", "uHuePath", "uFlowPattern", "uFlowFocal", "uFlowAngle", "uFlowCurl", "uCursor", "uCursorStrength", "uCursorRadius", "uStrokeAmount", "uStrokeScale", "uStrokeAnisotropy", "uStrokeLayers", "uStrokeMode", "uWetEdge", "uGranulation", "uImpasto", "uBrokenColor", "uCanvasGrain", "uNucleiDrift", "uPaletteDrift", "uBreathDepth", "uBreathPeriod", "uSaturation", "uPaperGrain", "uAlpha"];
12
+ export declare const UNIFORM_NAMES: readonly ["uTime", "uPalette", "uStopCount", "uNucleiCount", "uNucleiPos", "uNucleiRadius", "uNucleiPaletteBias", "uNucleiValueBias", "uNucleiDriftRadius", "uNucleiDriftPhase", "uNucleiElong", "uNucleiAngle", "uSoftmaxBeta", "uValueVariance", "uWarpAmount", "uWarpScale", "uWarpDrift", "uWarpMode", "uNoiseOctaves", "uMedium", "uHuePath", "uFlowPattern", "uFlowFocal", "uFlowAngle", "uFlowCurl", "uCursor", "uCursorStrength", "uCursorRadius", "uCursorVelocity", "uCursorBurst", "uStrokeAmount", "uStrokeScale", "uStrokeAnisotropy", "uStrokeLayers", "uStrokeMode", "uStrokeOrient", "uLightDir", "uLightColor", "uWetEdge", "uGranulation", "uImpasto", "uBrokenColor", "uCanvasGrain", "uNucleiDrift", "uPaletteDrift", "uBreathDepth", "uBreathPeriod", "uSaturation", "uPaperGrain", "uAlpha"];
13
13
  export type UniformName = (typeof UNIFORM_NAMES)[number];
14
14
  export type UniformLocations = Record<UniformName, WebGLUniformLocation | null>;
15
15
  export interface GlProgram {
@@ -0,0 +1,16 @@
1
+ import type { GPUCanvasFrame, GPUCanvasSetupArgs } from "../../../../composables/glass/createGPUCanvas";
2
+ import type { CursorState } from "./cursorModel";
3
+ import type { AuroraConfig } from "../constants/presets";
4
+ export interface GPUAuroraDeps {
5
+ canvas: HTMLCanvasElement;
6
+ getConfig: () => AuroraConfig;
7
+ cursor: CursorState;
8
+ getReducedMotion: () => boolean;
9
+ /** The frozen frame-time offset under reduced motion (matches the WebGL2 path). */
10
+ frozenOffset: number;
11
+ }
12
+ /**
13
+ * The `setup` callback for `createGPUCanvas`. Builds the pipeline once on the device,
14
+ * returns the frame hooks. The single render pass draws the WGSL aurora base field.
15
+ */
16
+ export declare function createGPUAuroraSetup(deps: GPUAuroraDeps): ({ device, context, format }: GPUCanvasSetupArgs) => GPUCanvasFrame;
@@ -72,6 +72,15 @@ export interface AuroraRuntimeOptions {
72
72
  * `instance.arm()` on the deferred path — rethrows from `arm()`.
73
73
  */
74
74
  onInitError?: (err: Error) => void;
75
+ /**
76
+ * AW.W7b — the WebGPU backend route. When a `GPUDevice` is supplied (the
77
+ * `resolveRenderModeAsync` probe resolved a non-fallback adapter), the runtime
78
+ * routes to `createGPUCanvas` drawing the SAME single-pass aurora over WebGPU;
79
+ * otherwise the WebGL2 fragment path is the universal fallback. `useAurora` runs
80
+ * the probe past first paint (the CSS placeholder paints first) and threads the
81
+ * device here. `null`/absent → the WebGL2 path (the zero-regression default).
82
+ */
83
+ gpuDevice?: GPUDevice | null;
75
84
  }
76
85
  /**
77
86
  * The concrete `createAurora` return shape. It IS an {@link AuroraInstance}
@@ -83,5 +92,14 @@ export interface AuroraRuntimeOptions {
83
92
  export interface AuroraRuntime extends Omit<AuroraInstance, "pause" | "resume"> {
84
93
  pause(reason?: SuspendReason): void;
85
94
  resume(reason?: SuspendReason): void;
95
+ /**
96
+ * AW.W8.1 — feed a pointer delta into the velocity-reactive flow (a fast flick →
97
+ * a transient swirl-burst). The PRM early-out lives here: the injection is
98
+ * suppressed when the substrate reports reduced-motion (the cursor write-path
99
+ * fires from the pointermove listener, INDEPENDENT of the parked rAF loop).
100
+ */
101
+ injectCursorVelocity(dx: number, dy: number): void;
102
+ /** AW.W8.1 — the live reduced-motion state (the cursor listener early-outs on it). */
103
+ readonly reducedMotion: boolean;
86
104
  }
87
105
  export declare function createAurora(canvas: HTMLCanvasElement, initial: AuroraConfig, options?: AuroraRuntimeOptions): AuroraRuntime;