ARIA-correct headless behavior infra — axes composition, roving tabindex, gesture/intent split, reducer-backed state, APG pattern recipes, focus and shortcut helpers.
The repo is one product (@p/aria-kernel) plus consumer harness apps that prove
the package behavior in realistic screens.
.
├── packages/
│ ├── aria-kernel/ ⭐ THE PRODUCT — published, MIT
│ ├── resource/ optional — external store / zod-crud bridge
│ ├── slides/ internal — markdown deck domain helpers
│ ├── fs/ internal — markdown / file-tree / shiki helpers
│ ├── source-viewer/ internal — code tabs for docs/site
│ └── devtools/ internal — repro recorder · spacing overlay
│
├── apps/
│ ├── site/ ⭐ integrated docs + showcase Vite app
│ ├── finder/ keyboard-first file browser
│ ├── outliner/ editable tree + zod-crud harness
│ ├── kanban/ board/resource harness
│ ├── slides/ markdown → 16:9 deck
│ └── markdown/ markdown viewer
│
└── docs/
└── site/ official docs, grouped by frontmatter IA
- Behavior:
@p/aria-kernelARIA pattern recipes (useListboxPattern,useToolbarPattern,useTreegridPattern,useRovingTabIndex,useShortcut, etc.). - Visuals: Tailwind v3 utility classes inline. No design tokens, no CSS-in-JS, no classless cascade — visual decisions live where they render.
- Routing: TanStack file-based routing in
apps/site.
pnpm install
pnpm dev # vite dev — http://localhost:5173
pnpm build # tsc -b && vite build (outputs dist/)
pnpm preview # serve dist/| Path | What |
|---|---|
/ |
Landing — product blurb + showcase cards |
/patterns |
APG recipe catalog (snap-y scroll, hash anchors per pattern) |
/lab |
ARIA-punt 흡수 PoC — 5 demo (dialog backdrop · tabs controlled · menu outside-close · grid editStart · dialog on keymap) + 25 black-box test |
/apps/finder/ |
Mac Finder column view |
/apps/slides/docs/slides-sample.md |
Slides deck |
/apps/markdown/README.md |
Markdown viewer |
- New reusable behavior →
packages/aria-kernel. - New visual decision → Tailwind utility class inline. No new token wrappers.
- New harness app →
apps/<name>workspace package, route added underapps/site/src/routes/apps.<name>.*.tsx. - Naming follows W3C / WHATWG (ARIA roles, semantic HTML). Library name borrowing forbidden.
- See
AGENTS.mdfor repo working rules andpackages/aria-kernel/INVARIANTS.mdfor behavior-layer contracts.