tailwind-styled-v4 5.0.36 → 5.0.38

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 (163) hide show
  1. package/dist/analyzer.d.mts +152 -5
  2. package/dist/analyzer.d.ts +152 -5
  3. package/dist/analyzer.js +213 -161
  4. package/dist/analyzer.js.map +1 -1
  5. package/dist/analyzer.mjs +118 -82
  6. package/dist/analyzer.mjs.map +1 -1
  7. package/dist/animate.d.mts +30 -3
  8. package/dist/animate.d.ts +30 -3
  9. package/dist/animate.js +131 -87
  10. package/dist/animate.js.map +1 -1
  11. package/dist/animate.mjs +28 -14
  12. package/dist/animate.mjs.map +1 -1
  13. package/dist/atomic.js +105 -68
  14. package/dist/atomic.js.map +1 -1
  15. package/dist/atomic.mjs +40 -13
  16. package/dist/atomic.mjs.map +1 -1
  17. package/dist/cli.js +577 -426
  18. package/dist/cli.js.map +1 -1
  19. package/dist/cli.mjs +466 -304
  20. package/dist/cli.mjs.map +1 -1
  21. package/dist/compiler.d.mts +5 -0
  22. package/dist/compiler.d.ts +5 -0
  23. package/dist/compiler.js +826 -508
  24. package/dist/compiler.js.map +1 -1
  25. package/dist/compiler.mjs +287 -29
  26. package/dist/compiler.mjs.map +1 -1
  27. package/dist/dashboard.js +71 -41
  28. package/dist/dashboard.js.map +1 -1
  29. package/dist/dashboard.mjs +12 -6
  30. package/dist/dashboard.mjs.map +1 -1
  31. package/dist/devtools.d.mts +88 -2
  32. package/dist/devtools.d.ts +88 -2
  33. package/dist/devtools.js +333 -289
  34. package/dist/devtools.js.map +1 -1
  35. package/dist/devtools.mjs +26 -11
  36. package/dist/devtools.mjs.map +1 -1
  37. package/dist/engine.d.mts +557 -6
  38. package/dist/engine.d.ts +557 -6
  39. package/dist/engine.js +679 -502
  40. package/dist/engine.js.map +1 -1
  41. package/dist/engine.mjs +467 -307
  42. package/dist/engine.mjs.map +1 -1
  43. package/dist/index.d.mts +180 -127
  44. package/dist/index.d.ts +180 -127
  45. package/dist/index.js +1329 -7441
  46. package/dist/index.js.map +1 -1
  47. package/dist/index.mjs +1266 -7385
  48. package/dist/index.mjs.map +1 -1
  49. package/dist/next.js +318 -243
  50. package/dist/next.js.map +1 -1
  51. package/dist/next.mjs +256 -181
  52. package/dist/next.mjs.map +1 -1
  53. package/dist/plugin-api.d.mts +4 -2
  54. package/dist/plugin-api.d.ts +4 -2
  55. package/dist/plugin-api.js +93 -49
  56. package/dist/plugin-api.js.map +1 -1
  57. package/dist/plugin-api.mjs +26 -6
  58. package/dist/plugin-api.mjs.map +1 -1
  59. package/dist/plugin-registry.js +103 -62
  60. package/dist/plugin-registry.js.map +1 -1
  61. package/dist/plugin-registry.mjs +53 -35
  62. package/dist/plugin-registry.mjs.map +1 -1
  63. package/dist/plugin.d.mts +165 -5
  64. package/dist/plugin.d.ts +165 -5
  65. package/dist/plugin.js +115 -50
  66. package/dist/plugin.js.map +1 -1
  67. package/dist/plugin.mjs +44 -6
  68. package/dist/plugin.mjs.map +1 -1
  69. package/dist/preset.js +47 -15
  70. package/dist/preset.js.map +1 -1
  71. package/dist/preset.mjs +13 -5
  72. package/dist/preset.mjs.map +1 -1
  73. package/dist/rspack.js +82 -50
  74. package/dist/rspack.js.map +1 -1
  75. package/dist/rspack.mjs +20 -12
  76. package/dist/rspack.mjs.map +1 -1
  77. package/dist/runtime-css.js +62 -24
  78. package/dist/runtime-css.js.map +1 -1
  79. package/dist/runtime-css.mjs +15 -7
  80. package/dist/runtime-css.mjs.map +1 -1
  81. package/dist/runtime.d.mts +38 -3
  82. package/dist/runtime.d.ts +38 -3
  83. package/dist/runtime.js +97 -44
  84. package/dist/runtime.js.map +1 -1
  85. package/dist/runtime.mjs +31 -8
  86. package/dist/runtime.mjs.map +1 -1
  87. package/dist/scanner.d.mts +58 -4
  88. package/dist/scanner.d.ts +58 -4
  89. package/dist/scanner.js +163 -120
  90. package/dist/scanner.js.map +1 -1
  91. package/dist/scanner.mjs +67 -39
  92. package/dist/scanner.mjs.map +1 -1
  93. package/dist/shared.d.mts +185 -3
  94. package/dist/shared.d.ts +185 -3
  95. package/dist/shared.js +441 -295
  96. package/dist/shared.js.map +1 -1
  97. package/dist/shared.mjs +253 -122
  98. package/dist/shared.mjs.map +1 -1
  99. package/dist/storybook-addon.d.mts +2 -2
  100. package/dist/storybook-addon.d.ts +2 -2
  101. package/dist/storybook-addon.js +39 -10
  102. package/dist/storybook-addon.js.map +1 -1
  103. package/dist/storybook-addon.mjs +8 -3
  104. package/dist/storybook-addon.mjs.map +1 -1
  105. package/dist/svelte.d.mts +2 -1
  106. package/dist/svelte.d.ts +2 -1
  107. package/dist/svelte.js +88 -64
  108. package/dist/svelte.js.map +1 -1
  109. package/dist/svelte.mjs +28 -13
  110. package/dist/svelte.mjs.map +1 -1
  111. package/dist/syntax.js +68 -37
  112. package/dist/syntax.js.map +1 -1
  113. package/dist/syntax.mjs +8 -7
  114. package/dist/syntax.mjs.map +1 -1
  115. package/dist/testing.js +55 -18
  116. package/dist/testing.js.map +1 -1
  117. package/dist/testing.mjs +16 -3
  118. package/dist/testing.mjs.map +1 -1
  119. package/dist/theme.d.mts +38 -3
  120. package/dist/theme.d.ts +38 -3
  121. package/dist/theme.js +131 -74
  122. package/dist/theme.js.map +1 -1
  123. package/dist/theme.mjs +42 -13
  124. package/dist/theme.mjs.map +1 -1
  125. package/dist/turbopackLoader.js +150 -116
  126. package/dist/turbopackLoader.js.map +1 -1
  127. package/dist/turbopackLoader.mjs +124 -81
  128. package/dist/turbopackLoader.mjs.map +1 -1
  129. package/dist/tw.js +560 -421
  130. package/dist/tw.js.map +1 -1
  131. package/dist/tw.mjs +460 -302
  132. package/dist/tw.mjs.map +1 -1
  133. package/dist/vite.js +561 -446
  134. package/dist/vite.js.map +1 -1
  135. package/dist/vite.mjs +433 -321
  136. package/dist/vite.mjs.map +1 -1
  137. package/dist/vue.d.mts +4 -1
  138. package/dist/vue.d.ts +4 -1
  139. package/dist/vue.js +95 -70
  140. package/dist/vue.js.map +1 -1
  141. package/dist/vue.mjs +30 -14
  142. package/dist/vue.mjs.map +1 -1
  143. package/dist/webpackLoader.js +110 -78
  144. package/dist/webpackLoader.js.map +1 -1
  145. package/dist/webpackLoader.mjs +45 -17
  146. package/dist/webpackLoader.mjs.map +1 -1
  147. package/native/tailwind-styled-native.linux-x64-gnu.node +0 -0
  148. package/native/tailwind-styled-native.node +0 -0
  149. package/package.json +3 -1
  150. package/dist/analyzeWorkspace-B1_XRfdl.d.ts +0 -134
  151. package/dist/analyzeWorkspace-hYfu4Hg3.d.mts +0 -134
  152. package/dist/index-DQI6O24n.d.mts +0 -464
  153. package/dist/index-NDINUhLN.d.mts +0 -90
  154. package/dist/index-NDINUhLN.d.ts +0 -90
  155. package/dist/index-UkYbyBkR.d.ts +0 -464
  156. package/dist/liveTokenEngine-CN9ian1R.d.ts +0 -38
  157. package/dist/liveTokenEngine-DKoWRtqH.d.mts +0 -38
  158. package/dist/schemas-DR-SLxZZ.d.mts +0 -59
  159. package/dist/schemas-DR-SLxZZ.d.ts +0 -59
  160. package/dist/trace-Dz4vmZdy.d.mts +0 -96
  161. package/dist/trace-Dz4vmZdy.d.ts +0 -96
  162. package/dist/types-DXr2PmGP.d.mts +0 -31
  163. package/dist/types-DXr2PmGP.d.ts +0 -31
package/dist/plugin.js CHANGED
@@ -1,9 +1,56 @@
1
- 'use strict';
2
-
3
- var zod = require('zod');
4
-
5
1
  /* tailwind-styled-v4 v5.0.4 | MIT | https://github.com/dictionar32/tailwind-styled-v4 */
2
+ "use strict";
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __export = (target, all) => {
8
+ for (var name in all)
9
+ __defProp(target, name, { get: all[name], enumerable: true });
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from))
14
+ if (!__hasOwnProp.call(to, key) && key !== except)
15
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
+ }
17
+ return to;
18
+ };
19
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
20
+
21
+ // src/umbrella/plugin.ts
22
+ var plugin_exports = {};
23
+ __export(plugin_exports, {
24
+ PluginManifestSchema: () => PluginManifestSchema,
25
+ TokenRegistrationSchema: () => TokenRegistrationSchema,
26
+ TransformRegistrationSchema: () => TransformRegistrationSchema,
27
+ TwPluginOptionsSchema: () => TwPluginOptionsSchema,
28
+ applyHooks: () => applyHooks,
29
+ createGlobalPluginContext: () => createGlobalPluginContext,
30
+ createPluginContext: () => createPluginContext,
31
+ createPluginRegistry: () => createPluginRegistry,
32
+ createTw: () => createTw,
33
+ createTwPlugin: () => createTwPlugin,
34
+ getGlobalRegistry: () => getGlobalRegistry,
35
+ getPluginHooks: () => getPluginHooks,
36
+ parsePluginManifest: () => parsePluginManifest,
37
+ parseTokenRegistration: () => parseTokenRegistration,
38
+ parseTwPluginOptions: () => parseTwPluginOptions,
39
+ presetScrollbar: () => presetScrollbar,
40
+ presetTokens: () => presetTokens,
41
+ presetVariants: () => presetVariants,
42
+ readToken: () => readToken,
43
+ registerPluginHooks: () => registerPluginHooks,
44
+ registerToken: () => registerToken,
45
+ registerTransform: () => registerTransform,
46
+ resetGlobalRegistry: () => resetGlobalRegistry,
47
+ resolveTokenEngine: () => resolveTokenEngine,
48
+ use: () => use
49
+ });
50
+ module.exports = __toCommonJS(plugin_exports);
6
51
 
52
+ // packages/domain/plugin-api/src/schemas.ts
53
+ var import_zod = require("zod");
7
54
  var formatIssues = (error) => error.issues.map((issue) => {
8
55
  const p = issue.path.length > 0 ? issue.path.join(".") : "<root>";
9
56
  return `${p}: ${issue.message}`;
@@ -13,44 +60,44 @@ var parseWithSchema = (schema, data, label) => {
13
60
  if (parsed.success) return parsed.data;
14
61
  throw new TypeError(`${label}: ${formatIssues(parsed.error)}`);
15
62
  };
16
- var DesignTokensSchema = zod.z.record(zod.z.string(), zod.z.union([zod.z.string(), zod.z.number(), zod.z.lazy(() => DesignTokensSchema)]));
17
- var TwClassResultSchema = zod.z.object({
18
- css: zod.z.string(),
19
- classes: zod.z.array(zod.z.string())
63
+ var DesignTokensSchema = import_zod.z.record(import_zod.z.string(), import_zod.z.union([import_zod.z.string(), import_zod.z.number(), import_zod.z.lazy(() => DesignTokensSchema)]));
64
+ var TwClassResultSchema = import_zod.z.object({
65
+ css: import_zod.z.string(),
66
+ classes: import_zod.z.array(import_zod.z.string())
20
67
  });
21
- var TwPluginOptionsSchema = zod.z.object({
22
- classProcessor: zod.z.function({ input: [zod.z.array(zod.z.string())], output: TwClassResultSchema }).optional(),
68
+ var TwPluginOptionsSchema = import_zod.z.object({
69
+ classProcessor: import_zod.z.function({ input: [import_zod.z.array(import_zod.z.string())], output: TwClassResultSchema }).optional(),
23
70
  tokens: DesignTokensSchema.optional(),
24
- debug: zod.z.boolean().optional(),
25
- minify: zod.z.boolean().optional()
71
+ debug: import_zod.z.boolean().optional(),
72
+ minify: import_zod.z.boolean().optional()
26
73
  });
27
- var PluginManifestSchema = zod.z.object({
28
- name: zod.z.string().min(1),
29
- setup: zod.z.function({ input: [zod.z.unknown()], output: zod.z.unknown() })
74
+ var PluginManifestSchema = import_zod.z.object({
75
+ name: import_zod.z.string().min(1),
76
+ setup: import_zod.z.function({ input: [import_zod.z.unknown()], output: import_zod.z.unknown() })
30
77
  });
31
- var TransformRegistrationSchema = zod.z.function({ input: [zod.z.unknown()], output: zod.z.unknown() });
32
- var TokenRegistrationSchema = zod.z.object({
33
- name: zod.z.string().min(1),
34
- value: zod.z.string()
78
+ var TransformRegistrationSchema = import_zod.z.function({ input: [import_zod.z.unknown()], output: import_zod.z.unknown() });
79
+ var TokenRegistrationSchema = import_zod.z.object({
80
+ name: import_zod.z.string().min(1),
81
+ value: import_zod.z.string()
35
82
  });
36
83
  var parseTwPluginOptions = (options) => parseWithSchema(TwPluginOptionsSchema, options ?? {}, "plugin options are invalid");
37
84
  var parsePluginManifest = (plugin) => parseWithSchema(PluginManifestSchema, plugin, "plugin manifest is invalid");
38
85
  var parseTokenRegistration = (data) => parseWithSchema(TokenRegistrationSchema, data, "token registration is invalid");
39
- var PluginNameSchema = zod.z.string().min(1, "Plugin name cannot be empty").regex(
86
+ var PluginNameSchema = import_zod.z.string().min(1, "Plugin name cannot be empty").regex(
40
87
  /^(@[a-z0-9-]+\/)?[a-z0-9][a-z0-9-]*[a-z0-9]$/,
41
88
  "Plugin name must follow npm naming: lowercase, hyphens allowed, no leading/trailing hyphens"
42
89
  );
43
- var SemverSchema = zod.z.string().regex(/^\d+\.\d+\.\d+(-[a-z0-9.]+)?$/, "Version must follow semver: x.y.z or x.y.z-prerelease");
90
+ var SemverSchema = import_zod.z.string().regex(/^\d+\.\d+\.\d+(-[a-z0-9.]+)?$/, "Version must follow semver: x.y.z or x.y.z-prerelease");
44
91
  var FullPluginManifestSchema = PluginManifestSchema.extend({
45
92
  name: PluginNameSchema,
46
93
  version: SemverSchema.optional(),
47
- description: zod.z.string().max(200).optional(),
48
- keywords: zod.z.array(zod.z.string()).max(10).optional()
94
+ description: import_zod.z.string().max(200).optional(),
95
+ keywords: import_zod.z.array(import_zod.z.string()).max(10).optional()
49
96
  });
50
- zod.z.object({
97
+ var PluginRegistrationPayloadSchema = import_zod.z.object({
51
98
  plugin: FullPluginManifestSchema,
52
- config: zod.z.record(zod.z.string(), zod.z.unknown()).optional(),
53
- priority: zod.z.number().int().min(0).max(100).optional()
99
+ config: import_zod.z.record(import_zod.z.string(), import_zod.z.unknown()).optional(),
100
+ priority: import_zod.z.number().int().min(0).max(100).optional()
54
101
  });
55
102
 
56
103
  // packages/domain/plugin-api/src/index.ts
@@ -224,6 +271,20 @@ function presetScrollbar() {
224
271
  };
225
272
  }
226
273
 
274
+ // packages/domain/plugin/src/hooks.ts
275
+ var registeredHooks = {};
276
+ function registerPluginHooks(hooks) {
277
+ registeredHooks = { ...registeredHooks, ...hooks };
278
+ }
279
+ function getPluginHooks() {
280
+ return registeredHooks;
281
+ }
282
+ async function applyHooks(hookName, ctx) {
283
+ const hook = registeredHooks[hookName];
284
+ if (!hook) return ctx;
285
+ return hook(ctx);
286
+ }
287
+
227
288
  // packages/domain/plugin/src/index.ts
228
289
  function createTwPlugin(options = {}) {
229
290
  parseTwPluginOptions(options);
@@ -245,28 +306,32 @@ function createTwPlugin(options = {}) {
245
306
  }
246
307
  };
247
308
  }
248
-
249
- exports.PluginManifestSchema = PluginManifestSchema;
250
- exports.TokenRegistrationSchema = TokenRegistrationSchema;
251
- exports.TransformRegistrationSchema = TransformRegistrationSchema;
252
- exports.TwPluginOptionsSchema = TwPluginOptionsSchema;
253
- exports.createGlobalPluginContext = createGlobalPluginContext;
254
- exports.createPluginContext = createPluginContext;
255
- exports.createPluginRegistry = createPluginRegistry;
256
- exports.createTw = createTw;
257
- exports.createTwPlugin = createTwPlugin;
258
- exports.getGlobalRegistry = getGlobalRegistry;
259
- exports.parsePluginManifest = parsePluginManifest;
260
- exports.parseTokenRegistration = parseTokenRegistration;
261
- exports.parseTwPluginOptions = parseTwPluginOptions;
262
- exports.presetScrollbar = presetScrollbar;
263
- exports.presetTokens = presetTokens;
264
- exports.presetVariants = presetVariants;
265
- exports.readToken = readToken;
266
- exports.registerToken = registerToken;
267
- exports.registerTransform = registerTransform;
268
- exports.resetGlobalRegistry = resetGlobalRegistry;
269
- exports.resolveTokenEngine = resolveTokenEngine;
270
- exports.use = use;
271
- //# sourceMappingURL=plugin.js.map
309
+ // Annotate the CommonJS export names for ESM import in node:
310
+ 0 && (module.exports = {
311
+ PluginManifestSchema,
312
+ TokenRegistrationSchema,
313
+ TransformRegistrationSchema,
314
+ TwPluginOptionsSchema,
315
+ applyHooks,
316
+ createGlobalPluginContext,
317
+ createPluginContext,
318
+ createPluginRegistry,
319
+ createTw,
320
+ createTwPlugin,
321
+ getGlobalRegistry,
322
+ getPluginHooks,
323
+ parsePluginManifest,
324
+ parseTokenRegistration,
325
+ parseTwPluginOptions,
326
+ presetScrollbar,
327
+ presetTokens,
328
+ presetVariants,
329
+ readToken,
330
+ registerPluginHooks,
331
+ registerToken,
332
+ registerTransform,
333
+ resetGlobalRegistry,
334
+ resolveTokenEngine,
335
+ use
336
+ });
272
337
  //# sourceMappingURL=plugin.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../packages/domain/plugin-api/src/schemas.ts","../packages/domain/plugin-api/src/index.ts","../packages/domain/plugin/src/index.ts"],"names":["z","config"],"mappings":"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","file":"plugin.js","sourcesContent":["import { z } from \"zod\"\n\nconst formatIssues = (error: z.ZodError): string =>\n error.issues\n .map((issue) => {\n const p = issue.path.length > 0 ? issue.path.join(\".\") : \"<root>\"\n return `${p}: ${issue.message}`\n })\n .join(\"; \")\n\nconst parseWithSchema = <T>(schema: z.ZodType<T>, data: unknown, label: string): T => {\n const parsed = schema.safeParse(data)\n if (parsed.success) return parsed.data\n throw new TypeError(`${label}: ${formatIssues(parsed.error)}`)\n}\n\nexport const DesignTokensSchema: z.ZodType<\n Record<string, string | number | Record<string, unknown>>\n> = z.record(z.string(), z.union([z.string(), z.number(), z.lazy(() => DesignTokensSchema)]))\n\nexport const TwClassResultSchema = z.object({\n css: z.string(),\n classes: z.array(z.string()),\n})\n\nexport const TwPluginOptionsSchema = z.object({\n classProcessor: z\n .function({ input: [z.array(z.string())], output: TwClassResultSchema })\n .optional(),\n tokens: DesignTokensSchema.optional(),\n debug: z.boolean().optional(),\n minify: z.boolean().optional(),\n})\n\nexport type TwPluginOptionsInput = z.infer<typeof TwPluginOptionsSchema>\n\nexport const PluginManifestSchema = z.object({\n name: z.string().min(1),\n setup: z.function({ input: [z.unknown()], output: z.unknown() }),\n})\n\nexport type PluginManifestInput = z.infer<typeof PluginManifestSchema>\n\nexport const TransformRegistrationSchema = z.function({ input: [z.unknown()], output: z.unknown() })\n\nexport const TokenRegistrationSchema = z.object({\n name: z.string().min(1),\n value: z.string(),\n})\n\nexport type TokenRegistrationInput = z.infer<typeof TokenRegistrationSchema>\n\nexport const parseTwPluginOptions = (options: unknown) =>\n parseWithSchema(TwPluginOptionsSchema, options ?? {}, \"plugin options are invalid\")\n\nexport const parsePluginManifest = (plugin: unknown) =>\n parseWithSchema(PluginManifestSchema, plugin, \"plugin manifest is invalid\")\n\nexport const parseTokenRegistration = (data: unknown) =>\n parseWithSchema(TokenRegistrationSchema, data, \"token registration is invalid\")\n\n// ── Enhanced plugin validation (dari monorepo checklist) ────────────────────\n\n/** Nama plugin harus mengikuti format npm package */\nexport const PluginNameSchema = z.string()\n .min(1, \"Plugin name cannot be empty\")\n .regex(\n /^(@[a-z0-9-]+\\/)?[a-z0-9][a-z0-9-]*[a-z0-9]$/,\n \"Plugin name must follow npm naming: lowercase, hyphens allowed, no leading/trailing hyphens\"\n )\n\n/** Versi semantic versioning */\nexport const SemverSchema = z.string()\n .regex(/^\\d+\\.\\d+\\.\\d+(-[a-z0-9.]+)?$/, \"Version must follow semver: x.y.z or x.y.z-prerelease\")\n\n/** Full plugin manifest dengan validasi nama dan versi */\nexport const FullPluginManifestSchema = PluginManifestSchema.extend({\n name: PluginNameSchema,\n version: SemverSchema.optional(),\n description: z.string().max(200).optional(),\n keywords: z.array(z.string()).max(10).optional(),\n})\n\nexport type FullPluginManifest = z.infer<typeof FullPluginManifestSchema>\n\n/** Validate full plugin manifest */\nexport const parseFullPluginManifest = (plugin: unknown): FullPluginManifest =>\n parseWithSchema(FullPluginManifestSchema, plugin, \"plugin manifest is invalid\")\n\n/** Validate plugin name only */\nexport const validatePluginName = (name: unknown): string =>\n parseWithSchema(PluginNameSchema, name, \"plugin name is invalid\")\n\n/** Zod validation for plugin registration payload */\nexport const PluginRegistrationPayloadSchema = z.object({\n plugin: FullPluginManifestSchema,\n config: z.record(z.string(), z.unknown()).optional(),\n priority: z.number().int().min(0).max(100).optional(),\n})\n\nexport type PluginRegistrationPayload = z.infer<typeof PluginRegistrationPayloadSchema>\n\nexport const parsePluginRegistrationPayload = (payload: unknown): PluginRegistrationPayload =>\n parseWithSchema(PluginRegistrationPayloadSchema, payload, \"plugin registration payload is invalid\")\n","import { parsePluginManifest, parseTokenRegistration, TransformRegistrationSchema } from \"./schemas\"\nimport type { CompoundCondition, TokenMap } from \"@tailwind-styled/shared\"\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 type { CompoundCondition, TokenMap }\n\nexport interface ComponentConfig {\n base: string\n variants: Record<string, Record<string, string>>\n compoundVariants: Array<{ class: string } & CompoundCondition>\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\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, unknown>\n}\n\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\nexport interface TokenEngineAPI {\n getToken?: (name: string) => string | undefined\n getTokens?: () => Record<string, string> | undefined\n subscribeTokens?: (callback: (tokens: Record<string, string>) => void) => () => void\n subscribe?: (callback: (tokens: Record<string, string>) => void) => () => void\n}\n\nconst TOKEN_ENGINE_KEY = \"__TW_TOKEN_ENGINE__\"\n\nexport function resolveTokenEngine(): TokenEngineAPI | undefined {\n const engine = (globalThis as Record<string, unknown>)[TOKEN_ENGINE_KEY]\n if (engine && typeof engine === \"object\") {\n return engine as TokenEngineAPI\n }\n return undefined\n}\n\nexport function readToken(engine: TokenEngineAPI | undefined, 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\nexport interface TransformContext {\n filename?: string\n componentName?: string\n tag?: string\n}\n\nexport interface TwGlobalRegistry {\n transforms: Array<(config: ComponentConfig, ctx: TransformContext) => ComponentConfig>\n tokens: Record<string, string>\n variants: Map<string, VariantResolver>\n}\n\nconst transformRegistry: TwGlobalRegistry = {\n transforms: [],\n tokens: {},\n variants: new Map(),\n}\n\nconst normalizeTokenName = (name: string): string =>\n name.replace(/[^a-zA-Z0-9-]/g, \"-\").toLowerCase()\n\nexport function getGlobalRegistry(): TwGlobalRegistry {\n return transformRegistry\n}\n\nexport function registerTransform(\n transform: (config: ComponentConfig, ctx: TransformContext) => ComponentConfig\n): void {\n TransformRegistrationSchema.parse(transform)\n transformRegistry.transforms.push(transform)\n}\n\nexport function registerToken(name: string, value: string): void {\n const parsed = parseTokenRegistration({ name, value })\n transformRegistry.tokens[parsed.name] = parsed.value\n}\n\nexport function createPluginRegistry(): 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\nconst legacyState = { globalRegistry: createPluginRegistry() }\n\nexport function resetGlobalRegistry(): void {\n transformRegistry.transforms.length = 0\n transformRegistry.variants.clear()\n for (const key of Object.keys(transformRegistry.tokens)) {\n delete transformRegistry.tokens[key]\n }\n legacyState.globalRegistry = createPluginRegistry()\n}\n\nexport function createPluginContext(\n registry: PluginRegistry,\n config: Record<string, unknown> = {}\n): TwContext {\n const isLegacyRegistry = registry === legacyState.globalRegistry\n\n return {\n config,\n addVariant(name, resolver) {\n registry.variants.set(name, resolver)\n if (isLegacyRegistry) {\n transformRegistry.variants.set(name, resolver)\n }\n },\n addUtility(name, styles) {\n registry.utilities.set(name, styles)\n },\n addToken(name, value) {\n const parsed = parseTokenRegistration({ name, value })\n const normalized = normalizeTokenName(parsed.name)\n registry.tokens.set(normalized, parsed.value)\n if (isLegacyRegistry) {\n transformRegistry.tokens[normalized] = parsed.value\n }\n },\n addTransform(fn) {\n TransformRegistrationSchema.parse(fn)\n registry.transforms.push(fn)\n if (isLegacyRegistry) {\n transformRegistry.transforms.push((config, ctx) =>\n fn(config, {\n componentName: ctx.componentName ?? \"\",\n tag: ctx.tag ?? \"\",\n })\n )\n }\n },\n onGenerateCSS(hook) {\n registry.cssHooks.push(hook)\n },\n onBuildEnd(hook) {\n registry.buildHooks.push(hook)\n },\n getToken(name) {\n const normalized = normalizeTokenName(name)\n // Check local registry first (populated by addToken), then fallback to token engine\n const local = registry.tokens.get(normalized)\n if (local !== undefined) return local\n return readToken(resolveTokenEngine(), normalized)\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\nexport function createTw(config: Record<string, unknown> = {}): 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 = createPluginRegistry()\n const ctx = createPluginContext(registry, config)\n\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\n result.registry = {\n plugins: registry.plugins,\n variants: registry.variants,\n utilities: registry.utilities,\n tokens: registry.tokens,\n }\n\n result.use = (plugin: TwPlugin) => {\n const manifest = parsePluginManifest(plugin)\n manifest.setup(ctx)\n registry.plugins.add(manifest.name)\n }\n\n if (config.plugins && Array.isArray(config.plugins)) {\n for (const plugin of config.plugins) {\n result.use(parsePluginManifest(plugin))\n }\n }\n\n return result\n}\n\n/**\n * Creates a TwContext that writes through to the global (legacy) registry.\n * Used by createTwPlugin() in the plugin package.\n */\nexport function createGlobalPluginContext(config: Record<string, unknown> = {}): TwContext {\n return createPluginContext(legacyState.globalRegistry, config)\n}\n\nexport function use(plugin: TwPlugin): void {\n const ctx = createPluginContext(legacyState.globalRegistry)\n parsePluginManifest(plugin).setup(ctx)\n}\n\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\n// Re-export schemas\nexport {\n type PluginManifestInput,\n PluginManifestSchema,\n parsePluginManifest,\n parseTokenRegistration,\n parseTwPluginOptions,\n type TokenRegistrationInput,\n TokenRegistrationSchema,\n TransformRegistrationSchema,\n type TwPluginOptionsInput,\n TwPluginOptionsSchema,\n} from \"./schemas\"","import type { TwPluginOptions, TwContext } from \"@tailwind-styled/plugin-api\"\n\nimport { createGlobalPluginContext, parseTwPluginOptions } from \"@tailwind-styled/plugin-api\"\nimport type { LoadResult, PartialResolvedId, PluginContext, TransformResult } from \"rollup\"\n\n// Type-only re-exports — emitted as `export type { }` so Turbopack ESM tracing\n// does not try to resolve them as runtime exports from plugin-api.mjs\nexport type {\n TwClassResult,\n DesignTokens,\n TwPluginOptions,\n VariantResolver,\n UtilityDefinition,\n ComponentConfig,\n TransformMeta,\n TransformFn,\n CssHook,\n TwContext,\n TwPlugin,\n PluginRegistry,\n TokenEngineAPI,\n TransformContext,\n TwGlobalRegistry,\n CompoundCondition,\n TokenMap,\n PluginManifestInput,\n TokenRegistrationInput,\n TwPluginOptionsInput,\n} from \"@tailwind-styled/plugin-api\"\n\n// Runtime value re-exports\nexport {\n resolveTokenEngine,\n readToken,\n getGlobalRegistry,\n registerTransform,\n registerToken,\n createPluginRegistry,\n resetGlobalRegistry,\n createPluginContext,\n createTw,\n createGlobalPluginContext,\n use,\n presetTokens,\n presetVariants,\n presetScrollbar,\n PluginManifestSchema,\n parsePluginManifest,\n parseTokenRegistration,\n parseTwPluginOptions,\n TokenRegistrationSchema,\n TransformRegistrationSchema,\n TwPluginOptionsSchema,\n} from \"@tailwind-styled/plugin-api\"\n\nexport interface TwVitePlugin extends TwContext {\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}\n\nexport function createTwPlugin(options: TwPluginOptions = {}): TwVitePlugin {\n parseTwPluginOptions(options)\n\n const ctx = createGlobalPluginContext(options as Record<string, unknown>)\n\n return {\n ...ctx,\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 }\n}"]}
1
+ {"version":3,"sources":["../src/umbrella/plugin.ts","../packages/domain/plugin-api/src/schemas.ts","../packages/domain/plugin-api/src/index.ts","../packages/domain/plugin/src/hooks.ts","../packages/domain/plugin/src/index.ts"],"sourcesContent":["// Type-only exports — Turbopack ESM tracing tidak akan resolve ini sebagai runtime\nexport type {\n TwVitePlugin,\n TwClassResult,\n DesignTokens,\n TwPluginOptions,\n VariantResolver,\n UtilityDefinition,\n ComponentConfig,\n TransformMeta,\n TransformFn,\n CssHook,\n TwContext,\n TwPlugin,\n PluginRegistry,\n TokenEngineAPI,\n TransformContext,\n TwGlobalRegistry,\n PluginManifestInput,\n TokenRegistrationInput,\n TwPluginOptionsInput,\n PluginHookContext,\n PluginHook,\n PluginHooks,\n} from \"@tailwind-styled/plugin\"\n\nexport type {\n CompoundCondition,\n TokenMap,\n} from \"@tailwind-styled/plugin-api\"\n\n// Runtime value exports\nexport {\n createTwPlugin,\n resolveTokenEngine,\n readToken,\n getGlobalRegistry,\n registerTransform,\n registerToken,\n createPluginRegistry,\n resetGlobalRegistry,\n createPluginContext,\n createTw,\n createGlobalPluginContext,\n use,\n presetTokens,\n presetVariants,\n presetScrollbar,\n PluginManifestSchema,\n parsePluginManifest,\n parseTokenRegistration,\n parseTwPluginOptions,\n TokenRegistrationSchema,\n TransformRegistrationSchema,\n TwPluginOptionsSchema,\n applyHooks,\n getPluginHooks,\n registerPluginHooks,\n} from \"@tailwind-styled/plugin\"\n","import { z } from \"zod\"\n\nconst formatIssues = (error: z.ZodError): string =>\n error.issues\n .map((issue) => {\n const p = issue.path.length > 0 ? issue.path.join(\".\") : \"<root>\"\n return `${p}: ${issue.message}`\n })\n .join(\"; \")\n\nconst parseWithSchema = <T>(schema: z.ZodType<T>, data: unknown, label: string): T => {\n const parsed = schema.safeParse(data)\n if (parsed.success) return parsed.data\n throw new TypeError(`${label}: ${formatIssues(parsed.error)}`)\n}\n\nexport const DesignTokensSchema: z.ZodType<\n Record<string, string | number | Record<string, unknown>>\n> = z.record(z.string(), z.union([z.string(), z.number(), z.lazy(() => DesignTokensSchema)]))\n\nexport const TwClassResultSchema = z.object({\n css: z.string(),\n classes: z.array(z.string()),\n})\n\nexport const TwPluginOptionsSchema = z.object({\n classProcessor: z\n .function({ input: [z.array(z.string())], output: TwClassResultSchema })\n .optional(),\n tokens: DesignTokensSchema.optional(),\n debug: z.boolean().optional(),\n minify: z.boolean().optional(),\n})\n\nexport type TwPluginOptionsInput = z.infer<typeof TwPluginOptionsSchema>\n\nexport const PluginManifestSchema = z.object({\n name: z.string().min(1),\n setup: z.function({ input: [z.unknown()], output: z.unknown() }),\n})\n\nexport type PluginManifestInput = z.infer<typeof PluginManifestSchema>\n\nexport const TransformRegistrationSchema = z.function({ input: [z.unknown()], output: z.unknown() })\n\nexport const TokenRegistrationSchema = z.object({\n name: z.string().min(1),\n value: z.string(),\n})\n\nexport type TokenRegistrationInput = z.infer<typeof TokenRegistrationSchema>\n\nexport const parseTwPluginOptions = (options: unknown) =>\n parseWithSchema(TwPluginOptionsSchema, options ?? {}, \"plugin options are invalid\")\n\nexport const parsePluginManifest = (plugin: unknown) =>\n parseWithSchema(PluginManifestSchema, plugin, \"plugin manifest is invalid\")\n\nexport const parseTokenRegistration = (data: unknown) =>\n parseWithSchema(TokenRegistrationSchema, data, \"token registration is invalid\")\n\n// ── Enhanced plugin validation (dari monorepo checklist) ────────────────────\n\n/** Nama plugin harus mengikuti format npm package */\nexport const PluginNameSchema = z.string()\n .min(1, \"Plugin name cannot be empty\")\n .regex(\n /^(@[a-z0-9-]+\\/)?[a-z0-9][a-z0-9-]*[a-z0-9]$/,\n \"Plugin name must follow npm naming: lowercase, hyphens allowed, no leading/trailing hyphens\"\n )\n\n/** Versi semantic versioning */\nexport const SemverSchema = z.string()\n .regex(/^\\d+\\.\\d+\\.\\d+(-[a-z0-9.]+)?$/, \"Version must follow semver: x.y.z or x.y.z-prerelease\")\n\n/** Full plugin manifest dengan validasi nama dan versi */\nexport const FullPluginManifestSchema = PluginManifestSchema.extend({\n name: PluginNameSchema,\n version: SemverSchema.optional(),\n description: z.string().max(200).optional(),\n keywords: z.array(z.string()).max(10).optional(),\n})\n\nexport type FullPluginManifest = z.infer<typeof FullPluginManifestSchema>\n\n/** Validate full plugin manifest */\nexport const parseFullPluginManifest = (plugin: unknown): FullPluginManifest =>\n parseWithSchema(FullPluginManifestSchema, plugin, \"plugin manifest is invalid\")\n\n/** Validate plugin name only */\nexport const validatePluginName = (name: unknown): string =>\n parseWithSchema(PluginNameSchema, name, \"plugin name is invalid\")\n\n/** Zod validation for plugin registration payload */\nexport const PluginRegistrationPayloadSchema = z.object({\n plugin: FullPluginManifestSchema,\n config: z.record(z.string(), z.unknown()).optional(),\n priority: z.number().int().min(0).max(100).optional(),\n})\n\nexport type PluginRegistrationPayload = z.infer<typeof PluginRegistrationPayloadSchema>\n\nexport const parsePluginRegistrationPayload = (payload: unknown): PluginRegistrationPayload =>\n parseWithSchema(PluginRegistrationPayloadSchema, payload, \"plugin registration payload is invalid\")\n","import { parsePluginManifest, parseTokenRegistration, TransformRegistrationSchema } from \"./schemas\"\nimport type { CompoundCondition, TokenMap } from \"@tailwind-styled/shared\"\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 type { CompoundCondition, TokenMap }\n\nexport interface ComponentConfig {\n base: string\n variants: Record<string, Record<string, string>>\n compoundVariants: Array<{ class: string } & CompoundCondition>\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\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, unknown>\n}\n\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\nexport interface TokenEngineAPI {\n getToken?: (name: string) => string | undefined\n getTokens?: () => Record<string, string> | undefined\n subscribeTokens?: (callback: (tokens: Record<string, string>) => void) => () => void\n subscribe?: (callback: (tokens: Record<string, string>) => void) => () => void\n}\n\nconst TOKEN_ENGINE_KEY = \"__TW_TOKEN_ENGINE__\"\n\nexport function resolveTokenEngine(): TokenEngineAPI | undefined {\n const engine = (globalThis as Record<string, unknown>)[TOKEN_ENGINE_KEY]\n if (engine && typeof engine === \"object\") {\n return engine as TokenEngineAPI\n }\n return undefined\n}\n\nexport function readToken(engine: TokenEngineAPI | undefined, 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\nexport interface TransformContext {\n filename?: string\n componentName?: string\n tag?: string\n}\n\nexport interface TwGlobalRegistry {\n transforms: Array<(config: ComponentConfig, ctx: TransformContext) => ComponentConfig>\n tokens: Record<string, string>\n variants: Map<string, VariantResolver>\n}\n\nconst transformRegistry: TwGlobalRegistry = {\n transforms: [],\n tokens: {},\n variants: new Map(),\n}\n\nconst normalizeTokenName = (name: string): string =>\n name.replace(/[^a-zA-Z0-9-]/g, \"-\").toLowerCase()\n\nexport function getGlobalRegistry(): TwGlobalRegistry {\n return transformRegistry\n}\n\nexport function registerTransform(\n transform: (config: ComponentConfig, ctx: TransformContext) => ComponentConfig\n): void {\n TransformRegistrationSchema.parse(transform)\n transformRegistry.transforms.push(transform)\n}\n\nexport function registerToken(name: string, value: string): void {\n const parsed = parseTokenRegistration({ name, value })\n transformRegistry.tokens[parsed.name] = parsed.value\n}\n\nexport function createPluginRegistry(): 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\nconst legacyState = { globalRegistry: createPluginRegistry() }\n\nexport function resetGlobalRegistry(): void {\n transformRegistry.transforms.length = 0\n transformRegistry.variants.clear()\n for (const key of Object.keys(transformRegistry.tokens)) {\n delete transformRegistry.tokens[key]\n }\n legacyState.globalRegistry = createPluginRegistry()\n}\n\nexport function createPluginContext(\n registry: PluginRegistry,\n config: Record<string, unknown> = {}\n): TwContext {\n const isLegacyRegistry = registry === legacyState.globalRegistry\n\n return {\n config,\n addVariant(name, resolver) {\n registry.variants.set(name, resolver)\n if (isLegacyRegistry) {\n transformRegistry.variants.set(name, resolver)\n }\n },\n addUtility(name, styles) {\n registry.utilities.set(name, styles)\n },\n addToken(name, value) {\n const parsed = parseTokenRegistration({ name, value })\n const normalized = normalizeTokenName(parsed.name)\n registry.tokens.set(normalized, parsed.value)\n if (isLegacyRegistry) {\n transformRegistry.tokens[normalized] = parsed.value\n }\n },\n addTransform(fn) {\n TransformRegistrationSchema.parse(fn)\n registry.transforms.push(fn)\n if (isLegacyRegistry) {\n transformRegistry.transforms.push((config, ctx) =>\n fn(config, {\n componentName: ctx.componentName ?? \"\",\n tag: ctx.tag ?? \"\",\n })\n )\n }\n },\n onGenerateCSS(hook) {\n registry.cssHooks.push(hook)\n },\n onBuildEnd(hook) {\n registry.buildHooks.push(hook)\n },\n getToken(name) {\n const normalized = normalizeTokenName(name)\n // Check local registry first (populated by addToken), then fallback to token engine\n const local = registry.tokens.get(normalized)\n if (local !== undefined) return local\n return readToken(resolveTokenEngine(), normalized)\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\nexport function createTw(config: Record<string, unknown> = {}): 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 = createPluginRegistry()\n const ctx = createPluginContext(registry, config)\n\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\n result.registry = {\n plugins: registry.plugins,\n variants: registry.variants,\n utilities: registry.utilities,\n tokens: registry.tokens,\n }\n\n result.use = (plugin: TwPlugin) => {\n const manifest = parsePluginManifest(plugin)\n manifest.setup(ctx)\n registry.plugins.add(manifest.name)\n }\n\n if (config.plugins && Array.isArray(config.plugins)) {\n for (const plugin of config.plugins) {\n result.use(parsePluginManifest(plugin))\n }\n }\n\n return result\n}\n\n/**\n * Creates a TwContext that writes through to the global (legacy) registry.\n * Used by createTwPlugin() in the plugin package.\n */\nexport function createGlobalPluginContext(config: Record<string, unknown> = {}): TwContext {\n return createPluginContext(legacyState.globalRegistry, config)\n}\n\nexport function use(plugin: TwPlugin): void {\n const ctx = createPluginContext(legacyState.globalRegistry)\n parsePluginManifest(plugin).setup(ctx)\n}\n\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\n// Re-export schemas\nexport {\n type PluginManifestInput,\n PluginManifestSchema,\n parsePluginManifest,\n parseTokenRegistration,\n parseTwPluginOptions,\n type TokenRegistrationInput,\n TokenRegistrationSchema,\n TransformRegistrationSchema,\n type TwPluginOptionsInput,\n TwPluginOptionsSchema,\n} from \"./schemas\"","/**\n * Plugin hooks for tailwind-styled-v4\n * \n * Hooks allow plugins to intercept and modify the CSS generation pipeline.\n */\n\nexport interface PluginHookContext {\n source: string\n filename: string\n extractedConfigs?: unknown[]\n cssOutput?: string\n}\n\nexport type PluginHook = (ctx: PluginHookContext) => PluginHookContext | Promise<PluginHookContext>\n\nexport interface PluginHooks {\n beforeExtract?: PluginHook\n afterExtract?: PluginHook\n beforeGenerate?: PluginHook\n afterGenerate?: PluginHook\n}\n\n// Global hook registry\nlet registeredHooks: PluginHooks = {}\n\nexport function registerPluginHooks(hooks: PluginHooks): void {\n registeredHooks = { ...registeredHooks, ...hooks }\n}\n\nexport function getPluginHooks(): PluginHooks {\n return registeredHooks\n}\n\n// Wrapper functions that apply hooks\nexport async function applyHooks(\n hookName: keyof PluginHooks,\n ctx: PluginHookContext\n): Promise<PluginHookContext> {\n const hook = registeredHooks[hookName]\n if (!hook) return ctx\n return hook(ctx)\n}","import type { TwPluginOptions, TwContext } from \"@tailwind-styled/plugin-api\"\n\nimport { createGlobalPluginContext, parseTwPluginOptions } from \"@tailwind-styled/plugin-api\"\nimport type { LoadResult, PartialResolvedId, PluginContext, TransformResult } from \"rollup\"\n\n// Type-only re-exports — emitted as `export type { }` so Turbopack ESM tracing\n// does not try to resolve them as runtime exports from plugin-api.mjs\nexport type {\n TwClassResult,\n DesignTokens,\n TwPluginOptions,\n VariantResolver,\n UtilityDefinition,\n ComponentConfig,\n TransformMeta,\n TransformFn,\n CssHook,\n TwContext,\n TwPlugin,\n PluginRegistry,\n TokenEngineAPI,\n TransformContext,\n TwGlobalRegistry,\n CompoundCondition,\n TokenMap,\n PluginManifestInput,\n TokenRegistrationInput,\n TwPluginOptionsInput,\n} from \"@tailwind-styled/plugin-api\"\n\n// Runtime value re-exports\nexport {\n resolveTokenEngine,\n readToken,\n getGlobalRegistry,\n registerTransform,\n registerToken,\n createPluginRegistry,\n resetGlobalRegistry,\n createPluginContext,\n createTw,\n createGlobalPluginContext,\n use,\n presetTokens,\n presetVariants,\n presetScrollbar,\n PluginManifestSchema,\n parsePluginManifest,\n parseTokenRegistration,\n parseTwPluginOptions,\n TokenRegistrationSchema,\n TransformRegistrationSchema,\n TwPluginOptionsSchema,\n} from \"@tailwind-styled/plugin-api\"\n\nexport {\n applyHooks,\n getPluginHooks,\n registerPluginHooks,\n type PluginHookContext,\n type PluginHook,\n type PluginHooks,\n} from \"./hooks\"\n\nexport interface TwVitePlugin extends TwContext {\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}\n\nexport function createTwPlugin(options: TwPluginOptions = {}): TwVitePlugin {\n parseTwPluginOptions(options)\n\n const ctx = createGlobalPluginContext(options as Record<string, unknown>)\n\n return {\n ...ctx,\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 }\n}"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,iBAAkB;AAElB,IAAM,eAAe,CAAC,UACpB,MAAM,OACH,IAAI,CAAC,UAAU;AACd,QAAM,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,KAAK,GAAG,IAAI;AACzD,SAAO,GAAG,CAAC,KAAK,MAAM,OAAO;AAC/B,CAAC,EACA,KAAK,IAAI;AAEd,IAAM,kBAAkB,CAAI,QAAsB,MAAe,UAAqB;AACpF,QAAM,SAAS,OAAO,UAAU,IAAI;AACpC,MAAI,OAAO,QAAS,QAAO,OAAO;AAClC,QAAM,IAAI,UAAU,GAAG,KAAK,KAAK,aAAa,OAAO,KAAK,CAAC,EAAE;AAC/D;AAEO,IAAM,qBAET,aAAE,OAAO,aAAE,OAAO,GAAG,aAAE,MAAM,CAAC,aAAE,OAAO,GAAG,aAAE,OAAO,GAAG,aAAE,KAAK,MAAM,kBAAkB,CAAC,CAAC,CAAC;AAErF,IAAM,sBAAsB,aAAE,OAAO;AAAA,EAC1C,KAAK,aAAE,OAAO;AAAA,EACd,SAAS,aAAE,MAAM,aAAE,OAAO,CAAC;AAC7B,CAAC;AAEM,IAAM,wBAAwB,aAAE,OAAO;AAAA,EAC5C,gBAAgB,aACb,SAAS,EAAE,OAAO,CAAC,aAAE,MAAM,aAAE,OAAO,CAAC,CAAC,GAAG,QAAQ,oBAAoB,CAAC,EACtE,SAAS;AAAA,EACZ,QAAQ,mBAAmB,SAAS;AAAA,EACpC,OAAO,aAAE,QAAQ,EAAE,SAAS;AAAA,EAC5B,QAAQ,aAAE,QAAQ,EAAE,SAAS;AAC/B,CAAC;AAIM,IAAM,uBAAuB,aAAE,OAAO;AAAA,EAC3C,MAAM,aAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EACtB,OAAO,aAAE,SAAS,EAAE,OAAO,CAAC,aAAE,QAAQ,CAAC,GAAG,QAAQ,aAAE,QAAQ,EAAE,CAAC;AACjE,CAAC;AAIM,IAAM,8BAA8B,aAAE,SAAS,EAAE,OAAO,CAAC,aAAE,QAAQ,CAAC,GAAG,QAAQ,aAAE,QAAQ,EAAE,CAAC;AAE5F,IAAM,0BAA0B,aAAE,OAAO;AAAA,EAC9C,MAAM,aAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EACtB,OAAO,aAAE,OAAO;AAClB,CAAC;AAIM,IAAM,uBAAuB,CAAC,YACnC,gBAAgB,uBAAuB,WAAW,CAAC,GAAG,4BAA4B;AAE7E,IAAM,sBAAsB,CAAC,WAClC,gBAAgB,sBAAsB,QAAQ,4BAA4B;AAErE,IAAM,yBAAyB,CAAC,SACrC,gBAAgB,yBAAyB,MAAM,+BAA+B;AAKzE,IAAM,mBAAmB,aAAE,OAAO,EACtC,IAAI,GAAG,6BAA6B,EACpC;AAAA,EACC;AAAA,EACA;AACF;AAGK,IAAM,eAAe,aAAE,OAAO,EAClC,MAAM,iCAAiC,uDAAuD;AAG1F,IAAM,2BAA2B,qBAAqB,OAAO;AAAA,EAClE,MAAM;AAAA,EACN,SAAS,aAAa,SAAS;AAAA,EAC/B,aAAa,aAAE,OAAO,EAAE,IAAI,GAAG,EAAE,SAAS;AAAA,EAC1C,UAAU,aAAE,MAAM,aAAE,OAAO,CAAC,EAAE,IAAI,EAAE,EAAE,SAAS;AACjD,CAAC;AAaM,IAAM,kCAAkC,aAAE,OAAO;AAAA,EACtD,QAAQ;AAAA,EACR,QAAQ,aAAE,OAAO,aAAE,OAAO,GAAG,aAAE,QAAQ,CAAC,EAAE,SAAS;AAAA,EACnD,UAAU,aAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,EAAE,SAAS;AACtD,CAAC;;;ACrBD,IAAM,mBAAmB;AAElB,SAAS,qBAAiD;AAC/D,QAAM,SAAU,WAAuC,gBAAgB;AACvE,MAAI,UAAU,OAAO,WAAW,UAAU;AACxC,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAEO,SAAS,UAAU,QAAoC,MAAkC;AAC9F,MAAI,CAAC,OAAQ,QAAO;AACpB,MAAI,OAAO,OAAO,aAAa,WAAY,QAAO,OAAO,SAAS,IAAI;AACtE,MAAI,OAAO,OAAO,cAAc,YAAY;AAC1C,UAAM,SAAS,OAAO,UAAU;AAChC,WAAO,SAAS,IAAI;AAAA,EACtB;AACA,SAAO;AACT;AAcA,IAAM,oBAAsC;AAAA,EAC1C,YAAY,CAAC;AAAA,EACb,QAAQ,CAAC;AAAA,EACT,UAAU,oBAAI,IAAI;AACpB;AAEA,IAAM,qBAAqB,CAAC,SAC1B,KAAK,QAAQ,kBAAkB,GAAG,EAAE,YAAY;AAE3C,SAAS,oBAAsC;AACpD,SAAO;AACT;AAEO,SAAS,kBACd,WACM;AACN,8BAA4B,MAAM,SAAS;AAC3C,oBAAkB,WAAW,KAAK,SAAS;AAC7C;AAEO,SAAS,cAAc,MAAc,OAAqB;AAC/D,QAAM,SAAS,uBAAuB,EAAE,MAAM,MAAM,CAAC;AACrD,oBAAkB,OAAO,OAAO,IAAI,IAAI,OAAO;AACjD;AAEO,SAAS,uBAAuC;AACrD,SAAO;AAAA,IACL,UAAU,oBAAI,IAAI;AAAA,IAClB,WAAW,oBAAI,IAAI;AAAA,IACnB,QAAQ,oBAAI,IAAI;AAAA,IAChB,YAAY,CAAC;AAAA,IACb,UAAU,CAAC;AAAA,IACX,YAAY,CAAC;AAAA,IACb,SAAS,oBAAI,IAAI;AAAA,EACnB;AACF;AAEA,IAAM,cAAc,EAAE,gBAAgB,qBAAqB,EAAE;AAEtD,SAAS,sBAA4B;AAC1C,oBAAkB,WAAW,SAAS;AACtC,oBAAkB,SAAS,MAAM;AACjC,aAAW,OAAO,OAAO,KAAK,kBAAkB,MAAM,GAAG;AACvD,WAAO,kBAAkB,OAAO,GAAG;AAAA,EACrC;AACA,cAAY,iBAAiB,qBAAqB;AACpD;AAEO,SAAS,oBACd,UACA,SAAkC,CAAC,GACxB;AACX,QAAM,mBAAmB,aAAa,YAAY;AAElD,SAAO;AAAA,IACL;AAAA,IACA,WAAW,MAAM,UAAU;AACzB,eAAS,SAAS,IAAI,MAAM,QAAQ;AACpC,UAAI,kBAAkB;AACpB,0BAAkB,SAAS,IAAI,MAAM,QAAQ;AAAA,MAC/C;AAAA,IACF;AAAA,IACA,WAAW,MAAM,QAAQ;AACvB,eAAS,UAAU,IAAI,MAAM,MAAM;AAAA,IACrC;AAAA,IACA,SAAS,MAAM,OAAO;AACpB,YAAM,SAAS,uBAAuB,EAAE,MAAM,MAAM,CAAC;AACrD,YAAM,aAAa,mBAAmB,OAAO,IAAI;AACjD,eAAS,OAAO,IAAI,YAAY,OAAO,KAAK;AAC5C,UAAI,kBAAkB;AACpB,0BAAkB,OAAO,UAAU,IAAI,OAAO;AAAA,MAChD;AAAA,IACF;AAAA,IACA,aAAa,IAAI;AACf,kCAA4B,MAAM,EAAE;AACpC,eAAS,WAAW,KAAK,EAAE;AAC3B,UAAI,kBAAkB;AACpB,0BAAkB,WAAW;AAAA,UAAK,CAACA,SAAQ,QACzC,GAAGA,SAAQ;AAAA,YACT,eAAe,IAAI,iBAAiB;AAAA,YACpC,KAAK,IAAI,OAAO;AAAA,UAClB,CAAC;AAAA,QACH;AAAA,MACF;AAAA,IACF;AAAA,IACA,cAAc,MAAM;AAClB,eAAS,SAAS,KAAK,IAAI;AAAA,IAC7B;AAAA,IACA,WAAW,MAAM;AACf,eAAS,WAAW,KAAK,IAAI;AAAA,IAC/B;AAAA,IACA,SAAS,MAAM;AACb,YAAM,aAAa,mBAAmB,IAAI;AAE1C,YAAM,QAAQ,SAAS,OAAO,IAAI,UAAU;AAC5C,UAAI,UAAU,OAAW,QAAO;AAChC,aAAO,UAAU,mBAAmB,GAAG,UAAU;AAAA,IACnD;AAAA,IACA,gBAAgB,UAAU;AACxB,YAAM,SAAS,mBAAmB;AAClC,UAAI,CAAC,OAAQ,QAAO,MAAM;AAAA,MAAC;AAC3B,UAAI,OAAO,OAAO,oBAAoB,WAAY,QAAO,OAAO,gBAAgB,QAAQ;AACxF,UAAI,OAAO,OAAO,cAAc,WAAY,QAAO,OAAO,UAAU,QAAQ;AAC5E,aAAO,MAAM;AAAA,MAAC;AAAA,IAChB;AAAA,EACF;AACF;AAEO,SAAS,SAAS,SAAkC,CAAC,GAQ1D;AACA,QAAM,WAAW,qBAAqB;AACtC,QAAM,MAAM,oBAAoB,UAAU,MAAM;AAEhD,QAAM,SAAS;AAUf,SAAO,WAAW;AAAA,IAChB,SAAS,SAAS;AAAA,IAClB,UAAU,SAAS;AAAA,IACnB,WAAW,SAAS;AAAA,IACpB,QAAQ,SAAS;AAAA,EACnB;AAEA,SAAO,MAAM,CAAC,WAAqB;AACjC,UAAM,WAAW,oBAAoB,MAAM;AAC3C,aAAS,MAAM,GAAG;AAClB,aAAS,QAAQ,IAAI,SAAS,IAAI;AAAA,EACpC;AAEA,MAAI,OAAO,WAAW,MAAM,QAAQ,OAAO,OAAO,GAAG;AACnD,eAAW,UAAU,OAAO,SAAS;AACnC,aAAO,IAAI,oBAAoB,MAAM,CAAC;AAAA,IACxC;AAAA,EACF;AAEA,SAAO;AACT;AAMO,SAAS,0BAA0B,SAAkC,CAAC,GAAc;AACzF,SAAO,oBAAoB,YAAY,gBAAgB,MAAM;AAC/D;AAEO,SAAS,IAAI,QAAwB;AAC1C,QAAM,MAAM,oBAAoB,YAAY,cAAc;AAC1D,sBAAoB,MAAM,EAAE,MAAM,GAAG;AACvC;AAEO,SAAS,aAAa,QAA0C;AACrE,SAAO;AAAA,IACL,MAAM;AAAA,IACN,MAAM,KAAK;AACT,iBAAW,CAAC,MAAM,KAAK,KAAK,OAAO,QAAQ,MAAM,GAAG;AAClD,YAAI,SAAS,MAAM,KAAK;AAAA,MAC1B;AAAA,IACF;AAAA,EACF;AACF;AAEO,SAAS,eAAe,UAAqD;AAClF,SAAO;AAAA,IACL,MAAM;AAAA,IACN,MAAM,KAAK;AACT,iBAAW,CAAC,MAAM,QAAQ,KAAK,OAAO,QAAQ,QAAQ,GAAG;AACvD,YAAI,WAAW,MAAM,QAAQ;AAAA,MAC/B;AAAA,IACF;AAAA,EACF;AACF;AAEO,SAAS,kBAA4B;AAC1C,SAAO;AAAA,IACL,MAAM;AAAA,IACN,MAAM,KAAK;AACT,UAAI,WAAW,kBAAkB,MAAM,2CAA2C;AAClF,UAAI,WAAW,kBAAkB,MAAM,mCAAmC;AAC1E,UAAI,WAAW,kBAAkB,EAAE,sBAAsB,QAAQ,mBAAmB,OAAO,CAAC;AAAA,IAC9F;AAAA,EACF;AACF;;;AC1RA,IAAI,kBAA+B,CAAC;AAE7B,SAAS,oBAAoB,OAA0B;AAC5D,oBAAkB,EAAE,GAAG,iBAAiB,GAAG,MAAM;AACnD;AAEO,SAAS,iBAA8B;AAC5C,SAAO;AACT;AAGA,eAAsB,WACpB,UACA,KAC4B;AAC5B,QAAM,OAAO,gBAAgB,QAAQ;AACrC,MAAI,CAAC,KAAM,QAAO;AAClB,SAAO,KAAK,GAAG;AACjB;;;ACiCO,SAAS,eAAe,UAA2B,CAAC,GAAiB;AAC1E,uBAAqB,OAAO;AAE5B,QAAM,MAAM,0BAA0B,OAAkC;AAExE,SAAO;AAAA,IACL,GAAG;AAAA,IACH,MAAM,UAAU,QAAQ,UAAU;AAChC,UAAI,CAAC,OAAO,WAAW,KAAK,KAAK,CAAC,OAAO,WAAW,KAAK,EAAG,QAAO;AACnE,YAAM,aAAa,OAAO,QAAQ,WAAW,EAAE;AAC/C,YAAM,WAAW,MAAM,KAAK,QAAQ,YAAY,UAAU,EAAE,UAAU,KAAK,CAAC;AAC5E,UAAI,SAAU,QAAO,EAAE,IAAI,SAAS,GAAG;AACvC,aAAO;AAAA,IACT;AAAA,IACA,MAAM,KAAK,KAAK;AACd,aAAO;AAAA,IACT;AAAA,IACA,MAAM,UAAU,OAAO,KAAK;AAC1B,aAAO;AAAA,IACT;AAAA,EACF;AACF;","names":["config"]}
package/dist/plugin.mjs CHANGED
@@ -1,7 +1,7 @@
1
- import { z } from 'zod';
2
-
3
1
  /* tailwind-styled-v4 v5.0.4 | MIT | https://github.com/dictionar32/tailwind-styled-v4 */
4
2
 
3
+ // packages/domain/plugin-api/src/schemas.ts
4
+ import { z } from "zod";
5
5
  var formatIssues = (error) => error.issues.map((issue) => {
6
6
  const p = issue.path.length > 0 ? issue.path.join(".") : "<root>";
7
7
  return `${p}: ${issue.message}`;
@@ -45,7 +45,7 @@ var FullPluginManifestSchema = PluginManifestSchema.extend({
45
45
  description: z.string().max(200).optional(),
46
46
  keywords: z.array(z.string()).max(10).optional()
47
47
  });
48
- z.object({
48
+ var PluginRegistrationPayloadSchema = z.object({
49
49
  plugin: FullPluginManifestSchema,
50
50
  config: z.record(z.string(), z.unknown()).optional(),
51
51
  priority: z.number().int().min(0).max(100).optional()
@@ -222,6 +222,20 @@ function presetScrollbar() {
222
222
  };
223
223
  }
224
224
 
225
+ // packages/domain/plugin/src/hooks.ts
226
+ var registeredHooks = {};
227
+ function registerPluginHooks(hooks) {
228
+ registeredHooks = { ...registeredHooks, ...hooks };
229
+ }
230
+ function getPluginHooks() {
231
+ return registeredHooks;
232
+ }
233
+ async function applyHooks(hookName, ctx) {
234
+ const hook = registeredHooks[hookName];
235
+ if (!hook) return ctx;
236
+ return hook(ctx);
237
+ }
238
+
225
239
  // packages/domain/plugin/src/index.ts
226
240
  function createTwPlugin(options = {}) {
227
241
  parseTwPluginOptions(options);
@@ -243,7 +257,31 @@ function createTwPlugin(options = {}) {
243
257
  }
244
258
  };
245
259
  }
246
-
247
- export { PluginManifestSchema, TokenRegistrationSchema, TransformRegistrationSchema, TwPluginOptionsSchema, createGlobalPluginContext, createPluginContext, createPluginRegistry, createTw, createTwPlugin, getGlobalRegistry, parsePluginManifest, parseTokenRegistration, parseTwPluginOptions, presetScrollbar, presetTokens, presetVariants, readToken, registerToken, registerTransform, resetGlobalRegistry, resolveTokenEngine, use };
248
- //# sourceMappingURL=plugin.mjs.map
260
+ export {
261
+ PluginManifestSchema,
262
+ TokenRegistrationSchema,
263
+ TransformRegistrationSchema,
264
+ TwPluginOptionsSchema,
265
+ applyHooks,
266
+ createGlobalPluginContext,
267
+ createPluginContext,
268
+ createPluginRegistry,
269
+ createTw,
270
+ createTwPlugin,
271
+ getGlobalRegistry,
272
+ getPluginHooks,
273
+ parsePluginManifest,
274
+ parseTokenRegistration,
275
+ parseTwPluginOptions,
276
+ presetScrollbar,
277
+ presetTokens,
278
+ presetVariants,
279
+ readToken,
280
+ registerPluginHooks,
281
+ registerToken,
282
+ registerTransform,
283
+ resetGlobalRegistry,
284
+ resolveTokenEngine,
285
+ use
286
+ };
249
287
  //# sourceMappingURL=plugin.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../packages/domain/plugin-api/src/schemas.ts","../packages/domain/plugin-api/src/index.ts","../packages/domain/plugin/src/index.ts"],"names":["config"],"mappings":"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","file":"plugin.mjs","sourcesContent":["import { z } from \"zod\"\n\nconst formatIssues = (error: z.ZodError): string =>\n error.issues\n .map((issue) => {\n const p = issue.path.length > 0 ? issue.path.join(\".\") : \"<root>\"\n return `${p}: ${issue.message}`\n })\n .join(\"; \")\n\nconst parseWithSchema = <T>(schema: z.ZodType<T>, data: unknown, label: string): T => {\n const parsed = schema.safeParse(data)\n if (parsed.success) return parsed.data\n throw new TypeError(`${label}: ${formatIssues(parsed.error)}`)\n}\n\nexport const DesignTokensSchema: z.ZodType<\n Record<string, string | number | Record<string, unknown>>\n> = z.record(z.string(), z.union([z.string(), z.number(), z.lazy(() => DesignTokensSchema)]))\n\nexport const TwClassResultSchema = z.object({\n css: z.string(),\n classes: z.array(z.string()),\n})\n\nexport const TwPluginOptionsSchema = z.object({\n classProcessor: z\n .function({ input: [z.array(z.string())], output: TwClassResultSchema })\n .optional(),\n tokens: DesignTokensSchema.optional(),\n debug: z.boolean().optional(),\n minify: z.boolean().optional(),\n})\n\nexport type TwPluginOptionsInput = z.infer<typeof TwPluginOptionsSchema>\n\nexport const PluginManifestSchema = z.object({\n name: z.string().min(1),\n setup: z.function({ input: [z.unknown()], output: z.unknown() }),\n})\n\nexport type PluginManifestInput = z.infer<typeof PluginManifestSchema>\n\nexport const TransformRegistrationSchema = z.function({ input: [z.unknown()], output: z.unknown() })\n\nexport const TokenRegistrationSchema = z.object({\n name: z.string().min(1),\n value: z.string(),\n})\n\nexport type TokenRegistrationInput = z.infer<typeof TokenRegistrationSchema>\n\nexport const parseTwPluginOptions = (options: unknown) =>\n parseWithSchema(TwPluginOptionsSchema, options ?? {}, \"plugin options are invalid\")\n\nexport const parsePluginManifest = (plugin: unknown) =>\n parseWithSchema(PluginManifestSchema, plugin, \"plugin manifest is invalid\")\n\nexport const parseTokenRegistration = (data: unknown) =>\n parseWithSchema(TokenRegistrationSchema, data, \"token registration is invalid\")\n\n// ── Enhanced plugin validation (dari monorepo checklist) ────────────────────\n\n/** Nama plugin harus mengikuti format npm package */\nexport const PluginNameSchema = z.string()\n .min(1, \"Plugin name cannot be empty\")\n .regex(\n /^(@[a-z0-9-]+\\/)?[a-z0-9][a-z0-9-]*[a-z0-9]$/,\n \"Plugin name must follow npm naming: lowercase, hyphens allowed, no leading/trailing hyphens\"\n )\n\n/** Versi semantic versioning */\nexport const SemverSchema = z.string()\n .regex(/^\\d+\\.\\d+\\.\\d+(-[a-z0-9.]+)?$/, \"Version must follow semver: x.y.z or x.y.z-prerelease\")\n\n/** Full plugin manifest dengan validasi nama dan versi */\nexport const FullPluginManifestSchema = PluginManifestSchema.extend({\n name: PluginNameSchema,\n version: SemverSchema.optional(),\n description: z.string().max(200).optional(),\n keywords: z.array(z.string()).max(10).optional(),\n})\n\nexport type FullPluginManifest = z.infer<typeof FullPluginManifestSchema>\n\n/** Validate full plugin manifest */\nexport const parseFullPluginManifest = (plugin: unknown): FullPluginManifest =>\n parseWithSchema(FullPluginManifestSchema, plugin, \"plugin manifest is invalid\")\n\n/** Validate plugin name only */\nexport const validatePluginName = (name: unknown): string =>\n parseWithSchema(PluginNameSchema, name, \"plugin name is invalid\")\n\n/** Zod validation for plugin registration payload */\nexport const PluginRegistrationPayloadSchema = z.object({\n plugin: FullPluginManifestSchema,\n config: z.record(z.string(), z.unknown()).optional(),\n priority: z.number().int().min(0).max(100).optional(),\n})\n\nexport type PluginRegistrationPayload = z.infer<typeof PluginRegistrationPayloadSchema>\n\nexport const parsePluginRegistrationPayload = (payload: unknown): PluginRegistrationPayload =>\n parseWithSchema(PluginRegistrationPayloadSchema, payload, \"plugin registration payload is invalid\")\n","import { parsePluginManifest, parseTokenRegistration, TransformRegistrationSchema } from \"./schemas\"\nimport type { CompoundCondition, TokenMap } from \"@tailwind-styled/shared\"\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 type { CompoundCondition, TokenMap }\n\nexport interface ComponentConfig {\n base: string\n variants: Record<string, Record<string, string>>\n compoundVariants: Array<{ class: string } & CompoundCondition>\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\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, unknown>\n}\n\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\nexport interface TokenEngineAPI {\n getToken?: (name: string) => string | undefined\n getTokens?: () => Record<string, string> | undefined\n subscribeTokens?: (callback: (tokens: Record<string, string>) => void) => () => void\n subscribe?: (callback: (tokens: Record<string, string>) => void) => () => void\n}\n\nconst TOKEN_ENGINE_KEY = \"__TW_TOKEN_ENGINE__\"\n\nexport function resolveTokenEngine(): TokenEngineAPI | undefined {\n const engine = (globalThis as Record<string, unknown>)[TOKEN_ENGINE_KEY]\n if (engine && typeof engine === \"object\") {\n return engine as TokenEngineAPI\n }\n return undefined\n}\n\nexport function readToken(engine: TokenEngineAPI | undefined, 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\nexport interface TransformContext {\n filename?: string\n componentName?: string\n tag?: string\n}\n\nexport interface TwGlobalRegistry {\n transforms: Array<(config: ComponentConfig, ctx: TransformContext) => ComponentConfig>\n tokens: Record<string, string>\n variants: Map<string, VariantResolver>\n}\n\nconst transformRegistry: TwGlobalRegistry = {\n transforms: [],\n tokens: {},\n variants: new Map(),\n}\n\nconst normalizeTokenName = (name: string): string =>\n name.replace(/[^a-zA-Z0-9-]/g, \"-\").toLowerCase()\n\nexport function getGlobalRegistry(): TwGlobalRegistry {\n return transformRegistry\n}\n\nexport function registerTransform(\n transform: (config: ComponentConfig, ctx: TransformContext) => ComponentConfig\n): void {\n TransformRegistrationSchema.parse(transform)\n transformRegistry.transforms.push(transform)\n}\n\nexport function registerToken(name: string, value: string): void {\n const parsed = parseTokenRegistration({ name, value })\n transformRegistry.tokens[parsed.name] = parsed.value\n}\n\nexport function createPluginRegistry(): 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\nconst legacyState = { globalRegistry: createPluginRegistry() }\n\nexport function resetGlobalRegistry(): void {\n transformRegistry.transforms.length = 0\n transformRegistry.variants.clear()\n for (const key of Object.keys(transformRegistry.tokens)) {\n delete transformRegistry.tokens[key]\n }\n legacyState.globalRegistry = createPluginRegistry()\n}\n\nexport function createPluginContext(\n registry: PluginRegistry,\n config: Record<string, unknown> = {}\n): TwContext {\n const isLegacyRegistry = registry === legacyState.globalRegistry\n\n return {\n config,\n addVariant(name, resolver) {\n registry.variants.set(name, resolver)\n if (isLegacyRegistry) {\n transformRegistry.variants.set(name, resolver)\n }\n },\n addUtility(name, styles) {\n registry.utilities.set(name, styles)\n },\n addToken(name, value) {\n const parsed = parseTokenRegistration({ name, value })\n const normalized = normalizeTokenName(parsed.name)\n registry.tokens.set(normalized, parsed.value)\n if (isLegacyRegistry) {\n transformRegistry.tokens[normalized] = parsed.value\n }\n },\n addTransform(fn) {\n TransformRegistrationSchema.parse(fn)\n registry.transforms.push(fn)\n if (isLegacyRegistry) {\n transformRegistry.transforms.push((config, ctx) =>\n fn(config, {\n componentName: ctx.componentName ?? \"\",\n tag: ctx.tag ?? \"\",\n })\n )\n }\n },\n onGenerateCSS(hook) {\n registry.cssHooks.push(hook)\n },\n onBuildEnd(hook) {\n registry.buildHooks.push(hook)\n },\n getToken(name) {\n const normalized = normalizeTokenName(name)\n // Check local registry first (populated by addToken), then fallback to token engine\n const local = registry.tokens.get(normalized)\n if (local !== undefined) return local\n return readToken(resolveTokenEngine(), normalized)\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\nexport function createTw(config: Record<string, unknown> = {}): 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 = createPluginRegistry()\n const ctx = createPluginContext(registry, config)\n\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\n result.registry = {\n plugins: registry.plugins,\n variants: registry.variants,\n utilities: registry.utilities,\n tokens: registry.tokens,\n }\n\n result.use = (plugin: TwPlugin) => {\n const manifest = parsePluginManifest(plugin)\n manifest.setup(ctx)\n registry.plugins.add(manifest.name)\n }\n\n if (config.plugins && Array.isArray(config.plugins)) {\n for (const plugin of config.plugins) {\n result.use(parsePluginManifest(plugin))\n }\n }\n\n return result\n}\n\n/**\n * Creates a TwContext that writes through to the global (legacy) registry.\n * Used by createTwPlugin() in the plugin package.\n */\nexport function createGlobalPluginContext(config: Record<string, unknown> = {}): TwContext {\n return createPluginContext(legacyState.globalRegistry, config)\n}\n\nexport function use(plugin: TwPlugin): void {\n const ctx = createPluginContext(legacyState.globalRegistry)\n parsePluginManifest(plugin).setup(ctx)\n}\n\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\n// Re-export schemas\nexport {\n type PluginManifestInput,\n PluginManifestSchema,\n parsePluginManifest,\n parseTokenRegistration,\n parseTwPluginOptions,\n type TokenRegistrationInput,\n TokenRegistrationSchema,\n TransformRegistrationSchema,\n type TwPluginOptionsInput,\n TwPluginOptionsSchema,\n} from \"./schemas\"","import type { TwPluginOptions, TwContext } from \"@tailwind-styled/plugin-api\"\n\nimport { createGlobalPluginContext, parseTwPluginOptions } from \"@tailwind-styled/plugin-api\"\nimport type { LoadResult, PartialResolvedId, PluginContext, TransformResult } from \"rollup\"\n\n// Type-only re-exports — emitted as `export type { }` so Turbopack ESM tracing\n// does not try to resolve them as runtime exports from plugin-api.mjs\nexport type {\n TwClassResult,\n DesignTokens,\n TwPluginOptions,\n VariantResolver,\n UtilityDefinition,\n ComponentConfig,\n TransformMeta,\n TransformFn,\n CssHook,\n TwContext,\n TwPlugin,\n PluginRegistry,\n TokenEngineAPI,\n TransformContext,\n TwGlobalRegistry,\n CompoundCondition,\n TokenMap,\n PluginManifestInput,\n TokenRegistrationInput,\n TwPluginOptionsInput,\n} from \"@tailwind-styled/plugin-api\"\n\n// Runtime value re-exports\nexport {\n resolveTokenEngine,\n readToken,\n getGlobalRegistry,\n registerTransform,\n registerToken,\n createPluginRegistry,\n resetGlobalRegistry,\n createPluginContext,\n createTw,\n createGlobalPluginContext,\n use,\n presetTokens,\n presetVariants,\n presetScrollbar,\n PluginManifestSchema,\n parsePluginManifest,\n parseTokenRegistration,\n parseTwPluginOptions,\n TokenRegistrationSchema,\n TransformRegistrationSchema,\n TwPluginOptionsSchema,\n} from \"@tailwind-styled/plugin-api\"\n\nexport interface TwVitePlugin extends TwContext {\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}\n\nexport function createTwPlugin(options: TwPluginOptions = {}): TwVitePlugin {\n parseTwPluginOptions(options)\n\n const ctx = createGlobalPluginContext(options as Record<string, unknown>)\n\n return {\n ...ctx,\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 }\n}"]}
1
+ {"version":3,"sources":["../packages/domain/plugin-api/src/schemas.ts","../packages/domain/plugin-api/src/index.ts","../packages/domain/plugin/src/hooks.ts","../packages/domain/plugin/src/index.ts"],"sourcesContent":["import { z } from \"zod\"\n\nconst formatIssues = (error: z.ZodError): string =>\n error.issues\n .map((issue) => {\n const p = issue.path.length > 0 ? issue.path.join(\".\") : \"<root>\"\n return `${p}: ${issue.message}`\n })\n .join(\"; \")\n\nconst parseWithSchema = <T>(schema: z.ZodType<T>, data: unknown, label: string): T => {\n const parsed = schema.safeParse(data)\n if (parsed.success) return parsed.data\n throw new TypeError(`${label}: ${formatIssues(parsed.error)}`)\n}\n\nexport const DesignTokensSchema: z.ZodType<\n Record<string, string | number | Record<string, unknown>>\n> = z.record(z.string(), z.union([z.string(), z.number(), z.lazy(() => DesignTokensSchema)]))\n\nexport const TwClassResultSchema = z.object({\n css: z.string(),\n classes: z.array(z.string()),\n})\n\nexport const TwPluginOptionsSchema = z.object({\n classProcessor: z\n .function({ input: [z.array(z.string())], output: TwClassResultSchema })\n .optional(),\n tokens: DesignTokensSchema.optional(),\n debug: z.boolean().optional(),\n minify: z.boolean().optional(),\n})\n\nexport type TwPluginOptionsInput = z.infer<typeof TwPluginOptionsSchema>\n\nexport const PluginManifestSchema = z.object({\n name: z.string().min(1),\n setup: z.function({ input: [z.unknown()], output: z.unknown() }),\n})\n\nexport type PluginManifestInput = z.infer<typeof PluginManifestSchema>\n\nexport const TransformRegistrationSchema = z.function({ input: [z.unknown()], output: z.unknown() })\n\nexport const TokenRegistrationSchema = z.object({\n name: z.string().min(1),\n value: z.string(),\n})\n\nexport type TokenRegistrationInput = z.infer<typeof TokenRegistrationSchema>\n\nexport const parseTwPluginOptions = (options: unknown) =>\n parseWithSchema(TwPluginOptionsSchema, options ?? {}, \"plugin options are invalid\")\n\nexport const parsePluginManifest = (plugin: unknown) =>\n parseWithSchema(PluginManifestSchema, plugin, \"plugin manifest is invalid\")\n\nexport const parseTokenRegistration = (data: unknown) =>\n parseWithSchema(TokenRegistrationSchema, data, \"token registration is invalid\")\n\n// ── Enhanced plugin validation (dari monorepo checklist) ────────────────────\n\n/** Nama plugin harus mengikuti format npm package */\nexport const PluginNameSchema = z.string()\n .min(1, \"Plugin name cannot be empty\")\n .regex(\n /^(@[a-z0-9-]+\\/)?[a-z0-9][a-z0-9-]*[a-z0-9]$/,\n \"Plugin name must follow npm naming: lowercase, hyphens allowed, no leading/trailing hyphens\"\n )\n\n/** Versi semantic versioning */\nexport const SemverSchema = z.string()\n .regex(/^\\d+\\.\\d+\\.\\d+(-[a-z0-9.]+)?$/, \"Version must follow semver: x.y.z or x.y.z-prerelease\")\n\n/** Full plugin manifest dengan validasi nama dan versi */\nexport const FullPluginManifestSchema = PluginManifestSchema.extend({\n name: PluginNameSchema,\n version: SemverSchema.optional(),\n description: z.string().max(200).optional(),\n keywords: z.array(z.string()).max(10).optional(),\n})\n\nexport type FullPluginManifest = z.infer<typeof FullPluginManifestSchema>\n\n/** Validate full plugin manifest */\nexport const parseFullPluginManifest = (plugin: unknown): FullPluginManifest =>\n parseWithSchema(FullPluginManifestSchema, plugin, \"plugin manifest is invalid\")\n\n/** Validate plugin name only */\nexport const validatePluginName = (name: unknown): string =>\n parseWithSchema(PluginNameSchema, name, \"plugin name is invalid\")\n\n/** Zod validation for plugin registration payload */\nexport const PluginRegistrationPayloadSchema = z.object({\n plugin: FullPluginManifestSchema,\n config: z.record(z.string(), z.unknown()).optional(),\n priority: z.number().int().min(0).max(100).optional(),\n})\n\nexport type PluginRegistrationPayload = z.infer<typeof PluginRegistrationPayloadSchema>\n\nexport const parsePluginRegistrationPayload = (payload: unknown): PluginRegistrationPayload =>\n parseWithSchema(PluginRegistrationPayloadSchema, payload, \"plugin registration payload is invalid\")\n","import { parsePluginManifest, parseTokenRegistration, TransformRegistrationSchema } from \"./schemas\"\nimport type { CompoundCondition, TokenMap } from \"@tailwind-styled/shared\"\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 type { CompoundCondition, TokenMap }\n\nexport interface ComponentConfig {\n base: string\n variants: Record<string, Record<string, string>>\n compoundVariants: Array<{ class: string } & CompoundCondition>\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\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, unknown>\n}\n\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\nexport interface TokenEngineAPI {\n getToken?: (name: string) => string | undefined\n getTokens?: () => Record<string, string> | undefined\n subscribeTokens?: (callback: (tokens: Record<string, string>) => void) => () => void\n subscribe?: (callback: (tokens: Record<string, string>) => void) => () => void\n}\n\nconst TOKEN_ENGINE_KEY = \"__TW_TOKEN_ENGINE__\"\n\nexport function resolveTokenEngine(): TokenEngineAPI | undefined {\n const engine = (globalThis as Record<string, unknown>)[TOKEN_ENGINE_KEY]\n if (engine && typeof engine === \"object\") {\n return engine as TokenEngineAPI\n }\n return undefined\n}\n\nexport function readToken(engine: TokenEngineAPI | undefined, 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\nexport interface TransformContext {\n filename?: string\n componentName?: string\n tag?: string\n}\n\nexport interface TwGlobalRegistry {\n transforms: Array<(config: ComponentConfig, ctx: TransformContext) => ComponentConfig>\n tokens: Record<string, string>\n variants: Map<string, VariantResolver>\n}\n\nconst transformRegistry: TwGlobalRegistry = {\n transforms: [],\n tokens: {},\n variants: new Map(),\n}\n\nconst normalizeTokenName = (name: string): string =>\n name.replace(/[^a-zA-Z0-9-]/g, \"-\").toLowerCase()\n\nexport function getGlobalRegistry(): TwGlobalRegistry {\n return transformRegistry\n}\n\nexport function registerTransform(\n transform: (config: ComponentConfig, ctx: TransformContext) => ComponentConfig\n): void {\n TransformRegistrationSchema.parse(transform)\n transformRegistry.transforms.push(transform)\n}\n\nexport function registerToken(name: string, value: string): void {\n const parsed = parseTokenRegistration({ name, value })\n transformRegistry.tokens[parsed.name] = parsed.value\n}\n\nexport function createPluginRegistry(): 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\nconst legacyState = { globalRegistry: createPluginRegistry() }\n\nexport function resetGlobalRegistry(): void {\n transformRegistry.transforms.length = 0\n transformRegistry.variants.clear()\n for (const key of Object.keys(transformRegistry.tokens)) {\n delete transformRegistry.tokens[key]\n }\n legacyState.globalRegistry = createPluginRegistry()\n}\n\nexport function createPluginContext(\n registry: PluginRegistry,\n config: Record<string, unknown> = {}\n): TwContext {\n const isLegacyRegistry = registry === legacyState.globalRegistry\n\n return {\n config,\n addVariant(name, resolver) {\n registry.variants.set(name, resolver)\n if (isLegacyRegistry) {\n transformRegistry.variants.set(name, resolver)\n }\n },\n addUtility(name, styles) {\n registry.utilities.set(name, styles)\n },\n addToken(name, value) {\n const parsed = parseTokenRegistration({ name, value })\n const normalized = normalizeTokenName(parsed.name)\n registry.tokens.set(normalized, parsed.value)\n if (isLegacyRegistry) {\n transformRegistry.tokens[normalized] = parsed.value\n }\n },\n addTransform(fn) {\n TransformRegistrationSchema.parse(fn)\n registry.transforms.push(fn)\n if (isLegacyRegistry) {\n transformRegistry.transforms.push((config, ctx) =>\n fn(config, {\n componentName: ctx.componentName ?? \"\",\n tag: ctx.tag ?? \"\",\n })\n )\n }\n },\n onGenerateCSS(hook) {\n registry.cssHooks.push(hook)\n },\n onBuildEnd(hook) {\n registry.buildHooks.push(hook)\n },\n getToken(name) {\n const normalized = normalizeTokenName(name)\n // Check local registry first (populated by addToken), then fallback to token engine\n const local = registry.tokens.get(normalized)\n if (local !== undefined) return local\n return readToken(resolveTokenEngine(), normalized)\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\nexport function createTw(config: Record<string, unknown> = {}): 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 = createPluginRegistry()\n const ctx = createPluginContext(registry, config)\n\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\n result.registry = {\n plugins: registry.plugins,\n variants: registry.variants,\n utilities: registry.utilities,\n tokens: registry.tokens,\n }\n\n result.use = (plugin: TwPlugin) => {\n const manifest = parsePluginManifest(plugin)\n manifest.setup(ctx)\n registry.plugins.add(manifest.name)\n }\n\n if (config.plugins && Array.isArray(config.plugins)) {\n for (const plugin of config.plugins) {\n result.use(parsePluginManifest(plugin))\n }\n }\n\n return result\n}\n\n/**\n * Creates a TwContext that writes through to the global (legacy) registry.\n * Used by createTwPlugin() in the plugin package.\n */\nexport function createGlobalPluginContext(config: Record<string, unknown> = {}): TwContext {\n return createPluginContext(legacyState.globalRegistry, config)\n}\n\nexport function use(plugin: TwPlugin): void {\n const ctx = createPluginContext(legacyState.globalRegistry)\n parsePluginManifest(plugin).setup(ctx)\n}\n\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\n// Re-export schemas\nexport {\n type PluginManifestInput,\n PluginManifestSchema,\n parsePluginManifest,\n parseTokenRegistration,\n parseTwPluginOptions,\n type TokenRegistrationInput,\n TokenRegistrationSchema,\n TransformRegistrationSchema,\n type TwPluginOptionsInput,\n TwPluginOptionsSchema,\n} from \"./schemas\"","/**\n * Plugin hooks for tailwind-styled-v4\n * \n * Hooks allow plugins to intercept and modify the CSS generation pipeline.\n */\n\nexport interface PluginHookContext {\n source: string\n filename: string\n extractedConfigs?: unknown[]\n cssOutput?: string\n}\n\nexport type PluginHook = (ctx: PluginHookContext) => PluginHookContext | Promise<PluginHookContext>\n\nexport interface PluginHooks {\n beforeExtract?: PluginHook\n afterExtract?: PluginHook\n beforeGenerate?: PluginHook\n afterGenerate?: PluginHook\n}\n\n// Global hook registry\nlet registeredHooks: PluginHooks = {}\n\nexport function registerPluginHooks(hooks: PluginHooks): void {\n registeredHooks = { ...registeredHooks, ...hooks }\n}\n\nexport function getPluginHooks(): PluginHooks {\n return registeredHooks\n}\n\n// Wrapper functions that apply hooks\nexport async function applyHooks(\n hookName: keyof PluginHooks,\n ctx: PluginHookContext\n): Promise<PluginHookContext> {\n const hook = registeredHooks[hookName]\n if (!hook) return ctx\n return hook(ctx)\n}","import type { TwPluginOptions, TwContext } from \"@tailwind-styled/plugin-api\"\n\nimport { createGlobalPluginContext, parseTwPluginOptions } from \"@tailwind-styled/plugin-api\"\nimport type { LoadResult, PartialResolvedId, PluginContext, TransformResult } from \"rollup\"\n\n// Type-only re-exports — emitted as `export type { }` so Turbopack ESM tracing\n// does not try to resolve them as runtime exports from plugin-api.mjs\nexport type {\n TwClassResult,\n DesignTokens,\n TwPluginOptions,\n VariantResolver,\n UtilityDefinition,\n ComponentConfig,\n TransformMeta,\n TransformFn,\n CssHook,\n TwContext,\n TwPlugin,\n PluginRegistry,\n TokenEngineAPI,\n TransformContext,\n TwGlobalRegistry,\n CompoundCondition,\n TokenMap,\n PluginManifestInput,\n TokenRegistrationInput,\n TwPluginOptionsInput,\n} from \"@tailwind-styled/plugin-api\"\n\n// Runtime value re-exports\nexport {\n resolveTokenEngine,\n readToken,\n getGlobalRegistry,\n registerTransform,\n registerToken,\n createPluginRegistry,\n resetGlobalRegistry,\n createPluginContext,\n createTw,\n createGlobalPluginContext,\n use,\n presetTokens,\n presetVariants,\n presetScrollbar,\n PluginManifestSchema,\n parsePluginManifest,\n parseTokenRegistration,\n parseTwPluginOptions,\n TokenRegistrationSchema,\n TransformRegistrationSchema,\n TwPluginOptionsSchema,\n} from \"@tailwind-styled/plugin-api\"\n\nexport {\n applyHooks,\n getPluginHooks,\n registerPluginHooks,\n type PluginHookContext,\n type PluginHook,\n type PluginHooks,\n} from \"./hooks\"\n\nexport interface TwVitePlugin extends TwContext {\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}\n\nexport function createTwPlugin(options: TwPluginOptions = {}): TwVitePlugin {\n parseTwPluginOptions(options)\n\n const ctx = createGlobalPluginContext(options as Record<string, unknown>)\n\n return {\n ...ctx,\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 }\n}"],"mappings":";;;AAAA,SAAS,SAAS;AAElB,IAAM,eAAe,CAAC,UACpB,MAAM,OACH,IAAI,CAAC,UAAU;AACd,QAAM,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,KAAK,GAAG,IAAI;AACzD,SAAO,GAAG,CAAC,KAAK,MAAM,OAAO;AAC/B,CAAC,EACA,KAAK,IAAI;AAEd,IAAM,kBAAkB,CAAI,QAAsB,MAAe,UAAqB;AACpF,QAAM,SAAS,OAAO,UAAU,IAAI;AACpC,MAAI,OAAO,QAAS,QAAO,OAAO;AAClC,QAAM,IAAI,UAAU,GAAG,KAAK,KAAK,aAAa,OAAO,KAAK,CAAC,EAAE;AAC/D;AAEO,IAAM,qBAET,EAAE,OAAO,EAAE,OAAO,GAAG,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,EAAE,OAAO,GAAG,EAAE,KAAK,MAAM,kBAAkB,CAAC,CAAC,CAAC;AAErF,IAAM,sBAAsB,EAAE,OAAO;AAAA,EAC1C,KAAK,EAAE,OAAO;AAAA,EACd,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC;AAC7B,CAAC;AAEM,IAAM,wBAAwB,EAAE,OAAO;AAAA,EAC5C,gBAAgB,EACb,SAAS,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,QAAQ,oBAAoB,CAAC,EACtE,SAAS;AAAA,EACZ,QAAQ,mBAAmB,SAAS;AAAA,EACpC,OAAO,EAAE,QAAQ,EAAE,SAAS;AAAA,EAC5B,QAAQ,EAAE,QAAQ,EAAE,SAAS;AAC/B,CAAC;AAIM,IAAM,uBAAuB,EAAE,OAAO;AAAA,EAC3C,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EACtB,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,QAAQ,CAAC,GAAG,QAAQ,EAAE,QAAQ,EAAE,CAAC;AACjE,CAAC;AAIM,IAAM,8BAA8B,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,QAAQ,CAAC,GAAG,QAAQ,EAAE,QAAQ,EAAE,CAAC;AAE5F,IAAM,0BAA0B,EAAE,OAAO;AAAA,EAC9C,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EACtB,OAAO,EAAE,OAAO;AAClB,CAAC;AAIM,IAAM,uBAAuB,CAAC,YACnC,gBAAgB,uBAAuB,WAAW,CAAC,GAAG,4BAA4B;AAE7E,IAAM,sBAAsB,CAAC,WAClC,gBAAgB,sBAAsB,QAAQ,4BAA4B;AAErE,IAAM,yBAAyB,CAAC,SACrC,gBAAgB,yBAAyB,MAAM,+BAA+B;AAKzE,IAAM,mBAAmB,EAAE,OAAO,EACtC,IAAI,GAAG,6BAA6B,EACpC;AAAA,EACC;AAAA,EACA;AACF;AAGK,IAAM,eAAe,EAAE,OAAO,EAClC,MAAM,iCAAiC,uDAAuD;AAG1F,IAAM,2BAA2B,qBAAqB,OAAO;AAAA,EAClE,MAAM;AAAA,EACN,SAAS,aAAa,SAAS;AAAA,EAC/B,aAAa,EAAE,OAAO,EAAE,IAAI,GAAG,EAAE,SAAS;AAAA,EAC1C,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,EAAE,SAAS;AACjD,CAAC;AAaM,IAAM,kCAAkC,EAAE,OAAO;AAAA,EACtD,QAAQ;AAAA,EACR,QAAQ,EAAE,OAAO,EAAE,OAAO,GAAG,EAAE,QAAQ,CAAC,EAAE,SAAS;AAAA,EACnD,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,EAAE,SAAS;AACtD,CAAC;;;ACrBD,IAAM,mBAAmB;AAElB,SAAS,qBAAiD;AAC/D,QAAM,SAAU,WAAuC,gBAAgB;AACvE,MAAI,UAAU,OAAO,WAAW,UAAU;AACxC,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAEO,SAAS,UAAU,QAAoC,MAAkC;AAC9F,MAAI,CAAC,OAAQ,QAAO;AACpB,MAAI,OAAO,OAAO,aAAa,WAAY,QAAO,OAAO,SAAS,IAAI;AACtE,MAAI,OAAO,OAAO,cAAc,YAAY;AAC1C,UAAM,SAAS,OAAO,UAAU;AAChC,WAAO,SAAS,IAAI;AAAA,EACtB;AACA,SAAO;AACT;AAcA,IAAM,oBAAsC;AAAA,EAC1C,YAAY,CAAC;AAAA,EACb,QAAQ,CAAC;AAAA,EACT,UAAU,oBAAI,IAAI;AACpB;AAEA,IAAM,qBAAqB,CAAC,SAC1B,KAAK,QAAQ,kBAAkB,GAAG,EAAE,YAAY;AAE3C,SAAS,oBAAsC;AACpD,SAAO;AACT;AAEO,SAAS,kBACd,WACM;AACN,8BAA4B,MAAM,SAAS;AAC3C,oBAAkB,WAAW,KAAK,SAAS;AAC7C;AAEO,SAAS,cAAc,MAAc,OAAqB;AAC/D,QAAM,SAAS,uBAAuB,EAAE,MAAM,MAAM,CAAC;AACrD,oBAAkB,OAAO,OAAO,IAAI,IAAI,OAAO;AACjD;AAEO,SAAS,uBAAuC;AACrD,SAAO;AAAA,IACL,UAAU,oBAAI,IAAI;AAAA,IAClB,WAAW,oBAAI,IAAI;AAAA,IACnB,QAAQ,oBAAI,IAAI;AAAA,IAChB,YAAY,CAAC;AAAA,IACb,UAAU,CAAC;AAAA,IACX,YAAY,CAAC;AAAA,IACb,SAAS,oBAAI,IAAI;AAAA,EACnB;AACF;AAEA,IAAM,cAAc,EAAE,gBAAgB,qBAAqB,EAAE;AAEtD,SAAS,sBAA4B;AAC1C,oBAAkB,WAAW,SAAS;AACtC,oBAAkB,SAAS,MAAM;AACjC,aAAW,OAAO,OAAO,KAAK,kBAAkB,MAAM,GAAG;AACvD,WAAO,kBAAkB,OAAO,GAAG;AAAA,EACrC;AACA,cAAY,iBAAiB,qBAAqB;AACpD;AAEO,SAAS,oBACd,UACA,SAAkC,CAAC,GACxB;AACX,QAAM,mBAAmB,aAAa,YAAY;AAElD,SAAO;AAAA,IACL;AAAA,IACA,WAAW,MAAM,UAAU;AACzB,eAAS,SAAS,IAAI,MAAM,QAAQ;AACpC,UAAI,kBAAkB;AACpB,0BAAkB,SAAS,IAAI,MAAM,QAAQ;AAAA,MAC/C;AAAA,IACF;AAAA,IACA,WAAW,MAAM,QAAQ;AACvB,eAAS,UAAU,IAAI,MAAM,MAAM;AAAA,IACrC;AAAA,IACA,SAAS,MAAM,OAAO;AACpB,YAAM,SAAS,uBAAuB,EAAE,MAAM,MAAM,CAAC;AACrD,YAAM,aAAa,mBAAmB,OAAO,IAAI;AACjD,eAAS,OAAO,IAAI,YAAY,OAAO,KAAK;AAC5C,UAAI,kBAAkB;AACpB,0BAAkB,OAAO,UAAU,IAAI,OAAO;AAAA,MAChD;AAAA,IACF;AAAA,IACA,aAAa,IAAI;AACf,kCAA4B,MAAM,EAAE;AACpC,eAAS,WAAW,KAAK,EAAE;AAC3B,UAAI,kBAAkB;AACpB,0BAAkB,WAAW;AAAA,UAAK,CAACA,SAAQ,QACzC,GAAGA,SAAQ;AAAA,YACT,eAAe,IAAI,iBAAiB;AAAA,YACpC,KAAK,IAAI,OAAO;AAAA,UAClB,CAAC;AAAA,QACH;AAAA,MACF;AAAA,IACF;AAAA,IACA,cAAc,MAAM;AAClB,eAAS,SAAS,KAAK,IAAI;AAAA,IAC7B;AAAA,IACA,WAAW,MAAM;AACf,eAAS,WAAW,KAAK,IAAI;AAAA,IAC/B;AAAA,IACA,SAAS,MAAM;AACb,YAAM,aAAa,mBAAmB,IAAI;AAE1C,YAAM,QAAQ,SAAS,OAAO,IAAI,UAAU;AAC5C,UAAI,UAAU,OAAW,QAAO;AAChC,aAAO,UAAU,mBAAmB,GAAG,UAAU;AAAA,IACnD;AAAA,IACA,gBAAgB,UAAU;AACxB,YAAM,SAAS,mBAAmB;AAClC,UAAI,CAAC,OAAQ,QAAO,MAAM;AAAA,MAAC;AAC3B,UAAI,OAAO,OAAO,oBAAoB,WAAY,QAAO,OAAO,gBAAgB,QAAQ;AACxF,UAAI,OAAO,OAAO,cAAc,WAAY,QAAO,OAAO,UAAU,QAAQ;AAC5E,aAAO,MAAM;AAAA,MAAC;AAAA,IAChB;AAAA,EACF;AACF;AAEO,SAAS,SAAS,SAAkC,CAAC,GAQ1D;AACA,QAAM,WAAW,qBAAqB;AACtC,QAAM,MAAM,oBAAoB,UAAU,MAAM;AAEhD,QAAM,SAAS;AAUf,SAAO,WAAW;AAAA,IAChB,SAAS,SAAS;AAAA,IAClB,UAAU,SAAS;AAAA,IACnB,WAAW,SAAS;AAAA,IACpB,QAAQ,SAAS;AAAA,EACnB;AAEA,SAAO,MAAM,CAAC,WAAqB;AACjC,UAAM,WAAW,oBAAoB,MAAM;AAC3C,aAAS,MAAM,GAAG;AAClB,aAAS,QAAQ,IAAI,SAAS,IAAI;AAAA,EACpC;AAEA,MAAI,OAAO,WAAW,MAAM,QAAQ,OAAO,OAAO,GAAG;AACnD,eAAW,UAAU,OAAO,SAAS;AACnC,aAAO,IAAI,oBAAoB,MAAM,CAAC;AAAA,IACxC;AAAA,EACF;AAEA,SAAO;AACT;AAMO,SAAS,0BAA0B,SAAkC,CAAC,GAAc;AACzF,SAAO,oBAAoB,YAAY,gBAAgB,MAAM;AAC/D;AAEO,SAAS,IAAI,QAAwB;AAC1C,QAAM,MAAM,oBAAoB,YAAY,cAAc;AAC1D,sBAAoB,MAAM,EAAE,MAAM,GAAG;AACvC;AAEO,SAAS,aAAa,QAA0C;AACrE,SAAO;AAAA,IACL,MAAM;AAAA,IACN,MAAM,KAAK;AACT,iBAAW,CAAC,MAAM,KAAK,KAAK,OAAO,QAAQ,MAAM,GAAG;AAClD,YAAI,SAAS,MAAM,KAAK;AAAA,MAC1B;AAAA,IACF;AAAA,EACF;AACF;AAEO,SAAS,eAAe,UAAqD;AAClF,SAAO;AAAA,IACL,MAAM;AAAA,IACN,MAAM,KAAK;AACT,iBAAW,CAAC,MAAM,QAAQ,KAAK,OAAO,QAAQ,QAAQ,GAAG;AACvD,YAAI,WAAW,MAAM,QAAQ;AAAA,MAC/B;AAAA,IACF;AAAA,EACF;AACF;AAEO,SAAS,kBAA4B;AAC1C,SAAO;AAAA,IACL,MAAM;AAAA,IACN,MAAM,KAAK;AACT,UAAI,WAAW,kBAAkB,MAAM,2CAA2C;AAClF,UAAI,WAAW,kBAAkB,MAAM,mCAAmC;AAC1E,UAAI,WAAW,kBAAkB,EAAE,sBAAsB,QAAQ,mBAAmB,OAAO,CAAC;AAAA,IAC9F;AAAA,EACF;AACF;;;AC1RA,IAAI,kBAA+B,CAAC;AAE7B,SAAS,oBAAoB,OAA0B;AAC5D,oBAAkB,EAAE,GAAG,iBAAiB,GAAG,MAAM;AACnD;AAEO,SAAS,iBAA8B;AAC5C,SAAO;AACT;AAGA,eAAsB,WACpB,UACA,KAC4B;AAC5B,QAAM,OAAO,gBAAgB,QAAQ;AACrC,MAAI,CAAC,KAAM,QAAO;AAClB,SAAO,KAAK,GAAG;AACjB;;;ACiCO,SAAS,eAAe,UAA2B,CAAC,GAAiB;AAC1E,uBAAqB,OAAO;AAE5B,QAAM,MAAM,0BAA0B,OAAkC;AAExE,SAAO;AAAA,IACL,GAAG;AAAA,IACH,MAAM,UAAU,QAAQ,UAAU;AAChC,UAAI,CAAC,OAAO,WAAW,KAAK,KAAK,CAAC,OAAO,WAAW,KAAK,EAAG,QAAO;AACnE,YAAM,aAAa,OAAO,QAAQ,WAAW,EAAE;AAC/C,YAAM,WAAW,MAAM,KAAK,QAAQ,YAAY,UAAU,EAAE,UAAU,KAAK,CAAC;AAC5E,UAAI,SAAU,QAAO,EAAE,IAAI,SAAS,GAAG;AACvC,aAAO;AAAA,IACT;AAAA,IACA,MAAM,KAAK,KAAK;AACd,aAAO;AAAA,IACT;AAAA,IACA,MAAM,UAAU,OAAO,KAAK;AAC1B,aAAO;AAAA,IACT;AAAA,EACF;AACF;","names":["config"]}
package/dist/preset.js CHANGED
@@ -1,6 +1,37 @@
1
- 'use strict';
2
-
3
1
  /* tailwind-styled-v4 v5.0.4 | MIT | https://github.com/dictionar32/tailwind-styled-v4 */
2
+ "use strict";
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __export = (target, all) => {
8
+ for (var name in all)
9
+ __defProp(target, name, { get: all[name], enumerable: true });
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from))
14
+ if (!__hasOwnProp.call(to, key) && key !== except)
15
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
+ }
17
+ return to;
18
+ };
19
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
20
+
21
+ // src/umbrella/preset.ts
22
+ var preset_exports = {};
23
+ __export(preset_exports, {
24
+ createPreset: () => createPreset,
25
+ defaultGlobalCss: () => defaultGlobalCss,
26
+ defaultPreset: () => defaultPreset,
27
+ defaultThemeCss: () => defaultThemeCss,
28
+ designTokens: () => designTokens,
29
+ extendPreset: () => extendPreset,
30
+ generateTailwindConfig: () => generateTailwindConfig,
31
+ generateTailwindCss: () => generateTailwindCss,
32
+ mergePresets: () => mergePresets
33
+ });
34
+ module.exports = __toCommonJS(preset_exports);
4
35
 
5
36
  // packages/domain/preset/src/defaultPreset.ts
6
37
  var STANDARD_CONTENT_PATHS = [
@@ -414,10 +445,10 @@ export default {
414
445
  // packages/domain/preset/src/presetExtension.ts
415
446
  function createPreset(extension, opts = {}) {
416
447
  const { name = "custom-preset", darkMode, content = [] } = opts;
417
- ({
448
+ const mergedTokens = {
418
449
  ...designTokens,
419
450
  ...extension.tokens
420
- });
451
+ };
421
452
  const base = defaultPreset;
422
453
  const baseTheme = base.theme ?? {};
423
454
  const baseExtend = baseTheme.extend ?? {};
@@ -470,15 +501,16 @@ function mergePresets(...presets) {
470
501
  plugins: preset.plugins ?? []
471
502
  }));
472
503
  }
473
-
474
- exports.createPreset = createPreset;
475
- exports.defaultGlobalCss = defaultGlobalCss;
476
- exports.defaultPreset = defaultPreset;
477
- exports.defaultThemeCss = defaultThemeCss;
478
- exports.designTokens = designTokens;
479
- exports.extendPreset = extendPreset;
480
- exports.generateTailwindConfig = generateTailwindConfig;
481
- exports.generateTailwindCss = generateTailwindCss;
482
- exports.mergePresets = mergePresets;
483
- //# sourceMappingURL=preset.js.map
504
+ // Annotate the CommonJS export names for ESM import in node:
505
+ 0 && (module.exports = {
506
+ createPreset,
507
+ defaultGlobalCss,
508
+ defaultPreset,
509
+ defaultThemeCss,
510
+ designTokens,
511
+ extendPreset,
512
+ generateTailwindConfig,
513
+ generateTailwindCss,
514
+ mergePresets
515
+ });
484
516
  //# sourceMappingURL=preset.js.map