@webmate-studio/builder 0.2.118 → 0.2.120
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/package.json +1 -1
- package/src/design-tokens.js +20 -50
package/package.json
CHANGED
package/src/design-tokens.js
CHANGED
|
@@ -7,6 +7,7 @@ function generateSemanticColorUtilities(tokens) {
|
|
|
7
7
|
if (!tokens.colors) return '';
|
|
8
8
|
|
|
9
9
|
let utilities = '\n/* Color Utilities */';
|
|
10
|
+
utilities += '\n@layer utilities {';
|
|
10
11
|
|
|
11
12
|
// Map of all colors: token name -> utility class base name
|
|
12
13
|
const colorMap = {
|
|
@@ -77,67 +78,32 @@ function generateSemanticColorUtilities(tokens) {
|
|
|
77
78
|
// Determine which type(s) of utility classes to generate based on className prefix
|
|
78
79
|
// If className already has prefix (bg-, text-, border-), generate only that variant
|
|
79
80
|
// Otherwise generate all three variants
|
|
80
|
-
|
|
81
|
-
|
|
81
|
+
|
|
82
|
+
/** Helper: generate base + hover + focus for a single class */
|
|
83
|
+
function addUtility(cls, prop, varRef) {
|
|
84
|
+
if (processedClasses.has(cls)) return;
|
|
85
|
+
processedClasses.add(cls);
|
|
86
|
+
utilities += `\n.${cls} {\n ${prop}: var(${varRef});\n}`;
|
|
87
|
+
utilities += `\n.hover\\:${cls}:hover {\n ${prop}: var(${varRef});\n}`;
|
|
88
|
+
utilities += `\n.focus\\:${cls}:focus {\n ${prop}: var(${varRef});\n}`;
|
|
89
|
+
}
|
|
82
90
|
|
|
83
91
|
if (className.startsWith('bg-')) {
|
|
84
|
-
|
|
85
|
-
processedClasses.add(className);
|
|
86
|
-
utilities += `\n@utility ${className} {`;
|
|
87
|
-
utilities += `\n background-color: var(${colorVar});`;
|
|
88
|
-
utilities += `\n}`;
|
|
89
|
-
}
|
|
92
|
+
addUtility(className, 'background-color', colorVar);
|
|
90
93
|
} else if (className.startsWith('text-')) {
|
|
91
|
-
|
|
92
|
-
processedClasses.add(className);
|
|
93
|
-
utilities += `\n@utility ${className} {`;
|
|
94
|
-
utilities += `\n color: var(${colorVar});`;
|
|
95
|
-
utilities += `\n}`;
|
|
96
|
-
}
|
|
94
|
+
addUtility(className, 'color', colorVar);
|
|
97
95
|
} else if (className.startsWith('border-')) {
|
|
98
|
-
|
|
99
|
-
processedClasses.add(className);
|
|
100
|
-
utilities += `\n@utility ${className} {`;
|
|
101
|
-
utilities += `\n border-color: var(${colorVar});`;
|
|
102
|
-
utilities += `\n}`;
|
|
103
|
-
}
|
|
96
|
+
addUtility(className, 'border-color', colorVar);
|
|
104
97
|
} else {
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
const borderClass = `border-${className}`;
|
|
109
|
-
|
|
110
|
-
if (!processedClasses.has(textClass)) {
|
|
111
|
-
processedClasses.add(textClass);
|
|
112
|
-
utilities += `\n@utility ${textClass} {`;
|
|
113
|
-
utilities += `\n color: var(${colorVar});`;
|
|
114
|
-
utilities += `\n}`;
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
if (!processedClasses.has(bgClass)) {
|
|
118
|
-
processedClasses.add(bgClass);
|
|
119
|
-
utilities += `\n@utility ${bgClass} {`;
|
|
120
|
-
utilities += `\n background-color: var(${colorVar});`;
|
|
121
|
-
utilities += `\n}`;
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
if (!processedClasses.has(borderClass)) {
|
|
125
|
-
processedClasses.add(borderClass);
|
|
126
|
-
utilities += `\n@utility ${borderClass} {`;
|
|
127
|
-
utilities += `\n border-color: var(${colorVar});`;
|
|
128
|
-
utilities += `\n}`;
|
|
129
|
-
}
|
|
98
|
+
addUtility(`text-${className}`, 'color', colorVar);
|
|
99
|
+
addUtility(`bg-${className}`, 'background-color', colorVar);
|
|
100
|
+
addUtility(`border-${className}`, 'border-color', colorVar);
|
|
130
101
|
}
|
|
131
102
|
}
|
|
132
103
|
|
|
133
104
|
// Generate opacity variants for all color utilities using color-mix()
|
|
134
|
-
// These use @layer utilities (not @utility) because @utility doesn't support slash in names.
|
|
135
|
-
// Opacity variants don't need responsive/hover support — the base class handles that.
|
|
136
105
|
const opacitySteps = [10, 20, 30, 40, 50, 60, 70, 80, 90];
|
|
137
106
|
|
|
138
|
-
utilities += '\n\n/* Opacity Variants */';
|
|
139
|
-
utilities += '\n@layer utilities {';
|
|
140
|
-
|
|
141
107
|
for (const [tokenKey, className] of Object.entries(colorMap)) {
|
|
142
108
|
if (!tokens.colors[tokenKey]) continue;
|
|
143
109
|
const colorVar = `--color-${tokenKey.replace(/([A-Z])/g, '-$1').toLowerCase()}`;
|
|
@@ -1012,7 +978,9 @@ body {
|
|
|
1012
978
|
|
|
1013
979
|
// Generate utility classes for buttons
|
|
1014
980
|
if (tokens.buttons) {
|
|
981
|
+
// IMPORTANT: Buttons in @layer components so Tailwind utilities (rounded-full, etc.) can override
|
|
1015
982
|
globalStyles += '\n\n/* Button Utilities */';
|
|
983
|
+
globalStyles += '\n@layer components {';
|
|
1016
984
|
|
|
1017
985
|
// Base button class
|
|
1018
986
|
globalStyles += `\n.btn {
|
|
@@ -1058,6 +1026,8 @@ body {
|
|
|
1058
1026
|
border-color: var(--button-${variantName}-border-hover);
|
|
1059
1027
|
}`;
|
|
1060
1028
|
}
|
|
1029
|
+
|
|
1030
|
+
globalStyles += '\n}'; // Close @layer components
|
|
1061
1031
|
}
|
|
1062
1032
|
|
|
1063
1033
|
// Add responsive media queries for textStyles (OUTSIDE @theme block!)
|