Bidra till komponentbiblioteket
Att komma igång och bidra med kod till Midas är enkelt!
Du behöver
- En normalt fungerande WSL eller motsvarande setup med Node version >22.
- Nx installerat globalt
npm install --global nx@latest
npm install
Starta Dokumentationswebben
nx serve docs
Starta Storybook
nx run components:storybook
Starta Playground-appen (React)
Kan användas för att testa komponenter i ett sammanhang utanför Storybook.
nx serve playground
Vi har även en remix och en next.js-app uppsatta - byt playground mot remix|next
Komponentbibliotek
Alla komponenter ligger under /packages/components
och exporteras som ett npm-paket @midas-ds/components
.
- Kör enhetstester för komponentbiblioteket
nx test components
Dokumentationswebb
Dokumentationswebben ligger i apps/docs
och är byggd med Docusaurus.
- Kör dokumentationen lokalt:
nx serve docs
Bygg komponentbibliotek
Komponentbibliotek och appar kan byggas med:
nx build <namn>
och allt som byggs hamnar i /dist
. Om du vill testa utanför monorepot går det att zippa med npm pack
och installera i
separat app med npm install [sökväg]
.
Instruktioner för Git
Branch
Branch namnges enligt [feature|bugfix|hotfix|docs|refactor|chore|test]/[scope]/
, till exempel feature/button
.
Commit
Commits görs enligt conventional commits. Använd engelska,
imperativ form, definiera type feat|docs|fix|refactor|test|ci
och scope (button|etc...)
och lägg till referenser
till andra issues vid behov. Tänk på att även en merge (med squash) skapar en commit så lägg en extra tanke på
vilken information som kommer med och inte kommer med. Våra commits är hela projektets historik och är indata till
changelogs och release notes så lägg gärna en extra minut på att vara tydlig.
Varför conventional commits?
- Generera automatisk CHANGELOG
- Automatiskt bestämma
semantic version
- Kommunicera inom team och till andra intressenter vad förändringen gäller.
- Trigga byggen och andra åtgärder.
- Bidra till att hålla en konsekvent och strukturerad historik.
Commit message på en rad
docs(lang): add Swedish language
Commit message med header och body
fix: prevent red color on button hover
Introduce new css variable to automatically
select style based on input type
Bygga komponenter
Styleguide
Generellt, använd övriga komponenter som referens när nya läggs till.
- Som standard, exportera en komponent per fil
- Använd barrel-files
index.ts
för att exportera hela mappar - Formatera enligt Prettier standard
- Importera och använd tokens i
[component].module.css
enligt
@value tokens: "../theme/tokens.css";
@value --button-background-primary from tokens;
.button {
background-color: --button-background-primary;
}
Importera headless-bibliotek
Komponenter ska i första hand byggas på React Aria i den mån det går. React Aria har ett omfattande bibliotek av färdiga komponenter och hooks som går att kombinera ihop för att uppnå önskat resultat. Fördelen med att följa React Arias konventioner är att det följer med mycket gratis i form av stöd för skärmläsare, tangentbordsnavigation och olika states.
Skriv enhetstester
Ur perspektivet att tillgänglighet är ett av designsystemets viktigaste fokusområden är det viktigt att vi regressionstestar. Använd axe-core för att fånga upp problem innan de blir buggar. Det finns inget specificerat mål någon viss code coverage men ta inspiration från headless-biblioteken. Grundläggande funktion av komponenter bör också täckas av enhetstester.
Skapa stories
I utgångspunkt bör alla states finnas representerade som stories i Storybook. Storybook är i första hand ett internt verktyg för UX och utvecklare i designsystemet men också en publikt exponerad referens för komponenterna.
Dokumentation
Komponenten dokumenteras på dokumentationswebben med lämpliga exempel, beskrivning och properties. Normalt plockas properties upp från komponenten via react-docgen-typescript men om det har införts nya types eller interfaces kan de behöva specificeras enligt JSDoc.
Release & publish
Designsystemet använder Nx för versionshantering och release enligt nx release.
När du kör nx release --skip-publish
räknas komponentbiblioteket upp till rätt version
och Nx gör en commit med uppdaterad changelog samt sätter en git tag med rätt versionsnummer.
nx release --skip-publish --dry-run // remove dry-run when you know it works
Kontrollera att allt stämmer, gör release utan --dry-run
, skapa en release-branch och pusha till remote.
git checkout -b release/[insert version number here]
git push -u origin release/[insert version number here] --follow-tags
När en ny tag v{x.x.x}
finns på remote triggas ett workflow med publicering till NPM.
För att slutföra release, gör en PR till main och gör en merge när den är godkänd. Observera
att du inte ska göra en rebase eftersom git tags då inte är kopplade till rätt commit och
Nx kan inte längre räkna ut vilken version som är aktuell.