@drafthaus/ui
v0.1.1
Published
Drafthaus — a drafting-themed React component library.
Readme
@drafthaus/ui
A small, drafting-themed React component library — components rendered like a
drafting-table plan: dimension lines as dividers, hatching for filled regions,
corner construction ticks, and annotations. Ships two swappable
palettes (graphite dark and the original blueprint cyan) driven entirely by CSS
custom properties.
Install
pnpm add @drafthaus/ui
# react and react-dom are peer dependenciesUsage
import { Button, Card, Badge } from "@drafthaus/ui";
export function Example() {
return (
<Card title="Panel" subtitle="01">
<Badge tone="ok">Ready</Badge>
<Button>Submit</Button>
</Card>
);
}Components
Annotation, Badge, Button, ButtonGroup, Callout, Card, Checkbox,
Dialog, DimensionDivider, DropdownMenu, Hatch, Input, NumberField,
Popover, RadioGroup, Select, Sidebar, Slider, Switch, Table,
Tabs, Textarea, Tooltip.
Terminology
Consistent vocabulary for the text around a component:
| Term | Definition |
|------|------------|
| Annotation | Small uppercase text above a component. Props: Button.annotation, Input.annotation. |
| Hint | Secondary text below a component. Props: Input.hint, Checkbox.hint. |
| Label | A component's primary, accessible name. Props: Input.label, Checkbox.label, Switch.label. |
| Dimension line | An arrowed rule that measures distance between blocks (DimensionDivider) — not an annotation. |
Styling
The components use Tailwind theme-token utilities plus custom .dh-* classes,
so you must include the stylesheet one of two ways.
1. Tailwind v4 apps (recommended)
Import the design layer and add the package to Tailwind's @source scan so the
utilities used inside the components are generated:
@import "tailwindcss";
@import "@drafthaus/ui/styles.css";
@source "../node_modules/@drafthaus/ui/dist";2. Non-Tailwind apps
Import the precompiled, self-contained stylesheet — no Tailwind required:
import "@drafthaus/ui/styles.compiled.css";Theming
Set data-theme on a root element (defaults to graphite):
<html data-theme="blueprint">Both palettes are just --dh-* custom properties — override any of them
(--dh-ink, --dh-paper, --dh-rule, …) to define your own theme.
