aeon-ui-engine 1.0.2 → 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.
- package/CHANGELOG.md +28 -0
- package/CONSUMER.md +83 -0
- package/INTEGRATION.md +2 -0
- package/README.md +56 -14
- package/package.json +24 -1
- package/packages/cli/README.md +17 -0
- package/packages/cli/dist/bin.d.ts +1 -0
- package/packages/cli/dist/bin.js +35 -0
- package/packages/cli/dist/chunk-IW5NT2Z2.js +103 -0
- package/packages/cli/dist/index.d.ts +10 -0
- package/packages/cli/dist/index.js +6 -0
- package/packages/cli/node_modules/.bin/esbuild +21 -0
- package/packages/cli/node_modules/.bin/jiti +21 -0
- package/packages/cli/node_modules/.bin/tsc +21 -0
- package/packages/cli/node_modules/.bin/tsserver +21 -0
- package/packages/cli/node_modules/.bin/tsup +21 -0
- package/packages/cli/node_modules/.bin/tsup-node +21 -0
- package/packages/cli/node_modules/.bin/tsx +21 -0
- package/packages/cli/node_modules/.bin/vite +21 -0
- package/packages/cli/node_modules/.bin/vitest +21 -0
- package/packages/cli/package.json +50 -0
- package/packages/cli/src/bin.ts +34 -0
- package/packages/cli/src/index.ts +1 -0
- package/packages/cli/src/init.ts +107 -0
- package/packages/cli/tsconfig.json +10 -0
- package/packages/core/README.md +7 -1
- package/packages/core/dist/index.d.ts +425 -0
- package/packages/core/dist/index.js +635 -0
- package/packages/core/node_modules/.bin/esbuild +21 -0
- package/packages/core/node_modules/.bin/jiti +21 -0
- package/packages/core/node_modules/.bin/tsc +21 -0
- package/packages/core/node_modules/.bin/tsserver +21 -0
- package/packages/core/node_modules/.bin/tsup +21 -0
- package/packages/core/node_modules/.bin/tsup-node +21 -0
- package/packages/core/node_modules/.bin/tsx +21 -0
- package/packages/core/node_modules/.bin/vite +21 -0
- package/packages/core/node_modules/.bin/vitest +21 -0
- package/packages/core/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -0
- package/packages/core/package.json +17 -5
- package/packages/core/src/anatomy.ts +196 -5
- package/packages/core/src/machine.test.ts +62 -1
- package/packages/core/src/machine.ts +93 -0
- package/packages/core/src/theme.ts +105 -0
- package/packages/geometry/dist/index.d.ts +50 -0
- package/packages/geometry/dist/index.js +88 -0
- package/packages/geometry/node_modules/.bin/esbuild +21 -0
- package/packages/geometry/node_modules/.bin/jiti +21 -0
- package/packages/geometry/node_modules/.bin/tsc +21 -0
- package/packages/geometry/node_modules/.bin/tsserver +21 -0
- package/packages/geometry/node_modules/.bin/tsup +21 -0
- package/packages/geometry/node_modules/.bin/tsup-node +21 -0
- package/packages/geometry/node_modules/.bin/tsx +21 -0
- package/packages/panda/aeon.css +7 -0
- package/packages/panda/package.json +1 -1
- package/packages/panda/panda.config.ts +58 -1
- package/packages/panda/src/recipes/app-shell.ts +137 -0
- package/packages/panda/src/recipes/avatar.ts +131 -0
- package/packages/panda/src/recipes/bar.ts +206 -0
- package/packages/panda/src/recipes/button-group.ts +12 -4
- package/packages/panda/src/recipes/button.ts +1 -0
- package/packages/panda/src/recipes/combobox.ts +2 -1
- package/packages/panda/src/recipes/composer.ts +81 -0
- package/packages/panda/src/recipes/content.ts +104 -0
- package/packages/panda/src/recipes/conversation.ts +106 -0
- package/packages/panda/src/recipes/entry.ts +217 -0
- package/packages/panda/src/recipes/field.ts +12 -2
- package/packages/panda/src/recipes/floating.ts +26 -13
- package/packages/panda/src/recipes/identity.ts +73 -0
- package/packages/panda/src/recipes/index.ts +15 -0
- package/packages/panda/src/recipes/list-row.ts +109 -0
- package/packages/panda/src/recipes/metric-strip.ts +80 -0
- package/packages/panda/src/recipes/nav.ts +155 -0
- package/packages/panda/src/recipes/panel.ts +156 -0
- package/packages/panda/src/recipes/pin-input.ts +3 -2
- package/packages/panda/src/recipes/profile-header.ts +120 -0
- package/packages/panda/src/recipes/select.ts +2 -1
- package/packages/panda/src/recipes/slider.ts +6 -4
- package/packages/panda/src/recipes/theme-switcher.ts +110 -0
- package/packages/panda/src/recipes/thread.ts +88 -0
- package/packages/panda/src/theme/catalog-types.ts +2 -0
- package/packages/panda/src/theme/catalog.ts +23 -0
- package/packages/panda/src/theme/chrome.css +2 -1
- package/packages/panda/src/theme/global-theme-css.ts +9 -0
- package/packages/panda/src/theme/omarchy.themes.ts +607 -0
- package/packages/panda/src/theme/palette.ts +3 -0
- package/packages/panda/src/theme/scrollbars.css +58 -21
- package/packages/panda/src/theme/themes.config.ts +39 -1
- package/packages/panda/styled-system/css/conditions.mjs +1 -1
- package/packages/panda/styled-system/css/css.mjs +1 -1
- package/packages/panda/styled-system/css/sva.mjs +9 -4
- package/packages/panda/styled-system/helpers.mjs +11 -22
- package/packages/panda/styled-system/jsx/create-style-context.d.ts +54 -0
- package/packages/panda/styled-system/jsx/create-style-context.mjs +121 -0
- package/packages/panda/styled-system/jsx/factory.mjs +14 -5
- package/packages/panda/styled-system/jsx/index.d.ts +1 -0
- package/packages/panda/styled-system/jsx/index.mjs +1 -0
- package/packages/panda/styled-system/jsx/is-valid-prop.mjs +2 -2
- package/packages/panda/styled-system/patterns/aspect-ratio.d.ts +0 -1
- package/packages/panda/styled-system/patterns/bleed.d.ts +0 -1
- package/packages/panda/styled-system/patterns/box.d.ts +0 -1
- package/packages/panda/styled-system/patterns/center.d.ts +0 -1
- package/packages/panda/styled-system/patterns/circle.d.ts +0 -1
- package/packages/panda/styled-system/patterns/container.d.ts +0 -1
- package/packages/panda/styled-system/patterns/cq.d.ts +0 -1
- package/packages/panda/styled-system/patterns/divider.d.ts +0 -1
- package/packages/panda/styled-system/patterns/flex.d.ts +0 -1
- package/packages/panda/styled-system/patterns/float.d.ts +0 -1
- package/packages/panda/styled-system/patterns/grid-item.d.ts +0 -1
- package/packages/panda/styled-system/patterns/grid.d.ts +0 -1
- package/packages/panda/styled-system/patterns/grid.mjs +1 -1
- package/packages/panda/styled-system/patterns/hstack.d.ts +0 -1
- package/packages/panda/styled-system/patterns/hstack.mjs +1 -1
- package/packages/panda/styled-system/patterns/link-overlay.d.ts +0 -1
- package/packages/panda/styled-system/patterns/spacer.d.ts +0 -1
- package/packages/panda/styled-system/patterns/spacer.mjs +6 -2
- package/packages/panda/styled-system/patterns/square.d.ts +0 -1
- package/packages/panda/styled-system/patterns/stack.d.ts +0 -1
- package/packages/panda/styled-system/patterns/stack.mjs +1 -1
- package/packages/panda/styled-system/patterns/visually-hidden.d.ts +0 -1
- package/packages/panda/styled-system/patterns/vstack.d.ts +0 -1
- package/packages/panda/styled-system/patterns/vstack.mjs +1 -1
- package/packages/panda/styled-system/patterns/wrap.d.ts +0 -1
- package/packages/panda/styled-system/patterns/wrap.mjs +1 -1
- package/packages/panda/styled-system/recipes/aeon-accordion.d.ts +4 -3
- package/packages/panda/styled-system/recipes/aeon-accordion.mjs +1 -0
- package/packages/panda/styled-system/recipes/aeon-app-shell.d.ts +34 -0
- package/packages/panda/styled-system/recipes/aeon-app-shell.mjs +70 -0
- package/packages/panda/styled-system/recipes/aeon-async.d.ts +4 -3
- package/packages/panda/styled-system/recipes/aeon-async.mjs +1 -0
- package/packages/panda/styled-system/recipes/aeon-avatar.d.ts +36 -0
- package/packages/panda/styled-system/recipes/aeon-avatar.mjs +57 -0
- package/packages/panda/styled-system/recipes/aeon-badge.d.ts +3 -0
- package/packages/panda/styled-system/recipes/aeon-bar.d.ts +40 -0
- package/packages/panda/styled-system/recipes/aeon-bar.mjs +77 -0
- package/packages/panda/styled-system/recipes/aeon-button-group.d.ts +3 -2
- package/packages/panda/styled-system/recipes/aeon-button.d.ts +3 -2
- package/packages/panda/styled-system/recipes/aeon-checkbox.d.ts +4 -1
- package/packages/panda/styled-system/recipes/aeon-checkbox.mjs +1 -0
- package/packages/panda/styled-system/recipes/aeon-combobox.d.ts +4 -3
- package/packages/panda/styled-system/recipes/aeon-combobox.mjs +1 -0
- package/packages/panda/styled-system/recipes/aeon-composer.d.ts +31 -0
- package/packages/panda/styled-system/recipes/aeon-composer.mjs +45 -0
- package/packages/panda/styled-system/recipes/aeon-content.d.ts +34 -0
- package/packages/panda/styled-system/recipes/aeon-content.mjs +70 -0
- package/packages/panda/styled-system/recipes/aeon-conversation.d.ts +31 -0
- package/packages/panda/styled-system/recipes/aeon-conversation.mjs +61 -0
- package/packages/panda/styled-system/recipes/aeon-dialog.d.ts +4 -1
- package/packages/panda/styled-system/recipes/aeon-dialog.mjs +1 -0
- package/packages/panda/styled-system/recipes/aeon-entry.d.ts +38 -0
- package/packages/panda/styled-system/recipes/aeon-entry.mjs +100 -0
- package/packages/panda/styled-system/recipes/aeon-field.d.ts +4 -3
- package/packages/panda/styled-system/recipes/aeon-field.mjs +1 -0
- package/packages/panda/styled-system/recipes/aeon-identity.d.ts +36 -0
- package/packages/panda/styled-system/recipes/aeon-identity.mjs +63 -0
- package/packages/panda/styled-system/recipes/aeon-list-row.d.ts +33 -0
- package/packages/panda/styled-system/recipes/aeon-list-row.mjs +49 -0
- package/packages/panda/styled-system/recipes/aeon-menu.d.ts +4 -1
- package/packages/panda/styled-system/recipes/aeon-menu.mjs +1 -0
- package/packages/panda/styled-system/recipes/aeon-metric-strip.d.ts +36 -0
- package/packages/panda/styled-system/recipes/aeon-metric-strip.mjs +54 -0
- package/packages/panda/styled-system/recipes/aeon-nav.d.ts +38 -0
- package/packages/panda/styled-system/recipes/aeon-nav.mjs +69 -0
- package/packages/panda/styled-system/recipes/aeon-panel.d.ts +34 -0
- package/packages/panda/styled-system/recipes/aeon-panel.mjs +58 -0
- package/packages/panda/styled-system/recipes/aeon-pin-input.d.ts +4 -1
- package/packages/panda/styled-system/recipes/aeon-pin-input.mjs +1 -0
- package/packages/panda/styled-system/recipes/aeon-popover.d.ts +4 -1
- package/packages/panda/styled-system/recipes/aeon-popover.mjs +1 -0
- package/packages/panda/styled-system/recipes/aeon-profile-header.d.ts +36 -0
- package/packages/panda/styled-system/recipes/aeon-profile-header.mjs +62 -0
- package/packages/panda/styled-system/recipes/aeon-progress.d.ts +4 -1
- package/packages/panda/styled-system/recipes/aeon-progress.mjs +1 -0
- package/packages/panda/styled-system/recipes/aeon-radio-group.d.ts +4 -1
- package/packages/panda/styled-system/recipes/aeon-radio-group.mjs +1 -0
- package/packages/panda/styled-system/recipes/aeon-scroll.d.ts +4 -3
- package/packages/panda/styled-system/recipes/aeon-scroll.mjs +1 -0
- package/packages/panda/styled-system/recipes/aeon-select.d.ts +4 -3
- package/packages/panda/styled-system/recipes/aeon-select.mjs +1 -0
- package/packages/panda/styled-system/recipes/aeon-separator.d.ts +4 -1
- package/packages/panda/styled-system/recipes/aeon-separator.mjs +1 -0
- package/packages/panda/styled-system/recipes/aeon-slider.d.ts +4 -1
- package/packages/panda/styled-system/recipes/aeon-slider.mjs +1 -0
- package/packages/panda/styled-system/recipes/aeon-switch.d.ts +4 -1
- package/packages/panda/styled-system/recipes/aeon-switch.mjs +1 -0
- package/packages/panda/styled-system/recipes/aeon-tabs.d.ts +4 -1
- package/packages/panda/styled-system/recipes/aeon-tabs.mjs +1 -0
- package/packages/panda/styled-system/recipes/aeon-theme-switcher.d.ts +34 -0
- package/packages/panda/styled-system/recipes/aeon-theme-switcher.mjs +59 -0
- package/packages/panda/styled-system/recipes/aeon-thread.d.ts +31 -0
- package/packages/panda/styled-system/recipes/aeon-thread.mjs +53 -0
- package/packages/panda/styled-system/recipes/aeon-toast.d.ts +4 -1
- package/packages/panda/styled-system/recipes/aeon-toast.mjs +1 -0
- package/packages/panda/styled-system/recipes/aeon-tooltip.d.ts +4 -1
- package/packages/panda/styled-system/recipes/aeon-tooltip.mjs +1 -0
- package/packages/panda/styled-system/recipes/index.d.ts +16 -1
- package/packages/panda/styled-system/recipes/index.mjs +16 -1
- package/packages/panda/styled-system/styles.css +2317 -450
- package/packages/panda/styled-system/tokens/index.mjs +43 -7
- package/packages/panda/styled-system/tokens/tokens.d.ts +5 -5
- package/packages/panda/styled-system/types/composition.d.ts +86 -23
- package/packages/panda/styled-system/types/conditions.d.ts +34 -10
- package/packages/panda/styled-system/types/csstype.d.ts +6405 -5133
- package/packages/panda/styled-system/types/jsx.d.ts +27 -10
- package/packages/panda/styled-system/types/pattern.d.ts +4 -4
- package/packages/panda/styled-system/types/prop-type.d.ts +11 -1
- package/packages/panda/styled-system/types/style-props.d.ts +2763 -2165
- package/packages/panda/styled-system/types/system-types.d.ts +38 -80
- package/packages/panda/theme-runtime.css +945 -0
- package/packages/primitives/dist/chunk-5S4DIRL4.js +42 -0
- package/packages/primitives/dist/chunk-H4KOEPYC.js +52 -0
- package/packages/primitives/dist/chunk-HONROWUG.js +41 -0
- package/packages/primitives/dist/chunk-J6JHKMVM.js +90 -0
- package/packages/primitives/dist/chunk-JBAG5E6W.js +46 -0
- package/packages/primitives/dist/chunk-LVNCD5F2.js +43 -0
- package/packages/primitives/dist/chunk-PB3LFHXU.js +72 -0
- package/packages/primitives/dist/chunk-R25CUHNF.js +46 -0
- package/packages/primitives/dist/chunk-RO2DMFN5.js +89 -0
- package/packages/primitives/dist/chunk-SZV6KGXN.js +49 -0
- package/packages/primitives/dist/chunk-V5D7LS4J.js +61 -0
- package/packages/primitives/dist/chunk-WVICCOQH.js +56 -0
- package/packages/primitives/dist/chunk-YBPNI2LI.js +70 -0
- package/packages/primitives/dist/chunk-ZMGRX64G.js +74 -0
- package/packages/primitives/dist/index.d.ts +15 -0
- package/packages/primitives/dist/index.js +82 -0
- package/packages/primitives/dist/machines/accordion.d.ts +34 -0
- package/packages/primitives/dist/machines/accordion.js +6 -0
- package/packages/primitives/dist/machines/app-shell.d.ts +57 -0
- package/packages/primitives/dist/machines/app-shell.js +8 -0
- package/packages/primitives/dist/machines/async.d.ts +111 -0
- package/packages/primitives/dist/machines/async.js +12 -0
- package/packages/primitives/dist/machines/button.d.ts +45 -0
- package/packages/primitives/dist/machines/button.js +8 -0
- package/packages/primitives/dist/machines/content-region.d.ts +72 -0
- package/packages/primitives/dist/machines/content-region.js +8 -0
- package/packages/primitives/dist/machines/dialog.d.ts +57 -0
- package/packages/primitives/dist/machines/dialog.js +6 -0
- package/packages/primitives/dist/machines/field.d.ts +72 -0
- package/packages/primitives/dist/machines/field.js +12 -0
- package/packages/primitives/dist/machines/panel.d.ts +50 -0
- package/packages/primitives/dist/machines/panel.js +6 -0
- package/packages/primitives/dist/machines/popover.d.ts +54 -0
- package/packages/primitives/dist/machines/popover.js +6 -0
- package/packages/primitives/dist/machines/slider.d.ts +71 -0
- package/packages/primitives/dist/machines/slider.js +10 -0
- package/packages/primitives/dist/machines/sticky-bar.d.ts +62 -0
- package/packages/primitives/dist/machines/sticky-bar.js +8 -0
- package/packages/primitives/dist/machines/tabs.d.ts +39 -0
- package/packages/primitives/dist/machines/tabs.js +6 -0
- package/packages/primitives/dist/machines/toast.d.ts +31 -0
- package/packages/primitives/dist/machines/toast.js +6 -0
- package/packages/primitives/dist/machines/toggle.d.ts +54 -0
- package/packages/primitives/dist/machines/toggle.js +6 -0
- package/packages/primitives/node_modules/.bin/esbuild +21 -0
- package/packages/primitives/node_modules/.bin/jiti +21 -0
- package/packages/primitives/node_modules/.bin/tsc +21 -0
- package/packages/primitives/node_modules/.bin/tsserver +21 -0
- package/packages/primitives/node_modules/.bin/tsup +21 -0
- package/packages/primitives/node_modules/.bin/tsup-node +21 -0
- package/packages/primitives/node_modules/.bin/tsx +21 -0
- package/packages/primitives/node_modules/.bin/vite +21 -0
- package/packages/primitives/node_modules/.bin/vitest +21 -0
- package/packages/primitives/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -0
- package/packages/primitives/package.json +15 -5
- package/packages/primitives/scripts/xstate-introspect.mjs +35 -0
- package/packages/primitives/src/index.ts +4 -0
- package/packages/primitives/src/machines/app-shell.ts +63 -0
- package/packages/primitives/src/machines/content-region.ts +107 -0
- package/packages/primitives/src/machines/panel.ts +71 -0
- package/packages/primitives/src/machines/sticky-bar.ts +89 -0
- package/packages/react/dist/index.d.ts +951 -0
- package/packages/react/dist/index.js +4739 -0
- package/packages/react/node_modules/.bin/esbuild +21 -0
- package/packages/react/node_modules/.bin/jiti +21 -0
- package/packages/react/node_modules/.bin/tsc +21 -0
- package/packages/react/node_modules/.bin/tsserver +21 -0
- package/packages/react/node_modules/.bin/tsup +21 -0
- package/packages/react/node_modules/.bin/tsup-node +21 -0
- package/packages/react/node_modules/.bin/tsx +21 -0
- package/packages/react/node_modules/.bin/vite +21 -0
- package/packages/react/node_modules/.bin/vitest +21 -0
- package/packages/react/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -0
- package/packages/react/package.json +18 -7
- package/packages/react/src/app-shell/index.tsx +154 -0
- package/packages/react/src/async/index.tsx +6 -1
- package/packages/react/src/async/map-content-state.ts +18 -0
- package/packages/react/src/avatar/index.tsx +19 -0
- package/packages/react/src/bar/index.tsx +101 -0
- package/packages/react/src/button/index.tsx +4 -2
- package/packages/react/src/composer/index.tsx +75 -0
- package/packages/react/src/content/index.tsx +149 -0
- package/packages/react/src/conversation/index.tsx +78 -0
- package/packages/react/src/entry/index.tsx +85 -0
- package/packages/react/src/field/index.tsx +31 -18
- package/packages/react/src/identity/index.tsx +110 -0
- package/packages/react/src/index.ts +15 -0
- package/packages/react/src/list-row/index.tsx +80 -0
- package/packages/react/src/metric-strip/index.tsx +88 -0
- package/packages/react/src/nav/index.tsx +155 -0
- package/packages/react/src/panel/index.tsx +267 -0
- package/packages/react/src/profile-header/index.tsx +91 -0
- package/packages/react/src/radio-group/index.tsx +19 -7
- package/packages/react/src/slider/index.tsx +3 -1
- package/packages/react/src/sticky-bar/index.tsx +135 -0
- package/packages/react/src/switch/index.tsx +7 -1
- package/packages/react/src/theme-switcher/index.tsx +227 -0
- package/packages/react/src/thread/index.tsx +95 -0
- package/packages/react/src/toast/primitives.tsx +2 -2
- package/packages/react/src/tooltip/tooltip.test.tsx +9 -1
- package/packages/react/tsconfig.json +2 -1
- package/packages/react-scene/dist/index.d.ts +121 -0
- package/packages/react-scene/dist/index.js +430 -0
- package/packages/react-scene/node_modules/.bin/jiti +21 -0
- package/packages/react-scene/node_modules/.bin/tsc +21 -0
- package/packages/react-scene/node_modules/.bin/tsserver +21 -0
- package/packages/react-scene/node_modules/.bin/tsup +21 -0
- package/packages/react-scene/node_modules/.bin/tsup-node +21 -0
- package/packages/react-scene/node_modules/.bin/tsx +21 -0
- package/packages/scene/dist/index.d.ts +46 -0
- package/packages/scene/dist/index.js +54 -0
- package/packages/scene/node_modules/.bin/jiti +21 -0
- package/packages/scene/node_modules/.bin/tsc +21 -0
- package/packages/scene/node_modules/.bin/tsserver +21 -0
- package/packages/scene/node_modules/.bin/tsup +21 -0
- package/packages/scene/node_modules/.bin/tsup-node +21 -0
- package/packages/scene/node_modules/.bin/tsx +21 -0
- package/packages/schemas/README.md +52 -0
- package/packages/schemas/dist/index.d.ts +287 -0
- package/packages/schemas/dist/index.js +701 -0
- package/packages/schemas/json/accordion.json +132 -0
- package/packages/schemas/json/async.json +161 -0
- package/packages/schemas/json/button.json +170 -0
- package/packages/schemas/json/catalog.json +2299 -0
- package/packages/schemas/json/checkbox.json +136 -0
- package/packages/schemas/json/combobox.json +130 -0
- package/packages/schemas/json/dialog.json +154 -0
- package/packages/schemas/json/field.json +171 -0
- package/packages/schemas/json/menu.json +138 -0
- package/packages/schemas/json/popover.json +133 -0
- package/packages/schemas/json/progress.json +137 -0
- package/packages/schemas/json/scroll.json +129 -0
- package/packages/schemas/json/select.json +140 -0
- package/packages/schemas/json/switch.json +136 -0
- package/packages/schemas/json/tabs.json +135 -0
- package/packages/schemas/json/toast.json +141 -0
- package/packages/schemas/json/tooltip.json +123 -0
- package/packages/schemas/node_modules/.bin/esbuild +21 -0
- package/packages/schemas/node_modules/.bin/jiti +21 -0
- package/packages/schemas/node_modules/.bin/tsc +21 -0
- package/packages/schemas/node_modules/.bin/tsserver +21 -0
- package/packages/schemas/node_modules/.bin/tsup +21 -0
- package/packages/schemas/node_modules/.bin/tsup-node +21 -0
- package/packages/schemas/node_modules/.bin/tsx +21 -0
- package/packages/schemas/node_modules/.bin/vite +21 -0
- package/packages/schemas/node_modules/.bin/vitest +21 -0
- package/packages/schemas/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -0
- package/packages/schemas/package.json +56 -0
- package/packages/schemas/prompts/cursorrules.md +64 -0
- package/packages/schemas/prompts/statecharts.md +31 -0
- package/packages/schemas/prompts/system.md +30 -0
- package/packages/schemas/registry/catalog.json +54 -0
- package/packages/schemas/registry/components/accordion.json +132 -0
- package/packages/schemas/registry/components/async.json +161 -0
- package/packages/schemas/registry/components/button.json +170 -0
- package/packages/schemas/registry/components/checkbox.json +136 -0
- package/packages/schemas/registry/components/combobox.json +130 -0
- package/packages/schemas/registry/components/dialog.json +154 -0
- package/packages/schemas/registry/components/field.json +171 -0
- package/packages/schemas/registry/components/menu.json +138 -0
- package/packages/schemas/registry/components/popover.json +133 -0
- package/packages/schemas/registry/components/progress.json +137 -0
- package/packages/schemas/registry/components/scroll.json +129 -0
- package/packages/schemas/registry/components/select.json +140 -0
- package/packages/schemas/registry/components/switch.json +136 -0
- package/packages/schemas/registry/components/tabs.json +135 -0
- package/packages/schemas/registry/components/toast.json +141 -0
- package/packages/schemas/registry/components/tooltip.json +123 -0
- package/packages/schemas/registry/machines/async.json +219 -0
- package/packages/schemas/registry/machines/buttonLifecycle.json +224 -0
- package/packages/schemas/registry/machines/dialog.json +143 -0
- package/packages/schemas/registry/machines/field.json +275 -0
- package/packages/schemas/scripts/emit.ts +61 -0
- package/packages/schemas/src/aeon-to-schema.test.ts +70 -0
- package/packages/schemas/src/aeon-to-schema.ts +206 -0
- package/packages/schemas/src/agent-bridge.ts +82 -0
- package/packages/schemas/src/components.ts +307 -0
- package/packages/schemas/src/index.test.ts +25 -0
- package/packages/schemas/src/index.ts +25 -0
- package/packages/schemas/src/prompts.ts +121 -0
- package/packages/schemas/src/registry.ts +73 -0
- package/packages/schemas/src/schema-builder.ts +87 -0
- package/packages/schemas/tsconfig.json +9 -0
- package/packages/signal/dist/index.d.ts +54 -0
- package/packages/signal/dist/index.js +169 -0
- package/packages/signal/node_modules/.bin/jiti +21 -0
- package/packages/signal/node_modules/.bin/tsc +21 -0
- package/packages/signal/node_modules/.bin/tsserver +21 -0
- package/packages/signal/node_modules/.bin/tsup +21 -0
- package/packages/signal/node_modules/.bin/tsup-node +21 -0
- package/packages/signal/node_modules/.bin/tsx +21 -0
- package/packages/site/dist/index.d.ts +31 -0
- package/packages/site/dist/index.js +62 -0
- package/packages/site/node_modules/.bin/jiti +21 -0
- package/packages/site/node_modules/.bin/tsc +21 -0
- package/packages/site/node_modules/.bin/tsserver +21 -0
- package/packages/site/node_modules/.bin/tsup +21 -0
- package/packages/site/node_modules/.bin/tsup-node +21 -0
- package/packages/site/node_modules/.bin/tsx +21 -0
- package/packages/solid/dist/index.d.ts +30 -0
- package/packages/solid/dist/index.js +174 -0
- package/packages/solid/node_modules/.bin/jiti +21 -0
- package/packages/solid/node_modules/.bin/tsc +21 -0
- package/packages/solid/node_modules/.bin/tsserver +21 -0
- package/packages/solid/node_modules/.bin/tsup +21 -0
- package/packages/solid/node_modules/.bin/tsup-node +21 -0
- package/packages/solid/node_modules/.bin/tsx +21 -0
- package/packages/solid/package.json +2 -2
- package/packages/surface/dist/index.d.ts +8 -0
- package/packages/surface/dist/index.js +14 -0
- package/packages/surface/node_modules/.bin/jiti +21 -0
- package/packages/surface/node_modules/.bin/tsc +21 -0
- package/packages/surface/node_modules/.bin/tsserver +21 -0
- package/packages/surface/node_modules/.bin/tsup +21 -0
- package/packages/surface/node_modules/.bin/tsup-node +21 -0
- package/packages/surface/node_modules/.bin/tsx +21 -0
- package/packages/svelte/dist/index.d.ts +12 -0
- package/packages/svelte/dist/index.js +15 -0
- package/packages/svelte/node_modules/.bin/acorn +21 -0
- package/packages/svelte/node_modules/.bin/esbuild +21 -0
- package/packages/svelte/node_modules/.bin/jiti +21 -0
- package/packages/svelte/node_modules/.bin/svelte-check +21 -0
- package/packages/svelte/node_modules/.bin/tsc +21 -0
- package/packages/svelte/node_modules/.bin/tsserver +21 -0
- package/packages/svelte/node_modules/.bin/tsup +21 -0
- package/packages/svelte/node_modules/.bin/tsup-node +21 -0
- package/packages/svelte/node_modules/.bin/tsx +21 -0
- package/packages/svelte/node_modules/.bin/vite +21 -0
- package/packages/svelte/package.json +15 -5
- package/packages/ui/README.md +19 -6
- package/packages/ui/dist/index.d.ts +445 -0
- package/packages/ui/dist/index.js +980 -0
- package/packages/ui/node_modules/.bin/jiti +21 -0
- package/packages/ui/node_modules/.bin/tsc +21 -0
- package/packages/ui/node_modules/.bin/tsserver +21 -0
- package/packages/ui/node_modules/.bin/tsup +21 -0
- package/packages/ui/node_modules/.bin/tsup-node +21 -0
- package/packages/ui/node_modules/.bin/tsx +21 -0
- package/packages/ui/src/app-shell.tsx +44 -0
- package/packages/ui/src/async.tsx +2 -1
- package/packages/ui/src/avatar.tsx +35 -0
- package/packages/ui/src/bar.tsx +34 -0
- package/packages/ui/src/composer.tsx +27 -0
- package/packages/ui/src/content.tsx +43 -0
- package/packages/ui/src/conversation.tsx +43 -0
- package/packages/ui/src/entry.tsx +76 -0
- package/packages/ui/src/field.tsx +5 -0
- package/packages/ui/src/identity.tsx +35 -0
- package/packages/ui/src/index.ts +16 -0
- package/packages/ui/src/list-row.tsx +30 -0
- package/packages/ui/src/metric-strip.tsx +29 -0
- package/packages/ui/src/nav.tsx +46 -0
- package/packages/ui/src/panel.tsx +39 -0
- package/packages/ui/src/profile-header.tsx +35 -0
- package/packages/ui/src/sticky-bar.tsx +42 -0
- package/packages/ui/src/switch.tsx +17 -4
- package/packages/ui/src/theme-switcher.tsx +41 -0
- package/packages/ui/src/thread.tsx +35 -0
- package/packages/vue/dist/index.d.ts +71 -0
- package/packages/vue/dist/index.js +193 -0
- package/packages/vue/node_modules/.bin/jiti +21 -0
- package/packages/vue/node_modules/.bin/tsc +21 -0
- package/packages/vue/node_modules/.bin/tsserver +21 -0
- package/packages/vue/node_modules/.bin/tsup +21 -0
- package/packages/vue/node_modules/.bin/tsup-node +21 -0
- package/packages/vue/node_modules/.bin/tsx +21 -0
- package/packages/vue/package.json +3 -3
- package/scripts/vite-aliases.mjs +179 -0
- package/scripts/xstate-introspect.mjs +68 -0
- package/.changeset/README.md +0 -23
- package/.changeset/combobox-and-changesets.md +0 -9
- package/.changeset/config.json +0 -31
- package/.changeset/framework-adapters.md +0 -12
- package/.changeset/scene-3d.md +0 -6
- package/.changeset/scene-plane.md +0 -8
- package/.changeset/site-og.md +0 -5
- package/.cursor/rules/aeon-ui.mdc +0 -22
- package/ACCESSIBILITY.md +0 -32
- package/AGENTS.md +0 -226
- package/COMPONENTS.md +0 -41
- package/FRAMEWORKS.md +0 -57
- package/PHILOSOPHY.md +0 -71
- package/PUBLISHING.md +0 -105
- package/SCENE.md +0 -113
- package/STATES.md +0 -243
- package/apps/demo/index.html +0 -31
- package/apps/demo/og.config.mjs +0 -20
- package/apps/demo/package.json +0 -41
- package/apps/demo/public/favicon.svg +0 -16
- package/apps/demo/public/og-aeon-ui-engine.png +0 -0
- package/apps/demo/public/og.svg +0 -35
- package/apps/demo/scripts/generate-og-png.mjs +0 -62
- package/apps/demo/src/App.tsx +0 -31
- package/apps/demo/src/aeonDiagrams.ts +0 -42
- package/apps/demo/src/app.css +0 -16
- package/apps/demo/src/components/ActionCluster.tsx +0 -20
- package/apps/demo/src/components/AsyncMachineDemo.tsx +0 -97
- package/apps/demo/src/components/ButtonLifecycleDemo.tsx +0 -63
- package/apps/demo/src/components/CodeExample.tsx +0 -7
- package/apps/demo/src/components/ComboboxDemo.tsx +0 -30
- package/apps/demo/src/components/DiagramsSection.tsx +0 -37
- package/apps/demo/src/components/FieldStateDemo.tsx +0 -51
- package/apps/demo/src/components/GridMesh.tsx +0 -8
- package/apps/demo/src/components/HeroInstall.tsx +0 -13
- package/apps/demo/src/components/LandingFaq.tsx +0 -29
- package/apps/demo/src/components/LandingFooter.tsx +0 -30
- package/apps/demo/src/components/LandingHeader.tsx +0 -62
- package/apps/demo/src/components/LandingHero.tsx +0 -55
- package/apps/demo/src/components/LayersSection.tsx +0 -47
- package/apps/demo/src/components/MermaidDiagram.tsx +0 -86
- package/apps/demo/src/components/PhilosophySection.tsx +0 -31
- package/apps/demo/src/components/PlaygroundBlock.tsx +0 -18
- package/apps/demo/src/components/PlaygroundControlsDemo.tsx +0 -63
- package/apps/demo/src/components/PlaygroundSection.tsx +0 -120
- package/apps/demo/src/components/ScrollRegionDemo.tsx +0 -74
- package/apps/demo/src/components/ThemeSwitcher.tsx +0 -79
- package/apps/demo/src/demo-layout.css +0 -293
- package/apps/demo/src/landing.css +0 -1143
- package/apps/demo/src/main.tsx +0 -14
- package/apps/demo/src/nav.ts +0 -9
- package/apps/demo/src/site.ts +0 -218
- package/apps/demo/tsconfig.json +0 -17
- package/apps/demo/vite-plugins/og-meta.ts +0 -30
- package/apps/demo/vite.config.ts +0 -69
- package/docs/API_PATTERNS.md +0 -234
- package/docs/ARCHITECTURE.md +0 -125
- package/docs/COMPONENT_CHECKLIST.md +0 -103
- package/docs/FILE_MAP.md +0 -122
- package/docs/GLOSSARY.md +0 -125
- package/docs/INDEX.md +0 -53
- package/docs/LAYOUT_COORDINATES.md +0 -178
- package/docs/MACHINES.md +0 -171
- package/docs/MIGRATION_FROM_ARK.md +0 -295
- package/docs/VITE_CONSUMER.md +0 -114
- package/packages/react/src/async/legacy-region.tsx +0 -38
- package/pnpm-workspace.yaml +0 -3
- package/vercel.json +0 -12
package/FRAMEWORKS.md
DELETED
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
# Framework support
|
|
2
|
-
|
|
3
|
-
**Agents:** [AGENTS.md](./AGENTS.md) · porting steps mirror React — [docs/COMPONENT_CHECKLIST.md](./docs/COMPONENT_CHECKLIST.md)
|
|
4
|
-
|
|
5
|
-
## Today
|
|
6
|
-
|
|
7
|
-
| Runtime | Package | Status |
|
|
8
|
-
|---------|---------|--------|
|
|
9
|
-
| React 18+ | `@aeon-ui/react`, `@aeon-ui/ui` | **Full catalog** (Button, Dialog, Select, Combobox, overlays, …) |
|
|
10
|
-
| Vue 3 | `@aeon-ui/vue` | **Adapter v0.1** — `useAeonMachine`, `Switch` |
|
|
11
|
-
| Solid 1.8+ | `@aeon-ui/solid` | **Adapter v0.1** — `useAeonMachine`, `Switch` |
|
|
12
|
-
| Svelte 4/5 | `@aeon-ui/svelte` | **Adapter v0.1** — `useAeonMachine`, `Switch` (`.svelte` parts) |
|
|
13
|
-
|
|
14
|
-
Styled Panda recipes (`@aeon-ui/ui`) remain **React-only** until a second framework needs them.
|
|
15
|
-
|
|
16
|
-
## Install
|
|
17
|
-
|
|
18
|
-
```bash
|
|
19
|
-
# Vue
|
|
20
|
-
pnpm add @aeon-ui/vue @aeon-ui/core @aeon-ui/primitives xstate vue
|
|
21
|
-
|
|
22
|
-
# Solid
|
|
23
|
-
pnpm add @aeon-ui/solid @aeon-ui/core @aeon-ui/primitives xstate solid-js
|
|
24
|
-
|
|
25
|
-
# Svelte
|
|
26
|
-
pnpm add @aeon-ui/svelte @aeon-ui/core @aeon-ui/primitives xstate svelte
|
|
27
|
-
```
|
|
28
|
-
|
|
29
|
-
## Headless contract (all adapters)
|
|
30
|
-
|
|
31
|
-
Any port must preserve:
|
|
32
|
-
|
|
33
|
-
1. **Machines** from `@aeon-ui/primitives` (XState) — single source of behavior.
|
|
34
|
-
2. **Anatomy** from `@aeon-ui/core` — `data-aeon-scope`, `data-aeon-part`, `data-aeon-state`.
|
|
35
|
-
3. **Compound parts** — same names as React (`Root`, `Trigger`, `Content`, …).
|
|
36
|
-
4. **Controlled APIs** — `open`, `onOpenChange`, `checked`, `onCheckedChange` where applicable.
|
|
37
|
-
|
|
38
|
-
Framework packages bind machine snapshots to their reactivity model (via `@xstate/vue`, `@xstate/solid`, or actor `subscribe` in Svelte). They do **not** reimplement transition tables.
|
|
39
|
-
|
|
40
|
-
## Porting checklist (new component)
|
|
41
|
-
|
|
42
|
-
1. Copy behavior from `packages/react/src/<component>/`.
|
|
43
|
-
2. Reuse `partAttrs` / anatomy from `@aeon-ui/core`.
|
|
44
|
-
3. Wire `useAeonMachine` (or framework binding) to the primitive machine.
|
|
45
|
-
4. Add a minimal demo or test in that framework when the API stabilizes.
|
|
46
|
-
|
|
47
|
-
## Why React stayed first
|
|
48
|
-
|
|
49
|
-
- Largest catalog and Panda styled layer.
|
|
50
|
-
- Demo and docs target JSX.
|
|
51
|
-
- Adapters prove the contract before duplicating every component three times.
|
|
52
|
-
|
|
53
|
-
## Comparison to Ark / Zag
|
|
54
|
-
|
|
55
|
-
[Ark UI](https://ark-ui.com) ships many frameworks via [Zag.js](https://zag-js.com) with broad component coverage. Aeon optimizes for **explicit XState charts** and **full lifecycle states** on fewer, deeper primitives. Adapters close the framework gap incrementally; they do not yet match Ark’s breadth.
|
|
56
|
-
|
|
57
|
-
Contributors: open a PR adding the next React component port to `@aeon-ui/vue` / `solid` / `svelte` using **Switch** as the template.
|
package/PHILOSOPHY.md
DELETED
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
# Aeon UI — Founding Philosophy
|
|
2
|
-
|
|
3
|
-
Aeon UI is infrastructure for the web, built for interfaces that remain clear as products grow.
|
|
4
|
-
|
|
5
|
-
## North star
|
|
6
|
-
|
|
7
|
-
**State is defined first. UI represents the totality of that definition.**
|
|
8
|
-
|
|
9
|
-
A region’s behavior is modeled as an explicit set of conditions — named, mutually exclusive at a given depth, with known transitions. The interface’s job is to **fully express** that model: every stable state the chart allows should be visible in the UI (via structure, copy, and `data-aeon-state`), and the UI should never imply a condition the chart does not define (no mystery spinners, no ambiguous half-states, no styling that drifts from the snapshot).
|
|
10
|
-
|
|
11
|
-
In short: **UI = f(state)** — not f(props), not f(local React flags), but f(the executable statechart).
|
|
12
|
-
|
|
13
|
-
## Primary source
|
|
14
|
-
|
|
15
|
-
**Thanh Nguyen**, *Statecharts for modern web application state management* (Metropolia, 2020).
|
|
16
|
-
[Theseus thesis PDF](https://www.theseus.fi/bitstream/handle/10024/334118/Thanh_Nguyen.pdf?sequence=2&isAllowed=y)
|
|
17
|
-
|
|
18
|
-
## Core tenets
|
|
19
|
-
|
|
20
|
-
### 1. Define state, then project UI
|
|
21
|
-
|
|
22
|
-
Separate **behavior** (state evolution in a machine) from **presentation** (markup, style, anatomy). Components read a snapshot and render the corresponding face of the model. When the snapshot changes, the whole affordance updates — trigger, labels, indicators, and `data-aeon-state` together.
|
|
23
|
-
|
|
24
|
-
### 2. Totality, not fragments
|
|
25
|
-
|
|
26
|
-
If the machine has `idle`, `loading`, `success`, and `failure`, the product surface should account for all four — in layout, messaging, and styling — even when only one is active. Users and developers see the same complete map; nothing is left implicit.
|
|
27
|
-
|
|
28
|
-
### 3. Explicit, coherent states
|
|
29
|
-
|
|
30
|
-
Application regions benefit from **mutually exclusive states** at a given depth — one stable condition the team can name, test, and extend. That clarity keeps complex flows maintainable as features accumulate.
|
|
31
|
-
|
|
32
|
-
### 4. Statecharts for lasting complexity
|
|
33
|
-
|
|
34
|
-
When requirements grow, flat state diagrams become hard to follow. Statecharts add:
|
|
35
|
-
|
|
36
|
-
- **Hierarchy** — cluster related states; share transitions at the right level of abstraction
|
|
37
|
-
- **Orthogonality** — independent regions (e.g. playback and shuffle) without combinatorial sprawl
|
|
38
|
-
- **Guards** — conditional transitions that document business rules in the model
|
|
39
|
-
- **Transient states** — routing steps that keep flows readable
|
|
40
|
-
- **Actions and activities** — entry, exit, and transition effects with defined ordering
|
|
41
|
-
|
|
42
|
-
### 5. Deterministic, diagrammable behavior
|
|
43
|
-
|
|
44
|
-
Every interactive primitive can own an **executable statechart** (via [XState](https://xstate.js.org)). Models can be visualized, reviewed, and extended alongside designers and stakeholders — a shared map for how the product behaves.
|
|
45
|
-
|
|
46
|
-
### 6. Design systems in control
|
|
47
|
-
|
|
48
|
-
Aeon provides **unstyled headless primitives** with explicit anatomy (`data-aeon-scope`, `data-aeon-part`, `data-aeon-state`) so your team owns every surface. The styled layer (`@aeon-ui/ui`) ships intentional defaults you can adopt or replace — **your brand, fully yours**.
|
|
49
|
-
|
|
50
|
-
## Production-ready patterns
|
|
51
|
-
|
|
52
|
-
| Concern | Approach |
|
|
53
|
-
|---------|----------|
|
|
54
|
-
| Structure & API | Compound components, part-based anatomy (`data-aeon-scope`, `data-aeon-part`, `data-aeon-state`), accessibility |
|
|
55
|
-
| Styling | Panda CSS slot recipes on headless primitives — tokens and variants keyed to machine state |
|
|
56
|
-
| Execution | XState statecharts (thesis case study) — explicit states and transitions in the browser |
|
|
57
|
-
|
|
58
|
-
## Library shape
|
|
59
|
-
|
|
60
|
-
```
|
|
61
|
-
@aeon-ui/core — philosophy, anatomy, machine helpers
|
|
62
|
-
@aeon-ui/primitives — headless, statechart-backed parts
|
|
63
|
-
@aeon-ui/react — React bindings (snapshot → DOM)
|
|
64
|
-
@aeon-ui/ui — styled components with intentional tokens
|
|
65
|
-
```
|
|
66
|
-
|
|
67
|
-
**Guideline:** Model the statechart first — list every stable state and transition. Then build UI that expresses the **whole** definition at once (track, readout, parts), with exactly one active condition per region.
|
|
68
|
-
|
|
69
|
-
See **[STATES.md](./STATES.md)** for states traditional UI often omits (async empty/stale, button pending/success/failure, orthogonal field regions) and the corresponding Aeon primitives.
|
|
70
|
-
|
|
71
|
-
**Coding agents:** [AGENTS.md](./AGENTS.md) · [docs/INDEX.md](./docs/INDEX.md)
|
package/PUBLISHING.md
DELETED
|
@@ -1,105 +0,0 @@
|
|
|
1
|
-
# Publishing to npm
|
|
2
|
-
|
|
3
|
-
## aeon-ui-engine (primary npm package)
|
|
4
|
-
|
|
5
|
-
The public install target is **`aeon-ui-engine`**, published from the **repo root**. Its semver is independent of internal `@aeon-ui/*` workspace versions (still `0.1.0` until those are released separately).
|
|
6
|
-
|
|
7
|
-
### Release checklist (patch / minor / major)
|
|
8
|
-
|
|
9
|
-
1. Update root **[CHANGELOG.md](./CHANGELOG.md)** under `## [X.Y.Z]` using [Keep a Changelog](https://keepachangelog.com/) sections: `Added`, `Changed`, `Fixed`, `Removed`, `Deprecated`, `Security`.
|
|
10
|
-
2. Bump **`version`** in root **[package.json](./package.json)** (`1.0.1` → `1.0.2` = **patch** for fixes; **minor** for features; **major** for breaking changes).
|
|
11
|
-
3. `pnpm build && pnpm typecheck`
|
|
12
|
-
4. Commit: `Release aeon-ui-engine vX.Y.Z`
|
|
13
|
-
5. Tag: `git tag vX.Y.Z`
|
|
14
|
-
6. Publish: `npm publish --access public` (from repo root; requires `npm login`)
|
|
15
|
-
7. Push: `git push && git push --tags`
|
|
16
|
-
|
|
17
|
-
Optional: add a Changeset with `"aeon-ui-engine": patch|minor|major` before step 2 if you use `pnpm version-packages` for the root package only (see `.changeset/config.json`).
|
|
18
|
-
|
|
19
|
-
---
|
|
20
|
-
|
|
21
|
-
## @aeon-ui/* scoped packages (future)
|
|
22
|
-
|
|
23
|
-
Packages are versioned together at **0.1.0** (pre-release) using [Changesets](https://github.com/changesets/changesets).
|
|
24
|
-
|
|
25
|
-
## Packages
|
|
26
|
-
|
|
27
|
-
| npm name | Path |
|
|
28
|
-
|----------|------|
|
|
29
|
-
| `@aeon-ui/core` | `packages/core` |
|
|
30
|
-
| `@aeon-ui/primitives` | `packages/primitives` |
|
|
31
|
-
| `@aeon-ui/react` | `packages/react` |
|
|
32
|
-
| `@aeon-ui/panda` | `packages/panda` |
|
|
33
|
-
| `@aeon-ui/ui` | `packages/ui` |
|
|
34
|
-
| `@aeon-ui/vue` | `packages/vue` |
|
|
35
|
-
| `@aeon-ui/solid` | `packages/solid` |
|
|
36
|
-
| `@aeon-ui/svelte` | `packages/svelte` |
|
|
37
|
-
|
|
38
|
-
All eight publishable packages are in a **fixed** changeset group — one version bump applies to every package.
|
|
39
|
-
|
|
40
|
-
## Day-to-day versioning
|
|
41
|
-
|
|
42
|
-
1. After shipping features or fixes, run `pnpm changeset` and describe the change.
|
|
43
|
-
2. When ready to release, run `pnpm version-packages` (updates `package.json` versions and package CHANGELOGs).
|
|
44
|
-
3. Run `pnpm build` and `pnpm typecheck`.
|
|
45
|
-
4. Run `pnpm release` to publish (requires `npm login` and `@aeon-ui` scope access).
|
|
46
|
-
|
|
47
|
-
See `.changeset/README.md` for a short maintainer cheat sheet.
|
|
48
|
-
|
|
49
|
-
## Before first publish (0.1.0)
|
|
50
|
-
|
|
51
|
-
1. `pnpm install` — includes `@changesets/cli` and adapter deps.
|
|
52
|
-
2. `pnpm build` — codegen + all package builds.
|
|
53
|
-
3. `pnpm typecheck` — workspace clean.
|
|
54
|
-
4. Confirm `files` in each `package.json` includes `dist` (and Panda `styled-system` / CSS assets; Svelte `.svelte` sources where applicable).
|
|
55
|
-
5. Create npm org or scope `@aeon-ui` and login: `npm login`.
|
|
56
|
-
6. Apply pending changesets: `pnpm version-packages`.
|
|
57
|
-
7. Dry-run: `pnpm release --dry-run` (if your Changesets version supports it) or publish one package manually to verify.
|
|
58
|
-
8. `pnpm release`.
|
|
59
|
-
|
|
60
|
-
### Publish order (manual fallback)
|
|
61
|
-
|
|
62
|
-
Dependency order is satisfied automatically when all packages share one version and declare `workspace:*` / semver peers. Manual order if needed:
|
|
63
|
-
|
|
64
|
-
```bash
|
|
65
|
-
pnpm --filter @aeon-ui/core publish --access public
|
|
66
|
-
pnpm --filter @aeon-ui/primitives publish --access public
|
|
67
|
-
pnpm --filter @aeon-ui/react publish --access public
|
|
68
|
-
pnpm --filter @aeon-ui/vue publish --access public
|
|
69
|
-
pnpm --filter @aeon-ui/solid publish --access public
|
|
70
|
-
pnpm --filter @aeon-ui/svelte publish --access public
|
|
71
|
-
pnpm --filter @aeon-ui/panda publish --access public
|
|
72
|
-
pnpm --filter @aeon-ui/ui publish --access public
|
|
73
|
-
```
|
|
74
|
-
|
|
75
|
-
Prefer `pnpm release` once Changesets is in use.
|
|
76
|
-
|
|
77
|
-
## Consumer install
|
|
78
|
-
|
|
79
|
-
**React + styled:**
|
|
80
|
-
|
|
81
|
-
```bash
|
|
82
|
-
pnpm add @aeon-ui/ui @aeon-ui/react @aeon-ui/panda
|
|
83
|
-
```
|
|
84
|
-
|
|
85
|
-
**Vue headless:**
|
|
86
|
-
|
|
87
|
-
```bash
|
|
88
|
-
pnpm add @aeon-ui/vue @aeon-ui/core @aeon-ui/primitives xstate
|
|
89
|
-
```
|
|
90
|
-
|
|
91
|
-
**Solid headless:**
|
|
92
|
-
|
|
93
|
-
```bash
|
|
94
|
-
pnpm add @aeon-ui/solid @aeon-ui/core @aeon-ui/primitives xstate solid-js
|
|
95
|
-
```
|
|
96
|
-
|
|
97
|
-
**Svelte headless:**
|
|
98
|
-
|
|
99
|
-
```bash
|
|
100
|
-
pnpm add @aeon-ui/svelte @aeon-ui/core @aeon-ui/primitives xstate svelte
|
|
101
|
-
```
|
|
102
|
-
|
|
103
|
-
## Demo app
|
|
104
|
-
|
|
105
|
-
The `apps/demo` package stays private and is listed in Changesets `ignore`.
|
package/SCENE.md
DELETED
|
@@ -1,113 +0,0 @@
|
|
|
1
|
-
# Aeon Scene (optional plane)
|
|
2
|
-
|
|
3
|
-
**Control plane** (`@aeon-ui/primitives`, `@aeon-ui/react`, `@aeon-ui/ui`) models interactive UI with statecharts.
|
|
4
|
-
|
|
5
|
-
**Scene plane** adds ambient visuals — geometry, materials, and audio-driven motion — without changing that contract.
|
|
6
|
-
|
|
7
|
-
## Packages
|
|
8
|
-
|
|
9
|
-
| Package | Role |
|
|
10
|
-
|---------|------|
|
|
11
|
-
| `@aeon-ui/signal` | Web Audio analyser tap, FFT bands, bar motion smoothing |
|
|
12
|
-
| `@aeon-ui/geometry` | Grid/wave patterns, SVG bar layout, `sceneAttrs()` |
|
|
13
|
-
| `@aeon-ui/surface` | Procedural CSS materials (stone, gravel, brick, pavement, kraft) — import `surface.css` once |
|
|
14
|
-
| `@aeon-ui/scene` | CSS 3D transforms, perspective, wall clips (framework-agnostic) |
|
|
15
|
-
| `@aeon-ui/react-scene` | React: backdrops/visualizers + `SceneStage`, `SceneLayer`, `ScenePlane`, `SceneSlot` |
|
|
16
|
-
|
|
17
|
-
Install only what you need. Sic Bo might use `surface` + `geometry`; a player app might add `signal` + `react-scene`.
|
|
18
|
-
|
|
19
|
-
## Quick start (React)
|
|
20
|
-
|
|
21
|
-
```bash
|
|
22
|
-
pnpm add @aeon-ui/react-scene @aeon-ui/signal @aeon-ui/geometry @aeon-ui/surface
|
|
23
|
-
```
|
|
24
|
-
|
|
25
|
-
```tsx
|
|
26
|
-
import '@aeon-ui/surface/surface.css'
|
|
27
|
-
import { SceneRoot, SceneSurface, SignalBars } from '@aeon-ui/react-scene'
|
|
28
|
-
import { createDemoSignal } from '@aeon-ui/signal'
|
|
29
|
-
|
|
30
|
-
// Demo oscillator for playgrounds (use attachMediaAnalyser(audio) in production)
|
|
31
|
-
const demo = createDemoSignal()
|
|
32
|
-
demo.start()
|
|
33
|
-
|
|
34
|
-
<SceneRoot state="active">
|
|
35
|
-
<SceneSurface material="stone" style={{ minHeight: 120 }} />
|
|
36
|
-
<SignalBars analyser={demo.analyser} active barCount={7} />
|
|
37
|
-
</SceneRoot>
|
|
38
|
-
```
|
|
39
|
-
|
|
40
|
-
## Anatomy
|
|
41
|
-
|
|
42
|
-
Scene regions use the same attribute story as controls:
|
|
43
|
-
|
|
44
|
-
- `data-aeon-scope="scene"`
|
|
45
|
-
- `data-aeon-part="backdrop" | "grid" | "surface" | "visualizer" | …`
|
|
46
|
-
- `data-aeon-state="idle" | "active" | "paused"` when playback or motion applies
|
|
47
|
-
|
|
48
|
-
Style with Panda/CSS like any other Aeon part — no requirement to use `@aeon-ui/ui` components.
|
|
49
|
-
|
|
50
|
-
## Construct a 3D scene from UI elements
|
|
51
|
-
|
|
52
|
-
Use **CSS 3D** (not WebGL): a `SceneStage` sets perspective; `SceneRoom` builds a box (floor, ceiling, back, left, right) with one shared vanishing point; `SceneLayer` / `ScenePlane` cover ad-hoc layouts; `SceneSlot` mounts interactive UI at a transform. Prefer `SceneRoom` for alley/corridor spaces.
|
|
53
|
-
|
|
54
|
-
```bash
|
|
55
|
-
pnpm add @aeon-ui/react-scene @aeon-ui/scene @aeon-ui/surface @aeon-ui/geometry
|
|
56
|
-
```
|
|
57
|
-
|
|
58
|
-
```tsx
|
|
59
|
-
import '@aeon-ui/surface/surface.css'
|
|
60
|
-
import '@aeon-ui/react-scene/scene-3d.css'
|
|
61
|
-
import { SceneStage, SceneRoom, SceneLayer, ScenePlane, SceneSlot } from '@aeon-ui/react-scene'
|
|
62
|
-
|
|
63
|
-
<SceneStage minHeight={360} perspective={{ distance: 1100, origin: '50% 48%' }}>
|
|
64
|
-
<SceneRoom
|
|
65
|
-
size={{ width: 1280, height: 680, depth: 920 }}
|
|
66
|
-
camera={{ pitch: 11, offsetZ: -60 }}
|
|
67
|
-
floorMaterial="pavement"
|
|
68
|
-
wallMaterial="brick"
|
|
69
|
-
floor={<YourGameBoard />}
|
|
70
|
-
/>
|
|
71
|
-
</SceneStage>
|
|
72
|
-
|
|
73
|
-
<!-- Or manual layers: -->
|
|
74
|
-
<SceneStage minHeight={360} perspective={{ distance: 1000, origin: '50% 38%' }}>
|
|
75
|
-
<SceneLayer transform={{ z: -140 }}>
|
|
76
|
-
<ScenePlane part="sky" style={{ background: 'linear-gradient(180deg, #1a2030, #0d1117)' }} />
|
|
77
|
-
</SceneLayer>
|
|
78
|
-
|
|
79
|
-
<SceneLayer transform={{ z: -70, rotateY: 38 }} origin="0% 100%">
|
|
80
|
-
<ScenePlane part="wall-left" wall="left" material="brick" fill={false} style={{ width: '52%', height: '72%' }} />
|
|
81
|
-
</SceneLayer>
|
|
82
|
-
|
|
83
|
-
<SceneLayer transform={{ z: -70, rotateY: -38 }} origin="100% 100%">
|
|
84
|
-
<ScenePlane part="wall-right" wall="right" material="brick" fill={false} style={{ right: 0, width: '52%', height: '72%' }} />
|
|
85
|
-
</SceneLayer>
|
|
86
|
-
|
|
87
|
-
<SceneLayer transform={{ z: 0, rotateX: 58 }} origin="50% 0%">
|
|
88
|
-
<ScenePlane part="ground" material="gravel">
|
|
89
|
-
<SceneSlot transform={{ z: 24 }} style={{ left: '12%', right: '12%', top: '18%' }}>
|
|
90
|
-
{/* Any React UI — table, cards, controls */}
|
|
91
|
-
<YourGameBoard />
|
|
92
|
-
</SceneSlot>
|
|
93
|
-
</ScenePlane>
|
|
94
|
-
</SceneLayer>
|
|
95
|
-
</SceneStage>
|
|
96
|
-
```
|
|
97
|
-
|
|
98
|
-
**Image URLs (optional):** pass `texture="…"` on `ScenePlane` when you have art assets. Prefer `@aeon-ui/surface` classes (`aeon-surface--pavement`, `--kraft`, `--brick`, …) for zero-asset materials — see the Sic Bo alley demo.
|
|
99
|
-
|
|
100
|
-
**Low-level:** import `sceneTransformStyle`, `sceneStageStyle`, `sceneWallClip` from `@aeon-ui/scene` for Vue/Solid/Svelte bindings.
|
|
101
|
-
|
|
102
|
-
Layers use `data-aeon-scope="scene"` and `data-aeon-part` from `@aeon-ui/geometry` — style in Panda/CSS like controls.
|
|
103
|
-
|
|
104
|
-
## Soundbase lineage
|
|
105
|
-
|
|
106
|
-
Bar motion and analyser patterns are adapted from the Soundbase logo visualizer (`logo-visualizer-core`, `logo-audio-analyser`). Product-specific logos stay in the app; the math lives in `@aeon-ui/signal`.
|
|
107
|
-
|
|
108
|
-
## What not to put here
|
|
109
|
-
|
|
110
|
-
- Form controls, dialogs, async data — stay in **primitives / ui**
|
|
111
|
-
- Full WebGL/game engines — separate packages or app code; Scene provides CSS/SVG/canvas-friendly building blocks first
|
|
112
|
-
|
|
113
|
-
Future: `@aeon-ui/vue-scene`, canvas render targets, image-based texture atlases, shared `@aeon-ui/motion` for non-audio springs. WebGL/Three.js stays app-level; Scene 3D is DOM + CSS transforms first.
|
package/STATES.md
DELETED
|
@@ -1,243 +0,0 @@
|
|
|
1
|
-
# States traditional UI forgets — and how Aeon models them
|
|
2
|
-
|
|
3
|
-
**Agents:** start at [AGENTS.md](./AGENTS.md) and [docs/MACHINES.md](./docs/MACHINES.md) for which components use machines vs props.
|
|
4
|
-
|
|
5
|
-
Aeon’s north star: **[state is defined first; UI expresses the totality of that definition](./PHILOSOPHY.md)** (`UI = f(snapshot)`).
|
|
6
|
-
|
|
7
|
-
Traditional interfaces collapse rich behavior into a few booleans (`disabled`, `loading`, `open`) or hide conditions entirely. This document catalogs common gaps, how Aeon addresses them today, and how to extend the library.
|
|
8
|
-
|
|
9
|
-
---
|
|
10
|
-
|
|
11
|
-
## The attribute contract
|
|
12
|
-
|
|
13
|
-
Every styled surface should be targetable consistently:
|
|
14
|
-
|
|
15
|
-
| Attribute | Purpose |
|
|
16
|
-
|-----------|---------|
|
|
17
|
-
| `data-aeon-scope` | Component family (`button`, `async`, `field`, …) |
|
|
18
|
-
| `data-aeon-part` | Compound part (`root`, `track`, `control`, …) |
|
|
19
|
-
| `data-aeon-state` | Active condition(s) from the machine snapshot |
|
|
20
|
-
|
|
21
|
-
Nested parallel regions flatten with `stateToAttr` from `@aeon-ui/core`:
|
|
22
|
-
|
|
23
|
-
```ts
|
|
24
|
-
import { stateToAttr } from '@aeon-ui/core'
|
|
25
|
-
// e.g. "interaction:dirty validation:invalid submission:idle"
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
Panda recipes and `globalCss` in `@aeon-ui/panda` key off these attributes — not ad hoc class names in product code.
|
|
29
|
-
|
|
30
|
-
---
|
|
31
|
-
|
|
32
|
-
## 1. Async data regions
|
|
33
|
-
|
|
34
|
-
### What traditional UI skips
|
|
35
|
-
|
|
36
|
-
| Condition | Typical mistake |
|
|
37
|
-
|-----------|-----------------|
|
|
38
|
-
| **Idle** (never fetched) | Looks like “empty” |
|
|
39
|
-
| **Loading** | Spinner with no named state |
|
|
40
|
-
| **Success** | Only happy path styled |
|
|
41
|
-
| **Failure** | Toast only, easy to miss |
|
|
42
|
-
| **Empty** (success, zero results) | Same UI as idle |
|
|
43
|
-
| **Stale** (success + background refresh) | Silent flicker |
|
|
44
|
-
|
|
45
|
-
### Aeon model
|
|
46
|
-
|
|
47
|
-
Machine: `createAsyncMachine()` in `@aeon-ui/primitives`
|
|
48
|
-
States: `idle` · `loading` · `success` · `failure` · `empty`
|
|
49
|
-
Context flag: `stale` on success → readout uses `data-aeon-state="success stale"`
|
|
50
|
-
|
|
51
|
-
Constants: `ASYNC_LIFECYCLE_STATES`, `isEmptyAsyncData()`
|
|
52
|
-
|
|
53
|
-
### UI kit (totality pattern)
|
|
54
|
-
|
|
55
|
-
```tsx
|
|
56
|
-
import { Async, Button } from '@aeon-ui/ui'
|
|
57
|
-
|
|
58
|
-
<Async.Root>
|
|
59
|
-
<Async.Track /> {/* every lifecycle state visible on the rail */}
|
|
60
|
-
<Async.Readout>…</Async.Readout>
|
|
61
|
-
<Async.Actions>
|
|
62
|
-
<Button.Root>Fetch</Button.Root>
|
|
63
|
-
</Async.Actions>
|
|
64
|
-
</Async.Root>
|
|
65
|
-
```
|
|
66
|
-
|
|
67
|
-
Headless: `@aeon-ui/react` → `Async`, `useAsyncContext`
|
|
68
|
-
Anatomy: `asyncAnatomy` (`track`, `segment`, `readout`, `actions`, …)
|
|
69
|
-
Styles: `aeonAsync` slot recipe
|
|
70
|
-
|
|
71
|
-
**Rule:** If the chart lists five states, the track lists five segments — one active, none implicit.
|
|
72
|
-
|
|
73
|
-
---
|
|
74
|
-
|
|
75
|
-
## 2. Action button lifecycle
|
|
76
|
-
|
|
77
|
-
### What traditional UI skips
|
|
78
|
-
|
|
79
|
-
`disabled` is used for: in-flight submit, success, permission denied, validation blocked, and “busy”.
|
|
80
|
-
|
|
81
|
-
Missing named states: **pending**, **success**, **failure**, distinct from **disabled**.
|
|
82
|
-
|
|
83
|
-
### Aeon model
|
|
84
|
-
|
|
85
|
-
Machine: `buttonLifecycleMachine`
|
|
86
|
-
States: `idle` · `pending` · `success` · `failure` · `disabled`
|
|
87
|
-
|
|
88
|
-
### Component API
|
|
89
|
-
|
|
90
|
-
```tsx
|
|
91
|
-
<Button.Root status="pending" aria-busy>
|
|
92
|
-
Submitting…
|
|
93
|
-
</Button.Root>
|
|
94
|
-
```
|
|
95
|
-
|
|
96
|
-
`status` maps to `data-aeon-state`. Global styles adjust cursor/opacity/border per state.
|
|
97
|
-
|
|
98
|
-
For full chart-driven flows, run `buttonLifecycleMachine` with `useAeonMachine` and drive `status` from `snapshot.value` (see playground **Button lifecycle**).
|
|
99
|
-
|
|
100
|
-
---
|
|
101
|
-
|
|
102
|
-
## 3. Form field (orthogonal regions)
|
|
103
|
-
|
|
104
|
-
### What traditional UI skips
|
|
105
|
-
|
|
106
|
-
Interaction, validation, and submission are merged into one visual “error state.”
|
|
107
|
-
|
|
108
|
-
### Aeon model
|
|
109
|
-
|
|
110
|
-
Machine: `fieldMachine` (parallel)
|
|
111
|
-
|
|
112
|
-
| Region | States |
|
|
113
|
-
|--------|--------|
|
|
114
|
-
| `interaction` | `pristine` · `dirty` |
|
|
115
|
-
| `validation` | `valid` · `invalid` |
|
|
116
|
-
| `submission` | `idle` · `pending` |
|
|
117
|
-
|
|
118
|
-
Root: `data-aeon-state="interaction:dirty validation:invalid submission:idle"`
|
|
119
|
-
|
|
120
|
-
### Component API
|
|
121
|
-
|
|
122
|
-
```tsx
|
|
123
|
-
import { Field } from '@aeon-ui/ui'
|
|
124
|
-
|
|
125
|
-
<Field.Root>
|
|
126
|
-
<Field.Label htmlFor="email">Email</Field.Label>
|
|
127
|
-
<Field.Control id="email" validate={(v) => isValidEmail(v)} />
|
|
128
|
-
<Field.Message>Enter a valid email.</Field.Message>
|
|
129
|
-
<Field.Hint>Shown when pristine.</Field.Hint>
|
|
130
|
-
</Field.Root>
|
|
131
|
-
```
|
|
132
|
-
|
|
133
|
-
`Field.Control` sends `INPUT`, `BLUR`, and `VALIDATE` events.
|
|
134
|
-
`Field.Message` renders only when `validation:invalid`.
|
|
135
|
-
Pending submission dims the control via `[data-aeon-state*="submission:pending"]` in global CSS.
|
|
136
|
-
|
|
137
|
-
---
|
|
138
|
-
|
|
139
|
-
## 4. Primitives already chart-backed
|
|
140
|
-
|
|
141
|
-
| Primitive | Stable states (high level) |
|
|
142
|
-
|-----------|----------------------------|
|
|
143
|
-
| **Dialog** | `closed` · `open` |
|
|
144
|
-
| **Toggle / Switch** | `checked` / `unchecked` + interaction `idle` · `pressed` |
|
|
145
|
-
| **Tabs** | single active value |
|
|
146
|
-
| **Accordion** | per-item open/closed |
|
|
147
|
-
|
|
148
|
-
Future optional substates (documented, not all implemented): dialog `entering` / `exiting`, accordion `expanding` / `collapsing`.
|
|
149
|
-
|
|
150
|
-
---
|
|
151
|
-
|
|
152
|
-
## 5. Scroll regions
|
|
153
|
-
|
|
154
|
-
### What traditional UI skips
|
|
155
|
-
|
|
156
|
-
Scroll position is implicit. Overflow axis (vertical, horizontal, or both) and whether the user is at the start, middle, or end of each axis are rarely reflected in the DOM — so edge fades, scrollbar styling, and assistive hints stay out of sync.
|
|
157
|
-
|
|
158
|
-
### Aeon model
|
|
159
|
-
|
|
160
|
-
No XState machine — `getScrollSnapshot()` in `@aeon-ui/core` derives state from the viewport element on scroll and resize.
|
|
161
|
-
|
|
162
|
-
| `data-aeon-state` token | Meaning |
|
|
163
|
-
|-------------------------|---------|
|
|
164
|
-
| `idle` | No overflow on either axis |
|
|
165
|
-
| `overflow-y` · `overflow-x` · `overflow-both` | Which axes scroll |
|
|
166
|
-
| `at-start-y` · `between-y` · `at-end-y` | Vertical edge position |
|
|
167
|
-
| `at-start-x` · `between-x` · `at-end-x` | Horizontal edge position |
|
|
168
|
-
|
|
169
|
-
### Component API
|
|
170
|
-
|
|
171
|
-
```tsx
|
|
172
|
-
import { Scroll } from '@aeon-ui/ui'
|
|
173
|
-
|
|
174
|
-
<Scroll.Root axis="both" maxH="md">
|
|
175
|
-
<Scroll.Viewport>
|
|
176
|
-
<Scroll.Content>{children}</Scroll.Content>
|
|
177
|
-
</Scroll.Viewport>
|
|
178
|
-
<Scroll.StateReadout />
|
|
179
|
-
</Scroll.Root>
|
|
180
|
-
```
|
|
181
|
-
|
|
182
|
-
Import `@aeon-ui/panda/scrollbars.css` after `theme-runtime.css` for WebKit + Firefox scrollbar styling on `html`, `[data-aeon-scroll]`, and `.code-example`.
|
|
183
|
-
|
|
184
|
-
---
|
|
185
|
-
|
|
186
|
-
## 6. States to model in product code
|
|
187
|
-
|
|
188
|
-
Aeon does not ship every domain machine, but the same rules apply:
|
|
189
|
-
|
|
190
|
-
| Concern | Suggested states |
|
|
191
|
-
|---------|------------------|
|
|
192
|
-
| **Offline** | `online` · `offline` · `reconnecting` |
|
|
193
|
-
| **Permissions** | `allowed` · `denied` (not `disabled`) |
|
|
194
|
-
| **Optimistic UI** | `optimistic` · `confirmed` · `rolledBack` |
|
|
195
|
-
| **Rate limit** | `ok` · `throttled` |
|
|
196
|
-
| **Selection** | add `indeterminate` on checkboxes |
|
|
197
|
-
|
|
198
|
-
Use **orthogonal regions** when concerns are independent (Nguyen / Harel statecharts).
|
|
199
|
-
|
|
200
|
-
---
|
|
201
|
-
|
|
202
|
-
## 7. Styling checklist
|
|
203
|
-
|
|
204
|
-
Full ordered steps: **[docs/COMPONENT_CHECKLIST.md](./docs/COMPONENT_CHECKLIST.md)**.
|
|
205
|
-
|
|
206
|
-
1. Model the chart in `@aeon-ui/primitives` (or app-level XState).
|
|
207
|
-
2. Add anatomy in `@aeon-ui/core` if new scope.
|
|
208
|
-
3. Project snapshot in `@aeon-ui/react` with `partAttrs` / `stateToAttr`.
|
|
209
|
-
4. Add slot recipe or `globalCss` keyed on `data-aeon-state` in `@aeon-ui/panda`.
|
|
210
|
-
5. Export styled compound from `@aeon-ui/ui`.
|
|
211
|
-
6. Demo the **full rail** — track + readout + actions.
|
|
212
|
-
|
|
213
|
-
---
|
|
214
|
-
|
|
215
|
-
## 8. Play-surface layout (spatial, not XState)
|
|
216
|
-
|
|
217
|
-
Games and spatial UIs need **desktop vs mobile composition** without breaking pointer math. Aeon models this separately from behavior:
|
|
218
|
-
|
|
219
|
-
- **Layout mode** — `compact` | `wide` on `data-aeon-layout-mode`
|
|
220
|
-
- **Composition** — `split` | `stack` | `overlay` on `data-aeon-layout-composition`
|
|
221
|
-
- **Normalized coordinates** — `normFromClient` / `clientFromNorm` in `@aeon-ui/core` (0–100 plane per measured region)
|
|
222
|
-
|
|
223
|
-
Full guide: **[docs/LAYOUT_COORDINATES.md](./docs/LAYOUT_COORDINATES.md)** · Anatomy: `playSurfaceAnatomy` · Hook: `useLayoutMode`.
|
|
224
|
-
|
|
225
|
-
---
|
|
226
|
-
|
|
227
|
-
## 9. Package map
|
|
228
|
-
|
|
229
|
-
| Package | Role |
|
|
230
|
-
|---------|------|
|
|
231
|
-
| `@aeon-ui/primitives` | Machines: `async`, `buttonLifecycle`, `field`, … |
|
|
232
|
-
| `@aeon-ui/core` | `asyncAnatomy`, `fieldAnatomy`, `scrollAnatomy`, `getScrollSnapshot` |
|
|
233
|
-
| `@aeon-ui/react` | `Async.*`, `Field.*`, `Scroll.*`, `Button` + `status` |
|
|
234
|
-
| `@aeon-ui/panda` | `aeonAsync`, `aeonField`, `aeonScroll`, `scrollbars.css` |
|
|
235
|
-
| `@aeon-ui/ui` | Styled exports |
|
|
236
|
-
|
|
237
|
-
---
|
|
238
|
-
|
|
239
|
-
## References
|
|
240
|
-
|
|
241
|
-
- [PHILOSOPHY.md](./PHILOSOPHY.md) — north star and tenets
|
|
242
|
-
- [Thanh Nguyen (2020) — Statecharts for modern web application state management](https://www.theseus.fi/bitstream/handle/10024/334118/Thanh_Nguyen.pdf?sequence=2&isAllowed=y)
|
|
243
|
-
- Live examples: `apps/demo` playground (**Async region**, **Button lifecycle**, **Field regions**, **Scroll regions**)
|
package/apps/demo/index.html
DELETED
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
<!doctype html>
|
|
2
|
-
<html lang="en">
|
|
3
|
-
<head>
|
|
4
|
-
<meta charset="UTF-8" />
|
|
5
|
-
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
|
-
<title>Aeon UI — Future-proof UI infrastructure</title>
|
|
7
|
-
<!-- OG_META -->
|
|
8
|
-
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
|
9
|
-
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
|
10
|
-
<link
|
|
11
|
-
href="https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@400;500&family=Instrument+Sans:wght@400;500;600;700&family=Syne:wght@600;700;800&display=swap"
|
|
12
|
-
rel="stylesheet"
|
|
13
|
-
/>
|
|
14
|
-
</head>
|
|
15
|
-
<body>
|
|
16
|
-
<div id="root"></div>
|
|
17
|
-
<script>
|
|
18
|
-
(function () {
|
|
19
|
-
var t = localStorage.getItem('aeon-theme') || 'default';
|
|
20
|
-
var m = localStorage.getItem('aeon-mode');
|
|
21
|
-
if (m !== 'light' && m !== 'dark') {
|
|
22
|
-
m = window.matchMedia('(prefers-color-scheme: light)').matches ? 'light' : 'dark';
|
|
23
|
-
}
|
|
24
|
-
document.documentElement.dataset.aeonTheme = t;
|
|
25
|
-
document.documentElement.dataset.aeonMode = m;
|
|
26
|
-
document.documentElement.style.colorScheme = m;
|
|
27
|
-
})();
|
|
28
|
-
</script>
|
|
29
|
-
<script type="module" src="/src/main.tsx"></script>
|
|
30
|
-
</body>
|
|
31
|
-
</html>
|
package/apps/demo/og.config.mjs
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
/** Shared OG / canonical URLs — override in CI with VITE_SITE_ORIGIN. */
|
|
2
|
-
export const siteOrigin = (process.env.VITE_SITE_ORIGIN ?? 'https://aeon-ui.com').replace(
|
|
3
|
-
/\/$/,
|
|
4
|
-
'',
|
|
5
|
-
)
|
|
6
|
-
|
|
7
|
-
/** Published npm package — keep in sync with apps/demo/src/site.ts */
|
|
8
|
-
export const npmPackage = 'aeon-ui-engine'
|
|
9
|
-
export const npmInstallCommand = `npm install ${npmPackage}`
|
|
10
|
-
|
|
11
|
-
export const og = {
|
|
12
|
-
title: 'Aeon UI — Future-proof UI infrastructure',
|
|
13
|
-
description:
|
|
14
|
-
'Statechart-driven primitives and a styled layer you control — dependable behavior today, room to grow tomorrow. Built to last.',
|
|
15
|
-
siteName: 'Aeon UI',
|
|
16
|
-
imagePath: '/og-aeon-ui-engine.png',
|
|
17
|
-
imageAlt: `Aeon UI — Future-proof UI infrastructure (${npmInstallCommand})`,
|
|
18
|
-
themeColor: '#0c0e12',
|
|
19
|
-
npmInstallCommand,
|
|
20
|
-
}
|