@razorwind/core 0.0.6 → 0.0.7

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 (75) hide show
  1. package/dist/config-DQHHeicR.d.mts +85 -0
  2. package/dist/config-DQHHeicR.d.mts.map +1 -0
  3. package/dist/config-Dj6RrLde.d.cts +85 -0
  4. package/dist/config-Dj6RrLde.d.cts.map +1 -0
  5. package/dist/config.cjs +1 -1
  6. package/dist/config.d.cts +13 -2
  7. package/dist/config.d.cts.map +1 -1
  8. package/dist/config.d.mts +13 -2
  9. package/dist/config.d.mts.map +1 -1
  10. package/dist/config.mjs +1 -1
  11. package/dist/generator-BWQOEMGt.mjs +2 -0
  12. package/dist/generator-BWQOEMGt.mjs.map +1 -0
  13. package/dist/generator-DQ1WS7hN.mjs +2 -0
  14. package/dist/generator-DQ1WS7hN.mjs.map +1 -0
  15. package/dist/generator-DjAElWpu.cjs +1 -0
  16. package/dist/generator-nWEM7jKK.cjs +1 -0
  17. package/dist/generator.cjs +1 -7
  18. package/dist/generator.d.cts +6 -6
  19. package/dist/generator.d.mts +6 -6
  20. package/dist/generator.mjs +1 -8
  21. package/dist/index--y-fo2Lr.d.mts +3 -0
  22. package/dist/index-COAOe8bR.d.cts +3 -0
  23. package/dist/index.cjs +1 -1
  24. package/dist/index.d.cts +8 -4
  25. package/dist/index.d.cts.map +1 -1
  26. package/dist/index.d.mts +8 -4
  27. package/dist/index.mjs +1 -1
  28. package/dist/lib/tokens/index.cjs +1 -0
  29. package/dist/lib/tokens/index.d.cts +150 -0
  30. package/dist/lib/tokens/index.d.cts.map +1 -0
  31. package/dist/lib/tokens/index.d.mts +150 -0
  32. package/dist/lib/tokens/index.d.mts.map +1 -0
  33. package/dist/lib/tokens/index.mjs +1 -0
  34. package/dist/plugin.cjs +1 -0
  35. package/dist/plugin.d.cts +43 -0
  36. package/dist/plugin.d.cts.map +1 -0
  37. package/dist/plugin.d.mts +43 -0
  38. package/dist/plugin.d.mts.map +1 -0
  39. package/dist/plugin.mjs +2 -0
  40. package/dist/plugin.mjs.map +1 -0
  41. package/dist/resolve-config-CBowa3KM.mjs +2 -0
  42. package/dist/resolve-config-CBowa3KM.mjs.map +1 -0
  43. package/dist/resolve-config-D7XXy_Qk.cjs +1 -0
  44. package/dist/rolldown-runtime-CMqjfN_6.cjs +1 -0
  45. package/dist/schema/index.cjs +1 -0
  46. package/dist/schema/index.d.cts +3 -0
  47. package/dist/schema/index.d.mts +3 -0
  48. package/dist/schema/index.mjs +1 -0
  49. package/dist/schema-1EWJvc56.d.cts +115 -0
  50. package/dist/schema-1EWJvc56.d.cts.map +1 -0
  51. package/dist/schema-BNfl9Tsw.d.mts +115 -0
  52. package/dist/schema-BNfl9Tsw.d.mts.map +1 -0
  53. package/dist/schema-Bxzw_P4l.mjs +2 -0
  54. package/dist/schema-Bxzw_P4l.mjs.map +1 -0
  55. package/dist/schema-CLeH9GGy.cjs +1 -0
  56. package/dist/tokens-B8Dv91EB.mjs +2 -0
  57. package/dist/tokens-B8Dv91EB.mjs.map +1 -0
  58. package/dist/tokens-CoQWg4mX.cjs +1 -0
  59. package/dist/utils/index.cjs +1 -0
  60. package/dist/utils/index.d.cts +37 -0
  61. package/dist/utils/index.d.cts.map +1 -0
  62. package/dist/utils/index.d.mts +37 -0
  63. package/dist/utils/index.d.mts.map +1 -0
  64. package/dist/utils/index.mjs +2 -0
  65. package/dist/utils/index.mjs.map +1 -0
  66. package/package.json +83 -28
  67. package/dist/config-CJi9Fu8b.d.cts +0 -40
  68. package/dist/config-CJi9Fu8b.d.cts.map +0 -1
  69. package/dist/config-CJi9Fu8b.d.mts +0 -40
  70. package/dist/config-CJi9Fu8b.d.mts.map +0 -1
  71. package/dist/generator.mjs.map +0 -1
  72. package/dist/index-8xt23rlo.d.mts +0 -15
  73. package/dist/index-8xt23rlo.d.mts.map +0 -1
  74. package/dist/index-DCXWFAYS.d.cts +0 -15
  75. package/dist/index-DCXWFAYS.d.cts.map +0 -1
@@ -0,0 +1,85 @@
1
+ import { t as Schema } from "./schema-BNfl9Tsw.mjs";
2
+ import { EnvPaths } from "@stryke/env";
3
+ import { GeneratedDocument } from "@power-plant/core";
4
+ import { PreprocessedTokens } from "style-dictionary";
5
+ import { Tokens } from "@power-plant/dtcg-schema";
6
+ import { MaybePromise, RequiredKeys } from "@stryke/types/base";
7
+ import { DesignTokens } from "style-dictionary/types";
8
+ //#region src/types/plugin.d.ts
9
+ interface TokensParser {
10
+ name?: string;
11
+ pattern: RegExp;
12
+ parser: (contents: string) => DesignTokens;
13
+ }
14
+ type TokensPreprocessor = {
15
+ name?: string;
16
+ preprocessor: (dictionary: PreprocessedTokens) => PreprocessedTokens;
17
+ } | ((dictionary: PreprocessedTokens) => PreprocessedTokens);
18
+ interface Plugin {
19
+ name: string;
20
+ parsers?: TokensParser[];
21
+ preprocessors?: TokensPreprocessor[];
22
+ extract?: (spec: Schema, config: Config) => MaybePromise<Schema>;
23
+ generate?: (spec: Schema, config: Config) => MaybePromise<Record<string, GeneratedDocument>>;
24
+ validate?: (spec: Schema, config: Config) => MaybePromise<void>;
25
+ }
26
+ //#endregion
27
+ //#region src/types/config.d.ts
28
+ interface Options {
29
+ /**
30
+ * The directory or file containing a Razorwind configuration file.
31
+ *
32
+ * @defaultValue "razorwind.config.ts"
33
+ */
34
+ configFile?: string;
35
+ /**
36
+ * The path to the registry.json file.
37
+ *
38
+ * @see https://shadcn.com/docs/registry
39
+ */
40
+ registryPath?: string;
41
+ /**
42
+ * The directory or file containing the tokens.
43
+ *
44
+ * @see https://styledictionary.com/info/tokens/
45
+ *
46
+ * @defaultValue "tokens.json" (or "tokens" directory)
47
+ */
48
+ tokensPath?: string;
49
+ /**
50
+ * The mode to use for the configuration.
51
+ *
52
+ * @defaultValue "production"
53
+ */
54
+ mode?: "development" | "test" | "production";
55
+ }
56
+ interface UserConfig extends Options {
57
+ name?: string;
58
+ title?: string;
59
+ version?: string;
60
+ description?: string;
61
+ author?: string;
62
+ license?: string;
63
+ repository?: string;
64
+ homepage?: string;
65
+ tags?: string[];
66
+ tokens?: Tokens | Record<string, Tokens>;
67
+ plugins?: Plugin[];
68
+ }
69
+ interface UserConfigParams {
70
+ cwd: string;
71
+ mode: string;
72
+ }
73
+ type UserConfigFnObject = (config: UserConfig) => UserConfig;
74
+ type UserConfigFnPromise = (params: UserConfigParams) => Promise<UserConfig | UserConfig[]>;
75
+ type UserConfigFn = (params: UserConfigParams) => UserConfig | UserConfig[] | Promise<UserConfig | UserConfig[]>;
76
+ type UserConfigExport = UserConfig | UserConfig[] | Promise<UserConfig | UserConfig[]> | UserConfigFnObject | UserConfigFnPromise | UserConfigFn;
77
+ type Config = RequiredKeys<UserConfig, "registryPath" | "plugins"> & {
78
+ cwd: string;
79
+ envPaths: EnvPaths & {
80
+ home: string;
81
+ };
82
+ };
83
+ //#endregion
84
+ export { UserConfigFn as a, UserConfigParams as c, TokensPreprocessor as d, UserConfigExport as i, Plugin as l, Options as n, UserConfigFnObject as o, UserConfig as r, UserConfigFnPromise as s, Config as t, TokensParser as u };
85
+ //# sourceMappingURL=config-DQHHeicR.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-DQHHeicR.d.mts","names":[],"sources":["../src/types/plugin.ts","../src/types/config.ts"],"mappings":""}
@@ -0,0 +1,85 @@
1
+ import { t as Schema } from "./schema-1EWJvc56.cjs";
2
+ import { Tokens } from "@power-plant/dtcg-schema";
3
+ import { EnvPaths } from "@stryke/env";
4
+ import { MaybePromise, RequiredKeys } from "@stryke/types/base";
5
+ import { GeneratedDocument } from "@power-plant/core";
6
+ import { PreprocessedTokens } from "style-dictionary";
7
+ import { DesignTokens } from "style-dictionary/types";
8
+ //#region src/types/plugin.d.ts
9
+ interface TokensParser {
10
+ name?: string;
11
+ pattern: RegExp;
12
+ parser: (contents: string) => DesignTokens;
13
+ }
14
+ type TokensPreprocessor = {
15
+ name?: string;
16
+ preprocessor: (dictionary: PreprocessedTokens) => PreprocessedTokens;
17
+ } | ((dictionary: PreprocessedTokens) => PreprocessedTokens);
18
+ interface Plugin {
19
+ name: string;
20
+ parsers?: TokensParser[];
21
+ preprocessors?: TokensPreprocessor[];
22
+ extract?: (spec: Schema, config: Config) => MaybePromise<Schema>;
23
+ generate?: (spec: Schema, config: Config) => MaybePromise<Record<string, GeneratedDocument>>;
24
+ validate?: (spec: Schema, config: Config) => MaybePromise<void>;
25
+ }
26
+ //#endregion
27
+ //#region src/types/config.d.ts
28
+ interface Options {
29
+ /**
30
+ * The directory or file containing a Razorwind configuration file.
31
+ *
32
+ * @defaultValue "razorwind.config.ts"
33
+ */
34
+ configFile?: string;
35
+ /**
36
+ * The path to the registry.json file.
37
+ *
38
+ * @see https://shadcn.com/docs/registry
39
+ */
40
+ registryPath?: string;
41
+ /**
42
+ * The directory or file containing the tokens.
43
+ *
44
+ * @see https://styledictionary.com/info/tokens/
45
+ *
46
+ * @defaultValue "tokens.json" (or "tokens" directory)
47
+ */
48
+ tokensPath?: string;
49
+ /**
50
+ * The mode to use for the configuration.
51
+ *
52
+ * @defaultValue "production"
53
+ */
54
+ mode?: "development" | "test" | "production";
55
+ }
56
+ interface UserConfig extends Options {
57
+ name?: string;
58
+ title?: string;
59
+ version?: string;
60
+ description?: string;
61
+ author?: string;
62
+ license?: string;
63
+ repository?: string;
64
+ homepage?: string;
65
+ tags?: string[];
66
+ tokens?: Tokens | Record<string, Tokens>;
67
+ plugins?: Plugin[];
68
+ }
69
+ interface UserConfigParams {
70
+ cwd: string;
71
+ mode: string;
72
+ }
73
+ type UserConfigFnObject = (config: UserConfig) => UserConfig;
74
+ type UserConfigFnPromise = (params: UserConfigParams) => Promise<UserConfig | UserConfig[]>;
75
+ type UserConfigFn = (params: UserConfigParams) => UserConfig | UserConfig[] | Promise<UserConfig | UserConfig[]>;
76
+ type UserConfigExport = UserConfig | UserConfig[] | Promise<UserConfig | UserConfig[]> | UserConfigFnObject | UserConfigFnPromise | UserConfigFn;
77
+ type Config = RequiredKeys<UserConfig, "registryPath" | "plugins"> & {
78
+ cwd: string;
79
+ envPaths: EnvPaths & {
80
+ home: string;
81
+ };
82
+ };
83
+ //#endregion
84
+ export { UserConfigFn as a, UserConfigParams as c, TokensPreprocessor as d, UserConfigExport as i, Plugin as l, Options as n, UserConfigFnObject as o, UserConfig as r, UserConfigFnPromise as s, Config as t, TokensParser as u };
85
+ //# sourceMappingURL=config-Dj6RrLde.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-Dj6RrLde.d.cts","names":[],"sources":["../src/types/plugin.ts","../src/types/config.ts"],"mappings":";;;;;;;;UAyBiB;EACf;EACA,SAAS;EACT,SAAS,qBAAqB;;KAGpB;EAEN;EACA,eAAe,YAAY,uBAAuB;MAElD,YAAY,uBAAuB;UAExB;EACf;EACA,UAAU;EACV,gBAAgB;EAChB,WAAW,MAAM,QAAQ,QAAQ,WAAW,aAAa;EACzD,YACE,MAAM,QACN,QAAQ,WACL,aAAa,eAAe;EACjC,YAAY,MAAM,QAAQ,QAAQ,WAAW;;;;UCxB9B;;;;;;EAMf;;;;;;EAOA;;;;;;;;EASA;;;;;;EAOA;;UAGe,mBAAmB;EAClC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,SAAS,SAAS,eAAe;EACjC,UAAU;;UAGK;EACf;EACA;;KAGU,sBAAsB,QAAQ,eAAe;KAC7C,uBACV,QAAQ,qBACL,QAAQ,aAAa;KACd,gBACV,QAAQ,qBACL,aAAa,eAAe,QAAQ,aAAa;KAC1C,mBACR,aACA,eACA,QAAQ,aAAa,gBACrB,qBACA,sBACA;KAEQ,SAAS,aAAa;EAChC;EACA,UAAU;IACR"}
package/dist/config.cjs CHANGED
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});function e(e){return e}exports.defineConfig=e;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./plugin.cjs"),t=require("./resolve-config-D7XXy_Qk.cjs");function n(e){return e}exports.defineConfig=n,exports.definePlugin=e.definePlugin,exports.resolveConfig=t.t;
package/dist/config.d.cts CHANGED
@@ -1,4 +1,15 @@
1
- import { a as UserConfigFn, c as UserConfigParams, i as UserConfigExport, n as InputOptions, o as UserConfigFnObject, r as UserConfig, s as UserConfigFnPromise, t as Config } from "./config-CJi9Fu8b.cjs";
1
+ import { a as UserConfigFn, c as UserConfigParams, d as TokensPreprocessor, i as UserConfigExport, l as Plugin, n as Options, o as UserConfigFnObject, r as UserConfig, s as UserConfigFnPromise, t as Config, u as TokensParser } from "./config-Dj6RrLde.cjs";
2
+ import { definePlugin } from "./plugin.cjs";
3
+ //#region src/lib/resolve-config.d.ts
4
+ /**
5
+ * Loads the user configuration file for the project.
6
+ *
7
+ * @param cwd - The current working directory.
8
+ * @param options - The options for the configuration.
9
+ * @returns The resolved configuration.
10
+ */
11
+ declare function resolveConfig(cwd: string, options: Options): Promise<Config>;
12
+ //#endregion
2
13
  //#region src/config.d.ts
3
14
  /**
4
15
  * Type helper to make it easier to use `razorwind.config.ts` files. Accepts a direct {@link UserConfig} object, or a function that returns it. The function receives a {@link ConfigParams} object.
@@ -29,5 +40,5 @@ declare function defineConfig(config: UserConfigFnPromise): UserConfigFnPromise;
29
40
  declare function defineConfig(config: UserConfigFn): UserConfigFn;
30
41
  declare function defineConfig(config: UserConfigExport): UserConfigExport;
31
42
  //#endregion
32
- export { type Config, type InputOptions, type UserConfig, type UserConfigExport, type UserConfigFn, type UserConfigFnObject, type UserConfigFnPromise, type UserConfigParams, defineConfig };
43
+ export { type Config, type Options, type Plugin, type TokensParser, type TokensPreprocessor, type UserConfig, type UserConfigExport, type UserConfigFn, type UserConfigFnObject, type UserConfigFnPromise, type UserConfigParams, defineConfig, definePlugin, resolveConfig };
33
44
  //# sourceMappingURL=config.d.cts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.cts","names":[],"sources":["../src/config.ts"],"mappings":";;;;;;;;;;;;;;;;;;;;;;iBAgDgB,aAAa,QAAQ,aAAa;iBAClC,aAAa,QAAQ,eAAe;iBACpC,aAAa,QAAQ,QAAQ,cAAc,QAAQ;iBACnD,aACd,QAAQ,QAAQ,gBACf,QAAQ;iBACK,aAAa,QAAQ,qBAAqB;iBAC1C,aAAa,QAAQ,sBAAsB;iBAC3C,aAAa,QAAQ,eAAe;iBACpC,aAAa,QAAQ,mBAAmB"}
1
+ {"version":3,"file":"config.d.cts","names":[],"sources":["../src/lib/resolve-config.ts","../src/config.ts"],"mappings":";;;;;;;;;;iBA8CsB,cACpB,aACA,SAAS,UACR,QAAQ;;;;;;;;;;;;;;;;;;;;;;;iBCEK,aAAa,QAAQ,aAAa;iBAClC,aAAa,QAAQ,eAAe;iBACpC,aAAa,QAAQ,QAAQ,cAAc,QAAQ;iBACnD,aACd,QAAQ,QAAQ,gBACf,QAAQ;iBACK,aAAa,QAAQ,qBAAqB;iBAC1C,aAAa,QAAQ,sBAAsB;iBAC3C,aAAa,QAAQ,eAAe;iBACpC,aAAa,QAAQ,mBAAmB"}
package/dist/config.d.mts CHANGED
@@ -1,4 +1,15 @@
1
- import { a as UserConfigFn, c as UserConfigParams, i as UserConfigExport, n as InputOptions, o as UserConfigFnObject, r as UserConfig, s as UserConfigFnPromise, t as Config } from "./config-CJi9Fu8b.mjs";
1
+ import { a as UserConfigFn, c as UserConfigParams, d as TokensPreprocessor, i as UserConfigExport, l as Plugin, n as Options, o as UserConfigFnObject, r as UserConfig, s as UserConfigFnPromise, t as Config, u as TokensParser } from "./config-DQHHeicR.mjs";
2
+ import { definePlugin } from "./plugin.mjs";
3
+ //#region src/lib/resolve-config.d.ts
4
+ /**
5
+ * Loads the user configuration file for the project.
6
+ *
7
+ * @param cwd - The current working directory.
8
+ * @param options - The options for the configuration.
9
+ * @returns The resolved configuration.
10
+ */
11
+ declare function resolveConfig(cwd: string, options: Options): Promise<Config>;
12
+ //#endregion
2
13
  //#region src/config.d.ts
3
14
  /**
4
15
  * Type helper to make it easier to use `razorwind.config.ts` files. Accepts a direct {@link UserConfig} object, or a function that returns it. The function receives a {@link ConfigParams} object.
@@ -29,5 +40,5 @@ declare function defineConfig(config: UserConfigFnPromise): UserConfigFnPromise;
29
40
  declare function defineConfig(config: UserConfigFn): UserConfigFn;
30
41
  declare function defineConfig(config: UserConfigExport): UserConfigExport;
31
42
  //#endregion
32
- export { type Config, type InputOptions, type UserConfig, type UserConfigExport, type UserConfigFn, type UserConfigFnObject, type UserConfigFnPromise, type UserConfigParams, defineConfig };
43
+ export { type Config, type Options, type Plugin, type TokensParser, type TokensPreprocessor, type UserConfig, type UserConfigExport, type UserConfigFn, type UserConfigFnObject, type UserConfigFnPromise, type UserConfigParams, defineConfig, definePlugin, resolveConfig };
33
44
  //# sourceMappingURL=config.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.mts","names":[],"sources":["../src/config.ts"],"mappings":""}
1
+ {"version":3,"file":"config.d.mts","names":[],"sources":["../src/lib/resolve-config.ts","../src/config.ts"],"mappings":""}
package/dist/config.mjs CHANGED
@@ -1,2 +1,2 @@
1
- function e(e){return e}export{e as defineConfig};
1
+ import{definePlugin as e}from"./plugin.mjs";import{t}from"./resolve-config-CBowa3KM.mjs";function n(e){return e}export{n as defineConfig,e as definePlugin,t as resolveConfig};
2
2
  //# sourceMappingURL=config.mjs.map
@@ -0,0 +1,2 @@
1
+ import{t as e}from"./resolve-config-CBowa3KM.mjs";import{l as t,t as n}from"./tokens-B8Dv91EB.mjs";import{r}from"./schema-Bxzw_P4l.mjs";import{isSetString as i}from"@stryke/type-checks/is-set-string";import{defineGenerator as a,defineSchema as o,useExecution as s}from"@power-plant/core";import{isEmptyObject as c}from"@stryke/type-checks/is-empty-object";import l from"style-dictionary";var u=a({meta:{name:`razorwind`,title:`Razorwind`,description:`A generator that uses Razorwind to generate design system code from design tokens and components.`,version:`0.0.7`,tags:[`razorwind`,`dtcg`]},schema:o({schema:r}),input:async r=>{let a=s();if(a.options=await e(a.cwd,r),a.options.plugins.length===0)throw Error(`Razorwind will not generate any code - no plugins configured. Please add at least one plugin to the configuration.`);t(a.options.plugins,l);let o=a.options.tokens;(!o||c(o))&&(o=await n(a.options,{cwd:a.cwd,tokensPath:i(a.options.tokensPath)?a.options.tokensPath:void 0}));let u={tokens:o??{},components:{}};for(let e of a.options.plugins.filter(e=>e.extract))u=await e.extract(u,a.options);if(!u.tokens||c(u.tokens))throw Error(`Unable to load design tokens for the current workspace. Please ensure that Razorwind is configured correctly and that the tokens are available.`);for(let e of a.options.plugins.filter(e=>e.validate))await e.validate(u,a.options);return u},generator:async e=>{let t=s(),n={};for(let r of t.options.plugins.filter(e=>e.generate)){let i=await r.generate(e,t.options);Object.assign(n,i)}return n}});export{u as t};
2
+ //# sourceMappingURL=generator-BWQOEMGt.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generator-BWQOEMGt.mjs","names":[],"sources":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ import{t as e}from"./resolve-config-CBowa3KM.mjs";import{l as t,t as n}from"./tokens-B8Dv91EB.mjs";import{r}from"./schema-Bxzw_P4l.mjs";import{isSetString as i}from"@stryke/type-checks/is-set-string";import{defineGenerator as a,defineSchema as o,useExecution as s}from"@power-plant/core";import{isEmptyObject as c}from"@stryke/type-checks/is-empty-object";import l from"style-dictionary";var u=a({meta:{name:`razorwind`,title:`Razorwind`,description:`A generator that uses Razorwind to generate design system code from design tokens and components.`,version:`0.0.6`,tags:[`razorwind`,`dtcg`]},schema:o({schema:r}),input:async r=>{let a=s();if(a.options=await e(a.cwd,r),a.options.plugins.length===0)throw Error(`Razorwind will not generate any code - no plugins configured. Please add at least one plugin to the configuration.`);t(a.options.plugins,l);let o=a.options.tokens;(!o||c(o))&&(o=await n(a.options,{cwd:a.cwd,tokensPath:i(a.options.tokensPath)?a.options.tokensPath:void 0}));let u={tokens:o??{},components:{}};for(let e of a.options.plugins.filter(e=>e.extract))u=await e.extract(u,a.options);if(!u.tokens||c(u.tokens))throw Error(`Unable to load design tokens for the current workspace. Please ensure that Razorwind is configured correctly and that the tokens are available.`);for(let e of a.options.plugins.filter(e=>e.validate))await e.validate(u,a.options);return u},generator:async e=>{let t=s(),n={};for(let r of t.options.plugins.filter(e=>e.generate)){let i=await r.generate(e,t.options);Object.assign(n,i)}return n}});export{u as t};
2
+ //# sourceMappingURL=generator-DQ1WS7hN.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generator-DQ1WS7hN.mjs","names":[],"sources":[],"mappings":""}
@@ -0,0 +1 @@
1
+ const e=require("./rolldown-runtime-CMqjfN_6.cjs"),t=require("./resolve-config-D7XXy_Qk.cjs"),n=require("./tokens-CoQWg4mX.cjs"),r=require("./schema-CLeH9GGy.cjs");let i=require("@stryke/type-checks/is-set-string"),a=require("@power-plant/core"),o=require("@stryke/type-checks/is-empty-object"),s=require("style-dictionary");s=e.t(s,1);var c=(0,a.defineGenerator)({meta:{name:`razorwind`,title:`Razorwind`,description:`A generator that uses Razorwind to generate design system code from design tokens and components.`,version:`0.0.7`,tags:[`razorwind`,`dtcg`]},schema:(0,a.defineSchema)({schema:r.t}),input:async e=>{let r=(0,a.useExecution)();if(r.options=await t.t(r.cwd,e),r.options.plugins.length===0)throw Error(`Razorwind will not generate any code - no plugins configured. Please add at least one plugin to the configuration.`);n.l(r.options.plugins,s.default);let c=r.options.tokens;(!c||(0,o.isEmptyObject)(c))&&(c=await n.t(r.options,{cwd:r.cwd,tokensPath:(0,i.isSetString)(r.options.tokensPath)?r.options.tokensPath:void 0}));let l={tokens:c??{},components:{}};for(let e of r.options.plugins.filter(e=>e.extract))l=await e.extract(l,r.options);if(!l.tokens||(0,o.isEmptyObject)(l.tokens))throw Error(`Unable to load design tokens for the current workspace. Please ensure that Razorwind is configured correctly and that the tokens are available.`);for(let e of r.options.plugins.filter(e=>e.validate))await e.validate(l,r.options);return l},generator:async e=>{let t=(0,a.useExecution)(),n={};for(let r of t.options.plugins.filter(e=>e.generate)){let i=await r.generate(e,t.options);Object.assign(n,i)}return n}});Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return c}});
@@ -0,0 +1 @@
1
+ const e=require("./rolldown-runtime-CMqjfN_6.cjs"),t=require("./resolve-config-D7XXy_Qk.cjs"),n=require("./tokens-CoQWg4mX.cjs"),r=require("./schema-CLeH9GGy.cjs");let i=require("@stryke/type-checks/is-set-string"),a=require("@power-plant/core"),o=require("@stryke/type-checks/is-empty-object"),s=require("style-dictionary");s=e.t(s,1);var c=(0,a.defineGenerator)({meta:{name:`razorwind`,title:`Razorwind`,description:`A generator that uses Razorwind to generate design system code from design tokens and components.`,version:`0.0.6`,tags:[`razorwind`,`dtcg`]},schema:(0,a.defineSchema)({schema:r.t}),input:async e=>{let r=(0,a.useExecution)();if(r.options=await t.t(r.cwd,e),r.options.plugins.length===0)throw Error(`Razorwind will not generate any code - no plugins configured. Please add at least one plugin to the configuration.`);n.l(r.options.plugins,s.default);let c=r.options.tokens;(!c||(0,o.isEmptyObject)(c))&&(c=await n.t(r.options,{cwd:r.cwd,tokensPath:(0,i.isSetString)(r.options.tokensPath)?r.options.tokensPath:void 0}));let l={tokens:c??{},components:{}};for(let e of r.options.plugins.filter(e=>e.extract))l=await e.extract(l,r.options);if(!l.tokens||(0,o.isEmptyObject)(l.tokens))throw Error(`Unable to load design tokens for the current workspace. Please ensure that Razorwind is configured correctly and that the tokens are available.`);for(let e of r.options.plugins.filter(e=>e.validate))await e.validate(l,r.options);return l},generator:async e=>{let t=(0,a.useExecution)(),n={};for(let r of t.options.plugins.filter(e=>e.generate)){let i=await r.generate(e,t.options);Object.assign(n,i)}return n}});Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return c}});
@@ -1,7 +1 @@
1
- var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},s=(n,r,a)=>(a=n==null?{}:e(i(n)),o(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n));let c=require("@power-plant/core"),l=require("@stryke/path/find"),u=require("@stryke/type-checks/is-set-string"),d=require("style-dictionary");d=s(d,1);let f=require("@stryke/fs/tsconfig"),p=require("@stryke/path/join"),m=require("chalk");m=s(m,1);let ee=require("cosmiconfig"),h=require("fast-glob");h=s(h,1);let g=require("node:path");g=s(g,1);let _=require("shadcn/schema");require("shadcn/preset");let v=require("@stryke/fs/json"),y=require("@stryke/fs/read-file"),b=require("node:fs"),te=require("node:fs/promises"),x=require("zod");x=s(x,1),require("@stryke/http/fetch"),require("@stryke/url/helpers");let S=require("@stryke/fs/get-workspace-root"),ne=require("tsconfig-paths"),re=require("@stryke/path/is-type"),C=require("@power-plant/dtcg-schema"),w=require("@stryke/fs/exists"),ie=require("@stryke/fs/resolve"),T=require("json5");T=s(T,1);let ae=require("smol-toml"),oe=require("yaml"),E=require("@stryke/fs/is-file");const D=process.env.REGISTRY_URL??`https://ui.shadcn.com/r`,O=D.replace(/\/r\/?$/,``),k={"next-app":{name:`next-app`,label:`Next.js`,links:{installation:`${O}/docs/installation/next`,tailwind:`https://tailwindcss.com/docs/guides/nextjs`}},"next-pages":{name:`next-pages`,label:`Next.js`,links:{installation:`${O}/docs/installation/next`,tailwind:`https://tailwindcss.com/docs/guides/nextjs`}},remix:{name:`remix`,label:`Remix`,links:{installation:`${O}/docs/installation/remix`,tailwind:`https://tailwindcss.com/docs/guides/remix`}},"react-router":{name:`react-router`,label:`React Router`,links:{installation:`${O}/docs/installation/react-router`,tailwind:`https://tailwindcss.com/docs/installation/framework-guides/react-router`}},vite:{name:`vite`,label:`Vite`,links:{installation:`${O}/docs/installation/vite`,tailwind:`https://tailwindcss.com/docs/guides/vite`}},astro:{name:`astro`,label:`Astro`,links:{installation:`${O}/docs/installation/astro`,tailwind:`https://tailwindcss.com/docs/guides/astro`}},laravel:{name:`laravel`,label:`Laravel`,links:{installation:`${O}/docs/installation/laravel`,tailwind:`https://tailwindcss.com/docs/guides/laravel`}},"tanstack-start":{name:`tanstack-start`,label:`TanStack Start`,links:{installation:`${O}/docs/installation/tanstack`,tailwind:`https://tailwindcss.com/docs/installation/using-postcss`}},gatsby:{name:`gatsby`,label:`Gatsby`,links:{installation:`${O}/docs/installation/gatsby`,tailwind:`https://tailwindcss.com/docs/guides/gatsby`}},expo:{name:`expo`,label:`Expo`,links:{installation:`${O}/docs/installation/expo`,tailwind:`https://www.nativewind.dev/docs/getting-started/installation`}},manual:{name:`manual`,label:`Manual`,links:{installation:`${O}/docs/installation/manual`,tailwind:`https://tailwindcss.com/docs/installation`}}};function A(e){let t=[e];for(;t.length;){let e=t.shift();if(typeof e==`string`){if(e.startsWith(`./`))return e;continue}if(Array.isArray(e)){t.unshift(...e);continue}e&&typeof e==`object`&&t.unshift(...Object.values(e))}return null}function se(e){if(!e.includes(`*`))return`strip_extension`;let t=e.slice(e.indexOf(`*`)+1);return t&&/^\.[^/]+$/.test(t)?`strip_extension`:`preserve_extension`}function ce(e,t){let n=t.find(t=>!t.hasWildcard&&t.key===e);if(n)return{path:g.default.resolve(n.rootDir,n.target),matchedAlias:n.key,matchedTarget:n.target,emitMode:n.emitMode};let r=t.filter(e=>e.hasWildcard).sort((e,t)=>t.key.length-e.key.length);for(let t of r){let n=le(e,t.key,{allowBareAliasBase:!0});if(n!==null)return{path:g.default.resolve(t.rootDir,ue(t.target,n)),matchedAlias:t.key,matchedTarget:t.target,emitMode:t.emitMode}}return null}function le(e,t,n={}){if(!t.includes(`*`))return e===t?``:null;let[r,i=``]=t.split(`*`);return r&&e.startsWith(r)&&e.endsWith(i)?i?e.slice(r.length,-i.length):e.slice(r.length):n.allowBareAliasBase&&i===``&&r&&r.endsWith(`/`)&&e===r.slice(0,-1)?``:null}function ue(e,t){if(!e.includes(`*`))return e;let[n,r=``]=e.split(`*`);return t?n?`${n}${t}${r}`:t:n?n.replace(/\/$/,``):``}const j=new Map;async function M(e){let t=g.default.resolve(e),n=j.get(t);if(n)return n;let r=(await N(e))?.imports;if(!r||typeof r!=`object`||Array.isArray(r))return j.set(t,[]),[];let i=[];for(let[e,n]of Object.entries(r)){if(!e.startsWith(`#`))continue;let r=A(n);r&&i.push({key:e,aliasBase:e===`#*`?`#`:e.endsWith(`/*`)?e.slice(0,-2):e,target:r,emitMode:se(r),hasWildcard:e.includes(`*`),rootDir:t})}return j.set(t,i),i}async function de(e){let t=(await M(e)).map(e=>e.aliasBase);return t.length?pe(t):null}async function fe(e,t){return ce(e,await M(t))}function pe(e){let t=e.map(e=>e.slice(1).split(`/`).filter(Boolean)).reduce((e,t,n)=>n?e.filter((e,n)=>t[n]===e):t,[]);return t.length?`#${t.join(`/`)}`:`#`}async function N(e=``){return(0,v.readJsonFile)(g.default.join(e,`package.json`))}const P=[`**/node_modules/**`,`.next`,`public`,`dist`,`build`],me=x.z.object({compilerOptions:x.z.object({paths:x.z.record(x.z.string(),x.z.string().or(x.z.array(x.z.string())))})});async function he(e,t){let[n,r,i,a,o,s,c,l]=await Promise.all([h.default.glob(`**/{next,vite,astro,app}.config.*|gatsby-config.*|composer.json|react-router.config.*`,{cwd:e,deep:3,ignore:P}),(0,te.access)((0,p.joinPaths)(e,`src`)).then(()=>!0).catch(()=>!1),xe(e),ve(e),_e(e,t?.configCssFile),F(e),be(e),N(e)]),u=(0,b.existsSync)((0,p.joinPaths)(e,`${r?`src/`:``}app`)),d={framework:k.manual,isSrcDir:r,isRSC:!1,isTsx:i,tailwindConfigFile:a,tailwindCssFile:o,tailwindVersion:s,frameworkVersion:null,aliasPrefix:c.prefix};if(n.find(e=>e.startsWith(`next.config.`))?.length)return d.framework=u?k[`next-app`]:k[`next-pages`],d.isRSC=u,d.frameworkVersion=await ge(d.framework,l),d;if(n.find(e=>e.startsWith(`astro.config.`))?.length)return d.framework=k.astro,d;if(n.find(e=>e.startsWith(`gatsby-config.`))?.length)return d.framework=k.gatsby,d;if(n.find(e=>e.startsWith(`composer.json`))?.length)return d.framework=k.laravel,d;if(Object.keys(l?.dependencies??{}).find(e=>e.startsWith(`@remix-run/`)))return d.framework=k.remix,d;if([...Object.keys(l?.dependencies??{}),...Object.keys(l?.devDependencies??{})].find(e=>e.startsWith(`@tanstack/react-start`)))return d.framework=k[`tanstack-start`],d;if(n.find(e=>e.startsWith(`react-router.config.`))?.length)return d.framework=k[`react-router`],d;if(n.find(e=>e.startsWith(`vite.config.`))?.length)return d.framework=k.vite,d;let f=n.find(e=>e.startsWith(`app.config`));return f?.length&&(await(0,y.readFile)((0,p.joinPaths)(e,f))).includes(`defineConfig`)?(d.framework=k.vite,d):(l?.dependencies?.expo&&(d.framework=k.expo),d)}async function ge(e,t){if(!t||![`next-app`,`next-pages`].includes(e.name))return null;let n=t.dependencies?.next||t.devDependencies?.next;if(!n)return null;let r=n.match(/^[\^~]?(\d+\.\d+\.\d+)/);if(r)return r[1]??null;let i=n.match(/(\d+\.\d+\.\d+)/);return i?i[1]??null:n}async function F(e){let[t,n]=await Promise.all([N(e),Re(e)]);return n?.tailwind?.config===``?`v4`:!t?.dependencies?.tailwindcss&&!t?.devDependencies?.tailwindcss?null:/^(?:\^|~)?3(?:\.\d+)*(?:-.*)?$/.test(t?.dependencies?.tailwindcss||t?.devDependencies?.tailwindcss||``)?`v3`:`v4`}async function _e(e,t){if(t&&(0,b.existsSync)(g.default.resolve(e,t)))return t;let[n]=await Promise.all([h.default.glob([`**/*.css`,`**/*.scss`],{cwd:e,deep:5,ignore:P}),F(e)]);if(!n.length)return null;for(let t of n){let n=await(0,y.readFile)((0,p.joinPaths)(e,t));if(n.includes(`@import "tailwindcss"`)||n.includes(`@import 'tailwindcss'`)||n.includes(`@tailwind base`))return t}return null}async function ve(e){let t=await h.default.glob(`tailwind.config.*`,{cwd:e,deep:3,ignore:P});return t.length?t[0]??null:null}async function ye(e){let t=await Se(e),n=Object.entries(t?.compilerOptions.paths??{}).length?t?.compilerOptions.paths:null;if(!n||!Object.entries(n).length)return null;for(let[e,t]of Object.entries(n)){let n=Array.isArray(t)?t:[t];if(n.includes(`./*`)||n.includes(`./src/*`)||n.includes(`./app/*`)||n.includes(`./resources/js/*`))return e.replace(/\/\*$/,``)??null}return Object.keys(n)?.[0]?.replace(/\/\*$/,``)??null}async function be(e){let t=await ye(e),n=await de(e);return n&&t?.startsWith(`#`)?{prefix:n,source:`package_imports`}:t?{prefix:t,source:`tsconfig_paths`}:n?{prefix:n,source:`package_imports`}:{prefix:null,source:null}}async function xe(e){return(await h.default.glob(`tsconfig.*`,{cwd:e,deep:1,ignore:P})).length>0}async function Se(e){for(let t of[`tsconfig.json`,`tsconfig.web.json`,`tsconfig.app.json`]){let n=g.default.resolve(e,t);if(!(0,b.existsSync)(n))continue;let r=await(0,y.readFile)(n),i;try{i=JSON.parse(Ce(r))}catch{continue}let a=me.safeParse(i);if(!a.error)return a.data}return null}function Ce(e){let t=``,n=!1,r=!1;for(let i=0;i<e.length;i++){let a=e[i],o=e[i+1];if(n){if(t+=a,r){r=!1;continue}if(a===`\\`){r=!0;continue}a===`"`&&(n=!1);continue}if(a===`"`){n=!0,t+=a;continue}if(a===`/`&&o===`/`){for(;i<e.length&&e[i]!==`
2
- `;)i++;i<e.length&&(t+=e[i]);continue}if(a===`/`&&o===`*`){for(i+=2;i<e.length;){if(e[i]===`*`&&e[i+1]===`/`){i++;break}e[i]===`
3
- `&&(t+=`
4
- `),i++}continue}if(a===`,`){let t=i+1;for(;t<e.length;){for(;/\s/.test(e[t]??``);)t++;if(e[t]===`/`&&e[t+1]===`/`){for(t+=2;t<e.length&&e[t]!==`
5
- `&&e[t]!==`\r`;)t++;continue}if(e[t]===`/`&&e[t+1]===`*`){for(t+=2;t<e.length&&(e[t]!==`*`||e[t+1]!==`/`);)t++;t+=2;continue}break}if(e[t]===`}`||e[t]===`]`)continue}t+=a}return t}function we(e){if(e.startsWith(`#`)||e.startsWith(`.`)||(0,re.isAbsolute)(e))return null;let t=e.split(`/`);return e.startsWith(`@`)?t.length<2?null:{packageName:`${t[0]}/${t[1]}`}:{packageName:t[0]}}const Te=new Map,I=new Map;function Ee(e){let t=[],n=!1,r=0;for(let i of e.split(`
6
- `)){let e=i.trim();if(!e||e.startsWith(`#`))continue;let a=i.match(/^(\s*)([\w-]+)\s*:/);if(a){r=a[1]?.length??0,n=a[2]===`packages`;continue}if(!n)continue;let o=i.match(/^(\s*)-\s*(.+?)\s*(?:#.*)?$/);((!o||o[1]?.length)??r>=0)||t.push(o[2]?.trim().replace(/^["']|["']$/g,``)??``)}return t}async function De(e){let t=[],n=g.default.resolve(e,`pnpm-workspace.yaml`);if((0,b.existsSync)(n)){let e=await(0,y.readFile)(n);t.push(...Ee(e))}let r=(0,p.joinPaths)(e,`package.json`);if((0,b.existsSync)(r))try{let e=(await(0,v.readJsonFile)(r)).workspaces,n=Array.isArray(e)?e:e?.packages;Array.isArray(n)&&t.push(...n.filter(e=>!e.startsWith(`!`)))}catch{}return Array.from(new Set(t))}async function Oe(e){let t=await De(e),n=new Map;if(!t.length)return n;let r=await(0,h.default)(t.map(e=>g.default.posix.join(e.split(g.default.sep).join(`/`),`package.json`)),{cwd:e,ignore:[`**/node_modules/**`]});for(let t of r){let r=g.default.resolve(e,g.default.dirname(t)),i=(await N(r))?.name;i&&n.set(i,{packageName:i,packageRoot:r})}return n}async function ke(e,t){let n=(0,S.getWorkspaceRoot)(e);if(!n)return null;let r=Te.get(n);if(r?.has(t))return r.get(t)??null;let i=await Oe(n);return Te.set(n,i),i.get(t)??null}function Ae(e,t){if(t===`.`)return e;let n=t.slice(2).replace(/\/\*$/,``);return n?`${e}/${n}`:e}async function je(e){let t=`${e.packageRoot}:${e.packageName}`,n=I.get(t);if(n)return n;let r=(await N(e.packageRoot))?.exports;if(!r||typeof r!=`object`||Array.isArray(r))return I.set(t,[]),[];let i=[];for(let[t,n]of Object.entries(r)){if(t!==`.`&&!t.startsWith(`./`))continue;let r=A(n);if(!r)continue;let a=Ae(e.packageName,t);i.push({key:t.includes(`*`)?`${a}/*`:a,aliasBase:a,target:r,emitMode:se(r),hasWildcard:t.includes(`*`),rootDir:e.packageRoot})}return I.set(t,i),i}async function Me(e,t){let n=we(e);if(!n?.packageName)return null;let r=await ke(t,n.packageName);return r?ce(e,await je(r)):null}async function Ne(e,t){let n=t.cwd??t.baseUrl??(0,S.getWorkspaceRoot)();if(e.startsWith(`#`)){let t=await fe(e,n);if(t)return{path:t.path,source:`package_imports`,matchedAlias:t.matchedAlias,matchedTarget:t.matchedTarget,emitMode:t.emitMode}}let r=await Me(e,n);return r?{path:r.path,source:`workspace_package_exports`,matchedAlias:r.matchedAlias,matchedTarget:r.matchedTarget,emitMode:r.emitMode}:Fe(e,t)}function Pe(e){return/^@[^/]+\/[^/]+(?:\/.*)?$/.test(e)}function Fe(e,t){let n=(0,ne.createMatchPath)(t.baseUrl||t.cwd||(0,S.getWorkspaceRoot)(),t.paths??{})(e,void 0,()=>!0,[`.ts`,`.tsx`,`.jsx`,`.js`,`.css`]);if(!n)return null;let r=Ie(e,t.paths??{});return!r&&Pe(e)?null:{path:n,source:`tsconfig_paths`,matchedAlias:r?.key??e,matchedTarget:r?.target??n,emitMode:`strip_extension`}}function Ie(e,t){for(let[n,r]of Object.entries(t)){let t=Array.isArray(r)?r:[r],i=le(e,n);if(i!==null)return{key:n,target:t[0]?.includes(`*`)&&i!==null?t[0].replace(/\*/g,i):t[0]}}return null}const Le=(0,ee.cosmiconfig)(`components`,{searchPlaces:[`components.json`]});async function Re(e){let t=await Ve(e);return t?(t.iconLibrary||=t.style===`new-york`?`radix`:`lucide`,ze(e,t)):null}const L={"@shadcn":`${D}/styles/{style}/{name}.json`};async function ze(e,t){t.registries={...L,...t.registries??{}};let n=await(0,f.loadTsConfig)(e);if(!n)throw Error(`Failed to load tsconfig.json.`);let r=await R(`utils`,t.aliases.utils,e,n),i=await R(`components`,t.aliases.components,e,n),a=t.aliases.ui?await R(`ui`,t.aliases.ui,e,n):g.default.resolve(i??e,`ui`),o=t.aliases.lib?await R(`lib`,t.aliases.lib,e,n):g.default.resolve(r??e,`..`),s=t.aliases.hooks?await R(`hooks`,t.aliases.hooks,e,n):g.default.resolve(i??e,`..`,`hooks`);return Be(e,{components:i,utils:r,ui:a,lib:o,hooks:s}),_.configSchema.parse({...t,resolvedPaths:{cwd:e,tailwindConfig:t.tailwind.config?g.default.resolve(e,t.tailwind.config):``,tailwindCss:g.default.resolve(e,t.tailwind.css),utils:r,components:i,ui:a,lib:o,hooks:s}})}async function R(e,t,n,r){let i=await Ne(t,{...r,cwd:n});if(!i?.path||t.startsWith(`#`)&&i.path===(0,p.joinPaths)(n,t))return null;if(e!==`utils`&&(i.source===`package_imports`||i.source===`workspace_package_exports`)){if(!i.matchedAlias.includes(`*`)&&/\/index\.[^/]+$/.test(i.path))return g.default.dirname(i.path);if(i.matchedAlias.includes(`*`)&&/\.[^/]+$/.test(i.path))return i.path.replace(/\.[^/]+$/,``)}return i.path}function Be(e,t){let n=[`components`,`ui`,`lib`,`hooks`,`utils`].filter(e=>!t[e]);if(n.length)throw Error([`Could not resolve the following aliases in ${m.default.cyan(e)}: ${m.default.cyan(n.join(`, `))}.`,`Configure path aliases in ${m.default.cyan(`tsconfig.json`)} or imports in ${m.default.cyan(`package.json`)} for this workspace and try again.`].join(`
7
- `))}async function Ve(e){try{let t=await Le.search(e);if(!t)return null;let n=_.rawConfigSchema.parse(t.config);if(n.registries){for(let e of Object.keys(n.registries))if(e in L)throw Error(`"${e}" is a built-in registry and cannot be overridden.`)}return n}catch(t){let n=`${e}/components.json`;throw t instanceof Error&&t.message.includes(`reserved registry`)?t:Error(`Invalid configuration found in ${m.default.cyan(n)}.`)}}function He(e){let t={resolvedPaths:{cwd:process.cwd(),tailwindConfig:``,tailwindCss:``,utils:``,components:``,ui:``,lib:``,hooks:``},style:``,tailwind:{config:``,css:``,baseColor:``,cssVariables:!1},rsc:!1,tsx:!0,aliases:{components:``,utils:``},registries:{...L}};return e?{...t,...e,resolvedPaths:{...t.resolvedPaths,...e.resolvedPaths??{}},tailwind:{...t.tailwind,...e.tailwind??{}},aliases:{...t.aliases,...e.aliases??{}},registries:{...t.registries,...e.registries??{}}}:t}const Ue=x.z.object({category:x.z.enum([`block`,`component`,`ui`,`page`]),name:x.z.string(),title:x.z.string(),description:x.z.string().optional(),tags:x.z.array(x.z.string()).optional(),related:x.z.array(x.z.string()).optional(),since:x.z.string().optional(),version:x.z.string().optional(),repository:x.z.string().optional(),homepage:x.z.string().optional(),dependencies:x.z.record(x.z.string(),x.z.string()).optional(),registryDependencies:x.z.record(x.z.string(),x.z.string()).optional(),files:x.z.array(x.z.string()).optional()});x.z.record(x.z.string(),Ue);function We(e){return x.default.unknown().transform((t,n)=>{let r=e.safeParse(t);if(!r.success){for(let e of r.error.issues)n.addIssue({code:`custom`,message:e.message,path:e.path});return x.default.NEVER}return r.data})}const Ge=x.default.union([C.tokensSchema,x.default.record(x.default.string(),C.tokensSchema)]),Ke=x.default.object({registry:We(_.configSchema),tokens:Ge}),qe=[`razorwind-json`,`razorwind-yaml`,`razorwind-toml`,`razorwind-css`],z=[`json`,`json5`,`jsonc`,`yaml`,`yml`,`toml`,`css`,`js`,`mjs`,`cjs`,`ts`,`mts`,`cts`],Je=z.join(`,`),Ye=[`tokens.json`,`tokens.json5`,`tokens.jsonc`,`tokens.yaml`,`tokens.yml`,`tokens.toml`,`tokens.css`,`design-tokens.json`,`design-tokens.yaml`,`design-tokens.yml`,`tokens`,`design-tokens`,`src/tokens`,`src/design-tokens`,`packages/tokens`,`style-dictionary.config.js`,`style-dictionary.config.mjs`,`style-dictionary.config.ts`,`sd.config.js`,`sd.config.mjs`,`sd.config.ts`],Xe=`**/*.{${Je}}`,Ze=/^(light|dark|dim|high-contrast|hc|default|base|theme)([._-].+)?$/i,Qe={color:`color`,colours:`color`,colors:`color`,colour:`color`,palette:`color`,bg:`color`,background:`color`,foreground:`color`,fg:`color`,border:`color`,fill:`color`,stroke:`color`,spacing:`dimension`,space:`dimension`,size:`dimension`,sizes:`dimension`,sizing:`dimension`,gap:`dimension`,radius:`dimension`,radii:`dimension`,rounded:`dimension`,width:`dimension`,height:`dimension`,dimension:`dimension`,dimensions:`dimension`,duration:`duration`,durations:`duration`,time:`duration`,delay:`duration`,animation:`duration`,motion:`duration`,transition:`duration`,font:`fontFamily`,fonts:`fontFamily`,fontfamily:`fontFamily`,"font-family":`fontFamily`,typeface:`fontFamily`,fontweight:`fontWeight`,"font-weight":`fontWeight`,weight:`fontWeight`,opacity:`number`,opacities:`number`,zindex:`number`,"z-index":`number`,lineheight:`number`,"line-height":`number`,letterspacing:`dimension`,"letter-spacing":`dimension`,shadow:`shadow`,shadows:`shadow`,elevation:`shadow`,gradient:`gradient`,gradients:`gradient`,typography:`typography`,text:`typography`,cubicbezier:`cubicBezier`,easing:`cubicBezier`,ease:`cubicBezier`},$e=/^#(?:[0-9a-f]{3}|[0-9a-f]{4}|[0-9a-f]{6}|[0-9a-f]{8})$/i,et=/^rgba?\(\s*([+\d.]+%?)[\x09-\x0D\xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF]*(?: |(?: \s*)?,)\s*([+\d.]+%?)[\x09-\x0D\xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF]*(?: |(?: \s*)?,)\s*([+\d.]+%?)(?:\s*[,/]\s*([+\d.]+%?))?\s*\)$/i,tt=/^hsla?\(\s*([+\d.]+)[\x09-\x0D\xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF]*(?: |(?: \s*)?,)\s*([+\d.]+)%[\x09-\x0D\xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF]*(?: |(?: \s*)?,)\s*([+\d.]+)%(?:\s*[,/]\s*([+\d.]+%?))?\s*\)$/i,nt=/^oklch\(\s*([+\d.]+%?|none)\s+([+\d.]+|none)\s+([+\d.]+|none)(?:\s*\/\s*([+\d.]+%?))?\s*\)$/i,rt=/^([+-]?(?:\d+(?:\.\d+)?|\.\d+))\s*(px|rem|em|%|vh|vw|vmin|vmax|ch|ex|cm|mm|in|pt|pc)$/i,it=/^([+-]?(?:\d+(?:\.\d+)?|\.\d+))\s*(ms|s)$/i,at=/^cubic-bezier\(\s*([+-]?(?:\d+(?:\.\d+)?|\.\d+))\s*,\s*([+-]?(?:\d+(?:\.\d+)?|\.\d+))\s*,\s*([+-]?(?:\d+(?:\.\d+)?|\.\d+))\s*,\s*([+-]?(?:\d+(?:\.\d+)?|\.\d+))\s*\)$/i,ot=/^var\(\s*(--[\w-]+)\s*(?:,\s*(?:\S.*|[\t\v\f \xA0\u1680\u2000-\u200A\u202F\u205F\u3000\uFEFF]))?\)\s*$/i,st=/^\{[^{}]+\}$/,ct={thin:100,hairline:100,extralight:200,"extra-light":200,ultralight:200,light:300,normal:400,regular:400,book:400,medium:500,semibold:600,"semi-bold":600,demibold:600,bold:700,extrabold:800,"extra-bold":800,ultrabold:800,black:900,heavy:900},B=new Set([`px`,`rem`]);function V(e){return Math.min(1,Math.max(0,e))}function H(e,t=100){let n=e.trim();if(n.endsWith(`%`))return V(Number.parseFloat(n)/t);let r=Number.parseFloat(n);return V(r>1?r/255:r)}function lt(e){let t=e.slice(1);return t.length===3||t.length===4?`#${[...t].map(e=>e+e).join(``)}`:(e.length===7||e.length,e)}function ut(e){let t=lt(e.toLowerCase()).slice(1),n=Number.parseInt(t.slice(0,2),16)/255,r=Number.parseInt(t.slice(2,4),16)/255,i=Number.parseInt(t.slice(4,6),16)/255,a=t.length===8?Number.parseInt(t.slice(6,8),16)/255:void 0;return{colorSpace:`srgb`,components:[n,r,i],...a===void 0||a===1?{}:{alpha:a},hex:`#${t.slice(0,6)}`}}function dt(e){return`{${e.replace(/^--/,``).split(`-`).filter(Boolean).join(`.`)}}`}function U(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function W(e){return`$value`in e||`value`in e||`$ref`in e||`ref`in e}function G(e){for(let t=e.length-1;t>=0;t--){let n=e[t]?.toLowerCase();if(!n)continue;let r=Qe[n];if(r)return r}}function K(e,t=[]){let n=G(t);if(typeof e==`string`){let r=e.trim();if(st.test(r))return{value:r,type:n};let i=r.match(ot);if(i?.[1])return{value:dt(i[1]),type:n};if($e.test(r))return{value:ut(r),type:`color`};let a=r.match(et);if(a){let e=[H(a[1]),H(a[2]),H(a[3])],t=a[4]?a[4].endsWith(`%`)?V(Number.parseFloat(a[4])/100):V(Number.parseFloat(a[4])):void 0;return{value:{colorSpace:`srgb`,components:e,...t===void 0||Number.isNaN(t)?{}:{alpha:t}},type:`color`}}let o=r.match(tt);if(o)return{value:{colorSpace:`hsl`,components:[Number.parseFloat(o[1]),Number.parseFloat(o[2]),Number.parseFloat(o[3])],...o[4]?{alpha:o[4].endsWith(`%`)?V(Number.parseFloat(o[4])/100):V(Number.parseFloat(o[4]))}:{}},type:`color`};let s=r.match(nt);if(s){let e=e=>e===`none`?`none`:e.endsWith(`%`)?Number.parseFloat(e)/100:Number.parseFloat(e);return{value:{colorSpace:`oklch`,components:[e(s[1]),e(s[2]),e(s[3])],...s[4]?{alpha:s[4].endsWith(`%`)?V(Number.parseFloat(s[4])/100):V(Number.parseFloat(s[4]))}:{}},type:`color`}}let c=r.match(rt);if(c){let e=c[2].toLowerCase(),t=Number.parseFloat(c[1]);return B.has(e)?{value:{value:t,unit:e},type:`dimension`}:{value:r,type:n===`dimension`?void 0:n}}let l=r.match(it);if(l)return{value:{value:Number.parseFloat(l[1]),unit:l[2].toLowerCase()},type:`duration`};let u=r.match(at);if(u)return{value:[Number.parseFloat(u[1]),Number.parseFloat(u[2]),Number.parseFloat(u[3]),Number.parseFloat(u[4])],type:`cubicBezier`};let d=ct[r.toLowerCase()];return d===void 0?n===`fontFamily`||/family|font|typeface/i.test(t.at(-1)??``)?r.includes(`,`)?{value:r.split(`,`).map(e=>e.trim().replace(/^["']|["']$/g,``)),type:`fontFamily`}:{value:r.replace(/^["']|["']$/g,``),type:`fontFamily`}:n===`color`&&!r.startsWith(`{`)?{value:r,type:void 0}:{value:r,type:n}:{value:d,type:`fontWeight`}}if(typeof e==`number`)return n===`fontWeight`?{value:e,type:`fontWeight`}:n===`duration`?{value:{value:e,unit:`ms`},type:`duration`}:n===`dimension`?{value:{value:e,unit:`px`},type:`dimension`}:{value:e,type:n??`number`};if(Array.isArray(e))return e.length===4&&e.every(e=>typeof e==`number`)&&(n===`cubicBezier`||t.some(e=>/ease|bezier/i.test(e)))?{value:e,type:`cubicBezier`}:e.every(e=>typeof e==`string`)?{value:e,type:n??`fontFamily`}:{value:e,type:n};if(U(e)){if(`colorSpace`in e&&`components`in e)return{value:e,type:`color`};if(`value`in e&&`unit`in e){let t=String(e.unit).toLowerCase();return t===`ms`||t===`s`?{value:e,type:`duration`}:B.has(t)?{value:e,type:`dimension`}:{value:e,type:n}}}return{value:e,type:n}}function ft(e,t){let n={...e};if(`value`in n&&!(`$value`in n)&&(n.$value=n.value,delete n.value),`type`in n&&!(`$type`in n)&&(n.$type=n.type,delete n.type),`comment`in n&&!(`$description`in n)&&(n.$description=n.comment,delete n.comment),`description`in n&&!(`$description`in n)&&(n.$description=n.description,delete n.description),`ref`in n&&!(`$ref`in n)&&(n.$ref=n.ref,delete n.ref),`$value`in n){let e=K(n.$value,t);n.$value=e.value,!(`$type`in n)&&e.type&&(n.$type=e.type)}return n}function q(e,t=[]){if(Array.isArray(e))return e.map((e,n)=>q(e,[...t,String(n)]));if(!U(e))return e;if(W(e))return ft(e,t);let n={};for(let[r,i]of Object.entries(e)){if(r.startsWith(`$`)){n[r]=i;continue}n[r]=q(i,[...t,r])}if(!(`$type`in n)){let e=G(t);e&&t.length>0&&(n.$type=e)}return n}function J(e){let t={};for(let[n,r]of Object.entries(e)){let e=n.replace(/^--/,``).split(/[-./]/).filter(Boolean);if(e.length===0)continue;let i=t;for(let t=0;t<e.length-1;t++){let n=e[t],r=i[n];U(r)?W(r)&&(i[n]={DEFAULT:r}):i[n]={},i=i[n]}let a=e.at(-1),o=K(r,e),s={$value:o.value,...o.type?{$type:o.type}:{}},c=i[a];U(c)&&!W(c)?c.DEFAULT=s:i[a]=s}return q(t)}const pt=/(--[A-Z_][\w-]*)\s*:\s*([^;}{]+?)(?=\s*(?:;|\}|$))/gi;function mt(e){let t={},n=e.replace(/\/\*[\s\S]*?\*\//g,``);for(let e of n.matchAll(pt)){let n=e[1],r=e[2]?.trim();!n||!r||(t[n]=r)}return J(t)}const Y=`razorwind-infer`;function X(e){if(e==null)return{};if(typeof e!=`object`||Array.isArray(e))throw TypeError(`Token file must parse to a plain object.`);return q(e)}function ht(e){try{return X(T.default.parse(e))}catch(e){let t=e instanceof Error?e.message:String(e);throw Error(`Failed to parse JSON token file: ${t}`)}}function gt(e){try{return X((0,oe.parse)(e))}catch(e){let t=e instanceof Error?e.message:String(e);throw Error(`Failed to parse YAML token file: ${t}`)}}function _t(e){try{return X((0,ae.parse)(e))}catch(e){let t=e instanceof Error?e.message:String(e);throw Error(`Failed to parse TOML token file: ${t}`)}}const vt=[{name:`razorwind-json`,pattern:/\.json[c5]?$/i,parser:({contents:e})=>ht(e)},{name:`razorwind-yaml`,pattern:/\.ya?ml$/i,parser:({contents:e})=>gt(e)},{name:`razorwind-toml`,pattern:/\.toml$/i,parser:({contents:e})=>_t(e)},{name:`razorwind-css`,pattern:/\.css$/i,parser:({contents:e})=>q(mt(e))}];function yt(){return Object.fromEntries(vt.map(({name:e,pattern:t,parser:n})=>[e,{pattern:t,parser:n}]))}function bt(e){return q(e)}function xt(){return{[Y]:bt}}function St(e=d.default){for(let t of vt)e.registerParser(t);e.registerPreprocessor({name:Y,preprocessor:bt})}function Z(e,t){return(0,g.isAbsolute)(t)?t:(0,g.resolve)(e,t)}function Q(e){return/\.([^.]+)$/.exec(e)?.[1]?.toLowerCase()??``}function Ct(e){return z.includes(Q(e))}function wt(e){let t=e.split(/[/\\]/).pop()?.toLowerCase()??``;return t.startsWith(`style-dictionary.config.`)||t.startsWith(`sd.config.`)}function Tt(e){return(0,p.joinPaths)(e,Xe)}function Et(e){let{cwd:t,tokensPath:n,fallbackPaths:r=[]}=e;if(n){let e=Z(t,n);if(!(0,w.existsSync)(e))throw Error(`tokensPath "${n}" does not exist (resolved: ${e}).`);return(0,E.isDirectory)(e)?{resolvedPath:e,source:[Tt(e)],origin:`tokensPath`}:wt(e)?{resolvedPath:e,source:[],origin:`tokensPath`}:{resolvedPath:e,source:[e],origin:`tokensPath`}}for(let e of Ye){let n=Z(t,e);if((0,w.existsSync)(n)){if((0,E.isDirectory)(n))return{resolvedPath:n,source:[Tt(n)],origin:`default`};if(wt(n))return{resolvedPath:n,source:[],origin:`default`};if(Ct(n))return{resolvedPath:n,source:[n],origin:`default`}}}for(let e of r){if(!e)continue;let n=Z(t,e);if(!(!(0,w.existsSync)(n)||(0,E.isDirectory)(n))&&(Ct(n)||Q(n)===`css`))return{resolvedPath:n,source:[n],origin:`fallback`}}return{source:[],origin:`none`}}function Dt(e){return(e.split(/[/\\]/).pop()??``).replace(/\.[^.]+$/,``).match(Ze)?.[1]?.toLowerCase()}let Ot=!1;function kt(){Ot||=(St(d.default),!0)}function At(e){return!e||typeof e!=`object`||Object.keys(e).length===0}async function jt(e){let t=await(0,ie.importModule)(e);return t&&typeof t==`object`&&`default`in t&&t.default?t.default:t}async function Mt(e){kt();let t=new d.default({...e,parsers:[...qe,...e.parsers??[]],preprocessors:[Y,...e.preprocessors??[]],hooks:{...e.hooks,parsers:{...yt(),...e.hooks?.parsers},preprocessors:{...xt(),...e.hooks?.preprocessors}},usesDtcg:e.usesDtcg??!0,platforms:e.platforms??{}});return await t.hasInitialized,t}async function $(e){return e.length===0?{}:(await Mt({source:e})).tokens}async function Nt(e){return(await(0,h.default)(e,{absolute:!0,onlyFiles:!0,unique:!0})).sort()}async function Pt(e){let t=await Nt(e);if(t.length===0)return{};let n=new Map,r=[];for(let e of t){let t=Dt(e);if(t){let r=n.get(t)??[];r.push(e),n.set(t,r)}else r.push(e)}if(n.size<2)return $(e);let i={};if(r.length>0){let e=await $(r);At(e)||(i.base=e)}for(let[e,t]of n)i[e]=await $(t);return i}async function Ft(e){let{splitThemes:t=!0,...n}=e,r=Et(n);return r.resolvedPath&&(0,w.existsSync)(r.resolvedPath)&&/(?:^|[/\\])(?:style-dictionary|sd)\.config\./i.test((0,g.basename)(r.resolvedPath))?(await Mt(await jt(r.resolvedPath))).tokens:r.source.length===0?{}:t?Pt(r.source):$(r.source)}async function It(){try{return await import(`@tailwindcss/node`)}catch(e){throw Error(`Cannot load '@tailwindcss/node'. Install tailwindcss v4 / @tailwindcss/node to extract workspace theme tokens.`,{cause:e})}}function Lt(e,t){return(0,g.isAbsolute)(t)?t:(0,g.resolve)(e,t)}async function Rt(e,t){let n=await he(e,{configCssFile:t??void 0});if(n?.tailwindVersion)return{configured:!!n.tailwindCssFile,version:n.tailwindVersion,cssFile:n.tailwindCssFile,configFile:n.tailwindConfigFile};let[r,i]=await Promise.all([F(e),_e(e,t??void 0)]);return{configured:!!(r&&i),version:r,cssFile:i,configFile:null}}function zt(e,t){for(let n of t){if(!(0,u.isSetString)(n))continue;let t=Lt(e,n);if((0,w.existsSync)(t))return t}return null}async function Bt(e){let{cwd:t,cssPath:n,omitDefaults:r=!1}=e,i=await Rt(t,n);if(!i.configured||i.version!==`v4`)return null;let a=zt(t,[n,i.cssFile]);if(!a)return null;let o=await(0,y.readFile)(a),s=await(await It()).__unstable__loadDesignSystem(o,{base:(0,g.dirname)(a)}),c={};for(let[e,t]of s.theme.entries())r&&(t.options&4)==4||!e.startsWith(`--`)||!t.value||(c[e]=t.value);return Object.keys(c).length===0?null:J(c)}function Vt(e){return!e||typeof e!=`object`||Object.keys(e).length===0}var Ht=(0,c.defineGenerator)({meta:{name:`razorwind`,title:`Razorwind`,description:`A generator that uses Razorwind to generate design system code from design tokens and components.`,version:`1.0`,tags:[`razorwind`,`dtcg`]},schema:(0,c.defineSchema)({schema:Ke}),input:async e=>{let{registryPath:t,tokensPath:n}=e,{cwd:r}=(0,c.useExecution)(),i=(0,u.isSetString)(t)?(0,l.findFilePath)(t):r,a=await Re(i)??He({resolvedPaths:{cwd:i}});St(d.default);let o=[a.resolvedPaths?.tailwindCss,a.tailwind?.css],s;if((0,u.isSetString)(n))s=await Ft({cwd:r,tokensPath:n});else{let e=await Rt(r,a.tailwind?.css);e.configured&&e.version===`v4`&&(s=await Bt({cwd:r,cssPath:a.resolvedPaths?.tailwindCss??a.tailwind?.css??e.cssFile})),Vt(s)&&(s=await Ft({cwd:r,fallbackPaths:o}))}return{registry:a,tokens:s??{}}},generator:async(e,t)=>({})});module.exports=Ht;
1
+ const e=require("./generator-DjAElWpu.cjs");module.exports=e.t;
@@ -1,13 +1,13 @@
1
- import { t as Config } from "./config-CJi9Fu8b.cjs";
2
- import { t as Schema } from "./index-DCXWFAYS.cjs";
1
+ import { t as Schema } from "./schema-1EWJvc56.cjs";
2
+ import { n as Options } from "./config-Dj6RrLde.cjs";
3
+ import "./index-COAOe8bR.cjs";
3
4
  //#region src/generator.d.ts
4
5
  /**
5
6
  * A Power Plant generator for Razorwind.
6
7
  *
7
- * @param spec - The Razorwind schema to generate from.
8
- * @param options - Razorwind config (plugins, outDir, lint, …).
9
- * @returns Generated documents keyed by output filename.
8
+ * Orchestrates configured {@link Plugin}s: Style Dictionary parsers /
9
+ * preprocessors, then `extract` `validate` on input, then `generate`.
10
10
  */
11
- declare const _default: import("@power-plant/core").GeneratorConfigObject<Schema, Config, void>;
11
+ declare const _default: import("@power-plant/core").GeneratorConfigObject<Schema, Options, void>;
12
12
  export = _default;
13
13
  //# sourceMappingURL=generator.d.cts.map
@@ -1,14 +1,14 @@
1
- import { t as Config } from "./config-CJi9Fu8b.mjs";
2
- import { t as Schema } from "./index-8xt23rlo.mjs";
1
+ import { t as Schema } from "./schema-BNfl9Tsw.mjs";
2
+ import { n as Options } from "./config-DQHHeicR.mjs";
3
+ import "./index--y-fo2Lr.mjs";
3
4
  //#region src/generator.d.ts
4
5
  /**
5
6
  * A Power Plant generator for Razorwind.
6
7
  *
7
- * @param spec - The Razorwind schema to generate from.
8
- * @param options - Razorwind config (plugins, outDir, lint, …).
9
- * @returns Generated documents keyed by output filename.
8
+ * Orchestrates configured {@link Plugin}s: Style Dictionary parsers /
9
+ * preprocessors, then `extract` `validate` on input, then `generate`.
10
10
  */
11
- declare const _default: import("@power-plant/core").GeneratorConfigObject<Schema, Config, void>;
11
+ declare const _default: import("@power-plant/core").GeneratorConfigObject<Schema, Options, void>;
12
12
  //#endregion
13
13
  export { _default as default };
14
14
  //# sourceMappingURL=generator.d.mts.map
@@ -1,8 +1 @@
1
- import{defineGenerator as e,defineSchema as t,useExecution as n}from"@power-plant/core";import{findFilePath as r}from"@stryke/path/find";import{isSetString as i}from"@stryke/type-checks/is-set-string";import a from"style-dictionary";import{loadTsConfig as o}from"@stryke/fs/tsconfig";import{joinPaths as s}from"@stryke/path/join";import c from"chalk";import{cosmiconfig as l}from"cosmiconfig";import u from"fast-glob";import d,{basename as f,dirname as p,isAbsolute as m,resolve as h}from"node:path";import{configSchema as ee,rawConfigSchema as te}from"shadcn/schema";import"shadcn/preset";import{readJsonFile as ne}from"@stryke/fs/json";import{readFile as g}from"@stryke/fs/read-file";import{existsSync as _}from"node:fs";import{access as re}from"node:fs/promises";import v,{z as y}from"zod";import"@stryke/http/fetch";import"@stryke/url/helpers";import{getWorkspaceRoot as b}from"@stryke/fs/get-workspace-root";import{createMatchPath as ie}from"tsconfig-paths";import{isAbsolute as ae}from"@stryke/path/is-type";import{tokensSchema as x}from"@power-plant/dtcg-schema";import{existsSync as S}from"@stryke/fs/exists";import{importModule as oe}from"@stryke/fs/resolve";import se from"json5";import{parse as ce}from"smol-toml";import{parse as le}from"yaml";import{isDirectory as C}from"@stryke/fs/is-file";const w=process.env.REGISTRY_URL??`https://ui.shadcn.com/r`,T=w.replace(/\/r\/?$/,``),E={"next-app":{name:`next-app`,label:`Next.js`,links:{installation:`${T}/docs/installation/next`,tailwind:`https://tailwindcss.com/docs/guides/nextjs`}},"next-pages":{name:`next-pages`,label:`Next.js`,links:{installation:`${T}/docs/installation/next`,tailwind:`https://tailwindcss.com/docs/guides/nextjs`}},remix:{name:`remix`,label:`Remix`,links:{installation:`${T}/docs/installation/remix`,tailwind:`https://tailwindcss.com/docs/guides/remix`}},"react-router":{name:`react-router`,label:`React Router`,links:{installation:`${T}/docs/installation/react-router`,tailwind:`https://tailwindcss.com/docs/installation/framework-guides/react-router`}},vite:{name:`vite`,label:`Vite`,links:{installation:`${T}/docs/installation/vite`,tailwind:`https://tailwindcss.com/docs/guides/vite`}},astro:{name:`astro`,label:`Astro`,links:{installation:`${T}/docs/installation/astro`,tailwind:`https://tailwindcss.com/docs/guides/astro`}},laravel:{name:`laravel`,label:`Laravel`,links:{installation:`${T}/docs/installation/laravel`,tailwind:`https://tailwindcss.com/docs/guides/laravel`}},"tanstack-start":{name:`tanstack-start`,label:`TanStack Start`,links:{installation:`${T}/docs/installation/tanstack`,tailwind:`https://tailwindcss.com/docs/installation/using-postcss`}},gatsby:{name:`gatsby`,label:`Gatsby`,links:{installation:`${T}/docs/installation/gatsby`,tailwind:`https://tailwindcss.com/docs/guides/gatsby`}},expo:{name:`expo`,label:`Expo`,links:{installation:`${T}/docs/installation/expo`,tailwind:`https://www.nativewind.dev/docs/getting-started/installation`}},manual:{name:`manual`,label:`Manual`,links:{installation:`${T}/docs/installation/manual`,tailwind:`https://tailwindcss.com/docs/installation`}}};function ue(e){let t=[e];for(;t.length;){let e=t.shift();if(typeof e==`string`){if(e.startsWith(`./`))return e;continue}if(Array.isArray(e)){t.unshift(...e);continue}e&&typeof e==`object`&&t.unshift(...Object.values(e))}return null}function de(e){if(!e.includes(`*`))return`strip_extension`;let t=e.slice(e.indexOf(`*`)+1);return t&&/^\.[^/]+$/.test(t)?`strip_extension`:`preserve_extension`}function D(e,t){let n=t.find(t=>!t.hasWildcard&&t.key===e);if(n)return{path:d.resolve(n.rootDir,n.target),matchedAlias:n.key,matchedTarget:n.target,emitMode:n.emitMode};let r=t.filter(e=>e.hasWildcard).sort((e,t)=>t.key.length-e.key.length);for(let t of r){let n=O(e,t.key,{allowBareAliasBase:!0});if(n!==null)return{path:d.resolve(t.rootDir,fe(t.target,n)),matchedAlias:t.key,matchedTarget:t.target,emitMode:t.emitMode}}return null}function O(e,t,n={}){if(!t.includes(`*`))return e===t?``:null;let[r,i=``]=t.split(`*`);return r&&e.startsWith(r)&&e.endsWith(i)?i?e.slice(r.length,-i.length):e.slice(r.length):n.allowBareAliasBase&&i===``&&r&&r.endsWith(`/`)&&e===r.slice(0,-1)?``:null}function fe(e,t){if(!e.includes(`*`))return e;let[n,r=``]=e.split(`*`);return t?n?`${n}${t}${r}`:t:n?n.replace(/\/$/,``):``}const k=new Map;async function A(e){let t=d.resolve(e),n=k.get(t);if(n)return n;let r=(await j(e))?.imports;if(!r||typeof r!=`object`||Array.isArray(r))return k.set(t,[]),[];let i=[];for(let[e,n]of Object.entries(r)){if(!e.startsWith(`#`))continue;let r=ue(n);r&&i.push({key:e,aliasBase:e===`#*`?`#`:e.endsWith(`/*`)?e.slice(0,-2):e,target:r,emitMode:de(r),hasWildcard:e.includes(`*`),rootDir:t})}return k.set(t,i),i}async function pe(e){let t=(await A(e)).map(e=>e.aliasBase);return t.length?he(t):null}async function me(e,t){return D(e,await A(t))}function he(e){let t=e.map(e=>e.slice(1).split(`/`).filter(Boolean)).reduce((e,t,n)=>n?e.filter((e,n)=>t[n]===e):t,[]);return t.length?`#${t.join(`/`)}`:`#`}async function j(e=``){return ne(d.join(e,`package.json`))}const M=[`**/node_modules/**`,`.next`,`public`,`dist`,`build`],ge=y.object({compilerOptions:y.object({paths:y.record(y.string(),y.string().or(y.array(y.string())))})});async function _e(e,t){let[n,r,i,a,o,c,l,d]=await Promise.all([u.glob(`**/{next,vite,astro,app}.config.*|gatsby-config.*|composer.json|react-router.config.*`,{cwd:e,deep:3,ignore:M}),re(s(e,`src`)).then(()=>!0).catch(()=>!1),Se(e),ye(e),P(e,t?.configCssFile),N(e),xe(e),j(e)]),f=_(s(e,`${r?`src/`:``}app`)),p={framework:E.manual,isSrcDir:r,isRSC:!1,isTsx:i,tailwindConfigFile:a,tailwindCssFile:o,tailwindVersion:c,frameworkVersion:null,aliasPrefix:l.prefix};if(n.find(e=>e.startsWith(`next.config.`))?.length)return p.framework=f?E[`next-app`]:E[`next-pages`],p.isRSC=f,p.frameworkVersion=await ve(p.framework,d),p;if(n.find(e=>e.startsWith(`astro.config.`))?.length)return p.framework=E.astro,p;if(n.find(e=>e.startsWith(`gatsby-config.`))?.length)return p.framework=E.gatsby,p;if(n.find(e=>e.startsWith(`composer.json`))?.length)return p.framework=E.laravel,p;if(Object.keys(d?.dependencies??{}).find(e=>e.startsWith(`@remix-run/`)))return p.framework=E.remix,p;if([...Object.keys(d?.dependencies??{}),...Object.keys(d?.devDependencies??{})].find(e=>e.startsWith(`@tanstack/react-start`)))return p.framework=E[`tanstack-start`],p;if(n.find(e=>e.startsWith(`react-router.config.`))?.length)return p.framework=E[`react-router`],p;if(n.find(e=>e.startsWith(`vite.config.`))?.length)return p.framework=E.vite,p;let m=n.find(e=>e.startsWith(`app.config`));return m?.length&&(await g(s(e,m))).includes(`defineConfig`)?(p.framework=E.vite,p):(d?.dependencies?.expo&&(p.framework=E.expo),p)}async function ve(e,t){if(!t||![`next-app`,`next-pages`].includes(e.name))return null;let n=t.dependencies?.next||t.devDependencies?.next;if(!n)return null;let r=n.match(/^[\^~]?(\d+\.\d+\.\d+)/);if(r)return r[1]??null;let i=n.match(/(\d+\.\d+\.\d+)/);return i?i[1]??null:n}async function N(e){let[t,n]=await Promise.all([j(e),Re(e)]);return n?.tailwind?.config===``?`v4`:!t?.dependencies?.tailwindcss&&!t?.devDependencies?.tailwindcss?null:/^(?:\^|~)?3(?:\.\d+)*(?:-.*)?$/.test(t?.dependencies?.tailwindcss||t?.devDependencies?.tailwindcss||``)?`v3`:`v4`}async function P(e,t){if(t&&_(d.resolve(e,t)))return t;let[n]=await Promise.all([u.glob([`**/*.css`,`**/*.scss`],{cwd:e,deep:5,ignore:M}),N(e)]);if(!n.length)return null;for(let t of n){let n=await g(s(e,t));if(n.includes(`@import "tailwindcss"`)||n.includes(`@import 'tailwindcss'`)||n.includes(`@tailwind base`))return t}return null}async function ye(e){let t=await u.glob(`tailwind.config.*`,{cwd:e,deep:3,ignore:M});return t.length?t[0]??null:null}async function be(e){let t=await Ce(e),n=Object.entries(t?.compilerOptions.paths??{}).length?t?.compilerOptions.paths:null;if(!n||!Object.entries(n).length)return null;for(let[e,t]of Object.entries(n)){let n=Array.isArray(t)?t:[t];if(n.includes(`./*`)||n.includes(`./src/*`)||n.includes(`./app/*`)||n.includes(`./resources/js/*`))return e.replace(/\/\*$/,``)??null}return Object.keys(n)?.[0]?.replace(/\/\*$/,``)??null}async function xe(e){let t=await be(e),n=await pe(e);return n&&t?.startsWith(`#`)?{prefix:n,source:`package_imports`}:t?{prefix:t,source:`tsconfig_paths`}:n?{prefix:n,source:`package_imports`}:{prefix:null,source:null}}async function Se(e){return(await u.glob(`tsconfig.*`,{cwd:e,deep:1,ignore:M})).length>0}async function Ce(e){for(let t of[`tsconfig.json`,`tsconfig.web.json`,`tsconfig.app.json`]){let n=d.resolve(e,t);if(!_(n))continue;let r=await g(n),i;try{i=JSON.parse(we(r))}catch{continue}let a=ge.safeParse(i);if(!a.error)return a.data}return null}function we(e){let t=``,n=!1,r=!1;for(let i=0;i<e.length;i++){let a=e[i],o=e[i+1];if(n){if(t+=a,r){r=!1;continue}if(a===`\\`){r=!0;continue}a===`"`&&(n=!1);continue}if(a===`"`){n=!0,t+=a;continue}if(a===`/`&&o===`/`){for(;i<e.length&&e[i]!==`
2
- `;)i++;i<e.length&&(t+=e[i]);continue}if(a===`/`&&o===`*`){for(i+=2;i<e.length;){if(e[i]===`*`&&e[i+1]===`/`){i++;break}e[i]===`
3
- `&&(t+=`
4
- `),i++}continue}if(a===`,`){let t=i+1;for(;t<e.length;){for(;/\s/.test(e[t]??``);)t++;if(e[t]===`/`&&e[t+1]===`/`){for(t+=2;t<e.length&&e[t]!==`
5
- `&&e[t]!==`\r`;)t++;continue}if(e[t]===`/`&&e[t+1]===`*`){for(t+=2;t<e.length&&(e[t]!==`*`||e[t+1]!==`/`);)t++;t+=2;continue}break}if(e[t]===`}`||e[t]===`]`)continue}t+=a}return t}function Te(e){if(e.startsWith(`#`)||e.startsWith(`.`)||ae(e))return null;let t=e.split(`/`);return e.startsWith(`@`)?t.length<2?null:{packageName:`${t[0]}/${t[1]}`}:{packageName:t[0]}}const F=new Map,I=new Map;function Ee(e){let t=[],n=!1,r=0;for(let i of e.split(`
6
- `)){let e=i.trim();if(!e||e.startsWith(`#`))continue;let a=i.match(/^(\s*)([\w-]+)\s*:/);if(a){r=a[1]?.length??0,n=a[2]===`packages`;continue}if(!n)continue;let o=i.match(/^(\s*)-\s*(.+?)\s*(?:#.*)?$/);((!o||o[1]?.length)??r>=0)||t.push(o[2]?.trim().replace(/^["']|["']$/g,``)??``)}return t}async function De(e){let t=[],n=d.resolve(e,`pnpm-workspace.yaml`);if(_(n)){let e=await g(n);t.push(...Ee(e))}let r=s(e,`package.json`);if(_(r))try{let e=(await ne(r)).workspaces,n=Array.isArray(e)?e:e?.packages;Array.isArray(n)&&t.push(...n.filter(e=>!e.startsWith(`!`)))}catch{}return Array.from(new Set(t))}async function Oe(e){let t=await De(e),n=new Map;if(!t.length)return n;let r=await u(t.map(e=>d.posix.join(e.split(d.sep).join(`/`),`package.json`)),{cwd:e,ignore:[`**/node_modules/**`]});for(let t of r){let r=d.resolve(e,d.dirname(t)),i=(await j(r))?.name;i&&n.set(i,{packageName:i,packageRoot:r})}return n}async function ke(e,t){let n=b(e);if(!n)return null;let r=F.get(n);if(r?.has(t))return r.get(t)??null;let i=await Oe(n);return F.set(n,i),i.get(t)??null}function Ae(e,t){if(t===`.`)return e;let n=t.slice(2).replace(/\/\*$/,``);return n?`${e}/${n}`:e}async function je(e){let t=`${e.packageRoot}:${e.packageName}`,n=I.get(t);if(n)return n;let r=(await j(e.packageRoot))?.exports;if(!r||typeof r!=`object`||Array.isArray(r))return I.set(t,[]),[];let i=[];for(let[t,n]of Object.entries(r)){if(t!==`.`&&!t.startsWith(`./`))continue;let r=ue(n);if(!r)continue;let a=Ae(e.packageName,t);i.push({key:t.includes(`*`)?`${a}/*`:a,aliasBase:a,target:r,emitMode:de(r),hasWildcard:t.includes(`*`),rootDir:e.packageRoot})}return I.set(t,i),i}async function Me(e,t){let n=Te(e);if(!n?.packageName)return null;let r=await ke(t,n.packageName);return r?D(e,await je(r)):null}async function Ne(e,t){let n=t.cwd??t.baseUrl??b();if(e.startsWith(`#`)){let t=await me(e,n);if(t)return{path:t.path,source:`package_imports`,matchedAlias:t.matchedAlias,matchedTarget:t.matchedTarget,emitMode:t.emitMode}}let r=await Me(e,n);return r?{path:r.path,source:`workspace_package_exports`,matchedAlias:r.matchedAlias,matchedTarget:r.matchedTarget,emitMode:r.emitMode}:Fe(e,t)}function Pe(e){return/^@[^/]+\/[^/]+(?:\/.*)?$/.test(e)}function Fe(e,t){let n=ie(t.baseUrl||t.cwd||b(),t.paths??{})(e,void 0,()=>!0,[`.ts`,`.tsx`,`.jsx`,`.js`,`.css`]);if(!n)return null;let r=Ie(e,t.paths??{});return!r&&Pe(e)?null:{path:n,source:`tsconfig_paths`,matchedAlias:r?.key??e,matchedTarget:r?.target??n,emitMode:`strip_extension`}}function Ie(e,t){for(let[n,r]of Object.entries(t)){let t=Array.isArray(r)?r:[r],i=O(e,n);if(i!==null)return{key:n,target:t[0]?.includes(`*`)&&i!==null?t[0].replace(/\*/g,i):t[0]}}return null}const Le=l(`components`,{searchPlaces:[`components.json`]});async function Re(e){let t=await Ve(e);return t?(t.iconLibrary||=t.style===`new-york`?`radix`:`lucide`,ze(e,t)):null}const L={"@shadcn":`${w}/styles/{style}/{name}.json`};async function ze(e,t){t.registries={...L,...t.registries??{}};let n=await o(e);if(!n)throw Error(`Failed to load tsconfig.json.`);let r=await R(`utils`,t.aliases.utils,e,n),i=await R(`components`,t.aliases.components,e,n),a=t.aliases.ui?await R(`ui`,t.aliases.ui,e,n):d.resolve(i??e,`ui`),s=t.aliases.lib?await R(`lib`,t.aliases.lib,e,n):d.resolve(r??e,`..`),c=t.aliases.hooks?await R(`hooks`,t.aliases.hooks,e,n):d.resolve(i??e,`..`,`hooks`);return Be(e,{components:i,utils:r,ui:a,lib:s,hooks:c}),ee.parse({...t,resolvedPaths:{cwd:e,tailwindConfig:t.tailwind.config?d.resolve(e,t.tailwind.config):``,tailwindCss:d.resolve(e,t.tailwind.css),utils:r,components:i,ui:a,lib:s,hooks:c}})}async function R(e,t,n,r){let i=await Ne(t,{...r,cwd:n});if(!i?.path||t.startsWith(`#`)&&i.path===s(n,t))return null;if(e!==`utils`&&(i.source===`package_imports`||i.source===`workspace_package_exports`)){if(!i.matchedAlias.includes(`*`)&&/\/index\.[^/]+$/.test(i.path))return d.dirname(i.path);if(i.matchedAlias.includes(`*`)&&/\.[^/]+$/.test(i.path))return i.path.replace(/\.[^/]+$/,``)}return i.path}function Be(e,t){let n=[`components`,`ui`,`lib`,`hooks`,`utils`].filter(e=>!t[e]);if(n.length)throw Error([`Could not resolve the following aliases in ${c.cyan(e)}: ${c.cyan(n.join(`, `))}.`,`Configure path aliases in ${c.cyan(`tsconfig.json`)} or imports in ${c.cyan(`package.json`)} for this workspace and try again.`].join(`
7
- `))}async function Ve(e){try{let t=await Le.search(e);if(!t)return null;let n=te.parse(t.config);if(n.registries){for(let e of Object.keys(n.registries))if(e in L)throw Error(`"${e}" is a built-in registry and cannot be overridden.`)}return n}catch(t){let n=`${e}/components.json`;throw t instanceof Error&&t.message.includes(`reserved registry`)?t:Error(`Invalid configuration found in ${c.cyan(n)}.`)}}function He(e){let t={resolvedPaths:{cwd:process.cwd(),tailwindConfig:``,tailwindCss:``,utils:``,components:``,ui:``,lib:``,hooks:``},style:``,tailwind:{config:``,css:``,baseColor:``,cssVariables:!1},rsc:!1,tsx:!0,aliases:{components:``,utils:``},registries:{...L}};return e?{...t,...e,resolvedPaths:{...t.resolvedPaths,...e.resolvedPaths??{}},tailwind:{...t.tailwind,...e.tailwind??{}},aliases:{...t.aliases,...e.aliases??{}},registries:{...t.registries,...e.registries??{}}}:t}const Ue=y.object({category:y.enum([`block`,`component`,`ui`,`page`]),name:y.string(),title:y.string(),description:y.string().optional(),tags:y.array(y.string()).optional(),related:y.array(y.string()).optional(),since:y.string().optional(),version:y.string().optional(),repository:y.string().optional(),homepage:y.string().optional(),dependencies:y.record(y.string(),y.string()).optional(),registryDependencies:y.record(y.string(),y.string()).optional(),files:y.array(y.string()).optional()});y.record(y.string(),Ue);function We(e){return v.unknown().transform((t,n)=>{let r=e.safeParse(t);if(!r.success){for(let e of r.error.issues)n.addIssue({code:`custom`,message:e.message,path:e.path});return v.NEVER}return r.data})}const Ge=v.union([x,v.record(v.string(),x)]),Ke=v.object({registry:We(ee),tokens:Ge}),qe=[`razorwind-json`,`razorwind-yaml`,`razorwind-toml`,`razorwind-css`],z=[`json`,`json5`,`jsonc`,`yaml`,`yml`,`toml`,`css`,`js`,`mjs`,`cjs`,`ts`,`mts`,`cts`],Je=z.join(`,`),Ye=[`tokens.json`,`tokens.json5`,`tokens.jsonc`,`tokens.yaml`,`tokens.yml`,`tokens.toml`,`tokens.css`,`design-tokens.json`,`design-tokens.yaml`,`design-tokens.yml`,`tokens`,`design-tokens`,`src/tokens`,`src/design-tokens`,`packages/tokens`,`style-dictionary.config.js`,`style-dictionary.config.mjs`,`style-dictionary.config.ts`,`sd.config.js`,`sd.config.mjs`,`sd.config.ts`],Xe=`**/*.{${Je}}`,Ze=/^(light|dark|dim|high-contrast|hc|default|base|theme)([._-].+)?$/i,Qe={color:`color`,colours:`color`,colors:`color`,colour:`color`,palette:`color`,bg:`color`,background:`color`,foreground:`color`,fg:`color`,border:`color`,fill:`color`,stroke:`color`,spacing:`dimension`,space:`dimension`,size:`dimension`,sizes:`dimension`,sizing:`dimension`,gap:`dimension`,radius:`dimension`,radii:`dimension`,rounded:`dimension`,width:`dimension`,height:`dimension`,dimension:`dimension`,dimensions:`dimension`,duration:`duration`,durations:`duration`,time:`duration`,delay:`duration`,animation:`duration`,motion:`duration`,transition:`duration`,font:`fontFamily`,fonts:`fontFamily`,fontfamily:`fontFamily`,"font-family":`fontFamily`,typeface:`fontFamily`,fontweight:`fontWeight`,"font-weight":`fontWeight`,weight:`fontWeight`,opacity:`number`,opacities:`number`,zindex:`number`,"z-index":`number`,lineheight:`number`,"line-height":`number`,letterspacing:`dimension`,"letter-spacing":`dimension`,shadow:`shadow`,shadows:`shadow`,elevation:`shadow`,gradient:`gradient`,gradients:`gradient`,typography:`typography`,text:`typography`,cubicbezier:`cubicBezier`,easing:`cubicBezier`,ease:`cubicBezier`},$e=/^#(?:[0-9a-f]{3}|[0-9a-f]{4}|[0-9a-f]{6}|[0-9a-f]{8})$/i,et=/^rgba?\(\s*([+\d.]+%?)[\x09-\x0D\xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF]*(?: |(?: \s*)?,)\s*([+\d.]+%?)[\x09-\x0D\xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF]*(?: |(?: \s*)?,)\s*([+\d.]+%?)(?:\s*[,/]\s*([+\d.]+%?))?\s*\)$/i,tt=/^hsla?\(\s*([+\d.]+)[\x09-\x0D\xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF]*(?: |(?: \s*)?,)\s*([+\d.]+)%[\x09-\x0D\xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF]*(?: |(?: \s*)?,)\s*([+\d.]+)%(?:\s*[,/]\s*([+\d.]+%?))?\s*\)$/i,nt=/^oklch\(\s*([+\d.]+%?|none)\s+([+\d.]+|none)\s+([+\d.]+|none)(?:\s*\/\s*([+\d.]+%?))?\s*\)$/i,rt=/^([+-]?(?:\d+(?:\.\d+)?|\.\d+))\s*(px|rem|em|%|vh|vw|vmin|vmax|ch|ex|cm|mm|in|pt|pc)$/i,it=/^([+-]?(?:\d+(?:\.\d+)?|\.\d+))\s*(ms|s)$/i,at=/^cubic-bezier\(\s*([+-]?(?:\d+(?:\.\d+)?|\.\d+))\s*,\s*([+-]?(?:\d+(?:\.\d+)?|\.\d+))\s*,\s*([+-]?(?:\d+(?:\.\d+)?|\.\d+))\s*,\s*([+-]?(?:\d+(?:\.\d+)?|\.\d+))\s*\)$/i,ot=/^var\(\s*(--[\w-]+)\s*(?:,\s*(?:\S.*|[\t\v\f \xA0\u1680\u2000-\u200A\u202F\u205F\u3000\uFEFF]))?\)\s*$/i,st=/^\{[^{}]+\}$/,ct={thin:100,hairline:100,extralight:200,"extra-light":200,ultralight:200,light:300,normal:400,regular:400,book:400,medium:500,semibold:600,"semi-bold":600,demibold:600,bold:700,extrabold:800,"extra-bold":800,ultrabold:800,black:900,heavy:900},B=new Set([`px`,`rem`]);function V(e){return Math.min(1,Math.max(0,e))}function H(e,t=100){let n=e.trim();if(n.endsWith(`%`))return V(Number.parseFloat(n)/t);let r=Number.parseFloat(n);return V(r>1?r/255:r)}function lt(e){let t=e.slice(1);return t.length===3||t.length===4?`#${[...t].map(e=>e+e).join(``)}`:(e.length===7||e.length,e)}function ut(e){let t=lt(e.toLowerCase()).slice(1),n=Number.parseInt(t.slice(0,2),16)/255,r=Number.parseInt(t.slice(2,4),16)/255,i=Number.parseInt(t.slice(4,6),16)/255,a=t.length===8?Number.parseInt(t.slice(6,8),16)/255:void 0;return{colorSpace:`srgb`,components:[n,r,i],...a===void 0||a===1?{}:{alpha:a},hex:`#${t.slice(0,6)}`}}function dt(e){return`{${e.replace(/^--/,``).split(`-`).filter(Boolean).join(`.`)}}`}function U(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function W(e){return`$value`in e||`value`in e||`$ref`in e||`ref`in e}function G(e){for(let t=e.length-1;t>=0;t--){let n=e[t]?.toLowerCase();if(!n)continue;let r=Qe[n];if(r)return r}}function K(e,t=[]){let n=G(t);if(typeof e==`string`){let r=e.trim();if(st.test(r))return{value:r,type:n};let i=r.match(ot);if(i?.[1])return{value:dt(i[1]),type:n};if($e.test(r))return{value:ut(r),type:`color`};let a=r.match(et);if(a){let e=[H(a[1]),H(a[2]),H(a[3])],t=a[4]?a[4].endsWith(`%`)?V(Number.parseFloat(a[4])/100):V(Number.parseFloat(a[4])):void 0;return{value:{colorSpace:`srgb`,components:e,...t===void 0||Number.isNaN(t)?{}:{alpha:t}},type:`color`}}let o=r.match(tt);if(o)return{value:{colorSpace:`hsl`,components:[Number.parseFloat(o[1]),Number.parseFloat(o[2]),Number.parseFloat(o[3])],...o[4]?{alpha:o[4].endsWith(`%`)?V(Number.parseFloat(o[4])/100):V(Number.parseFloat(o[4]))}:{}},type:`color`};let s=r.match(nt);if(s){let e=e=>e===`none`?`none`:e.endsWith(`%`)?Number.parseFloat(e)/100:Number.parseFloat(e);return{value:{colorSpace:`oklch`,components:[e(s[1]),e(s[2]),e(s[3])],...s[4]?{alpha:s[4].endsWith(`%`)?V(Number.parseFloat(s[4])/100):V(Number.parseFloat(s[4]))}:{}},type:`color`}}let c=r.match(rt);if(c){let e=c[2].toLowerCase(),t=Number.parseFloat(c[1]);return B.has(e)?{value:{value:t,unit:e},type:`dimension`}:{value:r,type:n===`dimension`?void 0:n}}let l=r.match(it);if(l)return{value:{value:Number.parseFloat(l[1]),unit:l[2].toLowerCase()},type:`duration`};let u=r.match(at);if(u)return{value:[Number.parseFloat(u[1]),Number.parseFloat(u[2]),Number.parseFloat(u[3]),Number.parseFloat(u[4])],type:`cubicBezier`};let d=ct[r.toLowerCase()];return d===void 0?n===`fontFamily`||/family|font|typeface/i.test(t.at(-1)??``)?r.includes(`,`)?{value:r.split(`,`).map(e=>e.trim().replace(/^["']|["']$/g,``)),type:`fontFamily`}:{value:r.replace(/^["']|["']$/g,``),type:`fontFamily`}:n===`color`&&!r.startsWith(`{`)?{value:r,type:void 0}:{value:r,type:n}:{value:d,type:`fontWeight`}}if(typeof e==`number`)return n===`fontWeight`?{value:e,type:`fontWeight`}:n===`duration`?{value:{value:e,unit:`ms`},type:`duration`}:n===`dimension`?{value:{value:e,unit:`px`},type:`dimension`}:{value:e,type:n??`number`};if(Array.isArray(e))return e.length===4&&e.every(e=>typeof e==`number`)&&(n===`cubicBezier`||t.some(e=>/ease|bezier/i.test(e)))?{value:e,type:`cubicBezier`}:e.every(e=>typeof e==`string`)?{value:e,type:n??`fontFamily`}:{value:e,type:n};if(U(e)){if(`colorSpace`in e&&`components`in e)return{value:e,type:`color`};if(`value`in e&&`unit`in e){let t=String(e.unit).toLowerCase();return t===`ms`||t===`s`?{value:e,type:`duration`}:B.has(t)?{value:e,type:`dimension`}:{value:e,type:n}}}return{value:e,type:n}}function ft(e,t){let n={...e};if(`value`in n&&!(`$value`in n)&&(n.$value=n.value,delete n.value),`type`in n&&!(`$type`in n)&&(n.$type=n.type,delete n.type),`comment`in n&&!(`$description`in n)&&(n.$description=n.comment,delete n.comment),`description`in n&&!(`$description`in n)&&(n.$description=n.description,delete n.description),`ref`in n&&!(`$ref`in n)&&(n.$ref=n.ref,delete n.ref),`$value`in n){let e=K(n.$value,t);n.$value=e.value,!(`$type`in n)&&e.type&&(n.$type=e.type)}return n}function q(e,t=[]){if(Array.isArray(e))return e.map((e,n)=>q(e,[...t,String(n)]));if(!U(e))return e;if(W(e))return ft(e,t);let n={};for(let[r,i]of Object.entries(e)){if(r.startsWith(`$`)){n[r]=i;continue}n[r]=q(i,[...t,r])}if(!(`$type`in n)){let e=G(t);e&&t.length>0&&(n.$type=e)}return n}function J(e){let t={};for(let[n,r]of Object.entries(e)){let e=n.replace(/^--/,``).split(/[-./]/).filter(Boolean);if(e.length===0)continue;let i=t;for(let t=0;t<e.length-1;t++){let n=e[t],r=i[n];U(r)?W(r)&&(i[n]={DEFAULT:r}):i[n]={},i=i[n]}let a=e.at(-1),o=K(r,e),s={$value:o.value,...o.type?{$type:o.type}:{}},c=i[a];U(c)&&!W(c)?c.DEFAULT=s:i[a]=s}return q(t)}const pt=/(--[A-Z_][\w-]*)\s*:\s*([^;}{]+?)(?=\s*(?:;|\}|$))/gi;function mt(e){let t={},n=e.replace(/\/\*[\s\S]*?\*\//g,``);for(let e of n.matchAll(pt)){let n=e[1],r=e[2]?.trim();!n||!r||(t[n]=r)}return J(t)}const Y=`razorwind-infer`;function X(e){if(e==null)return{};if(typeof e!=`object`||Array.isArray(e))throw TypeError(`Token file must parse to a plain object.`);return q(e)}function ht(e){try{return X(se.parse(e))}catch(e){let t=e instanceof Error?e.message:String(e);throw Error(`Failed to parse JSON token file: ${t}`)}}function gt(e){try{return X(le(e))}catch(e){let t=e instanceof Error?e.message:String(e);throw Error(`Failed to parse YAML token file: ${t}`)}}function _t(e){try{return X(ce(e))}catch(e){let t=e instanceof Error?e.message:String(e);throw Error(`Failed to parse TOML token file: ${t}`)}}const vt=[{name:`razorwind-json`,pattern:/\.json[c5]?$/i,parser:({contents:e})=>ht(e)},{name:`razorwind-yaml`,pattern:/\.ya?ml$/i,parser:({contents:e})=>gt(e)},{name:`razorwind-toml`,pattern:/\.toml$/i,parser:({contents:e})=>_t(e)},{name:`razorwind-css`,pattern:/\.css$/i,parser:({contents:e})=>q(mt(e))}];function yt(){return Object.fromEntries(vt.map(({name:e,pattern:t,parser:n})=>[e,{pattern:t,parser:n}]))}function bt(e){return q(e)}function xt(){return{[Y]:bt}}function Z(e=a){for(let t of vt)e.registerParser(t);e.registerPreprocessor({name:Y,preprocessor:bt})}function Q(e,t){return m(t)?t:h(e,t)}function St(e){return/\.([^.]+)$/.exec(e)?.[1]?.toLowerCase()??``}function Ct(e){return z.includes(St(e))}function wt(e){let t=e.split(/[/\\]/).pop()?.toLowerCase()??``;return t.startsWith(`style-dictionary.config.`)||t.startsWith(`sd.config.`)}function Tt(e){return s(e,Xe)}function Et(e){let{cwd:t,tokensPath:n,fallbackPaths:r=[]}=e;if(n){let e=Q(t,n);if(!S(e))throw Error(`tokensPath "${n}" does not exist (resolved: ${e}).`);return C(e)?{resolvedPath:e,source:[Tt(e)],origin:`tokensPath`}:wt(e)?{resolvedPath:e,source:[],origin:`tokensPath`}:{resolvedPath:e,source:[e],origin:`tokensPath`}}for(let e of Ye){let n=Q(t,e);if(S(n)){if(C(n))return{resolvedPath:n,source:[Tt(n)],origin:`default`};if(wt(n))return{resolvedPath:n,source:[],origin:`default`};if(Ct(n))return{resolvedPath:n,source:[n],origin:`default`}}}for(let e of r){if(!e)continue;let n=Q(t,e);if(!(!S(n)||C(n))&&(Ct(n)||St(n)===`css`))return{resolvedPath:n,source:[n],origin:`fallback`}}return{source:[],origin:`none`}}function Dt(e){return(e.split(/[/\\]/).pop()??``).replace(/\.[^.]+$/,``).match(Ze)?.[1]?.toLowerCase()}let Ot=!1;function kt(){Ot||=(Z(a),!0)}function At(e){return!e||typeof e!=`object`||Object.keys(e).length===0}async function jt(e){let t=await oe(e);return t&&typeof t==`object`&&`default`in t&&t.default?t.default:t}async function Mt(e){kt();let t=new a({...e,parsers:[...qe,...e.parsers??[]],preprocessors:[Y,...e.preprocessors??[]],hooks:{...e.hooks,parsers:{...yt(),...e.hooks?.parsers},preprocessors:{...xt(),...e.hooks?.preprocessors}},usesDtcg:e.usesDtcg??!0,platforms:e.platforms??{}});return await t.hasInitialized,t}async function $(e){return e.length===0?{}:(await Mt({source:e})).tokens}async function Nt(e){return(await u(e,{absolute:!0,onlyFiles:!0,unique:!0})).sort()}async function Pt(e){let t=await Nt(e);if(t.length===0)return{};let n=new Map,r=[];for(let e of t){let t=Dt(e);if(t){let r=n.get(t)??[];r.push(e),n.set(t,r)}else r.push(e)}if(n.size<2)return $(e);let i={};if(r.length>0){let e=await $(r);At(e)||(i.base=e)}for(let[e,t]of n)i[e]=await $(t);return i}async function Ft(e){let{splitThemes:t=!0,...n}=e,r=Et(n);return r.resolvedPath&&S(r.resolvedPath)&&/(?:^|[/\\])(?:style-dictionary|sd)\.config\./i.test(f(r.resolvedPath))?(await Mt(await jt(r.resolvedPath))).tokens:r.source.length===0?{}:t?Pt(r.source):$(r.source)}async function It(){try{return await import(`@tailwindcss/node`)}catch(e){throw Error(`Cannot load '@tailwindcss/node'. Install tailwindcss v4 / @tailwindcss/node to extract workspace theme tokens.`,{cause:e})}}function Lt(e,t){return m(t)?t:h(e,t)}async function Rt(e,t){let n=await _e(e,{configCssFile:t??void 0});if(n?.tailwindVersion)return{configured:!!n.tailwindCssFile,version:n.tailwindVersion,cssFile:n.tailwindCssFile,configFile:n.tailwindConfigFile};let[r,i]=await Promise.all([N(e),P(e,t??void 0)]);return{configured:!!(r&&i),version:r,cssFile:i,configFile:null}}function zt(e,t){for(let n of t){if(!i(n))continue;let t=Lt(e,n);if(S(t))return t}return null}async function Bt(e){let{cwd:t,cssPath:n,omitDefaults:r=!1}=e,i=await Rt(t,n);if(!i.configured||i.version!==`v4`)return null;let a=zt(t,[n,i.cssFile]);if(!a)return null;let o=await g(a),s=await(await It()).__unstable__loadDesignSystem(o,{base:p(a)}),c={};for(let[e,t]of s.theme.entries())r&&(t.options&4)==4||!e.startsWith(`--`)||!t.value||(c[e]=t.value);return Object.keys(c).length===0?null:J(c)}function Vt(e){return!e||typeof e!=`object`||Object.keys(e).length===0}var Ht=e({meta:{name:`razorwind`,title:`Razorwind`,description:`A generator that uses Razorwind to generate design system code from design tokens and components.`,version:`1.0`,tags:[`razorwind`,`dtcg`]},schema:t({schema:Ke}),input:async e=>{let{registryPath:t,tokensPath:o}=e,{cwd:s}=n(),c=i(t)?r(t):s,l=await Re(c)??He({resolvedPaths:{cwd:c}});Z(a);let u=[l.resolvedPaths?.tailwindCss,l.tailwind?.css],d;if(i(o))d=await Ft({cwd:s,tokensPath:o});else{let e=await Rt(s,l.tailwind?.css);e.configured&&e.version===`v4`&&(d=await Bt({cwd:s,cssPath:l.resolvedPaths?.tailwindCss??l.tailwind?.css??e.cssFile})),Vt(d)&&(d=await Ft({cwd:s,fallbackPaths:u}))}return{registry:l,tokens:d??{}}},generator:async(e,t)=>({})});export{Ht as default};
8
- //# sourceMappingURL=generator.mjs.map
1
+ import{t as e}from"./generator-BWQOEMGt.mjs";export{e as default};
@@ -0,0 +1,3 @@
1
+ import "./schema-BNfl9Tsw.mjs";
2
+ import { Token, Tokens as Tokens$1, tokenSchema, tokensSchema as tokensSchema$1 } from "@power-plant/dtcg-schema";
3
+ export { tokensSchema$1 as i, Tokens$1 as n, tokenSchema as r, Token as t };
@@ -0,0 +1,3 @@
1
+ import "./schema-1EWJvc56.cjs";
2
+ import { Token, Tokens as Tokens$1, tokenSchema, tokensSchema } from "@power-plant/dtcg-schema";
3
+ export { tokensSchema as i, Tokens$1 as n, tokenSchema as r, Token as t };
package/dist/index.cjs CHANGED
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./config.cjs");exports.defineConfig=e.defineConfig;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./plugin.cjs"),t=require("./resolve-config-D7XXy_Qk.cjs"),n=require("./config.cjs");require("./generator-DjAElWpu.cjs");const r=require("./schema-CLeH9GGy.cjs"),i=require("./utils/index.cjs");let a=require("@power-plant/dtcg-schema");exports.componentFileSchema=r.n,exports.componentSchema=r.r,exports.componentsSchema=r.i,exports.createDocument=i.createDocument,exports.defineConfig=n.defineConfig,exports.definePlugin=e.definePlugin,exports.formatColorValue=i.formatColorValue,exports.formatDimensionValue=i.formatDimensionValue,exports.formatTokenValue=i.formatTokenValue,exports.isPlainObject=i.isPlainObject,exports.resolveConfig=t.t,exports.schema=r.t,exports.toCssVar=i.toCssVar,Object.defineProperty(exports,"tokenSchema",{enumerable:!0,get:function(){return a.tokenSchema}}),Object.defineProperty(exports,"tokensSchema",{enumerable:!0,get:function(){return a.tokensSchema}});
package/dist/index.d.cts CHANGED
@@ -1,6 +1,10 @@
1
- import { a as UserConfigFn, c as UserConfigParams, i as UserConfigExport, n as InputOptions, o as UserConfigFnObject, r as UserConfig, s as UserConfigFnPromise, t as Config } from "./config-CJi9Fu8b.cjs";
2
- import { defineConfig } from "./config.cjs";
3
- import { t as Schema } from "./index-DCXWFAYS.cjs";
1
+ import { a as Components, c as componentsSchema, i as ComponentFile, n as schema, o as componentFileSchema, r as Component, s as componentSchema, t as Schema } from "./schema-1EWJvc56.cjs";
2
+ import { a as UserConfigFn, c as UserConfigParams, d as TokensPreprocessor, i as UserConfigExport, l as Plugin, n as Options, o as UserConfigFnObject, r as UserConfig, s as UserConfigFnPromise, t as Config, u as TokensParser } from "./config-Dj6RrLde.cjs";
3
+ import { definePlugin } from "./plugin.cjs";
4
+ import { defineConfig, resolveConfig } from "./config.cjs";
5
+ import { i as tokensSchema, n as Tokens, r as tokenSchema, t as Token } from "./index-COAOe8bR.cjs";
6
+ import "./generator.cjs";
7
+ import { createDocument, formatColorValue, formatDimensionValue, formatTokenValue, isPlainObject, toCssVar } from "./utils/index.cjs";
4
8
  import { GeneratorConfig } from "@power-plant/core";
5
9
  //#region src/types/base.d.ts
6
10
  type Generator<TOptions extends object = object> = GeneratorConfig<Schema, TOptions> & {
@@ -14,5 +18,5 @@ type Generator<TOptions extends object = object> = GeneratorConfig<Schema, TOpti
14
18
  tags: string[];
15
19
  };
16
20
  //#endregion
17
- export { type Config, type Generator, type InputOptions, type UserConfig, type UserConfigExport, type UserConfigFn, type UserConfigFnObject, type UserConfigFnPromise, type UserConfigParams, defineConfig };
21
+ export { type Component, type ComponentFile, type Components, type Config, type Generator, type Options, type Plugin, type Schema, type Token, type Tokens, type TokensParser, type TokensPreprocessor, type UserConfig, type UserConfigExport, type UserConfigFn, type UserConfigFnObject, type UserConfigFnPromise, type UserConfigParams, componentFileSchema, componentSchema, componentsSchema, createDocument, defineConfig, definePlugin, formatColorValue, formatDimensionValue, formatTokenValue, isPlainObject, resolveConfig, schema, toCssVar, tokenSchema, tokensSchema };
18
22
  //# sourceMappingURL=index.d.cts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.cts","names":[],"sources":["../src/types/base.ts"],"mappings":";;;;;KAqBY,UAAU,oCAAoC,gBACxD,QACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA"}
1
+ {"version":3,"file":"index.d.cts","names":[],"sources":["../src/types/base.ts"],"mappings":";;;;;;;;;KAqBY,UAAU,oCAAoC,gBACxD,QACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA"}
package/dist/index.d.mts CHANGED
@@ -1,6 +1,10 @@
1
- import { a as UserConfigFn, c as UserConfigParams, i as UserConfigExport, n as InputOptions, o as UserConfigFnObject, r as UserConfig, s as UserConfigFnPromise, t as Config } from "./config-CJi9Fu8b.mjs";
2
- import { defineConfig } from "./config.mjs";
3
- import { t as Schema } from "./index-8xt23rlo.mjs";
1
+ import { a as Components, c as componentsSchema, i as ComponentFile, n as schema, o as componentFileSchema, r as Component, s as componentSchema, t as Schema } from "./schema-BNfl9Tsw.mjs";
2
+ import { a as UserConfigFn, c as UserConfigParams, d as TokensPreprocessor, i as UserConfigExport, l as Plugin, n as Options, o as UserConfigFnObject, r as UserConfig, s as UserConfigFnPromise, t as Config, u as TokensParser } from "./config-DQHHeicR.mjs";
3
+ import { definePlugin } from "./plugin.mjs";
4
+ import { defineConfig, resolveConfig } from "./config.mjs";
5
+ import { i as tokensSchema, n as Tokens, r as tokenSchema, t as Token } from "./index--y-fo2Lr.mjs";
6
+ import "./generator.mjs";
7
+ import { createDocument, formatColorValue, formatDimensionValue, formatTokenValue, isPlainObject, toCssVar } from "./utils/index.mjs";
4
8
  import { GeneratorConfig } from "@power-plant/core";
5
9
  //#region src/types/base.d.ts
6
10
  type Generator<TOptions extends object = object> = GeneratorConfig<Schema, TOptions> & {
@@ -14,5 +18,5 @@ type Generator<TOptions extends object = object> = GeneratorConfig<Schema, TOpti
14
18
  tags: string[];
15
19
  };
16
20
  //#endregion
17
- export { type Config, type Generator, type InputOptions, type UserConfig, type UserConfigExport, type UserConfigFn, type UserConfigFnObject, type UserConfigFnPromise, type UserConfigParams, defineConfig };
21
+ export { type Component, type ComponentFile, type Components, type Config, type Generator, type Options, type Plugin, type Schema, type Token, type Tokens, type TokensParser, type TokensPreprocessor, type UserConfig, type UserConfigExport, type UserConfigFn, type UserConfigFnObject, type UserConfigFnPromise, type UserConfigParams, componentFileSchema, componentSchema, componentsSchema, createDocument, defineConfig, definePlugin, formatColorValue, formatDimensionValue, formatTokenValue, isPlainObject, resolveConfig, schema, toCssVar, tokenSchema, tokensSchema };
18
22
  //# sourceMappingURL=index.d.mts.map
package/dist/index.mjs CHANGED
@@ -1 +1 @@
1
- import{defineConfig as e}from"./config.mjs";export{e as defineConfig};
1
+ import{definePlugin as e}from"./plugin.mjs";import{t}from"./resolve-config-CBowa3KM.mjs";import{defineConfig as n}from"./config.mjs";import"./generator-BWQOEMGt.mjs";import{a as r,i,n as a,o,r as s,t as c}from"./schema-Bxzw_P4l.mjs";import{createDocument as l,formatColorValue as u,formatDimensionValue as d,formatTokenValue as f,isPlainObject as p,toCssVar as m}from"./utils/index.mjs";export{i as componentFileSchema,r as componentSchema,o as componentsSchema,l as createDocument,n as defineConfig,e as definePlugin,u as formatColorValue,d as formatDimensionValue,f as formatTokenValue,p as isPlainObject,t as resolveConfig,s as schema,m as toCssVar,c as tokenSchema,a as tokensSchema};
@@ -0,0 +1 @@
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../tokens-CoQWg4mX.cjs");exports.DEFAULT_TOKEN_PATH_CANDIDATES=e.h,exports.RAZORWIND_INFER_PREPROCESSOR=e.a,exports.THEME_BASENAME_PATTERN=e.g,exports.TOKEN_DIRECTORY_GLOB=e._,exports.TOKEN_FILE_EXTENSIONS=e.v,exports.TYPE_PATH_HINTS=e.b,exports.WINDIE_PARSERS=e.y,exports.razorwindParsers=e.y,exports.getRazorwindParserHooks=e.o,exports.getRazorwindPreprocessorHooks=e.s,exports.inferTypeFromPath=e.d,exports.inferValue=e.f,exports.loadTokens=e.t,exports.loadTokensOrThrow=e.n,exports.nestFlatTokens=e.p,exports.normalizeTokenTree=e.m,exports.parseCssCustomProperties=e.u,exports.razorwindInferPreprocessor=e.c,exports.registerRazorwindParsers=e.l,exports.resolveTokensSource=e.r,exports.themeKeyFromPath=e.i;