Bidra till komponentbiblioteket
Att komma igång och bidra med kod till Midas är enkelt!
🤝 Gemenskapsdriven utveckling
Midas komponentbibliotek är gemenskapsdriven - det är ett strategiskt mål att biblioteket produceras av och för användarcommunityn. Ett litet core-team ansvarar för att hantera projektet och säkerställa kvalitet, men bidrag från användare är mer än välkomna.
Ett av våra viktigaste mål är att erbjuda en så bra developer experience (DX) som möjligt. För att uppnå detta behöver vi er feedback, era idéer och era bidrag. Genom att vara gemenskapsdrivna säkerställer vi att biblioteket möter verkliga behov och utmaningar som ni stöter på i era projekt.
Hur du kan bidra:
- Rapportera buggar och föreslå förbättringar
- Bidra med kod för nya komponenter eller funktionalitet
- Förbättra dokumentation
- Delta i diskussioner och code reviews
- Dela din erfarenhet av att använda Midas
Din feedback och ditt engagemang är avgörande för att göra Midas bättre. Tveka inte att höra av dig!
🛠️ Kom igång
🐳 Snabbstart med Docker (Rekommenderat)
Det snabbaste sättet att komma igång är med Docker. Då behöver du inte installera Node.js, npm eller några beroenden lokalt - allt körs i en isolerad miljö med exakt rätt versioner.
Krav: Endast Docker Desktop (eller Docker Engine + Docker Compose)
Starta alla appar:
docker-compose up
Detta startar:
- Storybook på http://localhost:4400
- Dokumentation på http://localhost:3000
- Playground på http://localhost:4200
Starta en specifik app:
docker-compose up storybook # Endast Storybook
docker-compose up docs # Endast dokumentation
Kör kommandon i containern:
docker-compose exec docs nx test components # Kör tester
docker-compose exec docs nx build components # Bygg komponenter
📖 Läs mer i DOCKER.md för fullständig dokumentation.
💻 Lokal installation (Alternativ)
Om du föredrar att köra allt lokalt behöver du:
Node version ^22.12.0 krävs. Installera Nx globalt: npm install --global nx@latest
Nx
Midas är ett monorepo som hanteras med Nx. Det innebär att vi har flera olika projekt i samma repo, till exempel komponentbiblioteket, dokumentationswebben och andra verktyg. Varje projekt har sitt eget scope och kan hanteras individuellt. Du kan köra nx graph för att se en visuell representation av hur projekten är relaterade till varandra. Eftersom vissa projekt är beroende av andra, kan en ändring i ett projekt innebära att ett annat projekt också behöver en ny version. Till exempel, om theme uppdateras, så kommer components som är beroende av theme också att få en ny version.
Starta Storybook
nx serve storybook
Komponentbibliotek
Alla komponenter ligger under /packages/components och exporteras som ett npm-paket @midas-ds/components.
Tester
nx test components
Mer info finns på sidan om tester.
Dokumentationswebb
Dokumentationswebben ligger i apps/docs och är byggd med Docusaurus.
nx serve docs # Kör lokalt
nx build docs # Produktionsbygge
API
Vid ett produktionsbygge samlas information om komponenternas typescript-typer in och visas med hjälp av en tabell under rubriken API på varje komponentsida.
För snabbare uppstart är detta inaktiverat per default i serve-kommandot, men du kan aktivera det om du behöver se API-tabellerna under utveckling:
DOCUSAURUS_HIDE_API=false nx serve docs
Testa lokalt end-to-end
För att testa komponentbiblioteket i en annan app kan du publicera det till ett lokalt npm-registry:
nx run @midas-ds/source:release:local:dev
Detta startar ett lokalt Verdaccio-registry och publicerar alla paket. Du kan sedan installera dem i ett testprojekt:
npm install @midas-ds/components@latest --registry=http://localhost:4873/
Mer information finns i tools/release-local/README.md.
🌿 Arbetsflöde versionshantering
Vi använder en enkel branchstrategi med en main-branch som alltid ska vara i ett deploybart skick. Utveckling sker i feature- eller bugfix-brancher som sedan mergas in i main. Vi använder inte develop eller andra liknande brancher för att hålla det enkelt och för att passa ett arbetssätt med kontinuerlig integration och leverans (CI/CD).
Ett exempel på hur det kan se ut i praktiken:
Branch
Brancher namnges enligt [feature|bugfix|hotfix|docs|refactor|chore|test]/[scope]/, till exempel feature/button. Scope är valfritt men om det används ska det referera till ett av projekten i monorepot, till exempel components, docs eller theme.
Commit
Commits görs enligt conventional commits. Använd engelska,
imperativ form, definiera type feat|docs|fix|refactor|test|chore|ops... för att avgöra vilken versionsändring du vill göra och scope (project, component) som rubrik för changelog.
Viktigt: Scope börjar alltid med ett av Nx-projekten (components, theme, docs, etc.) för att versionshanteringen ska fungera korrekt. Komponenter eller features anges som andra parametern efter kommatecken.
Se .commitlintrc.js för tillåtna types och scopes.
Exempel:
feat(components, button): add new button variant # Minor bump för components
fix(theme): fix button hover color # Patch för theme
docs: update contribution guide # Ingen bump
# Med body för mer kontext
fix(theme): prevent red color on button hover
Introduce new css variable to automatically
select style based on input type
Innan du skapar en PR, städa gärna commit-historiken med git rebase -i om du har många commits i din feature branch. Guide till git rebase.
🏗️ Designfilosofi och arkitektur
Midas designsystem följer principer från Clean Code och Clean Architecture för att säkerställa hög kvalitet, underhållbarhet och långsiktig stabilitet.
✨ Clean Code-principer
Vi strävar efter ren, läsbar och underhållbar kod:
- Små funktioner och komponenter: Varje komponent har ett tydligt, avgränsat ansvar (Single Responsibility Principle)
- Beskrivande namn: Funktioner, variabler och komponenter har namn som tydligt beskriver vad de gör
- Testbar kod: Kod struktureras för att vara enkel att testa
- DRY (Don't Repeat Yourself): Undvik kodduplicering genom återanvändning och abstraktion
- Inkrementella förbättringar: Lämna koden bättre än du hittade den - fixa gärna problem du ser även om de inte är en del av din uppgift
- Stateless komponenter: Komponenter är i möjlig mån stateless och stödjer designsystemet på ett generiskt sätt