@mkbabb/glass-ui 3.5.1 → 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 (227) 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-DyKc_26a.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-BTyYn4mr.js → IconTooltip-Cu86JR4e.js} +1 -1
  14. package/dist/{Input-CU9CNKmo.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-jO-zGOHf.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-Cq_AD03t.js → UnderlineTabs-D_c1iYo-.js} +1 -1
  30. package/dist/animated-digit.js +2 -2
  31. package/dist/api/index.d.ts +2 -1
  32. package/dist/api.js +1 -1
  33. package/dist/aurora.js +845 -204
  34. package/dist/{badge-Cl6JZ1B7.js → badge-DHQrc_GQ.js} +13 -9
  35. package/dist/badge.js +1 -1
  36. package/dist/{button-i8Ek5vvg.js → button-CAywcrhO.js} +8 -5
  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 +36 -9
  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 +29 -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 +64 -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/composition.glsl.d.ts +1 -1
  64. package/dist/components/custom/aurora/constants/shaders/flow.glsl.d.ts +1 -1
  65. package/dist/components/custom/aurora/constants/shaders/mediums.glsl.d.ts +2 -2
  66. package/dist/components/custom/aurora/constants/shaders/painterly.wgsl.d.ts +7 -0
  67. package/dist/components/custom/aurora/constants/shaders/wake.wgsl.d.ts +4 -0
  68. package/dist/components/custom/aurora/index.d.ts +5 -3
  69. package/dist/components/custom/constellation/Constellation.vue.d.ts +45 -0
  70. package/dist/components/custom/constellation/constellationField.d.ts +85 -0
  71. package/dist/components/custom/constellation/index.d.ts +3 -0
  72. package/dist/components/custom/dock/GlassDock.vue.d.ts +34 -3
  73. package/dist/components/custom/fourier-field/FourierField.vue.d.ts +38 -0
  74. package/dist/components/custom/fourier-field/index.d.ts +2 -0
  75. package/dist/components/custom/fourier-field/math.d.ts +57 -0
  76. package/dist/components/custom/goo-blob/GooBlob.vue.d.ts +2 -0
  77. package/dist/components/custom/goo-blob/composables/useBlobMood.d.ts +14 -2
  78. package/dist/components/custom/goo-blob/composables/useBlobPointer.d.ts +45 -4
  79. package/dist/components/custom/goo-blob/composables/useMetaballRenderer.d.ts +1 -1
  80. package/dist/components/custom/goo-blob/index.d.ts +1 -1
  81. package/dist/components/custom/goo-blob/shaders/sdf-body.glsl.d.ts +1 -1
  82. package/dist/components/custom/goo-blob/shaders/watercolor-edges.glsl.d.ts +2 -2
  83. package/dist/components/custom/goo-blob/types.d.ts +40 -0
  84. package/dist/components/custom/metric-cell/MetricCell.vue.d.ts +1 -1
  85. package/dist/components/custom/metric-stack/MetricStack.vue.d.ts +1 -1
  86. package/dist/components/ui/_shared/ModalOverlay.vue.d.ts +1 -1
  87. package/dist/components/ui/alert/index.d.ts +1 -1
  88. package/dist/components/ui/card/Card.vue.d.ts +10 -3
  89. package/dist/components/ui/card/CardAction.vue.d.ts +24 -0
  90. package/dist/components/ui/card/index.d.ts +1 -0
  91. package/dist/components/ui/collapsible/CollapsibleTrigger.vue.d.ts +5 -1
  92. package/dist/components/ui/tabs/TabsList.vue.d.ts +13 -3
  93. package/dist/components/ui/toast/Toast.vue.d.ts +5 -5
  94. package/dist/components/ui/toast/use-toast.d.ts +1 -1
  95. package/dist/composables/color/index.d.ts +50 -0
  96. package/dist/composables/glass/canvas2d/index.d.ts +2 -0
  97. package/dist/composables/glass/canvas2d/useCanvas2D.d.ts +48 -0
  98. package/dist/composables/glass/createGPUCanvas.d.ts +40 -0
  99. package/dist/composables/glass/index.d.ts +2 -0
  100. package/dist/composables/glass/webgl/createCanvasLifecycle.d.ts +45 -0
  101. package/dist/composables/glass/webgl/shaders/procedural-color.glsl.d.ts +3 -0
  102. package/dist/composables/glass/webgl/useWebGLCanvas.d.ts +4 -4
  103. package/dist/configurator.js +1 -1
  104. package/dist/confirm-dialog.js +3 -3
  105. package/dist/constellation.d.ts +1 -0
  106. package/dist/constellation.js +182 -0
  107. package/dist/context-menu.js +2 -2
  108. package/dist/controls.js +2 -2
  109. package/dist/dark.js +1 -1
  110. package/dist/data-table.js +1 -1
  111. package/dist/dialog.js +2 -2
  112. package/dist/disco-glyph.js +1 -1
  113. package/dist/dock.js +129 -110
  114. package/dist/{dockContext-spUj_-E5.js → dockContext-DLgrVWsU.js} +1 -1
  115. package/dist/dom.js +5 -5
  116. package/dist/{dropdown-menu-EFjl5iKo.js → dropdown-menu-BWpwutt0.js} +5 -5
  117. package/dist/dropdown-menu.js +1 -1
  118. package/dist/expandable-container.js +2 -2
  119. package/dist/forms.js +10 -7
  120. package/dist/fourier-field.d.ts +1 -0
  121. package/dist/fourier-field.js +166 -0
  122. package/dist/glass-carousel.js +1 -1
  123. package/dist/glass-panel.js +2 -2
  124. package/dist/glass-ui.css +1 -1
  125. package/dist/glass-ui.js +207 -191
  126. package/dist/glyph-face.js +2 -2
  127. package/dist/goo-blob.js +336 -234
  128. package/dist/header-ribbon.js +1 -1
  129. package/dist/hover-card.js +1 -1
  130. package/dist/hover-popover.js +1 -1
  131. package/dist/icon-tooltip.js +1 -1
  132. package/dist/instrument-chassis.js +1 -1
  133. package/dist/instrument-rail.js +1 -1
  134. package/dist/keyboard.js +1 -1
  135. package/dist/{keys-BFoma9vm.js → keys-Dyf_uTs5.js} +1 -1
  136. package/dist/label.js +1 -1
  137. package/dist/labeled-field.js +6 -6
  138. package/dist/metric-badge.js +1 -1
  139. package/dist/metric-stack.js +1 -1
  140. package/dist/{minimize-2-BP27-qBY.js → minimize-2-lcXOuc6V.js} +1 -1
  141. package/dist/motion-core.js +76 -106
  142. package/dist/motion.js +3 -3
  143. package/dist/notification.js +1 -1
  144. package/dist/number-field.js +1 -1
  145. package/dist/paper-backdrop.js +1 -1
  146. package/dist/popover.js +1 -1
  147. package/dist/progress.js +1 -1
  148. package/dist/pulse.js +1 -1
  149. package/dist/reactive.js +2 -2
  150. package/dist/responsive-tabs.js +2 -2
  151. package/dist/scrolling-text.js +1 -1
  152. package/dist/{search-DBG8qaRs.js → search-nbkvr2dC.js} +1 -1
  153. package/dist/search.js +8 -8
  154. package/dist/select.js +3 -3
  155. package/dist/separator.js +1 -1
  156. package/dist/{sheet-CQYYrkr9.js → sheet-Cv1uO-Gq.js} +4 -4
  157. package/dist/sheet.js +1 -1
  158. package/dist/{slider-CgNzRSh6.js → slider-BA9wIs5e.js} +5 -4
  159. package/dist/slider.js +1 -1
  160. package/dist/sortable-list.js +3 -3
  161. package/dist/styles/components.css +1 -1
  162. package/dist/styles/dock.css +185 -1
  163. package/dist/styles/glass-refract.css +60 -0
  164. package/dist/styles/glass-specular-track.css +43 -130
  165. package/dist/styles/glass.css +243 -27
  166. package/dist/styles/index.css +1 -0
  167. package/dist/styles/theme.css +55 -0
  168. package/dist/styles/tokens.css +33 -0
  169. package/dist/styles/typography.css +3 -3
  170. package/dist/styles/utilities.css +17 -13
  171. package/dist/supportsCssTimeline-C5oe0lnD.js +12 -0
  172. package/dist/switch.js +1 -1
  173. package/dist/tabs.js +4 -4
  174. package/dist/timeline.js +2 -2
  175. package/dist/toast.js +1 -1
  176. package/dist/toggle-group.js +1 -1
  177. package/dist/tooltip.js +1 -1
  178. package/dist/typewriter.js +1 -1
  179. package/dist/{useAnimatedNumber-BF6r64lA.js → useAnimatedNumber-C5I3wWd8.js} +1 -1
  180. package/dist/useCanvas2D-C31yfUGY.js +95 -0
  181. package/dist/{useConfiguratorState-DUtC1jxr.js → useConfiguratorState-B24TcgIn.js} +5 -5
  182. package/dist/useScrollProgress-CAH8Ofwt.js +35 -0
  183. package/dist/{useTouchGate-CS5Csc2h.js → useTouchGate-YQRwyUGU.js} +1 -1
  184. package/dist/{vReveal-u2wSG2El.js → vReveal-BE2TsPoR.js} +6 -17
  185. package/dist/watercolor-dot.js +2 -2
  186. package/dist/{x-C4pz9nbD.js → x-Dfsegz9Y.js} +1 -1
  187. package/package.json +49 -1
  188. package/src/styles/dock.css +185 -1
  189. package/src/styles/glass-refract.css +60 -0
  190. package/src/styles/glass-specular-track.css +43 -130
  191. package/src/styles/glass.css +243 -27
  192. package/src/styles/index.css +1 -0
  193. package/src/styles/theme.css +55 -0
  194. package/src/styles/tokens.css +33 -0
  195. package/src/styles/typography.css +3 -3
  196. package/src/styles/utilities.css +17 -13
  197. package/dist/CardFooter-C390imy7.js +0 -129
  198. package/dist/CollapsibleContent-cauTbZEM.js +0 -52
  199. package/dist/TabsIndicator-DA0x9gPr.js +0 -97
  200. package/dist/color-rkK4RMx2.js +0 -33
  201. package/dist/compile-DVgAxagk.js +0 -106
  202. /package/dist/{InstrumentChassis-DaHIZCqy.js → InstrumentChassis-BLJBl1BW.js} +0 -0
  203. /package/dist/{InstrumentRail-B0qqLFN0.js → InstrumentRail-BElFwKyt.js} +0 -0
  204. /package/dist/{ModalOverlay-B_CBtqcE.js → ModalOverlay-D1VrWyoi.js} +0 -0
  205. /package/dist/{PaperBackdrop-D_YZW47j.js → PaperBackdrop-DCGoGatv.js} +0 -0
  206. /package/dist/{SelectGroup-CMdoCjRE.js → SelectGroup-BcaFjvP4.js} +0 -0
  207. /package/dist/{SelectSeparator-CaJnPF3_.js → SelectSeparator-COFMJGng.js} +0 -0
  208. /package/dist/{_plugin-vue_export-helper-C1je1s0u.js → _plugin-vue_export-helper-gLzyemvl.js} +0 -0
  209. /package/dist/{constants-DsCdlK9I.js → constants-CS75AWHG.js} +0 -0
  210. /package/dist/{createContext-DBMGRlx4.js → createContext-CvNyBk4o.js} +0 -0
  211. /package/dist/{createLucideIcon-DuDoe_ra.js → createLucideIcon-B6uNAU9G.js} +0 -0
  212. /package/dist/{menuItemVariants-C2QlXqT3.js → menuItemVariants-B4eFR5Ix.js} +0 -0
  213. /package/dist/{presets-1OhFpaIC.js → presets-BKVyQfbt.js} +0 -0
  214. /package/dist/{prng-Bz_1Tydc.js → prng-wHuHlNHE.js} +0 -0
  215. /package/dist/{useGlassRenderer-Dn3WpfG-.js → useGlassRenderer-HebgSEgN.js} +0 -0
  216. /package/dist/{useGlobalDark-CWiaCoEw.js → useGlobalDark-yhL4Wp-s.js} +0 -0
  217. /package/dist/{useIntersectionPause-DAdVPVp4.js → useIntersectionPause-Cc-H9ees.js} +0 -0
  218. /package/dist/{useInterval-CHVYFpXV.js → useInterval-D3USn0yc.js} +0 -0
  219. /package/dist/{useKeyboardShortcuts-BQfnAHHW.js → useKeyboardShortcuts-Be3w_Rwk.js} +0 -0
  220. /package/dist/{useResizeObserver-DX-STszm.js → useResizeObserver-CSyxGxIX.js} +0 -0
  221. /package/dist/{useSortable-DnyGXKKY.js → useSortable-C8ReQ50P.js} +0 -0
  222. /package/dist/{useSpringMount-CnizvZGm.js → useSpringMount-LRZqJTaF.js} +0 -0
  223. /package/dist/{useTextHighlight-Dmtofpk2.js → useTextHighlight-aMPdEpkq.js} +0 -0
  224. /package/dist/{useTimer-DGgoxTXL.js → useTimer-DEJonOZa.js} +0 -0
  225. /package/dist/{useUserInvalidAria-DmvZ_6Dx.js → useUserInvalidAria-CQKjEfwP.js} +0 -0
  226. /package/dist/{useViewTransition-CJnqg6wl.js → useViewTransition-DaN5Zrox.js} +0 -0
  227. /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",
@@ -54,16 +57,16 @@ var d = /* @__PURE__ */ r({
54
57
  secondary: "bg-secondary text-secondary-foreground hover:bg-secondary/80 active:bg-secondary/70 aria-pressed:bg-secondary/60",
55
58
  accent: "bg-accent text-accent-foreground border border-border/40 hover:bg-accent/80 active:bg-accent/70 aria-pressed:bg-accent/60",
56
59
  ghost: "bg-transparent text-foreground/70 hover:bg-foreground/8 hover:text-foreground active:bg-foreground/12 aria-pressed:bg-foreground/10 aria-pressed:text-foreground",
57
- glass: "glass-wash glass-specular-track text-foreground hover:bg-[var(--glass-bg-resting)] hover:border-[var(--glass-border-resting)] active:bg-[var(--glass-bg-floating)] active:border-[var(--glass-border-floating)] aria-pressed:bg-[color-mix(in_srgb,var(--foreground)_10%,var(--glass-bg-resting))]",
58
- "glass-wash": "glass-wash glass-specular-track text-foreground/70 hover:bg-foreground/[0.04] hover:border-[var(--surface-tint-22)] hover:text-foreground active:bg-foreground/[0.08] aria-pressed:bg-foreground/[0.1] aria-pressed:text-foreground",
60
+ glass: "glass-wash text-foreground hover:bg-[var(--glass-bg-resting)] hover:border-[var(--glass-border-resting)] active:bg-[var(--glass-bg-floating)] active:border-[var(--glass-border-floating)] aria-pressed:bg-[color-mix(in_srgb,var(--foreground)_10%,var(--glass-bg-resting))]",
61
+ "glass-wash": "glass-wash text-foreground/70 hover:bg-foreground/[0.04] hover:border-[var(--surface-tint-22)] hover:text-foreground active:bg-foreground/[0.08] aria-pressed:bg-foreground/[0.1] aria-pressed:text-foreground",
59
62
  ai: "bg-amber-500/15 text-amber-700 hover:bg-amber-500/25 active:bg-amber-500/35 dark:text-amber-400 aria-pressed:bg-amber-500/30",
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-i8Ek5vvg.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-i8Ek5vvg.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-rkK4RMx2.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,6 +1,8 @@
1
- import { type OklchStop } from "../../../../composables/color";
1
+ import { type AuroraConfig } from "../constants/presets";
2
+ import { type ColorHarmony, type OklchStop } from "../../../../composables/color";
2
3
  export { cssToOklch, oklchStopToHex, oklchToLinear, } from "../../../../composables/color";
3
4
  export type { OklchStop } from "../../../../composables/color";
5
+ export type { ColorHarmony } from "../../../../composables/color";
4
6
  /**
5
7
  * Pack up to `maxStops` OklchStops into linear-sRGB triples. When `out` is
6
8
  * provided the buffer is filled in place (no allocation) — the runtime owns a
@@ -25,15 +27,19 @@ export declare function flattenPalette(stops: OklchStop[], maxStops?: number, ou
25
27
  export declare function paletteToCssGradient(stops: OklchStop[]): string;
26
28
  export declare function hexToOklchStop(hex: string): OklchStop;
27
29
  /**
28
- * Harmony schemes for {@link deriveAurora}. Each maps the seed hue onto the
29
- * derived stops differently:
30
- * - `analogous` — the ramp walks the seed hue ± a small spread (neighbouring
31
- * hues; the painterly default).
32
- * - `complementary` — stops split between the seed hue and its opposite (+180°).
33
- * - `triad` — stops distributed across the seed hue and its two 120° partners.
34
- * - `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.
35
34
  */
36
- export type AuroraHarmony = "analogous" | "complementary" | "triad" | "monochrome";
35
+ export type AuroraHarmony = ColorHarmony;
36
+ /**
37
+ * Eased L/C journey shapes for the derived ramp. `bell` (the W5 default for chroma)
38
+ * peaks the chroma in the mids and desaturates the extremes — the painterly
39
+ * "saturated body, calm edges" curve. `linear` is the prior monotone falloff
40
+ * (the named pre-W5 branch — NOT a back-compat alias, a first-class choice).
41
+ */
42
+ export type DeriveEasing = "linear" | "sine" | "bell";
37
43
  export interface DeriveAuroraOptions {
38
44
  /** Number of stops to produce. Default 4; clamped to [2, MAX_STOPS]. */
39
45
  stopCount?: number;
@@ -45,6 +51,16 @@ export interface DeriveAuroraOptions {
45
51
  chromaFalloff?: number;
46
52
  /** Hue walk in degrees for analogous; ignored by monochrome. Default ~28. */
47
53
  hueSpread?: number;
54
+ /** L-ramp easing across the band. Default `linear` (monotone ascent). */
55
+ lightnessEasing?: DeriveEasing;
56
+ /** C-ramp easing. Default `bell` (peak in the mids — the W5 painterly default). */
57
+ chromaEasing?: DeriveEasing;
58
+ /**
59
+ * Warm-light / cool-shadow temperature coupling (0..1). A hue delta that warms
60
+ * the lights and cools the shadows — the single most-cited painting rule, the
61
+ * fold that makes the oil/oil-pastel mediums read as mixed paint. Default 0.
62
+ */
63
+ temperatureShift?: number;
48
64
  }
49
65
  /**
50
66
  * Seed ONE color into a harmonious, gamut-safe N-stop aurora palette.
@@ -63,3 +79,14 @@ export interface DeriveAuroraOptions {
63
79
  * @param options ramp shape — stop count, harmony, L/C/h spreads.
64
80
  */
65
81
  export declare function deriveAurora(seed: string | OklchStop, options?: DeriveAuroraOptions): OklchStop[];
82
+ /** Atmospheric mood words for {@link deriveScene}. */
83
+ export type AuroraMood = "atmospheric" | "painterly" | "vivid" | "muted";
84
+ /**
85
+ * Seed ONE color + a mood word into a WHOLE `AuroraConfig` — palette (via
86
+ * `deriveAurora`), nuclei layout (a rule-of-thirds/golden prior), medium, and the
87
+ * motion/output knobs the mood implies. A SUPERSET front door over `deriveAurora`:
88
+ * a consumer hands a seed + `"painterly"` and gets a coherent backdrop, not just a
89
+ * palette. The base is the wispy-sky `DEFAULT_AURORA_CONFIG` (every field the mood
90
+ * does not touch stays the library default).
91
+ */
92
+ export declare function deriveScene(seed: string | OklchStop, mood?: AuroraMood): AuroraConfig;
@@ -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", "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;