@webmate-studio/builder 0.2.118 → 0.2.119

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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webmate-studio/builder",
3
- "version": "0.2.118",
3
+ "version": "0.2.119",
4
4
  "type": "module",
5
5
  "description": "Webmate Studio Component Builder",
6
6
  "keywords": [
@@ -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
- // Using @utility instead of @layer utilities gives full Tailwind v4 variant support
81
- // (hover:, focus:, sm:, md:, lg:, xl:, 2xl:, etc.)
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
- if (!processedClasses.has(className)) {
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
- if (!processedClasses.has(className)) {
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
- if (!processedClasses.has(className)) {
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
- // No prefix: generate all three variants (for primary, secondary, etc.)
106
- const textClass = `text-${className}`;
107
- const bgClass = `bg-${className}`;
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()}`;