aeon-ui-engine 1.0.3 → 1.2.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 (365) hide show
  1. package/CHANGELOG.md +34 -0
  2. package/CONSUMER.md +82 -40
  3. package/README.md +47 -16
  4. package/package.json +9 -2
  5. package/packages/cli/README.md +17 -0
  6. package/packages/cli/dist/bin.d.ts +1 -0
  7. package/packages/cli/dist/bin.js +35 -0
  8. package/packages/cli/dist/chunk-IW5NT2Z2.js +103 -0
  9. package/packages/cli/dist/index.d.ts +10 -0
  10. package/packages/cli/dist/index.js +6 -0
  11. package/packages/cli/node_modules/.bin/esbuild +21 -0
  12. package/packages/cli/node_modules/.bin/jiti +21 -0
  13. package/packages/cli/node_modules/.bin/tsc +21 -0
  14. package/packages/cli/node_modules/.bin/tsserver +21 -0
  15. package/packages/cli/node_modules/.bin/tsup +21 -0
  16. package/packages/cli/node_modules/.bin/tsup-node +21 -0
  17. package/packages/cli/node_modules/.bin/tsx +21 -0
  18. package/packages/cli/node_modules/.bin/vite +21 -0
  19. package/packages/cli/node_modules/.bin/vitest +21 -0
  20. package/packages/cli/package.json +50 -0
  21. package/packages/cli/src/bin.ts +34 -0
  22. package/packages/cli/src/index.ts +1 -0
  23. package/packages/cli/src/init.ts +107 -0
  24. package/packages/cli/tsconfig.json +10 -0
  25. package/packages/core/README.md +7 -1
  26. package/packages/core/dist/index.d.ts +255 -7
  27. package/packages/core/dist/index.js +372 -2
  28. package/packages/core/node_modules/.bin/esbuild +4 -4
  29. package/packages/core/node_modules/.bin/vite +4 -4
  30. package/packages/core/node_modules/.bin/vitest +2 -2
  31. package/packages/core/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -1
  32. package/packages/core/package.json +17 -5
  33. package/packages/core/src/anatomy.ts +234 -5
  34. package/packages/core/src/brand-theme.ts +172 -0
  35. package/packages/core/src/index.ts +1 -0
  36. package/packages/core/src/machine.test.ts +62 -1
  37. package/packages/core/src/machine.ts +93 -0
  38. package/packages/core/src/theme.ts +105 -0
  39. package/packages/panda/aeon.css +8 -0
  40. package/packages/panda/package.json +1 -1
  41. package/packages/panda/panda.config.ts +58 -1
  42. package/packages/panda/src/recipes/app-shell.ts +137 -0
  43. package/packages/panda/src/recipes/avatar.ts +131 -0
  44. package/packages/panda/src/recipes/bar.ts +206 -0
  45. package/packages/panda/src/recipes/button-group.ts +12 -4
  46. package/packages/panda/src/recipes/button.ts +1 -0
  47. package/packages/panda/src/recipes/combobox.ts +2 -1
  48. package/packages/panda/src/recipes/composer.ts +81 -0
  49. package/packages/panda/src/recipes/content.ts +104 -0
  50. package/packages/panda/src/recipes/conversation.ts +106 -0
  51. package/packages/panda/src/recipes/entry.ts +217 -0
  52. package/packages/panda/src/recipes/field.ts +12 -2
  53. package/packages/panda/src/recipes/floating.ts +26 -13
  54. package/packages/panda/src/recipes/identity.ts +73 -0
  55. package/packages/panda/src/recipes/index.ts +15 -0
  56. package/packages/panda/src/recipes/list-row.ts +109 -0
  57. package/packages/panda/src/recipes/metric-strip.ts +80 -0
  58. package/packages/panda/src/recipes/nav.ts +155 -0
  59. package/packages/panda/src/recipes/panel.ts +156 -0
  60. package/packages/panda/src/recipes/pin-input.ts +3 -2
  61. package/packages/panda/src/recipes/profile-header.ts +120 -0
  62. package/packages/panda/src/recipes/select.ts +2 -1
  63. package/packages/panda/src/recipes/slider.ts +6 -4
  64. package/packages/panda/src/recipes/theme-switcher.ts +110 -0
  65. package/packages/panda/src/recipes/thread.ts +88 -0
  66. package/packages/panda/src/theme/catalog-types.ts +2 -0
  67. package/packages/panda/src/theme/catalog.ts +23 -0
  68. package/packages/panda/src/theme/chrome.css +2 -1
  69. package/packages/panda/src/theme/consumer-shell.css +129 -0
  70. package/packages/panda/src/theme/electron.css +30 -0
  71. package/packages/panda/src/theme/global-theme-css.ts +9 -0
  72. package/packages/panda/src/theme/omarchy.themes.ts +607 -0
  73. package/packages/panda/src/theme/palette.ts +3 -0
  74. package/packages/panda/src/theme/scrollbars.css +58 -21
  75. package/packages/panda/src/theme/themes.config.ts +39 -1
  76. package/packages/panda/styled-system/css/conditions.mjs +1 -1
  77. package/packages/panda/styled-system/css/css.mjs +1 -1
  78. package/packages/panda/styled-system/css/sva.mjs +9 -4
  79. package/packages/panda/styled-system/helpers.mjs +11 -22
  80. package/packages/panda/styled-system/jsx/create-style-context.d.ts +54 -0
  81. package/packages/panda/styled-system/jsx/create-style-context.mjs +121 -0
  82. package/packages/panda/styled-system/jsx/factory.mjs +14 -5
  83. package/packages/panda/styled-system/jsx/index.d.ts +1 -0
  84. package/packages/panda/styled-system/jsx/index.mjs +1 -0
  85. package/packages/panda/styled-system/jsx/is-valid-prop.mjs +2 -2
  86. package/packages/panda/styled-system/patterns/aspect-ratio.d.ts +0 -1
  87. package/packages/panda/styled-system/patterns/bleed.d.ts +0 -1
  88. package/packages/panda/styled-system/patterns/box.d.ts +0 -1
  89. package/packages/panda/styled-system/patterns/center.d.ts +0 -1
  90. package/packages/panda/styled-system/patterns/circle.d.ts +0 -1
  91. package/packages/panda/styled-system/patterns/container.d.ts +0 -1
  92. package/packages/panda/styled-system/patterns/cq.d.ts +0 -1
  93. package/packages/panda/styled-system/patterns/divider.d.ts +0 -1
  94. package/packages/panda/styled-system/patterns/flex.d.ts +0 -1
  95. package/packages/panda/styled-system/patterns/float.d.ts +0 -1
  96. package/packages/panda/styled-system/patterns/grid-item.d.ts +0 -1
  97. package/packages/panda/styled-system/patterns/grid.d.ts +0 -1
  98. package/packages/panda/styled-system/patterns/grid.mjs +1 -1
  99. package/packages/panda/styled-system/patterns/hstack.d.ts +0 -1
  100. package/packages/panda/styled-system/patterns/hstack.mjs +1 -1
  101. package/packages/panda/styled-system/patterns/link-overlay.d.ts +0 -1
  102. package/packages/panda/styled-system/patterns/spacer.d.ts +0 -1
  103. package/packages/panda/styled-system/patterns/spacer.mjs +6 -2
  104. package/packages/panda/styled-system/patterns/square.d.ts +0 -1
  105. package/packages/panda/styled-system/patterns/stack.d.ts +0 -1
  106. package/packages/panda/styled-system/patterns/stack.mjs +1 -1
  107. package/packages/panda/styled-system/patterns/visually-hidden.d.ts +0 -1
  108. package/packages/panda/styled-system/patterns/vstack.d.ts +0 -1
  109. package/packages/panda/styled-system/patterns/vstack.mjs +1 -1
  110. package/packages/panda/styled-system/patterns/wrap.d.ts +0 -1
  111. package/packages/panda/styled-system/patterns/wrap.mjs +1 -1
  112. package/packages/panda/styled-system/recipes/aeon-accordion.d.ts +4 -3
  113. package/packages/panda/styled-system/recipes/aeon-accordion.mjs +1 -0
  114. package/packages/panda/styled-system/recipes/aeon-app-shell.d.ts +34 -0
  115. package/packages/panda/styled-system/recipes/aeon-app-shell.mjs +70 -0
  116. package/packages/panda/styled-system/recipes/aeon-async.d.ts +4 -3
  117. package/packages/panda/styled-system/recipes/aeon-async.mjs +1 -0
  118. package/packages/panda/styled-system/recipes/aeon-avatar.d.ts +36 -0
  119. package/packages/panda/styled-system/recipes/aeon-avatar.mjs +57 -0
  120. package/packages/panda/styled-system/recipes/aeon-badge.d.ts +3 -0
  121. package/packages/panda/styled-system/recipes/aeon-bar.d.ts +40 -0
  122. package/packages/panda/styled-system/recipes/aeon-bar.mjs +77 -0
  123. package/packages/panda/styled-system/recipes/aeon-button-group.d.ts +3 -2
  124. package/packages/panda/styled-system/recipes/aeon-button.d.ts +3 -2
  125. package/packages/panda/styled-system/recipes/aeon-checkbox.d.ts +4 -1
  126. package/packages/panda/styled-system/recipes/aeon-checkbox.mjs +1 -0
  127. package/packages/panda/styled-system/recipes/aeon-combobox.d.ts +4 -3
  128. package/packages/panda/styled-system/recipes/aeon-combobox.mjs +1 -0
  129. package/packages/panda/styled-system/recipes/aeon-composer.d.ts +31 -0
  130. package/packages/panda/styled-system/recipes/aeon-composer.mjs +45 -0
  131. package/packages/panda/styled-system/recipes/aeon-content.d.ts +34 -0
  132. package/packages/panda/styled-system/recipes/aeon-content.mjs +70 -0
  133. package/packages/panda/styled-system/recipes/aeon-conversation.d.ts +31 -0
  134. package/packages/panda/styled-system/recipes/aeon-conversation.mjs +61 -0
  135. package/packages/panda/styled-system/recipes/aeon-dialog.d.ts +4 -1
  136. package/packages/panda/styled-system/recipes/aeon-dialog.mjs +1 -0
  137. package/packages/panda/styled-system/recipes/aeon-entry.d.ts +38 -0
  138. package/packages/panda/styled-system/recipes/aeon-entry.mjs +100 -0
  139. package/packages/panda/styled-system/recipes/aeon-field.d.ts +4 -3
  140. package/packages/panda/styled-system/recipes/aeon-field.mjs +1 -0
  141. package/packages/panda/styled-system/recipes/aeon-identity.d.ts +36 -0
  142. package/packages/panda/styled-system/recipes/aeon-identity.mjs +63 -0
  143. package/packages/panda/styled-system/recipes/aeon-list-row.d.ts +33 -0
  144. package/packages/panda/styled-system/recipes/aeon-list-row.mjs +49 -0
  145. package/packages/panda/styled-system/recipes/aeon-menu.d.ts +4 -1
  146. package/packages/panda/styled-system/recipes/aeon-menu.mjs +1 -0
  147. package/packages/panda/styled-system/recipes/aeon-metric-strip.d.ts +36 -0
  148. package/packages/panda/styled-system/recipes/aeon-metric-strip.mjs +54 -0
  149. package/packages/panda/styled-system/recipes/aeon-nav.d.ts +38 -0
  150. package/packages/panda/styled-system/recipes/aeon-nav.mjs +69 -0
  151. package/packages/panda/styled-system/recipes/aeon-panel.d.ts +34 -0
  152. package/packages/panda/styled-system/recipes/aeon-panel.mjs +58 -0
  153. package/packages/panda/styled-system/recipes/aeon-pin-input.d.ts +4 -1
  154. package/packages/panda/styled-system/recipes/aeon-pin-input.mjs +1 -0
  155. package/packages/panda/styled-system/recipes/aeon-popover.d.ts +4 -1
  156. package/packages/panda/styled-system/recipes/aeon-popover.mjs +1 -0
  157. package/packages/panda/styled-system/recipes/aeon-profile-header.d.ts +36 -0
  158. package/packages/panda/styled-system/recipes/aeon-profile-header.mjs +62 -0
  159. package/packages/panda/styled-system/recipes/aeon-progress.d.ts +4 -1
  160. package/packages/panda/styled-system/recipes/aeon-progress.mjs +1 -0
  161. package/packages/panda/styled-system/recipes/aeon-radio-group.d.ts +4 -1
  162. package/packages/panda/styled-system/recipes/aeon-radio-group.mjs +1 -0
  163. package/packages/panda/styled-system/recipes/aeon-scroll.d.ts +4 -3
  164. package/packages/panda/styled-system/recipes/aeon-scroll.mjs +1 -0
  165. package/packages/panda/styled-system/recipes/aeon-select.d.ts +4 -3
  166. package/packages/panda/styled-system/recipes/aeon-select.mjs +1 -0
  167. package/packages/panda/styled-system/recipes/aeon-separator.d.ts +4 -1
  168. package/packages/panda/styled-system/recipes/aeon-separator.mjs +1 -0
  169. package/packages/panda/styled-system/recipes/aeon-slider.d.ts +4 -1
  170. package/packages/panda/styled-system/recipes/aeon-slider.mjs +1 -0
  171. package/packages/panda/styled-system/recipes/aeon-switch.d.ts +4 -1
  172. package/packages/panda/styled-system/recipes/aeon-switch.mjs +1 -0
  173. package/packages/panda/styled-system/recipes/aeon-tabs.d.ts +4 -1
  174. package/packages/panda/styled-system/recipes/aeon-tabs.mjs +1 -0
  175. package/packages/panda/styled-system/recipes/aeon-theme-switcher.d.ts +34 -0
  176. package/packages/panda/styled-system/recipes/aeon-theme-switcher.mjs +59 -0
  177. package/packages/panda/styled-system/recipes/aeon-thread.d.ts +31 -0
  178. package/packages/panda/styled-system/recipes/aeon-thread.mjs +53 -0
  179. package/packages/panda/styled-system/recipes/aeon-toast.d.ts +4 -1
  180. package/packages/panda/styled-system/recipes/aeon-toast.mjs +1 -0
  181. package/packages/panda/styled-system/recipes/aeon-tooltip.d.ts +4 -1
  182. package/packages/panda/styled-system/recipes/aeon-tooltip.mjs +1 -0
  183. package/packages/panda/styled-system/recipes/index.d.ts +16 -1
  184. package/packages/panda/styled-system/recipes/index.mjs +16 -1
  185. package/packages/panda/styled-system/styles.css +2317 -450
  186. package/packages/panda/styled-system/tokens/index.mjs +43 -7
  187. package/packages/panda/styled-system/tokens/tokens.d.ts +5 -5
  188. package/packages/panda/styled-system/types/composition.d.ts +86 -23
  189. package/packages/panda/styled-system/types/conditions.d.ts +34 -10
  190. package/packages/panda/styled-system/types/csstype.d.ts +6405 -5133
  191. package/packages/panda/styled-system/types/jsx.d.ts +27 -10
  192. package/packages/panda/styled-system/types/pattern.d.ts +4 -4
  193. package/packages/panda/styled-system/types/prop-type.d.ts +11 -1
  194. package/packages/panda/styled-system/types/style-props.d.ts +2763 -2165
  195. package/packages/panda/styled-system/types/system-types.d.ts +38 -80
  196. package/packages/panda/theme-runtime.css +945 -0
  197. package/packages/primitives/dist/chunk-4NOKRUSG.js +81 -0
  198. package/packages/primitives/dist/chunk-R25CUHNF.js +46 -0
  199. package/packages/primitives/dist/chunk-RO2DMFN5.js +89 -0
  200. package/packages/primitives/dist/chunk-V5D7LS4J.js +61 -0
  201. package/packages/primitives/dist/chunk-YBPNI2LI.js +70 -0
  202. package/packages/primitives/dist/index.d.ts +5 -0
  203. package/packages/primitives/dist/index.js +46 -14
  204. package/packages/primitives/dist/machines/app-nav.d.ts +96 -0
  205. package/packages/primitives/dist/machines/app-nav.js +12 -0
  206. package/packages/primitives/dist/machines/app-shell.d.ts +57 -0
  207. package/packages/primitives/dist/machines/app-shell.js +8 -0
  208. package/packages/primitives/dist/machines/async.d.ts +4 -4
  209. package/packages/primitives/dist/machines/content-region.d.ts +72 -0
  210. package/packages/primitives/dist/machines/content-region.js +8 -0
  211. package/packages/primitives/dist/machines/panel.d.ts +50 -0
  212. package/packages/primitives/dist/machines/panel.js +6 -0
  213. package/packages/primitives/dist/machines/sticky-bar.d.ts +62 -0
  214. package/packages/primitives/dist/machines/sticky-bar.js +8 -0
  215. package/packages/primitives/node_modules/.bin/esbuild +21 -0
  216. package/packages/primitives/node_modules/.bin/vite +21 -0
  217. package/packages/primitives/node_modules/.bin/vitest +2 -2
  218. package/packages/primitives/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -1
  219. package/packages/primitives/package.json +15 -5
  220. package/packages/primitives/scripts/xstate-introspect.mjs +35 -0
  221. package/packages/primitives/src/__tests__/app-nav.test.ts +30 -0
  222. package/packages/primitives/src/index.ts +5 -0
  223. package/packages/primitives/src/machines/app-nav.ts +107 -0
  224. package/packages/primitives/src/machines/app-shell.ts +63 -0
  225. package/packages/primitives/src/machines/content-region.ts +107 -0
  226. package/packages/primitives/src/machines/panel.ts +71 -0
  227. package/packages/primitives/src/machines/sticky-bar.ts +89 -0
  228. package/packages/react/dist/index.d.ts +536 -17
  229. package/packages/react/dist/index.js +2163 -479
  230. package/packages/react/node_modules/.bin/esbuild +21 -0
  231. package/packages/react/node_modules/.bin/vite +21 -0
  232. package/packages/react/node_modules/.bin/vitest +2 -2
  233. package/packages/react/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -1
  234. package/packages/react/package.json +18 -7
  235. package/packages/react/src/app-nav/index.tsx +249 -0
  236. package/packages/react/src/app-shell/index.tsx +154 -0
  237. package/packages/react/src/async/index.tsx +6 -1
  238. package/packages/react/src/async/map-content-state.ts +18 -0
  239. package/packages/react/src/avatar/index.tsx +23 -1
  240. package/packages/react/src/bar/index.tsx +101 -0
  241. package/packages/react/src/button/index.tsx +4 -2
  242. package/packages/react/src/composer/index.tsx +75 -0
  243. package/packages/react/src/content/index.tsx +149 -0
  244. package/packages/react/src/conversation/index.tsx +78 -0
  245. package/packages/react/src/entry/index.tsx +85 -0
  246. package/packages/react/src/field/index.tsx +31 -18
  247. package/packages/react/src/hooks/use-fit-text.ts +59 -0
  248. package/packages/react/src/identity/index.tsx +110 -0
  249. package/packages/react/src/index.ts +19 -0
  250. package/packages/react/src/list-row/index.tsx +80 -0
  251. package/packages/react/src/metric-strip/index.tsx +88 -0
  252. package/packages/react/src/nav/index.tsx +155 -0
  253. package/packages/react/src/panel/index.tsx +267 -0
  254. package/packages/react/src/profile-header/index.tsx +91 -0
  255. package/packages/react/src/prompt/index.tsx +161 -0
  256. package/packages/react/src/radio-group/index.tsx +19 -7
  257. package/packages/react/src/slider/index.tsx +3 -1
  258. package/packages/react/src/status-banner/index.tsx +84 -0
  259. package/packages/react/src/sticky-bar/index.tsx +135 -0
  260. package/packages/react/src/switch/index.tsx +7 -1
  261. package/packages/react/src/theme-switcher/index.tsx +227 -0
  262. package/packages/react/src/thread/index.tsx +95 -0
  263. package/packages/react/src/toast/primitives.tsx +2 -2
  264. package/packages/react/src/tooltip/tooltip.test.tsx +9 -1
  265. package/packages/react/tsconfig.json +2 -1
  266. package/packages/schemas/README.md +52 -0
  267. package/packages/schemas/dist/index.d.ts +287 -0
  268. package/packages/schemas/dist/index.js +701 -0
  269. package/packages/schemas/json/accordion.json +132 -0
  270. package/packages/schemas/json/async.json +161 -0
  271. package/packages/schemas/json/button.json +170 -0
  272. package/packages/schemas/json/catalog.json +2299 -0
  273. package/packages/schemas/json/checkbox.json +136 -0
  274. package/packages/schemas/json/combobox.json +130 -0
  275. package/packages/schemas/json/dialog.json +154 -0
  276. package/packages/schemas/json/field.json +171 -0
  277. package/packages/schemas/json/menu.json +138 -0
  278. package/packages/schemas/json/popover.json +133 -0
  279. package/packages/schemas/json/progress.json +137 -0
  280. package/packages/schemas/json/scroll.json +129 -0
  281. package/packages/schemas/json/select.json +140 -0
  282. package/packages/schemas/json/switch.json +136 -0
  283. package/packages/schemas/json/tabs.json +135 -0
  284. package/packages/schemas/json/toast.json +141 -0
  285. package/packages/schemas/json/tooltip.json +123 -0
  286. package/packages/schemas/node_modules/.bin/esbuild +21 -0
  287. package/packages/schemas/node_modules/.bin/jiti +21 -0
  288. package/packages/schemas/node_modules/.bin/tsc +21 -0
  289. package/packages/schemas/node_modules/.bin/tsserver +21 -0
  290. package/packages/schemas/node_modules/.bin/tsup +21 -0
  291. package/packages/schemas/node_modules/.bin/tsup-node +21 -0
  292. package/packages/schemas/node_modules/.bin/tsx +21 -0
  293. package/packages/schemas/node_modules/.bin/vite +21 -0
  294. package/packages/schemas/node_modules/.bin/vitest +21 -0
  295. package/packages/schemas/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -0
  296. package/packages/schemas/package.json +56 -0
  297. package/packages/schemas/prompts/cursorrules.md +64 -0
  298. package/packages/schemas/prompts/statecharts.md +31 -0
  299. package/packages/schemas/prompts/system.md +30 -0
  300. package/packages/schemas/registry/catalog.json +54 -0
  301. package/packages/schemas/registry/components/accordion.json +132 -0
  302. package/packages/schemas/registry/components/async.json +161 -0
  303. package/packages/schemas/registry/components/button.json +170 -0
  304. package/packages/schemas/registry/components/checkbox.json +136 -0
  305. package/packages/schemas/registry/components/combobox.json +130 -0
  306. package/packages/schemas/registry/components/dialog.json +154 -0
  307. package/packages/schemas/registry/components/field.json +171 -0
  308. package/packages/schemas/registry/components/menu.json +138 -0
  309. package/packages/schemas/registry/components/popover.json +133 -0
  310. package/packages/schemas/registry/components/progress.json +137 -0
  311. package/packages/schemas/registry/components/scroll.json +129 -0
  312. package/packages/schemas/registry/components/select.json +140 -0
  313. package/packages/schemas/registry/components/switch.json +136 -0
  314. package/packages/schemas/registry/components/tabs.json +135 -0
  315. package/packages/schemas/registry/components/toast.json +141 -0
  316. package/packages/schemas/registry/components/tooltip.json +123 -0
  317. package/packages/schemas/registry/machines/async.json +219 -0
  318. package/packages/schemas/registry/machines/buttonLifecycle.json +224 -0
  319. package/packages/schemas/registry/machines/dialog.json +143 -0
  320. package/packages/schemas/registry/machines/field.json +275 -0
  321. package/packages/schemas/scripts/emit.ts +61 -0
  322. package/packages/schemas/src/aeon-to-schema.test.ts +70 -0
  323. package/packages/schemas/src/aeon-to-schema.ts +206 -0
  324. package/packages/schemas/src/agent-bridge.ts +82 -0
  325. package/packages/schemas/src/components.ts +307 -0
  326. package/packages/schemas/src/index.test.ts +25 -0
  327. package/packages/schemas/src/index.ts +25 -0
  328. package/packages/schemas/src/prompts.ts +121 -0
  329. package/packages/schemas/src/registry.ts +73 -0
  330. package/packages/schemas/src/schema-builder.ts +87 -0
  331. package/packages/schemas/tsconfig.json +9 -0
  332. package/packages/solid/package.json +2 -2
  333. package/packages/svelte/node_modules/.bin/esbuild +21 -0
  334. package/packages/svelte/node_modules/.bin/vite +4 -4
  335. package/packages/svelte/package.json +15 -5
  336. package/packages/ui/README.md +19 -6
  337. package/packages/ui/dist/index.d.ts +254 -9
  338. package/packages/ui/dist/index.js +690 -139
  339. package/packages/ui/src/app-nav.tsx +2 -0
  340. package/packages/ui/src/app-shell.tsx +44 -0
  341. package/packages/ui/src/async.tsx +2 -1
  342. package/packages/ui/src/avatar.tsx +35 -0
  343. package/packages/ui/src/bar.tsx +34 -0
  344. package/packages/ui/src/composer.tsx +27 -0
  345. package/packages/ui/src/content.tsx +43 -0
  346. package/packages/ui/src/conversation.tsx +43 -0
  347. package/packages/ui/src/entry.tsx +76 -0
  348. package/packages/ui/src/field.tsx +5 -0
  349. package/packages/ui/src/identity.tsx +35 -0
  350. package/packages/ui/src/index.ts +20 -0
  351. package/packages/ui/src/list-row.tsx +30 -0
  352. package/packages/ui/src/metric-strip.tsx +29 -0
  353. package/packages/ui/src/nav.tsx +46 -0
  354. package/packages/ui/src/panel.tsx +39 -0
  355. package/packages/ui/src/profile-header.tsx +35 -0
  356. package/packages/ui/src/prompt.tsx +29 -0
  357. package/packages/ui/src/status-banner.tsx +1 -0
  358. package/packages/ui/src/sticky-bar.tsx +42 -0
  359. package/packages/ui/src/switch.tsx +17 -4
  360. package/packages/ui/src/theme-switcher.tsx +41 -0
  361. package/packages/ui/src/thread.tsx +35 -0
  362. package/packages/vue/package.json +3 -3
  363. package/scripts/vite-aliases.mjs +65 -3
  364. package/scripts/xstate-introspect.mjs +68 -0
  365. package/packages/react/src/async/legacy-region.tsx +0 -38
package/CHANGELOG.md CHANGED
@@ -5,6 +5,38 @@ All notable changes to **aeon-ui-engine** are documented here.
5
5
  Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
6
6
  Versioning follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [1.2.0] - 2026-07-30
9
+
10
+ ### Added
11
+
12
+ - **Brand palette bridge** — `applyBrandPalette`, `normalizeBrandPalette`, `brandPaletteToCssText` map product tokens onto Aeon CSS vars without a parallel token sheet.
13
+ - **AppNav** — `appNavMachine` + `AppNav` / `useAppNavMachine` for section + detail stack navigation with breadcrumb/back parts.
14
+ - **Prompt** — confirm/permission-style compound on top of Dialog (`eyebrow`, `meta`, `amount`, `actions`).
15
+ - **StatusBanner** — non-blocking top-of-app notice compound.
16
+ - **`useFitText`** — shrink-to-fit metric/title helper.
17
+ - **Consumer shell CSS** — baseline Prompt / StatusBanner / AppNav styles in `aeon.css`.
18
+ - **Electron chrome CSS** — optional `@aeon-ui/panda/electron.css` titlebar drag helpers.
19
+ - Docs: [PRODUCT_SHELL.md](./docs/PRODUCT_SHELL.md).
20
+
21
+ ### Changed
22
+
23
+ - Avatar root also projects `ready` alongside `loaded` for friendlier product CSS.
24
+ - `aeonUiVitePlugin` aliases include consumer-shell and electron CSS paths.
25
+
26
+ ## [1.1.0] - 2026-07-30
27
+
28
+ ### Added
29
+
30
+ - App-shell and layout primitives: Panel, Nav, StickyBar, ListRow, MetricStrip, ProfileHeader.
31
+ - Messaging / conversation surfaces: Entry, Field updates, Thread, Identity.
32
+ - ThemeSwitcher and expanded Instant / compose demo tooling.
33
+ - Schema catalog and generative compose improvements for chart-first Instant projection.
34
+
35
+ ### Changed
36
+
37
+ - Instant runs as a two-pass chart→faces compiler with real XState.
38
+ - Demo landing and builder aligned to state-first UX and per-page statecharts.
39
+
8
40
  ## [1.0.3] - 2026-06-02
9
41
 
10
42
  ### Added
@@ -45,6 +77,8 @@ Versioning follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
45
77
 
46
78
  - Initial npm release of **aeon-ui-engine** — monorepo bundle with headless statechart primitives, React bindings, Panda styled layer, and themes.
47
79
 
80
+ [1.2.0]: https://github.com/GenericCPU/aeon-ui/compare/v1.1.0...v1.2.0
81
+ [1.1.0]: https://github.com/GenericCPU/aeon-ui/compare/v1.0.3...v1.1.0
48
82
  [1.0.3]: https://github.com/GenericCPU/aeon-ui/compare/v1.0.2...v1.0.3
49
83
  [1.0.2]: https://github.com/GenericCPU/aeon-ui/compare/v1.0.1...v1.0.2
50
84
  [1.0.1]: https://github.com/GenericCPU/aeon-ui/compare/v1.0.0...v1.0.1
package/CONSUMER.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Using `aeon-ui-engine` from npm
2
2
 
3
- The npm package **`aeon-ui-engine`** ships the full `@aeon-ui/*` workspace (source + prebuilt Panda CSS). Scoped packages like `@aeon-ui/react` are **not** separate npm installs — wire them through Vite (or your bundler) after installing the engine.
3
+ One package. One plugin. Done.
4
4
 
5
5
  ## 1. Install
6
6
 
@@ -8,79 +8,121 @@ The npm package **`aeon-ui-engine`** ships the full `@aeon-ui/*` workspace (sour
8
8
  npm install aeon-ui-engine react react-dom xstate @xstate/react
9
9
  ```
10
10
 
11
- Use the same peer versions your app already runs (`react` 18 or 19).
12
-
13
- ## 2. Vite aliases (required)
14
-
15
- `@aeon-ui/*` imports resolve through aliases bundled with the engine:
11
+ ## 2. Vite plugin
16
12
 
17
13
  ```ts
18
14
  // vite.config.ts
19
15
  import react from '@vitejs/plugin-react'
20
16
  import { defineConfig } from 'vite'
21
- import { aeonUiOptimizeDeps, aeonUiViteAliases } from 'aeon-ui-engine/vite'
17
+ import { aeonUiVitePlugin } from 'aeon-ui-engine/vite'
22
18
 
23
19
  export default defineConfig({
24
- plugins: [react()],
25
- resolve: {
26
- alias: aeonUiViteAliases(),
27
- },
28
- optimizeDeps: aeonUiOptimizeDeps(),
20
+ plugins: [react(), aeonUiVitePlugin()],
29
21
  })
30
22
  ```
31
23
 
32
- Optional: point at a local monorepo checkout instead of npm (contributors):
24
+ ## 3. Import CSS (one line)
33
25
 
34
- ```ts
35
- aeonUiViteAliases({ packagesRoot: '/path/to/aeon-ui/packages' })
36
- // or set AEON_UI_ROOT=/path/to/aeon-ui
26
+ ```tsx
27
+ // main.tsx or app entry
28
+ import 'aeon-ui-engine/aeon.css'
29
+ ```
30
+
31
+ ## 4. Use components
32
+
33
+ ```tsx
34
+ import { Button, Dialog, Menu, Toast } from '@aeon-ui/ui'
37
35
  ```
38
36
 
39
- ## 3. TypeScript paths
37
+ That's it. The plugin handles all `@aeon-ui/*` aliases, TypeScript paths, and optimizeDeps.
40
38
 
41
- Extend the engine base config and map scoped imports to the bundled packages:
39
+ ---
40
+
41
+ ## Optional: TypeScript
42
+
43
+ If your tsconfig doesn't extend the engine base:
42
44
 
43
45
  ```json
44
46
  {
45
- "extends": "../node_modules/aeon-ui-engine/tsconfig.base.json",
46
47
  "compilerOptions": {
47
48
  "paths": {
48
- "@aeon-ui/core": ["../node_modules/aeon-ui-engine/packages/core/src/index.ts"],
49
- "@aeon-ui/primitives": ["../node_modules/aeon-ui-engine/packages/primitives/src/index.ts"],
50
- "@aeon-ui/react": ["../node_modules/aeon-ui-engine/packages/react/src/index.ts"],
51
- "@aeon-ui/ui": ["../node_modules/aeon-ui-engine/packages/ui/src/index.ts"],
52
- "@aeon-ui/surface": ["../node_modules/aeon-ui-engine/packages/surface/src/index.ts"],
53
- "@aeon-ui/panda/styled-system/css": [
54
- "../node_modules/aeon-ui-engine/packages/panda/styled-system/css/index.d.ts"
55
- ],
56
- "@aeon-ui/panda/styled-system/recipes": [
57
- "../node_modules/aeon-ui-engine/packages/panda/styled-system/recipes/index.d.ts"
58
- ]
49
+ "@aeon-ui/*": ["./node_modules/aeon-ui-engine/packages/*/src"]
59
50
  }
60
51
  }
61
52
  }
62
53
  ```
63
54
 
64
- Adjust `../node_modules/…` if your app tsconfig lives deeper than one folder from the repo root.
55
+ Or extend directly:
65
56
 
66
- ## 4. Import CSS once (styled layer)
57
+ ```json
58
+ {
59
+ "extends": "aeon-ui-engine/tsconfig.base.json"
60
+ }
61
+ ```
62
+
63
+ ## Optional: Brand palette (skip catalog themes)
64
+
65
+ If your product already has tokens, map them onto Aeon CSS vars once at boot:
66
+
67
+ ```ts
68
+ import { applyBrandPalette } from '@aeon-ui/core'
69
+
70
+ applyBrandPalette(
71
+ {
72
+ bg: '#000000',
73
+ surface: '#0a0a0a',
74
+ border: '#262626',
75
+ text: '#fafafa',
76
+ muted: '#a1a1aa',
77
+ accent: '#57ff97',
78
+ font: "'Archivo', system-ui, sans-serif",
79
+ },
80
+ { mode: 'dark' },
81
+ )
82
+ ```
83
+
84
+ Then use `@aeon-ui/ui` without maintaining a parallel `--product-*` token sheet
85
+ for Aeon components. See [docs/PRODUCT_SHELL.md](./docs/PRODUCT_SHELL.md).
86
+
87
+ ## Optional: Product shell compounds
67
88
 
68
89
  ```tsx
69
- import '@aeon-ui/panda/styles.css'
70
- import '@aeon-ui/panda/theme-runtime.css'
90
+ import { AppNav, Prompt, StatusBanner, AppShell } from '@aeon-ui/ui'
91
+
92
+ // Section + detail stack (replaces ad-hoc nav stores)
93
+ <AppNav.Root defaultSection="home">...</AppNav.Root>
94
+
95
+ // Confirm / permission style dialog (portal + focus trap via Dialog)
96
+ <Prompt.Root open={open} status="pending">...</Prompt.Root>
97
+
98
+ // Non-blocking top banner (updates, sync, offline)
99
+ <StatusBanner.Root status="ready">...</StatusBanner.Root>
71
100
  ```
72
101
 
73
- Add `scrollbars.css` / `chrome.css` when you want the demo chrome. See [INTEGRATION.md](./INTEGRATION.md).
102
+ Electron titlebar helpers (drag regions, traffic-light padding):
74
103
 
75
- ## 5. Use components
104
+ ```ts
105
+ import '@aeon-ui/panda/electron.css'
106
+ ```
107
+
108
+ ## Optional: Headless only
109
+
110
+ Skip the styled layer and import headless components directly:
76
111
 
77
112
  ```tsx
78
- import { Button, Dialog } from '@aeon-ui/ui'
79
- import { useAeonMachine } from '@aeon-ui/react'
113
+ import { Menu, Dialog, useAeonMachine } from '@aeon-ui/react'
80
114
  ```
81
115
 
82
- Headless-only apps can import from `@aeon-ui/react` and style with `data-aeon-*` selectors — see [docs/VITE_CONSUMER.md](./docs/VITE_CONSUMER.md).
116
+ Style with any CSS system using `data-aeon-scope`, `data-aeon-part`, `data-aeon-state` attributes.
117
+
118
+ ## Optional: Local monorepo
119
+
120
+ Point the plugin at a local checkout:
121
+
122
+ ```ts
123
+ aeonUiVitePlugin({ packagesRoot: '/path/to/aeon-ui/packages' })
124
+ ```
83
125
 
84
126
  ## Reference consumer
85
127
 
86
- The [Casino-games](https://github.com/GenericCPU/Casino-games) repo uses this exact pattern (`scripts/vite.casino.mjs`, root `aeon-ui-engine` dependency).
128
+ [Casino-games](https://github.com/GenericCPU/Casino-games) uses this exact pattern.
package/README.md CHANGED
@@ -1,12 +1,12 @@
1
1
  # Aeon UI
2
2
 
3
- **Future-proof UI infrastructure for the web.**
3
+ **Statechart-driven UI — clear for humans, precise for agents.**
4
4
 
5
5
  **State is defined first. UI represents the totality of that definition.**
6
6
 
7
- > **Coding agents:** read **[AGENTS.md](./AGENTS.md)** first, then [docs/INDEX.md](./docs/INDEX.md). Human overview below.
7
+ > **Coding agents:** read **[AGENTS.md](./AGENTS.md)** first, then [docs/AI.md](./docs/AI.md) and [docs/INDEX.md](./docs/INDEX.md). Human overview below.
8
8
 
9
- Aeon UI models interactive behavior as executable [statecharts](https://www.theseus.fi/bitstream/handle/10024/334118/Thanh_Nguyen.pdf?sequence=2&isAllowed=y), exposes production-ready headless compound components, and ships a styled layer powered by **[Panda CSS](https://panda-css.com)** slot recipes aligned with `@aeon-ui/core` anatomy. Every primitive projects a full machine snapshot onto the DOM — structure, copy, and `data-aeon-state` stay in sync.
9
+ Aeon UI models interactive behavior as executable [statecharts](https://www.theseus.fi/bitstream/handle/10024/334118/Thanh_Nguyen.pdf?sequence=2&isAllowed=y), publishes **deterministic JSON schemas** for Generative UI, exposes production-ready headless compound components, and ships a styled layer powered by **[Panda CSS](https://panda-css.com)** slot recipes aligned with `@aeon-ui/core` anatomy. Every primitive projects a full machine snapshot onto the DOM — structure, copy, and `data-aeon-state` stay in sync.
10
10
 
11
11
  ## Packages
12
12
 
@@ -15,6 +15,8 @@ Aeon UI models interactive behavior as executable [statecharts](https://www.thes
15
15
  | `@aeon-ui/core` | Anatomy tokens, `data-aeon-*` attributes, machine helpers |
16
16
  | `@aeon-ui/primitives` | XState machines (toggle, dialog, tabs, accordion, async, button lifecycle, field) |
17
17
  | `@aeon-ui/react` | React headless bindings |
18
+ | `@aeon-ui/schemas` | JSON Schema catalog + agent system prompts |
19
+ | `@aeon-ui/cli` | `npx aeon-ui init` — Cursor rules, schemas, starter |
18
20
  | `@aeon-ui/panda` | Design tokens, `defineSlotRecipe` styles, generated `styled-system` |
19
21
  | `@aeon-ui/ui` | Styled components (`aeonButton`, `aeonAccordion`, …) |
20
22
  | `@aeon-ui/vue` | Vue 3 headless adapter (v0.1: Switch + `useAeonMachine`) |
@@ -25,24 +27,34 @@ Aeon UI models interactive behavior as executable [statecharts](https://www.thes
25
27
 
26
28
  ## Quick start
27
29
 
30
+ Teach an AI agent first (optional but recommended):
31
+
32
+ ```bash
33
+ npx aeon-ui init
34
+ ```
35
+
28
36
  The monorepo is published on npm as **`aeon-ui-engine`** (bundles all `@aeon-ui/*` workspace packages):
29
37
 
30
38
  ```bash
31
39
  npm install aeon-ui-engine react react-dom xstate @xstate/react
32
40
  ```
33
41
 
34
- **Important:** `@aeon-ui/react`, `@aeon-ui/ui`, etc. are **not** separate npm packages yet. After installing the engine, wire Vite so those imports resolve:
42
+ Add the Vite plugin and import CSS:
35
43
 
36
44
  ```ts
37
- import { aeonUiOptimizeDeps, aeonUiViteAliases } from 'aeon-ui-engine/vite'
38
-
45
+ // vite.config.ts
46
+ import { aeonUiVitePlugin } from 'aeon-ui-engine/vite'
39
47
  export default defineConfig({
40
- resolve: { alias: aeonUiViteAliases() },
41
- optimizeDeps: aeonUiOptimizeDeps(),
48
+ plugins: [react(), aeonUiVitePlugin()],
42
49
  })
43
50
  ```
44
51
 
45
- Full copy-paste setup (TypeScript paths, CSS imports): **[CONSUMER.md](./CONSUMER.md)**.
52
+ ```tsx
53
+ // main.tsx
54
+ import 'aeon-ui-engine/aeon.css'
55
+ ```
56
+
57
+ Full setup guide: **[CONSUMER.md](./CONSUMER.md)**.
46
58
 
47
59
  Open [https://github.com/GenericCPU/aeon-ui](https://github.com/GenericCPU/aeon-ui) for the repo. The marketing demo lives at [https://aeon-ui.com](https://aeon-ui.com) — set `VITE_SITE_ORIGIN` to that origin in Vercel so Open Graph previews resolve the social image in `apps/demo/public/` correctly.
48
60
 
@@ -122,20 +134,39 @@ Read [PHILOSOPHY.md](./PHILOSOPHY.md) and **[STATES.md](./STATES.md)** — gaps
122
134
 
123
135
  **UI = f(state).** Define every stable condition in the chart; build UI that expresses the whole definition, not a fragment of it.
124
136
 
125
- ### Async region (totality)
137
+ ### Async region (Content faces)
126
138
 
127
139
  ```tsx
128
- import { Async, Button } from '@aeon-ui/ui'
140
+ import { Async, Content, Button, Progress } from '@aeon-ui/ui'
141
+ import { asyncStatusToContentState, useAsyncContext } from '@aeon-ui/react'
142
+
143
+ function AsyncSurface() {
144
+ const { status, send } = useAsyncContext()
145
+ return (
146
+ <Content.Root state={asyncStatusToContentState(status)} align="center">
147
+ <Content.Pending>
148
+ <Progress.Root indeterminate>
149
+ <Progress.Track>
150
+ <Progress.Range />
151
+ </Progress.Track>
152
+ </Progress.Root>
153
+ </Content.Pending>
154
+ <Content.Empty>Nothing here</Content.Empty>
155
+ <Content.Error>Failed</Content.Error>
156
+ <Content.Success>Done</Content.Success>
157
+ {status === 'idle' ? <Content.Body>Ready when you are</Content.Body> : null}
158
+ <Button.Root onClick={() => send({ type: 'FETCH' })}>Load</Button.Root>
159
+ </Content.Root>
160
+ )
161
+ }
129
162
 
130
163
  <Async.Root>
131
- <Async.Track />
132
- <Async.Readout>Ready when you are</Async.Readout>
133
- <Async.Actions>
134
- <Button.Root size="sm">Fetch</Button.Root>
135
- </Async.Actions>
164
+ <AsyncSurface />
136
165
  </Async.Root>
137
166
  ```
138
167
 
168
+ See [docs/PRIMITIVE_COVERAGE.md](./docs/PRIMITIVE_COVERAGE.md).
169
+
139
170
  ## Example
140
171
 
141
172
  ```tsx
package/package.json CHANGED
@@ -1,12 +1,18 @@
1
1
  {
2
2
  "name": "aeon-ui-engine",
3
- "version": "1.0.3",
3
+ "version": "1.2.0",
4
4
  "private": false,
5
5
  "type": "module",
6
+ "bin": {
7
+ "aeon-ui": "./packages/cli/dist/bin.js"
8
+ },
6
9
  "exports": {
7
10
  "./vite": "./scripts/vite-aliases.mjs",
11
+ "./aeon.css": "./packages/panda/aeon.css",
8
12
  "./tsconfig.base.json": "./tsconfig.base.json",
9
- "./CONSUMER.md": "./CONSUMER.md"
13
+ "./CONSUMER.md": "./CONSUMER.md",
14
+ "./schemas": "./packages/schemas/dist/index.js",
15
+ "./schemas/catalog.json": "./packages/schemas/json/catalog.json"
10
16
  },
11
17
  "files": [
12
18
  "packages",
@@ -23,6 +29,7 @@
23
29
  "build:headless": "pnpm --filter @aeon-ui/core --filter @aeon-ui/primitives --filter @aeon-ui/react run build",
24
30
  "codegen": "pnpm --filter @aeon-ui/panda codegen",
25
31
  "dev": "pnpm --filter @aeon-ui/demo dev",
32
+ "examples": "pnpm --filter @aeon-ui/examples dev",
26
33
  "typecheck": "pnpm -r run typecheck",
27
34
  "test": "pnpm run test:headless",
28
35
  "test:headless": "pnpm run build:headless && pnpm --filter @aeon-ui/core --filter @aeon-ui/primitives --filter @aeon-ui/react run test",
@@ -0,0 +1,17 @@
1
+ # @aeon-ui/cli
2
+
3
+ AI-optimized CLI for Aeon UI.
4
+
5
+ ```bash
6
+ npx aeon-ui init
7
+ ```
8
+
9
+ Injects:
10
+
11
+ - `.cursor/rules/aeon-ui.mdc` — always-on Cursor rule
12
+ - `aeon.cursorrules.md` / `aeon.system-prompt.md` — paste into any agent
13
+ - `aeon.schemas/` — deterministic JSON schemas per component
14
+ - `src/components/AeonStarter.tsx` — minimal Field + Button + Async scaffold
15
+ - `AEON_AI.md` — next steps
16
+
17
+ Use `--force` to overwrite.
@@ -0,0 +1 @@
1
+ #!/usr/bin/env node
@@ -0,0 +1,35 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ initAeon
4
+ } from "./chunk-IW5NT2Z2.js";
5
+
6
+ // src/bin.ts
7
+ var args = process.argv.slice(2);
8
+ var cmd = args[0] ?? "help";
9
+ var force = args.includes("--force") || args.includes("-f");
10
+ function help() {
11
+ console.log(`aeon-ui \u2014 AI-optimized CLI for Aeon UI
12
+
13
+ Usage:
14
+ npx aeon-ui init [--force]
15
+
16
+ Commands:
17
+ init Inject Cursor rules, JSON schemas, system prompt, and a starter component
18
+ help Show this message
19
+
20
+ Options:
21
+ --force, -f Overwrite existing generated files
22
+ `);
23
+ }
24
+ if (cmd === "init") {
25
+ const result = initAeon({ force });
26
+ console.log(`Aeon UI init \u2192 ${result.cwd}`);
27
+ for (const line of result.written) console.log(` ${line}`);
28
+ console.log("\nNext: npm install aeon-ui-engine react react-dom xstate @xstate/react");
29
+ console.log("Docs: AEON_AI.md \xB7 paste aeon.cursorrules.md into your agent system prompt");
30
+ } else {
31
+ help();
32
+ if (cmd !== "help" && cmd !== "--help" && cmd !== "-h") {
33
+ process.exitCode = 1;
34
+ }
35
+ }
@@ -0,0 +1,103 @@
1
+ // src/init.ts
2
+ import { mkdirSync, writeFileSync, existsSync } from "fs";
3
+ import { join } from "path";
4
+ import {
5
+ CURSOR_RULES_SNIPPET,
6
+ AEON_SYSTEM_PROMPT,
7
+ catalog,
8
+ componentSchemas
9
+ } from "@aeon-ui/schemas";
10
+ var STARTER = `/**
11
+ * Aeon UI starter \u2014 generated by \`npx aeon-ui init\`
12
+ * Headless: @aeon-ui/react \xB7 Styled: @aeon-ui/ui \xB7 Schemas: @aeon-ui/schemas
13
+ */
14
+ import { Button, Field } from '@aeon-ui/ui'
15
+
16
+ export function AeonStarter() {
17
+ return (
18
+ <div>
19
+ <Field.Root>
20
+ <Field.Label>Email</Field.Label>
21
+ <Field.Control type="email" placeholder="you@example.com" />
22
+ <Field.Message />
23
+ </Field.Root>
24
+ <Button.Root status="idle">Continue</Button.Root>
25
+ </div>
26
+ )
27
+ }
28
+ `;
29
+ function initAeon(options = {}) {
30
+ const cwd = options.cwd ?? process.cwd();
31
+ const force = options.force ?? false;
32
+ const written = [];
33
+ const write = (rel, body) => {
34
+ const path = join(cwd, rel);
35
+ if (existsSync(path) && !force) {
36
+ written.push(`skip ${rel} (exists)`);
37
+ return;
38
+ }
39
+ mkdirSync(join(path, ".."), { recursive: true });
40
+ writeFileSync(path, body.endsWith("\n") ? body : `${body}
41
+ `);
42
+ written.push(`write ${rel}`);
43
+ };
44
+ write(".cursor/rules/aeon-ui.mdc", `---
45
+ description: Aeon UI \u2014 statechart-driven components for AI agents
46
+ globs: **/*.{tsx,ts,jsx,js}
47
+ alwaysApply: true
48
+ ---
49
+
50
+ ${CURSOR_RULES_SNIPPET.trim()}
51
+ `);
52
+ write("aeon.cursorrules.md", `${CURSOR_RULES_SNIPPET.trim()}
53
+ `);
54
+ write("aeon.system-prompt.md", `${AEON_SYSTEM_PROMPT.trim()}
55
+ `);
56
+ write(
57
+ "aeon.schemas/catalog.json",
58
+ `${JSON.stringify(
59
+ {
60
+ $id: catalog.$id,
61
+ title: catalog.title,
62
+ description: catalog.description,
63
+ version: catalog.version,
64
+ principle: catalog.principle,
65
+ attributes: catalog.attributes,
66
+ components: catalog.components,
67
+ note: "Full schemas live under aeon.schemas/components/*.json"
68
+ },
69
+ null,
70
+ 2
71
+ )}
72
+ `
73
+ );
74
+ for (const [id, schema] of Object.entries(componentSchemas)) {
75
+ write(`aeon.schemas/components/${id}.json`, `${JSON.stringify(schema, null, 2)}
76
+ `);
77
+ }
78
+ write("src/components/AeonStarter.tsx", STARTER);
79
+ write(
80
+ "AEON_AI.md",
81
+ `# Aeon UI \u2014 AI agent setup
82
+
83
+ Generated by \`npx aeon-ui init\`.
84
+
85
+ ## Next steps
86
+
87
+ 1. Install: \`npm install aeon-ui-engine react react-dom xstate @xstate/react\`
88
+ 2. CSS: \`import 'aeon-ui-engine/aeon.css'\`
89
+ 3. Vite: add \`aeonUiVitePlugin()\` from \`aeon-ui-engine/vite\`
90
+ 4. Paste \`aeon.cursorrules.md\` into Cursor rules / system prompt (already mirrored to \`.cursor/rules/aeon-ui.mdc\`)
91
+ 5. Constrain generation with JSON under \`aeon.schemas/\`
92
+
93
+ ## Principle
94
+
95
+ **UI = f(state)** \u2014 never invent boolean combinations for states the schema does not list.
96
+ `
97
+ );
98
+ return { cwd, written };
99
+ }
100
+
101
+ export {
102
+ initAeon
103
+ };
@@ -0,0 +1,10 @@
1
+ type InitOptions = {
2
+ cwd?: string;
3
+ force?: boolean;
4
+ };
5
+ declare function initAeon(options?: InitOptions): {
6
+ cwd: string;
7
+ written: string[];
8
+ };
9
+
10
+ export { type InitOptions, initAeon };
@@ -0,0 +1,6 @@
1
+ import {
2
+ initAeon
3
+ } from "./chunk-IW5NT2Z2.js";
4
+ export {
5
+ initAeon
6
+ };
@@ -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