@klodd/ds 3.21.4 → 3.21.5

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@klodd/ds",
3
- "version": "3.21.4",
3
+ "version": "3.21.5",
4
4
  "description": "Klodd shared design system - tokens, components, JS",
5
5
  "main": "css/index.css",
6
6
  "bin": {
@@ -0,0 +1,132 @@
1
+ # 0017 - Padding-skala utökad till 10 värden + per-komponent-låsning
2
+
3
+ ## Status
4
+ Locked.
5
+
6
+ ## Context
7
+
8
+ DESIGN-LANGUAGE.md sektion 4 (etablerad 2026-05-12 via ADR 0013)
9
+ specificerade en padding-skala om 6 värden: `4, 8, 12, 16, 20, 24`,
10
+ med 2, 6, 10, 14, 18, 22, 28, 32 listade som "förbjudna i komponent-
11
+ CSS" (men reserverade för layout-grid).
12
+
13
+ Audit 2026-05-14 (Ekonom UI/UX/CSS-cykel) visade att paketets egna
14
+ komponenter använder "förbjudna" värden brett:
15
+
16
+ | Fil | Padding-värden |
17
+ |---|---|
18
+ | `setting-row.css:32` | `var(--space-14) 0` |
19
+ | `list-row.css:37` | `var(--space-10) 0` |
20
+ | `hub-card.css:32` | `var(--space-14) var(--space-16)` |
21
+ | `panel.css:15` | `var(--space-16) var(--space-18)` |
22
+ | `panel.css:94` | `0 var(--space-10)` |
23
+ | `banner.css:12` | `var(--space-14) var(--space-16)` |
24
+ | `sheet-content.css:110` | `0 var(--space-14)` |
25
+ | `sheet-content.css:129` | `padding-right: var(--space-32)` |
26
+ | `sheet-content.css:136` | `var(--space-12) var(--space-14)` |
27
+ | `sheet-content.css:302` | `var(--space-6) 0` |
28
+ | `sheet-content.css:327` | `padding-top: var(--space-14)` |
29
+
30
+ Detta är **inte** slarv - värdena är medvetna iOS-list-row-paddings
31
+ som matchar Apples HIG-konventioner (44px tap-target med text-line
32
+ ger 50-56px höjd via padding 10-14). Att tighta paketet till 4/8/12/
33
+ 16/20/24 skulle ge ojämn rytm där iOS-konventionen kräver mellan-
34
+ värden.
35
+
36
+ Per Calle 2026-05-14: "Det är ok att ändra regler och göra det bättre,
37
+ men då måste det implementeras brett inom designsystemet och de appar
38
+ som använder det."
39
+
40
+ ## Decision
41
+
42
+ **Padding-skalan utökas till 10 värden + per-komponent-låsningar i
43
+ ADR-katalogen.**
44
+
45
+ ### Tillåtna värden i komponent-CSS
46
+
47
+ ```
48
+ 4, 6, 8, 10, 12, 14, 16, 18, 20, 24
49
+ ```
50
+
51
+ Plus 28, 32, 40+ för layout-grid och stora section-breaks.
52
+
53
+ ### Per-komponent-typ-låsningar
54
+
55
+ Etablerade efter audit av nuvarande paket (frusen state 2026-05-14):
56
+
57
+ | Komponent-typ | V-padding | H-padding | Källa |
58
+ |---|---|---|---|
59
+ | `.list-row` | 10 | 0 | `list-row.css:37` |
60
+ | `.setting-row` | 14 | 0 | `setting-row.css:32` |
61
+ | `.banner` | 14 | 16 | `banner.css:12` |
62
+ | `.card`, `.card__body`, `.card__footer` | 16 | 16 | `card.css` |
63
+ | `.panel` | 16 | 18 | `panel.css:15` |
64
+ | `.hub-card` | 14 | 16 | `hub-card.css:32` |
65
+ | `.btn` (default) | 12 | 16 | `button.css` |
66
+ | `.btn--sm` | 8 | 12 | `button.css` |
67
+ | `.input` | 12 | 14 | `input.css` |
68
+ | `.input` (compact) | 6 | 10 | `input.css` (compact) |
69
+ | `.sheet__field-label` | 0 14 | - | `sheet-content.css:110` |
70
+ | `.sheet__item` | 12 | 14 | `sheet-content.css:136/206` |
71
+ | `.sheet__form` | 6 | 0 | `sheet-content.css:302` |
72
+ | Tooltip | 8 | 12 | `tooltip.css` |
73
+ | `.toast` (paket) | 12 | 16 | `feedback.css` |
74
+
75
+ App-domain-komponenter följer samma per-typ-värden om de spelar samma
76
+ roll. Avvikelser kräver dokumentation.
77
+
78
+ ### Förbjudet (oförändrat)
79
+
80
+ Värden 2, 22, 26, 30 är fortfarande "förbjudna" i komponent-CSS -
81
+ oanvända i paketet och brott mot rytmen. 28 + 32+ är layout-tokens,
82
+ inte komponent-padding.
83
+
84
+ ### Komposita värden (TRBL)
85
+
86
+ Symmetric preferred: `padding: 16px`. Vertical-horizontal:
87
+ `padding: 14px 16px`. Asymmetric kräver kommentar med motivation
88
+ (hero `padding: 20px 0 24px` är dokumenterat undantag för alignment).
89
+
90
+ ## Konsekvenser
91
+
92
+ **Bra:**
93
+ - Doktrinen matchar faktisk paket-implementation
94
+ - iOS-konventionen (HIG 44x44 tap-target med 10-14px padding) respekteras
95
+ - Ekonom + Jubb-domain kan följa samma per-typ-värden utan migration
96
+ - Future-CC har tabell att referera istället för regelläsning
97
+ - Stylelint-plugin (Sprint 5) kan validera mot 10-värdes-skala +
98
+ per-komponent-låsningar
99
+
100
+ **Trade-offs:**
101
+ - Ramverket är inte längre 6-värdes-tightat
102
+ - Per-komponent-låsningarna ökar ADR-underhåll: ny komponent-typ
103
+ kräver ADR-uppdatering eller acceptans av "free padding"
104
+ - App-domain-CSS som följde 4/8/12/16/20/24 strikt kan se ut som
105
+ underanvändning av tillgängliga värden
106
+
107
+ ## Migration
108
+
109
+ **Ingen migration krävs.** Paketet är redan i låst state. App-domain-CSS
110
+ (Ekonoms ds/ekonom.css + Jubbs jubb.css/jubb-domain.css) följer redan
111
+ samma värden de facto.
112
+
113
+ Sprint C i Ekonom-auditen 2026-05-14 skippades baserat på denna analys -
114
+ fyndet var falskt-positivt eftersom doktrinen var aspirationell utan
115
+ paket-verifiering.
116
+
117
+ ## Stylelint-plugin (Sprint 5, framtida)
118
+
119
+ Validera:
120
+ - `padding`-värden använder `var(--space-N)` där N är 4/6/8/10/12/14/
121
+ 16/18/20/24
122
+ - Per-komponent-typ-låsningar via selector-pattern (t.ex. `.list-row`-
123
+ rules ska ha padding-y 10)
124
+ - Varning vid avvikelse från ADR-tabellen
125
+
126
+ ## References
127
+
128
+ - DESIGN-LANGUAGE.md sektion 4 (uppdaterad 2026-05-14)
129
+ - ADR 0013 (visual-coherence-doctrine) - tidigare 6-värdes-regel
130
+ - Ekonom DECISIONS 2026-05-14 (audit-cykel skip-rationale för Sprint C)
131
+ - Audit-not: paketets faktiska padding-värden inventoradde 2026-05-14
132
+ via `grep -rE "padding[^:]*:\s*[^;]*--space-(2|6|10|14|18|22|28|32)\b"`
@@ -147,29 +147,67 @@ container (hero, page-header).
147
147
  - Hardkodad font-size för titel-element (använd `.hero__amount`
148
148
  eller `.page-title`)
149
149
 
150
- ## 4. Padding-rytm (sex värden)
150
+ ## 4. Padding-rytm (tio värden + per-komponent-låsningar)
151
151
 
152
- **Regel:** all padding i komponent-CSS ska vara EN av:
152
+ **Regel:** padding i komponent-CSS ska vara EN av tio tillåtna tokens.
153
+ Per-komponent-typ är värdena låsta i ADR 0017 så samma komponent-typ
154
+ har samma padding över paket och appar.
153
155
 
154
- | Värde | Token | Användning |
156
+ ### Tillåtna värden
157
+
158
+ | Värde | Token | Typisk användning |
155
159
  |---|---|---|
156
- | 4px | `--space-4` | Mini-gaps, badge inner, tab-spacing |
157
- | 8px | `--space-8` | Standard gap, icon-margin |
158
- | 12px | `--space-12` | List-row vertical, button-internal |
159
- | 16px | `--space-16` | Card internal, panel internal, hero |
160
+ | 4px | `--space-4` | Mini-gaps, badge inner |
161
+ | 6px | `--space-6` | Compact form-spacing, sheet-form vertical |
162
+ | 8px | `--space-8` | Standard gap, btn--sm v-padding, icon-margin |
163
+ | 10px | `--space-10` | List-row v-padding, panel inner-h |
164
+ | 12px | `--space-12` | Btn default v-padding, input v-padding |
165
+ | 14px | `--space-14` | Setting-row v-padding, banner/hub-card v-padding, input h |
166
+ | 16px | `--space-16` | Card internal, panel inner-h, hero, banner h |
167
+ | 18px | `--space-18` | Panel h-padding |
160
168
  | 20px | `--space-20` | Section gap, hero-internal vertical |
161
169
  | 24px | `--space-24` | Major section break |
162
170
 
163
- **Förbjudet i komponent-CSS:** 2, 6, 10, 14, 18, 22, 28, 32-värden
164
- direkt. (Finns som tokens men reserverat för layout-grid och spacing
165
- mellan section-block, inte inom komponenter.)
171
+ ### Per-komponent-typ-låsningar (ADR 0017)
172
+
173
+ | Komponent-typ | V-padding | H-padding |
174
+ |---|---|---|
175
+ | `.list-row` | 10 | 0 |
176
+ | `.setting-row` | 14 | 0 |
177
+ | `.banner` | 14 | 16 |
178
+ | `.card` | 16 | 16 |
179
+ | `.panel` | 16 | 18 |
180
+ | `.hub-card` | 14 | 16 |
181
+ | `.btn` (default) | 12 | 16 |
182
+ | `.btn--sm` | 8 | 12 |
183
+ | `.input` | 12 | 14 |
184
+ | `.input` (compact) | 6 | 10 |
185
+ | `.sheet__item` | 12 | 14 |
186
+ | `.tooltip` | 8 | 12 |
187
+ | `.toast` (paket) | 12 | 16 |
188
+
189
+ App-domain-komponenter som spelar samma roll följer samma värden.
190
+
191
+ ### Förbjudet
192
+
193
+ Värden 2, 22, 26, 30 i komponent-CSS - oanvända i paketet, bryter
194
+ rytmen. 28+ är layout-tokens, inte komponent-padding.
195
+
196
+ ### Sammansatta padding (TRBL)
166
197
 
167
- **Sammansatta padding (TRBL)**:
168
198
  - Symmetric preferred: `padding: 16px` ✓
169
199
  - Vertical-horizontal: `padding: 12px 16px` ✓
170
200
  - Asymmetric only with rationale: `padding: 20px 0 24px` (hero) -
171
201
  kommentar med motivering krävs
172
202
 
203
+ ### Etablerad 2026-05-14
204
+
205
+ Tidigare 6-värdes-skalan (ADR 0013) var aspirationell utan paket-
206
+ verifiering. Per Calle: "Det är ok att ändra regler och göra det
207
+ bättre, men då måste det implementeras brett." Ny skala matchar
208
+ faktisk paket-implementation. Se ADR 0017 för rationale + tabellen
209
+ över per-komponent-låsningar.
210
+
173
211
  ## 5. Font-size-skala (åtta värden)
174
212
 
175
213
  **Regel:** font-size i komponent-CSS ska vara EN av token-skalan: