@klodd/ds 5.4.1 → 5.4.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/css/components/hero.css
CHANGED
|
@@ -93,7 +93,7 @@
|
|
|
93
93
|
Gemensamma utgifter) dar parent ar text-align:left. Center-just
|
|
94
94
|
overrode den left-align via flex. Nu foljer amount-row parent-
|
|
95
95
|
justification. Gap-16 ger luft mellan summa och adjacent
|
|
96
|
-
actions-knappar
|
|
96
|
+
actions-knappar. */
|
|
97
97
|
display: flex;
|
|
98
98
|
align-items: center;
|
|
99
99
|
justify-content: flex-start;
|
package/package.json
CHANGED
|
@@ -239,20 +239,6 @@ Se /design-sidan "Completion Dialog"-sektionen for visuella exempel.
|
|
|
239
239
|
- **Anvand:** Panel som expanderar pa klick. JS togglar `data-expanded`
|
|
240
240
|
- **INTE:** Modal-content (anvand `.dialog` eller `.sheet`)
|
|
241
241
|
|
|
242
|
-
### hbar (`hbar.css`)
|
|
243
|
-
- **Blocks:** `.hbar`
|
|
244
|
-
- **Element:** `.hbar__item`, `.hbar__track`, `.hbar__fill`, `.hbar__label`, `.hbar__value`
|
|
245
|
-
- **Modifiers:** `.hbar__fill--positive/-warning/-negative`
|
|
246
|
-
- **Anvand:** Generisk horisontell bar med label + value + track + fill
|
|
247
|
-
- **INTE:** Status-progress (anvand `.progress`)
|
|
248
|
-
|
|
249
|
-
### split-bar (`split-bar.css`)
|
|
250
|
-
- **Blocks:** `.split-bar`
|
|
251
|
-
- **Element:** `.split-bar__segment`, `.split-bar__label`, `.split-bar__labels`
|
|
252
|
-
- **Modifiers:** `.split-bar__segment--primary/-secondary/-positive/-negative/-warning`
|
|
253
|
-
- **Anvand:** Flersegment-bar for cost-split, debt-vs-equity m.fl.
|
|
254
|
-
- **INTE:** Single-bar-progress (anvand `.hbar`)
|
|
255
|
-
|
|
256
242
|
### hero (`hero.css`)
|
|
257
243
|
- **Blocks:** `.hero`
|
|
258
244
|
- **Element:** `.hero__heading`, `.hero__amount`, `.hero__amount-row`, `.hero__label`, `.hero__meta`, `.hero__actions`
|
|
@@ -601,7 +587,6 @@ Tier D-undantag (Sprint G 2026-05-09, listade i sektionen ovan):
|
|
|
601
587
|
- `.budget-bar-*` (5 klasser)
|
|
602
588
|
- `.cat-tx-*` (6 klasser, .cat-tx-stack har BEM-element)
|
|
603
589
|
- `.cost-bar` / `.cost-bar-seg` (2 klasser, sibling-pair)
|
|
604
|
-
- `.split-bar` (paketet har samma, override-styling)
|
|
605
590
|
|
|
606
591
|
Notera: ekonom-domain.css (kategori-tokens + bindings) listas inte har
|
|
607
592
|
- den filen ar token-definition, inte komponent-CSS. Se ADR
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
# 0017 - AsyncProgress: pipeline-flödes-gaps
|
|
2
|
+
|
|
3
|
+
## Status
|
|
4
|
+
|
|
5
|
+
Pending.
|
|
6
|
+
|
|
7
|
+
## Context
|
|
8
|
+
|
|
9
|
+
`pipeline-progress.js` i Jubb migrerades till `KloddDS.AsyncProgress`-
|
|
10
|
+
wrapper (Jubb v202, 2026-05-19, commit `f46ff70`). Brief-progress.js
|
|
11
|
+
hade redan migrerats tidigare samma dag (`d532e7e`). Under pipeline-
|
|
12
|
+
migrationen identifierades tre paket-gaps som krävde workarounds i
|
|
13
|
+
wrappern eftersom paketets default-beteende är optimerat för ett-shot-
|
|
14
|
+
flöden (brief-flödet) snarare än kontinuerlig polling (pipeline-flödet).
|
|
15
|
+
|
|
16
|
+
### Gap 1 — continuousMode
|
|
17
|
+
|
|
18
|
+
**Behov:** polling fortsätter efter `done`-callback för att detektera
|
|
19
|
+
nya körningar automatiskt. Pipeline-progress visar status på senaste
|
|
20
|
+
DigestRun - när en run klar och en ny startar måste klienten plocka upp
|
|
21
|
+
den utan sidladdning.
|
|
22
|
+
|
|
23
|
+
**Workaround:** `onComplete → setTimeout(2s) → ny AsyncProgress-instans`
|
|
24
|
+
(recursive restart). Ren ny instans varje cykel för att undvika att
|
|
25
|
+
återanvända en stoppad poller.
|
|
26
|
+
|
|
27
|
+
**Risk:** fragil mot paket-omstrukturering av lifecycle. Om AsyncProgress
|
|
28
|
+
ändrar onComplete-semantik (t.ex. flyttar invokation till efter
|
|
29
|
+
internal cleanup) kan restart-pattern brytas. Plus memory-overhead -
|
|
30
|
+
varje ny instans skapar nya closures (acceptabel för once-per-N-minute
|
|
31
|
+
körningar).
|
|
32
|
+
|
|
33
|
+
### Gap 2 — autoHide: false
|
|
34
|
+
|
|
35
|
+
**Behov:** komponenten ska vara hidden tills `data.active === true`.
|
|
36
|
+
Pipeline kan vara inaktiv vid sidladdning (vanligaste fallet eftersom
|
|
37
|
+
crons kör 3 ggr/dag). `progressEl` ska inte flasha tomt block.
|
|
38
|
+
|
|
39
|
+
**Workaround:** `root.hidden = true` direkt efter `start()` +
|
|
40
|
+
transform-managed visibility via `root.hidden = !data.active` i varje
|
|
41
|
+
poll-tick.
|
|
42
|
+
|
|
43
|
+
**Risk:** race om `start()` async-unhidar innan transform körs.
|
|
44
|
+
Nuvarande AsyncProgress.start() är synkron (`removeAttribute("hidden")`
|
|
45
|
+
i konstruktor-anrop), så pattern fungerar deterministiskt. Om paketet
|
|
46
|
+
ändras till async-init (t.ex. wait för DOM-ready) kan en kort flash
|
|
47
|
+
uppstå mellan start() och första transform.
|
|
48
|
+
|
|
49
|
+
### Gap 3 — extraRenders
|
|
50
|
+
|
|
51
|
+
**Behov:** rendera side-elements utanför paketets bar/label/pct-scope.
|
|
52
|
+
Pipeline har `batch_progress_label` som renderas parallellt med
|
|
53
|
+
progress-bar (visar "Batch 3 av 7" o.s.v. under bar:en).
|
|
54
|
+
|
|
55
|
+
**Workaround:** transform-callback renderar elementet som side-effect:
|
|
56
|
+
|
|
57
|
+
```javascript
|
|
58
|
+
function transformPayload(data) {
|
|
59
|
+
if (batchLabel) {
|
|
60
|
+
batchLabel.hidden = !data.batch_progress_label;
|
|
61
|
+
if (data.batch_progress_label) batchLabel.textContent = data.batch_progress_label;
|
|
62
|
+
}
|
|
63
|
+
// ...returnerar normal { status, stage, pct, label }
|
|
64
|
+
}
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
**Risk:** side-effects i transform bryter single-responsibility-
|
|
68
|
+
principen. Transform är dokumenterad som ren payload-normalisering
|
|
69
|
+
(`(data) → { status, stage, pct, label, ... }`). DOM-skrivning i en
|
|
70
|
+
"pure" transform är subtilt fel arkitektur. Plus svår att testa
|
|
71
|
+
(transform-funktion ärver implicit DOM-state).
|
|
72
|
+
|
|
73
|
+
## Considered options
|
|
74
|
+
|
|
75
|
+
### A. Lägg till alla tre som opt-in options i AsyncProgress
|
|
76
|
+
|
|
77
|
+
```javascript
|
|
78
|
+
new KloddDS.AsyncProgress({
|
|
79
|
+
progressEl: el,
|
|
80
|
+
pollUrl: "...",
|
|
81
|
+
continuousMode: true,
|
|
82
|
+
autoHide: false,
|
|
83
|
+
extraRenders: [
|
|
84
|
+
{ el: batchLabel, valueKey: "batch_progress_label", hideWhenEmpty: true },
|
|
85
|
+
],
|
|
86
|
+
});
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
- Minor-bump till 5.5.0 (additive features, ingen breaking change)
|
|
90
|
+
- ADR krävs (locked-decision om continuous-mode-semantik:
|
|
91
|
+
vad menas exakt med "kontinuerligt" - polling-paus efter done?
|
|
92
|
+
retry-loop? backoff?)
|
|
93
|
+
- Cleaning workarounds i Jubb's wrapper (~10 LOC sparade per gap)
|
|
94
|
+
|
|
95
|
+
### B. Lägg till bara continuousMode (vanligaste behovet)
|
|
96
|
+
|
|
97
|
+
- Patch-bump möjlig om semantik håller sig till "fortsätt polla
|
|
98
|
+
efter done" utan att rubba existing onComplete-kontrakt
|
|
99
|
+
- continuousMode triggar en onComplete-callback, men polling-loopen
|
|
100
|
+
fortsätter ostörd istället för att rensa pollTimer
|
|
101
|
+
- Klient kan opt-in via boolean utan ny config-struktur
|
|
102
|
+
|
|
103
|
+
### C. Behåll workarounds tills ett tredje use-case dyker upp
|
|
104
|
+
|
|
105
|
+
- Ingen paket-ändring
|
|
106
|
+
- Pipeline + brief är två use-cases. Tredje (Ekonom bank-sync eller
|
|
107
|
+
framtida feature) skulle trigga konsolidering
|
|
108
|
+
- Workarounds dokumenteras i Jubb's wrapper (redan gjort i
|
|
109
|
+
JSDoc-header för `pipeline-progress.js`)
|
|
110
|
+
|
|
111
|
+
## Pending decision criteria
|
|
112
|
+
|
|
113
|
+
Aktiveras när:
|
|
114
|
+
|
|
115
|
+
- Ekonom bank-synk eller annan app adopterar AsyncProgress och stöter
|
|
116
|
+
på samma gaps (continuous polling + lazy-show + extra-rendering).
|
|
117
|
+
Aktuell ETA okänd - bank-synk är planerad men inte påbörjad per
|
|
118
|
+
Ekonom DECISIONS.md
|
|
119
|
+
- Eller: workarounds visar sig instabila i prod (memory-leak från
|
|
120
|
+
recursive instances, race-condition på start()-hide, transform-
|
|
121
|
+
test-flakiness)
|
|
122
|
+
|
|
123
|
+
Inte prioriterat förrän en av ovan inträffar. Wrappern fungerar i
|
|
124
|
+
produktion (Jubb v202+) - gaps är arkitektur-städ, inte funktionalitet.
|
|
125
|
+
|
|
126
|
+
## References
|
|
127
|
+
|
|
128
|
+
- Jubb commit `f46ff70` - pipeline-progress migration som upptäckte
|
|
129
|
+
gaps
|
|
130
|
+
- Jubb commit `d532e7e` - brief-progress migration (ett-shot-flöde som
|
|
131
|
+
matchar AsyncProgress's default-design)
|
|
132
|
+
- ADR 0016-async-progress-fetch-fn (`04-locked-decisions/`) - tidigare
|
|
133
|
+
AsyncProgress-utvidgning för demo/test-injection via fetchFn
|
|
134
|
+
- `~/dev/klodd-ds/js/async-progress.js` - paket-implementation
|
|
135
|
+
- `~/dev/Jubb/app/static/js/pipeline-progress.js` - wrapper med
|
|
136
|
+
workarounds (68 LOC)
|