tailwind-styled-v4 5.0.0 → 5.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (180) hide show
  1. package/CHANGELOG.md +398 -0
  2. package/LICENSE +21 -0
  3. package/README.md +532 -0
  4. package/dist/analyzer.d.mts +114 -0
  5. package/dist/analyzer.d.ts +114 -0
  6. package/dist/analyzer.js +6808 -0
  7. package/dist/analyzer.js.map +1 -0
  8. package/dist/analyzer.mjs +6798 -0
  9. package/dist/analyzer.mjs.map +1 -0
  10. package/dist/{animate.d.cts → animate.d.mts} +3 -30
  11. package/dist/animate.d.ts +3 -30
  12. package/dist/animate.js +7096 -352
  13. package/dist/animate.js.map +1 -1
  14. package/dist/animate.mjs +7482 -0
  15. package/dist/animate.mjs.map +1 -0
  16. package/dist/atomic.d.mts +18 -0
  17. package/dist/atomic.d.ts +18 -0
  18. package/dist/atomic.js +191 -0
  19. package/dist/atomic.js.map +1 -0
  20. package/dist/atomic.mjs +185 -0
  21. package/dist/atomic.mjs.map +1 -0
  22. package/dist/cli.d.mts +1 -0
  23. package/dist/cli.d.ts +1 -0
  24. package/dist/cli.js +45008 -0
  25. package/dist/cli.js.map +1 -0
  26. package/dist/cli.mjs +44980 -0
  27. package/dist/cli.mjs.map +1 -0
  28. package/dist/compiler.d.mts +1009 -0
  29. package/dist/compiler.d.ts +1009 -0
  30. package/dist/compiler.js +4937 -0
  31. package/dist/compiler.js.map +1 -0
  32. package/dist/compiler.mjs +4862 -0
  33. package/dist/compiler.mjs.map +1 -0
  34. package/dist/dashboard.d.mts +272 -0
  35. package/dist/dashboard.d.ts +272 -0
  36. package/dist/dashboard.js +249 -0
  37. package/dist/dashboard.js.map +1 -0
  38. package/dist/dashboard.mjs +239 -0
  39. package/dist/dashboard.mjs.map +1 -0
  40. package/dist/devtools.js +171 -158
  41. package/dist/devtools.js.map +1 -1
  42. package/dist/{devtools.cjs → devtools.mjs} +166 -167
  43. package/dist/devtools.mjs.map +1 -0
  44. package/dist/engine.d.mts +398 -0
  45. package/dist/engine.d.ts +398 -0
  46. package/dist/engine.js +19264 -0
  47. package/dist/engine.js.map +1 -0
  48. package/dist/engine.mjs +19227 -0
  49. package/dist/engine.mjs.map +1 -0
  50. package/dist/{index.d.cts → index.d.mts} +12 -5
  51. package/dist/index.d.ts +12 -5
  52. package/dist/index.js +7178 -27
  53. package/dist/index.js.map +1 -1
  54. package/dist/index.mjs +8408 -0
  55. package/dist/index.mjs.map +1 -0
  56. package/dist/liveTokenEngine-DYN3Zale.d.mts +34 -0
  57. package/dist/liveTokenEngine-DYN3Zale.d.ts +34 -0
  58. package/dist/{next.d.cts → next.d.mts} +2 -1
  59. package/dist/next.d.ts +2 -1
  60. package/dist/next.js +24027 -28
  61. package/dist/next.js.map +1 -1
  62. package/dist/next.mjs +24232 -0
  63. package/dist/next.mjs.map +1 -0
  64. package/dist/plugin.d.mts +90 -0
  65. package/dist/plugin.d.ts +90 -0
  66. package/dist/plugin.js +185 -0
  67. package/dist/plugin.js.map +1 -0
  68. package/dist/plugin.mjs +174 -0
  69. package/dist/plugin.mjs.map +1 -0
  70. package/dist/pluginRegistry.d.mts +83 -0
  71. package/dist/pluginRegistry.d.ts +83 -0
  72. package/dist/pluginRegistry.js +303 -0
  73. package/dist/pluginRegistry.js.map +1 -0
  74. package/dist/pluginRegistry.mjs +298 -0
  75. package/dist/pluginRegistry.mjs.map +1 -0
  76. package/dist/preset.js +9 -4
  77. package/dist/preset.js.map +1 -1
  78. package/dist/{preset.cjs → preset.mjs} +5 -14
  79. package/dist/preset.mjs.map +1 -0
  80. package/dist/rspack.d.mts +33 -0
  81. package/dist/rspack.d.ts +33 -0
  82. package/dist/rspack.js +66 -0
  83. package/dist/rspack.js.map +1 -0
  84. package/dist/rspack.mjs +55 -0
  85. package/dist/rspack.mjs.map +1 -0
  86. package/dist/runtime.d.mts +62 -0
  87. package/dist/runtime.d.ts +62 -0
  88. package/dist/runtime.js +455 -0
  89. package/dist/runtime.js.map +1 -0
  90. package/dist/runtime.mjs +436 -0
  91. package/dist/runtime.mjs.map +1 -0
  92. package/dist/runtimeCss.d.mts +65 -0
  93. package/dist/runtimeCss.d.ts +65 -0
  94. package/dist/{css.cjs → runtimeCss.js} +71 -4
  95. package/dist/runtimeCss.js.map +1 -0
  96. package/dist/{css.js → runtimeCss.mjs} +66 -5
  97. package/dist/runtimeCss.mjs.map +1 -0
  98. package/dist/scanner.d.mts +25 -0
  99. package/dist/scanner.d.ts +25 -0
  100. package/dist/scanner.js +5774 -0
  101. package/dist/scanner.js.map +1 -0
  102. package/dist/scanner.mjs +5760 -0
  103. package/dist/scanner.mjs.map +1 -0
  104. package/dist/shared.d.mts +85 -0
  105. package/dist/shared.d.ts +85 -0
  106. package/dist/shared.js +255 -0
  107. package/dist/shared.js.map +1 -0
  108. package/dist/shared.mjs +233 -0
  109. package/dist/shared.mjs.map +1 -0
  110. package/dist/storybookAddon.d.mts +108 -0
  111. package/dist/storybookAddon.d.ts +108 -0
  112. package/dist/storybookAddon.js +95 -0
  113. package/dist/storybookAddon.js.map +1 -0
  114. package/dist/storybookAddon.mjs +88 -0
  115. package/dist/storybookAddon.mjs.map +1 -0
  116. package/dist/svelte.d.mts +114 -0
  117. package/dist/svelte.d.ts +114 -0
  118. package/dist/svelte.js +67 -0
  119. package/dist/svelte.js.map +1 -0
  120. package/dist/svelte.mjs +59 -0
  121. package/dist/svelte.mjs.map +1 -0
  122. package/dist/testing.d.mts +185 -0
  123. package/dist/testing.d.ts +185 -0
  124. package/dist/testing.js +173 -0
  125. package/dist/testing.js.map +1 -0
  126. package/dist/testing.mjs +158 -0
  127. package/dist/testing.mjs.map +1 -0
  128. package/dist/theme.d.mts +188 -0
  129. package/dist/theme.d.ts +188 -0
  130. package/dist/theme.js +334 -0
  131. package/dist/theme.js.map +1 -0
  132. package/dist/theme.mjs +311 -0
  133. package/dist/theme.mjs.map +1 -0
  134. package/dist/tsconfig.tsbuildinfo +1 -0
  135. package/dist/types-DXr2PmGP.d.mts +31 -0
  136. package/dist/types-DXr2PmGP.d.ts +31 -0
  137. package/dist/vite.js +29611 -17
  138. package/dist/vite.js.map +1 -1
  139. package/dist/vite.mjs +29712 -0
  140. package/dist/vite.mjs.map +1 -0
  141. package/dist/vue.d.mts +89 -0
  142. package/dist/vue.d.ts +89 -0
  143. package/dist/vue.js +104 -0
  144. package/dist/vue.js.map +1 -0
  145. package/dist/vue.mjs +96 -0
  146. package/dist/vue.mjs.map +1 -0
  147. package/package.json +170 -64
  148. package/dist/animate.cjs +0 -771
  149. package/dist/animate.cjs.map +0 -1
  150. package/dist/chunk-VZEJV27B.js +0 -11
  151. package/dist/chunk-VZEJV27B.js.map +0 -1
  152. package/dist/chunk-Y5D3E72P.cjs +0 -13
  153. package/dist/chunk-Y5D3E72P.cjs.map +0 -1
  154. package/dist/css.cjs.map +0 -1
  155. package/dist/css.d.cts +0 -30
  156. package/dist/css.d.ts +0 -30
  157. package/dist/css.js.map +0 -1
  158. package/dist/devtools.cjs.map +0 -1
  159. package/dist/index.cjs +0 -1353
  160. package/dist/index.cjs.map +0 -1
  161. package/dist/next.cjs +0 -248
  162. package/dist/next.cjs.map +0 -1
  163. package/dist/preset.cjs.map +0 -1
  164. package/dist/turbopackLoader.cjs +0 -37
  165. package/dist/turbopackLoader.cjs.map +0 -1
  166. package/dist/turbopackLoader.d.cts +0 -12
  167. package/dist/turbopackLoader.d.ts +0 -12
  168. package/dist/turbopackLoader.js +0 -35
  169. package/dist/turbopackLoader.js.map +0 -1
  170. package/dist/vite.cjs +0 -138
  171. package/dist/vite.cjs.map +0 -1
  172. package/dist/webpackLoader.cjs +0 -51
  173. package/dist/webpackLoader.cjs.map +0 -1
  174. package/dist/webpackLoader.d.cts +0 -17
  175. package/dist/webpackLoader.d.ts +0 -17
  176. package/dist/webpackLoader.js +0 -49
  177. package/dist/webpackLoader.js.map +0 -1
  178. /package/dist/{devtools.d.cts → devtools.d.mts} +0 -0
  179. /package/dist/{preset.d.cts → preset.d.mts} +0 -0
  180. /package/dist/{vite.d.cts → vite.d.mts} +0 -0
@@ -0,0 +1,90 @@
1
+ import { PluginContext, PartialResolvedId, LoadResult, TransformResult } from 'rollup';
2
+
3
+ interface TwClassResult {
4
+ css: string;
5
+ classes: string[];
6
+ }
7
+ interface DesignTokens {
8
+ [key: string]: string | number | DesignTokens;
9
+ }
10
+ interface TwPluginOptions {
11
+ classProcessor?: (classes: string[]) => TwClassResult;
12
+ tokens?: DesignTokens;
13
+ debug?: boolean;
14
+ minify?: boolean;
15
+ }
16
+ type VariantResolver = (selector: string) => string;
17
+ interface UtilityDefinition {
18
+ [property: string]: string;
19
+ }
20
+ interface ComponentConfig {
21
+ base: string;
22
+ variants: Record<string, Record<string, string>>;
23
+ compoundVariants: Array<{
24
+ class: string;
25
+ [key: string]: any;
26
+ }>;
27
+ defaultVariants: Record<string, string>;
28
+ }
29
+ interface TransformMeta {
30
+ componentName: string;
31
+ tag: string;
32
+ }
33
+ type TransformFn = (config: ComponentConfig, meta: TransformMeta) => ComponentConfig;
34
+ type CssHook = (css: string) => string;
35
+ type TokenMap = Record<string, string>;
36
+ interface TwContext {
37
+ addVariant(name: string, resolver: VariantResolver): void;
38
+ addUtility(name: string, styles: UtilityDefinition): void;
39
+ addToken(name: string, value: string): void;
40
+ addTransform(fn: TransformFn): void;
41
+ onGenerateCSS(hook: CssHook): void;
42
+ onBuildEnd(hook: () => void | Promise<void>): void;
43
+ getToken(name: string): string | undefined;
44
+ subscribeTokens(callback: (tokens: TokenMap) => void): () => void;
45
+ readonly config: Record<string, any>;
46
+ }
47
+ interface TwPlugin {
48
+ name: string;
49
+ setup(ctx: TwContext): void;
50
+ }
51
+ interface PluginRegistry {
52
+ variants: Map<string, VariantResolver>;
53
+ utilities: Map<string, UtilityDefinition>;
54
+ tokens: Map<string, string>;
55
+ transforms: TransformFn[];
56
+ cssHooks: CssHook[];
57
+ buildHooks: Array<() => void | Promise<void>>;
58
+ plugins: Set<string>;
59
+ }
60
+ interface TwVitePlugin {
61
+ resolveId(this: PluginContext, source: string, importer: string): Promise<PartialResolvedId | null>;
62
+ load(this: PluginContext, id: string): Promise<LoadResult | null>;
63
+ transform(this: PluginContext, code: string, id: string): Promise<TransformResult | null>;
64
+ getToken(name: string): string | undefined;
65
+ subscribeTokens(callback: (tokens: Record<string, string>) => void): () => void;
66
+ }
67
+ declare function createTwPlugin(options?: TwPluginOptions): TwVitePlugin;
68
+ interface TwGlobalRegistry {
69
+ transforms: Array<(config: any, ctx: any) => any>;
70
+ tokens: Record<string, string>;
71
+ }
72
+ declare function getGlobalRegistry(): TwGlobalRegistry;
73
+ declare function registerTransform(transform: (config: any, ctx: any) => any): void;
74
+ declare function registerToken(name: string, value: string): void;
75
+ declare function resetGlobalRegistry(): void;
76
+ declare function createTw(config?: Record<string, any>): TwContext & {
77
+ registry: {
78
+ plugins: Set<string>;
79
+ variants: Map<string, VariantResolver>;
80
+ utilities: Map<string, UtilityDefinition>;
81
+ tokens: Map<string, string>;
82
+ };
83
+ use: (plugin: TwPlugin) => void;
84
+ };
85
+ declare function use(plugin: TwPlugin): void;
86
+ declare function presetTokens(tokens: Record<string, string>): TwPlugin;
87
+ declare function presetVariants(variants: Record<string, VariantResolver>): TwPlugin;
88
+ declare function presetScrollbar(): TwPlugin;
89
+
90
+ export { type ComponentConfig, type CssHook, type DesignTokens, type PluginRegistry, type TokenMap, type TransformFn, type TransformMeta, type TwClassResult, type TwContext, type TwGlobalRegistry, type TwPlugin, type TwPluginOptions, type TwVitePlugin, type UtilityDefinition, type VariantResolver, createTw, createTwPlugin, getGlobalRegistry, presetScrollbar, presetTokens, presetVariants, registerToken, registerTransform, resetGlobalRegistry, use };
@@ -0,0 +1,90 @@
1
+ import { PluginContext, PartialResolvedId, LoadResult, TransformResult } from 'rollup';
2
+
3
+ interface TwClassResult {
4
+ css: string;
5
+ classes: string[];
6
+ }
7
+ interface DesignTokens {
8
+ [key: string]: string | number | DesignTokens;
9
+ }
10
+ interface TwPluginOptions {
11
+ classProcessor?: (classes: string[]) => TwClassResult;
12
+ tokens?: DesignTokens;
13
+ debug?: boolean;
14
+ minify?: boolean;
15
+ }
16
+ type VariantResolver = (selector: string) => string;
17
+ interface UtilityDefinition {
18
+ [property: string]: string;
19
+ }
20
+ interface ComponentConfig {
21
+ base: string;
22
+ variants: Record<string, Record<string, string>>;
23
+ compoundVariants: Array<{
24
+ class: string;
25
+ [key: string]: any;
26
+ }>;
27
+ defaultVariants: Record<string, string>;
28
+ }
29
+ interface TransformMeta {
30
+ componentName: string;
31
+ tag: string;
32
+ }
33
+ type TransformFn = (config: ComponentConfig, meta: TransformMeta) => ComponentConfig;
34
+ type CssHook = (css: string) => string;
35
+ type TokenMap = Record<string, string>;
36
+ interface TwContext {
37
+ addVariant(name: string, resolver: VariantResolver): void;
38
+ addUtility(name: string, styles: UtilityDefinition): void;
39
+ addToken(name: string, value: string): void;
40
+ addTransform(fn: TransformFn): void;
41
+ onGenerateCSS(hook: CssHook): void;
42
+ onBuildEnd(hook: () => void | Promise<void>): void;
43
+ getToken(name: string): string | undefined;
44
+ subscribeTokens(callback: (tokens: TokenMap) => void): () => void;
45
+ readonly config: Record<string, any>;
46
+ }
47
+ interface TwPlugin {
48
+ name: string;
49
+ setup(ctx: TwContext): void;
50
+ }
51
+ interface PluginRegistry {
52
+ variants: Map<string, VariantResolver>;
53
+ utilities: Map<string, UtilityDefinition>;
54
+ tokens: Map<string, string>;
55
+ transforms: TransformFn[];
56
+ cssHooks: CssHook[];
57
+ buildHooks: Array<() => void | Promise<void>>;
58
+ plugins: Set<string>;
59
+ }
60
+ interface TwVitePlugin {
61
+ resolveId(this: PluginContext, source: string, importer: string): Promise<PartialResolvedId | null>;
62
+ load(this: PluginContext, id: string): Promise<LoadResult | null>;
63
+ transform(this: PluginContext, code: string, id: string): Promise<TransformResult | null>;
64
+ getToken(name: string): string | undefined;
65
+ subscribeTokens(callback: (tokens: Record<string, string>) => void): () => void;
66
+ }
67
+ declare function createTwPlugin(options?: TwPluginOptions): TwVitePlugin;
68
+ interface TwGlobalRegistry {
69
+ transforms: Array<(config: any, ctx: any) => any>;
70
+ tokens: Record<string, string>;
71
+ }
72
+ declare function getGlobalRegistry(): TwGlobalRegistry;
73
+ declare function registerTransform(transform: (config: any, ctx: any) => any): void;
74
+ declare function registerToken(name: string, value: string): void;
75
+ declare function resetGlobalRegistry(): void;
76
+ declare function createTw(config?: Record<string, any>): TwContext & {
77
+ registry: {
78
+ plugins: Set<string>;
79
+ variants: Map<string, VariantResolver>;
80
+ utilities: Map<string, UtilityDefinition>;
81
+ tokens: Map<string, string>;
82
+ };
83
+ use: (plugin: TwPlugin) => void;
84
+ };
85
+ declare function use(plugin: TwPlugin): void;
86
+ declare function presetTokens(tokens: Record<string, string>): TwPlugin;
87
+ declare function presetVariants(variants: Record<string, VariantResolver>): TwPlugin;
88
+ declare function presetScrollbar(): TwPlugin;
89
+
90
+ export { type ComponentConfig, type CssHook, type DesignTokens, type PluginRegistry, type TokenMap, type TransformFn, type TransformMeta, type TwClassResult, type TwContext, type TwGlobalRegistry, type TwPlugin, type TwPluginOptions, type TwVitePlugin, type UtilityDefinition, type VariantResolver, createTw, createTwPlugin, getGlobalRegistry, presetScrollbar, presetTokens, presetVariants, registerToken, registerTransform, resetGlobalRegistry, use };
package/dist/plugin.js ADDED
@@ -0,0 +1,185 @@
1
+ 'use strict';
2
+
3
+ /* tailwind-styled-v4 v5.0.1 | MIT | https://github.com/dictionar32/tailwind-styled-v4 */
4
+
5
+ // packages/plugin/src/index.ts
6
+ var TOKEN_ENGINE_KEY = "__TW_TOKEN_ENGINE__";
7
+ function resolveTokenEngine() {
8
+ if (typeof globalThis !== "undefined") {
9
+ return globalThis[TOKEN_ENGINE_KEY];
10
+ }
11
+ return null;
12
+ }
13
+ function readToken(engine, name) {
14
+ if (!engine) return void 0;
15
+ if (typeof engine.getToken === "function") return engine.getToken(name);
16
+ if (typeof engine.getTokens === "function") {
17
+ const tokens = engine.getTokens();
18
+ return tokens?.[name];
19
+ }
20
+ return void 0;
21
+ }
22
+ function createTwPlugin(options = {}) {
23
+ return {
24
+ async resolveId(source, importer) {
25
+ if (!source.startsWith("tw.") && !source.startsWith("tw:")) return null;
26
+ const importPath = source.replace(/^tw[.:]/, "");
27
+ const resolved = await this.resolve(importPath, importer, { skipSelf: true });
28
+ if (resolved) return { id: resolved.id };
29
+ return null;
30
+ },
31
+ async load(id) {
32
+ return null;
33
+ },
34
+ async transform(code, id) {
35
+ return null;
36
+ },
37
+ getToken(name) {
38
+ const engine = resolveTokenEngine();
39
+ return readToken(engine, name);
40
+ },
41
+ subscribeTokens(callback) {
42
+ const engine = resolveTokenEngine();
43
+ if (!engine) return () => {
44
+ };
45
+ if (typeof engine.subscribeTokens === "function") return engine.subscribeTokens(callback);
46
+ if (typeof engine.subscribe === "function") return engine.subscribe(callback);
47
+ return () => {
48
+ };
49
+ }
50
+ };
51
+ }
52
+ var globalRegistry = {
53
+ transforms: [],
54
+ tokens: {}
55
+ };
56
+ function getGlobalRegistry() {
57
+ return globalRegistry;
58
+ }
59
+ function registerTransform(transform) {
60
+ globalRegistry.transforms.push(transform);
61
+ }
62
+ function registerToken(name, value) {
63
+ globalRegistry.tokens[name] = value;
64
+ }
65
+ function createRegistry() {
66
+ return {
67
+ variants: /* @__PURE__ */ new Map(),
68
+ utilities: /* @__PURE__ */ new Map(),
69
+ tokens: /* @__PURE__ */ new Map(),
70
+ transforms: [],
71
+ cssHooks: [],
72
+ buildHooks: [],
73
+ plugins: /* @__PURE__ */ new Set()
74
+ };
75
+ }
76
+ var _globalRegistry = createRegistry();
77
+ function resetGlobalRegistry() {
78
+ _globalRegistry = createRegistry();
79
+ }
80
+ function createContext(registry, config = {}) {
81
+ return {
82
+ config,
83
+ addVariant(name, resolver) {
84
+ registry.variants.set(name, resolver);
85
+ },
86
+ addUtility(name, styles) {
87
+ registry.utilities.set(name, styles);
88
+ },
89
+ addToken(name, value) {
90
+ const normalized = name.replace(/[^a-zA-Z0-9-]/g, "-").toLowerCase();
91
+ registry.tokens.set(normalized, value);
92
+ },
93
+ addTransform(fn) {
94
+ registry.transforms.push(fn);
95
+ },
96
+ onGenerateCSS(hook) {
97
+ registry.cssHooks.push(hook);
98
+ },
99
+ onBuildEnd(hook) {
100
+ registry.buildHooks.push(hook);
101
+ },
102
+ getToken(name) {
103
+ return readToken(resolveTokenEngine(), name);
104
+ },
105
+ subscribeTokens(callback) {
106
+ const engine = resolveTokenEngine();
107
+ if (!engine) return () => {
108
+ };
109
+ if (typeof engine.subscribeTokens === "function") return engine.subscribeTokens(callback);
110
+ if (typeof engine.subscribe === "function") return engine.subscribe(callback);
111
+ return () => {
112
+ };
113
+ }
114
+ };
115
+ }
116
+ function createTw(config = {}) {
117
+ const registry = createRegistry();
118
+ const ctx = createContext(registry, config);
119
+ const result = ctx;
120
+ result.registry = {
121
+ plugins: registry.plugins,
122
+ variants: registry.variants,
123
+ utilities: registry.utilities,
124
+ tokens: registry.tokens
125
+ };
126
+ result.use = (plugin) => {
127
+ plugin.setup(ctx);
128
+ registry.plugins.add(plugin.name);
129
+ };
130
+ if (config.plugins && Array.isArray(config.plugins)) {
131
+ for (const plugin of config.plugins) {
132
+ if (plugin && plugin.name) {
133
+ result.use(plugin);
134
+ }
135
+ }
136
+ }
137
+ return result;
138
+ }
139
+ function use(plugin) {
140
+ const ctx = createContext(_globalRegistry);
141
+ plugin.setup(ctx);
142
+ }
143
+ function presetTokens(tokens) {
144
+ return {
145
+ name: "preset-tokens",
146
+ setup(ctx) {
147
+ for (const [name, value] of Object.entries(tokens)) {
148
+ ctx.addToken(name, value);
149
+ }
150
+ }
151
+ };
152
+ }
153
+ function presetVariants(variants) {
154
+ return {
155
+ name: "preset-variants",
156
+ setup(ctx) {
157
+ for (const [name, resolver] of Object.entries(variants)) {
158
+ ctx.addVariant(name, resolver);
159
+ }
160
+ }
161
+ };
162
+ }
163
+ function presetScrollbar() {
164
+ return {
165
+ name: "preset-scrollbar",
166
+ setup(ctx) {
167
+ ctx.addVariant("scrollbar-thin", () => "::-webkit-scrollbar{width:8px;height:8px}");
168
+ ctx.addVariant("scrollbar-none", () => "::-webkit-scrollbar{display:none}");
169
+ ctx.addUtility("scrollbar-hide", { "-ms-overflow-style": "none", "scrollbar-width": "none" });
170
+ }
171
+ };
172
+ }
173
+
174
+ exports.createTw = createTw;
175
+ exports.createTwPlugin = createTwPlugin;
176
+ exports.getGlobalRegistry = getGlobalRegistry;
177
+ exports.presetScrollbar = presetScrollbar;
178
+ exports.presetTokens = presetTokens;
179
+ exports.presetVariants = presetVariants;
180
+ exports.registerToken = registerToken;
181
+ exports.registerTransform = registerTransform;
182
+ exports.resetGlobalRegistry = resetGlobalRegistry;
183
+ exports.use = use;
184
+ //# sourceMappingURL=plugin.js.map
185
+ //# sourceMappingURL=plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../packages/plugin/src/index.ts"],"names":[],"mappings":"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","file":"plugin.js","sourcesContent":["import type {\n LoadResult,\n PartialResolvedId,\n PluginContext,\n ResolveIdResult,\n TransformResult,\n} from \"rollup\"\n\n// ── Types ─────────────────────────────────────────────────────────────────────\n\nexport interface TwClassResult {\n css: string\n classes: string[]\n}\n\nexport interface DesignTokens {\n [key: string]: string | number | DesignTokens\n}\n\nexport interface TwPluginOptions {\n classProcessor?: (classes: string[]) => TwClassResult\n tokens?: DesignTokens\n debug?: boolean\n minify?: boolean\n}\n\nexport type VariantResolver = (selector: string) => string\n\nexport interface UtilityDefinition {\n [property: string]: string\n}\n\nexport interface ComponentConfig {\n base: string\n variants: Record<string, Record<string, string>>\n compoundVariants: Array<{ class: string; [key: string]: any }>\n defaultVariants: Record<string, string>\n}\n\nexport interface TransformMeta {\n componentName: string\n tag: string\n}\n\nexport type TransformFn = (config: ComponentConfig, meta: TransformMeta) => ComponentConfig\n\nexport type CssHook = (css: string) => string\nexport type TokenMap = Record<string, string>\n\nexport interface TwContext {\n addVariant(name: string, resolver: VariantResolver): void\n addUtility(name: string, styles: UtilityDefinition): void\n addToken(name: string, value: string): void\n addTransform(fn: TransformFn): void\n onGenerateCSS(hook: CssHook): void\n onBuildEnd(hook: () => void | Promise<void>): void\n getToken(name: string): string | undefined\n subscribeTokens(callback: (tokens: TokenMap) => void): () => void\n readonly config: Record<string, any>\n}\n\n// Legacy TwPlugin interface for plugin development\nexport interface TwPlugin {\n name: string\n setup(ctx: TwContext): void\n}\n\nexport interface PluginRegistry {\n variants: Map<string, VariantResolver>\n utilities: Map<string, UtilityDefinition>\n tokens: Map<string, string>\n transforms: TransformFn[]\n cssHooks: CssHook[]\n buildHooks: Array<() => void | Promise<void>>\n plugins: Set<string>\n}\n\n// ── Token Engine helpers ─────────────────────────────────────────────────────\n\nconst TOKEN_ENGINE_KEY = \"__TW_TOKEN_ENGINE__\"\n\nfunction resolveTokenEngine(): any {\n if (typeof globalThis !== \"undefined\") {\n return (globalThis as any)[TOKEN_ENGINE_KEY]\n }\n return null\n}\n\nfunction readToken(engine: any, name: string): string | undefined {\n if (!engine) return undefined\n if (typeof engine.getToken === \"function\") return engine.getToken(name)\n if (typeof engine.getTokens === \"function\") {\n const tokens = engine.getTokens()\n return tokens?.[name]\n }\n return undefined\n}\n\n// ── Vite/Rollup Plugin (separate from legacy TwPlugin) ─────────────────────\n\nexport interface TwVitePlugin {\n resolveId(\n this: PluginContext,\n source: string,\n importer: string\n ): Promise<PartialResolvedId | null>\n load(this: PluginContext, id: string): Promise<LoadResult | null>\n transform(this: PluginContext, code: string, id: string): Promise<TransformResult | null>\n getToken(name: string): string | undefined\n subscribeTokens(callback: (tokens: Record<string, string>) => void): () => void\n}\n\nexport function createTwPlugin(options: TwPluginOptions = {}): TwVitePlugin {\n return {\n async resolveId(source, importer) {\n if (!source.startsWith(\"tw.\") && !source.startsWith(\"tw:\")) return null\n const importPath = source.replace(/^tw[.:]/, \"\")\n const resolved = await this.resolve(importPath, importer, { skipSelf: true })\n if (resolved) return { id: resolved.id }\n return null\n },\n async load(id) {\n return null\n },\n async transform(code, id) {\n return null\n },\n getToken(name) {\n const engine = resolveTokenEngine()\n return readToken(engine, name)\n },\n subscribeTokens(callback) {\n const engine = resolveTokenEngine()\n if (!engine) return () => {}\n if (typeof engine.subscribeTokens === \"function\") return engine.subscribeTokens(callback)\n if (typeof engine.subscribe === \"function\") return engine.subscribe(callback)\n return () => {}\n },\n }\n}\n\n// ── Global Registry (for @tailwind-styled/compiler) ───────────────────────────\n\nexport interface TwGlobalRegistry {\n transforms: Array<(config: any, ctx: any) => any>\n tokens: Record<string, string>\n}\n\nconst globalRegistry: TwGlobalRegistry = {\n transforms: [],\n tokens: {},\n}\n\nexport function getGlobalRegistry(): TwGlobalRegistry {\n return globalRegistry\n}\n\nexport function registerTransform(transform: (config: any, ctx: any) => any): void {\n globalRegistry.transforms.push(transform)\n}\n\nexport function registerToken(name: string, value: string): void {\n globalRegistry.tokens[name] = value\n}\n\n// ── Legacy exports for backward compatibility ─────────────────────────────--\n\nfunction createRegistry(): PluginRegistry {\n return {\n variants: new Map(),\n utilities: new Map(),\n tokens: new Map(),\n transforms: [],\n cssHooks: [],\n buildHooks: [],\n plugins: new Set(),\n }\n}\n\nlet _globalRegistry: PluginRegistry = createRegistry()\n\nexport function resetGlobalRegistry(): void {\n _globalRegistry = createRegistry()\n}\n\nfunction createContext(registry: PluginRegistry, config: Record<string, any> = {}): TwContext {\n return {\n config,\n addVariant(name, resolver) {\n registry.variants.set(name, resolver)\n },\n addUtility(name, styles) {\n registry.utilities.set(name, styles)\n },\n addToken(name, value) {\n const normalized = name.replace(/[^a-zA-Z0-9-]/g, \"-\").toLowerCase()\n registry.tokens.set(normalized, value)\n },\n addTransform(fn) {\n registry.transforms.push(fn)\n },\n onGenerateCSS(hook) {\n registry.cssHooks.push(hook)\n },\n onBuildEnd(hook) {\n registry.buildHooks.push(hook)\n },\n getToken(name) {\n return readToken(resolveTokenEngine(), name)\n },\n subscribeTokens(callback) {\n const engine = resolveTokenEngine()\n if (!engine) return () => {}\n if (typeof engine.subscribeTokens === \"function\") return engine.subscribeTokens(callback)\n if (typeof engine.subscribe === \"function\") return engine.subscribe(callback)\n return () => {}\n },\n }\n}\n\n// Legacy createTw function for backward compatibility\nexport function createTw(config: Record<string, any> = {}): TwContext & {\n registry: {\n plugins: Set<string>\n variants: Map<string, VariantResolver>\n utilities: Map<string, UtilityDefinition>\n tokens: Map<string, string>\n }\n use: (plugin: TwPlugin) => void\n} {\n const registry = createRegistry()\n const ctx = createContext(registry, config)\n\n // Add registry and use method for test compatibility\n const result = ctx as TwContext & {\n registry: {\n plugins: Set<string>\n variants: Map<string, VariantResolver>\n utilities: Map<string, UtilityDefinition>\n tokens: Map<string, string>\n }\n use: (plugin: TwPlugin) => void\n }\n result.registry = {\n plugins: registry.plugins,\n variants: registry.variants,\n utilities: registry.utilities,\n tokens: registry.tokens,\n }\n result.use = (plugin: TwPlugin) => {\n plugin.setup(ctx)\n registry.plugins.add(plugin.name)\n }\n\n // Run plugins if provided in config\n if (config.plugins && Array.isArray(config.plugins)) {\n for (const plugin of config.plugins) {\n if (plugin && plugin.name) {\n result.use(plugin)\n }\n }\n }\n\n return result\n}\n\nexport function use(plugin: TwPlugin): void {\n const ctx = createContext(_globalRegistry)\n plugin.setup(ctx)\n}\n\n// Simple preset helpers\nexport function presetTokens(tokens: Record<string, string>): TwPlugin {\n return {\n name: \"preset-tokens\",\n setup(ctx) {\n for (const [name, value] of Object.entries(tokens)) {\n ctx.addToken(name, value)\n }\n },\n }\n}\n\nexport function presetVariants(variants: Record<string, VariantResolver>): TwPlugin {\n return {\n name: \"preset-variants\",\n setup(ctx) {\n for (const [name, resolver] of Object.entries(variants)) {\n ctx.addVariant(name, resolver)\n }\n },\n }\n}\n\nexport function presetScrollbar(): TwPlugin {\n return {\n name: \"preset-scrollbar\",\n setup(ctx) {\n ctx.addVariant(\"scrollbar-thin\", () => \"::-webkit-scrollbar{width:8px;height:8px}\")\n ctx.addVariant(\"scrollbar-none\", () => \"::-webkit-scrollbar{display:none}\")\n ctx.addUtility(\"scrollbar-hide\", { \"-ms-overflow-style\": \"none\", \"scrollbar-width\": \"none\" })\n },\n }\n}\n"]}
@@ -0,0 +1,174 @@
1
+ /* tailwind-styled-v4 v5.0.1 | MIT | https://github.com/dictionar32/tailwind-styled-v4 */
2
+
3
+ // packages/plugin/src/index.ts
4
+ var TOKEN_ENGINE_KEY = "__TW_TOKEN_ENGINE__";
5
+ function resolveTokenEngine() {
6
+ if (typeof globalThis !== "undefined") {
7
+ return globalThis[TOKEN_ENGINE_KEY];
8
+ }
9
+ return null;
10
+ }
11
+ function readToken(engine, name) {
12
+ if (!engine) return void 0;
13
+ if (typeof engine.getToken === "function") return engine.getToken(name);
14
+ if (typeof engine.getTokens === "function") {
15
+ const tokens = engine.getTokens();
16
+ return tokens?.[name];
17
+ }
18
+ return void 0;
19
+ }
20
+ function createTwPlugin(options = {}) {
21
+ return {
22
+ async resolveId(source, importer) {
23
+ if (!source.startsWith("tw.") && !source.startsWith("tw:")) return null;
24
+ const importPath = source.replace(/^tw[.:]/, "");
25
+ const resolved = await this.resolve(importPath, importer, { skipSelf: true });
26
+ if (resolved) return { id: resolved.id };
27
+ return null;
28
+ },
29
+ async load(id) {
30
+ return null;
31
+ },
32
+ async transform(code, id) {
33
+ return null;
34
+ },
35
+ getToken(name) {
36
+ const engine = resolveTokenEngine();
37
+ return readToken(engine, name);
38
+ },
39
+ subscribeTokens(callback) {
40
+ const engine = resolveTokenEngine();
41
+ if (!engine) return () => {
42
+ };
43
+ if (typeof engine.subscribeTokens === "function") return engine.subscribeTokens(callback);
44
+ if (typeof engine.subscribe === "function") return engine.subscribe(callback);
45
+ return () => {
46
+ };
47
+ }
48
+ };
49
+ }
50
+ var globalRegistry = {
51
+ transforms: [],
52
+ tokens: {}
53
+ };
54
+ function getGlobalRegistry() {
55
+ return globalRegistry;
56
+ }
57
+ function registerTransform(transform) {
58
+ globalRegistry.transforms.push(transform);
59
+ }
60
+ function registerToken(name, value) {
61
+ globalRegistry.tokens[name] = value;
62
+ }
63
+ function createRegistry() {
64
+ return {
65
+ variants: /* @__PURE__ */ new Map(),
66
+ utilities: /* @__PURE__ */ new Map(),
67
+ tokens: /* @__PURE__ */ new Map(),
68
+ transforms: [],
69
+ cssHooks: [],
70
+ buildHooks: [],
71
+ plugins: /* @__PURE__ */ new Set()
72
+ };
73
+ }
74
+ var _globalRegistry = createRegistry();
75
+ function resetGlobalRegistry() {
76
+ _globalRegistry = createRegistry();
77
+ }
78
+ function createContext(registry, config = {}) {
79
+ return {
80
+ config,
81
+ addVariant(name, resolver) {
82
+ registry.variants.set(name, resolver);
83
+ },
84
+ addUtility(name, styles) {
85
+ registry.utilities.set(name, styles);
86
+ },
87
+ addToken(name, value) {
88
+ const normalized = name.replace(/[^a-zA-Z0-9-]/g, "-").toLowerCase();
89
+ registry.tokens.set(normalized, value);
90
+ },
91
+ addTransform(fn) {
92
+ registry.transforms.push(fn);
93
+ },
94
+ onGenerateCSS(hook) {
95
+ registry.cssHooks.push(hook);
96
+ },
97
+ onBuildEnd(hook) {
98
+ registry.buildHooks.push(hook);
99
+ },
100
+ getToken(name) {
101
+ return readToken(resolveTokenEngine(), name);
102
+ },
103
+ subscribeTokens(callback) {
104
+ const engine = resolveTokenEngine();
105
+ if (!engine) return () => {
106
+ };
107
+ if (typeof engine.subscribeTokens === "function") return engine.subscribeTokens(callback);
108
+ if (typeof engine.subscribe === "function") return engine.subscribe(callback);
109
+ return () => {
110
+ };
111
+ }
112
+ };
113
+ }
114
+ function createTw(config = {}) {
115
+ const registry = createRegistry();
116
+ const ctx = createContext(registry, config);
117
+ const result = ctx;
118
+ result.registry = {
119
+ plugins: registry.plugins,
120
+ variants: registry.variants,
121
+ utilities: registry.utilities,
122
+ tokens: registry.tokens
123
+ };
124
+ result.use = (plugin) => {
125
+ plugin.setup(ctx);
126
+ registry.plugins.add(plugin.name);
127
+ };
128
+ if (config.plugins && Array.isArray(config.plugins)) {
129
+ for (const plugin of config.plugins) {
130
+ if (plugin && plugin.name) {
131
+ result.use(plugin);
132
+ }
133
+ }
134
+ }
135
+ return result;
136
+ }
137
+ function use(plugin) {
138
+ const ctx = createContext(_globalRegistry);
139
+ plugin.setup(ctx);
140
+ }
141
+ function presetTokens(tokens) {
142
+ return {
143
+ name: "preset-tokens",
144
+ setup(ctx) {
145
+ for (const [name, value] of Object.entries(tokens)) {
146
+ ctx.addToken(name, value);
147
+ }
148
+ }
149
+ };
150
+ }
151
+ function presetVariants(variants) {
152
+ return {
153
+ name: "preset-variants",
154
+ setup(ctx) {
155
+ for (const [name, resolver] of Object.entries(variants)) {
156
+ ctx.addVariant(name, resolver);
157
+ }
158
+ }
159
+ };
160
+ }
161
+ function presetScrollbar() {
162
+ return {
163
+ name: "preset-scrollbar",
164
+ setup(ctx) {
165
+ ctx.addVariant("scrollbar-thin", () => "::-webkit-scrollbar{width:8px;height:8px}");
166
+ ctx.addVariant("scrollbar-none", () => "::-webkit-scrollbar{display:none}");
167
+ ctx.addUtility("scrollbar-hide", { "-ms-overflow-style": "none", "scrollbar-width": "none" });
168
+ }
169
+ };
170
+ }
171
+
172
+ export { createTw, createTwPlugin, getGlobalRegistry, presetScrollbar, presetTokens, presetVariants, registerToken, registerTransform, resetGlobalRegistry, use };
173
+ //# sourceMappingURL=plugin.mjs.map
174
+ //# sourceMappingURL=plugin.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../packages/plugin/src/index.ts"],"names":[],"mappings":"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","file":"plugin.mjs","sourcesContent":["import type {\n LoadResult,\n PartialResolvedId,\n PluginContext,\n ResolveIdResult,\n TransformResult,\n} from \"rollup\"\n\n// ── Types ─────────────────────────────────────────────────────────────────────\n\nexport interface TwClassResult {\n css: string\n classes: string[]\n}\n\nexport interface DesignTokens {\n [key: string]: string | number | DesignTokens\n}\n\nexport interface TwPluginOptions {\n classProcessor?: (classes: string[]) => TwClassResult\n tokens?: DesignTokens\n debug?: boolean\n minify?: boolean\n}\n\nexport type VariantResolver = (selector: string) => string\n\nexport interface UtilityDefinition {\n [property: string]: string\n}\n\nexport interface ComponentConfig {\n base: string\n variants: Record<string, Record<string, string>>\n compoundVariants: Array<{ class: string; [key: string]: any }>\n defaultVariants: Record<string, string>\n}\n\nexport interface TransformMeta {\n componentName: string\n tag: string\n}\n\nexport type TransformFn = (config: ComponentConfig, meta: TransformMeta) => ComponentConfig\n\nexport type CssHook = (css: string) => string\nexport type TokenMap = Record<string, string>\n\nexport interface TwContext {\n addVariant(name: string, resolver: VariantResolver): void\n addUtility(name: string, styles: UtilityDefinition): void\n addToken(name: string, value: string): void\n addTransform(fn: TransformFn): void\n onGenerateCSS(hook: CssHook): void\n onBuildEnd(hook: () => void | Promise<void>): void\n getToken(name: string): string | undefined\n subscribeTokens(callback: (tokens: TokenMap) => void): () => void\n readonly config: Record<string, any>\n}\n\n// Legacy TwPlugin interface for plugin development\nexport interface TwPlugin {\n name: string\n setup(ctx: TwContext): void\n}\n\nexport interface PluginRegistry {\n variants: Map<string, VariantResolver>\n utilities: Map<string, UtilityDefinition>\n tokens: Map<string, string>\n transforms: TransformFn[]\n cssHooks: CssHook[]\n buildHooks: Array<() => void | Promise<void>>\n plugins: Set<string>\n}\n\n// ── Token Engine helpers ─────────────────────────────────────────────────────\n\nconst TOKEN_ENGINE_KEY = \"__TW_TOKEN_ENGINE__\"\n\nfunction resolveTokenEngine(): any {\n if (typeof globalThis !== \"undefined\") {\n return (globalThis as any)[TOKEN_ENGINE_KEY]\n }\n return null\n}\n\nfunction readToken(engine: any, name: string): string | undefined {\n if (!engine) return undefined\n if (typeof engine.getToken === \"function\") return engine.getToken(name)\n if (typeof engine.getTokens === \"function\") {\n const tokens = engine.getTokens()\n return tokens?.[name]\n }\n return undefined\n}\n\n// ── Vite/Rollup Plugin (separate from legacy TwPlugin) ─────────────────────\n\nexport interface TwVitePlugin {\n resolveId(\n this: PluginContext,\n source: string,\n importer: string\n ): Promise<PartialResolvedId | null>\n load(this: PluginContext, id: string): Promise<LoadResult | null>\n transform(this: PluginContext, code: string, id: string): Promise<TransformResult | null>\n getToken(name: string): string | undefined\n subscribeTokens(callback: (tokens: Record<string, string>) => void): () => void\n}\n\nexport function createTwPlugin(options: TwPluginOptions = {}): TwVitePlugin {\n return {\n async resolveId(source, importer) {\n if (!source.startsWith(\"tw.\") && !source.startsWith(\"tw:\")) return null\n const importPath = source.replace(/^tw[.:]/, \"\")\n const resolved = await this.resolve(importPath, importer, { skipSelf: true })\n if (resolved) return { id: resolved.id }\n return null\n },\n async load(id) {\n return null\n },\n async transform(code, id) {\n return null\n },\n getToken(name) {\n const engine = resolveTokenEngine()\n return readToken(engine, name)\n },\n subscribeTokens(callback) {\n const engine = resolveTokenEngine()\n if (!engine) return () => {}\n if (typeof engine.subscribeTokens === \"function\") return engine.subscribeTokens(callback)\n if (typeof engine.subscribe === \"function\") return engine.subscribe(callback)\n return () => {}\n },\n }\n}\n\n// ── Global Registry (for @tailwind-styled/compiler) ───────────────────────────\n\nexport interface TwGlobalRegistry {\n transforms: Array<(config: any, ctx: any) => any>\n tokens: Record<string, string>\n}\n\nconst globalRegistry: TwGlobalRegistry = {\n transforms: [],\n tokens: {},\n}\n\nexport function getGlobalRegistry(): TwGlobalRegistry {\n return globalRegistry\n}\n\nexport function registerTransform(transform: (config: any, ctx: any) => any): void {\n globalRegistry.transforms.push(transform)\n}\n\nexport function registerToken(name: string, value: string): void {\n globalRegistry.tokens[name] = value\n}\n\n// ── Legacy exports for backward compatibility ─────────────────────────────--\n\nfunction createRegistry(): PluginRegistry {\n return {\n variants: new Map(),\n utilities: new Map(),\n tokens: new Map(),\n transforms: [],\n cssHooks: [],\n buildHooks: [],\n plugins: new Set(),\n }\n}\n\nlet _globalRegistry: PluginRegistry = createRegistry()\n\nexport function resetGlobalRegistry(): void {\n _globalRegistry = createRegistry()\n}\n\nfunction createContext(registry: PluginRegistry, config: Record<string, any> = {}): TwContext {\n return {\n config,\n addVariant(name, resolver) {\n registry.variants.set(name, resolver)\n },\n addUtility(name, styles) {\n registry.utilities.set(name, styles)\n },\n addToken(name, value) {\n const normalized = name.replace(/[^a-zA-Z0-9-]/g, \"-\").toLowerCase()\n registry.tokens.set(normalized, value)\n },\n addTransform(fn) {\n registry.transforms.push(fn)\n },\n onGenerateCSS(hook) {\n registry.cssHooks.push(hook)\n },\n onBuildEnd(hook) {\n registry.buildHooks.push(hook)\n },\n getToken(name) {\n return readToken(resolveTokenEngine(), name)\n },\n subscribeTokens(callback) {\n const engine = resolveTokenEngine()\n if (!engine) return () => {}\n if (typeof engine.subscribeTokens === \"function\") return engine.subscribeTokens(callback)\n if (typeof engine.subscribe === \"function\") return engine.subscribe(callback)\n return () => {}\n },\n }\n}\n\n// Legacy createTw function for backward compatibility\nexport function createTw(config: Record<string, any> = {}): TwContext & {\n registry: {\n plugins: Set<string>\n variants: Map<string, VariantResolver>\n utilities: Map<string, UtilityDefinition>\n tokens: Map<string, string>\n }\n use: (plugin: TwPlugin) => void\n} {\n const registry = createRegistry()\n const ctx = createContext(registry, config)\n\n // Add registry and use method for test compatibility\n const result = ctx as TwContext & {\n registry: {\n plugins: Set<string>\n variants: Map<string, VariantResolver>\n utilities: Map<string, UtilityDefinition>\n tokens: Map<string, string>\n }\n use: (plugin: TwPlugin) => void\n }\n result.registry = {\n plugins: registry.plugins,\n variants: registry.variants,\n utilities: registry.utilities,\n tokens: registry.tokens,\n }\n result.use = (plugin: TwPlugin) => {\n plugin.setup(ctx)\n registry.plugins.add(plugin.name)\n }\n\n // Run plugins if provided in config\n if (config.plugins && Array.isArray(config.plugins)) {\n for (const plugin of config.plugins) {\n if (plugin && plugin.name) {\n result.use(plugin)\n }\n }\n }\n\n return result\n}\n\nexport function use(plugin: TwPlugin): void {\n const ctx = createContext(_globalRegistry)\n plugin.setup(ctx)\n}\n\n// Simple preset helpers\nexport function presetTokens(tokens: Record<string, string>): TwPlugin {\n return {\n name: \"preset-tokens\",\n setup(ctx) {\n for (const [name, value] of Object.entries(tokens)) {\n ctx.addToken(name, value)\n }\n },\n }\n}\n\nexport function presetVariants(variants: Record<string, VariantResolver>): TwPlugin {\n return {\n name: \"preset-variants\",\n setup(ctx) {\n for (const [name, resolver] of Object.entries(variants)) {\n ctx.addVariant(name, resolver)\n }\n },\n }\n}\n\nexport function presetScrollbar(): TwPlugin {\n return {\n name: \"preset-scrollbar\",\n setup(ctx) {\n ctx.addVariant(\"scrollbar-thin\", () => \"::-webkit-scrollbar{width:8px;height:8px}\")\n ctx.addVariant(\"scrollbar-none\", () => \"::-webkit-scrollbar{display:none}\")\n ctx.addUtility(\"scrollbar-hide\", { \"-ms-overflow-style\": \"none\", \"scrollbar-width\": \"none\" })\n },\n }\n}\n"]}