@razorwind/tamagui 0.0.41 → 0.0.43
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 +26 -25
- package/dist/index.d.cts +24 -5
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts +24 -5
- package/dist/index.mjs +26 -25
- package/package.json +4 -3
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
|
|
2
|
-
`,`\\n`).replaceAll(`\r`,`\\r`)}function
|
|
3
|
-
`)}\n }`}function
|
|
4
|
-
`)}\n${r}}`}function
|
|
5
|
-
`)}\n});`}function
|
|
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:C(e)===`palette`}function te(e,t){return(e===`palette`||e===`$palette`)&&(typeof t==`boolean`||typeof t==`number`||typeof t==`string`)}function y(e){return e===!0||e===`true`||e===1}function b(e){return y(e.primitive)||y(e.$primitive)?!0:C(e)===`primitive`}function x(e,t){return(e===`primitive`||e===`$primitive`)&&(typeof t==`boolean`||typeof t==`number`||typeof t==`string`)}function S(e){if(typeof e.$description==`string`)return e.$description;if(typeof e.description==`string`)return e.description}function C(e,t){return typeof e.$type==`string`?e.$type:typeof e.type==`string`?e.type:t}function w(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 T(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 E(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 D(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`:E(r)}function O(e,n,r,i,a,o){if(!(0,t.isObject)(e))return;let c=a||b(e)||v(e),l=C(e,r);if(g(e)){let r=w(e),a=n.join(`.`),u=T(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?D(a):void 0,description:S(e),theme:i,primitive:c});return}for(let[t,r]of Object.entries(e))t.startsWith(`$`)&&t!==`$palette`&&t!==`$primitive`||te(t,r)||x(t,r)||O(r,[...n,t],l,i,c,o)}function k(e,n={}){let r=n.includeTypes?new Set(n.includeTypes):void 0,i=[];for(let n of(0,t.resolveTokenSets)(e)){let e=n.id==="default"?void 0:n.id;O(n.tokens,[],void 0,e,!1,i)}return r?i.filter(e=>!e.type||r.has(e.type)):i}const ne=/^\{([^{}]+)\}$/,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 ne.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 Pe(e,t){return{...e,webFamily:(0,r.cssFontFamily)(t),nativeFamily:(0,r.fontFamilyName)(t),face:t.source===`local`?Ne(t):e.face}}function z(e){return{key:e,webFamily:`system-ui, sans-serif`,nativeFamily:`system-ui`,size:{},lineHeight:{},weight:{},letterSpacing:{}}}function Fe(e,t){return{...e,webFamily:t,nativeFamily:ge(t)}}function Ie(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 B(e,t){return{...t,...e}}function V(e,t){return{...e,size:B(e.size,t.size),lineHeight:B(e.lineHeight,t.lineHeight),weight:B(e.weight,t.weight),letterSpacing:B(e.letterSpacing,t.letterSpacing)}}function Le(e){return Object.keys(e.size).length>0?e:{...e,size:{...he}}}function Re(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=Pe(l,c):s&&(l=Fe(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 ze(e,t){let n=new Map(e.map(e=>[e.path,e])),r=Ie(e,n),a=new Map,o=e=>{a.set(e.key,e)};if(t)for(let[e,n]of je(t))o(V(Pe(z(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)??z(e),l=Me(t,s,i.path),u=c;l?u=Pe(u,l):(s&&c.webFamily===z(e).webFamily||s&&!a.has(e))&&(u=Fe(u,s)),o(V(u,r))}for(let i of e){if(!Te(i))continue;let e=Ce(i.path);o(Re(V(a.get(e)??z(e),r),i,n,t))}return(0,i.getUniqueBy)([...a.values()].map(Le).toSorted((e,t)=>e.key.localeCompare(t.key)),e=>e.key)}function Be(e){return/^\d+$/.test(e)||/^[A-Z_$][\w$]*$/i.test(e)?e:o(e)}function H(e,t=4){let n=` `.repeat(t),r=` `.repeat(Math.max(t-2,0)),i=Object.entries(e).toSorted(([e],[t])=>e.localeCompare(t,void 0,{numeric:!0}));return i.length===0?`{}`:`{\n${i.map(([e,t])=>`${n}${Be(e)}: ${o(t)}`).join(`,
|
|
4
|
+
`)}\n${r}}`}function Ve(e,t){let n=`${e.replaceAll(/\W/g,``)||`font${t}`}Font`;return/^[A-Z_]/i.test(n)?n:`font${t}`}function He(e,t){let n=o(e.webFamily),r=o(e.nativeFamily),i=[n===r?` family: ${n}`:` family: isWeb ? ${n} : ${r}`,` size: ${H(e.size)}`];return Object.keys(e.lineHeight).length>0&&i.push(` lineHeight: ${H(e.lineHeight)}`),Object.keys(e.weight).length>0&&i.push(` weight: ${H(e.weight)}`),Object.keys(e.letterSpacing).length>0&&i.push(` letterSpacing: ${H(e.letterSpacing)}`),e.face&&i.push(` face: ${e.face}`),`const ${t} = createFont({\n${i.join(`,
|
|
5
|
+
`)}\n});`}function Ue(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
|
|
52
|
-
`)}\n${` `.repeat(Math.max(t-2,0))}}`}function
|
|
53
|
-
`)}\n${r}}`}const
|
|
54
|
-
light: ${
|
|
55
|
-
dark: ${
|
|
51
|
+
`}const We=new Set([`default`,`light`,`theme`]),Ge=/^base(?:[A-Z]\w*|[._-].+)?$/i,Ke=[`base`,`gray`,`grey`,`neutral`],qe={css:`@tamagui/config/v5-css`,rn:`@tamagui/config/v5-rn`,reanimated:`@tamagui/config/v5-reanimated`,motion:`@tamagui/config/v5-motion`};function Je(e){return We.has(e)}function Ye(e){return e===`dark`}function U(e,t){let n=new Map,r=t===`dark`?Ye:Je;for(let t of e){let e=t.theme?.toLowerCase();(!e||Ge.test(e))&&n.set(t.path,t)}for(let t of e){let e=t.theme?.toLowerCase();e&&r(e)&&n.set(t.path,t)}return[...n.values()]}const Xe=new Set([`fontSize`,`blur`]),Ze=[`space`,`size`,`radius`,`zIndex`,`blur`,`fontSize`,`shadow`,`insetShadow`,`dropShadow`,`textShadow`,`boxShadow`,`fontWeight`];function Qe(e){return/^px\(-?\d/.test(e)}function $e(e){if(e.category===`radius`&&e.tokenKey?.startsWith(`borderRadius`)){let t=e.tokenKey.replace(/^borderRadius/,``);return t?E([t]):e.tokenKey}return e.tokenKey??``}function et(e){return e.category&&Xe.has(e.category)&&typeof e.tamaguiValue==`number`?`px(${e.tamaguiValue})`:e.category===`dropShadow`&&typeof e.tamaguiValue==`string`?tt(e.tamaguiValue):e.tamaguiValue}function tt(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 nt(e){let t={};for(let n of e){if(!n.category||n.category===`color`||!n.tokenKey)continue;let e=$e(n);if(!e)continue;let r=t[n.category]??{};r[e]=et(n),t[n.category]=r}return t}function rt(e,t){let n={},r=(e,t)=>{let r=t.cssValue;typeof r!=`string`||r.length===0||K(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 W(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`&&Qe(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 it(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 at=/^\{([^{}]+)\}$/,ot=/^var\((--[^),\s]+)(?:\s*,[^)]*)?\)$/;function st(e){if(typeof e==`string`)return at.exec(e.trim())?.[1]?.trim()}function G(e){if(typeof e==`string`)return ot.exec(e.trim())?.[1]}function K(e){return st(e)!=null||G(e)!=null}function ct(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=st(r.value);if(e){let n=t.get(e);if(!n||n.path===r.path)return r;r=n;continue}let a=G(r.value)??G(r.cssValue)??G(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 lt(e){return/^[A-Z_$][\w$]*$/i.test(e)?`theme.${e}`:`theme[${o(e)}]`}function ut(e,t,n){let r=q(e);if(r){if(t&&r.name.toLowerCase()===t.toLowerCase())return`color${r.step}`;if(n[r.name])return`${r.name}${r.step}`}}function dt(e){if(e>=1&&e<=12)return e;if(e>=100&&e<=900&&e%100==0)return e/100}function q(e){let t=e.path.split(`.`).filter(Boolean),n=t.at(-1);if(n&&/^\d+$/.test(n)){let e=dt(Number(n)),r=t.at(-2);if(e!=null&&r&&!/^(?:color|colours?|palette)$/i.test(r))return{name:E([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=dt(Number(a));if(o!=null)return{name:i,step:o}}function ft(e,t,n,r){let i=e[t]??{};i[`${t}${n}`]=r,e[t]=i}function pt(e){let t={};for(let n of e){if(typeof n.tamaguiValue!=`string`)continue;let e=q(n);e&&ft(t,e.name,e.step,n.tamaguiValue)}return Object.fromEntries(Object.entries(t).filter(([,e])=>Object.keys(e).length>=3))}function J(e){let t={};for(let n of e){if(!n.primitive||typeof n.tamaguiValue!=`string`)continue;let e=q(n);e&&ft(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:pt(e)}function Y(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 X(e){return e<=.04045?e/12.92:((e+.055)/1.055)**2.4}function mt(e){let t=e.startsWith(`#`)?e.slice(1):``;if((t.length===3||t.length===4)&&(t=[...t].map(e=>e+e).join(``)),t.length===8&&(t=t.slice(0,6)),t.length!==6||/[^0-9a-f]/i.test(t))return;let n=Number.parseInt(t.slice(0,2),16)/255,r=Number.parseInt(t.slice(2,4),16)/255,i=Number.parseInt(t.slice(4,6),16)/255;return .2126*X(n)+.7152*X(r)+.0722*X(i)}function Z(e){let t=e.trim();if(t.endsWith(`%`)){let e=Number.parseFloat(t);return Number.isFinite(e)?e/100:void 0}let n=Number.parseFloat(t);return Number.isFinite(n)?n:void 0}function ht(e){return e>1?e/100:e}function Q(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=mt(t);if(n!=null)return n;let r=Q(t,`oklch`);if(r?.[0]){let e=Z(r[0]);return e==null?void 0:ht(e)}let i=Q(t,`hsla?`);if(i?.[2]){let e=Z(i[2]);return e==null?void 0:ht(e)}let a=Q(t,`rgba?`);if(a?.[0]&&a[1]&&a[2]){let e=Z(a[0]),t=Z(a[1]),n=Z(a[2]);if(e==null||t==null||n==null)return;let r=(e,t)=>t.trim().endsWith(`%`)||e<=1?e:e/255;return .2126*X(r(e,a[0]))+.7152*X(r(t,a[1]))+.0722*X(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=Y(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(Y(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 Ke){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=J(U(t,`light`)),r=J(U(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=J(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=ct(t,i,a),c=ut(e,n,r);if(c){s[t.tokenKey]=lt(c);continue}let l=e.tamaguiValue;K(l)||K(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: ${W(n,8)},
|
|
55
|
+
dark: ${W(a,8)}
|
|
56
56
|
}`)}if(r.length!==0)return`{\n${r.join(`,
|
|
57
|
-
`)}\n }`}function
|
|
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=U(c,`light`),u=U(c,`dark`),d=J(l),f=J(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),te=kt(Dt({lightSemantic:_,darkSemantic:v,lightScales:d,darkScales:f,lightPalette:p,darkPalette:m}),{specName:e.name}),y=nt(U(t,`light`)),b=rt(l,u),x=[];Object.keys(b).length>0&&x.push(` color: ${W(b,4)}`);for(let e of Ze){let t=y[e];t&&Object.keys(t).length>0&&x.push(` ${e}: ${W(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: any; scheme: "light" | "dark" }) => {
|
|
58
58
|
return scheme === "dark"
|
|
59
|
-
? ${
|
|
60
|
-
: ${
|
|
61
|
-
}`);let
|
|
62
|
-
`),`});`,``);let
|
|
63
|
-
`)}\n})`:`createV5Theme()`;
|
|
59
|
+
? ${it(v,8)}
|
|
60
|
+
: ${it(_,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 "${qe[a]}";`),n.importConfig&&C.push(`import userConfig from "${n.importConfig}";`);let w=[`createTamagui`,`px`];x.length>0&&w.push(`createTokens`);let T=ze(U(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=Ve(t.key,e);O.set(t.key,n),E.push(He(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,18 @@ Re-run Razorwind generate when tokens change so \`${e.outputPath}\` stays aligne
|
|
|
83
79
|
...defaultConfig.tokens.zIndex,
|
|
84
80
|
...tokens.zIndex
|
|
85
81
|
}
|
|
86
|
-
}`):
|
|
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
|
-
}`):
|
|
86
|
+
}`):k.push(` fonts: {
|
|
91
87
|
${e.join(`,
|
|
92
88
|
`)}
|
|
93
|
-
}`)}return
|
|
94
|
-
|
|
95
|
-
|
|
89
|
+
}`)}return n.shorthands&&k.push(` shorthands: ${W(n.shorthands,4)}`),n.media&&k.push(` media: ${o(n.media)}`),n.defaultFont&&k.push(` defaultFont: ${o(n.defaultFont)}`),E.push(``,...te??[],`/**
|
|
90
|
+
* The Tamagui v5 config for the ${e.name||`design system`}.
|
|
91
|
+
*
|
|
92
|
+
* @see https://tamagui.dev/docs/core/config-v5
|
|
93
|
+
*/
|
|
94
|
+
export const config = createTamagui({`,k.join(`,
|
|
95
|
+
`),n.importConfig?`, ...userConfig `:``,`});`,``,`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(`
|
|
96
|
+
`)}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?k(e.tokens,r):[];if(o.length===0&&!a)return{};let s=r.outputPath??`tamagui.config.ts`,c=At(e,o,r),l=r.installGuide??Ue({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=J,exports.collectTamaguiFonts=ze,exports.colorLightness=$,exports.default=Mt,exports.flattenTokens=k,exports.fontVarName=Ve,Object.defineProperty(exports,"formatTokenValue",{enumerable:!0,get:function(){return t.formatTokenValue}}),exports.generateTamaguiConfig=jt,exports.isPaletteGroup=v,exports.orderPaletteForScheme=Y,exports.renderInstallMd=Ue,exports.renderTamaguiConfig=At,exports.resolveTokenCategory=T,exports.resolveTokenSets=t.resolveTokenSets,exports.tamaguiFontKeyFromRole=L,exports.toCamelCaseKey=E,Object.defineProperty(exports,"toCssVar",{enumerable:!0,get:function(){return t.toCssVar}}),exports.toTamaguiValue=s,exports.toTokenKey=D,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,26 @@ 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;
|
|
53
|
+
/**
|
|
54
|
+
* A module to import config from to include in the generated config.
|
|
55
|
+
*/
|
|
56
|
+
importConfig?: string;
|
|
36
57
|
/**
|
|
37
58
|
* When true, spread `defaultConfig` from `@tamagui/config/v5` and merge
|
|
38
59
|
* generated tokens/themes on top. When false, emit a minimal config from
|
|
@@ -82,11 +103,9 @@ interface FlatToken {
|
|
|
82
103
|
/** Theme / set id when tokens are a `Record<string, Tokens>`. */
|
|
83
104
|
theme?: string;
|
|
84
105
|
/**
|
|
85
|
-
* True when an ancestor group is marked as a
|
|
86
|
-
* `$type: "palette"`). Those scales feed Tamagui `childrenThemes` /
|
|
87
|
-
* `lightPalette` / `darkPalette`.
|
|
106
|
+
* 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
107
|
*/
|
|
89
|
-
|
|
108
|
+
primitive?: boolean;
|
|
90
109
|
}
|
|
91
110
|
//#endregion
|
|
92
111
|
//#region src/flatten.d.ts
|
|
@@ -214,7 +233,7 @@ declare function colorLightness(color: string): number | undefined;
|
|
|
214
233
|
* @see https://tamagui.dev/docs/core/config-v5
|
|
215
234
|
* @see https://tamagui.dev/docs/core/font-language#font-tokens
|
|
216
235
|
*/
|
|
217
|
-
declare function renderTamaguiConfig(tokens: FlatToken[], options?: TamaguiPluginOptions
|
|
236
|
+
declare function renderTamaguiConfig(spec: Schema, tokens: FlatToken[], options?: TamaguiPluginOptions): string;
|
|
218
237
|
/**
|
|
219
238
|
* Generate a Tamagui v5 config file from a Razorwind schema.
|
|
220
239
|
*/
|
package/dist/index.d.cts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.cts","names":[],"sources":["../src/types.ts","../src/flatten.ts","../src/fonts.ts","../src/format.ts","../src/install.ts","../src/generate.ts","../src/index.ts"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.cts","names":[],"sources":["../src/types.ts","../src/flatten.ts","../src/fonts.ts","../src/format.ts","../src/install.ts","../src/generate.ts","../src/index.ts"],"mappings":";;;;;;;;;;;KA0BY;;;;KAMA;;;;UAkBK;;;;;;;;;EASf;;;;;;;EAQA,aAAa;;;;;;EAOb,aAAa;;;;;;EAOb,QAAQ;;;;EAKR;;;;EAKA;;;;;;;;EASA;;;;;EAMA,eAAe;;;;;;;EAQf;;;;;EAMA;;;;;UAMe;;EAEf;;EAEA,OAAO;;EAEP;;EAEA;;EAEA;;EAEA,WAAW;;EAEX;;EAEA;;EAEA;;;;EAIA;;;;;;;;;iBC3Dc,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;;;;iBA+PK,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,26 @@ 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;
|
|
53
|
+
/**
|
|
54
|
+
* A module to import config from to include in the generated config.
|
|
55
|
+
*/
|
|
56
|
+
importConfig?: string;
|
|
36
57
|
/**
|
|
37
58
|
* When true, spread `defaultConfig` from `@tamagui/config/v5` and merge
|
|
38
59
|
* generated tokens/themes on top. When false, emit a minimal config from
|
|
@@ -82,11 +103,9 @@ interface FlatToken {
|
|
|
82
103
|
/** Theme / set id when tokens are a `Record<string, Tokens>`. */
|
|
83
104
|
theme?: string;
|
|
84
105
|
/**
|
|
85
|
-
* True when an ancestor group is marked as a
|
|
86
|
-
* `$type: "palette"`). Those scales feed Tamagui `childrenThemes` /
|
|
87
|
-
* `lightPalette` / `darkPalette`.
|
|
106
|
+
* 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
107
|
*/
|
|
89
|
-
|
|
108
|
+
primitive?: boolean;
|
|
90
109
|
}
|
|
91
110
|
//#endregion
|
|
92
111
|
//#region src/flatten.d.ts
|
|
@@ -214,7 +233,7 @@ declare function colorLightness(color: string): number | undefined;
|
|
|
214
233
|
* @see https://tamagui.dev/docs/core/config-v5
|
|
215
234
|
* @see https://tamagui.dev/docs/core/font-language#font-tokens
|
|
216
235
|
*/
|
|
217
|
-
declare function renderTamaguiConfig(tokens: FlatToken[], options?: TamaguiPluginOptions
|
|
236
|
+
declare function renderTamaguiConfig(spec: Schema, tokens: FlatToken[], options?: TamaguiPluginOptions): string;
|
|
218
237
|
/**
|
|
219
238
|
* Generate a Tamagui v5 config file from a Razorwind schema.
|
|
220
239
|
*/
|
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
|
|
2
|
-
`,`\\n`).replaceAll(`\r`,`\\r`)}function
|
|
3
|
-
`)}\n }`}function
|
|
4
|
-
`)}\n${r}}`}function
|
|
5
|
-
`)}\n});`}function
|
|
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:re(e)===`palette`}function ee(e,t){return(e===`palette`||e===`$palette`)&&(typeof t==`boolean`||typeof t==`number`||typeof t==`string`)}function k(e){return e===!0||e===`true`||e===1}function A(e){return k(e.primitive)||k(e.$primitive)?!0:re(e)===`primitive`}function te(e,t){return(e===`primitive`||e===`$primitive`)&&(typeof t==`boolean`||typeof t==`number`||typeof t==`string`)}function ne(e){if(typeof e.$description==`string`)return e.$description;if(typeof e.description==`string`)return e.description}function re(e,t){return typeof e.$type==`string`?e.$type:typeof e.type==`string`?e.type:t}function ie(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 ae(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 j(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 oe(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`:j(r)}function se(e,t,r,a,o,s){if(!i(e))return;let c=o||A(e)||O(e),l=re(e,r);if(E(e)){let r=ie(e),i=t.join(`.`),o=ae(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?oe(i):void 0,description:ne(e),theme:a,primitive:c});return}for(let[n,r]of Object.entries(e))n.startsWith(`$`)&&n!==`$palette`&&n!==`$primitive`||ee(n,r)||te(n,r)||se(r,[...t,n],l,a,c,s)}function ce(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;se(t.tokens,[],void 0,e,!1,r)}return n?r.filter(e=>!e.type||n.has(e.type)):r}const le=/^\{([^{}]+)\}$/,ue=/^(?:typography|type|text)$/i,de=/^(?:font|fonts|font-family|fontFamily)$/i,fe=/^(?:font-size|fontSize)$/i,pe=/^(?:font-weight|fontWeight)$/i,me=/^(?:line-height|lineHeight|leading)$/i,he=/^(?:letter-spacing|letterSpacing|tracking)$/i,ge=/^(?:[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,_e=[`fontFamily`,`font-family`,`family`],ve=[`fontSize`,`font-size`,`size`],ye=[`fontWeight`,`font-weight`,`weight`],be=[`lineHeight`,`line-height`,`leading`],xe=[`letterSpacing`,`letter-spacing`,`tracking`],Se={1:12,2:14,3:16,4:18,5:20,6:24,7:28,8:32,9:40,10:48};function M(e){if(typeof e==`string`)return le.exec(e.trim())?.[1]?.trim()}function N(e,t){let n=M(e);if(!n)return e;let r=t.get(n),i=new Set([n]);for(let e=0;e<8&&r;e++){let e=M(r.value);if(!e||i.has(e))return r.value;i.add(e),r=t.get(e)}return r?.value??e}function P(e,t){for(let n of t)if(e[n]!==void 0&&e[n]!==null)return e[n]}function Ce(e){return(e.split(`,`)[0]?.trim()??e).replaceAll(/^["']|["']$/g,``)}function we(e){if(typeof e==`string`){let t=e.trim();return t.length===0||M(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 Te(e){return Number.isInteger(e)?e:Math.round(e*1e3)/1e3}function F(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 Ee(e){if(typeof e==`number`&&Number.isFinite(e))return String(e);if(typeof e==`string`){let t=e.trim();if(t.length===0||M(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 De(e,t){let n=F(e);if(n!=null)return Te(t!=null&&n>0&&n<=4?n*t:n)}function I(e,t){return t.test(e.split(`.`)[0]??``)}function Oe(e){return e.split(`.`).filter(Boolean).at(-1)??e}function L(e,t){let n=e.split(`.`).filter(Boolean);return n[0]&&t.test(n[0])&&n.shift(),n}function R(e){let t=e.flatMap(e=>e.split(`-`)).filter(Boolean);return t.length===0?`body`:t.map((e,t)=>t===0?`${e.charAt(0).toLowerCase()}${e.slice(1)}`:`${e.charAt(0).toUpperCase()}${e.slice(1)}`).join(``)}function z(e){switch(e.toLowerCase()){case`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 R([e])}}function ke(e){return e.role?z(e.role):z(e.name)}function Ae(e){let t=L(e,ue);if(t.length===0)return`body`;let n=t.at(-1);return n&&t.length>=2&&ge.test(n)&&!n.includes(`_`)?`${R(t.slice(0,-1))}_${n}`:R(t)}function je(e){return z(L(e,de)[0]??Oe(e))}function B(e,t){let n=L(e,t);return n.length===0||n.length===1&&/^(?:DEFAULT|default)$/i.test(n[0])?`true`:R(n)}function Me(e){return e.type===`typography`&&i(e.value)}function Ne(e){return e.category===`fontSize`||e.category===`fontWeight`||Pe(e)||Fe(e)||Ie(e)||Le(e)?!1:e.type===`fontFamily`||I(e.path,de)}function Pe(e){return e.category===`fontSize`||I(e.path,fe)}function Fe(e){return e.category===`fontWeight`||e.type===`fontWeight`||I(e.path,pe)}function Ie(e){return I(e.path,me)}function Le(e){return I(e.path,he)}function Re(e){let t=new Map;for(let n of Object.values(e)){let e=ke(n),r=t.get(e);(!r||n.role===e&&r.role!==e)&&t.set(e,n)}return t}function ze(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=Ce(t).toLowerCase();return r.find(e=>f(e).toLowerCase()===i||e.title.toLowerCase()===i||e.name.toLowerCase()===i)}function Be(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 V(e,t){return{...e,webFamily:d(t),nativeFamily:f(t),face:t.source===`local`?Be(t):e.face}}function H(e){return{key:e,webFamily:`system-ui, sans-serif`,nativeFamily:`system-ui`,size:{},lineHeight:{},weight:{},letterSpacing:{}}}function Ve(e,t){return{...e,webFamily:t,nativeFamily:Ce(t)}}function He(e,t){let n={},r=[],i={},a={};for(let o of e){if(Pe(o)){let e=F(N(o.value,t));e!=null&&(n[B(o.path,fe)]=e);continue}if(Fe(o)){let e=Ee(N(o.value,t));e&&(i[B(o.path,pe)]=e);continue}if(Le(o)){let e=F(N(o.value,t));e!=null&&(a[B(o.path,he)]=e);continue}Ie(o)&&r.push({key:B(o.path,me),value:N(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=De(e.value,t);r!=null&&(s[e.key]=r)}return{size:n,lineHeight:s,weight:i,letterSpacing:a}}function U(e,t){return{...t,...e}}function W(e,t){return{...e,size:U(e.size,t.size),lineHeight:U(e.lineHeight,t.lineHeight),weight:U(e.weight,t.weight),letterSpacing:U(e.letterSpacing,t.letterSpacing)}}function Ue(e){return Object.keys(e.size).length>0?e:{...e,size:{...Se}}}function We(e,t,n,r){if(!i(t.value))return e;let a=P(t.value,_e),o=M(a),s=we(N(a,n)),c=ze(r,s,o),l=e;c?l=V(l,c):s&&(l=Ve(l,s));let u=F(N(P(t.value,ve),n));u!=null&&(l={...l,size:{...l.size,true:u}});let d=Ee(N(P(t.value,ye),n));d&&(l={...l,weight:{...l.weight,true:d}});let f=F(N(P(t.value,xe),n));f!=null&&(l={...l,letterSpacing:{...l.letterSpacing,true:f}});let p=De(N(P(t.value,be),n),l.size.true??u);return p!=null&&(l={...l,lineHeight:{...l.lineHeight,true:p}}),l}function Ge(e,t){let n=new Map(e.map(e=>[e.path,e])),r=He(e,n),i=new Map,a=e=>{i.set(e.key,e)};if(t)for(let[e,n]of Re(t))a(W(V(H(e),n),r));for(let o of e){if(!Ne(o)||Me(o))continue;let e=je(o.path),s=we(N(o.value,n)),c=i.get(e)??H(e),l=ze(t,s,o.path),u=c;l?u=V(u,l):(s&&c.webFamily===H(e).webFamily||s&&!i.has(e))&&(u=Ve(u,s)),a(W(u,r))}for(let o of e){if(!Me(o))continue;let e=Ae(o.path);a(We(W(i.get(e)??H(e),r),o,n,t))}return p([...i.values()].map(Ue).toSorted((e,t)=>e.key.localeCompare(t.key)),e=>e.key)}function Ke(e){return/^\d+$/.test(e)||/^[A-Z_$][\w$]*$/i.test(e)?e:h(e)}function G(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}${Ke(e)}: ${h(t)}`).join(`,
|
|
4
|
+
`)}\n${r}}`}function qe(e,t){let n=`${e.replaceAll(/\W/g,``)||`font${t}`}Font`;return/^[A-Z_]/i.test(n)?n:`font${t}`}function Je(e,t){let n=h(e.webFamily),r=h(e.nativeFamily),i=[n===r?` family: ${n}`:` family: isWeb ? ${n} : ${r}`,` size: ${G(e.size)}`];return Object.keys(e.lineHeight).length>0&&i.push(` lineHeight: ${G(e.lineHeight)}`),Object.keys(e.weight).length>0&&i.push(` weight: ${G(e.weight)}`),Object.keys(e.letterSpacing).length>0&&i.push(` letterSpacing: ${G(e.letterSpacing)}`),e.face&&i.push(` face: ${e.face}`),`const ${t} = createFont({\n${i.join(`,
|
|
5
|
+
`)}\n});`}function Ye(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
|
|
52
|
-
`)}\n${` `.repeat(Math.max(t-2,0))}}`}function
|
|
53
|
-
`)}\n${r}}`}const
|
|
54
|
-
light: ${
|
|
55
|
-
dark: ${
|
|
51
|
+
`}const Xe=new Set([`default`,`light`,`theme`]),Ze=/^base(?:[A-Z]\w*|[._-].+)?$/i,Qe=[`base`,`gray`,`grey`,`neutral`],$e={css:`@tamagui/config/v5-css`,rn:`@tamagui/config/v5-rn`,reanimated:`@tamagui/config/v5-reanimated`,motion:`@tamagui/config/v5-motion`};function et(e){return Xe.has(e)}function tt(e){return e===`dark`}function K(e,t){let n=new Map,r=t===`dark`?tt:et;for(let t of e){let e=t.theme?.toLowerCase();(!e||Ze.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 nt=new Set([`fontSize`,`blur`]),rt=[`space`,`size`,`radius`,`zIndex`,`blur`,`fontSize`,`shadow`,`insetShadow`,`dropShadow`,`textShadow`,`boxShadow`,`fontWeight`];function it(e){return/^px\(-?\d/.test(e)}function at(e){if(e.category===`radius`&&e.tokenKey?.startsWith(`borderRadius`)){let t=e.tokenKey.replace(/^borderRadius/,``);return t?j([t]):e.tokenKey}return e.tokenKey??``}function ot(e){return e.category&&nt.has(e.category)&&typeof e.tamaguiValue==`number`?`px(${e.tamaguiValue})`:e.category===`dropShadow`&&typeof e.tamaguiValue==`string`?st(e.tamaguiValue):e.tamaguiValue}function st(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 ct(e){let t={};for(let n of e){if(!n.category||n.category===`color`||!n.tokenKey)continue;let e=at(n);if(!e)continue;let r=t[n.category]??{};r[e]=ot(n),t[n.category]=r}return t}function lt(e,t){let n={},r=(e,t)=>{let r=t.cssValue;typeof r!=`string`||r.length===0||Y(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 q(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`&&it(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 ut(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 dt=/^\{([^{}]+)\}$/,ft=/^var\((--[^),\s]+)(?:\s*,[^)]*)?\)$/;function pt(e){if(typeof e==`string`)return dt.exec(e.trim())?.[1]?.trim()}function J(e){if(typeof e==`string`)return ft.exec(e.trim())?.[1]}function Y(e){return pt(e)!=null||J(e)!=null}function mt(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=pt(r.value);if(e){let n=t.get(e);if(!n||n.path===r.path)return r;r=n;continue}let a=J(r.value)??J(r.cssValue)??J(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 ht(e){return/^[A-Z_$][\w$]*$/i.test(e)?`theme.${e}`:`theme[${h(e)}]`}function gt(e,t,n){let r=X(e);if(r){if(t&&r.name.toLowerCase()===t.toLowerCase())return`color${r.step}`;if(n[r.name])return`${r.name}${r.step}`}}function _t(e){if(e>=1&&e<=12)return e;if(e>=100&&e<=900&&e%100==0)return e/100}function X(e){let t=e.path.split(`.`).filter(Boolean),n=t.at(-1);if(n&&/^\d+$/.test(n)){let e=_t(Number(n)),r=t.at(-2);if(e!=null&&r&&!/^(?:color|colours?|palette)$/i.test(r))return{name:j([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=_t(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=X(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=X(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 Qe){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(K(t,`light`)),r=Z(K(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=mt(o,r,i),s=gt(e,t,n);if(s){a[o.tokenKey]=ht(s);continue}let c=e.tamaguiValue;Y(c)||Y(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: ${q(n,8)},
|
|
55
|
+
dark: ${q(a,8)}
|
|
56
56
|
}`)}if(r.length!==0)return`{\n${r.join(`,
|
|
57
|
-
`)}\n }`}function
|
|
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=K(s,`light`),l=K(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=ct(K(t,`light`)),S=lt(c,l),C=[];Object.keys(S).length>0&&C.push(` color: ${q(S,4)}`);for(let e of rt){let t=x[e];t&&Object.keys(t).length>0&&C.push(` ${e}: ${q(t,4)}`)}let w=[];f&&w.push(` lightPalette: ${h(f)}`),p&&w.push(` darkPalette: ${h(p)}`),_&&w.push(` childrenThemes: ${_}`),(Object.keys(v).length>0||Object.keys(y).length>0)&&w.push(` getTheme: ({ theme, scheme }: { theme: any; scheme: "light" | "dark" }) => {
|
|
58
58
|
return scheme === "dark"
|
|
59
|
-
? ${
|
|
60
|
-
: ${
|
|
61
|
-
}`);let
|
|
62
|
-
`),`});`,``);let
|
|
63
|
-
`)}\n})`:`createV5Theme()`;
|
|
59
|
+
? ${ut(y,8)}
|
|
60
|
+
: ${ut(v,8)};
|
|
61
|
+
}`);let T=[`import { isWeb } from '@tamagui/constants';`];i?T.push(`import { createV5Theme, defaultConfig, type CreateV5ThemeOptions } from "@tamagui/config/v5";`):T.push(`import { createV5Theme, type CreateV5ThemeOptions } from "@tamagui/config/v5";`),a!==!1&&T.push(`import { animations } from "${$e[a]}";`),n.importConfig&&T.push(`import userConfig from "${n.importConfig}";`);let E=[`createTamagui`,`px`];C.length>0&&E.push(`createTokens`);let D=Ge(K(t,`light`),r);D.length>0&&E.push(`createFont`),T.push(`import { ${E.join(`, `)} } from "@tamagui/core";`);let O=[`/* eslint-disable */`,``,`/*`,` * Generated by @razorwind/tamagui — Do not edit by hand.`,` * `,` * @see https://tamagui.dev/docs/core/config-v5`,` */`,``,...T,``];C.length>0&&O.push(`const tokens = createTokens({`,C.join(`,
|
|
62
|
+
`),`});`,``);let ee=w.length>0?`createV5Theme({\n${w.join(`,
|
|
63
|
+
`)}\n})`:`createV5Theme()`;O.push(`const themes = ${ee};`,``);let k=new Map;if(D.length>0)for(let[e,t]of D.entries()){let n=qe(t.key,e);k.set(t.key,n),O.push(Je(t,n),``)}let A=[];if(i&&A.push(` ...defaultConfig`),a!==!1&&A.push(` animations`),C.length>0&&(i?A.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,19 @@ Re-run Razorwind generate when tokens change so \`${e.outputPath}\` stays aligne
|
|
|
83
79
|
...defaultConfig.tokens.zIndex,
|
|
84
80
|
...tokens.zIndex
|
|
85
81
|
}
|
|
86
|
-
}`):
|
|
82
|
+
}`):A.push(` tokens`)),A.push(` themes`),k.size>0){let e=[...k.entries()].map(([e,t])=>` ${/^[A-Z_$][\w$]*$/i.test(e)?e:h(e)}: ${t}`);i?A.push(` fonts: {
|
|
87
83
|
...defaultConfig.fonts,
|
|
88
84
|
${e.join(`,
|
|
89
85
|
`)}
|
|
90
|
-
}`):
|
|
86
|
+
}`):A.push(` fonts: {
|
|
91
87
|
${e.join(`,
|
|
92
88
|
`)}
|
|
93
|
-
}`)}return
|
|
94
|
-
|
|
95
|
-
|
|
89
|
+
}`)}return n.shorthands&&A.push(` shorthands: ${q(n.shorthands,4)}`),n.media&&A.push(` media: ${h(n.media)}`),n.defaultFont&&A.push(` defaultFont: ${h(n.defaultFont)}`),O.push(``,...b??[],`/**
|
|
90
|
+
* The Tamagui v5 config for the ${e.name||`design system`}.
|
|
91
|
+
*
|
|
92
|
+
* @see https://tamagui.dev/docs/core/config-v5
|
|
93
|
+
*/
|
|
94
|
+
export const config = createTamagui({`,A.join(`,
|
|
95
|
+
`),n.importConfig?`, ...userConfig `:``,`});`,``,`export type AppConfig = typeof config;`,``),o&&O.push(`declare module "@tamagui/core" {`,` // eslint-disable-next-line @typescript-eslint/no-empty-object-type`,` interface TamaguiCustomConfig extends AppConfig {}`,`}`,``),O.push(`export default config;`,``),O.join(`
|
|
96
|
+
`)}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?ce(e.tokens,n):[];if(a.length===0&&!i)return{};let o=n.outputPath??`tamagui.config.ts`,s=zt(e,a,n),c=n.installGuide??Ye({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,Ge as collectTamaguiFonts,wt as colorLightness,Vt as default,ce as flattenTokens,qe as fontVarName,n as formatTokenValue,Bt as generateTamaguiConfig,O as isPaletteGroup,bt as orderPaletteForScheme,Ye as renderInstallMd,zt as renderTamaguiConfig,ae as resolveTokenCategory,a as resolveTokenSets,z as tamaguiFontKeyFromRole,j as toCamelCaseKey,o as toCssVar,g as toTamaguiValue,oe as toTokenKey,Ae as typographyFontKey};
|
|
96
97
|
//# sourceMappingURL=index.mjs.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@razorwind/tamagui",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.43",
|
|
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.
|
|
88
|
+
"@razorwind/core": "^0.0.54",
|
|
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": "
|
|
109
|
+
"gitHead": "7a1d011f9b9716e3580fc01fd34abef701c02e3f"
|
|
109
110
|
}
|