@razorwind/tamagui 0.0.54 → 0.0.55
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 +39 -78
- package/dist/index.d.cts +24 -50
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts +24 -50
- package/dist/index.mjs +39 -78
- package/package.json +3 -3
package/dist/index.cjs
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
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"),r=require("@razorwind/core/lib/fonts");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,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(0,t.formatTokenValue)(e,n)}const s=/^(?:font-size|fontSize)(?:\.|$)/i,c=/^(?:font-weight|fontWeight)(?:\.|$)/i,l=/^shadow(?:\.|$)/i,u=/^inset-shadow(?:\.|$)/i,d=/^drop-shadow(?:\.|$)/i,f=/^text-shadow(?:\.|$)/i,p=/^(?:blur|blur-?radius)(?:\.|$)/i,m=new Set([`color`,`shadow`,`insetShadow`,`dropShadow`,`textShadow`]),h=[{prefix:/^(?:color|colours?|palette)(?:\.|$)/i,category:`color`},{prefix:s,category:`fontSize`},{prefix:c,category:`fontWeight`},{prefix:d,category:`dropShadow`},{prefix:u,category:`insetShadow`},{prefix:f,category:`textShadow`},{prefix:l,category:`shadow`},{prefix:p,category:`blur`},{prefix:/^(?:space|spacing|gap)(?:\.|$)/i,category:`space`},{prefix:/^inset(?:\.|$)/i,category:`space`},{prefix:/^(?:size|sizing)(?:\.|$)/i,category:`size`},{prefix:/^(?:radius|rounded|radii)(?:\.|$)/i,category:`radius`},{prefix:/^(?:z-?index|zindex|elevation)(?:\.|$)/i,category:`zIndex`}];function g(e){return`$value`in e||`value`in e||`$ref`in e||`ref`in e}function _(e){return e===!0||e===`true`||e===1}function
|
|
3
|
-
`)}\n }`}function
|
|
4
|
-
`)}\n${r}}`}function
|
|
5
|
-
`)}\n});`}function
|
|
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,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(0,t.formatTokenValue)(e,n)}const s=/^(?:font-size|fontSize)(?:\.|$)/i,c=/^(?:font-weight|fontWeight)(?:\.|$)/i,l=/^shadow(?:\.|$)/i,u=/^inset-shadow(?:\.|$)/i,d=/^drop-shadow(?:\.|$)/i,f=/^text-shadow(?:\.|$)/i,p=/^(?:blur|blur-?radius)(?:\.|$)/i,m=new Set([`color`,`shadow`,`insetShadow`,`dropShadow`,`textShadow`]),h=[{prefix:/^(?:color|colours?|palette)(?:\.|$)/i,category:`color`},{prefix:s,category:`fontSize`},{prefix:c,category:`fontWeight`},{prefix:d,category:`dropShadow`},{prefix:u,category:`insetShadow`},{prefix:f,category:`textShadow`},{prefix:l,category:`shadow`},{prefix:p,category:`blur`},{prefix:/^(?:space|spacing|gap)(?:\.|$)/i,category:`space`},{prefix:/^inset(?:\.|$)/i,category:`space`},{prefix:/^(?:size|sizing)(?:\.|$)/i,category:`size`},{prefix:/^(?:radius|rounded|radii)(?:\.|$)/i,category:`radius`},{prefix:/^(?:z-?index|zindex|elevation)(?:\.|$)/i,category:`zIndex`}];function g(e){return`$value`in e||`value`in e||`$ref`in e||`ref`in e}function _(e){return e===!0||e===`true`||e===1}function v(e){return _(e.palette)||_(e.$palette)?!0:T(e)===`palette`}function ee(e,t){return(e===`palette`||e===`$palette`)&&(typeof t==`boolean`||typeof t==`number`||typeof t==`string`)}function y(e){return e===!0||e===`true`||e===1}function b(e){return y(e.primitive)||y(e.$primitive)?!0:T(e)===`primitive`}function x(e,t){return(e===`primitive`||e===`$primitive`)&&(typeof t==`boolean`||typeof t==`number`||typeof t==`string`)}function S(e,t){return(e===`theme`||e===`$theme`)&&typeof t==`string`}function C(e){if(typeof e.theme==`string`&&e.theme.length>0)return e.theme;if(typeof e.$theme==`string`&&e.$theme.length>0)return e.$theme}function w(e){if(typeof e.$description==`string`)return e.$description;if(typeof e.description==`string`)return e.description}function T(e,t){return typeof e.$type==`string`?e.$type:typeof e.type==`string`?e.type:t}function E(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 te(e,t){for(let{prefix:t,category:n}of h)if(t.test(e))return n;if(t===`color`||t===`palette`)return`color`;if(t===`shadow`)return u.test(e)?`insetShadow`:d.test(e)?`dropShadow`:f.test(e)?`textShadow`:`shadow`;if(t===`dimension`){if(s.test(e))return`fontSize`;if(p.test(e))return`blur`;if(/(?:^|\.)(?:space|spacing|gap)(?:\.|$)/i.test(e)||/(?:^|\.)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)(?:\.|$)/i.test(e)||/(?:^|\.)(?:width|height)(?:\.|$)/i.test(e))return`size`}if(t===`number`&&/z-?index|elevation/i.test(e))return`zIndex`;if(t===`fontWeight`||c.test(e))return`fontWeight`}function D(e){return e.flatMap(e=>e.split(/[-_\s]+/)).filter(Boolean).map((e,t)=>{if(/^\d/.test(e))return e;let n=e.toLowerCase();return t===0?n:`${n.charAt(0).toUpperCase()}${n.slice(1)}`}).join(``)}function ne(e){let t=e.split(`.`).filter(Boolean),n=t[0];n&&/^(?:color|colours?|palette|primitive|space|spacing|gap|inset|shadow|inset-shadow|drop-shadow|text-shadow|font-size|fontSize|font-weight|fontWeight|size|sizing|radius|rounded|radii|z-?index|zindex|elevation|blur)$/i.test(n)&&t.shift();let r=t.length>0?t:e.split(`.`).slice(-1);return r.length===1&&/^(?:DEFAULT|default)$/i.test(r[0]??``)?`true`:D(r)}function O(e,n,r,i,a,s,c){if(!(0,t.isObject)(e))return;let l=a||b(e)||v(e),u=T(e,r),d=C(e)??s;if(g(e)){let r=E(e),a=n.join(`.`),s=te(a,u)??(l||u===`primitive`||u===`palette`?`color`:void 0),f=(0,t.formatTokenValue)(r,u),p=s&&m.has(s)||u===`color`||u===`palette`||u===`primitive`||u===`shadow`?f:o(r,u);c.push({path:a,type:u===`palette`||u===`primitive`?`color`:u,value:r,cssValue:f,tamaguiValue:p,category:s,tokenKey:s?ne(a):void 0,description:w(e),theme:i,...d?{childTheme:d}:{},...l?{primitive:!0}:{}});return}for(let[t,r]of Object.entries(e))t.startsWith(`$`)&&t!==`$palette`&&t!==`$primitive`||ee(t,r)||x(t,r)||S(t,r)||O(r,[...n,t],u,i,l,d,c)}function re(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;O(n.tokens,[],void 0,e,!1,void 0,i)}return r?i.filter(e=>!e.type||r.has(e.type)):i}const ie=/^\{([^{}]+)\}$/,ae=/^(?:typography|type|text)$/i,oe=/^(?:font|fonts|font-family|fontFamily)$/i,se=/^(?:font-size|fontSize)$/i,ce=/^(?:font-weight|fontWeight)$/i,le=/^(?:line-height|lineHeight|leading)$/i,ue=/^(?:letter-spacing|letterSpacing|tracking)$/i,de=/^(?:[a-z]{2}(?:-[A-Z]{2})?|cn|zh|jp|ja|kr|ko|ar|he|th|hi|ru|french|mandarin|chinese|japanese|korean|arabic|hebrew)$/i,fe=[`fontFamily`,`font-family`,`family`],pe=[`fontSize`,`font-size`,`size`],me=[`fontWeight`,`font-weight`,`weight`],he=[`lineHeight`,`line-height`,`leading`],ge=[`letterSpacing`,`letter-spacing`,`tracking`],_e={1:12,2:14,3:16,4:18,5:20,6:24,7:28,8:32,9:40,10:48};function k(e){if(typeof e==`string`)return ie.exec(e.trim())?.[1]?.trim()}function A(e,t){let n=k(e);if(!n)return e;let r=t.get(n),i=new Set([n]);for(let e=0;e<8&&r;e++){let e=k(r.value);if(!e||i.has(e))return r.value;i.add(e),r=t.get(e)}return r?.value??e}function j(e,t){for(let n of t)if(e[n]!==void 0&&e[n]!==null)return e[n]}function ve(e){return(e.split(`,`)[0]?.trim()??e).replaceAll(/^["']|["']$/g,``)}function M(e){if(typeof e==`string`){let t=e.trim();return t.length===0||k(t)?void 0:t}if(Array.isArray(e)&&e.every(e=>typeof e==`string`)){let t=e.map(e=>e.trim()).filter(Boolean);return t.length>0?t.join(`, `):void 0}}function ye(e){return Number.isInteger(e)?e:Math.round(e*1e3)/1e3}function N(e){if(e==null)return;let t=o(e);if(typeof t==`number`&&Number.isFinite(t))return t;if(typeof t==`string`){let e=/^(-?\d+(?:\.\d+)?)%$/.exec(t.trim());if(e)return Number.parseFloat(e[1])/100}}function be(e){if(typeof e==`number`&&Number.isFinite(e))return String(e);if(typeof e==`string`){let t=e.trim();if(t.length===0||k(t))return;let n=Number(t);return Number.isNaN(n)?t:String(n)}let t=o(e);if(typeof t==`number`&&Number.isFinite(t))return String(t);if(typeof t==`string`&&t.length>0)return t}function xe(e,t){let n=N(e);if(n!=null)return ye(t!=null&&n>0&&n<=4?n*t:n)}function P(e,t){return t.test(e.split(`.`)[0]??``)}function Se(e){return e.split(`.`).filter(Boolean).at(-1)??e}function F(e,t){let n=e.split(`.`).filter(Boolean);return n[0]&&t.test(n[0])&&n.shift(),n}function I(e){let t=e.flatMap(e=>e.split(`-`)).filter(Boolean);return t.length===0?`body`:t.map((e,t)=>t===0?`${e.charAt(0).toLowerCase()}${e.slice(1)}`:`${e.charAt(0).toUpperCase()}${e.slice(1)}`).join(``)}function L(e){switch(e.toLowerCase()){case`sans`:case`body`:case`serif`:return`body`;case`monospace`:case`mono`:return`mono`;default:return I([e])}}function Ce(e){return e.role?L(e.role):L(e.name)}function we(e){let t=F(e,ae);if(t.length===0)return`body`;let n=t.at(-1);return n&&t.length>=2&&de.test(n)&&!n.includes(`_`)?`${t.slice(0,-1).join(`-`)}_${n}`:t.join(`-`)}function Te(e){return L(F(e,oe)[0]??Se(e))}function Ee(e,t){let n=F(e,t);return n.length===0||n.length===1&&/^(?:DEFAULT|default)$/i.test(n[0])?`true`:I(n)}function De(e){return e.type===`typography`&&(0,t.isObject)(e.value)}function Oe(e){return e.category===`fontSize`||e.category===`fontWeight`||ke(e)||Ae(e)||je(e)||Me(e)?!1:e.type===`fontFamily`||P(e.path,oe)}function ke(e){return e.category===`fontSize`||P(e.path,se)}function Ae(e){return e.category===`fontWeight`||e.type===`fontWeight`||P(e.path,ce)}function je(e){return P(e.path,le)}function Me(e){return P(e.path,ue)}function Ne(e,t){if(!e.has(t))return t;let n=2,r=`${t}${n}`;for(;e.has(r);)n++,r=`${t}${n}`;return r}function Pe(e){let t=new Map;for(let n of Object.values(e)){let e=Ce(n);t.has(e)&&(e=Ne(t,I([n.name]))),t.set(e,n)}return t}function Fe(e,t,n){if(!e)return;let i=Object.values(e);if(i.length===0)return;if(n){let e=n.split(`.`).filter(Boolean).at(-1);if(e){let t=i.find(t=>t.role===e||t.name.toLowerCase()===e.toLowerCase());if(t)return t}}if(!t)return;let a=ve(t).toLowerCase();return i.find(e=>(0,r.fontFamilyName)(e).toLowerCase()===a||e.title.toLowerCase()===a||e.name.toLowerCase()===a)}function Ie(e){let t=new Map;for(let r of e.files){let e=String(r.weight??400),i=(0,n.basename)(r.path).replace(/\.[^.]+$/,``),a=t.get(e)??{};r.style===`italic`||r.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(`,
|
|
3
|
+
`)}\n }`}function R(e,t){return{...e,webFamily:(0,r.cssFontFamily)(t),nativeFamily:(0,r.fontFamilyName)(t),face:t.source===`local`?Ie(t):e.face}}function z(e){return{key:e,webFamily:`system-ui, sans-serif`,nativeFamily:`system-ui`,size:{},lineHeight:{},weight:{},letterSpacing:{}}}function Le(e,t){return{...e,webFamily:t,nativeFamily:ve(t)}}const Re=/^(?:font-size|fontSize|font-weight|fontWeight|line-height|lineHeight|leading|letter-spacing|letterSpacing|tracking)$/i;function B(e,t){let n={true:e},r=k(t);if(!r)return n;let i=Ee(r,Re);return i&&i!==`true`&&(n[i]=e),n}function ze(e){return Object.keys(e.size).length>0?e:{...e,size:{..._e}}}function Be(e,n,r,i){if(!(0,t.isObject)(n.value))return e;let a=j(n.value,fe),o=k(a),s=M(A(a,r)),c=Fe(i,s,o),l=e;c?l=R(l,c):s&&(l=Le(l,s));let u=j(n.value,pe),d=N(A(u,r));d!=null&&(l={...l,size:B(d,u)});let f=j(n.value,me),p=be(A(f,r));p&&(l={...l,weight:B(p,f)});let m=j(n.value,ge),h=N(A(m,r));h!=null&&(l={...l,letterSpacing:B(h,m)});let g=j(n.value,he),_=xe(A(g,r),l.size.true??d);return _!=null&&(l={...l,lineHeight:B(_,g)}),Ve(l)}function Ve(e){let t=Object.keys(e.size);if(t.length===0)return e;let n=e=>{let n=e.true??Object.values(e)[0];if(n==null)return e;let r={...e};for(let e of t)r[e]??=n;return r};return{...e,lineHeight:Object.keys(e.lineHeight).length>0?n(e.lineHeight):e.lineHeight,weight:Object.keys(e.weight).length>0?n(e.weight):e.weight,letterSpacing:Object.keys(e.letterSpacing).length>0?n(e.letterSpacing):e.letterSpacing}}function V(e,t){let n=new Map(e.map(e=>[e.path,e])),r=new Map,i=e=>{r.set(e.key,e)};if(t)for(let[e,n]of Pe(t))i(R(z(e),n));for(let a of e){if(!Oe(a)||De(a))continue;let e=Te(a.path),o=M(A(a.value,n)),s=r.get(e)??z(e),c=Fe(t,o,a.path),l=s;c?l=R(l,c):(o&&s.webFamily===z(e).webFamily||o&&!r.has(e))&&(l=Le(l,o)),i(l)}for(let a of e){if(!De(a))continue;let e=we(a.path);i(Be(r.get(e)??z(e),a,n,t))}return[...r.values()].map(ze).toSorted((e,t)=>e.key.localeCompare(t.key))}function He(e){return/^\d+$/.test(e)||/^[A-Z_$][\w$]*$/i.test(e)?e:a(e)}function H(e,t=4){let n=` `.repeat(t),r=` `.repeat(Math.max(t-2,0)),i=Object.entries(e).toSorted(([e],[t])=>e.localeCompare(t,void 0,{numeric:!0}));return i.length===0?`{}`:`{\n${i.map(([e,t])=>`${n}${He(e)}: ${a(t)}`).join(`,
|
|
4
|
+
`)}\n${r}}`}function U(e,t){let n=`${e.split(`-`).filter(Boolean).map((e,t)=>t===0?e:`${e.charAt(0).toUpperCase()}${e.slice(1)}`).join(``).replaceAll(/[^\w$]/g,``)||`font${t}`}Font`;return/^[A-Z_$]/i.test(n)?n:`font${t}`}function Ue(e,t){let n=a(e.webFamily),r=a(e.nativeFamily),i=[n===r?` family: ${n}`:` family: isWeb ? ${n} : ${r}`,` size: ${H(e.size)}`];return Object.keys(e.lineHeight).length>0&&i.push(` lineHeight: ${H(e.lineHeight)}`),Object.keys(e.weight).length>0&&i.push(` weight: ${H(e.weight)}`),Object.keys(e.letterSpacing).length>0&&i.push(` letterSpacing: ${H(e.letterSpacing)}`),e.face&&i.push(` face: ${e.face}`),`const ${t} = createFont({\n${i.join(`,
|
|
5
|
+
`)}\n});`}function W(e){return`# Installing Tamagui Config
|
|
6
6
|
|
|
7
7
|
Generated by \`@razorwind/tamagui\`.
|
|
8
8
|
|
|
9
9
|
## Files
|
|
10
10
|
|
|
11
|
-
- \`${e.outputPath}\` — Tamagui
|
|
11
|
+
- \`${e.outputPath}\` — Tamagui config (\`createTamagui\` + \`createTheme\` with light, dark, and nested semantic themes)
|
|
12
12
|
|
|
13
13
|
## Setup
|
|
14
14
|
|
|
@@ -48,80 +48,41 @@ export function App() {
|
|
|
48
48
|
## Regenerate
|
|
49
49
|
|
|
50
50
|
Re-run Razorwind generate when tokens change so \`${e.outputPath}\` stays aligned with your design system.
|
|
51
|
-
`}const
|
|
52
|
-
`)}\n${` `.repeat(Math.max(t-2,0))}}`}function
|
|
53
|
-
`)}\n${` `.repeat(Math.max(t-2,0))}}`}function mt(e,t=
|
|
54
|
-
`)}\n${r}}`}const ht=/^\{([^{}]+)\}$/,gt=/\{([^{}]+)\}/g,_t=/^var\((--[^),\s]+)(?:\s*,[^)]*)?\)$/,vt=/var\((--[^),\s]+)(?:\s*,[^)]*)?\)/g;function G(e){return{byPath:new Map(e.map(e=>[e.path,e])),byCssVar:new Map(e.map(e=>[(0,t.toThemeCssVar)(e.path),e]))}}function yt(e){if(typeof e==`string`)return ht.exec(e.trim())?.[1]?.trim()}function bt(e){if(typeof e==`string`)return _t.exec(e.trim())?.[1]}function xt(e){return yt(e)!=null||bt(e)!=null}function St(e){return/var\(|\{[^{}]+\}/.test(e)}function K(e,t){let n=q(e,t.byPath,t.byCssVar);if(n.category!=null&&n.category!==`color`)return;let r=[n.cssValue,n.tamaguiValue];for(let e of r)if(typeof e==`string`&&e.length>0&&!xt(e))return e}function Ct(e,t){return e.replace(gt,(e,n)=>{let r=t.byPath.get(n.trim());return r?K(r,t)??e:e}).replace(vt,(e,n)=>{let r=t.byCssVar.get(n);return r?K(r,t)??e:e})}function q(e,t,n){let r=e,i=new Set;for(let e=0;e<8;e++){if(i.has(r.path))return r;i.add(r.path);let e=yt(r.value);if(e){let n=t.get(e);if(!n||n.path===r.path)return r;r=n;continue}let a=bt(r.value)??bt(r.cssValue)??bt(r.tamaguiValue);if(a){let e=n.get(a);if(!e||e.path===r.path)return r;r=e;continue}return r}return r}function wt(e){return/^[A-Z_$][\w$]*$/i.test(e)?`theme.${e}`:`theme[${a(e)}]`}function Tt(e,t){return t<1?e:t+1-e}function Et(e,t){return e.length<2?!1:X(e,t).some((t,n)=>t!==e[n])}function Dt(e,t,n,r){let i=n[t];if(!i||r!==`dark`)return e;let a=$(i,t);return a.length<2||!Et(a.map(([,e])=>e),r)?e:Tt(e,a[a.length-1][0])}function Ot(e,t,n,r){let i=J(e);if(!i)return;let a=Dt(i.step,i.name,n,r);if(t&&i.name.toLowerCase()===t.toLowerCase()||n[i.name])return`${i.name}${a}`}function kt(e){if(e>=1&&e<=12)return e;if(e>=100&&e<=900&&e%100==0)return e/100}function J(e){let t=e.path.split(`.`).filter(Boolean),n=t.at(-1);if(n&&/^\d+$/.test(n)){let e=kt(Number(n)),r=t.at(-2);if(e!=null&&r&&!/^(?:color|colours?|palette)$/i.test(r))return{name:w([r]),step:e}}if(!e.tokenKey)return;let r=/^([A-Z]+)(\d{1,3})$/i.exec(e.tokenKey);if(!r)return;let[,i=``,a=``]=r,o=kt(Number(a));if(o!=null)return{name:i,step:o}}function At(e,t,n,r){let i=e[t]??{};i[`${t}${n}`]=r,e[t]=i}function jt(e){let t={};for(let n of e){if(typeof n.tamaguiValue!=`string`)continue;let e=J(n);e&&At(t,e.name,e.step,n.tamaguiValue)}return Object.fromEntries(Object.entries(t).filter(([,e])=>Object.keys(e).length>=3))}function Y(e){let t={};for(let n of e){if(!n.primitive||typeof n.tamaguiValue!=`string`)continue;let e=J(n);e&&At(t,e.name,e.step,n.tamaguiValue)}let n=Object.fromEntries(Object.entries(t).filter(([,e])=>Object.keys(e).length>=2));return Object.keys(n).length>0?n:jt(e)}function X(e,t){if(e.length<2)return[...e];let n=Ft(e[0]),r=Ft(e[e.length-1]);if(n==null||r==null||n===r)return[...e];let i=n>r;return t===`light`?i?[...e]:e.toReversed():i?e.toReversed():[...e]}function Z(e){return e<=.04045?e/12.92:((e+.055)/1.055)**2.4}function Mt(e){let t=e.startsWith(`#`)?e.slice(1):``;if((t.length===3||t.length===4)&&(t=[...t].map(e=>e+e).join(``)),t.length===8&&(t=t.slice(0,6)),t.length!==6||/[^0-9a-f]/i.test(t))return;let 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;return .2126*Z(n)+.7152*Z(r)+.0722*Z(i)}function Q(e){let t=e.trim();if(t.endsWith(`%`)){let e=Number.parseFloat(t);return Number.isFinite(e)?e/100:void 0}let n=Number.parseFloat(t);return Number.isFinite(n)?n:void 0}function Nt(e){return e>1?e/100:e}function Pt(e,t){let n=RegExp(`^${t}\\((.+)\\)$`,`i`).exec(e.trim());if(n?.[1])return n[1].split(/[\s,/]+/).filter(Boolean)}function Ft(e){let t=e.trim();if(!t||t.startsWith(`var(`)||t.includes(`{`))return;let n=Mt(t);if(n!=null)return n;let r=Pt(t,`oklch`);if(r?.[0]){let e=Q(r[0]);return e==null?void 0:Nt(e)}let i=Pt(t,`hsla?`);if(i?.[2]){let e=Q(i[2]);return e==null?void 0:Nt(e)}let a=Pt(t,`rgba?`);if(a?.[0]&&a[1]&&a[2]){let e=Q(a[0]),t=Q(a[1]),n=Q(a[2]);if(e==null||t==null||n==null)return;let r=(e,t)=>t.trim().endsWith(`%`)||e<=1?e:e/255;return .2126*Z(r(e,a[0]))+.7152*Z(r(t,a[1]))+.0722*Z(r(n,a[2]))}}function $(e,t){let n=[],r=t.toLowerCase();for(let[i,a]of Object.entries(e)){if(!i.toLowerCase().startsWith(r))continue;let e=i.slice(t.length);/^\d+$/.test(e)&&n.push([Number(e),a])}return n.sort(([e],[t])=>e-t),n}function It(e,t,n){let r=$(e,t);if(r.length===0)return e;let i=X(r.map(([,e])=>e),n),a={};for(let[e,[n]]of r.entries())a[`${t}${n}`]=i[e]??r[e][1];return a}function Lt(e,t,n){let r=t[n];return e.find(([,e])=>e===r)?.[0]??e[n]?.[0]??n+1}function Rt(e,t,n,r){let i=$(e,n);if(i.length===0)return{};let a=X(i.map(([,e])=>e),r),o={};for(let[e,[r]]of i.entries()){let s=t[`${n}${Lt(i,a,e)}`];s&&(o[`${n}${r}`]=U(s))}return o}function zt(e,t,n,r){let i=$(e,n);if(i.length<2)return;let a=X(i.map(([,e])=>e),r),o=[];for(let[e]of i.entries()){let r=t[`${n}${Lt(i,a,e)}`];if(!r)return;o.push(U(r))}let s=[...o],c=s.at(-1);if(c!=null){for(;s.length<12;)s.push(c);return`[${s.join(`,`)}]`}}function Bt(e,t){return $(e,t).length>=2}function Vt(e){if(e.length>=12)return e.slice(0,12);let t=[...e],n=t.at(-1);if(n==null)return t;for(;t.length<12;)t.push(n);return t}function Ht(e,t,n){let r=$(e,t);if(!(r.length<2))return Vt(X(r.map(([,e])=>e),n))}function Ut(e){let t=new Map;for(let n of e){let e=n.childTheme?.trim();if(!e)continue;let r=e.toLowerCase();$e(r)||et(r)||t.has(r)||t.set(r,w([e]))}return[...t.values()].toSorted((e,t)=>e.localeCompare(t))}function Wt(e,t){let n=t.toLowerCase(),r=e.split(/(?=[A-Z])/).filter(Boolean).filter(e=>e.toLowerCase()!==n);if(r.length!==0)return w(r)}function Gt(e){return e.toLowerCase()===`base`}function Kt(e){return Ut(e).filter(e=>!Gt(e))}function qt(e){return`${e.charAt(0).toUpperCase()}${e.slice(1)}`}const Jt=[{alias:`background`,source:e=>`background${e}`},{alias:`backgroundDisabled`,source:e=>`background${e}Disabled`},{alias:`backgroundHover`,source:e=>`background${e}Hover`},{alias:`backgroundSubtle`,source:e=>e===`Primary`?`backgroundSecondary`:`background${e}Subtle`},{alias:`border`,source:e=>`border${e}`},{alias:`borderDisabled`,source:e=>`border${e}Disabled`},{alias:`borderHover`,source:e=>`border${e}Hover`},{alias:`borderSubtle`,source:e=>e===`Primary`?`borderSecondary`:`border${e}Subtle`},{alias:`foreground`,source:e=>`foreground${e}`},{alias:`foregroundDisabled`,source:e=>`foreground${e}Disabled`},{alias:`foregroundHover`,source:e=>`foreground${e}Hover`},{alias:`foregroundOn`,source:e=>`foregroundOn${e}`},{alias:`foregroundOnDisabled`,source:e=>`foregroundOn${e}Disabled`},{alias:`foregroundOnHover`,source:e=>`foregroundOn${e}Hover`}];function Yt(e,t,n){let r=new Set([...Object.keys(e),...Object.keys(t)]),i=[`Primary`,...n.map(qt)],a=[];for(let{alias:e,source:t}of Jt)i.some(e=>r.has(t(e)))&&a.push(e);return a}function Xt(e){let t={};for(let[n,r]of Object.entries(e)){if(Gt(n))continue;let e=Object.values(r);if(e.length===0)continue;let i={};for(let[t,r]of e.entries())i[`${n}${t+1}`]=r;Object.keys(i).length===1&&(i[`${n}2`]=e[0]),t[n]=i}return t}function Zt(e){let t=e.split(/(?=[A-Z])/).filter(Boolean),n=t.at(-1)?.toLowerCase();if((n===`primary`||n===`secondary`||n===`tertiary`)&&!(t.length<2))return{role:w(t.slice(0,-1)),rank:n}}function Qt(e){return e.category===`color`&&!e.primitive&&!!e.tokenKey}function $t(e,t,n){let r=new Map,i={};for(let a of e){if(!Qt(a)||!a.tokenKey)continue;let e=a.childTheme?.toLowerCase();if(e&&e!==`base`)continue;let o=dt(a,t,n);if(!o)continue;let s=Zt(a.tokenKey);if(s){let e=r.get(s.role)??{};e[s.rank]=o,r.set(s.role,e);continue}if(e===`base`){let e=Wt(a.tokenKey,`base`);e&&(i[e]=o)}}let a={...i};for(let[e,t]of r){t.primary&&(a[e]=t.primary);let n=t.secondary??t.tertiary;n&&(a[`${e}Subtle`]=n)}return a}function en(e,t){let n=G(e),r={};for(let i of Ut(e)){if(Gt(i)){let a=$t(e,n,t);Object.keys(a).length>0&&(r[i]=a);continue}let a={},o=i.toLowerCase();for(let r of e){if(!Qt(r)||r.childTheme?.toLowerCase()!==o)continue;let e=Wt(r.tokenKey,i);if(!e)continue;let s=dt(r,n,t);s&&(a[e]=s)}Object.keys(a).length>0&&(r[i]=a)}return r}function tn(e,t){let n=new Map(Object.entries(e).map(([e,t])=>[e.toLowerCase(),{name:e,scale:t}]));for(let e of Ze){let r=n.get(e);if(!r)continue;let i=Ht(r.scale,r.name,t);if(i)return{name:r.name,palette:i}}}function nn(e){let t=e.filter(e=>e.category===`color`||e.primitive),n=Y(V(t,`light`)),r=Y(V(t,`dark`)),i=tn(n,`light`),a=tn(r,`dark`);return{lightPalette:i?.palette,darkPalette:a?.palette,lightBaseName:i?.name,darkBaseName:a?.name}}function rn(e,t,n){let r=Y(e),{byPath:i,byCssVar:o}=G(e),s={};for(let c of e){if(c.category!==`color`||!c.tokenKey||c.primitive||/^[A-Z]+\d{1,3}$/i.test(c.tokenKey)&&r[c.tokenKey.replace(/\d{1,3}$/,``)])continue;let e=q(c,i,o),l=Ot(e,t,r,n);if(l){s[c.tokenKey]=wt(l);continue}let u=e.tamaguiValue;xt(u)||xt(e.cssValue)||(typeof u==`string`||typeof u==`number`)&&(s[c.tokenKey]=a(u))}return s}function an(e){return e.replaceAll(`\\`,`\\\\`).replaceAll("`","\\`").replaceAll("${","\\${")}function on(e,t,n,r,i){let a=q(e,t.byPath,t.byCssVar),o=Ot(a,n,r,i);if(o)return{kind:`theme`,property:o};let s=K(a,t);if(s)return{kind:`text`,value:s}}function sn(e,t,n,r,i){let a=[],o=/\{([^{}]+)\}|var\((--[^),\s]+)(?:\s*,[^)]*)?\)/g,s=0;for(let c of e.matchAll(o)){let o=c.index??0;o>s&&a.push({kind:`text`,value:e.slice(s,o)});let l=c[1]?t.byPath.get(c[1].trim()):c[2]?t.byCssVar.get(c[2]):void 0;if(!l)return;let u=on(l,t,n,r,i);if(!u)return;a.push(u),s=o+c[0].length}return s<e.length&&a.push({kind:`text`,value:e.slice(s)}),a}function cn(e){return e.some(e=>e.kind===`theme`)?`\`${e.map(e=>e.kind===`theme`?`\${${wt(e.property)}}`:an(e.value)).join(``)}\``:a(e.map(e=>e.kind===`text`?e.value:``).join(``))}function ln(e,t,n){let r=G(e),i=Y(e.filter(e=>e.category===`color`)),a={};for(let o of e){if(!tt(o)||!o.tokenKey)continue;let e=typeof o.tamaguiValue==`string`?o.tamaguiValue:o.cssValue;if(typeof e!=`string`||e.length===0)continue;let s=sn(e,r,t,i,n);s&&(a[o.tokenKey]=cn(s))}return a}function un(e,t,n,r,i){let a=new Set([...Object.keys(e),...Object.keys(t)]);if(a.size===0)return;let o=[];for(let s of[...a].toSorted((e,t)=>e.localeCompare(t))){let a=e[s]??t[s]??{},c=t[s]??e[s]??{};if(Object.keys(a).length===0||Object.keys(c).length===0)continue;let l=Bt(a,s)||Bt(c,s),u,d;if(i&&l?(u=Rt(a,n[s]??r[s]??{},s,`light`),d=Rt(c,r[s]??n[s]??{},s,`dark`),Object.keys(u).length===0&&(u=a),Object.keys(d).length===0&&(d=c)):l?(u=It(a,s,`light`),d=It(c,s,`dark`)):(u=a,d=c),Object.keys(u).length===0||Object.keys(d).length===0)continue;let f=l&&!i?(e,t)=>ft(e,t):pt;o.push(` ${s}: {
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
assign("backgroundSubtle", role === "Primary" ? "backgroundSecondary" : \`background\${role}Subtle\`);
|
|
78
|
-
assign("border", \`border\${role}\`);
|
|
79
|
-
assign("borderDisabled", \`border\${role}Disabled\`);
|
|
80
|
-
assign("borderHover", \`border\${role}Hover\`);
|
|
81
|
-
assign("borderSubtle", role === "Primary" ? "borderSecondary" : \`border\${role}Subtle\`);
|
|
82
|
-
assign("foreground", \`foreground\${role}\`);
|
|
83
|
-
assign("foregroundDisabled", \`foreground\${role}Disabled\`);
|
|
84
|
-
assign("foregroundHover", \`foreground\${role}Hover\`);
|
|
85
|
-
assign("foregroundOn", \`foregroundOn\${role}\`);
|
|
86
|
-
assign("foregroundOnDisabled", \`foregroundOn\${role}Disabled\`);
|
|
87
|
-
assign("foregroundOnHover", \`foregroundOn\${role}Hover\`);
|
|
88
|
-
return {
|
|
89
|
-
...values,
|
|
90
|
-
...overlay
|
|
91
|
-
};
|
|
92
|
-
}`}function _n(e){return` ${/^[A-Z_$][\w$]*$/i.test(e)?e:a(e)}: string;`}function vn(e,t){if(e.length!==0)return[`/**`,` * Theme values available on \`useTheme()\` and \`$\` style props for the ${t.specName||`design system`}.`,` *`," * Derived from design tokens mapped by `createV5Theme` and `getTheme`.",` *`,` * @see https://tamagui.dev/docs/guides/theme-builder#gettheme`,` */`,`export interface AppTheme {`,...e.map(_n),`}`,``]}function yn(e,t,n={}){let r=e.fonts??{},i=n.useDefaultConfig===!0,o=n.animations??`css`,s=n.includeTypeAugmentation!==!1,c=t.filter(e=>e.category===`color`),l=V(c,`light`),u=V(c,`dark`),d=u.length>0?u:l,f=lt(l,u),p=Object.keys(f).length>0,m=ut(l),h=ut(d),g=Y(l),_=Y(d),ee=Kt([...l,...d]),te={...Xt(en(l,f)),...g},ne={...Xt(en(d,f)),..._},{lightPalette:v,darkPalette:y,lightBaseName:b,darkBaseName:x}=nn(t),re=un(te,ne,m,h,p),S=p&&b?zt(g[b]??{},m[b]??{},b,`light`):void 0,ie=p&&x?zt(_[x]??{},h[x]??{},x,`dark`):void 0,C=V(t,`light`),w=V(t,`dark`),ae=u.length>0?w:C,T=u.length>0?x:b,E={...rn(l,b,`light`),...ln(C,b,`light`)},D={...rn(u.length>0?u:l,T,`dark`),...ln(ae,T,`dark`)},oe=vn(mn({lightSemantic:E,darkSemantic:D,lightScales:te,darkScales:ne,lightPalette:v,darkPalette:y,semanticRoles:ee}),{specName:e.name}),se=ct(C),O=[];Object.keys(f).length>0&&O.push(` color: ${ft(f,4)}`);for(let e of rt){let t=se[e];t&&Object.keys(t).length>0&&O.push(` ${e}: ${ft(t,4)}`)}let k=[];S?k.push(` lightPalette: ${S}`):v&&k.push(` lightPalette: ${a(v)}`),ie?k.push(` darkPalette: ${ie}`):y&&k.push(` darkPalette: ${a(y)}`),re&&k.push(` childrenThemes: ${re}`),(Object.keys(E).length>0||Object.keys(D).length>0)&&k.push(gn(E,D));let A=[`import { isWeb } from '@tamagui/constants';`];i?A.push(`import { createV5Theme, defaultConfig, type CreateV5ThemeOptions } from "@tamagui/config/v5";`):A.push(`import { createV5Theme, type CreateV5ThemeOptions } from "@tamagui/config/v5";`),o!==!1&&A.push(`import { animations } from "${Qe[o]}";`),n.importConfig&&A.push(`import userConfig from "${n.importConfig}";`);let ce=[`createTamagui`,`px`];O.length>0&&ce.push(`createTokens`);let le=Ue(t,r);le.length>0&&ce.push(`createFont`),A.push(`import { ${ce.join(`, `)} } from "@tamagui/core";`);let j=[`/* eslint-disable */`,``,`/*`,` * Generated by @razorwind/tamagui — Do not edit by hand.`,` * `,` * @see https://tamagui.dev/docs/core/config-v5`,` */`,``,...A,``];O.length>0&&j.push(`const tokens = createTokens({`,O.join(`,
|
|
93
|
-
`),`});`,``);let ue=k.length>0?`createV5Theme({\n${k.join(`,
|
|
94
|
-
`)}\n})`:`createV5Theme()`;(Object.keys(E).length>0||Object.keys(D).length>0)&&j.push(hn(ee),``),j.push(`const themes = ${ue};`,``);let de=new Map;if(le.length>0)for(let[e,t]of le.entries()){let n=Ge(t.key,e);de.set(t.key,n),j.push(Ke(t,n),``)}let M=[];if(i&&M.push(` ...defaultConfig`),o!==!1&&M.push(` animations`),O.length>0&&(i?M.push(` tokens: {
|
|
95
|
-
...defaultConfig.tokens,
|
|
96
|
-
...tokens,
|
|
97
|
-
space: {
|
|
98
|
-
...defaultConfig.tokens.space,
|
|
99
|
-
...tokens.space
|
|
100
|
-
},
|
|
101
|
-
size: {
|
|
102
|
-
...defaultConfig.tokens.size,
|
|
103
|
-
...tokens.size
|
|
104
|
-
},
|
|
105
|
-
radius: {
|
|
106
|
-
...defaultConfig.tokens.radius,
|
|
107
|
-
...tokens.radius
|
|
108
|
-
},
|
|
109
|
-
zIndex: {
|
|
110
|
-
...defaultConfig.tokens.zIndex,
|
|
111
|
-
...tokens.zIndex
|
|
112
|
-
}
|
|
113
|
-
}`):M.push(` tokens`)),M.push(` themes`),de.size>0){let e=[...de.entries()].map(([e,t])=>` ${/^[A-Z_$][\w$]*$/i.test(e)?e:a(e)}: ${t}`);i?M.push(` fonts: {
|
|
114
|
-
...defaultConfig.fonts,
|
|
115
|
-
${e.join(`,
|
|
51
|
+
`}const We=new Set([`default`,`light`,`theme`]),Ge=/^base(?:[A-Z]\w*|[._-].+)?$/i,Ke=/^ring(?:\.|$)/i,qe={css:`@tamagui/config/v5-css`,rn:`@tamagui/config/v5-rn`,reanimated:`@tamagui/config/v5-reanimated`,motion:`@tamagui/config/v5-motion`};function Je(e){return We.has(e)}function Ye(e){return e===`dark`}function G(e,t){let n=new Map,r=t===`dark`?Ye:Je;for(let t of e){let e=t.theme?.toLowerCase();(!e||Ge.test(e))&&n.set(t.path,t)}for(let t of e){let e=t.theme?.toLowerCase();e&&r(e)&&n.set(t.path,t)}return[...n.values()]}function Xe(e){return Ke.test(e.path)&&e.category===`shadow`}const Ze=new Set([`shadow`,`insetShadow`,`dropShadow`,`textShadow`,`boxShadow`]);function Qe(e){return!e.primitive&&!!e.tokenKey&&(e.type===`shadow`||e.category!=null&&Ze.has(e.category))}const $e=new Set([`fontSize`,`blur`]),et=[`space`,`size`,`radius`,`zIndex`,`blur`,`fontSize`,`shadow`,`insetShadow`,`dropShadow`,`textShadow`,`boxShadow`,`fontWeight`];function tt(e){return/^px\(-?\d/.test(e)}function nt(e){if(e.category===`radius`&&e.tokenKey?.startsWith(`borderRadius`)){let t=e.tokenKey.replace(/^borderRadius/,``);return t?D([t]):e.tokenKey}return e.tokenKey??``}function rt(e,t){let n=$(e,t.byPath,t.byCssVar).tamaguiValue;if(e.category&&$e.has(e.category)&&typeof n==`number`)return`px(${n})`;if(typeof n==`string`){let r=Q(n,t);return e.category===`dropShadow`?it(r):r}return n}function it(e){return e.includes(`drop-shadow(`)?e:e.split(`,`).map(e=>e.trim()).filter(Boolean).map(e=>{let t=e.replace(/^inset\s+/i,``).split(/\s+/);if(t.length>=5){let[e,n,r]=t;return`drop-shadow(${e} ${n} ${r} ${t.slice(4).join(` `)})`}return`drop-shadow(${e.replace(/^inset\s+/i,``)})`}).join(` `)}function at(e){let t={},n=pt(e);for(let r of e){if(!r.category||r.category===`color`||!r.tokenKey||Xe(r))continue;let e=nt(r);if(!e)continue;let i=rt(r,n);if(typeof i==`string`&>(i))continue;let a=t[r.category]??{};a[e]=i,t[r.category]=a}return t}function K(e){let t=e.path.replace(/^color\./i,``).replaceAll(`.`,``);return e.theme?`${e.theme}${t[0]?.toUpperCase()??``}${t.slice(1)}`:t}function q(e){return`tokens.color.${e}.val`}function ot(e,t){let n={},r=(e,t)=>{let r=t.cssValue;typeof r!=`string`||r.length===0||ht(r)||r===`[object Object]`||(n[e]=r)};for(let t of e)t.tokenKey&&(t.primitive?r(K(t),t):r(t.tokenKey,t));for(let e of t)!e.tokenKey||!e.primitive||r(K(e),e);return n}function J(e,t,n,r){let i=n[r];if(typeof i!=`string`)return!1;let a=Z(e,t);return a!=null&&a===i}function st(e,t,n){if(e.tokenKey&&J(e,t,n,e.tokenKey))return q(e.tokenKey);let r=$(e,t.byPath,t.byCssVar);if(r.tokenKey&&J(e,t,n,r.tokenKey))return q(r.tokenKey);if(r.primitive){let i=K(r);if(J(e,t,n,i))return q(i)}let i=Z(e,t);if(i)return a(i)}function Y(e,t=2){let n=` `.repeat(t),r=Object.entries(e).toSorted(([e],[t])=>e.localeCompare(t,void 0,{numeric:!0}));return r.length===0?`{}`:`{\n${r.map(([e,t])=>{let r=typeof t==`string`&&tt(t)?t:a(t);return`${n}${/^[A-Z_$][\w$]*$/i.test(e)?e:a(e)}: ${r}`}).join(`,
|
|
52
|
+
`)}\n${` `.repeat(Math.max(t-2,0))}}`}function ct(e,t=2){let n=` `.repeat(t),r=Object.entries(e).toSorted(([e],[t])=>e.localeCompare(t,void 0,{numeric:!0}));return r.length===0?`{}`:`{\n${r.map(([e,t])=>`${n}${/^[A-Z_$][\w$]*$/i.test(e)?e:a(e)}: ${t}`).join(`,
|
|
53
|
+
`)}\n${` `.repeat(Math.max(t-2,0))}}`}const lt=/^\{([^{}]+)\}$/,ut=/\{([^{}]+)\}/g,dt=/^var\((--[^),\s]+)(?:\s*,[^)]*)?\)$/,ft=/var\((--[^),\s]+)(?:\s*,[^)]*)?\)/g;function pt(e){return{byPath:new Map(e.map(e=>[e.path,e])),byCssVar:new Map(e.map(e=>[(0,t.toThemeCssVar)(e.path),e]))}}function mt(e){if(typeof e==`string`)return lt.exec(e.trim())?.[1]?.trim()}function X(e){if(typeof e==`string`)return dt.exec(e.trim())?.[1]}function ht(e){return mt(e)!=null||X(e)!=null}function gt(e){return/var\(|\{[^{}]+\}/.test(e)}function Z(e,t){let n=$(e,t.byPath,t.byCssVar);if(n.category!=null&&n.category!==`color`)return;let r=[n.cssValue,n.tamaguiValue];for(let e of r)if(typeof e==`string`&&e.length>0&&!ht(e))return e}function Q(e,t){return e.replace(ut,(e,n)=>{let r=t.byPath.get(n.trim());return r?Z(r,t)??e:e}).replace(ft,(e,n)=>{let r=t.byCssVar.get(n);return r?Z(r,t)??e:e})}function $(e,t,n){let r=e,i=new Set;for(let e=0;e<8;e++){if(i.has(r.path))return r;i.add(r.path);let e=mt(r.value);if(e){let n=t.get(e);if(!n||n.path===r.path)return r;r=n;continue}let a=X(r.value)??X(r.cssValue)??X(r.tamaguiValue);if(a){let e=n.get(a);if(!e||e.path===r.path)return r;r=e;continue}return r}return r}function _t(e,t){let n=t.toLowerCase(),r=e.split(/(?=[A-Z])/).filter(Boolean).filter(e=>e.toLowerCase()!==n);if(r.length!==0)return D(r)}function vt(e){return e.category===`color`&&!e.primitive&&!!e.tokenKey}function yt(e){return Qe(e)&&D(e.path.split(`.`).filter(Boolean))||e.tokenKey}function bt(e){let t=e.toLowerCase();return Je(t)||Ye(t)}function xt(e,t,n){let r=yt(t);if(!r)return;let i=t.childTheme?.trim();if(!i||bt(i)){e.base[r]=n;return}let a=D([i]),o=_t(r,a);if(!o)return;let s=e.children[a]??{};s[o]=n,e.children[a]=s}function St(e,t){let n=typeof e.tamaguiValue==`string`?e.tamaguiValue:e.cssValue;if(typeof n!=`string`||n.length===0)return;let r=Q(n,t);return r.length===0||gt(r)?void 0:a(e.category===`dropShadow`?it(r):r)}function Ct(e,t){let n=pt(e),r={base:{},children:{}};for(let i of e){if(vt(i)){let e=st(i,n,t);e&&xt(r,i,e);continue}if(!Qe(i))continue;let e=St(i,n);if(!e)continue;let a=i.childTheme?.trim();(a&&!bt(a)||Xe(i))&&xt(r,i,e)}return r}function wt(e){let t=new Set;for(let n of e){for(let e of Object.keys(n.base))t.add(e);for(let e of Object.values(n.children))for(let n of Object.keys(e))t.add(n)}return[...t].toSorted((e,t)=>e.localeCompare(t,void 0,{numeric:!0}))}function Tt(e){return` ${/^[A-Z_$][\w$]*$/i.test(e)?e:a(e)}: string;`}function Et(e,t){if(e.length!==0)return[`/**`,` * Theme values available on \`useTheme()\` and \`$\` style props for the ${t.specName||`design system`}.`,` *`," * Derived from semantic color tokens mapped by `createTheme`. Nested"," * themes (`light_primary`, `dark_danger`, …) come from each token's"," * `theme` / `$theme` property.",` *`,` * @see https://tamagui.dev/docs/intro/themes`,` */`,`export interface AppTheme {`,...e.map(Tt),`}`,``]}function Dt(e,t){return`${e}_${t}`}function Ot(e){return Object.keys(e).length>0}function kt(e,t){return`const ${e} = createTheme(${ct(t,2)});`}function At(e,t,n){let r=[],i=[],o=(e,t,n=!1)=>{if(!n&&!Ot(t))return;r.push(kt(e,t));let o=/^[A-Z_$][\w$]*$/i.test(e)?e:a(e);i.push(o===e?` ${e}`:` ${o}: ${e}`)},s=[...new Set([...Object.keys(e.children),...Object.keys(t.children)])].toSorted((e,t)=>e.localeCompare(t));o(`light`,e.base,s.length>0),n&&o(`dark`,t.base,s.length>0);for(let r of s){let i=e.children[r]??t.children[r]??{};if(o(Dt(`light`,r),i),n){let n=t.children[r]??e.children[r]??{};o(Dt(`dark`,r),n)}}return i.length===0?{statements:[],hasThemes:!1}:(r.push(``,`const themes = {\n${i.join(`,
|
|
54
|
+
`)}\n};`),{statements:r,hasThemes:!0})}function jt(e,t,n={}){let r=e.fonts??{},i=n.useDefaultConfig===!0,o=n.animations??`css`,s=n.includeTypeAugmentation!==!1,c=t.filter(e=>e.category===`color`),l=G(c,`light`),u=G(c,`dark`),d=u.length>0,f=ot(l,u),p=G(t,`light`),m=d?G(t,`dark`):p,h=Ct(p,f),g=Ct(m,f),{statements:_,hasThemes:v}=At(h,g,d),ee=Et(wt(d?[h,g]:[h]),{specName:e.name}),y=at(p),b=[];Object.keys(f).length>0&&b.push(` color: ${Y(f,4)}`);for(let e of et){let t=y[e];t&&Object.keys(t).length>0&&b.push(` ${e}: ${Y(t,4)}`)}let x=[`import { isWeb } from '@tamagui/constants';`];i&&x.push(`import { defaultConfig } from "@tamagui/config/v5";`),o!==!1&&x.push(`import { animations } from "${qe[o]}";`),n.importConfig&&x.push(`import userConfig from "${n.importConfig}";`);let S=[`createTamagui`,`px`];b.length>0&&S.push(`createTokens`),v&&S.push(`createTheme`);let C=V(t,r);C.length>0&&S.push(`createFont`),x.push(`import { ${S.join(`, `)} } from "@tamagui/core";`);let w=[`/* eslint-disable */`,``,`/*`,` * Generated by @razorwind/tamagui — Do not edit by hand.`,` * `,` * @see https://tamagui.dev/docs/core/configuration`,` * @see https://tamagui.dev/docs/intro/themes`,` */`,``,...x,``];b.length>0&&w.push(`const tokens = createTokens({`,b.join(`,
|
|
55
|
+
`),`});`,``),_.length>0&&w.push(..._,``);let T=new Map;if(C.length>0)for(let[e,t]of C.entries()){let n=U(t.key,e);T.set(t.key,n),w.push(Ue(t,n),``)}let E=[];if(i&&E.push(` ...defaultConfig`),o!==!1&&E.push(` animations`),b.length>0&&(i?E.push(` tokens: {
|
|
56
|
+
...defaultConfig.tokens,
|
|
57
|
+
...tokens,
|
|
58
|
+
space: {
|
|
59
|
+
...defaultConfig.tokens.space,
|
|
60
|
+
...tokens.space
|
|
61
|
+
},
|
|
62
|
+
size: {
|
|
63
|
+
...defaultConfig.tokens.size,
|
|
64
|
+
...tokens.size
|
|
65
|
+
},
|
|
66
|
+
radius: {
|
|
67
|
+
...defaultConfig.tokens.radius,
|
|
68
|
+
...tokens.radius
|
|
69
|
+
},
|
|
70
|
+
zIndex: {
|
|
71
|
+
...defaultConfig.tokens.zIndex,
|
|
72
|
+
...tokens.zIndex
|
|
73
|
+
}
|
|
74
|
+
}`):E.push(` tokens`)),v&&E.push(` themes`),T.size>0){let e=[...T.entries()].map(([e,t])=>` ${/^[A-Z_$][\w$]*$/i.test(e)?e:a(e)}: ${t}`);i?E.push(` fonts: {
|
|
75
|
+
...defaultConfig.fonts,
|
|
76
|
+
${e.join(`,
|
|
116
77
|
`)}
|
|
117
|
-
|
|
118
|
-
${e.join(`,
|
|
78
|
+
}`):E.push(` fonts: {
|
|
79
|
+
${e.join(`,
|
|
119
80
|
`)}
|
|
120
|
-
|
|
121
|
-
* The Tamagui
|
|
81
|
+
}`)}return n.shorthands&&E.push(` shorthands: ${Y(n.shorthands,4)}`),n.media&&E.push(` media: ${a(n.media)}`),n.defaultFont&&E.push(` defaultFont: ${a(n.defaultFont)}`),w.push(``,...ee??[],`/**
|
|
82
|
+
* The Tamagui config for the ${e.name||`design system`}.
|
|
122
83
|
*
|
|
123
|
-
* @see https://tamagui.dev/docs/core/
|
|
84
|
+
* @see https://tamagui.dev/docs/core/configuration
|
|
124
85
|
*/
|
|
125
|
-
export const config = createTamagui({`,
|
|
126
|
-
`),n.importConfig?`, ...userConfig `:``,`});`,``,`export type AppConfig = typeof config;`,``),s&&
|
|
127
|
-
`)}function
|
|
86
|
+
export const config = createTamagui({`,E.join(`,
|
|
87
|
+
`),n.importConfig?`, ...userConfig `:``,`});`,``,`export type AppConfig = typeof config;`,``),s&&w.push(`declare module "@tamagui/core" {`,` // eslint-disable-next-line @typescript-eslint/no-empty-object-type`,` interface TamaguiCustomConfig extends AppConfig {}`,`}`,``),w.push(`export default config;`,``),w.join(`
|
|
88
|
+
`)}function Mt(e,r={}){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?re(e.tokens,r):[];if(o.length===0&&!a)return{};let s=r.outputPath??`tamagui.config.ts`,c=jt(e,o,r),l=r.installGuide??W({outputPath:s}),u=(0,n.join)((0,n.dirname)(s),`INSTALL.md`);return{[s]:(0,t.createDocument)(s,c,{name:`razorwind-tamagui`},!1,`typescript`),[u]:(0,t.createDocument)(u,l,{name:`razorwind-tamagui`},!1,`markdown`)}}var Nt=(0,e.definePlugin)(e=>({name:`tamagui`,themeGeneration:`combined`,generate:async t=>Mt(t,e??{})}));exports.collectTamaguiFonts=V,exports.default=Nt,exports.flattenTokens=re,exports.fontVarName=U,Object.defineProperty(exports,"formatTokenValue",{enumerable:!0,get:function(){return t.formatTokenValue}}),exports.generateTamaguiConfig=Mt,exports.isPaletteGroup=v,exports.renderInstallMd=W,exports.renderTamaguiConfig=jt,exports.resolveTokenCategory=te,exports.resolveTokenSets=t.resolveTokenSets,exports.tamaguiFontKeyFromRole=L,exports.toCamelCaseKey=D,Object.defineProperty(exports,"toCssVar",{enumerable:!0,get:function(){return t.toCssVar}}),exports.toTamaguiValue=o,exports.toTokenKey=ne,exports.typographyFontKey=we;
|
package/dist/index.d.cts
CHANGED
|
@@ -22,7 +22,7 @@ interface TamaguiPluginOptions {
|
|
|
22
22
|
* Output path written relative to the execution cwd.
|
|
23
23
|
*
|
|
24
24
|
* Light and dark schemes are always written to this single file — Tamagui
|
|
25
|
-
* `
|
|
25
|
+
* `createTheme` encodes both as `light` / `dark` plus nested children.
|
|
26
26
|
*
|
|
27
27
|
* @defaultValue `"tamagui.config.ts"`
|
|
28
28
|
*/
|
|
@@ -108,7 +108,7 @@ interface FlatToken {
|
|
|
108
108
|
*/
|
|
109
109
|
childTheme?: string;
|
|
110
110
|
/**
|
|
111
|
-
* True when an ancestor group is marked as a primitive (`primitive: true` or `$type: "primitive"` or `$type: "palette"`). Those scales feed
|
|
111
|
+
* True when an ancestor group is marked as a primitive (`primitive: true` or `$type: "primitive"` or `$type: "palette"`). Those scales feed `createTokens({ color })` and are skipped when building semantic `createTheme` objects.
|
|
112
112
|
*/
|
|
113
113
|
primitive?: boolean;
|
|
114
114
|
}
|
|
@@ -209,78 +209,52 @@ declare function toTamaguiValue(value: unknown, type?: string): string | number;
|
|
|
209
209
|
/**
|
|
210
210
|
* Build Tamagui INSTALL.md for generated config file.
|
|
211
211
|
*
|
|
212
|
-
* @see https://tamagui.dev/docs/core/
|
|
212
|
+
* @see https://tamagui.dev/docs/core/configuration
|
|
213
213
|
*/
|
|
214
214
|
declare function renderInstallMd(options: {
|
|
215
215
|
outputPath: string;
|
|
216
216
|
}): string;
|
|
217
217
|
//#endregion
|
|
218
218
|
//#region src/generate.d.ts
|
|
219
|
-
type ColorScheme = "light" | "dark";
|
|
220
|
-
/**
|
|
221
|
-
* Mirror a palette step across a numbered scale (`1` ↔ `max`, `2` ↔ `max-1`).
|
|
222
|
-
*
|
|
223
|
-
* Dark palettes are emitted darkest-first (`color1` / `red1` are the darkest
|
|
224
|
-
* stops), so a DTCG alias `{color.red.7}` must read `theme.red3` on a 9-step
|
|
225
|
-
* scale to keep pointing at the original token color.
|
|
226
|
-
*/
|
|
227
|
-
declare function flipPaletteStep(step: number, maxStep: number): number;
|
|
228
|
-
/**
|
|
229
|
-
* Collect color palettes for Tamagui `childrenThemes`.
|
|
230
|
-
*
|
|
231
|
-
* Groups marked `palette: true` (or `$type: "palette"`) win. When none are
|
|
232
|
-
* marked, numbered 1–12 (or 100–900) scales are used as a fallback.
|
|
233
|
-
*/
|
|
234
|
-
declare function collectColorScales(colorTokens: FlatToken[]): Record<string, Record<string, string>>;
|
|
235
219
|
/**
|
|
236
|
-
*
|
|
237
|
-
* lightest (`color1`–`color12`).
|
|
220
|
+
* Render a Tamagui config module from flattened design tokens.
|
|
238
221
|
*
|
|
239
|
-
*
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
*
|
|
244
|
-
* CSS variables and unresolved aliases return `undefined`.
|
|
245
|
-
*/
|
|
246
|
-
declare function colorLightness(color: string): number | undefined;
|
|
247
|
-
/**
|
|
248
|
-
* Render a Tamagui v5 config module from flattened design tokens.
|
|
222
|
+
* Light and dark token sets become `createTheme` objects. Semantic colors with
|
|
223
|
+
* a `theme` / `$theme` property are nested as `light_<name>` / `dark_<name>`,
|
|
224
|
+
* with the theme name stripped from the token key. Each typography token is
|
|
225
|
+
* emitted as its own `createFont` entry with that token's size, line height,
|
|
226
|
+
* and weight (not a shared type scale).
|
|
249
227
|
*
|
|
250
|
-
*
|
|
251
|
-
*
|
|
252
|
-
* token's size, line height, and weight (not a shared type scale).
|
|
253
|
-
*
|
|
254
|
-
* @see https://tamagui.dev/docs/core/config-v5
|
|
228
|
+
* @see https://tamagui.dev/docs/core/configuration
|
|
229
|
+
* @see https://tamagui.dev/docs/intro/themes
|
|
255
230
|
* @see https://tamagui.dev/docs/core/font-language#font-tokens
|
|
256
231
|
*/
|
|
257
232
|
declare function renderTamaguiConfig(spec: Schema, tokens: FlatToken[], options?: TamaguiPluginOptions): string;
|
|
258
233
|
/**
|
|
259
|
-
* Generate a Tamagui
|
|
234
|
+
* Generate a Tamagui config file from a Razorwind schema.
|
|
260
235
|
*/
|
|
261
236
|
declare function generateTamaguiConfig(spec: Schema, options?: TamaguiPluginOptions): GeneratorFunctionResult<Schema, TamaguiPluginOptions>;
|
|
262
237
|
//#endregion
|
|
263
238
|
//#region src/index.d.ts
|
|
264
239
|
/**
|
|
265
|
-
* Razorwind plugin that turns design tokens into a Tamagui
|
|
266
|
-
* (`createTamagui` + `createTokens` + `
|
|
240
|
+
* Razorwind plugin that turns design tokens into a Tamagui config
|
|
241
|
+
* (`createTamagui` + `createTokens` + `createTheme` + `createFont`).
|
|
267
242
|
*
|
|
268
|
-
* Light and dark token sets are emitted as a single config
|
|
269
|
-
*
|
|
270
|
-
* `
|
|
271
|
-
*
|
|
272
|
-
*
|
|
273
|
-
*
|
|
274
|
-
*
|
|
275
|
-
* childrenThemes maps. Light palettes are ordered lightest-first; dark palettes
|
|
276
|
-
* darkest-first.
|
|
243
|
+
* Light and dark token sets are emitted as a single config. Semantic colors
|
|
244
|
+
* and shadows (not marked `palette` / `primitive`) that declare `theme` /
|
|
245
|
+
* `$theme` become nested Tamagui themes (`light_primary`, `dark_danger`, …),
|
|
246
|
+
* with the theme name stripped from the token key (`backgroundPrimarySubtle` +
|
|
247
|
+
* `theme: "primary"` → `backgroundSubtle`; `ringPrimarySubtle` → `ringSubtle`
|
|
248
|
+
* on `primary`). Untagged semantic colors land on the `light` / `dark` base
|
|
249
|
+
* themes. Primitive palettes stay on `createTokens({ color })`.
|
|
277
250
|
*
|
|
278
251
|
* Typography tokens (`$type: "typography"`) each emit their own Tamagui
|
|
279
252
|
* `createFont` entry with that token's size, line height, and weight. Font
|
|
280
253
|
* keys keep the DTCG token name (`display-lg`). Names with a `_` suffix (or a
|
|
281
254
|
* nested language segment) become FontLanguage variants (`body_cn`).
|
|
282
255
|
*
|
|
283
|
-
* @see https://tamagui.dev/docs/core/
|
|
256
|
+
* @see https://tamagui.dev/docs/core/configuration
|
|
257
|
+
* @see https://tamagui.dev/docs/intro/themes
|
|
284
258
|
* @see https://tamagui.dev/docs/core/font-language#font-tokens
|
|
285
259
|
*
|
|
286
260
|
* @example
|
|
@@ -295,5 +269,5 @@ declare function generateTamaguiConfig(spec: Schema, options?: TamaguiPluginOpti
|
|
|
295
269
|
*/
|
|
296
270
|
declare const _default: (options?: TamaguiPluginOptions | undefined) => import("@razorwind/core/plugin").Plugin;
|
|
297
271
|
//#endregion
|
|
298
|
-
export { type FlatToken, type TamaguiAnimationDriver, type TamaguiFontDef, type TamaguiPluginOptions, type TamaguiTokenCategory,
|
|
272
|
+
export { type FlatToken, type TamaguiAnimationDriver, type TamaguiFontDef, type TamaguiPluginOptions, type TamaguiTokenCategory, collectTamaguiFonts, _default as default, flattenTokens, fontVarName, formatTokenValue, generateTamaguiConfig, isPaletteGroup, renderInstallMd, renderTamaguiConfig, resolveTokenCategory, resolveTokenSets, tamaguiFontKeyFromRole, toCamelCaseKey, toCssVar, toTamaguiValue, toTokenKey, typographyFontKey };
|
|
299
273
|
//# sourceMappingURL=index.d.cts.map
|
package/dist/index.d.cts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.cts","names":[],"sources":["../src/types.ts","../src/flatten.ts","../src/fonts.ts","../src/format.ts","../src/install.ts","../src/generate.ts","../src/index.ts"],"mappings":";;;;;;;;;;;KA0BY;;;;KAMA;;;;UAkBK;;;;;;;;;EASf;;;;;;;EAQA,aAAa;;;;;;EAOb,aAAa;;;;;;EAOb,QAAQ;;;;EAKR;;;;EAKA;;;;;;;;EASA;;;;;EAMA,eAAe;;;;;;;EAQf;;;;;EAMA;;;;;UAMe;;EAEf;;EAEA,OAAO;;EAEP;;EAEA;;EAEA;;EAEA,WAAW;;EAEX;;EAEA;;EAEA;;;;;EAKA;;;;EAIA;;;;;;;;;iBChEc,eAAe,MAAM;;;;iBAyGrB,qBACd,cACA,gBACC;;;;;;;iBAoEa,eAAe;;;;;;;;iBA0Bf,WAAW;;;;iBA2GX,cACd,QAAQ,SAAS,eAAe,SAChC,UAAS,KAAK,wCACb;;;;;;;;;UCrUc;;EAEf;;EAEA;;EAEA;EACA,MAAM;EACN,YAAY;EACZ,QAAQ;EACR,eAAe;;EAEf;;;;;;;;;iBA4Lc,uBAAuB;;;;;;;;;iBAiCvB,kBAAkB;;;;;;;iBA2WlB,oBACd,QAAQ,aACR,QAAQ,QACP;;;;;;iBAsFa,YAAY,aAAa;;;;;;;;;iBC/rBzB,eAAe,gBAAgB;;;;;;;;iBCnC/B,gBAAgB;EAAW
|
|
1
|
+
{"version":3,"file":"index.d.cts","names":[],"sources":["../src/types.ts","../src/flatten.ts","../src/fonts.ts","../src/format.ts","../src/install.ts","../src/generate.ts","../src/index.ts"],"mappings":";;;;;;;;;;;KA0BY;;;;KAMA;;;;UAkBK;;;;;;;;;EASf;;;;;;;EAQA,aAAa;;;;;;EAOb,aAAa;;;;;;EAOb,QAAQ;;;;EAKR;;;;EAKA;;;;;;;;EASA;;;;;EAMA,eAAe;;;;;;;EAQf;;;;;EAMA;;;;;UAMe;;EAEf;;EAEA,OAAO;;EAEP;;EAEA;;EAEA;;EAEA,WAAW;;EAEX;;EAEA;;EAEA;;;;;EAKA;;;;EAIA;;;;;;;;;iBChEc,eAAe,MAAM;;;;iBAyGrB,qBACd,cACA,gBACC;;;;;;;iBAoEa,eAAe;;;;;;;;iBA0Bf,WAAW;;;;iBA2GX,cACd,QAAQ,SAAS,eAAe,SAChC,UAAS,KAAK,wCACb;;;;;;;;;UCrUc;;EAEf;;EAEA;;EAEA;EACA,MAAM;EACN,YAAY;EACZ,QAAQ;EACR,eAAe;;EAEf;;;;;;;;;iBA4Lc,uBAAuB;;;;;;;;;iBAiCvB,kBAAkB;;;;;;;iBA2WlB,oBACd,QAAQ,aACR,QAAQ,QACP;;;;;;iBAsFa,YAAY,aAAa;;;;;;;;;iBC/rBzB,eAAe,gBAAgB;;;;;;;;iBCnC/B,gBAAgB;EAAW;;;;;;;;;;;;;;;;;iBCi0B3B,oBACd,MAAM,QACN,QAAQ,aACR,UAAS;;;;iBA4NK,sBACd,MAAM,QACN,UAAS,uBACR,wBAAwB,QAAQ"}
|
package/dist/index.d.mts
CHANGED
|
@@ -22,7 +22,7 @@ interface TamaguiPluginOptions {
|
|
|
22
22
|
* Output path written relative to the execution cwd.
|
|
23
23
|
*
|
|
24
24
|
* Light and dark schemes are always written to this single file — Tamagui
|
|
25
|
-
* `
|
|
25
|
+
* `createTheme` encodes both as `light` / `dark` plus nested children.
|
|
26
26
|
*
|
|
27
27
|
* @defaultValue `"tamagui.config.ts"`
|
|
28
28
|
*/
|
|
@@ -108,7 +108,7 @@ interface FlatToken {
|
|
|
108
108
|
*/
|
|
109
109
|
childTheme?: string;
|
|
110
110
|
/**
|
|
111
|
-
* True when an ancestor group is marked as a primitive (`primitive: true` or `$type: "primitive"` or `$type: "palette"`). Those scales feed
|
|
111
|
+
* True when an ancestor group is marked as a primitive (`primitive: true` or `$type: "primitive"` or `$type: "palette"`). Those scales feed `createTokens({ color })` and are skipped when building semantic `createTheme` objects.
|
|
112
112
|
*/
|
|
113
113
|
primitive?: boolean;
|
|
114
114
|
}
|
|
@@ -209,78 +209,52 @@ declare function toTamaguiValue(value: unknown, type?: string): string | number;
|
|
|
209
209
|
/**
|
|
210
210
|
* Build Tamagui INSTALL.md for generated config file.
|
|
211
211
|
*
|
|
212
|
-
* @see https://tamagui.dev/docs/core/
|
|
212
|
+
* @see https://tamagui.dev/docs/core/configuration
|
|
213
213
|
*/
|
|
214
214
|
declare function renderInstallMd(options: {
|
|
215
215
|
outputPath: string;
|
|
216
216
|
}): string;
|
|
217
217
|
//#endregion
|
|
218
218
|
//#region src/generate.d.ts
|
|
219
|
-
type ColorScheme = "light" | "dark";
|
|
220
|
-
/**
|
|
221
|
-
* Mirror a palette step across a numbered scale (`1` ↔ `max`, `2` ↔ `max-1`).
|
|
222
|
-
*
|
|
223
|
-
* Dark palettes are emitted darkest-first (`color1` / `red1` are the darkest
|
|
224
|
-
* stops), so a DTCG alias `{color.red.7}` must read `theme.red3` on a 9-step
|
|
225
|
-
* scale to keep pointing at the original token color.
|
|
226
|
-
*/
|
|
227
|
-
declare function flipPaletteStep(step: number, maxStep: number): number;
|
|
228
|
-
/**
|
|
229
|
-
* Collect color palettes for Tamagui `childrenThemes`.
|
|
230
|
-
*
|
|
231
|
-
* Groups marked `palette: true` (or `$type: "palette"`) win. When none are
|
|
232
|
-
* marked, numbered 1–12 (or 100–900) scales are used as a fallback.
|
|
233
|
-
*/
|
|
234
|
-
declare function collectColorScales(colorTokens: FlatToken[]): Record<string, Record<string, string>>;
|
|
235
219
|
/**
|
|
236
|
-
*
|
|
237
|
-
* lightest (`color1`–`color12`).
|
|
220
|
+
* Render a Tamagui config module from flattened design tokens.
|
|
238
221
|
*
|
|
239
|
-
*
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
*
|
|
244
|
-
* CSS variables and unresolved aliases return `undefined`.
|
|
245
|
-
*/
|
|
246
|
-
declare function colorLightness(color: string): number | undefined;
|
|
247
|
-
/**
|
|
248
|
-
* Render a Tamagui v5 config module from flattened design tokens.
|
|
222
|
+
* Light and dark token sets become `createTheme` objects. Semantic colors with
|
|
223
|
+
* a `theme` / `$theme` property are nested as `light_<name>` / `dark_<name>`,
|
|
224
|
+
* with the theme name stripped from the token key. Each typography token is
|
|
225
|
+
* emitted as its own `createFont` entry with that token's size, line height,
|
|
226
|
+
* and weight (not a shared type scale).
|
|
249
227
|
*
|
|
250
|
-
*
|
|
251
|
-
*
|
|
252
|
-
* token's size, line height, and weight (not a shared type scale).
|
|
253
|
-
*
|
|
254
|
-
* @see https://tamagui.dev/docs/core/config-v5
|
|
228
|
+
* @see https://tamagui.dev/docs/core/configuration
|
|
229
|
+
* @see https://tamagui.dev/docs/intro/themes
|
|
255
230
|
* @see https://tamagui.dev/docs/core/font-language#font-tokens
|
|
256
231
|
*/
|
|
257
232
|
declare function renderTamaguiConfig(spec: Schema, tokens: FlatToken[], options?: TamaguiPluginOptions): string;
|
|
258
233
|
/**
|
|
259
|
-
* Generate a Tamagui
|
|
234
|
+
* Generate a Tamagui config file from a Razorwind schema.
|
|
260
235
|
*/
|
|
261
236
|
declare function generateTamaguiConfig(spec: Schema, options?: TamaguiPluginOptions): GeneratorFunctionResult<Schema, TamaguiPluginOptions>;
|
|
262
237
|
//#endregion
|
|
263
238
|
//#region src/index.d.ts
|
|
264
239
|
/**
|
|
265
|
-
* Razorwind plugin that turns design tokens into a Tamagui
|
|
266
|
-
* (`createTamagui` + `createTokens` + `
|
|
240
|
+
* Razorwind plugin that turns design tokens into a Tamagui config
|
|
241
|
+
* (`createTamagui` + `createTokens` + `createTheme` + `createFont`).
|
|
267
242
|
*
|
|
268
|
-
* Light and dark token sets are emitted as a single config
|
|
269
|
-
*
|
|
270
|
-
* `
|
|
271
|
-
*
|
|
272
|
-
*
|
|
273
|
-
*
|
|
274
|
-
*
|
|
275
|
-
* childrenThemes maps. Light palettes are ordered lightest-first; dark palettes
|
|
276
|
-
* darkest-first.
|
|
243
|
+
* Light and dark token sets are emitted as a single config. Semantic colors
|
|
244
|
+
* and shadows (not marked `palette` / `primitive`) that declare `theme` /
|
|
245
|
+
* `$theme` become nested Tamagui themes (`light_primary`, `dark_danger`, …),
|
|
246
|
+
* with the theme name stripped from the token key (`backgroundPrimarySubtle` +
|
|
247
|
+
* `theme: "primary"` → `backgroundSubtle`; `ringPrimarySubtle` → `ringSubtle`
|
|
248
|
+
* on `primary`). Untagged semantic colors land on the `light` / `dark` base
|
|
249
|
+
* themes. Primitive palettes stay on `createTokens({ color })`.
|
|
277
250
|
*
|
|
278
251
|
* Typography tokens (`$type: "typography"`) each emit their own Tamagui
|
|
279
252
|
* `createFont` entry with that token's size, line height, and weight. Font
|
|
280
253
|
* keys keep the DTCG token name (`display-lg`). Names with a `_` suffix (or a
|
|
281
254
|
* nested language segment) become FontLanguage variants (`body_cn`).
|
|
282
255
|
*
|
|
283
|
-
* @see https://tamagui.dev/docs/core/
|
|
256
|
+
* @see https://tamagui.dev/docs/core/configuration
|
|
257
|
+
* @see https://tamagui.dev/docs/intro/themes
|
|
284
258
|
* @see https://tamagui.dev/docs/core/font-language#font-tokens
|
|
285
259
|
*
|
|
286
260
|
* @example
|
|
@@ -295,5 +269,5 @@ declare function generateTamaguiConfig(spec: Schema, options?: TamaguiPluginOpti
|
|
|
295
269
|
*/
|
|
296
270
|
declare const _default: (options?: TamaguiPluginOptions | undefined) => import("@razorwind/core/plugin").Plugin;
|
|
297
271
|
//#endregion
|
|
298
|
-
export { type FlatToken, type TamaguiAnimationDriver, type TamaguiFontDef, type TamaguiPluginOptions, type TamaguiTokenCategory,
|
|
272
|
+
export { type FlatToken, type TamaguiAnimationDriver, type TamaguiFontDef, type TamaguiPluginOptions, type TamaguiTokenCategory, collectTamaguiFonts, _default as default, flattenTokens, fontVarName, formatTokenValue, generateTamaguiConfig, isPaletteGroup, renderInstallMd, renderTamaguiConfig, resolveTokenCategory, resolveTokenSets, tamaguiFontKeyFromRole, toCamelCaseKey, toCssVar, toTamaguiValue, toTokenKey, typographyFontKey };
|
|
299
273
|
//# sourceMappingURL=index.d.mts.map
|
package/dist/index.mjs
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import{definePlugin as e}from"@razorwind/core/plugin";import{createDocument as t,formatTokenValue as n,formatTokenValue as r,isObject as i,resolveTokenSets as a,toCssVar as o,toThemeCssVar as s}from"@razorwind/core/utils";import{basename as c,dirname as l,join as u}from"node:path";import{cssFontFamily as d,fontFamilyName as f}from"@razorwind/core/lib/fonts";function p(e){return e.replaceAll(`\\`,`\\\\`).replaceAll(`"`,`\\"`).replaceAll(`
|
|
2
|
-
`,`\\n`).replaceAll(`\r`,`\\r`)}function m(e){return typeof e==`string`?`"${p(e)}"`:typeof e==`number`||typeof e==`boolean`?String(e):e==null?`undefined`:JSON.stringify(e)}function h(e,t){if(typeof e==`number`)return e;if(typeof e==`boolean`)return Number(e);if(i(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 r(e,t)}const g=/^(?:font-size|fontSize)(?:\.|$)/i,_=/^(?:font-weight|fontWeight)(?:\.|$)/i,
|
|
3
|
-
`)}\n }`}function
|
|
4
|
-
`)}\n${r}}`}function
|
|
5
|
-
`)}\n});`}function
|
|
2
|
+
`,`\\n`).replaceAll(`\r`,`\\r`)}function m(e){return typeof e==`string`?`"${p(e)}"`:typeof e==`number`||typeof e==`boolean`?String(e):e==null?`undefined`:JSON.stringify(e)}function h(e,t){if(typeof e==`number`)return e;if(typeof e==`boolean`)return Number(e);if(i(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 r(e,t)}const g=/^(?:font-size|fontSize)(?:\.|$)/i,_=/^(?:font-weight|fontWeight)(?:\.|$)/i,v=/^shadow(?:\.|$)/i,y=/^inset-shadow(?:\.|$)/i,b=/^drop-shadow(?:\.|$)/i,x=/^text-shadow(?:\.|$)/i,S=/^(?:blur|blur-?radius)(?:\.|$)/i,C=new Set([`color`,`shadow`,`insetShadow`,`dropShadow`,`textShadow`]),w=[{prefix:/^(?:color|colours?|palette)(?:\.|$)/i,category:`color`},{prefix:g,category:`fontSize`},{prefix:_,category:`fontWeight`},{prefix:b,category:`dropShadow`},{prefix:y,category:`insetShadow`},{prefix:x,category:`textShadow`},{prefix:v,category:`shadow`},{prefix:S,category:`blur`},{prefix:/^(?:space|spacing|gap)(?:\.|$)/i,category:`space`},{prefix:/^inset(?:\.|$)/i,category:`space`},{prefix:/^(?:size|sizing)(?:\.|$)/i,category:`size`},{prefix:/^(?:radius|rounded|radii)(?:\.|$)/i,category:`radius`},{prefix:/^(?:z-?index|zindex|elevation)(?:\.|$)/i,category:`zIndex`}];function T(e){return`$value`in e||`value`in e||`$ref`in e||`ref`in e}function E(e){return e===!0||e===`true`||e===1}function D(e){return E(e.palette)||E(e.$palette)?!0:O(e)===`palette`}function ee(e,t){return(e===`palette`||e===`$palette`)&&(typeof t==`boolean`||typeof t==`number`||typeof t==`string`)}function te(e){return e===!0||e===`true`||e===1}function ne(e){return te(e.primitive)||te(e.$primitive)?!0:O(e)===`primitive`}function re(e,t){return(e===`primitive`||e===`$primitive`)&&(typeof t==`boolean`||typeof t==`number`||typeof t==`string`)}function ie(e,t){return(e===`theme`||e===`$theme`)&&typeof t==`string`}function ae(e){if(typeof e.theme==`string`&&e.theme.length>0)return e.theme;if(typeof e.$theme==`string`&&e.$theme.length>0)return e.$theme}function oe(e){if(typeof e.$description==`string`)return e.$description;if(typeof e.description==`string`)return e.description}function O(e,t){return typeof e.$type==`string`?e.$type:typeof e.type==`string`?e.type:t}function se(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 ce(e,t){for(let{prefix:t,category:n}of w)if(t.test(e))return n;if(t===`color`||t===`palette`)return`color`;if(t===`shadow`)return y.test(e)?`insetShadow`:b.test(e)?`dropShadow`:x.test(e)?`textShadow`:`shadow`;if(t===`dimension`){if(g.test(e))return`fontSize`;if(S.test(e))return`blur`;if(/(?:^|\.)(?:space|spacing|gap)(?:\.|$)/i.test(e)||/(?:^|\.)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)(?:\.|$)/i.test(e)||/(?:^|\.)(?:width|height)(?:\.|$)/i.test(e))return`size`}if(t===`number`&&/z-?index|elevation/i.test(e))return`zIndex`;if(t===`fontWeight`||_.test(e))return`fontWeight`}function k(e){return e.flatMap(e=>e.split(/[-_\s]+/)).filter(Boolean).map((e,t)=>{if(/^\d/.test(e))return e;let n=e.toLowerCase();return t===0?n:`${n.charAt(0).toUpperCase()}${n.slice(1)}`}).join(``)}function le(e){let t=e.split(`.`).filter(Boolean),n=t[0];n&&/^(?:color|colours?|palette|primitive|space|spacing|gap|inset|shadow|inset-shadow|drop-shadow|text-shadow|font-size|fontSize|font-weight|fontWeight|size|sizing|radius|rounded|radii|z-?index|zindex|elevation|blur)$/i.test(n)&&t.shift();let r=t.length>0?t:e.split(`.`).slice(-1);return r.length===1&&/^(?:DEFAULT|default)$/i.test(r[0]??``)?`true`:k(r)}function ue(e,t,r,a,o,s,c){if(!i(e))return;let l=o||ne(e)||D(e),u=O(e,r),d=ae(e)??s;if(T(e)){let r=se(e),i=t.join(`.`),o=ce(i,u)??(l||u===`primitive`||u===`palette`?`color`:void 0),s=n(r,u),f=o&&C.has(o)||u===`color`||u===`palette`||u===`primitive`||u===`shadow`?s:h(r,u);c.push({path:i,type:u===`palette`||u===`primitive`?`color`:u,value:r,cssValue:s,tamaguiValue:f,category:o,tokenKey:o?le(i):void 0,description:oe(e),theme:a,...d?{childTheme:d}:{},...l?{primitive:!0}:{}});return}for(let[n,r]of Object.entries(e))n.startsWith(`$`)&&n!==`$palette`&&n!==`$primitive`||ee(n,r)||re(n,r)||ie(n,r)||ue(r,[...t,n],u,a,l,d,c)}function de(e,t={}){let n=t.includeTypes?new Set(t.includeTypes):void 0,r=[];for(let t of a(e)){let e=t.id==="default"?void 0:t.id;ue(t.tokens,[],void 0,e,!1,void 0,r)}return n?r.filter(e=>!e.type||n.has(e.type)):r}const fe=/^\{([^{}]+)\}$/,pe=/^(?:typography|type|text)$/i,me=/^(?:font|fonts|font-family|fontFamily)$/i,he=/^(?:font-size|fontSize)$/i,ge=/^(?:font-weight|fontWeight)$/i,_e=/^(?:line-height|lineHeight|leading)$/i,ve=/^(?:letter-spacing|letterSpacing|tracking)$/i,ye=/^(?:[a-z]{2}(?:-[A-Z]{2})?|cn|zh|jp|ja|kr|ko|ar|he|th|hi|ru|french|mandarin|chinese|japanese|korean|arabic|hebrew)$/i,be=[`fontFamily`,`font-family`,`family`],xe=[`fontSize`,`font-size`,`size`],Se=[`fontWeight`,`font-weight`,`weight`],Ce=[`lineHeight`,`line-height`,`leading`],we=[`letterSpacing`,`letter-spacing`,`tracking`],Te={1:12,2:14,3:16,4:18,5:20,6:24,7:28,8:32,9:40,10:48};function A(e){if(typeof e==`string`)return fe.exec(e.trim())?.[1]?.trim()}function j(e,t){let n=A(e);if(!n)return e;let r=t.get(n),i=new Set([n]);for(let e=0;e<8&&r;e++){let e=A(r.value);if(!e||i.has(e))return r.value;i.add(e),r=t.get(e)}return r?.value??e}function M(e,t){for(let n of t)if(e[n]!==void 0&&e[n]!==null)return e[n]}function N(e){return(e.split(`,`)[0]?.trim()??e).replaceAll(/^["']|["']$/g,``)}function P(e){if(typeof e==`string`){let t=e.trim();return t.length===0||A(t)?void 0:t}if(Array.isArray(e)&&e.every(e=>typeof e==`string`)){let t=e.map(e=>e.trim()).filter(Boolean);return t.length>0?t.join(`, `):void 0}}function Ee(e){return Number.isInteger(e)?e:Math.round(e*1e3)/1e3}function F(e){if(e==null)return;let t=h(e);if(typeof t==`number`&&Number.isFinite(t))return t;if(typeof t==`string`){let e=/^(-?\d+(?:\.\d+)?)%$/.exec(t.trim());if(e)return Number.parseFloat(e[1])/100}}function De(e){if(typeof e==`number`&&Number.isFinite(e))return String(e);if(typeof e==`string`){let t=e.trim();if(t.length===0||A(t))return;let n=Number(t);return Number.isNaN(n)?t:String(n)}let t=h(e);if(typeof t==`number`&&Number.isFinite(t))return String(t);if(typeof t==`string`&&t.length>0)return t}function Oe(e,t){let n=F(e);if(n!=null)return Ee(t!=null&&n>0&&n<=4?n*t:n)}function I(e,t){return t.test(e.split(`.`)[0]??``)}function ke(e){return e.split(`.`).filter(Boolean).at(-1)??e}function L(e,t){let n=e.split(`.`).filter(Boolean);return n[0]&&t.test(n[0])&&n.shift(),n}function R(e){let t=e.flatMap(e=>e.split(`-`)).filter(Boolean);return t.length===0?`body`:t.map((e,t)=>t===0?`${e.charAt(0).toLowerCase()}${e.slice(1)}`:`${e.charAt(0).toUpperCase()}${e.slice(1)}`).join(``)}function z(e){switch(e.toLowerCase()){case`sans`:case`body`:case`serif`:return`body`;case`monospace`:case`mono`:return`mono`;default:return R([e])}}function Ae(e){return e.role?z(e.role):z(e.name)}function je(e){let t=L(e,pe);if(t.length===0)return`body`;let n=t.at(-1);return n&&t.length>=2&&ye.test(n)&&!n.includes(`_`)?`${t.slice(0,-1).join(`-`)}_${n}`:t.join(`-`)}function Me(e){return z(L(e,me)[0]??ke(e))}function Ne(e,t){let n=L(e,t);return n.length===0||n.length===1&&/^(?:DEFAULT|default)$/i.test(n[0])?`true`:R(n)}function Pe(e){return e.type===`typography`&&i(e.value)}function Fe(e){return e.category===`fontSize`||e.category===`fontWeight`||Ie(e)||Le(e)||Re(e)||ze(e)?!1:e.type===`fontFamily`||I(e.path,me)}function Ie(e){return e.category===`fontSize`||I(e.path,he)}function Le(e){return e.category===`fontWeight`||e.type===`fontWeight`||I(e.path,ge)}function Re(e){return I(e.path,_e)}function ze(e){return I(e.path,ve)}function Be(e,t){if(!e.has(t))return t;let n=2,r=`${t}${n}`;for(;e.has(r);)n++,r=`${t}${n}`;return r}function Ve(e){let t=new Map;for(let n of Object.values(e)){let e=Ae(n);t.has(e)&&(e=Be(t,R([n.name]))),t.set(e,n)}return t}function He(e,t,n){if(!e)return;let r=Object.values(e);if(r.length===0)return;if(n){let e=n.split(`.`).filter(Boolean).at(-1);if(e){let t=r.find(t=>t.role===e||t.name.toLowerCase()===e.toLowerCase());if(t)return t}}if(!t)return;let i=N(t).toLowerCase();return r.find(e=>f(e).toLowerCase()===i||e.title.toLowerCase()===i||e.name.toLowerCase()===i)}function Ue(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: ${m(t.normal)}`),t.italic&&n.push(`italic: ${m(t.italic)}`),` ${e}: { ${n.join(`, `)} }`}).join(`,
|
|
3
|
+
`)}\n }`}function B(e,t){return{...e,webFamily:d(t),nativeFamily:f(t),face:t.source===`local`?Ue(t):e.face}}function V(e){return{key:e,webFamily:`system-ui, sans-serif`,nativeFamily:`system-ui`,size:{},lineHeight:{},weight:{},letterSpacing:{}}}function We(e,t){return{...e,webFamily:t,nativeFamily:N(t)}}const Ge=/^(?:font-size|fontSize|font-weight|fontWeight|line-height|lineHeight|leading|letter-spacing|letterSpacing|tracking)$/i;function H(e,t){let n={true:e},r=A(t);if(!r)return n;let i=Ne(r,Ge);return i&&i!==`true`&&(n[i]=e),n}function Ke(e){return Object.keys(e.size).length>0?e:{...e,size:{...Te}}}function qe(e,t,n,r){if(!i(t.value))return e;let a=M(t.value,be),o=A(a),s=P(j(a,n)),c=He(r,s,o),l=e;c?l=B(l,c):s&&(l=We(l,s));let u=M(t.value,xe),d=F(j(u,n));d!=null&&(l={...l,size:H(d,u)});let f=M(t.value,Se),p=De(j(f,n));p&&(l={...l,weight:H(p,f)});let m=M(t.value,we),h=F(j(m,n));h!=null&&(l={...l,letterSpacing:H(h,m)});let g=M(t.value,Ce),_=Oe(j(g,n),l.size.true??d);return _!=null&&(l={...l,lineHeight:H(_,g)}),Je(l)}function Je(e){let t=Object.keys(e.size);if(t.length===0)return e;let n=e=>{let n=e.true??Object.values(e)[0];if(n==null)return e;let r={...e};for(let e of t)r[e]??=n;return r};return{...e,lineHeight:Object.keys(e.lineHeight).length>0?n(e.lineHeight):e.lineHeight,weight:Object.keys(e.weight).length>0?n(e.weight):e.weight,letterSpacing:Object.keys(e.letterSpacing).length>0?n(e.letterSpacing):e.letterSpacing}}function Ye(e,t){let n=new Map(e.map(e=>[e.path,e])),r=new Map,i=e=>{r.set(e.key,e)};if(t)for(let[e,n]of Ve(t))i(B(V(e),n));for(let a of e){if(!Fe(a)||Pe(a))continue;let e=Me(a.path),o=P(j(a.value,n)),s=r.get(e)??V(e),c=He(t,o,a.path),l=s;c?l=B(l,c):(o&&s.webFamily===V(e).webFamily||o&&!r.has(e))&&(l=We(l,o)),i(l)}for(let a of e){if(!Pe(a))continue;let e=je(a.path);i(qe(r.get(e)??V(e),a,n,t))}return[...r.values()].map(Ke).toSorted((e,t)=>e.key.localeCompare(t.key))}function Xe(e){return/^\d+$/.test(e)||/^[A-Z_$][\w$]*$/i.test(e)?e:m(e)}function U(e,t=4){let n=` `.repeat(t),r=` `.repeat(Math.max(t-2,0)),i=Object.entries(e).toSorted(([e],[t])=>e.localeCompare(t,void 0,{numeric:!0}));return i.length===0?`{}`:`{\n${i.map(([e,t])=>`${n}${Xe(e)}: ${m(t)}`).join(`,
|
|
4
|
+
`)}\n${r}}`}function Ze(e,t){let n=`${e.split(`-`).filter(Boolean).map((e,t)=>t===0?e:`${e.charAt(0).toUpperCase()}${e.slice(1)}`).join(``).replaceAll(/[^\w$]/g,``)||`font${t}`}Font`;return/^[A-Z_$]/i.test(n)?n:`font${t}`}function Qe(e,t){let n=m(e.webFamily),r=m(e.nativeFamily),i=[n===r?` family: ${n}`:` family: isWeb ? ${n} : ${r}`,` size: ${U(e.size)}`];return Object.keys(e.lineHeight).length>0&&i.push(` lineHeight: ${U(e.lineHeight)}`),Object.keys(e.weight).length>0&&i.push(` weight: ${U(e.weight)}`),Object.keys(e.letterSpacing).length>0&&i.push(` letterSpacing: ${U(e.letterSpacing)}`),e.face&&i.push(` face: ${e.face}`),`const ${t} = createFont({\n${i.join(`,
|
|
5
|
+
`)}\n});`}function $e(e){return`# Installing Tamagui Config
|
|
6
6
|
|
|
7
7
|
Generated by \`@razorwind/tamagui\`.
|
|
8
8
|
|
|
9
9
|
## Files
|
|
10
10
|
|
|
11
|
-
- \`${e.outputPath}\` — Tamagui
|
|
11
|
+
- \`${e.outputPath}\` — Tamagui config (\`createTamagui\` + \`createTheme\` with light, dark, and nested semantic themes)
|
|
12
12
|
|
|
13
13
|
## Setup
|
|
14
14
|
|
|
@@ -48,81 +48,42 @@ export function App() {
|
|
|
48
48
|
## Regenerate
|
|
49
49
|
|
|
50
50
|
Re-run Razorwind generate when tokens change so \`${e.outputPath}\` stays aligned with your design system.
|
|
51
|
-
`}const
|
|
52
|
-
`)}\n${` `.repeat(Math.max(t-2,0))}}`}function
|
|
53
|
-
`)}\n${` `.repeat(Math.max(t-2,0))}}`}function Ct(e,t=
|
|
54
|
-
`)}\n${r}}`}const wt=/^\{([^{}]+)\}$/,Tt=/\{([^{}]+)\}/g,Et=/^var\((--[^),\s]+)(?:\s*,[^)]*)?\)$/,Dt=/var\((--[^),\s]+)(?:\s*,[^)]*)?\)/g;function G(e){return{byPath:new Map(e.map(e=>[e.path,e])),byCssVar:new Map(e.map(e=>[s(e.path),e]))}}function Ot(e){if(typeof e==`string`)return wt.exec(e.trim())?.[1]?.trim()}function kt(e){if(typeof e==`string`)return Et.exec(e.trim())?.[1]}function At(e){return Ot(e)!=null||kt(e)!=null}function jt(e){return/var\(|\{[^{}]+\}/.test(e)}function K(e,t){let n=q(e,t.byPath,t.byCssVar);if(n.category!=null&&n.category!==`color`)return;let r=[n.cssValue,n.tamaguiValue];for(let e of r)if(typeof e==`string`&&e.length>0&&!At(e))return e}function Mt(e,t){return e.replace(Tt,(e,n)=>{let r=t.byPath.get(n.trim());return r?K(r,t)??e:e}).replace(Dt,(e,n)=>{let r=t.byCssVar.get(n);return r?K(r,t)??e:e})}function q(e,t,n){let r=e,i=new Set;for(let e=0;e<8;e++){if(i.has(r.path))return r;i.add(r.path);let e=Ot(r.value);if(e){let n=t.get(e);if(!n||n.path===r.path)return r;r=n;continue}let a=kt(r.value)??kt(r.cssValue)??kt(r.tamaguiValue);if(a){let e=n.get(a);if(!e||e.path===r.path)return r;r=e;continue}return r}return r}function Nt(e){return/^[A-Z_$][\w$]*$/i.test(e)?`theme.${e}`:`theme[${m(e)}]`}function Pt(e,t){return t<1?e:t+1-e}function Ft(e,t){return e.length<2?!1:X(e,t).some((t,n)=>t!==e[n])}function It(e,t,n,r){let i=n[t];if(!i||r!==`dark`)return e;let a=$(i,t);return a.length<2||!Ft(a.map(([,e])=>e),r)?e:Pt(e,a[a.length-1][0])}function Lt(e,t,n,r){let i=J(e);if(!i)return;let a=It(i.step,i.name,n,r);if(t&&i.name.toLowerCase()===t.toLowerCase()||n[i.name])return`${i.name}${a}`}function Rt(e){if(e>=1&&e<=12)return e;if(e>=100&&e<=900&&e%100==0)return e/100}function J(e){let t=e.path.split(`.`).filter(Boolean),n=t.at(-1);if(n&&/^\d+$/.test(n)){let e=Rt(Number(n)),r=t.at(-2);if(e!=null&&r&&!/^(?:color|colours?|palette)$/i.test(r))return{name:D([r]),step:e}}if(!e.tokenKey)return;let r=/^([A-Z]+)(\d{1,3})$/i.exec(e.tokenKey);if(!r)return;let[,i=``,a=``]=r,o=Rt(Number(a));if(o!=null)return{name:i,step:o}}function zt(e,t,n,r){let i=e[t]??{};i[`${t}${n}`]=r,e[t]=i}function Bt(e){let t={};for(let n of e){if(typeof n.tamaguiValue!=`string`)continue;let e=J(n);e&&zt(t,e.name,e.step,n.tamaguiValue)}return Object.fromEntries(Object.entries(t).filter(([,e])=>Object.keys(e).length>=3))}function Y(e){let t={};for(let n of e){if(!n.primitive||typeof n.tamaguiValue!=`string`)continue;let e=J(n);e&&zt(t,e.name,e.step,n.tamaguiValue)}let n=Object.fromEntries(Object.entries(t).filter(([,e])=>Object.keys(e).length>=2));return Object.keys(n).length>0?n:Bt(e)}function X(e,t){if(e.length<2)return[...e];let n=Wt(e[0]),r=Wt(e[e.length-1]);if(n==null||r==null||n===r)return[...e];let i=n>r;return t===`light`?i?[...e]:e.toReversed():i?e.toReversed():[...e]}function Z(e){return e<=.04045?e/12.92:((e+.055)/1.055)**2.4}function Vt(e){let t=e.startsWith(`#`)?e.slice(1):``;if((t.length===3||t.length===4)&&(t=[...t].map(e=>e+e).join(``)),t.length===8&&(t=t.slice(0,6)),t.length!==6||/[^0-9a-f]/i.test(t))return;let 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;return .2126*Z(n)+.7152*Z(r)+.0722*Z(i)}function Q(e){let t=e.trim();if(t.endsWith(`%`)){let e=Number.parseFloat(t);return Number.isFinite(e)?e/100:void 0}let n=Number.parseFloat(t);return Number.isFinite(n)?n:void 0}function Ht(e){return e>1?e/100:e}function Ut(e,t){let n=RegExp(`^${t}\\((.+)\\)$`,`i`).exec(e.trim());if(n?.[1])return n[1].split(/[\s,/]+/).filter(Boolean)}function Wt(e){let t=e.trim();if(!t||t.startsWith(`var(`)||t.includes(`{`))return;let n=Vt(t);if(n!=null)return n;let r=Ut(t,`oklch`);if(r?.[0]){let e=Q(r[0]);return e==null?void 0:Ht(e)}let i=Ut(t,`hsla?`);if(i?.[2]){let e=Q(i[2]);return e==null?void 0:Ht(e)}let a=Ut(t,`rgba?`);if(a?.[0]&&a[1]&&a[2]){let e=Q(a[0]),t=Q(a[1]),n=Q(a[2]);if(e==null||t==null||n==null)return;let r=(e,t)=>t.trim().endsWith(`%`)||e<=1?e:e/255;return .2126*Z(r(e,a[0]))+.7152*Z(r(t,a[1]))+.0722*Z(r(n,a[2]))}}function $(e,t){let n=[],r=t.toLowerCase();for(let[i,a]of Object.entries(e)){if(!i.toLowerCase().startsWith(r))continue;let e=i.slice(t.length);/^\d+$/.test(e)&&n.push([Number(e),a])}return n.sort(([e],[t])=>e-t),n}function Gt(e,t,n){let r=$(e,t);if(r.length===0)return e;let i=X(r.map(([,e])=>e),n),a={};for(let[e,[n]]of r.entries())a[`${t}${n}`]=i[e]??r[e][1];return a}function Kt(e,t,n){let r=t[n];return e.find(([,e])=>e===r)?.[0]??e[n]?.[0]??n+1}function qt(e,t,n,r){let i=$(e,n);if(i.length===0)return{};let a=X(i.map(([,e])=>e),r),o={};for(let[e,[r]]of i.entries()){let s=t[`${n}${Kt(i,a,e)}`];s&&(o[`${n}${r}`]=H(s))}return o}function Jt(e,t,n,r){let i=$(e,n);if(i.length<2)return;let a=X(i.map(([,e])=>e),r),o=[];for(let[e]of i.entries()){let r=t[`${n}${Kt(i,a,e)}`];if(!r)return;o.push(H(r))}let s=[...o],c=s.at(-1);if(c!=null){for(;s.length<12;)s.push(c);return`[${s.join(`,`)}]`}}function Yt(e,t){return $(e,t).length>=2}function Xt(e){if(e.length>=12)return e.slice(0,12);let t=[...e],n=t.at(-1);if(n==null)return t;for(;t.length<12;)t.push(n);return t}function Zt(e,t,n){let r=$(e,t);if(!(r.length<2))return Xt(X(r.map(([,e])=>e),n))}function Qt(e){let t=new Map;for(let n of e){let e=n.childTheme?.trim();if(!e)continue;let r=e.toLowerCase();lt(r)||ut(r)||t.has(r)||t.set(r,D([e]))}return[...t.values()].toSorted((e,t)=>e.localeCompare(t))}function $t(e,t){let n=t.toLowerCase(),r=e.split(/(?=[A-Z])/).filter(Boolean).filter(e=>e.toLowerCase()!==n);if(r.length!==0)return D(r)}function en(e){return e.toLowerCase()===`base`}function tn(e){return Qt(e).filter(e=>!en(e))}function nn(e){return`${e.charAt(0).toUpperCase()}${e.slice(1)}`}const rn=[{alias:`background`,source:e=>`background${e}`},{alias:`backgroundDisabled`,source:e=>`background${e}Disabled`},{alias:`backgroundHover`,source:e=>`background${e}Hover`},{alias:`backgroundSubtle`,source:e=>e===`Primary`?`backgroundSecondary`:`background${e}Subtle`},{alias:`border`,source:e=>`border${e}`},{alias:`borderDisabled`,source:e=>`border${e}Disabled`},{alias:`borderHover`,source:e=>`border${e}Hover`},{alias:`borderSubtle`,source:e=>e===`Primary`?`borderSecondary`:`border${e}Subtle`},{alias:`foreground`,source:e=>`foreground${e}`},{alias:`foregroundDisabled`,source:e=>`foreground${e}Disabled`},{alias:`foregroundHover`,source:e=>`foreground${e}Hover`},{alias:`foregroundOn`,source:e=>`foregroundOn${e}`},{alias:`foregroundOnDisabled`,source:e=>`foregroundOn${e}Disabled`},{alias:`foregroundOnHover`,source:e=>`foregroundOn${e}Hover`}];function an(e,t,n){let r=new Set([...Object.keys(e),...Object.keys(t)]),i=[`Primary`,...n.map(nn)],a=[];for(let{alias:e,source:t}of rn)i.some(e=>r.has(t(e)))&&a.push(e);return a}function on(e){let t={};for(let[n,r]of Object.entries(e)){if(en(n))continue;let e=Object.values(r);if(e.length===0)continue;let i={};for(let[t,r]of e.entries())i[`${n}${t+1}`]=r;Object.keys(i).length===1&&(i[`${n}2`]=e[0]),t[n]=i}return t}function sn(e){let t=e.split(/(?=[A-Z])/).filter(Boolean),n=t.at(-1)?.toLowerCase();if((n===`primary`||n===`secondary`||n===`tertiary`)&&!(t.length<2))return{role:D(t.slice(0,-1)),rank:n}}function cn(e){return e.category===`color`&&!e.primitive&&!!e.tokenKey}function ln(e,t,n){let r=new Map,i={};for(let a of e){if(!cn(a)||!a.tokenKey)continue;let e=a.childTheme?.toLowerCase();if(e&&e!==`base`)continue;let o=xt(a,t,n);if(!o)continue;let s=sn(a.tokenKey);if(s){let e=r.get(s.role)??{};e[s.rank]=o,r.set(s.role,e);continue}if(e===`base`){let e=$t(a.tokenKey,`base`);e&&(i[e]=o)}}let a={...i};for(let[e,t]of r){t.primary&&(a[e]=t.primary);let n=t.secondary??t.tertiary;n&&(a[`${e}Subtle`]=n)}return a}function un(e,t){let n=G(e),r={};for(let i of Qt(e)){if(en(i)){let a=ln(e,n,t);Object.keys(a).length>0&&(r[i]=a);continue}let a={},o=i.toLowerCase();for(let r of e){if(!cn(r)||r.childTheme?.toLowerCase()!==o)continue;let e=$t(r.tokenKey,i);if(!e)continue;let s=xt(r,n,t);s&&(a[e]=s)}Object.keys(a).length>0&&(r[i]=a)}return r}function dn(e,t){let n=new Map(Object.entries(e).map(([e,t])=>[e.toLowerCase(),{name:e,scale:t}]));for(let e of st){let r=n.get(e);if(!r)continue;let i=Zt(r.scale,r.name,t);if(i)return{name:r.name,palette:i}}}function fn(e){let t=e.filter(e=>e.category===`color`||e.primitive),n=Y(B(t,`light`)),r=Y(B(t,`dark`)),i=dn(n,`light`),a=dn(r,`dark`);return{lightPalette:i?.palette,darkPalette:a?.palette,lightBaseName:i?.name,darkBaseName:a?.name}}function pn(e,t,n){let r=Y(e),{byPath:i,byCssVar:a}=G(e),o={};for(let s of e){if(s.category!==`color`||!s.tokenKey||s.primitive||/^[A-Z]+\d{1,3}$/i.test(s.tokenKey)&&r[s.tokenKey.replace(/\d{1,3}$/,``)])continue;let e=q(s,i,a),c=Lt(e,t,r,n);if(c){o[s.tokenKey]=Nt(c);continue}let l=e.tamaguiValue;At(l)||At(e.cssValue)||(typeof l==`string`||typeof l==`number`)&&(o[s.tokenKey]=m(l))}return o}function mn(e){return e.replaceAll(`\\`,`\\\\`).replaceAll("`","\\`").replaceAll("${","\\${")}function hn(e,t,n,r,i){let a=q(e,t.byPath,t.byCssVar),o=Lt(a,n,r,i);if(o)return{kind:`theme`,property:o};let s=K(a,t);if(s)return{kind:`text`,value:s}}function gn(e,t,n,r,i){let a=[],o=/\{([^{}]+)\}|var\((--[^),\s]+)(?:\s*,[^)]*)?\)/g,s=0;for(let c of e.matchAll(o)){let o=c.index??0;o>s&&a.push({kind:`text`,value:e.slice(s,o)});let l=c[1]?t.byPath.get(c[1].trim()):c[2]?t.byCssVar.get(c[2]):void 0;if(!l)return;let u=hn(l,t,n,r,i);if(!u)return;a.push(u),s=o+c[0].length}return s<e.length&&a.push({kind:`text`,value:e.slice(s)}),a}function _n(e){return e.some(e=>e.kind===`theme`)?`\`${e.map(e=>e.kind===`theme`?`\${${Nt(e.property)}}`:mn(e.value)).join(``)}\``:m(e.map(e=>e.kind===`text`?e.value:``).join(``))}function vn(e,t,n){let r=G(e),i=Y(e.filter(e=>e.category===`color`)),a={};for(let o of e){if(!dt(o)||!o.tokenKey)continue;let e=typeof o.tamaguiValue==`string`?o.tamaguiValue:o.cssValue;if(typeof e!=`string`||e.length===0)continue;let s=gn(e,r,t,i,n);s&&(a[o.tokenKey]=_n(s))}return a}function yn(e,t,n,r,i){let a=new Set([...Object.keys(e),...Object.keys(t)]);if(a.size===0)return;let o=[];for(let s of[...a].toSorted((e,t)=>e.localeCompare(t))){let a=e[s]??t[s]??{},c=t[s]??e[s]??{};if(Object.keys(a).length===0||Object.keys(c).length===0)continue;let l=Yt(a,s)||Yt(c,s),u,d;if(i&&l?(u=qt(a,n[s]??r[s]??{},s,`light`),d=qt(c,r[s]??n[s]??{},s,`dark`),Object.keys(u).length===0&&(u=a),Object.keys(d).length===0&&(d=c)):l?(u=Gt(a,s,`light`),d=Gt(c,s,`dark`)):(u=a,d=c),Object.keys(u).length===0||Object.keys(d).length===0)continue;let f=l&&!i?(e,t)=>W(e,t):St;o.push(` ${s}: {
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
assign("backgroundSubtle", role === "Primary" ? "backgroundSecondary" : \`background\${role}Subtle\`);
|
|
78
|
-
assign("border", \`border\${role}\`);
|
|
79
|
-
assign("borderDisabled", \`border\${role}Disabled\`);
|
|
80
|
-
assign("borderHover", \`border\${role}Hover\`);
|
|
81
|
-
assign("borderSubtle", role === "Primary" ? "borderSecondary" : \`border\${role}Subtle\`);
|
|
82
|
-
assign("foreground", \`foreground\${role}\`);
|
|
83
|
-
assign("foregroundDisabled", \`foreground\${role}Disabled\`);
|
|
84
|
-
assign("foregroundHover", \`foreground\${role}Hover\`);
|
|
85
|
-
assign("foregroundOn", \`foregroundOn\${role}\`);
|
|
86
|
-
assign("foregroundOnDisabled", \`foregroundOn\${role}Disabled\`);
|
|
87
|
-
assign("foregroundOnHover", \`foregroundOn\${role}Hover\`);
|
|
88
|
-
return {
|
|
89
|
-
...values,
|
|
90
|
-
...overlay
|
|
91
|
-
};
|
|
92
|
-
}`}function En(e){return` ${/^[A-Z_$][\w$]*$/i.test(e)?e:m(e)}: string;`}function Dn(e,t){if(e.length!==0)return[`/**`,` * Theme values available on \`useTheme()\` and \`$\` style props for the ${t.specName||`design system`}.`,` *`," * Derived from design tokens mapped by `createV5Theme` and `getTheme`.",` *`,` * @see https://tamagui.dev/docs/guides/theme-builder#gettheme`,` */`,`export interface AppTheme {`,...e.map(En),`}`,``]}function On(e,t,n={}){let r=e.fonts??{},i=n.useDefaultConfig===!0,a=n.animations??`css`,o=n.includeTypeAugmentation!==!1,s=t.filter(e=>e.category===`color`),c=B(s,`light`),l=B(s,`dark`),u=l.length>0?l:c,d=yt(c,l),f=Object.keys(d).length>0,p=bt(c),h=bt(u),g=Y(c),_=Y(u),ee=tn([...c,...u]),te={...on(un(c,d)),...g},v={...on(un(u,d)),..._},{lightPalette:y,darkPalette:b,lightBaseName:x,darkBaseName:S}=fn(t),ne=yn(te,v,p,h,f),re=f&&x?Jt(g[x]??{},p[x]??{},x,`light`):void 0,ie=f&&S?Jt(_[S]??{},h[S]??{},S,`dark`):void 0,ae=B(t,`light`),oe=B(t,`dark`),se=l.length>0?oe:ae,ce=l.length>0?S:x,C={...pn(c,x,`light`),...vn(ae,x,`light`)},w={...pn(l.length>0?l:c,ce,`dark`),...vn(se,ce,`dark`)},le=Dn(Cn({lightSemantic:C,darkSemantic:w,lightScales:te,darkScales:v,lightPalette:y,darkPalette:b,semanticRoles:ee}),{specName:e.name}),ue=vt(ae),T=[];Object.keys(d).length>0&&T.push(` color: ${W(d,4)}`);for(let e of pt){let t=ue[e];t&&Object.keys(t).length>0&&T.push(` ${e}: ${W(t,4)}`)}let E=[];re?E.push(` lightPalette: ${re}`):y&&E.push(` lightPalette: ${m(y)}`),ie?E.push(` darkPalette: ${ie}`):b&&E.push(` darkPalette: ${m(b)}`),ne&&E.push(` childrenThemes: ${ne}`),(Object.keys(C).length>0||Object.keys(w).length>0)&&E.push(Tn(C,w));let D=[`import { isWeb } from '@tamagui/constants';`];i?D.push(`import { createV5Theme, defaultConfig, type CreateV5ThemeOptions } from "@tamagui/config/v5";`):D.push(`import { createV5Theme, type CreateV5ThemeOptions } from "@tamagui/config/v5";`),a!==!1&&D.push(`import { animations } from "${ct[a]}";`),n.importConfig&&D.push(`import userConfig from "${n.importConfig}";`);let O=[`createTamagui`,`px`];T.length>0&&O.push(`createTokens`);let k=$e(t,r);k.length>0&&O.push(`createFont`),D.push(`import { ${O.join(`, `)} } from "@tamagui/core";`);let A=[`/* eslint-disable */`,``,`/*`,` * Generated by @razorwind/tamagui — Do not edit by hand.`,` * `,` * @see https://tamagui.dev/docs/core/config-v5`,` */`,``,...D,``];T.length>0&&A.push(`const tokens = createTokens({`,T.join(`,
|
|
93
|
-
`),`});`,``);let de=E.length>0?`createV5Theme({\n${E.join(`,
|
|
94
|
-
`)}\n})`:`createV5Theme()`;(Object.keys(C).length>0||Object.keys(w).length>0)&&A.push(wn(ee),``),A.push(`const themes = ${de};`,``);let j=new Map;if(k.length>0)for(let[e,t]of k.entries()){let n=tt(t.key,e);j.set(t.key,n),A.push(nt(t,n),``)}let M=[];if(i&&M.push(` ...defaultConfig`),a!==!1&&M.push(` animations`),T.length>0&&(i?M.push(` tokens: {
|
|
95
|
-
...defaultConfig.tokens,
|
|
96
|
-
...tokens,
|
|
97
|
-
space: {
|
|
98
|
-
...defaultConfig.tokens.space,
|
|
99
|
-
...tokens.space
|
|
100
|
-
},
|
|
101
|
-
size: {
|
|
102
|
-
...defaultConfig.tokens.size,
|
|
103
|
-
...tokens.size
|
|
104
|
-
},
|
|
105
|
-
radius: {
|
|
106
|
-
...defaultConfig.tokens.radius,
|
|
107
|
-
...tokens.radius
|
|
108
|
-
},
|
|
109
|
-
zIndex: {
|
|
110
|
-
...defaultConfig.tokens.zIndex,
|
|
111
|
-
...tokens.zIndex
|
|
112
|
-
}
|
|
113
|
-
}`):M.push(` tokens`)),M.push(` themes`),j.size>0){let e=[...j.entries()].map(([e,t])=>` ${/^[A-Z_$][\w$]*$/i.test(e)?e:m(e)}: ${t}`);i?M.push(` fonts: {
|
|
114
|
-
...defaultConfig.fonts,
|
|
115
|
-
${e.join(`,
|
|
51
|
+
`}const et=new Set([`default`,`light`,`theme`]),tt=/^base(?:[A-Z]\w*|[._-].+)?$/i,nt=/^ring(?:\.|$)/i,rt={css:`@tamagui/config/v5-css`,rn:`@tamagui/config/v5-rn`,reanimated:`@tamagui/config/v5-reanimated`,motion:`@tamagui/config/v5-motion`};function it(e){return et.has(e)}function at(e){return e===`dark`}function W(e,t){let n=new Map,r=t===`dark`?at:it;for(let t of e){let e=t.theme?.toLowerCase();(!e||tt.test(e))&&n.set(t.path,t)}for(let t of e){let e=t.theme?.toLowerCase();e&&r(e)&&n.set(t.path,t)}return[...n.values()]}function ot(e){return nt.test(e.path)&&e.category===`shadow`}const st=new Set([`shadow`,`insetShadow`,`dropShadow`,`textShadow`,`boxShadow`]);function ct(e){return!e.primitive&&!!e.tokenKey&&(e.type===`shadow`||e.category!=null&&st.has(e.category))}const lt=new Set([`fontSize`,`blur`]),ut=[`space`,`size`,`radius`,`zIndex`,`blur`,`fontSize`,`shadow`,`insetShadow`,`dropShadow`,`textShadow`,`boxShadow`,`fontWeight`];function dt(e){return/^px\(-?\d/.test(e)}function ft(e){if(e.category===`radius`&&e.tokenKey?.startsWith(`borderRadius`)){let t=e.tokenKey.replace(/^borderRadius/,``);return t?k([t]):e.tokenKey}return e.tokenKey??``}function pt(e,t){let n=Q(e,t.byPath,t.byCssVar).tamaguiValue;if(e.category&<.has(e.category)&&typeof n==`number`)return`px(${n})`;if(typeof n==`string`){let r=Et(n,t);return e.category===`dropShadow`?mt(r):r}return n}function mt(e){return e.includes(`drop-shadow(`)?e:e.split(`,`).map(e=>e.trim()).filter(Boolean).map(e=>{let t=e.replace(/^inset\s+/i,``).split(/\s+/);if(t.length>=5){let[e,n,r]=t;return`drop-shadow(${e} ${n} ${r} ${t.slice(4).join(` `)})`}return`drop-shadow(${e.replace(/^inset\s+/i,``)})`}).join(` `)}function ht(e){let t={},n=Y(e);for(let r of e){if(!r.category||r.category===`color`||!r.tokenKey||ot(r))continue;let e=ft(r);if(!e)continue;let i=pt(r,n);if(typeof i==`string`&&Tt(i))continue;let a=t[r.category]??{};a[e]=i,t[r.category]=a}return t}function G(e){let t=e.path.replace(/^color\./i,``).replaceAll(`.`,``);return e.theme?`${e.theme}${t[0]?.toUpperCase()??``}${t.slice(1)}`:t}function K(e){return`tokens.color.${e}.val`}function gt(e,t){let n={},r=(e,t)=>{let r=t.cssValue;typeof r!=`string`||r.length===0||wt(r)||r===`[object Object]`||(n[e]=r)};for(let t of e)t.tokenKey&&(t.primitive?r(G(t),t):r(t.tokenKey,t));for(let e of t)!e.tokenKey||!e.primitive||r(G(e),e);return n}function q(e,t,n,r){let i=n[r];if(typeof i!=`string`)return!1;let a=Z(e,t);return a!=null&&a===i}function _t(e,t,n){if(e.tokenKey&&q(e,t,n,e.tokenKey))return K(e.tokenKey);let r=Q(e,t.byPath,t.byCssVar);if(r.tokenKey&&q(e,t,n,r.tokenKey))return K(r.tokenKey);if(r.primitive){let i=G(r);if(q(e,t,n,i))return K(i)}let i=Z(e,t);if(i)return m(i)}function J(e,t=2){let n=` `.repeat(t),r=Object.entries(e).toSorted(([e],[t])=>e.localeCompare(t,void 0,{numeric:!0}));return r.length===0?`{}`:`{\n${r.map(([e,t])=>{let r=typeof t==`string`&&dt(t)?t:m(t);return`${n}${/^[A-Z_$][\w$]*$/i.test(e)?e:m(e)}: ${r}`}).join(`,
|
|
52
|
+
`)}\n${` `.repeat(Math.max(t-2,0))}}`}function vt(e,t=2){let n=` `.repeat(t),r=Object.entries(e).toSorted(([e],[t])=>e.localeCompare(t,void 0,{numeric:!0}));return r.length===0?`{}`:`{\n${r.map(([e,t])=>`${n}${/^[A-Z_$][\w$]*$/i.test(e)?e:m(e)}: ${t}`).join(`,
|
|
53
|
+
`)}\n${` `.repeat(Math.max(t-2,0))}}`}const yt=/^\{([^{}]+)\}$/,bt=/\{([^{}]+)\}/g,xt=/^var\((--[^),\s]+)(?:\s*,[^)]*)?\)$/,St=/var\((--[^),\s]+)(?:\s*,[^)]*)?\)/g;function Y(e){return{byPath:new Map(e.map(e=>[e.path,e])),byCssVar:new Map(e.map(e=>[s(e.path),e]))}}function Ct(e){if(typeof e==`string`)return yt.exec(e.trim())?.[1]?.trim()}function X(e){if(typeof e==`string`)return xt.exec(e.trim())?.[1]}function wt(e){return Ct(e)!=null||X(e)!=null}function Tt(e){return/var\(|\{[^{}]+\}/.test(e)}function Z(e,t){let n=Q(e,t.byPath,t.byCssVar);if(n.category!=null&&n.category!==`color`)return;let r=[n.cssValue,n.tamaguiValue];for(let e of r)if(typeof e==`string`&&e.length>0&&!wt(e))return e}function Et(e,t){return e.replace(bt,(e,n)=>{let r=t.byPath.get(n.trim());return r?Z(r,t)??e:e}).replace(St,(e,n)=>{let r=t.byCssVar.get(n);return r?Z(r,t)??e:e})}function Q(e,t,n){let r=e,i=new Set;for(let e=0;e<8;e++){if(i.has(r.path))return r;i.add(r.path);let e=Ct(r.value);if(e){let n=t.get(e);if(!n||n.path===r.path)return r;r=n;continue}let a=X(r.value)??X(r.cssValue)??X(r.tamaguiValue);if(a){let e=n.get(a);if(!e||e.path===r.path)return r;r=e;continue}return r}return r}function Dt(e,t){let n=t.toLowerCase(),r=e.split(/(?=[A-Z])/).filter(Boolean).filter(e=>e.toLowerCase()!==n);if(r.length!==0)return k(r)}function Ot(e){return e.category===`color`&&!e.primitive&&!!e.tokenKey}function kt(e){return ct(e)&&k(e.path.split(`.`).filter(Boolean))||e.tokenKey}function At(e){let t=e.toLowerCase();return it(t)||at(t)}function jt(e,t,n){let r=kt(t);if(!r)return;let i=t.childTheme?.trim();if(!i||At(i)){e.base[r]=n;return}let a=k([i]),o=Dt(r,a);if(!o)return;let s=e.children[a]??{};s[o]=n,e.children[a]=s}function Mt(e,t){let n=typeof e.tamaguiValue==`string`?e.tamaguiValue:e.cssValue;if(typeof n!=`string`||n.length===0)return;let r=Et(n,t);return r.length===0||Tt(r)?void 0:m(e.category===`dropShadow`?mt(r):r)}function Nt(e,t){let n=Y(e),r={base:{},children:{}};for(let i of e){if(Ot(i)){let e=_t(i,n,t);e&&jt(r,i,e);continue}if(!ct(i))continue;let e=Mt(i,n);if(!e)continue;let a=i.childTheme?.trim();(a&&!At(a)||ot(i))&&jt(r,i,e)}return r}function Pt(e){let t=new Set;for(let n of e){for(let e of Object.keys(n.base))t.add(e);for(let e of Object.values(n.children))for(let n of Object.keys(e))t.add(n)}return[...t].toSorted((e,t)=>e.localeCompare(t,void 0,{numeric:!0}))}function Ft(e){return` ${/^[A-Z_$][\w$]*$/i.test(e)?e:m(e)}: string;`}function It(e,t){if(e.length!==0)return[`/**`,` * Theme values available on \`useTheme()\` and \`$\` style props for the ${t.specName||`design system`}.`,` *`," * Derived from semantic color tokens mapped by `createTheme`. Nested"," * themes (`light_primary`, `dark_danger`, …) come from each token's"," * `theme` / `$theme` property.",` *`,` * @see https://tamagui.dev/docs/intro/themes`,` */`,`export interface AppTheme {`,...e.map(Ft),`}`,``]}function Lt(e,t){return`${e}_${t}`}function Rt(e){return Object.keys(e).length>0}function zt(e,t){return`const ${e} = createTheme(${vt(t,2)});`}function Bt(e,t,n){let r=[],i=[],a=(e,t,n=!1)=>{if(!n&&!Rt(t))return;r.push(zt(e,t));let a=/^[A-Z_$][\w$]*$/i.test(e)?e:m(e);i.push(a===e?` ${e}`:` ${a}: ${e}`)},o=[...new Set([...Object.keys(e.children),...Object.keys(t.children)])].toSorted((e,t)=>e.localeCompare(t));a(`light`,e.base,o.length>0),n&&a(`dark`,t.base,o.length>0);for(let r of o){let i=e.children[r]??t.children[r]??{};if(a(Lt(`light`,r),i),n){let n=t.children[r]??e.children[r]??{};a(Lt(`dark`,r),n)}}return i.length===0?{statements:[],hasThemes:!1}:(r.push(``,`const themes = {\n${i.join(`,
|
|
54
|
+
`)}\n};`),{statements:r,hasThemes:!0})}function Vt(e,t,n={}){let r=e.fonts??{},i=n.useDefaultConfig===!0,a=n.animations??`css`,o=n.includeTypeAugmentation!==!1,s=t.filter(e=>e.category===`color`),c=W(s,`light`),l=W(s,`dark`),u=l.length>0,d=gt(c,l),f=W(t,`light`),p=u?W(t,`dark`):f,h=Nt(f,d),g=Nt(p,d),{statements:_,hasThemes:v}=Bt(h,g,u),y=It(Pt(u?[h,g]:[h]),{specName:e.name}),b=ht(f),x=[];Object.keys(d).length>0&&x.push(` color: ${J(d,4)}`);for(let e of ut){let t=b[e];t&&Object.keys(t).length>0&&x.push(` ${e}: ${J(t,4)}`)}let S=[`import { isWeb } from '@tamagui/constants';`];i&&S.push(`import { defaultConfig } from "@tamagui/config/v5";`),a!==!1&&S.push(`import { animations } from "${rt[a]}";`),n.importConfig&&S.push(`import userConfig from "${n.importConfig}";`);let C=[`createTamagui`,`px`];x.length>0&&C.push(`createTokens`),v&&C.push(`createTheme`);let w=Ye(t,r);w.length>0&&C.push(`createFont`),S.push(`import { ${C.join(`, `)} } from "@tamagui/core";`);let T=[`/* eslint-disable */`,``,`/*`,` * Generated by @razorwind/tamagui — Do not edit by hand.`,` * `,` * @see https://tamagui.dev/docs/core/configuration`,` * @see https://tamagui.dev/docs/intro/themes`,` */`,``,...S,``];x.length>0&&T.push(`const tokens = createTokens({`,x.join(`,
|
|
55
|
+
`),`});`,``),_.length>0&&T.push(..._,``);let E=new Map;if(w.length>0)for(let[e,t]of w.entries()){let n=Ze(t.key,e);E.set(t.key,n),T.push(Qe(t,n),``)}let D=[];if(i&&D.push(` ...defaultConfig`),a!==!1&&D.push(` animations`),x.length>0&&(i?D.push(` tokens: {
|
|
56
|
+
...defaultConfig.tokens,
|
|
57
|
+
...tokens,
|
|
58
|
+
space: {
|
|
59
|
+
...defaultConfig.tokens.space,
|
|
60
|
+
...tokens.space
|
|
61
|
+
},
|
|
62
|
+
size: {
|
|
63
|
+
...defaultConfig.tokens.size,
|
|
64
|
+
...tokens.size
|
|
65
|
+
},
|
|
66
|
+
radius: {
|
|
67
|
+
...defaultConfig.tokens.radius,
|
|
68
|
+
...tokens.radius
|
|
69
|
+
},
|
|
70
|
+
zIndex: {
|
|
71
|
+
...defaultConfig.tokens.zIndex,
|
|
72
|
+
...tokens.zIndex
|
|
73
|
+
}
|
|
74
|
+
}`):D.push(` tokens`)),v&&D.push(` themes`),E.size>0){let e=[...E.entries()].map(([e,t])=>` ${/^[A-Z_$][\w$]*$/i.test(e)?e:m(e)}: ${t}`);i?D.push(` fonts: {
|
|
75
|
+
...defaultConfig.fonts,
|
|
76
|
+
${e.join(`,
|
|
116
77
|
`)}
|
|
117
|
-
|
|
118
|
-
${e.join(`,
|
|
78
|
+
}`):D.push(` fonts: {
|
|
79
|
+
${e.join(`,
|
|
119
80
|
`)}
|
|
120
|
-
|
|
121
|
-
* The Tamagui
|
|
81
|
+
}`)}return n.shorthands&&D.push(` shorthands: ${J(n.shorthands,4)}`),n.media&&D.push(` media: ${m(n.media)}`),n.defaultFont&&D.push(` defaultFont: ${m(n.defaultFont)}`),T.push(``,...y??[],`/**
|
|
82
|
+
* The Tamagui config for the ${e.name||`design system`}.
|
|
122
83
|
*
|
|
123
|
-
* @see https://tamagui.dev/docs/core/
|
|
84
|
+
* @see https://tamagui.dev/docs/core/configuration
|
|
124
85
|
*/
|
|
125
|
-
export const config = createTamagui({`,
|
|
126
|
-
`),n.importConfig?`, ...userConfig `:``,`});`,``,`export type AppConfig = typeof config;`,``),o&&
|
|
127
|
-
`)}function
|
|
86
|
+
export const config = createTamagui({`,D.join(`,
|
|
87
|
+
`),n.importConfig?`, ...userConfig `:``,`});`,``,`export type AppConfig = typeof config;`,``),o&&T.push(`declare module "@tamagui/core" {`,` // eslint-disable-next-line @typescript-eslint/no-empty-object-type`,` interface TamaguiCustomConfig extends AppConfig {}`,`}`,``),T.push(`export default config;`,``),T.join(`
|
|
88
|
+
`)}function $(e,n={}){let r=e.tokens&&Object.keys(e.tokens).length>0,i=e.fonts&&Object.keys(e.fonts).length>0;if(!r&&!i)return{};let a=r?de(e.tokens,n):[];if(a.length===0&&!i)return{};let o=n.outputPath??`tamagui.config.ts`,s=Vt(e,a,n),c=n.installGuide??$e({outputPath:o}),d=u(l(o),`INSTALL.md`);return{[o]:t(o,s,{name:`razorwind-tamagui`},!1,`typescript`),[d]:t(d,c,{name:`razorwind-tamagui`},!1,`markdown`)}}var Ht=e(e=>({name:`tamagui`,themeGeneration:`combined`,generate:async t=>$(t,e??{})}));export{Ye as collectTamaguiFonts,Ht as default,de as flattenTokens,Ze as fontVarName,n as formatTokenValue,$ as generateTamaguiConfig,D as isPaletteGroup,$e as renderInstallMd,Vt as renderTamaguiConfig,ce as resolveTokenCategory,a as resolveTokenSets,z as tamaguiFontKeyFromRole,k as toCamelCaseKey,o as toCssVar,h as toTamaguiValue,le as toTokenKey,je as typographyFontKey};
|
|
128
89
|
//# sourceMappingURL=index.mjs.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@razorwind/tamagui",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.55",
|
|
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.91",
|
|
87
87
|
"@power-plant/dtcg-schema": "^0.0.1",
|
|
88
|
-
"@razorwind/core": "^0.0.
|
|
88
|
+
"@razorwind/core": "^0.0.58",
|
|
89
89
|
"@stryke/type-checks": "^0.6.44",
|
|
90
90
|
"@stryke/helpers": "^0.10.51",
|
|
91
91
|
"@stryke/string-format": "^0.17.53"
|
|
@@ -106,5 +106,5 @@
|
|
|
106
106
|
"typescript": "^6.0.3"
|
|
107
107
|
},
|
|
108
108
|
"publishConfig": { "access": "public" },
|
|
109
|
-
"gitHead": "
|
|
109
|
+
"gitHead": "26304e8c6d927befb4b9ffdb28ae1cc7f88e45ca"
|
|
110
110
|
}
|