@klodd/ds 3.4.4 → 3.5.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/bin/sync.js CHANGED
@@ -2,7 +2,11 @@
2
2
  /* @klodd/ds sync - kopierar paketets CSS och JS till app-repot.
3
3
  * Kör: npx @klodd/ds sync
4
4
  * Förutsätter att CWD är app-repots rot.
5
- * Läser cssTarget/jsTarget från klodd-ds.json i CWD, eller använder default.
5
+ * Läser cssTarget/jsTarget/exclude från klodd-ds.json i CWD, eller använder default.
6
+ *
7
+ * exclude-fältet (v3.5.0+) är en lista av relativa fil-paths under css/ eller
8
+ * js/ som hoppas över vid kopiering. Användbart när en app inte konsumerar en
9
+ * komponent som finns i paketet (t.ex. apps/ekonom.css i Jubbs repo).
6
10
  *
7
11
  * Cross-platform via fs.cpSync (Node 16.7+) - inte POSIX cp -r. */
8
12
  'use strict';
@@ -17,17 +21,39 @@ const jsSource = path.join(pkgDir, 'js');
17
21
  const configPath = path.join(process.cwd(), 'klodd-ds.json');
18
22
  const config = fs.existsSync(configPath)
19
23
  ? JSON.parse(fs.readFileSync(configPath, 'utf8'))
20
- : { cssTarget: 'app/static/css/ds', jsTarget: 'app/static/js/ds' };
24
+ : { cssTarget: 'app/static/css/ds', jsTarget: 'app/static/js/ds', exclude: [] };
21
25
 
22
26
  const cssTarget = path.join(process.cwd(), config.cssTarget);
23
27
  const jsTarget = path.join(process.cwd(), config.jsTarget);
28
+ const exclude = new Set(config.exclude || []);
24
29
 
25
30
  fs.mkdirSync(cssTarget, { recursive: true });
26
31
  fs.mkdirSync(jsTarget, { recursive: true });
27
32
 
28
- fs.cpSync(cssSource, cssTarget, { recursive: true });
33
+ function copyDirFiltered(srcRoot, dstRoot, kind) {
34
+ const stack = [{ abs: srcRoot, rel: '' }];
35
+ while (stack.length) {
36
+ const { abs, rel } = stack.pop();
37
+ for (const entry of fs.readdirSync(abs, { withFileTypes: true })) {
38
+ const childAbs = path.join(abs, entry.name);
39
+ const childRel = rel ? path.posix.join(rel, entry.name) : entry.name;
40
+ const excludeKey = `${kind}/${childRel}`;
41
+ if (exclude.has(excludeKey) || exclude.has(childRel)) continue;
42
+ const childDst = path.join(dstRoot, childRel);
43
+ if (entry.isDirectory()) {
44
+ fs.mkdirSync(childDst, { recursive: true });
45
+ stack.push({ abs: childAbs, rel: childRel });
46
+ } else if (entry.isFile()) {
47
+ fs.copyFileSync(childAbs, childDst);
48
+ }
49
+ }
50
+ }
51
+ }
52
+
53
+ copyDirFiltered(cssSource, cssTarget, 'css');
29
54
  if (fs.existsSync(jsSource)) {
30
- fs.cpSync(jsSource, jsTarget, { recursive: true });
55
+ copyDirFiltered(jsSource, jsTarget, 'js');
31
56
  }
32
57
 
33
- console.log(`OK @klodd/ds synkad till ${config.cssTarget} och ${config.jsTarget}`);
58
+ const excludedCount = exclude.size > 0 ? ` (${exclude.size} excluderade)` : '';
59
+ console.log(`OK @klodd/ds synkad till ${config.cssTarget} och ${config.jsTarget}${excludedCount}`);
package/bin/verify.js CHANGED
@@ -1,7 +1,9 @@
1
1
  #!/usr/bin/env node
2
2
  /* @klodd/ds verify - diff:ar committade DS-filer mot paket-källan.
3
3
  * Kör i CI: npx @klodd/ds verify
4
- * Fail:ar med exit code 1 om drift detekteras. */
4
+ * Fail:ar med exit code 1 om drift detekteras.
5
+ *
6
+ * exclude-fältet (v3.5.0+) i klodd-ds.json hoppas över vid diff. */
5
7
  'use strict';
6
8
 
7
9
  const fs = require('fs');
@@ -12,7 +14,9 @@ const pkgDir = path.dirname(require.resolve('@klodd/ds/package.json'));
12
14
  const configPath = path.join(process.cwd(), 'klodd-ds.json');
13
15
  const config = fs.existsSync(configPath)
14
16
  ? JSON.parse(fs.readFileSync(configPath, 'utf8'))
15
- : { cssTarget: 'app/static/css/ds', jsTarget: 'app/static/js/ds' };
17
+ : { cssTarget: 'app/static/css/ds', jsTarget: 'app/static/js/ds', exclude: [] };
18
+
19
+ const exclude = new Set(config.exclude || []);
16
20
 
17
21
  function hashFile(filePath) {
18
22
  return crypto.createHash('sha256')
@@ -27,7 +31,7 @@ function listFilesRec(dir) {
27
31
  const { abs, rel } = stack.pop();
28
32
  for (const entry of fs.readdirSync(abs, { withFileTypes: true })) {
29
33
  const childAbs = path.join(abs, entry.name);
30
- const childRel = rel ? path.join(rel, entry.name) : entry.name;
34
+ const childRel = rel ? path.posix.join(rel, entry.name) : entry.name;
31
35
  if (entry.isDirectory()) stack.push({ abs: childAbs, rel: childRel });
32
36
  else if (entry.isFile()) out.push(childRel);
33
37
  }
@@ -35,11 +39,13 @@ function listFilesRec(dir) {
35
39
  return out;
36
40
  }
37
41
 
38
- function diffDirs(sourceDir, targetRel) {
42
+ function diffDirs(sourceDir, targetRel, kind) {
39
43
  const drifted = [];
40
44
  if (!fs.existsSync(sourceDir)) return drifted;
41
45
  const targetAbs = path.join(process.cwd(), targetRel);
42
46
  for (const file of listFilesRec(sourceDir)) {
47
+ const excludeKey = `${kind}/${file}`;
48
+ if (exclude.has(excludeKey) || exclude.has(file)) continue;
43
49
  const src = path.join(sourceDir, file);
44
50
  const tgt = path.join(targetAbs, file);
45
51
  if (!fs.existsSync(tgt)) {
@@ -51,8 +57,8 @@ function diffDirs(sourceDir, targetRel) {
51
57
  return drifted;
52
58
  }
53
59
 
54
- const cssDrift = diffDirs(path.join(pkgDir, 'css'), config.cssTarget);
55
- const jsDrift = diffDirs(path.join(pkgDir, 'js'), config.jsTarget);
60
+ const cssDrift = diffDirs(path.join(pkgDir, 'css'), config.cssTarget, 'css');
61
+ const jsDrift = diffDirs(path.join(pkgDir, 'js'), config.jsTarget, 'js');
56
62
  const allDrift = [...cssDrift, ...jsDrift];
57
63
 
58
64
  if (allDrift.length > 0) {
@@ -62,5 +68,6 @@ if (allDrift.length > 0) {
62
68
  process.exit(1);
63
69
  }
64
70
 
65
- console.log('OK: alla DS-filer matchar @klodd/ds-paketet.');
71
+ const excludedCount = exclude.size > 0 ? ` (${exclude.size} excluderade fran kontroll)` : '';
72
+ console.log(`OK: alla DS-filer matchar @klodd/ds-paketet${excludedCount}.`);
66
73
  process.exit(0);
@@ -149,10 +149,6 @@
149
149
  --plum-10: #b658c4; /* Solid hover */
150
150
  --plum-11: #e796f3; /* Accent text pa neutral */
151
151
  --plum-12: #f4d4f4;
152
-
153
- /* Plum mellanniva - mellan plum-2 och plum-3, anvands av Ekonoms
154
- surface-raised. Tidigare hardkodat #2a1a2e i apps/ekonom.css. */
155
- --plum-2-5: oklch(0.24 0.048 295);
156
152
  }
157
153
 
158
154
 
@@ -409,98 +409,14 @@
409
409
 
410
410
 
411
411
  /* ================================================================
412
- ==== LEGACY ALIASES
413
- Bakatkompat-skikt sa befintliga komponenter inte krasar under
414
- migration. Mappar gamla namn mot nya semantic tokens.
415
-
416
- Migration sker gradvis: nar en komponent rors, byt fran legacy-namn
417
- till nytt semantic-namn. Behall denna sektion tills alla call-sites
418
- ar migrerade. Da kan den raderas och DECISIONS.md uppdateras.
412
+ ==== OVERLAY TINTS
413
+ Transparenta tints för drag-overlays, hover-states dark surfaces
414
+ och liknande där en alpha-pixel-shift räcker. Inte permanenta
415
+ surface-nivåer (de ligger i SURFACES-sektionen ovan).
419
416
  ================================================================ */
420
417
  :root {
421
- /* Surfaces (gamla overlay-skala) -> mappa mot nya neutral-stegen. */
422
418
  --surface-faint: color-mix(in oklch, white 2%, transparent);
423
419
  --surface-subtle: color-mix(in oklch, white 4%, transparent);
424
420
  --surface-medium: color-mix(in oklch, white 8%, transparent);
425
421
  --surface-strong: color-mix(in oklch, white 12%, transparent);
426
-
427
- /* Bakgrunder - gamla bg-* mappas till nya surface-*. */
428
- --bg-sunken: var(--surface-sunken);
429
- --bg-base: var(--surface-page);
430
- --bg-surface: var(--surface-raised);
431
- --bg-raised: var(--surface-raised);
432
- --bg-hover: var(--surface-hover);
433
-
434
- /* Text - gamla text-primary/secondary/tertiary/faint. */
435
- --text-primary: var(--text-default);
436
- --text-secondary: var(--text-subtle);
437
- --text-tertiary: var(--text-muted);
438
- --text-faint: var(--text-disabled);
439
-
440
- /* Accent - gamla --accent (singular) mappas mot nya --accent-9.
441
- --accent-dim/-border foljde gamla 20%/40%-konventionen, mappas
442
- nu mot Radix-skalans steg 3 (subtil) och 6 (border-emphasis). */
443
- --accent: var(--accent-9);
444
- --accent-hover: var(--accent-10);
445
- --accent-strong: var(--accent-9);
446
- --accent-secondary: var(--accent-9);
447
- --accent-dim: var(--accent-a3);
448
- --accent-border: var(--accent-a6);
449
-
450
- /* Accent-link - gamla cirkelknapps-tokens. Mappas mot accent-systemet.
451
- Gamla 10/20/40%-stegen mappas mot nya Radix-stegen 2/3/6. */
452
- --accent-link: var(--accent-text);
453
- --accent-link-bg: var(--accent-a2);
454
- --accent-link-bg-hover: var(--accent-a3);
455
- --accent-link-border: var(--accent-a3);
456
- --accent-link-border-hover: var(--accent-a6);
457
-
458
- /* Audit-aliaser fran 2026-05-07 - ofta refererade utan att vara definierade. */
459
- --text: var(--text-default);
460
- --border: var(--border-default);
461
- --surface-2: var(--surface-default);
462
- --surface-3: var(--surface-raised);
463
- --accent-rgba: var(--accent-a3);
464
-
465
- /* Radius - gamla t-shirt-namn mappas mot nya pixel-numeriska. */
466
- --radius-xs: var(--radius-2);
467
- --radius-sm: var(--radius-4);
468
- --radius-md: var(--radius-6);
469
- --radius-lg: var(--radius-12);
470
- --radius-xl: var(--radius-14);
471
- --radius-2xl: var(--radius-16);
472
- --radius-3xl: var(--radius-20);
473
- --radius-4xl: var(--radius-24);
474
- --radius-pill: var(--radius-full);
475
-
476
- /* Font-weight: --fw-semibold borttagen 2026-05-07 per 400/500-policy.
477
- Aktiva call-sites bytte till var(--fw-medium) explicit. Se DECISIONS.md. */
478
-
479
- /* Kategori-paletter (Ekonom-only). Behalls for shared-tokens-paritet
480
- med Ekonom-repot, oanvanda i Jubb. */
481
- --primitive-cat-mat: color-mix(in oklch, var(--purple-9) 60%, transparent);
482
- --primitive-cat-el: oklch(0.72 0.135 245);
483
- --primitive-cat-vatten: oklch(0.78 0.110 200);
484
- --primitive-cat-avgift: var(--green-9);
485
- --primitive-cat-noje: oklch(0.72 0.150 350);
486
- --primitive-cat-amort: oklch(0.72 0.135 160);
487
- --primitive-cat-ranta: oklch(0.72 0.150 50);
488
- --primitive-cat-privat: var(--gray-9);
489
-
490
- --cat-mat: color-mix(in oklch, var(--purple-9) 15%, transparent);
491
- --cat-mat-icon: var(--primitive-cat-mat);
492
- --cat-el: color-mix(in oklch, var(--blue-9) 15%, transparent);
493
- --cat-el-icon: var(--primitive-cat-el);
494
- --cat-vatten: color-mix(in oklch, oklch(0.78 0.110 200) 15%, transparent);
495
- --cat-vatten-icon: var(--primitive-cat-vatten);
496
- --cat-avgift: color-mix(in oklch, var(--green-9) 15%, transparent);
497
- --cat-avgift-icon: var(--primitive-cat-avgift);
498
- --cat-noje: color-mix(in oklch, oklch(0.72 0.150 350) 15%, transparent);
499
- --cat-noje-icon: var(--primitive-cat-noje);
500
- --cat-amortering: color-mix(in oklch, oklch(0.72 0.135 160) 15%, transparent);
501
- --cat-amort-icon: var(--primitive-cat-amort);
502
- --cat-ranta: color-mix(in oklch, oklch(0.72 0.150 50) 15%, transparent);
503
- --cat-ranta-icon: var(--primitive-cat-ranta);
504
- --cat-privat: color-mix(in oklch, var(--gray-9) 12%, transparent);
505
- --cat-privat-icon: var(--primitive-cat-privat);
506
422
  }
@@ -26,9 +26,7 @@
26
26
 
27
27
  Konvention: --surface-raised = appens <color>-2. Gäller alla
28
28
  Klodd-appar (Jubb -> blue-2, Ekonom -> plum-2). Korten ligger
29
- subtilt over page-bakgrunden utan att bli för ljus. Tidigare
30
- använde Ekonom --plum-2-5 (mellanvarde) - nu linjerat med
31
- samma regel som Jubb. */
29
+ subtilt över page-bakgrunden utan att bli för ljusa. */
32
30
  --surface-page: var(--plum-1); /* #181118 */
33
31
  --surface-default: var(--plum-2); /* #201320 */
34
32
  --surface-raised: var(--plum-2); /* #201320 - kort, paneler */
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@klodd/ds",
3
- "version": "3.4.4",
4
- "description": "Klodd Design System - shared tokens, typography, components and JS for Jubb, Ekonom, and future apps. v3.4.4 städar åäö i CLI-skript och paket-CSS-kommentarer (preferences-regel #11: alltid å/ä/ö i svenska texter).",
3
+ "version": "3.5.0",
4
+ "description": "Klodd Design System - shared tokens, typography, components and JS for Jubb, Ekonom, and future apps. v3.5.0 tar bort LEGACY ALIASES (alla token-call-sites migrerade) och flyttar overlay-tints till egen sektion. Breaking: --accent/--bg-base/--text-primary/--accent-dim/--accent-hover/--accent-link*/--card-bg-elevated/--shadow-float/--bg-sunken/--radius-xs..4xl/--radius-pill borttagna - använd new tokens. Plus exclude-fält i CLI (klodd-ds.json) för app-specifika exkluderingar.",
5
5
  "main": "css/index.css",
6
6
  "bin": {
7
7
  "klodd-ds": "./bin/klodd-ds.js"