tailwind-styled-v4 5.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.
- package/CHANGELOG.md +398 -0
- package/LICENSE +21 -0
- package/README.md +532 -0
- package/dist/analyzer.d.mts +114 -0
- package/dist/analyzer.d.ts +114 -0
- package/dist/analyzer.js +1555 -0
- package/dist/analyzer.js.map +1 -0
- package/dist/analyzer.mjs +1544 -0
- package/dist/analyzer.mjs.map +1 -0
- package/dist/{animate.d.cts → animate.d.mts} +3 -30
- package/dist/animate.d.ts +3 -30
- package/dist/animate.js +149 -99
- package/dist/animate.js.map +1 -1
- package/dist/{animate.cjs → animate.mjs} +130 -119
- package/dist/animate.mjs.map +1 -0
- package/dist/atomic.d.mts +18 -0
- package/dist/atomic.d.ts +18 -0
- package/dist/atomic.js +191 -0
- package/dist/atomic.js.map +1 -0
- package/dist/atomic.mjs +185 -0
- package/dist/atomic.mjs.map +1 -0
- package/dist/cli.d.mts +1 -0
- package/dist/cli.d.ts +1 -0
- package/dist/cli.js +6063 -0
- package/dist/cli.js.map +1 -0
- package/dist/cli.mjs +6053 -0
- package/dist/cli.mjs.map +1 -0
- package/dist/compiler.d.mts +1009 -0
- package/dist/compiler.d.ts +1009 -0
- package/dist/compiler.js +4518 -0
- package/dist/compiler.js.map +1 -0
- package/dist/compiler.mjs +4443 -0
- package/dist/compiler.mjs.map +1 -0
- package/dist/dashboard.d.mts +272 -0
- package/dist/dashboard.d.ts +272 -0
- package/dist/dashboard.js +249 -0
- package/dist/dashboard.js.map +1 -0
- package/dist/dashboard.mjs +239 -0
- package/dist/dashboard.mjs.map +1 -0
- package/dist/devtools.js +170 -157
- package/dist/devtools.js.map +1 -1
- package/dist/{devtools.cjs → devtools.mjs} +165 -166
- package/dist/devtools.mjs.map +1 -0
- package/dist/engine.d.mts +84 -0
- package/dist/engine.d.ts +84 -0
- package/dist/engine.js +3014 -0
- package/dist/engine.js.map +1 -0
- package/dist/engine.mjs +3005 -0
- package/dist/engine.mjs.map +1 -0
- package/dist/{index.d.cts → index.d.mts} +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +945 -36
- package/dist/index.js.map +1 -1
- package/dist/{index.cjs → index.mjs} +899 -90
- package/dist/index.mjs.map +1 -0
- package/dist/liveTokenEngine-DYN3Zale.d.mts +34 -0
- package/dist/liveTokenEngine-DYN3Zale.d.ts +34 -0
- package/dist/{next.d.cts → next.d.mts} +2 -1
- package/dist/next.d.ts +2 -1
- package/dist/next.js +6853 -35
- package/dist/next.js.map +1 -1
- package/dist/next.mjs +7050 -0
- package/dist/next.mjs.map +1 -0
- package/dist/plugin.d.mts +90 -0
- package/dist/plugin.d.ts +90 -0
- package/dist/plugin.js +185 -0
- package/dist/plugin.js.map +1 -0
- package/dist/plugin.mjs +174 -0
- package/dist/plugin.mjs.map +1 -0
- package/dist/pluginRegistry.d.mts +83 -0
- package/dist/pluginRegistry.d.ts +83 -0
- package/dist/pluginRegistry.js +303 -0
- package/dist/pluginRegistry.js.map +1 -0
- package/dist/pluginRegistry.mjs +298 -0
- package/dist/pluginRegistry.mjs.map +1 -0
- package/dist/preset.js +9 -4
- package/dist/preset.js.map +1 -1
- package/dist/{preset.cjs → preset.mjs} +5 -14
- package/dist/preset.mjs.map +1 -0
- package/dist/rspack.d.mts +33 -0
- package/dist/rspack.d.ts +33 -0
- package/dist/rspack.js +55 -0
- package/dist/rspack.js.map +1 -0
- package/dist/rspack.mjs +45 -0
- package/dist/rspack.mjs.map +1 -0
- package/dist/runtime.d.mts +62 -0
- package/dist/runtime.d.ts +62 -0
- package/dist/runtime.js +207 -0
- package/dist/runtime.js.map +1 -0
- package/dist/runtime.mjs +188 -0
- package/dist/runtime.mjs.map +1 -0
- package/dist/runtimeCss.d.mts +65 -0
- package/dist/runtimeCss.d.ts +65 -0
- package/dist/{css.cjs → runtimeCss.js} +71 -4
- package/dist/runtimeCss.js.map +1 -0
- package/dist/{css.js → runtimeCss.mjs} +66 -5
- package/dist/runtimeCss.mjs.map +1 -0
- package/dist/scanner.d.mts +25 -0
- package/dist/scanner.d.ts +25 -0
- package/dist/scanner.js +717 -0
- package/dist/scanner.js.map +1 -0
- package/dist/scanner.mjs +703 -0
- package/dist/scanner.mjs.map +1 -0
- package/dist/shared.d.mts +85 -0
- package/dist/shared.d.ts +85 -0
- package/dist/shared.js +255 -0
- package/dist/shared.js.map +1 -0
- package/dist/shared.mjs +233 -0
- package/dist/shared.mjs.map +1 -0
- package/dist/storybookAddon.d.mts +108 -0
- package/dist/storybookAddon.d.ts +108 -0
- package/dist/storybookAddon.js +95 -0
- package/dist/storybookAddon.js.map +1 -0
- package/dist/storybookAddon.mjs +88 -0
- package/dist/storybookAddon.mjs.map +1 -0
- package/dist/svelte.d.mts +114 -0
- package/dist/svelte.d.ts +114 -0
- package/dist/svelte.js +67 -0
- package/dist/svelte.js.map +1 -0
- package/dist/svelte.mjs +59 -0
- package/dist/svelte.mjs.map +1 -0
- package/dist/testing.d.mts +185 -0
- package/dist/testing.d.ts +185 -0
- package/dist/testing.js +173 -0
- package/dist/testing.js.map +1 -0
- package/dist/testing.mjs +158 -0
- package/dist/testing.mjs.map +1 -0
- package/dist/theme.d.mts +188 -0
- package/dist/theme.d.ts +188 -0
- package/dist/theme.js +334 -0
- package/dist/theme.js.map +1 -0
- package/dist/theme.mjs +311 -0
- package/dist/theme.mjs.map +1 -0
- package/dist/types-DXr2PmGP.d.mts +31 -0
- package/dist/types-DXr2PmGP.d.ts +31 -0
- package/dist/vite.js +4181 -16
- package/dist/vite.js.map +1 -1
- package/dist/vite.mjs +4281 -0
- package/dist/vite.mjs.map +1 -0
- package/dist/vue.d.mts +89 -0
- package/dist/vue.d.ts +89 -0
- package/dist/vue.js +104 -0
- package/dist/vue.js.map +1 -0
- package/dist/vue.mjs +96 -0
- package/dist/vue.mjs.map +1 -0
- package/package.json +168 -65
- package/dist/animate.cjs.map +0 -1
- package/dist/chunk-VZEJV27B.js +0 -11
- package/dist/chunk-VZEJV27B.js.map +0 -1
- package/dist/chunk-Y5D3E72P.cjs +0 -13
- package/dist/chunk-Y5D3E72P.cjs.map +0 -1
- package/dist/css.cjs.map +0 -1
- package/dist/css.d.cts +0 -30
- package/dist/css.d.ts +0 -30
- package/dist/css.js.map +0 -1
- package/dist/devtools.cjs.map +0 -1
- package/dist/index.cjs.map +0 -1
- package/dist/next.cjs +0 -248
- package/dist/next.cjs.map +0 -1
- package/dist/preset.cjs.map +0 -1
- package/dist/turbopackLoader.cjs +0 -37
- package/dist/turbopackLoader.cjs.map +0 -1
- package/dist/turbopackLoader.d.cts +0 -12
- package/dist/turbopackLoader.d.ts +0 -12
- package/dist/turbopackLoader.js +0 -35
- package/dist/turbopackLoader.js.map +0 -1
- package/dist/vite.cjs +0 -138
- package/dist/vite.cjs.map +0 -1
- package/dist/webpackLoader.cjs +0 -51
- package/dist/webpackLoader.cjs.map +0 -1
- package/dist/webpackLoader.d.cts +0 -17
- package/dist/webpackLoader.d.ts +0 -17
- package/dist/webpackLoader.js +0 -49
- package/dist/webpackLoader.js.map +0 -1
- /package/dist/{devtools.d.cts → devtools.d.mts} +0 -0
- /package/dist/{preset.d.cts → preset.d.mts} +0 -0
- /package/dist/{vite.d.cts → vite.d.mts} +0 -0
package/dist/rspack.js
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var path = require('path');
|
|
6
|
+
|
|
7
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
8
|
+
|
|
9
|
+
var path__default = /*#__PURE__*/_interopDefault(path);
|
|
10
|
+
|
|
11
|
+
/* tailwind-styled-v4 v5.0.1 | MIT | https://github.com/dictionar32/tailwind-styled-v4 */
|
|
12
|
+
|
|
13
|
+
var LOADER_PATH = path__default.default.resolve(__dirname, "loader.js");
|
|
14
|
+
var TailwindStyledRspackPlugin = class {
|
|
15
|
+
constructor(opts = {}) {
|
|
16
|
+
this.opts = opts;
|
|
17
|
+
}
|
|
18
|
+
apply(compiler) {
|
|
19
|
+
const isDev = compiler.options.mode !== "production";
|
|
20
|
+
const loaderOpts = {
|
|
21
|
+
// v5: Always zero-runtime
|
|
22
|
+
mode: "zero-runtime",
|
|
23
|
+
addDataAttr: this.opts.addDataAttr ?? isDev,
|
|
24
|
+
// Preserve cv, cx, cn, etc — only tw.* is transformed
|
|
25
|
+
preserveImports: true
|
|
26
|
+
};
|
|
27
|
+
const include = this.opts.include ?? /\.[jt]sx?$/;
|
|
28
|
+
const exclude = this.opts.exclude ?? /node_modules/;
|
|
29
|
+
const existing = compiler.options.module?.rules ?? [];
|
|
30
|
+
const alreadyRegistered = existing.some((r) => r._tailwindStyledRspackMarker === true);
|
|
31
|
+
if (alreadyRegistered) return;
|
|
32
|
+
const rule = {
|
|
33
|
+
_tailwindStyledRspackMarker: true,
|
|
34
|
+
test: include,
|
|
35
|
+
exclude,
|
|
36
|
+
use: [
|
|
37
|
+
{
|
|
38
|
+
loader: LOADER_PATH,
|
|
39
|
+
options: loaderOpts
|
|
40
|
+
}
|
|
41
|
+
]
|
|
42
|
+
};
|
|
43
|
+
compiler.options.module.rules = [rule, ...existing];
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
function tailwindStyledRspackPlugin(opts = {}) {
|
|
47
|
+
return new TailwindStyledRspackPlugin(opts);
|
|
48
|
+
}
|
|
49
|
+
var src_default = tailwindStyledRspackPlugin;
|
|
50
|
+
|
|
51
|
+
exports.TailwindStyledRspackPlugin = TailwindStyledRspackPlugin;
|
|
52
|
+
exports.default = src_default;
|
|
53
|
+
exports.tailwindStyledRspackPlugin = tailwindStyledRspackPlugin;
|
|
54
|
+
//# sourceMappingURL=rspack.js.map
|
|
55
|
+
//# sourceMappingURL=rspack.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../packages/rspack/src/index.ts"],"names":["path"],"mappings":";;;;;;;;;;;;AA6BA,IAAM,WAAA,GAAcA,qBAAA,CAAK,OAAA,CAAQ,SAAA,EAAW,WAAW,CAAA;AAEhD,IAAM,6BAAN,MAAiC;AAAA,EAGtC,WAAA,CAAY,IAAA,GAA4B,EAAC,EAAG;AAC1C,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AAAA,EACd;AAAA,EAEA,MAAM,QAAA,EAAqB;AACzB,IAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,OAAA,CAAQ,IAAA,KAAS,YAAA;AAExC,IAAA,MAAM,UAAA,GAAa;AAAA;AAAA,MAEjB,IAAA,EAAM,cAAA;AAAA,MACN,WAAA,EAAa,IAAA,CAAK,IAAA,CAAK,WAAA,IAAe,KAAA;AAAA;AAAA,MAEtC,eAAA,EAAiB;AAAA,KACnB;AAEA,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,IAAA,CAAK,OAAA,IAAW,YAAA;AACrC,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,IAAA,CAAK,OAAA,IAAW,cAAA;AAGrC,IAAA,MAAM,QAAA,GAAW,QAAA,CAAS,OAAA,CAAQ,MAAA,EAAQ,SAAS,EAAC;AACpD,IAAA,MAAM,oBAAoB,QAAA,CAAS,IAAA,CAAK,CAAC,CAAA,KAAW,CAAA,CAAE,gCAAgC,IAAI,CAAA;AAC1F,IAAA,IAAI,iBAAA,EAAmB;AAEvB,IAAA,MAAM,IAAA,GAAO;AAAA,MACX,2BAAA,EAA6B,IAAA;AAAA,MAC7B,IAAA,EAAM,OAAA;AAAA,MACN,OAAA;AAAA,MACA,GAAA,EAAK;AAAA,QACH;AAAA,UACE,MAAA,EAAQ,WAAA;AAAA,UACR,OAAA,EAAS;AAAA;AACX;AACF,KACF;AAEA,IAAA,QAAA,CAAS,QAAQ,MAAA,CAAO,KAAA,GAAQ,CAAC,IAAA,EAAM,GAAG,QAAQ,CAAA;AAAA,EACpD;AACF;AAEO,SAAS,0BAAA,CACd,IAAA,GAA4B,EAAC,EACD;AAC5B,EAAA,OAAO,IAAI,2BAA2B,IAAI,CAAA;AAC5C;AAEA,IAAO,WAAA,GAAQ","file":"rspack.js","sourcesContent":["/**\n * tailwind-styled-v4 — Rspack Plugin v5 (stable)\n *\n * Usage:\n * import { tailwindStyledRspackPlugin } from \"@tailwind-styled/rspack\"\n *\n * export default defineConfig({\n * plugins: [tailwindStyledRspackPlugin()],\n * })\n *\n * v5:\n * - Simplified API\n * - Uses @tailwind-styled/engine for build\n * - Mode always zero-runtime\n */\n\nimport path from \"node:path\"\n\nexport interface RspackPluginOptions {\n /** File patterns to include. Default: /\\.[jt]sx?$/ */\n include?: RegExp\n /** File patterns to exclude. Default: /node_modules/ */\n exclude?: RegExp\n /** Add data-tw debug attributes in dev. Default: true in dev */\n addDataAttr?: boolean\n /** Enable analyzer. Default: false */\n analyze?: boolean\n}\n\nconst LOADER_PATH = path.resolve(__dirname, \"loader.js\")\n\nexport class TailwindStyledRspackPlugin {\n private opts: RspackPluginOptions\n\n constructor(opts: RspackPluginOptions = {}) {\n this.opts = opts\n }\n\n apply(compiler: any): void {\n const isDev = compiler.options.mode !== \"production\"\n\n const loaderOpts = {\n // v5: Always zero-runtime\n mode: \"zero-runtime\" as const,\n addDataAttr: this.opts.addDataAttr ?? isDev,\n // Preserve cv, cx, cn, etc — only tw.* is transformed\n preserveImports: true,\n }\n\n const include = this.opts.include ?? /\\.[jt]sx?$/\n const exclude = this.opts.exclude ?? /node_modules/\n\n // Check idempotency\n const existing = compiler.options.module?.rules ?? []\n const alreadyRegistered = existing.some((r: any) => r._tailwindStyledRspackMarker === true)\n if (alreadyRegistered) return\n\n const rule = {\n _tailwindStyledRspackMarker: true,\n test: include,\n exclude: exclude,\n use: [\n {\n loader: LOADER_PATH,\n options: loaderOpts,\n },\n ],\n }\n\n compiler.options.module.rules = [rule, ...existing]\n }\n}\n\nexport function tailwindStyledRspackPlugin(\n opts: RspackPluginOptions = {}\n): TailwindStyledRspackPlugin {\n return new TailwindStyledRspackPlugin(opts)\n}\n\nexport default tailwindStyledRspackPlugin\n"]}
|
package/dist/rspack.mjs
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import path from 'path';
|
|
2
|
+
|
|
3
|
+
/* tailwind-styled-v4 v5.0.1 | MIT | https://github.com/dictionar32/tailwind-styled-v4 */
|
|
4
|
+
|
|
5
|
+
var LOADER_PATH = path.resolve(__dirname, "loader.js");
|
|
6
|
+
var TailwindStyledRspackPlugin = class {
|
|
7
|
+
constructor(opts = {}) {
|
|
8
|
+
this.opts = opts;
|
|
9
|
+
}
|
|
10
|
+
apply(compiler) {
|
|
11
|
+
const isDev = compiler.options.mode !== "production";
|
|
12
|
+
const loaderOpts = {
|
|
13
|
+
// v5: Always zero-runtime
|
|
14
|
+
mode: "zero-runtime",
|
|
15
|
+
addDataAttr: this.opts.addDataAttr ?? isDev,
|
|
16
|
+
// Preserve cv, cx, cn, etc — only tw.* is transformed
|
|
17
|
+
preserveImports: true
|
|
18
|
+
};
|
|
19
|
+
const include = this.opts.include ?? /\.[jt]sx?$/;
|
|
20
|
+
const exclude = this.opts.exclude ?? /node_modules/;
|
|
21
|
+
const existing = compiler.options.module?.rules ?? [];
|
|
22
|
+
const alreadyRegistered = existing.some((r) => r._tailwindStyledRspackMarker === true);
|
|
23
|
+
if (alreadyRegistered) return;
|
|
24
|
+
const rule = {
|
|
25
|
+
_tailwindStyledRspackMarker: true,
|
|
26
|
+
test: include,
|
|
27
|
+
exclude,
|
|
28
|
+
use: [
|
|
29
|
+
{
|
|
30
|
+
loader: LOADER_PATH,
|
|
31
|
+
options: loaderOpts
|
|
32
|
+
}
|
|
33
|
+
]
|
|
34
|
+
};
|
|
35
|
+
compiler.options.module.rules = [rule, ...existing];
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
function tailwindStyledRspackPlugin(opts = {}) {
|
|
39
|
+
return new TailwindStyledRspackPlugin(opts);
|
|
40
|
+
}
|
|
41
|
+
var src_default = tailwindStyledRspackPlugin;
|
|
42
|
+
|
|
43
|
+
export { TailwindStyledRspackPlugin, src_default as default, tailwindStyledRspackPlugin };
|
|
44
|
+
//# sourceMappingURL=rspack.mjs.map
|
|
45
|
+
//# sourceMappingURL=rspack.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../packages/rspack/src/index.ts"],"names":[],"mappings":";;;;AA6BA,IAAM,WAAA,GAAc,IAAA,CAAK,OAAA,CAAQ,SAAA,EAAW,WAAW,CAAA;AAEhD,IAAM,6BAAN,MAAiC;AAAA,EAGtC,WAAA,CAAY,IAAA,GAA4B,EAAC,EAAG;AAC1C,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AAAA,EACd;AAAA,EAEA,MAAM,QAAA,EAAqB;AACzB,IAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,OAAA,CAAQ,IAAA,KAAS,YAAA;AAExC,IAAA,MAAM,UAAA,GAAa;AAAA;AAAA,MAEjB,IAAA,EAAM,cAAA;AAAA,MACN,WAAA,EAAa,IAAA,CAAK,IAAA,CAAK,WAAA,IAAe,KAAA;AAAA;AAAA,MAEtC,eAAA,EAAiB;AAAA,KACnB;AAEA,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,IAAA,CAAK,OAAA,IAAW,YAAA;AACrC,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,IAAA,CAAK,OAAA,IAAW,cAAA;AAGrC,IAAA,MAAM,QAAA,GAAW,QAAA,CAAS,OAAA,CAAQ,MAAA,EAAQ,SAAS,EAAC;AACpD,IAAA,MAAM,oBAAoB,QAAA,CAAS,IAAA,CAAK,CAAC,CAAA,KAAW,CAAA,CAAE,gCAAgC,IAAI,CAAA;AAC1F,IAAA,IAAI,iBAAA,EAAmB;AAEvB,IAAA,MAAM,IAAA,GAAO;AAAA,MACX,2BAAA,EAA6B,IAAA;AAAA,MAC7B,IAAA,EAAM,OAAA;AAAA,MACN,OAAA;AAAA,MACA,GAAA,EAAK;AAAA,QACH;AAAA,UACE,MAAA,EAAQ,WAAA;AAAA,UACR,OAAA,EAAS;AAAA;AACX;AACF,KACF;AAEA,IAAA,QAAA,CAAS,QAAQ,MAAA,CAAO,KAAA,GAAQ,CAAC,IAAA,EAAM,GAAG,QAAQ,CAAA;AAAA,EACpD;AACF;AAEO,SAAS,0BAAA,CACd,IAAA,GAA4B,EAAC,EACD;AAC5B,EAAA,OAAO,IAAI,2BAA2B,IAAI,CAAA;AAC5C;AAEA,IAAO,WAAA,GAAQ","file":"rspack.mjs","sourcesContent":["/**\n * tailwind-styled-v4 — Rspack Plugin v5 (stable)\n *\n * Usage:\n * import { tailwindStyledRspackPlugin } from \"@tailwind-styled/rspack\"\n *\n * export default defineConfig({\n * plugins: [tailwindStyledRspackPlugin()],\n * })\n *\n * v5:\n * - Simplified API\n * - Uses @tailwind-styled/engine for build\n * - Mode always zero-runtime\n */\n\nimport path from \"node:path\"\n\nexport interface RspackPluginOptions {\n /** File patterns to include. Default: /\\.[jt]sx?$/ */\n include?: RegExp\n /** File patterns to exclude. Default: /node_modules/ */\n exclude?: RegExp\n /** Add data-tw debug attributes in dev. Default: true in dev */\n addDataAttr?: boolean\n /** Enable analyzer. Default: false */\n analyze?: boolean\n}\n\nconst LOADER_PATH = path.resolve(__dirname, \"loader.js\")\n\nexport class TailwindStyledRspackPlugin {\n private opts: RspackPluginOptions\n\n constructor(opts: RspackPluginOptions = {}) {\n this.opts = opts\n }\n\n apply(compiler: any): void {\n const isDev = compiler.options.mode !== \"production\"\n\n const loaderOpts = {\n // v5: Always zero-runtime\n mode: \"zero-runtime\" as const,\n addDataAttr: this.opts.addDataAttr ?? isDev,\n // Preserve cv, cx, cn, etc — only tw.* is transformed\n preserveImports: true,\n }\n\n const include = this.opts.include ?? /\\.[jt]sx?$/\n const exclude = this.opts.exclude ?? /node_modules/\n\n // Check idempotency\n const existing = compiler.options.module?.rules ?? []\n const alreadyRegistered = existing.some((r: any) => r._tailwindStyledRspackMarker === true)\n if (alreadyRegistered) return\n\n const rule = {\n _tailwindStyledRspackMarker: true,\n test: include,\n exclude: exclude,\n use: [\n {\n loader: LOADER_PATH,\n options: loaderOpts,\n },\n ],\n }\n\n compiler.options.module.rules = [rule, ...existing]\n }\n}\n\nexport function tailwindStyledRspackPlugin(\n opts: RspackPluginOptions = {}\n): TailwindStyledRspackPlugin {\n return new TailwindStyledRspackPlugin(opts)\n}\n\nexport default tailwindStyledRspackPlugin\n"]}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export { L as LiveTokenEngineBridge, a as LiveTokenSet, T as TokenMap, b as TokenSubscriber, c as applyTokenSet, d as createUseTokens, g as generateTokenCssString, e as getToken, f as getTokens, l as liveToken, h as liveTokenEngine, s as setToken, i as setTokens, j as subscribeTokens, t as tokenRef, k as tokenVar } from './liveTokenEngine-DYN3Zale.mjs';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* @tailwind-styled/runtime v5
|
|
6
|
+
*
|
|
7
|
+
* Lightweight runtime helpers for compiled tailwind-styled-v5 components.
|
|
8
|
+
* Live token engine has been moved to @tailwind-styled/theme package.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
interface SubComponentDef {
|
|
12
|
+
/** HTML tag to render (default: "span") */
|
|
13
|
+
tag?: string;
|
|
14
|
+
/** Scoped CSS class generated by Rust, e.g. "Button_icon_abc123" */
|
|
15
|
+
class: string;
|
|
16
|
+
}
|
|
17
|
+
type SubComponentMap = Record<string, SubComponentDef>;
|
|
18
|
+
/**
|
|
19
|
+
* Map of prop name → CSS class appended when the prop is truthy.
|
|
20
|
+
* e.g. { fullWidth: "w-full", large: "text-lg px-6 py-3" }
|
|
21
|
+
*/
|
|
22
|
+
type ConditionalProps = Record<string, string>;
|
|
23
|
+
/**
|
|
24
|
+
* A compound styled component: base ForwardRef + attached .SubName properties.
|
|
25
|
+
* The generic params are intentionally loose so callers don't need to repeat them.
|
|
26
|
+
*/
|
|
27
|
+
type StyledComponent<S extends SubComponentMap = SubComponentMap> = React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLElement> & React.RefAttributes<HTMLElement>> & {
|
|
28
|
+
[K in keyof S]: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLElement> & React.RefAttributes<HTMLElement>>;
|
|
29
|
+
};
|
|
30
|
+
/** Metadata for one compound component produced by Rust. */
|
|
31
|
+
interface ComponentMetadata {
|
|
32
|
+
component: string;
|
|
33
|
+
tag: string;
|
|
34
|
+
baseClass: string;
|
|
35
|
+
subComponents: SubComponentMap;
|
|
36
|
+
}
|
|
37
|
+
type ClassInput = string | number | false | null | undefined | ClassInput[];
|
|
38
|
+
declare function cx(...inputs: ClassInput[]): string;
|
|
39
|
+
/**
|
|
40
|
+
* Build a compound styled React component from Rust-generated metadata.
|
|
41
|
+
*
|
|
42
|
+
* @param tag HTML element tag, e.g. "button" | "div"
|
|
43
|
+
* @param baseClass Scoped base class from Rust, e.g. "Button_abc123"
|
|
44
|
+
* @param subComponents Map of subcomponent definitions (optional)
|
|
45
|
+
* @param conditionals Map of prop name → CSS class (optional)
|
|
46
|
+
*
|
|
47
|
+
* @example
|
|
48
|
+
* // Injected automatically by the compiler — do not call manually
|
|
49
|
+
* const Button = createComponent("button", "Button_abc123", {
|
|
50
|
+
* icon: { tag: "span", class: "Button_icon_abc123" },
|
|
51
|
+
* text: { tag: "span", class: "Button_text_abc123" },
|
|
52
|
+
* }, { fullWidth: "w-full" })
|
|
53
|
+
*
|
|
54
|
+
* // Usage in JSX:
|
|
55
|
+
* <Button fullWidth>
|
|
56
|
+
* <Button.icon>🔍</Button.icon>
|
|
57
|
+
* <Button.text>Search</Button.text>
|
|
58
|
+
* </Button>
|
|
59
|
+
*/
|
|
60
|
+
declare function createComponent<S extends SubComponentMap = SubComponentMap>(tag: string, baseClass: string, subComponents?: S, conditionals?: ConditionalProps): StyledComponent<S>;
|
|
61
|
+
|
|
62
|
+
export { type ComponentMetadata, type ConditionalProps, type StyledComponent, type SubComponentDef, type SubComponentMap, createComponent, cx };
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export { L as LiveTokenEngineBridge, a as LiveTokenSet, T as TokenMap, b as TokenSubscriber, c as applyTokenSet, d as createUseTokens, g as generateTokenCssString, e as getToken, f as getTokens, l as liveToken, h as liveTokenEngine, s as setToken, i as setTokens, j as subscribeTokens, t as tokenRef, k as tokenVar } from './liveTokenEngine-DYN3Zale.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* @tailwind-styled/runtime v5
|
|
6
|
+
*
|
|
7
|
+
* Lightweight runtime helpers for compiled tailwind-styled-v5 components.
|
|
8
|
+
* Live token engine has been moved to @tailwind-styled/theme package.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
interface SubComponentDef {
|
|
12
|
+
/** HTML tag to render (default: "span") */
|
|
13
|
+
tag?: string;
|
|
14
|
+
/** Scoped CSS class generated by Rust, e.g. "Button_icon_abc123" */
|
|
15
|
+
class: string;
|
|
16
|
+
}
|
|
17
|
+
type SubComponentMap = Record<string, SubComponentDef>;
|
|
18
|
+
/**
|
|
19
|
+
* Map of prop name → CSS class appended when the prop is truthy.
|
|
20
|
+
* e.g. { fullWidth: "w-full", large: "text-lg px-6 py-3" }
|
|
21
|
+
*/
|
|
22
|
+
type ConditionalProps = Record<string, string>;
|
|
23
|
+
/**
|
|
24
|
+
* A compound styled component: base ForwardRef + attached .SubName properties.
|
|
25
|
+
* The generic params are intentionally loose so callers don't need to repeat them.
|
|
26
|
+
*/
|
|
27
|
+
type StyledComponent<S extends SubComponentMap = SubComponentMap> = React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLElement> & React.RefAttributes<HTMLElement>> & {
|
|
28
|
+
[K in keyof S]: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLElement> & React.RefAttributes<HTMLElement>>;
|
|
29
|
+
};
|
|
30
|
+
/** Metadata for one compound component produced by Rust. */
|
|
31
|
+
interface ComponentMetadata {
|
|
32
|
+
component: string;
|
|
33
|
+
tag: string;
|
|
34
|
+
baseClass: string;
|
|
35
|
+
subComponents: SubComponentMap;
|
|
36
|
+
}
|
|
37
|
+
type ClassInput = string | number | false | null | undefined | ClassInput[];
|
|
38
|
+
declare function cx(...inputs: ClassInput[]): string;
|
|
39
|
+
/**
|
|
40
|
+
* Build a compound styled React component from Rust-generated metadata.
|
|
41
|
+
*
|
|
42
|
+
* @param tag HTML element tag, e.g. "button" | "div"
|
|
43
|
+
* @param baseClass Scoped base class from Rust, e.g. "Button_abc123"
|
|
44
|
+
* @param subComponents Map of subcomponent definitions (optional)
|
|
45
|
+
* @param conditionals Map of prop name → CSS class (optional)
|
|
46
|
+
*
|
|
47
|
+
* @example
|
|
48
|
+
* // Injected automatically by the compiler — do not call manually
|
|
49
|
+
* const Button = createComponent("button", "Button_abc123", {
|
|
50
|
+
* icon: { tag: "span", class: "Button_icon_abc123" },
|
|
51
|
+
* text: { tag: "span", class: "Button_text_abc123" },
|
|
52
|
+
* }, { fullWidth: "w-full" })
|
|
53
|
+
*
|
|
54
|
+
* // Usage in JSX:
|
|
55
|
+
* <Button fullWidth>
|
|
56
|
+
* <Button.icon>🔍</Button.icon>
|
|
57
|
+
* <Button.text>Search</Button.text>
|
|
58
|
+
* </Button>
|
|
59
|
+
*/
|
|
60
|
+
declare function createComponent<S extends SubComponentMap = SubComponentMap>(tag: string, baseClass: string, subComponents?: S, conditionals?: ConditionalProps): StyledComponent<S>;
|
|
61
|
+
|
|
62
|
+
export { type ComponentMetadata, type ConditionalProps, type StyledComponent, type SubComponentDef, type SubComponentMap, createComponent, cx };
|
package/dist/runtime.js
ADDED
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var React2 = require('react');
|
|
4
|
+
|
|
5
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
6
|
+
|
|
7
|
+
var React2__default = /*#__PURE__*/_interopDefault(React2);
|
|
8
|
+
|
|
9
|
+
/* tailwind-styled-v4 v5.0.1 | MIT | https://github.com/dictionar32/tailwind-styled-v4 */
|
|
10
|
+
|
|
11
|
+
var _currentTokens = {};
|
|
12
|
+
var _subscribers = /* @__PURE__ */ new Set();
|
|
13
|
+
var _styleEl = null;
|
|
14
|
+
function tokenVar(name) {
|
|
15
|
+
const normalized = name.replace(/[^a-zA-Z0-9-]/g, "-").toLowerCase();
|
|
16
|
+
return `--tw-token-${normalized}`;
|
|
17
|
+
}
|
|
18
|
+
function tokenRef(name) {
|
|
19
|
+
return `var(${tokenVar(name)})`;
|
|
20
|
+
}
|
|
21
|
+
function buildRootCss(tokens) {
|
|
22
|
+
const vars = Object.entries(tokens).map(([name, value]) => ` ${tokenVar(name)}: ${value};`).join("\n");
|
|
23
|
+
return `:root {
|
|
24
|
+
${vars}
|
|
25
|
+
}`;
|
|
26
|
+
}
|
|
27
|
+
function syncStyleEl() {
|
|
28
|
+
if (typeof document === "undefined") return;
|
|
29
|
+
if (!_styleEl) {
|
|
30
|
+
_styleEl = document.createElement("style");
|
|
31
|
+
_styleEl.id = "tw-live-tokens";
|
|
32
|
+
_styleEl.setAttribute("data-tw-tokens", "true");
|
|
33
|
+
document.head.appendChild(_styleEl);
|
|
34
|
+
}
|
|
35
|
+
_styleEl.textContent = buildRootCss(_currentTokens);
|
|
36
|
+
}
|
|
37
|
+
function notifySubscribers() {
|
|
38
|
+
const snapshot = { ..._currentTokens };
|
|
39
|
+
for (const subscriber of _subscribers) {
|
|
40
|
+
try {
|
|
41
|
+
subscriber(snapshot);
|
|
42
|
+
} catch {
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
function liveToken(tokens) {
|
|
47
|
+
_currentTokens = { ..._currentTokens, ...tokens };
|
|
48
|
+
syncStyleEl();
|
|
49
|
+
notifySubscribers();
|
|
50
|
+
const vars = {};
|
|
51
|
+
for (const name of Object.keys(tokens)) {
|
|
52
|
+
vars[name] = tokenRef(name);
|
|
53
|
+
}
|
|
54
|
+
return {
|
|
55
|
+
vars,
|
|
56
|
+
get(name) {
|
|
57
|
+
return _currentTokens[name];
|
|
58
|
+
},
|
|
59
|
+
set(name, value) {
|
|
60
|
+
setToken(name, value);
|
|
61
|
+
},
|
|
62
|
+
setAll(nextTokens) {
|
|
63
|
+
setTokens(nextTokens);
|
|
64
|
+
},
|
|
65
|
+
snapshot() {
|
|
66
|
+
return { ..._currentTokens };
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
function setToken(name, value) {
|
|
71
|
+
_currentTokens = { ..._currentTokens, [name]: value };
|
|
72
|
+
if (typeof document !== "undefined") {
|
|
73
|
+
document.documentElement.style.setProperty(tokenVar(name), value);
|
|
74
|
+
}
|
|
75
|
+
notifySubscribers();
|
|
76
|
+
}
|
|
77
|
+
function setTokens(tokens) {
|
|
78
|
+
_currentTokens = { ..._currentTokens, ...tokens };
|
|
79
|
+
if (typeof document !== "undefined") {
|
|
80
|
+
const root = document.documentElement;
|
|
81
|
+
for (const [name, value] of Object.entries(tokens)) {
|
|
82
|
+
root.style.setProperty(tokenVar(name), value);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
notifySubscribers();
|
|
86
|
+
}
|
|
87
|
+
function applyTokenSet(tokens) {
|
|
88
|
+
if (typeof document !== "undefined") {
|
|
89
|
+
const root = document.documentElement;
|
|
90
|
+
for (const name of Object.keys(_currentTokens)) {
|
|
91
|
+
if (!(name in tokens)) {
|
|
92
|
+
root.style.removeProperty(tokenVar(name));
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
_currentTokens = { ...tokens };
|
|
97
|
+
syncStyleEl();
|
|
98
|
+
notifySubscribers();
|
|
99
|
+
}
|
|
100
|
+
function getToken(name) {
|
|
101
|
+
return _currentTokens[name];
|
|
102
|
+
}
|
|
103
|
+
function getTokens() {
|
|
104
|
+
return { ..._currentTokens };
|
|
105
|
+
}
|
|
106
|
+
function subscribeTokens(fn) {
|
|
107
|
+
_subscribers.add(fn);
|
|
108
|
+
return () => {
|
|
109
|
+
_subscribers.delete(fn);
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
function generateTokenCssString() {
|
|
113
|
+
return buildRootCss(_currentTokens);
|
|
114
|
+
}
|
|
115
|
+
function createUseTokens() {
|
|
116
|
+
return function useTokens() {
|
|
117
|
+
const [tokens, setTokensState] = React2__default.default.useState({ ..._currentTokens });
|
|
118
|
+
React2__default.default.useEffect(() => {
|
|
119
|
+
setTokensState({ ..._currentTokens });
|
|
120
|
+
return subscribeTokens((nextTokens) => setTokensState({ ...nextTokens }));
|
|
121
|
+
}, []);
|
|
122
|
+
return tokens;
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
var liveTokenEngine = {
|
|
126
|
+
getToken,
|
|
127
|
+
getTokens,
|
|
128
|
+
setToken,
|
|
129
|
+
applyTokenSet,
|
|
130
|
+
subscribeTokens,
|
|
131
|
+
subscribe: subscribeTokens
|
|
132
|
+
};
|
|
133
|
+
globalThis.__TW_TOKEN_ENGINE__ = liveTokenEngine;
|
|
134
|
+
if (typeof window !== "undefined") {
|
|
135
|
+
window.__TW_TOKEN_ENGINE__ = liveTokenEngine;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
// packages/runtime/src/index.ts
|
|
139
|
+
function cx(...inputs) {
|
|
140
|
+
const out = [];
|
|
141
|
+
for (const input of inputs) {
|
|
142
|
+
if (!input) continue;
|
|
143
|
+
if (typeof input === "string") {
|
|
144
|
+
out.push(input);
|
|
145
|
+
} else if (typeof input === "number") {
|
|
146
|
+
out.push(String(input));
|
|
147
|
+
} else if (Array.isArray(input)) {
|
|
148
|
+
const nested = cx(...input);
|
|
149
|
+
if (nested) out.push(nested);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
return out.join(" ");
|
|
153
|
+
}
|
|
154
|
+
function createComponent(tag, baseClass, subComponents, conditionals) {
|
|
155
|
+
const Base = React2__default.default.forwardRef(function TwBase(props, ref) {
|
|
156
|
+
const extra = [];
|
|
157
|
+
if (conditionals) {
|
|
158
|
+
for (const [prop, cls] of Object.entries(conditionals)) {
|
|
159
|
+
if (props[prop]) extra.push(cls);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
const clean = {};
|
|
163
|
+
const stripKeys = /* @__PURE__ */ new Set([
|
|
164
|
+
"className",
|
|
165
|
+
...conditionals ? Object.keys(conditionals) : [],
|
|
166
|
+
...subComponents ? Object.keys(subComponents) : []
|
|
167
|
+
]);
|
|
168
|
+
for (const [k, v] of Object.entries(props)) {
|
|
169
|
+
if (!stripKeys.has(k)) clean[k] = v;
|
|
170
|
+
}
|
|
171
|
+
const className = cx(baseClass, ...extra, props.className ?? "");
|
|
172
|
+
return React2__default.default.createElement(tag, { ...clean, ref, className: className || void 0 });
|
|
173
|
+
});
|
|
174
|
+
Base.displayName = "tw." + String(tag);
|
|
175
|
+
if (subComponents) {
|
|
176
|
+
for (const [subName, def] of Object.entries(subComponents)) {
|
|
177
|
+
const subTag = def.tag ?? "span";
|
|
178
|
+
const subClass = def.class;
|
|
179
|
+
const SubComp = React2__default.default.forwardRef(function TwSub(props, ref) {
|
|
180
|
+
const className = cx(subClass, props.className ?? "");
|
|
181
|
+
const clean = { ...props };
|
|
182
|
+
delete clean.className;
|
|
183
|
+
return React2__default.default.createElement(subTag, { ...clean, ref, className: className || void 0 });
|
|
184
|
+
});
|
|
185
|
+
SubComp.displayName = "tw." + String(tag) + "." + String(subName);
|
|
186
|
+
Base[subName] = SubComp;
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
return Base;
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
exports.applyTokenSet = applyTokenSet;
|
|
193
|
+
exports.createComponent = createComponent;
|
|
194
|
+
exports.createUseTokens = createUseTokens;
|
|
195
|
+
exports.cx = cx;
|
|
196
|
+
exports.generateTokenCssString = generateTokenCssString;
|
|
197
|
+
exports.getToken = getToken;
|
|
198
|
+
exports.getTokens = getTokens;
|
|
199
|
+
exports.liveToken = liveToken;
|
|
200
|
+
exports.liveTokenEngine = liveTokenEngine;
|
|
201
|
+
exports.setToken = setToken;
|
|
202
|
+
exports.setTokens = setTokens;
|
|
203
|
+
exports.subscribeTokens = subscribeTokens;
|
|
204
|
+
exports.tokenRef = tokenRef;
|
|
205
|
+
exports.tokenVar = tokenVar;
|
|
206
|
+
//# sourceMappingURL=runtime.js.map
|
|
207
|
+
//# sourceMappingURL=runtime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../packages/theme/src/liveTokenEngine.ts","../packages/runtime/src/index.ts"],"names":["React"],"mappings":";;;;;;;;;;AA0BA,IAAI,iBAA2B,EAAC;AAChC,IAAM,YAAA,uBAAmB,GAAA,EAAqB;AAC9C,IAAI,QAAA,GAAoC,IAAA;AAEjC,SAAS,SAAS,IAAA,EAAsB;AAC7C,EAAA,MAAM,aAAa,IAAA,CAAK,OAAA,CAAQ,gBAAA,EAAkB,GAAG,EAAE,WAAA,EAAY;AACnE,EAAA,OAAO,cAAc,UAAU,CAAA,CAAA;AACjC;AAEO,SAAS,SAAS,IAAA,EAAsB;AAC7C,EAAA,OAAO,CAAA,IAAA,EAAO,QAAA,CAAS,IAAI,CAAC,CAAA,CAAA,CAAA;AAC9B;AAEA,SAAS,aAAa,MAAA,EAA0B;AAC9C,EAAA,MAAM,IAAA,GAAO,OAAO,OAAA,CAAQ,MAAM,EAC/B,GAAA,CAAI,CAAC,CAAC,IAAA,EAAM,KAAK,MAAM,CAAA,EAAA,EAAK,QAAA,CAAS,IAAI,CAAC,CAAA,EAAA,EAAK,KAAK,CAAA,CAAA,CAAG,CAAA,CACvD,KAAK,IAAI,CAAA;AACZ,EAAA,OAAO,CAAA;AAAA,EAAY,IAAI;AAAA,CAAA,CAAA;AACzB;AAEA,SAAS,WAAA,GAAoB;AAC3B,EAAA,IAAI,OAAO,aAAa,WAAA,EAAa;AAErC,EAAA,IAAI,CAAC,QAAA,EAAU;AACb,IAAA,QAAA,GAAW,QAAA,CAAS,cAAc,OAAO,CAAA;AACzC,IAAA,QAAA,CAAS,EAAA,GAAK,gBAAA;AACd,IAAA,QAAA,CAAS,YAAA,CAAa,kBAAkB,MAAM,CAAA;AAC9C,IAAA,QAAA,CAAS,IAAA,CAAK,YAAY,QAAQ,CAAA;AAAA,EACpC;AAEA,EAAA,QAAA,CAAS,WAAA,GAAc,aAAa,cAAc,CAAA;AACpD;AAEA,SAAS,iBAAA,GAA0B;AACjC,EAAA,MAAM,QAAA,GAAW,EAAE,GAAG,cAAA,EAAe;AACrC,EAAA,KAAA,MAAW,cAAc,YAAA,EAAc;AACrC,IAAA,IAAI;AACF,MAAA,UAAA,CAAW,QAAQ,CAAA;AAAA,IACrB,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF;AACF;AAEO,SAAS,UAAU,MAAA,EAAgC;AACxD,EAAA,cAAA,GAAiB,EAAE,GAAG,cAAA,EAAgB,GAAG,MAAA,EAAO;AAChD,EAAA,WAAA,EAAY;AACZ,EAAA,iBAAA,EAAkB;AAElB,EAAA,MAAM,OAA+B,EAAC;AACtC,EAAA,KAAA,MAAW,IAAA,IAAQ,MAAA,CAAO,IAAA,CAAK,MAAM,CAAA,EAAG;AACtC,IAAA,IAAA,CAAK,IAAI,CAAA,GAAI,QAAA,CAAS,IAAI,CAAA;AAAA,EAC5B;AAEA,EAAA,OAAO;AAAA,IACL,IAAA;AAAA,IACA,IAAI,IAAA,EAAM;AACR,MAAA,OAAO,eAAe,IAAI,CAAA;AAAA,IAC5B,CAAA;AAAA,IACA,GAAA,CAAI,MAAM,KAAA,EAAO;AACf,MAAA,QAAA,CAAS,MAAM,KAAK,CAAA;AAAA,IACtB,CAAA;AAAA,IACA,OAAO,UAAA,EAAY;AACjB,MAAA,SAAA,CAAU,UAAU,CAAA;AAAA,IACtB,CAAA;AAAA,IACA,QAAA,GAAW;AACT,MAAA,OAAO,EAAE,GAAG,cAAA,EAAe;AAAA,IAC7B;AAAA,GACF;AACF;AAEO,SAAS,QAAA,CAAS,MAAc,KAAA,EAAqB;AAC1D,EAAA,cAAA,GAAiB,EAAE,GAAG,cAAA,EAAgB,CAAC,IAAI,GAAG,KAAA,EAAM;AAEpD,EAAA,IAAI,OAAO,aAAa,WAAA,EAAa;AACnC,IAAA,QAAA,CAAS,gBAAgB,KAAA,CAAM,WAAA,CAAY,QAAA,CAAS,IAAI,GAAG,KAAK,CAAA;AAAA,EAClE;AAEA,EAAA,iBAAA,EAAkB;AACpB;AAEO,SAAS,UAAU,MAAA,EAAwB;AAChD,EAAA,cAAA,GAAiB,EAAE,GAAG,cAAA,EAAgB,GAAG,MAAA,EAAO;AAEhD,EAAA,IAAI,OAAO,aAAa,WAAA,EAAa;AACnC,IAAA,MAAM,OAAO,QAAA,CAAS,eAAA;AACtB,IAAA,KAAA,MAAW,CAAC,IAAA,EAAM,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA,EAAG;AAClD,MAAA,IAAA,CAAK,KAAA,CAAM,WAAA,CAAY,QAAA,CAAS,IAAI,GAAG,KAAK,CAAA;AAAA,IAC9C;AAAA,EACF;AAEA,EAAA,iBAAA,EAAkB;AACpB;AAEO,SAAS,cAAc,MAAA,EAAwB;AACpD,EAAA,IAAI,OAAO,aAAa,WAAA,EAAa;AACnC,IAAA,MAAM,OAAO,QAAA,CAAS,eAAA;AACtB,IAAA,KAAA,MAAW,IAAA,IAAQ,MAAA,CAAO,IAAA,CAAK,cAAc,CAAA,EAAG;AAC9C,MAAA,IAAI,EAAE,QAAQ,MAAA,CAAA,EAAS;AACrB,QAAA,IAAA,CAAK,KAAA,CAAM,cAAA,CAAe,QAAA,CAAS,IAAI,CAAC,CAAA;AAAA,MAC1C;AAAA,IACF;AAAA,EACF;AAEA,EAAA,cAAA,GAAiB,EAAE,GAAG,MAAA,EAAO;AAC7B,EAAA,WAAA,EAAY;AACZ,EAAA,iBAAA,EAAkB;AACpB;AAEO,SAAS,SAAS,IAAA,EAAkC;AACzD,EAAA,OAAO,eAAe,IAAI,CAAA;AAC5B;AAEO,SAAS,SAAA,GAAsB;AACpC,EAAA,OAAO,EAAE,GAAG,cAAA,EAAe;AAC7B;AAEO,SAAS,gBAAgB,EAAA,EAAiC;AAC/D,EAAA,YAAA,CAAa,IAAI,EAAE,CAAA;AACnB,EAAA,OAAO,MAAM;AACX,IAAA,YAAA,CAAa,OAAO,EAAE,CAAA;AAAA,EACxB,CAAA;AACF;AAEO,SAAS,sBAAA,GAAiC;AAC/C,EAAA,OAAO,aAAa,cAAc,CAAA;AACpC;AAEO,SAAS,eAAA,GAAkB;AAChC,EAAA,OAAO,SAAS,SAAA,GAAsB;AACpC,IAAA,MAAM,CAAC,QAAQ,cAAc,CAAA,GAAIA,wBAAM,QAAA,CAAmB,EAAE,GAAG,cAAA,EAAgB,CAAA;AAE/E,IAAAA,uBAAA,CAAM,UAAU,MAAM;AACpB,MAAA,cAAA,CAAe,EAAE,GAAG,cAAA,EAAgB,CAAA;AACpC,MAAA,OAAO,eAAA,CAAgB,CAAC,UAAA,KAAe,cAAA,CAAe,EAAE,GAAG,UAAA,EAAY,CAAC,CAAA;AAAA,IAC1E,CAAA,EAAG,EAAE,CAAA;AAEL,IAAA,OAAO,MAAA;AAAA,EACT,CAAA;AACF;AAEO,IAAM,eAAA,GAAyC;AAAA,EACpD,QAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,aAAA;AAAA,EACA,eAAA;AAAA,EACA,SAAA,EAAW;AACb;AAEA,UAAA,CAAW,mBAAA,GAAsB,eAAA;AACjC,IAAI,OAAO,WAAW,WAAA,EAAa;AAChC,EAAC,OAAe,mBAAA,GAAsB,eAAA;AACzC;;;ACtGO,SAAS,MAAM,MAAA,EAA8B;AAClD,EAAA,MAAM,MAAgB,EAAC;AACvB,EAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,IAAA,IAAI,CAAC,KAAA,EAAO;AACZ,IAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,MAAA,GAAA,CAAI,KAAK,KAAK,CAAA;AAAA,IAChB,CAAA,MAAA,IAAW,OAAO,KAAA,KAAU,QAAA,EAAU;AACpC,MAAA,GAAA,CAAI,IAAA,CAAK,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,IACxB,CAAA,MAAA,IAAW,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AAC/B,MAAA,MAAM,MAAA,GAAS,EAAA,CAAG,GAAG,KAAK,CAAA;AAC1B,MAAA,IAAI,MAAA,EAAQ,GAAA,CAAI,IAAA,CAAK,MAAM,CAAA;AAAA,IAC7B;AAAA,EACF;AACA,EAAA,OAAO,GAAA,CAAI,KAAK,GAAG,CAAA;AACrB;AA2BO,SAAS,eAAA,CACd,GAAA,EACA,SAAA,EACA,aAAA,EACA,YAAA,EACoB;AAMpB,EAAA,MAAM,OAAOA,uBAAAA,CAAM,UAAA,CAA+B,SAAS,MAAA,CAAO,OAAO,GAAA,EAAK;AAC5E,IAAA,MAAM,QAAkB,EAAC;AAGzB,IAAA,IAAI,YAAA,EAAc;AAChB,MAAA,KAAA,MAAW,CAAC,IAAA,EAAM,GAAG,KAAK,MAAA,CAAO,OAAA,CAAQ,YAAY,CAAA,EAAG;AACtD,QAAA,IAAI,KAAA,CAAM,IAAI,CAAA,EAAG,KAAA,CAAM,KAAK,GAAG,CAAA;AAAA,MACjC;AAAA,IACF;AAGA,IAAA,MAAM,QAAiC,EAAC;AACxC,IAAA,MAAM,SAAA,uBAAgB,GAAA,CAAI;AAAA,MACxB,WAAA;AAAA,MACA,GAAI,YAAA,GAAe,MAAA,CAAO,IAAA,CAAK,YAAY,IAAI,EAAC;AAAA,MAChD,GAAI,aAAA,GAAgB,MAAA,CAAO,IAAA,CAAK,aAAa,IAAI;AAAC,KACnD,CAAA;AACD,IAAA,KAAA,MAAW,CAAC,CAAA,EAAG,CAAC,KAAK,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,EAAG;AAC1C,MAAA,IAAI,CAAC,SAAA,CAAU,GAAA,CAAI,CAAC,CAAA,EAAG,KAAA,CAAM,CAAC,CAAA,GAAI,CAAA;AAAA,IACpC;AAEA,IAAA,MAAM,YAAY,EAAA,CAAG,SAAA,EAAW,GAAG,KAAA,EAAQ,KAAA,CAAM,aAAwB,EAAE,CAAA;AAE3E,IAAA,OAAOA,uBAAAA,CAAM,aAAA,CAAc,GAAA,EAAK,EAAE,GAAG,OAAO,GAAA,EAAK,SAAA,EAAW,SAAA,IAAa,MAAA,EAAW,CAAA;AAAA,EACtF,CAAC,CAAA;AAEA,EAAC,IAAA,CAAkC,WAAA,GAAc,KAAA,GAAQ,MAAA,CAAO,GAAG,CAAA;AAGpE,EAAA,IAAI,aAAA,EAAe;AACjB,IAAA,KAAA,MAAW,CAAC,OAAA,EAAS,GAAG,KAAK,MAAA,CAAO,OAAA,CAAQ,aAAa,CAAA,EAAG;AAC1D,MAAA,MAAM,MAAA,GAAS,IAAI,GAAA,IAAO,MAAA;AAC1B,MAAA,MAAM,WAAW,GAAA,CAAI,KAAA;AAErB,MAAA,MAAM,UAAUA,uBAAAA,CAAM,UAAA,CAA+B,SAAS,KAAA,CAAM,OAAO,GAAA,EAAK;AAC9E,QAAA,MAAM,SAAA,GAAY,EAAA,CAAG,QAAA,EAAW,KAAA,CAAM,aAAwB,EAAE,CAAA;AAChE,QAAA,MAAM,KAAA,GAAiC,EAAE,GAAG,KAAA,EAAM;AAClD,QAAA,OAAO,KAAA,CAAM,SAAA;AACb,QAAA,OAAOA,uBAAAA,CAAM,aAAA,CAAc,MAAA,EAAQ,EAAE,GAAG,OAAO,GAAA,EAAK,SAAA,EAAW,SAAA,IAAa,MAAA,EAAW,CAAA;AAAA,MACzF,CAAC,CAAA;AAEA,MAAC,OAAA,CAAqC,cACrC,KAAA,GAAQ,MAAA,CAAO,GAAG,CAAA,GAAI,GAAA,GAAM,OAAO,OAAO,CAAA;AAE3C,MAAC,IAAA,CAA4C,OAAO,CAAA,GAAI,OAAA;AAAA,IAC3D;AAAA,EACF;AAEA,EAAA,OAAO,IAAA;AACT","file":"runtime.js","sourcesContent":["import React from \"react\"\n\nexport type TokenMap = Record<string, string>\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 applyTokenSet(tokens: TokenMap): void\n subscribeTokens(fn: TokenSubscriber): () => void\n subscribe?(fn: TokenSubscriber): () => void\n}\n\ndeclare global {\n var __TW_TOKEN_ENGINE__: LiveTokenEngineBridge | undefined\n}\n\nlet _currentTokens: TokenMap = {}\nconst _subscribers = new Set<TokenSubscriber>()\nlet _styleEl: HTMLStyleElement | null = null\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\nfunction 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\nfunction syncStyleEl(): void {\n if (typeof document === \"undefined\") return\n\n if (!_styleEl) {\n _styleEl = document.createElement(\"style\")\n _styleEl.id = \"tw-live-tokens\"\n _styleEl.setAttribute(\"data-tw-tokens\", \"true\")\n document.head.appendChild(_styleEl)\n }\n\n _styleEl.textContent = buildRootCss(_currentTokens)\n}\n\nfunction notifySubscribers(): void {\n const snapshot = { ..._currentTokens }\n for (const subscriber of _subscribers) {\n try {\n subscriber(snapshot)\n } catch {\n // intentionally ignore subscriber errors\n }\n }\n}\n\nexport function liveToken(tokens: TokenMap): LiveTokenSet {\n _currentTokens = { ..._currentTokens, ...tokens }\n syncStyleEl()\n notifySubscribers()\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) {\n return _currentTokens[name]\n },\n set(name, value) {\n setToken(name, value)\n },\n setAll(nextTokens) {\n setTokens(nextTokens)\n },\n snapshot() {\n return { ..._currentTokens }\n },\n }\n}\n\nexport function setToken(name: string, value: string): void {\n _currentTokens = { ..._currentTokens, [name]: value }\n\n if (typeof document !== \"undefined\") {\n document.documentElement.style.setProperty(tokenVar(name), value)\n }\n\n notifySubscribers()\n}\n\nexport function setTokens(tokens: TokenMap): void {\n _currentTokens = { ..._currentTokens, ...tokens }\n\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\n notifySubscribers()\n}\n\nexport function applyTokenSet(tokens: TokenMap): void {\n if (typeof document !== \"undefined\") {\n const root = document.documentElement\n for (const name of Object.keys(_currentTokens)) {\n if (!(name in tokens)) {\n root.style.removeProperty(tokenVar(name))\n }\n }\n }\n\n _currentTokens = { ...tokens }\n syncStyleEl()\n notifySubscribers()\n}\n\nexport function getToken(name: string): string | undefined {\n return _currentTokens[name]\n}\n\nexport function getTokens(): TokenMap {\n return { ..._currentTokens }\n}\n\nexport function subscribeTokens(fn: TokenSubscriber): () => void {\n _subscribers.add(fn)\n return () => {\n _subscribers.delete(fn)\n }\n}\n\nexport function generateTokenCssString(): string {\n return buildRootCss(_currentTokens)\n}\n\nexport function createUseTokens() {\n return function useTokens(): TokenMap {\n const [tokens, setTokensState] = React.useState<TokenMap>({ ..._currentTokens })\n\n React.useEffect(() => {\n setTokensState({ ..._currentTokens })\n return subscribeTokens((nextTokens) => setTokensState({ ...nextTokens }))\n }, [])\n\n return tokens\n }\n}\n\nexport const liveTokenEngine: LiveTokenEngineBridge = {\n getToken,\n getTokens,\n setToken,\n applyTokenSet,\n subscribeTokens,\n subscribe: subscribeTokens,\n}\n\nglobalThis.__TW_TOKEN_ENGINE__ = liveTokenEngine\nif (typeof window !== \"undefined\") {\n ;(window as any).__TW_TOKEN_ENGINE__ = liveTokenEngine\n}\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\"\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 =\n \"tw.\" + String(tag) + \".\" + String(subName)\n\n ;(Base as unknown as Record<string, unknown>)[subName] = SubComp\n }\n }\n\n return Base as unknown as StyledComponent<S>\n}\n"]}
|
package/dist/runtime.mjs
ADDED
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
import React2 from 'react';
|
|
2
|
+
|
|
3
|
+
/* tailwind-styled-v4 v5.0.1 | MIT | https://github.com/dictionar32/tailwind-styled-v4 */
|
|
4
|
+
|
|
5
|
+
var _currentTokens = {};
|
|
6
|
+
var _subscribers = /* @__PURE__ */ new Set();
|
|
7
|
+
var _styleEl = null;
|
|
8
|
+
function tokenVar(name) {
|
|
9
|
+
const normalized = name.replace(/[^a-zA-Z0-9-]/g, "-").toLowerCase();
|
|
10
|
+
return `--tw-token-${normalized}`;
|
|
11
|
+
}
|
|
12
|
+
function tokenRef(name) {
|
|
13
|
+
return `var(${tokenVar(name)})`;
|
|
14
|
+
}
|
|
15
|
+
function buildRootCss(tokens) {
|
|
16
|
+
const vars = Object.entries(tokens).map(([name, value]) => ` ${tokenVar(name)}: ${value};`).join("\n");
|
|
17
|
+
return `:root {
|
|
18
|
+
${vars}
|
|
19
|
+
}`;
|
|
20
|
+
}
|
|
21
|
+
function syncStyleEl() {
|
|
22
|
+
if (typeof document === "undefined") return;
|
|
23
|
+
if (!_styleEl) {
|
|
24
|
+
_styleEl = document.createElement("style");
|
|
25
|
+
_styleEl.id = "tw-live-tokens";
|
|
26
|
+
_styleEl.setAttribute("data-tw-tokens", "true");
|
|
27
|
+
document.head.appendChild(_styleEl);
|
|
28
|
+
}
|
|
29
|
+
_styleEl.textContent = buildRootCss(_currentTokens);
|
|
30
|
+
}
|
|
31
|
+
function notifySubscribers() {
|
|
32
|
+
const snapshot = { ..._currentTokens };
|
|
33
|
+
for (const subscriber of _subscribers) {
|
|
34
|
+
try {
|
|
35
|
+
subscriber(snapshot);
|
|
36
|
+
} catch {
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
function liveToken(tokens) {
|
|
41
|
+
_currentTokens = { ..._currentTokens, ...tokens };
|
|
42
|
+
syncStyleEl();
|
|
43
|
+
notifySubscribers();
|
|
44
|
+
const vars = {};
|
|
45
|
+
for (const name of Object.keys(tokens)) {
|
|
46
|
+
vars[name] = tokenRef(name);
|
|
47
|
+
}
|
|
48
|
+
return {
|
|
49
|
+
vars,
|
|
50
|
+
get(name) {
|
|
51
|
+
return _currentTokens[name];
|
|
52
|
+
},
|
|
53
|
+
set(name, value) {
|
|
54
|
+
setToken(name, value);
|
|
55
|
+
},
|
|
56
|
+
setAll(nextTokens) {
|
|
57
|
+
setTokens(nextTokens);
|
|
58
|
+
},
|
|
59
|
+
snapshot() {
|
|
60
|
+
return { ..._currentTokens };
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
function setToken(name, value) {
|
|
65
|
+
_currentTokens = { ..._currentTokens, [name]: value };
|
|
66
|
+
if (typeof document !== "undefined") {
|
|
67
|
+
document.documentElement.style.setProperty(tokenVar(name), value);
|
|
68
|
+
}
|
|
69
|
+
notifySubscribers();
|
|
70
|
+
}
|
|
71
|
+
function setTokens(tokens) {
|
|
72
|
+
_currentTokens = { ..._currentTokens, ...tokens };
|
|
73
|
+
if (typeof document !== "undefined") {
|
|
74
|
+
const root = document.documentElement;
|
|
75
|
+
for (const [name, value] of Object.entries(tokens)) {
|
|
76
|
+
root.style.setProperty(tokenVar(name), value);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
notifySubscribers();
|
|
80
|
+
}
|
|
81
|
+
function applyTokenSet(tokens) {
|
|
82
|
+
if (typeof document !== "undefined") {
|
|
83
|
+
const root = document.documentElement;
|
|
84
|
+
for (const name of Object.keys(_currentTokens)) {
|
|
85
|
+
if (!(name in tokens)) {
|
|
86
|
+
root.style.removeProperty(tokenVar(name));
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
_currentTokens = { ...tokens };
|
|
91
|
+
syncStyleEl();
|
|
92
|
+
notifySubscribers();
|
|
93
|
+
}
|
|
94
|
+
function getToken(name) {
|
|
95
|
+
return _currentTokens[name];
|
|
96
|
+
}
|
|
97
|
+
function getTokens() {
|
|
98
|
+
return { ..._currentTokens };
|
|
99
|
+
}
|
|
100
|
+
function subscribeTokens(fn) {
|
|
101
|
+
_subscribers.add(fn);
|
|
102
|
+
return () => {
|
|
103
|
+
_subscribers.delete(fn);
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
function generateTokenCssString() {
|
|
107
|
+
return buildRootCss(_currentTokens);
|
|
108
|
+
}
|
|
109
|
+
function createUseTokens() {
|
|
110
|
+
return function useTokens() {
|
|
111
|
+
const [tokens, setTokensState] = React2.useState({ ..._currentTokens });
|
|
112
|
+
React2.useEffect(() => {
|
|
113
|
+
setTokensState({ ..._currentTokens });
|
|
114
|
+
return subscribeTokens((nextTokens) => setTokensState({ ...nextTokens }));
|
|
115
|
+
}, []);
|
|
116
|
+
return tokens;
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
var liveTokenEngine = {
|
|
120
|
+
getToken,
|
|
121
|
+
getTokens,
|
|
122
|
+
setToken,
|
|
123
|
+
applyTokenSet,
|
|
124
|
+
subscribeTokens,
|
|
125
|
+
subscribe: subscribeTokens
|
|
126
|
+
};
|
|
127
|
+
globalThis.__TW_TOKEN_ENGINE__ = liveTokenEngine;
|
|
128
|
+
if (typeof window !== "undefined") {
|
|
129
|
+
window.__TW_TOKEN_ENGINE__ = liveTokenEngine;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
// packages/runtime/src/index.ts
|
|
133
|
+
function cx(...inputs) {
|
|
134
|
+
const out = [];
|
|
135
|
+
for (const input of inputs) {
|
|
136
|
+
if (!input) continue;
|
|
137
|
+
if (typeof input === "string") {
|
|
138
|
+
out.push(input);
|
|
139
|
+
} else if (typeof input === "number") {
|
|
140
|
+
out.push(String(input));
|
|
141
|
+
} else if (Array.isArray(input)) {
|
|
142
|
+
const nested = cx(...input);
|
|
143
|
+
if (nested) out.push(nested);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
return out.join(" ");
|
|
147
|
+
}
|
|
148
|
+
function createComponent(tag, baseClass, subComponents, conditionals) {
|
|
149
|
+
const Base = React2.forwardRef(function TwBase(props, ref) {
|
|
150
|
+
const extra = [];
|
|
151
|
+
if (conditionals) {
|
|
152
|
+
for (const [prop, cls] of Object.entries(conditionals)) {
|
|
153
|
+
if (props[prop]) extra.push(cls);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
const clean = {};
|
|
157
|
+
const stripKeys = /* @__PURE__ */ new Set([
|
|
158
|
+
"className",
|
|
159
|
+
...conditionals ? Object.keys(conditionals) : [],
|
|
160
|
+
...subComponents ? Object.keys(subComponents) : []
|
|
161
|
+
]);
|
|
162
|
+
for (const [k, v] of Object.entries(props)) {
|
|
163
|
+
if (!stripKeys.has(k)) clean[k] = v;
|
|
164
|
+
}
|
|
165
|
+
const className = cx(baseClass, ...extra, props.className ?? "");
|
|
166
|
+
return React2.createElement(tag, { ...clean, ref, className: className || void 0 });
|
|
167
|
+
});
|
|
168
|
+
Base.displayName = "tw." + String(tag);
|
|
169
|
+
if (subComponents) {
|
|
170
|
+
for (const [subName, def] of Object.entries(subComponents)) {
|
|
171
|
+
const subTag = def.tag ?? "span";
|
|
172
|
+
const subClass = def.class;
|
|
173
|
+
const SubComp = React2.forwardRef(function TwSub(props, ref) {
|
|
174
|
+
const className = cx(subClass, props.className ?? "");
|
|
175
|
+
const clean = { ...props };
|
|
176
|
+
delete clean.className;
|
|
177
|
+
return React2.createElement(subTag, { ...clean, ref, className: className || void 0 });
|
|
178
|
+
});
|
|
179
|
+
SubComp.displayName = "tw." + String(tag) + "." + String(subName);
|
|
180
|
+
Base[subName] = SubComp;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
return Base;
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
export { applyTokenSet, createComponent, createUseTokens, cx, generateTokenCssString, getToken, getTokens, liveToken, liveTokenEngine, setToken, setTokens, subscribeTokens, tokenRef, tokenVar };
|
|
187
|
+
//# sourceMappingURL=runtime.mjs.map
|
|
188
|
+
//# sourceMappingURL=runtime.mjs.map
|