aeon-ui-engine 1.0.2 → 1.0.3
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 +13 -0
- package/CONSUMER.md +86 -0
- package/INTEGRATION.md +2 -0
- package/README.md +15 -4
- package/package.json +17 -1
- package/packages/core/dist/index.d.ts +257 -0
- package/packages/core/dist/index.js +378 -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/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/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-SZV6KGXN.js +49 -0
- package/packages/primitives/dist/chunk-WVICCOQH.js +56 -0
- package/packages/primitives/dist/chunk-ZMGRX64G.js +74 -0
- package/packages/primitives/dist/index.d.ts +11 -0
- package/packages/primitives/dist/index.js +60 -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/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/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/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/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/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/vitest +21 -0
- package/packages/primitives/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -0
- package/packages/react/dist/index.d.ts +564 -0
- package/packages/react/dist/index.js +3461 -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/vitest +21 -0
- package/packages/react/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -0
- 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/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/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/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/ui/dist/index.d.ts +200 -0
- package/packages/ui/dist/index.js +429 -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/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/scripts/vite-aliases.mjs +125 -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/pnpm-workspace.yaml +0 -3
- package/vercel.json +0 -12
package/docs/ARCHITECTURE.md
DELETED
|
@@ -1,125 +0,0 @@
|
|
|
1
|
-
# Architecture
|
|
2
|
-
|
|
3
|
-
Monorepo for **Aeon UI** — statechart-first headless components with Panda CSS styling.
|
|
4
|
-
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Workspace layout
|
|
8
|
-
|
|
9
|
-
```
|
|
10
|
-
aeon-ui/
|
|
11
|
-
├── AGENTS.md # LLM entry (read first)
|
|
12
|
-
├── docs/ # Agent-oriented deep docs
|
|
13
|
-
├── apps/demo/ # @aeon-ui/demo — site + playgrounds
|
|
14
|
-
├── packages/
|
|
15
|
-
│ ├── core/ # Anatomy, attrs, scroll snapshot, philosophy
|
|
16
|
-
│ ├── primitives/ # XState machines (no DOM)
|
|
17
|
-
│ ├── react/ # Headless React compounds
|
|
18
|
-
│ ├── panda/ # Tokens, recipes, codegen (private)
|
|
19
|
-
│ ├── ui/ # Styled layer
|
|
20
|
-
│ ├── vue|solid|svelte/ # Adapter v0.1 (Switch)
|
|
21
|
-
│ ├── signal|geometry|surface|scene|react-scene/ # Scene plane
|
|
22
|
-
│ └── site/ # OG meta helpers
|
|
23
|
-
├── pnpm-workspace.yaml
|
|
24
|
-
└── package.json # codegen, build, dev scripts
|
|
25
|
-
```
|
|
26
|
-
|
|
27
|
-
---
|
|
28
|
-
|
|
29
|
-
## Control plane vs scene plane
|
|
30
|
-
|
|
31
|
-
| Plane | Packages | Role |
|
|
32
|
-
|-------|----------|------|
|
|
33
|
-
| **Control** | core, primitives, react, panda, ui | Forms, overlays, async, buttons — **this doc focuses here** |
|
|
34
|
-
| **Scene** | signal, geometry, surface, scene, react-scene | Audio/visual materials, 3D/CSS scene — see [SCENE.md](../SCENE.md) |
|
|
35
|
-
|
|
36
|
-
Same `data-aeon-scope` pattern on scene; does not change control contracts.
|
|
37
|
-
|
|
38
|
-
---
|
|
39
|
-
|
|
40
|
-
## Three layers (dependency direction)
|
|
41
|
-
|
|
42
|
-
```
|
|
43
|
-
┌─────────────────────────────────────────────────────────┐
|
|
44
|
-
│ @aeon-ui/ui styled compounds + cn(recipes) │
|
|
45
|
-
└───────────────────────────┬─────────────────────────────┘
|
|
46
|
-
│ imports
|
|
47
|
-
┌───────────────────────────▼─────────────────────────────┐
|
|
48
|
-
│ @aeon-ui/react snapshot → DOM, a11y, context │
|
|
49
|
-
└───────────────────────────┬─────────────────────────────┘
|
|
50
|
-
│
|
|
51
|
-
┌───────────────────┼───────────────────┐
|
|
52
|
-
▼ ▼ ▼
|
|
53
|
-
┌───────────────┐ ┌───────────────┐ ┌───────────────┐
|
|
54
|
-
│ @aeon-ui/ │ │ @aeon-ui/ │ │ @aeon-ui/ │
|
|
55
|
-
│ primitives │ │ core │ │ panda │
|
|
56
|
-
│ (XState) │ │ (anatomy) │ │ (CSS/recipes) │
|
|
57
|
-
└───────────────┘ └───────────────┘ └───────────────┘
|
|
58
|
-
```
|
|
59
|
-
|
|
60
|
-
- **primitives** depends on XState only (machines).
|
|
61
|
-
- **core** has no React/XState — shared DOM contract.
|
|
62
|
-
- **react** depends on core + primitives.
|
|
63
|
-
- **panda** scans `react`, `ui`, `apps/demo` for classes; generates `styled-system/`.
|
|
64
|
-
- **ui** depends on react + panda recipes.
|
|
65
|
-
|
|
66
|
-
---
|
|
67
|
-
|
|
68
|
-
## Data flow (one render cycle)
|
|
69
|
-
|
|
70
|
-
1. User event → `send({ type: '...' })` or DOM handler (Select) or scroll listener (Scroll).
|
|
71
|
-
2. Machine / snapshot updates (or prop change for Button `status`).
|
|
72
|
-
3. `partAttrs(scope, part, { state })` → `data-aeon-*` on element.
|
|
73
|
-
4. Panda recipe conditions match `data-aeon-state` → computed class names.
|
|
74
|
-
5. Styled wrapper merges `cn(recipe(), className)`.
|
|
75
|
-
|
|
76
|
-
---
|
|
77
|
-
|
|
78
|
-
## Build pipeline
|
|
79
|
-
|
|
80
|
-
| Step | Command | Output |
|
|
81
|
-
|------|---------|--------|
|
|
82
|
-
| Panda codegen | `pnpm codegen` | `packages/panda/styled-system/`, theme CSS |
|
|
83
|
-
| Package build | `pnpm build` | `dist/` per package (tsup ESM + `.d.ts`) |
|
|
84
|
-
| Demo | `pnpm dev` | Vite dev server |
|
|
85
|
-
|
|
86
|
-
**Rule:** Always run `pnpm codegen` before `pnpm build` if recipes/tokens changed (root `build` script does this).
|
|
87
|
-
|
|
88
|
-
Libraries use **tsup** from each package's `src/index.ts`.
|
|
89
|
-
Primitives also builds `src/machines/*.ts` as subpath exports.
|
|
90
|
-
|
|
91
|
-
---
|
|
92
|
-
|
|
93
|
-
## TypeScript
|
|
94
|
-
|
|
95
|
-
- Base: `tsconfig.base.json`
|
|
96
|
-
- **verbatimModuleSyntax** — use `.js` in import paths inside TS sources.
|
|
97
|
-
- Project references per package — extend base in each `tsconfig.json`.
|
|
98
|
-
|
|
99
|
-
---
|
|
100
|
-
|
|
101
|
-
## Public vs private packages
|
|
102
|
-
|
|
103
|
-
| Package | npm publish | Notes |
|
|
104
|
-
|---------|-------------|-------|
|
|
105
|
-
| core, primitives, react, ui | Yes (Changesets) | |
|
|
106
|
-
| vue, solid, svelte | Yes | v0.1 scope |
|
|
107
|
-
| panda | **Private** | Consumed via ui CSS + workspace |
|
|
108
|
-
| demo, site | Private | |
|
|
109
|
-
|
|
110
|
-
See [PUBLISHING.md](../PUBLISHING.md).
|
|
111
|
-
|
|
112
|
-
---
|
|
113
|
-
|
|
114
|
-
## Extension points
|
|
115
|
-
|
|
116
|
-
| Need | Location |
|
|
117
|
-
|------|----------|
|
|
118
|
-
| New machine | `packages/primitives/src/machines/` |
|
|
119
|
-
| New anatomy scope | `packages/core/src/anatomy.ts` |
|
|
120
|
-
| New headless component | `packages/react/src/<name>/` |
|
|
121
|
-
| New recipe | `packages/panda/src/recipes/` + register in `panda.config.ts` |
|
|
122
|
-
| New styled export | `packages/ui/src/<name>.tsx` + `index.ts` |
|
|
123
|
-
| App-level machine | Consumer app + `useAeonMachine` |
|
|
124
|
-
|
|
125
|
-
Step-by-step: [COMPONENT_CHECKLIST.md](./COMPONENT_CHECKLIST.md).
|
|
@@ -1,103 +0,0 @@
|
|
|
1
|
-
# Component checklist (agents)
|
|
2
|
-
|
|
3
|
-
Complete **in order** when adding a new component or promoting Select-style `useState` to a machine.
|
|
4
|
-
|
|
5
|
-
Copy this checklist into your PR description and check boxes.
|
|
6
|
-
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
## 0. Design (before code)
|
|
10
|
-
|
|
11
|
-
- [ ] List every **stable state** the UI must express (totality).
|
|
12
|
-
- [ ] List **events** and transitions (diagram or bullet list).
|
|
13
|
-
- [ ] Decide: **XState** vs **derived DOM state** (Scroll pattern) vs **controlled prop** (Button `status`).
|
|
14
|
-
- [ ] Choose **scope** string (e.g. `'rating'`) — lowercase, stable forever.
|
|
15
|
-
- [ ] List **anatomy parts** (compound API surface).
|
|
16
|
-
|
|
17
|
-
---
|
|
18
|
-
|
|
19
|
-
## 1. Machine (`@aeon-ui/primitives`)
|
|
20
|
-
|
|
21
|
-
Skip only for Scroll-style derived state or intentional prop-only Button pattern.
|
|
22
|
-
|
|
23
|
-
- [ ] Create `packages/primitives/src/machines/<name>.ts`
|
|
24
|
-
- [ ] Export from `packages/primitives/src/index.ts`
|
|
25
|
-
- [ ] Export constants for state names if reused (like `ASYNC_LIFECYCLE_STATES`)
|
|
26
|
-
- [ ] Document events in file header comment
|
|
27
|
-
|
|
28
|
-
---
|
|
29
|
-
|
|
30
|
-
## 2. Anatomy (`@aeon-ui/core`)
|
|
31
|
-
|
|
32
|
-
- [ ] Add `{name}Anatomy` in `packages/core/src/anatomy.ts`
|
|
33
|
-
- [ ] Parts match compound components 1:1
|
|
34
|
-
- [ ] Use `partAttrs` / `stateToAttr` in React — do not hand-roll attribute names
|
|
35
|
-
|
|
36
|
-
---
|
|
37
|
-
|
|
38
|
-
## 3. Headless React (`@aeon-ui/react`)
|
|
39
|
-
|
|
40
|
-
- [ ] Folder: `packages/react/src/<name>/index.tsx` (split files if large)
|
|
41
|
-
- [ ] `Component.Root` owns machine or state; context for children
|
|
42
|
-
- [ ] Throw clear error if parts used outside Root (match existing components)
|
|
43
|
-
- [ ] `mergeProps(partAttrs(...), consumerProps)` on interactive nodes
|
|
44
|
-
- [ ] ARIA roles/attributes per [ACCESSIBILITY.md](../ACCESSIBILITY.md)
|
|
45
|
-
- [ ] Export from `packages/react/src/index.ts`
|
|
46
|
-
|
|
47
|
-
---
|
|
48
|
-
|
|
49
|
-
## 4. Panda (`@aeon-ui/panda`)
|
|
50
|
-
|
|
51
|
-
- [ ] Recipe: `packages/panda/src/recipes/<name>.ts`
|
|
52
|
-
- [ ] Slot names = anatomy part keys
|
|
53
|
-
- [ ] Style via `data-aeon-state` / extended conditions in `panda.config.ts`
|
|
54
|
-
- [ ] Register in `packages/panda/src/recipes/index.ts` and `panda.config.ts`
|
|
55
|
-
- [ ] Run `pnpm codegen`
|
|
56
|
-
|
|
57
|
-
---
|
|
58
|
-
|
|
59
|
-
## 5. Styled UI (`@aeon-ui/ui`)
|
|
60
|
-
|
|
61
|
-
- [ ] File: `packages/ui/src/<name>.tsx`
|
|
62
|
-
- [ ] Wrap headless parts with `cn(aeonName({ ... }), className)`
|
|
63
|
-
- [ ] Export compound: `export const Name = { Root, ... }`
|
|
64
|
-
- [ ] Export from `packages/ui/src/index.ts`
|
|
65
|
-
|
|
66
|
-
---
|
|
67
|
-
|
|
68
|
-
## 6. Demo (`apps/demo`)
|
|
69
|
-
|
|
70
|
-
- [ ] Playground section showing **all stable states** (rail/readout pattern when applicable)
|
|
71
|
-
- [ ] Add to main `App.tsx` or existing section pattern
|
|
72
|
-
- [ ] If machine-backed: add Mermaid to `apps/demo/src/aeonDiagrams.ts`
|
|
73
|
-
|
|
74
|
-
---
|
|
75
|
-
|
|
76
|
-
## 7. Documentation
|
|
77
|
-
|
|
78
|
-
- [ ] [COMPONENTS.md](../COMPONENTS.md) row
|
|
79
|
-
- [ ] [docs/MACHINES.md](./MACHINES.md) row
|
|
80
|
-
- [ ] [STATES.md](../STATES.md) section if new user-facing state concept
|
|
81
|
-
- [ ] Package README if new public API surface
|
|
82
|
-
|
|
83
|
-
---
|
|
84
|
-
|
|
85
|
-
## 8. Verify
|
|
86
|
-
|
|
87
|
-
```bash
|
|
88
|
-
pnpm codegen
|
|
89
|
-
pnpm typecheck
|
|
90
|
-
pnpm build
|
|
91
|
-
```
|
|
92
|
-
|
|
93
|
-
Manual: keyboard nav, focus visible, open/close, screen reader spot-check.
|
|
94
|
-
|
|
95
|
-
---
|
|
96
|
-
|
|
97
|
-
## Anti-patterns (fail review)
|
|
98
|
-
|
|
99
|
-
- Machine in primitives but `useState` for same concern in React
|
|
100
|
-
- Missing `data-aeon-state` on styled surfaces
|
|
101
|
-
- Recipe class names in product TSX instead of recipes
|
|
102
|
-
- Demo shows only happy path (violates totality)
|
|
103
|
-
- Orthogonal concerns merged into one boolean prop
|
package/docs/FILE_MAP.md
DELETED
|
@@ -1,122 +0,0 @@
|
|
|
1
|
-
# File map
|
|
2
|
-
|
|
3
|
-
Quick path lookup for agents. Paths relative to repo root `/Users/brandoncryderman/AeonUI/`.
|
|
4
|
-
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Entry points
|
|
8
|
-
|
|
9
|
-
| File | Role |
|
|
10
|
-
|------|------|
|
|
11
|
-
| `AGENTS.md` | Agent instructions |
|
|
12
|
-
| `package.json` | `codegen`, `build`, `dev` |
|
|
13
|
-
| `pnpm-workspace.yaml` | `packages/*`, `apps/*` |
|
|
14
|
-
| `apps/demo/src/main.tsx` | Demo bootstrap |
|
|
15
|
-
| `apps/demo/src/App.tsx` | Demo sections |
|
|
16
|
-
|
|
17
|
-
---
|
|
18
|
-
|
|
19
|
-
## `@aeon-ui/core`
|
|
20
|
-
|
|
21
|
-
| File | Exports / role |
|
|
22
|
-
|------|----------------|
|
|
23
|
-
| `packages/core/src/index.ts` | Public API |
|
|
24
|
-
| `packages/core/src/philosophy.ts` | `UI_IS_FUNCTION_OF_STATE`, `AEON_PRINCIPLE` |
|
|
25
|
-
| `packages/core/src/anatomy.ts` | All `*Anatomy` |
|
|
26
|
-
| `packages/core/src/attrs.ts` | `partAttrs`, `scopeAttrs`, `stateToAttr` |
|
|
27
|
-
| `packages/core/src/machine.ts` | `createAeonMachine` (XState setup re-export) |
|
|
28
|
-
| `packages/core/src/scroll.ts` | `getScrollSnapshot` |
|
|
29
|
-
| `packages/core/src/types.ts` | Shared types |
|
|
30
|
-
|
|
31
|
-
---
|
|
32
|
-
|
|
33
|
-
## `@aeon-ui/primitives`
|
|
34
|
-
|
|
35
|
-
| File | Role |
|
|
36
|
-
|------|------|
|
|
37
|
-
| `packages/primitives/src/index.ts` | Machine exports |
|
|
38
|
-
| `packages/primitives/src/machines/async.ts` | Async lifecycle |
|
|
39
|
-
| `packages/primitives/src/machines/button.ts` | Button lifecycle |
|
|
40
|
-
| `packages/primitives/src/machines/field.ts` | Parallel field regions |
|
|
41
|
-
| `packages/primitives/src/machines/dialog.ts` | Modal open/closed |
|
|
42
|
-
| `packages/primitives/src/machines/toggle.ts` | Switch, checkbox |
|
|
43
|
-
| `packages/primitives/src/machines/tabs.ts` | Tabs |
|
|
44
|
-
| `packages/primitives/src/machines/accordion.ts` | Accordion |
|
|
45
|
-
| `packages/primitives/src/machines/popover.ts` | Menu, popover |
|
|
46
|
-
| `packages/primitives/src/machines/toast.ts` | Toast item |
|
|
47
|
-
|
|
48
|
-
---
|
|
49
|
-
|
|
50
|
-
## `@aeon-ui/react`
|
|
51
|
-
|
|
52
|
-
| Directory | Component |
|
|
53
|
-
|-----------|-----------|
|
|
54
|
-
| `packages/react/src/async/` | Async (context, track, readout, actions) |
|
|
55
|
-
| `packages/react/src/button/` | Button (prop `status`) |
|
|
56
|
-
| `packages/react/src/field/` | Field |
|
|
57
|
-
| `packages/react/src/scroll/` | Scroll + `use-scroll-state.ts` |
|
|
58
|
-
| `packages/react/src/dialog/` | Dialog |
|
|
59
|
-
| `packages/react/src/switch/` | Switch |
|
|
60
|
-
| `packages/react/src/checkbox/` | Checkbox |
|
|
61
|
-
| `packages/react/src/tabs/` | Tabs |
|
|
62
|
-
| `packages/react/src/accordion/` | Accordion |
|
|
63
|
-
| `packages/react/src/select/` | Select (useState) |
|
|
64
|
-
| `packages/react/src/combobox/` | Combobox (useState) |
|
|
65
|
-
| `packages/react/src/menu/` | Menu |
|
|
66
|
-
| `packages/react/src/popover/` | Popover |
|
|
67
|
-
| `packages/react/src/tooltip/` | Tooltip (useState) |
|
|
68
|
-
| `packages/react/src/toast/` | Toast provider + items |
|
|
69
|
-
| `packages/react/src/hooks/use-aeon-machine.ts` | `useAeonMachine` |
|
|
70
|
-
| `packages/react/src/utils/merge-props.ts` | Prop merge helper |
|
|
71
|
-
|
|
72
|
-
---
|
|
73
|
-
|
|
74
|
-
## `@aeon-ui/panda`
|
|
75
|
-
|
|
76
|
-
| File | Role |
|
|
77
|
-
|------|------|
|
|
78
|
-
| `packages/panda/panda.config.ts` | Recipes, conditions, include paths |
|
|
79
|
-
| `packages/panda/src/recipes/index.ts` | Recipe barrel |
|
|
80
|
-
| `packages/panda/src/recipes/*.ts` | Per-component recipes |
|
|
81
|
-
| `packages/panda/src/theme/themes.config.ts` | Mood palettes |
|
|
82
|
-
| `packages/panda/styled-system/` | **Generated** — do not hand-edit |
|
|
83
|
-
| `packages/panda/styles.css` | Base CSS entry |
|
|
84
|
-
| `packages/panda/theme-runtime.css` | Generated theme vars |
|
|
85
|
-
|
|
86
|
-
---
|
|
87
|
-
|
|
88
|
-
## `@aeon-ui/ui`
|
|
89
|
-
|
|
90
|
-
| File | Styled wrapper |
|
|
91
|
-
|------|----------------|
|
|
92
|
-
| `packages/ui/src/button.tsx` | Button |
|
|
93
|
-
| `packages/ui/src/async.tsx` | Async |
|
|
94
|
-
| `packages/ui/src/field.tsx` | Field |
|
|
95
|
-
| `packages/ui/src/scroll.tsx` | Scroll |
|
|
96
|
-
| `packages/ui/src/dialog.tsx` | Dialog |
|
|
97
|
-
| … | One file per component |
|
|
98
|
-
| `packages/ui/src/index.ts` | Public exports |
|
|
99
|
-
| `packages/ui/src/cn.ts` | Class merge |
|
|
100
|
-
|
|
101
|
-
---
|
|
102
|
-
|
|
103
|
-
## Diagrams & docs
|
|
104
|
-
|
|
105
|
-
| File | Role |
|
|
106
|
-
|------|------|
|
|
107
|
-
| `apps/demo/src/aeonDiagrams.ts` | Mermaid sources |
|
|
108
|
-
| `apps/demo/src/components/DiagramsSection.tsx` | Diagrams UI |
|
|
109
|
-
| `STATES.md` | State catalog |
|
|
110
|
-
| `docs/MACHINES.md` | Machine truth table |
|
|
111
|
-
|
|
112
|
-
---
|
|
113
|
-
|
|
114
|
-
## Framework adapters
|
|
115
|
-
|
|
116
|
-
| Package | Reference impl |
|
|
117
|
-
|---------|----------------|
|
|
118
|
-
| `packages/vue/src/` | Switch |
|
|
119
|
-
| `packages/solid/src/` | Switch |
|
|
120
|
-
| `packages/svelte/src/` | Switch |
|
|
121
|
-
|
|
122
|
-
Porting guide: [FRAMEWORKS.md](../FRAMEWORKS.md).
|
package/docs/GLOSSARY.md
DELETED
|
@@ -1,125 +0,0 @@
|
|
|
1
|
-
# Glossary
|
|
2
|
-
|
|
3
|
-
Terms used across Aeon docs and code. Definitions are normative for this repo.
|
|
4
|
-
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Aeon principle / north star
|
|
8
|
-
|
|
9
|
-
**State is defined first. UI represents the totality of that definition.**
|
|
10
|
-
Short form: **UI = f(state)** where `state` is an explicit snapshot (usually from a statechart).
|
|
11
|
-
|
|
12
|
-
---
|
|
13
|
-
|
|
14
|
-
## Anatomy
|
|
15
|
-
|
|
16
|
-
Named **parts** of a compound component under a **scope**. Defined in `packages/core/src/anatomy.ts` via `anatomy(scope, parts)`.
|
|
17
|
-
Example: `asyncAnatomy` → `root`, `track`, `readout`, …
|
|
18
|
-
|
|
19
|
-
---
|
|
20
|
-
|
|
21
|
-
## Scope
|
|
22
|
-
|
|
23
|
-
Value of `data-aeon-scope` — component family (`button`, `async`, `field`). Must match anatomy `scope` string.
|
|
24
|
-
|
|
25
|
-
---
|
|
26
|
-
|
|
27
|
-
## Part
|
|
28
|
-
|
|
29
|
-
Value of `data-aeon-part` — which sub-node of the compound (`root`, `trigger`, `content`). Must match anatomy part key.
|
|
30
|
-
|
|
31
|
-
---
|
|
32
|
-
|
|
33
|
-
## Snapshot
|
|
34
|
-
|
|
35
|
-
Current value of an XState machine (and context). React headless reads `snapshot` from `useAeonMachine`.
|
|
36
|
-
|
|
37
|
-
---
|
|
38
|
-
|
|
39
|
-
## Totality
|
|
40
|
-
|
|
41
|
-
UI pattern where **every stable state** in the model is represented in the interface (e.g. five `Async.Track` segments for five async states). Opposite of showing only loading/success.
|
|
42
|
-
|
|
43
|
-
---
|
|
44
|
-
|
|
45
|
-
## Headless layer
|
|
46
|
-
|
|
47
|
-
`@aeon-ui/react` — behavior + DOM contract, no default Panda classes.
|
|
48
|
-
|
|
49
|
-
---
|
|
50
|
-
|
|
51
|
-
## Styled layer
|
|
52
|
-
|
|
53
|
-
`@aeon-ui/ui` — headless + `aeon*` Panda recipes applied via `cn()`.
|
|
54
|
-
|
|
55
|
-
---
|
|
56
|
-
|
|
57
|
-
## Slot recipe
|
|
58
|
-
|
|
59
|
-
Panda `defineSlotRecipe` — one style function per anatomy part (`aeonAsync().track`, …).
|
|
60
|
-
|
|
61
|
-
---
|
|
62
|
-
|
|
63
|
-
## `partAttrs`
|
|
64
|
-
|
|
65
|
-
Helper in `@aeon-ui/core` that sets `data-aeon-scope`, `data-aeon-part`, `data-aeon-state`, optional `data-disabled` / `data-focus`.
|
|
66
|
-
|
|
67
|
-
---
|
|
68
|
-
|
|
69
|
-
## `stateToAttr`
|
|
70
|
-
|
|
71
|
-
Flattens nested or parallel machine values into one `data-aeon-state` string (e.g. field regions).
|
|
72
|
-
|
|
73
|
-
---
|
|
74
|
-
|
|
75
|
-
## Orthogonal regions
|
|
76
|
-
|
|
77
|
-
Independent statechart regions inside one machine (field: interaction × validation × submission). Nguyen / Harel statecharts.
|
|
78
|
-
|
|
79
|
-
---
|
|
80
|
-
|
|
81
|
-
## Lifecycle (async)
|
|
82
|
-
|
|
83
|
-
States: `idle`, `loading`, `success`, `failure`, `empty` — plus optional `stale` on success.
|
|
84
|
-
|
|
85
|
-
---
|
|
86
|
-
|
|
87
|
-
## Lifecycle (button)
|
|
88
|
-
|
|
89
|
-
States: `idle`, `pending`, `success`, `failure`, `disabled` — exposed as Button `status` prop.
|
|
90
|
-
|
|
91
|
-
---
|
|
92
|
-
|
|
93
|
-
## `useAeonMachine`
|
|
94
|
-
|
|
95
|
-
Thin wrapper over `@xstate/react` `useMachine` — standard hook for primitives machines in React.
|
|
96
|
-
|
|
97
|
-
---
|
|
98
|
-
|
|
99
|
-
## Scene plane
|
|
100
|
-
|
|
101
|
-
Optional packages for visual/audio scenes (`@aeon-ui/scene`, …) — separate from form/control primitives.
|
|
102
|
-
|
|
103
|
-
---
|
|
104
|
-
|
|
105
|
-
## Codegen
|
|
106
|
-
|
|
107
|
-
`pnpm codegen` → Panda extracts classes and emits `styled-system/` and theme CSS. Required after recipe edits.
|
|
108
|
-
|
|
109
|
-
---
|
|
110
|
-
|
|
111
|
-
## Layout mode
|
|
112
|
-
|
|
113
|
-
`compact` or `wide` — which `ResponsiveLayoutSpec.modes` entry is active (usually from a max-width media query).
|
|
114
|
-
|
|
115
|
-
---
|
|
116
|
-
|
|
117
|
-
## Layout composition
|
|
118
|
-
|
|
119
|
-
`split`, `stack`, or `overlay` — how regions share the mat on screen. Mapped to CSS grid; pointer math uses measured rects + norm coords, not grid percentages.
|
|
120
|
-
|
|
121
|
-
---
|
|
122
|
-
|
|
123
|
-
## Normalized plane (norm coords)
|
|
124
|
-
|
|
125
|
-
0–100 coordinate system inside a region `DOMRect`. Stable across breakpoints when the region is measured after layout. See [LAYOUT_COORDINATES.md](./LAYOUT_COORDINATES.md).
|
package/docs/INDEX.md
DELETED
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
# Aeon UI documentation index
|
|
2
|
-
|
|
3
|
-
Use this map to pick the right doc. **Agents should start at [AGENTS.md](../AGENTS.md).**
|
|
4
|
-
|
|
5
|
-
## For coding agents (LLMs)
|
|
6
|
-
|
|
7
|
-
| Document | Use when |
|
|
8
|
-
|----------|----------|
|
|
9
|
-
| [AGENTS.md](../AGENTS.md) | **Start here** — rules, workflows, naming |
|
|
10
|
-
| [MACHINES.md](./MACHINES.md) | Machine vs prop vs `useState`; events |
|
|
11
|
-
| [ARCHITECTURE.md](./ARCHITECTURE.md) | Monorepo layout, layers, dependencies |
|
|
12
|
-
| [COMPONENT_CHECKLIST.md](./COMPONENT_CHECKLIST.md) | Add or change a component (ordered steps) |
|
|
13
|
-
| [FILE_MAP.md](./FILE_MAP.md) | Where to find every artifact |
|
|
14
|
-
| [GLOSSARY.md](./GLOSSARY.md) | Terms (anatomy, snapshot, totality, …) |
|
|
15
|
-
| [LAYOUT_COORDINATES.md](./LAYOUT_COORDINATES.md) | Normalized plane, split/stack/overlay, game layouts |
|
|
16
|
-
| [API_PATTERNS.md](./API_PATTERNS.md) | Copy-paste snippets by layer |
|
|
17
|
-
|
|
18
|
-
## Philosophy & contracts
|
|
19
|
-
|
|
20
|
-
| Document | Use when |
|
|
21
|
-
|----------|----------|
|
|
22
|
-
| [PHILOSOPHY.md](../PHILOSOPHY.md) | Why statecharts; north star |
|
|
23
|
-
| [STATES.md](../STATES.md) | `data-aeon-*`; async, button, field, scroll |
|
|
24
|
-
| [COMPONENTS.md](../COMPONENTS.md) | What ships vs planned |
|
|
25
|
-
|
|
26
|
-
## Integration & shipping
|
|
27
|
-
|
|
28
|
-
| Document | Use when |
|
|
29
|
-
|----------|----------|
|
|
30
|
-
| [INTEGRATION.md](../INTEGRATION.md) | Headless vs Panda vs `@aeon-ui/ui` |
|
|
31
|
-
| [MIGRATION_FROM_ARK.md](./MIGRATION_FROM_ARK.md) | Replace `@ark-ui/react` with `@aeon-ui/react` (Vite, Next.js) |
|
|
32
|
-
| [VITE_CONSUMER.md](./VITE_CONSUMER.md) | Vite aliases + local clone |
|
|
33
|
-
| [FRAMEWORKS.md](../FRAMEWORKS.md) | Vue / Solid / Svelte adapters |
|
|
34
|
-
| [ACCESSIBILITY.md](../ACCESSIBILITY.md) | Roles, focus, keyboard |
|
|
35
|
-
| [PUBLISHING.md](../PUBLISHING.md) | Changesets, npm release |
|
|
36
|
-
| [SCENE.md](../SCENE.md) | Scene plane (signal, geometry, surface) |
|
|
37
|
-
|
|
38
|
-
## Package READMEs
|
|
39
|
-
|
|
40
|
-
| Package | README |
|
|
41
|
-
|---------|--------|
|
|
42
|
-
| `@aeon-ui/core` | [packages/core/README.md](../packages/core/README.md) |
|
|
43
|
-
| `@aeon-ui/primitives` | [packages/primitives/README.md](../packages/primitives/README.md) |
|
|
44
|
-
| `@aeon-ui/react` | [packages/react/README.md](../packages/react/README.md) |
|
|
45
|
-
| `@aeon-ui/panda` | [packages/panda/README.md](../packages/panda/README.md) |
|
|
46
|
-
| `@aeon-ui/ui` | [packages/ui/README.md](../packages/ui/README.md) |
|
|
47
|
-
| Scene / adapters | `packages/signal`, `geometry`, `surface`, `scene`, `react-scene`, `vue`, `solid`, `svelte` |
|
|
48
|
-
|
|
49
|
-
## Live reference
|
|
50
|
-
|
|
51
|
-
- Demo app: `apps/demo` — run `pnpm dev`
|
|
52
|
-
- Diagrams: `apps/demo/src/aeonDiagrams.ts` (Mermaid ↔ machines)
|
|
53
|
-
- Ground truth config: `packages/panda/panda.config.ts`
|