@klodd/ds 3.3.1 → 3.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/SKILL.md +56 -0
  2. package/bin/klodd-ds.js +25 -0
  3. package/bin/precache.js +43 -0
  4. package/bin/sync.js +33 -0
  5. package/bin/verify.js +66 -0
  6. package/css/00-primitives.css +13 -3
  7. package/css/base/typography.css +3 -5
  8. package/css/components/dropdown.css +1 -1
  9. package/css/components/setting-row.css +1 -1
  10. package/css/components/tab-bar.css +1 -1
  11. package/css/components/tooltip.css +1 -1
  12. package/css/utilities.css +101 -67
  13. package/js/hero-roll.js +5 -5
  14. package/package.json +12 -3
  15. package/references/01-tokens.md +182 -0
  16. package/references/02-components.md +260 -0
  17. package/references/03-quality-bar.md +238 -0
  18. package/references/04-locked-decisions/0001-three-layer-token-architecture.md +41 -0
  19. package/references/04-locked-decisions/0002-bem-naming.md +37 -0
  20. package/references/04-locked-decisions/0003-radix-colors-oklch.md +39 -0
  21. package/references/04-locked-decisions/0004-pixel-numeric-spacing.md +31 -0
  22. package/references/04-locked-decisions/0005-data-app-theming.md +42 -0
  23. package/references/04-locked-decisions/0006-mauve-neutral.md +40 -0
  24. package/references/04-locked-decisions/0007-font-weight-400-500.md +46 -0
  25. package/references/04-locked-decisions/0008-npm-package-distribution.md +40 -0
  26. package/references/05-open-decisions/0001-tx-row-to-list-row-migration-CLOSED.md +80 -0
  27. package/references/05-open-decisions/0002-parallel-classnames-cleanup-CLOSED.md +75 -0
  28. package/references/05-open-decisions/0003-js-duplicates-migration-CLOSED.md +79 -0
  29. package/references/05-open-decisions/0004-halsomentorn-legacy-css.md +51 -0
  30. package/references/05-open-decisions/0005-cat-class-location-CLOSED.md +37 -0
  31. package/references/05-open-decisions/0006-bar-kind-template-migration-CLOSED.md +75 -0
  32. package/references/05-open-decisions/0007-ekonom-base-import-gap-CLOSED.md +111 -0
  33. package/references/05-open-decisions/0008-legacy-token-migration.md +73 -0
@@ -0,0 +1,41 @@
1
+ # 0001 - Tre-lagers token-arkitektur
2
+
3
+ ## Status
4
+ Locked. Daterat 2026-04-26 (sprint 26 i Ekonom + sprint 1 i klodd-ds).
5
+
6
+ ## Context
7
+ Designsystem har tva ytterligheter: ingen token-arkitektur (varje
8
+ komponent har egna farg-/spacing-konstanter, omoljligt att underhalla)
9
+ eller djupt-nestade token-hierarkier (5+ lager primitive→semantic→domain
10
+ →component→variant, omoljligt att resonera om). Vi behover en
11
+ arkitektur som:
12
+
13
+ - Tilllater app-byte utan komponent-omskrivning
14
+ - Skiljer "implementation detail" (fargvarden) fran "design intention"
15
+ (vad fargen betyder)
16
+ - Har klart, regelbundet ansvar per lager
17
+
18
+ ## Decision
19
+ Tre lager med strikt inkapsling:
20
+
21
+ ```
22
+ 00-primitives.css raa varden (Radix OKLCH-ramper, exakta pixelvarden)
23
+ 10-semantic.css komponenter laser hardefran
24
+ apps/<app>.css per-app accent + surface-overrides
25
+ ```
26
+
27
+ Komponenter refererar **bara** semantic tokens. App/-filerna ar enda
28
+ platsen som mappar primitives till semantic.
29
+
30
+ ## Consequences
31
+ - + Ny app introduceras via 5-15 rader CSS, inte komponent-fork
32
+ - + Bytte fargramp eller fargmodell (Radix → annan) andrar bara primitives
33
+ - + Komponentkod ar lasbar utan att forsta hur app-byte fungerar
34
+ - − Tva lagers indirektion gor debugging marginellt langsammare. CSS
35
+ DevTools visar resolved-varden anda
36
+ - − Ny developer maste lara sig konventionen: "ALDRIG --gray-N i
37
+ komponent". Dokumenterat i `03-quality-bar.md`.
38
+
39
+ ## Implementation
40
+ Se `01-tokens.md` for detaljerad token-referens.
41
+ Se `03-quality-bar.md` regel #7 for app-overrides-konventionen.
@@ -0,0 +1,37 @@
1
+ # 0002 - BEM-namngivning genomgaende
2
+
3
+ ## Status
4
+ Locked. v3.0.0 cementerade detta - alla nya komponenter foljer BEM.
5
+
6
+ ## Context
7
+ Komponentbibliotek har tre vanliga namngivningskonventioner:
8
+
9
+ 1. **Flat hyphen**: `.btn-primary`, `.card-elevated` (Bootstrap-stil)
10
+ 2. **BEM**: `.btn--primary`, `.card--elevated` (block-element-modifier)
11
+ 3. **Atomic/utility**: `.text-blue-500`, `.p-4` (Tailwind-stil)
12
+
13
+ Vi behover en konvention som:
14
+ - Halls konsekvent over 33+ komponenter
15
+ - Halls lasbar utan dokumentation (ny developer/CC-session ska
16
+ forsta struktur fran namnet)
17
+ - Forhindrar specificity-overraskningar
18
+
19
+ ## Decision
20
+ **BEM genomgaende**: `.block`, `.block__element`, `.block--modifier`,
21
+ `.block__element--modifier`. Alla 33+ komponenter foljer detta.
22
+
23
+ ## Consequences
24
+ - + Specificity-balans: alla klasser ar 0,1,0 (ingen cascade-overraskning)
25
+ - + Etablerad branschstandard - manga developer-erfarenheter
26
+ - + LLM-vanligt: en CC-session forstaт `.btn--primary` som modifier
27
+ utan att lasa CSS:en
28
+ - + Forhindrar "magic specificity" via descendant-selektorer
29
+ (`.card .btn` ar 0,2,0 - omojligt att override)
30
+ - − Mer text att skriva an `.btn-primary` (extra `--`)
31
+ - − Migration kraver template-omskrivning i app-repona (122
32
+ references for tx-row, ~50 for triage-* etc.)
33
+
34
+ ## Migration
35
+ v3.0.0 introducerade BEM for nya komponenter. Befintliga app-repon
36
+ har gradvis migration via per-template-uppdatering. Open punkter i
37
+ `05-open-decisions/0001-tx-row-to-list-row-migration.md`.
@@ -0,0 +1,39 @@
1
+ # 0003 - Radix Colors via OKLCH
2
+
3
+ ## Status
4
+ Locked.
5
+
6
+ ## Context
7
+ Designsystem behover en farg-ramp som:
8
+ - Ar perceptuellt jamn (varje steg upplevs som lika storre forandring)
9
+ - Har dokumenterad rollkarta (steg N betyder X)
10
+ - Klarar WCAG-kontrast utan handkalibrering
11
+ - Ar tillganglig via valetablerade tooling/bibliotek
12
+
13
+ Tva alternativ:
14
+ 1. Hand-kalibrerade OKLCH-varden (tar tid, riskerar subtila
15
+ kontrast-buggar)
16
+ 2. Officiella Radix Colors (pre-kalibrerade)
17
+
18
+ ## Decision
19
+ Anvand **officiella Radix Colors dark-skalor** rakt av:
20
+ - Mauve (neutral - se ADR 0006)
21
+ - Blue Dark (Jubb accent)
22
+ - Plum Dark (Ekonom accent)
23
+ - Violet Dark (forberedd for framtida app)
24
+ - Green/Amber/Red Dark (status)
25
+
26
+ Plus alpha-skalor (Mauve/Blue/Plum) for transparency-tints.
27
+
28
+ Alpha-blending sker via `color-mix(in oklch, ...)` for ad-hoc-niver -
29
+ INTE via hardkodad rgba.
30
+
31
+ ## Consequences
32
+ - + Pre-kalibrerade WCAG-varden (steg 11 mot 1-2 = 4.5:1 garanterat)
33
+ - + Dokumenterad rollkarta (3 = vila, 4 = hover, 5 = active osv.)
34
+ - + OKLCH ger perceptuellt korrekt color-mix-blending
35
+ - + Modern browser-stod (Chrome 111+, Safari 16.4+, Firefox 113+) kravs
36
+ redan av Radix
37
+ - − Vi har inte fysisk kontroll over vardena - om Radix andrar dem maste
38
+ vi reagera
39
+ - − Mauve passar inte for framtida grön/orange-accent-app (se ADR 0006)
@@ -0,0 +1,31 @@
1
+ # 0004 - Pixel-numerisk spacing/typografi/radius
2
+
3
+ ## Status
4
+ Locked.
5
+
6
+ ## Context
7
+ Spacing-token-konventioner i designsystem:
8
+ 1. **Ordinala namn**: `--space-md`, `--space-lg` (Tailwind/Material-stil)
9
+ 2. **Fibonacci/multiplier**: `--space-1` (4px), `--space-2` (8px), etc.
10
+ 3. **Pixel-numerisk**: `--space-12` = 12px, `--fs-14` = 14px
11
+
12
+ Ordinal-namn gor det svart att veta exakt vad `--space-md` ger - kraver
13
+ mappning eller dokumentation. Multiplier-namn gor det svart att veta
14
+ om `--space-3` ar 12px eller 16px. Pixel-numerisk eliminerar gissning.
15
+
16
+ ## Decision
17
+ **Pixel-numeriska tokens**: `--space-N` dar N = exakt antal pixlar.
18
+
19
+ Tillgangliga steg: 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 28, 32,
20
+ 40, 48, 56, 64, 80.
21
+
22
+ Samma konvention for `--fs-N` (font-size) och `--radius-N` (radius).
23
+
24
+ ## Consequences
25
+ - + LLM-vanligt: `--space-12 = 12px` ar trivialt att resonera om
26
+ - + Designerns Figma-varde matchar token-namnet 1:1 utan mappning
27
+ - + Forhindrar ordinal-explosion (md/lg/xl/2xl/3xl-stelhet)
28
+ - + Att lagga till nya steg ar OK om det behovs - bara ett nytt token-namn
29
+ - − Branschstandard ar ordinala namn (Tailwind, Material, Bootstrap).
30
+ Designer som kommer fran de ekosystemen far anpassa sig
31
+ - − Lite mer text an `--space-md` (men trivialt)
@@ -0,0 +1,42 @@
1
+ # 0005 - Data-attribut-baserad theming
2
+
3
+ ## Status
4
+ Locked.
5
+
6
+ ## Context
7
+ Multi-app theming kan loseas pa flera satt:
8
+ 1. **CSS-in-JS** (varje app importerar olika theme-objekt)
9
+ 2. **Build-time-substitution** (separat build per app)
10
+ 3. **CSS-variables med data-attribut** (en build, runtime-byte)
11
+
12
+ Vi behover en losning som:
13
+ - Inte kraver build-time-tools (Klodd-apparna ar Python/FastAPI, inte Node)
14
+ - Tilllater preview av flera teman pa samma sida (designsystem-styleguide)
15
+ - Inte kraver komponentkod-ekvivalenter per app
16
+
17
+ ## Decision
18
+ **`data-app="<app>"` pa `<html>`**. CSS-variables i `apps/<app>.css`
19
+ overrides default-tokens via `[data-app="..."]`-selector.
20
+
21
+ ```html
22
+ <html data-app="jubb"> <!-- Blue accent + Mauve neutral -->
23
+ <html data-app="ekonom"> <!-- Plum accent + Plum surface + varma vit text -->
24
+ ```
25
+
26
+ Komponenter laser bara `--accent-*` (och andra semantic tokens) - inte
27
+ appen.
28
+
29
+ ## Consequences
30
+ - + Strikt komponentaterbruk: en ANDRing i komponentens CSS landar
31
+ omedelbart i alla appar
32
+ - + App-byte ar single-attribute-flip - same-document SPA-byte mellan
33
+ apps (om relevant) blir trivialt
34
+ - + Designsystem-styleguide kan visa flera teman pa samma sida
35
+ (`<section data-app="jubb">` + `<section data-app="ekonom">`)
36
+ - + Inga Sass-mixins eller PostCSS-plugins - ren CSS
37
+ - − Apparna maste dela komponentbibliotek. Om Ekonom och Jubb behover
38
+ fundamentalt olika `.btn`-styling skulle vi behova splittra. Inte
39
+ planerat
40
+ - − Specificity: `[data-app="jubb"] { --accent-9: ... }` har 0,1,1
41
+ vilket ar mer specifikt an `:root { --accent-9: ... }`. Cascade
42
+ fungerar dock korrekt sa inget problem i praktiken
@@ -0,0 +1,40 @@
1
+ # 0006 - Mauve som neutral (inte ren gray)
2
+
3
+ ## Status
4
+ Locked.
5
+
6
+ ## Context
7
+ Neutral-skalan i designsystem ar viktigaste valet - det styr hur
8
+ ALLT app-text och bakgrund ser ut. Tre vanliga val:
9
+
10
+ 1. **Ren gray/slate** (kall, "tech")
11
+ 2. **Mauve / olive** (lila-tonad, varmare)
12
+ 3. **Stone / sand** (varma jordtoner)
13
+
14
+ Vi behover en neutral som:
15
+ - Kompletterar bade Blue (Jubb) och Plum (Ekonom) accents
16
+ - Inte klingar med nagon av accenterna
17
+ - Ar Radix-officiell (per ADR 0003)
18
+
19
+ ## Decision
20
+ **Mauve** som neutral. `--gray-1` till `--gray-12` mappas till Radix
21
+ Mauve Dark, INTE ren gray eller slate.
22
+
23
+ ## Consequences
24
+ - + Radix officiella rekommendation som komplement till Blue och Plum -
25
+ redan testat i kombinationer
26
+ - + Subtle lila-tonad ger varmare bottenton som matchar bagge
27
+ app-accenterna
28
+ - + Konsistent visuellt sprak over apparna - bagge har samma neutral
29
+ - − Mauve passar INTE for en framtida gron- eller orange-accent-app.
30
+ Inte planerat - om det blir aktuellt valjer vi neutral utifran den
31
+ appens accent vid den punkten (kanske separat data-app + neutral-
32
+ override)
33
+ - − Vissa anvandare kan kanna sig ovana med varmare neutral - branschen
34
+ ar dominerad av kallare gray/slate
35
+
36
+ ## Notering
37
+ Variabeln heter `--gray-N` (inte `--mauve-N`) eftersom det ar den
38
+ funktionella rollen, inte fargen. Implementationen sker via Mauve-
39
+ varden men namnet ar "gray" sa komponenter inte vet vilken neutral
40
+ de anvander.
@@ -0,0 +1,46 @@
1
+ # 0007 - Font-weight 400/500 - inga 600+
2
+
3
+ ## Status
4
+ Locked. Ett dokumenterat undantag for display-siffror (hero-roll).
5
+
6
+ ## Context
7
+ Font-weight skapar visuell hierarki men for manga niver ger
8
+ inkonsekvens:
9
+ - 400 (regular)
10
+ - 500 (medium)
11
+ - 600 (semibold)
12
+ - 700 (bold)
13
+ - 800 (extrabold)
14
+
15
+ Med 5 niver tappar designern overblick - en designer valjer 600 nagon
16
+ gang, en annan 700, snart finns alla varianter och inget moverar
17
+ hierarkin.
18
+
19
+ ## Decision
20
+ **Bara `--fw-regular` (400) och `--fw-medium` (500)** i designsystem.
21
+
22
+ Undantag: `.hero-amount` (display-siffror i hero-roll) har explicit
23
+ `font-weight: 600`. Dokumenterat i `components/hero-roll.css` med
24
+ kommentar.
25
+
26
+ ## Consequences
27
+ - + Tva-steg ger tillrackligt med visual hierarchy: medium ar emphasis,
28
+ regular ar default
29
+ - + Forhindrar inkonsistens (alla designers/utvecklare valjer fran samma
30
+ set)
31
+ - + Mindre WOFF2-payload (faerre weights att hamta fran SF Pro fallback
32
+ / system-fonts)
33
+ - − Bold-text-effekt ar narvarande pa display-skala. Vid framtida feature-
34
+ arbete dar bold-text behovs (banners-hero?), maste motiveras +
35
+ dokumenteras
36
+
37
+ ## Undantaget i detalj
38
+ `.hero-amount[data-animate-roll]` ar 80px display-siffror som ska
39
+ visualiseras med tyngd. UI-text pa 14-22px har inte samma behov.
40
+ Undantaget ar harkodat i `components/hero-roll.css` och dokumenterat
41
+ i `01-tokens.md` (Typografi-sektionen).
42
+
43
+ ## Future
44
+ Om en framtida `.banner--hero` eller `.heading-display` behover bold,
45
+ flytta undantaget till en explicit modifier-token (`--fw-display: 600`)
46
+ istallet for inline-styling.
@@ -0,0 +1,40 @@
1
+ # 0008 - npm-distribution som CSS-only (+ JS)
2
+
3
+ ## Status
4
+ Locked.
5
+
6
+ ## Context
7
+ Designsystem kan distribueras flera vagar:
8
+ 1. **Git-submodule** (clone som dependency)
9
+ 2. **Bundled JS-package** (importeras via npm + bygg-tid-bundle)
10
+ 3. **CSS-only npm-package** (importeras via npm + kopieras direkt)
11
+
12
+ Klodd-apparna ar Python/FastAPI - inte Node/Webpack. Railway deployar
13
+ utan Node-runtime. Vi behover en losning som:
14
+ - Inte kraver Node-build i prod
15
+ - Inte kraver bygg-tid-tools eller Sass/PostCSS
16
+ - Halls reproducibel via versions-lasning
17
+
18
+ ## Decision
19
+ **Distribution som rena CSS-filer + ren JS-filer via @klodd/ds pa npm.**
20
+
21
+ App-repona installerar via `npm install @klodd/ds@<version>`, sedan
22
+ ett build-script (`npm run build:ds`) som kopierar filer rakt av till
23
+ `app/static/css/` och `app/static/js/ds/`. Inga Sass-kompileringar,
24
+ inga PostCSS-plugins, inga JS-build-bundles.
25
+
26
+ App-repona committar de kopierade filerna sa Railway deployar utan
27
+ Node runtime. node_modules/ ar gitignored.
28
+
29
+ ## Consequences
30
+ - + Bygg-tid noll i Railway-deploys
31
+ - + Versioner laekta via package.json (`^3.0.3`)
32
+ - + Reproducibel deploy utan node_modules pa Railway-side
33
+ - + Inga komplexa build-konfigurationer
34
+ - − Vi kan inte anvanda Sass-mixins eller PostCSS-plugins. Allt maste
35
+ fungera med ren CSS + `@media`/`@import`/`@layer`/`@supports`
36
+ - − Versions-uppgradering ar tva-stegs (npm install + build:ds + commit
37
+ + push). Lite mer tropisk an automatic JS-bundling
38
+ - − CSS-filerna lever bade i klodd-ds-repo OCH i app-repona (commited
39
+ efter build:ds). Drift i app-repots committed-fil mot paketets
40
+ publicerade version maste hanteras
@@ -0,0 +1,80 @@
1
+ # 0001 - .tx-row → .list-row migration i Ekonom
2
+
3
+ ## Status
4
+ **Closed 2026-05-08** via Option B (big-bang migration). Ekonom-commit
5
+ [c4f0f79](https://github.com/drawn124578/ekonom/commit/c4f0f79). 9 templates +
6
+ 4 CSS-filer migrerade i en sprint. 94 byten totalt (briefens 122-siffra
7
+ inkluderade .cat-tx-* som är separat komponent och ej omfattades).
8
+
9
+ Paketets faktiska BEM-namn vann över briefens varianter:
10
+ - .tx-desc -> .list-row__desc (briefen sade __title)
11
+ - .tx-amount -> .list-row__amount (briefen sade __value)
12
+ - .tx-list -> .list (briefen sade .list-row-group)
13
+
14
+ components/list-row.css aktiverad i bundles/ekonom.css. Gamla TX-ROW-
15
+ blocket i components.css raderat (rad 683-762). Pytest 636/636.
16
+
17
+ ## Context
18
+ Ekonom har 122 references till `.tx-row` / `.tx-icon` / `.tx-body` /
19
+ `.tx-desc` / `.tx-amount` / `.tx-date` / `.tx-meta` / `.tx-list` over
20
+ 8 templates:
21
+
22
+ - `app/templates/avstamning.html`
23
+ - `app/templates/kategorier.html`
24
+ - `app/templates/privat.html`
25
+ - `app/templates/bolan.html`
26
+ - `app/templates/review_queue.html`
27
+ - `app/templates/upload_preview.html`
28
+ - `app/templates/avi_preview.html`
29
+ - `app/templates/partials/_pending_icon.html`
30
+
31
+ Klassnamnen `.tx-*` ar transaction-domanlika (transaction = bokforing-
32
+ domanen). Generaliserat namn `.list-row` finns redan i paketets
33
+ `components/list-row.css` med BEM-konvention.
34
+
35
+ ## Considered options
36
+
37
+ ### Option A: Per-template migration over flera sprintar
38
+ **Pros:**
39
+ - Lag risk for visuell regression
40
+ - Kan testas per vy
41
+ - Platta migrations-dependencies
42
+ **Cons:**
43
+ - Drar ut over tid
44
+ - Kraver att gamla `.tx-*` aliases halls levande i `ds/components.css`
45
+ parallellt med nya `.list-row__*` definitioner
46
+
47
+ ### Option B: Big-bang migration i en sprint
48
+ **Pros:**
49
+ - Snabbt klart
50
+ - Inga aliases att underhalla
51
+ **Cons:**
52
+ - 122 byten + matching JS-references (kategori-flytt, exclude-toggle)
53
+ + selektor-andringar i `ds/components.css` + `ds/ekonom.css` ar
54
+ hog risk
55
+ - Visuell regression svar att fanga utan visuell QA per vy
56
+
57
+ ### Option C: Behall `.tx-row` som Ekonom-specifik klass + lagga till
58
+ `.list-row` som paritets-namn (paketets klass aktiverad globalt)
59
+ **Pros:**
60
+ - Inga template-andringar i Ekonom
61
+ - Paketets `.list-row` blir tillganglig for Jubb och framtida apps
62
+ **Cons:**
63
+ - Driften mellan apparna fortsatter (Ekonom anvander `.tx-*`, Jubb
64
+ hypotetiskt skulle anvanda `.list-row`)
65
+ - Duplicering i `ds/components.css` (existing `.tx-*` block) +
66
+ paketet (`.list-row*` block) - bagge styler list-rader
67
+
68
+ ## Pending decision criteria
69
+ - Sprint-prioritering: ar paritets-renstad varderad nog att kosta
70
+ template-arbete?
71
+ - Risk-tolerans: kan vi ha en sprint dedikerad till migration utan
72
+ feature-arbete?
73
+ - Long-term-direction: ska Ekonom adoptera paketets BEM-namn helt
74
+ eller behalla sin Ekonom-specifika namnkonvention?
75
+
76
+ ## Notes
77
+ - Paketets `.list-row` (BEM) finns redan i v3.0.0+ - inga ytterligare
78
+ paket-andringar behovs
79
+ - Migration kan testas pa en template forst (avstamning.html) som
80
+ pilot-test
@@ -0,0 +1,75 @@
1
+ # 0002 - Parallella klassnamn pa profile-edit i Ekonom
2
+
3
+ ## Status
4
+ **Closed 2026-05-08** via Option C (acceptera paketets defaults). Ekonom-
5
+ commit [21e4cfe](https://github.com/drawn124578/ekonom/commit/21e4cfe).
6
+ Flat-klasser .profile-name-* borttagna fran jag.html. ekonom.css rad
7
+ 832-884 (hela .profile-name-* blocket) raderat. components.css selektor
8
+ .profile-panel-centered .profile-name-row -> .inline-edit (behaller
9
+ centrering-styling, byter selektor). Pytest 636/636.
10
+
11
+ ## Context
12
+ Ekonoms `app/templates/jag.html` har for tillfallet bade BEM (paketets
13
+ `.inline-edit`) och flat (Ekonom-egen `.profile-name-edit`) klassnamn
14
+ parallellt:
15
+
16
+ ```html
17
+ <p class="heading inline-edit profile-name-row">
18
+ <span class="inline-edit__text profile-name-label" ...>...</span>
19
+ <button class="inline-edit__btn profile-name-edit" ...>...</button>
20
+ </p>
21
+ <form class="inline-edit__form profile-name-form" ...>
22
+ <input class="inline-edit__input profile-name-input" ...>
23
+ </form>
24
+ ```
25
+
26
+ Den parallella konstruktionen ar en migrations-bro - befintlig CSS i
27
+ `ds/ekonom.css` styler de gamla flat-klasserna, medan paketets
28
+ `inline-edit.css` styler de nya BEM-klasserna. Att radera de gamla
29
+ flat-klasserna nu skulle bryta visuell rendering eftersom Ekonoms
30
+ ds/ekonom.css har specifik styling for `.profile-name-edit` /
31
+ `.profile-name-input` etc. (med Ekonom-specifika margins, fonts,
32
+ focus-states) som inte exakt matchar paketets default.
33
+
34
+ ## Considered options
35
+
36
+ ### Option A: Stada upp i samma sprint som tx-row-migrationen (#0001)
37
+ **Pros:**
38
+ - Naturlig paritetsstad - bagge migrationer berorer `ds/ekonom.css`
39
+ - Minimerar antal touch-events pa filen
40
+ **Cons:**
41
+ - Beror sprint-prioriteringen for #0001
42
+
43
+ ### Option B: Utoka paketets `.inline-edit__btn` med modifiers som matchar
44
+ Ekonoms befintliga (t.ex. `.inline-edit__btn--small` for 28x28-cirkel)
45
+ **Pros:**
46
+ - Bevarar Ekonoms exakta visuella beteende utan klass-byte
47
+ - Kan goras i isolation utan template-andringar
48
+ **Cons:**
49
+ - Bumpa paketets minor-version
50
+ - Lagger till "Ekonom-specifik" modifier i ett paket som ska vara
51
+ app-agnostiskt
52
+ - Inte sakert att modifierna ar generella nog att rattfardiga
53
+ paket-niva
54
+
55
+ ### Option C: Acceptera de visuella defaulterna fran paketets
56
+ `.inline-edit` och radera Ekonom-specific styling i `ds/ekonom.css`
57
+ **Pros:**
58
+ - Stadar upp helt
59
+ - Standardiserar pa paketets default
60
+ **Cons:**
61
+ - Kan ge mindre visuell regression om Ekonoms current styling
62
+ skiljer sig fran paketets default
63
+ - Kraver visuell verifiering pa /jag-vyn
64
+
65
+ ## Pending decision criteria
66
+ - Visuell paritets-test mellan paketets `.inline-edit__btn` default
67
+ och Ekonoms current `.profile-name-edit` styling
68
+ - Om matchar: kor Option C
69
+ - Om skiljer betydligt: vag mot Option B
70
+
71
+ ## Notes
72
+ - Paketets `inline-edit.css` har `.inline-edit__form[hidden]` regel
73
+ (v3.0.1) plus globalt `[hidden] { display: none !important }`
74
+ i `base/pwa.css` (v3.0.2) sa hidden-attributet alltid respekteras
75
+ oavsett kvar-staende styling
@@ -0,0 +1,79 @@
1
+ # 0003 - JS-dublering: bar-styles + hero-roll i bagge appar
2
+
3
+ ## Status
4
+ **Closed 2026-05-08 (Ekonom)** via Option A (migration via base.html-
5
+ uppdatering). Ekonom-commit [afebbec](https://github.com/drawn124578/ekonom/commit/afebbec).
6
+
7
+ base.html: <script src="/static/js/{bar-styles,hero-roll}.js"> bytt till
8
+ /static/js/ds/-versioner. SW PRECACHE_URLS uppdaterad. App-egen kopior
9
+ raderade (app/static/js/bar-styles.js + app/static/js/hero-roll.js).
10
+ Pytest 636/636.
11
+
12
+ Jubb status: kvarvarande oppen - kan stangas i samma monster nar Jubb
13
+ faktiskt anvander dem (icke-blockande for narvarande).
14
+
15
+ ## Context
16
+ Bade Jubb och Ekonom har for tillfallet `bar-styles.js` och
17
+ `hero-roll.js` BADE som app-egen JS i `app/static/js/` OCH som paketets
18
+ versioner i `app/static/js/ds/`:
19
+
20
+ ```
21
+ Jubb:
22
+ app/static/js/bar-styles.js (lokal, laddad via base.html)
23
+ app/static/js/ds/bar-styles.js (paketet, ej laddad)
24
+ app/static/js/hero-roll.js (lokal, laddad)
25
+ app/static/js/ds/hero-roll.js (paketet, ej laddad)
26
+
27
+ Ekonom:
28
+ app/static/js/bar-styles.js (lokal, laddad)
29
+ app/static/js/ds/bar-styles.js (paketet, ej laddad)
30
+ ... osv
31
+ ```
32
+
33
+ App-egen versionen ar vad `base.html` refererar idag. Paketets versioner
34
+ i `js/ds/` ar "redo att aktivera" via `KloddDS.init()` men ej kopplade
35
+ annu.
36
+
37
+ ## Considered options
38
+
39
+ ### Option A: Migration via base.html-uppdatering till `js/ds/`-paths
40
+ **Pros:**
41
+ - Single source of truth (paketets version vinner)
42
+ - Forhindrar drift mellan app-egen och paket-version
43
+ - Aktiverar v3.0.0+ forbattringar i app-egen kod (t.ex. om paketets
44
+ hero-roll.js far bug-fix gar den till bagge apparna automatiskt)
45
+ **Cons:**
46
+ - SW VERSION-bump kravs (cache-bust)
47
+ - Visuell verifiering per app
48
+
49
+ ### Option B: Behall app-egen versions och radera paketets js/ds/-kopior
50
+ fran build:ds
51
+ **Pros:**
52
+ - Inga template-andringar
53
+ - Snabbare path
54
+ **Cons:**
55
+ - Driften kan fortsatta - om paketets hero-roll forbattras far apparna
56
+ inte automatisk uppgradering
57
+ - Bryter mot scope-beslutet "alla komponenter och delad JS in i paketet"
58
+ (briefen 2026-05-07)
59
+
60
+ ### Option C: Explicit migrate JS per app i samma sprint som adoptering
61
+ av nya features
62
+ **Pros:**
63
+ - Migration sker nar det finns ett konkret behov
64
+ - Lag isolerad risk
65
+ **Cons:**
66
+ - Drar ut over tid
67
+
68
+ ## Pending decision criteria
69
+ - Stabilitets-prioritet: ar app-egen versionerna stabila nog att risken
70
+ att switcha till paketets ar varderad?
71
+ - Future-feature-pull: kommer paketets versioner att fa nya features
72
+ som apparna vill ha?
73
+
74
+ ## Notes
75
+ - Paketets `js/ds/index.js` har `KloddDS.init({...})`-aggregator som
76
+ laddar enskilda moduler. Adoption av aggregatorn ar separat fran
77
+ enskild-fils-migration
78
+ - Pwa-register.js migrerades till paketets version i v3.0.3 (Jubb).
79
+ Ekonoms egen pwa-register.js fortsatter anvandas
@@ -0,0 +1,51 @@
1
+ # 0004 - Halsomentorn legacy-CSS i Ekonom
2
+
3
+ ## Status
4
+ Pending. Lag prioritet.
5
+
6
+ ## Context
7
+ Ekonoms `app/static/css/ds/halsomentorn.css` ar 1783 rader CSS som
8
+ levt fran tiden Ekonom delade designsystem med Halsomentorn-projektet
9
+ (sprint 56, 2026-05-01). Halsomentorn-projektet ar inte aktivt langre
10
+ i Klodd-eko - det ar foraldrat WordPress-baserat halsa-projekt.
11
+
12
+ Filen importeras INTE av Ekonom (`ds/bundles/ekonom.css` listar inte
13
+ den). Den laddas bara om `/design`-route explicit pekar dit (via
14
+ per-template `<link>`).
15
+
16
+ ## Considered options
17
+
18
+ ### Option A: Radera `ds/halsomentorn.css` helt
19
+ **Pros:**
20
+ - Stadar upp 1783 rader dod CSS
21
+ - Reducerar mental ovederhead nar man laser ds/-mappen
22
+ - Halsomentorn-projektet ar arkiverat
23
+ **Cons:**
24
+ - Forlustar referens till sprint-56-designsystem-extraction-arbetet
25
+ - Om Halsomentorn skulle vakna upp igen behovs CSS:en aterskapas
26
+ (osannolikt)
27
+
28
+ ### Option B: Flytta filen till `docs/archive/`
29
+ **Pros:**
30
+ - Bevarar historik utan att den lever i ds/-mappen
31
+ - Lag risk
32
+ **Cons:**
33
+ - Lite bookkeeping (filen flyttas, manga importer maste verifieras)
34
+
35
+ ### Option C: Behall i ds/-mappen, dokumentera tydligare
36
+ **Pros:**
37
+ - Inga andringar
38
+ **Cons:**
39
+ - Mental overhead kvarstar
40
+
41
+ ## Pending decision criteria
42
+ - Halsomentorn-status: ar projektet definitivt arkiverat eller
43
+ kan det vakna upp?
44
+ - Cleanup-prioritet: ar 1783 rader dod CSS vard att stada bort?
45
+
46
+ ## Notes
47
+ - Filen ligger BARA i Ekonoms repo, inte i klodd-ds-paketet eller Jubb
48
+ - Paritets-audit-status: Ekonom har den, Jubb saknar den (dokumenterad
49
+ asymmetri i klodd-ds AUDIT.md)
50
+ - Lag prioritet - inte ett produktionsproblem, bara ett snyggherings-
51
+ arbete
@@ -0,0 +1,37 @@
1
+ # 0005 - .tx-icon.cat-X location (CLOSED)
2
+
3
+ ## Status
4
+ **Closed** 2026-05-07. Resolverad i Ekonom-commit `1e14c07`.
5
+
6
+ ## Context
7
+ Calles paritetsaudit identifierade misstanke om att kategori-fargade
8
+ ikon-regler (`.tx-icon.cat-mat`, `.tx-icon.cat-noje` osv) lag i den
9
+ delade `ds/components.css` istallet for Ekonom-domain-fil.
10
+
11
+ Vid undersokning visade det sig att:
12
+ - `.tx-icon.cat-X`-reglerna (8 stycken) lag faktiskt i `ds/ekonom.css`,
13
+ inte `components.css` - sa inget paritets-brott vs delade systemet
14
+ - Token-application var dock SEPARERAD fran token-definition: tokens
15
+ i `ekonom-domain.css`, application i `ekonom.css`
16
+
17
+ ## Decision
18
+ Flytta `.tx-icon.cat-X`-reglerna fran `ds/ekonom.css` till
19
+ `ds/ekonom-domain.css` sa token-definition och token-application lever
20
+ pa samma plats.
21
+
22
+ Andra `.cat-*`-relaterade regler (`.cat-tx-*`, `.cat-bar-*`, `.cat-list`,
23
+ `.cat-row*`) **flyttades INTE** - de ar komponent-niva-styling som
24
+ rakar anvanda --cat-*-tokens. De fortsatter leva i `ds/ekonom.css`
25
+ som kategori-collapsible-list-stuktur.
26
+
27
+ ## Consequences
28
+ - + Single source of truth for kategori-fargning (tokens + application
29
+ pa samma plats)
30
+ - + Tydligare separation: `ekonom-domain.css` = kategori-data, `ekonom.css`
31
+ = kategori-relaterade komponentstrukturer
32
+ - + Inga visuella regressioner (samma CSS-output, bara annan plats)
33
+
34
+ ## Verifiering
35
+ - Pytest 636 passed (oforandrat)
36
+ - Visuell kontroll pa /avstamning, /kategorier (kategori-fargade
37
+ tx-icons rendrar identiskt)