tailwind-styled-v4 1.0.0 → 4.0.0
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/dist/animate.cjs +252 -0
- package/dist/animate.cjs.map +1 -0
- package/dist/animate.d.cts +117 -0
- package/dist/animate.d.ts +117 -0
- package/dist/animate.js +245 -0
- package/dist/animate.js.map +1 -0
- package/dist/astTransform-ua-eapqs.d.cts +41 -0
- package/dist/astTransform-ua-eapqs.d.ts +41 -0
- package/dist/compiler.cjs +3594 -0
- package/dist/compiler.cjs.map +1 -0
- package/dist/compiler.d.cts +716 -0
- package/dist/compiler.d.ts +716 -0
- package/dist/compiler.js +3535 -0
- package/dist/compiler.js.map +1 -0
- package/dist/css.cjs +71 -0
- package/dist/css.cjs.map +1 -0
- package/dist/css.d.cts +45 -0
- package/dist/css.d.ts +45 -0
- package/dist/css.js +62 -0
- package/dist/css.js.map +1 -0
- package/dist/devtools.cjs +959 -0
- package/dist/devtools.cjs.map +1 -0
- package/dist/devtools.d.cts +22 -0
- package/dist/devtools.d.ts +22 -0
- package/dist/devtools.js +952 -0
- package/dist/devtools.js.map +1 -0
- package/dist/index.cjs +1058 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +584 -0
- package/dist/index.d.ts +456 -958
- package/dist/index.js +1021 -8
- package/dist/index.js.map +1 -1
- package/dist/next.cjs +268 -0
- package/dist/next.cjs.map +1 -0
- package/dist/next.d.cts +45 -0
- package/dist/next.d.ts +45 -0
- package/dist/next.js +261 -0
- package/dist/next.js.map +1 -0
- package/dist/plugins.cjs +396 -0
- package/dist/plugins.cjs.map +1 -0
- package/dist/plugins.d.cts +231 -0
- package/dist/plugins.d.ts +231 -0
- package/dist/plugins.js +381 -0
- package/dist/plugins.js.map +1 -0
- package/dist/preset.cjs +129 -0
- package/dist/preset.cjs.map +1 -0
- package/dist/preset.d.cts +249 -0
- package/dist/preset.d.ts +249 -0
- package/dist/preset.js +124 -0
- package/dist/preset.js.map +1 -0
- package/dist/theme.cjs +154 -0
- package/dist/theme.cjs.map +1 -0
- package/dist/theme.d.cts +181 -0
- package/dist/theme.d.ts +181 -0
- package/dist/theme.js +148 -0
- package/dist/theme.js.map +1 -0
- package/dist/turbopackLoader.cjs +2689 -0
- package/dist/turbopackLoader.cjs.map +1 -0
- package/dist/turbopackLoader.d.cts +22 -0
- package/dist/turbopackLoader.d.ts +22 -0
- package/dist/turbopackLoader.js +2681 -0
- package/dist/turbopackLoader.js.map +1 -0
- package/dist/vite.cjs +105 -0
- package/dist/vite.cjs.map +1 -0
- package/dist/vite.d.cts +22 -0
- package/dist/vite.d.ts +22 -0
- package/dist/vite.js +96 -0
- package/dist/vite.js.map +1 -0
- package/dist/webpackLoader.cjs +2670 -0
- package/dist/webpackLoader.cjs.map +1 -0
- package/dist/webpackLoader.d.cts +24 -0
- package/dist/webpackLoader.d.ts +24 -0
- package/dist/webpackLoader.js +2662 -0
- package/dist/webpackLoader.js.map +1 -0
- package/package.json +66 -90
- package/CHANGELOG.md +0 -75
- package/LICENSE +0 -21
- package/README.md +0 -330
- package/dist/compiler/index.d.mts +0 -214
- package/dist/compiler/index.d.ts +0 -214
- package/dist/compiler/index.js +0 -546
- package/dist/compiler/index.js.map +0 -1
- package/dist/compiler/index.mjs +0 -504
- package/dist/compiler/index.mjs.map +0 -1
- package/dist/index.d.mts +0 -1086
- package/dist/index.mjs +0 -9
- package/dist/index.mjs.map +0 -1
- package/dist/turbopack-loader.js +0 -232
- package/dist/webpack-loader.js +0 -213
package/dist/webpack-loader.js
DELETED
|
@@ -1,213 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
// src/utils/classParser.ts
|
|
4
|
-
function parseClassString(cls) {
|
|
5
|
-
return Array.from(
|
|
6
|
-
new Set(
|
|
7
|
-
cls.split(/\s+/).map((c) => c.trim()).filter(Boolean)
|
|
8
|
-
)
|
|
9
|
-
);
|
|
10
|
-
}
|
|
11
|
-
function normalizeClasses(cls) {
|
|
12
|
-
return parseClassString(cls).sort().join(" ");
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
// src/utils/hash.ts
|
|
16
|
-
function djb2(str) {
|
|
17
|
-
let hash = 5381;
|
|
18
|
-
for (let i = 0; i < str.length; i++) {
|
|
19
|
-
hash = (hash << 5) + hash ^ str.charCodeAt(i);
|
|
20
|
-
hash = hash >>> 0;
|
|
21
|
-
}
|
|
22
|
-
return hash;
|
|
23
|
-
}
|
|
24
|
-
function hashClass(input) {
|
|
25
|
-
const n = djb2(input);
|
|
26
|
-
return "tw-" + n.toString(16).slice(0, 5).padStart(5, "0");
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
// src/compiler/astTransform.ts
|
|
30
|
-
var TEMPLATE_LITERAL_RE = /\btw\.(\w+)`((?:[^`\\]|\\.)*)`/g;
|
|
31
|
-
var OBJECT_CONFIG_RE = /\btw\.(\w+)\(\s*(\{[\s\S]*?\})\s*\)/g;
|
|
32
|
-
var EXTEND_CALL_RE = /(\w+)\.extend`((?:[^`\\]|\\.)*)`/g;
|
|
33
|
-
var IMPORT_RE = /import\s*\{[^}]*\btw\b[^}]*\}\s*from\s*["']tailwind-styled-v4["']/;
|
|
34
|
-
function cleanTemplateLiteral(raw) {
|
|
35
|
-
return raw.split("\n").map((l) => l.trim()).filter(Boolean).join(" ").replace(/\s+/g, " ").trim();
|
|
36
|
-
}
|
|
37
|
-
function isDynamic(raw) {
|
|
38
|
-
return raw.includes("${");
|
|
39
|
-
}
|
|
40
|
-
function extractBaseFromObjectConfig(objectStr) {
|
|
41
|
-
const baseMatch = objectStr.match(/base\s*:\s*["'`]([^"'`]+)["'`]/);
|
|
42
|
-
return baseMatch ? baseMatch[1].trim() : null;
|
|
43
|
-
}
|
|
44
|
-
function extractVariantsFromObjectConfig(objectStr) {
|
|
45
|
-
const variants = {};
|
|
46
|
-
const variantsBlockMatch = objectStr.match(/variants\s*:\s*\{([\s\S]*?)\}\s*[,}]/);
|
|
47
|
-
if (!variantsBlockMatch) return variants;
|
|
48
|
-
const block = variantsBlockMatch[1];
|
|
49
|
-
const variantKeyRe = /(\w+)\s*:\s*\{([^}]+)\}/g;
|
|
50
|
-
let km;
|
|
51
|
-
while ((km = variantKeyRe.exec(block)) !== null) {
|
|
52
|
-
const variantName = km[1];
|
|
53
|
-
const innerBlock = km[2];
|
|
54
|
-
variants[variantName] = {};
|
|
55
|
-
const valueRe = /(\w+)\s*:\s*["'`]([^"'`]+)["'`]/g;
|
|
56
|
-
let vm;
|
|
57
|
-
while ((vm = valueRe.exec(innerBlock)) !== null) {
|
|
58
|
-
variants[variantName][vm[1]] = vm[2].trim();
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
return variants;
|
|
62
|
-
}
|
|
63
|
-
function buildStaticAttrs(classes, opts, tag, hash) {
|
|
64
|
-
const dataAttr = opts.addDataAttr && hash ? `, "data-tw": "${hash}"` : "";
|
|
65
|
-
return `styled.${tag}.attrs(() => ({ className: "${classes}"${dataAttr} }))\`\``;
|
|
66
|
-
}
|
|
67
|
-
function buildStyledTagWithVariants(tag, base, _variants, opts) {
|
|
68
|
-
const dataAttr = opts.addDataAttr ? `, "data-tw": "${tag}"` : "";
|
|
69
|
-
const normalizedBase = normalizeClasses(base);
|
|
70
|
-
return `styled.${tag}.attrs((p) => ({
|
|
71
|
-
className: [
|
|
72
|
-
"${normalizedBase}",
|
|
73
|
-
p.className
|
|
74
|
-
].filter(Boolean).join(" ")${dataAttr}
|
|
75
|
-
}))\`\``;
|
|
76
|
-
}
|
|
77
|
-
function transformSource(source, opts = {}) {
|
|
78
|
-
const { mode = "zero-runtime", addDataAttr = false, generateHash = true } = opts;
|
|
79
|
-
if (!IMPORT_RE.test(source) && !source.includes("tw.")) {
|
|
80
|
-
return { code: source, classes: [], changed: false };
|
|
81
|
-
}
|
|
82
|
-
let code = source;
|
|
83
|
-
let changed = false;
|
|
84
|
-
const allClasses = [];
|
|
85
|
-
if (mode === "extract-only") {
|
|
86
|
-
const classes = extractAllClasses(source);
|
|
87
|
-
return { code: source, classes, changed: false };
|
|
88
|
-
}
|
|
89
|
-
if (mode === "runtime") {
|
|
90
|
-
return { code: source, classes: extractAllClasses(source), changed: false };
|
|
91
|
-
}
|
|
92
|
-
code = code.replace(
|
|
93
|
-
TEMPLATE_LITERAL_RE,
|
|
94
|
-
(_match, tag, content) => {
|
|
95
|
-
if (isDynamic(content)) {
|
|
96
|
-
return _match;
|
|
97
|
-
}
|
|
98
|
-
const classes = cleanTemplateLiteral(content);
|
|
99
|
-
const hash = generateHash ? hashClass(`${tag}:${classes}`) : void 0;
|
|
100
|
-
allClasses.push(...classes.split(/\s+/).filter(Boolean));
|
|
101
|
-
changed = true;
|
|
102
|
-
return buildStaticAttrs(classes, { addDataAttr }, tag, hash);
|
|
103
|
-
}
|
|
104
|
-
);
|
|
105
|
-
code = code.replace(
|
|
106
|
-
OBJECT_CONFIG_RE,
|
|
107
|
-
(_match, tag, objectStr) => {
|
|
108
|
-
const base = extractBaseFromObjectConfig(objectStr);
|
|
109
|
-
const variants = extractVariantsFromObjectConfig(objectStr);
|
|
110
|
-
if (!base) return _match;
|
|
111
|
-
const baseClasses = normalizeClasses(base);
|
|
112
|
-
allClasses.push(...baseClasses.split(/\s+/).filter(Boolean));
|
|
113
|
-
for (const vMap of Object.values(variants)) {
|
|
114
|
-
for (const cls of Object.values(vMap)) {
|
|
115
|
-
allClasses.push(...cls.split(/\s+/).filter(Boolean));
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
changed = true;
|
|
119
|
-
if (Object.keys(variants).length === 0) {
|
|
120
|
-
const hash = generateHash ? hashClass(`${tag}:${baseClasses}`) : void 0;
|
|
121
|
-
return buildStaticAttrs(baseClasses, { addDataAttr }, tag, hash);
|
|
122
|
-
}
|
|
123
|
-
return buildStyledTagWithVariants(tag, baseClasses, variants, { addDataAttr });
|
|
124
|
-
}
|
|
125
|
-
);
|
|
126
|
-
code = code.replace(
|
|
127
|
-
EXTEND_CALL_RE,
|
|
128
|
-
(_match, componentName, content) => {
|
|
129
|
-
if (isDynamic(content)) return _match;
|
|
130
|
-
const classes = cleanTemplateLiteral(content);
|
|
131
|
-
allClasses.push(...classes.split(/\s+/).filter(Boolean));
|
|
132
|
-
changed = true;
|
|
133
|
-
return `styled(${componentName}).attrs((p) => ({
|
|
134
|
-
className: [p.className, "${classes}"].filter(Boolean).join(" ")
|
|
135
|
-
}))\`\``;
|
|
136
|
-
}
|
|
137
|
-
);
|
|
138
|
-
if (changed && !source.includes("import styled from")) {
|
|
139
|
-
code = `import styled from "styled-components"
|
|
140
|
-
${code}`;
|
|
141
|
-
}
|
|
142
|
-
return {
|
|
143
|
-
code,
|
|
144
|
-
classes: Array.from(new Set(allClasses)),
|
|
145
|
-
changed
|
|
146
|
-
};
|
|
147
|
-
}
|
|
148
|
-
function extractAllClasses(source) {
|
|
149
|
-
const classes = /* @__PURE__ */ new Set();
|
|
150
|
-
const addClasses = (str) => {
|
|
151
|
-
str.split(/\s+/).map((c) => c.trim()).filter((c) => c.length > 0 && /^[-a-z0-9:/[\]!.]+$/.test(c)).forEach((c) => classes.add(c));
|
|
152
|
-
};
|
|
153
|
-
let m;
|
|
154
|
-
const re1 = new RegExp(TEMPLATE_LITERAL_RE.source, "g");
|
|
155
|
-
while ((m = re1.exec(source)) !== null) addClasses(m[2]);
|
|
156
|
-
const re2 = new RegExp(OBJECT_CONFIG_RE.source, "g");
|
|
157
|
-
while ((m = re2.exec(source)) !== null) {
|
|
158
|
-
const base = extractBaseFromObjectConfig(m[2]);
|
|
159
|
-
if (base) addClasses(base);
|
|
160
|
-
const variants = extractVariantsFromObjectConfig(m[2]);
|
|
161
|
-
for (const vMap of Object.values(variants)) {
|
|
162
|
-
for (const cls of Object.values(vMap)) addClasses(cls);
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
const re3 = new RegExp(EXTEND_CALL_RE.source, "g");
|
|
166
|
-
while ((m = re3.exec(source)) !== null) addClasses(m[2]);
|
|
167
|
-
const classNameRe = /className\s*=\s*["']([^"']+)["']/g;
|
|
168
|
-
while ((m = classNameRe.exec(source)) !== null) addClasses(m[1]);
|
|
169
|
-
const cnRe = /(?:cn|clsx|twMerge|mergeClasses)\s*\(([^)]+)\)/g;
|
|
170
|
-
while ((m = cnRe.exec(source)) !== null) {
|
|
171
|
-
const inner = m[1].replace(/["'`]/g, " ");
|
|
172
|
-
addClasses(inner);
|
|
173
|
-
}
|
|
174
|
-
return Array.from(classes).sort();
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
// src/compiler/transformTw.ts
|
|
178
|
-
var PROCESSABLE_EXTS = /\.(tsx|ts|jsx|js|mts|mjs)$/;
|
|
179
|
-
function transformTw(source, opts = {}) {
|
|
180
|
-
const { filepath = "" } = opts;
|
|
181
|
-
if (filepath && !PROCESSABLE_EXTS.test(filepath)) {
|
|
182
|
-
return { code: source, classes: [], changed: false };
|
|
183
|
-
}
|
|
184
|
-
if (!source.includes("tw") && !source.includes("tailwind-styled")) {
|
|
185
|
-
return { code: source, classes: [], changed: false };
|
|
186
|
-
}
|
|
187
|
-
return transformSource(source, opts);
|
|
188
|
-
}
|
|
189
|
-
function shouldProcess(filepath) {
|
|
190
|
-
if (!PROCESSABLE_EXTS.test(filepath)) return false;
|
|
191
|
-
if (filepath.includes("node_modules")) return false;
|
|
192
|
-
if (filepath.includes(".d.ts")) return false;
|
|
193
|
-
return true;
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
// src/compiler/webpackLoader.ts
|
|
197
|
-
module.exports = function tailwindStyledLoader(source) {
|
|
198
|
-
const callback = this.async();
|
|
199
|
-
const opts = this.getOptions() ?? {};
|
|
200
|
-
const filepath = this.resourcePath;
|
|
201
|
-
this.cacheable(true);
|
|
202
|
-
if (!shouldProcess(filepath)) {
|
|
203
|
-
callback(null, source);
|
|
204
|
-
return;
|
|
205
|
-
}
|
|
206
|
-
try {
|
|
207
|
-
const result = transformTw(source, { ...opts, filepath });
|
|
208
|
-
callback(null, result.code);
|
|
209
|
-
} catch (err) {
|
|
210
|
-
callback(err instanceof Error ? err : new Error(String(err)));
|
|
211
|
-
}
|
|
212
|
-
};
|
|
213
|
-
module.exports.raw = false;
|