@razorwind/tamagui 0.0.17 → 0.0.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -1,17 +1,55 @@
1
- Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});let e=require("@razorwind/core/plugin"),t=require("@razorwind/core/utils");function n(e){return e.replaceAll(`\\`,`\\\\`).replaceAll(`"`,`\\"`).replaceAll(`
2
- `,`\\n`).replaceAll(`\r`,`\\r`)}function r(e){return typeof e==`string`?`"${n(e)}"`:typeof e==`number`||typeof e==`boolean`?String(e):e==null?`undefined`:JSON.stringify(e)}function i(e,n){if(typeof e==`number`)return e;if(typeof e==`boolean`)return Number(e);if((0,t.isObject)(e)&&typeof e.value==`number`&&typeof e.unit==`string`){let t=e.unit.toLowerCase();return t===`px`||t===``?e.value:t===`rem`?e.value*16:`${e.value}${e.unit}`}if(typeof e==`string`){let t=/^(-?\d+(?:\.\d+)?)px$/i.exec(e.trim());if(t)return Number(t[1]);let n=/^(-?\d+(?:\.\d+)?)rem$/i.exec(e.trim());if(n)return Number(n[1])*16;let r=Number(e);return!Number.isNaN(r)&&e.trim()!==``?r:e}return String(e)}const a=/^(?:light|dark|dim|high-contrast|hc|default|base|theme)(?:[._-].+)?$/i,o=[{prefix:/^(?:color|colours?|palette)\b/i,category:`color`},{prefix:/^(?:space|spacing|gap|inset)\b/i,category:`space`},{prefix:/^(?:size|sizing)\b/i,category:`size`},{prefix:/^(?:radius|rounded|radii)\b/i,category:`radius`},{prefix:/^(?:z-?index|zindex|elevation)\b/i,category:`zIndex`}];function s(e){return`$value`in e||`value`in e||`$ref`in e||`ref`in e}function c(e){if(typeof e.$description==`string`)return e.$description;if(typeof e.description==`string`)return e.description}function l(e,t){return typeof e.$type==`string`?e.$type:typeof e.type==`string`?e.type:t}function u(e){if(`$value`in e)return e.$value;if(`value`in e)return e.value;if(typeof e.$ref==`string`)return e.$ref;if(typeof e.ref==`string`)return e.ref}function d(e,t){for(let{prefix:t,category:n}of o)if(t.test(e))return n;if(t===`color`)return`color`;if(t===`dimension`){if(/space|spacing|gap|inset/i.test(e))return`space`;if(/radius|rounded/i.test(e))return`radius`;if(/z-?index|elevation/i.test(e))return`zIndex`;if(/size|sizing|width|height/i.test(e))return`size`}if(t===`number`&&/z-?index|elevation/i.test(e))return`zIndex`}function f(e){let t=e.split(`.`).filter(Boolean),n=t[0];n&&/^(?:color|colours?|palette|space|spacing|gap|inset|size|sizing|radius|rounded|radii|z-?index|zindex|elevation)$/i.test(n)&&t.shift();let r=t.join(``)||e.split(`.`).at(-1)||e;return/^(?:DEFAULT|default)$/i.test(r)?`true`:r}function p(e,n,r,a,o){if(!(0,t.isObject)(e))return;let m=l(e,r);if(s(e)){let r=u(e),s=n.join(`.`),l=d(s,m),p=(0,t.formatTokenValue)(r,m),h=l===`color`||m===`color`?p:i(r,m);o.push({path:s,type:m,value:r,cssValue:p,tamaguiValue:h,category:l,tokenKey:l?f(s):void 0,description:c(e),theme:a});return}for(let[t,r]of Object.entries(e))t.startsWith(`$`)||p(r,[...n,t],m,a,o)}function m(e){if(!(0,t.isObject)(e))return[];let n=Object.keys(e).filter(e=>!e.startsWith(`$`));if(n.length>0&&n.every(e=>a.test(e))){let t=e;return n.map(e=>({id:e,tokens:t[e]}))}return[{id:`default`,tokens:e}]}function h(e,t={}){let n=t.includeTypes?new Set(t.includeTypes):void 0,r=[];for(let t of m(e)){let e=t.id==="default"?void 0:t.id;p(t.tokens,[],void 0,e,r)}return n?r.filter(e=>!e.type||n.has(e.type)):r}const g=new Set([`default`,`base`,`light`,`theme`]),_=new Set([`gray`,`grey`,`neutral`,`slate`,`zinc`,`stone`,`palette`,`base`]),v={css:`@tamagui/config/v5-css`,rn:`@tamagui/config/v5-rn`,reanimated:`@tamagui/config/v5-reanimated`,motion:`@tamagui/config/v5-motion`};function y(e){let t=new Set(e.map(e=>e.theme).filter(e=>!!e));if(t.size===0)return e;for(let t of g){let n=e.filter(e=>e.theme?.toLowerCase()===t);if(n.length>0)return n}let n=[...t][0];return e.filter(e=>e.theme===n)}function b(e,t){return e.filter(e=>e.theme?.toLowerCase()===t)}function x(e){let t={};for(let n of e){if(!n.category||!n.tokenKey)continue;let e=t[n.category]??{};e[n.tokenKey]=n.tamaguiValue,t[n.category]=e}return t}function S(e,t=2){let n=` `.repeat(t),i=Object.entries(e).toSorted(([e],[t])=>e.localeCompare(t));return i.length===0?`{}`:`{\n${i.map(([e,t])=>{let i=/^[A-Z_$][\w$]*$/i.test(e)?e:r(e);return`${n}${i}: ${r(t)}`}).join(`,
1
+ Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});let e=require("@razorwind/core/plugin"),t=require("@razorwind/core/utils"),n=require("node:path");function r(e){return e.replaceAll(`\\`,`\\\\`).replaceAll(`"`,`\\"`).replaceAll(`
2
+ `,`\\n`).replaceAll(`\r`,`\\r`)}function i(e){return typeof e==`string`?`"${r(e)}"`:typeof e==`number`||typeof e==`boolean`?String(e):e==null?`undefined`:JSON.stringify(e)}function a(e,n){if(typeof e==`number`)return e;if(typeof e==`boolean`)return Number(e);if((0,t.isObject)(e)&&typeof e.value==`number`&&typeof e.unit==`string`){let t=e.unit.toLowerCase();return t===`px`||t===``?e.value:t===`rem`?e.value*16:`${e.value}${e.unit}`}if(typeof e==`string`){let t=/^(-?\d+(?:\.\d+)?)px$/i.exec(e.trim());if(t)return Number(t[1]);let n=/^(-?\d+(?:\.\d+)?)rem$/i.exec(e.trim());if(n)return Number(n[1])*16;let r=Number(e);return!Number.isNaN(r)&&e.trim()!==``?r:e}return String(e)}const o=[{prefix:/^(?:color|colours?|palette)\b/i,category:`color`},{prefix:/^(?:space|spacing|gap|inset)\b/i,category:`space`},{prefix:/^(?:size|sizing)\b/i,category:`size`},{prefix:/^(?:radius|rounded|radii)\b/i,category:`radius`},{prefix:/^(?:z-?index|zindex|elevation)\b/i,category:`zIndex`}];function s(e){return`$value`in e||`value`in e||`$ref`in e||`ref`in e}function c(e){if(typeof e.$description==`string`)return e.$description;if(typeof e.description==`string`)return e.description}function l(e,t){return typeof e.$type==`string`?e.$type:typeof e.type==`string`?e.type:t}function u(e){if(`$value`in e)return e.$value;if(`value`in e)return e.value;if(typeof e.$ref==`string`)return e.$ref;if(typeof e.ref==`string`)return e.ref}function d(e,t){for(let{prefix:t,category:n}of o)if(t.test(e))return n;if(t===`color`)return`color`;if(t===`dimension`){if(/space|spacing|gap|inset/i.test(e))return`space`;if(/radius|rounded/i.test(e))return`radius`;if(/z-?index|elevation/i.test(e))return`zIndex`;if(/size|sizing|width|height/i.test(e))return`size`}if(t===`number`&&/z-?index|elevation/i.test(e))return`zIndex`}function f(e){let t=e.split(`.`).filter(Boolean),n=t[0];n&&/^(?:color|colours?|palette|space|spacing|gap|inset|size|sizing|radius|rounded|radii|z-?index|zindex|elevation)$/i.test(n)&&t.shift();let r=t.join(``)||e.split(`.`).at(-1)||e;return/^(?:DEFAULT|default)$/i.test(r)?`true`:r}function p(e,n,r,i,o){if(!(0,t.isObject)(e))return;let m=l(e,r);if(s(e)){let r=u(e),s=n.join(`.`),l=d(s,m),p=(0,t.formatTokenValue)(r,m),h=l===`color`||m===`color`?p:a(r,m);o.push({path:s,type:m,value:r,cssValue:p,tamaguiValue:h,category:l,tokenKey:l?f(s):void 0,description:c(e),theme:i});return}for(let[t,r]of Object.entries(e))t.startsWith(`$`)||p(r,[...n,t],m,i,o)}function m(e,n={}){let r=n.includeTypes?new Set(n.includeTypes):void 0,i=[];for(let n of(0,t.resolveTokenSets)(e)){let e=n.id==="default"?void 0:n.id;p(n.tokens,[],void 0,e,i)}return r?i.filter(e=>!e.type||r.has(e.type)):i}function h(e){return`# Installing Tamagui Config
3
+
4
+ Generated by \`@razorwind/tamagui\`.
5
+
6
+ ## Files
7
+
8
+ - \`${e.outFile}\` — Tamagui v5 config (\`createTamagui\` + generated tokens/themes)
9
+
10
+ ## Setup
11
+
12
+ 1. Point Tamagui at the generated config:
13
+
14
+ \`\`\`ts
15
+ import config from "./${e.outFile}";
16
+
17
+ export default config;
18
+ \`\`\`
19
+
20
+ 2. Wrap your app with Tamagui (example):
21
+
22
+ \`\`\`tsx
23
+ import { TamaguiProvider } from "tamagui";
24
+ import config from "./${e.outFile}";
25
+
26
+ export function App() {
27
+ return (
28
+ <TamaguiProvider config={config} defaultTheme="light">
29
+ {/* … */}
30
+ </TamaguiProvider>
31
+ );
32
+ }
33
+ \`\`\`
34
+
35
+ 3. Use token props such as \`color="$primary"\` or \`padding="$sm"\` per your generated token map.
36
+
37
+ ## Regenerate
38
+
39
+ Re-run Razorwind generate when tokens change so \`${e.outFile}\` stays aligned with your design system.
40
+ `}const g=new Set([`default`,`base`,`light`,`theme`]),_=new Set([`gray`,`grey`,`neutral`,`slate`,`zinc`,`stone`,`palette`,`base`]),v={css:`@tamagui/config/v5-css`,rn:`@tamagui/config/v5-rn`,reanimated:`@tamagui/config/v5-reanimated`,motion:`@tamagui/config/v5-motion`};function y(e){let t=new Set(e.map(e=>e.theme).filter(e=>!!e));if(t.size===0)return e;for(let t of g){let n=e.filter(e=>e.theme?.toLowerCase()===t);if(n.length>0)return n}let n=[...t][0];return e.filter(e=>e.theme===n)}function b(e,t){return e.filter(e=>e.theme?.toLowerCase()===t)}function x(e){let t={};for(let n of e){if(!n.category||!n.tokenKey)continue;let e=t[n.category]??{};e[n.tokenKey]=n.tamaguiValue,t[n.category]=e}return t}function S(e,t=2){let n=` `.repeat(t),r=Object.entries(e).toSorted(([e],[t])=>e.localeCompare(t));return r.length===0?`{}`:`{\n${r.map(([e,t])=>{let r=/^[A-Z_$][\w$]*$/i.test(e)?e:i(e);return`${n}${r}: ${i(t)}`}).join(`,
3
41
  `)}\n${` `.repeat(Math.max(t-2,0))}}`}function C(e){let t={},n=new Map;for(let t of e)!t.tokenKey||typeof t.tamaguiValue!=`string`||n.set(t.tokenKey,t.tamaguiValue);let r=/^([A-Z]+)(\d{1,2})$/i;for(let[e,i]of n){let n=r.exec(e);if(!n)continue;let[,a=``,o=``]=n,s=Number(o);if(s<0||s>12)continue;let c=t[a]??{};c[`${a}${s}`]=i,t[a]=c}return Object.fromEntries(Object.entries(t).filter(([,e])=>Object.keys(e).length>=3))}function w(e,t){let n=[];for(let r=1;r<=12;r++){let i=e[`${t}${r}`];if(!i)return;n.push(i)}return n}function T(e){let t=y(e.filter(e=>e.category===`color`)),n=b(e.filter(e=>e.category===`color`),`dark`),r=C(t),i=C(n),a,o;for(let e of Object.keys(r))if(_.has(e.toLowerCase())&&(a=w(r[e],e),a))break;for(let e of Object.keys(i))if(_.has(e.toLowerCase())&&(o=w(i[e],e),o))break;return{lightPalette:a,darkPalette:o}}function E(e){let t=C(e),n={};for(let r of e)r.category!==`color`||!r.tokenKey||typeof r.tamaguiValue!=`string`||/^[A-Z]+\d{1,2}$/i.test(r.tokenKey)&&t[r.tokenKey.replace(/\d{1,2}$/,``)]||(n[r.tokenKey]=r.tamaguiValue);return n}function D(e,t){let n=new Set([...Object.keys(e),...Object.keys(t)]);if(n.size===0)return;let r=[];for(let i of[...n].toSorted((e,t)=>e.localeCompare(t))){if(_.has(i.toLowerCase()))continue;let n=e[i]??t[i],a=t[i]??e[i];!n||!a||r.push(` ${i}: {
4
42
  light: ${S(n,8)},
5
43
  dark: ${S(a,8)}
6
44
  }`)}if(r.length!==0)return`{\n${r.join(`,
7
- `)}\n }`}function O(e,t={}){let n=t.useDefaultConfig!==!1,i=t.animations??`css`,a=t.includeTypeAugmentation!==!1,o=x(y(e)),s=y(e.filter(e=>e.category===`color`)),c=b(e.filter(e=>e.category===`color`),`dark`),l=C(s),u=C(c.length>0?c:s),{lightPalette:d,darkPalette:f}=T(e),p=D(l,u),m=E(s),h=E(c.length>0?c:s),g=Object.keys(m).length>0||Object.keys(h).length>0,_=[];for(let e of[`color`,`space`,`size`,`radius`,`zIndex`]){let t=o[e];t&&Object.keys(t).length>0&&_.push(` ${e}: ${S(t,4)}`)}let w=[];d&&w.push(` lightPalette: ${r(d)}`),f&&w.push(` darkPalette: ${r(f)}`),p&&w.push(` childrenThemes: ${p}`),g&&w.push(` getTheme: ({ scheme }) => {
45
+ `)}\n }`}function O(e,t={}){let n=t.useDefaultConfig!==!1,r=t.animations??`css`,a=t.includeTypeAugmentation!==!1,o=x(y(e)),s=y(e.filter(e=>e.category===`color`)),c=b(e.filter(e=>e.category===`color`),`dark`),l=C(s),u=C(c.length>0?c:s),{lightPalette:d,darkPalette:f}=T(e),p=D(l,u),m=E(s),h=E(c.length>0?c:s),g=Object.keys(m).length>0||Object.keys(h).length>0,_=[];for(let e of[`color`,`space`,`size`,`radius`,`zIndex`]){let t=o[e];t&&Object.keys(t).length>0&&_.push(` ${e}: ${S(t,4)}`)}let w=[];d&&w.push(` lightPalette: ${i(d)}`),f&&w.push(` darkPalette: ${i(f)}`),p&&w.push(` childrenThemes: ${p}`),g&&w.push(` getTheme: ({ scheme }) => {
8
46
  const semantic = scheme === "dark"
9
47
  ? ${S(h,8)}
10
48
  : ${S(m,8)};
11
49
  return semantic;
12
- }`);let O=[];n?O.push(`import { createV5Theme, defaultConfig } from "@tamagui/config/v5";`):O.push(`import { createV5Theme } from "@tamagui/config/v5";`),i!==!1&&O.push(`import { animations } from "${v[i]}";`);let k=[`createTamagui`];_.length>0&&k.push(`createTokens`),O.push(`import { ${k.join(`, `)} } from "tamagui";`);let A=[`/* eslint-disable */`,`/*`,` * Generated by @razorwind/tamagui — do not edit by hand.`,` * @see https://tamagui.dev/docs/core/config-v5`,` */`,``,...O,``];_.length>0&&A.push(`const tokens = createTokens({`,_.join(`,
50
+ }`);let O=[];n?O.push(`import { createV5Theme, defaultConfig } from "@tamagui/config/v5";`):O.push(`import { createV5Theme } from "@tamagui/config/v5";`),r!==!1&&O.push(`import { animations } from "${v[r]}";`);let k=[`createTamagui`];_.length>0&&k.push(`createTokens`),O.push(`import { ${k.join(`, `)} } from "tamagui";`);let A=[`/* eslint-disable */`,`/*`,` * Generated by @razorwind/tamagui — do not edit by hand.`,` * @see https://tamagui.dev/docs/core/config-v5`,` */`,``,...O,``];_.length>0&&A.push(`const tokens = createTokens({`,_.join(`,
13
51
  `),`});`,``);let j=w.length>0?`createV5Theme({\n${w.join(`,
14
- `)}\n})`:`createV5Theme()`;A.push(`const themes = ${j};`,``);let M=[];return n&&M.push(` ...defaultConfig`),i!==!1&&M.push(` animations`),_.length>0&&(n?M.push(` tokens: {
52
+ `)}\n})`:`createV5Theme()`;A.push(`const themes = ${j};`,``);let M=[];return n&&M.push(` ...defaultConfig`),r!==!1&&M.push(` animations`),_.length>0&&(n?M.push(` tokens: {
15
53
  ...defaultConfig.tokens,
16
54
  ...tokens,
17
55
  color: {
@@ -36,4 +74,4 @@ Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{val
36
74
  }
37
75
  }`):M.push(` tokens`)),M.push(` themes`),A.push(`export const config = createTamagui({`,M.join(`,
38
76
  `),`});`,``,`export type AppConfig = typeof config;`,``),a&&A.push(`declare module "tamagui" {`,` // eslint-disable-next-line @typescript-eslint/no-empty-object-type`,` interface TamaguiCustomConfig extends AppConfig {}`,`}`,``),A.push(`export default config;`,``),A.join(`
39
- `)}function k(e,n={}){if(!e.tokens||Object.keys(e.tokens).length===0)return{};let r=h(e.tokens,n);if(r.length===0)return{};let i=n.outFile??`tamagui.config.ts`,a=O(r,n);return{[i]:(0,t.createDocument)(i,a,{name:`razorwind-tamagui`},`typescript`)}}var A=(0,e.definePlugin)(e=>({name:`tamagui`,generate:async t=>k(t,e??{})}));exports.collectColorScales=C,exports.default=A,exports.flattenTokens=h,Object.defineProperty(exports,"formatTokenValue",{enumerable:!0,get:function(){return t.formatTokenValue}}),exports.generateTamaguiConfig=k,exports.renderTamaguiConfig=O,exports.resolveTokenCategory=d,exports.resolveTokenSets=m,Object.defineProperty(exports,"toCssVar",{enumerable:!0,get:function(){return t.toCssVar}}),exports.toTamaguiValue=i,exports.toTokenKey=f;
77
+ `)}function k(e,r={}){if(!e.tokens||Object.keys(e.tokens).length===0)return{};let i=m(e.tokens,r);if(i.length===0)return{};let a=r.outFile??`tamagui.config.ts`,o=O(i,r),s=r.installGuide??h({outFile:a}),c=(0,n.join)((0,n.dirname)(a),`INSTALL.md`);return{[a]:(0,t.createDocument)(a,o,{name:`razorwind-tamagui`},`typescript`),[c]:(0,t.createDocument)(c,s,{name:`razorwind-tamagui`},`markdown`)}}var A=(0,e.definePlugin)(e=>({name:`tamagui`,generate:async t=>k(t,e??{})}));exports.collectColorScales=C,exports.default=A,exports.flattenTokens=m,Object.defineProperty(exports,"formatTokenValue",{enumerable:!0,get:function(){return t.formatTokenValue}}),exports.generateTamaguiConfig=k,exports.renderInstallMd=h,exports.renderTamaguiConfig=O,exports.resolveTokenCategory=d,exports.resolveTokenSets=t.resolveTokenSets,Object.defineProperty(exports,"toCssVar",{enumerable:!0,get:function(){return t.toCssVar}}),exports.toTamaguiValue=a,exports.toTokenKey=f;
package/dist/index.d.cts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { TokenType } from "@power-plant/dtcg-schema";
2
2
  import { Schema, Tokens } from "@razorwind/core/schema";
3
- import { formatTokenValue, toCssVar } from "@razorwind/core/utils";
3
+ import { formatTokenValue, resolveTokenSets, toCssVar } from "@razorwind/core/utils";
4
4
  import { GeneratorFunctionResult } from "@power-plant/core";
5
5
  //#region src/types.d.ts
6
6
  /**
@@ -50,6 +50,11 @@ interface TamaguiPluginOptions {
50
50
  * @defaultValue `true`
51
51
  */
52
52
  includeTypeAugmentation?: boolean;
53
+ /**
54
+ * Override body for generated `INSTALL.md`. When omitted, Tamagui wiring
55
+ * steps are generated for the output config file.
56
+ */
57
+ installGuide?: string;
53
58
  }
54
59
  /**
55
60
  * A flattened design token ready for Tamagui config emission.
@@ -87,17 +92,6 @@ declare function resolveTokenCategory(path: string, type?: string): TamaguiToken
87
92
  * `color.blue.1` → `blue1`.
88
93
  */
89
94
  declare function toTokenKey(path: string): string;
90
- interface TokenSet {
91
- id: string;
92
- tokens: Tokens;
93
- }
94
- /**
95
- * Split `Schema.tokens` into one or more named token sets.
96
- *
97
- * A record whose keys all look like themes (`light`, `dark`, …) is treated as
98
- * multi-theme input; otherwise the whole document is a single set.
99
- */
100
- declare function resolveTokenSets(tokens: Tokens | Record<string, Tokens>): TokenSet[];
101
95
  /**
102
96
  * Flatten DTCG token trees into Tamagui config rows.
103
97
  */
@@ -112,6 +106,16 @@ declare function flattenTokens(tokens: Tokens | Record<string, Tokens>, options?
112
106
  */
113
107
  declare function toTamaguiValue(value: unknown, type?: string): string | number;
114
108
  //#endregion
109
+ //#region src/install.d.ts
110
+ /**
111
+ * Build Tamagui INSTALL.md for generated config file.
112
+ *
113
+ * @see https://tamagui.dev/docs/core/config-v5
114
+ */
115
+ declare function renderInstallMd(options: {
116
+ outFile: string;
117
+ }): string;
118
+ //#endregion
115
119
  //#region src/generate.d.ts
116
120
  /**
117
121
  * Detect 1–12 (or 0–11) stepped color scales for `createV5Theme` childrenThemes.
@@ -149,5 +153,5 @@ declare function generateTamaguiConfig(spec: Schema, options?: TamaguiPluginOpti
149
153
  */
150
154
  declare const _default: (options?: TamaguiPluginOptions | undefined) => import("@razorwind/core/plugin").Plugin;
151
155
  //#endregion
152
- export { type FlatToken, type TamaguiAnimationDriver, type TamaguiPluginOptions, type TamaguiTokenCategory, collectColorScales, _default as default, flattenTokens, formatTokenValue, generateTamaguiConfig, renderTamaguiConfig, resolveTokenCategory, resolveTokenSets, toCssVar, toTamaguiValue, toTokenKey };
156
+ export { type FlatToken, type TamaguiAnimationDriver, type TamaguiPluginOptions, type TamaguiTokenCategory, collectColorScales, _default as default, flattenTokens, formatTokenValue, generateTamaguiConfig, renderInstallMd, renderTamaguiConfig, resolveTokenCategory, resolveTokenSets, toCssVar, toTamaguiValue, toTokenKey };
153
157
  //# sourceMappingURL=index.d.cts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.cts","names":[],"sources":["../src/types.ts","../src/flatten.ts","../src/format.ts","../src/generate.ts","../src/index.ts"],"mappings":";;;;;;;;;;KAyBY;;;;KAMA;;;;UAMK;;;;;;EAMf;;;;;;;EAQA,aAAa;;;;;;;;EASb;;;;;EAMA,eAAe;;;;;;;EAQf;;;;;UAMe;;EAEf;;EAEA,OAAO;;EAEP;;EAEA;;EAEA;;EAEA,WAAW;;EAEX;;EAEA;;EAEA;;;;;;;iBCRc,qBACd,cACA,gBACC;;;;;;;iBAuCa,WAAW;UAoEV;EACf;EACA,QAAQ;;;;;;;;iBASM,iBACd,QAAQ,SAAS,eAAe,UAC/B;;;;iBAuBa,cACd,QAAQ,SAAS,eAAe,SAChC,UAAS,KAAK,wCACb;;;;;;;;;iBCrLa,eAAe,gBAAgB;;;;;;;;iBCkE/B,mBACd,aAAa,cACZ,eAAe;;;;;;iBAgKF,oBACd,QAAQ,aACR,UAAS;;;;iBAwLK,sBACd,MAAM,QACN,UAAS,uBACR,wBAAwB,QAAQ"}
1
+ {"version":3,"file":"index.d.cts","names":[],"sources":["../src/types.ts","../src/flatten.ts","../src/format.ts","../src/install.ts","../src/generate.ts","../src/index.ts"],"mappings":";;;;;;;;;;KAyBY;;;;KAMA;;;;UAMK;;;;;;EAMf;;;;;;;EAQA,aAAa;;;;;;;;EASb;;;;;EAMA,eAAe;;;;;;;EAQf;;;;;EAMA;;;;;UAMe;;EAEf;;EAEA,OAAO;;EAEP;;EAEA;;EAEA;;EAEA,WAAW;;EAEX;;EAEA;;EAEA;;;;;;;iBCfc,qBACd,cACA,gBACC;;;;;;;iBAuCa,WAAW;;;;iBAuEX,cACd,QAAQ,SAAS,eAAe,SAChC,UAAS,KAAK,wCACb;;;;;;;;;iBCnJa,eAAe,gBAAgB;;;;;;;;iBCnC/B,gBAAgB;EAAW;;;;;;;;;iBCuG3B,mBACd,aAAa,cACZ,eAAe;;;;;;iBAgKF,oBACd,QAAQ,aACR,UAAS;;;;iBA0LK,sBACd,MAAM,QACN,UAAS,uBACR,wBAAwB,QAAQ"}
package/dist/index.d.mts CHANGED
@@ -1,4 +1,4 @@
1
- import { formatTokenValue, toCssVar } from "@razorwind/core/utils";
1
+ import { formatTokenValue, resolveTokenSets, toCssVar } from "@razorwind/core/utils";
2
2
  import { TokenType } from "@power-plant/dtcg-schema";
3
3
  import { Schema, Tokens } from "@razorwind/core/schema";
4
4
  import { GeneratorFunctionResult } from "@power-plant/core";
@@ -50,6 +50,11 @@ interface TamaguiPluginOptions {
50
50
  * @defaultValue `true`
51
51
  */
52
52
  includeTypeAugmentation?: boolean;
53
+ /**
54
+ * Override body for generated `INSTALL.md`. When omitted, Tamagui wiring
55
+ * steps are generated for the output config file.
56
+ */
57
+ installGuide?: string;
53
58
  }
54
59
  /**
55
60
  * A flattened design token ready for Tamagui config emission.
@@ -87,17 +92,6 @@ declare function resolveTokenCategory(path: string, type?: string): TamaguiToken
87
92
  * `color.blue.1` → `blue1`.
88
93
  */
89
94
  declare function toTokenKey(path: string): string;
90
- interface TokenSet {
91
- id: string;
92
- tokens: Tokens;
93
- }
94
- /**
95
- * Split `Schema.tokens` into one or more named token sets.
96
- *
97
- * A record whose keys all look like themes (`light`, `dark`, …) is treated as
98
- * multi-theme input; otherwise the whole document is a single set.
99
- */
100
- declare function resolveTokenSets(tokens: Tokens | Record<string, Tokens>): TokenSet[];
101
95
  /**
102
96
  * Flatten DTCG token trees into Tamagui config rows.
103
97
  */
@@ -112,6 +106,16 @@ declare function flattenTokens(tokens: Tokens | Record<string, Tokens>, options?
112
106
  */
113
107
  declare function toTamaguiValue(value: unknown, type?: string): string | number;
114
108
  //#endregion
109
+ //#region src/install.d.ts
110
+ /**
111
+ * Build Tamagui INSTALL.md for generated config file.
112
+ *
113
+ * @see https://tamagui.dev/docs/core/config-v5
114
+ */
115
+ declare function renderInstallMd(options: {
116
+ outFile: string;
117
+ }): string;
118
+ //#endregion
115
119
  //#region src/generate.d.ts
116
120
  /**
117
121
  * Detect 1–12 (or 0–11) stepped color scales for `createV5Theme` childrenThemes.
@@ -149,5 +153,5 @@ declare function generateTamaguiConfig(spec: Schema, options?: TamaguiPluginOpti
149
153
  */
150
154
  declare const _default: (options?: TamaguiPluginOptions | undefined) => import("@razorwind/core/plugin").Plugin;
151
155
  //#endregion
152
- export { type FlatToken, type TamaguiAnimationDriver, type TamaguiPluginOptions, type TamaguiTokenCategory, collectColorScales, _default as default, flattenTokens, formatTokenValue, generateTamaguiConfig, renderTamaguiConfig, resolveTokenCategory, resolveTokenSets, toCssVar, toTamaguiValue, toTokenKey };
156
+ export { type FlatToken, type TamaguiAnimationDriver, type TamaguiPluginOptions, type TamaguiTokenCategory, collectColorScales, _default as default, flattenTokens, formatTokenValue, generateTamaguiConfig, renderInstallMd, renderTamaguiConfig, resolveTokenCategory, resolveTokenSets, toCssVar, toTamaguiValue, toTokenKey };
153
157
  //# sourceMappingURL=index.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../src/types.ts","../src/flatten.ts","../src/format.ts","../src/generate.ts","../src/index.ts"],"mappings":""}
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../src/types.ts","../src/flatten.ts","../src/format.ts","../src/install.ts","../src/generate.ts","../src/index.ts"],"mappings":""}
package/dist/index.mjs CHANGED
@@ -1,17 +1,55 @@
1
- import{definePlugin as e}from"@razorwind/core/plugin";import{createDocument as t,formatTokenValue as n,isObject as r,toCssVar as i}from"@razorwind/core/utils";function a(e){return e.replaceAll(`\\`,`\\\\`).replaceAll(`"`,`\\"`).replaceAll(`
2
- `,`\\n`).replaceAll(`\r`,`\\r`)}function o(e){return typeof e==`string`?`"${a(e)}"`:typeof e==`number`||typeof e==`boolean`?String(e):e==null?`undefined`:JSON.stringify(e)}function s(e,t){if(typeof e==`number`)return e;if(typeof e==`boolean`)return Number(e);if(r(e)&&typeof e.value==`number`&&typeof e.unit==`string`){let t=e.unit.toLowerCase();return t===`px`||t===``?e.value:t===`rem`?e.value*16:`${e.value}${e.unit}`}if(typeof e==`string`){let t=/^(-?\d+(?:\.\d+)?)px$/i.exec(e.trim());if(t)return Number(t[1]);let n=/^(-?\d+(?:\.\d+)?)rem$/i.exec(e.trim());if(n)return Number(n[1])*16;let r=Number(e);return!Number.isNaN(r)&&e.trim()!==``?r:e}return String(e)}const c=/^(?:light|dark|dim|high-contrast|hc|default|base|theme)(?:[._-].+)?$/i,l=[{prefix:/^(?:color|colours?|palette)\b/i,category:`color`},{prefix:/^(?:space|spacing|gap|inset)\b/i,category:`space`},{prefix:/^(?:size|sizing)\b/i,category:`size`},{prefix:/^(?:radius|rounded|radii)\b/i,category:`radius`},{prefix:/^(?:z-?index|zindex|elevation)\b/i,category:`zIndex`}];function u(e){return`$value`in e||`value`in e||`$ref`in e||`ref`in e}function d(e){if(typeof e.$description==`string`)return e.$description;if(typeof e.description==`string`)return e.description}function f(e,t){return typeof e.$type==`string`?e.$type:typeof e.type==`string`?e.type:t}function p(e){if(`$value`in e)return e.$value;if(`value`in e)return e.value;if(typeof e.$ref==`string`)return e.$ref;if(typeof e.ref==`string`)return e.ref}function m(e,t){for(let{prefix:t,category:n}of l)if(t.test(e))return n;if(t===`color`)return`color`;if(t===`dimension`){if(/space|spacing|gap|inset/i.test(e))return`space`;if(/radius|rounded/i.test(e))return`radius`;if(/z-?index|elevation/i.test(e))return`zIndex`;if(/size|sizing|width|height/i.test(e))return`size`}if(t===`number`&&/z-?index|elevation/i.test(e))return`zIndex`}function h(e){let t=e.split(`.`).filter(Boolean),n=t[0];n&&/^(?:color|colours?|palette|space|spacing|gap|inset|size|sizing|radius|rounded|radii|z-?index|zindex|elevation)$/i.test(n)&&t.shift();let r=t.join(``)||e.split(`.`).at(-1)||e;return/^(?:DEFAULT|default)$/i.test(r)?`true`:r}function g(e,t,i,a,o){if(!r(e))return;let c=f(e,i);if(u(e)){let r=p(e),i=t.join(`.`),l=m(i,c),u=n(r,c),f=l===`color`||c===`color`?u:s(r,c);o.push({path:i,type:c,value:r,cssValue:u,tamaguiValue:f,category:l,tokenKey:l?h(i):void 0,description:d(e),theme:a});return}for(let[n,r]of Object.entries(e))n.startsWith(`$`)||g(r,[...t,n],c,a,o)}function _(e){if(!r(e))return[];let t=Object.keys(e).filter(e=>!e.startsWith(`$`));if(t.length>0&&t.every(e=>c.test(e))){let n=e;return t.map(e=>({id:e,tokens:n[e]}))}return[{id:`default`,tokens:e}]}function v(e,t={}){let n=t.includeTypes?new Set(t.includeTypes):void 0,r=[];for(let t of _(e)){let e=t.id==="default"?void 0:t.id;g(t.tokens,[],void 0,e,r)}return n?r.filter(e=>!e.type||n.has(e.type)):r}const y=new Set([`default`,`base`,`light`,`theme`]),b=new Set([`gray`,`grey`,`neutral`,`slate`,`zinc`,`stone`,`palette`,`base`]),x={css:`@tamagui/config/v5-css`,rn:`@tamagui/config/v5-rn`,reanimated:`@tamagui/config/v5-reanimated`,motion:`@tamagui/config/v5-motion`};function S(e){let t=new Set(e.map(e=>e.theme).filter(e=>!!e));if(t.size===0)return e;for(let t of y){let n=e.filter(e=>e.theme?.toLowerCase()===t);if(n.length>0)return n}let n=[...t][0];return e.filter(e=>e.theme===n)}function C(e,t){return e.filter(e=>e.theme?.toLowerCase()===t)}function w(e){let t={};for(let n of e){if(!n.category||!n.tokenKey)continue;let e=t[n.category]??{};e[n.tokenKey]=n.tamaguiValue,t[n.category]=e}return t}function T(e,t=2){let n=` `.repeat(t),r=Object.entries(e).toSorted(([e],[t])=>e.localeCompare(t));return r.length===0?`{}`:`{\n${r.map(([e,t])=>{let r=/^[A-Z_$][\w$]*$/i.test(e)?e:o(e);return`${n}${r}: ${o(t)}`}).join(`,
3
- `)}\n${` `.repeat(Math.max(t-2,0))}}`}function E(e){let t={},n=new Map;for(let t of e)!t.tokenKey||typeof t.tamaguiValue!=`string`||n.set(t.tokenKey,t.tamaguiValue);let r=/^([A-Z]+)(\d{1,2})$/i;for(let[e,i]of n){let n=r.exec(e);if(!n)continue;let[,a=``,o=``]=n,s=Number(o);if(s<0||s>12)continue;let c=t[a]??{};c[`${a}${s}`]=i,t[a]=c}return Object.fromEntries(Object.entries(t).filter(([,e])=>Object.keys(e).length>=3))}function D(e,t){let n=[];for(let r=1;r<=12;r++){let i=e[`${t}${r}`];if(!i)return;n.push(i)}return n}function O(e){let t=S(e.filter(e=>e.category===`color`)),n=C(e.filter(e=>e.category===`color`),`dark`),r=E(t),i=E(n),a,o;for(let e of Object.keys(r))if(b.has(e.toLowerCase())&&(a=D(r[e],e),a))break;for(let e of Object.keys(i))if(b.has(e.toLowerCase())&&(o=D(i[e],e),o))break;return{lightPalette:a,darkPalette:o}}function k(e){let t=E(e),n={};for(let r of e)r.category!==`color`||!r.tokenKey||typeof r.tamaguiValue!=`string`||/^[A-Z]+\d{1,2}$/i.test(r.tokenKey)&&t[r.tokenKey.replace(/\d{1,2}$/,``)]||(n[r.tokenKey]=r.tamaguiValue);return n}function A(e,t){let n=new Set([...Object.keys(e),...Object.keys(t)]);if(n.size===0)return;let r=[];for(let i of[...n].toSorted((e,t)=>e.localeCompare(t))){if(b.has(i.toLowerCase()))continue;let n=e[i]??t[i],a=t[i]??e[i];!n||!a||r.push(` ${i}: {
4
- light: ${T(n,8)},
5
- dark: ${T(a,8)}
1
+ import{definePlugin as e}from"@razorwind/core/plugin";import{createDocument as t,formatTokenValue as n,isObject as r,resolveTokenSets as i,toCssVar as a}from"@razorwind/core/utils";import{dirname as o,join as s}from"node:path";function c(e){return e.replaceAll(`\\`,`\\\\`).replaceAll(`"`,`\\"`).replaceAll(`
2
+ `,`\\n`).replaceAll(`\r`,`\\r`)}function l(e){return typeof e==`string`?`"${c(e)}"`:typeof e==`number`||typeof e==`boolean`?String(e):e==null?`undefined`:JSON.stringify(e)}function u(e,t){if(typeof e==`number`)return e;if(typeof e==`boolean`)return Number(e);if(r(e)&&typeof e.value==`number`&&typeof e.unit==`string`){let t=e.unit.toLowerCase();return t===`px`||t===``?e.value:t===`rem`?e.value*16:`${e.value}${e.unit}`}if(typeof e==`string`){let t=/^(-?\d+(?:\.\d+)?)px$/i.exec(e.trim());if(t)return Number(t[1]);let n=/^(-?\d+(?:\.\d+)?)rem$/i.exec(e.trim());if(n)return Number(n[1])*16;let r=Number(e);return!Number.isNaN(r)&&e.trim()!==``?r:e}return String(e)}const d=[{prefix:/^(?:color|colours?|palette)\b/i,category:`color`},{prefix:/^(?:space|spacing|gap|inset)\b/i,category:`space`},{prefix:/^(?:size|sizing)\b/i,category:`size`},{prefix:/^(?:radius|rounded|radii)\b/i,category:`radius`},{prefix:/^(?:z-?index|zindex|elevation)\b/i,category:`zIndex`}];function f(e){return`$value`in e||`value`in e||`$ref`in e||`ref`in e}function p(e){if(typeof e.$description==`string`)return e.$description;if(typeof e.description==`string`)return e.description}function m(e,t){return typeof e.$type==`string`?e.$type:typeof e.type==`string`?e.type:t}function h(e){if(`$value`in e)return e.$value;if(`value`in e)return e.value;if(typeof e.$ref==`string`)return e.$ref;if(typeof e.ref==`string`)return e.ref}function g(e,t){for(let{prefix:t,category:n}of d)if(t.test(e))return n;if(t===`color`)return`color`;if(t===`dimension`){if(/space|spacing|gap|inset/i.test(e))return`space`;if(/radius|rounded/i.test(e))return`radius`;if(/z-?index|elevation/i.test(e))return`zIndex`;if(/size|sizing|width|height/i.test(e))return`size`}if(t===`number`&&/z-?index|elevation/i.test(e))return`zIndex`}function _(e){let t=e.split(`.`).filter(Boolean),n=t[0];n&&/^(?:color|colours?|palette|space|spacing|gap|inset|size|sizing|radius|rounded|radii|z-?index|zindex|elevation)$/i.test(n)&&t.shift();let r=t.join(``)||e.split(`.`).at(-1)||e;return/^(?:DEFAULT|default)$/i.test(r)?`true`:r}function v(e,t,i,a,o){if(!r(e))return;let s=m(e,i);if(f(e)){let r=h(e),i=t.join(`.`),c=g(i,s),l=n(r,s),d=c===`color`||s===`color`?l:u(r,s);o.push({path:i,type:s,value:r,cssValue:l,tamaguiValue:d,category:c,tokenKey:c?_(i):void 0,description:p(e),theme:a});return}for(let[n,r]of Object.entries(e))n.startsWith(`$`)||v(r,[...t,n],s,a,o)}function y(e,t={}){let n=t.includeTypes?new Set(t.includeTypes):void 0,r=[];for(let t of i(e)){let e=t.id==="default"?void 0:t.id;v(t.tokens,[],void 0,e,r)}return n?r.filter(e=>!e.type||n.has(e.type)):r}function b(e){return`# Installing Tamagui Config
3
+
4
+ Generated by \`@razorwind/tamagui\`.
5
+
6
+ ## Files
7
+
8
+ - \`${e.outFile}\` — Tamagui v5 config (\`createTamagui\` + generated tokens/themes)
9
+
10
+ ## Setup
11
+
12
+ 1. Point Tamagui at the generated config:
13
+
14
+ \`\`\`ts
15
+ import config from "./${e.outFile}";
16
+
17
+ export default config;
18
+ \`\`\`
19
+
20
+ 2. Wrap your app with Tamagui (example):
21
+
22
+ \`\`\`tsx
23
+ import { TamaguiProvider } from "tamagui";
24
+ import config from "./${e.outFile}";
25
+
26
+ export function App() {
27
+ return (
28
+ <TamaguiProvider config={config} defaultTheme="light">
29
+ {/* … */}
30
+ </TamaguiProvider>
31
+ );
32
+ }
33
+ \`\`\`
34
+
35
+ 3. Use token props such as \`color="$primary"\` or \`padding="$sm"\` per your generated token map.
36
+
37
+ ## Regenerate
38
+
39
+ Re-run Razorwind generate when tokens change so \`${e.outFile}\` stays aligned with your design system.
40
+ `}const x=new Set([`default`,`base`,`light`,`theme`]),S=new Set([`gray`,`grey`,`neutral`,`slate`,`zinc`,`stone`,`palette`,`base`]),C={css:`@tamagui/config/v5-css`,rn:`@tamagui/config/v5-rn`,reanimated:`@tamagui/config/v5-reanimated`,motion:`@tamagui/config/v5-motion`};function w(e){let t=new Set(e.map(e=>e.theme).filter(e=>!!e));if(t.size===0)return e;for(let t of x){let n=e.filter(e=>e.theme?.toLowerCase()===t);if(n.length>0)return n}let n=[...t][0];return e.filter(e=>e.theme===n)}function T(e,t){return e.filter(e=>e.theme?.toLowerCase()===t)}function E(e){let t={};for(let n of e){if(!n.category||!n.tokenKey)continue;let e=t[n.category]??{};e[n.tokenKey]=n.tamaguiValue,t[n.category]=e}return t}function D(e,t=2){let n=` `.repeat(t),r=Object.entries(e).toSorted(([e],[t])=>e.localeCompare(t));return r.length===0?`{}`:`{\n${r.map(([e,t])=>{let r=/^[A-Z_$][\w$]*$/i.test(e)?e:l(e);return`${n}${r}: ${l(t)}`}).join(`,
41
+ `)}\n${` `.repeat(Math.max(t-2,0))}}`}function O(e){let t={},n=new Map;for(let t of e)!t.tokenKey||typeof t.tamaguiValue!=`string`||n.set(t.tokenKey,t.tamaguiValue);let r=/^([A-Z]+)(\d{1,2})$/i;for(let[e,i]of n){let n=r.exec(e);if(!n)continue;let[,a=``,o=``]=n,s=Number(o);if(s<0||s>12)continue;let c=t[a]??{};c[`${a}${s}`]=i,t[a]=c}return Object.fromEntries(Object.entries(t).filter(([,e])=>Object.keys(e).length>=3))}function k(e,t){let n=[];for(let r=1;r<=12;r++){let i=e[`${t}${r}`];if(!i)return;n.push(i)}return n}function A(e){let t=w(e.filter(e=>e.category===`color`)),n=T(e.filter(e=>e.category===`color`),`dark`),r=O(t),i=O(n),a,o;for(let e of Object.keys(r))if(S.has(e.toLowerCase())&&(a=k(r[e],e),a))break;for(let e of Object.keys(i))if(S.has(e.toLowerCase())&&(o=k(i[e],e),o))break;return{lightPalette:a,darkPalette:o}}function j(e){let t=O(e),n={};for(let r of e)r.category!==`color`||!r.tokenKey||typeof r.tamaguiValue!=`string`||/^[A-Z]+\d{1,2}$/i.test(r.tokenKey)&&t[r.tokenKey.replace(/\d{1,2}$/,``)]||(n[r.tokenKey]=r.tamaguiValue);return n}function M(e,t){let n=new Set([...Object.keys(e),...Object.keys(t)]);if(n.size===0)return;let r=[];for(let i of[...n].toSorted((e,t)=>e.localeCompare(t))){if(S.has(i.toLowerCase()))continue;let n=e[i]??t[i],a=t[i]??e[i];!n||!a||r.push(` ${i}: {
42
+ light: ${D(n,8)},
43
+ dark: ${D(a,8)}
6
44
  }`)}if(r.length!==0)return`{\n${r.join(`,
7
- `)}\n }`}function j(e,t={}){let n=t.useDefaultConfig!==!1,r=t.animations??`css`,i=t.includeTypeAugmentation!==!1,a=w(S(e)),s=S(e.filter(e=>e.category===`color`)),c=C(e.filter(e=>e.category===`color`),`dark`),l=E(s),u=E(c.length>0?c:s),{lightPalette:d,darkPalette:f}=O(e),p=A(l,u),m=k(s),h=k(c.length>0?c:s),g=Object.keys(m).length>0||Object.keys(h).length>0,_=[];for(let e of[`color`,`space`,`size`,`radius`,`zIndex`]){let t=a[e];t&&Object.keys(t).length>0&&_.push(` ${e}: ${T(t,4)}`)}let v=[];d&&v.push(` lightPalette: ${o(d)}`),f&&v.push(` darkPalette: ${o(f)}`),p&&v.push(` childrenThemes: ${p}`),g&&v.push(` getTheme: ({ scheme }) => {
45
+ `)}\n }`}function N(e,t={}){let n=t.useDefaultConfig!==!1,r=t.animations??`css`,i=t.includeTypeAugmentation!==!1,a=E(w(e)),o=w(e.filter(e=>e.category===`color`)),s=T(e.filter(e=>e.category===`color`),`dark`),c=O(o),u=O(s.length>0?s:o),{lightPalette:d,darkPalette:f}=A(e),p=M(c,u),m=j(o),h=j(s.length>0?s:o),g=Object.keys(m).length>0||Object.keys(h).length>0,_=[];for(let e of[`color`,`space`,`size`,`radius`,`zIndex`]){let t=a[e];t&&Object.keys(t).length>0&&_.push(` ${e}: ${D(t,4)}`)}let v=[];d&&v.push(` lightPalette: ${l(d)}`),f&&v.push(` darkPalette: ${l(f)}`),p&&v.push(` childrenThemes: ${p}`),g&&v.push(` getTheme: ({ scheme }) => {
8
46
  const semantic = scheme === "dark"
9
- ? ${T(h,8)}
10
- : ${T(m,8)};
47
+ ? ${D(h,8)}
48
+ : ${D(m,8)};
11
49
  return semantic;
12
- }`);let y=[];n?y.push(`import { createV5Theme, defaultConfig } from "@tamagui/config/v5";`):y.push(`import { createV5Theme } from "@tamagui/config/v5";`),r!==!1&&y.push(`import { animations } from "${x[r]}";`);let b=[`createTamagui`];_.length>0&&b.push(`createTokens`),y.push(`import { ${b.join(`, `)} } from "tamagui";`);let D=[`/* eslint-disable */`,`/*`,` * Generated by @razorwind/tamagui — do not edit by hand.`,` * @see https://tamagui.dev/docs/core/config-v5`,` */`,``,...y,``];_.length>0&&D.push(`const tokens = createTokens({`,_.join(`,
13
- `),`});`,``);let j=v.length>0?`createV5Theme({\n${v.join(`,
14
- `)}\n})`:`createV5Theme()`;D.push(`const themes = ${j};`,``);let M=[];return n&&M.push(` ...defaultConfig`),r!==!1&&M.push(` animations`),_.length>0&&(n?M.push(` tokens: {
50
+ }`);let y=[];n?y.push(`import { createV5Theme, defaultConfig } from "@tamagui/config/v5";`):y.push(`import { createV5Theme } from "@tamagui/config/v5";`),r!==!1&&y.push(`import { animations } from "${C[r]}";`);let b=[`createTamagui`];_.length>0&&b.push(`createTokens`),y.push(`import { ${b.join(`, `)} } from "tamagui";`);let x=[`/* eslint-disable */`,`/*`,` * Generated by @razorwind/tamagui — do not edit by hand.`,` * @see https://tamagui.dev/docs/core/config-v5`,` */`,``,...y,``];_.length>0&&x.push(`const tokens = createTokens({`,_.join(`,
51
+ `),`});`,``);let S=v.length>0?`createV5Theme({\n${v.join(`,
52
+ `)}\n})`:`createV5Theme()`;x.push(`const themes = ${S};`,``);let k=[];return n&&k.push(` ...defaultConfig`),r!==!1&&k.push(` animations`),_.length>0&&(n?k.push(` tokens: {
15
53
  ...defaultConfig.tokens,
16
54
  ...tokens,
17
55
  color: {
@@ -34,7 +72,7 @@ import{definePlugin as e}from"@razorwind/core/plugin";import{createDocument as t
34
72
  ...defaultConfig.tokens.zIndex,
35
73
  ...tokens.zIndex
36
74
  }
37
- }`):M.push(` tokens`)),M.push(` themes`),D.push(`export const config = createTamagui({`,M.join(`,
38
- `),`});`,``,`export type AppConfig = typeof config;`,``),i&&D.push(`declare module "tamagui" {`,` // eslint-disable-next-line @typescript-eslint/no-empty-object-type`,` interface TamaguiCustomConfig extends AppConfig {}`,`}`,``),D.push(`export default config;`,``),D.join(`
39
- `)}function M(e,n={}){if(!e.tokens||Object.keys(e.tokens).length===0)return{};let r=v(e.tokens,n);if(r.length===0)return{};let i=n.outFile??`tamagui.config.ts`,a=j(r,n);return{[i]:t(i,a,{name:`razorwind-tamagui`},`typescript`)}}var N=e(e=>({name:`tamagui`,generate:async t=>M(t,e??{})}));export{E as collectColorScales,N as default,v as flattenTokens,n as formatTokenValue,M as generateTamaguiConfig,j as renderTamaguiConfig,m as resolveTokenCategory,_ as resolveTokenSets,i as toCssVar,s as toTamaguiValue,h as toTokenKey};
75
+ }`):k.push(` tokens`)),k.push(` themes`),x.push(`export const config = createTamagui({`,k.join(`,
76
+ `),`});`,``,`export type AppConfig = typeof config;`,``),i&&x.push(`declare module "tamagui" {`,` // eslint-disable-next-line @typescript-eslint/no-empty-object-type`,` interface TamaguiCustomConfig extends AppConfig {}`,`}`,``),x.push(`export default config;`,``),x.join(`
77
+ `)}function P(e,n={}){if(!e.tokens||Object.keys(e.tokens).length===0)return{};let r=y(e.tokens,n);if(r.length===0)return{};let i=n.outFile??`tamagui.config.ts`,a=N(r,n),c=n.installGuide??b({outFile:i}),l=s(o(i),`INSTALL.md`);return{[i]:t(i,a,{name:`razorwind-tamagui`},`typescript`),[l]:t(l,c,{name:`razorwind-tamagui`},`markdown`)}}var F=e(e=>({name:`tamagui`,generate:async t=>P(t,e??{})}));export{O as collectColorScales,F as default,y as flattenTokens,n as formatTokenValue,P as generateTamaguiConfig,b as renderInstallMd,N as renderTamaguiConfig,g as resolveTokenCategory,i as resolveTokenSets,a as toCssVar,u as toTamaguiValue,_ as toTokenKey};
40
78
  //# sourceMappingURL=index.mjs.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@razorwind/tamagui",
3
- "version": "0.0.17",
3
+ "version": "0.0.18",
4
4
  "type": "module",
5
5
  "description": "Razorwind plugin that creates Tamagui theme tokens from Razorwind design tokens.",
6
6
  "repository": {
@@ -83,9 +83,9 @@
83
83
  "types": "./dist/index.d.cts",
84
84
  "typings": "dist/index.d.mts",
85
85
  "dependencies": {
86
- "@power-plant/core": "^0.0.75",
86
+ "@power-plant/core": "^0.0.81",
87
87
  "@power-plant/dtcg-schema": "^0.0.1",
88
- "@razorwind/core": "0.0.29",
88
+ "@razorwind/core": "^0.0.30",
89
89
  "@stryke/type-checks": "^0.6.35"
90
90
  },
91
91
  "peerDependencies": {
@@ -99,10 +99,10 @@
99
99
  "tamagui": { "optional": true }
100
100
  },
101
101
  "devDependencies": {
102
- "@powerlines/plugin-tsdown": "^0.1.589",
102
+ "@powerlines/plugin-tsdown": "^0.1.590",
103
103
  "@types/node": "^25.9.5",
104
104
  "typescript": "^6.0.3"
105
105
  },
106
106
  "publishConfig": { "access": "public" },
107
- "gitHead": "a861c6938501ed645ccdcd3970fc1164d110b4ed"
107
+ "gitHead": "11a6e827627acf51ef0044e366fd9493f2173ec2"
108
108
  }