aeon-ui-engine 1.0.3 → 1.1.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 (349) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/CONSUMER.md +39 -42
  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 +174 -6
  27. package/packages/core/dist/index.js +259 -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 +196 -5
  34. package/packages/core/src/machine.test.ts +62 -1
  35. package/packages/core/src/machine.ts +93 -0
  36. package/packages/core/src/theme.ts +105 -0
  37. package/packages/panda/aeon.css +7 -0
  38. package/packages/panda/package.json +1 -1
  39. package/packages/panda/panda.config.ts +58 -1
  40. package/packages/panda/src/recipes/app-shell.ts +137 -0
  41. package/packages/panda/src/recipes/avatar.ts +131 -0
  42. package/packages/panda/src/recipes/bar.ts +206 -0
  43. package/packages/panda/src/recipes/button-group.ts +12 -4
  44. package/packages/panda/src/recipes/button.ts +1 -0
  45. package/packages/panda/src/recipes/combobox.ts +2 -1
  46. package/packages/panda/src/recipes/composer.ts +81 -0
  47. package/packages/panda/src/recipes/content.ts +104 -0
  48. package/packages/panda/src/recipes/conversation.ts +106 -0
  49. package/packages/panda/src/recipes/entry.ts +217 -0
  50. package/packages/panda/src/recipes/field.ts +12 -2
  51. package/packages/panda/src/recipes/floating.ts +26 -13
  52. package/packages/panda/src/recipes/identity.ts +73 -0
  53. package/packages/panda/src/recipes/index.ts +15 -0
  54. package/packages/panda/src/recipes/list-row.ts +109 -0
  55. package/packages/panda/src/recipes/metric-strip.ts +80 -0
  56. package/packages/panda/src/recipes/nav.ts +155 -0
  57. package/packages/panda/src/recipes/panel.ts +156 -0
  58. package/packages/panda/src/recipes/pin-input.ts +3 -2
  59. package/packages/panda/src/recipes/profile-header.ts +120 -0
  60. package/packages/panda/src/recipes/select.ts +2 -1
  61. package/packages/panda/src/recipes/slider.ts +6 -4
  62. package/packages/panda/src/recipes/theme-switcher.ts +110 -0
  63. package/packages/panda/src/recipes/thread.ts +88 -0
  64. package/packages/panda/src/theme/catalog-types.ts +2 -0
  65. package/packages/panda/src/theme/catalog.ts +23 -0
  66. package/packages/panda/src/theme/chrome.css +2 -1
  67. package/packages/panda/src/theme/global-theme-css.ts +9 -0
  68. package/packages/panda/src/theme/omarchy.themes.ts +607 -0
  69. package/packages/panda/src/theme/palette.ts +3 -0
  70. package/packages/panda/src/theme/scrollbars.css +58 -21
  71. package/packages/panda/src/theme/themes.config.ts +39 -1
  72. package/packages/panda/styled-system/css/conditions.mjs +1 -1
  73. package/packages/panda/styled-system/css/css.mjs +1 -1
  74. package/packages/panda/styled-system/css/sva.mjs +9 -4
  75. package/packages/panda/styled-system/helpers.mjs +11 -22
  76. package/packages/panda/styled-system/jsx/create-style-context.d.ts +54 -0
  77. package/packages/panda/styled-system/jsx/create-style-context.mjs +121 -0
  78. package/packages/panda/styled-system/jsx/factory.mjs +14 -5
  79. package/packages/panda/styled-system/jsx/index.d.ts +1 -0
  80. package/packages/panda/styled-system/jsx/index.mjs +1 -0
  81. package/packages/panda/styled-system/jsx/is-valid-prop.mjs +2 -2
  82. package/packages/panda/styled-system/patterns/aspect-ratio.d.ts +0 -1
  83. package/packages/panda/styled-system/patterns/bleed.d.ts +0 -1
  84. package/packages/panda/styled-system/patterns/box.d.ts +0 -1
  85. package/packages/panda/styled-system/patterns/center.d.ts +0 -1
  86. package/packages/panda/styled-system/patterns/circle.d.ts +0 -1
  87. package/packages/panda/styled-system/patterns/container.d.ts +0 -1
  88. package/packages/panda/styled-system/patterns/cq.d.ts +0 -1
  89. package/packages/panda/styled-system/patterns/divider.d.ts +0 -1
  90. package/packages/panda/styled-system/patterns/flex.d.ts +0 -1
  91. package/packages/panda/styled-system/patterns/float.d.ts +0 -1
  92. package/packages/panda/styled-system/patterns/grid-item.d.ts +0 -1
  93. package/packages/panda/styled-system/patterns/grid.d.ts +0 -1
  94. package/packages/panda/styled-system/patterns/grid.mjs +1 -1
  95. package/packages/panda/styled-system/patterns/hstack.d.ts +0 -1
  96. package/packages/panda/styled-system/patterns/hstack.mjs +1 -1
  97. package/packages/panda/styled-system/patterns/link-overlay.d.ts +0 -1
  98. package/packages/panda/styled-system/patterns/spacer.d.ts +0 -1
  99. package/packages/panda/styled-system/patterns/spacer.mjs +6 -2
  100. package/packages/panda/styled-system/patterns/square.d.ts +0 -1
  101. package/packages/panda/styled-system/patterns/stack.d.ts +0 -1
  102. package/packages/panda/styled-system/patterns/stack.mjs +1 -1
  103. package/packages/panda/styled-system/patterns/visually-hidden.d.ts +0 -1
  104. package/packages/panda/styled-system/patterns/vstack.d.ts +0 -1
  105. package/packages/panda/styled-system/patterns/vstack.mjs +1 -1
  106. package/packages/panda/styled-system/patterns/wrap.d.ts +0 -1
  107. package/packages/panda/styled-system/patterns/wrap.mjs +1 -1
  108. package/packages/panda/styled-system/recipes/aeon-accordion.d.ts +4 -3
  109. package/packages/panda/styled-system/recipes/aeon-accordion.mjs +1 -0
  110. package/packages/panda/styled-system/recipes/aeon-app-shell.d.ts +34 -0
  111. package/packages/panda/styled-system/recipes/aeon-app-shell.mjs +70 -0
  112. package/packages/panda/styled-system/recipes/aeon-async.d.ts +4 -3
  113. package/packages/panda/styled-system/recipes/aeon-async.mjs +1 -0
  114. package/packages/panda/styled-system/recipes/aeon-avatar.d.ts +36 -0
  115. package/packages/panda/styled-system/recipes/aeon-avatar.mjs +57 -0
  116. package/packages/panda/styled-system/recipes/aeon-badge.d.ts +3 -0
  117. package/packages/panda/styled-system/recipes/aeon-bar.d.ts +40 -0
  118. package/packages/panda/styled-system/recipes/aeon-bar.mjs +77 -0
  119. package/packages/panda/styled-system/recipes/aeon-button-group.d.ts +3 -2
  120. package/packages/panda/styled-system/recipes/aeon-button.d.ts +3 -2
  121. package/packages/panda/styled-system/recipes/aeon-checkbox.d.ts +4 -1
  122. package/packages/panda/styled-system/recipes/aeon-checkbox.mjs +1 -0
  123. package/packages/panda/styled-system/recipes/aeon-combobox.d.ts +4 -3
  124. package/packages/panda/styled-system/recipes/aeon-combobox.mjs +1 -0
  125. package/packages/panda/styled-system/recipes/aeon-composer.d.ts +31 -0
  126. package/packages/panda/styled-system/recipes/aeon-composer.mjs +45 -0
  127. package/packages/panda/styled-system/recipes/aeon-content.d.ts +34 -0
  128. package/packages/panda/styled-system/recipes/aeon-content.mjs +70 -0
  129. package/packages/panda/styled-system/recipes/aeon-conversation.d.ts +31 -0
  130. package/packages/panda/styled-system/recipes/aeon-conversation.mjs +61 -0
  131. package/packages/panda/styled-system/recipes/aeon-dialog.d.ts +4 -1
  132. package/packages/panda/styled-system/recipes/aeon-dialog.mjs +1 -0
  133. package/packages/panda/styled-system/recipes/aeon-entry.d.ts +38 -0
  134. package/packages/panda/styled-system/recipes/aeon-entry.mjs +100 -0
  135. package/packages/panda/styled-system/recipes/aeon-field.d.ts +4 -3
  136. package/packages/panda/styled-system/recipes/aeon-field.mjs +1 -0
  137. package/packages/panda/styled-system/recipes/aeon-identity.d.ts +36 -0
  138. package/packages/panda/styled-system/recipes/aeon-identity.mjs +63 -0
  139. package/packages/panda/styled-system/recipes/aeon-list-row.d.ts +33 -0
  140. package/packages/panda/styled-system/recipes/aeon-list-row.mjs +49 -0
  141. package/packages/panda/styled-system/recipes/aeon-menu.d.ts +4 -1
  142. package/packages/panda/styled-system/recipes/aeon-menu.mjs +1 -0
  143. package/packages/panda/styled-system/recipes/aeon-metric-strip.d.ts +36 -0
  144. package/packages/panda/styled-system/recipes/aeon-metric-strip.mjs +54 -0
  145. package/packages/panda/styled-system/recipes/aeon-nav.d.ts +38 -0
  146. package/packages/panda/styled-system/recipes/aeon-nav.mjs +69 -0
  147. package/packages/panda/styled-system/recipes/aeon-panel.d.ts +34 -0
  148. package/packages/panda/styled-system/recipes/aeon-panel.mjs +58 -0
  149. package/packages/panda/styled-system/recipes/aeon-pin-input.d.ts +4 -1
  150. package/packages/panda/styled-system/recipes/aeon-pin-input.mjs +1 -0
  151. package/packages/panda/styled-system/recipes/aeon-popover.d.ts +4 -1
  152. package/packages/panda/styled-system/recipes/aeon-popover.mjs +1 -0
  153. package/packages/panda/styled-system/recipes/aeon-profile-header.d.ts +36 -0
  154. package/packages/panda/styled-system/recipes/aeon-profile-header.mjs +62 -0
  155. package/packages/panda/styled-system/recipes/aeon-progress.d.ts +4 -1
  156. package/packages/panda/styled-system/recipes/aeon-progress.mjs +1 -0
  157. package/packages/panda/styled-system/recipes/aeon-radio-group.d.ts +4 -1
  158. package/packages/panda/styled-system/recipes/aeon-radio-group.mjs +1 -0
  159. package/packages/panda/styled-system/recipes/aeon-scroll.d.ts +4 -3
  160. package/packages/panda/styled-system/recipes/aeon-scroll.mjs +1 -0
  161. package/packages/panda/styled-system/recipes/aeon-select.d.ts +4 -3
  162. package/packages/panda/styled-system/recipes/aeon-select.mjs +1 -0
  163. package/packages/panda/styled-system/recipes/aeon-separator.d.ts +4 -1
  164. package/packages/panda/styled-system/recipes/aeon-separator.mjs +1 -0
  165. package/packages/panda/styled-system/recipes/aeon-slider.d.ts +4 -1
  166. package/packages/panda/styled-system/recipes/aeon-slider.mjs +1 -0
  167. package/packages/panda/styled-system/recipes/aeon-switch.d.ts +4 -1
  168. package/packages/panda/styled-system/recipes/aeon-switch.mjs +1 -0
  169. package/packages/panda/styled-system/recipes/aeon-tabs.d.ts +4 -1
  170. package/packages/panda/styled-system/recipes/aeon-tabs.mjs +1 -0
  171. package/packages/panda/styled-system/recipes/aeon-theme-switcher.d.ts +34 -0
  172. package/packages/panda/styled-system/recipes/aeon-theme-switcher.mjs +59 -0
  173. package/packages/panda/styled-system/recipes/aeon-thread.d.ts +31 -0
  174. package/packages/panda/styled-system/recipes/aeon-thread.mjs +53 -0
  175. package/packages/panda/styled-system/recipes/aeon-toast.d.ts +4 -1
  176. package/packages/panda/styled-system/recipes/aeon-toast.mjs +1 -0
  177. package/packages/panda/styled-system/recipes/aeon-tooltip.d.ts +4 -1
  178. package/packages/panda/styled-system/recipes/aeon-tooltip.mjs +1 -0
  179. package/packages/panda/styled-system/recipes/index.d.ts +16 -1
  180. package/packages/panda/styled-system/recipes/index.mjs +16 -1
  181. package/packages/panda/styled-system/styles.css +2317 -450
  182. package/packages/panda/styled-system/tokens/index.mjs +43 -7
  183. package/packages/panda/styled-system/tokens/tokens.d.ts +5 -5
  184. package/packages/panda/styled-system/types/composition.d.ts +86 -23
  185. package/packages/panda/styled-system/types/conditions.d.ts +34 -10
  186. package/packages/panda/styled-system/types/csstype.d.ts +6405 -5133
  187. package/packages/panda/styled-system/types/jsx.d.ts +27 -10
  188. package/packages/panda/styled-system/types/pattern.d.ts +4 -4
  189. package/packages/panda/styled-system/types/prop-type.d.ts +11 -1
  190. package/packages/panda/styled-system/types/style-props.d.ts +2763 -2165
  191. package/packages/panda/styled-system/types/system-types.d.ts +38 -80
  192. package/packages/panda/theme-runtime.css +945 -0
  193. package/packages/primitives/dist/chunk-R25CUHNF.js +46 -0
  194. package/packages/primitives/dist/chunk-RO2DMFN5.js +89 -0
  195. package/packages/primitives/dist/chunk-V5D7LS4J.js +61 -0
  196. package/packages/primitives/dist/chunk-YBPNI2LI.js +70 -0
  197. package/packages/primitives/dist/index.d.ts +4 -0
  198. package/packages/primitives/dist/index.js +30 -8
  199. package/packages/primitives/dist/machines/app-shell.d.ts +57 -0
  200. package/packages/primitives/dist/machines/app-shell.js +8 -0
  201. package/packages/primitives/dist/machines/async.d.ts +4 -4
  202. package/packages/primitives/dist/machines/content-region.d.ts +72 -0
  203. package/packages/primitives/dist/machines/content-region.js +8 -0
  204. package/packages/primitives/dist/machines/panel.d.ts +50 -0
  205. package/packages/primitives/dist/machines/panel.js +6 -0
  206. package/packages/primitives/dist/machines/sticky-bar.d.ts +62 -0
  207. package/packages/primitives/dist/machines/sticky-bar.js +8 -0
  208. package/packages/primitives/node_modules/.bin/esbuild +21 -0
  209. package/packages/primitives/node_modules/.bin/vite +21 -0
  210. package/packages/primitives/node_modules/.bin/vitest +2 -2
  211. package/packages/primitives/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -1
  212. package/packages/primitives/package.json +15 -5
  213. package/packages/primitives/scripts/xstate-introspect.mjs +35 -0
  214. package/packages/primitives/src/index.ts +4 -0
  215. package/packages/primitives/src/machines/app-shell.ts +63 -0
  216. package/packages/primitives/src/machines/content-region.ts +107 -0
  217. package/packages/primitives/src/machines/panel.ts +71 -0
  218. package/packages/primitives/src/machines/sticky-bar.ts +89 -0
  219. package/packages/react/dist/index.d.ts +403 -16
  220. package/packages/react/dist/index.js +1505 -227
  221. package/packages/react/node_modules/.bin/esbuild +21 -0
  222. package/packages/react/node_modules/.bin/vite +21 -0
  223. package/packages/react/node_modules/.bin/vitest +2 -2
  224. package/packages/react/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -1
  225. package/packages/react/package.json +18 -7
  226. package/packages/react/src/app-shell/index.tsx +154 -0
  227. package/packages/react/src/async/index.tsx +6 -1
  228. package/packages/react/src/async/map-content-state.ts +18 -0
  229. package/packages/react/src/avatar/index.tsx +19 -0
  230. package/packages/react/src/bar/index.tsx +101 -0
  231. package/packages/react/src/button/index.tsx +4 -2
  232. package/packages/react/src/composer/index.tsx +75 -0
  233. package/packages/react/src/content/index.tsx +149 -0
  234. package/packages/react/src/conversation/index.tsx +78 -0
  235. package/packages/react/src/entry/index.tsx +85 -0
  236. package/packages/react/src/field/index.tsx +31 -18
  237. package/packages/react/src/identity/index.tsx +110 -0
  238. package/packages/react/src/index.ts +15 -0
  239. package/packages/react/src/list-row/index.tsx +80 -0
  240. package/packages/react/src/metric-strip/index.tsx +88 -0
  241. package/packages/react/src/nav/index.tsx +155 -0
  242. package/packages/react/src/panel/index.tsx +267 -0
  243. package/packages/react/src/profile-header/index.tsx +91 -0
  244. package/packages/react/src/radio-group/index.tsx +19 -7
  245. package/packages/react/src/slider/index.tsx +3 -1
  246. package/packages/react/src/sticky-bar/index.tsx +135 -0
  247. package/packages/react/src/switch/index.tsx +7 -1
  248. package/packages/react/src/theme-switcher/index.tsx +227 -0
  249. package/packages/react/src/thread/index.tsx +95 -0
  250. package/packages/react/src/toast/primitives.tsx +2 -2
  251. package/packages/react/src/tooltip/tooltip.test.tsx +9 -1
  252. package/packages/react/tsconfig.json +2 -1
  253. package/packages/schemas/README.md +52 -0
  254. package/packages/schemas/dist/index.d.ts +287 -0
  255. package/packages/schemas/dist/index.js +701 -0
  256. package/packages/schemas/json/accordion.json +132 -0
  257. package/packages/schemas/json/async.json +161 -0
  258. package/packages/schemas/json/button.json +170 -0
  259. package/packages/schemas/json/catalog.json +2299 -0
  260. package/packages/schemas/json/checkbox.json +136 -0
  261. package/packages/schemas/json/combobox.json +130 -0
  262. package/packages/schemas/json/dialog.json +154 -0
  263. package/packages/schemas/json/field.json +171 -0
  264. package/packages/schemas/json/menu.json +138 -0
  265. package/packages/schemas/json/popover.json +133 -0
  266. package/packages/schemas/json/progress.json +137 -0
  267. package/packages/schemas/json/scroll.json +129 -0
  268. package/packages/schemas/json/select.json +140 -0
  269. package/packages/schemas/json/switch.json +136 -0
  270. package/packages/schemas/json/tabs.json +135 -0
  271. package/packages/schemas/json/toast.json +141 -0
  272. package/packages/schemas/json/tooltip.json +123 -0
  273. package/packages/schemas/node_modules/.bin/esbuild +21 -0
  274. package/packages/schemas/node_modules/.bin/jiti +21 -0
  275. package/packages/schemas/node_modules/.bin/tsc +21 -0
  276. package/packages/schemas/node_modules/.bin/tsserver +21 -0
  277. package/packages/schemas/node_modules/.bin/tsup +21 -0
  278. package/packages/schemas/node_modules/.bin/tsup-node +21 -0
  279. package/packages/schemas/node_modules/.bin/tsx +21 -0
  280. package/packages/schemas/node_modules/.bin/vite +21 -0
  281. package/packages/schemas/node_modules/.bin/vitest +21 -0
  282. package/packages/schemas/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -0
  283. package/packages/schemas/package.json +56 -0
  284. package/packages/schemas/prompts/cursorrules.md +64 -0
  285. package/packages/schemas/prompts/statecharts.md +31 -0
  286. package/packages/schemas/prompts/system.md +30 -0
  287. package/packages/schemas/registry/catalog.json +54 -0
  288. package/packages/schemas/registry/components/accordion.json +132 -0
  289. package/packages/schemas/registry/components/async.json +161 -0
  290. package/packages/schemas/registry/components/button.json +170 -0
  291. package/packages/schemas/registry/components/checkbox.json +136 -0
  292. package/packages/schemas/registry/components/combobox.json +130 -0
  293. package/packages/schemas/registry/components/dialog.json +154 -0
  294. package/packages/schemas/registry/components/field.json +171 -0
  295. package/packages/schemas/registry/components/menu.json +138 -0
  296. package/packages/schemas/registry/components/popover.json +133 -0
  297. package/packages/schemas/registry/components/progress.json +137 -0
  298. package/packages/schemas/registry/components/scroll.json +129 -0
  299. package/packages/schemas/registry/components/select.json +140 -0
  300. package/packages/schemas/registry/components/switch.json +136 -0
  301. package/packages/schemas/registry/components/tabs.json +135 -0
  302. package/packages/schemas/registry/components/toast.json +141 -0
  303. package/packages/schemas/registry/components/tooltip.json +123 -0
  304. package/packages/schemas/registry/machines/async.json +219 -0
  305. package/packages/schemas/registry/machines/buttonLifecycle.json +224 -0
  306. package/packages/schemas/registry/machines/dialog.json +143 -0
  307. package/packages/schemas/registry/machines/field.json +275 -0
  308. package/packages/schemas/scripts/emit.ts +61 -0
  309. package/packages/schemas/src/aeon-to-schema.test.ts +70 -0
  310. package/packages/schemas/src/aeon-to-schema.ts +206 -0
  311. package/packages/schemas/src/agent-bridge.ts +82 -0
  312. package/packages/schemas/src/components.ts +307 -0
  313. package/packages/schemas/src/index.test.ts +25 -0
  314. package/packages/schemas/src/index.ts +25 -0
  315. package/packages/schemas/src/prompts.ts +121 -0
  316. package/packages/schemas/src/registry.ts +73 -0
  317. package/packages/schemas/src/schema-builder.ts +87 -0
  318. package/packages/schemas/tsconfig.json +9 -0
  319. package/packages/solid/package.json +2 -2
  320. package/packages/svelte/node_modules/.bin/esbuild +21 -0
  321. package/packages/svelte/node_modules/.bin/vite +4 -4
  322. package/packages/svelte/package.json +15 -5
  323. package/packages/ui/README.md +19 -6
  324. package/packages/ui/dist/index.d.ts +254 -9
  325. package/packages/ui/dist/index.js +690 -139
  326. package/packages/ui/src/app-shell.tsx +44 -0
  327. package/packages/ui/src/async.tsx +2 -1
  328. package/packages/ui/src/avatar.tsx +35 -0
  329. package/packages/ui/src/bar.tsx +34 -0
  330. package/packages/ui/src/composer.tsx +27 -0
  331. package/packages/ui/src/content.tsx +43 -0
  332. package/packages/ui/src/conversation.tsx +43 -0
  333. package/packages/ui/src/entry.tsx +76 -0
  334. package/packages/ui/src/field.tsx +5 -0
  335. package/packages/ui/src/identity.tsx +35 -0
  336. package/packages/ui/src/index.ts +16 -0
  337. package/packages/ui/src/list-row.tsx +30 -0
  338. package/packages/ui/src/metric-strip.tsx +29 -0
  339. package/packages/ui/src/nav.tsx +46 -0
  340. package/packages/ui/src/panel.tsx +39 -0
  341. package/packages/ui/src/profile-header.tsx +35 -0
  342. package/packages/ui/src/sticky-bar.tsx +42 -0
  343. package/packages/ui/src/switch.tsx +17 -4
  344. package/packages/ui/src/theme-switcher.tsx +41 -0
  345. package/packages/ui/src/thread.tsx +35 -0
  346. package/packages/vue/package.json +3 -3
  347. package/scripts/vite-aliases.mjs +57 -3
  348. package/scripts/xstate-introspect.mjs +68 -0
  349. package/packages/react/src/async/legacy-region.tsx +0 -38
@@ -0,0 +1,2299 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://aeon-ui.com/schemas/catalog.json",
4
+ "title": "Aeon UI Component Catalog",
5
+ "description": "Machine-legible index of Aeon UI components. Prefer these schemas over inventing props, states, or boolean UI flags.",
6
+ "version": "0.1.0",
7
+ "principle": "UI = f(state)",
8
+ "attributes": [
9
+ "data-aeon-scope",
10
+ "data-aeon-part",
11
+ "data-aeon-state"
12
+ ],
13
+ "components": [
14
+ "button",
15
+ "async",
16
+ "field",
17
+ "dialog",
18
+ "switch",
19
+ "checkbox",
20
+ "tabs",
21
+ "accordion",
22
+ "popover",
23
+ "menu",
24
+ "select",
25
+ "combobox",
26
+ "tooltip",
27
+ "toast",
28
+ "scroll",
29
+ "progress"
30
+ ],
31
+ "schemas": {
32
+ "button": {
33
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
34
+ "$id": "https://aeon-ui.com/schemas/button.json",
35
+ "title": "Button",
36
+ "description": "Action control. status is a prop projection (not an in-tree machine). Never invent parallel useState for lifecycle.",
37
+ "type": "object",
38
+ "additionalProperties": false,
39
+ "required": [
40
+ "component",
41
+ "scope"
42
+ ],
43
+ "properties": {
44
+ "component": {
45
+ "const": "Button"
46
+ },
47
+ "scope": {
48
+ "const": "button"
49
+ },
50
+ "parts": {
51
+ "type": "array",
52
+ "description": "Anatomy part keys — map to data-aeon-part",
53
+ "items": {
54
+ "type": "string",
55
+ "enum": [
56
+ "root",
57
+ "group",
58
+ "label",
59
+ "icon"
60
+ ]
61
+ },
62
+ "uniqueItems": true
63
+ },
64
+ "states": {
65
+ "type": "array",
66
+ "description": "Allowed data-aeon-state values (stable states only)",
67
+ "items": {
68
+ "type": "string",
69
+ "enum": [
70
+ "idle",
71
+ "pending",
72
+ "success",
73
+ "failure",
74
+ "disabled"
75
+ ]
76
+ },
77
+ "uniqueItems": true
78
+ },
79
+ "props": {
80
+ "type": "object",
81
+ "additionalProperties": false,
82
+ "properties": {
83
+ "status": {
84
+ "type": "string",
85
+ "enum": [
86
+ "idle",
87
+ "pending",
88
+ "success",
89
+ "failure",
90
+ "disabled"
91
+ ],
92
+ "default": "idle"
93
+ },
94
+ "variant": {
95
+ "type": "string",
96
+ "enum": [
97
+ "solid",
98
+ "outline",
99
+ "ghost",
100
+ "link"
101
+ ]
102
+ },
103
+ "size": {
104
+ "type": "string",
105
+ "enum": [
106
+ "sm",
107
+ "md",
108
+ "lg"
109
+ ]
110
+ },
111
+ "disabled": {
112
+ "type": "boolean"
113
+ }
114
+ }
115
+ },
116
+ "slots": {
117
+ "type": "object",
118
+ "description": "Named composition slots / compound parts",
119
+ "additionalProperties": {
120
+ "type": "string"
121
+ },
122
+ "properties": {
123
+ "Root": {
124
+ "const": "button.root",
125
+ "description": "button.root"
126
+ },
127
+ "Group": {
128
+ "const": "button.group",
129
+ "description": "button.group"
130
+ },
131
+ "Label": {
132
+ "const": "button.label",
133
+ "description": "button.label"
134
+ },
135
+ "Icon": {
136
+ "const": "button.icon",
137
+ "description": "button.icon"
138
+ }
139
+ }
140
+ },
141
+ "machine": {
142
+ "type": [
143
+ "string",
144
+ "null"
145
+ ],
146
+ "description": "XState machine export from @aeon-ui/primitives, or null if prop/React driven",
147
+ "const": "buttonLifecycleMachine"
148
+ },
149
+ "runtime": {
150
+ "type": "string",
151
+ "description": "How headless state is driven at runtime",
152
+ "const": "status prop"
153
+ },
154
+ "events": {
155
+ "type": "array",
156
+ "items": {
157
+ "type": "string",
158
+ "enum": []
159
+ }
160
+ },
161
+ "examples": {
162
+ "type": "array",
163
+ "items": {
164
+ "type": "string"
165
+ },
166
+ "default": [
167
+ "<Button.Root status=\"pending\" aria-busy>Saving…</Button.Root>",
168
+ "const [snap, send] = useAeonMachine(buttonLifecycleMachine)\n<Button.Root status={snap.value as ButtonStatus} onClick={() => send({ type: 'PRESS' })} />"
169
+ ]
170
+ }
171
+ },
172
+ "x-aeon": {
173
+ "scope": "button",
174
+ "parts": [
175
+ "root",
176
+ "group",
177
+ "label",
178
+ "icon"
179
+ ],
180
+ "states": [
181
+ "idle",
182
+ "pending",
183
+ "success",
184
+ "failure",
185
+ "disabled"
186
+ ],
187
+ "machine": "buttonLifecycleMachine",
188
+ "runtime": "status prop",
189
+ "events": [],
190
+ "slots": {
191
+ "Root": "button.root",
192
+ "Group": "button.group",
193
+ "Label": "button.label",
194
+ "Icon": "button.icon"
195
+ },
196
+ "examples": [
197
+ "<Button.Root status=\"pending\" aria-busy>Saving…</Button.Root>",
198
+ "const [snap, send] = useAeonMachine(buttonLifecycleMachine)\n<Button.Root status={snap.value as ButtonStatus} onClick={() => send({ type: 'PRESS' })} />"
199
+ ]
200
+ }
201
+ },
202
+ "async": {
203
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
204
+ "$id": "https://aeon-ui.com/schemas/async.json",
205
+ "title": "Async",
206
+ "description": "Fetch region with full lifecycle totality: idle → loading → success|empty|failure. Always render every stable state in demos.",
207
+ "type": "object",
208
+ "additionalProperties": false,
209
+ "required": [
210
+ "component",
211
+ "scope"
212
+ ],
213
+ "properties": {
214
+ "component": {
215
+ "const": "Async"
216
+ },
217
+ "scope": {
218
+ "const": "async"
219
+ },
220
+ "parts": {
221
+ "type": "array",
222
+ "description": "Anatomy part keys — map to data-aeon-part",
223
+ "items": {
224
+ "type": "string",
225
+ "enum": [
226
+ "root",
227
+ "track",
228
+ "segment",
229
+ "readout",
230
+ "readoutRail",
231
+ "readoutBody",
232
+ "actions"
233
+ ]
234
+ },
235
+ "uniqueItems": true
236
+ },
237
+ "states": {
238
+ "type": "array",
239
+ "description": "Allowed data-aeon-state values (stable states only)",
240
+ "items": {
241
+ "type": "string",
242
+ "enum": [
243
+ "idle",
244
+ "loading",
245
+ "success",
246
+ "empty",
247
+ "failure"
248
+ ]
249
+ },
250
+ "uniqueItems": true
251
+ },
252
+ "props": {
253
+ "type": "object",
254
+ "additionalProperties": false,
255
+ "properties": {}
256
+ },
257
+ "slots": {
258
+ "type": "object",
259
+ "description": "Named composition slots / compound parts",
260
+ "additionalProperties": {
261
+ "type": "string"
262
+ },
263
+ "properties": {
264
+ "Root": {
265
+ "const": "async.root",
266
+ "description": "async.root"
267
+ },
268
+ "Track": {
269
+ "const": "async.track",
270
+ "description": "async.track"
271
+ },
272
+ "Segment": {
273
+ "const": "async.segment",
274
+ "description": "async.segment"
275
+ },
276
+ "Readout": {
277
+ "const": "async.readout",
278
+ "description": "async.readout"
279
+ },
280
+ "Actions": {
281
+ "const": "async.actions",
282
+ "description": "async.actions"
283
+ }
284
+ }
285
+ },
286
+ "machine": {
287
+ "type": [
288
+ "string",
289
+ "null"
290
+ ],
291
+ "description": "XState machine export from @aeon-ui/primitives, or null if prop/React driven",
292
+ "const": "createAsyncMachine"
293
+ },
294
+ "runtime": {
295
+ "type": "string",
296
+ "description": "How headless state is driven at runtime",
297
+ "const": "useAeonMachine"
298
+ },
299
+ "events": {
300
+ "type": "array",
301
+ "items": {
302
+ "type": "string",
303
+ "enum": [
304
+ "FETCH",
305
+ "RESOLVE",
306
+ "REJECT",
307
+ "RESET",
308
+ "STALE",
309
+ "REFRESH"
310
+ ]
311
+ }
312
+ },
313
+ "examples": {
314
+ "type": "array",
315
+ "items": {
316
+ "type": "string"
317
+ },
318
+ "default": [
319
+ "<Async.Root>\n {/* Content faces via asyncStatusToContentState — not Track */}\n <Async.Actions />\n</Async.Root>"
320
+ ]
321
+ }
322
+ },
323
+ "x-aeon": {
324
+ "scope": "async",
325
+ "parts": [
326
+ "root",
327
+ "track",
328
+ "segment",
329
+ "readout",
330
+ "readoutRail",
331
+ "readoutBody",
332
+ "actions"
333
+ ],
334
+ "states": [
335
+ "idle",
336
+ "loading",
337
+ "success",
338
+ "empty",
339
+ "failure"
340
+ ],
341
+ "machine": "createAsyncMachine",
342
+ "runtime": "useAeonMachine",
343
+ "events": [
344
+ "FETCH",
345
+ "RESOLVE",
346
+ "REJECT",
347
+ "RESET",
348
+ "STALE",
349
+ "REFRESH"
350
+ ],
351
+ "slots": {
352
+ "Root": "async.root",
353
+ "Track": "async.track",
354
+ "Segment": "async.segment",
355
+ "Readout": "async.readout",
356
+ "Actions": "async.actions"
357
+ },
358
+ "examples": [
359
+ "<Async.Root>\n {/* Content faces via asyncStatusToContentState — not Track */}\n <Async.Actions />\n</Async.Root>"
360
+ ]
361
+ }
362
+ },
363
+ "field": {
364
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
365
+ "$id": "https://aeon-ui.com/schemas/field.json",
366
+ "title": "Field",
367
+ "description": "Parallel regions: interaction × validation × submission. Do not collapse into a single error boolean.",
368
+ "type": "object",
369
+ "additionalProperties": false,
370
+ "required": [
371
+ "component",
372
+ "scope"
373
+ ],
374
+ "properties": {
375
+ "component": {
376
+ "const": "Field"
377
+ },
378
+ "scope": {
379
+ "const": "field"
380
+ },
381
+ "parts": {
382
+ "type": "array",
383
+ "description": "Anatomy part keys — map to data-aeon-part",
384
+ "items": {
385
+ "type": "string",
386
+ "enum": [
387
+ "root",
388
+ "label",
389
+ "control",
390
+ "textarea",
391
+ "message",
392
+ "hint"
393
+ ]
394
+ },
395
+ "uniqueItems": true
396
+ },
397
+ "states": {
398
+ "type": "array",
399
+ "description": "Allowed data-aeon-state values (stable states only)",
400
+ "items": {
401
+ "type": "string",
402
+ "enum": [
403
+ "pristine",
404
+ "dirty",
405
+ "valid",
406
+ "invalid",
407
+ "idle",
408
+ "pending",
409
+ "interaction.pristine",
410
+ "interaction.dirty",
411
+ "validation.valid",
412
+ "validation.invalid",
413
+ "submission.idle",
414
+ "submission.pending"
415
+ ]
416
+ },
417
+ "uniqueItems": true
418
+ },
419
+ "props": {
420
+ "type": "object",
421
+ "additionalProperties": false,
422
+ "properties": {}
423
+ },
424
+ "slots": {
425
+ "type": "object",
426
+ "description": "Named composition slots / compound parts",
427
+ "additionalProperties": {
428
+ "type": "string"
429
+ },
430
+ "properties": {
431
+ "Root": {
432
+ "const": "field.root",
433
+ "description": "field.root"
434
+ },
435
+ "Label": {
436
+ "const": "field.label",
437
+ "description": "field.label"
438
+ },
439
+ "Control": {
440
+ "const": "field.control",
441
+ "description": "field.control"
442
+ },
443
+ "Message": {
444
+ "const": "field.message",
445
+ "description": "field.message"
446
+ },
447
+ "Hint": {
448
+ "const": "field.hint",
449
+ "description": "field.hint"
450
+ }
451
+ }
452
+ },
453
+ "machine": {
454
+ "type": [
455
+ "string",
456
+ "null"
457
+ ],
458
+ "description": "XState machine export from @aeon-ui/primitives, or null if prop/React driven",
459
+ "const": "fieldMachine"
460
+ },
461
+ "runtime": {
462
+ "type": "string",
463
+ "description": "How headless state is driven at runtime",
464
+ "const": "useAeonMachine"
465
+ },
466
+ "events": {
467
+ "type": "array",
468
+ "items": {
469
+ "type": "string",
470
+ "enum": [
471
+ "INPUT",
472
+ "BLUR",
473
+ "VALIDATE",
474
+ "SUBMIT",
475
+ "SUBMIT_DONE",
476
+ "SUBMIT_FAIL",
477
+ "RESET"
478
+ ]
479
+ }
480
+ },
481
+ "examples": {
482
+ "type": "array",
483
+ "items": {
484
+ "type": "string"
485
+ },
486
+ "default": []
487
+ }
488
+ },
489
+ "x-aeon": {
490
+ "scope": "field",
491
+ "parts": [
492
+ "root",
493
+ "label",
494
+ "control",
495
+ "textarea",
496
+ "message",
497
+ "hint"
498
+ ],
499
+ "states": [
500
+ "pristine",
501
+ "dirty",
502
+ "valid",
503
+ "invalid",
504
+ "idle",
505
+ "pending",
506
+ "interaction.pristine",
507
+ "interaction.dirty",
508
+ "validation.valid",
509
+ "validation.invalid",
510
+ "submission.idle",
511
+ "submission.pending"
512
+ ],
513
+ "machine": "fieldMachine",
514
+ "runtime": "useAeonMachine",
515
+ "events": [
516
+ "INPUT",
517
+ "BLUR",
518
+ "VALIDATE",
519
+ "SUBMIT",
520
+ "SUBMIT_DONE",
521
+ "SUBMIT_FAIL",
522
+ "RESET"
523
+ ],
524
+ "slots": {
525
+ "Root": "field.root",
526
+ "Label": "field.label",
527
+ "Control": "field.control",
528
+ "Message": "field.message",
529
+ "Hint": "field.hint"
530
+ },
531
+ "examples": []
532
+ }
533
+ },
534
+ "dialog": {
535
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
536
+ "$id": "https://aeon-ui.com/schemas/dialog.json",
537
+ "title": "Dialog",
538
+ "description": "Modal open/closed via dialogMachine. Dismissal is a transition, not ad hoc flags.",
539
+ "type": "object",
540
+ "additionalProperties": false,
541
+ "required": [
542
+ "component",
543
+ "scope"
544
+ ],
545
+ "properties": {
546
+ "component": {
547
+ "const": "Dialog"
548
+ },
549
+ "scope": {
550
+ "const": "dialog"
551
+ },
552
+ "parts": {
553
+ "type": "array",
554
+ "description": "Anatomy part keys — map to data-aeon-part",
555
+ "items": {
556
+ "type": "string",
557
+ "enum": [
558
+ "root",
559
+ "trigger",
560
+ "portal",
561
+ "backdrop",
562
+ "positioner",
563
+ "content",
564
+ "title",
565
+ "description",
566
+ "closeTrigger"
567
+ ]
568
+ },
569
+ "uniqueItems": true
570
+ },
571
+ "states": {
572
+ "type": "array",
573
+ "description": "Allowed data-aeon-state values (stable states only)",
574
+ "items": {
575
+ "type": "string",
576
+ "enum": [
577
+ "open",
578
+ "closed"
579
+ ]
580
+ },
581
+ "uniqueItems": true
582
+ },
583
+ "props": {
584
+ "type": "object",
585
+ "additionalProperties": false,
586
+ "properties": {}
587
+ },
588
+ "slots": {
589
+ "type": "object",
590
+ "description": "Named composition slots / compound parts",
591
+ "additionalProperties": {
592
+ "type": "string"
593
+ },
594
+ "properties": {
595
+ "Root": {
596
+ "const": "dialog.root",
597
+ "description": "dialog.root"
598
+ },
599
+ "Trigger": {
600
+ "const": "dialog.trigger",
601
+ "description": "dialog.trigger"
602
+ },
603
+ "Content": {
604
+ "const": "dialog.content",
605
+ "description": "dialog.content"
606
+ },
607
+ "Title": {
608
+ "const": "dialog.title",
609
+ "description": "dialog.title"
610
+ },
611
+ "Description": {
612
+ "const": "dialog.description",
613
+ "description": "dialog.description"
614
+ },
615
+ "CloseTrigger": {
616
+ "const": "dialog.closeTrigger",
617
+ "description": "dialog.closeTrigger"
618
+ }
619
+ }
620
+ },
621
+ "machine": {
622
+ "type": [
623
+ "string",
624
+ "null"
625
+ ],
626
+ "description": "XState machine export from @aeon-ui/primitives, or null if prop/React driven",
627
+ "const": "dialogMachine"
628
+ },
629
+ "runtime": {
630
+ "type": "string",
631
+ "description": "How headless state is driven at runtime",
632
+ "const": "useAeonMachine"
633
+ },
634
+ "events": {
635
+ "type": "array",
636
+ "items": {
637
+ "type": "string",
638
+ "enum": [
639
+ "OPEN",
640
+ "CLOSE",
641
+ "TOGGLE"
642
+ ]
643
+ }
644
+ },
645
+ "examples": {
646
+ "type": "array",
647
+ "items": {
648
+ "type": "string"
649
+ },
650
+ "default": []
651
+ }
652
+ },
653
+ "x-aeon": {
654
+ "scope": "dialog",
655
+ "parts": [
656
+ "root",
657
+ "trigger",
658
+ "portal",
659
+ "backdrop",
660
+ "positioner",
661
+ "content",
662
+ "title",
663
+ "description",
664
+ "closeTrigger"
665
+ ],
666
+ "states": [
667
+ "open",
668
+ "closed"
669
+ ],
670
+ "machine": "dialogMachine",
671
+ "runtime": "useAeonMachine",
672
+ "events": [
673
+ "OPEN",
674
+ "CLOSE",
675
+ "TOGGLE"
676
+ ],
677
+ "slots": {
678
+ "Root": "dialog.root",
679
+ "Trigger": "dialog.trigger",
680
+ "Content": "dialog.content",
681
+ "Title": "dialog.title",
682
+ "Description": "dialog.description",
683
+ "CloseTrigger": "dialog.closeTrigger"
684
+ },
685
+ "examples": []
686
+ }
687
+ },
688
+ "switch": {
689
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
690
+ "$id": "https://aeon-ui.com/schemas/switch.json",
691
+ "title": "Switch",
692
+ "description": "Binary toggle via toggleMachine.",
693
+ "type": "object",
694
+ "additionalProperties": false,
695
+ "required": [
696
+ "component",
697
+ "scope"
698
+ ],
699
+ "properties": {
700
+ "component": {
701
+ "const": "Switch"
702
+ },
703
+ "scope": {
704
+ "const": "switch"
705
+ },
706
+ "parts": {
707
+ "type": "array",
708
+ "description": "Anatomy part keys — map to data-aeon-part",
709
+ "items": {
710
+ "type": "string",
711
+ "enum": [
712
+ "root",
713
+ "control",
714
+ "thumb",
715
+ "label",
716
+ "hiddenInput"
717
+ ]
718
+ },
719
+ "uniqueItems": true
720
+ },
721
+ "states": {
722
+ "type": "array",
723
+ "description": "Allowed data-aeon-state values (stable states only)",
724
+ "items": {
725
+ "type": "string",
726
+ "enum": [
727
+ "checked",
728
+ "unchecked"
729
+ ]
730
+ },
731
+ "uniqueItems": true
732
+ },
733
+ "props": {
734
+ "type": "object",
735
+ "additionalProperties": false,
736
+ "properties": {}
737
+ },
738
+ "slots": {
739
+ "type": "object",
740
+ "description": "Named composition slots / compound parts",
741
+ "additionalProperties": {
742
+ "type": "string"
743
+ },
744
+ "properties": {
745
+ "Root": {
746
+ "const": "switch.root",
747
+ "description": "switch.root"
748
+ },
749
+ "Control": {
750
+ "const": "switch.control",
751
+ "description": "switch.control"
752
+ },
753
+ "Thumb": {
754
+ "const": "switch.thumb",
755
+ "description": "switch.thumb"
756
+ },
757
+ "Label": {
758
+ "const": "switch.label",
759
+ "description": "switch.label"
760
+ }
761
+ }
762
+ },
763
+ "machine": {
764
+ "type": [
765
+ "string",
766
+ "null"
767
+ ],
768
+ "description": "XState machine export from @aeon-ui/primitives, or null if prop/React driven",
769
+ "const": "toggleMachine"
770
+ },
771
+ "runtime": {
772
+ "type": "string",
773
+ "description": "How headless state is driven at runtime",
774
+ "const": "useAeonMachine"
775
+ },
776
+ "events": {
777
+ "type": "array",
778
+ "items": {
779
+ "type": "string",
780
+ "enum": [
781
+ "TOGGLE",
782
+ "CHECK",
783
+ "UNCHECK"
784
+ ]
785
+ }
786
+ },
787
+ "examples": {
788
+ "type": "array",
789
+ "items": {
790
+ "type": "string"
791
+ },
792
+ "default": []
793
+ }
794
+ },
795
+ "x-aeon": {
796
+ "scope": "switch",
797
+ "parts": [
798
+ "root",
799
+ "control",
800
+ "thumb",
801
+ "label",
802
+ "hiddenInput"
803
+ ],
804
+ "states": [
805
+ "checked",
806
+ "unchecked"
807
+ ],
808
+ "machine": "toggleMachine",
809
+ "runtime": "useAeonMachine",
810
+ "events": [
811
+ "TOGGLE",
812
+ "CHECK",
813
+ "UNCHECK"
814
+ ],
815
+ "slots": {
816
+ "Root": "switch.root",
817
+ "Control": "switch.control",
818
+ "Thumb": "switch.thumb",
819
+ "Label": "switch.label"
820
+ },
821
+ "examples": []
822
+ }
823
+ },
824
+ "checkbox": {
825
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
826
+ "$id": "https://aeon-ui.com/schemas/checkbox.json",
827
+ "title": "Checkbox",
828
+ "description": "Binary toggle via toggleMachine (same chart family as Switch).",
829
+ "type": "object",
830
+ "additionalProperties": false,
831
+ "required": [
832
+ "component",
833
+ "scope"
834
+ ],
835
+ "properties": {
836
+ "component": {
837
+ "const": "Checkbox"
838
+ },
839
+ "scope": {
840
+ "const": "checkbox"
841
+ },
842
+ "parts": {
843
+ "type": "array",
844
+ "description": "Anatomy part keys — map to data-aeon-part",
845
+ "items": {
846
+ "type": "string",
847
+ "enum": [
848
+ "root",
849
+ "control",
850
+ "indicator",
851
+ "label",
852
+ "hiddenInput"
853
+ ]
854
+ },
855
+ "uniqueItems": true
856
+ },
857
+ "states": {
858
+ "type": "array",
859
+ "description": "Allowed data-aeon-state values (stable states only)",
860
+ "items": {
861
+ "type": "string",
862
+ "enum": [
863
+ "checked",
864
+ "unchecked"
865
+ ]
866
+ },
867
+ "uniqueItems": true
868
+ },
869
+ "props": {
870
+ "type": "object",
871
+ "additionalProperties": false,
872
+ "properties": {}
873
+ },
874
+ "slots": {
875
+ "type": "object",
876
+ "description": "Named composition slots / compound parts",
877
+ "additionalProperties": {
878
+ "type": "string"
879
+ },
880
+ "properties": {
881
+ "Root": {
882
+ "const": "checkbox.root",
883
+ "description": "checkbox.root"
884
+ },
885
+ "Control": {
886
+ "const": "checkbox.control",
887
+ "description": "checkbox.control"
888
+ },
889
+ "Indicator": {
890
+ "const": "checkbox.indicator",
891
+ "description": "checkbox.indicator"
892
+ },
893
+ "Label": {
894
+ "const": "checkbox.label",
895
+ "description": "checkbox.label"
896
+ }
897
+ }
898
+ },
899
+ "machine": {
900
+ "type": [
901
+ "string",
902
+ "null"
903
+ ],
904
+ "description": "XState machine export from @aeon-ui/primitives, or null if prop/React driven",
905
+ "const": "toggleMachine"
906
+ },
907
+ "runtime": {
908
+ "type": "string",
909
+ "description": "How headless state is driven at runtime",
910
+ "const": "useAeonMachine"
911
+ },
912
+ "events": {
913
+ "type": "array",
914
+ "items": {
915
+ "type": "string",
916
+ "enum": [
917
+ "TOGGLE",
918
+ "CHECK",
919
+ "UNCHECK"
920
+ ]
921
+ }
922
+ },
923
+ "examples": {
924
+ "type": "array",
925
+ "items": {
926
+ "type": "string"
927
+ },
928
+ "default": []
929
+ }
930
+ },
931
+ "x-aeon": {
932
+ "scope": "checkbox",
933
+ "parts": [
934
+ "root",
935
+ "control",
936
+ "indicator",
937
+ "label",
938
+ "hiddenInput"
939
+ ],
940
+ "states": [
941
+ "checked",
942
+ "unchecked"
943
+ ],
944
+ "machine": "toggleMachine",
945
+ "runtime": "useAeonMachine",
946
+ "events": [
947
+ "TOGGLE",
948
+ "CHECK",
949
+ "UNCHECK"
950
+ ],
951
+ "slots": {
952
+ "Root": "checkbox.root",
953
+ "Control": "checkbox.control",
954
+ "Indicator": "checkbox.indicator",
955
+ "Label": "checkbox.label"
956
+ },
957
+ "examples": []
958
+ }
959
+ },
960
+ "tabs": {
961
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
962
+ "$id": "https://aeon-ui.com/schemas/tabs.json",
963
+ "title": "Tabs",
964
+ "description": "Selected tab value from tabsMachine.",
965
+ "type": "object",
966
+ "additionalProperties": false,
967
+ "required": [
968
+ "component",
969
+ "scope"
970
+ ],
971
+ "properties": {
972
+ "component": {
973
+ "const": "Tabs"
974
+ },
975
+ "scope": {
976
+ "const": "tabs"
977
+ },
978
+ "parts": {
979
+ "type": "array",
980
+ "description": "Anatomy part keys — map to data-aeon-part",
981
+ "items": {
982
+ "type": "string",
983
+ "enum": [
984
+ "root",
985
+ "list",
986
+ "trigger",
987
+ "content",
988
+ "indicator"
989
+ ]
990
+ },
991
+ "uniqueItems": true
992
+ },
993
+ "states": {
994
+ "type": "array",
995
+ "description": "Allowed data-aeon-state values (stable states only)",
996
+ "items": {
997
+ "type": "string",
998
+ "enum": [
999
+ "selected"
1000
+ ]
1001
+ },
1002
+ "uniqueItems": true
1003
+ },
1004
+ "props": {
1005
+ "type": "object",
1006
+ "additionalProperties": false,
1007
+ "properties": {
1008
+ "value": {
1009
+ "type": "string",
1010
+ "description": "Selected tab id — becomes data-aeon-state"
1011
+ }
1012
+ }
1013
+ },
1014
+ "slots": {
1015
+ "type": "object",
1016
+ "description": "Named composition slots / compound parts",
1017
+ "additionalProperties": {
1018
+ "type": "string"
1019
+ },
1020
+ "properties": {
1021
+ "Root": {
1022
+ "const": "tabs.root",
1023
+ "description": "tabs.root"
1024
+ },
1025
+ "List": {
1026
+ "const": "tabs.list",
1027
+ "description": "tabs.list"
1028
+ },
1029
+ "Trigger": {
1030
+ "const": "tabs.trigger",
1031
+ "description": "tabs.trigger"
1032
+ },
1033
+ "Content": {
1034
+ "const": "tabs.content",
1035
+ "description": "tabs.content"
1036
+ }
1037
+ }
1038
+ },
1039
+ "machine": {
1040
+ "type": [
1041
+ "string",
1042
+ "null"
1043
+ ],
1044
+ "description": "XState machine export from @aeon-ui/primitives, or null if prop/React driven",
1045
+ "const": "tabsMachine"
1046
+ },
1047
+ "runtime": {
1048
+ "type": "string",
1049
+ "description": "How headless state is driven at runtime",
1050
+ "const": "useAeonMachine"
1051
+ },
1052
+ "events": {
1053
+ "type": "array",
1054
+ "items": {
1055
+ "type": "string",
1056
+ "enum": [
1057
+ "SELECT"
1058
+ ]
1059
+ }
1060
+ },
1061
+ "examples": {
1062
+ "type": "array",
1063
+ "items": {
1064
+ "type": "string"
1065
+ },
1066
+ "default": []
1067
+ }
1068
+ },
1069
+ "x-aeon": {
1070
+ "scope": "tabs",
1071
+ "parts": [
1072
+ "root",
1073
+ "list",
1074
+ "trigger",
1075
+ "content",
1076
+ "indicator"
1077
+ ],
1078
+ "states": [
1079
+ "selected"
1080
+ ],
1081
+ "machine": "tabsMachine",
1082
+ "runtime": "useAeonMachine",
1083
+ "events": [
1084
+ "SELECT"
1085
+ ],
1086
+ "slots": {
1087
+ "Root": "tabs.root",
1088
+ "List": "tabs.list",
1089
+ "Trigger": "tabs.trigger",
1090
+ "Content": "tabs.content"
1091
+ },
1092
+ "examples": []
1093
+ }
1094
+ },
1095
+ "accordion": {
1096
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
1097
+ "$id": "https://aeon-ui.com/schemas/accordion.json",
1098
+ "title": "Accordion",
1099
+ "description": "Per-item open state via accordionMachine.",
1100
+ "type": "object",
1101
+ "additionalProperties": false,
1102
+ "required": [
1103
+ "component",
1104
+ "scope"
1105
+ ],
1106
+ "properties": {
1107
+ "component": {
1108
+ "const": "Accordion"
1109
+ },
1110
+ "scope": {
1111
+ "const": "accordion"
1112
+ },
1113
+ "parts": {
1114
+ "type": "array",
1115
+ "description": "Anatomy part keys — map to data-aeon-part",
1116
+ "items": {
1117
+ "type": "string",
1118
+ "enum": [
1119
+ "root",
1120
+ "item",
1121
+ "itemTrigger",
1122
+ "itemContent",
1123
+ "itemIndicator"
1124
+ ]
1125
+ },
1126
+ "uniqueItems": true
1127
+ },
1128
+ "states": {
1129
+ "type": "array",
1130
+ "description": "Allowed data-aeon-state values (stable states only)",
1131
+ "items": {
1132
+ "type": "string",
1133
+ "enum": [
1134
+ "open",
1135
+ "closed"
1136
+ ]
1137
+ },
1138
+ "uniqueItems": true
1139
+ },
1140
+ "props": {
1141
+ "type": "object",
1142
+ "additionalProperties": false,
1143
+ "properties": {}
1144
+ },
1145
+ "slots": {
1146
+ "type": "object",
1147
+ "description": "Named composition slots / compound parts",
1148
+ "additionalProperties": {
1149
+ "type": "string"
1150
+ },
1151
+ "properties": {
1152
+ "Root": {
1153
+ "const": "accordion.root",
1154
+ "description": "accordion.root"
1155
+ },
1156
+ "Item": {
1157
+ "const": "accordion.item",
1158
+ "description": "accordion.item"
1159
+ },
1160
+ "ItemTrigger": {
1161
+ "const": "accordion.itemTrigger",
1162
+ "description": "accordion.itemTrigger"
1163
+ },
1164
+ "ItemContent": {
1165
+ "const": "accordion.itemContent",
1166
+ "description": "accordion.itemContent"
1167
+ }
1168
+ }
1169
+ },
1170
+ "machine": {
1171
+ "type": [
1172
+ "string",
1173
+ "null"
1174
+ ],
1175
+ "description": "XState machine export from @aeon-ui/primitives, or null if prop/React driven",
1176
+ "const": "accordionMachine"
1177
+ },
1178
+ "runtime": {
1179
+ "type": "string",
1180
+ "description": "How headless state is driven at runtime",
1181
+ "const": "useAeonMachine"
1182
+ },
1183
+ "events": {
1184
+ "type": "array",
1185
+ "items": {
1186
+ "type": "string",
1187
+ "enum": [
1188
+ "TOGGLE"
1189
+ ]
1190
+ }
1191
+ },
1192
+ "examples": {
1193
+ "type": "array",
1194
+ "items": {
1195
+ "type": "string"
1196
+ },
1197
+ "default": []
1198
+ }
1199
+ },
1200
+ "x-aeon": {
1201
+ "scope": "accordion",
1202
+ "parts": [
1203
+ "root",
1204
+ "item",
1205
+ "itemTrigger",
1206
+ "itemContent",
1207
+ "itemIndicator"
1208
+ ],
1209
+ "states": [
1210
+ "open",
1211
+ "closed"
1212
+ ],
1213
+ "machine": "accordionMachine",
1214
+ "runtime": "useAeonMachine",
1215
+ "events": [
1216
+ "TOGGLE"
1217
+ ],
1218
+ "slots": {
1219
+ "Root": "accordion.root",
1220
+ "Item": "accordion.item",
1221
+ "ItemTrigger": "accordion.itemTrigger",
1222
+ "ItemContent": "accordion.itemContent"
1223
+ },
1224
+ "examples": []
1225
+ }
1226
+ },
1227
+ "popover": {
1228
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
1229
+ "$id": "https://aeon-ui.com/schemas/popover.json",
1230
+ "title": "Popover",
1231
+ "description": "Floating surface — shares popoverMachine. Do not fork a duplicate open/closed chart.",
1232
+ "type": "object",
1233
+ "additionalProperties": false,
1234
+ "required": [
1235
+ "component",
1236
+ "scope"
1237
+ ],
1238
+ "properties": {
1239
+ "component": {
1240
+ "const": "Popover"
1241
+ },
1242
+ "scope": {
1243
+ "const": "popover"
1244
+ },
1245
+ "parts": {
1246
+ "type": "array",
1247
+ "description": "Anatomy part keys — map to data-aeon-part",
1248
+ "items": {
1249
+ "type": "string",
1250
+ "enum": [
1251
+ "root",
1252
+ "trigger",
1253
+ "positioner",
1254
+ "content",
1255
+ "arrow",
1256
+ "closeTrigger"
1257
+ ]
1258
+ },
1259
+ "uniqueItems": true
1260
+ },
1261
+ "states": {
1262
+ "type": "array",
1263
+ "description": "Allowed data-aeon-state values (stable states only)",
1264
+ "items": {
1265
+ "type": "string",
1266
+ "enum": [
1267
+ "open",
1268
+ "closed"
1269
+ ]
1270
+ },
1271
+ "uniqueItems": true
1272
+ },
1273
+ "props": {
1274
+ "type": "object",
1275
+ "additionalProperties": false,
1276
+ "properties": {}
1277
+ },
1278
+ "slots": {
1279
+ "type": "object",
1280
+ "description": "Named composition slots / compound parts",
1281
+ "additionalProperties": {
1282
+ "type": "string"
1283
+ },
1284
+ "properties": {
1285
+ "Root": {
1286
+ "const": "popover.root",
1287
+ "description": "popover.root"
1288
+ },
1289
+ "Trigger": {
1290
+ "const": "popover.trigger",
1291
+ "description": "popover.trigger"
1292
+ },
1293
+ "Content": {
1294
+ "const": "popover.content",
1295
+ "description": "popover.content"
1296
+ }
1297
+ }
1298
+ },
1299
+ "machine": {
1300
+ "type": [
1301
+ "string",
1302
+ "null"
1303
+ ],
1304
+ "description": "XState machine export from @aeon-ui/primitives, or null if prop/React driven",
1305
+ "const": "popoverMachine"
1306
+ },
1307
+ "runtime": {
1308
+ "type": "string",
1309
+ "description": "How headless state is driven at runtime",
1310
+ "const": "useAeonMachine"
1311
+ },
1312
+ "events": {
1313
+ "type": "array",
1314
+ "items": {
1315
+ "type": "string",
1316
+ "enum": [
1317
+ "OPEN",
1318
+ "CLOSE",
1319
+ "TOGGLE"
1320
+ ]
1321
+ }
1322
+ },
1323
+ "examples": {
1324
+ "type": "array",
1325
+ "items": {
1326
+ "type": "string"
1327
+ },
1328
+ "default": []
1329
+ }
1330
+ },
1331
+ "x-aeon": {
1332
+ "scope": "popover",
1333
+ "parts": [
1334
+ "root",
1335
+ "trigger",
1336
+ "positioner",
1337
+ "content",
1338
+ "arrow",
1339
+ "closeTrigger"
1340
+ ],
1341
+ "states": [
1342
+ "open",
1343
+ "closed"
1344
+ ],
1345
+ "machine": "popoverMachine",
1346
+ "runtime": "useAeonMachine",
1347
+ "events": [
1348
+ "OPEN",
1349
+ "CLOSE",
1350
+ "TOGGLE"
1351
+ ],
1352
+ "slots": {
1353
+ "Root": "popover.root",
1354
+ "Trigger": "popover.trigger",
1355
+ "Content": "popover.content"
1356
+ },
1357
+ "examples": []
1358
+ }
1359
+ },
1360
+ "menu": {
1361
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
1362
+ "$id": "https://aeon-ui.com/schemas/menu.json",
1363
+ "title": "Menu",
1364
+ "description": "Shares popoverMachine with Popover/Select open state.",
1365
+ "type": "object",
1366
+ "additionalProperties": false,
1367
+ "required": [
1368
+ "component",
1369
+ "scope"
1370
+ ],
1371
+ "properties": {
1372
+ "component": {
1373
+ "const": "Menu"
1374
+ },
1375
+ "scope": {
1376
+ "const": "menu"
1377
+ },
1378
+ "parts": {
1379
+ "type": "array",
1380
+ "description": "Anatomy part keys — map to data-aeon-part",
1381
+ "items": {
1382
+ "type": "string",
1383
+ "enum": [
1384
+ "root",
1385
+ "trigger",
1386
+ "positioner",
1387
+ "content",
1388
+ "item",
1389
+ "separator"
1390
+ ]
1391
+ },
1392
+ "uniqueItems": true
1393
+ },
1394
+ "states": {
1395
+ "type": "array",
1396
+ "description": "Allowed data-aeon-state values (stable states only)",
1397
+ "items": {
1398
+ "type": "string",
1399
+ "enum": [
1400
+ "open",
1401
+ "closed"
1402
+ ]
1403
+ },
1404
+ "uniqueItems": true
1405
+ },
1406
+ "props": {
1407
+ "type": "object",
1408
+ "additionalProperties": false,
1409
+ "properties": {}
1410
+ },
1411
+ "slots": {
1412
+ "type": "object",
1413
+ "description": "Named composition slots / compound parts",
1414
+ "additionalProperties": {
1415
+ "type": "string"
1416
+ },
1417
+ "properties": {
1418
+ "Root": {
1419
+ "const": "menu.root",
1420
+ "description": "menu.root"
1421
+ },
1422
+ "Trigger": {
1423
+ "const": "menu.trigger",
1424
+ "description": "menu.trigger"
1425
+ },
1426
+ "Content": {
1427
+ "const": "menu.content",
1428
+ "description": "menu.content"
1429
+ },
1430
+ "Item": {
1431
+ "const": "menu.item",
1432
+ "description": "menu.item"
1433
+ }
1434
+ }
1435
+ },
1436
+ "machine": {
1437
+ "type": [
1438
+ "string",
1439
+ "null"
1440
+ ],
1441
+ "description": "XState machine export from @aeon-ui/primitives, or null if prop/React driven",
1442
+ "const": "popoverMachine"
1443
+ },
1444
+ "runtime": {
1445
+ "type": "string",
1446
+ "description": "How headless state is driven at runtime",
1447
+ "const": "useAeonMachine"
1448
+ },
1449
+ "events": {
1450
+ "type": "array",
1451
+ "items": {
1452
+ "type": "string",
1453
+ "enum": [
1454
+ "OPEN",
1455
+ "CLOSE",
1456
+ "TOGGLE"
1457
+ ]
1458
+ }
1459
+ },
1460
+ "examples": {
1461
+ "type": "array",
1462
+ "items": {
1463
+ "type": "string"
1464
+ },
1465
+ "default": []
1466
+ }
1467
+ },
1468
+ "x-aeon": {
1469
+ "scope": "menu",
1470
+ "parts": [
1471
+ "root",
1472
+ "trigger",
1473
+ "positioner",
1474
+ "content",
1475
+ "item",
1476
+ "separator"
1477
+ ],
1478
+ "states": [
1479
+ "open",
1480
+ "closed"
1481
+ ],
1482
+ "machine": "popoverMachine",
1483
+ "runtime": "useAeonMachine",
1484
+ "events": [
1485
+ "OPEN",
1486
+ "CLOSE",
1487
+ "TOGGLE"
1488
+ ],
1489
+ "slots": {
1490
+ "Root": "menu.root",
1491
+ "Trigger": "menu.trigger",
1492
+ "Content": "menu.content",
1493
+ "Item": "menu.item"
1494
+ },
1495
+ "examples": []
1496
+ }
1497
+ },
1498
+ "select": {
1499
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
1500
+ "$id": "https://aeon-ui.com/schemas/select.json",
1501
+ "title": "Select",
1502
+ "description": "Open/closed via popoverMachine; highlight may be React-local. Do not invent a new open machine.",
1503
+ "type": "object",
1504
+ "additionalProperties": false,
1505
+ "required": [
1506
+ "component",
1507
+ "scope"
1508
+ ],
1509
+ "properties": {
1510
+ "component": {
1511
+ "const": "Select"
1512
+ },
1513
+ "scope": {
1514
+ "const": "select"
1515
+ },
1516
+ "parts": {
1517
+ "type": "array",
1518
+ "description": "Anatomy part keys — map to data-aeon-part",
1519
+ "items": {
1520
+ "type": "string",
1521
+ "enum": [
1522
+ "root",
1523
+ "trigger",
1524
+ "value",
1525
+ "icon",
1526
+ "positioner",
1527
+ "content",
1528
+ "item"
1529
+ ]
1530
+ },
1531
+ "uniqueItems": true
1532
+ },
1533
+ "states": {
1534
+ "type": "array",
1535
+ "description": "Allowed data-aeon-state values (stable states only)",
1536
+ "items": {
1537
+ "type": "string",
1538
+ "enum": [
1539
+ "open",
1540
+ "closed"
1541
+ ]
1542
+ },
1543
+ "uniqueItems": true
1544
+ },
1545
+ "props": {
1546
+ "type": "object",
1547
+ "additionalProperties": false,
1548
+ "properties": {}
1549
+ },
1550
+ "slots": {
1551
+ "type": "object",
1552
+ "description": "Named composition slots / compound parts",
1553
+ "additionalProperties": {
1554
+ "type": "string"
1555
+ },
1556
+ "properties": {
1557
+ "Root": {
1558
+ "const": "select.root",
1559
+ "description": "select.root"
1560
+ },
1561
+ "Trigger": {
1562
+ "const": "select.trigger",
1563
+ "description": "select.trigger"
1564
+ },
1565
+ "Content": {
1566
+ "const": "select.content",
1567
+ "description": "select.content"
1568
+ },
1569
+ "Item": {
1570
+ "const": "select.item",
1571
+ "description": "select.item"
1572
+ }
1573
+ }
1574
+ },
1575
+ "machine": {
1576
+ "type": [
1577
+ "string",
1578
+ "null"
1579
+ ],
1580
+ "description": "XState machine export from @aeon-ui/primitives, or null if prop/React driven",
1581
+ "const": "popoverMachine"
1582
+ },
1583
+ "runtime": {
1584
+ "type": "string",
1585
+ "description": "How headless state is driven at runtime",
1586
+ "const": "useAeonMachine"
1587
+ },
1588
+ "events": {
1589
+ "type": "array",
1590
+ "items": {
1591
+ "type": "string",
1592
+ "enum": [
1593
+ "OPEN",
1594
+ "CLOSE",
1595
+ "TOGGLE"
1596
+ ]
1597
+ }
1598
+ },
1599
+ "examples": {
1600
+ "type": "array",
1601
+ "items": {
1602
+ "type": "string"
1603
+ },
1604
+ "default": []
1605
+ }
1606
+ },
1607
+ "x-aeon": {
1608
+ "scope": "select",
1609
+ "parts": [
1610
+ "root",
1611
+ "trigger",
1612
+ "value",
1613
+ "icon",
1614
+ "positioner",
1615
+ "content",
1616
+ "item"
1617
+ ],
1618
+ "states": [
1619
+ "open",
1620
+ "closed"
1621
+ ],
1622
+ "machine": "popoverMachine",
1623
+ "runtime": "useAeonMachine",
1624
+ "events": [
1625
+ "OPEN",
1626
+ "CLOSE",
1627
+ "TOGGLE"
1628
+ ],
1629
+ "slots": {
1630
+ "Root": "select.root",
1631
+ "Trigger": "select.trigger",
1632
+ "Content": "select.content",
1633
+ "Item": "select.item"
1634
+ },
1635
+ "examples": []
1636
+ }
1637
+ },
1638
+ "combobox": {
1639
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
1640
+ "$id": "https://aeon-ui.com/schemas/combobox.json",
1641
+ "title": "Combobox",
1642
+ "description": "Typeahead — React useState for open/query/highlight today. Do not add a duplicate floating machine without COMPONENT_CHECKLIST.",
1643
+ "type": "object",
1644
+ "additionalProperties": false,
1645
+ "required": [
1646
+ "component",
1647
+ "scope"
1648
+ ],
1649
+ "properties": {
1650
+ "component": {
1651
+ "const": "Combobox"
1652
+ },
1653
+ "scope": {
1654
+ "const": "combobox"
1655
+ },
1656
+ "parts": {
1657
+ "type": "array",
1658
+ "description": "Anatomy part keys — map to data-aeon-part",
1659
+ "items": {
1660
+ "type": "string",
1661
+ "enum": [
1662
+ "root",
1663
+ "input",
1664
+ "icon",
1665
+ "content",
1666
+ "item",
1667
+ "empty"
1668
+ ]
1669
+ },
1670
+ "uniqueItems": true
1671
+ },
1672
+ "states": {
1673
+ "type": "array",
1674
+ "description": "Allowed data-aeon-state values (stable states only)",
1675
+ "items": {
1676
+ "type": "string",
1677
+ "enum": [
1678
+ "open",
1679
+ "closed"
1680
+ ]
1681
+ },
1682
+ "uniqueItems": true
1683
+ },
1684
+ "props": {
1685
+ "type": "object",
1686
+ "additionalProperties": false,
1687
+ "properties": {}
1688
+ },
1689
+ "slots": {
1690
+ "type": "object",
1691
+ "description": "Named composition slots / compound parts",
1692
+ "additionalProperties": {
1693
+ "type": "string"
1694
+ },
1695
+ "properties": {
1696
+ "Root": {
1697
+ "const": "combobox.root",
1698
+ "description": "combobox.root"
1699
+ },
1700
+ "Input": {
1701
+ "const": "combobox.input",
1702
+ "description": "combobox.input"
1703
+ },
1704
+ "Content": {
1705
+ "const": "combobox.content",
1706
+ "description": "combobox.content"
1707
+ },
1708
+ "Item": {
1709
+ "const": "combobox.item",
1710
+ "description": "combobox.item"
1711
+ }
1712
+ }
1713
+ },
1714
+ "machine": {
1715
+ "type": [
1716
+ "string",
1717
+ "null"
1718
+ ],
1719
+ "description": "XState machine export from @aeon-ui/primitives, or null if prop/React driven",
1720
+ "const": null
1721
+ },
1722
+ "runtime": {
1723
+ "type": "string",
1724
+ "description": "How headless state is driven at runtime",
1725
+ "const": "useState"
1726
+ },
1727
+ "events": {
1728
+ "type": "array",
1729
+ "items": {
1730
+ "type": "string",
1731
+ "enum": []
1732
+ }
1733
+ },
1734
+ "examples": {
1735
+ "type": "array",
1736
+ "items": {
1737
+ "type": "string"
1738
+ },
1739
+ "default": []
1740
+ }
1741
+ },
1742
+ "x-aeon": {
1743
+ "scope": "combobox",
1744
+ "parts": [
1745
+ "root",
1746
+ "input",
1747
+ "icon",
1748
+ "content",
1749
+ "item",
1750
+ "empty"
1751
+ ],
1752
+ "states": [
1753
+ "open",
1754
+ "closed"
1755
+ ],
1756
+ "machine": null,
1757
+ "runtime": "useState",
1758
+ "events": [],
1759
+ "slots": {
1760
+ "Root": "combobox.root",
1761
+ "Input": "combobox.input",
1762
+ "Content": "combobox.content",
1763
+ "Item": "combobox.item"
1764
+ },
1765
+ "examples": []
1766
+ }
1767
+ },
1768
+ "tooltip": {
1769
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
1770
+ "$id": "https://aeon-ui.com/schemas/tooltip.json",
1771
+ "title": "Tooltip",
1772
+ "description": "Open via React useState. Touch tap toggles.",
1773
+ "type": "object",
1774
+ "additionalProperties": false,
1775
+ "required": [
1776
+ "component",
1777
+ "scope"
1778
+ ],
1779
+ "properties": {
1780
+ "component": {
1781
+ "const": "Tooltip"
1782
+ },
1783
+ "scope": {
1784
+ "const": "tooltip"
1785
+ },
1786
+ "parts": {
1787
+ "type": "array",
1788
+ "description": "Anatomy part keys — map to data-aeon-part",
1789
+ "items": {
1790
+ "type": "string",
1791
+ "enum": [
1792
+ "root",
1793
+ "trigger",
1794
+ "positioner",
1795
+ "content",
1796
+ "arrow"
1797
+ ]
1798
+ },
1799
+ "uniqueItems": true
1800
+ },
1801
+ "states": {
1802
+ "type": "array",
1803
+ "description": "Allowed data-aeon-state values (stable states only)",
1804
+ "items": {
1805
+ "type": "string",
1806
+ "enum": [
1807
+ "open",
1808
+ "closed"
1809
+ ]
1810
+ },
1811
+ "uniqueItems": true
1812
+ },
1813
+ "props": {
1814
+ "type": "object",
1815
+ "additionalProperties": false,
1816
+ "properties": {}
1817
+ },
1818
+ "slots": {
1819
+ "type": "object",
1820
+ "description": "Named composition slots / compound parts",
1821
+ "additionalProperties": {
1822
+ "type": "string"
1823
+ },
1824
+ "properties": {
1825
+ "Root": {
1826
+ "const": "tooltip.root",
1827
+ "description": "tooltip.root"
1828
+ },
1829
+ "Trigger": {
1830
+ "const": "tooltip.trigger",
1831
+ "description": "tooltip.trigger"
1832
+ },
1833
+ "Content": {
1834
+ "const": "tooltip.content",
1835
+ "description": "tooltip.content"
1836
+ }
1837
+ }
1838
+ },
1839
+ "machine": {
1840
+ "type": [
1841
+ "string",
1842
+ "null"
1843
+ ],
1844
+ "description": "XState machine export from @aeon-ui/primitives, or null if prop/React driven",
1845
+ "const": null
1846
+ },
1847
+ "runtime": {
1848
+ "type": "string",
1849
+ "description": "How headless state is driven at runtime",
1850
+ "const": "useState"
1851
+ },
1852
+ "events": {
1853
+ "type": "array",
1854
+ "items": {
1855
+ "type": "string",
1856
+ "enum": []
1857
+ }
1858
+ },
1859
+ "examples": {
1860
+ "type": "array",
1861
+ "items": {
1862
+ "type": "string"
1863
+ },
1864
+ "default": []
1865
+ }
1866
+ },
1867
+ "x-aeon": {
1868
+ "scope": "tooltip",
1869
+ "parts": [
1870
+ "root",
1871
+ "trigger",
1872
+ "positioner",
1873
+ "content",
1874
+ "arrow"
1875
+ ],
1876
+ "states": [
1877
+ "open",
1878
+ "closed"
1879
+ ],
1880
+ "machine": null,
1881
+ "runtime": "useState",
1882
+ "events": [],
1883
+ "slots": {
1884
+ "Root": "tooltip.root",
1885
+ "Trigger": "tooltip.trigger",
1886
+ "Content": "tooltip.content"
1887
+ },
1888
+ "examples": []
1889
+ }
1890
+ },
1891
+ "toast": {
1892
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
1893
+ "$id": "https://aeon-ui.com/schemas/toast.json",
1894
+ "title": "Toast",
1895
+ "description": "Per-item visibility via toastMachine.",
1896
+ "type": "object",
1897
+ "additionalProperties": false,
1898
+ "required": [
1899
+ "component",
1900
+ "scope"
1901
+ ],
1902
+ "properties": {
1903
+ "component": {
1904
+ "const": "Toast"
1905
+ },
1906
+ "scope": {
1907
+ "const": "toast"
1908
+ },
1909
+ "parts": {
1910
+ "type": "array",
1911
+ "description": "Anatomy part keys — map to data-aeon-part",
1912
+ "items": {
1913
+ "type": "string",
1914
+ "enum": [
1915
+ "viewport",
1916
+ "root",
1917
+ "title",
1918
+ "description",
1919
+ "closeTrigger"
1920
+ ]
1921
+ },
1922
+ "uniqueItems": true
1923
+ },
1924
+ "states": {
1925
+ "type": "array",
1926
+ "description": "Allowed data-aeon-state values (stable states only)",
1927
+ "items": {
1928
+ "type": "string",
1929
+ "enum": [
1930
+ "visible",
1931
+ "hidden"
1932
+ ]
1933
+ },
1934
+ "uniqueItems": true
1935
+ },
1936
+ "props": {
1937
+ "type": "object",
1938
+ "additionalProperties": false,
1939
+ "properties": {}
1940
+ },
1941
+ "slots": {
1942
+ "type": "object",
1943
+ "description": "Named composition slots / compound parts",
1944
+ "additionalProperties": {
1945
+ "type": "string"
1946
+ },
1947
+ "properties": {
1948
+ "Provider": {
1949
+ "const": "toast.provider",
1950
+ "description": "toast.provider"
1951
+ },
1952
+ "Viewport": {
1953
+ "const": "toast.viewport",
1954
+ "description": "toast.viewport"
1955
+ },
1956
+ "Root": {
1957
+ "const": "toast.root",
1958
+ "description": "toast.root"
1959
+ },
1960
+ "Title": {
1961
+ "const": "toast.title",
1962
+ "description": "toast.title"
1963
+ },
1964
+ "Description": {
1965
+ "const": "toast.description",
1966
+ "description": "toast.description"
1967
+ }
1968
+ }
1969
+ },
1970
+ "machine": {
1971
+ "type": [
1972
+ "string",
1973
+ "null"
1974
+ ],
1975
+ "description": "XState machine export from @aeon-ui/primitives, or null if prop/React driven",
1976
+ "const": "toastMachine"
1977
+ },
1978
+ "runtime": {
1979
+ "type": "string",
1980
+ "description": "How headless state is driven at runtime",
1981
+ "const": "useAeonMachine"
1982
+ },
1983
+ "events": {
1984
+ "type": "array",
1985
+ "items": {
1986
+ "type": "string",
1987
+ "enum": [
1988
+ "SHOW",
1989
+ "HIDE",
1990
+ "DISMISS"
1991
+ ]
1992
+ }
1993
+ },
1994
+ "examples": {
1995
+ "type": "array",
1996
+ "items": {
1997
+ "type": "string"
1998
+ },
1999
+ "default": []
2000
+ }
2001
+ },
2002
+ "x-aeon": {
2003
+ "scope": "toast",
2004
+ "parts": [
2005
+ "viewport",
2006
+ "root",
2007
+ "title",
2008
+ "description",
2009
+ "closeTrigger"
2010
+ ],
2011
+ "states": [
2012
+ "visible",
2013
+ "hidden"
2014
+ ],
2015
+ "machine": "toastMachine",
2016
+ "runtime": "useAeonMachine",
2017
+ "events": [
2018
+ "SHOW",
2019
+ "HIDE",
2020
+ "DISMISS"
2021
+ ],
2022
+ "slots": {
2023
+ "Provider": "toast.provider",
2024
+ "Viewport": "toast.viewport",
2025
+ "Root": "toast.root",
2026
+ "Title": "toast.title",
2027
+ "Description": "toast.description"
2028
+ },
2029
+ "examples": []
2030
+ }
2031
+ },
2032
+ "scroll": {
2033
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
2034
+ "$id": "https://aeon-ui.com/schemas/scroll.json",
2035
+ "title": "Scroll",
2036
+ "description": "Derived overflow/edge snapshot via getScrollSnapshot() — no XState machine.",
2037
+ "type": "object",
2038
+ "additionalProperties": false,
2039
+ "required": [
2040
+ "component",
2041
+ "scope"
2042
+ ],
2043
+ "properties": {
2044
+ "component": {
2045
+ "const": "Scroll"
2046
+ },
2047
+ "scope": {
2048
+ "const": "scroll"
2049
+ },
2050
+ "parts": {
2051
+ "type": "array",
2052
+ "description": "Anatomy part keys — map to data-aeon-part",
2053
+ "items": {
2054
+ "type": "string",
2055
+ "enum": [
2056
+ "root",
2057
+ "viewport",
2058
+ "content"
2059
+ ]
2060
+ },
2061
+ "uniqueItems": true
2062
+ },
2063
+ "states": {
2064
+ "type": "array",
2065
+ "description": "Allowed data-aeon-state values (stable states only)",
2066
+ "items": {
2067
+ "type": "string",
2068
+ "enum": [
2069
+ "idle",
2070
+ "start",
2071
+ "middle",
2072
+ "end",
2073
+ "overflow-x",
2074
+ "overflow-y",
2075
+ "overflow-both"
2076
+ ]
2077
+ },
2078
+ "uniqueItems": true
2079
+ },
2080
+ "props": {
2081
+ "type": "object",
2082
+ "additionalProperties": false,
2083
+ "properties": {}
2084
+ },
2085
+ "slots": {
2086
+ "type": "object",
2087
+ "description": "Named composition slots / compound parts",
2088
+ "additionalProperties": {
2089
+ "type": "string"
2090
+ },
2091
+ "properties": {
2092
+ "Root": {
2093
+ "const": "scroll.root",
2094
+ "description": "scroll.root"
2095
+ },
2096
+ "Viewport": {
2097
+ "const": "scroll.viewport",
2098
+ "description": "scroll.viewport"
2099
+ },
2100
+ "Content": {
2101
+ "const": "scroll.content",
2102
+ "description": "scroll.content"
2103
+ }
2104
+ }
2105
+ },
2106
+ "machine": {
2107
+ "type": [
2108
+ "string",
2109
+ "null"
2110
+ ],
2111
+ "description": "XState machine export from @aeon-ui/primitives, or null if prop/React driven",
2112
+ "const": null
2113
+ },
2114
+ "runtime": {
2115
+ "type": "string",
2116
+ "description": "How headless state is driven at runtime",
2117
+ "const": "getScrollSnapshot"
2118
+ },
2119
+ "events": {
2120
+ "type": "array",
2121
+ "items": {
2122
+ "type": "string",
2123
+ "enum": []
2124
+ }
2125
+ },
2126
+ "examples": {
2127
+ "type": "array",
2128
+ "items": {
2129
+ "type": "string"
2130
+ },
2131
+ "default": []
2132
+ }
2133
+ },
2134
+ "x-aeon": {
2135
+ "scope": "scroll",
2136
+ "parts": [
2137
+ "root",
2138
+ "viewport",
2139
+ "content"
2140
+ ],
2141
+ "states": [
2142
+ "idle",
2143
+ "start",
2144
+ "middle",
2145
+ "end",
2146
+ "overflow-x",
2147
+ "overflow-y",
2148
+ "overflow-both"
2149
+ ],
2150
+ "machine": null,
2151
+ "runtime": "getScrollSnapshot",
2152
+ "events": [],
2153
+ "slots": {
2154
+ "Root": "scroll.root",
2155
+ "Viewport": "scroll.viewport",
2156
+ "Content": "scroll.content"
2157
+ },
2158
+ "examples": []
2159
+ }
2160
+ },
2161
+ "progress": {
2162
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
2163
+ "$id": "https://aeon-ui.com/schemas/progress.json",
2164
+ "title": "Progress",
2165
+ "description": "Prop-driven progress: value + indeterminate → idle | loading | complete.",
2166
+ "type": "object",
2167
+ "additionalProperties": false,
2168
+ "required": [
2169
+ "component",
2170
+ "scope"
2171
+ ],
2172
+ "properties": {
2173
+ "component": {
2174
+ "const": "Progress"
2175
+ },
2176
+ "scope": {
2177
+ "const": "progress"
2178
+ },
2179
+ "parts": {
2180
+ "type": "array",
2181
+ "description": "Anatomy part keys — map to data-aeon-part",
2182
+ "items": {
2183
+ "type": "string",
2184
+ "enum": [
2185
+ "root",
2186
+ "track",
2187
+ "range",
2188
+ "label"
2189
+ ]
2190
+ },
2191
+ "uniqueItems": true
2192
+ },
2193
+ "states": {
2194
+ "type": "array",
2195
+ "description": "Allowed data-aeon-state values (stable states only)",
2196
+ "items": {
2197
+ "type": "string",
2198
+ "enum": [
2199
+ "idle",
2200
+ "loading",
2201
+ "complete"
2202
+ ]
2203
+ },
2204
+ "uniqueItems": true
2205
+ },
2206
+ "props": {
2207
+ "type": "object",
2208
+ "additionalProperties": false,
2209
+ "properties": {
2210
+ "value": {
2211
+ "type": "number",
2212
+ "minimum": 0,
2213
+ "maximum": 100
2214
+ },
2215
+ "indeterminate": {
2216
+ "type": "boolean"
2217
+ }
2218
+ }
2219
+ },
2220
+ "slots": {
2221
+ "type": "object",
2222
+ "description": "Named composition slots / compound parts",
2223
+ "additionalProperties": {
2224
+ "type": "string"
2225
+ },
2226
+ "properties": {
2227
+ "Root": {
2228
+ "const": "progress.root",
2229
+ "description": "progress.root"
2230
+ },
2231
+ "Track": {
2232
+ "const": "progress.track",
2233
+ "description": "progress.track"
2234
+ },
2235
+ "Range": {
2236
+ "const": "progress.range",
2237
+ "description": "progress.range"
2238
+ },
2239
+ "Label": {
2240
+ "const": "progress.label",
2241
+ "description": "progress.label"
2242
+ }
2243
+ }
2244
+ },
2245
+ "machine": {
2246
+ "type": [
2247
+ "string",
2248
+ "null"
2249
+ ],
2250
+ "description": "XState machine export from @aeon-ui/primitives, or null if prop/React driven",
2251
+ "const": null
2252
+ },
2253
+ "runtime": {
2254
+ "type": "string",
2255
+ "description": "How headless state is driven at runtime",
2256
+ "const": "props"
2257
+ },
2258
+ "events": {
2259
+ "type": "array",
2260
+ "items": {
2261
+ "type": "string",
2262
+ "enum": []
2263
+ }
2264
+ },
2265
+ "examples": {
2266
+ "type": "array",
2267
+ "items": {
2268
+ "type": "string"
2269
+ },
2270
+ "default": []
2271
+ }
2272
+ },
2273
+ "x-aeon": {
2274
+ "scope": "progress",
2275
+ "parts": [
2276
+ "root",
2277
+ "track",
2278
+ "range",
2279
+ "label"
2280
+ ],
2281
+ "states": [
2282
+ "idle",
2283
+ "loading",
2284
+ "complete"
2285
+ ],
2286
+ "machine": null,
2287
+ "runtime": "props",
2288
+ "events": [],
2289
+ "slots": {
2290
+ "Root": "progress.root",
2291
+ "Track": "progress.track",
2292
+ "Range": "progress.range",
2293
+ "Label": "progress.label"
2294
+ },
2295
+ "examples": []
2296
+ }
2297
+ }
2298
+ }
2299
+ }