đïž 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
đïž Clean Architecture-principerâ
Vi tillÀmpar principer frÄn clean architecture för att skapa ett underhÄllbart och stabilt komponentbibliotek:
- Separera styling frÄn beteende: AnvÀnd headless-bibliotek för logik och tillgÀnglighet, applicera endast visuell stil
- Minimera beroenden: HÄll komponenter löst kopplade och undvik onödiga beroenden mellan dem
- Testbarhet: Komponenter Àr enkla att testa isolerat utan omfattande setup
- Stabilitet över flexibilitet: VÀlj stabila, vÀlunderhÄllna beroenden framför att bygga egen komplexitet
đŠ Beroendestrategi: Headless-bibliotekâ
React Aria Components (RAC) - Förstahandsvalâ
Komponenter byggs i första hand pÄ React Aria Components. React Aria tillhandahÄller:
- TillgÀnglighet: FullstÀndigt stöd för WCAG, skÀrmlÀsare och tangentbordsnavigation
- Plattformsstöd: Touch, mouse och keyboard fungerar sömlöst
- Produktionstestad: VÀltestad kod frÄn Adobe som anvÀnds i stora produktionsmiljöer
- Internationalisering: Inbyggt stöd för olika sprÄk och lokalisering
Viktigt: Följ React Aria's API och mönster sÄ nÀra som möjligt. Undvik att avvika för mycket frÄn originalet dÄ det:
- FörsvÄrar uppgraderingar nÀr React Aria uppdaterar sitt API
- Ăkar underhĂ„llsbördan för teamet
- Riskerar att vi bygger egen komplexitet som redan Àr löst
Om du behöver anpassa beteende, frÄga dig först om React Aria redan har en lösning via props, composition eller hooks.
Alternativa headless-bibliotekâ
NÀr funktionalitet inte finns i React Aria Components, vÀlj andra vÀlunderhÄllna headless-bibliotek.
Exempel pÄ bibliotek vi redan anvÀnder:
- TanStack Table: För avancerad tabellhantering
- React Select: För komplexa select-komponenter
Kriterier för att vÀlja ett bibliotek:
- VÀlunderhÄllet och aktivt utvecklat
- Headless (ingen inbyggd styling)
- Stort community och bra dokumentation
- TypeScript-stöd
- Stabilt API med tydlig versionshantering
- Produktionstestat och anvÀnds av mÄnga projekt
Tveka inte att föreslÄ andra vÀlunderhÄllna headless-bibliotek om de passar anvÀndarfallet bÀttre!
Undvik egenutvecklade lösningarâ
Bygg inte egen logik för tangentbordshantering, focus management, ARIA eller accessibility-funktionalitet. Egenutvecklade lösningar Àr svÄra att fÄ rÀtt, ökar underhÄllsbördan dramatiskt och riskerar att introducera tillgÀnglighetsbrister.
Innan du bygger nÄgot eget, frÄga dig:
- Kan det komponeras av befintliga byggstenar? Ofta gÄr det att kombinera existerande komponenter för att lösa behovet.
- Ăr det tillrĂ€ckligt generiskt? Om lösningen Ă€r vĂ€ldigt specifik för ett enskilt projekt kanske den inte hör hemma i det delade biblioteket - implementera den dĂ„ projektspecifikt istĂ€llet.
- Finns det i ett headless-bibliotek? Kolla React Aria och andra bibliotek innan du bygger eget.
NÀr Àr egenutvecklat OK? Endast för ren visuell styling eller smÄ, vÀldefinierade utilities som inte existerar i headless-bibliotek.
đŠ Publicerade paketâ
Midas Àr uppdelat i flera paket med tydliga ansvarsomrÄden:
- components - Alla komponenter baserade pÄ React Aria samlas i ett paket för enkel installation och uppdatering
- theme - Design tokens och CSS-variabler Àr separerade för flexibel beroendehantering (du kan anvÀnda tokens utan komponenter)
- Styling för tredjepartsbibliotek - NÀr vi stödjer externa bibliotek (react-datepicker, react-select, TanStack Table) publiceras styling som separata paket sÄ du bara installerar det du behöver
| Paket | Version | Beskrivning |
|---|---|---|
| @midas-ds/components | React-komponenter | |
| @midas-ds/theme | Design tokens och CSS | |
| @midas-ds/datepicker-styles | Styling för react-datepicker | |
| @midas-ds/select-styles | Styling för react-select | |
| @midas-ds/table-styles | Styling för TanStack Table |