@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.
@@ -26,3 +26,10 @@
26
26
  margin: 0 0 var(--space-24);
27
27
  font-size: var(--fs-13);
28
28
  }
29
+
30
+ .auth-container--narrow {
31
+ min-height: auto;
32
+ max-width: 480px;
33
+ margin-left: auto;
34
+ margin-right: auto;
35
+ }
@@ -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
+ }
@@ -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.8.0",
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
- 35 komponent-filer i `@klodd/ds@3.x`. Alla refererar bara semantic tokens -
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`, `.tab-bar`, `.tab` (child av tab-bar)
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: kvarvarande oppen - kan stangas i samma monster nar Jubb
13
- faktiskt anvander dem (icke-blockande for narvarande).
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 - Halsomentorn arkiverat. `ds/halsomentorn.css` behalls i Ekonom
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
- Pending, medel prioritet.
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
- # 0007 - .banner-body migration i sync_result.html
1
+ # 0010 - .banner-body migration i sync_result.html
2
2
 
3
3
  ## Status
4
- Pending, låg prioritet.
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
- # 0008 - .hbar-* dash → BEM-migration i Ekonom
1
+ # 0011 - .hbar-* dash → BEM-migration i Ekonom
2
2
 
3
3
  ## Status
4
- Pending, låg prioritet.
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