# SWP Design System - Component Catalog Reference for alle genbrugelige komponenter. **LAV ALDRIG EN NY KOMPONENT HVIS DEN ALLEREDE EKSISTERER HER.** --- ## Page Structure (page.css) | Element | Beskrivelse | Eksempel | |---------|-------------|----------| | `swp-page-container` | Hovedcontainer for side | `...` | | `swp-page-header` | Side header med titel og actions | Flex, space-between | | `swp-page-title` | Titel-wrapper med h1 og p | h1 + subtitle | | `swp-page-actions` | Action buttons i header | Flex gap | | `swp-card` | Standard card wrapper | Border, padding, rounded | | `swp-section-label` | Card section label | Uppercase, 11px, border-bottom | | `swp-section-header` | Wrapper for label + action | Flex, space-between | | `swp-section-action` | Action link i section header | Teal, clickable | | `swp-card-content` | Card indhold | Block | ### Card Header Eksempler **Simpel label (uden action):** ```html Kontakter ... ``` **Label med action:** ```html Dagens bookinger Se alle ... ``` --- ## Stats Components (stats.css) ### Containers | Element | Kolonner | Brug | |---------|----------|------| | `swp-stats-bar` | 4 kolonner | Dashboard stats | | `swp-stats-grid` | 4 kolonner | Grid layout | | `swp-stats-row` | 3 kolonner | Feature pages (Employees, etc.) | ### Stat Card ```html 42 Aktive brugere ``` **Varianter (class):** - `highlight` / `teal` - Teal farve - `success` - Grøn - `warning` / `amber` - Amber/orange - `danger` / `negative` / `red` - Rød - `purple` - Lilla - `highlight filled` - Filled teal baggrund **VIGTIGT:** `swp-stat-value` bruger `font-family: var(--font-mono)` automatisk! --- ## Tabs (tabs.css) ```html Brugere Roller ``` **VIGTIGT:** - Aktiv tab: `class="active"` (IKKE data-active="true") - Tab content: `class="active"` for at vise --- ## Buttons (cash.css) ```html Tilføj ``` **Varianter:** - `primary` - Teal baggrund, hvid tekst - `secondary` - Hvid baggrund, border - `ghost` - Transparent --- ## Badges (cash.css) **ALLE badges bruger `swp-status-badge`** - kun farve og indhold ændres. ```html Tekst ``` **Varianter:** | Class | Farve | Brug | |-------|-------|------| | `approved` | Grøn | Godkendt status | | `active` | Grøn | Aktiv status | | `paid` | Grøn | Betalt status | | `draft` | Amber | Kladde status | | `invited` | Amber | Invitation sendt | | `pending` | Amber | Afventer status | | `owner` | Teal | Ejer rolle | | `admin` | Purple | Admin rolle | | `leader` | Blue | Leder rolle | | `employee` | Grå | Medarbejder rolle | Automatisk dot via `::before` pseudo-element. --- ## Tables - Grid + Subgrid Pattern ### Struktur (ALTID følg dette mønster) ```html Kolonne 1 Kolonne 2 Data 1 Data 2 ``` ### CSS Pattern ```css swp-[feature]-table { display: grid; grid-template-columns: /* definer kolonner her */; } swp-[feature]-table-header, swp-[feature]-table-body { display: grid; grid-column: 1 / -1; grid-template-columns: subgrid; } swp-[feature]-row { display: grid; grid-column: 1 / -1; grid-template-columns: subgrid; align-items: center; } ``` ### Eksisterende tabeller | Feature | Container | Row | CSS fil | |---------|-----------|-----|---------| | Cash | `swp-cash-table` | `swp-cash-table-row` | cash.css | | Employees | `swp-employee-table` | `swp-employee-row` | employees.css | | Salary | `swp-salary-table` | `swp-salary-table-row` | employees.css | | **Data (generisk)** | `swp-data-table` | `swp-data-table-row` | components.css | | Bookings (dashboard) | `swp-booking-list` | `swp-booking-item` | bookings.css | | Notifications | `swp-notification-list` | `swp-notification-item` | notifications.css | | Attentions | `swp-attention-list` | `swp-attention-item` | attentions.css | --- ## Table Cells - Standard Styling ```css /* Header cells */ swp-[feature]-table-header swp-[feature]-cell { font-size: var(--font-size-xs); font-weight: var(--font-weight-semibold); text-transform: uppercase; letter-spacing: 0.5px; color: var(--color-text-secondary); } /* Body cells */ swp-[feature]-cell { padding: var(--spacing-5); font-size: var(--font-size-base); /* ALTID base, ikke sm */ color: var(--color-text); } ``` --- ## Icon Buttons (employees.css) ```html ``` --- ## Edit Forms (employees.css) Key-value display med valgfri redigering. Bruger Grid + Subgrid for alignment. ### Basis struktur ```html Label tekst Værdi Med redigering Redigerbar værdi ``` ### Med select dropdown ```html Vælg type ``` ### Mono-font for tal ```html 131,49 kr ``` --- ## User Info Pattern (employees.css) ```html MJ Maria Jensen maria@example.com ``` **Avatar farver:** (ingen class = teal), `purple`, `blue`, `amber` --- ## Document List (employees.css) Genbruges til dokumenter, certificeringer, kurser og lignende lister. ```html Ansættelseskontrakt.pdf Uploadet 1. aug 2019 Vis ``` **Med badge i stedet for knap:** ```html Balayage Specialist Udløber: 15. juni 2026 Gyldig ``` --- ## Subsection (employees.css) Til gruppering af lister (f.eks. "Gennemførte kurser" / "Planlagte kurser"). ```html Gennemførte kurser ``` --- ## Simple List (employees.css) Simpel liste med tekst + badge (f.eks. planlagt fravær). ```html 23. dec – 2. jan 2026 Ferie ``` --- ## Salary Table (employees.css) Bruger Grid + Subgrid mønsteret. ```html Periode Bruttoløn Januar 2026 34.063,50 kr ``` Rækker har hover-effekt og chevron bliver teal ved hover. --- ## Data Table - Generisk (components.css) Generisk tabel med Grid + Subgrid. **Struktur:** - `swp-data-table` = grid (kolonner i feature CSS) - `swp-data-table-header` = subgrid (celler direkte i) - `swp-data-table-row` = subgrid - `swp-data-table-cell` = celler **Brug:** Wrap i container med klasse der definerer kolonner. ```css /* I feature CSS (f.eks. employees.css) */ .stats-bookings swp-data-table { grid-template-columns: 90px 60px 1fr 1fr 80px 100px 100px; } /* Kolonne-specifik styling med nth-child */ .stats-bookings swp-data-table-row swp-data-table-cell:nth-child(1), .stats-bookings swp-data-table-row swp-data-table-cell:nth-child(2) { font-family: var(--font-mono); color: var(--color-text-secondary); } ``` ```html Kolonne 1 Kolonne 2 Data 1 Data 2 ``` **Kolonne-styling:** Brug `nth-child()` i feature CSS frem for klasser på celler. --- ## Add Button (components.css) Dashed border knap til tilføjelse af elementer. ```html + Upload dokument + Tilføj certificering ``` **Styling:** Dashed border, centreret, hover → teal border og tekst. --- ## Design Tokens (design-tokens.css) ### Farver | Token | Brug | |-------|------| | `--color-teal` | Primary brand, success | | `--color-green` | Success, positive | | `--color-amber` | Warning, pending | | `--color-red` | Error, danger | | `--color-purple` | Special, AI | | `--color-blue` | Info | ### Spacing ```css --spacing-1: 2px; --spacing-2: 4px; --spacing-3: 6px; --spacing-4: 8px; --spacing-5: 10px; --spacing-6: 12px; --spacing-7: 14px; --spacing-8: 16px; --spacing-10: 20px; --spacing-12: 24px; ``` ### Font Sizes ```css --font-size-xs: 11px; --font-size-sm: 12px; --font-size-md: 13px; --font-size-base: 14px; /* Standard body text */ --font-size-lg: 16px; --font-size-xl: 18px; --font-size-2xl: 20px; --font-size-3xl: 22px; ``` ### Font Families ```css --font-family: 'Poppins', sans-serif; --font-mono: 'JetBrains Mono', monospace; /* Til tal/værdier */ ``` --- ## Checklist for Ny Side 1. [ ] Læs denne fil 2. [ ] List UI elementer der skal bruges 3. [ ] Match hver element med eksisterende komponent 4. [ ] Dokumenter kun NYE elementer der skal oprettes 5. [ ] Opret feature CSS med header der angiver genbrugte komponenter 6. [ ] Brug `var(--font-size-base)` for body text 7. [ ] Brug `var(--font-mono)` kun for tal/værdier --- ## Fil Reference | Fil | Indhold | |-----|---------| | `design-tokens.css` | Farver, spacing, fonts, shadows | | `design-system.css` | Base resets, typography | | `page.css` | Page structure | | `components.css` | Buttons, badges, cards, section-label, add-button, avatars, icon-btn, data-table | | `stats.css` | Stat cards, stat rows | | `tabs.css` | Tab bar, tab content | | `employees.css` | Employee table, user info, edit forms, document lists, salary table | | `bookings.css` | Booking list items | | `notifications.css` | Notification items | | `attentions.css` | Attention items |