Een component maken in die-core β
Component aanmaken met het create-component script β
Om een nieuwe component aan te maken, gebruik je het volgende commando in de terminal:
npx nx run tools:create-component --name=<comp-name>Vervang <comp-name> door de naam van je component in kebab-case (woorden gescheiden door koppeltekens). Het dcr- prefix wordt automatisch toegevoegd als je dat weglaat.
Bijvoorbeeld:
npx nx run tools:create-component --name=status-badgeof
npx nx run tools:create-component --name=dcr-status-badgeWat doet het script? β
Het create-component script automatiseert verschillende stappen:
- Maakt een componentmap in
libs/dcr-components/src/lib/<comp-name> - Maakt een docs-map voor Storybook documentatie
- Genereert alle benodigde bestanden met een standaard startstructuur
- Voegt de component toe aan de main export file
- Werkt package.json aan met de nieuwe export entries
Gegenereerde bestandsstructuur β
Na het uitvoeren van het commando wordt de volgende bestandsstructuur aangemaakt:
libs/dcr-components/src/lib/status-badge/
βββ dcr-status-badge.ts # Hoofdcomponentbestand
βββ dcr-status-badge.interface.ts # TypeScript interface definitie
βββ dcr-status-badge.styles.scss # SCSS stijlen voor de component
βββ dcr-status-badge.styles.ts # Gegenereerd CSS-in-JS bestand (niet direct bewerken)
βββ index.ts # Export barrel bestand
βββ docs/
βββ dcr-status-badge.stories.ts # Storybook documentatieBestanden en hun doel β
dcr-status-badge.ts β
Dit is het hoofdbestand van de component waar je de LitElement-logica implementeert. Het bevat:
- De component class met decorator
- Shadow DOM configuratie
- Render methode
- Eventuele properties en methods
dcr-status-badge.styles.scss β
Dit bestand bevat de component-specifieke SCSS stijlen. Zoals besproken in de [styling richtlijnen]((/handboek/developers/component-maken/basisprincipes/styling), gebruik je hier semantische classnamen en CDS design tokens:
@use '@diekeure/cds-tokens' as cds;
:host {
display: block;
}
.badge {
/* Component-specifieke styling met semantische classnamen */
}dcr-status-badge.interface.ts β
Dit bestand definieert de publieke API van je component als TypeScript interface. Voeg hier properties en methodes toe die beschikbaar moeten zijn voor gebruikers van je component.
docs/dcr-status-badge.stories.ts β
Dit bestand bevat de Storybook configuratie voor je component, waarmee je verschillende varianten en states kunt documenteren en testen.
Volgende stappen na het aanmaken β
Na het aanmaken van de component:
- Implementeer de componentlogica in het
.tsbestand - Voeg styling toe in het
.scssbestand volgens de semantische naamgevingsrichtlijnen - Definieer de publieke API in het interface bestand
- CreΓ«er Storybook documentatie in het stories bestand
- Voer tests uit om de werking te valideren
Tips voor het implementeren van je component β
- Volg de styling richtlijnen voor componenten voor een consistente aanpak
- Gebruik CDS design tokens voor kleuren, typografie en andere visuele eigenschappen
- Zorg voor semantische classnamen die het doel van elementen beschrijven
- Documenteer je component goed met JSDoc commentaar en Storybook voorbeelden
- Test verschillende gebruiksscenario's van je component
Voorbeeld: dcr-status-badge component β
Een minimaal voorbeeld van een geΓ―mplementeerde component:
// dcr-status-badge.ts (voorbeeld implementatie)
import { LitElement, html } from 'lit';
import { customElement, property } from 'lit/decorators.js';
import { Interface } from './../_shared/decorators.js';
import styles from './dcr-status-badge.styles.js';
@Interface()
@customElement('dcr-status-badge')
export class DcrStatusBadge extends LitElement {
static override styles = styles;
@property({ type: String })
status = '';
@property({ type: String })
variant = 'default';
override render() {
return html`
<div class="badge ${this.variant}">
<slot name="icon"></slot>
<span class="text">${this.status}</span>
</div>
`;
}
}Door dit geautomatiseerde proces te gebruiken, kun je snel en consistent nieuwe componenten toevoegen aan de die-core bibliotheek zonder handmatig alle benodigde bestanden en configuraties te hoeven maken.