@klodd/ds 5.4.3 → 5.6.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/README.md +1 -2
- package/css/00-primitives.css +1 -22
- package/css/10-semantic.css +22 -100
- package/css/base/interactions.css +241 -0
- package/css/base/pwa.css +14 -4
- package/css/components/avatar.css +6 -6
- package/css/components/badge.css +2 -2
- package/css/components/button.css +1 -2
- package/css/components/chip.css +2 -2
- package/css/components/feedback.css +4 -4
- package/css/components/hero.css +3 -3
- package/css/components/hub-card.css +2 -2
- package/css/components/inline-edit.css +2 -2
- package/css/components/list-row.css +2 -2
- package/css/components/pwa-avatar.css +2 -2
- package/css/components/swipe-stack.css +2 -2
- package/css/components/upload-spinner.css +2 -2
- package/css/index.css +1 -9
- package/package.json +3 -2
- package/references/04-locked-decisions/0010-collapsible-block-rename.md +1 -1
- package/references/05-open-decisions/0017-async-progress-pipeline-gaps.md +3 -3
- package/css/components/expandable-row.css +0 -176
- package/css/components/icon-circle.css +0 -46
- package/css/components/item-stack.css +0 -43
- package/css/components/kvp-arrow.css +0 -22
- package/css/components/matched-row.css +0 -51
- package/css/components/review-banner.css +0 -70
- package/css/components/status-icon.css +0 -32
- package/css/components/tag-inline.css +0 -21
- package/js/index.js +0 -95
|
@@ -6,8 +6,8 @@
|
|
|
6
6
|
- Hard-refresh-trigger via klick (se hard-refresh.js)
|
|
7
7
|
- Subtle accent-soft-bg + accent-text istallet for accent-9-gradient
|
|
8
8
|
|
|
9
|
-
Storlek
|
|
10
|
-
|
|
9
|
+
Storlek 44x44 (--touch-min) for WCAG-godkänd tap-area, höjd från
|
|
10
|
+
36x36 i Sprint 1 Del C.
|
|
11
11
|
|
|
12
12
|
Blocks:
|
|
13
13
|
.pwa-avatar - klickbar app-brand-avatar (button-element)
|
|
@@ -176,8 +176,8 @@
|
|
|
176
176
|
display: inline-flex;
|
|
177
177
|
align-items: center;
|
|
178
178
|
justify-content: center;
|
|
179
|
-
width:
|
|
180
|
-
height:
|
|
179
|
+
width: var(--circle-size-lg);
|
|
180
|
+
height: var(--circle-size-lg);
|
|
181
181
|
background: var(--surface-raised);
|
|
182
182
|
border: 1px solid var(--border-default);
|
|
183
183
|
border-radius: var(--radius-full);
|
|
@@ -39,8 +39,8 @@
|
|
|
39
39
|
.upload-spinner-overlay.is-visible { display: flex; }
|
|
40
40
|
|
|
41
41
|
.upload-spinner {
|
|
42
|
-
width:
|
|
43
|
-
height:
|
|
42
|
+
width: var(--circle-size-lg);
|
|
43
|
+
height: var(--circle-size-lg);
|
|
44
44
|
border: 3px solid var(--accent-a3);
|
|
45
45
|
border-top-color: var(--accent-9);
|
|
46
46
|
border-radius: var(--radius-full);
|
package/css/index.css
CHANGED
|
@@ -22,6 +22,7 @@
|
|
|
22
22
|
@import './base/pwa.css';
|
|
23
23
|
@import './base/typography.css';
|
|
24
24
|
@import './base/layout.css';
|
|
25
|
+
@import './base/interactions.css';
|
|
25
26
|
|
|
26
27
|
/* Komponenter */
|
|
27
28
|
@import './components/button.css';
|
|
@@ -78,15 +79,6 @@
|
|
|
78
79
|
@import './components/kv-list.css';
|
|
79
80
|
@import './components/offline.css';
|
|
80
81
|
|
|
81
|
-
/* v4.4.0 - lyft fran Ekonom-domain (ADR 0020 - domain-to-package) */
|
|
82
|
-
@import './components/review-banner.css';
|
|
83
|
-
@import './components/matched-row.css';
|
|
84
|
-
@import './components/status-icon.css';
|
|
85
|
-
@import './components/tag-inline.css';
|
|
86
|
-
@import './components/kvp-arrow.css';
|
|
87
|
-
@import './components/icon-circle.css';
|
|
88
|
-
@import './components/expandable-row.css';
|
|
89
|
-
@import './components/item-stack.css';
|
|
90
82
|
/* column-bar.css + dual-bar.css RADERADE v5.0.0 (ADR 0022) -
|
|
91
83
|
amorterings-historik visas som kv-list (siffror) istallet for
|
|
92
84
|
vertikala staplar; equity-split visas som tva .progress med
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@klodd/ds",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.6.0",
|
|
4
4
|
"description": "Klodd shared design system - tokens, components, JS",
|
|
5
5
|
"main": "css/index.css",
|
|
6
6
|
"bin": {
|
|
@@ -15,7 +15,8 @@
|
|
|
15
15
|
"references/"
|
|
16
16
|
],
|
|
17
17
|
"scripts": {
|
|
18
|
-
"lint:css": "stylelint 'css/**/*.css'"
|
|
18
|
+
"lint:css": "stylelint 'css/**/*.css'",
|
|
19
|
+
"verify:docs": "node scripts/verify-docs.js"
|
|
19
20
|
},
|
|
20
21
|
"engines": {
|
|
21
22
|
"node": ">=16.7"
|
|
@@ -33,7 +33,7 @@ Blocket (.collapsible-card) oförändrat.
|
|
|
33
33
|
~15 ändringar + 1 JS-ändring (app.js rad 202).
|
|
34
34
|
|
|
35
35
|
## Decision
|
|
36
|
-
**Alternativ A.** Elementen är rätt
|
|
36
|
+
**Alternativ A.** Elementen är rätt - `.collapsible__` speglar det
|
|
37
37
|
semantiska begreppet. Blocket är det som avviker. "-card"-suffixet är
|
|
38
38
|
en implementationsdetalj från ursprunglig skapelse, inte en semantisk
|
|
39
39
|
egenskap. JS-kopplingen via data-attribut gör att rename är renare än
|
|
@@ -13,7 +13,7 @@ migrationen identifierades tre paket-gaps som krävde workarounds i
|
|
|
13
13
|
wrappern eftersom paketets default-beteende är optimerat för ett-shot-
|
|
14
14
|
flöden (brief-flödet) snarare än kontinuerlig polling (pipeline-flödet).
|
|
15
15
|
|
|
16
|
-
### Gap 1
|
|
16
|
+
### Gap 1 - continuousMode
|
|
17
17
|
|
|
18
18
|
**Behov:** polling fortsätter efter `done`-callback för att detektera
|
|
19
19
|
nya körningar automatiskt. Pipeline-progress visar status på senaste
|
|
@@ -30,7 +30,7 @@ internal cleanup) kan restart-pattern brytas. Plus memory-overhead -
|
|
|
30
30
|
varje ny instans skapar nya closures (acceptabel för once-per-N-minute
|
|
31
31
|
körningar).
|
|
32
32
|
|
|
33
|
-
### Gap 2
|
|
33
|
+
### Gap 2 - autoHide: false
|
|
34
34
|
|
|
35
35
|
**Behov:** komponenten ska vara hidden tills `data.active === true`.
|
|
36
36
|
Pipeline kan vara inaktiv vid sidladdning (vanligaste fallet eftersom
|
|
@@ -46,7 +46,7 @@ i konstruktor-anrop), så pattern fungerar deterministiskt. Om paketet
|
|
|
46
46
|
ändras till async-init (t.ex. wait för DOM-ready) kan en kort flash
|
|
47
47
|
uppstå mellan start() och första transform.
|
|
48
48
|
|
|
49
|
-
### Gap 3
|
|
49
|
+
### Gap 3 - extraRenders
|
|
50
50
|
|
|
51
51
|
**Behov:** rendera side-elements utanför paketets bar/label/pct-scope.
|
|
52
52
|
Pipeline har `batch_progress_label` som renderas parallellt med
|
|
@@ -1,176 +0,0 @@
|
|
|
1
|
-
/* ================================================================
|
|
2
|
-
components/expandable-row.css
|
|
3
|
-
Klickbar collapsible-summary-rad. Header visar label + total-amount
|
|
4
|
-
+ chevron. Body visas nar expanderad (via JS data-expanded + CSS
|
|
5
|
-
:has-style eller class-toggling).
|
|
6
|
-
|
|
7
|
-
Anvands for kategori-rollups (Mat 1234 kr expanderar till listing
|
|
8
|
-
av transaktioner), sektion-totaler, drill-down-aggregat.
|
|
9
|
-
|
|
10
|
-
Lyft fran Ekonom v4.4.0 (var .cat-row + .cat-list-row, ADR 0020).
|
|
11
|
-
|
|
12
|
-
Blocks:
|
|
13
|
-
.expandable-row - block med header + collapsible body
|
|
14
|
-
.expandable-list - <ul>-wrapper for flera expandable-rows
|
|
15
|
-
.expandable-row__item - BEM-element: nested item inom expanderad
|
|
16
|
-
body (anvands utan att vara child av
|
|
17
|
-
.expandable-row i CSS, lever via JS-
|
|
18
|
-
expansion)
|
|
19
|
-
|
|
20
|
-
Element:
|
|
21
|
-
.expandable-row__header - klickbar header-rad
|
|
22
|
-
.expandable-row__label - vansterstalld text
|
|
23
|
-
.expandable-row__amount - hoger-stalld tabular-amount
|
|
24
|
-
.expandable-row__chev - chevron-svg, roterar 180deg vid expanded
|
|
25
|
-
.expandable-row__total - footer-rad med summa nar body expanderad
|
|
26
|
-
|
|
27
|
-
Item-element:
|
|
28
|
-
.expandable-row__item-list - <ul>-wrapper for items inom body
|
|
29
|
-
.expandable-row__item-body - container for item-rad
|
|
30
|
-
.expandable-row__item-desc - description-text (ellipsis-truncerad)
|
|
31
|
-
.expandable-row__item-date - micro-date-text
|
|
32
|
-
.expandable-row__item-amount - tabular-amount
|
|
33
|
-
|
|
34
|
-
Item-modifiers:
|
|
35
|
-
.expandable-row__item--excluded - strikethrough + muted
|
|
36
|
-
.expandable-row__item--pending - subtle-color amount
|
|
37
|
-
.expandable-row__item--clickable - hover/focus-feedback
|
|
38
|
-
.expandable-row__item--credit - positive-fargad amount
|
|
39
|
-
================================================================ */
|
|
40
|
-
|
|
41
|
-
.expandable-list {
|
|
42
|
-
list-style: none;
|
|
43
|
-
padding: 0;
|
|
44
|
-
margin: 0;
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
.expandable-row {
|
|
48
|
-
border-top: var(--border-hairline-subtle);
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
.expandable-row:first-child {
|
|
52
|
-
border-top: 0;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
.expandable-row__header {
|
|
56
|
-
display: flex;
|
|
57
|
-
align-items: center;
|
|
58
|
-
gap: var(--space-10);
|
|
59
|
-
padding: var(--space-10) 0;
|
|
60
|
-
cursor: pointer;
|
|
61
|
-
font-size: var(--fs-14);
|
|
62
|
-
color: var(--text-default);
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
.expandable-row__header:focus-visible {
|
|
66
|
-
outline: 2px solid var(--accent-9);
|
|
67
|
-
outline-offset: -2px;
|
|
68
|
-
border-radius: var(--radius-4);
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
.expandable-row[data-expanded] .expandable-row__chev {
|
|
72
|
-
transform: rotate(180deg);
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
.expandable-row__label { flex: 1; min-width: 0; }
|
|
76
|
-
.expandable-row__amount { font-variant-numeric: tabular-nums; color: var(--text-default); }
|
|
77
|
-
|
|
78
|
-
.expandable-row__chev {
|
|
79
|
-
color: var(--text-muted);
|
|
80
|
-
transition: var(--tr-transform-medium);
|
|
81
|
-
flex-shrink: 0;
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
.expandable-row__total {
|
|
85
|
-
display: flex;
|
|
86
|
-
gap: var(--space-10);
|
|
87
|
-
padding: var(--space-12) 0 var(--space-4);
|
|
88
|
-
font-weight: var(--fw-medium);
|
|
89
|
-
border-top: var(--border-hairline-default);
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
.expandable-row__total .expandable-row__amount { font-weight: var(--fw-medium); }
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
/* ================================================================
|
|
96
|
-
==== ITEMS (inom expanderad body)
|
|
97
|
-
================================================================ */
|
|
98
|
-
|
|
99
|
-
.expandable-row__item-list {
|
|
100
|
-
list-style: none;
|
|
101
|
-
padding: var(--space-4) 0 var(--space-12) var(--space-12);
|
|
102
|
-
margin: 0;
|
|
103
|
-
border-left: var(--bw-medium) solid var(--border-subtle);
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
.expandable-row__item {
|
|
107
|
-
display: flex;
|
|
108
|
-
align-items: center;
|
|
109
|
-
gap: var(--space-10);
|
|
110
|
-
padding: var(--space-6) 0;
|
|
111
|
-
font-size: var(--fs-13);
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
.expandable-row__item-body {
|
|
115
|
-
flex: 1;
|
|
116
|
-
min-width: 0;
|
|
117
|
-
display: flex;
|
|
118
|
-
flex-direction: column;
|
|
119
|
-
gap: var(--space-2);
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
.expandable-row__item-desc {
|
|
123
|
-
color: var(--text-subtle);
|
|
124
|
-
white-space: nowrap;
|
|
125
|
-
overflow: hidden;
|
|
126
|
-
text-overflow: ellipsis;
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
.expandable-row__item-date {
|
|
130
|
-
font-size: var(--fs-11);
|
|
131
|
-
color: var(--text-muted);
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
.expandable-row__item-amount {
|
|
135
|
-
color: var(--text-subtle);
|
|
136
|
-
font-variant-numeric: tabular-nums;
|
|
137
|
-
flex-shrink: 0;
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
/* ================================================================
|
|
142
|
-
==== ITEM MODIFIERS
|
|
143
|
-
================================================================ */
|
|
144
|
-
|
|
145
|
-
.expandable-row__item--clickable {
|
|
146
|
-
cursor: pointer;
|
|
147
|
-
transition: var(--tr-bg-fast);
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
@media (hover: hover) and (pointer: fine) {
|
|
151
|
-
.expandable-row__item--clickable:hover { background: var(--surface-subtle); }
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
.expandable-row__item--clickable:focus-visible {
|
|
155
|
-
outline: 2px solid var(--accent-9);
|
|
156
|
-
outline-offset: -2px;
|
|
157
|
-
border-radius: var(--radius-4);
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
.expandable-row__item--excluded .expandable-row__item-desc,
|
|
161
|
-
.expandable-row__item--excluded .expandable-row__item-amount {
|
|
162
|
-
color: var(--text-muted);
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
.expandable-row__item--excluded .expandable-row__item-amount {
|
|
166
|
-
text-decoration: line-through;
|
|
167
|
-
text-decoration-thickness: 1px;
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
.expandable-row__item--pending .expandable-row__item-amount {
|
|
171
|
-
color: var(--text-subtle);
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
.expandable-row__item--credit .expandable-row__item-amount {
|
|
175
|
-
color: var(--positive);
|
|
176
|
-
}
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
/* ================================================================
|
|
2
|
-
components/icon-circle.css
|
|
3
|
-
Rund icon-container med tonad bakgrund. Anvands for status-
|
|
4
|
-
indikatorer i list-rader (bank-koppling kompletterad, level-up
|
|
5
|
-
uppnatt, notis-dot etc).
|
|
6
|
-
|
|
7
|
-
Storlek 28x28 default - tatare an .avatar (36x36) for in-line
|
|
8
|
-
placement bredvid text-rader.
|
|
9
|
-
|
|
10
|
-
Lyft fran Ekonom v4.4.0 (var .bank-row-icon, ADR 0020).
|
|
11
|
-
|
|
12
|
-
Blocks:
|
|
13
|
-
.icon-circle - 28x28 round icon-container
|
|
14
|
-
|
|
15
|
-
Modifiers:
|
|
16
|
-
.icon-circle--positive - gron tonad bg + gron icon-color (check etc)
|
|
17
|
-
.icon-circle--warning - warning-tonad bg + warning-color
|
|
18
|
-
.icon-circle--negative - danger-tonad bg + danger-color
|
|
19
|
-
================================================================ */
|
|
20
|
-
.icon-circle {
|
|
21
|
-
display: inline-flex;
|
|
22
|
-
align-items: center;
|
|
23
|
-
justify-content: center;
|
|
24
|
-
width: var(--space-28);
|
|
25
|
-
height: var(--space-28);
|
|
26
|
-
margin-right: var(--space-12);
|
|
27
|
-
border-radius: 50%;
|
|
28
|
-
flex-shrink: 0;
|
|
29
|
-
background: var(--surface-default);
|
|
30
|
-
color: var(--text-subtle);
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
.icon-circle--positive {
|
|
34
|
-
background: var(--positive-dim);
|
|
35
|
-
color: var(--positive);
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
.icon-circle--warning {
|
|
39
|
-
background: var(--warning-dim);
|
|
40
|
-
color: var(--warning);
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
.icon-circle--negative {
|
|
44
|
-
background: var(--negative-dim, var(--bg-danger));
|
|
45
|
-
color: var(--negative, var(--accent-danger));
|
|
46
|
-
}
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
/* ================================================================
|
|
2
|
-
components/item-stack.css
|
|
3
|
-
Grupp av identiska items som collapsible-staplade en presentation.
|
|
4
|
-
Header visar "X st" + summa, body expanderar till N individuella rader.
|
|
5
|
-
|
|
6
|
-
Typisk anvandning: identiska transaktioner (samma description, samma
|
|
7
|
-
merchant) som grupperas under en wrapper med expand-toggle - sa user
|
|
8
|
-
ser inte "Netflix 139 kr" sex ganger utan en stack "Netflix (6 st)"
|
|
9
|
-
som kan expanderas.
|
|
10
|
-
|
|
11
|
-
Lyft fran Ekonom v4.4.0 (var .cat-tx-stack, ADR 0020).
|
|
12
|
-
|
|
13
|
-
Blocks:
|
|
14
|
-
.item-stack - block med collapsible header + body
|
|
15
|
-
|
|
16
|
-
Element:
|
|
17
|
-
.item-stack__icon - file-stack-ikon till vanster (accent nar
|
|
18
|
-
expanded, muted default)
|
|
19
|
-
.item-stack__header - klickbar header-rad ("Netflix (6 st)" + summa)
|
|
20
|
-
.item-stack__body - <ul> med individuella items
|
|
21
|
-
================================================================ */
|
|
22
|
-
.item-stack {
|
|
23
|
-
list-style: none;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
.item-stack__icon {
|
|
27
|
-
color: var(--text-muted);
|
|
28
|
-
flex-shrink: 0;
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
.item-stack__header {
|
|
32
|
-
cursor: pointer;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
.item-stack[data-expanded] .item-stack__icon {
|
|
36
|
-
color: var(--accent-9);
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
.item-stack__body {
|
|
40
|
-
list-style: none;
|
|
41
|
-
margin: 0;
|
|
42
|
-
padding: 0 0 0 var(--space-22);
|
|
43
|
-
}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
/* ================================================================
|
|
2
|
-
components/kvp-arrow.css
|
|
3
|
-
Key-value-pair-arrow + target. Visualiserar mapping fran ett
|
|
4
|
-
keyword/key till en kategori/target. Typisk anvandning: rule-
|
|
5
|
-
editors dar man visar "ICA -> Mat" eller "STANDARD -> Premium".
|
|
6
|
-
|
|
7
|
-
Lyft fran Ekonom v4.4.0 (var .rule-arrow + .rule-cat, ADR 0020).
|
|
8
|
-
|
|
9
|
-
Blocks:
|
|
10
|
-
.kvp-arrow - disabled-fargad arrow-text ("->")
|
|
11
|
-
.kvp-target - accent-fargad target-text (vad keyword:et mappar till)
|
|
12
|
-
================================================================ */
|
|
13
|
-
.kvp-arrow {
|
|
14
|
-
color: var(--text-disabled);
|
|
15
|
-
margin: 0 var(--space-4);
|
|
16
|
-
font-weight: var(--fw-regular);
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
.kvp-target {
|
|
20
|
-
color: var(--accent-9);
|
|
21
|
-
font-weight: var(--fw-medium);
|
|
22
|
-
}
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
/* ================================================================
|
|
2
|
-
components/matched-row.css
|
|
3
|
-
Rad-pattern for items som har match/pending-status. Klickbar rad
|
|
4
|
-
med status-icon till vanster. State-modifiers styr visual feedback.
|
|
5
|
-
|
|
6
|
-
Typisk anvandning: lista av forvantade items dar varje rad far
|
|
7
|
-
visual indicator om den matchats mot en faktisk handelse
|
|
8
|
-
(subscription-placeholders matchade mot bank-tx, kalender-events
|
|
9
|
-
matchade mot kalkyl etc).
|
|
10
|
-
|
|
11
|
-
Lyft fran Ekonom v4.4.0 (var .sub-row, ADR 0020). Lever ofta inom
|
|
12
|
-
.expandable-row__item men kan vara standalone.
|
|
13
|
-
|
|
14
|
-
Blocks:
|
|
15
|
-
.matched-row - klickbar rad med match-status
|
|
16
|
-
|
|
17
|
-
Element:
|
|
18
|
-
.matched-row__status-icon - 18px width-slot for SVG-icon till vanster
|
|
19
|
-
|
|
20
|
-
Modifiers:
|
|
21
|
-
.matched-row--matched - positive-state (gron icon, default-text)
|
|
22
|
-
.matched-row--pending - awaiting-state (gra icon, italic, 72% opacity)
|
|
23
|
-
================================================================ */
|
|
24
|
-
.matched-row {
|
|
25
|
-
cursor: pointer;
|
|
26
|
-
transition: var(--tr-bg-fast);
|
|
27
|
-
padding-left: var(--space-4);
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
@media (hover: hover) and (pointer: fine) {
|
|
31
|
-
.matched-row:hover { background: var(--surface-subtle); }
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
.matched-row:focus-visible {
|
|
35
|
-
outline: 2px solid var(--accent-9);
|
|
36
|
-
outline-offset: -2px;
|
|
37
|
-
border-radius: var(--radius-4);
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
.matched-row__status-icon {
|
|
41
|
-
display: inline-flex;
|
|
42
|
-
align-items: center;
|
|
43
|
-
justify-content: center;
|
|
44
|
-
width: 18px;
|
|
45
|
-
flex-shrink: 0;
|
|
46
|
-
color: var(--text-muted);
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
.matched-row--matched .matched-row__status-icon { color: var(--positive); }
|
|
50
|
-
.matched-row--pending { opacity: 0.72; }
|
|
51
|
-
.matched-row--pending .matched-row__status-icon { color: var(--text-muted); }
|
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
/* ================================================================
|
|
2
|
-
components/review-banner.css
|
|
3
|
-
Generic warning-CTA-banner: titel + meta + chevron i pill-form.
|
|
4
|
-
Anvands for "X att granska/atgarda"-rader som lankar till en
|
|
5
|
-
review-vy. Warning-toned bakgrund.
|
|
6
|
-
|
|
7
|
-
Lyft fran Ekonom v4.4.0 (ADR 0020). Konsumeras av alla appar som
|
|
8
|
-
har en granskning/atgards-flow.
|
|
9
|
-
|
|
10
|
-
Blocks:
|
|
11
|
-
.review-banner - klickbar warning-CTA-banner
|
|
12
|
-
|
|
13
|
-
Element:
|
|
14
|
-
.review-banner__title - rubrik-text (fs-14 medium)
|
|
15
|
-
.review-banner__meta - underrubrik (fs-12 subtle)
|
|
16
|
-
.review-banner__chev - chevron-svg, hoger-stalld
|
|
17
|
-
|
|
18
|
-
HTML:
|
|
19
|
-
<a href="/granskning" class="review-banner">
|
|
20
|
-
<div>
|
|
21
|
-
<p class="review-banner__title">X att granska</p>
|
|
22
|
-
<p class="review-banner__meta">Mojliga utgifter</p>
|
|
23
|
-
</div>
|
|
24
|
-
<svg class="review-banner__chev"...></svg>
|
|
25
|
-
</a>
|
|
26
|
-
================================================================ */
|
|
27
|
-
.review-banner {
|
|
28
|
-
display: flex;
|
|
29
|
-
align-items: center;
|
|
30
|
-
justify-content: space-between;
|
|
31
|
-
gap: var(--space-12);
|
|
32
|
-
background: var(--warning-dim);
|
|
33
|
-
border: var(--bw-hairline) solid var(--warning-border);
|
|
34
|
-
border-radius: var(--radius-14);
|
|
35
|
-
padding: var(--space-14) var(--space-16);
|
|
36
|
-
margin-bottom: var(--space-14);
|
|
37
|
-
color: var(--text-default);
|
|
38
|
-
text-decoration: none;
|
|
39
|
-
transition: var(--tr-bg-base);
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
@media (hover: hover) and (pointer: fine) {
|
|
43
|
-
.review-banner:hover {
|
|
44
|
-
text-decoration: none;
|
|
45
|
-
background: var(--warning-hover, var(--warning-dim));
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
.review-banner:focus-visible {
|
|
50
|
-
outline: 2px solid var(--accent-9);
|
|
51
|
-
outline-offset: 2px;
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
.review-banner__title {
|
|
55
|
-
font-size: var(--fs-14);
|
|
56
|
-
font-weight: var(--fw-medium);
|
|
57
|
-
color: var(--text-default);
|
|
58
|
-
margin: 0;
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
.review-banner__meta {
|
|
62
|
-
font-size: var(--fs-12);
|
|
63
|
-
color: var(--text-subtle);
|
|
64
|
-
margin: var(--space-2) 0 0;
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
.review-banner__chev {
|
|
68
|
-
opacity: 0.7;
|
|
69
|
-
flex-shrink: 0;
|
|
70
|
-
}
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
/* ================================================================
|
|
2
|
-
components/status-icon.css
|
|
3
|
-
Inline status-icon i text-flow (clock, alert, check). Tightare
|
|
4
|
-
pa baseline + flex-shrink:0 sa den inte staucher i smala containers.
|
|
5
|
-
|
|
6
|
-
Anvands typiskt efter en description-text for att signalera tillstand:
|
|
7
|
-
pending, stale, success, warning.
|
|
8
|
-
|
|
9
|
-
Lyft fran Ekonom v4.4.0 (var .tx-pending-icon, ADR 0020).
|
|
10
|
-
|
|
11
|
-
Blocks:
|
|
12
|
-
.status-icon - inline-flex SVG-wrapper for status-indicator
|
|
13
|
-
|
|
14
|
-
Modifiers:
|
|
15
|
-
.status-icon--pending - default muted-color (clock-icon)
|
|
16
|
-
.status-icon--stale - warning-color (clock som blivit gammal)
|
|
17
|
-
.status-icon--success - positive-color (check)
|
|
18
|
-
.status-icon--warning - warning-color (alert)
|
|
19
|
-
================================================================ */
|
|
20
|
-
.status-icon {
|
|
21
|
-
display: inline-flex;
|
|
22
|
-
align-items: center;
|
|
23
|
-
margin-left: var(--space-6);
|
|
24
|
-
color: var(--text-muted);
|
|
25
|
-
vertical-align: -2px;
|
|
26
|
-
flex-shrink: 0;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
.status-icon--pending { color: var(--text-muted); }
|
|
30
|
-
.status-icon--stale { color: var(--warning); }
|
|
31
|
-
.status-icon--success { color: var(--positive); }
|
|
32
|
-
.status-icon--warning { color: var(--warning); }
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
/* ================================================================
|
|
2
|
-
components/tag-inline.css
|
|
3
|
-
Diskret inline-tag som markerar metadata in-line med brodtext.
|
|
4
|
-
Mindre an .chip - har ingen pill-bakgrund. Bara avvikande font-
|
|
5
|
-
storlek + muted color + slight tracking.
|
|
6
|
-
|
|
7
|
-
Anvands typiskt for inline-status (estimat, beta, deprecated) som
|
|
8
|
-
ska synas men inte dominera surrounding text.
|
|
9
|
-
|
|
10
|
-
Lyft fran Ekonom v4.4.0 (var .estimat-tag, ADR 0020).
|
|
11
|
-
|
|
12
|
-
Blocks:
|
|
13
|
-
.tag-inline - inline-tag i muted text-stil
|
|
14
|
-
================================================================ */
|
|
15
|
-
.tag-inline {
|
|
16
|
-
font-style: normal;
|
|
17
|
-
font-size: var(--fs-11);
|
|
18
|
-
color: var(--text-muted);
|
|
19
|
-
font-weight: var(--fw-regular);
|
|
20
|
-
letter-spacing: var(--ls-tracker, 0.02em);
|
|
21
|
-
}
|
package/js/index.js
DELETED
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
/* @klodd/ds - JavaScript entry point.
|
|
2
|
-
*
|
|
3
|
-
* Convenience-aggregator som kor enskilda init-funktioner. Default
|
|
4
|
-
* fungerar utan konfiguration (LLM-vanligt). Konfig-objektet kan
|
|
5
|
-
* over-rida vad som ska aktiveras.
|
|
6
|
-
*
|
|
7
|
-
* Anvandning:
|
|
8
|
-
*
|
|
9
|
-
* <script src="https://unpkg.com/@klodd/ds/js/index.js" defer></script>
|
|
10
|
-
* <script>
|
|
11
|
-
* window.addEventListener('DOMContentLoaded', () => {
|
|
12
|
-
* KloddDS.init();
|
|
13
|
-
* });
|
|
14
|
-
* </script>
|
|
15
|
-
*
|
|
16
|
-
* Eller med konfig:
|
|
17
|
-
*
|
|
18
|
-
* KloddDS.init({
|
|
19
|
-
* swPath: '/service-worker.js',
|
|
20
|
-
* lucide: true,
|
|
21
|
-
* barStyles: true,
|
|
22
|
-
* heroRoll: true,
|
|
23
|
-
* pullToRefresh: false,
|
|
24
|
-
* turboNav: false,
|
|
25
|
-
* navOptimistic: true,
|
|
26
|
-
* sheetDrag: true,
|
|
27
|
-
* pwaRegister: false, // satt true + swPath for SW + install-prompts
|
|
28
|
-
* });
|
|
29
|
-
*
|
|
30
|
-
* Individuella moduler kan ocksa importeras separat fran js/-mappen.
|
|
31
|
-
* KloddDS.init() ar bara en convenience-wrapper - den inkluderar inte
|
|
32
|
-
* filerna sjalv, dvs varje modul-fil maste laddas via <script>-tag.
|
|
33
|
-
*
|
|
34
|
-
* Defaults ar konservativa: heavy beteenden (PtR, Turbo Drive, PWA
|
|
35
|
-
* register) ar OFF default. App-mantainern aktiverar opt-in.
|
|
36
|
-
*/
|
|
37
|
-
'use strict';
|
|
38
|
-
|
|
39
|
-
(function (root) {
|
|
40
|
-
const defaults = {
|
|
41
|
-
lucide: true,
|
|
42
|
-
barStyles: true,
|
|
43
|
-
heroRoll: true,
|
|
44
|
-
navOptimistic: true,
|
|
45
|
-
sheetDrag: true,
|
|
46
|
-
pullToRefresh: false,
|
|
47
|
-
turboNav: false,
|
|
48
|
-
pwaRegister: false,
|
|
49
|
-
swPath: '/static/sw.js',
|
|
50
|
-
};
|
|
51
|
-
|
|
52
|
-
const KloddDS = {
|
|
53
|
-
init(config) {
|
|
54
|
-
const cfg = Object.assign({}, defaults, config || {});
|
|
55
|
-
|
|
56
|
-
if (cfg.lucide && typeof root.initLucide === 'function') {
|
|
57
|
-
root.initLucide();
|
|
58
|
-
} else if (cfg.lucide && root.lucide && typeof root.lucide.createIcons === 'function') {
|
|
59
|
-
root.lucide.createIcons();
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
if (cfg.barStyles && typeof root.initBarStyles === 'function') {
|
|
63
|
-
root.initBarStyles();
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
if (cfg.heroRoll && typeof root.initHeroRoll === 'function') {
|
|
67
|
-
root.initHeroRoll();
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
if (cfg.navOptimistic && typeof root.initNavOptimistic === 'function') {
|
|
71
|
-
root.initNavOptimistic();
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
if (cfg.sheetDrag && typeof root.initSheetDrag === 'function') {
|
|
75
|
-
root.initSheetDrag();
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
if (cfg.pullToRefresh && typeof root.initPullToRefresh === 'function') {
|
|
79
|
-
root.initPullToRefresh();
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
if (cfg.turboNav && typeof root.initTurboNav === 'function') {
|
|
83
|
-
root.initTurboNav();
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
if (cfg.pwaRegister && typeof root.initPwaRegister === 'function') {
|
|
87
|
-
root.initPwaRegister({ swPath: cfg.swPath });
|
|
88
|
-
}
|
|
89
|
-
},
|
|
90
|
-
|
|
91
|
-
version: '2.0.0',
|
|
92
|
-
};
|
|
93
|
-
|
|
94
|
-
root.KloddDS = KloddDS;
|
|
95
|
-
})(typeof window !== 'undefined' ? window : globalThis);
|