Pacepard design system and React UI component library. Framework-agnostic presentation components for Next.js, Vite, and other React applications.
pnpm add @pacepard/uinpm install @pacepard/uiimport { Button, Card, Input } from '@pacepard/ui';
import '@pacepard/ui/styles.css';
export function Example() {
return (
<Card>
<Input placeholder="Email" />
<Button>Continue</Button>
</Card>
);
}Semantic CSS variables power light and dark themes. Initialize theme on the client:
import { initTheme, setTheme } from '@pacepard/ui';
initTheme('system');
setTheme('dark');Themes: light, dark, system. Components use tokens such as --pacepard-primary and short aliases like --primary.
pnpm install
pnpm storybook
pnpm check
pnpm build-storybookStorybook is the visual development environment:
pnpm storybookIncludes the accessibility addon. Violations are treated as errors (a11y.test: 'error').
- Storybook — interactive components, props, a11y
- Mintlify — conceptual docs under
docs/(installation, theming, tokens)
Mintlify content is intended for docs.pacepard.com and does not duplicate every Storybook example.
# Preview Mintlify docs locally (requires Mintlify CLI)
cd docs && npx mintlify dev- Unit/component: Vitest + React Testing Library (
pnpm test) - Browser flows: Playwright against Storybook (
pnpm build-storybook && pnpm test:e2e)- Dialog, Dropdown, Tabs, Form, Toast/Sonner, InputOTP, Checkbox, Switch, Select, Accordion, Chart, Sheet, theme
- Axe smoke (
e2e/a11y.spec.ts) via Storybook’s axe on Button, Form, Dialog, Tabs, Checkbox, Select (serious/critical; color-contrast disabled)
- Visual regression (Chromatic) is optional and not wired until a project token exists
Versioning uses Changesets. On merge to master, the release workflow can open a release PR or publish to npm.
pnpm changeset| Import | Purpose |
|---|---|
@pacepard/ui |
Components, utilities, theme helpers |
@pacepard/ui/styles.css |
Design tokens and component styles |
@pacepard/ui/tokens |
Typed token references |
@pacepard/ui/theme |
Theme helpers (initTheme, setTheme) |
@pacepard/ui/<name> |
Per-component ESM entry (kebab-case), e.g. @pacepard/ui/button |
ESM-only. Peers: React, React DOM. Optional peers: react-hook-form (Form), react-is (Recharts). Chart tooltips/legends: import ChartTooltip / ChartLegend from @pacepard/ui.
Local consumer apps under examples/. They depend on the published npm packages (@pacepard/ui / @pacepard/icons), not the workspace sources:
# Vite
cd examples/vite && pnpm install && pnpm build
# Next.js
cd examples/next && pnpm install && pnpm buildBoth examples include Sidebar shell, Questionnaire, Form, Toast, Dialog, Table, Chart, and @pacepard/icons.
See CONTRIBUTING.md and AGENTS.md for humans and coding agents.
- Add or update the component under
src/components/ComponentName/ - Include Storybook stories and tests for behavior
- Export from
src/index.ts - Add a changeset for package-affecting changes
- Ensure
pnpm format:check && pnpm checkpass
Do not add authentication, API clients, analytics, or application business logic to this package.