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,44 @@
1
+ import { AppShell as Headless } from '@aeon-ui/react'
2
+ import { aeonAppShell } from '@aeon-ui/panda/styled-system/recipes'
3
+ import type { ComponentProps } from 'react'
4
+ import { cn } from './cn.js'
5
+
6
+ type ContentAlign = 'start' | 'center'
7
+ type RootProps = ComponentProps<typeof Headless.Root>
8
+ type PartProps = ComponentProps<typeof Headless.Content>
9
+ type ContentProps = PartProps & { contentAlign?: ContentAlign }
10
+
11
+ export const AppShell = {
12
+ Root: ({ className, ...props }: RootProps) => {
13
+ const styles = aeonAppShell()
14
+ return <Headless.Root className={cn(styles.root, className)} {...props} />
15
+ },
16
+ Header: ({ className, ...props }: PartProps) => {
17
+ const styles = aeonAppShell()
18
+ return <Headless.Header className={cn(styles.header, className)} {...props} />
19
+ },
20
+ Subheader: ({ className, ...props }: PartProps) => {
21
+ const styles = aeonAppShell()
22
+ return <Headless.Subheader className={cn(styles.subheader, className)} {...props} />
23
+ },
24
+ Content: ({ className, contentAlign = 'start', ...props }: ContentProps) => {
25
+ const styles = aeonAppShell({ contentAlign })
26
+ return <Headless.Content className={cn(styles.content, className)} {...props} />
27
+ },
28
+ Aside: ({ className, ...props }: PartProps) => {
29
+ const styles = aeonAppShell()
30
+ return <Headless.Aside className={cn(styles.aside, className)} {...props} />
31
+ },
32
+ Footer: ({ className, ...props }: PartProps) => {
33
+ const styles = aeonAppShell()
34
+ return <Headless.Footer className={cn(styles.footer, className)} {...props} />
35
+ },
36
+ Dock: ({ className, ...props }: PartProps) => {
37
+ const styles = aeonAppShell()
38
+ return <Headless.Dock className={cn(styles.dock, className)} {...props} />
39
+ },
40
+ Scrim: ({ className, ...props }: PartProps) => {
41
+ const styles = aeonAppShell()
42
+ return <Headless.Scrim className={cn(styles.scrim, className)} {...props} />
43
+ },
44
+ }
@@ -13,8 +13,9 @@ type ActionsProps = ComponentProps<typeof Headless.Actions>
13
13
  export const Async = {
14
14
  Root: ({ className, ...props }: RootProps) => {
15
15
  const s = styles()
16
- return <Headless.Root className={cn(s.root, 'machine-console', className)} {...props} />
16
+ return <Headless.Root className={cn(s.root, className)} {...props} />
17
17
  },
18
+ /** Totality / diagram rail — prefer Content faces in product Instant UIs. */
18
19
  Track: ({ className, ...props }: TrackProps) => {
19
20
  const s = styles()
20
21
  return <Headless.Track className={cn(s.track, 'state-track', className)} {...props} />
@@ -0,0 +1,35 @@
1
+ import { Avatar as Headless } from '@aeon-ui/react'
2
+ import { aeonAvatar } from '@aeon-ui/panda/styled-system/recipes'
3
+ import type { ComponentProps } from 'react'
4
+ import { cn } from './cn.js'
5
+
6
+ type AvatarSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl'
7
+
8
+ type RootProps = ComponentProps<typeof Headless.Root> & {
9
+ size?: AvatarSize
10
+ }
11
+
12
+ export const Avatar = {
13
+ Root: ({ className, size = 'md', ...props }: RootProps) => {
14
+ const styles = aeonAvatar({ size })
15
+ return (
16
+ <Headless.Root
17
+ className={cn(styles.root, className)}
18
+ data-aeon-size={size}
19
+ {...props}
20
+ />
21
+ )
22
+ },
23
+ Image: ({ className, ...props }: ComponentProps<typeof Headless.Image>) => {
24
+ const styles = aeonAvatar()
25
+ return <Headless.Image className={cn(styles.image, className)} {...props} />
26
+ },
27
+ Fallback: ({ className, ...props }: ComponentProps<typeof Headless.Fallback>) => {
28
+ const styles = aeonAvatar()
29
+ return <Headless.Fallback className={cn(styles.fallback, className)} {...props} />
30
+ },
31
+ Badge: ({ className, ...props }: ComponentProps<typeof Headless.Badge>) => {
32
+ const styles = aeonAvatar()
33
+ return <Headless.Badge className={cn(styles.badge, className)} {...props} />
34
+ },
35
+ }
@@ -0,0 +1,34 @@
1
+ import { Bar as Headless } from '@aeon-ui/react'
2
+ import { aeonBar } from '@aeon-ui/panda/styled-system/recipes'
3
+ import type { ComponentProps } from 'react'
4
+ import { cn } from './cn.js'
5
+
6
+ type BarSize = 'xs' | 'sm' | 'md' | 'lg'
7
+ type BarCollapse = 'shrink' | 'wrap' | 'collapse-center'
8
+
9
+ type RootProps = ComponentProps<typeof Headless.Root> & {
10
+ size?: BarSize
11
+ sticky?: boolean
12
+ collapse?: BarCollapse
13
+ }
14
+
15
+ type ZoneProps = ComponentProps<typeof Headless.Leading>
16
+
17
+ export const Bar = {
18
+ Root: ({ className, size, sticky, collapse, ...props }: RootProps) => {
19
+ const styles = aeonBar({ size, sticky, collapse })
20
+ return <Headless.Root className={cn(styles.root, className)} {...props} />
21
+ },
22
+ Leading: ({ className, ...props }: ZoneProps) => {
23
+ const styles = aeonBar({})
24
+ return <Headless.Leading className={cn(styles.leading, className)} {...props} />
25
+ },
26
+ Center: ({ className, ...props }: ZoneProps) => {
27
+ const styles = aeonBar({})
28
+ return <Headless.Center className={cn(styles.center, className)} {...props} />
29
+ },
30
+ Trailing: ({ className, ...props }: ZoneProps) => {
31
+ const styles = aeonBar({})
32
+ return <Headless.Trailing className={cn(styles.trailing, className)} {...props} />
33
+ },
34
+ }
@@ -0,0 +1,27 @@
1
+ import { Composer as Headless } from '@aeon-ui/react'
2
+ import { aeonComposer } from '@aeon-ui/panda/styled-system/recipes'
3
+ import type { ComponentProps } from 'react'
4
+ import { cn } from './cn.js'
5
+
6
+ type RootProps = ComponentProps<typeof Headless.Root>
7
+ type InputProps = ComponentProps<typeof Headless.Input>
8
+ type PartProps = ComponentProps<typeof Headless.Actions>
9
+
10
+ export const Composer = {
11
+ Root: ({ className, ...props }: RootProps) => {
12
+ const styles = aeonComposer()
13
+ return <Headless.Root className={cn(styles.root, className)} {...props} />
14
+ },
15
+ Input: ({ className, ...props }: InputProps) => {
16
+ const styles = aeonComposer()
17
+ return <Headless.Input className={cn(styles.input, className)} {...props} />
18
+ },
19
+ Actions: ({ className, ...props }: PartProps) => {
20
+ const styles = aeonComposer()
21
+ return <Headless.Actions className={cn(styles.actions, className)} {...props} />
22
+ },
23
+ Send: ({ className, ...props }: PartProps) => {
24
+ const styles = aeonComposer()
25
+ return <Headless.Send className={cn(styles.send, className)} {...props} />
26
+ },
27
+ }
@@ -0,0 +1,43 @@
1
+ import { Content as Headless } from '@aeon-ui/react'
2
+ import { aeonContent } from '@aeon-ui/panda/styled-system/recipes'
3
+ import type { ComponentProps } from 'react'
4
+ import { cn } from './cn.js'
5
+
6
+ type Align = 'start' | 'center'
7
+ type RootProps = ComponentProps<typeof Headless.Root> & { align?: Align }
8
+ type PartProps = ComponentProps<typeof Headless.Body>
9
+
10
+ export const Content = {
11
+ Root: ({ className, align = 'start', ...props }: RootProps) => {
12
+ const styles = aeonContent({ align })
13
+ return <Headless.Root className={cn(styles.root, className)} {...props} />
14
+ },
15
+ Toolbar: ({ className, ...props }: PartProps) => {
16
+ const styles = aeonContent()
17
+ return <Headless.Toolbar className={cn(styles.toolbar, className)} {...props} />
18
+ },
19
+ Body: ({ className, ...props }: PartProps) => {
20
+ const styles = aeonContent()
21
+ return <Headless.Body className={cn(styles.body, className)} {...props} />
22
+ },
23
+ Pending: ({ className, ...props }: PartProps) => {
24
+ const styles = aeonContent()
25
+ return <Headless.Pending className={cn(styles.pending, className)} {...props} />
26
+ },
27
+ Empty: ({ className, ...props }: PartProps) => {
28
+ const styles = aeonContent()
29
+ return <Headless.Empty className={cn(styles.empty, className)} {...props} />
30
+ },
31
+ Error: ({ className, ...props }: PartProps) => {
32
+ const styles = aeonContent()
33
+ return <Headless.Error className={cn(styles.error, className)} {...props} />
34
+ },
35
+ Success: ({ className, ...props }: PartProps) => {
36
+ const styles = aeonContent()
37
+ return <Headless.Success className={cn(styles.success, className)} {...props} />
38
+ },
39
+ Sentinel: ({ className, ...props }: PartProps) => {
40
+ const styles = aeonContent()
41
+ return <Headless.Sentinel className={cn(styles.sentinel, className)} {...props} />
42
+ },
43
+ }
@@ -0,0 +1,43 @@
1
+ import { Conversation as Headless } from '@aeon-ui/react'
2
+ import { aeonConversation } from '@aeon-ui/panda/styled-system/recipes'
3
+ import type { ComponentProps } from 'react'
4
+ import { cn } from './cn.js'
5
+
6
+ type RootProps = ComponentProps<typeof Headless.Root>
7
+ type ItemProps = ComponentProps<typeof Headless.Item>
8
+ type PartProps = ComponentProps<typeof Headless.Title>
9
+
10
+ export const Conversation = {
11
+ Root: ({ className, ...props }: RootProps) => {
12
+ const styles = aeonConversation()
13
+ return <Headless.Root className={cn(styles.root, className)} {...props} />
14
+ },
15
+ Item: ({ className, ...props }: ItemProps) => {
16
+ const styles = aeonConversation()
17
+ return <Headless.Item className={cn(styles.item, className)} {...props} />
18
+ },
19
+ Leading: ({ className, ...props }: PartProps) => {
20
+ const styles = aeonConversation()
21
+ return <Headless.Leading className={cn(styles.leading, className)} {...props} />
22
+ },
23
+ Body: ({ className, ...props }: PartProps) => {
24
+ const styles = aeonConversation()
25
+ return <Headless.Body className={cn(styles.body, className)} {...props} />
26
+ },
27
+ Title: ({ className, ...props }: PartProps) => {
28
+ const styles = aeonConversation()
29
+ return <Headless.Title className={cn(styles.title, className)} {...props} />
30
+ },
31
+ Preview: ({ className, ...props }: PartProps) => {
32
+ const styles = aeonConversation()
33
+ return <Headless.Preview className={cn(styles.preview, className)} {...props} />
34
+ },
35
+ Meta: ({ className, ...props }: PartProps) => {
36
+ const styles = aeonConversation()
37
+ return <Headless.Meta className={cn(styles.meta, className)} {...props} />
38
+ },
39
+ Badge: ({ className, ...props }: PartProps) => {
40
+ const styles = aeonConversation()
41
+ return <Headless.Badge className={cn(styles.badge, className)} {...props} />
42
+ },
43
+ }
@@ -0,0 +1,76 @@
1
+ import { Entry as Headless } from '@aeon-ui/react'
2
+ import { aeonEntry } from '@aeon-ui/panda/styled-system/recipes'
3
+ import type { ComponentProps } from 'react'
4
+ import { cn } from './cn.js'
5
+
6
+ type Density = 'compact' | 'cozy'
7
+ type Layout = 'stack' | 'split'
8
+
9
+ type ListProps = ComponentProps<typeof Headless.List> & {
10
+ density?: Density
11
+ layout?: Layout
12
+ }
13
+ type RootProps = ComponentProps<typeof Headless.Root> & {
14
+ density?: Density
15
+ layout?: Layout
16
+ }
17
+ type PartProps = ComponentProps<typeof Headless.Title>
18
+
19
+ export const Entry = {
20
+ List: ({ className, density = 'compact', layout = 'stack', ...props }: ListProps) => {
21
+ const styles = aeonEntry({ density, layout })
22
+ return <Headless.List className={cn(styles.list, className)} {...props} />
23
+ },
24
+ Root: ({ className, density = 'compact', layout = 'stack', ...props }: RootProps) => {
25
+ const styles = aeonEntry({ density, layout })
26
+ return <Headless.Root className={cn(styles.root, className)} {...props} />
27
+ },
28
+ Header: ({ className, ...props }: PartProps) => {
29
+ const styles = aeonEntry()
30
+ return <Headless.Header className={cn(styles.header, className)} {...props} />
31
+ },
32
+ Leading: ({ className, ...props }: PartProps) => {
33
+ const styles = aeonEntry()
34
+ return <Headless.Leading className={cn(styles.leading, className)} {...props} />
35
+ },
36
+ Heading: ({ className, ...props }: PartProps) => {
37
+ const styles = aeonEntry()
38
+ return <Headless.Heading className={cn(styles.heading, className)} {...props} />
39
+ },
40
+ Title: ({ className, ...props }: PartProps) => {
41
+ const styles = aeonEntry()
42
+ return <Headless.Title className={cn(styles.title, className)} {...props} />
43
+ },
44
+ Subtitle: ({ className, ...props }: PartProps) => {
45
+ const styles = aeonEntry()
46
+ return <Headless.Subtitle className={cn(styles.subtitle, className)} {...props} />
47
+ },
48
+ Meta: ({ className, ...props }: PartProps) => {
49
+ const styles = aeonEntry()
50
+ return <Headless.Meta className={cn(styles.meta, className)} {...props} />
51
+ },
52
+ Media: ({ className, ...props }: PartProps) => {
53
+ const styles = aeonEntry()
54
+ return <Headless.Media className={cn(styles.media, className)} {...props} />
55
+ },
56
+ Body: ({ className, ...props }: PartProps) => {
57
+ const styles = aeonEntry()
58
+ return <Headless.Body className={cn(styles.body, className)} {...props} />
59
+ },
60
+ Values: ({ className, ...props }: PartProps) => {
61
+ const styles = aeonEntry()
62
+ return <Headless.Values className={cn(styles.values, className)} {...props} />
63
+ },
64
+ Value: ({ className, ...props }: PartProps) => {
65
+ const styles = aeonEntry()
66
+ return <Headless.Value className={cn(styles.value, className)} {...props} />
67
+ },
68
+ Actions: ({ className, ...props }: PartProps) => {
69
+ const styles = aeonEntry()
70
+ return <Headless.Actions className={cn(styles.actions, className)} {...props} />
71
+ },
72
+ Footer: ({ className, ...props }: PartProps) => {
73
+ const styles = aeonEntry()
74
+ return <Headless.Footer className={cn(styles.footer, className)} {...props} />
75
+ },
76
+ }
@@ -18,6 +18,11 @@ export const Field = {
18
18
  const s = styles()
19
19
  return <Headless.Control className={cn(s.control, className)} {...props} />
20
20
  },
21
+ /** Alias for Control — preferred name in app forms. */
22
+ Input: ({ className, ...props }: ComponentProps<typeof Headless.Control>) => {
23
+ const s = styles()
24
+ return <Headless.Control className={cn(s.control, className)} {...props} />
25
+ },
21
26
  Textarea: ({ className, ...props }: ComponentProps<typeof Headless.Textarea>) => {
22
27
  const s = styles()
23
28
  return <Headless.Textarea className={cn(s.textarea, className)} {...props} />
@@ -0,0 +1,35 @@
1
+ import { Identity as Headless } from '@aeon-ui/react'
2
+ import { aeonIdentity } from '@aeon-ui/panda/styled-system/recipes'
3
+ import type { ComponentProps } from 'react'
4
+ import { cn } from './cn.js'
5
+
6
+ type Size = 'sm' | 'md' | 'lg'
7
+ type RootProps = ComponentProps<typeof Headless.Root> & { size?: Size }
8
+ type PartProps = ComponentProps<typeof Headless.Title>
9
+
10
+ export const Identity = {
11
+ Root: ({ className, size = 'md', ...props }: RootProps) => {
12
+ const styles = aeonIdentity({ size })
13
+ return <Headless.Root className={cn(styles.root, className)} size={size} {...props} />
14
+ },
15
+ Avatar: ({ className, ...props }: PartProps) => {
16
+ const styles = aeonIdentity({})
17
+ return <Headless.Avatar className={cn(styles.avatar, className)} {...props} />
18
+ },
19
+ Title: ({ className, ...props }: PartProps) => {
20
+ const styles = aeonIdentity({})
21
+ return <Headless.Title className={cn(styles.title, className)} {...props} />
22
+ },
23
+ Subtitle: ({ className, ...props }: PartProps) => {
24
+ const styles = aeonIdentity({})
25
+ return <Headless.Subtitle className={cn(styles.subtitle, className)} {...props} />
26
+ },
27
+ Meta: ({ className, ...props }: PartProps) => {
28
+ const styles = aeonIdentity({})
29
+ return <Headless.Meta className={cn(styles.meta, className)} {...props} />
30
+ },
31
+ Trailing: ({ className, ...props }: PartProps) => {
32
+ const styles = aeonIdentity({})
33
+ return <Headless.Trailing className={cn(styles.trailing, className)} {...props} />
34
+ },
35
+ }
@@ -1,4 +1,13 @@
1
1
  export { Button } from './button.js'
2
+ export { Avatar } from './avatar.js'
3
+ export { Identity } from './identity.js'
4
+ export { MetricStrip } from './metric-strip.js'
5
+ export { ListRow } from './list-row.js'
6
+ export { Entry } from './entry.js'
7
+ export { Conversation } from './conversation.js'
8
+ export { Thread } from './thread.js'
9
+ export { Composer } from './composer.js'
10
+ export { ProfileHeader } from './profile-header.js'
2
11
  export { Async } from './async.js'
3
12
  export { Field } from './field.js'
4
13
  export { Switch } from './switch.js'
@@ -12,6 +21,12 @@ export { Slider } from './slider.js'
12
21
  export { PinInput } from './pin-input.js'
13
22
  export { Accordion } from './accordion.js'
14
23
  export { Badge } from './badge.js'
24
+ export { Bar } from './bar.js'
25
+ export { Panel } from './panel.js'
26
+ export { AppShell } from './app-shell.js'
27
+ export { Content } from './content.js'
28
+ export { Nav } from './nav.js'
29
+ export { StickyBar } from './sticky-bar.js'
15
30
  export { Scroll } from './scroll.js'
16
31
  export { Select } from './select.js'
17
32
  export { Combobox } from './combobox.js'
@@ -19,4 +34,5 @@ export { Menu } from './menu.js'
19
34
  export { Popover } from './popover.js'
20
35
  export { Tooltip } from './tooltip.js'
21
36
  export { Toast, useToast } from './toast.js'
37
+ export { ThemeSwitcher } from './theme-switcher.js'
22
38
  export { cn } from './cn.js'
@@ -0,0 +1,30 @@
1
+ import { ListRow as Headless } from '@aeon-ui/react'
2
+ import { aeonListRow } from '@aeon-ui/panda/styled-system/recipes'
3
+ import type { ComponentProps } from 'react'
4
+ import { cn } from './cn.js'
5
+
6
+ type RootProps = ComponentProps<typeof Headless.Root>
7
+ type PartProps = ComponentProps<typeof Headless.Label>
8
+
9
+ export const ListRow = {
10
+ Root: ({ className, ...props }: RootProps) => {
11
+ const styles = aeonListRow()
12
+ return <Headless.Root className={cn(styles.root, className)} {...props} />
13
+ },
14
+ Leading: ({ className, ...props }: PartProps) => {
15
+ const styles = aeonListRow()
16
+ return <Headless.Leading className={cn(styles.leading, className)} {...props} />
17
+ },
18
+ Label: ({ className, ...props }: PartProps) => {
19
+ const styles = aeonListRow()
20
+ return <Headless.Label className={cn(styles.label, className)} {...props} />
21
+ },
22
+ Description: ({ className, ...props }: PartProps) => {
23
+ const styles = aeonListRow()
24
+ return <Headless.Description className={cn(styles.description, className)} {...props} />
25
+ },
26
+ Trailing: ({ className, ...props }: PartProps) => {
27
+ const styles = aeonListRow()
28
+ return <Headless.Trailing className={cn(styles.trailing, className)} {...props} />
29
+ },
30
+ }
@@ -0,0 +1,29 @@
1
+ import { MetricStrip as Headless } from '@aeon-ui/react'
2
+ import { aeonMetricStrip } from '@aeon-ui/panda/styled-system/recipes'
3
+ import type { ComponentProps } from 'react'
4
+ import { cn } from './cn.js'
5
+
6
+ type Density = 'cluster' | 'loose'
7
+ type RootProps = ComponentProps<typeof Headless.Root> & { density?: Density }
8
+ type PartProps = ComponentProps<typeof Headless.Chip>
9
+
10
+ export const MetricStrip = {
11
+ Root: ({ className, density = 'cluster', ...props }: RootProps) => {
12
+ const styles = aeonMetricStrip({ density })
13
+ return (
14
+ <Headless.Root className={cn(styles.root, className)} density={density} {...props} />
15
+ )
16
+ },
17
+ Chip: ({ className, ...props }: PartProps) => {
18
+ const styles = aeonMetricStrip({})
19
+ return <Headless.Chip className={cn(styles.chip, className)} {...props} />
20
+ },
21
+ Value: ({ className, ...props }: PartProps) => {
22
+ const styles = aeonMetricStrip({})
23
+ return <Headless.Value className={cn(styles.value, className)} {...props} />
24
+ },
25
+ Label: ({ className, ...props }: PartProps) => {
26
+ const styles = aeonMetricStrip({})
27
+ return <Headless.Label className={cn(styles.label, className)} {...props} />
28
+ },
29
+ }
@@ -0,0 +1,46 @@
1
+ import { Nav as Headless } from '@aeon-ui/react'
2
+ import { aeonNav } from '@aeon-ui/panda/styled-system/recipes'
3
+ import type { ComponentProps } from 'react'
4
+ import { cn } from './cn.js'
5
+
6
+ type NavSize = 'sm' | 'md' | 'lg'
7
+ type NavLayout = 'inline' | 'dock'
8
+ type RootProps = ComponentProps<typeof Headless.Root> & {
9
+ size?: NavSize
10
+ layout?: NavLayout
11
+ }
12
+ type ItemProps = ComponentProps<typeof Headless.Item>
13
+ type PartProps = ComponentProps<typeof Headless.Label>
14
+
15
+ export const Nav = {
16
+ Root: ({ className, size, layout = 'inline', ...props }: RootProps) => {
17
+ const styles = aeonNav({ size, layout })
18
+ return (
19
+ <Headless.Root
20
+ className={cn(styles.root, className)}
21
+ data-aeon-layout={layout}
22
+ {...props}
23
+ />
24
+ )
25
+ },
26
+ Item: ({ className, ...props }: ItemProps) => {
27
+ const styles = aeonNav({})
28
+ return <Headless.Item className={cn(styles.item, className)} {...props} />
29
+ },
30
+ Indicator: ({ className, ...props }: PartProps) => {
31
+ const styles = aeonNav({})
32
+ return <Headless.Indicator className={cn(styles.indicator, className)} {...props} />
33
+ },
34
+ Label: ({ className, ...props }: PartProps) => {
35
+ const styles = aeonNav({})
36
+ return <Headless.Label className={cn(styles.label, className)} {...props} />
37
+ },
38
+ Icon: ({ className, ...props }: PartProps) => {
39
+ const styles = aeonNav({})
40
+ return <Headless.Icon className={cn(styles.icon, className)} {...props} />
41
+ },
42
+ Badge: ({ className, ...props }: PartProps) => {
43
+ const styles = aeonNav({})
44
+ return <Headless.Badge className={cn(styles.badge, className)} {...props} />
45
+ },
46
+ }
@@ -0,0 +1,39 @@
1
+ import { Panel as Headless } from '@aeon-ui/react'
2
+ import { aeonPanel } from '@aeon-ui/panda/styled-system/recipes'
3
+ import type { ComponentProps } from 'react'
4
+ import { cn } from './cn.js'
5
+
6
+ type PanelSize = 'md' | 'lg'
7
+
8
+ type GroupProps = ComponentProps<typeof Headless.Group>
9
+ type RootProps = ComponentProps<typeof Headless.Root> & { size?: PanelSize }
10
+ type TriggerProps = ComponentProps<typeof Headless.Trigger>
11
+ type LabelProps = ComponentProps<typeof Headless.Label>
12
+ type ContentProps = ComponentProps<typeof Headless.Content>
13
+
14
+ /**
15
+ * Panel — collapsible split-view region for Aeon layouts.
16
+ * Collapsed exposes a vertical upright label rail; expanded shows content.
17
+ */
18
+ export const Panel = {
19
+ Group: ({ className, ...props }: GroupProps) => {
20
+ const styles = aeonPanel({})
21
+ return <Headless.Group className={cn(styles.group, className)} {...props} />
22
+ },
23
+ Root: ({ className, size, ...props }: RootProps) => {
24
+ const styles = aeonPanel({ size })
25
+ return <Headless.Root className={cn(styles.root, className)} {...props} />
26
+ },
27
+ Trigger: ({ className, ...props }: TriggerProps) => {
28
+ const styles = aeonPanel({})
29
+ return <Headless.Trigger className={cn(styles.trigger, className)} {...props} />
30
+ },
31
+ Label: ({ className, ...props }: LabelProps) => {
32
+ const styles = aeonPanel({})
33
+ return <Headless.Label className={cn(styles.label, className)} {...props} />
34
+ },
35
+ Content: ({ className, ...props }: ContentProps) => {
36
+ const styles = aeonPanel({})
37
+ return <Headless.Content className={cn(styles.content, className)} {...props} />
38
+ },
39
+ }
@@ -0,0 +1,35 @@
1
+ import { ProfileHeader as Headless } from '@aeon-ui/react'
2
+ import { aeonProfileHeader } from '@aeon-ui/panda/styled-system/recipes'
3
+ import type { ComponentProps } from 'react'
4
+ import { cn } from './cn.js'
5
+
6
+ type Align = 'start' | 'center'
7
+ type RootProps = ComponentProps<typeof Headless.Root> & { align?: Align }
8
+ type PartProps = ComponentProps<typeof Headless.Body>
9
+
10
+ export const ProfileHeader = {
11
+ Root: ({ className, align = 'start', ...props }: RootProps) => {
12
+ const styles = aeonProfileHeader({ align })
13
+ return <Headless.Root className={cn(styles.root, className)} {...props} />
14
+ },
15
+ Media: ({ className, ...props }: PartProps) => {
16
+ const styles = aeonProfileHeader()
17
+ return <Headless.Media className={cn(styles.media, className)} {...props} />
18
+ },
19
+ Identity: ({ className, ...props }: PartProps) => {
20
+ const styles = aeonProfileHeader()
21
+ return <Headless.Identity className={cn(styles.identity, className)} {...props} />
22
+ },
23
+ Metrics: ({ className, ...props }: PartProps) => {
24
+ const styles = aeonProfileHeader()
25
+ return <Headless.Metrics className={cn(styles.metrics, className)} {...props} />
26
+ },
27
+ Actions: ({ className, ...props }: PartProps) => {
28
+ const styles = aeonProfileHeader()
29
+ return <Headless.Actions className={cn(styles.actions, className)} {...props} />
30
+ },
31
+ Body: ({ className, ...props }: PartProps) => {
32
+ const styles = aeonProfileHeader()
33
+ return <Headless.Body className={cn(styles.body, className)} {...props} />
34
+ },
35
+ }
@@ -0,0 +1,42 @@
1
+ import { StickyBar as Headless } from '@aeon-ui/react'
2
+ import { aeonBar } from '@aeon-ui/panda/styled-system/recipes'
3
+ import type { ComponentProps } from 'react'
4
+ import { cn } from './cn.js'
5
+
6
+ type BarSize = 'xs' | 'sm' | 'md' | 'lg'
7
+ type Placement = 'top' | 'bottom' | 'inline'
8
+
9
+ type RootProps = ComponentProps<typeof Headless.Root> & {
10
+ size?: BarSize
11
+ placement?: Placement
12
+ }
13
+ type ZoneProps = ComponentProps<typeof Headless.Leading>
14
+
15
+ export const StickyBar = {
16
+ Root: ({ className, size, placement = 'top', ...props }: RootProps) => {
17
+ const styles = aeonBar({ size, placement })
18
+ return (
19
+ <Headless.Root
20
+ className={cn(styles.root, className)}
21
+ placement={placement}
22
+ {...props}
23
+ />
24
+ )
25
+ },
26
+ Leading: ({ className, ...props }: ZoneProps) => {
27
+ const styles = aeonBar({})
28
+ return <Headless.Leading className={cn(styles.leading, className)} {...props} />
29
+ },
30
+ Center: ({ className, ...props }: ZoneProps) => {
31
+ const styles = aeonBar({})
32
+ return <Headless.Center className={cn(styles.center, className)} {...props} />
33
+ },
34
+ Trailing: ({ className, ...props }: ZoneProps) => {
35
+ const styles = aeonBar({})
36
+ return <Headless.Trailing className={cn(styles.trailing, className)} {...props} />
37
+ },
38
+ Seam: ({ className, ...props }: ZoneProps) => {
39
+ const styles = aeonBar({})
40
+ return <Headless.Seam className={cn(styles.seam, className)} {...props} />
41
+ },
42
+ }
@@ -1,14 +1,27 @@
1
1
  import { Switch as Headless } from '@aeon-ui/react'
2
2
  import { aeonSwitch } from '@aeon-ui/panda/styled-system/recipes'
3
- import type { ComponentProps } from 'react'
3
+ import type { ComponentProps, ReactNode } from 'react'
4
4
  import { cn } from './cn.js'
5
5
 
6
6
  const switchStyles = aeonSwitch()
7
7
 
8
+ type RootProps = ComponentProps<typeof Headless.Root>
9
+
8
10
  export const Switch = {
9
- Root: ({ className, ...props }: ComponentProps<typeof Headless.Root>) => (
10
- <Headless.Root className={cn(switchStyles.root, className)} {...props} />
11
- ),
11
+ Root: ({ className, children, ...props }: RootProps) => {
12
+ const styles = switchStyles
13
+ const body: ReactNode =
14
+ children ?? (
15
+ <Headless.Control className={styles.control}>
16
+ <Headless.Thumb className={styles.thumb} />
17
+ </Headless.Control>
18
+ )
19
+ return (
20
+ <Headless.Root className={cn(styles.root, className)} {...props}>
21
+ {body}
22
+ </Headless.Root>
23
+ )
24
+ },
12
25
  Control: ({ className, ...props }: ComponentProps<typeof Headless.Control>) => (
13
26
  <Headless.Control className={cn(switchStyles.control, className)} {...props} />
14
27
  ),