Hoppa till huvudinnehÄll

đŸ—ïž 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:

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:

  1. Kan det komponeras av befintliga byggstenar? Ofta gÄr det att kombinera existerande komponenter för att lösa behovet.
  2. Ä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.
  3. 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
PaketVersionBeskrivning
@midas-ds/componentsnpmReact-komponenter
@midas-ds/themenpmDesign tokens och CSS
@midas-ds/datepicker-stylesnpmStyling för react-datepicker
@midas-ds/select-stylesnpmStyling för react-select
@midas-ds/table-stylesnpmStyling för TanStack Table