aeon-ui-engine 1.0.1 → 1.0.3

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/CHANGELOG.md +51 -0
  2. package/CONSUMER.md +86 -0
  3. package/INTEGRATION.md +2 -0
  4. package/README.md +15 -4
  5. package/package.json +17 -1
  6. package/packages/core/dist/index.d.ts +257 -0
  7. package/packages/core/dist/index.js +378 -0
  8. package/packages/core/node_modules/.bin/esbuild +21 -0
  9. package/packages/core/node_modules/.bin/jiti +21 -0
  10. package/packages/core/node_modules/.bin/tsc +21 -0
  11. package/packages/core/node_modules/.bin/tsserver +21 -0
  12. package/packages/core/node_modules/.bin/tsup +21 -0
  13. package/packages/core/node_modules/.bin/tsup-node +21 -0
  14. package/packages/core/node_modules/.bin/tsx +21 -0
  15. package/packages/core/node_modules/.bin/vite +21 -0
  16. package/packages/core/node_modules/.bin/vitest +21 -0
  17. package/packages/core/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -0
  18. package/packages/geometry/dist/index.d.ts +50 -0
  19. package/packages/geometry/dist/index.js +88 -0
  20. package/packages/geometry/node_modules/.bin/esbuild +21 -0
  21. package/packages/geometry/node_modules/.bin/jiti +21 -0
  22. package/packages/geometry/node_modules/.bin/tsc +21 -0
  23. package/packages/geometry/node_modules/.bin/tsserver +21 -0
  24. package/packages/geometry/node_modules/.bin/tsup +21 -0
  25. package/packages/geometry/node_modules/.bin/tsup-node +21 -0
  26. package/packages/geometry/node_modules/.bin/tsx +21 -0
  27. package/packages/panda/src/recipes/button.ts +4 -4
  28. package/packages/panda/src/recipes/combobox.ts +1 -1
  29. package/packages/panda/src/recipes/select.ts +1 -1
  30. package/packages/panda/src/theme/tokens.ts +5 -0
  31. package/packages/panda/styled-system/styles.css +10 -6
  32. package/packages/panda/styled-system/tokens/index.mjs +32 -0
  33. package/packages/panda/styled-system/tokens/tokens.d.ts +2 -2
  34. package/packages/primitives/dist/chunk-5S4DIRL4.js +42 -0
  35. package/packages/primitives/dist/chunk-H4KOEPYC.js +52 -0
  36. package/packages/primitives/dist/chunk-HONROWUG.js +41 -0
  37. package/packages/primitives/dist/chunk-J6JHKMVM.js +90 -0
  38. package/packages/primitives/dist/chunk-JBAG5E6W.js +46 -0
  39. package/packages/primitives/dist/chunk-LVNCD5F2.js +43 -0
  40. package/packages/primitives/dist/chunk-PB3LFHXU.js +72 -0
  41. package/packages/primitives/dist/chunk-SZV6KGXN.js +49 -0
  42. package/packages/primitives/dist/chunk-WVICCOQH.js +56 -0
  43. package/packages/primitives/dist/chunk-ZMGRX64G.js +74 -0
  44. package/packages/primitives/dist/index.d.ts +11 -0
  45. package/packages/primitives/dist/index.js +60 -0
  46. package/packages/primitives/dist/machines/accordion.d.ts +34 -0
  47. package/packages/primitives/dist/machines/accordion.js +6 -0
  48. package/packages/primitives/dist/machines/async.d.ts +111 -0
  49. package/packages/primitives/dist/machines/async.js +12 -0
  50. package/packages/primitives/dist/machines/button.d.ts +45 -0
  51. package/packages/primitives/dist/machines/button.js +8 -0
  52. package/packages/primitives/dist/machines/dialog.d.ts +57 -0
  53. package/packages/primitives/dist/machines/dialog.js +6 -0
  54. package/packages/primitives/dist/machines/field.d.ts +72 -0
  55. package/packages/primitives/dist/machines/field.js +12 -0
  56. package/packages/primitives/dist/machines/popover.d.ts +54 -0
  57. package/packages/primitives/dist/machines/popover.js +6 -0
  58. package/packages/primitives/dist/machines/slider.d.ts +71 -0
  59. package/packages/primitives/dist/machines/slider.js +10 -0
  60. package/packages/primitives/dist/machines/tabs.d.ts +39 -0
  61. package/packages/primitives/dist/machines/tabs.js +6 -0
  62. package/packages/primitives/dist/machines/toast.d.ts +31 -0
  63. package/packages/primitives/dist/machines/toast.js +6 -0
  64. package/packages/primitives/dist/machines/toggle.d.ts +54 -0
  65. package/packages/primitives/dist/machines/toggle.js +6 -0
  66. package/packages/primitives/node_modules/.bin/jiti +21 -0
  67. package/packages/primitives/node_modules/.bin/tsc +21 -0
  68. package/packages/primitives/node_modules/.bin/tsserver +21 -0
  69. package/packages/primitives/node_modules/.bin/tsup +21 -0
  70. package/packages/primitives/node_modules/.bin/tsup-node +21 -0
  71. package/packages/primitives/node_modules/.bin/tsx +21 -0
  72. package/packages/primitives/node_modules/.bin/vitest +21 -0
  73. package/packages/primitives/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -0
  74. package/packages/react/dist/index.d.ts +564 -0
  75. package/packages/react/dist/index.js +3461 -0
  76. package/packages/react/node_modules/.bin/jiti +21 -0
  77. package/packages/react/node_modules/.bin/tsc +21 -0
  78. package/packages/react/node_modules/.bin/tsserver +21 -0
  79. package/packages/react/node_modules/.bin/tsup +21 -0
  80. package/packages/react/node_modules/.bin/tsup-node +21 -0
  81. package/packages/react/node_modules/.bin/tsx +21 -0
  82. package/packages/react/node_modules/.bin/vitest +21 -0
  83. package/packages/react/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -0
  84. package/packages/react-scene/dist/index.d.ts +121 -0
  85. package/packages/react-scene/dist/index.js +430 -0
  86. package/packages/react-scene/node_modules/.bin/jiti +21 -0
  87. package/packages/react-scene/node_modules/.bin/tsc +21 -0
  88. package/packages/react-scene/node_modules/.bin/tsserver +21 -0
  89. package/packages/react-scene/node_modules/.bin/tsup +21 -0
  90. package/packages/react-scene/node_modules/.bin/tsup-node +21 -0
  91. package/packages/react-scene/node_modules/.bin/tsx +21 -0
  92. package/packages/scene/dist/index.d.ts +46 -0
  93. package/packages/scene/dist/index.js +54 -0
  94. package/packages/scene/node_modules/.bin/jiti +21 -0
  95. package/packages/scene/node_modules/.bin/tsc +21 -0
  96. package/packages/scene/node_modules/.bin/tsserver +21 -0
  97. package/packages/scene/node_modules/.bin/tsup +21 -0
  98. package/packages/scene/node_modules/.bin/tsup-node +21 -0
  99. package/packages/scene/node_modules/.bin/tsx +21 -0
  100. package/packages/signal/dist/index.d.ts +54 -0
  101. package/packages/signal/dist/index.js +169 -0
  102. package/packages/signal/node_modules/.bin/jiti +21 -0
  103. package/packages/signal/node_modules/.bin/tsc +21 -0
  104. package/packages/signal/node_modules/.bin/tsserver +21 -0
  105. package/packages/signal/node_modules/.bin/tsup +21 -0
  106. package/packages/signal/node_modules/.bin/tsup-node +21 -0
  107. package/packages/signal/node_modules/.bin/tsx +21 -0
  108. package/packages/site/dist/index.d.ts +31 -0
  109. package/packages/site/dist/index.js +62 -0
  110. package/packages/site/node_modules/.bin/jiti +21 -0
  111. package/packages/site/node_modules/.bin/tsc +21 -0
  112. package/packages/site/node_modules/.bin/tsserver +21 -0
  113. package/packages/site/node_modules/.bin/tsup +21 -0
  114. package/packages/site/node_modules/.bin/tsup-node +21 -0
  115. package/packages/site/node_modules/.bin/tsx +21 -0
  116. package/packages/solid/dist/index.d.ts +30 -0
  117. package/packages/solid/dist/index.js +174 -0
  118. package/packages/solid/node_modules/.bin/jiti +21 -0
  119. package/packages/solid/node_modules/.bin/tsc +21 -0
  120. package/packages/solid/node_modules/.bin/tsserver +21 -0
  121. package/packages/solid/node_modules/.bin/tsup +21 -0
  122. package/packages/solid/node_modules/.bin/tsup-node +21 -0
  123. package/packages/solid/node_modules/.bin/tsx +21 -0
  124. package/packages/surface/dist/index.d.ts +8 -0
  125. package/packages/surface/dist/index.js +14 -0
  126. package/packages/surface/node_modules/.bin/jiti +21 -0
  127. package/packages/surface/node_modules/.bin/tsc +21 -0
  128. package/packages/surface/node_modules/.bin/tsserver +21 -0
  129. package/packages/surface/node_modules/.bin/tsup +21 -0
  130. package/packages/surface/node_modules/.bin/tsup-node +21 -0
  131. package/packages/surface/node_modules/.bin/tsx +21 -0
  132. package/packages/svelte/dist/index.d.ts +12 -0
  133. package/packages/svelte/dist/index.js +15 -0
  134. package/packages/svelte/node_modules/.bin/acorn +21 -0
  135. package/packages/svelte/node_modules/.bin/jiti +21 -0
  136. package/packages/svelte/node_modules/.bin/svelte-check +21 -0
  137. package/packages/svelte/node_modules/.bin/tsc +21 -0
  138. package/packages/svelte/node_modules/.bin/tsserver +21 -0
  139. package/packages/svelte/node_modules/.bin/tsup +21 -0
  140. package/packages/svelte/node_modules/.bin/tsup-node +21 -0
  141. package/packages/svelte/node_modules/.bin/tsx +21 -0
  142. package/packages/svelte/node_modules/.bin/vite +21 -0
  143. package/packages/ui/dist/index.d.ts +200 -0
  144. package/packages/ui/dist/index.js +429 -0
  145. package/packages/ui/node_modules/.bin/jiti +21 -0
  146. package/packages/ui/node_modules/.bin/tsc +21 -0
  147. package/packages/ui/node_modules/.bin/tsserver +21 -0
  148. package/packages/ui/node_modules/.bin/tsup +21 -0
  149. package/packages/ui/node_modules/.bin/tsup-node +21 -0
  150. package/packages/ui/node_modules/.bin/tsx +21 -0
  151. package/packages/ui/src/select.tsx +3 -4
  152. package/packages/vue/dist/index.d.ts +71 -0
  153. package/packages/vue/dist/index.js +193 -0
  154. package/packages/vue/node_modules/.bin/jiti +21 -0
  155. package/packages/vue/node_modules/.bin/tsc +21 -0
  156. package/packages/vue/node_modules/.bin/tsserver +21 -0
  157. package/packages/vue/node_modules/.bin/tsup +21 -0
  158. package/packages/vue/node_modules/.bin/tsup-node +21 -0
  159. package/packages/vue/node_modules/.bin/tsx +21 -0
  160. package/scripts/vite-aliases.mjs +125 -0
  161. package/.changeset/README.md +0 -23
  162. package/.changeset/combobox-and-changesets.md +0 -9
  163. package/.changeset/config.json +0 -30
  164. package/.changeset/framework-adapters.md +0 -12
  165. package/.changeset/scene-3d.md +0 -6
  166. package/.changeset/scene-plane.md +0 -8
  167. package/.changeset/site-og.md +0 -5
  168. package/.cursor/rules/aeon-ui.mdc +0 -22
  169. package/ACCESSIBILITY.md +0 -32
  170. package/AGENTS.md +0 -226
  171. package/COMPONENTS.md +0 -41
  172. package/FRAMEWORKS.md +0 -57
  173. package/PHILOSOPHY.md +0 -71
  174. package/PUBLISHING.md +0 -85
  175. package/SCENE.md +0 -113
  176. package/STATES.md +0 -243
  177. package/apps/demo/index.html +0 -31
  178. package/apps/demo/og.config.mjs +0 -20
  179. package/apps/demo/package.json +0 -41
  180. package/apps/demo/public/favicon.svg +0 -16
  181. package/apps/demo/public/og-aeon-ui-engine.png +0 -0
  182. package/apps/demo/public/og.svg +0 -35
  183. package/apps/demo/scripts/generate-og-png.mjs +0 -62
  184. package/apps/demo/src/App.tsx +0 -31
  185. package/apps/demo/src/aeonDiagrams.ts +0 -42
  186. package/apps/demo/src/app.css +0 -16
  187. package/apps/demo/src/components/ActionCluster.tsx +0 -20
  188. package/apps/demo/src/components/AsyncMachineDemo.tsx +0 -97
  189. package/apps/demo/src/components/ButtonLifecycleDemo.tsx +0 -63
  190. package/apps/demo/src/components/CodeExample.tsx +0 -7
  191. package/apps/demo/src/components/ComboboxDemo.tsx +0 -30
  192. package/apps/demo/src/components/DiagramsSection.tsx +0 -37
  193. package/apps/demo/src/components/FieldStateDemo.tsx +0 -51
  194. package/apps/demo/src/components/GridMesh.tsx +0 -8
  195. package/apps/demo/src/components/HeroInstall.tsx +0 -13
  196. package/apps/demo/src/components/LandingFaq.tsx +0 -29
  197. package/apps/demo/src/components/LandingFooter.tsx +0 -30
  198. package/apps/demo/src/components/LandingHeader.tsx +0 -62
  199. package/apps/demo/src/components/LandingHero.tsx +0 -55
  200. package/apps/demo/src/components/LayersSection.tsx +0 -47
  201. package/apps/demo/src/components/MermaidDiagram.tsx +0 -86
  202. package/apps/demo/src/components/PhilosophySection.tsx +0 -31
  203. package/apps/demo/src/components/PlaygroundBlock.tsx +0 -18
  204. package/apps/demo/src/components/PlaygroundControlsDemo.tsx +0 -63
  205. package/apps/demo/src/components/PlaygroundSection.tsx +0 -120
  206. package/apps/demo/src/components/ScrollRegionDemo.tsx +0 -74
  207. package/apps/demo/src/components/ThemeSwitcher.tsx +0 -79
  208. package/apps/demo/src/demo-layout.css +0 -293
  209. package/apps/demo/src/landing.css +0 -1151
  210. package/apps/demo/src/main.tsx +0 -14
  211. package/apps/demo/src/nav.ts +0 -9
  212. package/apps/demo/src/site.ts +0 -218
  213. package/apps/demo/tsconfig.json +0 -17
  214. package/apps/demo/vite-plugins/og-meta.ts +0 -30
  215. package/apps/demo/vite.config.ts +0 -69
  216. package/docs/API_PATTERNS.md +0 -234
  217. package/docs/ARCHITECTURE.md +0 -125
  218. package/docs/COMPONENT_CHECKLIST.md +0 -103
  219. package/docs/FILE_MAP.md +0 -122
  220. package/docs/GLOSSARY.md +0 -125
  221. package/docs/INDEX.md +0 -53
  222. package/docs/LAYOUT_COORDINATES.md +0 -178
  223. package/docs/MACHINES.md +0 -171
  224. package/docs/MIGRATION_FROM_ARK.md +0 -295
  225. package/docs/VITE_CONSUMER.md +0 -114
  226. package/pnpm-workspace.yaml +0 -3
  227. package/vercel.json +0 -12
@@ -0,0 +1,378 @@
1
+ // src/philosophy.ts
2
+ var AEON_PRINCIPLE = "State is defined first. UI represents the totality of that definition.";
3
+ var UI_IS_FUNCTION_OF_STATE = "UI = f(state)";
4
+
5
+ // src/anatomy.ts
6
+ function anatomy(scope, parts) {
7
+ return Object.fromEntries(parts.map((p) => [p, p]));
8
+ }
9
+ var buttonAnatomy = anatomy("button", [
10
+ "root",
11
+ "group",
12
+ "label",
13
+ "icon"
14
+ ]);
15
+ var switchAnatomy = anatomy("switch", [
16
+ "root",
17
+ "control",
18
+ "thumb",
19
+ "label",
20
+ "hiddenInput"
21
+ ]);
22
+ var checkboxAnatomy = anatomy("checkbox", [
23
+ "root",
24
+ "control",
25
+ "indicator",
26
+ "label",
27
+ "hiddenInput"
28
+ ]);
29
+ var dialogAnatomy = anatomy("dialog", [
30
+ "root",
31
+ "trigger",
32
+ "portal",
33
+ "backdrop",
34
+ "positioner",
35
+ "content",
36
+ "title",
37
+ "description",
38
+ "closeTrigger"
39
+ ]);
40
+ var tabsAnatomy = anatomy("tabs", [
41
+ "root",
42
+ "list",
43
+ "trigger",
44
+ "content",
45
+ "indicator"
46
+ ]);
47
+ var accordionAnatomy = anatomy("accordion", [
48
+ "root",
49
+ "item",
50
+ "itemTrigger",
51
+ "itemContent",
52
+ "itemIndicator"
53
+ ]);
54
+ var asyncAnatomy = anatomy("async", [
55
+ "root",
56
+ "track",
57
+ "segment",
58
+ "readout",
59
+ "readoutRail",
60
+ "readoutBody",
61
+ "actions"
62
+ ]);
63
+ var fieldAnatomy = anatomy("field", [
64
+ "root",
65
+ "label",
66
+ "control",
67
+ "textarea",
68
+ "message",
69
+ "hint"
70
+ ]);
71
+ var scrollAnatomy = anatomy("scroll", ["root", "viewport", "content"]);
72
+ var playSurfaceAnatomy = anatomy("play", ["mat", "table", "dice", "bank"]);
73
+ var selectAnatomy = anatomy("select", [
74
+ "root",
75
+ "trigger",
76
+ "value",
77
+ "icon",
78
+ "positioner",
79
+ "content",
80
+ "item"
81
+ ]);
82
+ var comboboxAnatomy = anatomy("combobox", [
83
+ "root",
84
+ "input",
85
+ "icon",
86
+ "content",
87
+ "item",
88
+ "empty"
89
+ ]);
90
+ var popoverAnatomy = anatomy("popover", [
91
+ "root",
92
+ "trigger",
93
+ "positioner",
94
+ "content",
95
+ "arrow",
96
+ "closeTrigger"
97
+ ]);
98
+ var menuAnatomy = anatomy("menu", [
99
+ "root",
100
+ "trigger",
101
+ "positioner",
102
+ "content",
103
+ "item",
104
+ "separator"
105
+ ]);
106
+ var tooltipAnatomy = anatomy("tooltip", [
107
+ "root",
108
+ "trigger",
109
+ "positioner",
110
+ "content",
111
+ "arrow"
112
+ ]);
113
+ var toastAnatomy = anatomy("toast", [
114
+ "viewport",
115
+ "root",
116
+ "title",
117
+ "description",
118
+ "closeTrigger"
119
+ ]);
120
+ var avatarAnatomy = anatomy("avatar", ["root", "image", "fallback"]);
121
+ var separatorAnatomy = anatomy("separator", ["root"]);
122
+ var progressAnatomy = anatomy("progress", ["root", "track", "range", "label"]);
123
+ var radioGroupAnatomy = anatomy("radioGroup", [
124
+ "root",
125
+ "item",
126
+ "itemControl",
127
+ "itemIndicator",
128
+ "itemLabel"
129
+ ]);
130
+ var sliderAnatomy = anatomy("slider", [
131
+ "root",
132
+ "track",
133
+ "range",
134
+ "thumb",
135
+ "valueText"
136
+ ]);
137
+ var pinInputAnatomy = anatomy("pinInput", ["root", "input"]);
138
+
139
+ // src/attrs.ts
140
+ function stateFields(options) {
141
+ const states = options?.state ? Array.isArray(options.state) ? options.state.join(" ") : options.state : void 0;
142
+ return {
143
+ ...states ? { "data-aeon-state": states } : {},
144
+ ...options?.disabled ? { "data-disabled": "" } : {},
145
+ ...options?.focus ? { "data-focus": "" } : {},
146
+ ...options?.highlighted ? { "data-highlighted": "" } : {}
147
+ };
148
+ }
149
+ function scopeAttrs(scope, part = "root", options) {
150
+ return {
151
+ "data-aeon-scope": scope,
152
+ "data-aeon-part": part,
153
+ ...stateFields(options)
154
+ };
155
+ }
156
+ function partOnlyAttrs(part, options) {
157
+ return {
158
+ "data-aeon-part": part,
159
+ ...stateFields(options)
160
+ };
161
+ }
162
+ function partAttrs(scope, part, options) {
163
+ return scopeAttrs(scope, part, options);
164
+ }
165
+
166
+ // src/machine.ts
167
+ import { setup } from "xstate";
168
+ function stateToAttr(value) {
169
+ if (value == null || typeof value === "string") return String(value ?? "");
170
+ return Object.entries(value).map(([k, v]) => `${k}:${stateToAttr(v)}`).join(" ");
171
+ }
172
+
173
+ // src/scroll.ts
174
+ var EPS = 1;
175
+ function canScrollY(el) {
176
+ return el.scrollHeight > el.clientHeight + EPS;
177
+ }
178
+ function canScrollX(el) {
179
+ return el.scrollWidth > el.clientWidth + EPS;
180
+ }
181
+ function getScrollSnapshot(el) {
182
+ const scrollY = canScrollY(el);
183
+ const scrollX = canScrollX(el);
184
+ let overflow = "none";
185
+ if (scrollY && scrollX) overflow = "both";
186
+ else if (scrollY) overflow = "y";
187
+ else if (scrollX) overflow = "x";
188
+ const atStartY = !scrollY || el.scrollTop <= EPS;
189
+ const atEndY = !scrollY || el.scrollTop + el.clientHeight >= el.scrollHeight - EPS;
190
+ const betweenY = scrollY && !atStartY && !atEndY;
191
+ const atStartX = !scrollX || el.scrollLeft <= EPS;
192
+ const atEndX = !scrollX || el.scrollLeft + el.clientWidth >= el.scrollWidth - EPS;
193
+ const betweenX = scrollX && !atStartX && !atEndX;
194
+ const parts = [];
195
+ if (overflow === "none") parts.push("idle");
196
+ else parts.push(`overflow-${overflow}`);
197
+ if (scrollY) {
198
+ if (atStartY && atEndY) parts.push("at-start-y", "at-end-y");
199
+ else if (atStartY) parts.push("at-start-y");
200
+ else if (atEndY) parts.push("at-end-y");
201
+ else parts.push("between-y");
202
+ }
203
+ if (scrollX) {
204
+ if (atStartX && atEndX) parts.push("at-start-x", "at-end-x");
205
+ else if (atStartX) parts.push("at-start-x");
206
+ else if (atEndX) parts.push("at-end-x");
207
+ else parts.push("between-x");
208
+ }
209
+ return {
210
+ overflow,
211
+ stateAttr: parts.join(" "),
212
+ atStartY,
213
+ atEndY,
214
+ betweenY,
215
+ atStartX,
216
+ atEndX,
217
+ betweenX
218
+ };
219
+ }
220
+
221
+ // src/layout.ts
222
+ var NORM_PLANE = {
223
+ bottomLeft: "bottom-left",
224
+ topLeft: "top-left"
225
+ };
226
+ var DEFAULT_COMPACT_MQ = "(max-width: 39.99rem)";
227
+ function clampNorm(point, bounds) {
228
+ return {
229
+ x: Math.min(bounds.xMax, Math.max(bounds.xMin, point.x)),
230
+ y: Math.min(bounds.yMax, Math.max(bounds.yMin, point.y))
231
+ };
232
+ }
233
+ function normFromClient(rect, clientX, clientY, options) {
234
+ const origin = options?.origin ?? NORM_PLANE.bottomLeft;
235
+ const w = rect.width || 1;
236
+ const h = rect.height || 1;
237
+ const x = (clientX - rect.left) / w * 100;
238
+ const yFromTop = (clientY - rect.top) / h;
239
+ const y = origin === NORM_PLANE.bottomLeft ? (1 - yFromTop) * 100 : yFromTop * 100;
240
+ const raw = { x, y };
241
+ return options?.bounds ? clampNorm(raw, options.bounds) : raw;
242
+ }
243
+ function clientFromNorm(rect, point, options) {
244
+ const origin = options?.origin ?? NORM_PLANE.bottomLeft;
245
+ const w = rect.width || 1;
246
+ const h = rect.height || 1;
247
+ const clientX = rect.left + point.x / 100 * w;
248
+ const yFromTop = origin === NORM_PLANE.bottomLeft ? 1 - point.y / 100 : point.y / 100;
249
+ const clientY = rect.top + yFromTop * h;
250
+ return { clientX, clientY };
251
+ }
252
+ function measureElement(el) {
253
+ if (!el || !("getBoundingClientRect" in el)) return null;
254
+ const rect = el.getBoundingClientRect();
255
+ return rect.width > 0 && rect.height > 0 ? rect : null;
256
+ }
257
+ function resolveRegionRect(primary, fallback) {
258
+ if (primary && primary.width > 0 && primary.height > 0) return primary;
259
+ if (fallback && fallback.width > 0 && fallback.height > 0) return fallback;
260
+ return null;
261
+ }
262
+ function matchLayoutMode(spec, mq = getCompactMq(spec)) {
263
+ return mq.matches ? "compact" : "wide";
264
+ }
265
+ function getCompactMq(spec) {
266
+ const query = spec.compactMq ?? DEFAULT_COMPACT_MQ;
267
+ if (typeof window === "undefined" || !window.matchMedia) {
268
+ return { matches: false };
269
+ }
270
+ return window.matchMedia(query);
271
+ }
272
+ function layoutCompositionForMode(spec, mode) {
273
+ return spec.modes[mode];
274
+ }
275
+ function regionBoundsForMode(spec, mode, regionId) {
276
+ return spec.modes[mode].bounds?.[regionId];
277
+ }
278
+ function layoutModeAttrs(mode, composition) {
279
+ return {
280
+ "data-aeon-layout-mode": mode,
281
+ "data-aeon-layout-composition": composition
282
+ };
283
+ }
284
+ function insetNormCluster(point, bounds, inset = {}) {
285
+ const padX = inset.x ?? 0;
286
+ const padY = inset.y ?? 0;
287
+ const halfX = (bounds.xMax - bounds.xMin) / 2;
288
+ const halfY = (bounds.yMax - bounds.yMin) / 2;
289
+ const capX = Math.min(padX, halfX - 0.5);
290
+ const capY = Math.min(padY, halfY - 0.5);
291
+ return {
292
+ x: Math.min(bounds.xMax - capX, Math.max(bounds.xMin + capX, point.x)),
293
+ y: Math.min(bounds.yMax - capY, Math.max(bounds.yMin + capY, point.y))
294
+ };
295
+ }
296
+
297
+ // src/theme.ts
298
+ var AEON_THEME_TRANSITION_CLASS = "aeon-theme-transition";
299
+ function isAeonColorMode(value) {
300
+ return value === "light" || value === "dark";
301
+ }
302
+ function resolveAeonColorMode(theme, systemPrefersDark = false) {
303
+ if (theme === "dark") return "dark";
304
+ if (theme === "light") return "light";
305
+ return systemPrefersDark ? "dark" : "light";
306
+ }
307
+ function syncAeonColorMode(root, mode, options) {
308
+ const themeId = options?.themeId ?? root.dataset.aeonTheme ?? "default";
309
+ root.dataset.aeonTheme = themeId;
310
+ root.dataset.aeonMode = mode;
311
+ root.style.colorScheme = mode;
312
+ if (options?.enableTransitionClass !== false) {
313
+ root.classList.add(AEON_THEME_TRANSITION_CLASS);
314
+ }
315
+ }
316
+ function runAeonThemeTransition(apply) {
317
+ if (typeof document === "undefined") {
318
+ apply();
319
+ return;
320
+ }
321
+ const start = document.startViewTransition;
322
+ if (typeof start === "function") {
323
+ start.call(document, apply);
324
+ return;
325
+ }
326
+ apply();
327
+ }
328
+ export {
329
+ AEON_PRINCIPLE,
330
+ AEON_THEME_TRANSITION_CLASS,
331
+ DEFAULT_COMPACT_MQ,
332
+ NORM_PLANE,
333
+ UI_IS_FUNCTION_OF_STATE,
334
+ accordionAnatomy,
335
+ anatomy,
336
+ asyncAnatomy,
337
+ avatarAnatomy,
338
+ buttonAnatomy,
339
+ checkboxAnatomy,
340
+ clampNorm,
341
+ clientFromNorm,
342
+ comboboxAnatomy,
343
+ setup as createAeonMachine,
344
+ dialogAnatomy,
345
+ fieldAnatomy,
346
+ getCompactMq,
347
+ getScrollSnapshot,
348
+ insetNormCluster,
349
+ isAeonColorMode,
350
+ layoutCompositionForMode,
351
+ layoutModeAttrs,
352
+ matchLayoutMode,
353
+ measureElement,
354
+ menuAnatomy,
355
+ normFromClient,
356
+ partAttrs,
357
+ partOnlyAttrs,
358
+ pinInputAnatomy,
359
+ playSurfaceAnatomy,
360
+ popoverAnatomy,
361
+ progressAnatomy,
362
+ radioGroupAnatomy,
363
+ regionBoundsForMode,
364
+ resolveAeonColorMode,
365
+ resolveRegionRect,
366
+ runAeonThemeTransition,
367
+ scopeAttrs,
368
+ scrollAnatomy,
369
+ selectAnatomy,
370
+ separatorAnatomy,
371
+ sliderAnatomy,
372
+ stateToAttr,
373
+ switchAnatomy,
374
+ syncAeonColorMode,
375
+ tabsAnatomy,
376
+ toastAnatomy,
377
+ tooltipAnatomy
378
+ };
@@ -0,0 +1,21 @@
1
+ #!/bin/sh
2
+ basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
3
+
4
+ case `uname` in
5
+ *CYGWIN*|*MINGW*|*MSYS*)
6
+ if command -v cygpath > /dev/null 2>&1; then
7
+ basedir=`cygpath -w "$basedir"`
8
+ fi
9
+ ;;
10
+ esac
11
+
12
+ if [ -z "$NODE_PATH" ]; then
13
+ export NODE_PATH="/Users/brandoncryderman/AeonUI/node_modules/.pnpm/esbuild@0.27.7/node_modules/esbuild/bin/node_modules:/Users/brandoncryderman/AeonUI/node_modules/.pnpm/esbuild@0.27.7/node_modules/esbuild/node_modules:/Users/brandoncryderman/AeonUI/node_modules/.pnpm/esbuild@0.27.7/node_modules:/Users/brandoncryderman/AeonUI/node_modules/.pnpm/node_modules"
14
+ else
15
+ export NODE_PATH="/Users/brandoncryderman/AeonUI/node_modules/.pnpm/esbuild@0.27.7/node_modules/esbuild/bin/node_modules:/Users/brandoncryderman/AeonUI/node_modules/.pnpm/esbuild@0.27.7/node_modules/esbuild/node_modules:/Users/brandoncryderman/AeonUI/node_modules/.pnpm/esbuild@0.27.7/node_modules:/Users/brandoncryderman/AeonUI/node_modules/.pnpm/node_modules:$NODE_PATH"
16
+ fi
17
+ if [ -x "$basedir/node" ]; then
18
+ exec "$basedir/node" "$basedir/../../../../node_modules/.pnpm/esbuild@0.27.7/node_modules/esbuild/bin/esbuild" "$@"
19
+ else
20
+ exec node "$basedir/../../../../node_modules/.pnpm/esbuild@0.27.7/node_modules/esbuild/bin/esbuild" "$@"
21
+ fi
@@ -0,0 +1,21 @@
1
+ #!/bin/sh
2
+ basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
3
+
4
+ case `uname` in
5
+ *CYGWIN*|*MINGW*|*MSYS*)
6
+ if command -v cygpath > /dev/null 2>&1; then
7
+ basedir=`cygpath -w "$basedir"`
8
+ fi
9
+ ;;
10
+ esac
11
+
12
+ if [ -z "$NODE_PATH" ]; then
13
+ export NODE_PATH="/Users/brandoncryderman/AeonUI/node_modules/.pnpm/jiti@2.7.0/node_modules/jiti/lib/node_modules:/Users/brandoncryderman/AeonUI/node_modules/.pnpm/jiti@2.7.0/node_modules/jiti/node_modules:/Users/brandoncryderman/AeonUI/node_modules/.pnpm/jiti@2.7.0/node_modules:/Users/brandoncryderman/AeonUI/node_modules/.pnpm/node_modules"
14
+ else
15
+ export NODE_PATH="/Users/brandoncryderman/AeonUI/node_modules/.pnpm/jiti@2.7.0/node_modules/jiti/lib/node_modules:/Users/brandoncryderman/AeonUI/node_modules/.pnpm/jiti@2.7.0/node_modules/jiti/node_modules:/Users/brandoncryderman/AeonUI/node_modules/.pnpm/jiti@2.7.0/node_modules:/Users/brandoncryderman/AeonUI/node_modules/.pnpm/node_modules:$NODE_PATH"
16
+ fi
17
+ if [ -x "$basedir/node" ]; then
18
+ exec "$basedir/node" "$basedir/../../../../node_modules/.pnpm/jiti@2.7.0/node_modules/jiti/lib/jiti-cli.mjs" "$@"
19
+ else
20
+ exec node "$basedir/../../../../node_modules/.pnpm/jiti@2.7.0/node_modules/jiti/lib/jiti-cli.mjs" "$@"
21
+ fi
@@ -0,0 +1,21 @@
1
+ #!/bin/sh
2
+ basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
3
+
4
+ case `uname` in
5
+ *CYGWIN*|*MINGW*|*MSYS*)
6
+ if command -v cygpath > /dev/null 2>&1; then
7
+ basedir=`cygpath -w "$basedir"`
8
+ fi
9
+ ;;
10
+ esac
11
+
12
+ if [ -z "$NODE_PATH" ]; then
13
+ export NODE_PATH="/Users/brandoncryderman/AeonUI/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/bin/node_modules:/Users/brandoncryderman/AeonUI/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/node_modules:/Users/brandoncryderman/AeonUI/node_modules/.pnpm/typescript@5.9.3/node_modules:/Users/brandoncryderman/AeonUI/node_modules/.pnpm/node_modules"
14
+ else
15
+ export NODE_PATH="/Users/brandoncryderman/AeonUI/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/bin/node_modules:/Users/brandoncryderman/AeonUI/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/node_modules:/Users/brandoncryderman/AeonUI/node_modules/.pnpm/typescript@5.9.3/node_modules:/Users/brandoncryderman/AeonUI/node_modules/.pnpm/node_modules:$NODE_PATH"
16
+ fi
17
+ if [ -x "$basedir/node" ]; then
18
+ exec "$basedir/node" "$basedir/../typescript/bin/tsc" "$@"
19
+ else
20
+ exec node "$basedir/../typescript/bin/tsc" "$@"
21
+ fi
@@ -0,0 +1,21 @@
1
+ #!/bin/sh
2
+ basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
3
+
4
+ case `uname` in
5
+ *CYGWIN*|*MINGW*|*MSYS*)
6
+ if command -v cygpath > /dev/null 2>&1; then
7
+ basedir=`cygpath -w "$basedir"`
8
+ fi
9
+ ;;
10
+ esac
11
+
12
+ if [ -z "$NODE_PATH" ]; then
13
+ export NODE_PATH="/Users/brandoncryderman/AeonUI/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/bin/node_modules:/Users/brandoncryderman/AeonUI/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/node_modules:/Users/brandoncryderman/AeonUI/node_modules/.pnpm/typescript@5.9.3/node_modules:/Users/brandoncryderman/AeonUI/node_modules/.pnpm/node_modules"
14
+ else
15
+ export NODE_PATH="/Users/brandoncryderman/AeonUI/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/bin/node_modules:/Users/brandoncryderman/AeonUI/node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/node_modules:/Users/brandoncryderman/AeonUI/node_modules/.pnpm/typescript@5.9.3/node_modules:/Users/brandoncryderman/AeonUI/node_modules/.pnpm/node_modules:$NODE_PATH"
16
+ fi
17
+ if [ -x "$basedir/node" ]; then
18
+ exec "$basedir/node" "$basedir/../typescript/bin/tsserver" "$@"
19
+ else
20
+ exec node "$basedir/../typescript/bin/tsserver" "$@"
21
+ fi
@@ -0,0 +1,21 @@
1
+ #!/bin/sh
2
+ basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
3
+
4
+ case `uname` in
5
+ *CYGWIN*|*MINGW*|*MSYS*)
6
+ if command -v cygpath > /dev/null 2>&1; then
7
+ basedir=`cygpath -w "$basedir"`
8
+ fi
9
+ ;;
10
+ esac
11
+
12
+ if [ -z "$NODE_PATH" ]; then
13
+ export NODE_PATH="/Users/brandoncryderman/AeonUI/node_modules/.pnpm/tsup@8.5.1_jiti@2.7.0_postcss@8.5.15_tsx@4.22.3_typescript@5.9.3/node_modules/tsup/dist/node_modules:/Users/brandoncryderman/AeonUI/node_modules/.pnpm/tsup@8.5.1_jiti@2.7.0_postcss@8.5.15_tsx@4.22.3_typescript@5.9.3/node_modules/tsup/node_modules:/Users/brandoncryderman/AeonUI/node_modules/.pnpm/tsup@8.5.1_jiti@2.7.0_postcss@8.5.15_tsx@4.22.3_typescript@5.9.3/node_modules:/Users/brandoncryderman/AeonUI/node_modules/.pnpm/node_modules"
14
+ else
15
+ export NODE_PATH="/Users/brandoncryderman/AeonUI/node_modules/.pnpm/tsup@8.5.1_jiti@2.7.0_postcss@8.5.15_tsx@4.22.3_typescript@5.9.3/node_modules/tsup/dist/node_modules:/Users/brandoncryderman/AeonUI/node_modules/.pnpm/tsup@8.5.1_jiti@2.7.0_postcss@8.5.15_tsx@4.22.3_typescript@5.9.3/node_modules/tsup/node_modules:/Users/brandoncryderman/AeonUI/node_modules/.pnpm/tsup@8.5.1_jiti@2.7.0_postcss@8.5.15_tsx@4.22.3_typescript@5.9.3/node_modules:/Users/brandoncryderman/AeonUI/node_modules/.pnpm/node_modules:$NODE_PATH"
16
+ fi
17
+ if [ -x "$basedir/node" ]; then
18
+ exec "$basedir/node" "$basedir/../tsup/dist/cli-default.js" "$@"
19
+ else
20
+ exec node "$basedir/../tsup/dist/cli-default.js" "$@"
21
+ fi
@@ -0,0 +1,21 @@
1
+ #!/bin/sh
2
+ basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
3
+
4
+ case `uname` in
5
+ *CYGWIN*|*MINGW*|*MSYS*)
6
+ if command -v cygpath > /dev/null 2>&1; then
7
+ basedir=`cygpath -w "$basedir"`
8
+ fi
9
+ ;;
10
+ esac
11
+
12
+ if [ -z "$NODE_PATH" ]; then
13
+ export NODE_PATH="/Users/brandoncryderman/AeonUI/node_modules/.pnpm/tsup@8.5.1_jiti@2.7.0_postcss@8.5.15_tsx@4.22.3_typescript@5.9.3/node_modules/tsup/dist/node_modules:/Users/brandoncryderman/AeonUI/node_modules/.pnpm/tsup@8.5.1_jiti@2.7.0_postcss@8.5.15_tsx@4.22.3_typescript@5.9.3/node_modules/tsup/node_modules:/Users/brandoncryderman/AeonUI/node_modules/.pnpm/tsup@8.5.1_jiti@2.7.0_postcss@8.5.15_tsx@4.22.3_typescript@5.9.3/node_modules:/Users/brandoncryderman/AeonUI/node_modules/.pnpm/node_modules"
14
+ else
15
+ export NODE_PATH="/Users/brandoncryderman/AeonUI/node_modules/.pnpm/tsup@8.5.1_jiti@2.7.0_postcss@8.5.15_tsx@4.22.3_typescript@5.9.3/node_modules/tsup/dist/node_modules:/Users/brandoncryderman/AeonUI/node_modules/.pnpm/tsup@8.5.1_jiti@2.7.0_postcss@8.5.15_tsx@4.22.3_typescript@5.9.3/node_modules/tsup/node_modules:/Users/brandoncryderman/AeonUI/node_modules/.pnpm/tsup@8.5.1_jiti@2.7.0_postcss@8.5.15_tsx@4.22.3_typescript@5.9.3/node_modules:/Users/brandoncryderman/AeonUI/node_modules/.pnpm/node_modules:$NODE_PATH"
16
+ fi
17
+ if [ -x "$basedir/node" ]; then
18
+ exec "$basedir/node" "$basedir/../tsup/dist/cli-node.js" "$@"
19
+ else
20
+ exec node "$basedir/../tsup/dist/cli-node.js" "$@"
21
+ fi
@@ -0,0 +1,21 @@
1
+ #!/bin/sh
2
+ basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
3
+
4
+ case `uname` in
5
+ *CYGWIN*|*MINGW*|*MSYS*)
6
+ if command -v cygpath > /dev/null 2>&1; then
7
+ basedir=`cygpath -w "$basedir"`
8
+ fi
9
+ ;;
10
+ esac
11
+
12
+ if [ -z "$NODE_PATH" ]; then
13
+ export NODE_PATH="/Users/brandoncryderman/AeonUI/node_modules/.pnpm/tsx@4.22.3/node_modules/tsx/dist/node_modules:/Users/brandoncryderman/AeonUI/node_modules/.pnpm/tsx@4.22.3/node_modules/tsx/node_modules:/Users/brandoncryderman/AeonUI/node_modules/.pnpm/tsx@4.22.3/node_modules:/Users/brandoncryderman/AeonUI/node_modules/.pnpm/node_modules"
14
+ else
15
+ export NODE_PATH="/Users/brandoncryderman/AeonUI/node_modules/.pnpm/tsx@4.22.3/node_modules/tsx/dist/node_modules:/Users/brandoncryderman/AeonUI/node_modules/.pnpm/tsx@4.22.3/node_modules/tsx/node_modules:/Users/brandoncryderman/AeonUI/node_modules/.pnpm/tsx@4.22.3/node_modules:/Users/brandoncryderman/AeonUI/node_modules/.pnpm/node_modules:$NODE_PATH"
16
+ fi
17
+ if [ -x "$basedir/node" ]; then
18
+ exec "$basedir/node" "$basedir/../../../../node_modules/.pnpm/tsx@4.22.3/node_modules/tsx/dist/cli.mjs" "$@"
19
+ else
20
+ exec node "$basedir/../../../../node_modules/.pnpm/tsx@4.22.3/node_modules/tsx/dist/cli.mjs" "$@"
21
+ fi
@@ -0,0 +1,21 @@
1
+ #!/bin/sh
2
+ basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
3
+
4
+ case `uname` in
5
+ *CYGWIN*|*MINGW*|*MSYS*)
6
+ if command -v cygpath > /dev/null 2>&1; then
7
+ basedir=`cygpath -w "$basedir"`
8
+ fi
9
+ ;;
10
+ esac
11
+
12
+ if [ -z "$NODE_PATH" ]; then
13
+ export NODE_PATH="/Users/brandoncryderman/AeonUI/node_modules/.pnpm/vite@6.4.2_@types+node@22.19.19_jiti@2.7.0_lightningcss@1.32.0_tsx@4.22.3/node_modules/vite/bin/node_modules:/Users/brandoncryderman/AeonUI/node_modules/.pnpm/vite@6.4.2_@types+node@22.19.19_jiti@2.7.0_lightningcss@1.32.0_tsx@4.22.3/node_modules/vite/node_modules:/Users/brandoncryderman/AeonUI/node_modules/.pnpm/vite@6.4.2_@types+node@22.19.19_jiti@2.7.0_lightningcss@1.32.0_tsx@4.22.3/node_modules:/Users/brandoncryderman/AeonUI/node_modules/.pnpm/node_modules"
14
+ else
15
+ export NODE_PATH="/Users/brandoncryderman/AeonUI/node_modules/.pnpm/vite@6.4.2_@types+node@22.19.19_jiti@2.7.0_lightningcss@1.32.0_tsx@4.22.3/node_modules/vite/bin/node_modules:/Users/brandoncryderman/AeonUI/node_modules/.pnpm/vite@6.4.2_@types+node@22.19.19_jiti@2.7.0_lightningcss@1.32.0_tsx@4.22.3/node_modules/vite/node_modules:/Users/brandoncryderman/AeonUI/node_modules/.pnpm/vite@6.4.2_@types+node@22.19.19_jiti@2.7.0_lightningcss@1.32.0_tsx@4.22.3/node_modules:/Users/brandoncryderman/AeonUI/node_modules/.pnpm/node_modules:$NODE_PATH"
16
+ fi
17
+ if [ -x "$basedir/node" ]; then
18
+ exec "$basedir/node" "$basedir/../../../../node_modules/.pnpm/vite@6.4.2_@types+node@22.19.19_jiti@2.7.0_lightningcss@1.32.0_tsx@4.22.3/node_modules/vite/bin/vite.js" "$@"
19
+ else
20
+ exec node "$basedir/../../../../node_modules/.pnpm/vite@6.4.2_@types+node@22.19.19_jiti@2.7.0_lightningcss@1.32.0_tsx@4.22.3/node_modules/vite/bin/vite.js" "$@"
21
+ fi
@@ -0,0 +1,21 @@
1
+ #!/bin/sh
2
+ basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
3
+
4
+ case `uname` in
5
+ *CYGWIN*|*MINGW*|*MSYS*)
6
+ if command -v cygpath > /dev/null 2>&1; then
7
+ basedir=`cygpath -w "$basedir"`
8
+ fi
9
+ ;;
10
+ esac
11
+
12
+ if [ -z "$NODE_PATH" ]; then
13
+ export NODE_PATH="/Users/brandoncryderman/AeonUI/node_modules/.pnpm/vitest@3.2.4_@types+node@22.19.19_jiti@2.7.0_jsdom@26.1.0_lightningcss@1.32.0_tsx@4.22.3/node_modules/vitest/node_modules:/Users/brandoncryderman/AeonUI/node_modules/.pnpm/vitest@3.2.4_@types+node@22.19.19_jiti@2.7.0_jsdom@26.1.0_lightningcss@1.32.0_tsx@4.22.3/node_modules:/Users/brandoncryderman/AeonUI/node_modules/.pnpm/node_modules"
14
+ else
15
+ export NODE_PATH="/Users/brandoncryderman/AeonUI/node_modules/.pnpm/vitest@3.2.4_@types+node@22.19.19_jiti@2.7.0_jsdom@26.1.0_lightningcss@1.32.0_tsx@4.22.3/node_modules/vitest/node_modules:/Users/brandoncryderman/AeonUI/node_modules/.pnpm/vitest@3.2.4_@types+node@22.19.19_jiti@2.7.0_jsdom@26.1.0_lightningcss@1.32.0_tsx@4.22.3/node_modules:/Users/brandoncryderman/AeonUI/node_modules/.pnpm/node_modules:$NODE_PATH"
16
+ fi
17
+ if [ -x "$basedir/node" ]; then
18
+ exec "$basedir/node" "$basedir/../vitest/vitest.mjs" "$@"
19
+ else
20
+ exec node "$basedir/../vitest/vitest.mjs" "$@"
21
+ fi
@@ -0,0 +1 @@
1
+ {"version":"3.2.4","results":[[":src/machine.test.ts",{"duration":2.2672079999999823,"failed":false}],[":src/theme.test.ts",{"duration":1.6362909999999715,"failed":false}]]}
@@ -0,0 +1,50 @@
1
+ type SceneState = 'idle' | 'active' | 'paused';
2
+ /** `data-aeon-scope="scene"` for ambient regions (backdrops, visualizers). */
3
+ declare function sceneAttrs(part: string, state?: SceneState): Record<string, unknown>;
4
+
5
+ type GridPatternOptions = {
6
+ cell?: number;
7
+ lineColor?: string;
8
+ lineWidth?: number;
9
+ };
10
+ /** CSS `background-image` for an orthogonal grid (no external assets). */
11
+ declare function gridPatternStyle(options?: GridPatternOptions): {
12
+ backgroundImage: string;
13
+ backgroundSize: string;
14
+ };
15
+ type WavePatternOptions = {
16
+ wavelength?: number;
17
+ amplitude?: number;
18
+ stroke?: string;
19
+ strokeWidth?: number;
20
+ };
21
+ /** SVG path `d` for a horizontal sine wave across `width`. */
22
+ declare function wavePath(width: number, height: number, options?: WavePatternOptions): string;
23
+ /** Radial vignette as CSS gradient for scene overlays. */
24
+ declare function vignetteStyle(options?: {
25
+ strength?: number;
26
+ }): {
27
+ background: string;
28
+ };
29
+
30
+ type BarRect = {
31
+ x: number;
32
+ y: number;
33
+ w: number;
34
+ h: number;
35
+ fill: string;
36
+ };
37
+ type BarLayoutOptions = {
38
+ count: number;
39
+ viewWidth: number;
40
+ viewHeight: number;
41
+ barWidth?: number;
42
+ gap?: number;
43
+ fills?: readonly string[];
44
+ };
45
+ /** Evenly spaced vertical bars for spectrum-style SVG (Soundbase-style layout). */
46
+ declare function barLayout(options: BarLayoutOptions): BarRect[];
47
+ /** Centered Y scale transform for one bar (scale applied around bar center). */
48
+ declare function barScaleTransform(bar: BarRect, scaleY: number): string;
49
+
50
+ export { type BarLayoutOptions, type BarRect, type GridPatternOptions, type SceneState, type WavePatternOptions, barLayout, barScaleTransform, gridPatternStyle, sceneAttrs, vignetteStyle, wavePath };