@razorwind/tamagui 0.0.34 → 0.0.36

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,18 +1,18 @@
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
1
+ Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});let e=require("@razorwind/core/plugin"),t=require("@razorwind/core/lib/fonts"),n=require("@razorwind/core/utils"),r=require("node:path");function i(e){return e.replaceAll(`\\`,`\\\\`).replaceAll(`"`,`\\"`).replaceAll(`
2
+ `,`\\n`).replaceAll(`\r`,`\\r`)}function a(e){return typeof e==`string`?`"${i(e)}"`:typeof e==`number`||typeof e==`boolean`?String(e):e==null?`undefined`:JSON.stringify(e)}function o(e,t){if(typeof e==`number`)return e;if(typeof e==`boolean`)return Number(e);if((0,n.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 s=[{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 c(e){return`$value`in e||`value`in e||`$ref`in e||`ref`in e}function l(e){if(typeof e.$description==`string`)return e.$description;if(typeof e.description==`string`)return e.description}function u(e,t){return typeof e.$type==`string`?e.$type:typeof e.type==`string`?e.type:t}function d(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 f(e,t){for(let{prefix:t,category:n}of s)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 p(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 m(e,t,r,i,a){if(!(0,n.isObject)(e))return;let s=u(e,r);if(c(e)){let r=d(e),c=t.join(`.`),u=f(c,s),m=(0,n.formatTokenValue)(r,s),h=u===`color`||s===`color`?m:o(r,s);a.push({path:c,type:s,value:r,cssValue:m,tamaguiValue:h,category:u,tokenKey:u?p(c):void 0,description:l(e),theme:i});return}for(let[n,r]of Object.entries(e))n.startsWith(`$`)||m(r,[...t,n],s,i,a)}function h(e,t={}){let r=t.includeTypes?new Set(t.includeTypes):void 0,i=[];for(let t of(0,n.resolveTokenSets)(e)){let e=t.id==="default"?void 0:t.id;m(t.tokens,[],void 0,e,i)}return r?i.filter(e=>!e.type||r.has(e.type)):i}function g(e){return`# Installing Tamagui Config
3
3
 
4
4
  Generated by \`@razorwind/tamagui\`.
5
5
 
6
6
  ## Files
7
7
 
8
- - \`${e.outFile}\` — Tamagui v5 config (\`createTamagui\` + generated tokens/themes)
8
+ - \`${e.outputPath}\` — Tamagui v5 config (\`createTamagui\` + generated tokens/themes)
9
9
 
10
10
  ## Setup
11
11
 
12
12
  1. Point Tamagui at the generated config:
13
13
 
14
14
  \`\`\`ts
15
- import config from "./${e.outFile}";
15
+ import config from "./${e.outputPath}";
16
16
 
17
17
  export default config;
18
18
  \`\`\`
@@ -21,7 +21,7 @@ export default config;
21
21
 
22
22
  \`\`\`tsx
23
23
  import { TamaguiProvider } from "tamagui";
24
- import config from "./${e.outFile}";
24
+ import config from "./${e.outputPath}";
25
25
 
26
26
  export function App() {
27
27
  return (
@@ -36,20 +36,22 @@ export function App() {
36
36
 
37
37
  ## Regenerate
38
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(`,
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}: {
42
- light: ${S(n,8)},
43
- dark: ${S(a,8)}
39
+ Re-run Razorwind generate when tokens change so \`${e.outputPath}\` stays aligned with your design system.
40
+ `}const _=new Set([`default`,`base`,`light`,`theme`]),v=new Set([`gray`,`grey`,`neutral`,`slate`,`zinc`,`stone`,`palette`,`base`]),y={css:`@tamagui/config/v5-css`,rn:`@tamagui/config/v5-rn`,reanimated:`@tamagui/config/v5-reanimated`,motion:`@tamagui/config/v5-motion`};function b(e){let t=new Set(e.map(e=>e.theme).filter(e=>!!e));if(t.size===0)return e;for(let t of _){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 x(e,t){return e.filter(e=>e.theme?.toLowerCase()===t)}function S(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 C(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:a(e);return`${n}${r}: ${a(t)}`}).join(`,
41
+ `)}\n${` `.repeat(Math.max(t-2,0))}}`}function w(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 T(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 E(e){let t=b(e.filter(e=>e.category===`color`)),n=x(e.filter(e=>e.category===`color`),`dark`),r=w(t),i=w(n),a,o;for(let e of Object.keys(r))if(v.has(e.toLowerCase())&&(a=T(r[e],e),a))break;for(let e of Object.keys(i))if(v.has(e.toLowerCase())&&(o=T(i[e],e),o))break;return{lightPalette:a,darkPalette:o}}function D(e){let t=w(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 O(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(v.has(i.toLowerCase()))continue;let n=e[i]??t[i],a=t[i]??e[i];!n||!a||r.push(` ${i}: {
42
+ light: ${C(n,8)},
43
+ dark: ${C(a,8)}
44
44
  }`)}if(r.length!==0)return`{\n${r.join(`,
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 }) => {
45
+ `)}\n }`}function k(e){switch(e.role){case`heading`:case`display`:return`heading`;case`mono`:case`code`:return`mono`;case`sans`:case`body`:case`serif`:return`body`;case void 0:default:return e.name?.replaceAll(/\W/g,``)||`body`}}function A(e){let t=new Map;for(let n of Object.values(e)){let e=k(n),r=t.get(e);(!r||n.role===e&&r.role!==e)&&t.set(e,n)}return t}function j(e){let t=new Map;for(let n of e.files){let e=String(n.weight??400),i=(0,r.basename)(n.path).replace(/\.[^.]+$/,``),a=t.get(e)??{};n.style===`italic`||n.style===`oblique`?a.italic=i:a.normal=i,t.set(e,a)}if(t.size!==0)return`{\n${[...t.entries()].toSorted(([e],[t])=>e.localeCompare(t,void 0,{numeric:!0})).map(([e,t])=>{let n=[];return t.normal&&n.push(`normal: ${a(t.normal)}`),t.italic&&n.push(`italic: ${a(t.italic)}`),` ${e}: { ${n.join(`, `)} }`}).join(`,
46
+ `)}\n }`}function M(e,n){let r=e.source===`local`?j(e):void 0,i=[`const ${n} = createFont({`,` family: isWeb ? ${a((0,t.cssFontFamily)(e))} : ${a((0,t.fontFamilyName)(e))},`,` size: {`,` 1: 12,`,` 2: 14,`,` 3: 16,`,` 4: 18,`,` 5: 20,`,` 6: 24,`,` 7: 28,`,` 8: 32,`,` 9: 40,`,` 10: 48`,` }${r?`,`:``}`];return r&&i.push(` face: ${r}`),i.push(`});`),i.join(`
47
+ `)}function N(e,t={},n){let r=t.useDefaultConfig!==!1,i=t.animations??`css`,o=t.includeTypeAugmentation!==!1,s=S(b(e)),c=b(e.filter(e=>e.category===`color`)),l=x(e.filter(e=>e.category===`color`),`dark`),u=w(c),d=w(l.length>0?l:c),{lightPalette:f,darkPalette:p}=E(e),m=O(u,d),h=D(c),g=D(l.length>0?l:c),_=Object.keys(h).length>0||Object.keys(g).length>0,v=[];for(let e of[`color`,`space`,`size`,`radius`,`zIndex`]){let t=s[e];t&&Object.keys(t).length>0&&v.push(` ${e}: ${C(t,4)}`)}let T=[];f&&T.push(` lightPalette: ${a(f)}`),p&&T.push(` darkPalette: ${a(p)}`),m&&T.push(` childrenThemes: ${m}`),_&&T.push(` getTheme: ({ scheme }) => {
46
48
  const semantic = scheme === "dark"
47
- ? ${S(h,8)}
48
- : ${S(m,8)};
49
+ ? ${C(g,8)}
50
+ : ${C(h,8)};
49
51
  return semantic;
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(`,
51
- `),`});`,``);let j=w.length>0?`createV5Theme({\n${w.join(`,
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: {
52
+ }`);let k=[];r?k.push(`import { createV5Theme, defaultConfig } from "@tamagui/config/v5";`):k.push(`import { createV5Theme } from "@tamagui/config/v5";`),i!==!1&&k.push(`import { animations } from "${y[i]}";`);let j=[`createTamagui`];v.length>0&&j.push(`createTokens`);let N=n?A(n):new Map;N.size>0&&j.push(`createFont`,`isWeb`),k.push(`import { ${j.join(`, `)} } from "tamagui";`);let P=[`/* eslint-disable */`,`/*`,` * Generated by @razorwind/tamagui — do not edit by hand.`,` * @see https://tamagui.dev/docs/core/config-v5`,` */`,``,...k,``];v.length>0&&P.push(`const tokens = createTokens({`,v.join(`,
53
+ `),`});`,``);let F=T.length>0?`createV5Theme({\n${T.join(`,
54
+ `)}\n})`:`createV5Theme()`;P.push(`const themes = ${F};`,``);let I=new Map;if(N.size>0){let e=0;for(let[t,n]of N){let r=`${t}Font`.replaceAll(/\W/g,``)||`font${e}`;I.set(t,r),P.push(M(n,r),``),e+=1}}let L=[];if(r&&L.push(` ...defaultConfig`),i!==!1&&L.push(` animations`),v.length>0&&(r?L.push(` tokens: {
53
55
  ...defaultConfig.tokens,
54
56
  ...tokens,
55
57
  color: {
@@ -72,6 +74,13 @@ Re-run Razorwind generate when tokens change so \`${e.outFile}\` stays aligned w
72
74
  ...defaultConfig.tokens.zIndex,
73
75
  ...tokens.zIndex
74
76
  }
75
- }`):M.push(` tokens`)),M.push(` themes`),A.push(`export const config = createTamagui({`,M.join(`,
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(`
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;
77
+ }`):L.push(` tokens`)),L.push(` themes`),I.size>0){let e=[...I.entries()].map(([e,t])=>` ${e}: ${t}`);r?L.push(` fonts: {
78
+ ...defaultConfig.fonts,
79
+ ${e.join(`,
80
+ `)}
81
+ }`):L.push(` fonts: {
82
+ ${e.join(`,
83
+ `)}
84
+ }`)}return P.push(`export const config = createTamagui({`,L.join(`,
85
+ `),`});`,``,`export type AppConfig = typeof config;`,``),o&&P.push(`declare module "tamagui" {`,` // eslint-disable-next-line @typescript-eslint/no-empty-object-type`,` interface TamaguiCustomConfig extends AppConfig {}`,`}`,``),P.push(`export default config;`,``),P.join(`
86
+ `)}function P(e,t={}){let i=e.tokens&&Object.keys(e.tokens).length>0,a=e.fonts&&Object.keys(e.fonts).length>0;if(!i&&!a)return{};let o=i?h(e.tokens,t):[];if(o.length===0&&!a)return{};let s=t.outputPath??`tamagui.config.ts`,c=N(o,t,e.fonts),l=t.installGuide??g({outputPath:s}),u=(0,r.join)((0,r.dirname)(s),`INSTALL.md`);return{[s]:(0,n.createDocument)(s,c,{name:`razorwind-tamagui`},`typescript`),[u]:(0,n.createDocument)(u,l,{name:`razorwind-tamagui`},`markdown`)}}var F=(0,e.definePlugin)(e=>({name:`tamagui`,generate:async t=>P(t,e??{})}));exports.collectColorScales=w,exports.default=F,exports.flattenTokens=h,Object.defineProperty(exports,"formatTokenValue",{enumerable:!0,get:function(){return n.formatTokenValue}}),exports.generateTamaguiConfig=P,exports.renderInstallMd=g,exports.renderTamaguiConfig=N,exports.resolveTokenCategory=f,exports.resolveTokenSets=n.resolveTokenSets,Object.defineProperty(exports,"toCssVar",{enumerable:!0,get:function(){return n.toCssVar}}),exports.toTamaguiValue=o,exports.toTokenKey=p;
package/dist/index.d.cts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { TokenType } from "@power-plant/dtcg-schema";
2
- import { Schema, Tokens } from "@razorwind/core/schema";
2
+ import { Fonts, Schema, Tokens } from "@razorwind/core/schema";
3
3
  import { formatTokenValue, resolveTokenSets, toCssVar } from "@razorwind/core/utils";
4
4
  import { GeneratorFunctionResult } from "@power-plant/core";
5
5
  //#region src/types.d.ts
@@ -22,7 +22,7 @@ interface TamaguiPluginOptions {
22
22
  *
23
23
  * @defaultValue `"tamagui.config.ts"`
24
24
  */
25
- outFile?: string;
25
+ outputPath?: string;
26
26
  /**
27
27
  * Animation driver import from `@tamagui/config/v5-*`.
28
28
  * Set to `false` to omit animations (v5 base config includes none).
@@ -113,7 +113,7 @@ declare function toTamaguiValue(value: unknown, type?: string): string | number;
113
113
  * @see https://tamagui.dev/docs/core/config-v5
114
114
  */
115
115
  declare function renderInstallMd(options: {
116
- outFile: string;
116
+ outputPath: string;
117
117
  }): string;
118
118
  //#endregion
119
119
  //#region src/generate.d.ts
@@ -128,7 +128,7 @@ declare function collectColorScales(colorTokens: FlatToken[]): Record<string, Re
128
128
  *
129
129
  * @see https://tamagui.dev/docs/core/config-v5
130
130
  */
131
- declare function renderTamaguiConfig(tokens: FlatToken[], options?: TamaguiPluginOptions): string;
131
+ declare function renderTamaguiConfig(tokens: FlatToken[], options?: TamaguiPluginOptions, fonts?: Fonts): string;
132
132
  /**
133
133
  * Generate a Tamagui v5 config file from a Razorwind schema.
134
134
  */
@@ -1 +1 @@
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"}
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;;;;;;;;;iBCwG3B,mBACd,aAAa,cACZ,eAAe;;;;;;iBAkQF,oBACd,QAAQ,aACR,UAAS,sBACT,QAAQ;;;;iBA2NM,sBACd,MAAM,QACN,UAAS,uBACR,wBAAwB,QAAQ"}
package/dist/index.d.mts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { formatTokenValue, resolveTokenSets, toCssVar } from "@razorwind/core/utils";
2
2
  import { TokenType } from "@power-plant/dtcg-schema";
3
- import { Schema, Tokens } from "@razorwind/core/schema";
3
+ import { Fonts, Schema, Tokens } from "@razorwind/core/schema";
4
4
  import { GeneratorFunctionResult } from "@power-plant/core";
5
5
  //#region src/types.d.ts
6
6
  /**
@@ -22,7 +22,7 @@ interface TamaguiPluginOptions {
22
22
  *
23
23
  * @defaultValue `"tamagui.config.ts"`
24
24
  */
25
- outFile?: string;
25
+ outputPath?: string;
26
26
  /**
27
27
  * Animation driver import from `@tamagui/config/v5-*`.
28
28
  * Set to `false` to omit animations (v5 base config includes none).
@@ -113,7 +113,7 @@ declare function toTamaguiValue(value: unknown, type?: string): string | number;
113
113
  * @see https://tamagui.dev/docs/core/config-v5
114
114
  */
115
115
  declare function renderInstallMd(options: {
116
- outFile: string;
116
+ outputPath: string;
117
117
  }): string;
118
118
  //#endregion
119
119
  //#region src/generate.d.ts
@@ -128,7 +128,7 @@ declare function collectColorScales(colorTokens: FlatToken[]): Record<string, Re
128
128
  *
129
129
  * @see https://tamagui.dev/docs/core/config-v5
130
130
  */
131
- declare function renderTamaguiConfig(tokens: FlatToken[], options?: TamaguiPluginOptions): string;
131
+ declare function renderTamaguiConfig(tokens: FlatToken[], options?: TamaguiPluginOptions, fonts?: Fonts): string;
132
132
  /**
133
133
  * Generate a Tamagui v5 config file from a Razorwind schema.
134
134
  */
package/dist/index.mjs CHANGED
@@ -1,18 +1,18 @@
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
1
+ import{definePlugin as e}from"@razorwind/core/plugin";import{cssFontFamily as t,fontFamilyName as n}from"@razorwind/core/lib/fonts";import{createDocument as r,formatTokenValue as i,isObject as a,resolveTokenSets as o,toCssVar as s}from"@razorwind/core/utils";import{basename as c,dirname as l,join as u}from"node:path";function d(e){return e.replaceAll(`\\`,`\\\\`).replaceAll(`"`,`\\"`).replaceAll(`
2
+ `,`\\n`).replaceAll(`\r`,`\\r`)}function f(e){return typeof e==`string`?`"${d(e)}"`:typeof e==`number`||typeof e==`boolean`?String(e):e==null?`undefined`:JSON.stringify(e)}function p(e,t){if(typeof e==`number`)return e;if(typeof e==`boolean`)return Number(e);if(a(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 m=[{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 h(e){return`$value`in e||`value`in e||`$ref`in e||`ref`in e}function g(e){if(typeof e.$description==`string`)return e.$description;if(typeof e.description==`string`)return e.description}function _(e,t){return typeof e.$type==`string`?e.$type:typeof e.type==`string`?e.type:t}function v(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 y(e,t){for(let{prefix:t,category:n}of m)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 b(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 x(e,t,n,r,o){if(!a(e))return;let s=_(e,n);if(h(e)){let n=v(e),a=t.join(`.`),c=y(a,s),l=i(n,s),u=c===`color`||s===`color`?l:p(n,s);o.push({path:a,type:s,value:n,cssValue:l,tamaguiValue:u,category:c,tokenKey:c?b(a):void 0,description:g(e),theme:r});return}for(let[n,i]of Object.entries(e))n.startsWith(`$`)||x(i,[...t,n],s,r,o)}function S(e,t={}){let n=t.includeTypes?new Set(t.includeTypes):void 0,r=[];for(let t of o(e)){let e=t.id==="default"?void 0:t.id;x(t.tokens,[],void 0,e,r)}return n?r.filter(e=>!e.type||n.has(e.type)):r}function C(e){return`# Installing Tamagui Config
3
3
 
4
4
  Generated by \`@razorwind/tamagui\`.
5
5
 
6
6
  ## Files
7
7
 
8
- - \`${e.outFile}\` — Tamagui v5 config (\`createTamagui\` + generated tokens/themes)
8
+ - \`${e.outputPath}\` — Tamagui v5 config (\`createTamagui\` + generated tokens/themes)
9
9
 
10
10
  ## Setup
11
11
 
12
12
  1. Point Tamagui at the generated config:
13
13
 
14
14
  \`\`\`ts
15
- import config from "./${e.outFile}";
15
+ import config from "./${e.outputPath}";
16
16
 
17
17
  export default config;
18
18
  \`\`\`
@@ -21,7 +21,7 @@ export default config;
21
21
 
22
22
  \`\`\`tsx
23
23
  import { TamaguiProvider } from "tamagui";
24
- import config from "./${e.outFile}";
24
+ import config from "./${e.outputPath}";
25
25
 
26
26
  export function App() {
27
27
  return (
@@ -36,20 +36,22 @@ export function App() {
36
36
 
37
37
  ## Regenerate
38
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)}
39
+ Re-run Razorwind generate when tokens change so \`${e.outputPath}\` stays aligned with your design system.
40
+ `}const w=new Set([`default`,`base`,`light`,`theme`]),T=new Set([`gray`,`grey`,`neutral`,`slate`,`zinc`,`stone`,`palette`,`base`]),E={css:`@tamagui/config/v5-css`,rn:`@tamagui/config/v5-rn`,reanimated:`@tamagui/config/v5-reanimated`,motion:`@tamagui/config/v5-motion`};function D(e){let t=new Set(e.map(e=>e.theme).filter(e=>!!e));if(t.size===0)return e;for(let t of w){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 O(e,t){return e.filter(e=>e.theme?.toLowerCase()===t)}function k(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 A(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:f(e);return`${n}${r}: ${f(t)}`}).join(`,
41
+ `)}\n${` `.repeat(Math.max(t-2,0))}}`}function j(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 M(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 N(e){let t=D(e.filter(e=>e.category===`color`)),n=O(e.filter(e=>e.category===`color`),`dark`),r=j(t),i=j(n),a,o;for(let e of Object.keys(r))if(T.has(e.toLowerCase())&&(a=M(r[e],e),a))break;for(let e of Object.keys(i))if(T.has(e.toLowerCase())&&(o=M(i[e],e),o))break;return{lightPalette:a,darkPalette:o}}function P(e){let t=j(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 F(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(T.has(i.toLowerCase()))continue;let n=e[i]??t[i],a=t[i]??e[i];!n||!a||r.push(` ${i}: {
42
+ light: ${A(n,8)},
43
+ dark: ${A(a,8)}
44
44
  }`)}if(r.length!==0)return`{\n${r.join(`,
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 }) => {
45
+ `)}\n }`}function I(e){switch(e.role){case`heading`:case`display`:return`heading`;case`mono`:case`code`:return`mono`;case`sans`:case`body`:case`serif`:return`body`;case void 0:default:return e.name?.replaceAll(/\W/g,``)||`body`}}function L(e){let t=new Map;for(let n of Object.values(e)){let e=I(n),r=t.get(e);(!r||n.role===e&&r.role!==e)&&t.set(e,n)}return t}function R(e){let t=new Map;for(let n of e.files){let e=String(n.weight??400),r=c(n.path).replace(/\.[^.]+$/,``),i=t.get(e)??{};n.style===`italic`||n.style===`oblique`?i.italic=r:i.normal=r,t.set(e,i)}if(t.size!==0)return`{\n${[...t.entries()].toSorted(([e],[t])=>e.localeCompare(t,void 0,{numeric:!0})).map(([e,t])=>{let n=[];return t.normal&&n.push(`normal: ${f(t.normal)}`),t.italic&&n.push(`italic: ${f(t.italic)}`),` ${e}: { ${n.join(`, `)} }`}).join(`,
46
+ `)}\n }`}function z(e,r){let i=e.source===`local`?R(e):void 0,a=[`const ${r} = createFont({`,` family: isWeb ? ${f(t(e))} : ${f(n(e))},`,` size: {`,` 1: 12,`,` 2: 14,`,` 3: 16,`,` 4: 18,`,` 5: 20,`,` 6: 24,`,` 7: 28,`,` 8: 32,`,` 9: 40,`,` 10: 48`,` }${i?`,`:``}`];return i&&a.push(` face: ${i}`),a.push(`});`),a.join(`
47
+ `)}function B(e,t={},n){let r=t.useDefaultConfig!==!1,i=t.animations??`css`,a=t.includeTypeAugmentation!==!1,o=k(D(e)),s=D(e.filter(e=>e.category===`color`)),c=O(e.filter(e=>e.category===`color`),`dark`),l=j(s),u=j(c.length>0?c:s),{lightPalette:d,darkPalette:p}=N(e),m=F(l,u),h=P(s),g=P(c.length>0?c:s),_=Object.keys(h).length>0||Object.keys(g).length>0,v=[];for(let e of[`color`,`space`,`size`,`radius`,`zIndex`]){let t=o[e];t&&Object.keys(t).length>0&&v.push(` ${e}: ${A(t,4)}`)}let y=[];d&&y.push(` lightPalette: ${f(d)}`),p&&y.push(` darkPalette: ${f(p)}`),m&&y.push(` childrenThemes: ${m}`),_&&y.push(` getTheme: ({ scheme }) => {
46
48
  const semantic = scheme === "dark"
47
- ? ${D(h,8)}
48
- : ${D(m,8)};
49
+ ? ${A(g,8)}
50
+ : ${A(h,8)};
49
51
  return semantic;
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: {
52
+ }`);let b=[];r?b.push(`import { createV5Theme, defaultConfig } from "@tamagui/config/v5";`):b.push(`import { createV5Theme } from "@tamagui/config/v5";`),i!==!1&&b.push(`import { animations } from "${E[i]}";`);let x=[`createTamagui`];v.length>0&&x.push(`createTokens`);let S=n?L(n):new Map;S.size>0&&x.push(`createFont`,`isWeb`),b.push(`import { ${x.join(`, `)} } from "tamagui";`);let C=[`/* eslint-disable */`,`/*`,` * Generated by @razorwind/tamagui — do not edit by hand.`,` * @see https://tamagui.dev/docs/core/config-v5`,` */`,``,...b,``];v.length>0&&C.push(`const tokens = createTokens({`,v.join(`,
53
+ `),`});`,``);let w=y.length>0?`createV5Theme({\n${y.join(`,
54
+ `)}\n})`:`createV5Theme()`;C.push(`const themes = ${w};`,``);let T=new Map;if(S.size>0){let e=0;for(let[t,n]of S){let r=`${t}Font`.replaceAll(/\W/g,``)||`font${e}`;T.set(t,r),C.push(z(n,r),``),e+=1}}let M=[];if(r&&M.push(` ...defaultConfig`),i!==!1&&M.push(` animations`),v.length>0&&(r?M.push(` tokens: {
53
55
  ...defaultConfig.tokens,
54
56
  ...tokens,
55
57
  color: {
@@ -72,7 +74,14 @@ Re-run Razorwind generate when tokens change so \`${e.outFile}\` stays aligned w
72
74
  ...defaultConfig.tokens.zIndex,
73
75
  ...tokens.zIndex
74
76
  }
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};
77
+ }`):M.push(` tokens`)),M.push(` themes`),T.size>0){let e=[...T.entries()].map(([e,t])=>` ${e}: ${t}`);r?M.push(` fonts: {
78
+ ...defaultConfig.fonts,
79
+ ${e.join(`,
80
+ `)}
81
+ }`):M.push(` fonts: {
82
+ ${e.join(`,
83
+ `)}
84
+ }`)}return C.push(`export const config = createTamagui({`,M.join(`,
85
+ `),`});`,``,`export type AppConfig = typeof config;`,``),a&&C.push(`declare module "tamagui" {`,` // eslint-disable-next-line @typescript-eslint/no-empty-object-type`,` interface TamaguiCustomConfig extends AppConfig {}`,`}`,``),C.push(`export default config;`,``),C.join(`
86
+ `)}function V(e,t={}){let n=e.tokens&&Object.keys(e.tokens).length>0,i=e.fonts&&Object.keys(e.fonts).length>0;if(!n&&!i)return{};let a=n?S(e.tokens,t):[];if(a.length===0&&!i)return{};let o=t.outputPath??`tamagui.config.ts`,s=B(a,t,e.fonts),c=t.installGuide??C({outputPath:o}),d=u(l(o),`INSTALL.md`);return{[o]:r(o,s,{name:`razorwind-tamagui`},`typescript`),[d]:r(d,c,{name:`razorwind-tamagui`},`markdown`)}}var H=e(e=>({name:`tamagui`,generate:async t=>V(t,e??{})}));export{j as collectColorScales,H as default,S as flattenTokens,i as formatTokenValue,V as generateTamaguiConfig,C as renderInstallMd,B as renderTamaguiConfig,y as resolveTokenCategory,o as resolveTokenSets,s as toCssVar,p as toTamaguiValue,b as toTokenKey};
78
87
  //# sourceMappingURL=index.mjs.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@razorwind/tamagui",
3
- "version": "0.0.34",
3
+ "version": "0.0.36",
4
4
  "type": "module",
5
5
  "description": "Razorwind plugin that creates Tamagui theme tokens from Razorwind design tokens.",
6
6
  "repository": {
@@ -85,7 +85,7 @@
85
85
  "dependencies": {
86
86
  "@power-plant/core": "^0.0.90",
87
87
  "@power-plant/dtcg-schema": "^0.0.1",
88
- "@razorwind/core": "^0.0.46",
88
+ "@razorwind/core": "^0.0.48",
89
89
  "@stryke/type-checks": "^0.6.41"
90
90
  },
91
91
  "peerDependencies": {
@@ -104,5 +104,5 @@
104
104
  "typescript": "^6.0.3"
105
105
  },
106
106
  "publishConfig": { "access": "public" },
107
- "gitHead": "0bfdb728cdb6c241eae5072dab7984fe48146c22"
107
+ "gitHead": "c53ec72420850efd1c4f8339b264c33ca6b9870b"
108
108
  }