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
@@ -0,0 +1,21 @@
1
+ #!/bin/sh
2
+ basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
3
+
4
+ case `uname` in
5
+ *CYGWIN*|*MINGW*|*MSYS*)
6
+ if command -v cygpath > /dev/null 2>&1; then
7
+ basedir=`cygpath -w "$basedir"`
8
+ fi
9
+ ;;
10
+ esac
11
+
12
+ if [ -z "$NODE_PATH" ]; then
13
+ export NODE_PATH="/Users/brandoncryderman/AeonUI/node_modules/.pnpm/tsup@8.5.1_jiti@2.7.0_postcss@8.5.15_tsx@4.22.3_typescript@5.9.3/node_modules/tsup/dist/node_modules:/Users/brandoncryderman/AeonUI/node_modules/.pnpm/tsup@8.5.1_jiti@2.7.0_postcss@8.5.15_tsx@4.22.3_typescript@5.9.3/node_modules/tsup/node_modules:/Users/brandoncryderman/AeonUI/node_modules/.pnpm/tsup@8.5.1_jiti@2.7.0_postcss@8.5.15_tsx@4.22.3_typescript@5.9.3/node_modules:/Users/brandoncryderman/AeonUI/node_modules/.pnpm/node_modules"
14
+ else
15
+ export NODE_PATH="/Users/brandoncryderman/AeonUI/node_modules/.pnpm/tsup@8.5.1_jiti@2.7.0_postcss@8.5.15_tsx@4.22.3_typescript@5.9.3/node_modules/tsup/dist/node_modules:/Users/brandoncryderman/AeonUI/node_modules/.pnpm/tsup@8.5.1_jiti@2.7.0_postcss@8.5.15_tsx@4.22.3_typescript@5.9.3/node_modules/tsup/node_modules:/Users/brandoncryderman/AeonUI/node_modules/.pnpm/tsup@8.5.1_jiti@2.7.0_postcss@8.5.15_tsx@4.22.3_typescript@5.9.3/node_modules:/Users/brandoncryderman/AeonUI/node_modules/.pnpm/node_modules:$NODE_PATH"
16
+ fi
17
+ if [ -x "$basedir/node" ]; then
18
+ exec "$basedir/node" "$basedir/../tsup/dist/cli-node.js" "$@"
19
+ else
20
+ exec node "$basedir/../tsup/dist/cli-node.js" "$@"
21
+ fi
@@ -0,0 +1,21 @@
1
+ #!/bin/sh
2
+ basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
3
+
4
+ case `uname` in
5
+ *CYGWIN*|*MINGW*|*MSYS*)
6
+ if command -v cygpath > /dev/null 2>&1; then
7
+ basedir=`cygpath -w "$basedir"`
8
+ fi
9
+ ;;
10
+ esac
11
+
12
+ if [ -z "$NODE_PATH" ]; then
13
+ export NODE_PATH="/Users/brandoncryderman/AeonUI/node_modules/.pnpm/tsx@4.22.3/node_modules/tsx/dist/node_modules:/Users/brandoncryderman/AeonUI/node_modules/.pnpm/tsx@4.22.3/node_modules/tsx/node_modules:/Users/brandoncryderman/AeonUI/node_modules/.pnpm/tsx@4.22.3/node_modules:/Users/brandoncryderman/AeonUI/node_modules/.pnpm/node_modules"
14
+ else
15
+ export NODE_PATH="/Users/brandoncryderman/AeonUI/node_modules/.pnpm/tsx@4.22.3/node_modules/tsx/dist/node_modules:/Users/brandoncryderman/AeonUI/node_modules/.pnpm/tsx@4.22.3/node_modules/tsx/node_modules:/Users/brandoncryderman/AeonUI/node_modules/.pnpm/tsx@4.22.3/node_modules:/Users/brandoncryderman/AeonUI/node_modules/.pnpm/node_modules:$NODE_PATH"
16
+ fi
17
+ if [ -x "$basedir/node" ]; then
18
+ exec "$basedir/node" "$basedir/../../../../node_modules/.pnpm/tsx@4.22.3/node_modules/tsx/dist/cli.mjs" "$@"
19
+ else
20
+ exec node "$basedir/../../../../node_modules/.pnpm/tsx@4.22.3/node_modules/tsx/dist/cli.mjs" "$@"
21
+ fi
@@ -0,0 +1,21 @@
1
+ #!/bin/sh
2
+ basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
3
+
4
+ case `uname` in
5
+ *CYGWIN*|*MINGW*|*MSYS*)
6
+ if command -v cygpath > /dev/null 2>&1; then
7
+ basedir=`cygpath -w "$basedir"`
8
+ fi
9
+ ;;
10
+ esac
11
+
12
+ if [ -z "$NODE_PATH" ]; then
13
+ export NODE_PATH="/Users/brandoncryderman/AeonUI/node_modules/.pnpm/vite@8.0.16_@types+node@22.19.19_esbuild@0.27.7_jiti@2.7.0_tsx@4.22.3/node_modules/vite/bin/node_modules:/Users/brandoncryderman/AeonUI/node_modules/.pnpm/vite@8.0.16_@types+node@22.19.19_esbuild@0.27.7_jiti@2.7.0_tsx@4.22.3/node_modules/vite/node_modules:/Users/brandoncryderman/AeonUI/node_modules/.pnpm/vite@8.0.16_@types+node@22.19.19_esbuild@0.27.7_jiti@2.7.0_tsx@4.22.3/node_modules:/Users/brandoncryderman/AeonUI/node_modules/.pnpm/node_modules"
14
+ else
15
+ export NODE_PATH="/Users/brandoncryderman/AeonUI/node_modules/.pnpm/vite@8.0.16_@types+node@22.19.19_esbuild@0.27.7_jiti@2.7.0_tsx@4.22.3/node_modules/vite/bin/node_modules:/Users/brandoncryderman/AeonUI/node_modules/.pnpm/vite@8.0.16_@types+node@22.19.19_esbuild@0.27.7_jiti@2.7.0_tsx@4.22.3/node_modules/vite/node_modules:/Users/brandoncryderman/AeonUI/node_modules/.pnpm/vite@8.0.16_@types+node@22.19.19_esbuild@0.27.7_jiti@2.7.0_tsx@4.22.3/node_modules:/Users/brandoncryderman/AeonUI/node_modules/.pnpm/node_modules:$NODE_PATH"
16
+ fi
17
+ if [ -x "$basedir/node" ]; then
18
+ exec "$basedir/node" "$basedir/../../../../node_modules/.pnpm/vite@8.0.16_@types+node@22.19.19_esbuild@0.27.7_jiti@2.7.0_tsx@4.22.3/node_modules/vite/bin/vite.js" "$@"
19
+ else
20
+ exec node "$basedir/../../../../node_modules/.pnpm/vite@8.0.16_@types+node@22.19.19_esbuild@0.27.7_jiti@2.7.0_tsx@4.22.3/node_modules/vite/bin/vite.js" "$@"
21
+ fi
@@ -0,0 +1,21 @@
1
+ #!/bin/sh
2
+ basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
3
+
4
+ case `uname` in
5
+ *CYGWIN*|*MINGW*|*MSYS*)
6
+ if command -v cygpath > /dev/null 2>&1; then
7
+ basedir=`cygpath -w "$basedir"`
8
+ fi
9
+ ;;
10
+ esac
11
+
12
+ if [ -z "$NODE_PATH" ]; then
13
+ export NODE_PATH="/Users/brandoncryderman/AeonUI/node_modules/.pnpm/vitest@4.1.8_@types+node@22.19.19_jsdom@29.1.1_vite@8.0.16_@types+node@22.19.19_esbuild@0.28.0_jiti@2.7.0_tsx@4.22.3_/node_modules/vitest/node_modules:/Users/brandoncryderman/AeonUI/node_modules/.pnpm/vitest@4.1.8_@types+node@22.19.19_jsdom@29.1.1_vite@8.0.16_@types+node@22.19.19_esbuild@0.28.0_jiti@2.7.0_tsx@4.22.3_/node_modules:/Users/brandoncryderman/AeonUI/node_modules/.pnpm/node_modules"
14
+ else
15
+ export NODE_PATH="/Users/brandoncryderman/AeonUI/node_modules/.pnpm/vitest@4.1.8_@types+node@22.19.19_jsdom@29.1.1_vite@8.0.16_@types+node@22.19.19_esbuild@0.28.0_jiti@2.7.0_tsx@4.22.3_/node_modules/vitest/node_modules:/Users/brandoncryderman/AeonUI/node_modules/.pnpm/vitest@4.1.8_@types+node@22.19.19_jsdom@29.1.1_vite@8.0.16_@types+node@22.19.19_esbuild@0.28.0_jiti@2.7.0_tsx@4.22.3_/node_modules:/Users/brandoncryderman/AeonUI/node_modules/.pnpm/node_modules:$NODE_PATH"
16
+ fi
17
+ if [ -x "$basedir/node" ]; then
18
+ exec "$basedir/node" "$basedir/../vitest/vitest.mjs" "$@"
19
+ else
20
+ exec node "$basedir/../vitest/vitest.mjs" "$@"
21
+ fi
@@ -0,0 +1,50 @@
1
+ {
2
+ "name": "@aeon-ui/cli",
3
+ "version": "0.1.0",
4
+ "description": "AI-optimized CLI for injecting Aeon UI agent rules, schemas, and starter code",
5
+ "license": "MIT",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "https://github.com/GenericCPU/aeon-ui.git",
9
+ "directory": "packages/cli"
10
+ },
11
+ "publishConfig": {
12
+ "access": "public"
13
+ },
14
+ "files": [
15
+ "dist",
16
+ "templates",
17
+ "README.md"
18
+ ],
19
+ "keywords": [
20
+ "aeon-ui",
21
+ "cli",
22
+ "cursor",
23
+ "generative-ui",
24
+ "ai"
25
+ ],
26
+ "type": "module",
27
+ "bin": {
28
+ "aeon-ui": "./dist/bin.js"
29
+ },
30
+ "exports": {
31
+ ".": {
32
+ "types": "./dist/index.d.ts",
33
+ "import": "./dist/index.js"
34
+ }
35
+ },
36
+ "scripts": {
37
+ "build": "tsup src/bin.ts src/index.ts --format esm --dts --clean",
38
+ "typecheck": "tsc --noEmit",
39
+ "test": "vitest run"
40
+ },
41
+ "dependencies": {
42
+ "@aeon-ui/schemas": "workspace:*"
43
+ },
44
+ "devDependencies": {
45
+ "@types/node": "^22.15.0",
46
+ "tsup": "^8.4.0",
47
+ "typescript": "^5.8.3",
48
+ "vitest": "^4.1.8"
49
+ }
50
+ }
@@ -0,0 +1,34 @@
1
+ #!/usr/bin/env node
2
+ import { initAeon } from './init.js'
3
+
4
+ const args = process.argv.slice(2)
5
+ const cmd = args[0] ?? 'help'
6
+ const force = args.includes('--force') || args.includes('-f')
7
+
8
+ function help() {
9
+ console.log(`aeon-ui — AI-optimized CLI for Aeon UI
10
+
11
+ Usage:
12
+ npx aeon-ui init [--force]
13
+
14
+ Commands:
15
+ init Inject Cursor rules, JSON schemas, system prompt, and a starter component
16
+ help Show this message
17
+
18
+ Options:
19
+ --force, -f Overwrite existing generated files
20
+ `)
21
+ }
22
+
23
+ if (cmd === 'init') {
24
+ const result = initAeon({ force })
25
+ console.log(`Aeon UI init → ${result.cwd}`)
26
+ for (const line of result.written) console.log(` ${line}`)
27
+ console.log('\nNext: npm install aeon-ui-engine react react-dom xstate @xstate/react')
28
+ console.log('Docs: AEON_AI.md · paste aeon.cursorrules.md into your agent system prompt')
29
+ } else {
30
+ help()
31
+ if (cmd !== 'help' && cmd !== '--help' && cmd !== '-h') {
32
+ process.exitCode = 1
33
+ }
34
+ }
@@ -0,0 +1 @@
1
+ export { initAeon, type InitOptions } from './init.js'
@@ -0,0 +1,107 @@
1
+ import { mkdirSync, writeFileSync, existsSync } from 'node:fs'
2
+ import { join } from 'node:path'
3
+ import {
4
+ CURSOR_RULES_SNIPPET,
5
+ AEON_SYSTEM_PROMPT,
6
+ catalog,
7
+ componentSchemas,
8
+ } from '@aeon-ui/schemas'
9
+
10
+ export type InitOptions = {
11
+ cwd?: string
12
+ force?: boolean
13
+ }
14
+
15
+ const STARTER = `/**
16
+ * Aeon UI starter — generated by \`npx aeon-ui init\`
17
+ * Headless: @aeon-ui/react · Styled: @aeon-ui/ui · Schemas: @aeon-ui/schemas
18
+ */
19
+ import { Button, Field } from '@aeon-ui/ui'
20
+
21
+ export function AeonStarter() {
22
+ return (
23
+ <div>
24
+ <Field.Root>
25
+ <Field.Label>Email</Field.Label>
26
+ <Field.Control type="email" placeholder="you@example.com" />
27
+ <Field.Message />
28
+ </Field.Root>
29
+ <Button.Root status="idle">Continue</Button.Root>
30
+ </div>
31
+ )
32
+ }
33
+ `
34
+
35
+ export function initAeon(options: InitOptions = {}) {
36
+ const cwd = options.cwd ?? process.cwd()
37
+ const force = options.force ?? false
38
+ const written: string[] = []
39
+
40
+ const write = (rel: string, body: string) => {
41
+ const path = join(cwd, rel)
42
+ if (existsSync(path) && !force) {
43
+ written.push(`skip ${rel} (exists)`)
44
+ return
45
+ }
46
+ mkdirSync(join(path, '..'), { recursive: true })
47
+ writeFileSync(path, body.endsWith('\n') ? body : `${body}\n`)
48
+ written.push(`write ${rel}`)
49
+ }
50
+
51
+ write('.cursor/rules/aeon-ui.mdc', `---
52
+ description: Aeon UI — statechart-driven components for AI agents
53
+ globs: **/*.{tsx,ts,jsx,js}
54
+ alwaysApply: true
55
+ ---
56
+
57
+ ${CURSOR_RULES_SNIPPET.trim()}
58
+ `)
59
+
60
+ write('aeon.cursorrules.md', `${CURSOR_RULES_SNIPPET.trim()}\n`)
61
+ write('aeon.system-prompt.md', `${AEON_SYSTEM_PROMPT.trim()}\n`)
62
+ write(
63
+ 'aeon.schemas/catalog.json',
64
+ `${JSON.stringify(
65
+ {
66
+ $id: catalog.$id,
67
+ title: catalog.title,
68
+ description: catalog.description,
69
+ version: catalog.version,
70
+ principle: catalog.principle,
71
+ attributes: catalog.attributes,
72
+ components: catalog.components,
73
+ note: 'Full schemas live under aeon.schemas/components/*.json',
74
+ },
75
+ null,
76
+ 2,
77
+ )}\n`,
78
+ )
79
+
80
+ for (const [id, schema] of Object.entries(componentSchemas)) {
81
+ write(`aeon.schemas/components/${id}.json`, `${JSON.stringify(schema, null, 2)}\n`)
82
+ }
83
+
84
+ write('src/components/AeonStarter.tsx', STARTER)
85
+
86
+ write(
87
+ 'AEON_AI.md',
88
+ `# Aeon UI — AI agent setup
89
+
90
+ Generated by \`npx aeon-ui init\`.
91
+
92
+ ## Next steps
93
+
94
+ 1. Install: \`npm install aeon-ui-engine react react-dom xstate @xstate/react\`
95
+ 2. CSS: \`import 'aeon-ui-engine/aeon.css'\`
96
+ 3. Vite: add \`aeonUiVitePlugin()\` from \`aeon-ui-engine/vite\`
97
+ 4. Paste \`aeon.cursorrules.md\` into Cursor rules / system prompt (already mirrored to \`.cursor/rules/aeon-ui.mdc\`)
98
+ 5. Constrain generation with JSON under \`aeon.schemas/\`
99
+
100
+ ## Principle
101
+
102
+ **UI = f(state)** — never invent boolean combinations for states the schema does not list.
103
+ `,
104
+ )
105
+
106
+ return { cwd, written }
107
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "extends": "../../tsconfig.base.json",
3
+ "compilerOptions": {
4
+ "outDir": "dist",
5
+ "rootDir": "src",
6
+ "types": ["node"],
7
+ "noEmit": true
8
+ },
9
+ "include": ["src"]
10
+ }
@@ -51,10 +51,16 @@ partAttrs(asyncAnatomy.scope, asyncAnatomy.readout, {
51
51
  ## Parallel regions
52
52
 
53
53
  ```ts
54
- import { stateToAttr } from '@aeon-ui/core'
54
+ import { fieldFace, fieldRegions, stateToAttr } from '@aeon-ui/core'
55
55
 
56
+ // Debug / serialization — not product UI labels
56
57
  stateToAttr({ interaction: 'dirty', validation: 'invalid', submission: 'idle' })
57
58
  // → "interaction:dirty validation:invalid submission:idle"
59
+
60
+ // Field DOM face (same hierarchy as Button status)
61
+ fieldFace({ interaction: 'dirty', validation: 'invalid', submission: 'idle' }) // "invalid"
62
+ fieldRegions({ interaction: 'dirty', validation: 'invalid', submission: 'idle' })
63
+ // → { interaction: "dirty", validation: "invalid", submission: "idle" }
58
64
  ```
59
65
 
60
66
  ## Adding a scope
@@ -26,6 +26,25 @@ declare const checkboxAnatomy: Record<"root" | "label" | "control" | "hiddenInpu
26
26
  declare const dialogAnatomy: Record<"root" | "trigger" | "portal" | "backdrop" | "positioner" | "content" | "title" | "description" | "closeTrigger", "root" | "trigger" | "portal" | "backdrop" | "positioner" | "content" | "title" | "description" | "closeTrigger"> & {
27
27
  scope: string;
28
28
  };
29
+ /**
30
+ * Prompt — confirm / permission / update-style dialog on top of Dialog.
31
+ * Universal parts: eyebrow, meta, amount, actions (primary + secondary).
32
+ */
33
+ declare const promptAnatomy: Record<"root" | "eyebrow" | "meta" | "amount" | "actions" | "primary" | "secondary", "root" | "eyebrow" | "meta" | "amount" | "actions" | "primary" | "secondary"> & {
34
+ scope: string;
35
+ };
36
+ /**
37
+ * AppNav — section + detail stack (list→detail, settings drill-in).
38
+ */
39
+ declare const appNavAnatomy: Record<"root" | "rail" | "section" | "stage" | "breadcrumb" | "crumb" | "back", "root" | "rail" | "section" | "stage" | "breadcrumb" | "crumb" | "back"> & {
40
+ scope: string;
41
+ };
42
+ /**
43
+ * StatusBanner — non-blocking top-of-app notice (update ready, syncing, offline).
44
+ */
45
+ declare const statusBannerAnatomy: Record<"root" | "title" | "actions" | "copy" | "body", "root" | "title" | "actions" | "copy" | "body"> & {
46
+ scope: string;
47
+ };
29
48
  declare const tabsAnatomy: Record<"root" | "indicator" | "trigger" | "content" | "list", "root" | "indicator" | "trigger" | "content" | "list"> & {
30
49
  scope: string;
31
50
  };
@@ -33,7 +52,7 @@ declare const accordionAnatomy: Record<"root" | "item" | "itemTrigger" | "itemCo
33
52
  scope: string;
34
53
  };
35
54
  /** Async data region — track shows every lifecycle state; readout + actions mirror snapshot. */
36
- declare const asyncAnatomy: Record<"root" | "track" | "segment" | "readout" | "readoutRail" | "readoutBody" | "actions", "root" | "track" | "segment" | "readout" | "readoutRail" | "readoutBody" | "actions"> & {
55
+ declare const asyncAnatomy: Record<"root" | "actions" | "track" | "segment" | "readout" | "readoutRail" | "readoutBody", "root" | "actions" | "track" | "segment" | "readout" | "readoutRail" | "readoutBody"> & {
37
56
  scope: string;
38
57
  };
39
58
  /** Form field — orthogonal interaction × validation × submission (see STATES.md). */
@@ -45,10 +64,10 @@ declare const scrollAnatomy: Record<"root" | "content" | "viewport", "root" | "c
45
64
  scope: string;
46
65
  };
47
66
  /**
48
- * Play / game surface — mat shell with table, dice, and bank regions.
49
- * Use with normalized layout coords (@see docs/LAYOUT_COORDINATES.md).
67
+ * Spatial play surface — universal mat + regions + entities (not a specific game).
68
+ * App logic names regions; entity labels come from compose `items`. See LAYOUT_COORDINATES.md.
50
69
  */
51
- declare const playSurfaceAnatomy: Record<"mat" | "table" | "dice" | "bank", "mat" | "table" | "dice" | "bank"> & {
70
+ declare const playSurfaceAnatomy: Record<"root" | "mat" | "region" | "entity", "root" | "mat" | "region" | "entity"> & {
52
71
  scope: string;
53
72
  };
54
73
  declare const selectAnatomy: Record<"root" | "icon" | "trigger" | "positioner" | "content" | "item" | "value", "root" | "icon" | "trigger" | "positioner" | "content" | "item" | "value"> & {
@@ -70,8 +89,65 @@ declare const tooltipAnatomy: Record<"root" | "trigger" | "positioner" | "conten
70
89
  declare const toastAnatomy: Record<"root" | "title" | "description" | "closeTrigger" | "viewport", "root" | "title" | "description" | "closeTrigger" | "viewport"> & {
71
90
  scope: string;
72
91
  };
73
- /** Profile image — loaded / loading / error on root `data-aeon-state`. */
74
- declare const avatarAnatomy: Record<"root" | "image" | "fallback", "root" | "image" | "fallback"> & {
92
+ /** Profile image — loaded / loading / error on root `data-aeon-state`. Badge = presence / status corner. */
93
+ declare const avatarAnatomy: Record<"root" | "image" | "fallback" | "badge", "root" | "image" | "fallback" | "badge"> & {
94
+ scope: string;
95
+ };
96
+ /**
97
+ * Identity strip — avatar + primary/secondary text (items-market AvatarWithName).
98
+ * Presentational; compose into ProfileHeader / ListRow / AccountCluster.
99
+ */
100
+ declare const identityAnatomy: Record<"root" | "title" | "meta" | "avatar" | "subtitle" | "trailing", "root" | "title" | "meta" | "avatar" | "subtitle" | "trailing"> & {
101
+ scope: string;
102
+ };
103
+ /**
104
+ * Profile header — dense account hero (not dating). Media optional; metrics + actions zones.
105
+ * Spatial: identity leading, metrics inline, actions trailing / bottom leading pair.
106
+ */
107
+ declare const profileHeaderAnatomy: Record<"root" | "actions" | "body" | "identity" | "media" | "metrics", "root" | "actions" | "body" | "identity" | "media" | "metrics"> & {
108
+ scope: string;
109
+ };
110
+ /**
111
+ * Entry — compact multi-value content card (feed post, catalog listing, activity item).
112
+ * Universal layout only — not a social/marketplace niche.
113
+ * List stacks cards; Root is one card (idle | selected | muted).
114
+ * Zones: header (leading · heading · meta) · media · body · values · actions · footer.
115
+ */
116
+ declare const entryAnatomy: Record<"values" | "root" | "title" | "meta" | "actions" | "body" | "list" | "value" | "subtitle" | "media" | "header" | "leading" | "heading" | "footer", "values" | "root" | "title" | "meta" | "actions" | "body" | "list" | "value" | "subtitle" | "media" | "header" | "leading" | "heading" | "footer"> & {
117
+ scope: string;
118
+ };
119
+ /**
120
+ * Metric strip — ultra-dense value/label chips (items-market im-stat cluster).
121
+ * Generic stats only — not wallet/currency product niches.
122
+ */
123
+ declare const metricStripAnatomy: Record<"root" | "label" | "value" | "chip", "root" | "label" | "value" | "chip"> & {
124
+ scope: string;
125
+ };
126
+ /**
127
+ * List row — settings / account menu row (h-12 hit target, leading icon, trailing control).
128
+ */
129
+ declare const listRowAnatomy: Record<"root" | "label" | "description" | "trailing" | "leading", "root" | "label" | "description" | "trailing" | "leading"> & {
130
+ scope: string;
131
+ };
132
+ /**
133
+ * Conversation — inbox / DM list row (universal messaging chrome, not dating).
134
+ * Leading avatar · title · preview · meta (time) · badge (unread).
135
+ * Item state: idle | unread | selected.
136
+ */
137
+ declare const conversationAnatomy: Record<"root" | "title" | "meta" | "body" | "item" | "badge" | "leading" | "preview", "root" | "title" | "meta" | "body" | "item" | "badge" | "leading" | "preview"> & {
138
+ scope: string;
139
+ };
140
+ /**
141
+ * Thread — message stream. Items project mine | theirs | pending | failed.
142
+ */
143
+ declare const threadAnatomy: Record<"root" | "meta" | "list" | "item" | "bubble" | "day", "root" | "meta" | "list" | "item" | "bubble" | "day"> & {
144
+ scope: string;
145
+ };
146
+ /**
147
+ * Composer — bottom compose chrome for threads (input + send).
148
+ * Root state: idle | sending | disabled | error.
149
+ */
150
+ declare const composerAnatomy: Record<"root" | "actions" | "input" | "send", "root" | "actions" | "input" | "send"> & {
75
151
  scope: string;
76
152
  };
77
153
  declare const separatorAnatomy: Record<"root", "root"> & {
@@ -90,6 +166,50 @@ declare const sliderAnatomy: Record<"root" | "thumb" | "track" | "range" | "valu
90
166
  declare const pinInputAnatomy: Record<"root" | "input", "root" | "input"> & {
91
167
  scope: string;
92
168
  };
169
+ /**
170
+ * Bar — horizontal layout primitive for toolbars, headers, footers.
171
+ * Enforces safe flex behavior: no overlap, responsive collapse via overflow.
172
+ * Parts: root (flex row), leading, center, trailing, optional seam (sticky stack join).
173
+ * Drive sticky lifecycle with stickyBarMachine → data-aeon-state on root.
174
+ */
175
+ declare const barAnatomy: Record<"root" | "trailing" | "leading" | "center" | "seam", "root" | "trailing" | "leading" | "center" | "seam"> & {
176
+ scope: string;
177
+ };
178
+ /**
179
+ * Panel — collapsible layout region for split views.
180
+ * Group lays out siblings; Root is expanded|collapsed; Label rails vertically when collapsed.
181
+ */
182
+ declare const panelAnatomy: Record<"root" | "group" | "label" | "trigger" | "content", "root" | "group" | "label" | "trigger" | "content"> & {
183
+ scope: string;
184
+ };
185
+ /**
186
+ * App shell — layered application chrome (items-market MainLayout pattern).
187
+ * header / subheader / content / aside / footer / dock / scrim under root.
188
+ */
189
+ declare const appShellAnatomy: Record<"root" | "content" | "header" | "footer" | "subheader" | "aside" | "dock" | "scrim", "root" | "content" | "header" | "footer" | "subheader" | "aside" | "dock" | "scrim"> & {
190
+ scope: string;
191
+ };
192
+ /**
193
+ * Content region — status-slotted body. Every contentRegionMachine state has a part.
194
+ * Pair with Async for fetch; use slots for idle/pending/empty/error/ready/loadingMore/success.
195
+ */
196
+ declare const contentAnatomy: Record<"root" | "body" | "empty" | "toolbar" | "pending" | "error" | "success" | "sentinel", "root" | "body" | "empty" | "toolbar" | "pending" | "error" | "success" | "sentinel"> & {
197
+ scope: string;
198
+ };
199
+ /**
200
+ * Nav — navigational collection (top links, bottom tabs, side rail).
201
+ * Selection reuses tabsMachine; items project inactive|active|disabled.
202
+ */
203
+ declare const navAnatomy: Record<"root" | "label" | "icon" | "indicator" | "item" | "badge", "root" | "label" | "icon" | "indicator" | "item" | "badge"> & {
204
+ scope: string;
205
+ };
206
+ /**
207
+ * ThemeSwitcher — mode toggle (light/dark) + theme preset selector.
208
+ * Parts: root, modes (button group), modeBtn, themeSelect, themeTrigger.
209
+ */
210
+ declare const themeSwitcherAnatomy: Record<"root" | "modes" | "modeBtn" | "themeSelect" | "themeTrigger", "root" | "modes" | "modeBtn" | "themeSelect" | "themeTrigger"> & {
211
+ scope: string;
212
+ };
93
213
 
94
214
  type AttrOptions = {
95
215
  state?: string | string[];
@@ -108,6 +228,30 @@ type AeonSnapshot<M extends AnyStateMachine> = SnapshotFrom<M>;
108
228
  type AeonActor<M extends AnyStateMachine> = ActorRefFrom<M>;
109
229
  /** Flatten nested state value for data-aeon-state attribute. */
110
230
  declare function stateToAttr(value: unknown): string;
231
+ /**
232
+ * Primary visual face for parallel field charts — same hierarchy as Button/Dialog:
233
+ * one leaf on `data-aeon-state`, not a region dump.
234
+ * Priority: pending > invalid > dirty > idle.
235
+ */
236
+ type FieldFace = 'idle' | 'dirty' | 'invalid' | 'pending';
237
+ declare function fieldFace(value: unknown): FieldFace;
238
+ /** Orthogonal field regions for advanced CSS (`data-aeon-interaction`, etc.). */
239
+ declare function fieldRegions(value: unknown): {
240
+ interaction: string;
241
+ validation: string;
242
+ submission: string;
243
+ };
244
+ /** Read one region from a (possibly parallel) snapshot value. */
245
+ declare function getRegionValue(value: unknown, region: string): unknown;
246
+ /**
247
+ * Active path under a region — e.g. `{ deck: { ready: 'matched' } }` →
248
+ * `regionPath(v, 'deck')` → `['ready', 'matched']`.
249
+ */
250
+ declare function regionPath(value: unknown, region: string): string[];
251
+ /** Deepest active key under a region (`['ready','matched']` → `'matched'`). */
252
+ declare function regionLeaf(value: unknown, region: string): string | undefined;
253
+ /** True when the region path equals or ends with the given leaf / path prefix. */
254
+ declare function regionMatches(value: unknown, region: string, match: string | readonly string[]): boolean;
111
255
 
112
256
  /** Stable conditions the machine may occupy — mutually exclusive at a given depth. */
113
257
  type AeonStateValue = string | {
@@ -253,5 +397,109 @@ declare function syncAeonColorMode(root: HTMLElement, mode: AeonColorMode, optio
253
397
  }): void;
254
398
  /** Cross-fade theme changes when View Transitions API is available. */
255
399
  declare function runAeonThemeTransition(apply: () => void): void;
400
+ type AeonPalette = {
401
+ bg: string;
402
+ surface: string;
403
+ surfaceRaised: string;
404
+ border: string;
405
+ text: string;
406
+ muted: string;
407
+ accent: string;
408
+ accentDim: string;
409
+ danger: string;
410
+ dangerDim: string;
411
+ focusRing: string;
412
+ gridLine: string;
413
+ };
414
+ interface AeonThemeDefinition {
415
+ id: string;
416
+ label: string;
417
+ description: string;
418
+ light: AeonPalette;
419
+ dark: AeonPalette;
420
+ }
421
+ /**
422
+ * Register theme definitions. Call once at app init.
423
+ * Returns the registered themes array and lookup map.
424
+ */
425
+ declare function registerAeonThemes(themes: AeonThemeDefinition[]): {
426
+ themes: AeonThemeDefinition[];
427
+ map: Record<string, AeonThemeDefinition>;
428
+ ids: string[];
429
+ };
430
+ declare function isAeonThemeId(value: string): boolean;
431
+ declare function isAeonMode(value: string): value is AeonColorMode;
432
+ /**
433
+ * Apply a theme + mode to `<html>`. Persists to localStorage.
434
+ */
435
+ declare function applyAeonTheme(themeId: string, mode: AeonColorMode, themeMap?: Record<string, AeonThemeDefinition>): void;
436
+ /**
437
+ * Read saved prefs or system preference, apply to `<html>`, return current values.
438
+ */
439
+ declare function initAeonTheme(themeMap?: Record<string, AeonThemeDefinition>): {
440
+ themeId: string;
441
+ mode: AeonColorMode;
442
+ };
443
+
444
+ /**
445
+ * Brand → Aeon CSS variable bridge.
446
+ *
447
+ * Product apps often already have design tokens. Instead of maintaining a parallel
448
+ * `--product-*` layer forever, map them onto Aeon’s runtime vars so `@aeon-ui/ui`
449
+ * recipes and `aeon.css` pick up the brand without forking Panda.
450
+ */
451
+
452
+ /** Minimal brand fields — anything omitted gets a safe default. */
453
+ type BrandPaletteInput = {
454
+ bg: string;
455
+ surface: string;
456
+ surfaceRaised?: string;
457
+ border: string;
458
+ text: string;
459
+ muted: string;
460
+ accent: string;
461
+ accentDim?: string;
462
+ danger?: string;
463
+ dangerDim?: string;
464
+ gridLine?: string;
465
+ /** Optional product fonts (applied as --aeon-font / --aeon-font-display). */
466
+ font?: string;
467
+ fontDisplay?: string;
468
+ radius?: string;
469
+ };
470
+ type BrandPalette = Required<Pick<BrandPaletteInput, 'bg' | 'surface' | 'surfaceRaised' | 'border' | 'text' | 'muted' | 'accent' | 'accentDim' | 'danger' | 'dangerDim' | 'gridLine'>> & {
471
+ font?: string;
472
+ fontDisplay?: string;
473
+ radius?: string;
474
+ focusRing: string;
475
+ };
476
+ /** Normalize a partial brand palette into a full Aeon-compatible palette. */
477
+ declare function normalizeBrandPalette(input: BrandPaletteInput, mode?: AeonColorMode): BrandPalette;
478
+ /** CSS custom properties Aeon recipes already read. */
479
+ declare function brandPaletteToCssVars(palette: BrandPalette): Record<string, string>;
480
+ type ApplyBrandPaletteOptions = {
481
+ mode?: AeonColorMode;
482
+ /** Theme id stamped on <html> (default: `brand`). */
483
+ themeId?: string;
484
+ /** Persist mode/theme to localStorage (default: false — brand apps usually own prefs). */
485
+ persist?: boolean;
486
+ root?: HTMLElement;
487
+ };
488
+ /**
489
+ * Apply a product brand palette to the document so Aeon CSS vars match the app.
490
+ * Does not require registering a catalog theme — one call at boot is enough.
491
+ *
492
+ * @example
493
+ * applyBrandPalette({
494
+ * bg: '#000', surface: '#0a0a0a', border: '#262626',
495
+ * text: '#fafafa', muted: '#a1a1aa', accent: '#57ff97',
496
+ * }, { mode: 'dark' })
497
+ */
498
+ declare function applyBrandPalette(input: BrandPaletteInput, options?: ApplyBrandPaletteOptions): BrandPalette;
499
+ /** Serialize palette vars for injecting a `<style>` tag (SSR / non-DOM). */
500
+ declare function brandPaletteToCssText(input: BrandPaletteInput, options?: {
501
+ mode?: AeonColorMode;
502
+ selector?: string;
503
+ }): string;
256
504
 
257
- export { AEON_PRINCIPLE, AEON_THEME_TRANSITION_CLASS, type AeonActor, type AeonColorMode, type AeonContext, type AeonDataAttrs, type AeonEvent, type AeonSnapshot, type AeonStateValue, DEFAULT_COMPACT_MQ, type LayoutComposition, type LayoutCompositionSpec, type LayoutMode, NORM_PLANE, type NormOrigin, type NormPoint, type NormRect, type RegionLayoutSlot, type ResponsiveLayoutSpec, type ScrollOverflow, type ScrollSnapshot, UI_IS_FUNCTION_OF_STATE, accordionAnatomy, anatomy, asyncAnatomy, avatarAnatomy, buttonAnatomy, checkboxAnatomy, clampNorm, clientFromNorm, comboboxAnatomy, dialogAnatomy, fieldAnatomy, getCompactMq, getScrollSnapshot, insetNormCluster, isAeonColorMode, layoutCompositionForMode, layoutModeAttrs, matchLayoutMode, measureElement, menuAnatomy, normFromClient, partAttrs, partOnlyAttrs, pinInputAnatomy, playSurfaceAnatomy, popoverAnatomy, progressAnatomy, radioGroupAnatomy, regionBoundsForMode, resolveAeonColorMode, resolveRegionRect, runAeonThemeTransition, scopeAttrs, scrollAnatomy, selectAnatomy, separatorAnatomy, sliderAnatomy, stateToAttr, switchAnatomy, syncAeonColorMode, tabsAnatomy, toastAnatomy, tooltipAnatomy };
505
+ export { AEON_PRINCIPLE, AEON_THEME_TRANSITION_CLASS, type AeonActor, type AeonColorMode, type AeonContext, type AeonDataAttrs, type AeonEvent, type AeonPalette, type AeonSnapshot, type AeonStateValue, type AeonThemeDefinition, type ApplyBrandPaletteOptions, type BrandPalette, type BrandPaletteInput, DEFAULT_COMPACT_MQ, type FieldFace, type LayoutComposition, type LayoutCompositionSpec, type LayoutMode, NORM_PLANE, type NormOrigin, type NormPoint, type NormRect, type RegionLayoutSlot, type ResponsiveLayoutSpec, type ScrollOverflow, type ScrollSnapshot, UI_IS_FUNCTION_OF_STATE, accordionAnatomy, anatomy, appNavAnatomy, appShellAnatomy, applyAeonTheme, applyBrandPalette, asyncAnatomy, avatarAnatomy, barAnatomy, brandPaletteToCssText, brandPaletteToCssVars, buttonAnatomy, checkboxAnatomy, clampNorm, clientFromNorm, comboboxAnatomy, composerAnatomy, contentAnatomy, conversationAnatomy, dialogAnatomy, entryAnatomy, fieldAnatomy, fieldFace, fieldRegions, getCompactMq, getRegionValue, getScrollSnapshot, identityAnatomy, initAeonTheme, insetNormCluster, isAeonColorMode, isAeonMode, isAeonThemeId, layoutCompositionForMode, layoutModeAttrs, listRowAnatomy, matchLayoutMode, measureElement, menuAnatomy, metricStripAnatomy, navAnatomy, normFromClient, normalizeBrandPalette, panelAnatomy, partAttrs, partOnlyAttrs, pinInputAnatomy, playSurfaceAnatomy, popoverAnatomy, profileHeaderAnatomy, progressAnatomy, promptAnatomy, radioGroupAnatomy, regionBoundsForMode, regionLeaf, regionMatches, regionPath, registerAeonThemes, resolveAeonColorMode, resolveRegionRect, runAeonThemeTransition, scopeAttrs, scrollAnatomy, selectAnatomy, separatorAnatomy, sliderAnatomy, stateToAttr, statusBannerAnatomy, switchAnatomy, syncAeonColorMode, tabsAnatomy, themeSwitcherAnatomy, threadAnatomy, toastAnatomy, tooltipAnatomy };