đïž 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
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â
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 |