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.
Files changed (74) hide show
  1. package/dist/animate.cjs +771 -0
  2. package/dist/animate.cjs.map +1 -0
  3. package/dist/animate.d.cts +73 -0
  4. package/dist/animate.d.ts +73 -0
  5. package/dist/animate.js +752 -0
  6. package/dist/animate.js.map +1 -0
  7. package/dist/chunk-VZEJV27B.js +11 -0
  8. package/dist/chunk-VZEJV27B.js.map +1 -0
  9. package/dist/chunk-Y5D3E72P.cjs +13 -0
  10. package/dist/chunk-Y5D3E72P.cjs.map +1 -0
  11. package/dist/css.cjs +121 -0
  12. package/dist/css.cjs.map +1 -0
  13. package/dist/css.d.cts +30 -0
  14. package/dist/css.d.ts +30 -0
  15. package/dist/css.js +112 -0
  16. package/dist/css.js.map +1 -0
  17. package/dist/devtools.cjs +1071 -0
  18. package/dist/devtools.cjs.map +1 -0
  19. package/dist/devtools.d.cts +22 -0
  20. package/dist/devtools.d.ts +22 -0
  21. package/dist/devtools.js +1064 -0
  22. package/dist/devtools.js.map +1 -0
  23. package/dist/index.cjs +1353 -0
  24. package/dist/index.cjs.map +1 -0
  25. package/dist/index.d.cts +655 -0
  26. package/dist/index.d.ts +508 -968
  27. package/dist/index.js +1304 -3
  28. package/dist/index.js.map +1 -1
  29. package/dist/next.cjs +248 -0
  30. package/dist/next.cjs.map +1 -0
  31. package/dist/next.d.cts +54 -0
  32. package/dist/next.d.ts +54 -0
  33. package/dist/next.js +241 -0
  34. package/dist/next.js.map +1 -0
  35. package/dist/preset.cjs +423 -0
  36. package/dist/preset.cjs.map +1 -0
  37. package/dist/preset.d.cts +276 -0
  38. package/dist/preset.d.ts +276 -0
  39. package/dist/preset.js +416 -0
  40. package/dist/preset.js.map +1 -0
  41. package/dist/turbopackLoader.cjs +37 -0
  42. package/dist/turbopackLoader.cjs.map +1 -0
  43. package/dist/turbopackLoader.d.cts +12 -0
  44. package/dist/turbopackLoader.d.ts +12 -0
  45. package/dist/turbopackLoader.js +35 -0
  46. package/dist/turbopackLoader.js.map +1 -0
  47. package/dist/vite.cjs +138 -0
  48. package/dist/vite.cjs.map +1 -0
  49. package/dist/vite.d.cts +51 -0
  50. package/dist/vite.d.ts +51 -0
  51. package/dist/vite.js +128 -0
  52. package/dist/vite.js.map +1 -0
  53. package/dist/webpackLoader.cjs +51 -0
  54. package/dist/webpackLoader.cjs.map +1 -0
  55. package/dist/webpackLoader.d.cts +17 -0
  56. package/dist/webpackLoader.d.ts +17 -0
  57. package/dist/webpackLoader.js +49 -0
  58. package/dist/webpackLoader.js.map +1 -0
  59. package/package.json +65 -32
  60. package/CHANGELOG.md +0 -75
  61. package/LICENSE +0 -21
  62. package/README.md +0 -608
  63. package/dist/cli/init.js +0 -208
  64. package/dist/compiler/index.d.mts +0 -214
  65. package/dist/compiler/index.d.ts +0 -214
  66. package/dist/compiler/index.js +0 -546
  67. package/dist/compiler/index.js.map +0 -1
  68. package/dist/compiler/index.mjs +0 -504
  69. package/dist/compiler/index.mjs.map +0 -1
  70. package/dist/index.d.mts +0 -1115
  71. package/dist/index.mjs +0 -4
  72. package/dist/index.mjs.map +0 -1
  73. package/dist/turbopack-loader.js +0 -232
  74. 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"]}
@@ -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
@@ -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"]}