aeon-ui-engine 1.0.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 (430) hide show
  1. package/.changeset/README.md +23 -0
  2. package/.changeset/combobox-and-changesets.md +9 -0
  3. package/.changeset/config.json +30 -0
  4. package/.changeset/framework-adapters.md +12 -0
  5. package/.changeset/scene-3d.md +6 -0
  6. package/.changeset/scene-plane.md +8 -0
  7. package/.changeset/site-og.md +5 -0
  8. package/.cursor/rules/aeon-ui.mdc +22 -0
  9. package/ACCESSIBILITY.md +32 -0
  10. package/AGENTS.md +226 -0
  11. package/COMPONENTS.md +36 -0
  12. package/FRAMEWORKS.md +57 -0
  13. package/INTEGRATION.md +89 -0
  14. package/LICENSE +21 -0
  15. package/PHILOSOPHY.md +71 -0
  16. package/PUBLISHING.md +85 -0
  17. package/README.md +154 -0
  18. package/SCENE.md +113 -0
  19. package/STATES.md +243 -0
  20. package/apps/demo/index.html +31 -0
  21. package/apps/demo/og.config.mjs +15 -0
  22. package/apps/demo/package.json +41 -0
  23. package/apps/demo/public/favicon.svg +16 -0
  24. package/apps/demo/public/og.png +0 -0
  25. package/apps/demo/public/og.svg +35 -0
  26. package/apps/demo/scripts/generate-og-png.mjs +60 -0
  27. package/apps/demo/src/App.tsx +31 -0
  28. package/apps/demo/src/aeonDiagrams.ts +100 -0
  29. package/apps/demo/src/app.css +16 -0
  30. package/apps/demo/src/components/ActionCluster.tsx +20 -0
  31. package/apps/demo/src/components/AsyncMachineDemo.tsx +97 -0
  32. package/apps/demo/src/components/ButtonLifecycleDemo.tsx +63 -0
  33. package/apps/demo/src/components/CodeExample.tsx +7 -0
  34. package/apps/demo/src/components/ComboboxDemo.tsx +30 -0
  35. package/apps/demo/src/components/DiagramsSection.tsx +38 -0
  36. package/apps/demo/src/components/FieldStateDemo.tsx +51 -0
  37. package/apps/demo/src/components/GridMesh.tsx +8 -0
  38. package/apps/demo/src/components/HeroInstall.tsx +10 -0
  39. package/apps/demo/src/components/LandingFaq.tsx +29 -0
  40. package/apps/demo/src/components/LandingFooter.tsx +22 -0
  41. package/apps/demo/src/components/LandingHeader.tsx +60 -0
  42. package/apps/demo/src/components/LandingHero.tsx +55 -0
  43. package/apps/demo/src/components/LayersSection.tsx +51 -0
  44. package/apps/demo/src/components/MermaidDiagram.tsx +84 -0
  45. package/apps/demo/src/components/PhilosophySection.tsx +33 -0
  46. package/apps/demo/src/components/PlaygroundBlock.tsx +23 -0
  47. package/apps/demo/src/components/PlaygroundSection.tsx +204 -0
  48. package/apps/demo/src/components/SceneSection.tsx +157 -0
  49. package/apps/demo/src/components/ScrollRegionDemo.tsx +74 -0
  50. package/apps/demo/src/components/ThemeSwitcher.tsx +76 -0
  51. package/apps/demo/src/demo-layout.css +264 -0
  52. package/apps/demo/src/landing.css +1094 -0
  53. package/apps/demo/src/main.tsx +14 -0
  54. package/apps/demo/src/nav.ts +9 -0
  55. package/apps/demo/src/site.ts +347 -0
  56. package/apps/demo/tsconfig.json +17 -0
  57. package/apps/demo/vite-plugins/og-meta.ts +30 -0
  58. package/apps/demo/vite.config.ts +69 -0
  59. package/docs/API_PATTERNS.md +234 -0
  60. package/docs/ARCHITECTURE.md +125 -0
  61. package/docs/COMPONENT_CHECKLIST.md +103 -0
  62. package/docs/FILE_MAP.md +122 -0
  63. package/docs/GLOSSARY.md +125 -0
  64. package/docs/INDEX.md +53 -0
  65. package/docs/LAYOUT_COORDINATES.md +178 -0
  66. package/docs/MACHINES.md +166 -0
  67. package/docs/MIGRATION_FROM_ARK.md +295 -0
  68. package/docs/VITE_CONSUMER.md +114 -0
  69. package/package.json +25 -0
  70. package/packages/core/README.md +69 -0
  71. package/packages/core/package.json +37 -0
  72. package/packages/core/src/anatomy.ts +144 -0
  73. package/packages/core/src/attrs.ts +47 -0
  74. package/packages/core/src/index.ts +8 -0
  75. package/packages/core/src/layout.ts +176 -0
  76. package/packages/core/src/machine.test.ts +18 -0
  77. package/packages/core/src/machine.ts +15 -0
  78. package/packages/core/src/philosophy.ts +10 -0
  79. package/packages/core/src/scroll.ts +72 -0
  80. package/packages/core/src/theme.test.ts +14 -0
  81. package/packages/core/src/theme.ts +53 -0
  82. package/packages/core/src/types.ts +25 -0
  83. package/packages/core/theme-transition.css +58 -0
  84. package/packages/core/tsconfig.json +8 -0
  85. package/packages/core/vitest.config.ts +8 -0
  86. package/packages/geometry/README.md +7 -0
  87. package/packages/geometry/package.json +35 -0
  88. package/packages/geometry/src/index.ts +3 -0
  89. package/packages/geometry/src/patterns.ts +55 -0
  90. package/packages/geometry/src/scene-attrs.ts +11 -0
  91. package/packages/geometry/src/svg.ts +60 -0
  92. package/packages/geometry/tsconfig.json +8 -0
  93. package/packages/panda/README.md +66 -0
  94. package/packages/panda/package.json +40 -0
  95. package/packages/panda/panda.config.ts +229 -0
  96. package/packages/panda/scripts/emit-theme-runtime.ts +37 -0
  97. package/packages/panda/src/recipes/accordion.ts +95 -0
  98. package/packages/panda/src/recipes/async.ts +76 -0
  99. package/packages/panda/src/recipes/badge.ts +44 -0
  100. package/packages/panda/src/recipes/button-group.ts +33 -0
  101. package/packages/panda/src/recipes/button.ts +91 -0
  102. package/packages/panda/src/recipes/checkbox.ts +41 -0
  103. package/packages/panda/src/recipes/combobox.ts +121 -0
  104. package/packages/panda/src/recipes/dialog.ts +96 -0
  105. package/packages/panda/src/recipes/field-shared.ts +29 -0
  106. package/packages/panda/src/recipes/field.ts +72 -0
  107. package/packages/panda/src/recipes/floating.ts +170 -0
  108. package/packages/panda/src/recipes/index.ts +14 -0
  109. package/packages/panda/src/recipes/scroll-region.ts +55 -0
  110. package/packages/panda/src/recipes/select.ts +111 -0
  111. package/packages/panda/src/recipes/switch.ts +51 -0
  112. package/packages/panda/src/recipes/tabs.ts +50 -0
  113. package/packages/panda/src/theme/catalog-types.ts +24 -0
  114. package/packages/panda/src/theme/catalog.ts +73 -0
  115. package/packages/panda/src/theme/chrome.css +75 -0
  116. package/packages/panda/src/theme/global-theme-css.ts +42 -0
  117. package/packages/panda/src/theme/index.ts +5 -0
  118. package/packages/panda/src/theme/palette.ts +65 -0
  119. package/packages/panda/src/theme/scrollbars.css +96 -0
  120. package/packages/panda/src/theme/semantic-tokens.ts +17 -0
  121. package/packages/panda/src/theme/themes.config.ts +516 -0
  122. package/packages/panda/src/theme/tokens.ts +51 -0
  123. package/packages/panda/styled-system/css/conditions.mjs +36 -0
  124. package/packages/panda/styled-system/css/css.d.ts +22 -0
  125. package/packages/panda/styled-system/css/css.mjs +45 -0
  126. package/packages/panda/styled-system/css/cva.d.ts +6 -0
  127. package/packages/panda/styled-system/css/cva.mjs +87 -0
  128. package/packages/panda/styled-system/css/cx.d.ts +5 -0
  129. package/packages/panda/styled-system/css/cx.mjs +15 -0
  130. package/packages/panda/styled-system/css/index.d.ts +5 -0
  131. package/packages/panda/styled-system/css/index.mjs +4 -0
  132. package/packages/panda/styled-system/css/sva.d.ts +4 -0
  133. package/packages/panda/styled-system/css/sva.mjs +41 -0
  134. package/packages/panda/styled-system/helpers.mjs +339 -0
  135. package/packages/panda/styled-system/jsx/aspect-ratio.d.ts +10 -0
  136. package/packages/panda/styled-system/jsx/aspect-ratio.mjs +14 -0
  137. package/packages/panda/styled-system/jsx/bleed.d.ts +10 -0
  138. package/packages/panda/styled-system/jsx/bleed.mjs +14 -0
  139. package/packages/panda/styled-system/jsx/box.d.ts +10 -0
  140. package/packages/panda/styled-system/jsx/box.mjs +14 -0
  141. package/packages/panda/styled-system/jsx/center.d.ts +10 -0
  142. package/packages/panda/styled-system/jsx/center.mjs +14 -0
  143. package/packages/panda/styled-system/jsx/circle.d.ts +10 -0
  144. package/packages/panda/styled-system/jsx/circle.mjs +14 -0
  145. package/packages/panda/styled-system/jsx/container.d.ts +10 -0
  146. package/packages/panda/styled-system/jsx/container.mjs +14 -0
  147. package/packages/panda/styled-system/jsx/cq.d.ts +10 -0
  148. package/packages/panda/styled-system/jsx/cq.mjs +14 -0
  149. package/packages/panda/styled-system/jsx/divider.d.ts +10 -0
  150. package/packages/panda/styled-system/jsx/divider.mjs +14 -0
  151. package/packages/panda/styled-system/jsx/factory-helper.mjs +22 -0
  152. package/packages/panda/styled-system/jsx/factory.d.ts +3 -0
  153. package/packages/panda/styled-system/jsx/factory.mjs +80 -0
  154. package/packages/panda/styled-system/jsx/flex.d.ts +10 -0
  155. package/packages/panda/styled-system/jsx/flex.mjs +14 -0
  156. package/packages/panda/styled-system/jsx/float.d.ts +10 -0
  157. package/packages/panda/styled-system/jsx/float.mjs +14 -0
  158. package/packages/panda/styled-system/jsx/grid-item.d.ts +10 -0
  159. package/packages/panda/styled-system/jsx/grid-item.mjs +14 -0
  160. package/packages/panda/styled-system/jsx/grid.d.ts +10 -0
  161. package/packages/panda/styled-system/jsx/grid.mjs +14 -0
  162. package/packages/panda/styled-system/jsx/hstack.d.ts +10 -0
  163. package/packages/panda/styled-system/jsx/hstack.mjs +14 -0
  164. package/packages/panda/styled-system/jsx/index.d.ts +24 -0
  165. package/packages/panda/styled-system/jsx/index.mjs +22 -0
  166. package/packages/panda/styled-system/jsx/is-valid-prop.d.ts +11 -0
  167. package/packages/panda/styled-system/jsx/is-valid-prop.mjs +17 -0
  168. package/packages/panda/styled-system/jsx/link-overlay.d.ts +10 -0
  169. package/packages/panda/styled-system/jsx/link-overlay.mjs +14 -0
  170. package/packages/panda/styled-system/jsx/spacer.d.ts +10 -0
  171. package/packages/panda/styled-system/jsx/spacer.mjs +14 -0
  172. package/packages/panda/styled-system/jsx/square.d.ts +10 -0
  173. package/packages/panda/styled-system/jsx/square.mjs +14 -0
  174. package/packages/panda/styled-system/jsx/stack.d.ts +10 -0
  175. package/packages/panda/styled-system/jsx/stack.mjs +14 -0
  176. package/packages/panda/styled-system/jsx/visually-hidden.d.ts +10 -0
  177. package/packages/panda/styled-system/jsx/visually-hidden.mjs +14 -0
  178. package/packages/panda/styled-system/jsx/vstack.d.ts +10 -0
  179. package/packages/panda/styled-system/jsx/vstack.mjs +14 -0
  180. package/packages/panda/styled-system/jsx/wrap.d.ts +10 -0
  181. package/packages/panda/styled-system/jsx/wrap.mjs +14 -0
  182. package/packages/panda/styled-system/patterns/aspect-ratio.d.ts +21 -0
  183. package/packages/panda/styled-system/patterns/aspect-ratio.mjs +38 -0
  184. package/packages/panda/styled-system/patterns/bleed.d.ts +22 -0
  185. package/packages/panda/styled-system/patterns/bleed.mjs +24 -0
  186. package/packages/panda/styled-system/patterns/box.d.ts +21 -0
  187. package/packages/panda/styled-system/patterns/box.mjs +15 -0
  188. package/packages/panda/styled-system/patterns/center.d.ts +21 -0
  189. package/packages/panda/styled-system/patterns/center.mjs +21 -0
  190. package/packages/panda/styled-system/patterns/circle.d.ts +21 -0
  191. package/packages/panda/styled-system/patterns/circle.mjs +25 -0
  192. package/packages/panda/styled-system/patterns/container.d.ts +21 -0
  193. package/packages/panda/styled-system/patterns/container.mjs +21 -0
  194. package/packages/panda/styled-system/patterns/cq.d.ts +22 -0
  195. package/packages/panda/styled-system/patterns/cq.mjs +21 -0
  196. package/packages/panda/styled-system/patterns/divider.d.ts +23 -0
  197. package/packages/panda/styled-system/patterns/divider.mjs +25 -0
  198. package/packages/panda/styled-system/patterns/flex.d.ts +27 -0
  199. package/packages/panda/styled-system/patterns/flex.mjs +26 -0
  200. package/packages/panda/styled-system/patterns/float.d.ts +24 -0
  201. package/packages/panda/styled-system/patterns/float.mjs +52 -0
  202. package/packages/panda/styled-system/patterns/grid-item.d.ts +26 -0
  203. package/packages/panda/styled-system/patterns/grid-item.mjs +25 -0
  204. package/packages/panda/styled-system/patterns/grid.d.ts +25 -0
  205. package/packages/panda/styled-system/patterns/grid.mjs +27 -0
  206. package/packages/panda/styled-system/patterns/hstack.d.ts +22 -0
  207. package/packages/panda/styled-system/patterns/hstack.mjs +24 -0
  208. package/packages/panda/styled-system/patterns/index.d.ts +21 -0
  209. package/packages/panda/styled-system/patterns/index.mjs +20 -0
  210. package/packages/panda/styled-system/patterns/link-overlay.d.ts +21 -0
  211. package/packages/panda/styled-system/patterns/link-overlay.mjs +24 -0
  212. package/packages/panda/styled-system/patterns/spacer.d.ts +21 -0
  213. package/packages/panda/styled-system/patterns/spacer.mjs +21 -0
  214. package/packages/panda/styled-system/patterns/square.d.ts +21 -0
  215. package/packages/panda/styled-system/patterns/square.mjs +24 -0
  216. package/packages/panda/styled-system/patterns/stack.d.ts +24 -0
  217. package/packages/panda/styled-system/patterns/stack.mjs +24 -0
  218. package/packages/panda/styled-system/patterns/visually-hidden.d.ts +21 -0
  219. package/packages/panda/styled-system/patterns/visually-hidden.mjs +18 -0
  220. package/packages/panda/styled-system/patterns/vstack.d.ts +22 -0
  221. package/packages/panda/styled-system/patterns/vstack.mjs +24 -0
  222. package/packages/panda/styled-system/patterns/wrap.d.ts +25 -0
  223. package/packages/panda/styled-system/patterns/wrap.mjs +25 -0
  224. package/packages/panda/styled-system/recipes/aeon-accordion.d.ts +32 -0
  225. package/packages/panda/styled-system/recipes/aeon-accordion.mjs +48 -0
  226. package/packages/panda/styled-system/recipes/aeon-async.d.ts +32 -0
  227. package/packages/panda/styled-system/recipes/aeon-async.mjs +56 -0
  228. package/packages/panda/styled-system/recipes/aeon-badge.d.ts +31 -0
  229. package/packages/panda/styled-system/recipes/aeon-badge.mjs +32 -0
  230. package/packages/panda/styled-system/recipes/aeon-button-group.d.ts +39 -0
  231. package/packages/panda/styled-system/recipes/aeon-button-group.mjs +37 -0
  232. package/packages/panda/styled-system/recipes/aeon-button.d.ts +39 -0
  233. package/packages/panda/styled-system/recipes/aeon-button.mjs +39 -0
  234. package/packages/panda/styled-system/recipes/aeon-checkbox.d.ts +28 -0
  235. package/packages/panda/styled-system/recipes/aeon-checkbox.mjs +48 -0
  236. package/packages/panda/styled-system/recipes/aeon-combobox.d.ts +32 -0
  237. package/packages/panda/styled-system/recipes/aeon-combobox.mjs +52 -0
  238. package/packages/panda/styled-system/recipes/aeon-dialog.d.ts +28 -0
  239. package/packages/panda/styled-system/recipes/aeon-dialog.mjs +60 -0
  240. package/packages/panda/styled-system/recipes/aeon-field.d.ts +32 -0
  241. package/packages/panda/styled-system/recipes/aeon-field.mjs +52 -0
  242. package/packages/panda/styled-system/recipes/aeon-menu.d.ts +28 -0
  243. package/packages/panda/styled-system/recipes/aeon-menu.mjs +52 -0
  244. package/packages/panda/styled-system/recipes/aeon-popover.d.ts +28 -0
  245. package/packages/panda/styled-system/recipes/aeon-popover.mjs +52 -0
  246. package/packages/panda/styled-system/recipes/aeon-scroll.d.ts +43 -0
  247. package/packages/panda/styled-system/recipes/aeon-scroll.mjs +63 -0
  248. package/packages/panda/styled-system/recipes/aeon-select.d.ts +32 -0
  249. package/packages/panda/styled-system/recipes/aeon-select.mjs +56 -0
  250. package/packages/panda/styled-system/recipes/aeon-switch.d.ts +28 -0
  251. package/packages/panda/styled-system/recipes/aeon-switch.mjs +48 -0
  252. package/packages/panda/styled-system/recipes/aeon-tabs.d.ts +28 -0
  253. package/packages/panda/styled-system/recipes/aeon-tabs.mjs +48 -0
  254. package/packages/panda/styled-system/recipes/aeon-toast.d.ts +28 -0
  255. package/packages/panda/styled-system/recipes/aeon-toast.mjs +48 -0
  256. package/packages/panda/styled-system/recipes/aeon-tooltip.d.ts +28 -0
  257. package/packages/panda/styled-system/recipes/aeon-tooltip.mjs +48 -0
  258. package/packages/panda/styled-system/recipes/create-recipe.mjs +82 -0
  259. package/packages/panda/styled-system/recipes/index.d.ts +18 -0
  260. package/packages/panda/styled-system/recipes/index.mjs +17 -0
  261. package/packages/panda/styled-system/styles.css +2157 -0
  262. package/packages/panda/styled-system/tokens/index.d.ts +9 -0
  263. package/packages/panda/styled-system/tokens/index.mjs +2156 -0
  264. package/packages/panda/styled-system/tokens/tokens.d.ts +60 -0
  265. package/packages/panda/styled-system/types/composition.d.ts +164 -0
  266. package/packages/panda/styled-system/types/conditions.d.ts +322 -0
  267. package/packages/panda/styled-system/types/csstype.d.ts +21298 -0
  268. package/packages/panda/styled-system/types/global.d.ts +20 -0
  269. package/packages/panda/styled-system/types/index.d.ts +8 -0
  270. package/packages/panda/styled-system/types/jsx.d.ts +52 -0
  271. package/packages/panda/styled-system/types/parts.d.ts +8 -0
  272. package/packages/panda/styled-system/types/pattern.d.ts +78 -0
  273. package/packages/panda/styled-system/types/prop-type.d.ts +240 -0
  274. package/packages/panda/styled-system/types/recipe.d.ts +181 -0
  275. package/packages/panda/styled-system/types/selectors.d.ts +59 -0
  276. package/packages/panda/styled-system/types/static-css.d.ts +56 -0
  277. package/packages/panda/styled-system/types/style-props.d.ts +7491 -0
  278. package/packages/panda/styled-system/types/system-types.d.ts +193 -0
  279. package/packages/panda/theme-runtime.css +842 -0
  280. package/packages/panda/tsconfig.json +8 -0
  281. package/packages/primitives/README.md +54 -0
  282. package/packages/primitives/package.json +41 -0
  283. package/packages/primitives/src/__tests__/floating-surface.test.ts +29 -0
  284. package/packages/primitives/src/index.ts +9 -0
  285. package/packages/primitives/src/machines/accordion.ts +56 -0
  286. package/packages/primitives/src/machines/async.ts +108 -0
  287. package/packages/primitives/src/machines/button.ts +66 -0
  288. package/packages/primitives/src/machines/dialog.ts +61 -0
  289. package/packages/primitives/src/machines/field.ts +85 -0
  290. package/packages/primitives/src/machines/popover.ts +52 -0
  291. package/packages/primitives/src/machines/tabs.ts +46 -0
  292. package/packages/primitives/src/machines/toast.ts +48 -0
  293. package/packages/primitives/src/machines/toggle.ts +61 -0
  294. package/packages/primitives/tsconfig.json +8 -0
  295. package/packages/primitives/vitest.config.ts +8 -0
  296. package/packages/react/README.md +65 -0
  297. package/packages/react/package.json +52 -0
  298. package/packages/react/src/accordion/index.tsx +179 -0
  299. package/packages/react/src/async/actions.tsx +22 -0
  300. package/packages/react/src/async/context.tsx +54 -0
  301. package/packages/react/src/async/index.tsx +21 -0
  302. package/packages/react/src/async/legacy-region.tsx +38 -0
  303. package/packages/react/src/async/readout.tsx +34 -0
  304. package/packages/react/src/async/root.tsx +39 -0
  305. package/packages/react/src/async/track.tsx +59 -0
  306. package/packages/react/src/avatar/avatar.test.tsx +27 -0
  307. package/packages/react/src/avatar/index.tsx +122 -0
  308. package/packages/react/src/button/index.tsx +70 -0
  309. package/packages/react/src/checkbox/index.tsx +180 -0
  310. package/packages/react/src/combobox/index.tsx +430 -0
  311. package/packages/react/src/dialog/dialog.test.tsx +50 -0
  312. package/packages/react/src/dialog/index.tsx +275 -0
  313. package/packages/react/src/field/index.tsx +172 -0
  314. package/packages/react/src/hooks/use-aeon-machine.ts +10 -0
  315. package/packages/react/src/hooks/use-anchor-position.ts +33 -0
  316. package/packages/react/src/hooks/use-focus-trap.ts +51 -0
  317. package/packages/react/src/hooks/use-layout-mode.ts +22 -0
  318. package/packages/react/src/hooks/use-outside-click.ts +19 -0
  319. package/packages/react/src/hooks/use-portalled.ts +16 -0
  320. package/packages/react/src/hooks/use-scroll-lock.ts +13 -0
  321. package/packages/react/src/index.ts +18 -0
  322. package/packages/react/src/menu/index.tsx +195 -0
  323. package/packages/react/src/popover/index.tsx +191 -0
  324. package/packages/react/src/scroll/index.tsx +98 -0
  325. package/packages/react/src/scroll/use-scroll-state.ts +30 -0
  326. package/packages/react/src/select/index.tsx +372 -0
  327. package/packages/react/src/select/select.test.tsx +60 -0
  328. package/packages/react/src/switch/index.tsx +215 -0
  329. package/packages/react/src/tabs/index.tsx +140 -0
  330. package/packages/react/src/toast/context.tsx +28 -0
  331. package/packages/react/src/toast/index.tsx +20 -0
  332. package/packages/react/src/toast/primitives.tsx +129 -0
  333. package/packages/react/src/toast/provider.tsx +111 -0
  334. package/packages/react/src/toast/toast-item.tsx +32 -0
  335. package/packages/react/src/tooltip/index.tsx +191 -0
  336. package/packages/react/src/utils/merge-props.ts +24 -0
  337. package/packages/react/tsconfig.json +8 -0
  338. package/packages/react/vitest.config.ts +9 -0
  339. package/packages/react/vitest.setup.ts +5 -0
  340. package/packages/react-scene/README.md +11 -0
  341. package/packages/react-scene/package.json +47 -0
  342. package/packages/react-scene/scene-3d.css +37 -0
  343. package/packages/react-scene/scene-room.css +95 -0
  344. package/packages/react-scene/src/index.ts +20 -0
  345. package/packages/react-scene/src/procedural-grid.tsx +35 -0
  346. package/packages/react-scene/src/scene-layer.tsx +38 -0
  347. package/packages/react-scene/src/scene-plane.tsx +69 -0
  348. package/packages/react-scene/src/scene-room.tsx +81 -0
  349. package/packages/react-scene/src/scene-root.tsx +49 -0
  350. package/packages/react-scene/src/scene-slot.tsx +41 -0
  351. package/packages/react-scene/src/scene-stage.tsx +37 -0
  352. package/packages/react-scene/src/scene-surface.tsx +20 -0
  353. package/packages/react-scene/src/signal-bars.tsx +57 -0
  354. package/packages/react-scene/src/use-signal-visualizer.ts +103 -0
  355. package/packages/react-scene/tsconfig.json +8 -0
  356. package/packages/scene/README.md +5 -0
  357. package/packages/scene/package.json +32 -0
  358. package/packages/scene/src/index.ts +2 -0
  359. package/packages/scene/src/room.ts +40 -0
  360. package/packages/scene/src/transform.ts +60 -0
  361. package/packages/scene/tsconfig.json +8 -0
  362. package/packages/signal/README.md +9 -0
  363. package/packages/signal/package.json +32 -0
  364. package/packages/signal/src/analyser.ts +113 -0
  365. package/packages/signal/src/bands.ts +33 -0
  366. package/packages/signal/src/index.ts +3 -0
  367. package/packages/signal/src/motion.ts +80 -0
  368. package/packages/signal/tsconfig.json +8 -0
  369. package/packages/site/README.md +19 -0
  370. package/packages/site/package.json +32 -0
  371. package/packages/site/src/index.ts +8 -0
  372. package/packages/site/src/open-graph.ts +90 -0
  373. package/packages/site/tsconfig.json +8 -0
  374. package/packages/solid/README.md +30 -0
  375. package/packages/solid/package.json +42 -0
  376. package/packages/solid/src/hooks/use-aeon-machine.ts +10 -0
  377. package/packages/solid/src/index.ts +2 -0
  378. package/packages/solid/src/switch/index.tsx +191 -0
  379. package/packages/solid/src/utils/merge-props.ts +3 -0
  380. package/packages/solid/tsconfig.json +10 -0
  381. package/packages/surface/README.md +10 -0
  382. package/packages/surface/package.json +33 -0
  383. package/packages/surface/src/index.ts +1 -0
  384. package/packages/surface/src/materials.ts +14 -0
  385. package/packages/surface/surface.css +113 -0
  386. package/packages/surface/tsconfig.json +8 -0
  387. package/packages/svelte/README.md +45 -0
  388. package/packages/svelte/package.json +49 -0
  389. package/packages/svelte/src/Switch.svelte +86 -0
  390. package/packages/svelte/src/SwitchControl.svelte +45 -0
  391. package/packages/svelte/src/SwitchHiddenInput.svelte +12 -0
  392. package/packages/svelte/src/SwitchLabel.svelte +9 -0
  393. package/packages/svelte/src/SwitchThumb.svelte +16 -0
  394. package/packages/svelte/src/hooks/use-aeon-machine.ts +23 -0
  395. package/packages/svelte/src/index.ts +2 -0
  396. package/packages/svelte/src/switch-context.ts +13 -0
  397. package/packages/svelte/tsconfig.json +8 -0
  398. package/packages/ui/README.md +63 -0
  399. package/packages/ui/package.json +45 -0
  400. package/packages/ui/src/accordion.tsx +27 -0
  401. package/packages/ui/src/async.tsx +43 -0
  402. package/packages/ui/src/badge.tsx +18 -0
  403. package/packages/ui/src/button.tsx +38 -0
  404. package/packages/ui/src/checkbox.tsx +24 -0
  405. package/packages/ui/src/cn.ts +1 -0
  406. package/packages/ui/src/combobox.tsx +29 -0
  407. package/packages/ui/src/dialog.tsx +32 -0
  408. package/packages/ui/src/field.tsx +33 -0
  409. package/packages/ui/src/index.ts +17 -0
  410. package/packages/ui/src/menu.tsx +25 -0
  411. package/packages/ui/src/popover.tsx +22 -0
  412. package/packages/ui/src/scroll.tsx +51 -0
  413. package/packages/ui/src/select.tsx +33 -0
  414. package/packages/ui/src/styles.css +2 -0
  415. package/packages/ui/src/switch.tsx +22 -0
  416. package/packages/ui/src/tabs.tsx +22 -0
  417. package/packages/ui/src/toast.tsx +36 -0
  418. package/packages/ui/src/tooltip.tsx +19 -0
  419. package/packages/ui/tsconfig.json +12 -0
  420. package/packages/vue/README.md +40 -0
  421. package/packages/vue/package.json +42 -0
  422. package/packages/vue/src/hooks/use-aeon-machine.ts +10 -0
  423. package/packages/vue/src/index.ts +2 -0
  424. package/packages/vue/src/switch/index.ts +208 -0
  425. package/packages/vue/src/utils/part-props.ts +8 -0
  426. package/packages/vue/tsconfig.json +8 -0
  427. package/pnpm-workspace.yaml +3 -0
  428. package/scripts/ensure-headless-built.mjs +25 -0
  429. package/tsconfig.base.json +21 -0
  430. package/vercel.json +12 -0
@@ -0,0 +1,14 @@
1
+ import { StrictMode } from 'react'
2
+ import { createRoot } from 'react-dom/client'
3
+ import '@aeon-ui/panda/styles.css'
4
+ import '@aeon-ui/panda/theme-runtime.css'
5
+ import '@aeon-ui/panda/scrollbars.css'
6
+ import '@aeon-ui/panda/chrome.css'
7
+ import './app.css'
8
+ import { App } from './App.js'
9
+
10
+ createRoot(document.getElementById('root')!).render(
11
+ <StrictMode>
12
+ <App />
13
+ </StrictMode>,
14
+ )
@@ -0,0 +1,9 @@
1
+ export const navLinks = [
2
+ { href: '#layers', label: 'Architecture', sectionId: 'layers' },
3
+ { href: '#diagrams', label: 'Diagrams', sectionId: 'diagrams' },
4
+ { href: '#playground', label: 'Components', sectionId: 'playground' },
5
+ { href: '#philosophy', label: 'Foundation', sectionId: 'philosophy' },
6
+ { href: '#faq', label: 'FAQ', sectionId: 'faq' },
7
+ ] as const
8
+
9
+ export const navSectionIds = navLinks.map((l) => l.sectionId)
@@ -0,0 +1,347 @@
1
+ /** Public demo origin — set VITE_SITE_ORIGIN in Vercel to your deployment URL. */
2
+ export const siteOrigin =
3
+ (import.meta.env.VITE_SITE_ORIGIN as string | undefined)?.replace(/\/$/, '') ??
4
+ 'https://aeon-ui.com'
5
+
6
+ export const site = {
7
+ brand: 'Aeon UI',
8
+ tagline: 'Future-proof UI infrastructure for the web',
9
+ url: 'https://github.com/GenericCPU/aeon-ui',
10
+ siteOrigin,
11
+ repoCloneUrl: 'https://github.com/GenericCPU/aeon-ui.git',
12
+ studio: 'SpiderCorp',
13
+ studioUrl: 'https://spidercorp.xyz',
14
+
15
+ heroEyebrow: 'Future-proof UI · Statecharts · Design systems',
16
+ heroTitle: 'Future-proof UI for the modern web.',
17
+ heroAccent: 'Built to last.',
18
+ heroLead:
19
+ 'Statechart-driven primitives and a styled layer your team controls — dependable behavior today, room to grow tomorrow.',
20
+ heroSub:
21
+ 'Grounded in proven state theory and production-ready patterns for compound components, anatomy, and styling.',
22
+ heroCtaPrimary: 'See components',
23
+ heroCtaSecondary: 'View architecture',
24
+ heroInstallLabel: 'Early access',
25
+ heroInstallAccess: 'DM FOR EARLY ACCESS',
26
+ stateCardLabel: 'Example: fetch region',
27
+ stateCardHint: 'Five states on the rail. One active. Click Run.',
28
+
29
+ heroStats: [
30
+ {
31
+ label: 'Headless',
32
+ detail: 'Compound primitives and anatomy tokens — your brand, your CSS',
33
+ example: '<Switch.Root>\n <Switch.Control />\n</Switch.Root>',
34
+ },
35
+ {
36
+ label: 'Machines',
37
+ detail: 'Explicit states, guards, and hierarchy powered by XState',
38
+ example: "send({ type: 'FETCH' })",
39
+ },
40
+ {
41
+ label: 'Styled',
42
+ detail: 'Panda CSS slot recipes with thoughtful defaults you can extend',
43
+ example: "import { Button } from '@aeon-ui/ui'",
44
+ },
45
+ ],
46
+
47
+ layersLabel: 'Architecture',
48
+ layersTitle: 'Three layers. One coherent system.',
49
+ layersLead:
50
+ 'Headless behavior, explicit anatomy, and intentional styling — composed so your product can evolve without rewriting its foundations.',
51
+
52
+ diagramsLabel: 'Statecharts',
53
+ diagramsTitle: 'Diagrams from Aeon',
54
+ diagramsLead:
55
+ 'Executable XState models in @aeon-ui/primitives — rendered here as statecharts you can compare to live demos in the playground.',
56
+ statesDocUrl: 'https://github.com/GenericCPU/aeon-ui/blob/main/STATES.md',
57
+
58
+ playgroundLabel: 'Live',
59
+ playgroundTitle: 'Experience the components',
60
+ playgroundLead:
61
+ 'Every control runs on an executable XState model. Interact below and see predictable, reviewable behavior in action.',
62
+
63
+ philosophyLabel: 'Foundation',
64
+ philosophyTitle: 'Built on statecharts',
65
+ philosophyLead:
66
+ 'Thanh Nguyen’s research on statecharts for web applications informs how Aeon models interaction — clear states, clear transitions, lasting maintainability.',
67
+ thesisUrl:
68
+ 'https://www.theseus.fi/bitstream/handle/10024/334118/Thanh_Nguyen.pdf?sequence=2&isAllowed=y',
69
+ thesisCta: 'Read the thesis (PDF)',
70
+
71
+ faqLabel: 'FAQ',
72
+ faqTitle: 'Common questions',
73
+ faqLead: 'Straight answers for teams evaluating durable UI infrastructure.',
74
+ } as const
75
+
76
+ export const layers = [
77
+ {
78
+ id: 'core',
79
+ title: '@aeon-ui/core',
80
+ description: 'Philosophy, anatomy, and attributes your theme can target with confidence.',
81
+ highlights: ['asyncAnatomy, buttonAnatomy, …', 'stateToAttr(snapshot)', 'PHILOSOPHY.md + STATES.md'],
82
+ example: `import { partAttrs, asyncAnatomy } from '@aeon-ui/core'
83
+
84
+ partAttrs(asyncAnatomy.scope, asyncAnatomy.readout, {
85
+ state: 'loading',
86
+ })`,
87
+ },
88
+ {
89
+ id: 'react',
90
+ title: '@aeon-ui/react',
91
+ description: 'Headless React bindings where the interface reflects the machine snapshot.',
92
+ highlights: ['Async, Field, Dialog, Tabs', 'useAeonMachine(machine)', 'Compound parts'],
93
+ example: `import { Async, useAsyncContext } from '@aeon-ui/react'
94
+
95
+ <Async.Root>
96
+ <Async.Track />
97
+ <Async.Readout>{status}</Async.Readout>
98
+ </Async.Root>`,
99
+ },
100
+ {
101
+ id: 'ui',
102
+ title: '@aeon-ui/ui',
103
+ description: 'A polished styled layer — ship as-is or make it yours.',
104
+ highlights: ['Buttons, badges, panels', 'Panda slot recipes', 'Themes: light/dark × preset'],
105
+ example: `import { Async, Button } from '@aeon-ui/ui'
106
+
107
+ <Button.Root status="pending">Saving…</Button.Root>`,
108
+ },
109
+ ] as const
110
+
111
+ export const commitments = [
112
+ {
113
+ id: 'exclusive',
114
+ title: 'Clear states, clear UI',
115
+ description:
116
+ 'Each region holds one stable condition at a time — interfaces stay coherent as features grow.',
117
+ },
118
+ {
119
+ id: 'diagram',
120
+ title: 'Diagrammable by design',
121
+ description:
122
+ 'Behavior you can review, extend, and visualize alongside your team before adding complexity.',
123
+ },
124
+ {
125
+ id: 'defaults',
126
+ title: 'Your design system, fully yours',
127
+ description:
128
+ 'Unstyled primitives plus intentional tokens — every surface reflects your brand and your standards.',
129
+ },
130
+ ] as const
131
+
132
+ export const philosophyTenets = [
133
+ {
134
+ title: 'Write the chart first',
135
+ body: 'Decide every stable state and transition before you pick colors.',
136
+ example: `states: { idle: {}, loading: {}, success: {}, failure: {} }`,
137
+ },
138
+ {
139
+ title: 'UI = f(state)',
140
+ body: 'Components read one snapshot. Labels, disabled flags, and CSS all agree.',
141
+ example: `data-aeon-state="loading"`,
142
+ },
143
+ {
144
+ title: 'Show the full map',
145
+ body: 'Users see every state the machine allows — especially for async and forms.',
146
+ example: `<Async.Track /> {/* idle · loading · success · … */}`,
147
+ },
148
+ {
149
+ title: 'Scale with regions',
150
+ body: 'Split interaction, validation, and submission instead of one overloaded “error”.',
151
+ example: `interaction:dirty validation:invalid submission:pending`,
152
+ },
153
+ ] as const
154
+
155
+ export const playgroundBlocks = {
156
+ async: {
157
+ title: 'Async region',
158
+ description:
159
+ 'A fetch flow with five states. The rail always shows the full lifecycle; the readout and buttons match the active one.',
160
+ example: `import { Async, Button } from '@aeon-ui/ui'
161
+
162
+ <Async.Root>
163
+ <Async.Track />
164
+ <Async.Readout>Ready</Async.Readout>
165
+ <Async.Actions>
166
+ <Button.Root onClick={() => send({ type: 'FETCH' })}>
167
+ Fetch
168
+ </Button.Root>
169
+ </Async.Actions>
170
+ </Async.Root>`,
171
+ },
172
+ buttonLifecycle: {
173
+ title: 'Button lifecycle',
174
+ description:
175
+ 'Submit buttons need more than disabled. pending, success, and failure are real states — styled and announced.',
176
+ example: `<Button.Root status="pending" aria-busy>
177
+ Submitting…
178
+ </Button.Root>`,
179
+ },
180
+ scroll: {
181
+ title: 'Scroll regions',
182
+ description:
183
+ 'Theme-aware scrollbars on vertical, horizontal, and 2D overflow. Scroll position and axis show up on data-aeon-state (e.g. between-y, at-start-x).',
184
+ example: `import { Scroll } from '@aeon-ui/ui'
185
+
186
+ <Scroll.Root axis="both" maxH="md">
187
+ <Scroll.Viewport>
188
+ <Scroll.Content>{children}</Scroll.Content>
189
+ </Scroll.Viewport>
190
+ <Scroll.StateReadout />
191
+ </Scroll.Root>`,
192
+ },
193
+ field: {
194
+ title: 'Field regions',
195
+ description:
196
+ 'Three parallel regions: touched or not, valid or not, submitting or not. The root carries all three in data-aeon-state.',
197
+ example: `<Field.Root>
198
+ <Field.Label htmlFor="email">Email</Field.Label>
199
+ <Field.Control id="email" validate={isEmail} />
200
+ <Field.Message>Invalid email.</Field.Message>
201
+ </Field.Root>`,
202
+ },
203
+ buttons: {
204
+ title: 'Buttons',
205
+ description: 'Variants and sizes. Wrap groups in Button.Group for spacing.',
206
+ example: `<Button.Group>
207
+ <Button.Root>Primary</Button.Root>
208
+ <Button.Root variant="outline">Outline</Button.Root>
209
+ <Button.Root variant="ghost">Ghost</Button.Root>
210
+ </Button.Group>`,
211
+ },
212
+ toggle: {
213
+ title: 'Switch & checkbox',
214
+ description: 'Checked state lives in the machine. Pressed state is tracked for the thumb.',
215
+ example: `<Switch.Root defaultChecked>
216
+ <Switch.Control><Switch.Thumb /></Switch.Control>
217
+ <Switch.Label>Notifications</Switch.Label>
218
+ </Switch.Root>`,
219
+ },
220
+ dialog: {
221
+ title: 'Dialog',
222
+ description: 'open and closed are explicit. Escape and backdrop clicks are defined transitions.',
223
+ example: `<Dialog.Root>
224
+ <Dialog.Trigger>Open</Dialog.Trigger>
225
+ <Dialog.Content>
226
+ <Dialog.Title>Title</Dialog.Title>
227
+ <Dialog.CloseTrigger>Close</Dialog.CloseTrigger>
228
+ </Dialog.Content>
229
+ </Dialog.Root>`,
230
+ },
231
+ combobox: {
232
+ title: 'Combobox',
233
+ description:
234
+ 'Typeahead select built on the same listbox model as Select — filter options, arrow keys, Enter to commit.',
235
+ example: `import { Combobox } from '@aeon-ui/ui'
236
+
237
+ <Combobox.Root value={value} onValueChange={setValue}>
238
+ <Combobox.Input placeholder="Search…" aria-label="Country" />
239
+ <Combobox.Content>
240
+ <Combobox.Item value="us">United States</Combobox.Item>
241
+ <Combobox.Empty />
242
+ </Combobox.Content>
243
+ </Combobox.Root>`,
244
+ },
245
+ overlay: {
246
+ title: 'Menu, popover, tooltip & toast',
247
+ description:
248
+ 'Floating surfaces share an open/closed machine. Menu uses menu roles; toast uses polite live region.',
249
+ example: `import { Menu, Tooltip, Toast, useToast } from '@aeon-ui/ui'
250
+
251
+ // App root:
252
+ <Toast.Provider>
253
+ <App />
254
+ <Toast.Viewport placement="bottom-end" />
255
+ </Toast.Provider>
256
+
257
+ // Anywhere inside the provider:
258
+ const { publish } = useToast()
259
+ publish({ title: 'Saved', description: 'Changes applied.', durationMs: 4000 })`,
260
+ },
261
+ tabsAccordion: {
262
+ title: 'Tabs & accordion',
263
+ description: 'One active tab. Multiple accordion items can be open — each item has its own state.',
264
+ example: `<Tabs.Root defaultValue="a">
265
+ <Tabs.List>
266
+ <Tabs.Trigger value="a">Tab A</Tabs.Trigger>
267
+ </Tabs.List>
268
+ <Tabs.Content value="a">…</Tabs.Content>
269
+ </Tabs.Root>`,
270
+ },
271
+ } as const
272
+
273
+ export const tabsExamples = {
274
+ philosophy: {
275
+ label: 'Idea',
276
+ content: 'Define states in a chart. UI only shows conditions the chart allows.',
277
+ example: 'UI = f(snapshot)',
278
+ },
279
+ machines: {
280
+ label: 'Machines',
281
+ content: 'XState runs in the browser. Same model you sketch on a whiteboard.',
282
+ example: "import { createAsyncMachine } from '@aeon-ui/primitives'",
283
+ },
284
+ anatomy: {
285
+ label: 'Anatomy',
286
+ content: 'Style with data attributes — stable across refactors.',
287
+ example: '[data-aeon-scope="button"][data-aeon-state="pending"]',
288
+ },
289
+ } as const
290
+
291
+ export const accordionExamples = {
292
+ what: {
293
+ trigger: 'What is Aeon UI?',
294
+ content: 'Headless statechart components for React, plus an optional styled layer.',
295
+ example: 'git clone https://github.com/GenericCPU/aeon-ui.git',
296
+ },
297
+ why: {
298
+ trigger: 'Why statecharts?',
299
+ content: 'So async, forms, and modals stay explicit as products grow.',
300
+ example: 'See STATES.md in the repo for states traditional UI skips.',
301
+ },
302
+ } as const
303
+
304
+ export const faq = [
305
+ {
306
+ id: 'totality',
307
+ question: 'What does “UI = f(state)” mean?',
308
+ answer:
309
+ 'The machine snapshot picks what renders. If the chart has loading, you build loading UI — not a boolean you forgot to clear.',
310
+ example: `const status = snapshot.value // "loading"
311
+ <Async.Readout>{copy[status]}</Async.Readout>`,
312
+ },
313
+ {
314
+ id: 'structure',
315
+ question: 'How do components compose?',
316
+ answer:
317
+ 'Compound parts (Root, Track, Label, …) with data-aeon-scope and data-aeon-part. Behavior comes from XState machines in @aeon-ui/primitives.',
318
+ example: `<Checkbox.Root>
319
+ <Checkbox.Control />
320
+ <Checkbox.Label>Email me</Checkbox.Label>
321
+ </Checkbox.Root>`,
322
+ },
323
+ {
324
+ id: 'styling',
325
+ question: 'How do I style things?',
326
+ answer:
327
+ 'Target data-aeon-* in your CSS, or use @aeon-ui/ui recipes. Themes swap palettes on html[data-aeon-theme][data-aeon-mode].',
328
+ example: `import '@aeon-ui/panda/styles.css'
329
+ import { applyAeonTheme } from '@aeon-ui/panda/themes'
330
+
331
+ applyAeonTheme('signal', 'dark')`,
332
+ },
333
+ {
334
+ id: 'headless',
335
+ question: 'Headless only?',
336
+ answer:
337
+ 'Yes. Import @aeon-ui/react, bring your own CSS, and keep the same anatomy attributes.',
338
+ example: `import { Dialog } from '@aeon-ui/react'`,
339
+ },
340
+ {
341
+ id: 'roadmap',
342
+ question: 'What ships today?',
343
+ answer:
344
+ '14 headless primitives including Menu, Popover, Tooltip, and Toast; Panda themes; styled @aeon-ui/ui. See COMPONENTS.md for the full matrix.',
345
+ example: 'pnpm dev → localhost:5173',
346
+ },
347
+ ] as const
@@ -0,0 +1,17 @@
1
+ {
2
+ "extends": "../../tsconfig.base.json",
3
+ "compilerOptions": {
4
+ "noEmit": true,
5
+ "paths": {
6
+ "@aeon-ui/core": ["../../packages/core/src/index.ts"],
7
+ "@aeon-ui/primitives": ["../../packages/primitives/src/index.ts"],
8
+ "@aeon-ui/panda": ["../../packages/panda"],
9
+ "@aeon-ui/panda/themes": ["../../packages/panda/src/theme/index.ts"],
10
+ "@aeon-ui/panda/styled-system/css": ["../../packages/panda/styled-system/css/index.d.ts"],
11
+ "@aeon-ui/panda/styled-system/recipes": ["../../packages/panda/styled-system/recipes/index.d.ts"],
12
+ "@aeon-ui/react": ["../../packages/react/src/index.ts"],
13
+ "@aeon-ui/ui": ["../../packages/ui/src/index.ts"]
14
+ }
15
+ },
16
+ "include": ["src"]
17
+ }
@@ -0,0 +1,30 @@
1
+ import type { Plugin } from 'vite'
2
+ import { loadEnv } from 'vite'
3
+ import { absoluteUrl, openGraphHeadHtml } from '@aeon-ui/site'
4
+ import { og } from '../og.config.mjs'
5
+
6
+ export function ogMetaPlugin(mode: string): Plugin {
7
+ const env = loadEnv(mode, process.cwd(), '')
8
+ const siteOrigin = (env.VITE_SITE_ORIGIN ?? 'https://aeon-ui.com').replace(/\/$/, '')
9
+
10
+ return {
11
+ name: 'aeon-og-meta',
12
+ transformIndexHtml(html) {
13
+ const fragment = openGraphHeadHtml({
14
+ title: og.title,
15
+ description: og.description,
16
+ url: absoluteUrl(siteOrigin, '/'),
17
+ image: absoluteUrl(siteOrigin, og.imagePath),
18
+ imageAlt: og.imageAlt,
19
+ siteName: og.siteName,
20
+ themeColor: og.themeColor,
21
+ })
22
+ const canonical = `<link rel="canonical" href="${siteOrigin}/" />`
23
+ const icon = `<link rel="icon" href="/favicon.svg" type="image/svg+xml" />`
24
+ return html.replace(
25
+ '<!-- OG_META -->',
26
+ `${canonical}\n ${icon}\n ${fragment}`,
27
+ )
28
+ },
29
+ }
30
+ }
@@ -0,0 +1,69 @@
1
+ import path from 'node:path'
2
+ import { fileURLToPath } from 'node:url'
3
+ import react from '@vitejs/plugin-react'
4
+ import { defineConfig } from 'vite'
5
+ import { ogMetaPlugin } from './vite-plugins/og-meta.js'
6
+
7
+ const root = path.dirname(fileURLToPath(import.meta.url))
8
+ const packages = path.resolve(root, '../../packages')
9
+
10
+ /** More specific aliases must come first — `@aeon-ui/ui` → index.ts breaks `…/styles.css`. */
11
+ export default defineConfig(({ mode }) => ({
12
+ plugins: [react(), ogMetaPlugin(mode)],
13
+ server: {
14
+ port: 5173,
15
+ strictPort: false,
16
+ },
17
+ resolve: {
18
+ alias: [
19
+ {
20
+ find: '@aeon-ui/panda/styles.css',
21
+ replacement: path.join(packages, 'panda/styled-system/styles.css'),
22
+ },
23
+ {
24
+ find: '@aeon-ui/panda/theme-runtime.css',
25
+ replacement: path.join(packages, 'panda/theme-runtime.css'),
26
+ },
27
+ {
28
+ find: '@aeon-ui/panda/scrollbars.css',
29
+ replacement: path.join(packages, 'panda/src/theme/scrollbars.css'),
30
+ },
31
+ {
32
+ find: '@aeon-ui/panda/chrome.css',
33
+ replacement: path.join(packages, 'panda/src/theme/chrome.css'),
34
+ },
35
+ {
36
+ find: '@aeon-ui/panda/styled-system/css',
37
+ replacement: path.join(packages, 'panda/styled-system/css/index.mjs'),
38
+ },
39
+ {
40
+ find: '@aeon-ui/panda/styled-system/recipes',
41
+ replacement: path.join(packages, 'panda/styled-system/recipes/index.mjs'),
42
+ },
43
+ {
44
+ find: '@aeon-ui/panda/themes',
45
+ replacement: path.join(packages, 'panda/src/theme/index.ts'),
46
+ },
47
+ {
48
+ find: '@aeon-ui/ui/styles.css',
49
+ replacement: path.join(packages, 'ui/src/styles.css'),
50
+ },
51
+ { find: '@aeon-ui/core', replacement: path.join(packages, 'core/src/index.ts') },
52
+ { find: '@aeon-ui/primitives', replacement: path.join(packages, 'primitives/src/index.ts') },
53
+ { find: '@aeon-ui/react', replacement: path.join(packages, 'react/src/index.ts') },
54
+ { find: '@aeon-ui/ui', replacement: path.join(packages, 'ui/src/index.ts') },
55
+ { find: '@aeon-ui/panda', replacement: path.join(packages, 'panda') },
56
+ { find: '@aeon-ui/site', replacement: path.join(packages, 'site/src/index.ts') },
57
+ ],
58
+ },
59
+ optimizeDeps: {
60
+ include: [
61
+ '@aeon-ui/core',
62
+ '@aeon-ui/primitives',
63
+ '@aeon-ui/react',
64
+ '@aeon-ui/panda/themes',
65
+ '@aeon-ui/panda/styled-system/css',
66
+ '@aeon-ui/panda/styled-system/recipes',
67
+ ],
68
+ },
69
+ }))