@stigmer/theme 0.0.34 → 0.0.36

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.
@@ -0,0 +1,78 @@
1
+ /* Startup — Modern dev tools design language (Linear, Vercel, Raycast)
2
+ Medium radius, monochrome + violet accent, ultra-minimal borders, flat sidebar */
3
+
4
+ .stgm-theme-startup {
5
+ --stgm-radius: 0.5rem;
6
+ --stgm-background: oklch(0.99 0 0);
7
+ --stgm-foreground: oklch(0.13 0 0);
8
+ --stgm-card: oklch(0.97 0 0);
9
+ --stgm-card-foreground: oklch(0.13 0 0);
10
+ --stgm-popover: oklch(1 0 0);
11
+ --stgm-popover-foreground: oklch(0.13 0 0);
12
+ --stgm-primary: oklch(0.50 0.24 285);
13
+ --stgm-primary-foreground: oklch(0.98 0 0);
14
+ --stgm-secondary: oklch(0.95 0 0);
15
+ --stgm-secondary-foreground: oklch(0.30 0 0);
16
+ --stgm-muted: oklch(0.95 0 0);
17
+ --stgm-muted-foreground: oklch(0.50 0 0);
18
+ --stgm-accent: oklch(0.94 0 0);
19
+ --stgm-accent-foreground: oklch(0.30 0 0);
20
+ --stgm-border: oklch(0.92 0 0);
21
+ --stgm-input: oklch(0.90 0 0);
22
+ --stgm-ring: oklch(0.50 0.18 285);
23
+ --stgm-chart-1: oklch(0.55 0.24 285);
24
+ --stgm-chart-2: oklch(0.50 0.06 0);
25
+ --stgm-chart-3: oklch(0.65 0.16 180);
26
+ --stgm-chart-4: oklch(0.70 0.18 60);
27
+ --stgm-chart-5: oklch(0.58 0.20 340);
28
+ --stgm-shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.04), 0 1px 1px -1px rgb(0 0 0 / 0.04);
29
+ --stgm-shadow-md: 0 3px 5px -1px rgb(0 0 0 / 0.06), 0 1px 3px -2px rgb(0 0 0 / 0.05);
30
+ --stgm-shadow-lg: 0 8px 12px -3px rgb(0 0 0 / 0.06), 0 3px 5px -4px rgb(0 0 0 / 0.04);
31
+ --stgm-transition-duration: 100ms;
32
+ --stgm-transition-timing: cubic-bezier(0, 0, 0.2, 1);
33
+ --stgm-sidebar: oklch(0.97 0 0);
34
+ --stgm-sidebar-foreground: oklch(0.13 0 0);
35
+ --stgm-sidebar-primary: oklch(0.50 0.24 285);
36
+ --stgm-sidebar-primary-foreground: oklch(0.98 0 0);
37
+ --stgm-sidebar-accent: oklch(0.94 0 0);
38
+ --stgm-sidebar-accent-foreground: oklch(0.30 0 0);
39
+ --stgm-sidebar-border: oklch(0.92 0 0);
40
+ --stgm-sidebar-ring: oklch(0.50 0.18 285);
41
+ }
42
+
43
+ .dark .stgm-theme-startup,
44
+ .stgm-theme-startup.dark {
45
+ --stgm-background: oklch(0.09 0 0);
46
+ --stgm-foreground: oklch(0.90 0 0);
47
+ --stgm-card: oklch(0.13 0 0);
48
+ --stgm-card-foreground: oklch(0.90 0 0);
49
+ --stgm-popover: oklch(0.16 0 0);
50
+ --stgm-popover-foreground: oklch(0.90 0 0);
51
+ --stgm-primary: oklch(0.72 0.20 285);
52
+ --stgm-primary-foreground: oklch(0.10 0 0);
53
+ --stgm-secondary: oklch(0.16 0 0);
54
+ --stgm-secondary-foreground: oklch(0.85 0 0);
55
+ --stgm-muted: oklch(0.16 0 0);
56
+ --stgm-muted-foreground: oklch(0.55 0 0);
57
+ --stgm-accent: oklch(0.20 0 0);
58
+ --stgm-accent-foreground: oklch(0.90 0 0);
59
+ --stgm-border: oklch(0.22 0 0);
60
+ --stgm-input: oklch(0.22 0 0);
61
+ --stgm-ring: oklch(0.55 0.16 285);
62
+ --stgm-chart-1: oklch(0.65 0.24 285);
63
+ --stgm-chart-2: oklch(0.55 0.06 0);
64
+ --stgm-chart-3: oklch(0.65 0.17 180);
65
+ --stgm-chart-4: oklch(0.72 0.18 60);
66
+ --stgm-chart-5: oklch(0.62 0.20 340);
67
+ --stgm-shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.18), 0 1px 1px -1px rgb(0 0 0 / 0.18);
68
+ --stgm-shadow-md: 0 3px 5px -1px rgb(0 0 0 / 0.22), 0 1px 3px -2px rgb(0 0 0 / 0.18);
69
+ --stgm-shadow-lg: 0 8px 12px -3px rgb(0 0 0 / 0.25), 0 3px 5px -4px rgb(0 0 0 / 0.2);
70
+ --stgm-sidebar: oklch(0.07 0 0);
71
+ --stgm-sidebar-foreground: oklch(0.85 0 0);
72
+ --stgm-sidebar-primary: oklch(0.72 0.20 285);
73
+ --stgm-sidebar-primary-foreground: oklch(0.10 0 0);
74
+ --stgm-sidebar-accent: oklch(0.14 0 0);
75
+ --stgm-sidebar-accent-foreground: oklch(0.85 0 0);
76
+ --stgm-sidebar-border: oklch(0.18 0 0);
77
+ --stgm-sidebar-ring: oklch(0.50 0.14 285);
78
+ }
package/src/index.ts CHANGED
@@ -1,2 +1,4 @@
1
1
  export { cn } from "./utils";
2
2
  export type { ClassValue } from "./utils";
3
+ export { THEME_PRESETS, resolvePresetClass } from "./presets/index";
4
+ export type { ThemePreset, ThemePresetId } from "./presets/index";
@@ -0,0 +1,79 @@
1
+ /* Corporate — Enterprise SaaS design language (Azure, Salesforce, ServiceNow)
2
+ Tight radius, corporate blue, cool surfaces, prominent borders, dark blue sidebar */
3
+
4
+ .stgm-theme-corporate {
5
+ --stgm-font-sans: var(--font-inter, "Inter", system-ui, sans-serif);
6
+ --stgm-radius: 0.375rem;
7
+ --stgm-background: oklch(0.97 0.01 250);
8
+ --stgm-foreground: oklch(0.18 0.03 250);
9
+ --stgm-card: oklch(1 0.005 250);
10
+ --stgm-card-foreground: oklch(0.18 0.03 250);
11
+ --stgm-popover: oklch(1 0.005 250);
12
+ --stgm-popover-foreground: oklch(0.18 0.03 250);
13
+ --stgm-primary: oklch(0.48 0.18 250);
14
+ --stgm-primary-foreground: oklch(0.98 0 0);
15
+ --stgm-secondary: oklch(0.93 0.02 250);
16
+ --stgm-secondary-foreground: oklch(0.25 0.03 250);
17
+ --stgm-muted: oklch(0.93 0.02 250);
18
+ --stgm-muted-foreground: oklch(0.48 0.03 250);
19
+ --stgm-accent: oklch(0.91 0.03 250);
20
+ --stgm-accent-foreground: oklch(0.25 0.03 250);
21
+ --stgm-border: oklch(0.85 0.025 250);
22
+ --stgm-input: oklch(0.85 0.025 250);
23
+ --stgm-ring: oklch(0.48 0.15 250);
24
+ --stgm-chart-1: oklch(0.55 0.20 250);
25
+ --stgm-chart-2: oklch(0.60 0.16 200);
26
+ --stgm-chart-3: oklch(0.50 0.15 300);
27
+ --stgm-chart-4: oklch(0.72 0.16 150);
28
+ --stgm-chart-5: oklch(0.68 0.18 60);
29
+ --stgm-shadow-sm: 0 1px 3px 0 rgb(0 0 0 / 0.12), 0 1px 2px -1px rgb(0 0 0 / 0.1);
30
+ --stgm-shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.12), 0 2px 4px -2px rgb(0 0 0 / 0.1);
31
+ --stgm-shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.12), 0 4px 6px -4px rgb(0 0 0 / 0.08);
32
+ --stgm-transition-duration: 200ms;
33
+ --stgm-transition-timing: cubic-bezier(0.4, 0, 0.2, 1);
34
+ --stgm-sidebar: oklch(0.20 0.06 250);
35
+ --stgm-sidebar-foreground: oklch(0.93 0 0);
36
+ --stgm-sidebar-primary: oklch(0.75 0.14 250);
37
+ --stgm-sidebar-primary-foreground: oklch(0.15 0 0);
38
+ --stgm-sidebar-accent: oklch(0.28 0.06 250);
39
+ --stgm-sidebar-accent-foreground: oklch(0.93 0 0);
40
+ --stgm-sidebar-border: oklch(1 0 0 / 10%);
41
+ --stgm-sidebar-ring: oklch(0.48 0.15 250);
42
+ }
43
+
44
+ .dark .stgm-theme-corporate,
45
+ .stgm-theme-corporate.dark {
46
+ --stgm-background: oklch(0.16 0.04 250);
47
+ --stgm-foreground: oklch(0.93 0.01 250);
48
+ --stgm-card: oklch(0.22 0.05 250);
49
+ --stgm-card-foreground: oklch(0.93 0.01 250);
50
+ --stgm-popover: oklch(0.26 0.05 250);
51
+ --stgm-popover-foreground: oklch(0.93 0.01 250);
52
+ --stgm-primary: oklch(0.68 0.16 250);
53
+ --stgm-primary-foreground: oklch(0.12 0 0);
54
+ --stgm-secondary: oklch(0.26 0.04 250);
55
+ --stgm-secondary-foreground: oklch(0.93 0.01 250);
56
+ --stgm-muted: oklch(0.26 0.04 250);
57
+ --stgm-muted-foreground: oklch(0.65 0.04 250);
58
+ --stgm-accent: oklch(0.32 0.05 250);
59
+ --stgm-accent-foreground: oklch(0.93 0.01 250);
60
+ --stgm-border: oklch(0.40 0.05 250);
61
+ --stgm-input: oklch(0.40 0.05 250);
62
+ --stgm-ring: oklch(0.55 0.14 250);
63
+ --stgm-chart-1: oklch(0.60 0.20 250);
64
+ --stgm-chart-2: oklch(0.62 0.17 200);
65
+ --stgm-chart-3: oklch(0.58 0.18 300);
66
+ --stgm-chart-4: oklch(0.70 0.17 150);
67
+ --stgm-chart-5: oklch(0.68 0.20 60);
68
+ --stgm-shadow-sm: 0 1px 3px 0 rgb(0 0 0 / 0.3), 0 1px 2px -1px rgb(0 0 0 / 0.28);
69
+ --stgm-shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.35), 0 2px 4px -2px rgb(0 0 0 / 0.3);
70
+ --stgm-shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.4), 0 4px 6px -4px rgb(0 0 0 / 0.35);
71
+ --stgm-sidebar: oklch(0.13 0.05 250);
72
+ --stgm-sidebar-foreground: oklch(0.93 0 0);
73
+ --stgm-sidebar-primary: oklch(0.68 0.16 250);
74
+ --stgm-sidebar-primary-foreground: oklch(0.12 0 0);
75
+ --stgm-sidebar-accent: oklch(0.22 0.06 250);
76
+ --stgm-sidebar-accent-foreground: oklch(0.93 0 0);
77
+ --stgm-sidebar-border: oklch(0.35 0.05 250);
78
+ --stgm-sidebar-ring: oklch(0.50 0.12 250);
79
+ }
@@ -0,0 +1,80 @@
1
+ /* Fintech — Premium financial design language (Stripe, Mercury, Brex)
2
+ Nearly square corners, indigo, crisp surfaces, prominent dark sidebar */
3
+
4
+ .stgm-theme-fintech {
5
+ --stgm-font-sans: var(--font-ibm-plex-sans, "IBM Plex Sans", system-ui, sans-serif);
6
+ --stgm-font-mono: var(--font-ibm-plex-mono, "IBM Plex Mono", ui-monospace, monospace);
7
+ --stgm-radius: 0.125rem;
8
+ --stgm-background: oklch(0.98 0.005 280);
9
+ --stgm-foreground: oklch(0.15 0.04 280);
10
+ --stgm-card: oklch(1 0.003 280);
11
+ --stgm-card-foreground: oklch(0.15 0.04 280);
12
+ --stgm-popover: oklch(1 0.003 280);
13
+ --stgm-popover-foreground: oklch(0.15 0.04 280);
14
+ --stgm-primary: oklch(0.48 0.24 280);
15
+ --stgm-primary-foreground: oklch(0.98 0 0);
16
+ --stgm-secondary: oklch(0.95 0.01 280);
17
+ --stgm-secondary-foreground: oklch(0.25 0.04 280);
18
+ --stgm-muted: oklch(0.95 0.01 280);
19
+ --stgm-muted-foreground: oklch(0.50 0.03 280);
20
+ --stgm-accent: oklch(0.93 0.02 280);
21
+ --stgm-accent-foreground: oklch(0.25 0.04 280);
22
+ --stgm-border: oklch(0.90 0.01 280);
23
+ --stgm-input: oklch(0.88 0.015 280);
24
+ --stgm-ring: oklch(0.48 0.18 280);
25
+ --stgm-chart-1: oklch(0.52 0.24 280);
26
+ --stgm-chart-2: oklch(0.58 0.20 230);
27
+ --stgm-chart-3: oklch(0.50 0.16 340);
28
+ --stgm-chart-4: oklch(0.68 0.15 170);
29
+ --stgm-chart-5: oklch(0.74 0.16 60);
30
+ --stgm-shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.08), 0 1px 1px 0 rgb(0 0 0 / 0.06);
31
+ --stgm-shadow-md: 0 3px 4px -1px rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.08);
32
+ --stgm-shadow-lg: 0 8px 10px -3px rgb(0 0 0 / 0.1), 0 3px 4px -3px rgb(0 0 0 / 0.08);
33
+ --stgm-transition-duration: 150ms;
34
+ --stgm-transition-timing: cubic-bezier(0.25, 0.1, 0.25, 1);
35
+ --stgm-sidebar: oklch(0.12 0.06 280);
36
+ --stgm-sidebar-foreground: oklch(0.90 0.01 280);
37
+ --stgm-sidebar-primary: oklch(0.72 0.20 280);
38
+ --stgm-sidebar-primary-foreground: oklch(0.12 0 0);
39
+ --stgm-sidebar-accent: oklch(0.20 0.07 280);
40
+ --stgm-sidebar-accent-foreground: oklch(0.90 0.01 280);
41
+ --stgm-sidebar-border: oklch(0.25 0.05 280);
42
+ --stgm-sidebar-ring: oklch(0.48 0.18 280);
43
+ }
44
+
45
+ .dark .stgm-theme-fintech,
46
+ .stgm-theme-fintech.dark {
47
+ --stgm-background: oklch(0.12 0.05 280);
48
+ --stgm-foreground: oklch(0.92 0.01 280);
49
+ --stgm-card: oklch(0.18 0.06 280);
50
+ --stgm-card-foreground: oklch(0.92 0.01 280);
51
+ --stgm-popover: oklch(0.23 0.05 280);
52
+ --stgm-popover-foreground: oklch(0.92 0.01 280);
53
+ --stgm-primary: oklch(0.70 0.22 280);
54
+ --stgm-primary-foreground: oklch(0.10 0 0);
55
+ --stgm-secondary: oklch(0.23 0.05 280);
56
+ --stgm-secondary-foreground: oklch(0.92 0.01 280);
57
+ --stgm-muted: oklch(0.23 0.05 280);
58
+ --stgm-muted-foreground: oklch(0.58 0.04 280);
59
+ --stgm-accent: oklch(0.28 0.06 280);
60
+ --stgm-accent-foreground: oklch(0.92 0.01 280);
61
+ --stgm-border: oklch(0.35 0.06 280);
62
+ --stgm-input: oklch(0.35 0.06 280);
63
+ --stgm-ring: oklch(0.55 0.18 280);
64
+ --stgm-chart-1: oklch(0.62 0.24 280);
65
+ --stgm-chart-2: oklch(0.58 0.20 230);
66
+ --stgm-chart-3: oklch(0.56 0.18 340);
67
+ --stgm-chart-4: oklch(0.66 0.17 170);
68
+ --stgm-chart-5: oklch(0.70 0.18 60);
69
+ --stgm-shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.28), 0 1px 1px 0 rgb(0 0 0 / 0.24);
70
+ --stgm-shadow-md: 0 3px 4px -1px rgb(0 0 0 / 0.32), 0 1px 2px -1px rgb(0 0 0 / 0.28);
71
+ --stgm-shadow-lg: 0 8px 10px -3px rgb(0 0 0 / 0.36), 0 3px 4px -3px rgb(0 0 0 / 0.3);
72
+ --stgm-sidebar: oklch(0.08 0.06 280);
73
+ --stgm-sidebar-foreground: oklch(0.88 0.01 280);
74
+ --stgm-sidebar-primary: oklch(0.70 0.22 280);
75
+ --stgm-sidebar-primary-foreground: oklch(0.10 0 0);
76
+ --stgm-sidebar-accent: oklch(0.16 0.07 280);
77
+ --stgm-sidebar-accent-foreground: oklch(0.88 0.01 280);
78
+ --stgm-sidebar-border: oklch(0.22 0.06 280);
79
+ --stgm-sidebar-ring: oklch(0.50 0.14 280);
80
+ }
@@ -0,0 +1,79 @@
1
+ /* Friendly — Consumer SaaS design language (Notion, Intercom, Slack)
2
+ Very rounded, warm coral, cream-tinted surfaces, soft borders, approachable */
3
+
4
+ .stgm-theme-friendly {
5
+ --stgm-font-sans: var(--font-nunito, "Nunito", system-ui, sans-serif);
6
+ --stgm-radius: 1.25rem;
7
+ --stgm-background: oklch(0.97 0.015 65);
8
+ --stgm-foreground: oklch(0.22 0.03 50);
9
+ --stgm-card: oklch(0.99 0.01 65);
10
+ --stgm-card-foreground: oklch(0.22 0.03 50);
11
+ --stgm-popover: oklch(0.99 0.01 65);
12
+ --stgm-popover-foreground: oklch(0.22 0.03 50);
13
+ --stgm-primary: oklch(0.62 0.20 40);
14
+ --stgm-primary-foreground: oklch(0.98 0 0);
15
+ --stgm-secondary: oklch(0.94 0.02 65);
16
+ --stgm-secondary-foreground: oklch(0.30 0.03 50);
17
+ --stgm-muted: oklch(0.93 0.025 65);
18
+ --stgm-muted-foreground: oklch(0.50 0.03 50);
19
+ --stgm-accent: oklch(0.92 0.03 65);
20
+ --stgm-accent-foreground: oklch(0.30 0.03 50);
21
+ --stgm-border: oklch(0.88 0.02 65);
22
+ --stgm-input: oklch(0.88 0.02 65);
23
+ --stgm-ring: oklch(0.62 0.15 40);
24
+ --stgm-chart-1: oklch(0.62 0.20 40);
25
+ --stgm-chart-2: oklch(0.58 0.16 150);
26
+ --stgm-chart-3: oklch(0.55 0.18 280);
27
+ --stgm-chart-4: oklch(0.72 0.18 90);
28
+ --stgm-chart-5: oklch(0.58 0.16 200);
29
+ --stgm-shadow-sm: 0 1px 4px 0 rgb(0 0 0 / 0.07), 0 1px 3px -1px rgb(0 0 0 / 0.07);
30
+ --stgm-shadow-md: 0 4px 8px -1px rgb(0 0 0 / 0.08), 0 2px 5px -2px rgb(0 0 0 / 0.07);
31
+ --stgm-shadow-lg: 0 10px 20px -3px rgb(0 0 0 / 0.08), 0 4px 8px -4px rgb(0 0 0 / 0.06);
32
+ --stgm-transition-duration: 200ms;
33
+ --stgm-transition-timing: cubic-bezier(0.4, 0, 0.2, 1);
34
+ --stgm-sidebar: oklch(0.95 0.02 65);
35
+ --stgm-sidebar-foreground: oklch(0.22 0.03 50);
36
+ --stgm-sidebar-primary: oklch(0.62 0.20 40);
37
+ --stgm-sidebar-primary-foreground: oklch(0.98 0 0);
38
+ --stgm-sidebar-accent: oklch(0.92 0.025 65);
39
+ --stgm-sidebar-accent-foreground: oklch(0.30 0.03 50);
40
+ --stgm-sidebar-border: oklch(0.88 0.02 65);
41
+ --stgm-sidebar-ring: oklch(0.62 0.15 40);
42
+ }
43
+
44
+ .dark .stgm-theme-friendly,
45
+ .stgm-theme-friendly.dark {
46
+ --stgm-background: oklch(0.18 0.03 50);
47
+ --stgm-foreground: oklch(0.93 0.01 65);
48
+ --stgm-card: oklch(0.24 0.04 50);
49
+ --stgm-card-foreground: oklch(0.93 0.01 65);
50
+ --stgm-popover: oklch(0.28 0.035 50);
51
+ --stgm-popover-foreground: oklch(0.93 0.01 65);
52
+ --stgm-primary: oklch(0.72 0.18 40);
53
+ --stgm-primary-foreground: oklch(0.15 0 0);
54
+ --stgm-secondary: oklch(0.27 0.03 50);
55
+ --stgm-secondary-foreground: oklch(0.93 0.01 65);
56
+ --stgm-muted: oklch(0.27 0.03 50);
57
+ --stgm-muted-foreground: oklch(0.62 0.03 50);
58
+ --stgm-accent: oklch(0.33 0.04 50);
59
+ --stgm-accent-foreground: oklch(0.93 0.01 65);
60
+ --stgm-border: oklch(0.38 0.04 50);
61
+ --stgm-input: oklch(0.38 0.04 50);
62
+ --stgm-ring: oklch(0.60 0.14 40);
63
+ --stgm-chart-1: oklch(0.68 0.20 40);
64
+ --stgm-chart-2: oklch(0.62 0.17 150);
65
+ --stgm-chart-3: oklch(0.60 0.18 280);
66
+ --stgm-chart-4: oklch(0.70 0.18 90);
67
+ --stgm-chart-5: oklch(0.60 0.17 200);
68
+ --stgm-shadow-sm: 0 1px 4px 0 rgb(0 0 0 / 0.22), 0 1px 3px -1px rgb(0 0 0 / 0.2);
69
+ --stgm-shadow-md: 0 4px 8px -1px rgb(0 0 0 / 0.26), 0 2px 5px -2px rgb(0 0 0 / 0.22);
70
+ --stgm-shadow-lg: 0 10px 20px -3px rgb(0 0 0 / 0.3), 0 4px 8px -4px rgb(0 0 0 / 0.25);
71
+ --stgm-sidebar: oklch(0.15 0.03 50);
72
+ --stgm-sidebar-foreground: oklch(0.90 0.01 65);
73
+ --stgm-sidebar-primary: oklch(0.72 0.18 40);
74
+ --stgm-sidebar-primary-foreground: oklch(0.15 0 0);
75
+ --stgm-sidebar-accent: oklch(0.24 0.04 50);
76
+ --stgm-sidebar-accent-foreground: oklch(0.90 0.01 65);
77
+ --stgm-sidebar-border: oklch(0.32 0.04 50);
78
+ --stgm-sidebar-ring: oklch(0.55 0.12 40);
79
+ }
@@ -0,0 +1,70 @@
1
+ export interface ThemePreset {
2
+ readonly id: string;
3
+ readonly name: string;
4
+ /** CSS class added to the root element. Empty string for the built-in default. */
5
+ readonly className: string;
6
+ readonly description: string;
7
+ /** Representative OKLCH color string used for swatch rendering. */
8
+ readonly swatch: string;
9
+ }
10
+
11
+ export const THEME_PRESETS = [
12
+ {
13
+ id: "default",
14
+ name: "Default",
15
+ className: "",
16
+ description: "Stigmer's built-in teal palette",
17
+ swatch: "oklch(0.55 0.12 190)",
18
+ },
19
+ {
20
+ id: "corporate",
21
+ name: "Corporate",
22
+ className: "stgm-theme-corporate",
23
+ description: "Enterprise SaaS — tight radius, blue, cool grays, dark sidebar",
24
+ swatch: "oklch(0.48 0.15 250)",
25
+ },
26
+ {
27
+ id: "startup",
28
+ name: "Startup",
29
+ className: "stgm-theme-startup",
30
+ description: "Modern dev tools — clean, monochrome, violet accent, minimal",
31
+ swatch: "oklch(0.50 0.22 285)",
32
+ },
33
+ {
34
+ id: "friendly",
35
+ name: "Friendly",
36
+ className: "stgm-theme-friendly",
37
+ description: "Consumer SaaS — very rounded, warm coral, cream surfaces",
38
+ swatch: "oklch(0.62 0.19 45)",
39
+ },
40
+ {
41
+ id: "fintech",
42
+ name: "Fintech",
43
+ className: "stgm-theme-fintech",
44
+ description: "Premium financial — sharp corners, indigo, crisp, dark sidebar",
45
+ swatch: "oklch(0.50 0.22 280)",
46
+ },
47
+ ] as const satisfies readonly ThemePreset[];
48
+
49
+ /** Union of built-in preset identifiers. */
50
+ export type ThemePresetId = (typeof THEME_PRESETS)[number]["id"];
51
+
52
+ /**
53
+ * Resolve a preset ID to its CSS class name.
54
+ *
55
+ * Returns `""` for `"default"` (no additional class needed).
56
+ * Emits a dev-mode warning for unrecognised IDs (guards JS consumers).
57
+ */
58
+ export function resolvePresetClass(id: ThemePresetId): string {
59
+ const preset = THEME_PRESETS.find((p) => p.id === id);
60
+ if (!preset) {
61
+ if (process.env.NODE_ENV !== "production") {
62
+ console.warn(
63
+ `[@stigmer/theme] Unknown preset "${String(id)}". ` +
64
+ `Available: ${THEME_PRESETS.map((p) => p.id).join(", ")}`,
65
+ );
66
+ }
67
+ return "";
68
+ }
69
+ return preset.className;
70
+ }
@@ -0,0 +1,78 @@
1
+ /* Startup — Modern dev tools design language (Linear, Vercel, Raycast)
2
+ Medium radius, monochrome + violet accent, ultra-minimal borders, flat sidebar */
3
+
4
+ .stgm-theme-startup {
5
+ --stgm-radius: 0.5rem;
6
+ --stgm-background: oklch(0.99 0 0);
7
+ --stgm-foreground: oklch(0.13 0 0);
8
+ --stgm-card: oklch(0.97 0 0);
9
+ --stgm-card-foreground: oklch(0.13 0 0);
10
+ --stgm-popover: oklch(1 0 0);
11
+ --stgm-popover-foreground: oklch(0.13 0 0);
12
+ --stgm-primary: oklch(0.50 0.24 285);
13
+ --stgm-primary-foreground: oklch(0.98 0 0);
14
+ --stgm-secondary: oklch(0.95 0 0);
15
+ --stgm-secondary-foreground: oklch(0.30 0 0);
16
+ --stgm-muted: oklch(0.95 0 0);
17
+ --stgm-muted-foreground: oklch(0.50 0 0);
18
+ --stgm-accent: oklch(0.94 0 0);
19
+ --stgm-accent-foreground: oklch(0.30 0 0);
20
+ --stgm-border: oklch(0.92 0 0);
21
+ --stgm-input: oklch(0.90 0 0);
22
+ --stgm-ring: oklch(0.50 0.18 285);
23
+ --stgm-chart-1: oklch(0.55 0.24 285);
24
+ --stgm-chart-2: oklch(0.50 0.06 0);
25
+ --stgm-chart-3: oklch(0.65 0.16 180);
26
+ --stgm-chart-4: oklch(0.70 0.18 60);
27
+ --stgm-chart-5: oklch(0.58 0.20 340);
28
+ --stgm-shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.04), 0 1px 1px -1px rgb(0 0 0 / 0.04);
29
+ --stgm-shadow-md: 0 3px 5px -1px rgb(0 0 0 / 0.06), 0 1px 3px -2px rgb(0 0 0 / 0.05);
30
+ --stgm-shadow-lg: 0 8px 12px -3px rgb(0 0 0 / 0.06), 0 3px 5px -4px rgb(0 0 0 / 0.04);
31
+ --stgm-transition-duration: 100ms;
32
+ --stgm-transition-timing: cubic-bezier(0, 0, 0.2, 1);
33
+ --stgm-sidebar: oklch(0.97 0 0);
34
+ --stgm-sidebar-foreground: oklch(0.13 0 0);
35
+ --stgm-sidebar-primary: oklch(0.50 0.24 285);
36
+ --stgm-sidebar-primary-foreground: oklch(0.98 0 0);
37
+ --stgm-sidebar-accent: oklch(0.94 0 0);
38
+ --stgm-sidebar-accent-foreground: oklch(0.30 0 0);
39
+ --stgm-sidebar-border: oklch(0.92 0 0);
40
+ --stgm-sidebar-ring: oklch(0.50 0.18 285);
41
+ }
42
+
43
+ .dark .stgm-theme-startup,
44
+ .stgm-theme-startup.dark {
45
+ --stgm-background: oklch(0.09 0 0);
46
+ --stgm-foreground: oklch(0.90 0 0);
47
+ --stgm-card: oklch(0.13 0 0);
48
+ --stgm-card-foreground: oklch(0.90 0 0);
49
+ --stgm-popover: oklch(0.16 0 0);
50
+ --stgm-popover-foreground: oklch(0.90 0 0);
51
+ --stgm-primary: oklch(0.72 0.20 285);
52
+ --stgm-primary-foreground: oklch(0.10 0 0);
53
+ --stgm-secondary: oklch(0.16 0 0);
54
+ --stgm-secondary-foreground: oklch(0.85 0 0);
55
+ --stgm-muted: oklch(0.16 0 0);
56
+ --stgm-muted-foreground: oklch(0.55 0 0);
57
+ --stgm-accent: oklch(0.20 0 0);
58
+ --stgm-accent-foreground: oklch(0.90 0 0);
59
+ --stgm-border: oklch(0.22 0 0);
60
+ --stgm-input: oklch(0.22 0 0);
61
+ --stgm-ring: oklch(0.55 0.16 285);
62
+ --stgm-chart-1: oklch(0.65 0.24 285);
63
+ --stgm-chart-2: oklch(0.55 0.06 0);
64
+ --stgm-chart-3: oklch(0.65 0.17 180);
65
+ --stgm-chart-4: oklch(0.72 0.18 60);
66
+ --stgm-chart-5: oklch(0.62 0.20 340);
67
+ --stgm-shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.18), 0 1px 1px -1px rgb(0 0 0 / 0.18);
68
+ --stgm-shadow-md: 0 3px 5px -1px rgb(0 0 0 / 0.22), 0 1px 3px -2px rgb(0 0 0 / 0.18);
69
+ --stgm-shadow-lg: 0 8px 12px -3px rgb(0 0 0 / 0.25), 0 3px 5px -4px rgb(0 0 0 / 0.2);
70
+ --stgm-sidebar: oklch(0.07 0 0);
71
+ --stgm-sidebar-foreground: oklch(0.85 0 0);
72
+ --stgm-sidebar-primary: oklch(0.72 0.20 285);
73
+ --stgm-sidebar-primary-foreground: oklch(0.10 0 0);
74
+ --stgm-sidebar-accent: oklch(0.14 0 0);
75
+ --stgm-sidebar-accent-foreground: oklch(0.85 0 0);
76
+ --stgm-sidebar-border: oklch(0.18 0 0);
77
+ --stgm-sidebar-ring: oklch(0.50 0.14 285);
78
+ }
package/src/tokens.css CHANGED
@@ -1,70 +1,93 @@
1
1
  :root {
2
- --radius: 0.625rem;
3
- --background: oklch(1 0 0);
4
- --foreground: oklch(0.145 0 0);
5
- --card: oklch(1 0 0);
6
- --card-foreground: oklch(0.145 0 0);
7
- --popover: oklch(1 0 0);
8
- --popover-foreground: oklch(0.145 0 0);
9
- --primary: oklch(0.205 0 0);
10
- --primary-foreground: oklch(0.985 0 0);
11
- --secondary: oklch(0.97 0 0);
12
- --secondary-foreground: oklch(0.205 0 0);
13
- --muted: oklch(0.97 0 0);
14
- --muted-foreground: oklch(0.556 0 0);
15
- --accent: oklch(0.97 0 0);
16
- --accent-foreground: oklch(0.205 0 0);
17
- --destructive: oklch(0.577 0.245 27.325);
18
- --destructive-foreground: oklch(0.985 0 0);
19
- --border: oklch(0.922 0 0);
20
- --input: oklch(0.922 0 0);
21
- --ring: oklch(0.708 0 0);
22
- --chart-1: oklch(0.646 0.222 41.116);
23
- --chart-2: oklch(0.6 0.118 184.704);
24
- --chart-3: oklch(0.398 0.07 227.392);
25
- --chart-4: oklch(0.828 0.189 84.429);
26
- --chart-5: oklch(0.769 0.188 70.08);
27
- --sidebar: oklch(0.985 0 0);
28
- --sidebar-foreground: oklch(0.145 0 0);
29
- --sidebar-primary: oklch(0.205 0 0);
30
- --sidebar-primary-foreground: oklch(0.985 0 0);
31
- --sidebar-accent: oklch(0.97 0 0);
32
- --sidebar-accent-foreground: oklch(0.205 0 0);
33
- --sidebar-border: oklch(0.922 0 0);
34
- --sidebar-ring: oklch(0.708 0 0);
2
+ --stgm-font-sans: var(--font-geist-sans, system-ui, sans-serif);
3
+ --stgm-font-mono: var(--font-geist-mono, ui-monospace, monospace);
4
+ --stgm-radius: 0.625rem;
5
+ --stgm-background: oklch(1 0 0);
6
+ --stgm-foreground: oklch(0.145 0 0);
7
+ --stgm-card: oklch(1 0 0);
8
+ --stgm-card-foreground: oklch(0.145 0 0);
9
+ --stgm-popover: oklch(1 0 0);
10
+ --stgm-popover-foreground: oklch(0.145 0 0);
11
+ --stgm-primary: oklch(0.55 0.12 190);
12
+ --stgm-primary-foreground: oklch(0.985 0 0);
13
+ --stgm-secondary: oklch(0.97 0 0);
14
+ --stgm-secondary-foreground: oklch(0.205 0 0);
15
+ --stgm-muted: oklch(0.97 0 0);
16
+ --stgm-muted-foreground: oklch(0.556 0 0);
17
+ --stgm-accent: oklch(0.97 0 0);
18
+ --stgm-accent-foreground: oklch(0.205 0 0);
19
+ --stgm-destructive: oklch(0.577 0.245 27.325);
20
+ --stgm-destructive-foreground: oklch(0.985 0 0);
21
+ --stgm-success: oklch(0.55 0.15 150);
22
+ --stgm-success-foreground: oklch(0.985 0 0);
23
+ --stgm-warning: oklch(0.75 0.18 80);
24
+ --stgm-warning-foreground: oklch(0.145 0 0);
25
+ --stgm-info: oklch(0.55 0.15 250);
26
+ --stgm-info-foreground: oklch(0.985 0 0);
27
+ --stgm-border: oklch(0.922 0 0);
28
+ --stgm-input: oklch(0.922 0 0);
29
+ --stgm-ring: oklch(0.55 0.1 190);
30
+ --stgm-chart-1: oklch(0.646 0.222 41.116);
31
+ --stgm-chart-2: oklch(0.6 0.118 184.704);
32
+ --stgm-chart-3: oklch(0.398 0.07 227.392);
33
+ --stgm-chart-4: oklch(0.828 0.189 84.429);
34
+ --stgm-chart-5: oklch(0.769 0.188 70.08);
35
+ --stgm-shadow-sm: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);
36
+ --stgm-shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);
37
+ --stgm-shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
38
+ --stgm-transition-duration: 150ms;
39
+ --stgm-transition-timing: cubic-bezier(0.4, 0, 0.2, 1);
40
+ --stgm-z-popover: 50;
41
+ --stgm-sidebar: oklch(0.985 0 0);
42
+ --stgm-sidebar-foreground: oklch(0.145 0 0);
43
+ --stgm-sidebar-primary: oklch(0.55 0.12 190);
44
+ --stgm-sidebar-primary-foreground: oklch(0.985 0 0);
45
+ --stgm-sidebar-accent: oklch(0.97 0 0);
46
+ --stgm-sidebar-accent-foreground: oklch(0.205 0 0);
47
+ --stgm-sidebar-border: oklch(0.922 0 0);
48
+ --stgm-sidebar-ring: oklch(0.55 0.1 190);
35
49
  }
36
50
 
37
51
  .dark {
38
- --background: oklch(0.145 0 0);
39
- --foreground: oklch(0.985 0 0);
40
- --card: oklch(0.205 0 0);
41
- --card-foreground: oklch(0.985 0 0);
42
- --popover: oklch(0.269 0 0);
43
- --popover-foreground: oklch(0.985 0 0);
44
- --primary: oklch(0.922 0 0);
45
- --primary-foreground: oklch(0.205 0 0);
46
- --secondary: oklch(0.269 0 0);
47
- --secondary-foreground: oklch(0.985 0 0);
48
- --muted: oklch(0.269 0 0);
49
- --muted-foreground: oklch(0.708 0 0);
50
- --accent: oklch(0.371 0 0);
51
- --accent-foreground: oklch(0.985 0 0);
52
- --destructive: oklch(0.704 0.191 22.216);
53
- --destructive-foreground: oklch(0.985 0 0);
54
- --border: oklch(1 0 0 / 10%);
55
- --input: oklch(1 0 0 / 15%);
56
- --ring: oklch(0.556 0 0);
57
- --chart-1: oklch(0.488 0.243 264.376);
58
- --chart-2: oklch(0.696 0.17 162.48);
59
- --chart-3: oklch(0.769 0.188 70.08);
60
- --chart-4: oklch(0.627 0.265 303.9);
61
- --chart-5: oklch(0.645 0.246 16.439);
62
- --sidebar: oklch(0.205 0 0);
63
- --sidebar-foreground: oklch(0.985 0 0);
64
- --sidebar-primary: oklch(0.488 0.243 264.376);
65
- --sidebar-primary-foreground: oklch(0.985 0 0);
66
- --sidebar-accent: oklch(0.269 0 0);
67
- --sidebar-accent-foreground: oklch(0.985 0 0);
68
- --sidebar-border: oklch(1 0 0 / 10%);
69
- --sidebar-ring: oklch(0.439 0 0);
52
+ --stgm-background: oklch(0.145 0 0);
53
+ --stgm-foreground: oklch(0.985 0 0);
54
+ --stgm-card: oklch(0.205 0 0);
55
+ --stgm-card-foreground: oklch(0.985 0 0);
56
+ --stgm-popover: oklch(0.269 0 0);
57
+ --stgm-popover-foreground: oklch(0.985 0 0);
58
+ --stgm-primary: oklch(0.72 0.12 190);
59
+ --stgm-primary-foreground: oklch(0.145 0 0);
60
+ --stgm-secondary: oklch(0.269 0 0);
61
+ --stgm-secondary-foreground: oklch(0.985 0 0);
62
+ --stgm-muted: oklch(0.269 0 0);
63
+ --stgm-muted-foreground: oklch(0.708 0 0);
64
+ --stgm-accent: oklch(0.371 0 0);
65
+ --stgm-accent-foreground: oklch(0.985 0 0);
66
+ --stgm-destructive: oklch(0.704 0.191 22.216);
67
+ --stgm-destructive-foreground: oklch(0.985 0 0);
68
+ --stgm-success: oklch(0.7 0.15 150);
69
+ --stgm-success-foreground: oklch(0.985 0 0);
70
+ --stgm-warning: oklch(0.78 0.16 80);
71
+ --stgm-warning-foreground: oklch(0.145 0 0);
72
+ --stgm-info: oklch(0.7 0.15 250);
73
+ --stgm-info-foreground: oklch(0.985 0 0);
74
+ --stgm-border: oklch(1 0 0 / 10%);
75
+ --stgm-input: oklch(1 0 0 / 15%);
76
+ --stgm-ring: oklch(0.55 0.1 190);
77
+ --stgm-chart-1: oklch(0.488 0.243 264.376);
78
+ --stgm-chart-2: oklch(0.696 0.17 162.48);
79
+ --stgm-chart-3: oklch(0.769 0.188 70.08);
80
+ --stgm-chart-4: oklch(0.627 0.265 303.9);
81
+ --stgm-chart-5: oklch(0.645 0.246 16.439);
82
+ --stgm-shadow-sm: 0 1px 3px 0 rgb(0 0 0 / 0.25), 0 1px 2px -1px rgb(0 0 0 / 0.25);
83
+ --stgm-shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.3), 0 2px 4px -2px rgb(0 0 0 / 0.25);
84
+ --stgm-shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.35), 0 4px 6px -4px rgb(0 0 0 / 0.3);
85
+ --stgm-sidebar: oklch(0.205 0 0);
86
+ --stgm-sidebar-foreground: oklch(0.985 0 0);
87
+ --stgm-sidebar-primary: oklch(0.72 0.12 190);
88
+ --stgm-sidebar-primary-foreground: oklch(0.145 0 0);
89
+ --stgm-sidebar-accent: oklch(0.269 0 0);
90
+ --stgm-sidebar-accent-foreground: oklch(0.985 0 0);
91
+ --stgm-sidebar-border: oklch(1 0 0 / 10%);
92
+ --stgm-sidebar-ring: oklch(0.5 0.08 190);
70
93
  }