@wtasnorg/candi 0.0.22

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,203 @@
1
+ /*
2
+ * Scandinavian Theme - Component Classes
3
+ */
4
+
5
+ /* Cards */
6
+ .candi-card {
7
+ background-color: var(--candi-surface);
8
+ border: 1px solid var(--candi-border);
9
+ border-radius: 1rem;
10
+ padding: 2.5rem;
11
+ box-shadow: var(--candi-shadow);
12
+ transition: transform 0.3s ease, box-shadow 0.3s ease;
13
+ }
14
+
15
+ .candi-card:hover {
16
+ transform: translateY(-2px);
17
+ box-shadow: var(--candi-shadow-md);
18
+ }
19
+
20
+ .candi-card-elevated {
21
+ background-color: var(--candi-elevated);
22
+ border: none;
23
+ border-radius: 1.25rem;
24
+ padding: 3rem;
25
+ box-shadow: var(--candi-shadow-md);
26
+ }
27
+
28
+ /* Buttons */
29
+ .candi-btn {
30
+ display: inline-flex;
31
+ align-items: center;
32
+ justify-content: center;
33
+ gap: 0.625rem;
34
+ padding: 1rem 2rem;
35
+ font-size: 0.9375rem;
36
+ font-weight: 500;
37
+ letter-spacing: 0.02em;
38
+ border-radius: 0.75rem;
39
+ border: none;
40
+ cursor: pointer;
41
+ transition: all 0.25s ease;
42
+ min-height: 3.25rem;
43
+ }
44
+
45
+ .candi-btn-primary {
46
+ background-color: var(--candi-accent);
47
+ color: white;
48
+ }
49
+
50
+ .candi-btn-primary:hover {
51
+ opacity: 0.9;
52
+ transform: translateY(-1px);
53
+ }
54
+
55
+ .candi-btn-secondary {
56
+ background-color: transparent;
57
+ color: var(--candi-text);
58
+ border: 1.5px solid var(--candi-border-strong);
59
+ }
60
+
61
+ .candi-btn-secondary:hover {
62
+ background-color: var(--candi-surface);
63
+ }
64
+
65
+ .candi-btn-warm {
66
+ background-color: var(--candi-secondary);
67
+ color: white;
68
+ }
69
+
70
+ .candi-btn-ghost {
71
+ background-color: transparent;
72
+ color: var(--candi-accent);
73
+ }
74
+
75
+ .candi-btn-ghost:hover {
76
+ background-color: var(--candi-accent-subtle);
77
+ }
78
+
79
+ /* Form Inputs */
80
+ .candi-input {
81
+ width: 100%;
82
+ padding: 1rem 1.25rem;
83
+ font-size: 1rem;
84
+ line-height: 1.5;
85
+ background-color: var(--candi-elevated);
86
+ border: 1.5px solid var(--candi-border-strong);
87
+ border-radius: 0.75rem;
88
+ color: var(--candi-text);
89
+ transition: border-color 0.2s ease, box-shadow 0.2s ease;
90
+ min-height: 3.5rem;
91
+ }
92
+
93
+ .candi-input::placeholder {
94
+ color: var(--candi-text-muted);
95
+ }
96
+
97
+ .candi-input:hover {
98
+ border-color: var(--candi-text-muted);
99
+ }
100
+
101
+ .candi-input:focus {
102
+ outline: none;
103
+ border-color: var(--candi-accent);
104
+ box-shadow: 0 0 0 4px var(--candi-focus-ring);
105
+ }
106
+
107
+ .candi-label {
108
+ display: block;
109
+ margin-bottom: 0.625rem;
110
+ font-size: 0.875rem;
111
+ font-weight: 500;
112
+ color: var(--candi-text-subtle);
113
+ letter-spacing: 0.02em;
114
+ }
115
+
116
+ .candi-input-group {
117
+ margin-bottom: 1.75rem;
118
+ }
119
+
120
+ /* Navigation */
121
+ .candi-nav {
122
+ background-color: var(--candi-elevated);
123
+ border-bottom: 1px solid var(--candi-border);
124
+ padding: 1.25rem 2rem;
125
+ }
126
+
127
+ .candi-nav-link {
128
+ color: var(--candi-text-subtle);
129
+ font-size: 0.9375rem;
130
+ font-weight: 450;
131
+ padding: 0.75rem 1.25rem;
132
+ border-radius: 0.5rem;
133
+ transition: all 0.2s ease;
134
+ text-decoration: none;
135
+ }
136
+
137
+ .candi-nav-link:hover,
138
+ .candi-nav-link.active {
139
+ color: var(--candi-text);
140
+ background-color: var(--candi-surface);
141
+ }
142
+
143
+ /* Badges */
144
+ .candi-badge {
145
+ display: inline-flex;
146
+ align-items: center;
147
+ padding: 0.5rem 1rem;
148
+ font-size: 0.8125rem;
149
+ font-weight: 500;
150
+ border-radius: 2rem;
151
+ background-color: var(--candi-surface);
152
+ color: var(--candi-text-subtle);
153
+ }
154
+
155
+ .candi-badge-accent {
156
+ background-color: var(--candi-accent-subtle);
157
+ color: var(--candi-accent);
158
+ }
159
+
160
+ .candi-badge-warm {
161
+ background-color: var(--candi-secondary-subtle);
162
+ color: var(--candi-secondary);
163
+ }
164
+
165
+ /* Divider */
166
+ .candi-divider {
167
+ height: 1px;
168
+ background-color: var(--candi-border);
169
+ border: none;
170
+ margin: 2.5rem 0;
171
+ }
172
+
173
+ /* Theme Toggle */
174
+ .candi-theme-toggle {
175
+ width: 3.5rem;
176
+ height: 2rem;
177
+ padding: 0.25rem;
178
+ background-color: var(--candi-surface);
179
+ border: 1.5px solid var(--candi-border-strong);
180
+ border-radius: 2rem;
181
+ cursor: pointer;
182
+ position: relative;
183
+ transition: all 0.3s ease;
184
+ }
185
+
186
+ .candi-theme-toggle::after {
187
+ content: '';
188
+ position: absolute;
189
+ width: 1.375rem;
190
+ height: 1.375rem;
191
+ background-color: var(--candi-elevated);
192
+ border-radius: 50%;
193
+ top: 50%;
194
+ left: 0.25rem;
195
+ transform: translateY(-50%);
196
+ transition: all 0.3s ease;
197
+ box-shadow: var(--candi-shadow);
198
+ }
199
+
200
+ .dark .candi-theme-toggle::after {
201
+ left: calc(100% - 1.625rem);
202
+ background-color: var(--candi-accent);
203
+ }
@@ -0,0 +1,34 @@
1
+ declare module '@wtasnorg/candi' {
2
+ export const theme: {
3
+ colors: { candi: Record<string, string> };
4
+ spacing: Record<string, string>;
5
+ fontFamily: Record<string, string[]>;
6
+ fontSize: Record<string, [string, { lineHeight: string }]>;
7
+ lineHeight: Record<string, string>;
8
+ minHeight: Record<string, string>;
9
+ borderRadius: Record<string, string>;
10
+ boxShadow: Record<string, string>;
11
+ transitionDuration: Record<string, string>;
12
+ };
13
+ export const plugin: { handler: Function };
14
+ export default { theme: typeof theme; plugin: typeof plugin };
15
+ }
16
+
17
+ declare module '@wtasnorg/candi/theme' {
18
+ const theme: Record<string, any>;
19
+ export default theme;
20
+ }
21
+
22
+ declare module '@wtasnorg/candi/plugin' {
23
+ import { PluginCreator } from 'tailwindcss/types/config';
24
+ const plugin: PluginCreator;
25
+ export default plugin;
26
+ }
27
+
28
+ declare module '@wtasnorg/candi/css' {}
29
+ declare module '@wtasnorg/candi/css/base' {}
30
+ declare module '@wtasnorg/candi/css/components' {}
31
+ declare module '@wtasnorg/candi/css/utilities' {}
32
+
33
+ // Tailwind CSS v4 support
34
+ declare module '@wtasnorg/candi/v4' {}
package/dist/index.js ADDED
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Scandinavian Theme for Tailwind CSS
3
+ *
4
+ * Nordic/Scandinavian design inspired by Hygge & Lagom principles.
5
+ *
6
+ * @example
7
+ * // In tailwind.config.js
8
+ * const { theme, plugin } = require('@wtasnorg/candi');
9
+ *
10
+ * module.exports = {
11
+ * theme: { extend: theme },
12
+ * plugins: [plugin],
13
+ * };
14
+ */
15
+
16
+ const theme = require('./theme');
17
+ const plugin = require('./plugin');
18
+
19
+ module.exports = { theme, plugin };
20
+ module.exports.theme = theme;
21
+ module.exports.plugin = plugin;
22
+ module.exports.default = { theme, plugin };
package/dist/index.mjs ADDED
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Scandinavian Theme for Tailwind CSS
3
+ *
4
+ * Nordic/Scandinavian design inspired by Hygge & Lagom principles.
5
+ *
6
+ * @example
7
+ * // In tailwind.config.js
8
+ * const { theme, plugin } = require('@wtasnorg/candi');
9
+ *
10
+ * export default {
11
+ * theme: { extend: theme },
12
+ * plugins: [plugin],
13
+ * };
14
+ */
15
+
16
+ import theme from './theme';
17
+ import plugin from './plugin';
18
+
19
+ export default { theme, plugin };
20
+ export const theme = theme;
21
+ export const plugin = plugin;
22
+ export const default = { theme, plugin };
package/dist/plugin.js ADDED
@@ -0,0 +1,116 @@
1
+ /**
2
+ * Scandinavian Theme - Tailwind Plugin
3
+ *
4
+ * Generates candi-* utility classes for semantic color usage.
5
+ */
6
+
7
+ const plugin = require('tailwindcss/plugin');
8
+
9
+ module.exports = plugin(function ({ addUtilities, addBase, theme, e }) {
10
+ // Inject CSS custom properties
11
+ addBase({
12
+ ':root': {
13
+ '--candi-bg': 'oklch(98% 0.008 85)',
14
+ '--candi-surface': 'oklch(95.5% 0.012 85)',
15
+ '--candi-elevated': 'oklch(100% 0 0)',
16
+ '--candi-text': 'oklch(28% 0.015 250)',
17
+ '--candi-text-subtle': 'oklch(50% 0.01 250)',
18
+ '--candi-text-muted': 'oklch(62% 0.008 250)',
19
+ '--candi-border': 'oklch(90% 0.008 85)',
20
+ '--candi-border-strong': 'oklch(82% 0.01 85)',
21
+ '--candi-divider': 'oklch(88% 0.006 85)',
22
+ '--candi-accent': 'oklch(52% 0.06 230)',
23
+ '--candi-accent-subtle': 'oklch(85% 0.03 230)',
24
+ '--candi-on-accent': 'oklch(100% 0 0)',
25
+ '--candi-secondary': 'oklch(58% 0.12 55)',
26
+ '--candi-secondary-subtle': 'oklch(88% 0.04 55)',
27
+ '--candi-on-secondary': 'oklch(100% 0 0)',
28
+ '--candi-success': 'oklch(52% 0.08 145)',
29
+ '--candi-on-success': 'oklch(100% 0 0)',
30
+ '--candi-warning': 'oklch(68% 0.13 70)',
31
+ '--candi-on-warning': 'oklch(20% 0.02 70)',
32
+ '--candi-error': 'oklch(58% 0.12 25)',
33
+ '--candi-on-error': 'oklch(100% 0 0)',
34
+ '--candi-info': 'oklch(55% 0.1 240)',
35
+ '--candi-on-info': 'oklch(100% 0 0)',
36
+ '--candi-link': 'oklch(50% 0.08 230)',
37
+ '--candi-disabled': 'oklch(75% 0.005 250)',
38
+ '--candi-overlay': 'oklch(0% 0 0 / 0.5)',
39
+ '--candi-scrim': 'oklch(0% 0 0 / 0.32)',
40
+ '--candi-inverse-surface': 'oklch(25% 0.015 250)',
41
+ '--candi-inverse-text': 'oklch(92% 0.01 85)',
42
+ '--candi-focus-ring': 'oklch(52% 0.06 230 / 0.4)',
43
+ '--candi-shadow': '0 2px 8px rgba(45, 50, 57, 0.06)',
44
+ '--candi-shadow-md': '0 4px 20px rgba(45, 50, 57, 0.1)',
45
+ '--candi-shadow-lg': '0 8px 40px rgba(45, 50, 57, 0.15)',
46
+ '--candi-shadow-color': 'oklch(25% 0.01 250 / 0.15)',
47
+ '--candi-syntax-keyword': 'oklch(60% 0.15 0)',
48
+ '--candi-syntax-type': 'oklch(65% 0.12 280)',
49
+ '--candi-syntax-var': 'oklch(65% 0.1 200)',
50
+ '--candi-syntax-const': 'oklch(70% 0.14 50)',
51
+ '--candi-syntax-func': 'oklch(55% 0.12 240)',
52
+ '--candi-syntax-string': 'oklch(60% 0.12 140)',
53
+ '--candi-hover': 'oklch(0% 0 0 / 0.05)',
54
+ '--candi-active': 'oklch(0% 0 0 / 0.1)',
55
+ },
56
+ '.dark': {
57
+ '--candi-bg': 'oklch(18% 0.015 250)',
58
+ '--candi-surface': 'oklch(22% 0.012 250)',
59
+ '--candi-elevated': 'oklch(25% 0.015 250)',
60
+ '--candi-text': 'oklch(92% 0.01 85)',
61
+ '--candi-text-subtle': 'oklch(72% 0.008 85)',
62
+ '--candi-text-muted': 'oklch(58% 0.006 85)',
63
+ '--candi-border': 'oklch(30% 0.01 250)',
64
+ '--candi-border-strong': 'oklch(40% 0.012 250)',
65
+ '--candi-divider': 'oklch(28% 0.008 250)',
66
+ '--candi-accent': 'oklch(62% 0.08 230)',
67
+ '--candi-accent-subtle': 'oklch(35% 0.04 230)',
68
+ '--candi-on-accent': 'oklch(15% 0.01 230)',
69
+ '--candi-secondary': 'oklch(65% 0.12 55)',
70
+ '--candi-secondary-subtle': 'oklch(30% 0.05 55)',
71
+ '--candi-on-secondary': 'oklch(15% 0.02 55)',
72
+ '--candi-success': 'oklch(60% 0.1 145)',
73
+ '--candi-on-success': 'oklch(15% 0.02 145)',
74
+ '--candi-warning': 'oklch(72% 0.13 70)',
75
+ '--candi-on-warning': 'oklch(15% 0.02 70)',
76
+ '--candi-error': 'oklch(65% 0.12 25)',
77
+ '--candi-on-error': 'oklch(15% 0.02 25)',
78
+ '--candi-info': 'oklch(65% 0.1 240)',
79
+ '--candi-on-info': 'oklch(15% 0.02 240)',
80
+ '--candi-link': 'oklch(60% 0.08 230)',
81
+ '--candi-disabled': 'oklch(45% 0.005 250)',
82
+ '--candi-overlay': 'oklch(0% 0 0 / 0.7)',
83
+ '--candi-scrim': 'oklch(0% 0 0 / 0.6)',
84
+ '--candi-inverse-surface': 'oklch(92% 0.008 85)',
85
+ '--candi-inverse-text': 'oklch(25% 0.015 250)',
86
+ '--candi-focus-ring': 'oklch(62% 0.08 230 / 0.5)',
87
+ '--candi-shadow': '0 2px 8px rgba(0, 0, 0, 0.25)',
88
+ '--candi-shadow-md': '0 4px 20px rgba(0, 0, 0, 0.35)',
89
+ '--candi-shadow-lg': '0 8px 40px rgba(0, 0, 0, 0.45)',
90
+ '--candi-shadow-color': 'oklch(0% 0 0 / 0.4)',
91
+ '--candi-syntax-keyword': 'oklch(70% 0.15 0)',
92
+ '--candi-syntax-type': 'oklch(75% 0.12 280)',
93
+ '--candi-syntax-var': 'oklch(75% 0.1 200)',
94
+ '--candi-syntax-const': 'oklch(80% 0.14 50)',
95
+ '--candi-syntax-func': 'oklch(65% 0.12 240)',
96
+ '--candi-syntax-string': 'oklch(70% 0.12 140)',
97
+ '--candi-hover': 'oklch(100% 0 0 / 0.1)',
98
+ '--candi-active': 'oklch(100% 0 0 / 0.2)',
99
+ },
100
+ });
101
+
102
+ // Generate candi-* utilities
103
+ const colors = theme('colors.candi') || {};
104
+ const newUtilities = {};
105
+
106
+ Object.keys(colors).forEach((key) => {
107
+ const colorValue = colors[key];
108
+ newUtilities[`.${e(`bg-candi-${key}`)}`] = { backgroundColor: colorValue };
109
+ newUtilities[`.${e(`text-candi-${key}`)}`] = { color: colorValue };
110
+ newUtilities[`.${e(`border-candi-${key}`)}`] = { borderColor: colorValue };
111
+ newUtilities[`.${e(`fill-candi-${key}`)}`] = { fill: colorValue };
112
+ newUtilities[`.${e(`stroke-candi-${key}`)}`] = { stroke: colorValue };
113
+ });
114
+
115
+ addUtilities(newUtilities);
116
+ });
@@ -0,0 +1,116 @@
1
+ /**
2
+ * Scandinavian Theme - Tailwind Plugin
3
+ *
4
+ * Generates candi-* utility classes for semantic color usage.
5
+ */
6
+
7
+ import plugin from 'tailwindcss/plugin';
8
+
9
+ export default plugin(function ({ addUtilities, addBase, theme, e }) {
10
+ // Inject CSS custom properties
11
+ addBase({
12
+ ':root': {
13
+ '--candi-bg': 'oklch(98% 0.008 85)',
14
+ '--candi-surface': 'oklch(95.5% 0.012 85)',
15
+ '--candi-elevated': 'oklch(100% 0 0)',
16
+ '--candi-text': 'oklch(28% 0.015 250)',
17
+ '--candi-text-subtle': 'oklch(50% 0.01 250)',
18
+ '--candi-text-muted': 'oklch(62% 0.008 250)',
19
+ '--candi-border': 'oklch(90% 0.008 85)',
20
+ '--candi-border-strong': 'oklch(82% 0.01 85)',
21
+ '--candi-divider': 'oklch(88% 0.006 85)',
22
+ '--candi-accent': 'oklch(52% 0.06 230)',
23
+ '--candi-accent-subtle': 'oklch(85% 0.03 230)',
24
+ '--candi-on-accent': 'oklch(100% 0 0)',
25
+ '--candi-secondary': 'oklch(58% 0.12 55)',
26
+ '--candi-secondary-subtle': 'oklch(88% 0.04 55)',
27
+ '--candi-on-secondary': 'oklch(100% 0 0)',
28
+ '--candi-success': 'oklch(52% 0.08 145)',
29
+ '--candi-on-success': 'oklch(100% 0 0)',
30
+ '--candi-warning': 'oklch(68% 0.13 70)',
31
+ '--candi-on-warning': 'oklch(20% 0.02 70)',
32
+ '--candi-error': 'oklch(58% 0.12 25)',
33
+ '--candi-on-error': 'oklch(100% 0 0)',
34
+ '--candi-info': 'oklch(55% 0.1 240)',
35
+ '--candi-on-info': 'oklch(100% 0 0)',
36
+ '--candi-link': 'oklch(50% 0.08 230)',
37
+ '--candi-disabled': 'oklch(75% 0.005 250)',
38
+ '--candi-overlay': 'oklch(0% 0 0 / 0.5)',
39
+ '--candi-scrim': 'oklch(0% 0 0 / 0.32)',
40
+ '--candi-inverse-surface': 'oklch(25% 0.015 250)',
41
+ '--candi-inverse-text': 'oklch(92% 0.01 85)',
42
+ '--candi-focus-ring': 'oklch(52% 0.06 230 / 0.4)',
43
+ '--candi-shadow': '0 2px 8px rgba(45, 50, 57, 0.06)',
44
+ '--candi-shadow-md': '0 4px 20px rgba(45, 50, 57, 0.1)',
45
+ '--candi-shadow-lg': '0 8px 40px rgba(45, 50, 57, 0.15)',
46
+ '--candi-shadow-color': 'oklch(25% 0.01 250 / 0.15)',
47
+ '--candi-syntax-keyword': 'oklch(60% 0.15 0)',
48
+ '--candi-syntax-type': 'oklch(65% 0.12 280)',
49
+ '--candi-syntax-var': 'oklch(65% 0.1 200)',
50
+ '--candi-syntax-const': 'oklch(70% 0.14 50)',
51
+ '--candi-syntax-func': 'oklch(55% 0.12 240)',
52
+ '--candi-syntax-string': 'oklch(60% 0.12 140)',
53
+ '--candi-hover': 'oklch(0% 0 0 / 0.05)',
54
+ '--candi-active': 'oklch(0% 0 0 / 0.1)',
55
+ },
56
+ '.dark': {
57
+ '--candi-bg': 'oklch(18% 0.015 250)',
58
+ '--candi-surface': 'oklch(22% 0.012 250)',
59
+ '--candi-elevated': 'oklch(25% 0.015 250)',
60
+ '--candi-text': 'oklch(92% 0.01 85)',
61
+ '--candi-text-subtle': 'oklch(72% 0.008 85)',
62
+ '--candi-text-muted': 'oklch(58% 0.006 85)',
63
+ '--candi-border': 'oklch(30% 0.01 250)',
64
+ '--candi-border-strong': 'oklch(40% 0.012 250)',
65
+ '--candi-divider': 'oklch(28% 0.008 250)',
66
+ '--candi-accent': 'oklch(62% 0.08 230)',
67
+ '--candi-accent-subtle': 'oklch(35% 0.04 230)',
68
+ '--candi-on-accent': 'oklch(15% 0.01 230)',
69
+ '--candi-secondary': 'oklch(65% 0.12 55)',
70
+ '--candi-secondary-subtle': 'oklch(30% 0.05 55)',
71
+ '--candi-on-secondary': 'oklch(15% 0.02 55)',
72
+ '--candi-success': 'oklch(60% 0.1 145)',
73
+ '--candi-on-success': 'oklch(15% 0.02 145)',
74
+ '--candi-warning': 'oklch(72% 0.13 70)',
75
+ '--candi-on-warning': 'oklch(15% 0.02 70)',
76
+ '--candi-error': 'oklch(65% 0.12 25)',
77
+ '--candi-on-error': 'oklch(15% 0.02 25)',
78
+ '--candi-info': 'oklch(65% 0.1 240)',
79
+ '--candi-on-info': 'oklch(15% 0.02 240)',
80
+ '--candi-link': 'oklch(60% 0.08 230)',
81
+ '--candi-disabled': 'oklch(45% 0.005 250)',
82
+ '--candi-overlay': 'oklch(0% 0 0 / 0.7)',
83
+ '--candi-scrim': 'oklch(0% 0 0 / 0.6)',
84
+ '--candi-inverse-surface': 'oklch(92% 0.008 85)',
85
+ '--candi-inverse-text': 'oklch(25% 0.015 250)',
86
+ '--candi-focus-ring': 'oklch(62% 0.08 230 / 0.5)',
87
+ '--candi-shadow': '0 2px 8px rgba(0, 0, 0, 0.25)',
88
+ '--candi-shadow-md': '0 4px 20px rgba(0, 0, 0, 0.35)',
89
+ '--candi-shadow-lg': '0 8px 40px rgba(0, 0, 0, 0.45)',
90
+ '--candi-shadow-color': 'oklch(0% 0 0 / 0.4)',
91
+ '--candi-syntax-keyword': 'oklch(70% 0.15 0)',
92
+ '--candi-syntax-type': 'oklch(75% 0.12 280)',
93
+ '--candi-syntax-var': 'oklch(75% 0.1 200)',
94
+ '--candi-syntax-const': 'oklch(80% 0.14 50)',
95
+ '--candi-syntax-func': 'oklch(65% 0.12 240)',
96
+ '--candi-syntax-string': 'oklch(70% 0.12 140)',
97
+ '--candi-hover': 'oklch(100% 0 0 / 0.1)',
98
+ '--candi-active': 'oklch(100% 0 0 / 0.2)',
99
+ },
100
+ });
101
+
102
+ // Generate candi-* utilities
103
+ const colors = theme('colors.candi') || {};
104
+ const newUtilities = {};
105
+
106
+ Object.keys(colors).forEach((key) => {
107
+ const colorValue = colors[key];
108
+ newUtilities[`.${e(`bg-candi-${key}`)}`] = { backgroundColor: colorValue };
109
+ newUtilities[`.${e(`text-candi-${key}`)}`] = { color: colorValue };
110
+ newUtilities[`.${e(`border-candi-${key}`)}`] = { borderColor: colorValue };
111
+ newUtilities[`.${e(`fill-candi-${key}`)}`] = { fill: colorValue };
112
+ newUtilities[`.${e(`stroke-candi-${key}`)}`] = { stroke: colorValue };
113
+ });
114
+
115
+ addUtilities(newUtilities);
116
+ });