@breadstone-infrastructure/style-dictionary 0.0.205 → 0.0.206
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/formats/index.d.ts +3 -0
- package/formats/index.d.ts.map +1 -0
- package/formats/index.js +19 -0
- package/formats/index.js.map +1 -0
- package/formats/tailwind/v3/DesignTokenType.d.ts +10 -0
- package/formats/tailwind/v3/DesignTokenType.d.ts.map +1 -0
- package/formats/tailwind/v3/DesignTokenType.js +3 -0
- package/formats/tailwind/v3/DesignTokenType.js.map +1 -0
- package/formats/tailwind/v3/TailwindPropertyMapping.d.ts +61 -0
- package/formats/tailwind/v3/TailwindPropertyMapping.d.ts.map +1 -0
- package/formats/tailwind/v3/TailwindPropertyMapping.js +421 -0
- package/formats/tailwind/v3/TailwindPropertyMapping.js.map +1 -0
- package/formats/tailwind/v3/TailwindV3PropertyMapping.d.ts +61 -0
- package/formats/tailwind/v3/TailwindV3PropertyMapping.d.ts.map +1 -0
- package/formats/tailwind/v3/TailwindV3PropertyMapping.js +421 -0
- package/formats/tailwind/v3/TailwindV3PropertyMapping.js.map +1 -0
- package/formats/tailwind/v3/buildTailwindConfig.d.ts +23 -0
- package/formats/tailwind/v3/buildTailwindConfig.d.ts.map +1 -0
- package/formats/tailwind/v3/buildTailwindConfig.js +281 -0
- package/formats/tailwind/v3/buildTailwindConfig.js.map +1 -0
- package/formats/tailwind/v3/buildTailwindV3Config.d.ts +24 -0
- package/formats/tailwind/v3/buildTailwindV3Config.d.ts.map +1 -0
- package/formats/tailwind/v3/buildTailwindV3Config.js +282 -0
- package/formats/tailwind/v3/buildTailwindV3Config.js.map +1 -0
- package/formats/tailwind/v3/index.d.ts +5 -0
- package/formats/tailwind/v3/index.d.ts.map +1 -0
- package/formats/tailwind/v3/index.js +21 -0
- package/formats/tailwind/v3/index.js.map +1 -0
- package/formats/tailwind/v3/tailwindFormat.d.ts +13 -0
- package/formats/tailwind/v3/tailwindFormat.d.ts.map +1 -0
- package/formats/tailwind/v3/tailwindFormat.js +57 -0
- package/formats/tailwind/v3/tailwindFormat.js.map +1 -0
- package/formats/tailwind/v3/tailwindFormat2.d.ts +13 -0
- package/formats/tailwind/v3/tailwindFormat2.d.ts.map +1 -0
- package/formats/tailwind/v3/tailwindFormat2.js +65 -0
- package/formats/tailwind/v3/tailwindFormat2.js.map +1 -0
- package/formats/tailwind/v3/tailwindV3Format.d.ts +32 -0
- package/formats/tailwind/v3/tailwindV3Format.d.ts.map +1 -0
- package/formats/tailwind/v3/tailwindV3Format.js +123 -0
- package/formats/tailwind/v3/tailwindV3Format.js.map +1 -0
- package/formats/tailwind/v4/DesignTokenType.d.ts +10 -0
- package/formats/tailwind/v4/DesignTokenType.d.ts.map +1 -0
- package/formats/tailwind/v4/DesignTokenType.js +3 -0
- package/formats/tailwind/v4/DesignTokenType.js.map +1 -0
- package/formats/tailwind/v4/TailwindV4PropertyMapping.d.ts +45 -0
- package/formats/tailwind/v4/TailwindV4PropertyMapping.d.ts.map +1 -0
- package/formats/tailwind/v4/TailwindV4PropertyMapping.js +322 -0
- package/formats/tailwind/v4/TailwindV4PropertyMapping.js.map +1 -0
- package/formats/tailwind/v4/buildTailwindV4Theme.d.ts +71 -0
- package/formats/tailwind/v4/buildTailwindV4Theme.d.ts.map +1 -0
- package/formats/tailwind/v4/buildTailwindV4Theme.js +247 -0
- package/formats/tailwind/v4/buildTailwindV4Theme.js.map +1 -0
- package/formats/tailwind/v4/index.d.ts +2 -0
- package/formats/tailwind/v4/index.d.ts.map +1 -0
- package/formats/tailwind/v4/index.js +18 -0
- package/formats/tailwind/v4/index.js.map +1 -0
- package/formats/tailwind/v4/tailwindV4Format.d.ts +55 -0
- package/formats/tailwind/v4/tailwindV4Format.d.ts.map +1 -0
- package/formats/tailwind/v4/tailwindV4Format.js +88 -0
- package/formats/tailwind/v4/tailwindV4Format.js.map +1 -0
- package/index.d.ts +3 -9
- package/index.d.ts.map +1 -1
- package/index.js +3 -17
- package/index.js.map +1 -1
- package/package.json +2 -2
- package/preprocessors/index.d.ts +3 -0
- package/preprocessors/index.d.ts.map +1 -0
- package/preprocessors/index.js +19 -0
- package/preprocessors/index.js.map +1 -0
- package/transforms/index.d.ts +7 -0
- package/transforms/index.d.ts.map +1 -0
- package/transforms/index.js +23 -0
- package/transforms/index.js.map +1 -0
|
@@ -0,0 +1,322 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// #region Imports
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.TOKEN_TYPE_TO_V4_MAPPING = exports.CATEGORY_TO_V4_MAPPING = exports.SUPPORTED_TOKEN_TYPES = void 0;
|
|
5
|
+
// #endregion
|
|
6
|
+
// #region Constants
|
|
7
|
+
/**
|
|
8
|
+
* Set of supported design token types for validation.
|
|
9
|
+
* Used only for logging; unsupported types are skipped.
|
|
10
|
+
*
|
|
11
|
+
* @public
|
|
12
|
+
*/
|
|
13
|
+
exports.SUPPORTED_TOKEN_TYPES = [
|
|
14
|
+
'borderRadius',
|
|
15
|
+
'borderWidth',
|
|
16
|
+
'color',
|
|
17
|
+
'duration',
|
|
18
|
+
'font',
|
|
19
|
+
'fontFamily',
|
|
20
|
+
'fontSize',
|
|
21
|
+
'fontWeight',
|
|
22
|
+
'height',
|
|
23
|
+
'letterSpacing',
|
|
24
|
+
'lineHeight',
|
|
25
|
+
'maxHeight',
|
|
26
|
+
'maxWidth',
|
|
27
|
+
'minHeight',
|
|
28
|
+
'minWidth',
|
|
29
|
+
'opacity',
|
|
30
|
+
'shadow',
|
|
31
|
+
'size',
|
|
32
|
+
'spacing',
|
|
33
|
+
'textDecorationLine',
|
|
34
|
+
'textTransform',
|
|
35
|
+
'width',
|
|
36
|
+
'zIndex'
|
|
37
|
+
];
|
|
38
|
+
// #endregion
|
|
39
|
+
// #region Mappings
|
|
40
|
+
/**
|
|
41
|
+
* Default path transform that converts token path to kebab-case variable name.
|
|
42
|
+
*
|
|
43
|
+
* @param path Token path array.
|
|
44
|
+
* @returns Kebab-case variable name suffix.
|
|
45
|
+
* @private
|
|
46
|
+
*/
|
|
47
|
+
function defaultPathTransform(path) {
|
|
48
|
+
return path.join('-').toLowerCase();
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Transform for color tokens that handles light/dark variants.
|
|
52
|
+
*
|
|
53
|
+
* @param path Token path array.
|
|
54
|
+
* @returns Formatted color variable name.
|
|
55
|
+
* @private
|
|
56
|
+
*/
|
|
57
|
+
function colorPathTransform(path) {
|
|
58
|
+
// color.light.primary.500 -> 'primary-500'
|
|
59
|
+
// color.dark.primary.500 -> 'primary-500-dark'
|
|
60
|
+
// scheme.light.background -> 'scheme-background'
|
|
61
|
+
// scheme.dark.background -> 'scheme-background-dark'
|
|
62
|
+
if (path[0] === 'color') {
|
|
63
|
+
if (path.length >= 4) {
|
|
64
|
+
const variant = path[1]; // 'light' or 'dark'
|
|
65
|
+
const colorName = path[2]; // 'primary', 'secondary', etc.
|
|
66
|
+
const shade = path[3]; // '500', '100', etc.
|
|
67
|
+
if (variant === 'dark') {
|
|
68
|
+
return `${colorName}-${shade}-dark`;
|
|
69
|
+
}
|
|
70
|
+
return `${colorName}-${shade}`;
|
|
71
|
+
}
|
|
72
|
+
else if (path.length === 3) {
|
|
73
|
+
const variant = path[1];
|
|
74
|
+
const colorName = path[2];
|
|
75
|
+
if (variant === 'dark') {
|
|
76
|
+
return `${colorName}-dark`;
|
|
77
|
+
}
|
|
78
|
+
return colorName;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
else if (path[0] === 'scheme' && path.length >= 3) {
|
|
82
|
+
const variant = path[1];
|
|
83
|
+
const schemeName = path[2];
|
|
84
|
+
if (variant === 'dark') {
|
|
85
|
+
return `scheme-${schemeName}-dark`;
|
|
86
|
+
}
|
|
87
|
+
return `scheme-${schemeName}`;
|
|
88
|
+
}
|
|
89
|
+
return path.join('-').toLowerCase();
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Transform for elevation/shadow tokens.
|
|
93
|
+
*
|
|
94
|
+
* @param path Token path array.
|
|
95
|
+
* @returns Formatted shadow variable name.
|
|
96
|
+
* @private
|
|
97
|
+
*/
|
|
98
|
+
function shadowPathTransform(path) {
|
|
99
|
+
// elevation.light.regular -> 'regular'
|
|
100
|
+
// elevation.dark.regular -> 'regular-dark'
|
|
101
|
+
if (path[0] === 'elevation') {
|
|
102
|
+
if (path.length >= 3) {
|
|
103
|
+
const variant = path[1];
|
|
104
|
+
const name = path[2];
|
|
105
|
+
if (variant === 'dark') {
|
|
106
|
+
return `${name}-dark`;
|
|
107
|
+
}
|
|
108
|
+
return name;
|
|
109
|
+
}
|
|
110
|
+
return path.slice(1).join('-');
|
|
111
|
+
}
|
|
112
|
+
return path.join('-').toLowerCase();
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Transform for spacing tokens.
|
|
116
|
+
*
|
|
117
|
+
* @param path Token path array.
|
|
118
|
+
* @returns Formatted spacing variable name.
|
|
119
|
+
* @private
|
|
120
|
+
*/
|
|
121
|
+
function spacingPathTransform(path) {
|
|
122
|
+
// layout.radius -> 'radius'
|
|
123
|
+
// layout.space -> 'space'
|
|
124
|
+
if (path[0] === 'layout') {
|
|
125
|
+
return path[path.length - 1];
|
|
126
|
+
}
|
|
127
|
+
return path.join('-').toLowerCase();
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Transform for typography-related tokens.
|
|
131
|
+
*
|
|
132
|
+
* @param path Token path array.
|
|
133
|
+
* @returns Formatted typography variable name.
|
|
134
|
+
* @private
|
|
135
|
+
*/
|
|
136
|
+
function typographyPathTransform(path) {
|
|
137
|
+
// typography.headline1.fontSize -> 'headline1'
|
|
138
|
+
if (path[0] === 'typography' && path.length >= 2) {
|
|
139
|
+
return path[1];
|
|
140
|
+
}
|
|
141
|
+
return path[path.length - 1];
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Transform for duration tokens.
|
|
145
|
+
*
|
|
146
|
+
* @param path Token path array.
|
|
147
|
+
* @returns Formatted duration variable name.
|
|
148
|
+
* @private
|
|
149
|
+
*/
|
|
150
|
+
function durationPathTransform(path) {
|
|
151
|
+
// duration.short -> 'short'
|
|
152
|
+
// duration._ -> 'DEFAULT'
|
|
153
|
+
if (path[0] === 'duration') {
|
|
154
|
+
const value = path[1];
|
|
155
|
+
return value === '_' ? 'default' : value;
|
|
156
|
+
}
|
|
157
|
+
return path[path.length - 1];
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Maps category values to Tailwind v4 CSS variable namespaces.
|
|
161
|
+
*
|
|
162
|
+
* @public
|
|
163
|
+
*/
|
|
164
|
+
exports.CATEGORY_TO_V4_MAPPING = {
|
|
165
|
+
colors: {
|
|
166
|
+
namespace: '--color',
|
|
167
|
+
pathTransform: colorPathTransform
|
|
168
|
+
},
|
|
169
|
+
scheme: {
|
|
170
|
+
namespace: '--color',
|
|
171
|
+
pathTransform: colorPathTransform
|
|
172
|
+
},
|
|
173
|
+
spacing: {
|
|
174
|
+
namespace: '--spacing',
|
|
175
|
+
pathTransform: spacingPathTransform
|
|
176
|
+
},
|
|
177
|
+
width: {
|
|
178
|
+
namespace: '--width',
|
|
179
|
+
pathTransform: defaultPathTransform
|
|
180
|
+
},
|
|
181
|
+
height: {
|
|
182
|
+
namespace: '--height',
|
|
183
|
+
pathTransform: defaultPathTransform
|
|
184
|
+
},
|
|
185
|
+
fontFamily: {
|
|
186
|
+
namespace: '--font-family',
|
|
187
|
+
pathTransform: typographyPathTransform
|
|
188
|
+
},
|
|
189
|
+
fontSize: {
|
|
190
|
+
namespace: '--font-size',
|
|
191
|
+
pathTransform: typographyPathTransform
|
|
192
|
+
},
|
|
193
|
+
boxShadow: {
|
|
194
|
+
namespace: '--shadow',
|
|
195
|
+
pathTransform: shadowPathTransform
|
|
196
|
+
},
|
|
197
|
+
opacity: {
|
|
198
|
+
namespace: '--opacity',
|
|
199
|
+
pathTransform: defaultPathTransform
|
|
200
|
+
},
|
|
201
|
+
borderRadius: {
|
|
202
|
+
namespace: '--radius',
|
|
203
|
+
pathTransform: defaultPathTransform
|
|
204
|
+
},
|
|
205
|
+
borderWidth: {
|
|
206
|
+
namespace: '--border-width',
|
|
207
|
+
pathTransform: defaultPathTransform
|
|
208
|
+
},
|
|
209
|
+
zIndex: {
|
|
210
|
+
namespace: '--z',
|
|
211
|
+
pathTransform: defaultPathTransform
|
|
212
|
+
},
|
|
213
|
+
transitionDuration: {
|
|
214
|
+
namespace: '--transition-duration',
|
|
215
|
+
pathTransform: durationPathTransform
|
|
216
|
+
},
|
|
217
|
+
lineHeight: {
|
|
218
|
+
namespace: '--line-height',
|
|
219
|
+
pathTransform: typographyPathTransform
|
|
220
|
+
},
|
|
221
|
+
fontWeight: {
|
|
222
|
+
namespace: '--font-weight',
|
|
223
|
+
pathTransform: typographyPathTransform
|
|
224
|
+
},
|
|
225
|
+
letterSpacing: {
|
|
226
|
+
namespace: '--letter-spacing',
|
|
227
|
+
pathTransform: typographyPathTransform
|
|
228
|
+
}
|
|
229
|
+
};
|
|
230
|
+
/**
|
|
231
|
+
* Fallback mapping from logical token type → Tailwind v4 namespace.
|
|
232
|
+
*
|
|
233
|
+
* @public
|
|
234
|
+
*/
|
|
235
|
+
exports.TOKEN_TYPE_TO_V4_MAPPING = {
|
|
236
|
+
color: {
|
|
237
|
+
namespace: '--color',
|
|
238
|
+
pathTransform: colorPathTransform
|
|
239
|
+
},
|
|
240
|
+
spacing: {
|
|
241
|
+
namespace: '--spacing',
|
|
242
|
+
pathTransform: spacingPathTransform
|
|
243
|
+
},
|
|
244
|
+
size: {
|
|
245
|
+
namespace: '--spacing',
|
|
246
|
+
pathTransform: defaultPathTransform
|
|
247
|
+
},
|
|
248
|
+
width: {
|
|
249
|
+
namespace: '--width',
|
|
250
|
+
pathTransform: defaultPathTransform
|
|
251
|
+
},
|
|
252
|
+
height: {
|
|
253
|
+
namespace: '--height',
|
|
254
|
+
pathTransform: defaultPathTransform
|
|
255
|
+
},
|
|
256
|
+
maxWidth: {
|
|
257
|
+
namespace: '--width',
|
|
258
|
+
pathTransform: (path) => `max-${defaultPathTransform(path)}`
|
|
259
|
+
},
|
|
260
|
+
maxHeight: {
|
|
261
|
+
namespace: '--height',
|
|
262
|
+
pathTransform: (path) => `max-${defaultPathTransform(path)}`
|
|
263
|
+
},
|
|
264
|
+
minWidth: {
|
|
265
|
+
namespace: '--width',
|
|
266
|
+
pathTransform: (path) => `min-${defaultPathTransform(path)}`
|
|
267
|
+
},
|
|
268
|
+
minHeight: {
|
|
269
|
+
namespace: '--height',
|
|
270
|
+
pathTransform: (path) => `min-${defaultPathTransform(path)}`
|
|
271
|
+
},
|
|
272
|
+
borderRadius: {
|
|
273
|
+
namespace: '--radius',
|
|
274
|
+
pathTransform: defaultPathTransform
|
|
275
|
+
},
|
|
276
|
+
borderWidth: {
|
|
277
|
+
namespace: '--border-width',
|
|
278
|
+
pathTransform: defaultPathTransform
|
|
279
|
+
},
|
|
280
|
+
font: {
|
|
281
|
+
namespace: '--font-family',
|
|
282
|
+
pathTransform: typographyPathTransform
|
|
283
|
+
},
|
|
284
|
+
fontFamily: {
|
|
285
|
+
namespace: '--font-family',
|
|
286
|
+
pathTransform: typographyPathTransform
|
|
287
|
+
},
|
|
288
|
+
fontSize: {
|
|
289
|
+
namespace: '--font-size',
|
|
290
|
+
pathTransform: typographyPathTransform
|
|
291
|
+
},
|
|
292
|
+
fontWeight: {
|
|
293
|
+
namespace: '--font-weight',
|
|
294
|
+
pathTransform: typographyPathTransform
|
|
295
|
+
},
|
|
296
|
+
lineHeight: {
|
|
297
|
+
namespace: '--line-height',
|
|
298
|
+
pathTransform: typographyPathTransform
|
|
299
|
+
},
|
|
300
|
+
letterSpacing: {
|
|
301
|
+
namespace: '--letter-spacing',
|
|
302
|
+
pathTransform: typographyPathTransform
|
|
303
|
+
},
|
|
304
|
+
shadow: {
|
|
305
|
+
namespace: '--shadow',
|
|
306
|
+
pathTransform: shadowPathTransform
|
|
307
|
+
},
|
|
308
|
+
opacity: {
|
|
309
|
+
namespace: '--opacity',
|
|
310
|
+
pathTransform: defaultPathTransform
|
|
311
|
+
},
|
|
312
|
+
zIndex: {
|
|
313
|
+
namespace: '--z',
|
|
314
|
+
pathTransform: defaultPathTransform
|
|
315
|
+
},
|
|
316
|
+
duration: {
|
|
317
|
+
namespace: '--transition-duration',
|
|
318
|
+
pathTransform: durationPathTransform
|
|
319
|
+
}
|
|
320
|
+
};
|
|
321
|
+
// #endregion
|
|
322
|
+
//# sourceMappingURL=TailwindV4PropertyMapping.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TailwindV4PropertyMapping.js","sourceRoot":"","sources":["../../../../src/formats/tailwind/v4/TailwindV4PropertyMapping.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import type { TransformedToken } from 'style-dictionary/types';
|
|
2
|
+
import { type TailwindV4Namespace } from './TailwindV4PropertyMapping.js';
|
|
3
|
+
/**
|
|
4
|
+
* Represents a CSS custom property with namespace and value.
|
|
5
|
+
*
|
|
6
|
+
* @public
|
|
7
|
+
*/
|
|
8
|
+
export interface ICssVariable {
|
|
9
|
+
readonly namespace: TailwindV4Namespace;
|
|
10
|
+
readonly name: string;
|
|
11
|
+
readonly value: string;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Options for building the Tailwind v4 theme.
|
|
15
|
+
*
|
|
16
|
+
* @public
|
|
17
|
+
*/
|
|
18
|
+
export interface IBuildTailwindV4ThemeOptions {
|
|
19
|
+
/**
|
|
20
|
+
* Token name substrings to ignore.
|
|
21
|
+
*/
|
|
22
|
+
readonly ignoredTokenNameSubstrings?: ReadonlyArray<string>;
|
|
23
|
+
/**
|
|
24
|
+
* Whether to include a reference to tailwindcss in the output.
|
|
25
|
+
*
|
|
26
|
+
* @default true
|
|
27
|
+
*/
|
|
28
|
+
readonly includeTailwindImport?: boolean;
|
|
29
|
+
/**
|
|
30
|
+
* Whether to wrap variables in @theme directive.
|
|
31
|
+
*
|
|
32
|
+
* @default true
|
|
33
|
+
*/
|
|
34
|
+
readonly wrapInTheme?: boolean;
|
|
35
|
+
/**
|
|
36
|
+
* Custom layer name for the @theme directive.
|
|
37
|
+
*
|
|
38
|
+
* @default undefined (uses default @theme without layer)
|
|
39
|
+
*/
|
|
40
|
+
readonly themeLayer?: string;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Builds an array of CSS custom properties from Style-Dictionary tokens
|
|
44
|
+
* for use in Tailwind v4's @theme directive.
|
|
45
|
+
*
|
|
46
|
+
* @param allTokens All transformed tokens from Style-Dictionary.
|
|
47
|
+
* @param ignoredTokenNameSubstrings Optional substrings; tokens whose name contains any are ignored.
|
|
48
|
+
* @returns Array of CSS variable definitions.
|
|
49
|
+
* @public
|
|
50
|
+
*/
|
|
51
|
+
export declare function buildCssVariables(allTokens: ReadonlyArray<TransformedToken>, ignoredTokenNameSubstrings?: ReadonlyArray<string>): ReadonlyArray<ICssVariable>;
|
|
52
|
+
/**
|
|
53
|
+
* Builds a complete Tailwind v4 CSS theme file from Style-Dictionary tokens.
|
|
54
|
+
*
|
|
55
|
+
* @param allTokens All transformed tokens from Style-Dictionary.
|
|
56
|
+
* @param options Build options.
|
|
57
|
+
* @returns Complete CSS file content with @theme directive.
|
|
58
|
+
* @public
|
|
59
|
+
*/
|
|
60
|
+
export declare function buildTailwindV4Theme(allTokens: ReadonlyArray<TransformedToken>, options?: IBuildTailwindV4ThemeOptions): string;
|
|
61
|
+
/**
|
|
62
|
+
* Builds a Tailwind v4 CSS theme as CSS custom properties only (no @import).
|
|
63
|
+
* Useful for creating theme presets that can be imported separately.
|
|
64
|
+
*
|
|
65
|
+
* @param allTokens All transformed tokens from Style-Dictionary.
|
|
66
|
+
* @param options Build options.
|
|
67
|
+
* @returns CSS file content with theme variables.
|
|
68
|
+
* @public
|
|
69
|
+
*/
|
|
70
|
+
export declare function buildTailwindV4Preset(allTokens: ReadonlyArray<TransformedToken>, options?: IBuildTailwindV4ThemeOptions): string;
|
|
71
|
+
//# sourceMappingURL=buildTailwindV4Theme.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buildTailwindV4Theme.d.ts","sourceRoot":"","sources":["../../../../src/formats/tailwind/v4/buildTailwindV4Theme.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAK/D,OAAO,EAIH,KAAK,mBAAmB,EAE3B,MAAM,gCAAgC,CAAC;AAMxC;;;;GAIG;AACH,MAAM,WAAW,YAAY;IACzB,QAAQ,CAAC,SAAS,EAAE,mBAAmB,CAAC;IACxC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CAC1B;AAED;;;;GAIG;AACH,MAAM,WAAW,4BAA4B;IAEzC;;OAEG;IACH,QAAQ,CAAC,0BAA0B,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAE5D;;;;OAIG;IACH,QAAQ,CAAC,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAEzC;;;;OAIG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAE/B;;;;OAIG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAChC;AA2GD;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAC7B,SAAS,EAAE,aAAa,CAAC,gBAAgB,CAAC,EAC1C,0BAA0B,GAAE,aAAa,CAAC,MAAM,CAAM,GACvD,aAAa,CAAC,YAAY,CAAC,CAkD7B;AAuED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAChC,SAAS,EAAE,aAAa,CAAC,gBAAgB,CAAC,EAC1C,OAAO,GAAE,4BAAiC,GAC3C,MAAM,CA+BR;AAED;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CACjC,SAAS,EAAE,aAAa,CAAC,gBAAgB,CAAC,EAC1C,OAAO,GAAE,4BAAiC,GAC3C,MAAM,CAKR"}
|
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// #region Imports
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.buildCssVariables = buildCssVariables;
|
|
5
|
+
exports.buildTailwindV4Theme = buildTailwindV4Theme;
|
|
6
|
+
exports.buildTailwindV4Preset = buildTailwindV4Preset;
|
|
7
|
+
const utilities_1 = require("@breadstone-infrastructure/utilities");
|
|
8
|
+
const getType_js_1 = require("../../../utilities/getType.js");
|
|
9
|
+
const getValue_js_1 = require("../../../utilities/getValue.js");
|
|
10
|
+
const TailwindV4PropertyMapping_js_1 = require("./TailwindV4PropertyMapping.js");
|
|
11
|
+
// #endregion
|
|
12
|
+
// #region Fields
|
|
13
|
+
/**
|
|
14
|
+
* Auto-generated file header comment.
|
|
15
|
+
*
|
|
16
|
+
* @private
|
|
17
|
+
*/
|
|
18
|
+
const FILE_HEADER = `/* ------------------------------------------------------------------------------
|
|
19
|
+
* <auto-generated>
|
|
20
|
+
* This code was generated by a tool.
|
|
21
|
+
* Changes to this file may cause incorrect behavior and will be lost if
|
|
22
|
+
* the code is regenerated.
|
|
23
|
+
* </auto-generated>
|
|
24
|
+
* ------------------------------------------------------------------------------ */`;
|
|
25
|
+
// #endregion
|
|
26
|
+
// #region Methods
|
|
27
|
+
/**
|
|
28
|
+
* Normalizes a raw token value into a string suitable for CSS.
|
|
29
|
+
*
|
|
30
|
+
* @param value Raw token value.
|
|
31
|
+
* @returns Normalized string value for CSS.
|
|
32
|
+
* @private
|
|
33
|
+
*/
|
|
34
|
+
function normalizeValue(value) {
|
|
35
|
+
if (Array.isArray(value)) {
|
|
36
|
+
return value.map((v) => String(v)).join(', ');
|
|
37
|
+
}
|
|
38
|
+
if (typeof value === 'string' || typeof value === 'number') {
|
|
39
|
+
return String(value);
|
|
40
|
+
}
|
|
41
|
+
return String(value);
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Validates that tokens use supported logical types and logs warnings
|
|
45
|
+
* for those that cannot be mapped to Tailwind v4.
|
|
46
|
+
*
|
|
47
|
+
* @param tokens All transformed tokens.
|
|
48
|
+
* @param ignoredNames Optional substrings; tokens whose name contains any of them are ignored.
|
|
49
|
+
* @private
|
|
50
|
+
*/
|
|
51
|
+
function validateTokenTypes(tokens, ignoredNames = []) {
|
|
52
|
+
const supported = new Set(TailwindV4PropertyMapping_js_1.SUPPORTED_TOKEN_TYPES);
|
|
53
|
+
tokens
|
|
54
|
+
.filter((token) => {
|
|
55
|
+
const lower = token.name.toLowerCase();
|
|
56
|
+
return !ignoredNames.some((substr) => lower.includes(substr.toLowerCase()));
|
|
57
|
+
})
|
|
58
|
+
.forEach((token) => {
|
|
59
|
+
// If token has a valid category mapping, skip type validation
|
|
60
|
+
const rawCategory = token.category;
|
|
61
|
+
if (rawCategory && rawCategory in TailwindV4PropertyMapping_js_1.CATEGORY_TO_V4_MAPPING) {
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
const type = (0, getType_js_1.getType)(token);
|
|
65
|
+
if (!type) {
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
if (!supported.has(type)) {
|
|
69
|
+
console.warn(`${(0, utilities_1.symbol)('warning')} ${(0, utilities_1.yellow)(`Type "${type}" is not supported in Tailwind v4 builder for token "${token.path.join('.')}:${token.name}".`)}`);
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Resolves the mapping for a token in Tailwind v4 format.
|
|
75
|
+
*
|
|
76
|
+
* @param token The token to resolve mapping for.
|
|
77
|
+
* @returns An IV4KeyMapping when resolvable, otherwise undefined.
|
|
78
|
+
* @private
|
|
79
|
+
*/
|
|
80
|
+
function resolveMappingForToken(token) {
|
|
81
|
+
const rawCategory = token.category;
|
|
82
|
+
// 1. Category-based mapping (if present)
|
|
83
|
+
if (rawCategory) {
|
|
84
|
+
if (rawCategory in TailwindV4PropertyMapping_js_1.CATEGORY_TO_V4_MAPPING) {
|
|
85
|
+
return TailwindV4PropertyMapping_js_1.CATEGORY_TO_V4_MAPPING[rawCategory];
|
|
86
|
+
}
|
|
87
|
+
console.warn(`${(0, utilities_1.symbol)('warning')} ${(0, utilities_1.yellow)(`Token "${token.name}" specifies category "${rawCategory}", which is not mapped. Falling back to token type.`)}`);
|
|
88
|
+
}
|
|
89
|
+
// 2. Type-based mapping
|
|
90
|
+
const type = (token.type ?? token.$type ?? token.original.type ?? token.original.$type);
|
|
91
|
+
if (type) {
|
|
92
|
+
const byType = TailwindV4PropertyMapping_js_1.TOKEN_TYPE_TO_V4_MAPPING[type];
|
|
93
|
+
if (byType) {
|
|
94
|
+
return byType;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
return undefined;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Builds an array of CSS custom properties from Style-Dictionary tokens
|
|
101
|
+
* for use in Tailwind v4's @theme directive.
|
|
102
|
+
*
|
|
103
|
+
* @param allTokens All transformed tokens from Style-Dictionary.
|
|
104
|
+
* @param ignoredTokenNameSubstrings Optional substrings; tokens whose name contains any are ignored.
|
|
105
|
+
* @returns Array of CSS variable definitions.
|
|
106
|
+
* @public
|
|
107
|
+
*/
|
|
108
|
+
function buildCssVariables(allTokens, ignoredTokenNameSubstrings = []) {
|
|
109
|
+
validateTokenTypes(allTokens, ignoredTokenNameSubstrings);
|
|
110
|
+
const variables = [];
|
|
111
|
+
for (const token of allTokens) {
|
|
112
|
+
const lowerName = token.name.toLowerCase();
|
|
113
|
+
const tokenPath = token.path.join('.');
|
|
114
|
+
// Check if any ignored substring appears in the token name OR path
|
|
115
|
+
const isIgnored = ignoredTokenNameSubstrings.some((substr) => lowerName.includes(substr.toLowerCase()) || tokenPath.toLowerCase().includes(substr.toLowerCase()));
|
|
116
|
+
if (isIgnored) {
|
|
117
|
+
continue;
|
|
118
|
+
}
|
|
119
|
+
// Skip expanded shadow parts
|
|
120
|
+
const shadowPartPattern = /\.(offsetX|offsetY|blur|spread|color)\.\d+$/i;
|
|
121
|
+
if (shadowPartPattern.test(tokenPath)) {
|
|
122
|
+
continue;
|
|
123
|
+
}
|
|
124
|
+
// Skip duration tokens without values
|
|
125
|
+
if (token.path[0] === 'duration' && !token.value) {
|
|
126
|
+
continue;
|
|
127
|
+
}
|
|
128
|
+
const mapping = resolveMappingForToken(token);
|
|
129
|
+
if (!mapping) {
|
|
130
|
+
console.warn(`${(0, utilities_1.symbol)('warning')} ${(0, utilities_1.yellow)(`Token "${token.path.join('.')}:${token.name}" cannot be mapped to Tailwind v4 (no valid category or type mapping). Skipping.`)}`);
|
|
131
|
+
continue;
|
|
132
|
+
}
|
|
133
|
+
const rawValue = (0, getValue_js_1.getValue)(token);
|
|
134
|
+
const normalizedValue = normalizeValue(rawValue);
|
|
135
|
+
const rawPath = token.path.length > 0 ? token.path : [token.name];
|
|
136
|
+
// Apply pathTransform if defined
|
|
137
|
+
const transformedName = mapping.pathTransform
|
|
138
|
+
? mapping.pathTransform(rawPath)
|
|
139
|
+
: rawPath.join('-').toLowerCase();
|
|
140
|
+
variables.push({
|
|
141
|
+
namespace: mapping.namespace,
|
|
142
|
+
name: transformedName,
|
|
143
|
+
value: normalizedValue
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
return variables;
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Groups CSS variables by their namespace for organized output.
|
|
150
|
+
*
|
|
151
|
+
* @param variables Array of CSS variables.
|
|
152
|
+
* @returns Map of namespace to variables.
|
|
153
|
+
* @private
|
|
154
|
+
*/
|
|
155
|
+
function groupVariablesByNamespace(variables) {
|
|
156
|
+
const grouped = new Map();
|
|
157
|
+
for (const variable of variables) {
|
|
158
|
+
const existing = grouped.get(variable.namespace);
|
|
159
|
+
if (existing) {
|
|
160
|
+
existing.push(variable);
|
|
161
|
+
}
|
|
162
|
+
else {
|
|
163
|
+
grouped.set(variable.namespace, [variable]);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
return grouped;
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Formats CSS variables into a CSS string for the @theme directive.
|
|
170
|
+
*
|
|
171
|
+
* @param variables Array of CSS variables.
|
|
172
|
+
* @param indent Indentation string.
|
|
173
|
+
* @returns Formatted CSS string.
|
|
174
|
+
* @private
|
|
175
|
+
*/
|
|
176
|
+
function formatCssVariables(variables, indent = ' ') {
|
|
177
|
+
const grouped = groupVariablesByNamespace(variables);
|
|
178
|
+
const lines = [];
|
|
179
|
+
// Sort namespaces for consistent output
|
|
180
|
+
const sortedNamespaces = Array.from(grouped.keys()).sort();
|
|
181
|
+
for (const namespace of sortedNamespaces) {
|
|
182
|
+
const vars = grouped.get(namespace);
|
|
183
|
+
if (!vars?.length) {
|
|
184
|
+
continue;
|
|
185
|
+
}
|
|
186
|
+
lines.push(`${indent}/* ${namespace.slice(2)} */`);
|
|
187
|
+
// Sort variables within each namespace
|
|
188
|
+
const sortedVars = [...vars].sort((a, b) => a.name.localeCompare(b.name));
|
|
189
|
+
for (const variable of sortedVars) {
|
|
190
|
+
const fullName = `${namespace}-${variable.name}`;
|
|
191
|
+
lines.push(`${indent}${fullName}: ${variable.value};`);
|
|
192
|
+
}
|
|
193
|
+
lines.push('');
|
|
194
|
+
}
|
|
195
|
+
// Remove trailing empty line
|
|
196
|
+
if (lines.length > 0 && lines[lines.length - 1] === '') {
|
|
197
|
+
lines.pop();
|
|
198
|
+
}
|
|
199
|
+
return lines.join('\n');
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Builds a complete Tailwind v4 CSS theme file from Style-Dictionary tokens.
|
|
203
|
+
*
|
|
204
|
+
* @param allTokens All transformed tokens from Style-Dictionary.
|
|
205
|
+
* @param options Build options.
|
|
206
|
+
* @returns Complete CSS file content with @theme directive.
|
|
207
|
+
* @public
|
|
208
|
+
*/
|
|
209
|
+
function buildTailwindV4Theme(allTokens, options = {}) {
|
|
210
|
+
const { ignoredTokenNameSubstrings = [], includeTailwindImport = true, wrapInTheme = true, themeLayer } = options;
|
|
211
|
+
const variables = buildCssVariables(allTokens, ignoredTokenNameSubstrings);
|
|
212
|
+
const formattedVariables = formatCssVariables(variables);
|
|
213
|
+
const parts = [FILE_HEADER, ''];
|
|
214
|
+
if (includeTailwindImport) {
|
|
215
|
+
parts.push('@import "tailwindcss";', '');
|
|
216
|
+
}
|
|
217
|
+
if (wrapInTheme) {
|
|
218
|
+
const themeDirective = themeLayer ? `@theme ${themeLayer}` : '@theme';
|
|
219
|
+
parts.push(`${themeDirective} {`);
|
|
220
|
+
parts.push(formattedVariables);
|
|
221
|
+
parts.push('}');
|
|
222
|
+
}
|
|
223
|
+
else {
|
|
224
|
+
parts.push(':root {');
|
|
225
|
+
parts.push(formattedVariables);
|
|
226
|
+
parts.push('}');
|
|
227
|
+
}
|
|
228
|
+
parts.push('');
|
|
229
|
+
return parts.join('\n');
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Builds a Tailwind v4 CSS theme as CSS custom properties only (no @import).
|
|
233
|
+
* Useful for creating theme presets that can be imported separately.
|
|
234
|
+
*
|
|
235
|
+
* @param allTokens All transformed tokens from Style-Dictionary.
|
|
236
|
+
* @param options Build options.
|
|
237
|
+
* @returns CSS file content with theme variables.
|
|
238
|
+
* @public
|
|
239
|
+
*/
|
|
240
|
+
function buildTailwindV4Preset(allTokens, options = {}) {
|
|
241
|
+
return buildTailwindV4Theme(allTokens, {
|
|
242
|
+
...options,
|
|
243
|
+
includeTailwindImport: false
|
|
244
|
+
});
|
|
245
|
+
}
|
|
246
|
+
// #endregion
|
|
247
|
+
//# sourceMappingURL=buildTailwindV4Theme.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buildTailwindV4Theme.js","sourceRoot":"","sources":["../../../../src/formats/tailwind/v4/buildTailwindV4Theme.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/formats/tailwind/v4/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC"}
|