Gathering detailed insights and metrics for nve-designsystem
Gathering detailed insights and metrics for nve-designsystem
Gathering detailed insights and metrics for nve-designsystem
Gathering detailed insights and metrics for nve-designsystem
npm install nve-designsystem
Module System
Min. Node Version
Typescript Support
Node Version
NPM Version
1 Stars
624 Commits
7 Watching
57 Branches
16 Contributors
Updated on 20 Nov 2024
TypeScript (55.6%)
CSS (28.83%)
Vue (8.97%)
JavaScript (6.6%)
Cumulative downloads
Total Downloads
Last day
-65.2%
32
Compared to previous day
Last week
-19.8%
134
Compared to previous week
Last month
-9.3%
853
Compared to previous month
Last year
2,611%
14,775
Compared to previous year
3
1
Dette er skrevet for de som utvikler NVE Designsystem. Skal du kun bruke designsystemet, finner du dokumentasjon og kodeeksempler her: https://designsystem.nve.no/.
Repositoryet inneholder css generert fra Figma-tokens i Designsystemet. Her finner du pakka i npm.
Her er skisser i Figma.
De fleste komponentene bygger på Shoelace, men er tilpasset NVE Designsystem. Etterhvert vil de fleste Shoelace-komponenter få sin NVE-variant, men vi har også komponenter som ikke er basert på Shoelace. Vi anbefaler at du laster ned kildekoden til Shoelace og setter deg inn i Lit, som vi bruker som rammeverk.
Dette prosjektet inneholder to applikasjoner:
doc-site
ligger test-applikasjonen som viser brukerveiledninga for biblioteket. Teknisk beskrivelse av denne ligger i egen readmeKjør npm install
og npm run dev
for å starte test-applikasjonen. Applikasjonen er selve brukerveiledninga for komponentbiblioteket, så her ligger api-dokumentasjon, beskrivelse av funksjonalitet og ikke minst kodeeksempler.
Ikke push endringer direkte i main
. Lag en pull request.
Alle komponenters navn skal starte med nve-
. Bruk det samme navnet som komponenten får i html. Kun små bokstaver og bindestrek er tillatt i navnet.
Vi skiller API + funksjonalitet, styling og test/dokumentasjon i hver sine filer.
Du kan lage skall til en ny komponent ved å kjøre npm run add-component {navn på komponent}
. Scriptet oppretter riktige filer for deg.
Du kan også lage filene manuelt. Følg mønsteret i eksemplet nedenfor:
Sti | Beskrivelse |
---|---|
/src/components/nve-button/nve-button.component.ts | Selve komponenten |
/src/components/nve-button/nve-button.styles.ts | Styling |
/doc-site/components/nve-button.md | Test og dokumentasjon |
Vi setter reflect: true på alle properties i komponenter for å kunne se properties som oppdateres i DOM. Se eksempel:
1@property({ reflect: true }) title: string = '';
Alle komponenter skal implementere INveComponent
Komponenter skal eksponeres i src/nve-designsystem.ts
på denne måten:
1export { default as NveComponent } from './components/nve-component/nve-component.component';
Skissene i Figma er et forslag til design, ikke en spesifikasjon.
Hvis vi skal ta utgangspunkt i en Shoelace-komponent, pass på at designet ikke går for mye på tvers av slik komponenten er laget i Shoelace. Hvis du ser at du må endre render()
-metoden for få til ønsket design, ta opp med designeren om hen heller kan justere designet.
Pass også på at API'et til komponenten blir ryddig. Navn på properties må følge god praksis for web-komponenter, og ikke alle properties er nødvendig å implementere. F.eks. trenger vi ikke en showHelpText-property. Det holder med en helpText-property med blank som standard-verdi. Da viser du helpText hvis den finnes.
Når vi styler shoelace-komponenter kan vi enten overskrive Shoelace sine css-klasser eller bruke parts i shadow-DOM. Bruk helst parts fordi koden blir lettere å lese. Dette:
1::part(control) { 2 color: red; 3}
ser bedre ut enn dette:
1.checkbox checkbox--medium checkbox__control { 2 color: red; 3}
Hvis det ikke er mulig å style med ::part, bruk css-klasser.
safari (liten forbokstav med vilje) sliter med å håndtere parts med denne syntaksen :host(:hover)::part(control)
, med det resultat at stilene til Shoelace ikke blir overskrvet som ønsket. Derfor må vi huske å teste web komponenter i safari og. Problemet kan løses med bruk av '!important', f.eks.:
1:host([disabled]:hover)::part(control control--indeterminate) { 2 background: var(--neutrals-foreground-primary) !important; 3 border-color: var(--neutrals-foreground-primary) !important; 4}
Det finnes tokens for typografi i Figma. Sett Figma i utviklermodus og klikk på en tekst. I typografi-seksjonen til høyre ser vi css'en som er generert. Vi skal ikke bruke selve css'en, men kommentaren over css'en gir et hint om navnet på tokenet. Eksempel i Figma:
1color: var(--neutrals-foreground-mute, #3c3f44); 2 3/* Label/small */ 4font-family: Source Sans Pro; 5font-size: 1rem; 6font-style: normal; 7font-weight: 600; 8line-height: 110%; /* 1.1rem */
Kommentaren /* Label/small */
betyr at vi skal bruke css-variabelen --label-small
, f.eks. slik:
1.button-label { 2 font: var(--label-small); 3}
Det hadde vært fint om vi kunne sette en NVE-verdi for alle Shoelace-tokens. Men dette går ikke fordi strukturen i Shoelace og NVE Designsystem er forskjellig.
Vi har satt NVE-verdier for en del Shoelace-tokens, og disse ligger i global.css
.
Foreslå gjerne flere Shoelace-tokens som kan mappes på denne måten.
Vi trenger ikke å style:
Vi dokumenterer på norsk
Alle komponenter dokumenteres med JsDoc-tags i koden. Alt som er tilgjengelig for de som bruker komponentene skal dokumenteres, dvs. alle public klasser, interfaces, properties/attributter, metoder, events, slots, css-parts og css-properties. Her er noen tips.
Når du kjører opp test/dokumentasjons-applikasjonen, blir koden scannet og metadata + JsDoc lagret i custom-elements.json
. Du kan også generere fila manuelt med npm run manifest
. Dokumentasjons-applikasjonen bruker denne fila.
Skriv litt øverst i .component.ts
-fila om hva komponenten skal brukes til. Om det er Shoelace-properties som ikke skal brukes fordi dette ikke passer med designsystemet, må du dokumentere det her.
Brukerveiledning med kodeeksempler skriver du i markdown-fila til komponenten. Dokumentasjons-applikasjonen viser denne markdown-fila sammen med info fra custom-elements.json
. Fila skal hete det samme som komponenten, men med .md som etternavn, og legges her: doc-site/components
. Eksempel: doc-site/components/nve-button.md
Lag kodeeksempler både for å teste at komponenten funker som forventet og for å vise hvordan komponenten funker.
Markdown-fila skal ha denne strukturen:
## Eksempler
Mer om dette:
Markdown-fila må starte med denne blokka:
1--- 2layout: component 3---
Deretter lager du et enklest mulig kodeeksempel for å kunne vise komponenten. Alle kodeksempler legges i en slik blokk:
<CodeExamplePreview>
```html
Her skriver du html-koden
```
</CodeExamplePreview>
Du må ha et ekstra linjeskift etter <CodeExamplePreview>
og </CodeExamplePreview>
Skriv evt. generelle tips som ikke passer å ha i @JsDoc. Pass på at det ikke blir dobbelt opp med det du har skrevet i @JsDoc.
Nå er turen kommet til å demonstrere hvordan komponenten funker. Lag kodeeksempler for de viktigste tingene du kan gjøre med komponenten, og for å vise hvordan komponenten oppfører seg. Bruk dette for å teste at komponenten oppfører seg slik den skal.
Eksemplene legger du under overskriften ## Eksempler
Hvert tema skal ha egen overskrift, f.eks.: ### Deaktivering
.
Du kan også lage mer avanserte kodeeksempler i Vue. Se hvordan dette er gjort i doc-site/introduction/vue.md.
Hvis du har laget en ny markdown-fil, må du starte test-applikasjonen på nytt ved å skrive r
og taste <enter>
i konsollet, for at fila skal leses.
Du kan også lage egne markdown-filer for spesielle tema, slik vi har gjort under doc-site/introduction
. Lag en link til fila fra menyen i doc-site/.vitepress/config.mts
.
Publisering til npm skjer ved hjelp av Github actions. Når man pusher til main
(ved å fullføre en pull request), starter det en jobb som oppdaterer versjonsnummer og publiserer npm-pakka. Jobben er spesifisert i filen .github/workflows/npm-publish.yml.
Før man lager en PR eller er det lurt å teste pakke lokalt. Med npm run pack
kan man teste hvordan pakka oppfører seg akkurat på samme måte som etter publisering. For å teste nve-designsystem-pakka lokalt:
npm run build
(du kan også kjøre npm run build:dev
om du ønsker å få tilgang til sourcemaps)npm run pack
. <nve-designsystem-x.y.z.tgz
blir generert i mappa dist
npm i
<nve-designsystem-x.y.z.tgz med full sti>
Pull requests på komponenter skal også kunne godkjennes av designere. Derfor har vi satt opp en azure static app som kjører test/dokumentasjons-applikasjonen. Denne bygges og kjøres når man lager en PR.
Det er maks 10 apper som kan kjøres samtidig, så hvis det er flere enn 10 PR'er kan det være at appen ikke bygges. De skal slettes automatisk når en PR lukkes, men det er ikke alltid dette virker. I slike tilfeller må vi slette appene manuelt i Azure-portalen. Appene ligger i denne ressursgruppa: TEST-Designsystemet-RG. Marcin, Øystein, Joel, Fred og Tommy har tilgang til dette.
Når vi har nye design-tokens eller endringer i tokens må vi generere globale css-filer på nytt.
Kjør følgende kommando: npm run tokenbuild
.
No vulnerabilities found.
No security vulnerabilities found.