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