tailwind-styled-v4 4.0.0 → 5.0.1

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 (194) hide show
  1. package/CHANGELOG.md +398 -0
  2. package/LICENSE +21 -0
  3. package/README.md +532 -0
  4. package/dist/analyzer.d.mts +114 -0
  5. package/dist/analyzer.d.ts +114 -0
  6. package/dist/analyzer.js +1555 -0
  7. package/dist/analyzer.js.map +1 -0
  8. package/dist/analyzer.mjs +1544 -0
  9. package/dist/analyzer.mjs.map +1 -0
  10. package/dist/animate.d.mts +46 -0
  11. package/dist/animate.d.ts +41 -112
  12. package/dist/animate.js +792 -235
  13. package/dist/animate.js.map +1 -1
  14. package/dist/animate.mjs +782 -0
  15. package/dist/animate.mjs.map +1 -0
  16. package/dist/atomic.d.mts +18 -0
  17. package/dist/atomic.d.ts +18 -0
  18. package/dist/atomic.js +191 -0
  19. package/dist/atomic.js.map +1 -0
  20. package/dist/atomic.mjs +185 -0
  21. package/dist/atomic.mjs.map +1 -0
  22. package/dist/cli.d.mts +1 -0
  23. package/dist/cli.d.ts +1 -0
  24. package/dist/cli.js +6063 -0
  25. package/dist/cli.js.map +1 -0
  26. package/dist/cli.mjs +6053 -0
  27. package/dist/cli.mjs.map +1 -0
  28. package/dist/{compiler.d.cts → compiler.d.mts} +503 -210
  29. package/dist/compiler.d.ts +503 -210
  30. package/dist/compiler.js +1549 -566
  31. package/dist/compiler.js.map +1 -1
  32. package/dist/{compiler.cjs → compiler.mjs} +1476 -627
  33. package/dist/compiler.mjs.map +1 -0
  34. package/dist/dashboard.d.mts +272 -0
  35. package/dist/dashboard.d.ts +272 -0
  36. package/dist/dashboard.js +249 -0
  37. package/dist/dashboard.js.map +1 -0
  38. package/dist/dashboard.mjs +239 -0
  39. package/dist/dashboard.mjs.map +1 -0
  40. package/dist/devtools.js +336 -211
  41. package/dist/devtools.js.map +1 -1
  42. package/dist/{devtools.cjs → devtools.mjs} +331 -220
  43. package/dist/devtools.mjs.map +1 -0
  44. package/dist/engine.d.mts +84 -0
  45. package/dist/engine.d.ts +84 -0
  46. package/dist/engine.js +3014 -0
  47. package/dist/engine.js.map +1 -0
  48. package/dist/engine.mjs +3005 -0
  49. package/dist/engine.mjs.map +1 -0
  50. package/dist/{index.d.cts → index.d.mts} +75 -4
  51. package/dist/index.d.ts +75 -4
  52. package/dist/index.js +1341 -149
  53. package/dist/index.js.map +1 -1
  54. package/dist/index.mjs +2162 -0
  55. package/dist/index.mjs.map +1 -0
  56. package/dist/liveTokenEngine-DYN3Zale.d.mts +34 -0
  57. package/dist/liveTokenEngine-DYN3Zale.d.ts +34 -0
  58. package/dist/next.d.mts +55 -0
  59. package/dist/next.d.ts +30 -20
  60. package/dist/next.js +6947 -149
  61. package/dist/next.js.map +1 -1
  62. package/dist/next.mjs +7050 -0
  63. package/dist/next.mjs.map +1 -0
  64. package/dist/plugin.d.mts +90 -0
  65. package/dist/plugin.d.ts +90 -0
  66. package/dist/plugin.js +185 -0
  67. package/dist/plugin.js.map +1 -0
  68. package/dist/plugin.mjs +174 -0
  69. package/dist/plugin.mjs.map +1 -0
  70. package/dist/pluginRegistry.d.mts +83 -0
  71. package/dist/pluginRegistry.d.ts +83 -0
  72. package/dist/pluginRegistry.js +303 -0
  73. package/dist/pluginRegistry.js.map +1 -0
  74. package/dist/pluginRegistry.mjs +298 -0
  75. package/dist/pluginRegistry.mjs.map +1 -0
  76. package/dist/{preset.d.cts → preset.d.mts} +29 -2
  77. package/dist/preset.d.ts +29 -2
  78. package/dist/preset.js +318 -21
  79. package/dist/preset.js.map +1 -1
  80. package/dist/preset.mjs +414 -0
  81. package/dist/preset.mjs.map +1 -0
  82. package/dist/rspack.d.mts +33 -0
  83. package/dist/rspack.d.ts +33 -0
  84. package/dist/rspack.js +55 -0
  85. package/dist/rspack.js.map +1 -0
  86. package/dist/rspack.mjs +45 -0
  87. package/dist/rspack.mjs.map +1 -0
  88. package/dist/runtime.d.mts +62 -0
  89. package/dist/runtime.d.ts +62 -0
  90. package/dist/runtime.js +207 -0
  91. package/dist/runtime.js.map +1 -0
  92. package/dist/runtime.mjs +188 -0
  93. package/dist/runtime.mjs.map +1 -0
  94. package/dist/runtimeCss.d.mts +65 -0
  95. package/dist/runtimeCss.d.ts +65 -0
  96. package/dist/runtimeCss.js +188 -0
  97. package/dist/runtimeCss.js.map +1 -0
  98. package/dist/runtimeCss.mjs +173 -0
  99. package/dist/runtimeCss.mjs.map +1 -0
  100. package/dist/scanner.d.mts +25 -0
  101. package/dist/scanner.d.ts +25 -0
  102. package/dist/scanner.js +717 -0
  103. package/dist/scanner.js.map +1 -0
  104. package/dist/scanner.mjs +703 -0
  105. package/dist/scanner.mjs.map +1 -0
  106. package/dist/shared.d.mts +85 -0
  107. package/dist/shared.d.ts +85 -0
  108. package/dist/shared.js +255 -0
  109. package/dist/shared.js.map +1 -0
  110. package/dist/shared.mjs +233 -0
  111. package/dist/shared.mjs.map +1 -0
  112. package/dist/storybookAddon.d.mts +108 -0
  113. package/dist/storybookAddon.d.ts +108 -0
  114. package/dist/storybookAddon.js +95 -0
  115. package/dist/storybookAddon.js.map +1 -0
  116. package/dist/storybookAddon.mjs +88 -0
  117. package/dist/storybookAddon.mjs.map +1 -0
  118. package/dist/svelte.d.mts +114 -0
  119. package/dist/svelte.d.ts +114 -0
  120. package/dist/svelte.js +67 -0
  121. package/dist/svelte.js.map +1 -0
  122. package/dist/svelte.mjs +59 -0
  123. package/dist/svelte.mjs.map +1 -0
  124. package/dist/testing.d.mts +185 -0
  125. package/dist/testing.d.ts +185 -0
  126. package/dist/testing.js +173 -0
  127. package/dist/testing.js.map +1 -0
  128. package/dist/testing.mjs +158 -0
  129. package/dist/testing.mjs.map +1 -0
  130. package/dist/{theme.d.cts → theme.d.mts} +18 -11
  131. package/dist/theme.d.ts +18 -11
  132. package/dist/theme.js +205 -19
  133. package/dist/theme.js.map +1 -1
  134. package/dist/theme.mjs +311 -0
  135. package/dist/theme.mjs.map +1 -0
  136. package/dist/types-DXr2PmGP.d.mts +31 -0
  137. package/dist/types-DXr2PmGP.d.ts +31 -0
  138. package/dist/vite.d.mts +51 -0
  139. package/dist/vite.d.ts +35 -6
  140. package/dist/vite.js +4254 -57
  141. package/dist/vite.js.map +1 -1
  142. package/dist/vite.mjs +4281 -0
  143. package/dist/vite.mjs.map +1 -0
  144. package/dist/vue.d.mts +89 -0
  145. package/dist/vue.d.ts +89 -0
  146. package/dist/vue.js +104 -0
  147. package/dist/vue.js.map +1 -0
  148. package/dist/vue.mjs +96 -0
  149. package/dist/vue.mjs.map +1 -0
  150. package/package.json +173 -67
  151. package/dist/animate.cjs +0 -252
  152. package/dist/animate.cjs.map +0 -1
  153. package/dist/animate.d.cts +0 -117
  154. package/dist/astTransform-ua-eapqs.d.cts +0 -41
  155. package/dist/astTransform-ua-eapqs.d.ts +0 -41
  156. package/dist/compiler.cjs.map +0 -1
  157. package/dist/css.cjs +0 -71
  158. package/dist/css.cjs.map +0 -1
  159. package/dist/css.d.cts +0 -45
  160. package/dist/css.d.ts +0 -45
  161. package/dist/css.js +0 -62
  162. package/dist/css.js.map +0 -1
  163. package/dist/devtools.cjs.map +0 -1
  164. package/dist/index.cjs +0 -1058
  165. package/dist/index.cjs.map +0 -1
  166. package/dist/next.cjs +0 -268
  167. package/dist/next.cjs.map +0 -1
  168. package/dist/next.d.cts +0 -45
  169. package/dist/plugins.cjs +0 -396
  170. package/dist/plugins.cjs.map +0 -1
  171. package/dist/plugins.d.cts +0 -231
  172. package/dist/plugins.d.ts +0 -231
  173. package/dist/plugins.js +0 -381
  174. package/dist/plugins.js.map +0 -1
  175. package/dist/preset.cjs +0 -129
  176. package/dist/preset.cjs.map +0 -1
  177. package/dist/theme.cjs +0 -154
  178. package/dist/theme.cjs.map +0 -1
  179. package/dist/turbopackLoader.cjs +0 -2689
  180. package/dist/turbopackLoader.cjs.map +0 -1
  181. package/dist/turbopackLoader.d.cts +0 -22
  182. package/dist/turbopackLoader.d.ts +0 -22
  183. package/dist/turbopackLoader.js +0 -2681
  184. package/dist/turbopackLoader.js.map +0 -1
  185. package/dist/vite.cjs +0 -105
  186. package/dist/vite.cjs.map +0 -1
  187. package/dist/vite.d.cts +0 -22
  188. package/dist/webpackLoader.cjs +0 -2670
  189. package/dist/webpackLoader.cjs.map +0 -1
  190. package/dist/webpackLoader.d.cts +0 -24
  191. package/dist/webpackLoader.d.ts +0 -24
  192. package/dist/webpackLoader.js +0 -2662
  193. package/dist/webpackLoader.js.map +0 -1
  194. /package/dist/{devtools.d.cts → devtools.d.mts} +0 -0
package/dist/css.cjs DELETED
@@ -1,71 +0,0 @@
1
- 'use strict';
2
-
3
- var fs = require('fs');
4
- var path = require('path');
5
- var React = require('react');
6
-
7
- function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
8
-
9
- var fs__default = /*#__PURE__*/_interopDefault(fs);
10
- var path__default = /*#__PURE__*/_interopDefault(path);
11
- var React__default = /*#__PURE__*/_interopDefault(React);
12
-
13
- /* tailwind-styled-v4 v4 | MIT | https://github.com/dictionar32/tailwind-styled-v4 */
14
-
15
- async function TwCssInjector({
16
- cssDir,
17
- route,
18
- includeGlobal = true,
19
- minify = true,
20
- asLink = false
21
- }) {
22
- const resolvedDir = cssDir != null ? cssDir : path__default.default.join(process.cwd(), ".next", "static", "css", "tw");
23
- const cssChunks = [];
24
- if (includeGlobal) {
25
- const globalCss = loadCssFile(path__default.default.join(resolvedDir, "_global.css"));
26
- if (globalCss) cssChunks.push(globalCss);
27
- }
28
- const targetRoute = route != null ? route : "/";
29
- const routeFile = routeToFilename(targetRoute);
30
- const routeCss = loadCssFile(path__default.default.join(resolvedDir, routeFile));
31
- if (routeCss) cssChunks.push(routeCss);
32
- if (cssChunks.length === 0) return React__default.default.createElement(React__default.default.Fragment, null);
33
- const combined = cssChunks.join("\n");
34
- const final = minify ? minifyCss(combined) : combined;
35
- if (asLink) {
36
- return React__default.default.createElement("link", {
37
- rel: "stylesheet",
38
- href: `/_next/static/css/tw/${routeFile}`,
39
- crossOrigin: "anonymous"
40
- });
41
- }
42
- return React__default.default.createElement("style", {
43
- dangerouslySetInnerHTML: { __html: final },
44
- "data-tw-route": targetRoute
45
- });
46
- }
47
- function useTwClasses(classes) {
48
- return classes;
49
- }
50
- function loadCssFile(filepath) {
51
- try {
52
- if (fs__default.default.existsSync(filepath)) {
53
- return fs__default.default.readFileSync(filepath, "utf-8");
54
- }
55
- } catch (e) {
56
- }
57
- return null;
58
- }
59
- function routeToFilename(route) {
60
- if (route === "/") return "index.css";
61
- if (route === "__global") return "_global.css";
62
- return `${route.replace(/^\//, "").replace(/\//g, "_")}.css`;
63
- }
64
- function minifyCss(css) {
65
- return css.replace(/\/\*[^*]*\*+([^/*][^*]*\*+)*\//g, "").replace(/\s+/g, " ").replace(/\s*{\s*/g, "{").replace(/\s*}\s*/g, "}").replace(/\s*;\s*/g, ";").trim();
66
- }
67
-
68
- exports.TwCssInjector = TwCssInjector;
69
- exports.useTwClasses = useTwClasses;
70
- //# sourceMappingURL=css.cjs.map
71
- //# sourceMappingURL=css.cjs.map
package/dist/css.cjs.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../runtime-css/src/CssInjector.tsx"],"names":["path","React","fs"],"mappings":";;;;;;;;;;;;;;AAsCA,eAAsB,aAAA,CAAc;AAAA,EAClC,MAAA;AAAA,EACA,KAAA;AAAA,EACA,aAAA,GAAgB,IAAA;AAAA,EAChB,MAAA,GAAS,IAAA;AAAA,EACT,MAAA,GAAS;AACX,CAAA,EAAkD;AAChD,EAAA,MAAM,WAAA,GAAc,MAAA,IAAA,IAAA,GAAA,MAAA,GAAUA,qBAAA,CAAK,IAAA,CAAK,OAAA,CAAQ,KAAI,EAAG,OAAA,EAAS,QAAA,EAAU,KAAA,EAAO,IAAI,CAAA;AAErF,EAAA,MAAM,YAAsB,EAAC;AAG7B,EAAA,IAAI,aAAA,EAAe;AACjB,IAAA,MAAM,YAAY,WAAA,CAAYA,qBAAA,CAAK,IAAA,CAAK,WAAA,EAAa,aAAa,CAAC,CAAA;AACnE,IAAA,IAAI,SAAA,EAAW,SAAA,CAAU,IAAA,CAAK,SAAS,CAAA;AAAA,EACzC;AAGA,EAAA,MAAM,cAAc,KAAA,IAAA,IAAA,GAAA,KAAA,GAAS,GAAA;AAC7B,EAAA,MAAM,SAAA,GAAY,gBAAgB,WAAW,CAAA;AAC7C,EAAA,MAAM,WAAW,WAAA,CAAYA,qBAAA,CAAK,IAAA,CAAK,WAAA,EAAa,SAAS,CAAC,CAAA;AAC9D,EAAA,IAAI,QAAA,EAAU,SAAA,CAAU,IAAA,CAAK,QAAQ,CAAA;AAErC,EAAA,IAAI,SAAA,CAAU,WAAW,CAAA,EAAG,OAAOC,uBAAM,aAAA,CAAcA,sBAAA,CAAM,UAAU,IAAI,CAAA;AAE3E,EAAA,MAAM,QAAA,GAAW,SAAA,CAAU,IAAA,CAAK,IAAI,CAAA;AACpC,EAAA,MAAM,KAAA,GAAQ,MAAA,GAAS,SAAA,CAAU,QAAQ,CAAA,GAAI,QAAA;AAE7C,EAAA,IAAI,MAAA,EAAQ;AAEV,IAAA,OAAOA,sBAAA,CAAM,cAAc,MAAA,EAAQ;AAAA,MACjC,GAAA,EAAK,YAAA;AAAA,MACL,IAAA,EAAM,wBAAwB,SAAS,CAAA,CAAA;AAAA,MACvC,WAAA,EAAa;AAAA,KACd,CAAA;AAAA,EACH;AAGA,EAAA,OAAOA,sBAAA,CAAM,cAAc,OAAA,EAAS;AAAA,IAClC,uBAAA,EAAyB,EAAE,MAAA,EAAQ,KAAA,EAAM;AAAA,IACzC,eAAA,EAAiB;AAAA,GAClB,CAAA;AACH;AAYO,SAAS,aAAa,OAAA,EAAyB;AAGpD,EAAA,OAAO,OAAA;AACT;AAMA,SAAS,YAAY,QAAA,EAAiC;AACpD,EAAA,IAAI;AACF,IAAA,IAAIC,mBAAA,CAAG,UAAA,CAAW,QAAQ,CAAA,EAAG;AAC3B,MAAA,OAAOA,mBAAA,CAAG,YAAA,CAAa,QAAA,EAAU,OAAO,CAAA;AAAA,IAC1C;AAAA,EACF,CAAA,CAAA,OAAQ,CAAA,EAAA;AAAA,EAER;AACA,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,gBAAgB,KAAA,EAAuB;AAC9C,EAAA,IAAI,KAAA,KAAU,KAAK,OAAO,WAAA;AAC1B,EAAA,IAAI,KAAA,KAAU,YAAY,OAAO,aAAA;AACjC,EAAA,OAAO,CAAA,EAAG,MAAM,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAA,CAAE,OAAA,CAAQ,KAAA,EAAO,GAAG,CAAC,CAAA,IAAA,CAAA;AACxD;AAEA,SAAS,UAAU,GAAA,EAAqB;AACtC,EAAA,OAAO,GAAA,CACJ,QAAQ,iCAAA,EAAmC,EAAE,EAC7C,OAAA,CAAQ,MAAA,EAAQ,GAAG,CAAA,CACnB,OAAA,CAAQ,YAAY,GAAG,CAAA,CACvB,QAAQ,UAAA,EAAY,GAAG,EACvB,OAAA,CAAQ,UAAA,EAAY,GAAG,CAAA,CACvB,IAAA,EAAK;AACV","file":"css.cjs","sourcesContent":["/**\n * tailwind-styled-v4 — CSS Injector (React Server Component)\n *\n * Inject CSS yang sudah di-generate per-route langsung ke <head>.\n * Dipakai di Next.js App Router layout atau page.\n *\n * Di server component — inject inline CSS, zero client JS.\n * Streaming friendly — CSS di-emit bersamaan dengan HTML.\n *\n * Usage:\n * // app/layout.tsx\n * import { TwCssInjector } from \"tailwind-styled-v4/css\"\n * export default function Layout({ children }) {\n * return <html><head><TwCssInjector/></head><body>{children}</body></html>\n * }\n */\n\nimport fs from \"node:fs\"\nimport path from \"node:path\"\nimport React from \"react\"\n\ninterface CssInjectorProps {\n /** Override CSS directory. Default: .next/static/css/tw */\n cssDir?: string\n /** Specific route to inject. Default: auto-detect dari headers */\n route?: string\n /** Inject global CSS juga. Default: true */\n includeGlobal?: boolean\n /** Minify inline CSS. Default: true */\n minify?: boolean\n /** Add <link> tag instead of inline <style> untuk cached CSS */\n asLink?: boolean\n}\n\n/**\n * Server Component — inject route-specific CSS into <head>.\n * No client JS, no hydration overhead.\n */\nexport async function TwCssInjector({\n cssDir,\n route,\n includeGlobal = true,\n minify = true,\n asLink = false,\n}: CssInjectorProps): Promise<React.ReactElement> {\n const resolvedDir = cssDir ?? path.join(process.cwd(), \".next\", \"static\", \"css\", \"tw\")\n\n const cssChunks: string[] = []\n\n // 1. Global CSS (base styles, reset)\n if (includeGlobal) {\n const globalCss = loadCssFile(path.join(resolvedDir, \"_global.css\"))\n if (globalCss) cssChunks.push(globalCss)\n }\n\n // 2. Route-specific CSS\n const targetRoute = route ?? \"/\"\n const routeFile = routeToFilename(targetRoute)\n const routeCss = loadCssFile(path.join(resolvedDir, routeFile))\n if (routeCss) cssChunks.push(routeCss)\n\n if (cssChunks.length === 0) return React.createElement(React.Fragment, null)\n\n const combined = cssChunks.join(\"\\n\")\n const final = minify ? minifyCss(combined) : combined\n\n if (asLink) {\n // Return <link> tag — CSS cached by browser\n return React.createElement(\"link\", {\n rel: \"stylesheet\",\n href: `/_next/static/css/tw/${routeFile}`,\n crossOrigin: \"anonymous\",\n })\n }\n\n // Inline <style> — zero network request, fastest FCP\n return React.createElement(\"style\", {\n dangerouslySetInnerHTML: { __html: final },\n \"data-tw-route\": targetRoute,\n })\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Hook for client components\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Lightweight hook to get current route's CSS classes.\n * Useful for dynamic class injection in client components.\n *\n * Returns empty string on server (SSR) — CSS already injected by TwCssInjector.\n */\nexport function useTwClasses(classes: string): string {\n // In client environment, return classes as-is\n // CSS is already handled by TwCssInjector at server level\n return classes\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Helpers\n// ─────────────────────────────────────────────────────────────────────────────\n\nfunction loadCssFile(filepath: string): string | null {\n try {\n if (fs.existsSync(filepath)) {\n return fs.readFileSync(filepath, \"utf-8\")\n }\n } catch {\n // file not found or unreadable\n }\n return null\n}\n\nfunction routeToFilename(route: string): string {\n if (route === \"/\") return \"index.css\"\n if (route === \"__global\") return \"_global.css\"\n return `${route.replace(/^\\//, \"\").replace(/\\//g, \"_\")}.css`\n}\n\nfunction minifyCss(css: string): string {\n return css\n .replace(/\\/\\*[^*]*\\*+([^/*][^*]*\\*+)*\\//g, \"\")\n .replace(/\\s+/g, \" \")\n .replace(/\\s*{\\s*/g, \"{\")\n .replace(/\\s*}\\s*/g, \"}\")\n .replace(/\\s*;\\s*/g, \";\")\n .trim()\n}\n"]}
package/dist/css.d.cts DELETED
@@ -1,45 +0,0 @@
1
- import React from 'react';
2
-
3
- /**
4
- * tailwind-styled-v4 — CSS Injector (React Server Component)
5
- *
6
- * Inject CSS yang sudah di-generate per-route langsung ke <head>.
7
- * Dipakai di Next.js App Router layout atau page.
8
- *
9
- * Di server component — inject inline CSS, zero client JS.
10
- * Streaming friendly — CSS di-emit bersamaan dengan HTML.
11
- *
12
- * Usage:
13
- * // app/layout.tsx
14
- * import { TwCssInjector } from "tailwind-styled-v4/css"
15
- * export default function Layout({ children }) {
16
- * return <html><head><TwCssInjector/></head><body>{children}</body></html>
17
- * }
18
- */
19
-
20
- interface CssInjectorProps {
21
- /** Override CSS directory. Default: .next/static/css/tw */
22
- cssDir?: string;
23
- /** Specific route to inject. Default: auto-detect dari headers */
24
- route?: string;
25
- /** Inject global CSS juga. Default: true */
26
- includeGlobal?: boolean;
27
- /** Minify inline CSS. Default: true */
28
- minify?: boolean;
29
- /** Add <link> tag instead of inline <style> untuk cached CSS */
30
- asLink?: boolean;
31
- }
32
- /**
33
- * Server Component — inject route-specific CSS into <head>.
34
- * No client JS, no hydration overhead.
35
- */
36
- declare function TwCssInjector({ cssDir, route, includeGlobal, minify, asLink, }: CssInjectorProps): Promise<React.ReactElement>;
37
- /**
38
- * Lightweight hook to get current route's CSS classes.
39
- * Useful for dynamic class injection in client components.
40
- *
41
- * Returns empty string on server (SSR) — CSS already injected by TwCssInjector.
42
- */
43
- declare function useTwClasses(classes: string): string;
44
-
45
- export { TwCssInjector, useTwClasses };
package/dist/css.d.ts DELETED
@@ -1,45 +0,0 @@
1
- import React from 'react';
2
-
3
- /**
4
- * tailwind-styled-v4 — CSS Injector (React Server Component)
5
- *
6
- * Inject CSS yang sudah di-generate per-route langsung ke <head>.
7
- * Dipakai di Next.js App Router layout atau page.
8
- *
9
- * Di server component — inject inline CSS, zero client JS.
10
- * Streaming friendly — CSS di-emit bersamaan dengan HTML.
11
- *
12
- * Usage:
13
- * // app/layout.tsx
14
- * import { TwCssInjector } from "tailwind-styled-v4/css"
15
- * export default function Layout({ children }) {
16
- * return <html><head><TwCssInjector/></head><body>{children}</body></html>
17
- * }
18
- */
19
-
20
- interface CssInjectorProps {
21
- /** Override CSS directory. Default: .next/static/css/tw */
22
- cssDir?: string;
23
- /** Specific route to inject. Default: auto-detect dari headers */
24
- route?: string;
25
- /** Inject global CSS juga. Default: true */
26
- includeGlobal?: boolean;
27
- /** Minify inline CSS. Default: true */
28
- minify?: boolean;
29
- /** Add <link> tag instead of inline <style> untuk cached CSS */
30
- asLink?: boolean;
31
- }
32
- /**
33
- * Server Component — inject route-specific CSS into <head>.
34
- * No client JS, no hydration overhead.
35
- */
36
- declare function TwCssInjector({ cssDir, route, includeGlobal, minify, asLink, }: CssInjectorProps): Promise<React.ReactElement>;
37
- /**
38
- * Lightweight hook to get current route's CSS classes.
39
- * Useful for dynamic class injection in client components.
40
- *
41
- * Returns empty string on server (SSR) — CSS already injected by TwCssInjector.
42
- */
43
- declare function useTwClasses(classes: string): string;
44
-
45
- export { TwCssInjector, useTwClasses };
package/dist/css.js DELETED
@@ -1,62 +0,0 @@
1
- import fs from 'fs';
2
- import path from 'path';
3
- import React from 'react';
4
-
5
- /* tailwind-styled-v4 v4 | MIT | https://github.com/dictionar32/tailwind-styled-v4 */
6
-
7
- async function TwCssInjector({
8
- cssDir,
9
- route,
10
- includeGlobal = true,
11
- minify = true,
12
- asLink = false
13
- }) {
14
- const resolvedDir = cssDir != null ? cssDir : path.join(process.cwd(), ".next", "static", "css", "tw");
15
- const cssChunks = [];
16
- if (includeGlobal) {
17
- const globalCss = loadCssFile(path.join(resolvedDir, "_global.css"));
18
- if (globalCss) cssChunks.push(globalCss);
19
- }
20
- const targetRoute = route != null ? route : "/";
21
- const routeFile = routeToFilename(targetRoute);
22
- const routeCss = loadCssFile(path.join(resolvedDir, routeFile));
23
- if (routeCss) cssChunks.push(routeCss);
24
- if (cssChunks.length === 0) return React.createElement(React.Fragment, null);
25
- const combined = cssChunks.join("\n");
26
- const final = minify ? minifyCss(combined) : combined;
27
- if (asLink) {
28
- return React.createElement("link", {
29
- rel: "stylesheet",
30
- href: `/_next/static/css/tw/${routeFile}`,
31
- crossOrigin: "anonymous"
32
- });
33
- }
34
- return React.createElement("style", {
35
- dangerouslySetInnerHTML: { __html: final },
36
- "data-tw-route": targetRoute
37
- });
38
- }
39
- function useTwClasses(classes) {
40
- return classes;
41
- }
42
- function loadCssFile(filepath) {
43
- try {
44
- if (fs.existsSync(filepath)) {
45
- return fs.readFileSync(filepath, "utf-8");
46
- }
47
- } catch (e) {
48
- }
49
- return null;
50
- }
51
- function routeToFilename(route) {
52
- if (route === "/") return "index.css";
53
- if (route === "__global") return "_global.css";
54
- return `${route.replace(/^\//, "").replace(/\//g, "_")}.css`;
55
- }
56
- function minifyCss(css) {
57
- return css.replace(/\/\*[^*]*\*+([^/*][^*]*\*+)*\//g, "").replace(/\s+/g, " ").replace(/\s*{\s*/g, "{").replace(/\s*}\s*/g, "}").replace(/\s*;\s*/g, ";").trim();
58
- }
59
-
60
- export { TwCssInjector, useTwClasses };
61
- //# sourceMappingURL=css.js.map
62
- //# sourceMappingURL=css.js.map
package/dist/css.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../runtime-css/src/CssInjector.tsx"],"names":[],"mappings":";;;;;;AAsCA,eAAsB,aAAA,CAAc;AAAA,EAClC,MAAA;AAAA,EACA,KAAA;AAAA,EACA,aAAA,GAAgB,IAAA;AAAA,EAChB,MAAA,GAAS,IAAA;AAAA,EACT,MAAA,GAAS;AACX,CAAA,EAAkD;AAChD,EAAA,MAAM,WAAA,GAAc,MAAA,IAAA,IAAA,GAAA,MAAA,GAAU,IAAA,CAAK,IAAA,CAAK,OAAA,CAAQ,KAAI,EAAG,OAAA,EAAS,QAAA,EAAU,KAAA,EAAO,IAAI,CAAA;AAErF,EAAA,MAAM,YAAsB,EAAC;AAG7B,EAAA,IAAI,aAAA,EAAe;AACjB,IAAA,MAAM,YAAY,WAAA,CAAY,IAAA,CAAK,IAAA,CAAK,WAAA,EAAa,aAAa,CAAC,CAAA;AACnE,IAAA,IAAI,SAAA,EAAW,SAAA,CAAU,IAAA,CAAK,SAAS,CAAA;AAAA,EACzC;AAGA,EAAA,MAAM,cAAc,KAAA,IAAA,IAAA,GAAA,KAAA,GAAS,GAAA;AAC7B,EAAA,MAAM,SAAA,GAAY,gBAAgB,WAAW,CAAA;AAC7C,EAAA,MAAM,WAAW,WAAA,CAAY,IAAA,CAAK,IAAA,CAAK,WAAA,EAAa,SAAS,CAAC,CAAA;AAC9D,EAAA,IAAI,QAAA,EAAU,SAAA,CAAU,IAAA,CAAK,QAAQ,CAAA;AAErC,EAAA,IAAI,SAAA,CAAU,WAAW,CAAA,EAAG,OAAO,MAAM,aAAA,CAAc,KAAA,CAAM,UAAU,IAAI,CAAA;AAE3E,EAAA,MAAM,QAAA,GAAW,SAAA,CAAU,IAAA,CAAK,IAAI,CAAA;AACpC,EAAA,MAAM,KAAA,GAAQ,MAAA,GAAS,SAAA,CAAU,QAAQ,CAAA,GAAI,QAAA;AAE7C,EAAA,IAAI,MAAA,EAAQ;AAEV,IAAA,OAAO,KAAA,CAAM,cAAc,MAAA,EAAQ;AAAA,MACjC,GAAA,EAAK,YAAA;AAAA,MACL,IAAA,EAAM,wBAAwB,SAAS,CAAA,CAAA;AAAA,MACvC,WAAA,EAAa;AAAA,KACd,CAAA;AAAA,EACH;AAGA,EAAA,OAAO,KAAA,CAAM,cAAc,OAAA,EAAS;AAAA,IAClC,uBAAA,EAAyB,EAAE,MAAA,EAAQ,KAAA,EAAM;AAAA,IACzC,eAAA,EAAiB;AAAA,GAClB,CAAA;AACH;AAYO,SAAS,aAAa,OAAA,EAAyB;AAGpD,EAAA,OAAO,OAAA;AACT;AAMA,SAAS,YAAY,QAAA,EAAiC;AACpD,EAAA,IAAI;AACF,IAAA,IAAI,EAAA,CAAG,UAAA,CAAW,QAAQ,CAAA,EAAG;AAC3B,MAAA,OAAO,EAAA,CAAG,YAAA,CAAa,QAAA,EAAU,OAAO,CAAA;AAAA,IAC1C;AAAA,EACF,CAAA,CAAA,OAAQ,CAAA,EAAA;AAAA,EAER;AACA,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,gBAAgB,KAAA,EAAuB;AAC9C,EAAA,IAAI,KAAA,KAAU,KAAK,OAAO,WAAA;AAC1B,EAAA,IAAI,KAAA,KAAU,YAAY,OAAO,aAAA;AACjC,EAAA,OAAO,CAAA,EAAG,MAAM,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAA,CAAE,OAAA,CAAQ,KAAA,EAAO,GAAG,CAAC,CAAA,IAAA,CAAA;AACxD;AAEA,SAAS,UAAU,GAAA,EAAqB;AACtC,EAAA,OAAO,GAAA,CACJ,QAAQ,iCAAA,EAAmC,EAAE,EAC7C,OAAA,CAAQ,MAAA,EAAQ,GAAG,CAAA,CACnB,OAAA,CAAQ,YAAY,GAAG,CAAA,CACvB,QAAQ,UAAA,EAAY,GAAG,EACvB,OAAA,CAAQ,UAAA,EAAY,GAAG,CAAA,CACvB,IAAA,EAAK;AACV","file":"css.js","sourcesContent":["/**\n * tailwind-styled-v4 — CSS Injector (React Server Component)\n *\n * Inject CSS yang sudah di-generate per-route langsung ke <head>.\n * Dipakai di Next.js App Router layout atau page.\n *\n * Di server component — inject inline CSS, zero client JS.\n * Streaming friendly — CSS di-emit bersamaan dengan HTML.\n *\n * Usage:\n * // app/layout.tsx\n * import { TwCssInjector } from \"tailwind-styled-v4/css\"\n * export default function Layout({ children }) {\n * return <html><head><TwCssInjector/></head><body>{children}</body></html>\n * }\n */\n\nimport fs from \"node:fs\"\nimport path from \"node:path\"\nimport React from \"react\"\n\ninterface CssInjectorProps {\n /** Override CSS directory. Default: .next/static/css/tw */\n cssDir?: string\n /** Specific route to inject. Default: auto-detect dari headers */\n route?: string\n /** Inject global CSS juga. Default: true */\n includeGlobal?: boolean\n /** Minify inline CSS. Default: true */\n minify?: boolean\n /** Add <link> tag instead of inline <style> untuk cached CSS */\n asLink?: boolean\n}\n\n/**\n * Server Component — inject route-specific CSS into <head>.\n * No client JS, no hydration overhead.\n */\nexport async function TwCssInjector({\n cssDir,\n route,\n includeGlobal = true,\n minify = true,\n asLink = false,\n}: CssInjectorProps): Promise<React.ReactElement> {\n const resolvedDir = cssDir ?? path.join(process.cwd(), \".next\", \"static\", \"css\", \"tw\")\n\n const cssChunks: string[] = []\n\n // 1. Global CSS (base styles, reset)\n if (includeGlobal) {\n const globalCss = loadCssFile(path.join(resolvedDir, \"_global.css\"))\n if (globalCss) cssChunks.push(globalCss)\n }\n\n // 2. Route-specific CSS\n const targetRoute = route ?? \"/\"\n const routeFile = routeToFilename(targetRoute)\n const routeCss = loadCssFile(path.join(resolvedDir, routeFile))\n if (routeCss) cssChunks.push(routeCss)\n\n if (cssChunks.length === 0) return React.createElement(React.Fragment, null)\n\n const combined = cssChunks.join(\"\\n\")\n const final = minify ? minifyCss(combined) : combined\n\n if (asLink) {\n // Return <link> tag — CSS cached by browser\n return React.createElement(\"link\", {\n rel: \"stylesheet\",\n href: `/_next/static/css/tw/${routeFile}`,\n crossOrigin: \"anonymous\",\n })\n }\n\n // Inline <style> — zero network request, fastest FCP\n return React.createElement(\"style\", {\n dangerouslySetInnerHTML: { __html: final },\n \"data-tw-route\": targetRoute,\n })\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Hook for client components\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Lightweight hook to get current route's CSS classes.\n * Useful for dynamic class injection in client components.\n *\n * Returns empty string on server (SSR) — CSS already injected by TwCssInjector.\n */\nexport function useTwClasses(classes: string): string {\n // In client environment, return classes as-is\n // CSS is already handled by TwCssInjector at server level\n return classes\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Helpers\n// ─────────────────────────────────────────────────────────────────────────────\n\nfunction loadCssFile(filepath: string): string | null {\n try {\n if (fs.existsSync(filepath)) {\n return fs.readFileSync(filepath, \"utf-8\")\n }\n } catch {\n // file not found or unreadable\n }\n return null\n}\n\nfunction routeToFilename(route: string): string {\n if (route === \"/\") return \"index.css\"\n if (route === \"__global\") return \"_global.css\"\n return `${route.replace(/^\\//, \"\").replace(/\\//g, \"_\")}.css`\n}\n\nfunction minifyCss(css: string): string {\n return css\n .replace(/\\/\\*[^*]*\\*+([^/*][^*]*\\*+)*\\//g, \"\")\n .replace(/\\s+/g, \" \")\n .replace(/\\s*{\\s*/g, \"{\")\n .replace(/\\s*}\\s*/g, \"}\")\n .replace(/\\s*;\\s*/g, \";\")\n .trim()\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../devtools/src/index.tsx"],"names":["React","useState","useEffect","useCallback","_a","useRef"],"mappings":"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","file":"devtools.cjs","sourcesContent":["/**\n * tailwind-styled-v4 — DevTools v3\n *\n * Panels:\n * 🔍 Inspector — hover element, see classes + variants\n * ⚡ State — list all reactive state components + active states\n * 📦 Container — list container query components + active breakpoints\n * 🎨 Tokens — live token editor with instant preview\n * 📊 Analyzer — duplicate patterns + unused variants (runtime scan)\n *\n * Keyboard shortcuts:\n * Ctrl+Shift+D → toggle devtools\n * Escape → close\n * 1-5 → switch panels\n */\n\n\"use client\"\n\nimport React, { useCallback, useEffect, useRef, useState } from \"react\"\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Types\n// ─────────────────────────────────────────────────────────────────────────────\n\ninterface InspectedElement {\n componentName: string\n element: HTMLElement\n rect: DOMRect\n twClasses: string[]\n variantProps: Record<string, string>\n atomicMap: Record<string, string>\n rawClassName: string\n stateNames: string[]\n activeStates: Record<string, string>\n containerBps: string[]\n}\n\ntype Panel = \"inspector\" | \"state\" | \"container\" | \"tokens\" | \"analyzer\"\n\ninterface DevToolsState {\n open: boolean\n panel: Panel\n pinned: boolean\n inspected: InspectedElement | null\n position: { x: number; y: number }\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Helpers\n// ─────────────────────────────────────────────────────────────────────────────\n\nfunction parseDataTw(dataTw: string | null): { name: string; classes: string[] } {\n if (!dataTw) return { name: \"Unknown\", classes: [] }\n const colonIdx = dataTw.indexOf(\":\")\n if (colonIdx === -1) return { name: dataTw, classes: [] }\n const name = dataTw.slice(0, colonIdx)\n const classes = dataTw\n .slice(colonIdx + 1)\n .split(/\\s+/)\n .filter(Boolean)\n return { name, classes }\n}\n\nfunction parseVariantAttr(v: string | null): Record<string, string> {\n if (!v) return {}\n try {\n return JSON.parse(v)\n } catch {\n return {}\n }\n}\n\nfunction findNearestTwElement(el: HTMLElement): HTMLElement | null {\n let cur: HTMLElement | null = el\n while (cur) {\n if (cur.dataset?.tw) return cur\n cur = cur.parentElement\n }\n return null\n}\n\nfunction getAtomicMap(classes: string[]): Record<string, string> {\n const registry = (window as any).__TW_REGISTRY__ as Record<string, string> | undefined\n if (!registry) return {}\n const map: Record<string, string> = {}\n for (const cls of classes) {\n if (registry[cls]) map[cls] = registry[cls]\n }\n return map\n}\n\nfunction getActiveStates(el: HTMLElement): Record<string, string> {\n const states: Record<string, string> = {}\n for (const attr of el.attributes) {\n if (attr.name.startsWith(\"data-\")) {\n states[attr.name.replace(\"data-\", \"\")] = attr.value\n }\n }\n return states\n}\n\nfunction getStateNames(el: HTMLElement): string[] {\n const registry = (window as any).__TW_STATE_REGISTRY__ as Map<string, any> | undefined\n if (!registry) return []\n for (const [id, entry] of registry) {\n if (el.classList.contains(id)) return entry.states\n }\n return []\n}\n\nfunction getContainerBps(el: HTMLElement): string[] {\n const registry = (window as any).__TW_CONTAINER_REGISTRY__ as Map<string, any> | undefined\n if (!registry) return []\n for (const [id, entry] of registry) {\n if (el.classList.contains(id)) {\n return entry.breakpoints.map((bp: any) => bp.minWidth)\n }\n }\n return []\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Panel: Inspector\n// ─────────────────────────────────────────────────────────────────────────────\n\nfunction InspectorPanel({\n inspected,\n position: _position,\n pinned: _pinned,\n}: {\n inspected: InspectedElement | null\n position: { x: number; y: number }\n pinned: boolean\n}) {\n if (!inspected) {\n return React.createElement(\n \"div\",\n { style: S.emptyPanel },\n React.createElement(\"span\", { style: { opacity: 0.4 } }, \"Hover an element to inspect\")\n )\n }\n\n return React.createElement(\n \"div\",\n { style: S.scrollArea },\n // Variant props\n Object.keys(inspected.variantProps).length > 0 &&\n React.createElement(\n \"div\",\n { style: S.section },\n React.createElement(\"div\", { style: S.sectionTitle }, \"Variants\"),\n Object.entries(inspected.variantProps).map(([k, v]) =>\n React.createElement(\n \"div\",\n { key: k, style: S.row },\n React.createElement(\"span\", { style: S.varKey }, k),\n React.createElement(\"span\", { style: S.varValue }, `\"${v}\"`)\n )\n )\n ),\n\n // Active states\n Object.keys(inspected.activeStates).length > 0 &&\n React.createElement(\n \"div\",\n { style: S.section },\n React.createElement(\"div\", { style: S.sectionTitle }, \"Active Data Attrs\"),\n Object.entries(inspected.activeStates).map(([k, v]) =>\n React.createElement(\n \"div\",\n { key: k, style: S.row },\n React.createElement(\"code\", { style: { ...S.varKey, color: \"#f59e0b\" } }, `data-${k}`),\n React.createElement(\"span\", { style: { ...S.varValue, color: \"#34d399\" } }, `\"${v}\"`)\n )\n )\n ),\n\n // State names\n inspected.stateNames.length > 0 &&\n React.createElement(\n \"div\",\n { style: S.section },\n React.createElement(\"div\", { style: S.sectionTitle }, \"Reactive States\"),\n React.createElement(\n \"div\",\n { style: S.classGrid },\n inspected.stateNames.map((s) =>\n React.createElement(\n \"code\",\n {\n key: s,\n style: {\n ...S.classChip,\n background: inspected.activeStates[s] === \"true\" ? \"#065f46\" : \"#18181b\",\n borderColor: inspected.activeStates[s] === \"true\" ? \"#34d399\" : \"#27272a\",\n },\n },\n s\n )\n )\n )\n ),\n\n // Container breakpoints\n inspected.containerBps.length > 0 &&\n React.createElement(\n \"div\",\n { style: S.section },\n React.createElement(\"div\", { style: S.sectionTitle }, \"Container Breakpoints\"),\n React.createElement(\n \"div\",\n { style: S.classGrid },\n inspected.containerBps.map((bp) =>\n React.createElement(\n \"code\",\n { key: bp, style: { ...S.classChip, color: \"#818cf8\" } },\n bp\n )\n )\n )\n ),\n\n // Tailwind classes\n inspected.twClasses.length > 0 &&\n React.createElement(\n \"div\",\n { style: S.section },\n React.createElement(\"div\", { style: S.sectionTitle }, \"Classes\"),\n React.createElement(\n \"div\",\n { style: S.classGrid },\n inspected.twClasses.map((cls) =>\n React.createElement(\n \"code\",\n { key: cls, style: S.classChip, title: inspected.atomicMap[cls] },\n cls\n )\n )\n )\n ),\n\n // Copy\n React.createElement(\n \"button\",\n {\n style: S.copyBtn,\n onClick: () => {\n navigator.clipboard?.writeText(\n JSON.stringify(\n {\n component: inspected.componentName,\n variants: inspected.variantProps,\n states: inspected.activeStates,\n classes: inspected.twClasses,\n },\n null,\n 2\n )\n )\n },\n },\n \"Copy to clipboard\"\n )\n )\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Panel: State Registry\n// ─────────────────────────────────────────────────────────────────────────────\n\nfunction StatePanel() {\n const [entries, setEntries] = useState<any[]>([])\n\n useEffect(() => {\n const refresh = () => {\n const reg = (window as any).__TW_STATE_REGISTRY__ as Map<string, any> | undefined\n setEntries(reg ? Array.from(reg.values()) : [])\n }\n refresh()\n const interval = setInterval(refresh, 1000)\n return () => clearInterval(interval)\n }, [])\n\n if (entries.length === 0) {\n return React.createElement(\n \"div\",\n { style: S.emptyPanel },\n React.createElement(\n \"span\",\n { style: { opacity: 0.4 } },\n \"No state-enabled components found.\"\n ),\n React.createElement(\"br\", null),\n React.createElement(\n \"span\",\n { style: { opacity: 0.3, fontSize: \"11px\" } },\n 'Use tw.button({ state: { active: \"...\" } }) to register.'\n )\n )\n }\n\n return React.createElement(\n \"div\",\n { style: S.scrollArea },\n entries.map((entry) =>\n React.createElement(\n \"div\",\n { key: entry.id, style: S.section },\n React.createElement(\n \"div\",\n { style: S.sectionTitle },\n React.createElement(\"span\", { style: { color: \"#60a5fa\" } }, entry.tag.toUpperCase()),\n React.createElement(\n \"span\",\n { style: { marginLeft: \"8px\", color: \"#52525b\", fontSize: \"10px\" } },\n entry.id\n )\n ),\n React.createElement(\n \"div\",\n { style: S.classGrid },\n entry.states.map((s: string) =>\n React.createElement(\n \"code\",\n { key: s, style: { ...S.classChip, color: \"#f59e0b\" } },\n `data-${s}`\n )\n )\n ),\n React.createElement(\n \"div\",\n { style: { ...S.row, marginTop: \"4px\" } },\n React.createElement(\n \"span\",\n {\n style: {\n ...S.sectionTitle,\n marginBottom: 0,\n color: entry.cssInjected ? \"#34d399\" : \"#ef4444\",\n },\n },\n entry.cssInjected ? \"● CSS injected\" : \"○ CSS pending\"\n )\n )\n )\n )\n )\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Panel: Container Query Registry\n// ─────────────────────────────────────────────────────────────────────────────\n\nfunction ContainerPanel() {\n const [entries, setEntries] = useState<any[]>([])\n\n useEffect(() => {\n const refresh = () => {\n const reg = (window as any).__TW_CONTAINER_REGISTRY__ as Map<string, any> | undefined\n setEntries(reg ? Array.from(reg.values()) : [])\n }\n refresh()\n const interval = setInterval(refresh, 1000)\n return () => clearInterval(interval)\n }, [])\n\n if (entries.length === 0) {\n return React.createElement(\n \"div\",\n { style: S.emptyPanel },\n React.createElement(\n \"span\",\n { style: { opacity: 0.4 } },\n \"No container query components found.\"\n ),\n React.createElement(\"br\", null),\n React.createElement(\n \"span\",\n { style: { opacity: 0.3, fontSize: \"11px\" } },\n 'Use tw.div({ container: { md: \"flex-row\" } }) to register.'\n )\n )\n }\n\n return React.createElement(\n \"div\",\n { style: S.scrollArea },\n entries.map((entry) =>\n React.createElement(\n \"div\",\n { key: entry.id, style: S.section },\n React.createElement(\n \"div\",\n { style: S.sectionTitle },\n React.createElement(\"span\", { style: { color: \"#60a5fa\" } }, entry.tag.toUpperCase()),\n entry.containerName &&\n React.createElement(\n \"span\",\n { style: { marginLeft: \"6px\", color: \"#818cf8\" } },\n `[${entry.containerName}]`\n ),\n React.createElement(\n \"span\",\n { style: { marginLeft: \"8px\", color: \"#52525b\", fontSize: \"10px\" } },\n entry.id\n )\n ),\n React.createElement(\n \"div\",\n null,\n entry.breakpoints.map((bp: any, i: number) =>\n React.createElement(\n \"div\",\n { key: i, style: { ...S.row, marginBottom: \"2px\" } },\n React.createElement(\n \"code\",\n { style: { color: \"#818cf8\", fontSize: \"11px\" } },\n `≥ ${bp.minWidth}`\n ),\n React.createElement(\n \"span\",\n { style: { color: \"#6b7280\", fontSize: \"11px\" } },\n bp.classes\n )\n )\n )\n )\n )\n )\n )\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Panel: Live Token Editor\n// ─────────────────────────────────────────────────────────────────────────────\n\nfunction TokensPanel() {\n const [tokens, setTokens_] = useState<Record<string, string>>({})\n\n useEffect(() => {\n const engine = (window as any).__TW_TOKEN_ENGINE__\n if (!engine) return\n\n setTokens_(engine.getTokens())\n const unsub = engine.subscribe((t: Record<string, string>) => setTokens_({ ...t }))\n return unsub\n }, [])\n\n const entries = Object.entries(tokens)\n\n if (entries.length === 0) {\n return React.createElement(\n \"div\",\n { style: S.emptyPanel },\n React.createElement(\"span\", { style: { opacity: 0.4 } }, \"No live tokens registered.\"),\n React.createElement(\"br\", null),\n React.createElement(\n \"span\",\n { style: { opacity: 0.3, fontSize: \"11px\" } },\n 'Use liveToken({ primary: \"#3b82f6\" }) to register tokens.'\n )\n )\n }\n\n return React.createElement(\n \"div\",\n { style: S.scrollArea },\n React.createElement(\n \"div\",\n { style: { ...S.sectionTitle, padding: \"8px 12px 4px\", color: \"#52525b\" } },\n \"Click color to edit · Changes apply instantly\"\n ),\n entries.map(([name, value]) => {\n const isColor = value.startsWith(\"#\") || value.startsWith(\"rgb\") || value.startsWith(\"hsl\")\n return React.createElement(\n \"div\",\n { key: name, style: { ...S.row, padding: \"6px 12px\", borderBottom: \"1px solid #18181b\" } },\n React.createElement(\n \"div\",\n { style: { display: \"flex\", alignItems: \"center\", gap: \"8px\" } },\n isColor &&\n React.createElement(\"div\", {\n style: {\n width: \"16px\",\n height: \"16px\",\n borderRadius: \"3px\",\n background: value,\n border: \"1px solid #27272a\",\n flexShrink: 0,\n },\n }),\n React.createElement(\"span\", { style: { color: \"#a1a1aa\", fontSize: \"12px\" } }, name)\n ),\n isColor\n ? React.createElement(\"input\", {\n type: \"color\",\n defaultValue: value.startsWith(\"#\") ? value : \"#000000\",\n style: {\n width: \"52px\",\n height: \"22px\",\n border: \"none\",\n background: \"none\",\n cursor: \"pointer\",\n },\n onChange: (e: React.ChangeEvent<HTMLInputElement>) => {\n const engine = (window as any).__TW_TOKEN_ENGINE__\n if (engine) engine.setToken(name, e.target.value)\n },\n })\n : React.createElement(\"input\", {\n type: \"text\",\n defaultValue: value,\n style: {\n background: \"#18181b\",\n border: \"1px solid #27272a\",\n borderRadius: \"3px\",\n color: \"#e4e4e7\",\n fontSize: \"11px\",\n padding: \"2px 6px\",\n width: \"100px\",\n fontFamily: \"monospace\",\n },\n onBlur: (e: React.FocusEvent<HTMLInputElement>) => {\n const engine = (window as any).__TW_TOKEN_ENGINE__\n if (engine) engine.setToken(name, e.target.value)\n },\n })\n )\n })\n )\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Panel: Runtime Analyzer\n// ─────────────────────────────────────────────────────────────────────────────\n\nfunction AnalyzerPanel() {\n const [scanning, setScanning] = useState(false)\n const [results, setResults] = useState<{\n duplicates: Array<{ pattern: string; count: number; names: string[] }>\n stateCount: number\n containerCount: number\n tokenCount: number\n } | null>(null)\n\n const runScan = useCallback(() => {\n setScanning(true)\n\n // Scan the DOM for tw-registered components\n setTimeout(() => {\n const twEls = document.querySelectorAll(\"[data-tw]\")\n const classMap = new Map<string, string[]>()\n\n for (const el of twEls) {\n const { name, classes } = (() => {\n const dTw = (el as HTMLElement).dataset.tw ?? null\n if (!dTw) return { name: \"?\", classes: [] }\n const ci = dTw.indexOf(\":\")\n return {\n name: ci >= 0 ? dTw.slice(0, ci) : dTw,\n classes:\n ci >= 0\n ? dTw\n .slice(ci + 1)\n .split(/\\s+/)\n .filter(Boolean)\n : [],\n }\n })()\n\n const key = classes.sort().join(\" \")\n if (!classMap.has(key)) classMap.set(key, [])\n classMap.get(key)!.push(name)\n }\n\n const duplicates = Array.from(classMap.entries())\n .filter(([, names]) => names.length > 1)\n .map(([pattern, names]) => ({ pattern, count: names.length, names }))\n .sort((a, b) => b.count - a.count)\n .slice(0, 10)\n\n const stateReg = (window as any).__TW_STATE_REGISTRY__ as Map<string, any> | undefined\n const containerReg = (window as any).__TW_CONTAINER_REGISTRY__ as Map<string, any> | undefined\n const tokenEngine = (window as any).__TW_TOKEN_ENGINE__\n\n setResults({\n duplicates,\n stateCount: stateReg?.size ?? 0,\n containerCount: containerReg?.size ?? 0,\n tokenCount: Object.keys(tokenEngine?.getTokens?.() ?? {}).length,\n })\n setScanning(false)\n }, 100)\n }, [])\n\n return React.createElement(\n \"div\",\n { style: S.scrollArea },\n React.createElement(\n \"div\",\n { style: { padding: \"10px 12px\" } },\n React.createElement(\n \"button\",\n {\n style: { ...S.copyBtn, borderTop: \"none\", color: \"#60a5fa\", fontWeight: \"600\" },\n onClick: runScan,\n disabled: scanning,\n },\n scanning ? \"Scanning DOM...\" : \"▶ Run DOM Scan\"\n ),\n\n results &&\n React.createElement(\n \"div\",\n null,\n // Summary\n React.createElement(\n \"div\",\n { style: S.section },\n React.createElement(\"div\", { style: S.sectionTitle }, \"Summary\"),\n React.createElement(\n \"div\",\n { style: S.row },\n React.createElement(\"span\", { style: S.varKey }, \"State components\"),\n React.createElement(\"span\", { style: S.varValue }, String(results.stateCount))\n ),\n React.createElement(\n \"div\",\n { style: S.row },\n React.createElement(\"span\", { style: S.varKey }, \"Container components\"),\n React.createElement(\"span\", { style: S.varValue }, String(results.containerCount))\n ),\n React.createElement(\n \"div\",\n { style: S.row },\n React.createElement(\"span\", { style: S.varKey }, \"Live tokens\"),\n React.createElement(\"span\", { style: S.varValue }, String(results.tokenCount))\n )\n ),\n\n // Duplicates\n results.duplicates.length > 0\n ? React.createElement(\n \"div\",\n { style: S.section },\n React.createElement(\"div\", { style: S.sectionTitle }, \"Duplicate Class Sets\"),\n results.duplicates.map((d, i) =>\n React.createElement(\n \"div\",\n { key: i, style: { marginBottom: \"8px\" } },\n React.createElement(\n \"div\",\n { style: { color: \"#f59e0b\", fontSize: \"11px\", marginBottom: \"2px\" } },\n d.names.join(\", \")\n ),\n React.createElement(\n \"code\",\n {\n style: {\n color: \"#52525b\",\n fontSize: \"10px\",\n wordBreak: \"break-all\" as const,\n },\n },\n d.pattern.split(\" \").slice(0, 8).join(\" \") +\n (d.pattern.split(\" \").length > 8 ? \"...\" : \"\")\n )\n )\n )\n )\n : results &&\n React.createElement(\n \"div\",\n { style: S.section },\n React.createElement(\n \"span\",\n { style: { color: \"#34d399\", fontSize: \"12px\" } },\n \"✓ No duplicate class sets in current DOM\"\n )\n )\n )\n )\n )\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Main DevTools component\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport function TwDevTools(): React.ReactElement | null {\n if (process.env.NODE_ENV === \"production\") return null\n\n const [state, setState] = useState<DevToolsState>({\n open: false,\n panel: \"inspector\",\n pinned: false,\n inspected: null,\n position: { x: 0, y: 0 },\n })\n\n const overlayRef = useRef<HTMLDivElement>(null)\n const isInspecting = state.open && state.panel === \"inspector\"\n\n // Keyboard shortcuts\n useEffect(() => {\n const onKey = (e: KeyboardEvent) => {\n if (e.ctrlKey && e.shiftKey && e.key === \"D\") {\n e.preventDefault()\n setState((s) => ({ ...s, open: !s.open, inspected: null }))\n }\n if (e.key === \"Escape\")\n setState((s) => ({ ...s, open: false, pinned: false, inspected: null }))\n if (e.key === \"1\") setState((s) => (s.open ? { ...s, panel: \"inspector\" } : s))\n if (e.key === \"2\") setState((s) => (s.open ? { ...s, panel: \"state\" } : s))\n if (e.key === \"3\") setState((s) => (s.open ? { ...s, panel: \"container\" } : s))\n if (e.key === \"4\") setState((s) => (s.open ? { ...s, panel: \"tokens\" } : s))\n if (e.key === \"5\") setState((s) => (s.open ? { ...s, panel: \"analyzer\" } : s))\n }\n window.addEventListener(\"keydown\", onKey)\n return () => window.removeEventListener(\"keydown\", onKey)\n }, [])\n\n // Mouse move — only active on inspector panel\n const onMouseMove = useCallback(\n (e: MouseEvent) => {\n if (!isInspecting || state.pinned) return\n const twEl = findNearestTwElement(e.target as HTMLElement)\n if (!twEl) {\n setState((s) => ({ ...s, inspected: null, position: { x: e.clientX, y: e.clientY } }))\n return\n }\n const { name, classes } = parseDataTw(twEl.dataset.tw ?? null)\n setState((s) => ({\n ...s,\n position: { x: e.clientX, y: e.clientY },\n inspected: {\n componentName: name,\n element: twEl,\n rect: twEl.getBoundingClientRect(),\n twClasses: classes,\n variantProps: parseVariantAttr(twEl.dataset.twVariants ?? null),\n atomicMap: getAtomicMap(classes),\n rawClassName: twEl.className,\n stateNames: getStateNames(twEl),\n activeStates: getActiveStates(twEl),\n containerBps: getContainerBps(twEl),\n },\n }))\n },\n [isInspecting, state.pinned]\n )\n\n const onClick = useCallback(\n (e: MouseEvent) => {\n if (!isInspecting) return\n if (overlayRef.current?.contains(e.target as HTMLElement)) return\n setState((s) => ({ ...s, pinned: !s.pinned && !!s.inspected }))\n },\n [isInspecting]\n )\n\n useEffect(() => {\n if (!isInspecting) return\n window.addEventListener(\"mousemove\", onMouseMove)\n window.addEventListener(\"click\", onClick)\n return () => {\n window.removeEventListener(\"mousemove\", onMouseMove)\n window.removeEventListener(\"click\", onClick)\n }\n }, [isInspecting, onMouseMove, onClick])\n\n // Toggle button\n if (!state.open) {\n return React.createElement(\n \"button\",\n {\n onClick: () => setState((s) => ({ ...s, open: true })),\n style: S.toggleBtn,\n title: \"tailwind-styled-v4 DevTools (Ctrl+Shift+D)\",\n },\n \"🎨\"\n )\n }\n\n const PANELS: Array<{ id: Panel; label: string; icon: string }> = [\n { id: \"inspector\", label: \"Inspector\", icon: \"🔍\" },\n { id: \"state\", label: \"State\", icon: \"⚡\" },\n { id: \"container\", label: \"Container\", icon: \"📦\" },\n { id: \"tokens\", label: \"Tokens\", icon: \"🎨\" },\n { id: \"analyzer\", label: \"Analyzer\", icon: \"📊\" },\n ]\n\n return React.createElement(\n \"div\",\n { style: S.root },\n\n // ── Element highlight (inspector only) ──────────────────────────────\n isInspecting &&\n state.inspected &&\n React.createElement(\"div\", {\n style: {\n ...S.highlight,\n top: state.inspected.rect.top + window.scrollY,\n left: state.inspected.rect.left + window.scrollX,\n width: state.inspected.rect.width,\n height: state.inspected.rect.height,\n },\n }),\n\n // ── Component name label ────────────────────────────────────────────\n isInspecting &&\n state.inspected &&\n React.createElement(\n \"div\",\n {\n style: {\n position: \"absolute\" as const,\n top: state.inspected.rect.top + window.scrollY - 22,\n left: state.inspected.rect.left + window.scrollX,\n background: \"#1e3a5f\",\n color: \"#93c5fd\",\n fontSize: \"11px\",\n padding: \"2px 6px\",\n borderRadius: \"3px 3px 0 0\",\n pointerEvents: \"none\" as const,\n zIndex: 2147483646,\n fontFamily: \"monospace\",\n },\n },\n state.inspected.componentName\n ),\n\n // ── Main DevTools panel ─────────────────────────────────────────────\n React.createElement(\n \"div\",\n {\n ref: overlayRef,\n style:\n state.panel === \"inspector\" && state.inspected\n ? {\n ...S.panel,\n top: Math.min(state.position.y + 16, window.innerHeight - 460),\n left: Math.min(state.position.x + 16, window.innerWidth - 320),\n }\n : {\n ...S.panel,\n top: \"auto\",\n bottom: \"40px\",\n right: \"12px\",\n left: \"auto\",\n },\n },\n\n // Header\n React.createElement(\n \"div\",\n { style: S.header },\n React.createElement(\n \"span\",\n { style: S.componentName },\n state.inspected && state.panel === \"inspector\"\n ? state.inspected.componentName\n : \"tailwind-styled-v4\"\n ),\n React.createElement(\n \"div\",\n { style: S.headerActions },\n state.pinned && React.createElement(\"span\", { style: S.pinBadge }, \"📌\"),\n React.createElement(\n \"button\",\n {\n style: S.closeBtn,\n onClick: () =>\n setState((s) => ({ ...s, open: false, pinned: false, inspected: null })),\n },\n \"✕\"\n )\n )\n ),\n\n // Tab bar\n React.createElement(\n \"div\",\n { style: S.tabBar },\n PANELS.map((p) =>\n React.createElement(\n \"button\",\n {\n key: p.id,\n style: {\n ...S.tab,\n background: state.panel === p.id ? \"#18181b\" : \"none\",\n color: state.panel === p.id ? \"#e4e4e7\" : \"#52525b\",\n borderBottom: state.panel === p.id ? \"2px solid #3b82f6\" : \"2px solid transparent\",\n },\n onClick: () => setState((s) => ({ ...s, panel: p.id })),\n title: `${p.label} (${PANELS.findIndex((x) => x.id === p.id) + 1})`,\n },\n `${p.icon} ${p.label}`\n )\n )\n ),\n\n // Panel content\n state.panel === \"inspector\" &&\n React.createElement(InspectorPanel, {\n inspected: state.inspected,\n position: state.position,\n pinned: state.pinned,\n }),\n state.panel === \"state\" && React.createElement(StatePanel, null),\n state.panel === \"container\" && React.createElement(ContainerPanel, null),\n state.panel === \"tokens\" && React.createElement(TokensPanel, null),\n state.panel === \"analyzer\" && React.createElement(AnalyzerPanel, null)\n ),\n\n // ── Status bar ──────────────────────────────────────────────────────\n React.createElement(\n \"div\",\n { style: S.statusBar },\n React.createElement(\"span\", null, \"🎨 tailwind-styled-v4 DevTools\"),\n React.createElement(\n \"span\",\n { style: { opacity: 0.6, fontSize: \"10px\" } },\n state.pinned\n ? \"Click to unpin\"\n : isInspecting\n ? \"Hover to inspect · Click to pin · 1-5 switch panel · Esc close\"\n : \"Ctrl+Shift+D close · 1-5 switch panel\"\n )\n )\n )\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Styles\n// ─────────────────────────────────────────────────────────────────────────────\n\nconst S = {\n root: {\n position: \"fixed\" as const,\n inset: 0,\n zIndex: 2147483647,\n pointerEvents: \"none\" as const,\n fontFamily: \"ui-monospace, 'JetBrains Mono', monospace\",\n fontSize: \"12px\",\n },\n highlight: {\n position: \"absolute\" as const,\n borderRadius: \"3px\",\n outline: \"2px solid #3b82f6\",\n outlineOffset: \"1px\",\n background: \"rgba(59,130,246,0.08)\",\n pointerEvents: \"none\" as const,\n transition: \"all 0.1s ease\",\n zIndex: 2147483646,\n },\n panel: {\n position: \"fixed\" as const,\n width: 320,\n maxHeight: 480,\n background: \"#0f0f0f\",\n border: \"1px solid #27272a\",\n borderRadius: \"10px\",\n boxShadow: \"0 8px 32px rgba(0,0,0,0.8)\",\n pointerEvents: \"all\" as const,\n zIndex: 2147483647,\n userSelect: \"text\" as const,\n display: \"flex\",\n flexDirection: \"column\" as const,\n },\n header: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n padding: \"8px 12px 6px\",\n borderBottom: \"1px solid #1f1f1f\",\n flexShrink: 0,\n },\n tabBar: {\n display: \"flex\",\n borderBottom: \"1px solid #18181b\",\n flexShrink: 0,\n overflowX: \"auto\" as const,\n },\n tab: {\n background: \"none\",\n border: \"none\",\n cursor: \"pointer\",\n fontSize: \"10px\",\n padding: \"5px 8px\",\n whiteSpace: \"nowrap\" as const,\n fontFamily: \"inherit\",\n transition: \"color 0.1s\",\n pointerEvents: \"all\" as const,\n },\n scrollArea: {\n overflowY: \"auto\" as const,\n flex: 1,\n },\n emptyPanel: {\n padding: \"24px 12px\",\n color: \"#71717a\",\n fontSize: \"12px\",\n textAlign: \"center\" as const,\n lineHeight: 1.6,\n },\n componentName: {\n color: \"#60a5fa\",\n fontWeight: \"bold\" as const,\n fontSize: \"13px\",\n },\n headerActions: {\n display: \"flex\",\n alignItems: \"center\",\n gap: \"6px\",\n },\n pinBadge: { color: \"#fbbf24\", fontSize: \"10px\" },\n closeBtn: {\n background: \"none\",\n border: \"none\",\n color: \"#71717a\",\n cursor: \"pointer\",\n fontSize: \"14px\",\n lineHeight: 1,\n padding: \"2px 4px\",\n pointerEvents: \"all\" as const,\n },\n section: {\n padding: \"8px 12px\",\n borderBottom: \"1px solid #18181b\",\n },\n sectionTitle: {\n color: \"#52525b\",\n fontSize: \"10px\",\n textTransform: \"uppercase\" as const,\n letterSpacing: \"0.08em\",\n marginBottom: \"6px\",\n },\n row: {\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n marginBottom: \"3px\",\n },\n varKey: { color: \"#a1a1aa\" },\n varValue: { color: \"#34d399\", fontWeight: \"bold\" as const },\n classGrid: {\n display: \"flex\",\n flexWrap: \"wrap\" as const,\n gap: \"4px\",\n },\n classChip: {\n background: \"#18181b\",\n border: \"1px solid #27272a\",\n borderRadius: \"4px\",\n padding: \"2px 6px\",\n color: \"#e4e4e7\",\n cursor: \"default\",\n fontSize: \"11px\",\n },\n copyBtn: {\n display: \"block\",\n width: \"100%\",\n background: \"none\",\n border: \"none\",\n borderTop: \"1px solid #18181b\",\n color: \"#52525b\",\n cursor: \"pointer\",\n padding: \"8px 12px\",\n textAlign: \"left\" as const,\n fontSize: \"11px\",\n pointerEvents: \"all\" as const,\n fontFamily: \"inherit\",\n },\n statusBar: {\n position: \"fixed\" as const,\n bottom: 0,\n left: 0,\n right: 0,\n background: \"#1e3a5f\",\n color: \"#93c5fd\",\n fontSize: \"11px\",\n padding: \"4px 12px\",\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n pointerEvents: \"all\" as const,\n zIndex: 2147483647,\n },\n toggleBtn: {\n position: \"fixed\" as const,\n bottom: 12,\n right: 12,\n width: 36,\n height: 36,\n borderRadius: \"50%\",\n background: \"#1e3a5f\",\n border: \"1px solid #3b82f6\",\n color: \"white\",\n cursor: \"pointer\",\n fontSize: \"16px\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n zIndex: 2147483647,\n boxShadow: \"0 2px 8px rgba(0,0,0,0.4)\",\n pointerEvents: \"all\" as const,\n },\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Provider\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport function DevToolsProvider(): React.ReactElement | null {\n if (process.env.NODE_ENV === \"production\") return null\n return React.createElement(TwDevTools)\n}\n"]}