@klodd/ds 3.21.1 → 3.21.3

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.
@@ -43,6 +43,13 @@
43
43
  INTE for: modaler och popovers (anvand --surface-overlay). */
44
44
  --surface-raised: light-dark(oklch(0.99 0.002 250), var(--gray-3));
45
45
 
46
+ /* Forhoejt kort - mellansteg mellan raised och overlay. Anvands for
47
+ kort som behover mer visuell prominens an --surface-raised men
48
+ inte ar overlays/modaler. Mappas till color-3 i app-overrides
49
+ (vs raised color-2). v3.21.3 - infort efter audit av Jubb's
50
+ job-card som behovde mer kontrast mot main-bakgrunden. */
51
+ --surface-elevated: light-dark(oklch(0.97 0.003 250), var(--gray-3));
52
+
46
53
  /* Svavande yta - modaler, popovers, dropdowns.
47
54
  Anvand for: dialog-bakgrund, tooltip, context-menu, sheets.
48
55
  INTE for: inbaddade kort (anvand --surface-raised). */
package/css/apps/jubb.css CHANGED
@@ -25,13 +25,14 @@
25
25
 
26
26
  Blue-1 (#0d1520) är morkast - sidans bakgrund.
27
27
  Blue-2 (#111927) - sektioner, nav, tab-bar OCH kort (raised).
28
- Blue-3 (#0d2847) - inte langre raised, frigjord for ev. framtida
29
- niva mellan raised och overlay.
28
+ Blue-3 (#0d2847) - elevated kort (v3.21.3) - mellansteg mellan
29
+ raised och overlay för kort som behöver extra kontrast.
30
30
  Blue-4 (#003362) - modaler, popovers (overlay).
31
31
  Blue-5 (#004074) - active-state. */
32
32
  --surface-page: var(--blue-1);
33
33
  --surface-default: var(--blue-2);
34
34
  --surface-raised: var(--blue-2);
35
+ --surface-elevated: var(--blue-3);
35
36
  --surface-overlay: var(--blue-4);
36
37
  --surface-hover: var(--blue-4);
37
38
  --surface-active: var(--blue-5);
@@ -131,3 +131,109 @@
131
131
  .score-pill--na.is-loading {
132
132
  background: var(--surface-active);
133
133
  }
134
+
135
+
136
+ /* ================================================================
137
+ .score-circle - cirkulär relevance-score-display (v3.21.2)
138
+ Standardstorlek 36x36 matchar .avatar default. Tabular-nums för
139
+ visuellt-jämn siffer-rendering. Klickbart fall (--na) triggar
140
+ rescore med is-loading spinning animation.
141
+
142
+ Modifiers: --strong (grön), --medium (gul), --low (grå), --na (klickbar)
143
+ States på --na: :hover, :active, :focus-visible, :disabled, .is-loading
144
+
145
+ Användning:
146
+ <span class="score-circle score-circle--strong">8.4</span>
147
+ <button class="score-circle score-circle--na" data-action="rescore"
148
+ data-job-id="X" aria-label="Bedöm jobbet">N/A</button>
149
+ ================================================================ */
150
+ .score-circle {
151
+ display: inline-flex;
152
+ align-items: center;
153
+ justify-content: center;
154
+ flex-shrink: 0;
155
+ width: 36px;
156
+ height: 36px;
157
+ font-size: var(--fs-13);
158
+ font-weight: var(--fw-medium);
159
+ font-variant-numeric: tabular-nums;
160
+ line-height: 1;
161
+ border: 1px solid transparent;
162
+ border-radius: 50%;
163
+ white-space: nowrap;
164
+ position: relative;
165
+ overflow: hidden;
166
+ }
167
+
168
+ .score-circle--strong {
169
+ color: var(--positive);
170
+ background: var(--positive-dim);
171
+ border-color: var(--positive-border);
172
+ }
173
+
174
+ .score-circle--medium {
175
+ color: var(--warning);
176
+ background: var(--warning-dim);
177
+ border-color: var(--warning-border);
178
+ }
179
+
180
+ .score-circle--low {
181
+ color: var(--text-muted);
182
+ background: var(--surface-default);
183
+ border-color: var(--border-subtle);
184
+ }
185
+
186
+ /* --na: klickbar (button-element) som triggar rescore via JS. Dashed
187
+ border signalerar "bedömning saknas, klicka för att försöka". */
188
+ .score-circle--na {
189
+ color: var(--text-muted);
190
+ background: var(--surface-default);
191
+ border: 1px dashed var(--border-default);
192
+ cursor: pointer;
193
+ font-size: var(--fs-11);
194
+ font-family: inherit;
195
+ transition: background var(--dur-fast) var(--ease-default),
196
+ color var(--dur-fast) var(--ease-default);
197
+ }
198
+ @media (hover: hover) and (pointer: fine) {
199
+ .score-circle--na:hover {
200
+ background: var(--surface-hover);
201
+ color: var(--text-default);
202
+ }
203
+ }
204
+ .score-circle--na:active { transform: scale(0.96); }
205
+ .score-circle--na:focus-visible {
206
+ outline: 2px solid var(--border-focus);
207
+ outline-offset: 2px;
208
+ }
209
+ .score-circle--na:disabled,
210
+ .score-circle--na[aria-disabled="true"] {
211
+ cursor: progress;
212
+ }
213
+
214
+ /* is-loading: spinning border-segment medan AI bedömer. Texten döljs
215
+ visuellt (transparent) men ::after-pseudo ritar en roterande ring.
216
+ prefers-reduced-motion slowar ner animationen markant. */
217
+ .score-circle--na.is-loading {
218
+ color: transparent;
219
+ background: var(--surface-default);
220
+ border-color: var(--border-default);
221
+ border-style: solid;
222
+ }
223
+ .score-circle--na.is-loading::after {
224
+ content: '';
225
+ position: absolute;
226
+ inset: 2px;
227
+ border-radius: 50%;
228
+ border: 2px solid transparent;
229
+ border-top-color: var(--accent-9);
230
+ animation: score-circle-spin 0.8s linear infinite;
231
+ }
232
+ @media (prefers-reduced-motion: reduce) {
233
+ .score-circle--na.is-loading::after {
234
+ animation-duration: 2s;
235
+ }
236
+ }
237
+ @keyframes score-circle-spin {
238
+ to { transform: rotate(360deg); }
239
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@klodd/ds",
3
- "version": "3.21.1",
3
+ "version": "3.21.3",
4
4
  "description": "Klodd shared design system - tokens, components, JS",
5
5
  "main": "css/index.css",
6
6
  "bin": {
@@ -33,12 +33,12 @@ 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, kanonisk definition)
37
- - **Modifiers:** `.badge--neutral/-success/-warning/-danger/-accent`, `.score-pill--strong/-medium/-low`, `.score-pill--na` (v3.21.1 - klickbar N/A för rescore-trigger)
38
- - **States på `.score-pill--na`:** `.is-loading`, `[aria-disabled="true"]`, `:disabled` (cursor: progress)
39
- - **Anvand:** Status-pills (statiska) + score-pill--na som klickbar rescore-trigger (vanligtvis som `<button>`-element med `data-action="rescore"`)
36
+ - **Blocks:** `.badge`, `.score-pill` (legacy rectangular form, behålls för bakåtkompat), `.score-circle` (v3.21.2 - cirkulär form, ersätter score-pill för relevance-displays)
37
+ - **Modifiers:** `.badge--neutral/-success/-warning/-danger/-accent`, `.score-pill--strong/-medium/-low/-na`, `.score-circle--strong/-medium/-low/-na`
38
+ - **States på `.score-pill--na` + `.score-circle--na`:** `.is-loading` (spinning animation), `[aria-disabled="true"]`, `:disabled` (cursor: progress)
39
+ - **Anvand:** Status-pills (statiska) + score-circle--na som klickbar rescore-trigger med spinning loading-animation. Standardstorlek 36x36 matchar .avatar default.
40
40
  - **INTE:** Klickbara chips (anvand `.chip`)
41
- - **Tokens:** `--positive/-dim/-border`, `--warning/-dim/-border`, `--bg-danger`, `--accent-text/-a2/-a6`, `--surface-default/-hover/-active`, `--border-default/-focus/-subtle`
41
+ - **Tokens:** `--positive/-dim/-border`, `--warning/-dim/-border`, `--bg-danger`, `--accent-text/-a2/-a6/--accent-9`, `--surface-default/-hover/-active`, `--border-default/-focus/-subtle`, `--dur-fast`, `--ease-default`
42
42
 
43
43
  ### card (`card.css`)
44
44
  - **Blocks:** `.card`