@aeon-ui/core
v0.1.0
Published
Anatomy tokens, data-aeon attributes, and machine helpers for Aeon UI
Downloads
17
Maintainers
Readme
@aeon-ui/core
DOM contract and anatomy — no React, no XState runtime in components.
Agents: read AGENTS.md and docs/FILE_MAP.md.
Install
pnpm add @aeon-ui/coreUsually consumed via @aeon-ui/react or @aeon-ui/ui.
Exports
| Module | Purpose |
|--------|---------|
| philosophy | UI_IS_FUNCTION_OF_STATE, AEON_PRINCIPLE |
| anatomy | buttonAnatomy, asyncAnatomy, fieldAnatomy, … |
| attrs | partAttrs, scopeAttrs, partOnlyAttrs, stateToAttr |
| machine | createAeonMachine — XState setup helper |
| scroll | getScrollSnapshot(element) |
| layout | Normalized coords, ResponsiveLayoutSpec, layoutModeAttrs |
| types | Shared types |
Play-surface layout (coordinates)
import {
playSurfaceAnatomy,
normFromClient,
layoutModeAttrs,
type ResponsiveLayoutSpec,
} from '@aeon-ui/core'See docs/LAYOUT_COORDINATES.md.
Anatomy
import { asyncAnatomy, partAttrs } from '@aeon-ui/core'
partAttrs(asyncAnatomy.scope, asyncAnatomy.readout, {
state: 'loading',
})
// → data-aeon-scope="async" data-aeon-part="readout" data-aeon-state="loading"Parallel regions
import { stateToAttr } from '@aeon-ui/core'
stateToAttr({ interaction: 'dirty', validation: 'invalid', submission: 'idle' })
// → "interaction:dirty validation:invalid submission:idle"Adding a scope
- Add
myAnatomy = anatomy('my', ['root', ...] as const)insrc/anatomy.ts. - Use in React via
partAttrs. - Follow docs/COMPONENT_CHECKLIST.md.
Related
- STATES.md — attribute contract
- packages/primitives/README.md — machines
