@huynh-os/components
v0.4.0
Published
Huynh OS component and block specs — the canonical ComponentSpec/BlockSpec data, validated against @huynh-os/schema and bound to live @huynh-os/tokens paths. The ground truth authored before any framework implementation.
Downloads
8
Readme
@huynh-os/components
The canonical component and block specs for Huynh OS, stored as data.
Components are specced here and built later (as @huynh-os/react). This package is the ground truth that design, code, Figma, and agents all read from — authored before any framework implementation exists.
What lives here
specs/
button.json ComponentSpec
card.json
input.json
badge.json
nav-item.json
toast.json
blocks/
hero-band.json BlockSpec
expressive-section.json
data-panel.jsonEach file is a ComponentSpec or BlockSpec as defined in @huynh-os/schema. A spec carries its full contract: anatomy, variants, required states, token bindings, accessibility, motion roles, content rules, slots, and the human usage contract (when to use / when not / dos / don'ts).
The build is a contract gate
pnpm build runs scripts/build.mjs, which fails if any of these are violated:
- Schema validation — every spec must satisfy
validateComponentSpec/validateBlockSpec. - Token bindings resolve — every
tokenBinding.tokenPathmust resolve to a real token (leaf or group) in the@huynh-os/tokensmanifest. This is what stops a spec referencing a token that has been renamed or removed. - Reference integrity — every block
componentRefsid and every slotallowedComponentsid must name a known component spec.
On success it emits dist/manifest.json ({ components, blocks }) for agents and tooling, exported as @huynh-os/components/manifest.
Usage
import { loadComponentSpecs, loadComponentSpec, loadBlockSpecs } from '@huynh-os/components'
const button = loadComponentSpec('button')
const allBlocks = loadBlockSpecs()The loaders validate on read and throw on an invalid spec, so a consumer never receives a malformed spec.
Adding a component
- Add
specs/<id>.jsonfollowing an existing spec. - Bind every styled property to a token path that exists in
@huynh-os/tokens. pnpm build— the gates tell you immediately if a binding or reference is wrong.
