tailwind-styled-v4 5.1.14 → 5.1.15

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.
@@ -1,2 +1 @@
1
- export { batchedInject, flushBatchedCss, getBatchedCssStats, isInjected, resetBatchedCss, syncInject } from '@tailwind-styled/runtime-css/client';
2
- export { useTwClasses } from '@tailwind-styled/runtime-css/server';
1
+ export { TwCssInjector, useTwClasses } from '@tailwind-styled/runtime-css/server';
@@ -1,2 +1 @@
1
- export { batchedInject, flushBatchedCss, getBatchedCssStats, isInjected, resetBatchedCss, syncInject } from '@tailwind-styled/runtime-css/client';
2
- export { useTwClasses } from '@tailwind-styled/runtime-css/server';
1
+ export { TwCssInjector, useTwClasses } from '@tailwind-styled/runtime-css/server';
@@ -1,4 +1,3 @@
1
- "use client";
2
1
  "use strict";
3
2
  var __create = Object.create;
4
3
  var __defProp = Object.defineProperty;
@@ -31,110 +30,70 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
31
30
  // src/umbrella/runtime-css.ts
32
31
  var runtime_css_exports = {};
33
32
  __export(runtime_css_exports, {
34
- batchedInject: () => batchedInject,
35
- flushBatchedCss: () => flushBatchedCss,
36
- getBatchedCssStats: () => getBatchedCssStats,
37
- isInjected: () => isInjected,
38
- resetBatchedCss: () => resetBatchedCss,
39
- syncInject: () => syncInject,
33
+ TwCssInjector: () => TwCssInjector,
40
34
  useTwClasses: () => useTwClasses
41
35
  });
42
36
  module.exports = __toCommonJS(runtime_css_exports);
43
37
 
44
- // packages/domain/runtime-css/dist/batchedInjector.js
45
- var injected = /* @__PURE__ */ new Set();
46
- var pending = [];
47
- var _state = {
48
- rafHandle: null,
49
- styleEl: null
50
- };
51
- function getStyleElement() {
52
- if (_state.styleEl && document.head.contains(_state.styleEl)) return _state.styleEl;
53
- _state.styleEl = document.createElement("style");
54
- _state.styleEl.id = "__tw-runtime-css";
55
- _state.styleEl.setAttribute("data-tw-batched", "true");
56
- document.head.appendChild(_state.styleEl);
57
- return _state.styleEl;
58
- }
59
- function insertRuleToSheet(cssRule) {
60
- const trimmed = cssRule.trim();
61
- if (!trimmed) return;
62
- const el = getStyleElement();
63
- const sheet = el.sheet;
64
- if (sheet) {
65
- try {
66
- sheet.insertRule(trimmed, sheet.cssRules.length);
67
- return;
68
- } catch {
69
- if (process.env.NODE_ENV === "development") {
70
- console.warn("[tw] insertRule failed, falling back to textContent append for rule:", trimmed.slice(0, 80));
71
- }
38
+ // packages/domain/runtime-css/dist/CssInjector.js
39
+ var import_react = __toESM(require("react"), 1);
40
+ async function TwCssInjector(props = {}) {
41
+ const { route, includeGlobal = true, minify = true, cssDir } = props;
42
+ let fs = null;
43
+ let path = null;
44
+ try {
45
+ fs = await import("fs");
46
+ path = await import("path");
47
+ } catch {
48
+ return import_react.default.createElement(import_react.default.Fragment, null);
49
+ }
50
+ const resolvedDir = cssDir ?? path.join(process.cwd(), ".next", "static", "css", "tw");
51
+ const manifestPath = path.join(resolvedDir, "css-manifest.json");
52
+ let manifest = {};
53
+ try {
54
+ if (fs.existsSync(manifestPath)) {
55
+ manifest = JSON.parse(fs.readFileSync(manifestPath, "utf-8"));
72
56
  }
57
+ } catch {
58
+ return import_react.default.createElement(import_react.default.Fragment, null);
73
59
  }
74
- el.textContent = (el.textContent ?? "") + `
75
- ${trimmed}`;
76
- }
77
- function batchedInject(cssRule) {
78
- if (typeof window === "undefined") return;
79
- if (!cssRule || injected.has(cssRule)) return;
80
- injected.add(cssRule);
81
- pending.push(cssRule);
82
- if (_state.rafHandle === null) {
83
- _state.rafHandle = requestAnimationFrame(flushBatchedCss);
60
+ const cssChunks = [];
61
+ if (includeGlobal && manifest.routes?.["__global"]) {
62
+ const globalPath = path.join(resolvedDir, manifest.routes["__global"]);
63
+ const css = readFile(fs, globalPath);
64
+ if (css) cssChunks.push(css);
84
65
  }
85
- }
86
- function flushBatchedCss() {
87
- _state.rafHandle = null;
88
- if (pending.length === 0 || typeof document === "undefined") return;
89
- const rules = pending.splice(0);
90
- for (const rule of rules) {
91
- insertRuleToSheet(rule);
66
+ const targetRoute = route ?? "/";
67
+ if (manifest.routes?.[targetRoute]) {
68
+ const routePath = path.join(resolvedDir, manifest.routes[targetRoute]);
69
+ const css = readFile(fs, routePath);
70
+ if (css) cssChunks.push(css);
92
71
  }
72
+ if (cssChunks.length === 0) return import_react.default.createElement(import_react.default.Fragment, null);
73
+ const combined = cssChunks.join("\n");
74
+ const final = minify ? minifyCss(combined) : combined;
75
+ return import_react.default.createElement("style", {
76
+ dangerouslySetInnerHTML: { __html: final },
77
+ "data-tw-route": targetRoute,
78
+ "data-tw-injector": "true"
79
+ });
93
80
  }
94
- function syncInject(cssRule) {
95
- if (typeof document === "undefined") return;
96
- if (!cssRule || injected.has(cssRule)) return;
97
- injected.add(cssRule);
98
- insertRuleToSheet(cssRule);
99
- }
100
- function isInjected(cssRule) {
101
- return injected.has(cssRule);
81
+ function useTwClasses(classes) {
82
+ return classes;
102
83
  }
103
- function resetBatchedCss() {
104
- injected.clear();
105
- pending.length = 0;
106
- if (_state.rafHandle !== null) {
107
- cancelAnimationFrame(_state.rafHandle);
108
- _state.rafHandle = null;
109
- }
110
- if (typeof document !== "undefined" && _state.styleEl && document.head.contains(_state.styleEl)) {
111
- document.head.removeChild(_state.styleEl);
112
- _state.styleEl = null;
113
- } else {
114
- _state.styleEl = null;
84
+ function readFile(fs, filepath) {
85
+ try {
86
+ if (fs.existsSync(filepath)) return fs.readFileSync(filepath, "utf-8");
87
+ } catch {
115
88
  }
89
+ return null;
116
90
  }
117
- function getBatchedCssStats() {
118
- return {
119
- totalInjected: injected.size,
120
- pendingCount: pending.length,
121
- hasBatchScheduled: _state.rafHandle !== null
122
- };
123
- }
124
-
125
- // packages/domain/runtime-css/dist/CssInjector.js
126
- var import_react = __toESM(require("react"), 1);
127
- function useTwClasses(classes) {
128
- return classes;
91
+ function minifyCss(css) {
92
+ return css.replace(/\/\*[^*]*\*+([^/*][^*]*\*+)*\//g, "").replace(/\s+/g, " ").replace(/\s*{\s*/g, "{").replace(/\s*}\s*/g, "}").replace(/\s*;\s*/g, ";").trim();
129
93
  }
130
94
  // Annotate the CommonJS export names for ESM import in node:
131
95
  0 && (module.exports = {
132
- batchedInject,
133
- flushBatchedCss,
134
- getBatchedCssStats,
135
- isInjected,
136
- resetBatchedCss,
137
- syncInject,
96
+ TwCssInjector,
138
97
  useTwClasses
139
98
  });
140
99
  /* tailwind-styled-v4 v5.1.9 | MIT | https://github.com/dictionar32/tailwind-styled-v4 */
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/umbrella/runtime-css.ts","../packages/domain/runtime-css/dist/batchedInjector.js","../packages/domain/runtime-css/dist/CssInjector.js"],"sourcesContent":["// runtime-css client utilities (batchedInjector) safe to bundle with \"use client\"\n// TwCssInjector (Server Component) is intentionally NOT re-exported here because\n// it is an async RSC and must NOT be in a \"use client\" bundle.\n// Import it directly: import { TwCssInjector } from \"tailwind-styled-v4/runtime-css/server\"\nexport {\n batchedInject,\n flushBatchedCss,\n getBatchedCssStats,\n isInjected,\n resetBatchedCss,\n syncInject,\n} from \"@tailwind-styled/runtime-css/client\"\nexport { useTwClasses } from \"@tailwind-styled/runtime-css/server\"\n","\"use client\";\nconst injected = /* @__PURE__ */ new Set();\nconst pending = [];\nconst _state = {\n rafHandle: null,\n styleEl: null\n};\nfunction getStyleElement() {\n if (_state.styleEl && document.head.contains(_state.styleEl)) return _state.styleEl;\n _state.styleEl = document.createElement(\"style\");\n _state.styleEl.id = \"__tw-runtime-css\";\n _state.styleEl.setAttribute(\"data-tw-batched\", \"true\");\n document.head.appendChild(_state.styleEl);\n return _state.styleEl;\n}\nfunction insertRuleToSheet(cssRule) {\n const trimmed = cssRule.trim();\n if (!trimmed) return;\n const el = getStyleElement();\n const sheet = el.sheet;\n if (sheet) {\n try {\n sheet.insertRule(trimmed, sheet.cssRules.length);\n return;\n } catch {\n if (process.env.NODE_ENV === \"development\") {\n console.warn(\"[tw] insertRule failed, falling back to textContent append for rule:\", trimmed.slice(0, 80));\n }\n }\n }\n el.textContent = (el.textContent ?? \"\") + `\n${trimmed}`;\n}\nfunction batchedInject(cssRule) {\n if (typeof window === \"undefined\") return;\n if (!cssRule || injected.has(cssRule)) return;\n injected.add(cssRule);\n pending.push(cssRule);\n if (_state.rafHandle === null) {\n _state.rafHandle = requestAnimationFrame(flushBatchedCss);\n }\n}\nfunction flushBatchedCss() {\n _state.rafHandle = null;\n if (pending.length === 0 || typeof document === \"undefined\") return;\n const rules = pending.splice(0);\n for (const rule of rules) {\n insertRuleToSheet(rule);\n }\n}\nfunction syncInject(cssRule) {\n if (typeof document === \"undefined\") return;\n if (!cssRule || injected.has(cssRule)) return;\n injected.add(cssRule);\n insertRuleToSheet(cssRule);\n}\nfunction isInjected(cssRule) {\n return injected.has(cssRule);\n}\nfunction resetBatchedCss() {\n injected.clear();\n pending.length = 0;\n if (_state.rafHandle !== null) {\n cancelAnimationFrame(_state.rafHandle);\n _state.rafHandle = null;\n }\n if (typeof document !== \"undefined\" && _state.styleEl && document.head.contains(_state.styleEl)) {\n document.head.removeChild(_state.styleEl);\n _state.styleEl = null;\n } else {\n _state.styleEl = null;\n }\n}\nfunction getBatchedCssStats() {\n return {\n totalInjected: injected.size,\n pendingCount: pending.length,\n hasBatchScheduled: _state.rafHandle !== null\n };\n}\nexport {\n batchedInject,\n flushBatchedCss,\n getBatchedCssStats,\n isInjected,\n resetBatchedCss,\n syncInject\n};\n","import React from \"react\";\nasync function TwCssInjector(props = {}) {\n const { route, includeGlobal = true, minify = true, cssDir } = props;\n let fs = null;\n let path = null;\n try {\n fs = await import(\"node:fs\");\n path = await import(\"node:path\");\n } catch {\n return React.createElement(React.Fragment, null);\n }\n const resolvedDir = cssDir ?? path.join(process.cwd(), \".next\", \"static\", \"css\", \"tw\");\n const manifestPath = path.join(resolvedDir, \"css-manifest.json\");\n let manifest = {};\n try {\n if (fs.existsSync(manifestPath)) {\n manifest = JSON.parse(fs.readFileSync(manifestPath, \"utf-8\"));\n }\n } catch {\n return React.createElement(React.Fragment, null);\n }\n const cssChunks = [];\n if (includeGlobal && manifest.routes?.[\"__global\"]) {\n const globalPath = path.join(resolvedDir, manifest.routes[\"__global\"]);\n const css = readFile(fs, globalPath);\n if (css) cssChunks.push(css);\n }\n const targetRoute = route ?? \"/\";\n if (manifest.routes?.[targetRoute]) {\n const routePath = path.join(resolvedDir, manifest.routes[targetRoute]);\n const css = readFile(fs, routePath);\n if (css) cssChunks.push(css);\n }\n if (cssChunks.length === 0) return React.createElement(React.Fragment, null);\n const combined = cssChunks.join(\"\\n\");\n const final = minify ? minifyCss(combined) : combined;\n return React.createElement(\"style\", {\n dangerouslySetInnerHTML: { __html: final },\n \"data-tw-route\": targetRoute,\n \"data-tw-injector\": \"true\"\n });\n}\nfunction useTwClasses(classes) {\n return classes;\n}\nfunction readFile(fs, filepath) {\n try {\n if (fs.existsSync(filepath)) return fs.readFileSync(filepath, \"utf-8\");\n } catch {\n }\n return null;\n}\nfunction minifyCss(css) {\n return css.replace(/\\/\\*[^*]*\\*+([^/*][^*]*\\*+)*\\//g, \"\").replace(/\\s+/g, \" \").replace(/\\s*{\\s*/g, \"{\").replace(/\\s*}\\s*/g, \"}\").replace(/\\s*;\\s*/g, \";\").trim();\n}\nexport {\n TwCssInjector,\n useTwClasses\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACCA,IAAM,WAA2B,oBAAI,IAAI;AACzC,IAAM,UAAU,CAAC;AACjB,IAAM,SAAS;AAAA,EACb,WAAW;AAAA,EACX,SAAS;AACX;AACA,SAAS,kBAAkB;AACzB,MAAI,OAAO,WAAW,SAAS,KAAK,SAAS,OAAO,OAAO,EAAG,QAAO,OAAO;AAC5E,SAAO,UAAU,SAAS,cAAc,OAAO;AAC/C,SAAO,QAAQ,KAAK;AACpB,SAAO,QAAQ,aAAa,mBAAmB,MAAM;AACrD,WAAS,KAAK,YAAY,OAAO,OAAO;AACxC,SAAO,OAAO;AAChB;AACA,SAAS,kBAAkB,SAAS;AAClC,QAAM,UAAU,QAAQ,KAAK;AAC7B,MAAI,CAAC,QAAS;AACd,QAAM,KAAK,gBAAgB;AAC3B,QAAM,QAAQ,GAAG;AACjB,MAAI,OAAO;AACT,QAAI;AACF,YAAM,WAAW,SAAS,MAAM,SAAS,MAAM;AAC/C;AAAA,IACF,QAAQ;AACN,UAAI,QAAQ,IAAI,aAAa,eAAe;AAC1C,gBAAQ,KAAK,wEAAwE,QAAQ,MAAM,GAAG,EAAE,CAAC;AAAA,MAC3G;AAAA,IACF;AAAA,EACF;AACA,KAAG,eAAe,GAAG,eAAe,MAAM;AAAA,EAC1C,OAAO;AACT;AACA,SAAS,cAAc,SAAS;AAC9B,MAAI,OAAO,WAAW,YAAa;AACnC,MAAI,CAAC,WAAW,SAAS,IAAI,OAAO,EAAG;AACvC,WAAS,IAAI,OAAO;AACpB,UAAQ,KAAK,OAAO;AACpB,MAAI,OAAO,cAAc,MAAM;AAC7B,WAAO,YAAY,sBAAsB,eAAe;AAAA,EAC1D;AACF;AACA,SAAS,kBAAkB;AACzB,SAAO,YAAY;AACnB,MAAI,QAAQ,WAAW,KAAK,OAAO,aAAa,YAAa;AAC7D,QAAM,QAAQ,QAAQ,OAAO,CAAC;AAC9B,aAAW,QAAQ,OAAO;AACxB,sBAAkB,IAAI;AAAA,EACxB;AACF;AACA,SAAS,WAAW,SAAS;AAC3B,MAAI,OAAO,aAAa,YAAa;AACrC,MAAI,CAAC,WAAW,SAAS,IAAI,OAAO,EAAG;AACvC,WAAS,IAAI,OAAO;AACpB,oBAAkB,OAAO;AAC3B;AACA,SAAS,WAAW,SAAS;AAC3B,SAAO,SAAS,IAAI,OAAO;AAC7B;AACA,SAAS,kBAAkB;AACzB,WAAS,MAAM;AACf,UAAQ,SAAS;AACjB,MAAI,OAAO,cAAc,MAAM;AAC7B,yBAAqB,OAAO,SAAS;AACrC,WAAO,YAAY;AAAA,EACrB;AACA,MAAI,OAAO,aAAa,eAAe,OAAO,WAAW,SAAS,KAAK,SAAS,OAAO,OAAO,GAAG;AAC/F,aAAS,KAAK,YAAY,OAAO,OAAO;AACxC,WAAO,UAAU;AAAA,EACnB,OAAO;AACL,WAAO,UAAU;AAAA,EACnB;AACF;AACA,SAAS,qBAAqB;AAC5B,SAAO;AAAA,IACL,eAAe,SAAS;AAAA,IACxB,cAAc,QAAQ;AAAA,IACtB,mBAAmB,OAAO,cAAc;AAAA,EAC1C;AACF;;;AC/EA,mBAAkB;AA0ClB,SAAS,aAAa,SAAS;AAC7B,SAAO;AACT;","names":[]}
1
+ {"version":3,"sources":["../src/umbrella/runtime-css.ts","../packages/domain/runtime-css/dist/CssInjector.js"],"sourcesContent":["// Server-safe entryhanya export TwCssInjector (async RSC) dan useTwClasses.\n// batchedInjector SENGAJA tidak di-export di sini karena punya \"use client\"\n// yang akan membuat Next.js memperlakukan TwCssInjector sebagai Client Component.\n// Runtime CSS injection internal (stateEngine, containerQuery) mengakses\n// @tailwind-styled/runtime-css/batched secara langsung di module level mereka sendiri.\nexport { TwCssInjector, useTwClasses } from \"@tailwind-styled/runtime-css/server\"\n","import React from \"react\";\nasync function TwCssInjector(props = {}) {\n const { route, includeGlobal = true, minify = true, cssDir } = props;\n let fs = null;\n let path = null;\n try {\n fs = await import(\"node:fs\");\n path = await import(\"node:path\");\n } catch {\n return React.createElement(React.Fragment, null);\n }\n const resolvedDir = cssDir ?? path.join(process.cwd(), \".next\", \"static\", \"css\", \"tw\");\n const manifestPath = path.join(resolvedDir, \"css-manifest.json\");\n let manifest = {};\n try {\n if (fs.existsSync(manifestPath)) {\n manifest = JSON.parse(fs.readFileSync(manifestPath, \"utf-8\"));\n }\n } catch {\n return React.createElement(React.Fragment, null);\n }\n const cssChunks = [];\n if (includeGlobal && manifest.routes?.[\"__global\"]) {\n const globalPath = path.join(resolvedDir, manifest.routes[\"__global\"]);\n const css = readFile(fs, globalPath);\n if (css) cssChunks.push(css);\n }\n const targetRoute = route ?? \"/\";\n if (manifest.routes?.[targetRoute]) {\n const routePath = path.join(resolvedDir, manifest.routes[targetRoute]);\n const css = readFile(fs, routePath);\n if (css) cssChunks.push(css);\n }\n if (cssChunks.length === 0) return React.createElement(React.Fragment, null);\n const combined = cssChunks.join(\"\\n\");\n const final = minify ? minifyCss(combined) : combined;\n return React.createElement(\"style\", {\n dangerouslySetInnerHTML: { __html: final },\n \"data-tw-route\": targetRoute,\n \"data-tw-injector\": \"true\"\n });\n}\nfunction useTwClasses(classes) {\n return classes;\n}\nfunction readFile(fs, filepath) {\n try {\n if (fs.existsSync(filepath)) return fs.readFileSync(filepath, \"utf-8\");\n } catch {\n }\n return null;\n}\nfunction minifyCss(css) {\n return css.replace(/\\/\\*[^*]*\\*+([^/*][^*]*\\*+)*\\//g, \"\").replace(/\\s+/g, \" \").replace(/\\s*{\\s*/g, \"{\").replace(/\\s*}\\s*/g, \"}\").replace(/\\s*;\\s*/g, \";\").trim();\n}\nexport {\n TwCssInjector,\n useTwClasses\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,mBAAkB;AAClB,eAAe,cAAc,QAAQ,CAAC,GAAG;AACvC,QAAM,EAAE,OAAO,gBAAgB,MAAM,SAAS,MAAM,OAAO,IAAI;AAC/D,MAAI,KAAK;AACT,MAAI,OAAO;AACX,MAAI;AACF,SAAK,MAAM,OAAO,IAAS;AAC3B,WAAO,MAAM,OAAO,MAAW;AAAA,EACjC,QAAQ;AACN,WAAO,aAAAA,QAAM,cAAc,aAAAA,QAAM,UAAU,IAAI;AAAA,EACjD;AACA,QAAM,cAAc,UAAU,KAAK,KAAK,QAAQ,IAAI,GAAG,SAAS,UAAU,OAAO,IAAI;AACrF,QAAM,eAAe,KAAK,KAAK,aAAa,mBAAmB;AAC/D,MAAI,WAAW,CAAC;AAChB,MAAI;AACF,QAAI,GAAG,WAAW,YAAY,GAAG;AAC/B,iBAAW,KAAK,MAAM,GAAG,aAAa,cAAc,OAAO,CAAC;AAAA,IAC9D;AAAA,EACF,QAAQ;AACN,WAAO,aAAAA,QAAM,cAAc,aAAAA,QAAM,UAAU,IAAI;AAAA,EACjD;AACA,QAAM,YAAY,CAAC;AACnB,MAAI,iBAAiB,SAAS,SAAS,UAAU,GAAG;AAClD,UAAM,aAAa,KAAK,KAAK,aAAa,SAAS,OAAO,UAAU,CAAC;AACrE,UAAM,MAAM,SAAS,IAAI,UAAU;AACnC,QAAI,IAAK,WAAU,KAAK,GAAG;AAAA,EAC7B;AACA,QAAM,cAAc,SAAS;AAC7B,MAAI,SAAS,SAAS,WAAW,GAAG;AAClC,UAAM,YAAY,KAAK,KAAK,aAAa,SAAS,OAAO,WAAW,CAAC;AACrE,UAAM,MAAM,SAAS,IAAI,SAAS;AAClC,QAAI,IAAK,WAAU,KAAK,GAAG;AAAA,EAC7B;AACA,MAAI,UAAU,WAAW,EAAG,QAAO,aAAAA,QAAM,cAAc,aAAAA,QAAM,UAAU,IAAI;AAC3E,QAAM,WAAW,UAAU,KAAK,IAAI;AACpC,QAAM,QAAQ,SAAS,UAAU,QAAQ,IAAI;AAC7C,SAAO,aAAAA,QAAM,cAAc,SAAS;AAAA,IAClC,yBAAyB,EAAE,QAAQ,MAAM;AAAA,IACzC,iBAAiB;AAAA,IACjB,oBAAoB;AAAA,EACtB,CAAC;AACH;AACA,SAAS,aAAa,SAAS;AAC7B,SAAO;AACT;AACA,SAAS,SAAS,IAAI,UAAU;AAC9B,MAAI;AACF,QAAI,GAAG,WAAW,QAAQ,EAAG,QAAO,GAAG,aAAa,UAAU,OAAO;AAAA,EACvE,QAAQ;AAAA,EACR;AACA,SAAO;AACT;AACA,SAAS,UAAU,KAAK;AACtB,SAAO,IAAI,QAAQ,mCAAmC,EAAE,EAAE,QAAQ,QAAQ,GAAG,EAAE,QAAQ,YAAY,GAAG,EAAE,QAAQ,YAAY,GAAG,EAAE,QAAQ,YAAY,GAAG,EAAE,KAAK;AACjK;","names":["React"]}
@@ -1,97 +1,61 @@
1
- "use client";
2
- // packages/domain/runtime-css/dist/batchedInjector.js
3
- var injected = /* @__PURE__ */ new Set();
4
- var pending = [];
5
- var _state = {
6
- rafHandle: null,
7
- styleEl: null
8
- };
9
- function getStyleElement() {
10
- if (_state.styleEl && document.head.contains(_state.styleEl)) return _state.styleEl;
11
- _state.styleEl = document.createElement("style");
12
- _state.styleEl.id = "__tw-runtime-css";
13
- _state.styleEl.setAttribute("data-tw-batched", "true");
14
- document.head.appendChild(_state.styleEl);
15
- return _state.styleEl;
16
- }
17
- function insertRuleToSheet(cssRule) {
18
- const trimmed = cssRule.trim();
19
- if (!trimmed) return;
20
- const el = getStyleElement();
21
- const sheet = el.sheet;
22
- if (sheet) {
23
- try {
24
- sheet.insertRule(trimmed, sheet.cssRules.length);
25
- return;
26
- } catch {
27
- if (process.env.NODE_ENV === "development") {
28
- console.warn("[tw] insertRule failed, falling back to textContent append for rule:", trimmed.slice(0, 80));
29
- }
1
+ // packages/domain/runtime-css/dist/CssInjector.js
2
+ import React from "react";
3
+ async function TwCssInjector(props = {}) {
4
+ const { route, includeGlobal = true, minify = true, cssDir } = props;
5
+ let fs = null;
6
+ let path = null;
7
+ try {
8
+ fs = await import("fs");
9
+ path = await import("path");
10
+ } catch {
11
+ return React.createElement(React.Fragment, null);
12
+ }
13
+ const resolvedDir = cssDir ?? path.join(process.cwd(), ".next", "static", "css", "tw");
14
+ const manifestPath = path.join(resolvedDir, "css-manifest.json");
15
+ let manifest = {};
16
+ try {
17
+ if (fs.existsSync(manifestPath)) {
18
+ manifest = JSON.parse(fs.readFileSync(manifestPath, "utf-8"));
30
19
  }
20
+ } catch {
21
+ return React.createElement(React.Fragment, null);
31
22
  }
32
- el.textContent = (el.textContent ?? "") + `
33
- ${trimmed}`;
34
- }
35
- function batchedInject(cssRule) {
36
- if (typeof window === "undefined") return;
37
- if (!cssRule || injected.has(cssRule)) return;
38
- injected.add(cssRule);
39
- pending.push(cssRule);
40
- if (_state.rafHandle === null) {
41
- _state.rafHandle = requestAnimationFrame(flushBatchedCss);
23
+ const cssChunks = [];
24
+ if (includeGlobal && manifest.routes?.["__global"]) {
25
+ const globalPath = path.join(resolvedDir, manifest.routes["__global"]);
26
+ const css = readFile(fs, globalPath);
27
+ if (css) cssChunks.push(css);
42
28
  }
43
- }
44
- function flushBatchedCss() {
45
- _state.rafHandle = null;
46
- if (pending.length === 0 || typeof document === "undefined") return;
47
- const rules = pending.splice(0);
48
- for (const rule of rules) {
49
- insertRuleToSheet(rule);
29
+ const targetRoute = route ?? "/";
30
+ if (manifest.routes?.[targetRoute]) {
31
+ const routePath = path.join(resolvedDir, manifest.routes[targetRoute]);
32
+ const css = readFile(fs, routePath);
33
+ if (css) cssChunks.push(css);
50
34
  }
35
+ if (cssChunks.length === 0) return React.createElement(React.Fragment, null);
36
+ const combined = cssChunks.join("\n");
37
+ const final = minify ? minifyCss(combined) : combined;
38
+ return React.createElement("style", {
39
+ dangerouslySetInnerHTML: { __html: final },
40
+ "data-tw-route": targetRoute,
41
+ "data-tw-injector": "true"
42
+ });
51
43
  }
52
- function syncInject(cssRule) {
53
- if (typeof document === "undefined") return;
54
- if (!cssRule || injected.has(cssRule)) return;
55
- injected.add(cssRule);
56
- insertRuleToSheet(cssRule);
57
- }
58
- function isInjected(cssRule) {
59
- return injected.has(cssRule);
44
+ function useTwClasses(classes) {
45
+ return classes;
60
46
  }
61
- function resetBatchedCss() {
62
- injected.clear();
63
- pending.length = 0;
64
- if (_state.rafHandle !== null) {
65
- cancelAnimationFrame(_state.rafHandle);
66
- _state.rafHandle = null;
47
+ function readFile(fs, filepath) {
48
+ try {
49
+ if (fs.existsSync(filepath)) return fs.readFileSync(filepath, "utf-8");
50
+ } catch {
67
51
  }
68
- if (typeof document !== "undefined" && _state.styleEl && document.head.contains(_state.styleEl)) {
69
- document.head.removeChild(_state.styleEl);
70
- _state.styleEl = null;
71
- } else {
72
- _state.styleEl = null;
73
- }
74
- }
75
- function getBatchedCssStats() {
76
- return {
77
- totalInjected: injected.size,
78
- pendingCount: pending.length,
79
- hasBatchScheduled: _state.rafHandle !== null
80
- };
52
+ return null;
81
53
  }
82
-
83
- // packages/domain/runtime-css/dist/CssInjector.js
84
- import React from "react";
85
- function useTwClasses(classes) {
86
- return classes;
54
+ function minifyCss(css) {
55
+ return css.replace(/\/\*[^*]*\*+([^/*][^*]*\*+)*\//g, "").replace(/\s+/g, " ").replace(/\s*{\s*/g, "{").replace(/\s*}\s*/g, "}").replace(/\s*;\s*/g, ";").trim();
87
56
  }
88
57
  export {
89
- batchedInject,
90
- flushBatchedCss,
91
- getBatchedCssStats,
92
- isInjected,
93
- resetBatchedCss,
94
- syncInject,
58
+ TwCssInjector,
95
59
  useTwClasses
96
60
  };
97
61
  /* tailwind-styled-v4 v5.1.9 | MIT | https://github.com/dictionar32/tailwind-styled-v4 */
@@ -1 +1 @@
1
- {"version":3,"sources":["../packages/domain/runtime-css/dist/batchedInjector.js","../packages/domain/runtime-css/dist/CssInjector.js"],"sourcesContent":["\"use client\";\nconst injected = /* @__PURE__ */ new Set();\nconst pending = [];\nconst _state = {\n rafHandle: null,\n styleEl: null\n};\nfunction getStyleElement() {\n if (_state.styleEl && document.head.contains(_state.styleEl)) return _state.styleEl;\n _state.styleEl = document.createElement(\"style\");\n _state.styleEl.id = \"__tw-runtime-css\";\n _state.styleEl.setAttribute(\"data-tw-batched\", \"true\");\n document.head.appendChild(_state.styleEl);\n return _state.styleEl;\n}\nfunction insertRuleToSheet(cssRule) {\n const trimmed = cssRule.trim();\n if (!trimmed) return;\n const el = getStyleElement();\n const sheet = el.sheet;\n if (sheet) {\n try {\n sheet.insertRule(trimmed, sheet.cssRules.length);\n return;\n } catch {\n if (process.env.NODE_ENV === \"development\") {\n console.warn(\"[tw] insertRule failed, falling back to textContent append for rule:\", trimmed.slice(0, 80));\n }\n }\n }\n el.textContent = (el.textContent ?? \"\") + `\n${trimmed}`;\n}\nfunction batchedInject(cssRule) {\n if (typeof window === \"undefined\") return;\n if (!cssRule || injected.has(cssRule)) return;\n injected.add(cssRule);\n pending.push(cssRule);\n if (_state.rafHandle === null) {\n _state.rafHandle = requestAnimationFrame(flushBatchedCss);\n }\n}\nfunction flushBatchedCss() {\n _state.rafHandle = null;\n if (pending.length === 0 || typeof document === \"undefined\") return;\n const rules = pending.splice(0);\n for (const rule of rules) {\n insertRuleToSheet(rule);\n }\n}\nfunction syncInject(cssRule) {\n if (typeof document === \"undefined\") return;\n if (!cssRule || injected.has(cssRule)) return;\n injected.add(cssRule);\n insertRuleToSheet(cssRule);\n}\nfunction isInjected(cssRule) {\n return injected.has(cssRule);\n}\nfunction resetBatchedCss() {\n injected.clear();\n pending.length = 0;\n if (_state.rafHandle !== null) {\n cancelAnimationFrame(_state.rafHandle);\n _state.rafHandle = null;\n }\n if (typeof document !== \"undefined\" && _state.styleEl && document.head.contains(_state.styleEl)) {\n document.head.removeChild(_state.styleEl);\n _state.styleEl = null;\n } else {\n _state.styleEl = null;\n }\n}\nfunction getBatchedCssStats() {\n return {\n totalInjected: injected.size,\n pendingCount: pending.length,\n hasBatchScheduled: _state.rafHandle !== null\n };\n}\nexport {\n batchedInject,\n flushBatchedCss,\n getBatchedCssStats,\n isInjected,\n resetBatchedCss,\n syncInject\n};\n","import React from \"react\";\nasync function TwCssInjector(props = {}) {\n const { route, includeGlobal = true, minify = true, cssDir } = props;\n let fs = null;\n let path = null;\n try {\n fs = await import(\"node:fs\");\n path = await import(\"node:path\");\n } catch {\n return React.createElement(React.Fragment, null);\n }\n const resolvedDir = cssDir ?? path.join(process.cwd(), \".next\", \"static\", \"css\", \"tw\");\n const manifestPath = path.join(resolvedDir, \"css-manifest.json\");\n let manifest = {};\n try {\n if (fs.existsSync(manifestPath)) {\n manifest = JSON.parse(fs.readFileSync(manifestPath, \"utf-8\"));\n }\n } catch {\n return React.createElement(React.Fragment, null);\n }\n const cssChunks = [];\n if (includeGlobal && manifest.routes?.[\"__global\"]) {\n const globalPath = path.join(resolvedDir, manifest.routes[\"__global\"]);\n const css = readFile(fs, globalPath);\n if (css) cssChunks.push(css);\n }\n const targetRoute = route ?? \"/\";\n if (manifest.routes?.[targetRoute]) {\n const routePath = path.join(resolvedDir, manifest.routes[targetRoute]);\n const css = readFile(fs, routePath);\n if (css) cssChunks.push(css);\n }\n if (cssChunks.length === 0) return React.createElement(React.Fragment, null);\n const combined = cssChunks.join(\"\\n\");\n const final = minify ? minifyCss(combined) : combined;\n return React.createElement(\"style\", {\n dangerouslySetInnerHTML: { __html: final },\n \"data-tw-route\": targetRoute,\n \"data-tw-injector\": \"true\"\n });\n}\nfunction useTwClasses(classes) {\n return classes;\n}\nfunction readFile(fs, filepath) {\n try {\n if (fs.existsSync(filepath)) return fs.readFileSync(filepath, \"utf-8\");\n } catch {\n }\n return null;\n}\nfunction minifyCss(css) {\n return css.replace(/\\/\\*[^*]*\\*+([^/*][^*]*\\*+)*\\//g, \"\").replace(/\\s+/g, \" \").replace(/\\s*{\\s*/g, \"{\").replace(/\\s*}\\s*/g, \"}\").replace(/\\s*;\\s*/g, \";\").trim();\n}\nexport {\n TwCssInjector,\n useTwClasses\n};\n"],"mappings":";AACA,IAAM,WAA2B,oBAAI,IAAI;AACzC,IAAM,UAAU,CAAC;AACjB,IAAM,SAAS;AAAA,EACb,WAAW;AAAA,EACX,SAAS;AACX;AACA,SAAS,kBAAkB;AACzB,MAAI,OAAO,WAAW,SAAS,KAAK,SAAS,OAAO,OAAO,EAAG,QAAO,OAAO;AAC5E,SAAO,UAAU,SAAS,cAAc,OAAO;AAC/C,SAAO,QAAQ,KAAK;AACpB,SAAO,QAAQ,aAAa,mBAAmB,MAAM;AACrD,WAAS,KAAK,YAAY,OAAO,OAAO;AACxC,SAAO,OAAO;AAChB;AACA,SAAS,kBAAkB,SAAS;AAClC,QAAM,UAAU,QAAQ,KAAK;AAC7B,MAAI,CAAC,QAAS;AACd,QAAM,KAAK,gBAAgB;AAC3B,QAAM,QAAQ,GAAG;AACjB,MAAI,OAAO;AACT,QAAI;AACF,YAAM,WAAW,SAAS,MAAM,SAAS,MAAM;AAC/C;AAAA,IACF,QAAQ;AACN,UAAI,QAAQ,IAAI,aAAa,eAAe;AAC1C,gBAAQ,KAAK,wEAAwE,QAAQ,MAAM,GAAG,EAAE,CAAC;AAAA,MAC3G;AAAA,IACF;AAAA,EACF;AACA,KAAG,eAAe,GAAG,eAAe,MAAM;AAAA,EAC1C,OAAO;AACT;AACA,SAAS,cAAc,SAAS;AAC9B,MAAI,OAAO,WAAW,YAAa;AACnC,MAAI,CAAC,WAAW,SAAS,IAAI,OAAO,EAAG;AACvC,WAAS,IAAI,OAAO;AACpB,UAAQ,KAAK,OAAO;AACpB,MAAI,OAAO,cAAc,MAAM;AAC7B,WAAO,YAAY,sBAAsB,eAAe;AAAA,EAC1D;AACF;AACA,SAAS,kBAAkB;AACzB,SAAO,YAAY;AACnB,MAAI,QAAQ,WAAW,KAAK,OAAO,aAAa,YAAa;AAC7D,QAAM,QAAQ,QAAQ,OAAO,CAAC;AAC9B,aAAW,QAAQ,OAAO;AACxB,sBAAkB,IAAI;AAAA,EACxB;AACF;AACA,SAAS,WAAW,SAAS;AAC3B,MAAI,OAAO,aAAa,YAAa;AACrC,MAAI,CAAC,WAAW,SAAS,IAAI,OAAO,EAAG;AACvC,WAAS,IAAI,OAAO;AACpB,oBAAkB,OAAO;AAC3B;AACA,SAAS,WAAW,SAAS;AAC3B,SAAO,SAAS,IAAI,OAAO;AAC7B;AACA,SAAS,kBAAkB;AACzB,WAAS,MAAM;AACf,UAAQ,SAAS;AACjB,MAAI,OAAO,cAAc,MAAM;AAC7B,yBAAqB,OAAO,SAAS;AACrC,WAAO,YAAY;AAAA,EACrB;AACA,MAAI,OAAO,aAAa,eAAe,OAAO,WAAW,SAAS,KAAK,SAAS,OAAO,OAAO,GAAG;AAC/F,aAAS,KAAK,YAAY,OAAO,OAAO;AACxC,WAAO,UAAU;AAAA,EACnB,OAAO;AACL,WAAO,UAAU;AAAA,EACnB;AACF;AACA,SAAS,qBAAqB;AAC5B,SAAO;AAAA,IACL,eAAe,SAAS;AAAA,IACxB,cAAc,QAAQ;AAAA,IACtB,mBAAmB,OAAO,cAAc;AAAA,EAC1C;AACF;;;AC/EA,OAAO,WAAW;AA0ClB,SAAS,aAAa,SAAS;AAC7B,SAAO;AACT;","names":[]}
1
+ {"version":3,"sources":["../packages/domain/runtime-css/dist/CssInjector.js"],"sourcesContent":["import React from \"react\";\nasync function TwCssInjector(props = {}) {\n const { route, includeGlobal = true, minify = true, cssDir } = props;\n let fs = null;\n let path = null;\n try {\n fs = await import(\"node:fs\");\n path = await import(\"node:path\");\n } catch {\n return React.createElement(React.Fragment, null);\n }\n const resolvedDir = cssDir ?? path.join(process.cwd(), \".next\", \"static\", \"css\", \"tw\");\n const manifestPath = path.join(resolvedDir, \"css-manifest.json\");\n let manifest = {};\n try {\n if (fs.existsSync(manifestPath)) {\n manifest = JSON.parse(fs.readFileSync(manifestPath, \"utf-8\"));\n }\n } catch {\n return React.createElement(React.Fragment, null);\n }\n const cssChunks = [];\n if (includeGlobal && manifest.routes?.[\"__global\"]) {\n const globalPath = path.join(resolvedDir, manifest.routes[\"__global\"]);\n const css = readFile(fs, globalPath);\n if (css) cssChunks.push(css);\n }\n const targetRoute = route ?? \"/\";\n if (manifest.routes?.[targetRoute]) {\n const routePath = path.join(resolvedDir, manifest.routes[targetRoute]);\n const css = readFile(fs, routePath);\n if (css) cssChunks.push(css);\n }\n if (cssChunks.length === 0) return React.createElement(React.Fragment, null);\n const combined = cssChunks.join(\"\\n\");\n const final = minify ? minifyCss(combined) : combined;\n return React.createElement(\"style\", {\n dangerouslySetInnerHTML: { __html: final },\n \"data-tw-route\": targetRoute,\n \"data-tw-injector\": \"true\"\n });\n}\nfunction useTwClasses(classes) {\n return classes;\n}\nfunction readFile(fs, filepath) {\n try {\n if (fs.existsSync(filepath)) return fs.readFileSync(filepath, \"utf-8\");\n } catch {\n }\n return null;\n}\nfunction minifyCss(css) {\n return css.replace(/\\/\\*[^*]*\\*+([^/*][^*]*\\*+)*\\//g, \"\").replace(/\\s+/g, \" \").replace(/\\s*{\\s*/g, \"{\").replace(/\\s*}\\s*/g, \"}\").replace(/\\s*;\\s*/g, \";\").trim();\n}\nexport {\n TwCssInjector,\n useTwClasses\n};\n"],"mappings":";AAAA,OAAO,WAAW;AAClB,eAAe,cAAc,QAAQ,CAAC,GAAG;AACvC,QAAM,EAAE,OAAO,gBAAgB,MAAM,SAAS,MAAM,OAAO,IAAI;AAC/D,MAAI,KAAK;AACT,MAAI,OAAO;AACX,MAAI;AACF,SAAK,MAAM,OAAO,IAAS;AAC3B,WAAO,MAAM,OAAO,MAAW;AAAA,EACjC,QAAQ;AACN,WAAO,MAAM,cAAc,MAAM,UAAU,IAAI;AAAA,EACjD;AACA,QAAM,cAAc,UAAU,KAAK,KAAK,QAAQ,IAAI,GAAG,SAAS,UAAU,OAAO,IAAI;AACrF,QAAM,eAAe,KAAK,KAAK,aAAa,mBAAmB;AAC/D,MAAI,WAAW,CAAC;AAChB,MAAI;AACF,QAAI,GAAG,WAAW,YAAY,GAAG;AAC/B,iBAAW,KAAK,MAAM,GAAG,aAAa,cAAc,OAAO,CAAC;AAAA,IAC9D;AAAA,EACF,QAAQ;AACN,WAAO,MAAM,cAAc,MAAM,UAAU,IAAI;AAAA,EACjD;AACA,QAAM,YAAY,CAAC;AACnB,MAAI,iBAAiB,SAAS,SAAS,UAAU,GAAG;AAClD,UAAM,aAAa,KAAK,KAAK,aAAa,SAAS,OAAO,UAAU,CAAC;AACrE,UAAM,MAAM,SAAS,IAAI,UAAU;AACnC,QAAI,IAAK,WAAU,KAAK,GAAG;AAAA,EAC7B;AACA,QAAM,cAAc,SAAS;AAC7B,MAAI,SAAS,SAAS,WAAW,GAAG;AAClC,UAAM,YAAY,KAAK,KAAK,aAAa,SAAS,OAAO,WAAW,CAAC;AACrE,UAAM,MAAM,SAAS,IAAI,SAAS;AAClC,QAAI,IAAK,WAAU,KAAK,GAAG;AAAA,EAC7B;AACA,MAAI,UAAU,WAAW,EAAG,QAAO,MAAM,cAAc,MAAM,UAAU,IAAI;AAC3E,QAAM,WAAW,UAAU,KAAK,IAAI;AACpC,QAAM,QAAQ,SAAS,UAAU,QAAQ,IAAI;AAC7C,SAAO,MAAM,cAAc,SAAS;AAAA,IAClC,yBAAyB,EAAE,QAAQ,MAAM;AAAA,IACzC,iBAAiB;AAAA,IACjB,oBAAoB;AAAA,EACtB,CAAC;AACH;AACA,SAAS,aAAa,SAAS;AAC7B,SAAO;AACT;AACA,SAAS,SAAS,IAAI,UAAU;AAC9B,MAAI;AACF,QAAI,GAAG,WAAW,QAAQ,EAAG,QAAO,GAAG,aAAa,UAAU,OAAO;AAAA,EACvE,QAAQ;AAAA,EACR;AACA,SAAO;AACT;AACA,SAAS,UAAU,KAAK;AACtB,SAAO,IAAI,QAAQ,mCAAmC,EAAE,EAAE,QAAQ,QAAQ,GAAG,EAAE,QAAQ,YAAY,GAAG,EAAE,QAAQ,YAAY,GAAG,EAAE,QAAQ,YAAY,GAAG,EAAE,KAAK;AACjK;","names":[]}
package/dist/runtime.js CHANGED
@@ -203,7 +203,7 @@ function generateTokenCssString() {
203
203
  }
204
204
  function createUseTokens() {
205
205
  return function useTokens() {
206
- const [tokens, setTokensState] = import_react.default.useState(engine.getTokens());
206
+ const [tokens, setTokensState] = import_react.default.useState({});
207
207
  import_react.default.useEffect(() => {
208
208
  setTokensState(engine.getTokens());
209
209
  return engine.subscribe((nextTokens) => setTokensState(nextTokens));
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/umbrella/runtime.ts","../packages/domain/runtime/src/index.ts","../packages/domain/theme/src/liveTokenEngine.ts","../packages/domain/runtime/src/schemas.ts"],"sourcesContent":["export * from \"@tailwind-styled/runtime\"\n","/**\n * @tailwind-styled/runtime v5\n *\n * Lightweight runtime helpers for compiled tailwind-styled-v5 components.\n * Live token engine has been moved to @tailwind-styled/theme package.\n */\n\nimport React from \"react\"\n\n// Re-export live token engine from @tailwind-styled/theme\nexport type {\n LiveTokenEngineBridge,\n LiveTokenSet,\n TokenMap,\n TokenSubscriber,\n} from \"@tailwind-styled/theme\"\nexport {\n applyTokenSet,\n createUseTokens,\n generateTokenCssString,\n getToken,\n getTokens,\n liveToken,\n liveTokenEngine,\n setToken,\n setTokens,\n subscribeTokens,\n tokenRef,\n tokenVar,\n} from \"@tailwind-styled/theme/live-tokens\"\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Types\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport interface SubComponentDef {\n /** HTML tag to render (default: \"span\") */\n tag?: string\n /** Scoped CSS class generated by Rust, e.g. \"Button_icon_abc123\" */\n class: string\n}\n\nexport type SubComponentMap = Record<string, SubComponentDef>\n\n/**\n * Map of prop name → CSS class appended when the prop is truthy.\n * e.g. { fullWidth: \"w-full\", large: \"text-lg px-6 py-3\" }\n */\nexport type ConditionalProps = Record<string, string>\n\n/**\n * A compound styled component: base ForwardRef + attached .SubName properties.\n * The generic params are intentionally loose so callers don't need to repeat them.\n */\nexport type StyledComponent<S extends SubComponentMap = SubComponentMap> =\n React.ForwardRefExoticComponent<\n React.HTMLAttributes<HTMLElement> & React.RefAttributes<HTMLElement>\n > & {\n [K in keyof S]: React.ForwardRefExoticComponent<\n React.HTMLAttributes<HTMLElement> & React.RefAttributes<HTMLElement>\n >\n }\n\n/** Metadata for one compound component produced by Rust. */\nexport interface ComponentMetadata {\n component: string\n tag: string\n baseClass: string\n subComponents: SubComponentMap\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// cx — tiny className utility (no external dependency)\n// ─────────────────────────────────────────────────────────────────────────────\n\ntype ClassInput = string | number | false | null | undefined | ClassInput[]\n\nexport function cx(...inputs: ClassInput[]): string {\n const out: string[] = []\n for (const input of inputs) {\n if (!input) continue // filters 0, false, null, undefined, \"\"\n if (typeof input === \"string\") {\n out.push(input)\n } else if (typeof input === \"number\") {\n out.push(String(input))\n } else if (Array.isArray(input)) {\n const nested = cx(...input)\n if (nested) out.push(nested)\n }\n }\n return out.join(\" \")\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// createComponent\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Build a compound styled React component from Rust-generated metadata.\n *\n * @param tag HTML element tag, e.g. \"button\" | \"div\"\n * @param baseClass Scoped base class from Rust, e.g. \"Button_abc123\"\n * @param subComponents Map of subcomponent definitions (optional)\n * @param conditionals Map of prop name → CSS class (optional)\n *\n * @example\n * // Injected automatically by the compiler — do not call manually\n * const Button = createComponent(\"button\", \"Button_abc123\", {\n * icon: { tag: \"span\", class: \"Button_icon_abc123\" },\n * text: { tag: \"span\", class: \"Button_text_abc123\" },\n * }, { fullWidth: \"w-full\" })\n *\n * // Usage in JSX:\n * <Button fullWidth>\n * <Button.icon>🔍</Button.icon>\n * <Button.text>Search</Button.text>\n * </Button>\n */\nexport function createComponent<S extends SubComponentMap = SubComponentMap>(\n tag: string,\n baseClass: string,\n subComponents?: S,\n conditionals?: ConditionalProps\n): StyledComponent<S> {\n type Props = React.HTMLAttributes<HTMLElement> &\n React.RefAttributes<HTMLElement> &\n Record<string, unknown>\n\n // ── Base component ─────────────────────────────────────────────────────────\n const Base = React.forwardRef<HTMLElement, Props>(function TwBase(props, ref) {\n const extra: string[] = []\n\n // Collect conditional classes\n if (conditionals) {\n for (const [prop, cls] of Object.entries(conditionals)) {\n if (props[prop]) extra.push(cls)\n }\n }\n\n // Build clean props — strip conditional + subcomponent boolean props\n const clean: Record<string, unknown> = {}\n const stripKeys = new Set([\n \"className\",\n ...(conditionals ? Object.keys(conditionals) : []),\n ...(subComponents ? Object.keys(subComponents) : []),\n ])\n for (const [k, v] of Object.entries(props)) {\n if (!stripKeys.has(k)) clean[k] = v\n }\n\n const className = cx(baseClass, ...extra, (props.className as string) ?? \"\")\n\n return React.createElement(tag, { ...clean, ref, className: className || undefined })\n })\n\n ;(Base as { displayName?: string }).displayName = `tw.${String(tag)}`\n\n // ── Attach subcomponent properties ────────────────────────────────────────\n if (subComponents) {\n for (const [subName, def] of Object.entries(subComponents)) {\n const subTag = def.tag ?? \"span\"\n const subClass = def.class\n\n const SubComp = React.forwardRef<HTMLElement, Props>(function TwSub(props, ref) {\n const className = cx(subClass, (props.className as string) ?? \"\")\n const clean: Record<string, unknown> = { ...props }\n delete clean.className\n return React.createElement(subTag, { ...clean, ref, className: className || undefined })\n })\n\n ;(SubComp as { displayName?: string }).displayName = `tw.${String(tag)}.${String(subName)}`\n\n ;(Base as unknown as Record<string, unknown>)[subName] = SubComp\n }\n }\n\n return Base as StyledComponent<S>\n}\n\n// Re-export schemas\nexport {\n type ComponentMetadataInput,\n ComponentMetadataSchema,\n type ConditionalPropsInput,\n ConditionalPropsSchema,\n parseComponentMetadata,\n parseSubComponentDef,\n type SubComponentDefInput,\n SubComponentDefSchema,\n} from \"./schemas\"\n","\"use client\"\n\nimport React from \"react\"\n\nimport type { TokenMap } from '@tailwind-styled/shared'\nexport type { TokenMap }\n\nexport type TokenSubscriber = (tokens: TokenMap) => void\n\nexport interface LiveTokenSet {\n vars: Record<string, string>\n get(name: string): string | undefined\n set(name: string, value: string): void\n setAll(tokens: TokenMap): void\n snapshot(): TokenMap\n}\n\nexport interface LiveTokenEngineBridge {\n getToken(name: string): string | undefined\n getTokens(): TokenMap\n setToken(name: string, value: string): void\n setTokens(tokens: TokenMap): void\n applyTokenSet(tokens: TokenMap): void\n subscribeTokens(fn: TokenSubscriber): () => void\n subscribe?(fn: TokenSubscriber): () => void\n}\n\ninterface LiveTokenEngineRuntime {\n liveToken(tokens: TokenMap): LiveTokenSet\n getToken(name: string): string | undefined\n getTokens(): TokenMap\n setToken(name: string, value: string): void\n setTokens(tokens: TokenMap): void\n applyTokenSet(tokens: TokenMap): void\n generateTokenCssString(): string\n subscribe(fn: TokenSubscriber): () => void\n}\n\nconst TOKEN_ENGINE_KEY = \"__TW_TOKEN_ENGINE__\"\n\nexport function tokenVar(name: string): string {\n const normalized = name.replace(/[^a-zA-Z0-9-]/g, \"-\").toLowerCase()\n return `--tw-token-${normalized}`\n}\n\nexport function tokenRef(name: string): string {\n return `var(${tokenVar(name)})`\n}\n\nconst buildRootCss = (tokens: TokenMap): string => {\n const vars = Object.entries(tokens)\n .map(([name, value]) => ` ${tokenVar(name)}: ${value};`)\n .join(\"\\n\")\n return `:root {\\n${vars}\\n}`\n}\n\nconst createLiveTokenEngine = (): LiveTokenEngineRuntime => {\n const state = {\n currentTokens: {} as TokenMap,\n styleEl: null as HTMLStyleElement | null,\n }\n const subscribers = new Set<TokenSubscriber>()\n\n const syncStyleEl = (): void => {\n if (typeof document === \"undefined\") return\n\n if (!state.styleEl) {\n const styleEl = document.createElement(\"style\")\n styleEl.id = \"tw-live-tokens\"\n styleEl.setAttribute(\"data-tw-tokens\", \"true\")\n document.head.appendChild(styleEl)\n state.styleEl = styleEl\n }\n\n state.styleEl.textContent = buildRootCss(state.currentTokens)\n }\n\n const notifySubscribers = (): void => {\n const snapshot = { ...state.currentTokens }\n for (const subscriber of subscribers) {\n try {\n subscriber(snapshot)\n } catch {\n // Intentionally ignore subscriber errors.\n }\n }\n }\n\n const setToken = (name: string, value: string): void => {\n state.currentTokens = { ...state.currentTokens, [name]: value }\n if (typeof document !== \"undefined\") {\n document.documentElement.style.setProperty(tokenVar(name), value)\n }\n syncStyleEl()\n notifySubscribers()\n }\n\n const setTokens = (tokens: TokenMap): void => {\n state.currentTokens = { ...state.currentTokens, ...tokens }\n if (typeof document !== \"undefined\") {\n const root = document.documentElement\n for (const [name, value] of Object.entries(tokens)) {\n root.style.setProperty(tokenVar(name), value)\n }\n }\n syncStyleEl()\n notifySubscribers()\n }\n\n const applyTokenSet = (tokens: TokenMap): void => {\n if (typeof document !== \"undefined\") {\n const root = document.documentElement\n for (const name of Object.keys(state.currentTokens)) {\n if (!(name in tokens)) {\n root.style.removeProperty(tokenVar(name))\n }\n }\n for (const [name, value] of Object.entries(tokens)) {\n root.style.setProperty(tokenVar(name), value)\n }\n }\n\n state.currentTokens = { ...tokens }\n syncStyleEl()\n notifySubscribers()\n }\n\n return {\n liveToken(tokens: TokenMap): LiveTokenSet {\n setTokens(tokens)\n\n const vars: Record<string, string> = {}\n for (const name of Object.keys(tokens)) {\n vars[name] = tokenRef(name)\n }\n\n return {\n vars,\n get(name: string) {\n return state.currentTokens[name]\n },\n set(name: string, value: string) {\n setToken(name, value)\n },\n setAll(nextTokens: TokenMap) {\n setTokens(nextTokens)\n },\n snapshot() {\n return { ...state.currentTokens }\n },\n }\n },\n getToken(name: string): string | undefined {\n return state.currentTokens[name]\n },\n getTokens(): TokenMap {\n return { ...state.currentTokens }\n },\n setToken,\n setTokens,\n applyTokenSet,\n generateTokenCssString(): string {\n return buildRootCss(state.currentTokens)\n },\n subscribe(fn: TokenSubscriber): () => void {\n subscribers.add(fn)\n return () => {\n subscribers.delete(fn)\n }\n },\n }\n}\n\nconst engine = createLiveTokenEngine()\n\nexport function liveToken(tokens: TokenMap): LiveTokenSet {\n return engine.liveToken(tokens)\n}\n\nexport function setToken(name: string, value: string): void {\n engine.setToken(name, value)\n}\n\nexport function setTokens(tokens: TokenMap): void {\n engine.setTokens(tokens)\n}\n\nexport function applyTokenSet(tokens: TokenMap): void {\n engine.applyTokenSet(tokens)\n}\n\nexport function getToken(name: string): string | undefined {\n return engine.getToken(name)\n}\n\nexport function getTokens(): TokenMap {\n return engine.getTokens()\n}\n\nexport function subscribeTokens(fn: TokenSubscriber): () => void {\n return engine.subscribe(fn)\n}\n\nexport function generateTokenCssString(): string {\n return engine.generateTokenCssString()\n}\n\nexport function createUseTokens() {\n return function useTokens(): TokenMap {\n const [tokens, setTokensState] = React.useState<TokenMap>(engine.getTokens())\n\n React.useEffect(() => {\n setTokensState(engine.getTokens())\n return engine.subscribe((nextTokens) => setTokensState(nextTokens))\n }, [])\n\n return tokens\n }\n}\n\nexport const liveTokenEngine: LiveTokenEngineBridge = {\n getToken: engine.getToken,\n getTokens: engine.getTokens,\n setToken: engine.setToken,\n setTokens: engine.setTokens,\n applyTokenSet: engine.applyTokenSet,\n subscribeTokens: engine.subscribe,\n subscribe: engine.subscribe,\n}\n\ndeclare global {\n interface Window {\n __TW_TOKEN_ENGINE__?: LiveTokenEngineBridge\n }\n}\n\nconst globalTokenEngine = globalThis as typeof globalThis & {\n [TOKEN_ENGINE_KEY]?: LiveTokenEngineBridge\n}\n\nglobalTokenEngine[TOKEN_ENGINE_KEY] = liveTokenEngine\nif (typeof window !== \"undefined\") {\n window.__TW_TOKEN_ENGINE__ = liveTokenEngine\n}\n","import { z } from \"zod\"\n\nconst formatIssues = (error: z.ZodError): string =>\n error.issues\n .map((issue) => {\n const p = issue.path.length > 0 ? issue.path.join(\".\") : \"<root>\"\n return `${p}: ${issue.message}`\n })\n .join(\"; \")\n\nconst parseWithSchema = <T>(schema: z.ZodType<T>, data: unknown, label: string): T => {\n const parsed = schema.safeParse(data)\n if (parsed.success) return parsed.data\n throw new TypeError(`${label}: ${formatIssues(parsed.error)}`)\n}\n\nexport const SubComponentDefSchema = z.object({\n tag: z.string().optional(),\n class: z.string(),\n})\n\nexport type SubComponentDefInput = z.infer<typeof SubComponentDefSchema>\n\nexport const ComponentMetadataSchema = z.object({\n component: z.string(),\n tag: z.string(),\n baseClass: z.string(),\n subComponents: z.record(z.string(), SubComponentDefSchema),\n})\n\nexport type ComponentMetadataInput = z.infer<typeof ComponentMetadataSchema>\n\nexport const ConditionalPropsSchema = z.record(z.string(), z.string())\n\nexport type ConditionalPropsInput = z.infer<typeof ConditionalPropsSchema>\n\nexport const parseSubComponentDef = (data: unknown) =>\n parseWithSchema(SubComponentDefSchema, data, \"sub-component definition is invalid\")\n\nexport const parseComponentMetadata = (data: unknown) =>\n parseWithSchema(ComponentMetadataSchema, data, \"component metadata is invalid\")\n"],"mappings":"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","names":["import_react","setToken","setTokens","applyTokenSet","React","React"]}
1
+ {"version":3,"sources":["../src/umbrella/runtime.ts","../packages/domain/runtime/src/index.ts","../packages/domain/theme/src/liveTokenEngine.ts","../packages/domain/runtime/src/schemas.ts"],"sourcesContent":["export * from \"@tailwind-styled/runtime\"\n","/**\n * @tailwind-styled/runtime v5\n *\n * Lightweight runtime helpers for compiled tailwind-styled-v5 components.\n * Live token engine has been moved to @tailwind-styled/theme package.\n */\n\nimport React from \"react\"\n\n// Re-export live token engine from @tailwind-styled/theme\nexport type {\n LiveTokenEngineBridge,\n LiveTokenSet,\n TokenMap,\n TokenSubscriber,\n} from \"@tailwind-styled/theme\"\nexport {\n applyTokenSet,\n createUseTokens,\n generateTokenCssString,\n getToken,\n getTokens,\n liveToken,\n liveTokenEngine,\n setToken,\n setTokens,\n subscribeTokens,\n tokenRef,\n tokenVar,\n} from \"@tailwind-styled/theme/live-tokens\"\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Types\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport interface SubComponentDef {\n /** HTML tag to render (default: \"span\") */\n tag?: string\n /** Scoped CSS class generated by Rust, e.g. \"Button_icon_abc123\" */\n class: string\n}\n\nexport type SubComponentMap = Record<string, SubComponentDef>\n\n/**\n * Map of prop name → CSS class appended when the prop is truthy.\n * e.g. { fullWidth: \"w-full\", large: \"text-lg px-6 py-3\" }\n */\nexport type ConditionalProps = Record<string, string>\n\n/**\n * A compound styled component: base ForwardRef + attached .SubName properties.\n * The generic params are intentionally loose so callers don't need to repeat them.\n */\nexport type StyledComponent<S extends SubComponentMap = SubComponentMap> =\n React.ForwardRefExoticComponent<\n React.HTMLAttributes<HTMLElement> & React.RefAttributes<HTMLElement>\n > & {\n [K in keyof S]: React.ForwardRefExoticComponent<\n React.HTMLAttributes<HTMLElement> & React.RefAttributes<HTMLElement>\n >\n }\n\n/** Metadata for one compound component produced by Rust. */\nexport interface ComponentMetadata {\n component: string\n tag: string\n baseClass: string\n subComponents: SubComponentMap\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// cx — tiny className utility (no external dependency)\n// ─────────────────────────────────────────────────────────────────────────────\n\ntype ClassInput = string | number | false | null | undefined | ClassInput[]\n\nexport function cx(...inputs: ClassInput[]): string {\n const out: string[] = []\n for (const input of inputs) {\n if (!input) continue // filters 0, false, null, undefined, \"\"\n if (typeof input === \"string\") {\n out.push(input)\n } else if (typeof input === \"number\") {\n out.push(String(input))\n } else if (Array.isArray(input)) {\n const nested = cx(...input)\n if (nested) out.push(nested)\n }\n }\n return out.join(\" \")\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// createComponent\n// ─────────────────────────────────────────────────────────────────────────────\n\n/**\n * Build a compound styled React component from Rust-generated metadata.\n *\n * @param tag HTML element tag, e.g. \"button\" | \"div\"\n * @param baseClass Scoped base class from Rust, e.g. \"Button_abc123\"\n * @param subComponents Map of subcomponent definitions (optional)\n * @param conditionals Map of prop name → CSS class (optional)\n *\n * @example\n * // Injected automatically by the compiler — do not call manually\n * const Button = createComponent(\"button\", \"Button_abc123\", {\n * icon: { tag: \"span\", class: \"Button_icon_abc123\" },\n * text: { tag: \"span\", class: \"Button_text_abc123\" },\n * }, { fullWidth: \"w-full\" })\n *\n * // Usage in JSX:\n * <Button fullWidth>\n * <Button.icon>🔍</Button.icon>\n * <Button.text>Search</Button.text>\n * </Button>\n */\nexport function createComponent<S extends SubComponentMap = SubComponentMap>(\n tag: string,\n baseClass: string,\n subComponents?: S,\n conditionals?: ConditionalProps\n): StyledComponent<S> {\n type Props = React.HTMLAttributes<HTMLElement> &\n React.RefAttributes<HTMLElement> &\n Record<string, unknown>\n\n // ── Base component ─────────────────────────────────────────────────────────\n const Base = React.forwardRef<HTMLElement, Props>(function TwBase(props, ref) {\n const extra: string[] = []\n\n // Collect conditional classes\n if (conditionals) {\n for (const [prop, cls] of Object.entries(conditionals)) {\n if (props[prop]) extra.push(cls)\n }\n }\n\n // Build clean props — strip conditional + subcomponent boolean props\n const clean: Record<string, unknown> = {}\n const stripKeys = new Set([\n \"className\",\n ...(conditionals ? Object.keys(conditionals) : []),\n ...(subComponents ? Object.keys(subComponents) : []),\n ])\n for (const [k, v] of Object.entries(props)) {\n if (!stripKeys.has(k)) clean[k] = v\n }\n\n const className = cx(baseClass, ...extra, (props.className as string) ?? \"\")\n\n return React.createElement(tag, { ...clean, ref, className: className || undefined })\n })\n\n ;(Base as { displayName?: string }).displayName = `tw.${String(tag)}`\n\n // ── Attach subcomponent properties ────────────────────────────────────────\n if (subComponents) {\n for (const [subName, def] of Object.entries(subComponents)) {\n const subTag = def.tag ?? \"span\"\n const subClass = def.class\n\n const SubComp = React.forwardRef<HTMLElement, Props>(function TwSub(props, ref) {\n const className = cx(subClass, (props.className as string) ?? \"\")\n const clean: Record<string, unknown> = { ...props }\n delete clean.className\n return React.createElement(subTag, { ...clean, ref, className: className || undefined })\n })\n\n ;(SubComp as { displayName?: string }).displayName = `tw.${String(tag)}.${String(subName)}`\n\n ;(Base as unknown as Record<string, unknown>)[subName] = SubComp\n }\n }\n\n return Base as StyledComponent<S>\n}\n\n// Re-export schemas\nexport {\n type ComponentMetadataInput,\n ComponentMetadataSchema,\n type ConditionalPropsInput,\n ConditionalPropsSchema,\n parseComponentMetadata,\n parseSubComponentDef,\n type SubComponentDefInput,\n SubComponentDefSchema,\n} from \"./schemas\"\n","\"use client\"\n\nimport React from \"react\"\n\nimport type { TokenMap } from '@tailwind-styled/shared'\nexport type { TokenMap }\n\nexport type TokenSubscriber = (tokens: TokenMap) => void\n\nexport interface LiveTokenSet {\n vars: Record<string, string>\n get(name: string): string | undefined\n set(name: string, value: string): void\n setAll(tokens: TokenMap): void\n snapshot(): TokenMap\n}\n\nexport interface LiveTokenEngineBridge {\n getToken(name: string): string | undefined\n getTokens(): TokenMap\n setToken(name: string, value: string): void\n setTokens(tokens: TokenMap): void\n applyTokenSet(tokens: TokenMap): void\n subscribeTokens(fn: TokenSubscriber): () => void\n subscribe?(fn: TokenSubscriber): () => void\n}\n\ninterface LiveTokenEngineRuntime {\n liveToken(tokens: TokenMap): LiveTokenSet\n getToken(name: string): string | undefined\n getTokens(): TokenMap\n setToken(name: string, value: string): void\n setTokens(tokens: TokenMap): void\n applyTokenSet(tokens: TokenMap): void\n generateTokenCssString(): string\n subscribe(fn: TokenSubscriber): () => void\n}\n\nconst TOKEN_ENGINE_KEY = \"__TW_TOKEN_ENGINE__\"\n\nexport function tokenVar(name: string): string {\n const normalized = name.replace(/[^a-zA-Z0-9-]/g, \"-\").toLowerCase()\n return `--tw-token-${normalized}`\n}\n\nexport function tokenRef(name: string): string {\n return `var(${tokenVar(name)})`\n}\n\nconst buildRootCss = (tokens: TokenMap): string => {\n const vars = Object.entries(tokens)\n .map(([name, value]) => ` ${tokenVar(name)}: ${value};`)\n .join(\"\\n\")\n return `:root {\\n${vars}\\n}`\n}\n\nconst createLiveTokenEngine = (): LiveTokenEngineRuntime => {\n const state = {\n currentTokens: {} as TokenMap,\n styleEl: null as HTMLStyleElement | null,\n }\n const subscribers = new Set<TokenSubscriber>()\n\n const syncStyleEl = (): void => {\n if (typeof document === \"undefined\") return\n\n if (!state.styleEl) {\n const styleEl = document.createElement(\"style\")\n styleEl.id = \"tw-live-tokens\"\n styleEl.setAttribute(\"data-tw-tokens\", \"true\")\n document.head.appendChild(styleEl)\n state.styleEl = styleEl\n }\n\n state.styleEl.textContent = buildRootCss(state.currentTokens)\n }\n\n const notifySubscribers = (): void => {\n const snapshot = { ...state.currentTokens }\n for (const subscriber of subscribers) {\n try {\n subscriber(snapshot)\n } catch {\n // Intentionally ignore subscriber errors.\n }\n }\n }\n\n const setToken = (name: string, value: string): void => {\n state.currentTokens = { ...state.currentTokens, [name]: value }\n if (typeof document !== \"undefined\") {\n document.documentElement.style.setProperty(tokenVar(name), value)\n }\n syncStyleEl()\n notifySubscribers()\n }\n\n const setTokens = (tokens: TokenMap): void => {\n state.currentTokens = { ...state.currentTokens, ...tokens }\n if (typeof document !== \"undefined\") {\n const root = document.documentElement\n for (const [name, value] of Object.entries(tokens)) {\n root.style.setProperty(tokenVar(name), value)\n }\n }\n syncStyleEl()\n notifySubscribers()\n }\n\n const applyTokenSet = (tokens: TokenMap): void => {\n if (typeof document !== \"undefined\") {\n const root = document.documentElement\n for (const name of Object.keys(state.currentTokens)) {\n if (!(name in tokens)) {\n root.style.removeProperty(tokenVar(name))\n }\n }\n for (const [name, value] of Object.entries(tokens)) {\n root.style.setProperty(tokenVar(name), value)\n }\n }\n\n state.currentTokens = { ...tokens }\n syncStyleEl()\n notifySubscribers()\n }\n\n return {\n liveToken(tokens: TokenMap): LiveTokenSet {\n setTokens(tokens)\n\n const vars: Record<string, string> = {}\n for (const name of Object.keys(tokens)) {\n vars[name] = tokenRef(name)\n }\n\n return {\n vars,\n get(name: string) {\n return state.currentTokens[name]\n },\n set(name: string, value: string) {\n setToken(name, value)\n },\n setAll(nextTokens: TokenMap) {\n setTokens(nextTokens)\n },\n snapshot() {\n return { ...state.currentTokens }\n },\n }\n },\n getToken(name: string): string | undefined {\n return state.currentTokens[name]\n },\n getTokens(): TokenMap {\n return { ...state.currentTokens }\n },\n setToken,\n setTokens,\n applyTokenSet,\n generateTokenCssString(): string {\n return buildRootCss(state.currentTokens)\n },\n subscribe(fn: TokenSubscriber): () => void {\n subscribers.add(fn)\n return () => {\n subscribers.delete(fn)\n }\n },\n }\n}\n\nconst engine = createLiveTokenEngine()\n\nexport function liveToken(tokens: TokenMap): LiveTokenSet {\n return engine.liveToken(tokens)\n}\n\nexport function setToken(name: string, value: string): void {\n engine.setToken(name, value)\n}\n\nexport function setTokens(tokens: TokenMap): void {\n engine.setTokens(tokens)\n}\n\nexport function applyTokenSet(tokens: TokenMap): void {\n engine.applyTokenSet(tokens)\n}\n\nexport function getToken(name: string): string | undefined {\n return engine.getToken(name)\n}\n\nexport function getTokens(): TokenMap {\n return engine.getTokens()\n}\n\nexport function subscribeTokens(fn: TokenSubscriber): () => void {\n return engine.subscribe(fn)\n}\n\nexport function generateTokenCssString(): string {\n return engine.generateTokenCssString()\n}\n\nexport function createUseTokens() {\n return function useTokens(): TokenMap {\n // useSyncExternalStore untuk konsistensi SSR/client:\n // - getServerSnapshot() return empty object → SSR render tanpa tokens\n // - getSnapshot() return live tokens di client setelah hydration\n // Ini menghilangkan hydration mismatch karena server dan client\n // initial render keduanya return {} (empty), lalu useEffect update\n // ke nilai aktual via subscriber.\n const [tokens, setTokensState] = React.useState<TokenMap>({})\n\n React.useEffect(() => {\n // Set ke nilai aktual setelah mount (client-only)\n setTokensState(engine.getTokens())\n return engine.subscribe((nextTokens) => setTokensState(nextTokens))\n }, [])\n\n return tokens\n }\n}\n\nexport const liveTokenEngine: LiveTokenEngineBridge = {\n getToken: engine.getToken,\n getTokens: engine.getTokens,\n setToken: engine.setToken,\n setTokens: engine.setTokens,\n applyTokenSet: engine.applyTokenSet,\n subscribeTokens: engine.subscribe,\n subscribe: engine.subscribe,\n}\n\ndeclare global {\n interface Window {\n __TW_TOKEN_ENGINE__?: LiveTokenEngineBridge\n }\n}\n\nconst globalTokenEngine = globalThis as typeof globalThis & {\n [TOKEN_ENGINE_KEY]?: LiveTokenEngineBridge\n}\n\nglobalTokenEngine[TOKEN_ENGINE_KEY] = liveTokenEngine\nif (typeof window !== \"undefined\") {\n window.__TW_TOKEN_ENGINE__ = liveTokenEngine\n}\n","import { z } from \"zod\"\n\nconst formatIssues = (error: z.ZodError): string =>\n error.issues\n .map((issue) => {\n const p = issue.path.length > 0 ? issue.path.join(\".\") : \"<root>\"\n return `${p}: ${issue.message}`\n })\n .join(\"; \")\n\nconst parseWithSchema = <T>(schema: z.ZodType<T>, data: unknown, label: string): T => {\n const parsed = schema.safeParse(data)\n if (parsed.success) return parsed.data\n throw new TypeError(`${label}: ${formatIssues(parsed.error)}`)\n}\n\nexport const SubComponentDefSchema = z.object({\n tag: z.string().optional(),\n class: z.string(),\n})\n\nexport type SubComponentDefInput = z.infer<typeof SubComponentDefSchema>\n\nexport const ComponentMetadataSchema = z.object({\n component: z.string(),\n tag: z.string(),\n baseClass: z.string(),\n subComponents: z.record(z.string(), SubComponentDefSchema),\n})\n\nexport type ComponentMetadataInput = z.infer<typeof ComponentMetadataSchema>\n\nexport const ConditionalPropsSchema = z.record(z.string(), z.string())\n\nexport type ConditionalPropsInput = z.infer<typeof ConditionalPropsSchema>\n\nexport const parseSubComponentDef = (data: unknown) =>\n parseWithSchema(SubComponentDefSchema, data, \"sub-component definition is invalid\")\n\nexport const parseComponentMetadata = (data: unknown) =>\n parseWithSchema(ComponentMetadataSchema, data, \"component metadata is invalid\")\n"],"mappings":"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","names":["import_react","setToken","setTokens","applyTokenSet","React","React"]}
package/dist/runtime.mjs CHANGED
@@ -149,7 +149,7 @@ function generateTokenCssString() {
149
149
  }
150
150
  function createUseTokens() {
151
151
  return function useTokens() {
152
- const [tokens, setTokensState] = React.useState(engine.getTokens());
152
+ const [tokens, setTokensState] = React.useState({});
153
153
  React.useEffect(() => {
154
154
  setTokensState(engine.getTokens());
155
155
  return engine.subscribe((nextTokens) => setTokensState(nextTokens));