@klodd/ds 3.9.0 → 3.9.2
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 +2 -36
- package/css/components/badge.css +3 -1
- package/css/components/chip.css +1 -42
- package/package.json +1 -1
- package/references/02-components.md +6 -7
- package/references/03-quality-bar.md +1 -1
- package/references/05-open-decisions/0012-maskable-icons.md +19 -0
- package/references/05-open-decisions/0013-jubb-kv-list-migration.md +84 -0
package/SKILL.md
CHANGED
|
@@ -7,7 +7,7 @@ description: Design memory for the @klodd/ds shared design system across all Klo
|
|
|
7
7
|
|
|
8
8
|
## Vad detta är
|
|
9
9
|
Gemensamt designsystem på npm (`@klodd/ds@3.x`). Tre-lagers tokens,
|
|
10
|
-
|
|
10
|
+
37+ komponenter (sheet-content tillagd v3.5.1), konsumeras av Jubb
|
|
11
11
|
och Ekonom. Fler appar planerade.
|
|
12
12
|
Denna Skill fångar både reglerna ("vad") och resonemanget ("varför").
|
|
13
13
|
|
|
@@ -108,38 +108,4 @@ En källa, alla projekt ser samma skill automatiskt. Ändringar i
|
|
|
108
108
|
`~/dev/klodd-ds/SKILL.md`, `POLICY.md` eller `references/` syns
|
|
109
109
|
omedelbart i nästa CC-session - ingen synk-fas behövs.
|
|
110
110
|
|
|
111
|
-
Updated: 2026-05-
|
|
112
|
-
sheet-content.css-komponent (24 BEM-klasser för Sprint-65-pattern),
|
|
113
|
-
foreman-typografi-utokning (.text-caption/-tiny/-num/-num--display/-positive/-warning),
|
|
114
|
-
btn-modifiers (--block, --add), .heading (17px medium tight), och utokningar
|
|
115
|
-
i panel/setting-row/chip.
|
|
116
|
-
v3.5.2 rattade .panel--attention__pill (felaktig BEM) till .panel__pill +
|
|
117
|
-
context-styling via .panel--attention .panel__pill.
|
|
118
|
-
v3.5.3 lagger till .heading-utan-N (17px) for dialog-titlar och sheet-rubriker.
|
|
119
|
-
v3.5.4 (Sprint D-3) introducerar --fs-16 token (16px) for iOS-anti-zoom
|
|
120
|
-
pa inputs och applicerar pa inline-edit__input. Token ar dokumenterad
|
|
121
|
-
som BARA for input-element - vanlig text anvander fortfarande 15 eller 17.
|
|
122
|
-
v3.5.5 (Sprint E) konsoliderar :focus-visible over 7 komponenter (chip,
|
|
123
|
-
list-row, tab-bar, nav, swipe-stack, inline-edit) - 11 nya selectorer
|
|
124
|
-
fick outline 2px solid var(--border-focus) med outline-offset 2px. Plus
|
|
125
|
-
.tab outline-offset normaliserad 1px->2px. input.css och .inline-edit__input
|
|
126
|
-
ar dokumenterade undantag som behaller :focus (text-input-konvention).
|
|
127
|
-
v3.5.6 (Sprint F) konsoliderar BEM over 5 komponenter (card, dropdown,
|
|
128
|
-
hero-roll, overlay, nav) - 23 flat-hyphen element-klasser konverterade
|
|
129
|
-
till .block__element-syntax. Inkluderar JS-koordinering pa hero-roll,
|
|
130
|
-
sheet-drag, turbo-nav, nav-optimistic dar querySelector/classList
|
|
131
|
-
adresserar de bytta klasserna. .bottom-nav-item.active konverterad till
|
|
132
|
-
BEM-modifier .bottom-nav__item--active. tooltip-wrapper bevarad som
|
|
133
|
-
compound block per references/03-quality-bar.md regel 1.
|
|
134
|
-
v3.5.7 (Sprint G) uppdaterar hub-card.css med Ekonoms tightare design
|
|
135
|
-
(padding 14/16, border-radius 14, hub-list gap 10, active scale 0.985)
|
|
136
|
-
nar Ekonoms LEGACY-version raderades. Sprint G hanterade aven domain-CSS
|
|
137
|
-
BEM-migration i app-repos (icke-paket-fil) - 4 tier: A=dead-code-radering
|
|
138
|
-
(14 klasser), B=paket-dubblett-radering (.hub-card + .hub-list ur Ekonoms
|
|
139
|
-
LEGACY), C=BEM-byten (9 block-grupper: amort-bar, cat-tx-stack, cat-row,
|
|
140
|
-
cat-list-row state-modifiers, sub-row state-modifiers, job-card, hero-amount-card,
|
|
141
|
-
source-bar, score-bar), D=compound-block-undantag (cat-bar/equity-bar/
|
|
142
|
-
budget-bar/hbar/cat-tx). Plus base.css Sprint F-miss fixad (bottom-nav-item,
|
|
143
|
-
sheet-handle som descendant-selektorer i touch-cleanup + press-feedback).
|
|
144
|
-
Jubb fick paritet med Ekonom: bundles/jubb.css + jubb-domain.css scaffold.
|
|
145
|
-
Sprint C fas 2 template-migration pagaar.)
|
|
111
|
+
Updated: 2026-05-10 (matchar @klodd/ds 3.9.0)
|
package/css/components/badge.css
CHANGED
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
components/badge.css
|
|
3
3
|
.badge - generisk pill med variants for status.
|
|
4
4
|
.score-pill - tabular-nums-pill speciellt for relevance-scores.
|
|
5
|
+
Kanonisk definition (chip.css duplicerade tidigare,
|
|
6
|
+
raderad 2026-05-10).
|
|
5
7
|
|
|
6
8
|
BEM-konvention med double-dash for varianter.
|
|
7
9
|
================================================================ */
|
|
@@ -72,7 +74,7 @@
|
|
|
72
74
|
font-size: var(--fs-11);
|
|
73
75
|
font-weight: var(--fw-medium);
|
|
74
76
|
font-variant-numeric: tabular-nums;
|
|
75
|
-
letter-spacing: 0.01em;
|
|
77
|
+
letter-spacing: var(--ls-wide, 0.01em);
|
|
76
78
|
line-height: 1.4;
|
|
77
79
|
border: 1px solid transparent;
|
|
78
80
|
border-radius: var(--radius-full);
|
package/css/components/chip.css
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/* ================================================================
|
|
2
2
|
components/chip.css
|
|
3
|
-
Pills- och chips-familjen:
|
|
3
|
+
Pills- och chips-familjen: fem fristående blocks som delar
|
|
4
4
|
form-språket (rounded-full, kompakt padding, inline-flex).
|
|
5
5
|
|
|
6
6
|
Blocks:
|
|
@@ -8,7 +8,6 @@
|
|
|
8
8
|
.chip-list - sibling-wrapper för chips i rad (har __item/__delete/__add)
|
|
9
9
|
.brand-pill - projekt-namn-pill i topbar
|
|
10
10
|
.month-pill - navigations-pill för månadsbyte (Ekonom)
|
|
11
|
-
.score-pill - ratings-pill (NB: definieras även i badge.css - identiska regler)
|
|
12
11
|
.install-chip - PWA install-prompt som flyter ovan bottom-nav
|
|
13
12
|
|
|
14
13
|
HTML-relationer:
|
|
@@ -17,7 +16,6 @@
|
|
|
17
16
|
|
|
18
17
|
Modifiers:
|
|
19
18
|
.chip --accent/-positive/-negative/-warning/-faint
|
|
20
|
-
.score-pill --strong/-medium/-low
|
|
21
19
|
|
|
22
20
|
.install-chip har egna BEM-element (__text/__install/__dismiss) plus
|
|
23
21
|
keyframe-animation install-chip-up (respekterar prefers-reduced-motion).
|
|
@@ -208,45 +206,6 @@
|
|
|
208
206
|
}
|
|
209
207
|
|
|
210
208
|
|
|
211
|
-
/* ================================================================
|
|
212
|
-
==== SCORE-PILL
|
|
213
|
-
Tabular-nums for sifferjustering. Modifiers: --strong/--medium/--low.
|
|
214
|
-
================================================================ */
|
|
215
|
-
.score-pill {
|
|
216
|
-
flex-shrink: 0;
|
|
217
|
-
display: inline-flex;
|
|
218
|
-
align-items: center;
|
|
219
|
-
justify-content: center;
|
|
220
|
-
font-size: var(--fs-11);
|
|
221
|
-
font-weight: var(--fw-medium);
|
|
222
|
-
font-variant-numeric: tabular-nums;
|
|
223
|
-
letter-spacing: var(--ls-wide, 0.01em);
|
|
224
|
-
padding: var(--space-2) var(--space-8);
|
|
225
|
-
border-radius: var(--radius-full);
|
|
226
|
-
border: 1px solid transparent;
|
|
227
|
-
white-space: nowrap;
|
|
228
|
-
line-height: 1.4;
|
|
229
|
-
}
|
|
230
|
-
|
|
231
|
-
.score-pill--strong {
|
|
232
|
-
color: var(--positive);
|
|
233
|
-
background: var(--positive-dim);
|
|
234
|
-
border-color: var(--positive-border);
|
|
235
|
-
}
|
|
236
|
-
|
|
237
|
-
.score-pill--medium {
|
|
238
|
-
color: var(--warning);
|
|
239
|
-
background: var(--warning-dim);
|
|
240
|
-
border-color: var(--warning-border);
|
|
241
|
-
}
|
|
242
|
-
|
|
243
|
-
.score-pill--low {
|
|
244
|
-
color: var(--text-muted);
|
|
245
|
-
background: var(--surface-default);
|
|
246
|
-
border-color: var(--border-subtle);
|
|
247
|
-
}
|
|
248
|
-
|
|
249
|
-
|
|
250
209
|
/* ================================================================
|
|
251
210
|
==== INSTALL-CHIP
|
|
252
211
|
PWA install-prompt som flyter ovan bottom-nav.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@klodd/ds",
|
|
3
|
-
"version": "3.9.
|
|
3
|
+
"version": "3.9.2",
|
|
4
4
|
"description": "Klodd Design System - shared tokens, typography, components and JS for Jubb, Ekonom, and future apps. v3.5.3 (2026-05-09): tillagg .heading (17px medium tight) i base/typography.css for dialog-titlar och sheet-rubriker. Tackar luckan mellan .heading-2 (18px) och .heading-3 (15px) - matchar Ekonoms gamla .heading-class.",
|
|
5
5
|
"main": "css/index.css",
|
|
6
6
|
"bin": {
|
|
@@ -33,7 +33,7 @@ För varje entry gäller:
|
|
|
33
33
|
- **Tokens:** `--surface-sunken/-default`, `--accent-9`, `--accent-a3` (focus-ring), `--bg-danger` (error-state)
|
|
34
34
|
|
|
35
35
|
### badge (`badge.css`)
|
|
36
|
-
- **Blocks:** `.badge`, `.score-pill` (sibling,
|
|
36
|
+
- **Blocks:** `.badge`, `.score-pill` (sibling, kanonisk definition)
|
|
37
37
|
- **Modifiers:** `.badge--neutral/-success/-warning/-danger/-accent`, `.score-pill--strong/-medium/-low`
|
|
38
38
|
- **Anvand:** Status-pills (statiska)
|
|
39
39
|
- **INTE:** Klickbara chips (anvand `.chip`)
|
|
@@ -162,12 +162,11 @@ För varje entry gäller:
|
|
|
162
162
|
- **INTE:** Klickbart kort med rich content (anvand `.hub-card`)
|
|
163
163
|
|
|
164
164
|
### collapsible (`collapsible.css`)
|
|
165
|
-
- **Blocks:** `.collapsible
|
|
165
|
+
- **Blocks:** `.collapsible`
|
|
166
166
|
- **Element:** `.collapsible__header`, `.collapsible__header-text`, `.collapsible__chev`, `.collapsible__body`
|
|
167
|
-
- **States:** `[data-expanded]` pa `.collapsible
|
|
167
|
+
- **States:** `[data-expanded]` pa `.collapsible`
|
|
168
168
|
- **Anvand:** Panel som expanderar pa klick. JS togglar `data-expanded`
|
|
169
169
|
- **INTE:** Modal-content (anvand `.dialog` eller `.sheet`)
|
|
170
|
-
- **Special:** BEM-stam-mismatch - block heter `.collapsible-card` men element heter `.collapsible__X` (utan `-card`-suffix). Oppen punkt for rename, se sprint-rapport 2026-05-09.
|
|
171
170
|
|
|
172
171
|
### hbar (`hbar.css`)
|
|
173
172
|
- **Blocks:** `.hbar`
|
|
@@ -191,9 +190,9 @@ För varje entry gäller:
|
|
|
191
190
|
- **INTE:** Vanlig `<h1>` (anvand `.heading-1`)
|
|
192
191
|
|
|
193
192
|
### chip (`chip.css`)
|
|
194
|
-
- **Blocks:** `.chip`, `.chip-list` (sibling-wrapper for chips i rad), `.brand-pill`, `.month-pill`, `.
|
|
193
|
+
- **Blocks:** `.chip`, `.chip-list` (sibling-wrapper for chips i rad), `.brand-pill`, `.month-pill`, `.install-chip` (PWA install-prompt)
|
|
195
194
|
- **Element:** `.chip-list__item`, `.chip-list__text`, `.chip-list__form`, `.chip-list__delete`, `.chip-list__add`, `.install-chip__text`, `.install-chip__install`, `.install-chip__dismiss`
|
|
196
|
-
- **Modifiers:** `.chip--accent/-positive/-negative/-warning/-faint
|
|
195
|
+
- **Modifiers:** `.chip--accent/-positive/-negative/-warning/-faint`
|
|
197
196
|
- **Anvand:** Kort-format pills med dot-prefix (status, kategori, count)
|
|
198
197
|
- **INTE:** Form-inputs (anvand `.input`)
|
|
199
198
|
|
|
@@ -354,4 +353,4 @@ Jubb, Ekonom, framtida appar foljer samma monster med sina egna tokens.
|
|
|
354
353
|
- **`var(--gray-9)` i komponent-CSS.** Komponenter laser bara semantic.
|
|
355
354
|
- **Egen .button-style.** Anvand `.btn` med modifier istallet.
|
|
356
355
|
- **`font-weight: 700`.** Anvand `--fw-medium` (500). Display-siffror ar dokumenterat undantag.
|
|
357
|
-
- **Anta att alla komponent-filer har ett root-block.** 17 av
|
|
356
|
+
- **Anta att alla komponent-filer har ett root-block.** 17 av 37 komponent-filer har flera root-blocks - se regel 11 i `references/03-quality-bar.md`.
|
|
@@ -212,7 +212,7 @@ Varje interaktiv komponent SKA ha:
|
|
|
212
212
|
|
|
213
213
|
## 11. En fil kan innehalla flera root-blocks
|
|
214
214
|
|
|
215
|
-
I 17 av
|
|
215
|
+
I 17 av 37 komponent-filer i paketet definieras flera root-blocks i
|
|
216
216
|
samma fil (`form.css`, `nav.css`, `chip.css`, `swipe-stack.css`,
|
|
217
217
|
`feedback.css`, `hub-card.css` m.fl.). Det ar en medveten konvention,
|
|
218
218
|
inte ett undantag eller teknisk skuld.
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# 0012 - Maskable PWA-ikoner
|
|
2
|
+
|
|
3
|
+
## Status
|
|
4
|
+
Pending.
|
|
5
|
+
|
|
6
|
+
## Context
|
|
7
|
+
Jubb och Ekonom har PWA-ikoner men saknar maskable-varianter med
|
|
8
|
+
safe-zone-padding. Utan maskable-ikoner riskerar ikonen att klippas
|
|
9
|
+
på Android-enheter med adaptiva ikoner.
|
|
10
|
+
|
|
11
|
+
SVG-källfiler är klara. Bakgrundsfärg ska vara steg 3 av respektive
|
|
12
|
+
apps accent-ramp (--accent-3: Blue-3 för Jubb, Plum-3 för Ekonom).
|
|
13
|
+
|
|
14
|
+
## Återstår
|
|
15
|
+
- PNG-export med safe-zone-padding (72px ikon i 108px canvas)
|
|
16
|
+
- purpose="maskable" i web manifest för båda appar
|
|
17
|
+
|
|
18
|
+
## Beroenden
|
|
19
|
+
Kräver designer-export. Inte en CC-uppgift förrän PNG-filer levereras.
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
# 0013 - Jubb kv-list template-migration
|
|
2
|
+
|
|
3
|
+
## Status
|
|
4
|
+
Pending.
|
|
5
|
+
|
|
6
|
+
## Context
|
|
7
|
+
Sprint 5 (3.9.0, MADR 0009) lyfte kv-list till @klodd/ds som BEM-
|
|
8
|
+
komponent (.kv-list, .kv-list__item, .kv-list__item--strong/-sub/
|
|
9
|
+
-divider/-budget). Ekonom-templates migrerades samtidigt.
|
|
10
|
+
|
|
11
|
+
Jubb fick inte motsvarande migration. Jubbs jubb.css behåller en
|
|
12
|
+
flat-namnskonvention (.kv-row, .kv-key, .kv-value) som 5 templates
|
|
13
|
+
beror på via 10 separata `<ul class="kv-list">`-instanser med ~40
|
|
14
|
+
individuella .kv-row/.kv-key/.kv-value-träffar:
|
|
15
|
+
- runs.html (2 listor)
|
|
16
|
+
- job_detail.html (1 lista)
|
|
17
|
+
- dashboard.html (1 lista)
|
|
18
|
+
- insights.html (4 listor)
|
|
19
|
+
- jobs_list.html (2 listor)
|
|
20
|
+
|
|
21
|
+
## API-mismatch
|
|
22
|
+
|
|
23
|
+
Templates använder:
|
|
24
|
+
|
|
25
|
+
```html
|
|
26
|
+
<ul class="kv-list">
|
|
27
|
+
<li class="kv-row">
|
|
28
|
+
<span class="kv-key">label</span>
|
|
29
|
+
<span class="kv-value">value</span>
|
|
30
|
+
</li>
|
|
31
|
+
</ul>
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
Paketets API (kv-list.css 3.9.0):
|
|
35
|
+
|
|
36
|
+
```html
|
|
37
|
+
<ul class="kv-list">
|
|
38
|
+
<li class="kv-list__item">
|
|
39
|
+
label
|
|
40
|
+
value
|
|
41
|
+
</li>
|
|
42
|
+
</ul>
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
Paketets .kv-list__item har display: flex + justify-content:
|
|
46
|
+
space-between direkt på li-en. Två children placeras på vänster
|
|
47
|
+
och höger utan wrapper-spans. Jubbs nuvarande .kv-value bidrar
|
|
48
|
+
med color: var(--text-default), font-variant-numeric: tabular-nums
|
|
49
|
+
och inline-flex med gap som behöver återskapas i ny layout (möjliga
|
|
50
|
+
vägar: ny .kv-list__item--num-modifier i paketet, eller behåll en
|
|
51
|
+
lättviktig .kv-value-utility i Jubb).
|
|
52
|
+
|
|
53
|
+
## Återstår
|
|
54
|
+
|
|
55
|
+
- HTML-migration i 5 templates: `<li class="kv-row">` blir
|
|
56
|
+
`<li class="kv-list__item">`
|
|
57
|
+
- Bedömning per template: droppa .kv-key/.kv-value-spans, eller
|
|
58
|
+
behåll dem för tabular-nums/color
|
|
59
|
+
- Visuell verifiering per vy efter migration (runs, job_detail,
|
|
60
|
+
dashboard, insights, jobs_list)
|
|
61
|
+
- Tester: kontrollera om pytest-asserts refererar kv-row/-key/-value
|
|
62
|
+
- Slutsteg: radera Jubbs lokala .kv-list, .kv-list li, .kv-row,
|
|
63
|
+
.kv-key, .kv-value ur jubb.css
|
|
64
|
+
|
|
65
|
+
## Beroenden
|
|
66
|
+
|
|
67
|
+
- Visuell verifiering per vy via Chrome MCP eller dev-server
|
|
68
|
+
- Tester kan kräva uppdatering om kv-* selectors finns i pytest-asserts
|
|
69
|
+
|
|
70
|
+
## Avvisade alternativ
|
|
71
|
+
|
|
72
|
+
Option C (lyft .kv-row/.kv-key/.kv-value till paketet som alias för
|
|
73
|
+
flat-konvention): avvisad per ADR 0009 (no-flat-components-css).
|
|
74
|
+
Sprint 5 MADR 0009 etablerade att Ekonoms ursprungliga flat-namn
|
|
75
|
+
ersätts med generaliserade BEM-namn (.kv-list__item) i paketet. Att
|
|
76
|
+
åter-introducera flat-namn skulle åter-öppna ADR 0009 utan ny
|
|
77
|
+
arkitektonisk motivering.
|
|
78
|
+
|
|
79
|
+
## Sprint 6-leverabel
|
|
80
|
+
|
|
81
|
+
Sprint 6 fas 4 raderar dead kv-delar (.kv-list li.kv-strong/-sub/
|
|
82
|
+
-divider/-budget-row, .kv-budget-header, .kv-budget-body - 0
|
|
83
|
+
template-träffar) men behåller .kv-list, .kv-list li, .kv-row,
|
|
84
|
+
.kv-key, .kv-value tills denna MADR genomförs.
|