@razorwind/tamagui 0.0.41 → 0.0.42

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -1,8 +1,8 @@
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`]),ee=[{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 h(e){return`$value`in e||`value`in e||`$ref`in e||`ref`in e}function g(e){return e===!0||e===`true`||e===1}function _(e){return g(e.palette)||g(e.$palette)?!0:y(e)===`palette`}function te(e,t){return(e===`palette`||e===`$palette`)&&(typeof t==`boolean`||typeof t==`number`||typeof t==`string`)}function v(e){if(typeof e.$description==`string`)return e.$description;if(typeof e.description==`string`)return e.description}function y(e,t){return typeof e.$type==`string`?e.$type:typeof e.type==`string`?e.type:t}function b(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 x(e,t){for(let{prefix:t,category:n}of ee)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 S(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 C(e){let t=e.split(`.`).filter(Boolean),n=t[0];n&&/^(?:color|colours?|palette|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`:S(r)}function w(e,n,r,i,a,s){if(!(0,t.isObject)(e))return;let c=a||_(e),l=y(e,r);if(h(e)){let r=b(e),a=n.join(`.`),u=x(a,l)??(c||l===`palette`?`color`:void 0),d=(0,t.formatTokenValue)(r,l),f=u&&m.has(u)||l===`color`||l===`palette`||l===`shadow`?d:o(r,l);s.push({path:a,type:l===`palette`?`color`:l,value:r,cssValue:d,tamaguiValue:f,category:u,tokenKey:u?C(a):void 0,description:v(e),theme:i,palette:c||void 0});return}for(let[t,r]of Object.entries(e))t.startsWith(`$`)&&t!==`$palette`||te(t,r)||w(r,[...n,t],l,i,c,s)}function T(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;w(n.tokens,[],void 0,e,!1,i)}return r?i.filter(e=>!e.type||r.has(e.type)):i}const E=/^\{([^{}]+)\}$/,D=/^(?:typography|type|text)$/i,ne=/^(?:font|fonts|font-family|fontFamily)$/i,re=/^(?:font-size|fontSize)$/i,ie=/^(?:font-weight|fontWeight)$/i,ae=/^(?:line-height|lineHeight|leading)$/i,oe=/^(?:letter-spacing|letterSpacing|tracking)$/i,se=/^(?:[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,ce=[`fontFamily`,`font-family`,`family`],le=[`fontSize`,`font-size`,`size`],ue=[`fontWeight`,`font-weight`,`weight`],de=[`lineHeight`,`line-height`,`leading`],fe=[`letterSpacing`,`letter-spacing`,`tracking`],pe={1:12,2:14,3:16,4:18,5:20,6:24,7:28,8:32,9:40,10:48};function O(e){if(typeof e==`string`)return E.exec(e.trim())?.[1]?.trim()}function k(e,t){let n=O(e);if(!n)return e;let r=t.get(n),i=new Set([n]);for(let e=0;e<8&&r;e++){let e=O(r.value);if(!e||i.has(e))return r.value;i.add(e),r=t.get(e)}return r?.value??e}function A(e,t){for(let n of t)if(e[n]!==void 0&&e[n]!==null)return e[n]}function me(e){return(e.split(`,`)[0]?.trim()??e).replaceAll(/^["']|["']$/g,``)}function he(e){if(typeof e==`string`){let t=e.trim();return t.length===0||O(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 ge(e){return Number.isInteger(e)?e:Math.round(e*1e3)/1e3}function j(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 _e(e){if(typeof e==`number`&&Number.isFinite(e))return String(e);if(typeof e==`string`){let t=e.trim();if(t.length===0||O(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 ve(e,t){let n=j(e);if(n!=null)return ge(t!=null&&n>0&&n<=4?n*t:n)}function M(e,t){return t.test(e.split(`.`)[0]??``)}function ye(e){return e.split(`.`).filter(Boolean).at(-1)??e}function N(e,t){let n=e.split(`.`).filter(Boolean);return n[0]&&t.test(n[0])&&n.shift(),n}function P(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 F(e){switch(e.toLowerCase()){case`heading`:case`title`:case`display`:return`heading`;case`mono`:case`monospace`:case`caption`:case`code`:return`mono`;case`sans`:case`body`:case`serif`:return`body`;default:return P([e])}}function be(e){return e.role?F(e.role):F(e.name)}function xe(e){let t=N(e,D);if(t.length===0)return`body`;let n=t.at(-1);return n&&t.length>=2&&se.test(n)&&!n.includes(`_`)?`${P(t.slice(0,-1))}_${n}`:P(t)}function Se(e){return F(N(e,ne)[0]??ye(e))}function I(e,t){let n=N(e,t);return n.length===0||n.length===1&&/^(?:DEFAULT|default)$/i.test(n[0])?`true`:P(n)}function Ce(e){return e.type===`typography`&&(0,t.isObject)(e.value)}function we(e){return e.category===`fontSize`||e.category===`fontWeight`||Te(e)||Ee(e)||De(e)||Oe(e)?!1:e.type===`fontFamily`||M(e.path,ne)}function Te(e){return e.category===`fontSize`||M(e.path,re)}function Ee(e){return e.category===`fontWeight`||e.type===`fontWeight`||M(e.path,ie)}function De(e){return M(e.path,ae)}function Oe(e){return M(e.path,oe)}function ke(e){let t=new Map;for(let n of Object.values(e)){let e=be(n),r=t.get(e);(!r||n.role===e&&r.role!==e)&&t.set(e,n)}return t}function Ae(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=me(t).toLowerCase();return i.find(e=>(0,r.fontFamilyName)(e).toLowerCase()===a||e.title.toLowerCase()===a||e.name.toLowerCase()===a)}function je(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 L(e,t){return{...e,webFamily:(0,r.cssFontFamily)(t),nativeFamily:(0,r.fontFamilyName)(t),face:t.source===`local`?je(t):e.face}}function R(e){return{key:e,webFamily:`system-ui, sans-serif`,nativeFamily:`system-ui`,size:{},lineHeight:{},weight:{},letterSpacing:{}}}function Me(e,t){return{...e,webFamily:t,nativeFamily:me(t)}}function Ne(e,t){let n={},r=[],i={},a={};for(let o of e){if(Te(o)){let e=j(k(o.value,t));e!=null&&(n[I(o.path,re)]=e);continue}if(Ee(o)){let e=_e(k(o.value,t));e&&(i[I(o.path,ie)]=e);continue}if(Oe(o)){let e=j(k(o.value,t));e!=null&&(a[I(o.path,oe)]=e);continue}De(o)&&r.push({key:I(o.path,ae),value:k(o.value,t)})}let o=n.true??n.base??Object.values(n)[0],s={};for(let e of r){let t=n[e.key]??o,r=ve(e.value,t);r!=null&&(s[e.key]=r)}return{size:n,lineHeight:s,weight:i,letterSpacing:a}}function z(e,t){return{...t,...e}}function B(e,t){return{...e,size:z(e.size,t.size),lineHeight:z(e.lineHeight,t.lineHeight),weight:z(e.weight,t.weight),letterSpacing:z(e.letterSpacing,t.letterSpacing)}}function Pe(e){return Object.keys(e.size).length>0?e:{...e,size:{...pe}}}function Fe(e,n,r,i){if(!(0,t.isObject)(n.value))return e;let a=A(n.value,ce),o=O(a),s=he(k(a,r)),c=Ae(i,s,o),l=e;c?l=L(l,c):s&&(l=Me(l,s));let u=j(k(A(n.value,le),r));u!=null&&(l={...l,size:{...l.size,true:u}});let d=_e(k(A(n.value,ue),r));d&&(l={...l,weight:{...l.weight,true:d}});let f=j(k(A(n.value,fe),r));f!=null&&(l={...l,letterSpacing:{...l.letterSpacing,true:f}});let p=ve(k(A(n.value,de),r),l.size.true??u);return p!=null&&(l={...l,lineHeight:{...l.lineHeight,true:p}}),l}function Ie(e,t){let n=new Map(e.map(e=>[e.path,e])),r=Ne(e,n),i=new Map,a=e=>{i.set(e.key,e)};if(t)for(let[e,n]of ke(t))a(B(L(R(e),n),r));for(let o of e){if(!we(o)||Ce(o))continue;let e=Se(o.path),s=he(k(o.value,n)),c=i.get(e)??R(e),l=Ae(t,s,o.path),u=c;l?u=L(u,l):(s&&c.webFamily===R(e).webFamily||s&&!i.has(e))&&(u=Me(u,s)),a(B(u,r))}for(let o of e){if(!Ce(o))continue;let e=xe(o.path);a(Fe(B(i.get(e)??R(e),r),o,n,t))}return[...i.values()].map(Pe).toSorted((e,t)=>e.key.localeCompare(t.key))}function Le(e){return/^\d+$/.test(e)||/^[A-Z_$][\w$]*$/i.test(e)?e:a(e)}function V(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}${Le(e)}: ${a(t)}`).join(`,
4
- `)}\n${r}}`}function Re(e,t){let n=`${e.replaceAll(/\W/g,``)||`font${t}`}Font`;return/^[A-Z_]/i.test(n)?n:`font${t}`}function ze(e,t){let n=[` family: isWeb ? ${a(e.webFamily)} : ${a(e.nativeFamily)}`,` size: ${V(e.size)}`];return Object.keys(e.lineHeight).length>0&&n.push(` lineHeight: ${V(e.lineHeight)}`),Object.keys(e.weight).length>0&&n.push(` weight: ${V(e.weight)}`),Object.keys(e.letterSpacing).length>0&&n.push(` letterSpacing: ${V(e.letterSpacing)}`),e.face&&n.push(` face: ${e.face}`),`const ${t} = createFont({\n${n.join(`,
5
- `)}\n});`}function Be(e){return`# Installing Tamagui Config
1
+ Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});let e=require("@razorwind/core/plugin"),t=require("@razorwind/core/utils"),n=require("node:path"),r=require("@razorwind/core/lib/fonts"),i=require("@stryke/helpers/get-unique");function a(e){return e.replaceAll(`\\`,`\\\\`).replaceAll(`"`,`\\"`).replaceAll(`
2
+ `,`\\n`).replaceAll(`\r`,`\\r`)}function o(e){return typeof e==`string`?`"${a(e)}"`:typeof e==`number`||typeof e==`boolean`?String(e):e==null?`undefined`:JSON.stringify(e)}function s(e,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 c=/^(?:font-size|fontSize)(?:\.|$)/i,l=/^(?:font-weight|fontWeight)(?:\.|$)/i,u=/^shadow(?:\.|$)/i,d=/^inset-shadow(?:\.|$)/i,f=/^drop-shadow(?:\.|$)/i,p=/^text-shadow(?:\.|$)/i,m=/^(?:blur|blur-?radius)(?:\.|$)/i,h=new Set([`color`,`shadow`,`insetShadow`,`dropShadow`,`textShadow`]),ee=[{prefix:/^(?:color|colours?|palette)(?:\.|$)/i,category:`color`},{prefix:c,category:`fontSize`},{prefix:l,category:`fontWeight`},{prefix:f,category:`dropShadow`},{prefix:d,category:`insetShadow`},{prefix:p,category:`textShadow`},{prefix:u,category:`shadow`},{prefix:m,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:S(e)===`palette`}function y(e,t){return(e===`palette`||e===`$palette`)&&(typeof t==`boolean`||typeof t==`number`||typeof t==`string`)}function b(e){return e===!0||e===`true`||e===1}function te(e){return b(e.primitive)||b(e.$primitive)?!0:S(e)===`primitive`}function ne(e,t){return(e===`primitive`||e===`$primitive`)&&(typeof t==`boolean`||typeof t==`number`||typeof t==`string`)}function x(e){if(typeof e.$description==`string`)return e.$description;if(typeof e.description==`string`)return e.description}function S(e,t){return typeof e.$type==`string`?e.$type:typeof e.type==`string`?e.type:t}function C(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 w(e,t){for(let{prefix:t,category:n}of ee)if(t.test(e))return n;if(t===`color`||t===`palette`)return`color`;if(t===`shadow`)return d.test(e)?`insetShadow`:f.test(e)?`dropShadow`:p.test(e)?`textShadow`:`shadow`;if(t===`dimension`){if(c.test(e))return`fontSize`;if(m.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`||l.test(e))return`fontWeight`}function T(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 E(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`:T(r)}function D(e,n,r,i,a,o){if(!(0,t.isObject)(e))return;let c=a||te(e)||v(e),l=S(e,r);if(g(e)){let r=C(e),a=n.join(`.`),u=w(a,l)??(c||l===`primitive`||l===`palette`?`color`:void 0),d=(0,t.formatTokenValue)(r,l),f=u&&h.has(u)||l===`color`||l===`palette`||l===`primitive`||l===`shadow`?d:s(r,l);o.push({path:a,type:l===`palette`||l===`primitive`?`color`:l,value:r,cssValue:d,tamaguiValue:f,category:u,tokenKey:u?E(a):void 0,description:x(e),theme:i,primitive:c});return}for(let[t,r]of Object.entries(e))t.startsWith(`$`)&&t!==`$palette`&&t!==`$primitive`||y(t,r)||ne(t,r)||D(r,[...n,t],l,i,c,o)}function O(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;D(n.tokens,[],void 0,e,!1,i)}return r?i.filter(e=>!e.type||r.has(e.type)):i}const k=/^\{([^{}]+)\}$/,re=/^(?:typography|type|text)$/i,ie=/^(?:font|fonts|font-family|fontFamily)$/i,ae=/^(?:font-size|fontSize)$/i,oe=/^(?:font-weight|fontWeight)$/i,se=/^(?:line-height|lineHeight|leading)$/i,ce=/^(?:letter-spacing|letterSpacing|tracking)$/i,le=/^(?:[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,ue=[`fontFamily`,`font-family`,`family`],de=[`fontSize`,`font-size`,`size`],fe=[`fontWeight`,`font-weight`,`weight`],pe=[`lineHeight`,`line-height`,`leading`],me=[`letterSpacing`,`letter-spacing`,`tracking`],he={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 k.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 ge(e){return(e.split(`,`)[0]?.trim()??e).replaceAll(/^["']|["']$/g,``)}function _e(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 ve(e){return Number.isInteger(e)?e:Math.round(e*1e3)/1e3}function N(e){if(e==null)return;let t=s(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 ye(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=s(e);if(typeof t==`number`&&Number.isFinite(t))return String(t);if(typeof t==`string`&&t.length>0)return t}function be(e,t){let n=N(e);if(n!=null)return ve(t!=null&&n>0&&n<=4?n*t:n)}function P(e,t){return t.test(e.split(`.`)[0]??``)}function xe(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`heading`:case`title`:case`display`:return`heading`;case`mono`:case`monospace`:case`caption`:case`code`:return`mono`;case`sans`:case`body`:case`serif`:return`body`;default:return I([e])}}function Se(e){return e.role?L(e.role):L(e.name)}function Ce(e){let t=F(e,re);if(t.length===0)return`body`;let n=t.at(-1);return n&&t.length>=2&&le.test(n)&&!n.includes(`_`)?`${I(t.slice(0,-1))}_${n}`:I(t)}function we(e){return L(F(e,ie)[0]??xe(e))}function R(e,t){let n=F(e,t);return n.length===0||n.length===1&&/^(?:DEFAULT|default)$/i.test(n[0])?`true`:I(n)}function Te(e){return e.type===`typography`&&(0,t.isObject)(e.value)}function Ee(e){return e.category===`fontSize`||e.category===`fontWeight`||De(e)||Oe(e)||ke(e)||Ae(e)?!1:e.type===`fontFamily`||P(e.path,ie)}function De(e){return e.category===`fontSize`||P(e.path,ae)}function Oe(e){return e.category===`fontWeight`||e.type===`fontWeight`||P(e.path,oe)}function ke(e){return P(e.path,se)}function Ae(e){return P(e.path,ce)}function je(e){let t=new Map;for(let n of Object.values(e)){let e=Se(n),r=t.get(e);(!r||n.role===e&&r.role!==e)&&t.set(e,n)}return t}function Me(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=ge(t).toLowerCase();return i.find(e=>(0,r.fontFamilyName)(e).toLowerCase()===a||e.title.toLowerCase()===a||e.name.toLowerCase()===a)}function Ne(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: ${o(t.normal)}`),t.italic&&n.push(`italic: ${o(t.italic)}`),` ${e}: { ${n.join(`, `)} }`}).join(`,
3
+ `)}\n }`}function z(e,t){return{...e,webFamily:(0,r.cssFontFamily)(t),nativeFamily:(0,r.fontFamilyName)(t),face:t.source===`local`?Ne(t):e.face}}function B(e){return{key:e,webFamily:`system-ui, sans-serif`,nativeFamily:`system-ui`,size:{},lineHeight:{},weight:{},letterSpacing:{}}}function Pe(e,t){return{...e,webFamily:t,nativeFamily:ge(t)}}function Fe(e,t){let n={},r=[],i={},a={};for(let o of e){if(De(o)){let e=N(j(o.value,t));e!=null&&(n[R(o.path,ae)]=e);continue}if(Oe(o)){let e=ye(j(o.value,t));e&&(i[R(o.path,oe)]=e);continue}if(Ae(o)){let e=N(j(o.value,t));e!=null&&(a[R(o.path,ce)]=e);continue}ke(o)&&r.push({key:R(o.path,se),value:j(o.value,t)})}let o=n.true??n.base??Object.values(n)[0],s={};for(let e of r){let t=n[e.key]??o,r=be(e.value,t);r!=null&&(s[e.key]=r)}return{size:n,lineHeight:s,weight:i,letterSpacing:a}}function V(e,t){return{...t,...e}}function H(e,t){return{...e,size:V(e.size,t.size),lineHeight:V(e.lineHeight,t.lineHeight),weight:V(e.weight,t.weight),letterSpacing:V(e.letterSpacing,t.letterSpacing)}}function Ie(e){return Object.keys(e.size).length>0?e:{...e,size:{...he}}}function Le(e,n,r,i){if(!(0,t.isObject)(n.value))return e;let a=M(n.value,ue),o=A(a),s=_e(j(a,r)),c=Me(i,s,o),l=e;c?l=z(l,c):s&&(l=Pe(l,s));let u=N(j(M(n.value,de),r));u!=null&&(l={...l,size:{...l.size,true:u}});let d=ye(j(M(n.value,fe),r));d&&(l={...l,weight:{...l.weight,true:d}});let f=N(j(M(n.value,me),r));f!=null&&(l={...l,letterSpacing:{...l.letterSpacing,true:f}});let p=be(j(M(n.value,pe),r),l.size.true??u);return p!=null&&(l={...l,lineHeight:{...l.lineHeight,true:p}}),l}function Re(e,t){let n=new Map(e.map(e=>[e.path,e])),r=Fe(e,n),a=new Map,o=e=>{a.set(e.key,e)};if(t)for(let[e,n]of je(t))o(H(z(B(e),n),r));for(let i of e){if(!Ee(i)||Te(i))continue;let e=we(i.path),s=_e(j(i.value,n)),c=a.get(e)??B(e),l=Me(t,s,i.path),u=c;l?u=z(u,l):(s&&c.webFamily===B(e).webFamily||s&&!a.has(e))&&(u=Pe(u,s)),o(H(u,r))}for(let i of e){if(!Te(i))continue;let e=Ce(i.path);o(Le(H(a.get(e)??B(e),r),i,n,t))}return(0,i.getUniqueBy)([...a.values()].map(Ie).toSorted((e,t)=>e.key.localeCompare(t.key)),e=>e.key)}function ze(e){return/^\d+$/.test(e)||/^[A-Z_$][\w$]*$/i.test(e)?e:o(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}${ze(e)}: ${o(t)}`).join(`,
4
+ `)}\n${r}}`}function Be(e,t){let n=`${e.replaceAll(/\W/g,``)||`font${t}`}Font`;return/^[A-Z_]/i.test(n)?n:`font${t}`}function Ve(e,t){let n=o(e.webFamily),r=o(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 He(e){return`# Installing Tamagui Config
6
6
 
7
7
  Generated by \`@razorwind/tamagui\`.
8
8
 
@@ -48,25 +48,21 @@ 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 Ve=new Set([`default`,`light`,`theme`]),He=/^base(?:[A-Z]\w*|[._-].+)?$/i,Ue=[`base`,`gray`,`grey`,`neutral`],We={css:`@tamagui/config/v5-css`,rn:`@tamagui/config/v5-rn`,reanimated:`@tamagui/config/v5-reanimated`,motion:`@tamagui/config/v5-motion`};function Ge(e){return Ve.has(e)}function Ke(e){return e===`dark`}function H(e,t){let n=new Map,r=t===`dark`?Ke:Ge;for(let t of e){let e=t.theme?.toLowerCase();(!e||He.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()]}const qe=new Set([`fontSize`,`blur`]),Je=[`space`,`size`,`radius`,`zIndex`,`blur`,`fontSize`,`shadow`,`insetShadow`,`dropShadow`,`textShadow`,`boxShadow`,`fontWeight`];function Ye(e){return/^px\(-?\d/.test(e)}function Xe(e){if(e.category===`radius`&&e.tokenKey?.startsWith(`borderRadius`)){let t=e.tokenKey.replace(/^borderRadius/,``);return t?S([t]):e.tokenKey}return e.tokenKey??``}function Ze(e){return e.category&&qe.has(e.category)&&typeof e.tamaguiValue==`number`?`px(${e.tamaguiValue})`:e.category===`dropShadow`&&typeof e.tamaguiValue==`string`?Qe(e.tamaguiValue):e.tamaguiValue}function Qe(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 $e(e){let t={};for(let n of e){if(!n.category||n.category===`color`||!n.tokenKey)continue;let e=Xe(n);if(!e)continue;let r=t[n.category]??{};r[e]=Ze(n),t[n.category]=r}return t}function et(e,t){let n={},r=(e,t)=>{let r=t.cssValue;typeof r!=`string`||r.length===0||G(r)||r===`[object Object]`||(n[e]=r)},i=e=>{let t=e.path.replace(/^color\./i,``).replaceAll(`.`,``);return e.theme?`${e.theme}_${t}`:t};for(let t of e)t.tokenKey&&(t.palette?r(i(t),t):r(t.tokenKey,t));for(let e of t)!e.tokenKey||!e.palette||r(i(e),e);return n}function U(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`&&Ye(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 tt(e,t=2){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${n}...theme\n${r}}`:`{\n${n}...theme,\n${i.map(([e,t])=>`${n}${/^[A-Z_$][\w$]*$/i.test(e)?e:a(e)}: ${t}`).join(`,
53
- `)}\n${r}}`}const nt=/^\{([^{}]+)\}$/,rt=/^var\((--[^),\s]+)(?:\s*,[^)]*)?\)$/;function it(e){if(typeof e==`string`)return nt.exec(e.trim())?.[1]?.trim()}function W(e){if(typeof e==`string`)return rt.exec(e.trim())?.[1]}function G(e){return it(e)!=null||W(e)!=null}function at(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=it(r.value);if(e){let n=t.get(e);if(!n||n.path===r.path)return r;r=n;continue}let a=W(r.value)??W(r.cssValue)??W(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 ot(e){return/^[A-Z_$][\w$]*$/i.test(e)?`theme.${e}`:`theme[${a(e)}]`}function st(e,t,n){let r=K(e);if(r){if(t&&r.name.toLowerCase()===t.toLowerCase())return`color${r.step}`;if(n[r.name])return`${r.name}${r.step}`}}function ct(e){if(e>=1&&e<=12)return e;if(e>=100&&e<=900&&e%100==0)return e/100}function K(e){let t=e.path.split(`.`).filter(Boolean),n=t.at(-1);if(n&&/^\d+$/.test(n)){let e=ct(Number(n)),r=t.at(-2);if(e!=null&&r&&!/^(?:color|colours?|palette)$/i.test(r))return{name:S([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=ct(Number(a));if(o!=null)return{name:i,step:o}}function lt(e,t,n,r){let i=e[t]??{};i[`${t}${n}`]=r,e[t]=i}function ut(e){let t={};for(let n of e){if(typeof n.tamaguiValue!=`string`)continue;let e=K(n);e&&lt(t,e.name,e.step,n.tamaguiValue)}return Object.fromEntries(Object.entries(t).filter(([,e])=>Object.keys(e).length>=3))}function q(e){let t={};for(let n of e){if(!n.palette||typeof n.tamaguiValue!=`string`)continue;let e=K(n);e&&lt(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:ut(e)}function J(e,t){if(e.length<2)return[...e];let n=Q(e[0]),r=Q(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 Y(e){return e<=.04045?e/12.92:((e+.055)/1.055)**2.4}function dt(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*Y(n)+.7152*Y(r)+.0722*Y(i)}function X(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 ft(e){return e>1?e/100:e}function Z(e,t){let n=RegExp(`^${t}\\((.+)\\)$`,`i`).exec(e.trim());if(n?.[1])return n[1].split(/[\s,/]+/).filter(Boolean)}function Q(e){let t=e.trim();if(!t||t.startsWith(`var(`)||t.includes(`{`))return;let n=dt(t);if(n!=null)return n;let r=Z(t,`oklch`);if(r?.[0]){let e=X(r[0]);return e==null?void 0:ft(e)}let i=Z(t,`hsla?`);if(i?.[2]){let e=X(i[2]);return e==null?void 0:ft(e)}let a=Z(t,`rgba?`);if(a?.[0]&&a[1]&&a[2]){let e=X(a[0]),t=X(a[1]),n=X(a[2]);if(e==null||t==null||n==null)return;let r=(e,t)=>t.trim().endsWith(`%`)||e<=1?e:e/255;return .2126*Y(r(e,a[0]))+.7152*Y(r(t,a[1]))+.0722*Y(r(n,a[2]))}}function pt(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 mt(e,t,n){let r=pt(e,t);if(r.length===0)return e;let i=J(r.map(([,e])=>e),n),a={};for(let[e,[n]]of r.entries())a[`${t}${n}`]=i[e]??r[e][1];return a}function ht(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 gt(e,t,n){let r=pt(e,t);if(!(r.length<2))return ht(J(r.map(([,e])=>e),n))}function _t(e,t){let n=new Map(Object.entries(e).map(([e,t])=>[e.toLowerCase(),{name:e,scale:t}]));for(let e of Ue){let r=n.get(e);if(!r)continue;let i=gt(r.scale,r.name,t);if(i)return{name:r.name,palette:i}}}function vt(e){let t=e.filter(e=>e.category===`color`||e.palette),n=q(H(t,`light`)),r=q(H(t,`dark`)),i=_t(n,`light`),a=_t(r,`dark`);return{lightPalette:i?.palette,darkPalette:a?.palette,lightBaseName:i?.name,darkBaseName:a?.name}}function $(e,n){let r=q(e),i=new Map(e.map(e=>[e.path,e])),o=new Map(e.map(e=>[(0,t.toThemeCssVar)(e.path),e])),s={};for(let t of e){if(t.category!==`color`||!t.tokenKey||t.palette||/^[A-Z]+\d{1,3}$/i.test(t.tokenKey)&&r[t.tokenKey.replace(/\d{1,3}$/,``)])continue;let e=at(t,i,o),c=st(e,n,r);if(c){s[t.tokenKey]=ot(c);continue}let l=e.tamaguiValue;G(l)||G(e.cssValue)||(typeof l==`string`||typeof l==`number`)&&(s[t.tokenKey]=a(l))}return s}function yt(e,t){let n=new Set([...Object.keys(e),...Object.keys(t)]);if(n.size===0)return;let r=[];for(let i of[...n].toSorted((e,t)=>e.localeCompare(t))){let n=mt(e[i]??t[i]??{},i,`light`),a=mt(t[i]??e[i]??{},i,`dark`);Object.keys(n).length!==0&&Object.keys(a).length!==0&&r.push(` ${i}: {
54
- light: ${U(n,8)},
55
- dark: ${U(a,8)}
51
+ `}const Ue=new Set([`default`,`light`,`theme`]),We=/^base(?:[A-Z]\w*|[._-].+)?$/i,Ge=[`base`,`gray`,`grey`,`neutral`],Ke={css:`@tamagui/config/v5-css`,rn:`@tamagui/config/v5-rn`,reanimated:`@tamagui/config/v5-reanimated`,motion:`@tamagui/config/v5-motion`};function qe(e){return Ue.has(e)}function Je(e){return e===`dark`}function W(e,t){let n=new Map,r=t===`dark`?Je:qe;for(let t of e){let e=t.theme?.toLowerCase();(!e||We.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()]}const Ye=new Set([`fontSize`,`blur`]),Xe=[`space`,`size`,`radius`,`zIndex`,`blur`,`fontSize`,`shadow`,`insetShadow`,`dropShadow`,`textShadow`,`boxShadow`,`fontWeight`];function Ze(e){return/^px\(-?\d/.test(e)}function Qe(e){if(e.category===`radius`&&e.tokenKey?.startsWith(`borderRadius`)){let t=e.tokenKey.replace(/^borderRadius/,``);return t?T([t]):e.tokenKey}return e.tokenKey??``}function $e(e){return e.category&&Ye.has(e.category)&&typeof e.tamaguiValue==`number`?`px(${e.tamaguiValue})`:e.category===`dropShadow`&&typeof e.tamaguiValue==`string`?et(e.tamaguiValue):e.tamaguiValue}function et(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 tt(e){let t={};for(let n of e){if(!n.category||n.category===`color`||!n.tokenKey)continue;let e=Qe(n);if(!e)continue;let r=t[n.category]??{};r[e]=$e(n),t[n.category]=r}return t}function nt(e,t){let n={},r=(e,t)=>{let r=t.cssValue;typeof r!=`string`||r.length===0||q(r)||r===`[object Object]`||(n[e]=r)},i=e=>{let t=e.path.replace(/^color\./i,``).replaceAll(`.`,``);return e.theme?`${e.theme}_${t}`:t};for(let t of e)t.tokenKey&&(t.primitive?r(i(t),t):r(t.tokenKey,t));for(let e of t)!e.tokenKey||!e.primitive||r(i(e),e);return n}function G(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`&&Ze(t)?t:o(t);return`${n}${/^[A-Z_$][\w$]*$/i.test(e)?e:o(e)}: ${r}`}).join(`,
52
+ `)}\n${` `.repeat(Math.max(t-2,0))}}`}function rt(e,t=2){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${n}...theme\n${r}}`:`{\n${n}...theme,\n${i.map(([e,t])=>`${n}${/^[A-Z_$][\w$]*$/i.test(e)?e:o(e)}: ${t}`).join(`,
53
+ `)}\n${r}}`}const it=/^\{([^{}]+)\}$/,at=/^var\((--[^),\s]+)(?:\s*,[^)]*)?\)$/;function ot(e){if(typeof e==`string`)return it.exec(e.trim())?.[1]?.trim()}function K(e){if(typeof e==`string`)return at.exec(e.trim())?.[1]}function q(e){return ot(e)!=null||K(e)!=null}function st(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=K(r.value)??K(r.cssValue)??K(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 ct(e){return/^[A-Z_$][\w$]*$/i.test(e)?`theme.${e}`:`theme[${o(e)}]`}function lt(e,t,n){let r=J(e);if(r){if(t&&r.name.toLowerCase()===t.toLowerCase())return`color${r.step}`;if(n[r.name])return`${r.name}${r.step}`}}function ut(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=ut(Number(n)),r=t.at(-2);if(e!=null&&r&&!/^(?:color|colours?|palette)$/i.test(r))return{name:T([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=ut(Number(a));if(o!=null)return{name:i,step:o}}function dt(e,t,n,r){let i=e[t]??{};i[`${t}${n}`]=r,e[t]=i}function ft(e){let t={};for(let n of e){if(typeof n.tamaguiValue!=`string`)continue;let e=J(n);e&&dt(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&&dt(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:ft(e)}function X(e,t){if(e.length<2)return[...e];let n=$(e[0]),r=$(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 pt(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 mt(e){return e>1?e/100:e}function ht(e,t){let n=RegExp(`^${t}\\((.+)\\)$`,`i`).exec(e.trim());if(n?.[1])return n[1].split(/[\s,/]+/).filter(Boolean)}function $(e){let t=e.trim();if(!t||t.startsWith(`var(`)||t.includes(`{`))return;let n=pt(t);if(n!=null)return n;let r=ht(t,`oklch`);if(r?.[0]){let e=Q(r[0]);return e==null?void 0:mt(e)}let i=ht(t,`hsla?`);if(i?.[2]){let e=Q(i[2]);return e==null?void 0:mt(e)}let a=ht(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 gt(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 _t(e,t,n){let r=gt(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 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 yt(e,t,n){let r=gt(e,t);if(!(r.length<2))return vt(X(r.map(([,e])=>e),n))}function bt(e,t){let n=new Map(Object.entries(e).map(([e,t])=>[e.toLowerCase(),{name:e,scale:t}]));for(let e of Ge){let r=n.get(e);if(!r)continue;let i=yt(r.scale,r.name,t);if(i)return{name:r.name,palette:i}}}function xt(e){let t=e.filter(e=>e.category===`color`||e.primitive),n=Y(W(t,`light`)),r=Y(W(t,`dark`)),i=bt(n,`light`),a=bt(r,`dark`);return{lightPalette:i?.palette,darkPalette:a?.palette,lightBaseName:i?.name,darkBaseName:a?.name}}function St(e,n){let r=Y(e),i=new Map(e.map(e=>[e.path,e])),a=new Map(e.map(e=>[(0,t.toThemeCssVar)(e.path),e])),s={};for(let t of e){if(t.category!==`color`||!t.tokenKey||t.primitive||/^[A-Z]+\d{1,3}$/i.test(t.tokenKey)&&r[t.tokenKey.replace(/\d{1,3}$/,``)])continue;let e=st(t,i,a),c=lt(e,n,r);if(c){s[t.tokenKey]=ct(c);continue}let l=e.tamaguiValue;q(l)||q(e.cssValue)||(typeof l==`string`||typeof l==`number`)&&(s[t.tokenKey]=o(l))}return s}function Ct(e,t){let n=new Set([...Object.keys(e),...Object.keys(t)]);if(n.size===0)return;let r=[];for(let i of[...n].toSorted((e,t)=>e.localeCompare(t))){let n=_t(e[i]??t[i]??{},i,`light`),a=_t(t[i]??e[i]??{},i,`dark`);Object.keys(n).length!==0&&Object.keys(a).length!==0&&r.push(` ${i}: {
54
+ light: ${G(n,8)},
55
+ dark: ${G(a,8)}
56
56
  }`)}if(r.length!==0)return`{\n${r.join(`,
57
- `)}\n }`}function bt(e,t={},n){let r=t.useDefaultConfig!==!1,i=t.animations??`css`,o=t.includeTypeAugmentation!==!1,s=e.filter(e=>e.category===`color`),c=H(s,`light`),l=H(s,`dark`),u=q(c),d=q(l.length>0?l:c),{lightPalette:f,darkPalette:p,lightBaseName:m,darkBaseName:ee}=vt(e),h=yt(u,d),g=$(c,m),_=$(l.length>0?l:c,l.length>0?ee:m),te=$e(H(e,`light`)),v=et(c,l),y=[];Object.keys(v).length>0&&y.push(` color: ${U(v,4)}`);for(let e of Je){let t=te[e];t&&Object.keys(t).length>0&&y.push(` ${e}: ${U(t,4)}`)}let b=[];f&&b.push(` lightPalette: ${a(f)}`),p&&b.push(` darkPalette: ${a(p)}`),h&&b.push(` childrenThemes: ${h}`),(Object.keys(g).length>0||Object.keys(_).length>0)&&b.push(` getTheme: ({ theme, scheme }: Parameters<CreateV5ThemeOptions["getTheme"]>[0]) => {
57
+ `)}\n }`}function wt(e){let t=new Set;for(let n of e)for(let e of Object.values(n)){for(let n of e.matchAll(/theme\.([A-Z_$][\w$]*)/gi))n[1]&&t.add(n[1]);for(let n of e.matchAll(/theme\[(['"])(.+?)\1\]/g))t.add(n[2])}return[...t]}function Tt(e,t){let n=new Set;for(let r of[e,t])for(let e of Object.values(r))for(let t of Object.keys(e))n.add(t);return[...n]}function Et(e,t){let n=Math.max(e?.length??0,t?.length??0);if(n===0)return[];let r=[];for(let e=1;e<=Math.min(n,12);e++)r.push(`color${e}`);return r}function Dt(e){let t=new Set;for(let n of Object.keys(e.lightSemantic))t.add(n);for(let n of Object.keys(e.darkSemantic))t.add(n);for(let n of wt([e.lightSemantic,e.darkSemantic]))t.add(n);for(let n of Tt(e.lightScales,e.darkScales))t.add(n);for(let n of Et(e.lightPalette,e.darkPalette))t.add(n);return[...t].toSorted((e,t)=>e.localeCompare(t,void 0,{numeric:!0}))}function Ot(e){return` ${/^[A-Z_$][\w$]*$/i.test(e)?e:o(e)}: string;`}function kt(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(Ot),`}`,``]}function At(e,t,n={}){let r=e.fonts??{},i=n.useDefaultConfig!==!1,a=n.animations??`css`,s=n.includeTypeAugmentation!==!1,c=t.filter(e=>e.category===`color`),l=W(c,`light`),u=W(c,`dark`),d=Y(l),f=Y(u.length>0?u:l),{lightPalette:p,darkPalette:m,lightBaseName:h,darkBaseName:ee}=xt(t),g=Ct(d,f),_=St(l,h),v=St(u.length>0?u:l,u.length>0?ee:h),y=kt(Dt({lightSemantic:_,darkSemantic:v,lightScales:d,darkScales:f,lightPalette:p,darkPalette:m}),{specName:e.name}),b=y?`AppTheme`:`Record<string, string>`,te=tt(W(t,`light`)),ne=nt(l,u),x=[];Object.keys(ne).length>0&&x.push(` color: ${G(ne,4)}`);for(let e of Xe){let t=te[e];t&&Object.keys(t).length>0&&x.push(` ${e}: ${G(t,4)}`)}let S=[];p&&S.push(` lightPalette: ${o(p)}`),m&&S.push(` darkPalette: ${o(m)}`),g&&S.push(` childrenThemes: ${g}`),(Object.keys(_).length>0||Object.keys(v).length>0)&&S.push(` getTheme: ({ theme, scheme }: { theme: ${b}; scheme: "light" | "dark" }) => {
58
58
  return scheme === "dark"
59
- ? ${tt(_,8)}
60
- : ${tt(g,8)};
61
- }`);let x=[`import { isWeb } from '@tamagui/constants';`];r?x.push(`import { createV5Theme, defaultConfig, type CreateV5ThemeOptions } from "@tamagui/config/v5";`):x.push(`import { createV5Theme, type CreateV5ThemeOptions } from "@tamagui/config/v5";`),i!==!1&&x.push(`import { animations } from "${We[i]}";`);let S=[`createTamagui`,`px`];y.length>0&&S.push(`createTokens`);let C=Ie(H(e,`light`),n);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/config-v5`,` */`,``,...x,``];y.length>0&&w.push(`const tokens = createTokens({`,y.join(`,
62
- `),`});`,``);let T=b.length>0?`createV5Theme({\n${b.join(`,
63
- `)}\n})`:`createV5Theme()`;w.push(`const themes = ${T};`,``);let E=new Map;if(C.length>0)for(let[e,t]of C.entries()){let n=Re(t.key,e);E.set(t.key,n),w.push(ze(t,n),``)}let D=[];if(r&&D.push(` ...defaultConfig`),i!==!1&&D.push(` animations`),y.length>0&&(r?D.push(` tokens: {
59
+ ? ${rt(v,8)}
60
+ : ${rt(_,8)};
61
+ }`);let C=[`import { isWeb } from '@tamagui/constants';`];i?C.push(`import { createV5Theme, defaultConfig, type CreateV5ThemeOptions } from "@tamagui/config/v5";`):C.push(`import { createV5Theme, type CreateV5ThemeOptions } from "@tamagui/config/v5";`),a!==!1&&C.push(`import { animations } from "${Ke[a]}";`);let w=[`createTamagui`,`px`];x.length>0&&w.push(`createTokens`);let T=Re(W(t,`light`),r);T.length>0&&w.push(`createFont`),C.push(`import { ${w.join(`, `)} } from "@tamagui/core";`);let E=[`/* eslint-disable */`,``,`/*`,` * Generated by @razorwind/tamagui — Do not edit by hand.`,` * `,` * @see https://tamagui.dev/docs/core/config-v5`,` */`,``,...C,``];x.length>0&&E.push(`const tokens = createTokens({`,x.join(`,
62
+ `),`});`,``);let D=S.length>0?`createV5Theme({\n${S.join(`,
63
+ `)}\n})`:`createV5Theme()`;E.push(`const themes = ${D};`,``);let O=new Map;if(T.length>0)for(let[e,t]of T.entries()){let n=Be(t.key,e);O.set(t.key,n),E.push(Ve(t,n),``)}let k=[];if(i&&k.push(` ...defaultConfig`),a!==!1&&k.push(` animations`),x.length>0&&(i?k.push(` tokens: {
64
64
  ...defaultConfig.tokens,
65
65
  ...tokens,
66
- color: {
67
- ...defaultConfig.tokens.color,
68
- ...tokens.color
69
- },
70
66
  space: {
71
67
  ...defaultConfig.tokens.space,
72
68
  ...tokens.space
@@ -83,13 +79,23 @@ Re-run Razorwind generate when tokens change so \`${e.outputPath}\` stays aligne
83
79
  ...defaultConfig.tokens.zIndex,
84
80
  ...tokens.zIndex
85
81
  }
86
- }`):D.push(` tokens`)),D.push(` themes`),E.size>0){let e=[...E.entries()].map(([e,t])=>` ${/^[A-Z_$][\w$]*$/i.test(e)?e:a(e)}: ${t}`);r?D.push(` fonts: {
82
+ }`):k.push(` tokens`)),k.push(` themes`),O.size>0){let e=[...O.entries()].map(([e,t])=>` ${/^[A-Z_$][\w$]*$/i.test(e)?e:o(e)}: ${t}`);i?k.push(` fonts: {
87
83
  ...defaultConfig.fonts,
88
84
  ${e.join(`,
89
85
  `)}
90
- }`):D.push(` fonts: {
86
+ }`):k.push(` fonts: {
91
87
  ${e.join(`,
92
88
  `)}
93
- }`)}return w.push(`export const config = createTamagui({`,D.join(`,
94
- `),`});`,``,`export type AppConfig = typeof config;`,``),o&&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(`
95
- `)}function xt(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?T(e.tokens,r):[];if(o.length===0&&!a)return{};let s=r.outputPath??`tamagui.config.ts`,c=bt(o,r,e.fonts),l=r.installGuide??Be({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 St=(0,e.definePlugin)(e=>({name:`tamagui`,themeGeneration:`combined`,generate:async t=>xt(t,e??{})}));exports.collectColorScales=q,exports.collectTamaguiFonts=Ie,exports.colorLightness=Q,exports.default=St,exports.flattenTokens=T,exports.fontVarName=Re,Object.defineProperty(exports,"formatTokenValue",{enumerable:!0,get:function(){return t.formatTokenValue}}),exports.generateTamaguiConfig=xt,exports.isPaletteGroup=_,exports.orderPaletteForScheme=J,exports.renderInstallMd=Be,exports.renderTamaguiConfig=bt,exports.resolveTokenCategory=x,exports.resolveTokenSets=t.resolveTokenSets,exports.tamaguiFontKeyFromRole=F,exports.toCamelCaseKey=S,Object.defineProperty(exports,"toCssVar",{enumerable:!0,get:function(){return t.toCssVar}}),exports.toTamaguiValue=o,exports.toTokenKey=C,exports.typographyFontKey=xe;
89
+ }`)}return n.shorthands&&k.push(` shorthands: ${G(n.shorthands,4)}`),n.media&&k.push(` media: ${o(n.media)}`),k.push(` selectionStyles(theme: ${b}) {
90
+ return {
91
+ backgroundColor: theme.color.background.primary,
92
+ color: theme.color.text.primary
93
+ };
94
+ } `),n.defaultFont&&k.push(` defaultFont: ${o(n.defaultFont)}`),E.push(``,...y??[],`/**
95
+ * The Tamagui v5 config for the ${e.name||`design system`}.
96
+ *
97
+ * @see https://tamagui.dev/docs/core/config-v5
98
+ */
99
+ export const config = createTamagui({`,k.join(`,
100
+ `),`});`,``,`export type AppConfig = typeof config;`,``),s&&E.push(`declare module "@tamagui/core" {`,` // eslint-disable-next-line @typescript-eslint/no-empty-object-type`,` interface TamaguiCustomConfig extends AppConfig {}`,`}`,``),E.push(`export default config;`,``),E.join(`
101
+ `)}function jt(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?O(e.tokens,r):[];if(o.length===0&&!a)return{};let s=r.outputPath??`tamagui.config.ts`,c=At(e,o,r),l=r.installGuide??He({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 Mt=(0,e.definePlugin)(e=>({name:`tamagui`,themeGeneration:`combined`,generate:async t=>jt(t,e??{})}));exports.collectColorScales=Y,exports.collectTamaguiFonts=Re,exports.colorLightness=$,exports.default=Mt,exports.flattenTokens=O,exports.fontVarName=Be,Object.defineProperty(exports,"formatTokenValue",{enumerable:!0,get:function(){return t.formatTokenValue}}),exports.generateTamaguiConfig=jt,exports.isPaletteGroup=v,exports.orderPaletteForScheme=X,exports.renderInstallMd=He,exports.renderTamaguiConfig=At,exports.resolveTokenCategory=w,exports.resolveTokenSets=t.resolveTokenSets,exports.tamaguiFontKeyFromRole=L,exports.toCamelCaseKey=T,Object.defineProperty(exports,"toCssVar",{enumerable:!0,get:function(){return t.toCssVar}}),exports.toTamaguiValue=s,exports.toTokenKey=E,exports.typographyFontKey=Ce;
package/dist/index.d.cts CHANGED
@@ -1,4 +1,5 @@
1
1
  import { TokenType } from "@power-plant/dtcg-schema";
2
+ import { CreateTamaguiProps } from "tamagui";
2
3
  import { Fonts, Schema, Tokens } from "@razorwind/core/schema";
3
4
  import { formatTokenValue, resolveTokenSets, toCssVar } from "@razorwind/core/utils";
4
5
  import { GeneratorFunctionResult } from "@power-plant/core";
@@ -33,6 +34,22 @@ interface TamaguiPluginOptions {
33
34
  * @defaultValue `"css"`
34
35
  */
35
36
  animations?: TamaguiAnimationDriver;
37
+ /**
38
+ * Shorthands to include in the generated config.
39
+ *
40
+ * @defaultValue `{}`
41
+ */
42
+ shorthands?: Record<string, string | number>;
43
+ /**
44
+ * Media queries to include in the generated config.
45
+ *
46
+ * @defaultValue `{}`
47
+ */
48
+ media?: CreateTamaguiProps["media"];
49
+ /**
50
+ * Default font family to include in the generated config.
51
+ */
52
+ defaultFont?: string;
36
53
  /**
37
54
  * When true, spread `defaultConfig` from `@tamagui/config/v5` and merge
38
55
  * generated tokens/themes on top. When false, emit a minimal config from
@@ -82,11 +99,9 @@ interface FlatToken {
82
99
  /** Theme / set id when tokens are a `Record<string, Tokens>`. */
83
100
  theme?: string;
84
101
  /**
85
- * True when an ancestor group is marked as a palette (`palette: true` or
86
- * `$type: "palette"`). Those scales feed Tamagui `childrenThemes` /
87
- * `lightPalette` / `darkPalette`.
102
+ * True when an ancestor group is marked as a primitive (`primitive: true` or `$type: "primitive"` or `$type: "palette"`). Those scales feed Tamagui `childrenThemes` / `lightPalette` / `darkPalette`.
88
103
  */
89
- palette?: boolean;
104
+ primitive?: boolean;
90
105
  }
91
106
  //#endregion
92
107
  //#region src/flatten.d.ts
@@ -214,7 +229,7 @@ declare function colorLightness(color: string): number | undefined;
214
229
  * @see https://tamagui.dev/docs/core/config-v5
215
230
  * @see https://tamagui.dev/docs/core/font-language#font-tokens
216
231
  */
217
- declare function renderTamaguiConfig(tokens: FlatToken[], options?: TamaguiPluginOptions, fonts?: Fonts): string;
232
+ declare function renderTamaguiConfig(spec: Schema, tokens: FlatToken[], options?: TamaguiPluginOptions): string;
218
233
  /**
219
234
  * Generate a Tamagui v5 config file from a Razorwind schema.
220
235
  */
@@ -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":";;;;;;;;;;KAyBY;;;;KAMA;;;;UAkBK;;;;;;;;;EASf;;;;;;;EAQA,aAAa;;;;;;;;EASb;;;;;EAMA,eAAe;;;;;;;EAQf;;;;;EAMA;;;;;UAMe;;EAEf;;EAEA,OAAO;;EAEP;;EAEA;;EAEA;;EAEA,WAAW;;EAEX;;EAEA;;EAEA;;;;;;EAMA;;;;;;;;;iBCpCc,eAAe,MAAM;;;;iBA2DrB,qBACd,cACA,gBACC;;;;;;;iBAoEa,eAAe;;;;;;;;iBA0Bf,WAAW;;;;iBAqFX,cACd,QAAQ,SAAS,eAAe,SAChC,UAAS,KAAK,wCACb;;;;;;;;;UCjQc;;EAEf;;EAEA;;EAEA;EACA,MAAM;EACN,YAAY;EACZ,QAAQ;EACR,eAAe;;EAEf;;;;;;iBAyLc,uBAAuB;;;;;;;iBAsCvB,kBAAkB;;;;;;;iBAkXlB,oBACd,QAAQ,aACR,QAAQ,QACP;;;;iBAuFa,YAAY,aAAa;;;;;;;;;iBCzsBzB,eAAe,gBAAgB;;;;;;;;iBCnC/B,gBAAgB;EAAW;;;;KCiCtC;;;;;;;iBA0cW,mBACd,aAAa,cACZ,eAAe;;;;;;;iBAmCF,sBACd,2BACA,QAAQ;;;;;iBA+EM,eAAe;;;;;;;;;;iBAsSf,oBACd,QAAQ,aACR,UAAS,sBACT,QAAQ;;;;iBA6NM,sBACd,MAAM,QACN,UAAS,uBACR,wBAAwB,QAAQ"}
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;;;;;;;;EASA;;;;;EAMA,eAAe;;;;;;;EAQf;;;;;EAMA;;;;;UAMe;;EAEf;;EAEA,OAAO;;EAEP;;EAEA;;EAEA;;EAEA,WAAW;;EAEX;;EAEA;;EAEA;;;;EAIA;;;;;;;;;iBCtDc,eAAe,MAAM;;;;iBAuFrB,qBACd,cACA,gBACC;;;;;;;iBAoEa,eAAe;;;;;;;;iBA0Bf,WAAW;;;;iBA6FX,cACd,QAAQ,SAAS,eAAe,SAChC,UAAS,KAAK,wCACb;;;;;;;;;UCpSc;;EAEf;;EAEA;;EAEA;EACA,MAAM;EACN,YAAY;EACZ,QAAQ;EACR,eAAe;;EAEf;;;;;;iBAyLc,uBAAuB;;;;;;;iBAsCvB,kBAAkB;;;;;;;iBAkXlB,oBACd,QAAQ,aACR,QAAQ,QACP;;;;iBA0Fa,YAAY,aAAa;;;;;;;;;iBC7sBzB,eAAe,gBAAgB;;;;;;;;iBCnC/B,gBAAgB;EAAW;;;;KCiCtC;;;;;;;iBA0cW,mBACd,aAAa,cACZ,eAAe;;;;;;;iBAmCF,sBACd,2BACA,QAAQ;;;;;iBA+EM,eAAe;;;;;;;;;;iBA8af,oBACd,MAAM,QACN,QAAQ,aACR,UAAS;;;;iBAkQK,sBACd,MAAM,QACN,UAAS,uBACR,wBAAwB,QAAQ"}
package/dist/index.d.mts CHANGED
@@ -1,5 +1,6 @@
1
1
  import { formatTokenValue, resolveTokenSets, toCssVar } from "@razorwind/core/utils";
2
2
  import { TokenType } from "@power-plant/dtcg-schema";
3
+ import { CreateTamaguiProps } from "tamagui";
3
4
  import { Fonts, Schema, Tokens } from "@razorwind/core/schema";
4
5
  import { GeneratorFunctionResult } from "@power-plant/core";
5
6
  //#region src/types.d.ts
@@ -33,6 +34,22 @@ interface TamaguiPluginOptions {
33
34
  * @defaultValue `"css"`
34
35
  */
35
36
  animations?: TamaguiAnimationDriver;
37
+ /**
38
+ * Shorthands to include in the generated config.
39
+ *
40
+ * @defaultValue `{}`
41
+ */
42
+ shorthands?: Record<string, string | number>;
43
+ /**
44
+ * Media queries to include in the generated config.
45
+ *
46
+ * @defaultValue `{}`
47
+ */
48
+ media?: CreateTamaguiProps["media"];
49
+ /**
50
+ * Default font family to include in the generated config.
51
+ */
52
+ defaultFont?: string;
36
53
  /**
37
54
  * When true, spread `defaultConfig` from `@tamagui/config/v5` and merge
38
55
  * generated tokens/themes on top. When false, emit a minimal config from
@@ -82,11 +99,9 @@ interface FlatToken {
82
99
  /** Theme / set id when tokens are a `Record<string, Tokens>`. */
83
100
  theme?: string;
84
101
  /**
85
- * True when an ancestor group is marked as a palette (`palette: true` or
86
- * `$type: "palette"`). Those scales feed Tamagui `childrenThemes` /
87
- * `lightPalette` / `darkPalette`.
102
+ * True when an ancestor group is marked as a primitive (`primitive: true` or `$type: "primitive"` or `$type: "palette"`). Those scales feed Tamagui `childrenThemes` / `lightPalette` / `darkPalette`.
88
103
  */
89
- palette?: boolean;
104
+ primitive?: boolean;
90
105
  }
91
106
  //#endregion
92
107
  //#region src/flatten.d.ts
@@ -214,7 +229,7 @@ declare function colorLightness(color: string): number | undefined;
214
229
  * @see https://tamagui.dev/docs/core/config-v5
215
230
  * @see https://tamagui.dev/docs/core/font-language#font-tokens
216
231
  */
217
- declare function renderTamaguiConfig(tokens: FlatToken[], options?: TamaguiPluginOptions, fonts?: Fonts): string;
232
+ declare function renderTamaguiConfig(spec: Schema, tokens: FlatToken[], options?: TamaguiPluginOptions): string;
218
233
  /**
219
234
  * Generate a Tamagui v5 config file from a Razorwind schema.
220
235
  */
package/dist/index.mjs CHANGED
@@ -1,8 +1,8 @@
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,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:ee(e)===`palette`}function O(e,t){return(e===`palette`||e===`$palette`)&&(typeof t==`boolean`||typeof t==`number`||typeof t==`string`)}function k(e){if(typeof e.$description==`string`)return e.$description;if(typeof e.description==`string`)return e.description}function ee(e,t){return typeof e.$type==`string`?e.$type:typeof e.type==`string`?e.type:t}function te(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 ne(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 A(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 re(e){let t=e.split(`.`).filter(Boolean),n=t[0];n&&/^(?:color|colours?|palette|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`:A(r)}function ie(e,t,r,a,o,s){if(!i(e))return;let c=o||D(e),l=ee(e,r);if(T(e)){let r=te(e),i=t.join(`.`),o=ne(i,l)??(c||l===`palette`?`color`:void 0),u=n(r,l),d=o&&C.has(o)||l===`color`||l===`palette`||l===`shadow`?u:h(r,l);s.push({path:i,type:l===`palette`?`color`:l,value:r,cssValue:u,tamaguiValue:d,category:o,tokenKey:o?re(i):void 0,description:k(e),theme:a,palette:c||void 0});return}for(let[n,r]of Object.entries(e))n.startsWith(`$`)&&n!==`$palette`||O(n,r)||ie(r,[...t,n],l,a,c,s)}function ae(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;ie(t.tokens,[],void 0,e,!1,r)}return n?r.filter(e=>!e.type||n.has(e.type)):r}const oe=/^\{([^{}]+)\}$/,se=/^(?:typography|type|text)$/i,ce=/^(?:font|fonts|font-family|fontFamily)$/i,le=/^(?:font-size|fontSize)$/i,ue=/^(?:font-weight|fontWeight)$/i,de=/^(?:line-height|lineHeight|leading)$/i,fe=/^(?:letter-spacing|letterSpacing|tracking)$/i,pe=/^(?:[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,me=[`fontFamily`,`font-family`,`family`],he=[`fontSize`,`font-size`,`size`],ge=[`fontWeight`,`font-weight`,`weight`],_e=[`lineHeight`,`line-height`,`leading`],ve=[`letterSpacing`,`letter-spacing`,`tracking`],ye={1:12,2:14,3:16,4:18,5:20,6:24,7:28,8:32,9:40,10:48};function j(e){if(typeof e==`string`)return oe.exec(e.trim())?.[1]?.trim()}function M(e,t){let n=j(e);if(!n)return e;let r=t.get(n),i=new Set([n]);for(let e=0;e<8&&r;e++){let e=j(r.value);if(!e||i.has(e))return r.value;i.add(e),r=t.get(e)}return r?.value??e}function N(e,t){for(let n of t)if(e[n]!==void 0&&e[n]!==null)return e[n]}function be(e){return(e.split(`,`)[0]?.trim()??e).replaceAll(/^["']|["']$/g,``)}function xe(e){if(typeof e==`string`){let t=e.trim();return t.length===0||j(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 Se(e){return Number.isInteger(e)?e:Math.round(e*1e3)/1e3}function P(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 Ce(e){if(typeof e==`number`&&Number.isFinite(e))return String(e);if(typeof e==`string`){let t=e.trim();if(t.length===0||j(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 we(e,t){let n=P(e);if(n!=null)return Se(t!=null&&n>0&&n<=4?n*t:n)}function F(e,t){return t.test(e.split(`.`)[0]??``)}function Te(e){return e.split(`.`).filter(Boolean).at(-1)??e}function I(e,t){let n=e.split(`.`).filter(Boolean);return n[0]&&t.test(n[0])&&n.shift(),n}function L(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 R(e){switch(e.toLowerCase()){case`heading`:case`title`:case`display`:return`heading`;case`mono`:case`monospace`:case`caption`:case`code`:return`mono`;case`sans`:case`body`:case`serif`:return`body`;default:return L([e])}}function Ee(e){return e.role?R(e.role):R(e.name)}function De(e){let t=I(e,se);if(t.length===0)return`body`;let n=t.at(-1);return n&&t.length>=2&&pe.test(n)&&!n.includes(`_`)?`${L(t.slice(0,-1))}_${n}`:L(t)}function Oe(e){return R(I(e,ce)[0]??Te(e))}function z(e,t){let n=I(e,t);return n.length===0||n.length===1&&/^(?:DEFAULT|default)$/i.test(n[0])?`true`:L(n)}function ke(e){return e.type===`typography`&&i(e.value)}function Ae(e){return e.category===`fontSize`||e.category===`fontWeight`||je(e)||Me(e)||Ne(e)||Pe(e)?!1:e.type===`fontFamily`||F(e.path,ce)}function je(e){return e.category===`fontSize`||F(e.path,le)}function Me(e){return e.category===`fontWeight`||e.type===`fontWeight`||F(e.path,ue)}function Ne(e){return F(e.path,de)}function Pe(e){return F(e.path,fe)}function Fe(e){let t=new Map;for(let n of Object.values(e)){let e=Ee(n),r=t.get(e);(!r||n.role===e&&r.role!==e)&&t.set(e,n)}return t}function Ie(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=be(t).toLowerCase();return r.find(e=>f(e).toLowerCase()===i||e.title.toLowerCase()===i||e.name.toLowerCase()===i)}function Le(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`?Le(t):e.face}}function V(e){return{key:e,webFamily:`system-ui, sans-serif`,nativeFamily:`system-ui`,size:{},lineHeight:{},weight:{},letterSpacing:{}}}function Re(e,t){return{...e,webFamily:t,nativeFamily:be(t)}}function ze(e,t){let n={},r=[],i={},a={};for(let o of e){if(je(o)){let e=P(M(o.value,t));e!=null&&(n[z(o.path,le)]=e);continue}if(Me(o)){let e=Ce(M(o.value,t));e&&(i[z(o.path,ue)]=e);continue}if(Pe(o)){let e=P(M(o.value,t));e!=null&&(a[z(o.path,fe)]=e);continue}Ne(o)&&r.push({key:z(o.path,de),value:M(o.value,t)})}let o=n.true??n.base??Object.values(n)[0],s={};for(let e of r){let t=n[e.key]??o,r=we(e.value,t);r!=null&&(s[e.key]=r)}return{size:n,lineHeight:s,weight:i,letterSpacing:a}}function H(e,t){return{...t,...e}}function U(e,t){return{...e,size:H(e.size,t.size),lineHeight:H(e.lineHeight,t.lineHeight),weight:H(e.weight,t.weight),letterSpacing:H(e.letterSpacing,t.letterSpacing)}}function Be(e){return Object.keys(e.size).length>0?e:{...e,size:{...ye}}}function Ve(e,t,n,r){if(!i(t.value))return e;let a=N(t.value,me),o=j(a),s=xe(M(a,n)),c=Ie(r,s,o),l=e;c?l=B(l,c):s&&(l=Re(l,s));let u=P(M(N(t.value,he),n));u!=null&&(l={...l,size:{...l.size,true:u}});let d=Ce(M(N(t.value,ge),n));d&&(l={...l,weight:{...l.weight,true:d}});let f=P(M(N(t.value,ve),n));f!=null&&(l={...l,letterSpacing:{...l.letterSpacing,true:f}});let p=we(M(N(t.value,_e),n),l.size.true??u);return p!=null&&(l={...l,lineHeight:{...l.lineHeight,true:p}}),l}function He(e,t){let n=new Map(e.map(e=>[e.path,e])),r=ze(e,n),i=new Map,a=e=>{i.set(e.key,e)};if(t)for(let[e,n]of Fe(t))a(U(B(V(e),n),r));for(let o of e){if(!Ae(o)||ke(o))continue;let e=Oe(o.path),s=xe(M(o.value,n)),c=i.get(e)??V(e),l=Ie(t,s,o.path),u=c;l?u=B(u,l):(s&&c.webFamily===V(e).webFamily||s&&!i.has(e))&&(u=Re(u,s)),a(U(u,r))}for(let o of e){if(!ke(o))continue;let e=De(o.path);a(Ve(U(i.get(e)??V(e),r),o,n,t))}return[...i.values()].map(Be).toSorted((e,t)=>e.key.localeCompare(t.key))}function Ue(e){return/^\d+$/.test(e)||/^[A-Z_$][\w$]*$/i.test(e)?e:m(e)}function W(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}${Ue(e)}: ${m(t)}`).join(`,
4
- `)}\n${r}}`}function We(e,t){let n=`${e.replaceAll(/\W/g,``)||`font${t}`}Font`;return/^[A-Z_]/i.test(n)?n:`font${t}`}function Ge(e,t){let n=[` family: isWeb ? ${m(e.webFamily)} : ${m(e.nativeFamily)}`,` size: ${W(e.size)}`];return Object.keys(e.lineHeight).length>0&&n.push(` lineHeight: ${W(e.lineHeight)}`),Object.keys(e.weight).length>0&&n.push(` weight: ${W(e.weight)}`),Object.keys(e.letterSpacing).length>0&&n.push(` letterSpacing: ${W(e.letterSpacing)}`),e.face&&n.push(` face: ${e.face}`),`const ${t} = createFont({\n${n.join(`,
5
- `)}\n});`}function Ke(e){return`# Installing Tamagui Config
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";import{getUniqueBy as p}from"@stryke/helpers/get-unique";function m(e){return e.replaceAll(`\\`,`\\\\`).replaceAll(`"`,`\\"`).replaceAll(`
2
+ `,`\\n`).replaceAll(`\r`,`\\r`)}function h(e){return typeof e==`string`?`"${m(e)}"`:typeof e==`number`||typeof e==`boolean`?String(e):e==null?`undefined`:JSON.stringify(e)}function g(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 _=/^(?:font-size|fontSize)(?:\.|$)/i,v=/^(?:font-weight|fontWeight)(?:\.|$)/i,y=/^shadow(?:\.|$)/i,b=/^inset-shadow(?:\.|$)/i,x=/^drop-shadow(?:\.|$)/i,S=/^text-shadow(?:\.|$)/i,C=/^(?:blur|blur-?radius)(?:\.|$)/i,w=new Set([`color`,`shadow`,`insetShadow`,`dropShadow`,`textShadow`]),T=[{prefix:/^(?:color|colours?|palette)(?:\.|$)/i,category:`color`},{prefix:_,category:`fontSize`},{prefix:v,category:`fontWeight`},{prefix:x,category:`dropShadow`},{prefix:b,category:`insetShadow`},{prefix:S,category:`textShadow`},{prefix:y,category:`shadow`},{prefix:C,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 E(e){return`$value`in e||`value`in e||`$ref`in e||`ref`in e}function D(e){return e===!0||e===`true`||e===1}function O(e){return D(e.palette)||D(e.$palette)?!0:te(e)===`palette`}function k(e,t){return(e===`palette`||e===`$palette`)&&(typeof t==`boolean`||typeof t==`number`||typeof t==`string`)}function A(e){return e===!0||e===`true`||e===1}function j(e){return A(e.primitive)||A(e.$primitive)?!0:te(e)===`primitive`}function M(e,t){return(e===`primitive`||e===`$primitive`)&&(typeof t==`boolean`||typeof t==`number`||typeof t==`string`)}function ee(e){if(typeof e.$description==`string`)return e.$description;if(typeof e.description==`string`)return e.description}function te(e,t){return typeof e.$type==`string`?e.$type:typeof e.type==`string`?e.type:t}function ne(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 re(e,t){for(let{prefix:t,category:n}of T)if(t.test(e))return n;if(t===`color`||t===`palette`)return`color`;if(t===`shadow`)return b.test(e)?`insetShadow`:x.test(e)?`dropShadow`:S.test(e)?`textShadow`:`shadow`;if(t===`dimension`){if(_.test(e))return`fontSize`;if(C.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`||v.test(e))return`fontWeight`}function N(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 ie(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`:N(r)}function ae(e,t,r,a,o,s){if(!i(e))return;let c=o||j(e)||O(e),l=te(e,r);if(E(e)){let r=ne(e),i=t.join(`.`),o=re(i,l)??(c||l===`primitive`||l===`palette`?`color`:void 0),u=n(r,l),d=o&&w.has(o)||l===`color`||l===`palette`||l===`primitive`||l===`shadow`?u:g(r,l);s.push({path:i,type:l===`palette`||l===`primitive`?`color`:l,value:r,cssValue:u,tamaguiValue:d,category:o,tokenKey:o?ie(i):void 0,description:ee(e),theme:a,primitive:c});return}for(let[n,r]of Object.entries(e))n.startsWith(`$`)&&n!==`$palette`&&n!==`$primitive`||k(n,r)||M(n,r)||ae(r,[...t,n],l,a,c,s)}function oe(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;ae(t.tokens,[],void 0,e,!1,r)}return n?r.filter(e=>!e.type||n.has(e.type)):r}const se=/^\{([^{}]+)\}$/,ce=/^(?:typography|type|text)$/i,le=/^(?:font|fonts|font-family|fontFamily)$/i,ue=/^(?:font-size|fontSize)$/i,de=/^(?:font-weight|fontWeight)$/i,fe=/^(?:line-height|lineHeight|leading)$/i,pe=/^(?:letter-spacing|letterSpacing|tracking)$/i,me=/^(?:[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,he=[`fontFamily`,`font-family`,`family`],ge=[`fontSize`,`font-size`,`size`],_e=[`fontWeight`,`font-weight`,`weight`],ve=[`lineHeight`,`line-height`,`leading`],ye=[`letterSpacing`,`letter-spacing`,`tracking`],be={1:12,2:14,3:16,4:18,5:20,6:24,7:28,8:32,9:40,10:48};function P(e){if(typeof e==`string`)return se.exec(e.trim())?.[1]?.trim()}function F(e,t){let n=P(e);if(!n)return e;let r=t.get(n),i=new Set([n]);for(let e=0;e<8&&r;e++){let e=P(r.value);if(!e||i.has(e))return r.value;i.add(e),r=t.get(e)}return r?.value??e}function I(e,t){for(let n of t)if(e[n]!==void 0&&e[n]!==null)return e[n]}function xe(e){return(e.split(`,`)[0]?.trim()??e).replaceAll(/^["']|["']$/g,``)}function Se(e){if(typeof e==`string`){let t=e.trim();return t.length===0||P(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 Ce(e){return Number.isInteger(e)?e:Math.round(e*1e3)/1e3}function L(e){if(e==null)return;let t=g(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 we(e){if(typeof e==`number`&&Number.isFinite(e))return String(e);if(typeof e==`string`){let t=e.trim();if(t.length===0||P(t))return;let n=Number(t);return Number.isNaN(n)?t:String(n)}let t=g(e);if(typeof t==`number`&&Number.isFinite(t))return String(t);if(typeof t==`string`&&t.length>0)return t}function Te(e,t){let n=L(e);if(n!=null)return Ce(t!=null&&n>0&&n<=4?n*t:n)}function R(e,t){return t.test(e.split(`.`)[0]??``)}function Ee(e){return e.split(`.`).filter(Boolean).at(-1)??e}function z(e,t){let n=e.split(`.`).filter(Boolean);return n[0]&&t.test(n[0])&&n.shift(),n}function B(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 V(e){switch(e.toLowerCase()){case`heading`:case`title`:case`display`:return`heading`;case`mono`:case`monospace`:case`caption`:case`code`:return`mono`;case`sans`:case`body`:case`serif`:return`body`;default:return B([e])}}function De(e){return e.role?V(e.role):V(e.name)}function Oe(e){let t=z(e,ce);if(t.length===0)return`body`;let n=t.at(-1);return n&&t.length>=2&&me.test(n)&&!n.includes(`_`)?`${B(t.slice(0,-1))}_${n}`:B(t)}function ke(e){return V(z(e,le)[0]??Ee(e))}function H(e,t){let n=z(e,t);return n.length===0||n.length===1&&/^(?:DEFAULT|default)$/i.test(n[0])?`true`:B(n)}function Ae(e){return e.type===`typography`&&i(e.value)}function je(e){return e.category===`fontSize`||e.category===`fontWeight`||Me(e)||Ne(e)||Pe(e)||Fe(e)?!1:e.type===`fontFamily`||R(e.path,le)}function Me(e){return e.category===`fontSize`||R(e.path,ue)}function Ne(e){return e.category===`fontWeight`||e.type===`fontWeight`||R(e.path,de)}function Pe(e){return R(e.path,fe)}function Fe(e){return R(e.path,pe)}function Ie(e){let t=new Map;for(let n of Object.values(e)){let e=De(n),r=t.get(e);(!r||n.role===e&&r.role!==e)&&t.set(e,n)}return t}function Le(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=xe(t).toLowerCase();return r.find(e=>f(e).toLowerCase()===i||e.title.toLowerCase()===i||e.name.toLowerCase()===i)}function Re(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: ${h(t.normal)}`),t.italic&&n.push(`italic: ${h(t.italic)}`),` ${e}: { ${n.join(`, `)} }`}).join(`,
3
+ `)}\n }`}function U(e,t){return{...e,webFamily:d(t),nativeFamily:f(t),face:t.source===`local`?Re(t):e.face}}function W(e){return{key:e,webFamily:`system-ui, sans-serif`,nativeFamily:`system-ui`,size:{},lineHeight:{},weight:{},letterSpacing:{}}}function ze(e,t){return{...e,webFamily:t,nativeFamily:xe(t)}}function Be(e,t){let n={},r=[],i={},a={};for(let o of e){if(Me(o)){let e=L(F(o.value,t));e!=null&&(n[H(o.path,ue)]=e);continue}if(Ne(o)){let e=we(F(o.value,t));e&&(i[H(o.path,de)]=e);continue}if(Fe(o)){let e=L(F(o.value,t));e!=null&&(a[H(o.path,pe)]=e);continue}Pe(o)&&r.push({key:H(o.path,fe),value:F(o.value,t)})}let o=n.true??n.base??Object.values(n)[0],s={};for(let e of r){let t=n[e.key]??o,r=Te(e.value,t);r!=null&&(s[e.key]=r)}return{size:n,lineHeight:s,weight:i,letterSpacing:a}}function G(e,t){return{...t,...e}}function K(e,t){return{...e,size:G(e.size,t.size),lineHeight:G(e.lineHeight,t.lineHeight),weight:G(e.weight,t.weight),letterSpacing:G(e.letterSpacing,t.letterSpacing)}}function Ve(e){return Object.keys(e.size).length>0?e:{...e,size:{...be}}}function He(e,t,n,r){if(!i(t.value))return e;let a=I(t.value,he),o=P(a),s=Se(F(a,n)),c=Le(r,s,o),l=e;c?l=U(l,c):s&&(l=ze(l,s));let u=L(F(I(t.value,ge),n));u!=null&&(l={...l,size:{...l.size,true:u}});let d=we(F(I(t.value,_e),n));d&&(l={...l,weight:{...l.weight,true:d}});let f=L(F(I(t.value,ye),n));f!=null&&(l={...l,letterSpacing:{...l.letterSpacing,true:f}});let p=Te(F(I(t.value,ve),n),l.size.true??u);return p!=null&&(l={...l,lineHeight:{...l.lineHeight,true:p}}),l}function Ue(e,t){let n=new Map(e.map(e=>[e.path,e])),r=Be(e,n),i=new Map,a=e=>{i.set(e.key,e)};if(t)for(let[e,n]of Ie(t))a(K(U(W(e),n),r));for(let o of e){if(!je(o)||Ae(o))continue;let e=ke(o.path),s=Se(F(o.value,n)),c=i.get(e)??W(e),l=Le(t,s,o.path),u=c;l?u=U(u,l):(s&&c.webFamily===W(e).webFamily||s&&!i.has(e))&&(u=ze(u,s)),a(K(u,r))}for(let o of e){if(!Ae(o))continue;let e=Oe(o.path);a(He(K(i.get(e)??W(e),r),o,n,t))}return p([...i.values()].map(Ve).toSorted((e,t)=>e.key.localeCompare(t.key)),e=>e.key)}function We(e){return/^\d+$/.test(e)||/^[A-Z_$][\w$]*$/i.test(e)?e:h(e)}function q(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}${We(e)}: ${h(t)}`).join(`,
4
+ `)}\n${r}}`}function Ge(e,t){let n=`${e.replaceAll(/\W/g,``)||`font${t}`}Font`;return/^[A-Z_]/i.test(n)?n:`font${t}`}function Ke(e,t){let n=h(e.webFamily),r=h(e.nativeFamily),i=[n===r?` family: ${n}`:` family: isWeb ? ${n} : ${r}`,` size: ${q(e.size)}`];return Object.keys(e.lineHeight).length>0&&i.push(` lineHeight: ${q(e.lineHeight)}`),Object.keys(e.weight).length>0&&i.push(` weight: ${q(e.weight)}`),Object.keys(e.letterSpacing).length>0&&i.push(` letterSpacing: ${q(e.letterSpacing)}`),e.face&&i.push(` face: ${e.face}`),`const ${t} = createFont({\n${i.join(`,
5
+ `)}\n});`}function qe(e){return`# Installing Tamagui Config
6
6
 
7
7
  Generated by \`@razorwind/tamagui\`.
8
8
 
@@ -48,25 +48,21 @@ 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 qe=new Set([`default`,`light`,`theme`]),Je=/^base(?:[A-Z]\w*|[._-].+)?$/i,Ye=[`base`,`gray`,`grey`,`neutral`],Xe={css:`@tamagui/config/v5-css`,rn:`@tamagui/config/v5-rn`,reanimated:`@tamagui/config/v5-reanimated`,motion:`@tamagui/config/v5-motion`};function Ze(e){return qe.has(e)}function Qe(e){return e===`dark`}function G(e,t){let n=new Map,r=t===`dark`?Qe:Ze;for(let t of e){let e=t.theme?.toLowerCase();(!e||Je.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()]}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?A([t]):e.tokenKey}return e.tokenKey??``}function rt(e){return e.category&&$e.has(e.category)&&typeof e.tamaguiValue==`number`?`px(${e.tamaguiValue})`:e.category===`dropShadow`&&typeof e.tamaguiValue==`string`?it(e.tamaguiValue):e.tamaguiValue}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={};for(let n of e){if(!n.category||n.category===`color`||!n.tokenKey)continue;let e=nt(n);if(!e)continue;let r=t[n.category]??{};r[e]=rt(n),t[n.category]=r}return t}function ot(e,t){let n={},r=(e,t)=>{let r=t.cssValue;typeof r!=`string`||r.length===0||J(r)||r===`[object Object]`||(n[e]=r)},i=e=>{let t=e.path.replace(/^color\./i,``).replaceAll(`.`,``);return e.theme?`${e.theme}_${t}`:t};for(let t of e)t.tokenKey&&(t.palette?r(i(t),t):r(t.tokenKey,t));for(let e of t)!e.tokenKey||!e.palette||r(i(e),e);return n}function K(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:m(t);return`${n}${/^[A-Z_$][\w$]*$/i.test(e)?e:m(e)}: ${r}`}).join(`,
52
- `)}\n${` `.repeat(Math.max(t-2,0))}}`}function st(e,t=2){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${n}...theme\n${r}}`:`{\n${n}...theme,\n${i.map(([e,t])=>`${n}${/^[A-Z_$][\w$]*$/i.test(e)?e:m(e)}: ${t}`).join(`,
53
- `)}\n${r}}`}const ct=/^\{([^{}]+)\}$/,lt=/^var\((--[^),\s]+)(?:\s*,[^)]*)?\)$/;function ut(e){if(typeof e==`string`)return ct.exec(e.trim())?.[1]?.trim()}function q(e){if(typeof e==`string`)return lt.exec(e.trim())?.[1]}function J(e){return ut(e)!=null||q(e)!=null}function dt(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=ut(r.value);if(e){let n=t.get(e);if(!n||n.path===r.path)return r;r=n;continue}let a=q(r.value)??q(r.cssValue)??q(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 ft(e){return/^[A-Z_$][\w$]*$/i.test(e)?`theme.${e}`:`theme[${m(e)}]`}function pt(e,t,n){let r=Y(e);if(r){if(t&&r.name.toLowerCase()===t.toLowerCase())return`color${r.step}`;if(n[r.name])return`${r.name}${r.step}`}}function mt(e){if(e>=1&&e<=12)return e;if(e>=100&&e<=900&&e%100==0)return e/100}function Y(e){let t=e.path.split(`.`).filter(Boolean),n=t.at(-1);if(n&&/^\d+$/.test(n)){let e=mt(Number(n)),r=t.at(-2);if(e!=null&&r&&!/^(?:color|colours?|palette)$/i.test(r))return{name:A([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=mt(Number(a));if(o!=null)return{name:i,step:o}}function ht(e,t,n,r){let i=e[t]??{};i[`${t}${n}`]=r,e[t]=i}function gt(e){let t={};for(let n of e){if(typeof n.tamaguiValue!=`string`)continue;let e=Y(n);e&&ht(t,e.name,e.step,n.tamaguiValue)}return Object.fromEntries(Object.entries(t).filter(([,e])=>Object.keys(e).length>=3))}function X(e){let t={};for(let n of e){if(!n.palette||typeof n.tamaguiValue!=`string`)continue;let e=Y(n);e&&ht(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:gt(e)}function Z(e,t){if(e.length<2)return[...e];let n=bt(e[0]),r=bt(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 Q(e){return e<=.04045?e/12.92:((e+.055)/1.055)**2.4}function _t(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*Q(n)+.7152*Q(r)+.0722*Q(i)}function $(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 vt(e){return e>1?e/100:e}function yt(e,t){let n=RegExp(`^${t}\\((.+)\\)$`,`i`).exec(e.trim());if(n?.[1])return n[1].split(/[\s,/]+/).filter(Boolean)}function bt(e){let t=e.trim();if(!t||t.startsWith(`var(`)||t.includes(`{`))return;let n=_t(t);if(n!=null)return n;let r=yt(t,`oklch`);if(r?.[0]){let e=$(r[0]);return e==null?void 0:vt(e)}let i=yt(t,`hsla?`);if(i?.[2]){let e=$(i[2]);return e==null?void 0:vt(e)}let a=yt(t,`rgba?`);if(a?.[0]&&a[1]&&a[2]){let e=$(a[0]),t=$(a[1]),n=$(a[2]);if(e==null||t==null||n==null)return;let r=(e,t)=>t.trim().endsWith(`%`)||e<=1?e:e/255;return .2126*Q(r(e,a[0]))+.7152*Q(r(t,a[1]))+.0722*Q(r(n,a[2]))}}function xt(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 St(e,t,n){let r=xt(e,t);if(r.length===0)return e;let i=Z(r.map(([,e])=>e),n),a={};for(let[e,[n]]of r.entries())a[`${t}${n}`]=i[e]??r[e][1];return a}function Ct(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 wt(e,t,n){let r=xt(e,t);if(!(r.length<2))return Ct(Z(r.map(([,e])=>e),n))}function Tt(e,t){let n=new Map(Object.entries(e).map(([e,t])=>[e.toLowerCase(),{name:e,scale:t}]));for(let e of Ye){let r=n.get(e);if(!r)continue;let i=wt(r.scale,r.name,t);if(i)return{name:r.name,palette:i}}}function Et(e){let t=e.filter(e=>e.category===`color`||e.palette),n=X(G(t,`light`)),r=X(G(t,`dark`)),i=Tt(n,`light`),a=Tt(r,`dark`);return{lightPalette:i?.palette,darkPalette:a?.palette,lightBaseName:i?.name,darkBaseName:a?.name}}function Dt(e,t){let n=X(e),r=new Map(e.map(e=>[e.path,e])),i=new Map(e.map(e=>[s(e.path),e])),a={};for(let o of e){if(o.category!==`color`||!o.tokenKey||o.palette||/^[A-Z]+\d{1,3}$/i.test(o.tokenKey)&&n[o.tokenKey.replace(/\d{1,3}$/,``)])continue;let e=dt(o,r,i),s=pt(e,t,n);if(s){a[o.tokenKey]=ft(s);continue}let c=e.tamaguiValue;J(c)||J(e.cssValue)||(typeof c==`string`||typeof c==`number`)&&(a[o.tokenKey]=m(c))}return a}function Ot(e,t){let n=new Set([...Object.keys(e),...Object.keys(t)]);if(n.size===0)return;let r=[];for(let i of[...n].toSorted((e,t)=>e.localeCompare(t))){let n=St(e[i]??t[i]??{},i,`light`),a=St(t[i]??e[i]??{},i,`dark`);Object.keys(n).length!==0&&Object.keys(a).length!==0&&r.push(` ${i}: {
54
- light: ${K(n,8)},
55
- dark: ${K(a,8)}
51
+ `}const Je=new Set([`default`,`light`,`theme`]),Ye=/^base(?:[A-Z]\w*|[._-].+)?$/i,Xe=[`base`,`gray`,`grey`,`neutral`],Ze={css:`@tamagui/config/v5-css`,rn:`@tamagui/config/v5-rn`,reanimated:`@tamagui/config/v5-reanimated`,motion:`@tamagui/config/v5-motion`};function Qe(e){return Je.has(e)}function $e(e){return e===`dark`}function J(e,t){let n=new Map,r=t===`dark`?$e:Qe;for(let t of e){let e=t.theme?.toLowerCase();(!e||Ye.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()]}const et=new Set([`fontSize`,`blur`]),tt=[`space`,`size`,`radius`,`zIndex`,`blur`,`fontSize`,`shadow`,`insetShadow`,`dropShadow`,`textShadow`,`boxShadow`,`fontWeight`];function nt(e){return/^px\(-?\d/.test(e)}function rt(e){if(e.category===`radius`&&e.tokenKey?.startsWith(`borderRadius`)){let t=e.tokenKey.replace(/^borderRadius/,``);return t?N([t]):e.tokenKey}return e.tokenKey??``}function it(e){return e.category&&et.has(e.category)&&typeof e.tamaguiValue==`number`?`px(${e.tamaguiValue})`:e.category===`dropShadow`&&typeof e.tamaguiValue==`string`?at(e.tamaguiValue):e.tamaguiValue}function at(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 ot(e){let t={};for(let n of e){if(!n.category||n.category===`color`||!n.tokenKey)continue;let e=rt(n);if(!e)continue;let r=t[n.category]??{};r[e]=it(n),t[n.category]=r}return t}function st(e,t){let n={},r=(e,t)=>{let r=t.cssValue;typeof r!=`string`||r.length===0||ft(r)||r===`[object Object]`||(n[e]=r)},i=e=>{let t=e.path.replace(/^color\./i,``).replaceAll(`.`,``);return e.theme?`${e.theme}_${t}`:t};for(let t of e)t.tokenKey&&(t.primitive?r(i(t),t):r(t.tokenKey,t));for(let e of t)!e.tokenKey||!e.primitive||r(i(e),e);return n}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`&&nt(t)?t:h(t);return`${n}${/^[A-Z_$][\w$]*$/i.test(e)?e:h(e)}: ${r}`}).join(`,
52
+ `)}\n${` `.repeat(Math.max(t-2,0))}}`}function ct(e,t=2){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${n}...theme\n${r}}`:`{\n${n}...theme,\n${i.map(([e,t])=>`${n}${/^[A-Z_$][\w$]*$/i.test(e)?e:h(e)}: ${t}`).join(`,
53
+ `)}\n${r}}`}const lt=/^\{([^{}]+)\}$/,ut=/^var\((--[^),\s]+)(?:\s*,[^)]*)?\)$/;function dt(e){if(typeof e==`string`)return lt.exec(e.trim())?.[1]?.trim()}function X(e){if(typeof e==`string`)return ut.exec(e.trim())?.[1]}function ft(e){return dt(e)!=null||X(e)!=null}function pt(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=dt(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 mt(e){return/^[A-Z_$][\w$]*$/i.test(e)?`theme.${e}`:`theme[${h(e)}]`}function ht(e,t,n){let r=_t(e);if(r){if(t&&r.name.toLowerCase()===t.toLowerCase())return`color${r.step}`;if(n[r.name])return`${r.name}${r.step}`}}function gt(e){if(e>=1&&e<=12)return e;if(e>=100&&e<=900&&e%100==0)return e/100}function _t(e){let t=e.path.split(`.`).filter(Boolean),n=t.at(-1);if(n&&/^\d+$/.test(n)){let e=gt(Number(n)),r=t.at(-2);if(e!=null&&r&&!/^(?:color|colours?|palette)$/i.test(r))return{name:N([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=gt(Number(a));if(o!=null)return{name:i,step:o}}function vt(e,t,n,r){let i=e[t]??{};i[`${t}${n}`]=r,e[t]=i}function yt(e){let t={};for(let n of e){if(typeof n.tamaguiValue!=`string`)continue;let e=_t(n);e&&vt(t,e.name,e.step,n.tamaguiValue)}return Object.fromEntries(Object.entries(t).filter(([,e])=>Object.keys(e).length>=3))}function Z(e){let t={};for(let n of e){if(!n.primitive||typeof n.tamaguiValue!=`string`)continue;let e=_t(n);e&&vt(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:yt(e)}function bt(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 Q(e){return e<=.04045?e/12.92:((e+.055)/1.055)**2.4}function xt(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*Q(n)+.7152*Q(r)+.0722*Q(i)}function $(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 St(e){return e>1?e/100:e}function Ct(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=xt(t);if(n!=null)return n;let r=Ct(t,`oklch`);if(r?.[0]){let e=$(r[0]);return e==null?void 0:St(e)}let i=Ct(t,`hsla?`);if(i?.[2]){let e=$(i[2]);return e==null?void 0:St(e)}let a=Ct(t,`rgba?`);if(a?.[0]&&a[1]&&a[2]){let e=$(a[0]),t=$(a[1]),n=$(a[2]);if(e==null||t==null||n==null)return;let r=(e,t)=>t.trim().endsWith(`%`)||e<=1?e:e/255;return .2126*Q(r(e,a[0]))+.7152*Q(r(t,a[1]))+.0722*Q(r(n,a[2]))}}function Tt(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 Et(e,t,n){let r=Tt(e,t);if(r.length===0)return e;let i=bt(r.map(([,e])=>e),n),a={};for(let[e,[n]]of r.entries())a[`${t}${n}`]=i[e]??r[e][1];return a}function Dt(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 Ot(e,t,n){let r=Tt(e,t);if(!(r.length<2))return Dt(bt(r.map(([,e])=>e),n))}function kt(e,t){let n=new Map(Object.entries(e).map(([e,t])=>[e.toLowerCase(),{name:e,scale:t}]));for(let e of Xe){let r=n.get(e);if(!r)continue;let i=Ot(r.scale,r.name,t);if(i)return{name:r.name,palette:i}}}function At(e){let t=e.filter(e=>e.category===`color`||e.primitive),n=Z(J(t,`light`)),r=Z(J(t,`dark`)),i=kt(n,`light`),a=kt(r,`dark`);return{lightPalette:i?.palette,darkPalette:a?.palette,lightBaseName:i?.name,darkBaseName:a?.name}}function jt(e,t){let n=Z(e),r=new Map(e.map(e=>[e.path,e])),i=new Map(e.map(e=>[s(e.path),e])),a={};for(let o of e){if(o.category!==`color`||!o.tokenKey||o.primitive||/^[A-Z]+\d{1,3}$/i.test(o.tokenKey)&&n[o.tokenKey.replace(/\d{1,3}$/,``)])continue;let e=pt(o,r,i),s=ht(e,t,n);if(s){a[o.tokenKey]=mt(s);continue}let c=e.tamaguiValue;ft(c)||ft(e.cssValue)||(typeof c==`string`||typeof c==`number`)&&(a[o.tokenKey]=h(c))}return a}function Mt(e,t){let n=new Set([...Object.keys(e),...Object.keys(t)]);if(n.size===0)return;let r=[];for(let i of[...n].toSorted((e,t)=>e.localeCompare(t))){let n=Et(e[i]??t[i]??{},i,`light`),a=Et(t[i]??e[i]??{},i,`dark`);Object.keys(n).length!==0&&Object.keys(a).length!==0&&r.push(` ${i}: {
54
+ light: ${Y(n,8)},
55
+ dark: ${Y(a,8)}
56
56
  }`)}if(r.length!==0)return`{\n${r.join(`,
57
- `)}\n }`}function kt(e,t={},n){let r=t.useDefaultConfig!==!1,i=t.animations??`css`,a=t.includeTypeAugmentation!==!1,o=e.filter(e=>e.category===`color`),s=G(o,`light`),c=G(o,`dark`),l=X(s),u=X(c.length>0?c:s),{lightPalette:d,darkPalette:f,lightBaseName:p,darkBaseName:h}=Et(e),g=Ot(l,u),_=Dt(s,p),v=Dt(c.length>0?c:s,c.length>0?h:p),y=at(G(e,`light`)),b=ot(s,c),x=[];Object.keys(b).length>0&&x.push(` color: ${K(b,4)}`);for(let e of et){let t=y[e];t&&Object.keys(t).length>0&&x.push(` ${e}: ${K(t,4)}`)}let S=[];d&&S.push(` lightPalette: ${m(d)}`),f&&S.push(` darkPalette: ${m(f)}`),g&&S.push(` childrenThemes: ${g}`),(Object.keys(_).length>0||Object.keys(v).length>0)&&S.push(` getTheme: ({ theme, scheme }: Parameters<CreateV5ThemeOptions["getTheme"]>[0]) => {
57
+ `)}\n }`}function Nt(e){let t=new Set;for(let n of e)for(let e of Object.values(n)){for(let n of e.matchAll(/theme\.([A-Z_$][\w$]*)/gi))n[1]&&t.add(n[1]);for(let n of e.matchAll(/theme\[(['"])(.+?)\1\]/g))t.add(n[2])}return[...t]}function Pt(e,t){let n=new Set;for(let r of[e,t])for(let e of Object.values(r))for(let t of Object.keys(e))n.add(t);return[...n]}function Ft(e,t){let n=Math.max(e?.length??0,t?.length??0);if(n===0)return[];let r=[];for(let e=1;e<=Math.min(n,12);e++)r.push(`color${e}`);return r}function It(e){let t=new Set;for(let n of Object.keys(e.lightSemantic))t.add(n);for(let n of Object.keys(e.darkSemantic))t.add(n);for(let n of Nt([e.lightSemantic,e.darkSemantic]))t.add(n);for(let n of Pt(e.lightScales,e.darkScales))t.add(n);for(let n of Ft(e.lightPalette,e.darkPalette))t.add(n);return[...t].toSorted((e,t)=>e.localeCompare(t,void 0,{numeric:!0}))}function Lt(e){return` ${/^[A-Z_$][\w$]*$/i.test(e)?e:h(e)}: string;`}function Rt(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(Lt),`}`,``]}function zt(e,t,n={}){let r=e.fonts??{},i=n.useDefaultConfig!==!1,a=n.animations??`css`,o=n.includeTypeAugmentation!==!1,s=t.filter(e=>e.category===`color`),c=J(s,`light`),l=J(s,`dark`),u=Z(c),d=Z(l.length>0?l:c),{lightPalette:f,darkPalette:p,lightBaseName:m,darkBaseName:g}=At(t),_=Mt(u,d),v=jt(c,m),y=jt(l.length>0?l:c,l.length>0?g:m),b=Rt(It({lightSemantic:v,darkSemantic:y,lightScales:u,darkScales:d,lightPalette:f,darkPalette:p}),{specName:e.name}),x=b?`AppTheme`:`Record<string, string>`,S=ot(J(t,`light`)),C=st(c,l),w=[];Object.keys(C).length>0&&w.push(` color: ${Y(C,4)}`);for(let e of tt){let t=S[e];t&&Object.keys(t).length>0&&w.push(` ${e}: ${Y(t,4)}`)}let T=[];f&&T.push(` lightPalette: ${h(f)}`),p&&T.push(` darkPalette: ${h(p)}`),_&&T.push(` childrenThemes: ${_}`),(Object.keys(v).length>0||Object.keys(y).length>0)&&T.push(` getTheme: ({ theme, scheme }: { theme: ${x}; scheme: "light" | "dark" }) => {
58
58
  return scheme === "dark"
59
- ? ${st(v,8)}
60
- : ${st(_,8)};
61
- }`);let C=[`import { isWeb } from '@tamagui/constants';`];r?C.push(`import { createV5Theme, defaultConfig, type CreateV5ThemeOptions } from "@tamagui/config/v5";`):C.push(`import { createV5Theme, type CreateV5ThemeOptions } from "@tamagui/config/v5";`),i!==!1&&C.push(`import { animations } from "${Xe[i]}";`);let w=[`createTamagui`,`px`];x.length>0&&w.push(`createTokens`);let T=He(G(e,`light`),n);T.length>0&&w.push(`createFont`),C.push(`import { ${w.join(`, `)} } from "@tamagui/core";`);let E=[`/* eslint-disable */`,``,`/*`,` * Generated by @razorwind/tamagui — Do not edit by hand.`,` * `,` * @see https://tamagui.dev/docs/core/config-v5`,` */`,``,...C,``];x.length>0&&E.push(`const tokens = createTokens({`,x.join(`,
62
- `),`});`,``);let D=S.length>0?`createV5Theme({\n${S.join(`,
63
- `)}\n})`:`createV5Theme()`;E.push(`const themes = ${D};`,``);let O=new Map;if(T.length>0)for(let[e,t]of T.entries()){let n=We(t.key,e);O.set(t.key,n),E.push(Ge(t,n),``)}let k=[];if(r&&k.push(` ...defaultConfig`),i!==!1&&k.push(` animations`),x.length>0&&(r?k.push(` tokens: {
59
+ ? ${ct(y,8)}
60
+ : ${ct(v,8)};
61
+ }`);let E=[`import { isWeb } from '@tamagui/constants';`];i?E.push(`import { createV5Theme, defaultConfig, type CreateV5ThemeOptions } from "@tamagui/config/v5";`):E.push(`import { createV5Theme, type CreateV5ThemeOptions } from "@tamagui/config/v5";`),a!==!1&&E.push(`import { animations } from "${Ze[a]}";`);let D=[`createTamagui`,`px`];w.length>0&&D.push(`createTokens`);let O=Ue(J(t,`light`),r);O.length>0&&D.push(`createFont`),E.push(`import { ${D.join(`, `)} } from "@tamagui/core";`);let k=[`/* eslint-disable */`,``,`/*`,` * Generated by @razorwind/tamagui — Do not edit by hand.`,` * `,` * @see https://tamagui.dev/docs/core/config-v5`,` */`,``,...E,``];w.length>0&&k.push(`const tokens = createTokens({`,w.join(`,
62
+ `),`});`,``);let A=T.length>0?`createV5Theme({\n${T.join(`,
63
+ `)}\n})`:`createV5Theme()`;k.push(`const themes = ${A};`,``);let j=new Map;if(O.length>0)for(let[e,t]of O.entries()){let n=Ge(t.key,e);j.set(t.key,n),k.push(Ke(t,n),``)}let M=[];if(i&&M.push(` ...defaultConfig`),a!==!1&&M.push(` animations`),w.length>0&&(i?M.push(` tokens: {
64
64
  ...defaultConfig.tokens,
65
65
  ...tokens,
66
- color: {
67
- ...defaultConfig.tokens.color,
68
- ...tokens.color
69
- },
70
66
  space: {
71
67
  ...defaultConfig.tokens.space,
72
68
  ...tokens.space
@@ -83,14 +79,24 @@ Re-run Razorwind generate when tokens change so \`${e.outputPath}\` stays aligne
83
79
  ...defaultConfig.tokens.zIndex,
84
80
  ...tokens.zIndex
85
81
  }
86
- }`):k.push(` tokens`)),k.push(` themes`),O.size>0){let e=[...O.entries()].map(([e,t])=>` ${/^[A-Z_$][\w$]*$/i.test(e)?e:m(e)}: ${t}`);r?k.push(` fonts: {
82
+ }`):M.push(` tokens`)),M.push(` themes`),j.size>0){let e=[...j.entries()].map(([e,t])=>` ${/^[A-Z_$][\w$]*$/i.test(e)?e:h(e)}: ${t}`);i?M.push(` fonts: {
87
83
  ...defaultConfig.fonts,
88
84
  ${e.join(`,
89
85
  `)}
90
- }`):k.push(` fonts: {
86
+ }`):M.push(` fonts: {
91
87
  ${e.join(`,
92
88
  `)}
93
- }`)}return E.push(`export const config = createTamagui({`,k.join(`,
94
- `),`});`,``,`export type AppConfig = typeof config;`,``),a&&E.push(`declare module "@tamagui/core" {`,` // eslint-disable-next-line @typescript-eslint/no-empty-object-type`,` interface TamaguiCustomConfig extends AppConfig {}`,`}`,``),E.push(`export default config;`,``),E.join(`
95
- `)}function At(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?ae(e.tokens,n):[];if(a.length===0&&!i)return{};let o=n.outputPath??`tamagui.config.ts`,s=kt(a,n,e.fonts),c=n.installGuide??Ke({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 jt=e(e=>({name:`tamagui`,themeGeneration:`combined`,generate:async t=>At(t,e??{})}));export{X as collectColorScales,He as collectTamaguiFonts,bt as colorLightness,jt as default,ae as flattenTokens,We as fontVarName,n as formatTokenValue,At as generateTamaguiConfig,D as isPaletteGroup,Z as orderPaletteForScheme,Ke as renderInstallMd,kt as renderTamaguiConfig,ne as resolveTokenCategory,a as resolveTokenSets,R as tamaguiFontKeyFromRole,A as toCamelCaseKey,o as toCssVar,h as toTamaguiValue,re as toTokenKey,De as typographyFontKey};
89
+ }`)}return n.shorthands&&M.push(` shorthands: ${Y(n.shorthands,4)}`),n.media&&M.push(` media: ${h(n.media)}`),M.push(` selectionStyles(theme: ${x}) {
90
+ return {
91
+ backgroundColor: theme.color.background.primary,
92
+ color: theme.color.text.primary
93
+ };
94
+ } `),n.defaultFont&&M.push(` defaultFont: ${h(n.defaultFont)}`),k.push(``,...b??[],`/**
95
+ * The Tamagui v5 config for the ${e.name||`design system`}.
96
+ *
97
+ * @see https://tamagui.dev/docs/core/config-v5
98
+ */
99
+ export const config = createTamagui({`,M.join(`,
100
+ `),`});`,``,`export type AppConfig = typeof config;`,``),o&&k.push(`declare module "@tamagui/core" {`,` // eslint-disable-next-line @typescript-eslint/no-empty-object-type`,` interface TamaguiCustomConfig extends AppConfig {}`,`}`,``),k.push(`export default config;`,``),k.join(`
101
+ `)}function Bt(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?oe(e.tokens,n):[];if(a.length===0&&!i)return{};let o=n.outputPath??`tamagui.config.ts`,s=zt(e,a,n),c=n.installGuide??qe({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 Vt=e(e=>({name:`tamagui`,themeGeneration:`combined`,generate:async t=>Bt(t,e??{})}));export{Z as collectColorScales,Ue as collectTamaguiFonts,wt as colorLightness,Vt as default,oe as flattenTokens,Ge as fontVarName,n as formatTokenValue,Bt as generateTamaguiConfig,O as isPaletteGroup,bt as orderPaletteForScheme,qe as renderInstallMd,zt as renderTamaguiConfig,re as resolveTokenCategory,a as resolveTokenSets,V as tamaguiFontKeyFromRole,N as toCamelCaseKey,o as toCssVar,g as toTamaguiValue,ie as toTokenKey,Oe as typographyFontKey};
96
102
  //# sourceMappingURL=index.mjs.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@razorwind/tamagui",
3
- "version": "0.0.41",
3
+ "version": "0.0.42",
4
4
  "type": "module",
5
5
  "description": "Razorwind plugin that creates Tamagui theme tokens from Razorwind design tokens.",
6
6
  "repository": {
@@ -85,8 +85,9 @@
85
85
  "dependencies": {
86
86
  "@power-plant/core": "^0.0.90",
87
87
  "@power-plant/dtcg-schema": "^0.0.1",
88
- "@razorwind/core": "^0.0.52",
88
+ "@razorwind/core": "^0.0.53",
89
89
  "@stryke/type-checks": "^0.6.41",
90
+ "@stryke/helpers": "^0.10.48",
90
91
  "@stryke/string-format": "^0.17.50"
91
92
  },
92
93
  "peerDependencies": {
@@ -105,5 +106,5 @@
105
106
  "typescript": "^6.0.3"
106
107
  },
107
108
  "publishConfig": { "access": "public" },
108
- "gitHead": "a72e2fb9b29f96e4f2c2241f622e56e6929f6dc9"
109
+ "gitHead": "715b431b64aad787ba61ad7ed70c8633869460f0"
109
110
  }