Web Components voor de Nederlandse Digitale Dienst (Rijksoverheid).
npm run storybook # Dev server op localhost:6006
npm run build:styles # Kopieer CSS + fonts naar dist
npm run build # Volledige buildGebruik ALTIJD deze skills voor de juiste workflow:
| Taak | Skill | Beschrijving |
|---|---|---|
| Nieuwe branch starten | /worktree <branch> |
Maakt worktree + kopieert .env en .claude/ |
| Component maken/updaten | /component <naam> |
Alle regels, formatting, BEM, CSS, templates |
| Storybook beheren | /storybook-manager |
Start/stop/status van Storybook instances |
Typische flow voor nieuwe feature:
/worktree feat/my-component
/component my-component
src/components/{categorie}/{naam}/
nldd-{naam}.ts # Lit + TypeScript component
nldd-{naam}.styles.ts # Component styles
nldd-{naam}.template.ts # Render template
nldd-{naam}.i18n.ts # Vertalingen (optioneel)
nldd-{naam}.stories.ts # Storybook stories
nldd-{naam}.test.ts # Unit tests
| Laag | Prefix | Beschrijving |
|---|---|---|
| Primitives | --primitives-* |
Basiswaarden (kleuren, spacing, typografie) |
| Semantics | --semantics-* |
Betekenisvolle variabelen (buttons, controls, surfaces) |
| Components | --components-* |
Component-specifieke variabelen |
| Context | --context-* |
Gedeelde variabelen voor communicatie tussen componenten |
| Lokaal | --_* |
Interne variabelen binnen een component (niet voor extern gebruik) |
Voorkeursvolgorde: components → semantics → primitives.
CSS variabelen worden gevalideerd tijdens de build (npm run validate:styles):
--context-*— Niet gevalideerd, niet in settings.css--_*— Gevalideerd binnen hetzelfde bestand--primitives-*,--semantics-*,--components-*— Gevalideerd tegen settings.css
Geen fallbacks. CI faalt als variabelen ontbreken.
Elk component MOET minimaal een smoke test hebben. Run tests met npm test.
- Smoke test (verplicht): rendert zonder errors, heeft een shadowRoot
- Logica tests (verplicht bij complexe logica): test MutationObservers, slot management, attribuut propagatie, event handlers, state transitions
Test helpers (src/test-utils.ts):
fixture<T>(html)— maakt DOM element, wacht op Lit updateCompletecleanup(el)— verwijdert fixture wrapper uit DOM (gebruik in afterEach)waitForUpdate(el)— wacht op MutationObserver + Lit re-render cycle
- NOOIT pushen zonder expliciete toestemming van de gebruiker. Alleen pushen als de gebruiker letterlijk zegt dat je mag pushen. Commit maken mag wel, pushen niet.
- Pre-commit hooks: ESLint, commitlint
- Conventionele commits:
feat(button): add variant,fix(checkbox): focus ring
Versies worden automatisch verhoogd door semantic-release bij merge naar main.
| Commit type | Versieverhoging |
|---|---|
feat: |
Patch (0.5.0 → 0.5.1) |
fix:, perf: |
Patch (0.5.0 → 0.5.1) |
feat!: of BREAKING CHANGE: |
Patch (0.5.0 → 0.5.1) |
docs:, chore:, ci:, etc. |
Geen |
| Niet-herkend (geen conventionele prefix) | Patch (behandeld als feat) |
Handmatig versie verhogen is niet nodig. Gebruik conventionele commits en CI doet de rest.