@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,75 @@
1
+ # 0006 - Ekonom bar_kind()-helper - migration till kategori-id for colored-bar
2
+
3
+ ## Status
4
+ **Closed 2026-05-08** via Option A (utoka bar_kind() till kategori-id).
5
+ Ekonom-commit [4ea9415](https://github.com/drawn124578/ekonom/commit/4ea9415).
6
+
7
+ bar_kind() i routers/kategorier.py returnerar nu cat.key (mat, el,
8
+ vatten, etc.) istallet for variant-modifiers ('default'/'wealth'/'accent').
9
+ ekonom.css .cat-bar-fill far ny background: var(--bar-accent, var(--text-tertiary))
10
+ sa --bar-accent (satt av .cat-bar-{kid}-modifier i ekonom-domain.css)
11
+ faktiskt blir bakgrund. 8 distinkta kategori-farger istallet for 3
12
+ generic varianter. Pytest 636/636.
13
+
14
+ ## Context
15
+ v3.1.0 introducerade paketets `.colored-bar`-komponent + Ekonoms
16
+ bindings-klasser `.cat-bar-mat` / `.cat-bar-el` ... / `.cat-bar-privat`
17
+ som mappar app-tokens (--cat-X-icon) till paketets `--bar-accent`.
18
+
19
+ CSS-bindningarna ar redo att anvandas. Templates anvander dock idag
20
+ ett ANNAT monster:
21
+
22
+ ```html
23
+ <div class="cat-bar-track">
24
+ <div class="cat-bar-fill cat-bar-{{ bar_kind(g.category) }}"
25
+ data-bar-width="{{ pct }}%"></div>
26
+ </div>
27
+ ```
28
+
29
+ Python-helpern `bar_kind(category)` returnerar idag en av tre
30
+ **variant-modifiers**: `default`, `wealth`, `accent`. Inte kategori-id.
31
+
32
+ Aktivering av det nya kategori-monstret kraver att antingen:
33
+ - `bar_kind()` utokas att returnera kategori-id (mat, el, noje osv.)
34
+ - Templates byter klassnamn fran `cat-bar-{kind}` till
35
+ `colored-bar cat-bar-{category-id}`
36
+
37
+ ## Considered options
38
+
39
+ ### Option A: Utoka bar_kind() att returnera kategori-id
40
+ **Pros:**
41
+ - Aktiverar det nya kategori-monstret fullt ut
42
+ - Templates fortsatter anvanda `cat-bar-{{ bar_kind(g) }}`-syntax -
43
+ bara inneliggande varde andras
44
+ - Visuellt rikare resultat (8 distinkta kategori-farger istallet for
45
+ 3 generic varianter)
46
+ **Cons:**
47
+ - Andrar Python-logik pa `bar_kind()` - kraver test-uppdatering
48
+ - Templates behover ocksa lagga till `colored-bar`-klassen parallellt:
49
+ `class="colored-bar cat-bar-{{ bar_kind(g) }}"`
50
+ - Behover bestamma vad bar_kind() returnerar for icke-kategori-rader
51
+ (wealth, accent-varianter for special-data)
52
+
53
+ ### Option B: Behall variant-modifiers som de ar
54
+ **Pros:**
55
+ - Inga template- eller Python-andringar
56
+ - Default/wealth/accent-monstret ar etablerat och fungerar
57
+ - CSS-bindningarna lever passivt for framtida anvandning utan att
58
+ blockera nuvarande funktionalitet
59
+ **Cons:**
60
+ - Det nya kategori-monstret ar redo i CSS men oanvant
61
+ - Inga visuella forbattringar pa kategori-bars
62
+
63
+ ## Pending decision criteria
64
+ - Sprint-prioritet: ar visuellt rikare kategori-fargning vard att kosta
65
+ Python-logik-andring + template-edit?
66
+ - Samordning med MADR 0001 (.tx-row -> .list-row): bagge migrationer
67
+ beror Ekonoms transaction-listor och kan delas pa samma sprint for
68
+ effektivitet
69
+
70
+ ## Notes
71
+ - CSS-bindningarna `.cat-bar-X` lever sedan v3.1.0 (Ekonom-commit
72
+ f011c2f). Inga paket-andringar behovs - bara app-side adoption
73
+ - Fortsatt fungerande default/wealth/accent-monster betyder INGEN
74
+ forsamring vid val av Option B
75
+ - Ingen tidsgrans pa beslutet
@@ -0,0 +1,111 @@
1
+ # 0007 - Ekonoms main.css-kedja importerar inte paketets ds/base/-mapp
2
+
3
+ ## Status
4
+ **Closed 2026-05-07** via Option A med selektiv import. Ekonoms
5
+ main.css importerar nu paketets `ds/base/layout.css` direkt. Skip
6
+ av `pwa.css` (dubblett mot Ekonoms egen) och `typography.css`
7
+ (Inter Google Fonts-konflikt med Sprint D2).
8
+
9
+ ## Context
10
+ Jubb och Ekonom har olika CSS-arkitektur for hur paketets `base/`-mapp
11
+ laddas:
12
+
13
+ **Jubb:** paketets `base/`-filer kopieras till `app/static/css/base/`
14
+ (rotnivå). `main.css` importerar `base/typography.css` direkt:
15
+
16
+ ```css
17
+ /* Jubbs main.css */
18
+ @import url("ds/base.css");
19
+ @import url("base/typography.css"); /* paketets fil, rotniva */
20
+ @import url("ds/components.css");
21
+ ...
22
+ ```
23
+
24
+ **Ekonom:** paketets `base/`-filer kopieras till `app/static/css/ds/base/`-
25
+ undermapp (for att inte krocka med Ekonoms egna `app/static/css/base/`
26
+ filer). `main.css` importerar via `ds/bundles/ekonom.css` som bara
27
+ inkluderar Ekonom-specifika `ds/base.css`, INTE paketets nyare filer:
28
+
29
+ ```css
30
+ /* Ekonoms main.css */
31
+ @import url("ds/bundles/ekonom.css");
32
+
33
+ /* ds/bundles/ekonom.css */
34
+ @import url("../ekonom-domain.css");
35
+ @import url("../base.css"); /* Ekonoms egen, inte paketet */
36
+ @import url("../components.css");
37
+ @import url("../utilities.css");
38
+ @import url("../ekonom.css");
39
+ @import url("../components/inline-edit.css");
40
+ ```
41
+
42
+ `ds/base/typography.css`, `ds/base/pwa.css`, `ds/base/layout.css`
43
+ (paketets versioner) kopieras till disk via build:ds men laddas aldrig.
44
+
45
+ ### Konsekvens
46
+
47
+ Framtida paket-uppdateringar i `base/`-mappen kraver manuella hot-fixes
48
+ i Ekonom. Konkret exempel: v3.2.0 introducerade Inter @import i
49
+ `base/typography.css`. Jubb fick det automatiskt - Ekonom kravde commit
50
+ `5d59f1c` med Inter @import direkt i `main.css`.
51
+
52
+ ## Considered options
53
+
54
+ ### Option A: Lagg till explicita @import-rader i Ekonoms main.css
55
+ ```css
56
+ /* Ekonoms main.css */
57
+ @import url("ds/base/typography.css");
58
+ @import url("ds/base/layout.css");
59
+ @import url("ds/bundles/ekonom.css");
60
+ ```
61
+
62
+ **Pros:**
63
+ - Enklast
64
+ - Minst risk
65
+ - Paketets base/-filer aktiveras automatiskt vid build:ds
66
+ - Bibehaller Ekonoms befintliga ds/-undermapp-arkitektur
67
+ **Cons:**
68
+ - Lite duplicering om paketet utvidgas med ytterligare base/-filer
69
+ (man maste komma ihag att lagga till @import)
70
+ - `base/pwa.css` skips eftersom den redan laddas via base.html-link
71
+
72
+ ### Option B: Skriv om build:ds-scriptet att kopiera + auto-importera
73
+ build:ds genererar en `ds/base/_index.css` som listar alla `base/-`
74
+ filer i paketet. main.css importerar `ds/base/_index.css`.
75
+
76
+ **Pros:**
77
+ - Helt automatisk - inga manuella @import-rader behovs
78
+ **Cons:**
79
+ - Mer komplex build-script
80
+ - Genererad fil i ds/-mappen som ingen redigerar manuellt - cognitive
81
+ overhead
82
+
83
+ ### Option C: Harmonisera Ekonoms mappstruktur med Jubbs
84
+ Flytta paketets `base/`-filer till Ekonoms `app/static/css/base/`-
85
+ rotniva (overskriver Ekonoms egna). Kraver migration av Ekonoms
86
+ befintliga `base/pwa.css` och `base/typography.css`.
87
+
88
+ **Pros:**
89
+ - Identisk arkitektur Jubb/Ekonom
90
+ - Inga manuella @import behovs
91
+ **Cons:**
92
+ - Mer invasivt - kraver hantering av krockande filnamn
93
+ - Ekonoms befintliga `app/static/css/base/typography.css` har Ekonom-
94
+ specifika styling-regler som inte ar i paketet
95
+ - Storre risk for visuell regression
96
+
97
+ ## Recommendation
98
+ **Option A.** Enklast, minst risk, kan ske i samma sprint som annan
99
+ Ekonom-cleanup (eventuellt MADR 0001 .tx-row -> .list-row eller MADR
100
+ 0002 parallel-classnames-cleanup).
101
+
102
+ ## Pending decision criteria
103
+ - Ar paketets `base/`-utokningar tillrackligt vanliga for att
104
+ rattfardiga Option B (auto-importer)?
105
+ - Ar Ekonoms befintliga `base/`-mapp viktig att behalla, eller kan
106
+ Option C utforas i en cleanup-sprint?
107
+
108
+ ## Notes
109
+ - Hot-fix via Option A ar redan delvis utford for Inter (commit 5d59f1c
110
+ i Ekonom lagger till Google Fonts @import direkt i main.css). Inte
111
+ ren Option A men en proxy-losning som fungerar
@@ -0,0 +1,73 @@
1
+ # 0008 - Legacy token-migration och `ds/components.css`-radering - v4.0.0
2
+
3
+ ## Status
4
+ Pending. Trigger: innan tredje app borjar anvanda `@klodd/ds`.
5
+
6
+ ## Context
7
+ `10-semantic.css` har en LEGACY ALIASES-sektion (rad 412-506) som
8
+ holds gamla token-namn vid liv sedan migrationen pabarjades:
9
+ `--accent`, `--accent-dim`, `--accent-link*`, `--bg-base`, `--bg-surface`,
10
+ `--card-bg-elevated`, `--surface-medium`, `--surface-subtle`,
11
+ `--negative-dim`, `--positive-dim`, `--shadow-float`, samt 9 radius-
12
+ aliaser. Sektionen ar 100 rader och har funnits over ett halvar.
13
+
14
+ Parallellt korr `ds/components.css` (flat-format, ~60 KB) sida vid
15
+ sida med `ds/components/<X>.css` (BEM, paket-konvention). Bagge
16
+ laddas i bagge appars main.css. DESIGN_TOKENS_GUIDE.md sektion 7
17
+ dokumenterar konflikten och saver "migration sker per sida" - men
18
+ ingen migration har skett pa manader.
19
+
20
+ Audit 2026-05-08 bekraftade att Jubb-domain CSS (`jubb-theme.css`,
21
+ `triage-v2.css`, `ds/base.css`) hanger fast i legacy-tokens, och
22
+ samma migrations-skuld finns i Ekonom (tx-row, kategori-tokens,
23
+ profile-edit). Det ar ingen lokal Jubb-fraga - det ar paketets
24
+ kostnad.
25
+
26
+ ### Konsekvens av att leva i halv-tillstand
27
+
28
+ - Varje ny komponent maste valja: gamla namnet eller nya namnet?
29
+ Folk valjer fel halften av gangerna.
30
+ - Ny utvecklare (eller LLM) maste lara sig bagge systemen for att
31
+ lasa koden. Cognitive overhead vid varje touch.
32
+ - Specen i DESIGN_TOKENS_GUIDE.md saver "5-raders apps/jubb.css" men
33
+ paketet har 36 rader. Specen ar inte sanning.
34
+ - Migrations-skulden vaxer linjart med antal call-sites och antal
35
+ appar.
36
+
37
+ ## Decision
38
+ Gor en fullstandig **lock-sprint** innan tredje app laggs till:
39
+
40
+ 1. Migrera ALLA call-sites till nya semantic token-namn
41
+ (`--accent` -> `--accent-9` eller `--accent-text`, `--bg-base`
42
+ -> `--surface-page`, `--surface-medium` -> `--surface-default`,
43
+ `--card-bg-elevated` -> `--surface-raised` etc).
44
+ 2. Radera LEGACY ALIASES-sektionen ur `10-semantic.css`.
45
+ 3. Migrera ALLA flat-komponenter (`.btn`, `.card`, `.panel`, `.tx-row`
46
+ etc) till BEM (`.btn`, `.btn--primary`, `.card`, `.card--interactive`).
47
+ 4. Radera `ds/components.css` (flat-versionen) ur bagge app-repos.
48
+ 5. Bumpa till `@klodd/ds@4.0.0` (breaking).
49
+
50
+ ## Consequences
51
+ - **+** Slut pa dubbla mentala modeller. En standard.
52
+ - **+** Spec stammer med implementationen.
53
+ - **+** Tredje app:s onboarding gar mot ett moget system.
54
+ - **+** `npx @klodd/ds verify` (3.4.0+) detekterar drift mekaniskt.
55
+ - **-** Stor sprint - kraver dedikerad bandbredd (uppskattning: 2-3
56
+ arbetsdagar plus visuell QA per app).
57
+ - **-** Risk for visuell regression vid migration. Kraver `/design`-
58
+ styleguide-jamforelse fore/efter pa bagge appar.
59
+
60
+ ## Pending decision criteria
61
+ - Tidpunkt: omedelbart innan tredje app (Margevo eller annan)
62
+ borjar anvanda paketet. Att vanta langre forharder skulden;
63
+ att hasta forskuggar appar som redan ar i prod.
64
+ - Vem kor sprinten: Calle ensam eller med assistent CC?
65
+ - Om CC: ska den ha access till bagge app-repos under sprinten?
66
+
67
+ ## Notes
68
+ - Audit 2026-05-08 (av CC) identifierade root-causes och rekommenderade
69
+ steg 1-3 (CLI-konsolidering) NU och steg 4 (denna migration) "nar
70
+ bandbredd finns".
71
+ - Steg 1-3 ar implementerade i v3.4.0 (sync/verify/precache CLI).
72
+ - v3.4.0 ar lokalt locked - drift detekteras av CI-job i bagge appar.
73
+ Det ar plattformen som later denna lock-sprint hallas i kontroll.