Vue 3 headless component library. pnpm monorepo. Node ≥ 22, pnpm 10.
- Install:
pnpm i - Test (one-shot):
pnpm --filter reka-ui exec vitest run [path](pnpm test= watch mode — avoid in automation) - Coverage:
pnpm --filter reka-ui test:coverage - Type-check:
pnpm --filter reka-ui type-check - Lint:
pnpm lint(fix:pnpm lint:fix) - Build:
pnpm --filter reka-ui build(vue-tsc + tsdown) - Regenerate API docs after changing public props/emits/slots:
pnpm docs:gen
packages/core/src/<Family>/— one dir per component family; parts named<Family><Part>.vue; each family hasindex.ts; public surface =packages/core/src/index.ts.packages/core/src/shared/— shared composables (createContext,useForwardExpose, prop/emit forwarding, …).packages/core/src/date/— date/calendar utilities.packages/plugins— build-tool integration (resolver, Nuxt module).docs/— VitePress site;docs/content/meta/*.mdis AUTO-GENERATED (never hand-edit).- Stories are Histoire (
*.story.vue), not Storybook.
- Context:
createContext('<Component>')→[inject, provide];*Root.vueprovides, descendants inject. - Rendering:
Primitivewithas/asChild; expose refs viauseForwardExpose(). - Tests: colocated
*.test.ts, vitest + jsdom +@testing-library/vue+vitest-axe(axe check expected for new components); jsdom quirks handled inpackages/core/vitest.setup.ts. - Commits: Conventional Commits, scope = component family (
fix(Dialog): …); commitlint enforces; lint-staged runseslint --fix(lints JSON/MD/YAML too — intentional).
See CONTRIBUTING.md for the full guide.