Jøkul er et designsystem utviklet av Fremtind.
Jøkul gir deg ferdige React-komponenter samt CSS- og SCSS-stilark for de grunnleggende komponentene og designmønstrene til Fremtind. De følger Fremtinds designprinsipper.
React-komponentene våre er den raskeste og enkleste måten å ta i bruk Jøkul. Alle komponenter og stilark leveres nå som én konsolidert pakke: @fremtind/jokul. CSSen er tilgjengelig som separate stilark, så om du ikke bruker React kan du fremdeles bruke Jøkul.
For å starte utviklingsserveren for Jøkul lokalt må du først ha installert:
- Node-versjonen definert i
.nvmrc, gjerne via Node Version Manager (NVM). - pnpm, gjerne via
corepackellernpm.- På de nye Fremtind-Macene kan det hende at du må installere
corepackvia Homebrew for at det skal fungere ordentlig: Installer medbrew install corepack, og gjør klar medcorepack installinne i Jøkul-mappa.
- På de nye Fremtind-Macene kan det hende at du må installere
For å komme i gang med Jøkul-prosjektet, klon repoet og installer avhengighetene:
- Kjør
pnpm ipå rot i repoet for å installere avhengighetene. - Kjør
pnpm devfor å starte portal + Storybook. - Kjør
pnpm dev:portalfor kun portalen. - Kjør
pnpm dev:storybookfor kun Storybook.
Vi bruker verktøyet Biome for både formatering og linting av koden i prosjektet. Linting og formatering skjer automatisk ved commit, men vi anbefaler også at du setter opp IDEen din til å bruke Biome så den ikke krangler med våre innstillinger.
Det finnes plugins for både VSCode og IntelliJ, som må installeres for å få funksjonaliteten i editoren. Etter å ha installert plugin-en må du fortelle editoren at den skal bruke Biome for formatering og linting.
Etter å ha installert plugin-en, åpne innstillingene og søk på format. Velg Biome under valget "Editor: Default Formatter". NB! vi anbefaler at du gjør dette under "Workspace", siden de fleste andre prosjekter bruker Prettier for formatering.
Deretter kan du søke etter eslint og fjerne avkrysningen ved "Eslint: Enable", for å unngå at Eslint krangler med Biome. Sørg også for at "Eslint > Format: Enable" er skrudd av. Disse endringene bør også gjøres under "Workspace".
- Kjør
pnpm rebootom du kommer tilbake til Jøkul-prosjektet etter en stund, eller noe ikke fungerer som du forventer. - Om du opplever feil fra
nx, prøvpnpm dlx nx resetog kjør kommandoen på nytt.
Repoet bruker Changesets på standard måte med .changeset/config.json, changeset-filer i .changeset/ og changesets/action i GitHub Actions.
main er hovedbranchen for utvikling og publiserer normalt beta-versjoner med npm-taggen next. I tillegg finnes vedlikeholdte grener på formen jokul-N.x (f.eks. jokul-5.x) for eldre major-versjoner. Hvilke grener som vedlikeholdes, hvilket bump-nivå de kan motta, og hvilken av dem som er latest, er definert i .github/maintained-versions.json.
Publisering skjer i én felles GitHub Actions-workflow (release.yml) som trigges ved push til main eller en jokul-*-branch. Workflowen finner riktig npm dist-tag automatisk:
- På en
jokul-N.x-branch:latesthvis branchen er markert med"latest": trueimaintained-versions.json, ellersversion-N. - På
main: tag-en definert i.changeset/pre.jsonhvis den finnes (dvs. nårmainer i prerelease-modus), ellerslatest.
Denne logikken er samlet i scripts/find-release-tag.mjs, som også brukes av workflowen for Storybook branch-preview.
Endringer utvikles på main og backportes automatisk til de vedlikeholdte jokul-N.x-grenene ved hjelp av workflowen backport.yml:
- Når en PR mot
mainmerges, leser workflowen changeset-filene som ble lagt til i PR-en og finner høyeste bump-nivå (patch/minor/major) blant dem. scripts/find-backport-targets.mjsfiltrerer grenene imaintained-versions.jsontil dem som har konfigurert etmaxBumpsom er høyt nok til å motta denne endringen.- For hver aktuell gren opprettes en egen branch, PR-ens commits cherry-pickes over, og en PR åpnes automatisk mot grenen.
- Hvis cherry-picken gir konflikt, opprettes PR-en likevel med instruksjoner for manuell konfliktløsning.
Backport kan også trigges manuelt for en gitt PR via workflow_dispatch.
pnpm changesetoppretter et changeset.pnpm release:versionkjører versjonering med Changesets.pnpm release:pre:entergår inn i prerelease-modus.pnpm release:pre:exitgår ut av prerelease-modus.pnpm release:publishbygger og publiserer pakkene i repoet.
Når vi skal utgi ny major-versjon av Jøkul følger vi følgende oppskrift
- Lag en ny branch ut fra
main. I denne branchen- Gå ut av prerelease-modus med
pnpm release:pre:exit - Oppdater versjoner av pakkene med
pnpm release:version - Lag en PR med disse endringene mot
main
- Gå ut av prerelease-modus med
- Merge inn PRen du nettopp laget. Ny major-versjon vil nå bli publisert
- Lag en ny branch ut fra
mainfor versjonen du nettopp publiserte, f.eks.jokul-7.xhvis du publiserte versjon7.0.0, og push den til GitHub - Oppdater
.github/maintained-versions.jsonmed den nye major-versjonen, og lag en PR med endringen motmain. Backport endringen til alle brancher som er støttet (de som er listet opp i filen) - Skru på igjen prerelease-modus i
mainmedpnpm release:pre:enter
Vi har en egen guide som hjelper deg med å komme i gang som ny bruker av Jøkul.
I dokumentasjonen finner du:
- Informasjon om hvordan du bruker Jøkul.
- Designprinsippene til Fremtind.
- Detaljert dokumentasjon for hver komponent, inkludert eksempler.
- Guider for ulike ting, blant annet hvordan gjøre endringer i Jøkul.
- Bloggen vår, med jevnlige oppsummeringer av hva som er nytt i Jøkul.
Jøkul er et åpent og positivt felleskap der alle skal føle seg velkommen. Gjør deg kjent med våre etiske regler for bidragsytere før du deltar med bidrag.
Jøkul er distribuert under MIT-lisensen for åpen kildekode.
Takk for bidrag fra disse flotte menneskene (emoji-oversikt):
Dette prosjektet følger retningslinjene i spesifikasjonen all-contributors. Vi setter pris på alle bidrag!