tailwind-styled-v4 1.0.1 → 5.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 +771 -0
- package/dist/animate.cjs.map +1 -0
- package/dist/animate.d.cts +73 -0
- package/dist/animate.d.ts +73 -0
- package/dist/animate.js +752 -0
- package/dist/animate.js.map +1 -0
- package/dist/chunk-VZEJV27B.js +11 -0
- package/dist/chunk-VZEJV27B.js.map +1 -0
- package/dist/chunk-Y5D3E72P.cjs +13 -0
- package/dist/chunk-Y5D3E72P.cjs.map +1 -0
- package/dist/css.cjs +121 -0
- package/dist/css.cjs.map +1 -0
- package/dist/css.d.cts +30 -0
- package/dist/css.d.ts +30 -0
- package/dist/css.js +112 -0
- package/dist/css.js.map +1 -0
- package/dist/devtools.cjs +1071 -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 +1064 -0
- package/dist/devtools.js.map +1 -0
- package/dist/index.cjs +1353 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +655 -0
- package/dist/index.d.ts +508 -968
- package/dist/index.js +1304 -3
- package/dist/index.js.map +1 -1
- package/dist/next.cjs +248 -0
- package/dist/next.cjs.map +1 -0
- package/dist/next.d.cts +54 -0
- package/dist/next.d.ts +54 -0
- package/dist/next.js +241 -0
- package/dist/next.js.map +1 -0
- package/dist/preset.cjs +423 -0
- package/dist/preset.cjs.map +1 -0
- package/dist/preset.d.cts +276 -0
- package/dist/preset.d.ts +276 -0
- package/dist/preset.js +416 -0
- package/dist/preset.js.map +1 -0
- package/dist/turbopackLoader.cjs +37 -0
- package/dist/turbopackLoader.cjs.map +1 -0
- package/dist/turbopackLoader.d.cts +12 -0
- package/dist/turbopackLoader.d.ts +12 -0
- package/dist/turbopackLoader.js +35 -0
- package/dist/turbopackLoader.js.map +1 -0
- package/dist/vite.cjs +138 -0
- package/dist/vite.cjs.map +1 -0
- package/dist/vite.d.cts +51 -0
- package/dist/vite.d.ts +51 -0
- package/dist/vite.js +128 -0
- package/dist/vite.js.map +1 -0
- package/dist/webpackLoader.cjs +51 -0
- package/dist/webpackLoader.cjs.map +1 -0
- package/dist/webpackLoader.d.cts +17 -0
- package/dist/webpackLoader.d.ts +17 -0
- package/dist/webpackLoader.js +49 -0
- package/dist/webpackLoader.js.map +1 -0
- package/package.json +65 -32
- package/CHANGELOG.md +0 -75
- package/LICENSE +0 -21
- package/README.md +0 -608
- package/dist/cli/init.js +0 -208
- 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 -1115
- package/dist/index.mjs +0 -4
- package/dist/index.mjs.map +0 -1
- package/dist/turbopack-loader.js +0 -232
- package/dist/webpack-loader.js +0 -213
package/dist/vite.cjs
ADDED
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
require('./chunk-Y5D3E72P.cjs');
|
|
6
|
+
var fs = require('fs');
|
|
7
|
+
var path = require('path');
|
|
8
|
+
var compiler = require('@tailwind-styled/compiler');
|
|
9
|
+
var engine = require('@tailwind-styled/engine');
|
|
10
|
+
var scanner = require('@tailwind-styled/scanner');
|
|
11
|
+
|
|
12
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
13
|
+
|
|
14
|
+
var fs__default = /*#__PURE__*/_interopDefault(fs);
|
|
15
|
+
var path__default = /*#__PURE__*/_interopDefault(path);
|
|
16
|
+
|
|
17
|
+
/* tailwind-styled-v4 v4 | MIT | https://github.com/dictionar32/tailwind-styled-v4 */
|
|
18
|
+
function warnDeprecated(options, key, message) {
|
|
19
|
+
if (options[key] !== void 0) {
|
|
20
|
+
console.warn(`[tailwind-styled-v4] Warning: '${key}' is deprecated in v5. ${message}`);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
function tailwindStyledPlugin(opts = {}) {
|
|
24
|
+
warnDeprecated(opts, "mode", "Only zero-runtime is supported.");
|
|
25
|
+
warnDeprecated(opts, "routeCss", "Use engine's analyzing capabilities.");
|
|
26
|
+
warnDeprecated(opts, "deadStyleElimination", "Use 'analyze: true' option instead.");
|
|
27
|
+
warnDeprecated(opts, "addDataAttr", "Handled by engine internally.");
|
|
28
|
+
warnDeprecated(opts, "autoClientBoundary", "Handled by engine internally.");
|
|
29
|
+
warnDeprecated(opts, "hoist", "Handled by engine internally.");
|
|
30
|
+
warnDeprecated(opts, "incremental", "Handled by engine internally.");
|
|
31
|
+
const {
|
|
32
|
+
include = /\.(tsx|ts|jsx|js)$/,
|
|
33
|
+
exclude = /node_modules/,
|
|
34
|
+
scanDirs = ["src"],
|
|
35
|
+
safelistOutput = ".tailwind-styled-safelist.json",
|
|
36
|
+
scanReportOutput = ".tailwind-styled-scan-report.json",
|
|
37
|
+
generateSafelist: doSafelist = true,
|
|
38
|
+
useEngineBuild = true,
|
|
39
|
+
analyze = false,
|
|
40
|
+
strict = false
|
|
41
|
+
} = opts;
|
|
42
|
+
let root = process.cwd();
|
|
43
|
+
let isDev = true;
|
|
44
|
+
return {
|
|
45
|
+
name: "tailwind-styled-v4",
|
|
46
|
+
enforce: "pre",
|
|
47
|
+
configResolved(config) {
|
|
48
|
+
root = config.root;
|
|
49
|
+
isDev = config.command === "serve";
|
|
50
|
+
},
|
|
51
|
+
transform(source, id) {
|
|
52
|
+
const filepath = id.split("?")[0];
|
|
53
|
+
if (!include.test(filepath)) return null;
|
|
54
|
+
if (exclude.test(filepath)) return null;
|
|
55
|
+
const loaderOptions = {
|
|
56
|
+
// v5: Always zero-runtime (mode is deprecated)
|
|
57
|
+
mode: "zero-runtime",
|
|
58
|
+
addDataAttr: isDev,
|
|
59
|
+
filename: filepath,
|
|
60
|
+
// Preserve cv, cx, cn, etc — only tw.* is transformed
|
|
61
|
+
preserveImports: true
|
|
62
|
+
};
|
|
63
|
+
const output = compiler.runLoaderTransform({
|
|
64
|
+
filepath,
|
|
65
|
+
source,
|
|
66
|
+
options: loaderOptions,
|
|
67
|
+
isDev
|
|
68
|
+
});
|
|
69
|
+
if (!output.changed) return null;
|
|
70
|
+
return { code: output.code, map: null };
|
|
71
|
+
},
|
|
72
|
+
async buildEnd() {
|
|
73
|
+
if (isDev) return;
|
|
74
|
+
if (doSafelist) {
|
|
75
|
+
try {
|
|
76
|
+
compiler.generateSafelist(
|
|
77
|
+
scanDirs.map((d) => path__default.default.resolve(root, d)),
|
|
78
|
+
path__default.default.resolve(root, safelistOutput),
|
|
79
|
+
root
|
|
80
|
+
);
|
|
81
|
+
} catch (e) {
|
|
82
|
+
console.warn("[tailwind-styled-v4] Safelist generation failed:", e);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
try {
|
|
86
|
+
const report = await scanner.scanWorkspaceAsync(root);
|
|
87
|
+
const reportPath = path__default.default.resolve(root, scanReportOutput);
|
|
88
|
+
fs__default.default.writeFileSync(
|
|
89
|
+
reportPath,
|
|
90
|
+
JSON.stringify(
|
|
91
|
+
{
|
|
92
|
+
root,
|
|
93
|
+
totalFiles: report.totalFiles,
|
|
94
|
+
uniqueClassCount: report.uniqueClasses.length
|
|
95
|
+
},
|
|
96
|
+
null,
|
|
97
|
+
2
|
|
98
|
+
) + "\n"
|
|
99
|
+
);
|
|
100
|
+
} catch (e) {
|
|
101
|
+
console.warn("[tailwind-styled-v4] Scan report generation failed:", e);
|
|
102
|
+
}
|
|
103
|
+
if (useEngineBuild) {
|
|
104
|
+
try {
|
|
105
|
+
const engine$1 = await engine.createEngine({
|
|
106
|
+
root,
|
|
107
|
+
compileCss: true,
|
|
108
|
+
analyze,
|
|
109
|
+
scanner: {
|
|
110
|
+
includeExtensions: [".tsx", ".ts", ".jsx", ".js"],
|
|
111
|
+
ignoreDirectories: scanDirs
|
|
112
|
+
}
|
|
113
|
+
});
|
|
114
|
+
await engine$1.build();
|
|
115
|
+
console.log("[tailwind-styled-v4] \u2713 Engine build complete");
|
|
116
|
+
} catch (e) {
|
|
117
|
+
const msg = `[tailwind-styled-v4] Engine build step failed: ${e}`;
|
|
118
|
+
if (strict) {
|
|
119
|
+
throw new Error(msg);
|
|
120
|
+
} else {
|
|
121
|
+
console.warn(msg);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
},
|
|
126
|
+
handleHotUpdate({ file, server }) {
|
|
127
|
+
if (include.test(file) && !exclude.test(file)) {
|
|
128
|
+
server.ws.send({ type: "full-reload" });
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
var plugin_default = tailwindStyledPlugin;
|
|
134
|
+
|
|
135
|
+
exports.default = plugin_default;
|
|
136
|
+
exports.tailwindStyledPlugin = tailwindStyledPlugin;
|
|
137
|
+
//# sourceMappingURL=vite.cjs.map
|
|
138
|
+
//# sourceMappingURL=vite.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../vite/src/plugin.ts"],"names":["runLoaderTransform","generateSafelist","path","scanWorkspaceAsync","fs","engine","createEngine"],"mappings":";;;;;;;;;;;;;;;;;AA2DA,SAAS,cAAA,CAAe,OAAA,EAA4B,GAAA,EAA8B,OAAA,EAAiB;AACjG,EAAA,IAAI,OAAA,CAAQ,GAAG,CAAA,KAAM,MAAA,EAAW;AAC9B,IAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,+BAAA,EAAkC,GAAG,CAAA,uBAAA,EAA0B,OAAO,CAAA,CAAE,CAAA;AAAA,EACvF;AACF;AAEO,SAAS,oBAAA,CAAqB,IAAA,GAA0B,EAAC,EAAQ;AACtE,EAAA,cAAA,CAAe,IAAA,EAAM,QAAQ,iCAAiC,CAAA;AAC9D,EAAA,cAAA,CAAe,IAAA,EAAM,YAAY,sCAAsC,CAAA;AACvE,EAAA,cAAA,CAAe,IAAA,EAAM,wBAAwB,qCAAqC,CAAA;AAClF,EAAA,cAAA,CAAe,IAAA,EAAM,eAAe,+BAA+B,CAAA;AACnE,EAAA,cAAA,CAAe,IAAA,EAAM,sBAAsB,+BAA+B,CAAA;AAC1E,EAAA,cAAA,CAAe,IAAA,EAAM,SAAS,+BAA+B,CAAA;AAC7D,EAAA,cAAA,CAAe,IAAA,EAAM,eAAe,+BAA+B,CAAA;AAEnE,EAAA,MAAM;AAAA,IACJ,OAAA,GAAU,oBAAA;AAAA,IACV,OAAA,GAAU,cAAA;AAAA,IACV,QAAA,GAAW,CAAC,KAAK,CAAA;AAAA,IACjB,cAAA,GAAiB,gCAAA;AAAA,IACjB,gBAAA,GAAmB,mCAAA;AAAA,IACnB,kBAAkB,UAAA,GAAa,IAAA;AAAA,IAC/B,cAAA,GAAiB,IAAA;AAAA,IACjB,OAAA,GAAU,KAAA;AAAA,IACV,MAAA,GAAS;AAAA,GACX,GAAI,IAAA;AAEJ,EAAA,IAAI,IAAA,GAAO,QAAQ,GAAA,EAAI;AACvB,EAAA,IAAI,KAAA,GAAQ,IAAA;AAEZ,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,oBAAA;AAAA,IACN,OAAA,EAAS,KAAA;AAAA,IAET,eAAe,MAAA,EAAa;AAC1B,MAAA,IAAA,GAAO,MAAA,CAAO,IAAA;AACd,MAAA,KAAA,GAAQ,OAAO,OAAA,KAAY,OAAA;AAAA,IAC7B,CAAA;AAAA,IAEA,SAAA,CAAU,QAAgB,EAAA,EAAY;AACpC,MAAA,MAAM,QAAA,GAAW,EAAA,CAAG,KAAA,CAAM,GAAG,EAAE,CAAC,CAAA;AAChC,MAAA,IAAI,CAAC,OAAA,CAAQ,IAAA,CAAK,QAAQ,GAAG,OAAO,IAAA;AACpC,MAAA,IAAI,OAAA,CAAQ,IAAA,CAAK,QAAQ,CAAA,EAAG,OAAO,IAAA;AAEnC,MAAA,MAAM,aAAA,GAA+B;AAAA;AAAA,QAEnC,IAAA,EAAM,cAAA;AAAA,QACN,WAAA,EAAa,KAAA;AAAA,QACb,QAAA,EAAU,QAAA;AAAA;AAAA,QAEV,eAAA,EAAiB;AAAA,OACnB;AAEA,MAAA,MAAM,SAASA,2BAAA,CAAmB;AAAA,QAChC,QAAA;AAAA,QACA,MAAA;AAAA,QACA,OAAA,EAAS,aAAA;AAAA,QACT;AAAA,OACD,CAAA;AAED,MAAA,IAAI,CAAC,MAAA,CAAO,OAAA,EAAS,OAAO,IAAA;AAC5B,MAAA,OAAO,EAAE,IAAA,EAAM,MAAA,CAAO,IAAA,EAAM,KAAK,IAAA,EAAK;AAAA,IACxC,CAAA;AAAA,IAEA,MAAM,QAAA,GAAW;AACf,MAAA,IAAI,KAAA,EAAO;AAEX,MAAA,IAAI,UAAA,EAAY;AACd,QAAA,IAAI;AACF,UAAAC,yBAAA;AAAA,YACE,QAAA,CAAS,IAAI,CAAC,CAAA,KAAMC,sBAAK,OAAA,CAAQ,IAAA,EAAM,CAAC,CAAC,CAAA;AAAA,YACzCA,qBAAA,CAAK,OAAA,CAAQ,IAAA,EAAM,cAAc,CAAA;AAAA,YACjC;AAAA,WACF;AAAA,QACF,SAAS,CAAA,EAAG;AACV,UAAA,OAAA,CAAQ,IAAA,CAAK,oDAAoD,CAAC,CAAA;AAAA,QACpE;AAAA,MACF;AAEA,MAAA,IAAI;AACF,QAAA,MAAM,MAAA,GAAS,MAAMC,0BAAA,CAAmB,IAAI,CAAA;AAC5C,QAAA,MAAM,UAAA,GAAaD,qBAAA,CAAK,OAAA,CAAQ,IAAA,EAAM,gBAAgB,CAAA;AACtD,QAAAE,mBAAA,CAAG,aAAA;AAAA,UACD,UAAA;AAAA,UACA,IAAA,CAAK,SAAA;AAAA,YACH;AAAA,cACE,IAAA;AAAA,cACA,YAAY,MAAA,CAAO,UAAA;AAAA,cACnB,gBAAA,EAAkB,OAAO,aAAA,CAAc;AAAA,aACzC;AAAA,YACA,IAAA;AAAA,YACA;AAAA,WACF,GAAI;AAAA,SACN;AAAA,MACF,SAAS,CAAA,EAAG;AACV,QAAA,OAAA,CAAQ,IAAA,CAAK,uDAAuD,CAAC,CAAA;AAAA,MACvE;AAEA,MAAA,IAAI,cAAA,EAAgB;AAClB,QAAA,IAAI;AACF,UAAA,MAAMC,QAAA,GAAS,MAAMC,mBAAA,CAAa;AAAA,YAChC,IAAA;AAAA,YACA,UAAA,EAAY,IAAA;AAAA,YACZ,OAAA;AAAA,YACA,OAAA,EAAS;AAAA,cACP,iBAAA,EAAmB,CAAC,MAAA,EAAQ,KAAA,EAAO,QAAQ,KAAK,CAAA;AAAA,cAChD,iBAAA,EAAmB;AAAA;AACrB,WACD,CAAA;AACD,UAAA,MAAMD,SAAO,KAAA,EAAM;AACnB,UAAA,OAAA,CAAQ,IAAI,mDAA8C,CAAA;AAAA,QAC5D,SAAS,CAAA,EAAG;AACV,UAAA,MAAM,GAAA,GAAM,kDAAkD,CAAC,CAAA,CAAA;AAC/D,UAAA,IAAI,MAAA,EAAQ;AACV,YAAA,MAAM,IAAI,MAAM,GAAG,CAAA;AAAA,UACrB,CAAA,MAAO;AACL,YAAA,OAAA,CAAQ,KAAK,GAAG,CAAA;AAAA,UAClB;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IAEA,eAAA,CAAgB,EAAE,IAAA,EAAM,MAAA,EAAO,EAAQ;AACrC,MAAA,IAAI,OAAA,CAAQ,KAAK,IAAI,CAAA,IAAK,CAAC,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAA,EAAG;AAC7C,QAAA,MAAA,CAAO,EAAA,CAAG,IAAA,CAAK,EAAE,IAAA,EAAM,eAAe,CAAA;AAAA,MACxC;AAAA,IACF;AAAA,GACF;AACF;AAEA,IAAO,cAAA,GAAQ","file":"vite.cjs","sourcesContent":["/**\n * tailwind-styled-v4 — Vite Plugin v5\n *\n * Usage in vite.config.ts:\n * import { tailwindStyledPlugin } from \"@tailwind-styled/vite\"\n * export default defineConfig({\n * plugins: [react(), tailwindStyledPlugin()]\n * })\n *\n * v5 Changes:\n * - Simplified API (removed deprecated options)\n * - Uses @tailwind-styled/engine for build\n * - Mode always zero-runtime\n */\n\nimport fs from \"node:fs\"\nimport path from \"node:path\"\n\nimport type { LoaderOptions, TransformOptions } from \"@tailwind-styled/compiler\"\nimport { generateSafelist, runLoaderTransform } from \"@tailwind-styled/compiler\"\nimport { createEngine } from \"@tailwind-styled/engine\"\nimport { scanWorkspaceAsync } from \"@tailwind-styled/scanner\"\n\nexport interface VitePluginOptions {\n /** File patterns to include. Default: /\\.(tsx|ts|jsx|js)$/ */\n include?: RegExp\n /** File patterns to exclude. Default: /node_modules/ */\n exclude?: RegExp\n /** Directories to scan. Default: [\"src\"] */\n scanDirs?: string[]\n /** Safelist output path. Default: \".tailwind-styled-safelist.json\" */\n safelistOutput?: string\n /** Generate safelist at build end. Default: true */\n generateSafelist?: boolean\n /** Scan report output path. Default: \".tailwind-styled-scan-report.json\" */\n scanReportOutput?: string\n /** Run engine build at build end. Default: true */\n useEngineBuild?: boolean\n /** Enable analyzer for semantic reports. Default: false */\n analyze?: boolean\n /** Throw error on engine build failure. If true, error will abort Vite build (useful for CI/CD). If false (default), error only shows console.warn. Default: false */\n strict?: boolean\n\n /** @deprecated in v5 - mode is always \"zero-runtime\" */\n mode?: \"zero-runtime\" | \"runtime\"\n /** @deprecated in v5 - handled by engine */\n routeCss?: boolean\n /** @deprecated in v5 - handled by engine with analyze: true */\n deadStyleElimination?: boolean\n /** @deprecated in v5 - no longer used */\n addDataAttr?: boolean\n /** @deprecated in v5 - no longer used */\n autoClientBoundary?: boolean\n /** @deprecated in v5 - no longer used */\n hoist?: boolean\n /** @deprecated in v5 - no longer used */\n incremental?: boolean\n}\n\nfunction warnDeprecated(options: VitePluginOptions, key: keyof VitePluginOptions, message: string) {\n if (options[key] !== undefined) {\n console.warn(`[tailwind-styled-v4] Warning: '${key}' is deprecated in v5. ${message}`)\n }\n}\n\nexport function tailwindStyledPlugin(opts: VitePluginOptions = {}): any {\n warnDeprecated(opts, \"mode\", \"Only zero-runtime is supported.\")\n warnDeprecated(opts, \"routeCss\", \"Use engine's analyzing capabilities.\")\n warnDeprecated(opts, \"deadStyleElimination\", \"Use 'analyze: true' option instead.\")\n warnDeprecated(opts, \"addDataAttr\", \"Handled by engine internally.\")\n warnDeprecated(opts, \"autoClientBoundary\", \"Handled by engine internally.\")\n warnDeprecated(opts, \"hoist\", \"Handled by engine internally.\")\n warnDeprecated(opts, \"incremental\", \"Handled by engine internally.\")\n\n const {\n include = /\\.(tsx|ts|jsx|js)$/,\n exclude = /node_modules/,\n scanDirs = [\"src\"],\n safelistOutput = \".tailwind-styled-safelist.json\",\n scanReportOutput = \".tailwind-styled-scan-report.json\",\n generateSafelist: doSafelist = true,\n useEngineBuild = true,\n analyze = false,\n strict = false,\n } = opts\n\n let root = process.cwd()\n let isDev = true\n\n return {\n name: \"tailwind-styled-v4\",\n enforce: \"pre\" as const,\n\n configResolved(config: any) {\n root = config.root\n isDev = config.command === \"serve\"\n },\n\n transform(source: string, id: string) {\n const filepath = id.split(\"?\")[0]\n if (!include.test(filepath)) return null\n if (exclude.test(filepath)) return null\n\n const loaderOptions: LoaderOptions = {\n // v5: Always zero-runtime (mode is deprecated)\n mode: \"zero-runtime\",\n addDataAttr: isDev,\n filename: filepath,\n // Preserve cv, cx, cn, etc — only tw.* is transformed\n preserveImports: true,\n }\n\n const output = runLoaderTransform({\n filepath,\n source,\n options: loaderOptions,\n isDev,\n })\n\n if (!output.changed) return null\n return { code: output.code, map: null }\n },\n\n async buildEnd() {\n if (isDev) return\n\n if (doSafelist) {\n try {\n generateSafelist(\n scanDirs.map((d) => path.resolve(root, d)),\n path.resolve(root, safelistOutput),\n root\n )\n } catch (e) {\n console.warn(\"[tailwind-styled-v4] Safelist generation failed:\", e)\n }\n }\n\n try {\n const report = await scanWorkspaceAsync(root)\n const reportPath = path.resolve(root, scanReportOutput)\n fs.writeFileSync(\n reportPath,\n JSON.stringify(\n {\n root,\n totalFiles: report.totalFiles,\n uniqueClassCount: report.uniqueClasses.length,\n },\n null,\n 2\n ) + \"\\n\"\n )\n } catch (e) {\n console.warn(\"[tailwind-styled-v4] Scan report generation failed:\", e)\n }\n\n if (useEngineBuild) {\n try {\n const engine = await createEngine({\n root,\n compileCss: true,\n analyze,\n scanner: {\n includeExtensions: [\".tsx\", \".ts\", \".jsx\", \".js\"],\n ignoreDirectories: scanDirs,\n },\n })\n await engine.build()\n console.log(\"[tailwind-styled-v4] ✓ Engine build complete\")\n } catch (e) {\n const msg = `[tailwind-styled-v4] Engine build step failed: ${e}`\n if (strict) {\n throw new Error(msg)\n } else {\n console.warn(msg)\n }\n }\n }\n },\n\n handleHotUpdate({ file, server }: any) {\n if (include.test(file) && !exclude.test(file)) {\n server.ws.send({ type: \"full-reload\" })\n }\n },\n }\n}\n\nexport default tailwindStyledPlugin\n"]}
|
package/dist/vite.d.cts
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* tailwind-styled-v4 — Vite Plugin v5
|
|
3
|
+
*
|
|
4
|
+
* Usage in vite.config.ts:
|
|
5
|
+
* import { tailwindStyledPlugin } from "@tailwind-styled/vite"
|
|
6
|
+
* export default defineConfig({
|
|
7
|
+
* plugins: [react(), tailwindStyledPlugin()]
|
|
8
|
+
* })
|
|
9
|
+
*
|
|
10
|
+
* v5 Changes:
|
|
11
|
+
* - Simplified API (removed deprecated options)
|
|
12
|
+
* - Uses @tailwind-styled/engine for build
|
|
13
|
+
* - Mode always zero-runtime
|
|
14
|
+
*/
|
|
15
|
+
interface VitePluginOptions {
|
|
16
|
+
/** File patterns to include. Default: /\.(tsx|ts|jsx|js)$/ */
|
|
17
|
+
include?: RegExp;
|
|
18
|
+
/** File patterns to exclude. Default: /node_modules/ */
|
|
19
|
+
exclude?: RegExp;
|
|
20
|
+
/** Directories to scan. Default: ["src"] */
|
|
21
|
+
scanDirs?: string[];
|
|
22
|
+
/** Safelist output path. Default: ".tailwind-styled-safelist.json" */
|
|
23
|
+
safelistOutput?: string;
|
|
24
|
+
/** Generate safelist at build end. Default: true */
|
|
25
|
+
generateSafelist?: boolean;
|
|
26
|
+
/** Scan report output path. Default: ".tailwind-styled-scan-report.json" */
|
|
27
|
+
scanReportOutput?: string;
|
|
28
|
+
/** Run engine build at build end. Default: true */
|
|
29
|
+
useEngineBuild?: boolean;
|
|
30
|
+
/** Enable analyzer for semantic reports. Default: false */
|
|
31
|
+
analyze?: boolean;
|
|
32
|
+
/** Throw error on engine build failure. If true, error will abort Vite build (useful for CI/CD). If false (default), error only shows console.warn. Default: false */
|
|
33
|
+
strict?: boolean;
|
|
34
|
+
/** @deprecated in v5 - mode is always "zero-runtime" */
|
|
35
|
+
mode?: "zero-runtime" | "runtime";
|
|
36
|
+
/** @deprecated in v5 - handled by engine */
|
|
37
|
+
routeCss?: boolean;
|
|
38
|
+
/** @deprecated in v5 - handled by engine with analyze: true */
|
|
39
|
+
deadStyleElimination?: boolean;
|
|
40
|
+
/** @deprecated in v5 - no longer used */
|
|
41
|
+
addDataAttr?: boolean;
|
|
42
|
+
/** @deprecated in v5 - no longer used */
|
|
43
|
+
autoClientBoundary?: boolean;
|
|
44
|
+
/** @deprecated in v5 - no longer used */
|
|
45
|
+
hoist?: boolean;
|
|
46
|
+
/** @deprecated in v5 - no longer used */
|
|
47
|
+
incremental?: boolean;
|
|
48
|
+
}
|
|
49
|
+
declare function tailwindStyledPlugin(opts?: VitePluginOptions): any;
|
|
50
|
+
|
|
51
|
+
export { type VitePluginOptions, tailwindStyledPlugin as default, tailwindStyledPlugin };
|
package/dist/vite.d.ts
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* tailwind-styled-v4 — Vite Plugin v5
|
|
3
|
+
*
|
|
4
|
+
* Usage in vite.config.ts:
|
|
5
|
+
* import { tailwindStyledPlugin } from "@tailwind-styled/vite"
|
|
6
|
+
* export default defineConfig({
|
|
7
|
+
* plugins: [react(), tailwindStyledPlugin()]
|
|
8
|
+
* })
|
|
9
|
+
*
|
|
10
|
+
* v5 Changes:
|
|
11
|
+
* - Simplified API (removed deprecated options)
|
|
12
|
+
* - Uses @tailwind-styled/engine for build
|
|
13
|
+
* - Mode always zero-runtime
|
|
14
|
+
*/
|
|
15
|
+
interface VitePluginOptions {
|
|
16
|
+
/** File patterns to include. Default: /\.(tsx|ts|jsx|js)$/ */
|
|
17
|
+
include?: RegExp;
|
|
18
|
+
/** File patterns to exclude. Default: /node_modules/ */
|
|
19
|
+
exclude?: RegExp;
|
|
20
|
+
/** Directories to scan. Default: ["src"] */
|
|
21
|
+
scanDirs?: string[];
|
|
22
|
+
/** Safelist output path. Default: ".tailwind-styled-safelist.json" */
|
|
23
|
+
safelistOutput?: string;
|
|
24
|
+
/** Generate safelist at build end. Default: true */
|
|
25
|
+
generateSafelist?: boolean;
|
|
26
|
+
/** Scan report output path. Default: ".tailwind-styled-scan-report.json" */
|
|
27
|
+
scanReportOutput?: string;
|
|
28
|
+
/** Run engine build at build end. Default: true */
|
|
29
|
+
useEngineBuild?: boolean;
|
|
30
|
+
/** Enable analyzer for semantic reports. Default: false */
|
|
31
|
+
analyze?: boolean;
|
|
32
|
+
/** Throw error on engine build failure. If true, error will abort Vite build (useful for CI/CD). If false (default), error only shows console.warn. Default: false */
|
|
33
|
+
strict?: boolean;
|
|
34
|
+
/** @deprecated in v5 - mode is always "zero-runtime" */
|
|
35
|
+
mode?: "zero-runtime" | "runtime";
|
|
36
|
+
/** @deprecated in v5 - handled by engine */
|
|
37
|
+
routeCss?: boolean;
|
|
38
|
+
/** @deprecated in v5 - handled by engine with analyze: true */
|
|
39
|
+
deadStyleElimination?: boolean;
|
|
40
|
+
/** @deprecated in v5 - no longer used */
|
|
41
|
+
addDataAttr?: boolean;
|
|
42
|
+
/** @deprecated in v5 - no longer used */
|
|
43
|
+
autoClientBoundary?: boolean;
|
|
44
|
+
/** @deprecated in v5 - no longer used */
|
|
45
|
+
hoist?: boolean;
|
|
46
|
+
/** @deprecated in v5 - no longer used */
|
|
47
|
+
incremental?: boolean;
|
|
48
|
+
}
|
|
49
|
+
declare function tailwindStyledPlugin(opts?: VitePluginOptions): any;
|
|
50
|
+
|
|
51
|
+
export { type VitePluginOptions, tailwindStyledPlugin as default, tailwindStyledPlugin };
|
package/dist/vite.js
ADDED
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import './chunk-VZEJV27B.js';
|
|
2
|
+
import fs from 'fs';
|
|
3
|
+
import path from 'path';
|
|
4
|
+
import { runLoaderTransform, generateSafelist } from '@tailwind-styled/compiler';
|
|
5
|
+
import { createEngine } from '@tailwind-styled/engine';
|
|
6
|
+
import { scanWorkspaceAsync } from '@tailwind-styled/scanner';
|
|
7
|
+
|
|
8
|
+
/* tailwind-styled-v4 v4 | MIT | https://github.com/dictionar32/tailwind-styled-v4 */
|
|
9
|
+
function warnDeprecated(options, key, message) {
|
|
10
|
+
if (options[key] !== void 0) {
|
|
11
|
+
console.warn(`[tailwind-styled-v4] Warning: '${key}' is deprecated in v5. ${message}`);
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
function tailwindStyledPlugin(opts = {}) {
|
|
15
|
+
warnDeprecated(opts, "mode", "Only zero-runtime is supported.");
|
|
16
|
+
warnDeprecated(opts, "routeCss", "Use engine's analyzing capabilities.");
|
|
17
|
+
warnDeprecated(opts, "deadStyleElimination", "Use 'analyze: true' option instead.");
|
|
18
|
+
warnDeprecated(opts, "addDataAttr", "Handled by engine internally.");
|
|
19
|
+
warnDeprecated(opts, "autoClientBoundary", "Handled by engine internally.");
|
|
20
|
+
warnDeprecated(opts, "hoist", "Handled by engine internally.");
|
|
21
|
+
warnDeprecated(opts, "incremental", "Handled by engine internally.");
|
|
22
|
+
const {
|
|
23
|
+
include = /\.(tsx|ts|jsx|js)$/,
|
|
24
|
+
exclude = /node_modules/,
|
|
25
|
+
scanDirs = ["src"],
|
|
26
|
+
safelistOutput = ".tailwind-styled-safelist.json",
|
|
27
|
+
scanReportOutput = ".tailwind-styled-scan-report.json",
|
|
28
|
+
generateSafelist: doSafelist = true,
|
|
29
|
+
useEngineBuild = true,
|
|
30
|
+
analyze = false,
|
|
31
|
+
strict = false
|
|
32
|
+
} = opts;
|
|
33
|
+
let root = process.cwd();
|
|
34
|
+
let isDev = true;
|
|
35
|
+
return {
|
|
36
|
+
name: "tailwind-styled-v4",
|
|
37
|
+
enforce: "pre",
|
|
38
|
+
configResolved(config) {
|
|
39
|
+
root = config.root;
|
|
40
|
+
isDev = config.command === "serve";
|
|
41
|
+
},
|
|
42
|
+
transform(source, id) {
|
|
43
|
+
const filepath = id.split("?")[0];
|
|
44
|
+
if (!include.test(filepath)) return null;
|
|
45
|
+
if (exclude.test(filepath)) return null;
|
|
46
|
+
const loaderOptions = {
|
|
47
|
+
// v5: Always zero-runtime (mode is deprecated)
|
|
48
|
+
mode: "zero-runtime",
|
|
49
|
+
addDataAttr: isDev,
|
|
50
|
+
filename: filepath,
|
|
51
|
+
// Preserve cv, cx, cn, etc — only tw.* is transformed
|
|
52
|
+
preserveImports: true
|
|
53
|
+
};
|
|
54
|
+
const output = runLoaderTransform({
|
|
55
|
+
filepath,
|
|
56
|
+
source,
|
|
57
|
+
options: loaderOptions,
|
|
58
|
+
isDev
|
|
59
|
+
});
|
|
60
|
+
if (!output.changed) return null;
|
|
61
|
+
return { code: output.code, map: null };
|
|
62
|
+
},
|
|
63
|
+
async buildEnd() {
|
|
64
|
+
if (isDev) return;
|
|
65
|
+
if (doSafelist) {
|
|
66
|
+
try {
|
|
67
|
+
generateSafelist(
|
|
68
|
+
scanDirs.map((d) => path.resolve(root, d)),
|
|
69
|
+
path.resolve(root, safelistOutput),
|
|
70
|
+
root
|
|
71
|
+
);
|
|
72
|
+
} catch (e) {
|
|
73
|
+
console.warn("[tailwind-styled-v4] Safelist generation failed:", e);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
try {
|
|
77
|
+
const report = await scanWorkspaceAsync(root);
|
|
78
|
+
const reportPath = path.resolve(root, scanReportOutput);
|
|
79
|
+
fs.writeFileSync(
|
|
80
|
+
reportPath,
|
|
81
|
+
JSON.stringify(
|
|
82
|
+
{
|
|
83
|
+
root,
|
|
84
|
+
totalFiles: report.totalFiles,
|
|
85
|
+
uniqueClassCount: report.uniqueClasses.length
|
|
86
|
+
},
|
|
87
|
+
null,
|
|
88
|
+
2
|
|
89
|
+
) + "\n"
|
|
90
|
+
);
|
|
91
|
+
} catch (e) {
|
|
92
|
+
console.warn("[tailwind-styled-v4] Scan report generation failed:", e);
|
|
93
|
+
}
|
|
94
|
+
if (useEngineBuild) {
|
|
95
|
+
try {
|
|
96
|
+
const engine = await createEngine({
|
|
97
|
+
root,
|
|
98
|
+
compileCss: true,
|
|
99
|
+
analyze,
|
|
100
|
+
scanner: {
|
|
101
|
+
includeExtensions: [".tsx", ".ts", ".jsx", ".js"],
|
|
102
|
+
ignoreDirectories: scanDirs
|
|
103
|
+
}
|
|
104
|
+
});
|
|
105
|
+
await engine.build();
|
|
106
|
+
console.log("[tailwind-styled-v4] \u2713 Engine build complete");
|
|
107
|
+
} catch (e) {
|
|
108
|
+
const msg = `[tailwind-styled-v4] Engine build step failed: ${e}`;
|
|
109
|
+
if (strict) {
|
|
110
|
+
throw new Error(msg);
|
|
111
|
+
} else {
|
|
112
|
+
console.warn(msg);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
},
|
|
117
|
+
handleHotUpdate({ file, server }) {
|
|
118
|
+
if (include.test(file) && !exclude.test(file)) {
|
|
119
|
+
server.ws.send({ type: "full-reload" });
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
var plugin_default = tailwindStyledPlugin;
|
|
125
|
+
|
|
126
|
+
export { plugin_default as default, tailwindStyledPlugin };
|
|
127
|
+
//# sourceMappingURL=vite.js.map
|
|
128
|
+
//# sourceMappingURL=vite.js.map
|
package/dist/vite.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../vite/src/plugin.ts"],"names":[],"mappings":"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","file":"vite.js","sourcesContent":["/**\n * tailwind-styled-v4 — Vite Plugin v5\n *\n * Usage in vite.config.ts:\n * import { tailwindStyledPlugin } from \"@tailwind-styled/vite\"\n * export default defineConfig({\n * plugins: [react(), tailwindStyledPlugin()]\n * })\n *\n * v5 Changes:\n * - Simplified API (removed deprecated options)\n * - Uses @tailwind-styled/engine for build\n * - Mode always zero-runtime\n */\n\nimport fs from \"node:fs\"\nimport path from \"node:path\"\n\nimport type { LoaderOptions, TransformOptions } from \"@tailwind-styled/compiler\"\nimport { generateSafelist, runLoaderTransform } from \"@tailwind-styled/compiler\"\nimport { createEngine } from \"@tailwind-styled/engine\"\nimport { scanWorkspaceAsync } from \"@tailwind-styled/scanner\"\n\nexport interface VitePluginOptions {\n /** File patterns to include. Default: /\\.(tsx|ts|jsx|js)$/ */\n include?: RegExp\n /** File patterns to exclude. Default: /node_modules/ */\n exclude?: RegExp\n /** Directories to scan. Default: [\"src\"] */\n scanDirs?: string[]\n /** Safelist output path. Default: \".tailwind-styled-safelist.json\" */\n safelistOutput?: string\n /** Generate safelist at build end. Default: true */\n generateSafelist?: boolean\n /** Scan report output path. Default: \".tailwind-styled-scan-report.json\" */\n scanReportOutput?: string\n /** Run engine build at build end. Default: true */\n useEngineBuild?: boolean\n /** Enable analyzer for semantic reports. Default: false */\n analyze?: boolean\n /** Throw error on engine build failure. If true, error will abort Vite build (useful for CI/CD). If false (default), error only shows console.warn. Default: false */\n strict?: boolean\n\n /** @deprecated in v5 - mode is always \"zero-runtime\" */\n mode?: \"zero-runtime\" | \"runtime\"\n /** @deprecated in v5 - handled by engine */\n routeCss?: boolean\n /** @deprecated in v5 - handled by engine with analyze: true */\n deadStyleElimination?: boolean\n /** @deprecated in v5 - no longer used */\n addDataAttr?: boolean\n /** @deprecated in v5 - no longer used */\n autoClientBoundary?: boolean\n /** @deprecated in v5 - no longer used */\n hoist?: boolean\n /** @deprecated in v5 - no longer used */\n incremental?: boolean\n}\n\nfunction warnDeprecated(options: VitePluginOptions, key: keyof VitePluginOptions, message: string) {\n if (options[key] !== undefined) {\n console.warn(`[tailwind-styled-v4] Warning: '${key}' is deprecated in v5. ${message}`)\n }\n}\n\nexport function tailwindStyledPlugin(opts: VitePluginOptions = {}): any {\n warnDeprecated(opts, \"mode\", \"Only zero-runtime is supported.\")\n warnDeprecated(opts, \"routeCss\", \"Use engine's analyzing capabilities.\")\n warnDeprecated(opts, \"deadStyleElimination\", \"Use 'analyze: true' option instead.\")\n warnDeprecated(opts, \"addDataAttr\", \"Handled by engine internally.\")\n warnDeprecated(opts, \"autoClientBoundary\", \"Handled by engine internally.\")\n warnDeprecated(opts, \"hoist\", \"Handled by engine internally.\")\n warnDeprecated(opts, \"incremental\", \"Handled by engine internally.\")\n\n const {\n include = /\\.(tsx|ts|jsx|js)$/,\n exclude = /node_modules/,\n scanDirs = [\"src\"],\n safelistOutput = \".tailwind-styled-safelist.json\",\n scanReportOutput = \".tailwind-styled-scan-report.json\",\n generateSafelist: doSafelist = true,\n useEngineBuild = true,\n analyze = false,\n strict = false,\n } = opts\n\n let root = process.cwd()\n let isDev = true\n\n return {\n name: \"tailwind-styled-v4\",\n enforce: \"pre\" as const,\n\n configResolved(config: any) {\n root = config.root\n isDev = config.command === \"serve\"\n },\n\n transform(source: string, id: string) {\n const filepath = id.split(\"?\")[0]\n if (!include.test(filepath)) return null\n if (exclude.test(filepath)) return null\n\n const loaderOptions: LoaderOptions = {\n // v5: Always zero-runtime (mode is deprecated)\n mode: \"zero-runtime\",\n addDataAttr: isDev,\n filename: filepath,\n // Preserve cv, cx, cn, etc — only tw.* is transformed\n preserveImports: true,\n }\n\n const output = runLoaderTransform({\n filepath,\n source,\n options: loaderOptions,\n isDev,\n })\n\n if (!output.changed) return null\n return { code: output.code, map: null }\n },\n\n async buildEnd() {\n if (isDev) return\n\n if (doSafelist) {\n try {\n generateSafelist(\n scanDirs.map((d) => path.resolve(root, d)),\n path.resolve(root, safelistOutput),\n root\n )\n } catch (e) {\n console.warn(\"[tailwind-styled-v4] Safelist generation failed:\", e)\n }\n }\n\n try {\n const report = await scanWorkspaceAsync(root)\n const reportPath = path.resolve(root, scanReportOutput)\n fs.writeFileSync(\n reportPath,\n JSON.stringify(\n {\n root,\n totalFiles: report.totalFiles,\n uniqueClassCount: report.uniqueClasses.length,\n },\n null,\n 2\n ) + \"\\n\"\n )\n } catch (e) {\n console.warn(\"[tailwind-styled-v4] Scan report generation failed:\", e)\n }\n\n if (useEngineBuild) {\n try {\n const engine = await createEngine({\n root,\n compileCss: true,\n analyze,\n scanner: {\n includeExtensions: [\".tsx\", \".ts\", \".jsx\", \".js\"],\n ignoreDirectories: scanDirs,\n },\n })\n await engine.build()\n console.log(\"[tailwind-styled-v4] ✓ Engine build complete\")\n } catch (e) {\n const msg = `[tailwind-styled-v4] Engine build step failed: ${e}`\n if (strict) {\n throw new Error(msg)\n } else {\n console.warn(msg)\n }\n }\n }\n },\n\n handleHotUpdate({ file, server }: any) {\n if (include.test(file) && !exclude.test(file)) {\n server.ws.send({ type: \"full-reload\" })\n }\n },\n }\n}\n\nexport default tailwindStyledPlugin\n"]}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
require('./chunk-Y5D3E72P.cjs');
|
|
4
|
+
var compiler = require('@tailwind-styled/compiler');
|
|
5
|
+
|
|
6
|
+
/* tailwind-styled-v4 v4 | MIT | https://github.com/dictionar32/tailwind-styled-v4 */
|
|
7
|
+
function webpackLoader(source) {
|
|
8
|
+
const callback = this.async();
|
|
9
|
+
const filepath = this.resourcePath;
|
|
10
|
+
if (compiler.shouldSkipFile(filepath) || filepath.includes(".next")) {
|
|
11
|
+
callback(null, source);
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
try {
|
|
15
|
+
const options = this.getOptions();
|
|
16
|
+
const output = compiler.runLoaderTransform({
|
|
17
|
+
filepath,
|
|
18
|
+
source,
|
|
19
|
+
options: {
|
|
20
|
+
mode: options.mode,
|
|
21
|
+
autoClientBoundary: options.autoClientBoundary ?? true,
|
|
22
|
+
addDataAttr: options.addDataAttr,
|
|
23
|
+
hoist: options.hoist,
|
|
24
|
+
filename: filepath,
|
|
25
|
+
routeCss: options.routeCss,
|
|
26
|
+
incremental: options.incremental,
|
|
27
|
+
verbose: options.verbose,
|
|
28
|
+
// Preserve cv, cx, cn, etc — only tw.* is transformed
|
|
29
|
+
preserveImports: true
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
if (options.verbose && output.changed) {
|
|
33
|
+
const env = output.rsc?.isServer ? "server" : "client";
|
|
34
|
+
const engine = output.engine ?? "js";
|
|
35
|
+
const name = filepath.split(/[/\\]/).pop();
|
|
36
|
+
console.log(
|
|
37
|
+
`[tailwind-styled/webpack] ${name} \u2192 ${output.classes.length} classes (${env}) [${engine}]`
|
|
38
|
+
);
|
|
39
|
+
}
|
|
40
|
+
callback(null, output.code);
|
|
41
|
+
} catch (err) {
|
|
42
|
+
if (process.env.NODE_ENV !== "production") {
|
|
43
|
+
console.warn(`[tailwind-styled-v4] Webpack transform failed for ${filepath}:`, err);
|
|
44
|
+
}
|
|
45
|
+
callback(null, source);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
module.exports = webpackLoader;
|
|
50
|
+
//# sourceMappingURL=webpackLoader.cjs.map
|
|
51
|
+
//# sourceMappingURL=webpackLoader.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../next/src/webpackLoader.ts"],"names":["shouldSkipFile","runLoaderTransform"],"mappings":";;;;;;AAiBe,SAAR,cAAqD,MAAA,EAAsB;AAChF,EAAA,MAAM,QAAA,GAAW,KAAK,KAAA,EAAM;AAC5B,EAAA,MAAM,WAAW,IAAA,CAAK,YAAA;AAEtB,EAAA,IAAIA,wBAAe,QAAQ,CAAA,IAAK,QAAA,CAAS,QAAA,CAAS,OAAO,CAAA,EAAG;AAC1D,IAAA,QAAA,CAAS,MAAM,MAAM,CAAA;AACrB,IAAA;AAAA,EACF;AAEA,EAAA,IAAI;AACF,IAAA,MAAM,OAAA,GAAU,KAAK,UAAA,EAAW;AAEhC,IAAA,MAAM,SAASC,2BAAA,CAAmB;AAAA,MAChC,QAAA;AAAA,MACA,MAAA;AAAA,MACA,OAAA,EAAS;AAAA,QACP,MAAM,OAAA,CAAQ,IAAA;AAAA,QACd,kBAAA,EAAoB,QAAQ,kBAAA,IAAsB,IAAA;AAAA,QAClD,aAAa,OAAA,CAAQ,WAAA;AAAA,QACrB,OAAO,OAAA,CAAQ,KAAA;AAAA,QACf,QAAA,EAAU,QAAA;AAAA,QACV,UAAU,OAAA,CAAQ,QAAA;AAAA,QAClB,aAAa,OAAA,CAAQ,WAAA;AAAA,QACrB,SAAS,OAAA,CAAQ,OAAA;AAAA;AAAA,QAEjB,eAAA,EAAiB;AAAA;AACnB,KACD,CAAA;AAED,IAAA,IAAI,OAAA,CAAQ,OAAA,IAAW,MAAA,CAAO,OAAA,EAAS;AACrC,MAAA,MAAM,GAAA,GAAM,MAAA,CAAO,GAAA,EAAK,QAAA,GAAW,QAAA,GAAW,QAAA;AAC9C,MAAA,MAAM,MAAA,GAAS,OAAO,MAAA,IAAU,IAAA;AAChC,MAAA,MAAM,IAAA,GAAO,QAAA,CAAS,KAAA,CAAM,OAAO,EAAE,GAAA,EAAI;AACzC,MAAA,OAAA,CAAQ,GAAA;AAAA,QACN,CAAA,0BAAA,EAA6B,IAAI,CAAA,QAAA,EAAM,MAAA,CAAO,QAAQ,MAAM,CAAA,UAAA,EAAa,GAAG,CAAA,GAAA,EAAM,MAAM,CAAA,CAAA;AAAA,OAC1F;AAAA,IACF;AAEA,IAAA,QAAA,CAAS,IAAA,EAAM,OAAO,IAAI,CAAA;AAAA,EAC5B,SAAS,GAAA,EAAK;AACZ,IAAA,IAAI,OAAA,CAAQ,GAAA,CAAI,QAAA,KAAa,YAAA,EAAc;AACzC,MAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,kDAAA,EAAqD,QAAQ,CAAA,CAAA,CAAA,EAAK,GAAG,CAAA;AAAA,IACpF;AACA,IAAA,QAAA,CAAS,MAAM,MAAM,CAAA;AAAA,EACvB;AACF","file":"webpackLoader.cjs","sourcesContent":["/**\n * tailwind-styled-v4 — Webpack Loader\n */\n\nimport type { LoaderOptions } from \"@tailwind-styled/compiler\"\nimport { runLoaderTransform, shouldSkipFile } from \"@tailwind-styled/compiler\"\n\ninterface WebpackLoaderOptions extends LoaderOptions {\n autoClientBoundary?: boolean\n}\n\ninterface WebpackContext {\n resourcePath: string\n getOptions(): WebpackLoaderOptions\n async(): (err: Error | null, result?: string) => void\n}\n\nexport default function webpackLoader(this: WebpackContext, source: string): void {\n const callback = this.async()\n const filepath = this.resourcePath\n\n if (shouldSkipFile(filepath) || filepath.includes(\".next\")) {\n callback(null, source)\n return\n }\n\n try {\n const options = this.getOptions()\n\n const output = runLoaderTransform({\n filepath,\n source,\n options: {\n mode: options.mode,\n autoClientBoundary: options.autoClientBoundary ?? true,\n addDataAttr: options.addDataAttr,\n hoist: options.hoist,\n filename: filepath,\n routeCss: options.routeCss,\n incremental: options.incremental,\n verbose: options.verbose,\n // Preserve cv, cx, cn, etc — only tw.* is transformed\n preserveImports: true,\n },\n })\n\n if (options.verbose && output.changed) {\n const env = output.rsc?.isServer ? \"server\" : \"client\"\n const engine = output.engine ?? \"js\"\n const name = filepath.split(/[/\\\\]/).pop()\n console.log(\n `[tailwind-styled/webpack] ${name} → ${output.classes.length} classes (${env}) [${engine}]`\n )\n }\n\n callback(null, output.code)\n } catch (err) {\n if (process.env.NODE_ENV !== \"production\") {\n console.warn(`[tailwind-styled-v4] Webpack transform failed for ${filepath}:`, err)\n }\n callback(null, source)\n }\n}\n"]}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { LoaderOptions } from '@tailwind-styled/compiler';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* tailwind-styled-v4 — Webpack Loader
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
interface WebpackLoaderOptions extends LoaderOptions {
|
|
8
|
+
autoClientBoundary?: boolean;
|
|
9
|
+
}
|
|
10
|
+
interface WebpackContext {
|
|
11
|
+
resourcePath: string;
|
|
12
|
+
getOptions(): WebpackLoaderOptions;
|
|
13
|
+
async(): (err: Error | null, result?: string) => void;
|
|
14
|
+
}
|
|
15
|
+
declare function webpackLoader(this: WebpackContext, source: string): void;
|
|
16
|
+
|
|
17
|
+
export { webpackLoader as default };
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { LoaderOptions } from '@tailwind-styled/compiler';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* tailwind-styled-v4 — Webpack Loader
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
interface WebpackLoaderOptions extends LoaderOptions {
|
|
8
|
+
autoClientBoundary?: boolean;
|
|
9
|
+
}
|
|
10
|
+
interface WebpackContext {
|
|
11
|
+
resourcePath: string;
|
|
12
|
+
getOptions(): WebpackLoaderOptions;
|
|
13
|
+
async(): (err: Error | null, result?: string) => void;
|
|
14
|
+
}
|
|
15
|
+
declare function webpackLoader(this: WebpackContext, source: string): void;
|
|
16
|
+
|
|
17
|
+
export { webpackLoader as default };
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import './chunk-VZEJV27B.js';
|
|
2
|
+
import { shouldSkipFile, runLoaderTransform } from '@tailwind-styled/compiler';
|
|
3
|
+
|
|
4
|
+
/* tailwind-styled-v4 v4 | MIT | https://github.com/dictionar32/tailwind-styled-v4 */
|
|
5
|
+
function webpackLoader(source) {
|
|
6
|
+
const callback = this.async();
|
|
7
|
+
const filepath = this.resourcePath;
|
|
8
|
+
if (shouldSkipFile(filepath) || filepath.includes(".next")) {
|
|
9
|
+
callback(null, source);
|
|
10
|
+
return;
|
|
11
|
+
}
|
|
12
|
+
try {
|
|
13
|
+
const options = this.getOptions();
|
|
14
|
+
const output = runLoaderTransform({
|
|
15
|
+
filepath,
|
|
16
|
+
source,
|
|
17
|
+
options: {
|
|
18
|
+
mode: options.mode,
|
|
19
|
+
autoClientBoundary: options.autoClientBoundary ?? true,
|
|
20
|
+
addDataAttr: options.addDataAttr,
|
|
21
|
+
hoist: options.hoist,
|
|
22
|
+
filename: filepath,
|
|
23
|
+
routeCss: options.routeCss,
|
|
24
|
+
incremental: options.incremental,
|
|
25
|
+
verbose: options.verbose,
|
|
26
|
+
// Preserve cv, cx, cn, etc — only tw.* is transformed
|
|
27
|
+
preserveImports: true
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
if (options.verbose && output.changed) {
|
|
31
|
+
const env = output.rsc?.isServer ? "server" : "client";
|
|
32
|
+
const engine = output.engine ?? "js";
|
|
33
|
+
const name = filepath.split(/[/\\]/).pop();
|
|
34
|
+
console.log(
|
|
35
|
+
`[tailwind-styled/webpack] ${name} \u2192 ${output.classes.length} classes (${env}) [${engine}]`
|
|
36
|
+
);
|
|
37
|
+
}
|
|
38
|
+
callback(null, output.code);
|
|
39
|
+
} catch (err) {
|
|
40
|
+
if (process.env.NODE_ENV !== "production") {
|
|
41
|
+
console.warn(`[tailwind-styled-v4] Webpack transform failed for ${filepath}:`, err);
|
|
42
|
+
}
|
|
43
|
+
callback(null, source);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
export { webpackLoader as default };
|
|
48
|
+
//# sourceMappingURL=webpackLoader.js.map
|
|
49
|
+
//# sourceMappingURL=webpackLoader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../next/src/webpackLoader.ts"],"names":[],"mappings":";;;;AAiBe,SAAR,cAAqD,MAAA,EAAsB;AAChF,EAAA,MAAM,QAAA,GAAW,KAAK,KAAA,EAAM;AAC5B,EAAA,MAAM,WAAW,IAAA,CAAK,YAAA;AAEtB,EAAA,IAAI,eAAe,QAAQ,CAAA,IAAK,QAAA,CAAS,QAAA,CAAS,OAAO,CAAA,EAAG;AAC1D,IAAA,QAAA,CAAS,MAAM,MAAM,CAAA;AACrB,IAAA;AAAA,EACF;AAEA,EAAA,IAAI;AACF,IAAA,MAAM,OAAA,GAAU,KAAK,UAAA,EAAW;AAEhC,IAAA,MAAM,SAAS,kBAAA,CAAmB;AAAA,MAChC,QAAA;AAAA,MACA,MAAA;AAAA,MACA,OAAA,EAAS;AAAA,QACP,MAAM,OAAA,CAAQ,IAAA;AAAA,QACd,kBAAA,EAAoB,QAAQ,kBAAA,IAAsB,IAAA;AAAA,QAClD,aAAa,OAAA,CAAQ,WAAA;AAAA,QACrB,OAAO,OAAA,CAAQ,KAAA;AAAA,QACf,QAAA,EAAU,QAAA;AAAA,QACV,UAAU,OAAA,CAAQ,QAAA;AAAA,QAClB,aAAa,OAAA,CAAQ,WAAA;AAAA,QACrB,SAAS,OAAA,CAAQ,OAAA;AAAA;AAAA,QAEjB,eAAA,EAAiB;AAAA;AACnB,KACD,CAAA;AAED,IAAA,IAAI,OAAA,CAAQ,OAAA,IAAW,MAAA,CAAO,OAAA,EAAS;AACrC,MAAA,MAAM,GAAA,GAAM,MAAA,CAAO,GAAA,EAAK,QAAA,GAAW,QAAA,GAAW,QAAA;AAC9C,MAAA,MAAM,MAAA,GAAS,OAAO,MAAA,IAAU,IAAA;AAChC,MAAA,MAAM,IAAA,GAAO,QAAA,CAAS,KAAA,CAAM,OAAO,EAAE,GAAA,EAAI;AACzC,MAAA,OAAA,CAAQ,GAAA;AAAA,QACN,CAAA,0BAAA,EAA6B,IAAI,CAAA,QAAA,EAAM,MAAA,CAAO,QAAQ,MAAM,CAAA,UAAA,EAAa,GAAG,CAAA,GAAA,EAAM,MAAM,CAAA,CAAA;AAAA,OAC1F;AAAA,IACF;AAEA,IAAA,QAAA,CAAS,IAAA,EAAM,OAAO,IAAI,CAAA;AAAA,EAC5B,SAAS,GAAA,EAAK;AACZ,IAAA,IAAI,OAAA,CAAQ,GAAA,CAAI,QAAA,KAAa,YAAA,EAAc;AACzC,MAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,kDAAA,EAAqD,QAAQ,CAAA,CAAA,CAAA,EAAK,GAAG,CAAA;AAAA,IACpF;AACA,IAAA,QAAA,CAAS,MAAM,MAAM,CAAA;AAAA,EACvB;AACF","file":"webpackLoader.js","sourcesContent":["/**\n * tailwind-styled-v4 — Webpack Loader\n */\n\nimport type { LoaderOptions } from \"@tailwind-styled/compiler\"\nimport { runLoaderTransform, shouldSkipFile } from \"@tailwind-styled/compiler\"\n\ninterface WebpackLoaderOptions extends LoaderOptions {\n autoClientBoundary?: boolean\n}\n\ninterface WebpackContext {\n resourcePath: string\n getOptions(): WebpackLoaderOptions\n async(): (err: Error | null, result?: string) => void\n}\n\nexport default function webpackLoader(this: WebpackContext, source: string): void {\n const callback = this.async()\n const filepath = this.resourcePath\n\n if (shouldSkipFile(filepath) || filepath.includes(\".next\")) {\n callback(null, source)\n return\n }\n\n try {\n const options = this.getOptions()\n\n const output = runLoaderTransform({\n filepath,\n source,\n options: {\n mode: options.mode,\n autoClientBoundary: options.autoClientBoundary ?? true,\n addDataAttr: options.addDataAttr,\n hoist: options.hoist,\n filename: filepath,\n routeCss: options.routeCss,\n incremental: options.incremental,\n verbose: options.verbose,\n // Preserve cv, cx, cn, etc — only tw.* is transformed\n preserveImports: true,\n },\n })\n\n if (options.verbose && output.changed) {\n const env = output.rsc?.isServer ? \"server\" : \"client\"\n const engine = output.engine ?? \"js\"\n const name = filepath.split(/[/\\\\]/).pop()\n console.log(\n `[tailwind-styled/webpack] ${name} → ${output.classes.length} classes (${env}) [${engine}]`\n )\n }\n\n callback(null, output.code)\n } catch (err) {\n if (process.env.NODE_ENV !== \"production\") {\n console.warn(`[tailwind-styled-v4] Webpack transform failed for ${filepath}:`, err)\n }\n callback(null, source)\n }\n}\n"]}
|