@klodd/ds 3.8.0 → 3.9.0
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/css/components/auth.css +7 -0
- package/css/components/button.css +12 -0
- package/css/components/kv-list.css +84 -0
- package/css/components/nav.css +8 -1
- package/css/components/offline.css +53 -0
- package/css/index.css +4 -0
- package/package.json +1 -1
- package/references/02-components.md +19 -4
- package/references/05-open-decisions/0003-js-duplicates-migration-CLOSED.md +4 -2
- package/references/05-open-decisions/0004-halsomentorn-legacy-css-CLOSED.md +1 -2
- package/references/05-open-decisions/{0009-ekonom-css-legacy-cleanup.md → 0009-ekonom-css-legacy-cleanup-CLOSED.md} +7 -1
- package/references/05-open-decisions/{0007-banner-body-migration.md → 0010-banner-body-migration-CLOSED.md} +2 -2
- package/references/05-open-decisions/{0008-hbar-migration-ekonom.md → 0011-hbar-migration-ekonom-CLOSED.md} +2 -2
package/css/components/auth.css
CHANGED
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
- --primary solid accent
|
|
8
8
|
- --secondary surface med border
|
|
9
9
|
- --ghost transparent text
|
|
10
|
+
- --positive transparent + positive-border (Ekonom-lyft Sprint 5)
|
|
10
11
|
- --danger solid danger
|
|
11
12
|
|
|
12
13
|
Standardstorlekar:
|
|
@@ -117,6 +118,17 @@
|
|
|
117
118
|
}
|
|
118
119
|
}
|
|
119
120
|
|
|
121
|
+
/* --positive: transparent + positive-border. Bekraftande action
|
|
122
|
+
(t.ex. "Gemensam"-flagga i review_queue). Lyft fran Ekonom v3.9.0. */
|
|
123
|
+
.btn--positive {
|
|
124
|
+
background: transparent;
|
|
125
|
+
color: var(--positive);
|
|
126
|
+
border-color: var(--positive-border);
|
|
127
|
+
}
|
|
128
|
+
@media (hover: hover) and (pointer: fine) {
|
|
129
|
+
.btn--positive:hover { background: var(--positive-dim); }
|
|
130
|
+
}
|
|
131
|
+
|
|
120
132
|
/* --danger: solid danger. Destruktiv action. */
|
|
121
133
|
.btn--danger {
|
|
122
134
|
background: var(--bg-danger);
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/* ================================================================
|
|
2
|
+
components/kv-list.css
|
|
3
|
+
Key-value list - generiskt monster for metadata-rader med
|
|
4
|
+
label till vanster och varde till hoger. Anvands for metric-
|
|
5
|
+
breakdowns, statistik-paneler, settings-summaries.
|
|
6
|
+
|
|
7
|
+
Blocks:
|
|
8
|
+
.kv-list - <ul>-wrapper, nollstaller list-styling
|
|
9
|
+
|
|
10
|
+
Element:
|
|
11
|
+
.kv-list__item - en rad (justify-content: space-between)
|
|
12
|
+
.kv-budget-header - rubrik-rad for budget-expandering
|
|
13
|
+
(compound-block per regel 11)
|
|
14
|
+
.kv-budget-body - expanderat innehall (compound-block)
|
|
15
|
+
|
|
16
|
+
Modifiers (pa .kv-list__item):
|
|
17
|
+
--strong - primary text + medium weight
|
|
18
|
+
--sub - secondary text + smaller font
|
|
19
|
+
--divider - horisontell separator-rad
|
|
20
|
+
--budget - block-display for burndown-rad med expanderbar header
|
|
21
|
+
|
|
22
|
+
Lyft fran Ekonoms ekonom.css LEGACY-sektion i v3.9.0 (Sprint 5,
|
|
23
|
+
MADR 0009). Generaliserade BEM-namn ersatter Ekonoms ursprungliga
|
|
24
|
+
.kv-strong/.kv-sub/.kv-divider/.kv-budget-row klasser.
|
|
25
|
+
================================================================ */
|
|
26
|
+
.kv-list {
|
|
27
|
+
list-style: none;
|
|
28
|
+
padding: 0;
|
|
29
|
+
margin: 0;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
.kv-list__item {
|
|
33
|
+
display: flex;
|
|
34
|
+
justify-content: space-between;
|
|
35
|
+
align-items: baseline;
|
|
36
|
+
padding: var(--space-8) 0;
|
|
37
|
+
font-size: var(--fs-13);
|
|
38
|
+
color: var(--text-subtle);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
.kv-list__item--strong {
|
|
42
|
+
color: var(--text-default);
|
|
43
|
+
font-weight: var(--fw-medium);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
.kv-list__item--sub {
|
|
47
|
+
font-size: var(--fs-11);
|
|
48
|
+
color: var(--text-subtle);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
.kv-list__item--divider {
|
|
52
|
+
border-bottom: 1px solid var(--border-subtle);
|
|
53
|
+
padding: 0;
|
|
54
|
+
margin: var(--space-4) 0;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
.kv-list__item--budget {
|
|
58
|
+
display: block;
|
|
59
|
+
padding: 0;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
.kv-budget-header {
|
|
63
|
+
display: flex;
|
|
64
|
+
justify-content: space-between;
|
|
65
|
+
align-items: baseline;
|
|
66
|
+
padding: var(--space-8) 0;
|
|
67
|
+
cursor: pointer;
|
|
68
|
+
user-select: none;
|
|
69
|
+
-webkit-tap-highlight-color: transparent;
|
|
70
|
+
touch-action: manipulation;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
.kv-budget-body {
|
|
74
|
+
padding: var(--space-4) 0 var(--space-8) 0;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
.kv-budget-body .kv-list__item--sub {
|
|
78
|
+
display: flex;
|
|
79
|
+
justify-content: space-between;
|
|
80
|
+
align-items: baseline;
|
|
81
|
+
font-size: var(--fs-11);
|
|
82
|
+
color: var(--text-subtle);
|
|
83
|
+
padding: var(--space-4) 0;
|
|
84
|
+
}
|
package/css/components/nav.css
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
|
|
10
10
|
HTML-relationer:
|
|
11
11
|
.bottom-nav > .bottom-nav__item (BEM-element)
|
|
12
|
-
.topbar > .topbar__back/__title/__action (BEM-element)
|
|
12
|
+
.topbar > .topbar__back/__title/__action/__logo (BEM-element)
|
|
13
13
|
|
|
14
14
|
Modifiers/States:
|
|
15
15
|
.bottom-nav__item--active - aktiv pod (Sprint F BEM-konvertering)
|
|
@@ -176,6 +176,13 @@
|
|
|
176
176
|
outline-offset: 2px;
|
|
177
177
|
}
|
|
178
178
|
|
|
179
|
+
.topbar__logo {
|
|
180
|
+
font-size: var(--fs-14);
|
|
181
|
+
font-weight: var(--fw-medium);
|
|
182
|
+
letter-spacing: var(--ls-snug);
|
|
183
|
+
color: var(--text-default);
|
|
184
|
+
}
|
|
185
|
+
|
|
179
186
|
@media (prefers-reduced-motion: reduce) {
|
|
180
187
|
.bottom-nav__item:active { transform: none; }
|
|
181
188
|
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/* ================================================================
|
|
2
|
+
components/offline.css
|
|
3
|
+
Offline-page layout - visas av service worker vid natverksfel.
|
|
4
|
+
Generiskt PWA-monster for alla appar med offline-support.
|
|
5
|
+
|
|
6
|
+
Blocks (compound, alla anvands tillsammans):
|
|
7
|
+
.offline-wrap - centrerad full-page container (min-height 70vh)
|
|
8
|
+
.offline-icon - stor ikon-display (64x64, surface-raised)
|
|
9
|
+
.offline-title - primar rubrik (fs-22, medium)
|
|
10
|
+
.offline-text - beskrivande text (max-width 320px)
|
|
11
|
+
|
|
12
|
+
Lyft fran Ekonoms ekonom.css LEGACY-sektion i v3.9.0 (Sprint 5,
|
|
13
|
+
MADR 0009). Compound-block-monster per regel 11 - alla 4 blocks
|
|
14
|
+
anvands tillsammans pa offline.html.
|
|
15
|
+
================================================================ */
|
|
16
|
+
.offline-wrap {
|
|
17
|
+
display: flex;
|
|
18
|
+
flex-direction: column;
|
|
19
|
+
align-items: center;
|
|
20
|
+
justify-content: center;
|
|
21
|
+
min-height: 70vh;
|
|
22
|
+
text-align: center;
|
|
23
|
+
padding: var(--space-32) var(--space-20);
|
|
24
|
+
gap: var(--space-16);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
.offline-icon {
|
|
28
|
+
width: 64px;
|
|
29
|
+
height: 64px;
|
|
30
|
+
background: var(--surface-raised);
|
|
31
|
+
border: 1px solid var(--border-default);
|
|
32
|
+
border-radius: var(--radius-20);
|
|
33
|
+
display: flex;
|
|
34
|
+
align-items: center;
|
|
35
|
+
justify-content: center;
|
|
36
|
+
color: var(--text-subtle);
|
|
37
|
+
margin-bottom: var(--space-8);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
.offline-title {
|
|
41
|
+
font-size: var(--fs-22);
|
|
42
|
+
font-weight: var(--fw-medium);
|
|
43
|
+
letter-spacing: var(--ls-tight);
|
|
44
|
+
color: var(--text-default);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
.offline-text {
|
|
48
|
+
font-size: var(--fs-14);
|
|
49
|
+
color: var(--text-subtle);
|
|
50
|
+
max-width: 320px;
|
|
51
|
+
line-height: var(--lh-base);
|
|
52
|
+
margin-bottom: var(--space-8);
|
|
53
|
+
}
|
package/css/index.css
CHANGED
|
@@ -65,3 +65,7 @@
|
|
|
65
65
|
|
|
66
66
|
/* v3.5.1 - sheet-content (sprint-65 form-monster, generiska BEM-namn) */
|
|
67
67
|
@import './components/sheet-content.css';
|
|
68
|
+
|
|
69
|
+
/* v3.9.0 - lyft fran Ekonoms LEGACY-sektion (Sprint 5 MADR 0009) */
|
|
70
|
+
@import './components/kv-list.css';
|
|
71
|
+
@import './components/offline.css';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@klodd/ds",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.9.0",
|
|
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": {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Komponentkatalog
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
37 komponent-filer i `@klodd/ds@3.x`. Alla refererar bara semantic tokens -
|
|
4
4
|
inga primitives. BEM-konvention (block__element--modifier).
|
|
5
5
|
|
|
6
6
|
## Klassificeringsformat
|
|
@@ -19,7 +19,7 @@ För varje entry gäller:
|
|
|
19
19
|
|
|
20
20
|
### button (`button.css`)
|
|
21
21
|
- **Blocks:** `.btn`
|
|
22
|
-
- **Modifiers:** `.btn--primary/-secondary/-ghost/-danger`, `.btn--sm/-lg/-icon/-circle`, `.btn--block/-add`, `.btn--loading`
|
|
22
|
+
- **Modifiers:** `.btn--primary/-secondary/-ghost/-positive/-danger`, `.btn--sm/-lg/-icon/-circle`, `.btn--block/-add`, `.btn--loading`
|
|
23
23
|
- **Anvand:** alla aktioner med tap-target >=44px
|
|
24
24
|
- **INTE:** Cirkel-link i topbar (anvand `.btn--icon.btn--circle`)
|
|
25
25
|
- **Tokens:** `--surface-default/-hover/-active`, `--text-default/-on-accent`, `--border-default/-focus`, `--accent-9/-10`, `--bg-danger`, `--touch-min`
|
|
@@ -48,8 +48,8 @@ För varje entry gäller:
|
|
|
48
48
|
- **Tokens:** `--surface-raised/-overlay/-hover`, `--border-subtle/-default/-focus`
|
|
49
49
|
|
|
50
50
|
### nav (`nav.css`)
|
|
51
|
-
- **Blocks:** `.bottom-nav`, `.topbar
|
|
52
|
-
- **Element:** `.bottom-nav__item`, `.topbar__back`, `.topbar__title`, `.topbar__action`
|
|
51
|
+
- **Blocks:** `.bottom-nav`, `.topbar`
|
|
52
|
+
- **Element:** `.bottom-nav__item`, `.topbar__back`, `.topbar__title`, `.topbar__action`, `.topbar__logo`
|
|
53
53
|
- **Modifiers:** `.bottom-nav__item--active` (Sprint F BEM-konvertering)
|
|
54
54
|
- **States:** `.tab.active`
|
|
55
55
|
- **Anvand:** Mobile bottom-nav (fixed), in-flow topbar, segmented tabs
|
|
@@ -221,6 +221,7 @@ För varje entry gäller:
|
|
|
221
221
|
### auth (`auth.css`)
|
|
222
222
|
- **Blocks:** `.auth-container`
|
|
223
223
|
- **Element:** `.auth-container__title`, `.auth-container__subtitle`
|
|
224
|
+
- **Modifiers:** `.auth-container--narrow` (max-width 480px, ej full-page-centrerad - for onboarding-vyer)
|
|
224
225
|
- **Anvand:** Centrerad layout for inloggning + onboarding
|
|
225
226
|
- **INTE:** Settings-vyer
|
|
226
227
|
|
|
@@ -271,6 +272,20 @@ För varje entry gäller:
|
|
|
271
272
|
- **Tokens:** `--bar-accent` (sattes av app-bindning), `--accent-9` (default)
|
|
272
273
|
- **Pattern:** Se "Kategori-monstret" nedan
|
|
273
274
|
|
|
275
|
+
### kv-list (`kv-list.css`) - v3.9.0
|
|
276
|
+
- **Blocks:** `.kv-list` (`<ul>`-wrapper)
|
|
277
|
+
- **Element:** `.kv-list__item`, `.kv-budget-header` (compound, klickbar header), `.kv-budget-body` (compound, expanderat innehall)
|
|
278
|
+
- **Modifiers:** `.kv-list__item--strong/-sub/-divider/-budget`
|
|
279
|
+
- **Anvand:** Key-value list for metric-breakdowns, statistik-paneler, settings-summaries
|
|
280
|
+
- **INTE:** List av actions (anvand `.list-row` eller `.setting-row`)
|
|
281
|
+
- **Special:** `.kv-budget-header` + `.kv-budget-body` ar compound-blocks per regel 11 - lyftade fran Ekonoms LEGACY utan rename for att bibehalla template-kompabilitet.
|
|
282
|
+
|
|
283
|
+
### offline (`offline.css`) - v3.9.0
|
|
284
|
+
- **Blocks (compound):** `.offline-wrap`, `.offline-icon`, `.offline-title`, `.offline-text`
|
|
285
|
+
- **Anvand:** Offline-page layout som SW visar vid natverksfel
|
|
286
|
+
- **INTE:** Inline empty-state i listor (anvand `.empty-state` fran feedback.css)
|
|
287
|
+
- **Special:** Alla 4 blocks anvands tillsammans i offline.html. Compound-block-monster per regel 11.
|
|
288
|
+
|
|
274
289
|
### sheet-content (`sheet-content.css`) - v3.5.1
|
|
275
290
|
- **Blocks:** `.sheet` (kompletterar `.sheet` fran `overlay.css` med innehall-typografi och form-monster)
|
|
276
291
|
- **Element:** `.sheet__title`, `.sheet__description`, `.sheet__form`, `.sheet__field`, `.sheet__field-label`, `.sheet__hint`, `.sheet__items`, `.sheet__item`, `.sheet__actions`, `.sheet__toggle`, `.sheet__subform`, `.sheet__save`, `.sheet__delete`, `.sheet__handle`, `.sheet__body`, `.sheet__divider` (kompletterande element)
|
|
@@ -9,8 +9,10 @@ base.html: <script src="/static/js/{bar-styles,hero-roll}.js"> bytt till
|
|
|
9
9
|
raderade (app/static/js/bar-styles.js + app/static/js/hero-roll.js).
|
|
10
10
|
Pytest 636/636.
|
|
11
11
|
|
|
12
|
-
Jubb status
|
|
13
|
-
|
|
12
|
+
**Jubb status (verifierat 2026-05-10):** Jubb har 0 app-egen kopior i
|
|
13
|
+
`app/static/js/`-roten. Bara paket-syncade versioner i `app/static/js/ds/`
|
|
14
|
+
finns (`bar-styles.js`, `hero-roll.js`). Hela MADR 0003 ar nu LOST -
|
|
15
|
+
ingen drift kvar i nagon app.
|
|
14
16
|
|
|
15
17
|
## Context
|
|
16
18
|
Bade Jubb och Ekonom har for tillfallet `bar-styles.js` och
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
# 0004 - Halsomentorn legacy-CSS i Ekonom
|
|
2
2
|
|
|
3
3
|
## Status
|
|
4
|
-
Closed
|
|
5
|
-
tills Halsomentorn-projektet eventuellt ateruptas. Ingen action kravs.
|
|
4
|
+
Closed. halsomentorn.css raderad ur Ekonom i Sprint D-1 (2026-05-09). Projektet är arkiverat.
|
|
6
5
|
|
|
7
6
|
## Context
|
|
8
7
|
Ekonoms `app/static/css/ds/halsomentorn.css` ar 1783 rader CSS som
|
|
@@ -1,7 +1,13 @@
|
|
|
1
1
|
# 0009 - ekonom.css LEGACY-sektion cleanup
|
|
2
2
|
|
|
3
3
|
## Status
|
|
4
|
-
|
|
4
|
+
Closed 2026-05-10 i Sprint 5 via @klodd/ds 3.9.0. Fem klasser/family lyfta
|
|
5
|
+
till paketet (`.topbar__logo` i nav.css, ny `kv-list.css` med BEM-element,
|
|
6
|
+
ny `offline.css` med compound-blocks, `.auth-container--narrow`-modifier
|
|
7
|
+
i auth.css, `.btn--positive`-variant i button.css). Fyra klasser stannar
|
|
8
|
+
i Ekonoms `ekonom.css` LEGACY-sektion: `.btn-copy/.btn-bank`,
|
|
9
|
+
`.bank-row-icon`, `.profile-panel-centered`, `.rule-arrow/.rule-cat` -
|
|
10
|
+
alla Ekonom-specifika utan generisk paket-anvandning.
|
|
5
11
|
|
|
6
12
|
## Context
|
|
7
13
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
#
|
|
1
|
+
# 0010 - .banner-body migration i sync_result.html
|
|
2
2
|
|
|
3
3
|
## Status
|
|
4
|
-
|
|
4
|
+
Closed 2026-05-10 via mekanisk substitution. Ekonom-commit [5d5b273](https://github.com/drawn124578/ekonom/commit/5d5b273).
|
|
5
5
|
|
|
6
6
|
## Context
|
|
7
7
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
#
|
|
1
|
+
# 0011 - .hbar-* dash → BEM-migration i Ekonom
|
|
2
2
|
|
|
3
3
|
## Status
|
|
4
|
-
|
|
4
|
+
Closed 2026-05-10 via mekanisk substitution + radering av dash-form-definitioner i ekonom.css CHARTS-sektion (37 rader). Ekonom-commit [5d5b273](https://github.com/drawn124578/ekonom/commit/5d5b273).
|
|
5
5
|
|
|
6
6
|
## Context
|
|
7
7
|
|