@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.
- package/SKILL.md +56 -0
- package/bin/klodd-ds.js +25 -0
- package/bin/precache.js +43 -0
- package/bin/sync.js +33 -0
- package/bin/verify.js +66 -0
- package/css/00-primitives.css +13 -3
- package/css/base/typography.css +3 -5
- package/css/components/dropdown.css +1 -1
- package/css/components/setting-row.css +1 -1
- package/css/components/tab-bar.css +1 -1
- package/css/components/tooltip.css +1 -1
- package/css/utilities.css +101 -67
- package/js/hero-roll.js +5 -5
- package/package.json +12 -3
- package/references/01-tokens.md +182 -0
- package/references/02-components.md +260 -0
- package/references/03-quality-bar.md +238 -0
- package/references/04-locked-decisions/0001-three-layer-token-architecture.md +41 -0
- package/references/04-locked-decisions/0002-bem-naming.md +37 -0
- package/references/04-locked-decisions/0003-radix-colors-oklch.md +39 -0
- package/references/04-locked-decisions/0004-pixel-numeric-spacing.md +31 -0
- package/references/04-locked-decisions/0005-data-app-theming.md +42 -0
- package/references/04-locked-decisions/0006-mauve-neutral.md +40 -0
- package/references/04-locked-decisions/0007-font-weight-400-500.md +46 -0
- package/references/04-locked-decisions/0008-npm-package-distribution.md +40 -0
- package/references/05-open-decisions/0001-tx-row-to-list-row-migration-CLOSED.md +80 -0
- package/references/05-open-decisions/0002-parallel-classnames-cleanup-CLOSED.md +75 -0
- package/references/05-open-decisions/0003-js-duplicates-migration-CLOSED.md +79 -0
- package/references/05-open-decisions/0004-halsomentorn-legacy-css.md +51 -0
- package/references/05-open-decisions/0005-cat-class-location-CLOSED.md +37 -0
- package/references/05-open-decisions/0006-bar-kind-template-migration-CLOSED.md +75 -0
- package/references/05-open-decisions/0007-ekonom-base-import-gap-CLOSED.md +111 -0
- 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)
|