@razorwind/tamagui 0.0.45 → 0.0.46
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 +22 -22
- package/dist/index.d.cts +17 -8
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts +17 -8
- package/dist/index.mjs +18 -18
- package/package.json +2 -2
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")
|
|
2
|
-
`,`\\n`).replaceAll(`\r`,`\\r`)}function
|
|
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:
|
|
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");function i(e){return e.replaceAll(`\\`,`\\\\`).replaceAll(`"`,`\\"`).replaceAll(`
|
|
2
|
+
`,`\\n`).replaceAll(`\r`,`\\r`)}function a(e){return typeof e==`string`?`"${i(e)}"`:typeof e==`number`||typeof e==`boolean`?String(e):e==null?`undefined`:JSON.stringify(e)}function o(e,n){if(typeof e==`number`)return e;if(typeof e==`boolean`)return Number(e);if((0,t.isObject)(e)&&typeof e.value==`number`&&typeof e.unit==`string`){let t=e.unit.toLowerCase();return t===`px`||t===``?e.value:t===`rem`?e.value*16:`${e.value}${e.unit}`}if(typeof e==`string`){let t=/^(-?\d+(?:\.\d+)?)px$/i.exec(e.trim());if(t)return Number(t[1]);let n=/^(-?\d+(?:\.\d+)?)rem$/i.exec(e.trim());if(n)return Number(n[1])*16;let r=Number(e);return!Number.isNaN(r)&&e.trim()!==``?r:e}return(0,t.formatTokenValue)(e,n)}const s=/^(?:font-size|fontSize)(?:\.|$)/i,c=/^(?:font-weight|fontWeight)(?:\.|$)/i,l=/^shadow(?:\.|$)/i,u=/^inset-shadow(?:\.|$)/i,d=/^drop-shadow(?:\.|$)/i,f=/^text-shadow(?:\.|$)/i,p=/^(?:blur|blur-?radius)(?:\.|$)/i,m=new Set([`color`,`shadow`,`insetShadow`,`dropShadow`,`textShadow`]),h=[{prefix:/^(?:color|colours?|palette)(?:\.|$)/i,category:`color`},{prefix:s,category:`fontSize`},{prefix:c,category:`fontWeight`},{prefix:d,category:`dropShadow`},{prefix:u,category:`insetShadow`},{prefix:f,category:`textShadow`},{prefix:l,category:`shadow`},{prefix:p,category:`blur`},{prefix:/^(?:space|spacing|gap)(?:\.|$)/i,category:`space`},{prefix:/^inset(?:\.|$)/i,category:`space`},{prefix:/^(?:size|sizing)(?:\.|$)/i,category:`size`},{prefix:/^(?:radius|rounded|radii)(?:\.|$)/i,category:`radius`},{prefix:/^(?:z-?index|zindex|elevation)(?:\.|$)/i,category:`zIndex`}];function g(e){return`$value`in e||`value`in e||`$ref`in e||`ref`in e}function _(e){return e===!0||e===`true`||e===1}function v(e){return _(e.palette)||_(e.$palette)?!0:C(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 ee(e){return b(e.primitive)||b(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 h)if(t.test(e))return n;if(t===`color`||t===`palette`)return`color`;if(t===`shadow`)return u.test(e)?`insetShadow`:d.test(e)?`dropShadow`:f.test(e)?`textShadow`:`shadow`;if(t===`dimension`){if(s.test(e))return`fontSize`;if(p.test(e))return`blur`;if(/(?:^|\.)(?:space|spacing|gap)(?:\.|$)/i.test(e)||/(?:^|\.)inset(?:\.|$)/i.test(e))return`space`;if(/radius|rounded/i.test(e))return`radius`;if(/z-?index|elevation/i.test(e))return`zIndex`;if(/(?:^|\.)(?:size|sizing)(?:\.|$)/i.test(e)||/(?:^|\.)(?:width|height)(?:\.|$)/i.test(e))return`size`}if(t===`number`&&/z-?index|elevation/i.test(e))return`zIndex`;if(t===`fontWeight`||c.test(e))return`fontWeight`}function 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,s){if(!(0,t.isObject)(e))return;let c=a||ee(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&&m.has(u)||l===`color`||l===`palette`||l===`primitive`||l===`shadow`?d:o(r,l);s.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`||y(t,r)||x(t,r)||O(r,[...n,t],l,i,c,s)}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 A=/^\{([^{}]+)\}$/,te=/^(?: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 j(e){if(typeof e==`string`)return A.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 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||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 ge(e){return Number.isInteger(e)?e:Math.round(e*1e3)/1e3}function P(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||j(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=P(e);if(n!=null)return ge(t!=null&&n>0&&n<=4?n*t:n)}function F(e,t){return t.test(e.split(`.`)[0]??``)}function ye(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`sans`:case`body`:case`serif`:return`body`;case`monospace`:case`mono`:return`mono`;default:return L([e])}}function be(e){return e.role?R(e.role):R(e.name)}function xe(e){let t=I(e,te);if(t.length===0)return`body`;let n=t.at(-1);return n&&t.length>=2&&se.test(n)&&!n.includes(`_`)?`${t.slice(0,-1).join(`-`)}_${n}`:t.join(`-`)}function Se(e){return R(I(e,ne)[0]??ye(e))}function Ce(e,t){let n=I(e,t);return n.length===0||n.length===1&&/^(?:DEFAULT|default)$/i.test(n[0])?`true`:L(n)}function we(e){return e.type===`typography`&&(0,t.isObject)(e.value)}function Te(e){return e.category===`fontSize`||e.category===`fontWeight`||Ee(e)||De(e)||Oe(e)||ke(e)?!1:e.type===`fontFamily`||F(e.path,ne)}function Ee(e){return e.category===`fontSize`||F(e.path,re)}function De(e){return e.category===`fontWeight`||e.type===`fontWeight`||F(e.path,ie)}function Oe(e){return F(e.path,ae)}function ke(e){return F(e.path,oe)}function Ae(e,t){if(!e.has(t))return t;let n=2,r=`${t}${n}`;for(;e.has(r);)n++,r=`${t}${n}`;return r}function je(e){let t=new Map;for(let n of Object.values(e)){let e=be(n);t.has(e)&&(e=Ae(t,L([n.name]))),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=me(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: ${a(t.normal)}`),t.italic&&n.push(`italic: ${a(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:me(t)}}const Fe=/^(?:font-size|fontSize|font-weight|fontWeight|line-height|lineHeight|leading|letter-spacing|letterSpacing|tracking)$/i;function V(e,t){let n={true:e},r=j(t);if(!r)return n;let i=Ce(r,Fe);return i&&i!==`true`&&(n[i]=e),n}function Ie(e){return Object.keys(e.size).length>0?e:{...e,size:{...pe}}}function Le(e,n,r,i){if(!(0,t.isObject)(n.value))return e;let a=N(n.value,ce),o=j(a),s=he(M(a,r)),c=Me(i,s,o),l=e;c?l=z(l,c):s&&(l=Pe(l,s));let u=N(n.value,le),d=P(M(u,r));d!=null&&(l={...l,size:V(d,u)});let f=N(n.value,ue),p=_e(M(f,r));p&&(l={...l,weight:V(p,f)});let m=N(n.value,fe),h=P(M(m,r));h!=null&&(l={...l,letterSpacing:V(h,m)});let g=N(n.value,de),_=ve(M(g,r),l.size.true??d);return _!=null&&(l={...l,lineHeight:V(_,g)}),Re(l)}function Re(e){let t=Object.keys(e.size);if(t.length===0)return e;let n=e=>{let n=e.true??Object.values(e)[0];if(n==null)return e;let r={...e};for(let e of t)r[e]??=n;return r};return{...e,lineHeight:Object.keys(e.lineHeight).length>0?n(e.lineHeight):e.lineHeight,weight:Object.keys(e.weight).length>0?n(e.weight):e.weight,letterSpacing:Object.keys(e.letterSpacing).length>0?n(e.letterSpacing):e.letterSpacing}}function ze(e,t){let n=new Map(e.map(e=>[e.path,e])),r=new Map,i=e=>{r.set(e.key,e)};if(t)for(let[e,n]of je(t))i(z(B(e),n));for(let a of e){if(!Te(a)||we(a))continue;let e=Se(a.path),o=he(M(a.value,n)),s=r.get(e)??B(e),c=Me(t,o,a.path),l=s;c?l=z(l,c):(o&&s.webFamily===B(e).webFamily||o&&!r.has(e))&&(l=Pe(l,o)),i(l)}for(let a of e){if(!we(a))continue;let e=xe(a.path);i(Le(r.get(e)??B(e),a,n,t))}return[...r.values()].map(Ie).toSorted((e,t)=>e.key.localeCompare(t.key))}function Be(e){return/^\d+$/.test(e)||/^[A-Z_$][\w$]*$/i.test(e)?e:a(e)}function H(e,t=4){let n=` `.repeat(t),r=` `.repeat(Math.max(t-2,0)),i=Object.entries(e).toSorted(([e],[t])=>e.localeCompare(t,void 0,{numeric:!0}));return i.length===0?`{}`:`{\n${i.map(([e,t])=>`${n}${Be(e)}: ${a(t)}`).join(`,
|
|
4
|
+
`)}\n${r}}`}function Ve(e,t){let n=`${e.split(`-`).filter(Boolean).map((e,t)=>t===0?e:`${e.charAt(0).toUpperCase()}${e.slice(1)}`).join(``).replaceAll(/[^\w$]/g,``)||`font${t}`}Font`;return/^[A-Z_$]/i.test(n)?n:`font${t}`}function He(e,t){let n=a(e.webFamily),r=a(e.nativeFamily),i=[n===r?` family: ${n}`:` family: isWeb ? ${n} : ${r}`,` size: ${H(e.size)}`];return Object.keys(e.lineHeight).length>0&&i.push(` lineHeight: ${H(e.lineHeight)}`),Object.keys(e.weight).length>0&&i.push(` weight: ${H(e.weight)}`),Object.keys(e.letterSpacing).length>0&&i.push(` letterSpacing: ${H(e.letterSpacing)}`),e.face&&i.push(` face: ${e.face}`),`const ${t} = createFont({\n${i.join(`,
|
|
5
|
+
`)}\n});`}function Ue(e){return`# Installing Tamagui Config
|
|
6
6
|
|
|
7
7
|
Generated by \`@razorwind/tamagui\`.
|
|
8
8
|
|
|
@@ -48,19 +48,19 @@ 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,t){if(e.category&&Xe.has(e.category)&&typeof e.tamaguiValue==`number`)return`px(${e.tamaguiValue})`;if(typeof e.tamaguiValue==`string`){let n=pt(e.tamaguiValue,t);return e.category===`dropShadow`?tt(n):n}return 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={},n=lt(e);for(let r of e){if(!r.category||r.category===`color`||!r.tokenKey)continue;let e=$e(r);if(!e)continue;let i=et(r,n);if(typeof i==`string`&&dt(i))continue;let a=t[r.category]??{};a[e]=i,t[r.category]=a}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:a(t);return`${n}${/^[A-Z_$][\w$]*$/i.test(e)?e:a(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:a(e)}: ${t}`).join(`,
|
|
53
|
+
`)}\n${r}}`}const at=/^\{([^{}]+)\}$/,ot=/\{([^{}]+)\}/g,st=/^var\((--[^),\s]+)(?:\s*,[^)]*)?\)$/,ct=/var\((--[^),\s]+)(?:\s*,[^)]*)?\)/g;function lt(e){return{byPath:new Map(e.map(e=>[e.path,e])),byCssVar:new Map(e.map(e=>[(0,t.toThemeCssVar)(e.path),e]))}}function ut(e){if(typeof e==`string`)return at.exec(e.trim())?.[1]?.trim()}function G(e){if(typeof e==`string`)return st.exec(e.trim())?.[1]}function K(e){return ut(e)!=null||G(e)!=null}function dt(e){return/var\(|\{[^{}]+\}/.test(e)}function ft(e,t){let n=mt(e,t.byPath,t.byCssVar);if(n.category!=null&&n.category!==`color`)return;let r=[n.cssValue,n.tamaguiValue];for(let e of r)if(typeof e==`string`&&e.length>0&&!K(e))return e}function pt(e,t){return e.replace(ot,(e,n)=>{let r=t.byPath.get(n.trim());return r?ft(r,t)??e:e}).replace(ct,(e,n)=>{let r=t.byCssVar.get(n);return r?ft(r,t)??e:e})}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=ut(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 ht(e){return/^[A-Z_$][\w$]*$/i.test(e)?`theme.${e}`:`theme[${a(e)}]`}function gt(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 _t(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=_t(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=_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=q(n);e&&vt(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&&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 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 bt(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 xt(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=bt(t);if(n!=null)return n;let r=Q(t,`oklch`);if(r?.[0]){let e=Z(r[0]);return e==null?void 0:xt(e)}let i=Q(t,`hsla?`);if(i?.[2]){let e=Z(i[2]);return e==null?void 0:xt(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 St(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 Ct(e,t,n){let r=St(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 wt(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 Tt(e,t,n){let r=St(e,t);if(!(r.length<2))return wt(Y(r.map(([,e])=>e),n))}function Et(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=Tt(r.scale,r.name,t);if(i)return{name:r.name,palette:i}}}function Dt(e){let t=e.filter(e=>e.category===`color`||e.primitive),n=J(U(t,`light`)),r=J(U(t,`dark`)),i=Et(n,`light`),a=Et(r,`dark`);return{lightPalette:i?.palette,darkPalette:a?.palette,lightBaseName:i?.name,darkBaseName:a?.name}}function Ot(e,t){let n=J(e),{byPath:r,byCssVar:i}=lt(e),o={};for(let s of e){if(s.category!==`color`||!s.tokenKey||s.primitive||/^[A-Z]+\d{1,3}$/i.test(s.tokenKey)&&n[s.tokenKey.replace(/\d{1,3}$/,``)])continue;let e=mt(s,r,i),c=gt(e,t,n);if(c){o[s.tokenKey]=ht(c);continue}let l=e.tamaguiValue;K(l)||K(e.cssValue)||(typeof l==`string`||typeof l==`number`)&&(o[s.tokenKey]=a(l))}return o}function kt(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=Ct(e[i]??t[i]??{},i,`light`),a=Ct(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 At(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 jt(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 Mt(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 Nt(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 At([e.lightSemantic,e.darkSemantic]))t.add(n);for(let n of jt(e.lightScales,e.darkScales))t.add(n);for(let n of Mt(e.lightPalette,e.darkPalette))t.add(n);return[...t].toSorted((e,t)=>e.localeCompare(t,void 0,{numeric:!0}))}function Pt(e){return` ${/^[A-Z_$][\w$]*$/i.test(e)?e:
|
|
57
|
+
`)}\n }`}function At(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 jt(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 Mt(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 Nt(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 At([e.lightSemantic,e.darkSemantic]))t.add(n);for(let n of jt(e.lightScales,e.darkScales))t.add(n);for(let n of Mt(e.lightPalette,e.darkPalette))t.add(n);return[...t].toSorted((e,t)=>e.localeCompare(t,void 0,{numeric:!0}))}function Pt(e){return` ${/^[A-Z_$][\w$]*$/i.test(e)?e:a(e)}: string;`}function Ft(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(Pt),`}`,``]}function It(e,t,n={}){let r=e.fonts??{},i=n.useDefaultConfig===!0,o=n.animations??`css`,s=n.includeTypeAugmentation!==!1,c=t.filter(e=>e.category===`color`),l=U(c,`light`),u=U(c,`dark`),d=J(l),f=J(u.length>0?u:l),{lightPalette:p,darkPalette:m,lightBaseName:h,darkBaseName:g}=Dt(t),_=kt(d,f),v=Ot(l,h),y=Ot(u.length>0?u:l,u.length>0?g:h),b=Ft(Nt({lightSemantic:v,darkSemantic:y,lightScales:d,darkScales:f,lightPalette:p,darkPalette:m}),{specName:e.name}),ee=nt(U(t,`light`)),x=rt(l,u),S=[];Object.keys(x).length>0&&S.push(` color: ${W(x,4)}`);for(let e of Ze){let t=ee[e];t&&Object.keys(t).length>0&&S.push(` ${e}: ${W(t,4)}`)}let C=[];p&&C.push(` lightPalette: ${a(p)}`),m&&C.push(` darkPalette: ${a(m)}`),_&&C.push(` childrenThemes: ${_}`),(Object.keys(v).length>0||Object.keys(y).length>0)&&C.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(y,8)}
|
|
60
|
+
: ${it(v,8)};
|
|
61
|
+
}`);let w=[`import { isWeb } from '@tamagui/constants';`];i?w.push(`import { createV5Theme, defaultConfig, type CreateV5ThemeOptions } from "@tamagui/config/v5";`):w.push(`import { createV5Theme, type CreateV5ThemeOptions } from "@tamagui/config/v5";`),o!==!1&&w.push(`import { animations } from "${qe[o]}";`),n.importConfig&&w.push(`import userConfig from "${n.importConfig}";`);let T=[`createTamagui`,`px`];S.length>0&&T.push(`createTokens`);let E=ze(t,r);E.length>0&&T.push(`createFont`),w.push(`import { ${T.join(`, `)} } from "@tamagui/core";`);let D=[`/* eslint-disable */`,``,`/*`,` * Generated by @razorwind/tamagui — Do not edit by hand.`,` * `,` * @see https://tamagui.dev/docs/core/config-v5`,` */`,``,...w,``];S.length>0&&D.push(`const tokens = createTokens({`,S.join(`,
|
|
62
|
+
`),`});`,``);let O=C.length>0?`createV5Theme({\n${C.join(`,
|
|
63
|
+
`)}\n})`:`createV5Theme()`;D.push(`const themes = ${O};`,``);let k=new Map;if(E.length>0)for(let[e,t]of E.entries()){let n=Ve(t.key,e);k.set(t.key,n),D.push(He(t,n),``)}let A=[];if(i&&A.push(` ...defaultConfig`),o!==!1&&A.push(` animations`),S.length>0&&(i?A.push(` tokens: {
|
|
64
64
|
...defaultConfig.tokens,
|
|
65
65
|
...tokens,
|
|
66
66
|
space: {
|
|
@@ -79,18 +79,18 @@ Re-run Razorwind generate when tokens change so \`${e.outputPath}\` stays aligne
|
|
|
79
79
|
...defaultConfig.tokens.zIndex,
|
|
80
80
|
...tokens.zIndex
|
|
81
81
|
}
|
|
82
|
-
}`):
|
|
82
|
+
}`):A.push(` tokens`)),A.push(` themes`),k.size>0){let e=[...k.entries()].map(([e,t])=>` ${/^[A-Z_$][\w$]*$/i.test(e)?e:a(e)}: ${t}`);i?A.push(` fonts: {
|
|
83
83
|
...defaultConfig.fonts,
|
|
84
84
|
${e.join(`,
|
|
85
85
|
`)}
|
|
86
|
-
}`):
|
|
86
|
+
}`):A.push(` fonts: {
|
|
87
87
|
${e.join(`,
|
|
88
88
|
`)}
|
|
89
|
-
}`)}return n.shorthands&&
|
|
89
|
+
}`)}return n.shorthands&&A.push(` shorthands: ${W(n.shorthands,4)}`),n.media&&A.push(` media: ${a(n.media)}`),n.defaultFont&&A.push(` defaultFont: ${a(n.defaultFont)}`),D.push(``,...b??[],`/**
|
|
90
90
|
* The Tamagui v5 config for the ${e.name||`design system`}.
|
|
91
91
|
*
|
|
92
92
|
* @see https://tamagui.dev/docs/core/config-v5
|
|
93
93
|
*/
|
|
94
|
-
export const config = createTamagui({`,
|
|
95
|
-
`),n.importConfig?`, ...userConfig `:``,`});`,``,`export type AppConfig = typeof config;`,``),s&&
|
|
96
|
-
`)}function Lt(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=It(e,o,r),l=r.installGuide??
|
|
94
|
+
export const config = createTamagui({`,A.join(`,
|
|
95
|
+
`),n.importConfig?`, ...userConfig `:``,`});`,``,`export type AppConfig = typeof config;`,``),s&&D.push(`declare module "@tamagui/core" {`,` // eslint-disable-next-line @typescript-eslint/no-empty-object-type`,` interface TamaguiCustomConfig extends AppConfig {}`,`}`,``),D.push(`export default config;`,``),D.join(`
|
|
96
|
+
`)}function Lt(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=It(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 Rt=(0,e.definePlugin)(e=>({name:`tamagui`,themeGeneration:`combined`,generate:async t=>Lt(t,e??{})}));exports.collectColorScales=J,exports.collectTamaguiFonts=ze,exports.colorLightness=$,exports.default=Rt,exports.flattenTokens=k,exports.fontVarName=Ve,Object.defineProperty(exports,"formatTokenValue",{enumerable:!0,get:function(){return t.formatTokenValue}}),exports.generateTamaguiConfig=Lt,exports.isPaletteGroup=v,exports.orderPaletteForScheme=Y,exports.renderInstallMd=Ue,exports.renderTamaguiConfig=It,exports.resolveTokenCategory=T,exports.resolveTokenSets=t.resolveTokenSets,exports.tamaguiFontKeyFromRole=R,exports.toCamelCaseKey=E,Object.defineProperty(exports,"toCssVar",{enumerable:!0,get:function(){return t.toCssVar}}),exports.toTamaguiValue=o,exports.toTokenKey=D,exports.typographyFontKey=xe;
|
package/dist/index.d.cts
CHANGED
|
@@ -161,13 +161,18 @@ interface TamaguiFontDef {
|
|
|
161
161
|
face?: string;
|
|
162
162
|
}
|
|
163
163
|
/**
|
|
164
|
-
* Map a font role / family token name onto Tamagui
|
|
165
|
-
*
|
|
164
|
+
* Map a font role / family token name onto a Tamagui `fonts` object key.
|
|
165
|
+
*
|
|
166
|
+
* Family aliases (`sans` / `serif` → `body`, `monospace` → `mono`) stay
|
|
167
|
+
* collapsed so Tamagui's default font names resolve. Distinct type roles
|
|
168
|
+
* (`heading`, `title`, `display`, `caption`, `code`) keep their own keys.
|
|
166
169
|
*/
|
|
167
170
|
declare function tamaguiFontKeyFromRole(name: string): string;
|
|
168
171
|
/**
|
|
169
|
-
* Tamagui
|
|
170
|
-
*
|
|
172
|
+
* Tamagui `fonts` object key for a typography token. The DTCG token name is
|
|
173
|
+
* kept as-is (`display-lg`, `heading-2xl`) so `fontFamily="$display-lg"`
|
|
174
|
+
* matches the design tokens. Nested language segments use the `_` separator
|
|
175
|
+
* FontLanguage expects (`typography.body.cn` → `body_cn`).
|
|
171
176
|
*
|
|
172
177
|
* @see https://tamagui.dev/docs/core/font-language
|
|
173
178
|
*/
|
|
@@ -181,6 +186,8 @@ declare function typographyFontKey(path: string): string;
|
|
|
181
186
|
declare function collectTamaguiFonts(tokens: FlatToken[], fonts?: Fonts): TamaguiFontDef[];
|
|
182
187
|
/**
|
|
183
188
|
* Valid JS identifier used for the `const <name> = createFont(...)` binding.
|
|
189
|
+
* Hyphenated token names (`display-lg`) become camelCase (`displayLgFont`);
|
|
190
|
+
* FontLanguage keys (`body_cn`) keep the underscore.
|
|
184
191
|
*/
|
|
185
192
|
declare function fontVarName(key: string, index: number): string;
|
|
186
193
|
//#endregion
|
|
@@ -228,7 +235,8 @@ declare function colorLightness(color: string): number | undefined;
|
|
|
228
235
|
* Render a Tamagui v5 config module from flattened design tokens.
|
|
229
236
|
*
|
|
230
237
|
* Light and dark token sets are combined into one `createV5Theme` call.
|
|
231
|
-
*
|
|
238
|
+
* Each typography token is emitted as its own `createFont` entry with that
|
|
239
|
+
* token's size, line height, and weight (not a shared type scale).
|
|
232
240
|
*
|
|
233
241
|
* @see https://tamagui.dev/docs/core/config-v5
|
|
234
242
|
* @see https://tamagui.dev/docs/core/font-language#font-tokens
|
|
@@ -251,9 +259,10 @@ declare function generateTamaguiConfig(spec: Schema, options?: TamaguiPluginOpti
|
|
|
251
259
|
* set `lightPalette` / `darkPalette` (`color1`–`color12`). Light palettes are
|
|
252
260
|
* ordered lightest-first; dark palettes darkest-first.
|
|
253
261
|
*
|
|
254
|
-
* Typography tokens (`$type: "typography"`)
|
|
255
|
-
*
|
|
256
|
-
*
|
|
262
|
+
* Typography tokens (`$type: "typography"`) each emit their own Tamagui
|
|
263
|
+
* `createFont` entry with that token's size, line height, and weight. Font
|
|
264
|
+
* keys keep the DTCG token name (`display-lg`). Names with a `_` suffix (or a
|
|
265
|
+
* nested language segment) become FontLanguage variants (`body_cn`).
|
|
257
266
|
*
|
|
258
267
|
* @see https://tamagui.dev/docs/core/config-v5
|
|
259
268
|
* @see https://tamagui.dev/docs/core/font-language#font-tokens
|
package/dist/index.d.cts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.cts","names":[],"sources":["../src/types.ts","../src/flatten.ts","../src/fonts.ts","../src/format.ts","../src/install.ts","../src/generate.ts","../src/index.ts"],"mappings":";;;;;;;;;;;KA0BY;;;;KAMA;;;;UAkBK;;;;;;;;;EASf;;;;;;;EAQA,aAAa;;;;;;EAOb,aAAa;;;;;;EAOb,QAAQ;;;;EAKR;;;;EAKA;;;;;;;;EASA;;;;;EAMA,eAAe;;;;;;;EAQf;;;;;EAMA;;;;;UAMe;;EAEf;;EAEA,OAAO;;EAEP;;EAEA;;EAEA;;EAEA,WAAW;;EAEX;;EAEA;;EAEA;;;;EAIA;;;;;;;;;iBC3Dc,eAAe,MAAM;;;;iBAuFrB,qBACd,cACA,gBACC;;;;;;;iBAoEa,eAAe;;;;;;;;iBA0Bf,WAAW;;;;iBA6FX,cACd,QAAQ,SAAS,eAAe,SAChC,UAAS,KAAK,wCACb;;;;;;;;;
|
|
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;;;;;;;;;UCrSc;;EAEf;;EAEA;;EAEA;EACA,MAAM;EACN,YAAY;EACZ,QAAQ;EACR,eAAe;;EAEf;;;;;;;;;iBA4Lc,uBAAuB;;;;;;;;;iBAiCvB,kBAAkB;;;;;;;iBA2WlB,oBACd,QAAQ,aACR,QAAQ,QACP;;;;;;iBAsFa,YAAY,aAAa;;;;;;;;;iBC/rBzB,eAAe,gBAAgB;;;;;;;;iBCnC/B,gBAAgB;EAAW;;;;KCiCtC;;;;;;;iBAoiBW,mBACd,aAAa,cACZ,eAAe;;;;;;;iBAmCF,sBACd,2BACA,QAAQ;;;;;iBA+EM,eAAe;;;;;;;;;;;iBA4af,oBACd,MAAM,QACN,QAAQ,aACR,UAAS;;;;iBA4PK,sBACd,MAAM,QACN,UAAS,uBACR,wBAAwB,QAAQ"}
|
package/dist/index.d.mts
CHANGED
|
@@ -161,13 +161,18 @@ interface TamaguiFontDef {
|
|
|
161
161
|
face?: string;
|
|
162
162
|
}
|
|
163
163
|
/**
|
|
164
|
-
* Map a font role / family token name onto Tamagui
|
|
165
|
-
*
|
|
164
|
+
* Map a font role / family token name onto a Tamagui `fonts` object key.
|
|
165
|
+
*
|
|
166
|
+
* Family aliases (`sans` / `serif` → `body`, `monospace` → `mono`) stay
|
|
167
|
+
* collapsed so Tamagui's default font names resolve. Distinct type roles
|
|
168
|
+
* (`heading`, `title`, `display`, `caption`, `code`) keep their own keys.
|
|
166
169
|
*/
|
|
167
170
|
declare function tamaguiFontKeyFromRole(name: string): string;
|
|
168
171
|
/**
|
|
169
|
-
* Tamagui
|
|
170
|
-
*
|
|
172
|
+
* Tamagui `fonts` object key for a typography token. The DTCG token name is
|
|
173
|
+
* kept as-is (`display-lg`, `heading-2xl`) so `fontFamily="$display-lg"`
|
|
174
|
+
* matches the design tokens. Nested language segments use the `_` separator
|
|
175
|
+
* FontLanguage expects (`typography.body.cn` → `body_cn`).
|
|
171
176
|
*
|
|
172
177
|
* @see https://tamagui.dev/docs/core/font-language
|
|
173
178
|
*/
|
|
@@ -181,6 +186,8 @@ declare function typographyFontKey(path: string): string;
|
|
|
181
186
|
declare function collectTamaguiFonts(tokens: FlatToken[], fonts?: Fonts): TamaguiFontDef[];
|
|
182
187
|
/**
|
|
183
188
|
* Valid JS identifier used for the `const <name> = createFont(...)` binding.
|
|
189
|
+
* Hyphenated token names (`display-lg`) become camelCase (`displayLgFont`);
|
|
190
|
+
* FontLanguage keys (`body_cn`) keep the underscore.
|
|
184
191
|
*/
|
|
185
192
|
declare function fontVarName(key: string, index: number): string;
|
|
186
193
|
//#endregion
|
|
@@ -228,7 +235,8 @@ declare function colorLightness(color: string): number | undefined;
|
|
|
228
235
|
* Render a Tamagui v5 config module from flattened design tokens.
|
|
229
236
|
*
|
|
230
237
|
* Light and dark token sets are combined into one `createV5Theme` call.
|
|
231
|
-
*
|
|
238
|
+
* Each typography token is emitted as its own `createFont` entry with that
|
|
239
|
+
* token's size, line height, and weight (not a shared type scale).
|
|
232
240
|
*
|
|
233
241
|
* @see https://tamagui.dev/docs/core/config-v5
|
|
234
242
|
* @see https://tamagui.dev/docs/core/font-language#font-tokens
|
|
@@ -251,9 +259,10 @@ declare function generateTamaguiConfig(spec: Schema, options?: TamaguiPluginOpti
|
|
|
251
259
|
* set `lightPalette` / `darkPalette` (`color1`–`color12`). Light palettes are
|
|
252
260
|
* ordered lightest-first; dark palettes darkest-first.
|
|
253
261
|
*
|
|
254
|
-
* Typography tokens (`$type: "typography"`)
|
|
255
|
-
*
|
|
256
|
-
*
|
|
262
|
+
* Typography tokens (`$type: "typography"`) each emit their own Tamagui
|
|
263
|
+
* `createFont` entry with that token's size, line height, and weight. Font
|
|
264
|
+
* keys keep the DTCG token name (`display-lg`). Names with a `_` suffix (or a
|
|
265
|
+
* nested language segment) become FontLanguage variants (`body_cn`).
|
|
257
266
|
*
|
|
258
267
|
* @see https://tamagui.dev/docs/core/config-v5
|
|
259
268
|
* @see https://tamagui.dev/docs/core/font-language#font-tokens
|
package/dist/index.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
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";
|
|
2
|
-
`,`\\n`).replaceAll(`\r`,`\\r`)}function m(e){return typeof e==`string`?`"${
|
|
3
|
-
`)}\n }`}function
|
|
4
|
-
`)}\n${r}}`}function Je(e,t){let n=`${e.replaceAll(
|
|
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,ee=/^drop-shadow(?:\.|$)/i,b=/^text-shadow(?:\.|$)/i,x=/^(?:blur|blur-?radius)(?:\.|$)/i,S=new Set([`color`,`shadow`,`insetShadow`,`dropShadow`,`textShadow`]),C=[{prefix:/^(?:color|colours?|palette)(?:\.|$)/i,category:`color`},{prefix:g,category:`fontSize`},{prefix:_,category:`fontWeight`},{prefix:ee,category:`dropShadow`},{prefix:y,category:`insetShadow`},{prefix:b,category:`textShadow`},{prefix:v,category:`shadow`},{prefix:x,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 w(e){return`$value`in e||`value`in e||`$ref`in e||`ref`in e}function T(e){return e===!0||e===`true`||e===1}function E(e){return T(e.palette)||T(e.$palette)?!0:j(e)===`palette`}function D(e,t){return(e===`palette`||e===`$palette`)&&(typeof t==`boolean`||typeof t==`number`||typeof t==`string`)}function O(e){return e===!0||e===`true`||e===1}function k(e){return O(e.primitive)||O(e.$primitive)?!0:j(e)===`primitive`}function A(e,t){return(e===`primitive`||e===`$primitive`)&&(typeof t==`boolean`||typeof t==`number`||typeof t==`string`)}function te(e){if(typeof e.$description==`string`)return e.$description;if(typeof e.description==`string`)return e.description}function j(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 C)if(t.test(e))return n;if(t===`color`||t===`palette`)return`color`;if(t===`shadow`)return y.test(e)?`insetShadow`:ee.test(e)?`dropShadow`:b.test(e)?`textShadow`:`shadow`;if(t===`dimension`){if(g.test(e))return`fontSize`;if(x.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 M(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`:M(r)}function ae(e,t,r,a,o,s){if(!i(e))return;let c=o||k(e)||E(e),l=j(e,r);if(w(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&&S.has(o)||l===`color`||l===`palette`||l===`primitive`||l===`shadow`?u:h(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:te(e),theme:a,primitive:c});return}for(let[n,r]of Object.entries(e))n.startsWith(`$`)&&n!==`$palette`&&n!==`$primitive`||D(n,r)||A(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 N(e){if(typeof e==`string`)return se.exec(e.trim())?.[1]?.trim()}function P(e,t){let n=N(e);if(!n)return e;let r=t.get(n),i=new Set([n]);for(let e=0;e<8&&r;e++){let e=N(r.value);if(!e||i.has(e))return r.value;i.add(e),r=t.get(e)}return r?.value??e}function F(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||N(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 I(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 we(e){if(typeof e==`number`&&Number.isFinite(e))return String(e);if(typeof e==`string`){let t=e.trim();if(t.length===0||N(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 Te(e,t){let n=I(e);if(n!=null)return Ce(t!=null&&n>0&&n<=4?n*t:n)}function L(e,t){return t.test(e.split(`.`)[0]??``)}function Ee(e){return e.split(`.`).filter(Boolean).at(-1)??e}function R(e,t){let n=e.split(`.`).filter(Boolean);return n[0]&&t.test(n[0])&&n.shift(),n}function z(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 B(e){switch(e.toLowerCase()){case`sans`:case`body`:case`serif`:return`body`;case`monospace`:case`mono`:return`mono`;default:return z([e])}}function De(e){return e.role?B(e.role):B(e.name)}function Oe(e){let t=R(e,ce);if(t.length===0)return`body`;let n=t.at(-1);return n&&t.length>=2&&me.test(n)&&!n.includes(`_`)?`${t.slice(0,-1).join(`-`)}_${n}`:t.join(`-`)}function ke(e){return B(R(e,le)[0]??Ee(e))}function Ae(e,t){let n=R(e,t);return n.length===0||n.length===1&&/^(?:DEFAULT|default)$/i.test(n[0])?`true`:z(n)}function je(e){return e.type===`typography`&&i(e.value)}function Me(e){return e.category===`fontSize`||e.category===`fontWeight`||Ne(e)||Pe(e)||Fe(e)||Ie(e)?!1:e.type===`fontFamily`||L(e.path,le)}function Ne(e){return e.category===`fontSize`||L(e.path,ue)}function Pe(e){return e.category===`fontWeight`||e.type===`fontWeight`||L(e.path,de)}function Fe(e){return L(e.path,fe)}function Ie(e){return L(e.path,pe)}function Le(e,t){if(!e.has(t))return t;let n=2,r=`${t}${n}`;for(;e.has(r);)n++,r=`${t}${n}`;return r}function Re(e){let t=new Map;for(let n of Object.values(e)){let e=De(n);t.has(e)&&(e=Le(t,z([n.name]))),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=xe(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: ${m(t.normal)}`),t.italic&&n.push(`italic: ${m(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:xe(t)}}const He=/^(?:font-size|fontSize|font-weight|fontWeight|line-height|lineHeight|leading|letter-spacing|letterSpacing|tracking)$/i;function U(e,t){let n={true:e},r=N(t);if(!r)return n;let i=Ae(r,He);return i&&i!==`true`&&(n[i]=e),n}function Ue(e){return Object.keys(e.size).length>0?e:{...e,size:{...be}}}function We(e,t,n,r){if(!i(t.value))return e;let a=F(t.value,he),o=N(a),s=Se(P(a,n)),c=ze(r,s,o),l=e;c?l=V(l,c):s&&(l=Ve(l,s));let u=F(t.value,ge),d=I(P(u,n));d!=null&&(l={...l,size:U(d,u)});let f=F(t.value,_e),p=we(P(f,n));p&&(l={...l,weight:U(p,f)});let m=F(t.value,ye),h=I(P(m,n));h!=null&&(l={...l,letterSpacing:U(h,m)});let g=F(t.value,ve),_=Te(P(g,n),l.size.true??d);return _!=null&&(l={...l,lineHeight:U(_,g)}),Ge(l)}function Ge(e){let t=Object.keys(e.size);if(t.length===0)return e;let n=e=>{let n=e.true??Object.values(e)[0];if(n==null)return e;let r={...e};for(let e of t)r[e]??=n;return r};return{...e,lineHeight:Object.keys(e.lineHeight).length>0?n(e.lineHeight):e.lineHeight,weight:Object.keys(e.weight).length>0?n(e.weight):e.weight,letterSpacing:Object.keys(e.letterSpacing).length>0?n(e.letterSpacing):e.letterSpacing}}function Ke(e,t){let n=new Map(e.map(e=>[e.path,e])),r=new Map,i=e=>{r.set(e.key,e)};if(t)for(let[e,n]of Re(t))i(V(H(e),n));for(let a of e){if(!Me(a)||je(a))continue;let e=ke(a.path),o=Se(P(a.value,n)),s=r.get(e)??H(e),c=ze(t,o,a.path),l=s;c?l=V(l,c):(o&&s.webFamily===H(e).webFamily||o&&!r.has(e))&&(l=Ve(l,o)),i(l)}for(let a of e){if(!je(a))continue;let e=Oe(a.path);i(We(r.get(e)??H(e),a,n,t))}return[...r.values()].map(Ue).toSorted((e,t)=>e.key.localeCompare(t.key))}function qe(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}${qe(e)}: ${m(t)}`).join(`,
|
|
4
|
+
`)}\n${r}}`}function Je(e,t){let n=`${e.split(`-`).filter(Boolean).map((e,t)=>t===0?e:`${e.charAt(0).toUpperCase()}${e.slice(1)}`).join(``).replaceAll(/[^\w$]/g,``)||`font${t}`}Font`;return/^[A-Z_$]/i.test(n)?n:`font${t}`}function Ye(e,t){let n=m(e.webFamily),r=m(e.nativeFamily),i=[n===r?` family: ${n}`:` family: isWeb ? ${n} : ${r}`,` size: ${W(e.size)}`];return Object.keys(e.lineHeight).length>0&&i.push(` lineHeight: ${W(e.lineHeight)}`),Object.keys(e.weight).length>0&&i.push(` weight: ${W(e.weight)}`),Object.keys(e.letterSpacing).length>0&&i.push(` letterSpacing: ${W(e.letterSpacing)}`),e.face&&i.push(` face: ${e.face}`),`const ${t} = createFont({\n${i.join(`,
|
|
5
5
|
`)}\n});`}function Xe(e){return`# Installing Tamagui Config
|
|
6
6
|
|
|
7
7
|
Generated by \`@razorwind/tamagui\`.
|
|
@@ -48,19 +48,19 @@ 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 Ze=new Set([`default`,`light`,`theme`]),Qe=/^base(?:[A-Z]\w*|[._-].+)?$/i,$e=[`base`,`gray`,`grey`,`neutral`],et={css:`@tamagui/config/v5-css`,rn:`@tamagui/config/v5-rn`,reanimated:`@tamagui/config/v5-reanimated`,motion:`@tamagui/config/v5-motion`};function tt(e){return Ze.has(e)}function nt(e){return e===`dark`}function G(e,t){let n=new Map,r=t===`dark`?nt:tt;for(let t of e){let e=t.theme?.toLowerCase();(!e||Qe.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 rt=new Set([`fontSize`,`blur`]),it=[`space`,`size`,`radius`,`zIndex`,`blur`,`fontSize`,`shadow`,`insetShadow`,`dropShadow`,`textShadow`,`boxShadow`,`fontWeight`];function at(e){return/^px\(-?\d/.test(e)}function ot(e){if(e.category===`radius`&&e.tokenKey?.startsWith(`borderRadius`)){let t=e.tokenKey.replace(/^borderRadius/,``);return t?
|
|
51
|
+
`}const Ze=new Set([`default`,`light`,`theme`]),Qe=/^base(?:[A-Z]\w*|[._-].+)?$/i,$e=[`base`,`gray`,`grey`,`neutral`],et={css:`@tamagui/config/v5-css`,rn:`@tamagui/config/v5-rn`,reanimated:`@tamagui/config/v5-reanimated`,motion:`@tamagui/config/v5-motion`};function tt(e){return Ze.has(e)}function nt(e){return e===`dark`}function G(e,t){let n=new Map,r=t===`dark`?nt:tt;for(let t of e){let e=t.theme?.toLowerCase();(!e||Qe.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 rt=new Set([`fontSize`,`blur`]),it=[`space`,`size`,`radius`,`zIndex`,`blur`,`fontSize`,`shadow`,`insetShadow`,`dropShadow`,`textShadow`,`boxShadow`,`fontWeight`];function at(e){return/^px\(-?\d/.test(e)}function ot(e){if(e.category===`radius`&&e.tokenKey?.startsWith(`borderRadius`)){let t=e.tokenKey.replace(/^borderRadius/,``);return t?M([t]):e.tokenKey}return e.tokenKey??``}function st(e,t){if(e.category&&rt.has(e.category)&&typeof e.tamaguiValue==`number`)return`px(${e.tamaguiValue})`;if(typeof e.tamaguiValue==`string`){let n=bt(e.tamaguiValue,t);return e.category===`dropShadow`?ct(n):n}return e.tamaguiValue}function ct(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 lt(e){let t={},n=gt(e);for(let r of e){if(!r.category||r.category===`color`||!r.tokenKey)continue;let e=ot(r);if(!e)continue;let i=st(r,n);if(typeof i==`string`&&vt(i))continue;let a=t[r.category]??{};a[e]=i,t[r.category]=a}return t}function ut(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.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 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`&&at(t)?t:m(t);return`${n}${/^[A-Z_$][\w$]*$/i.test(e)?e:m(e)}: ${r}`}).join(`,
|
|
52
52
|
`)}\n${` `.repeat(Math.max(t-2,0))}}`}function dt(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 ft=/^\{([^{}]+)\}$/,pt=/\{([^{}]+)\}/g,mt=/^var\((--[^),\s]+)(?:\s*,[^)]*)?\)$/,ht=/var\((--[^),\s]+)(?:\s*,[^)]*)?\)/g;function gt(e){return{byPath:new Map(e.map(e=>[e.path,e])),byCssVar:new Map(e.map(e=>[s(e.path),e]))}}function _t(e){if(typeof e==`string`)return ft.exec(e.trim())?.[1]?.trim()}function q(e){if(typeof e==`string`)return mt.exec(e.trim())?.[1]}function J(e){return _t(e)!=null||q(e)!=null}function vt(e){return/var\(|\{[^{}]+\}/.test(e)}function yt(e,t){let n=xt(e,t.byPath,t.byCssVar);if(n.category!=null&&n.category!==`color`)return;let r=[n.cssValue,n.tamaguiValue];for(let e of r)if(typeof e==`string`&&e.length>0&&!J(e))return e}function bt(e,t){return e.replace(pt,(e,n)=>{let r=t.byPath.get(n.trim());return r?yt(r,t)??e:e}).replace(ht,(e,n)=>{let r=t.byCssVar.get(n);return r?yt(r,t)??e:e})}function xt(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=_t(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 St(e){return/^[A-Z_$][\w$]*$/i.test(e)?`theme.${e}`:`theme[${m(e)}]`}function Ct(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 wt(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=wt(Number(n)),r=t.at(-2);if(e!=null&&r&&!/^(?:color|colours?|palette)$/i.test(r))return{name:
|
|
53
|
+
`)}\n${r}}`}const ft=/^\{([^{}]+)\}$/,pt=/\{([^{}]+)\}/g,mt=/^var\((--[^),\s]+)(?:\s*,[^)]*)?\)$/,ht=/var\((--[^),\s]+)(?:\s*,[^)]*)?\)/g;function gt(e){return{byPath:new Map(e.map(e=>[e.path,e])),byCssVar:new Map(e.map(e=>[s(e.path),e]))}}function _t(e){if(typeof e==`string`)return ft.exec(e.trim())?.[1]?.trim()}function q(e){if(typeof e==`string`)return mt.exec(e.trim())?.[1]}function J(e){return _t(e)!=null||q(e)!=null}function vt(e){return/var\(|\{[^{}]+\}/.test(e)}function yt(e,t){let n=xt(e,t.byPath,t.byCssVar);if(n.category!=null&&n.category!==`color`)return;let r=[n.cssValue,n.tamaguiValue];for(let e of r)if(typeof e==`string`&&e.length>0&&!J(e))return e}function bt(e,t){return e.replace(pt,(e,n)=>{let r=t.byPath.get(n.trim());return r?yt(r,t)??e:e}).replace(ht,(e,n)=>{let r=t.byCssVar.get(n);return r?yt(r,t)??e:e})}function xt(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=_t(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 St(e){return/^[A-Z_$][\w$]*$/i.test(e)?`theme.${e}`:`theme[${m(e)}]`}function Ct(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 wt(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=wt(Number(n)),r=t.at(-2);if(e!=null&&r&&!/^(?:color|colours?|palette)$/i.test(r))return{name:M([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=wt(Number(a));if(o!=null)return{name:i,step:o}}function Tt(e,t,n,r){let i=e[t]??{};i[`${t}${n}`]=r,e[t]=i}function Et(e){let t={};for(let n of e){if(typeof n.tamaguiValue!=`string`)continue;let e=Y(n);e&&Tt(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.primitive||typeof n.tamaguiValue!=`string`)continue;let e=Y(n);e&&Tt(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:Et(e)}function Z(e,t){if(e.length<2)return[...e];let n=At(e[0]),r=At(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 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*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 Ot(e){return e>1?e/100:e}function kt(e,t){let n=RegExp(`^${t}\\((.+)\\)$`,`i`).exec(e.trim());if(n?.[1])return n[1].split(/[\s,/]+/).filter(Boolean)}function At(e){let t=e.trim();if(!t||t.startsWith(`var(`)||t.includes(`{`))return;let n=Dt(t);if(n!=null)return n;let r=kt(t,`oklch`);if(r?.[0]){let e=$(r[0]);return e==null?void 0:Ot(e)}let i=kt(t,`hsla?`);if(i?.[2]){let e=$(i[2]);return e==null?void 0:Ot(e)}let a=kt(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 jt(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=jt(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 Nt(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 Pt(e,t,n){let r=jt(e,t);if(!(r.length<2))return Nt(Z(r.map(([,e])=>e),n))}function Ft(e,t){let n=new Map(Object.entries(e).map(([e,t])=>[e.toLowerCase(),{name:e,scale:t}]));for(let e of $e){let r=n.get(e);if(!r)continue;let i=Pt(r.scale,r.name,t);if(i)return{name:r.name,palette:i}}}function It(e){let t=e.filter(e=>e.category===`color`||e.primitive),n=X(G(t,`light`)),r=X(G(t,`dark`)),i=Ft(n,`light`),a=Ft(r,`dark`);return{lightPalette:i?.palette,darkPalette:a?.palette,lightBaseName:i?.name,darkBaseName:a?.name}}function Lt(e,t){let n=X(e),{byPath:r,byCssVar:i}=gt(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=xt(o,r,i),s=Ct(e,t,n);if(s){a[o.tokenKey]=St(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 Rt(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
54
|
light: ${K(n,8)},
|
|
55
55
|
dark: ${K(a,8)}
|
|
56
56
|
}`)}if(r.length!==0)return`{\n${r.join(`,
|
|
57
|
-
`)}\n }`}function zt(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 Bt(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 Vt(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 Ht(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 zt([e.lightSemantic,e.darkSemantic]))t.add(n);for(let n of Bt(e.lightScales,e.darkScales))t.add(n);for(let n of Vt(e.lightPalette,e.darkPalette))t.add(n);return[...t].toSorted((e,t)=>e.localeCompare(t,void 0,{numeric:!0}))}function Ut(e){return` ${/^[A-Z_$][\w$]*$/i.test(e)?e:m(e)}: string;`}function Wt(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(Ut),`}`,``]}function Gt(e,t,n={}){let r=e.fonts??{},i=n.useDefaultConfig===!0,a=n.animations??`css`,o=n.includeTypeAugmentation!==!1,s=t.filter(e=>e.category===`color`),c=G(s,`light`),l=G(s,`dark`),u=X(c),d=X(l.length>0?l:c),{lightPalette:f,darkPalette:p,lightBaseName:
|
|
57
|
+
`)}\n }`}function zt(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 Bt(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 Vt(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 Ht(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 zt([e.lightSemantic,e.darkSemantic]))t.add(n);for(let n of Bt(e.lightScales,e.darkScales))t.add(n);for(let n of Vt(e.lightPalette,e.darkPalette))t.add(n);return[...t].toSorted((e,t)=>e.localeCompare(t,void 0,{numeric:!0}))}function Ut(e){return` ${/^[A-Z_$][\w$]*$/i.test(e)?e:m(e)}: string;`}function Wt(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(Ut),`}`,``]}function Gt(e,t,n={}){let r=e.fonts??{},i=n.useDefaultConfig===!0,a=n.animations??`css`,o=n.includeTypeAugmentation!==!1,s=t.filter(e=>e.category===`color`),c=G(s,`light`),l=G(s,`dark`),u=X(c),d=X(l.length>0?l:c),{lightPalette:f,darkPalette:p,lightBaseName:h,darkBaseName:g}=It(t),_=Rt(u,d),v=Lt(c,h),y=Lt(l.length>0?l:c,l.length>0?g:h),ee=Wt(Ht({lightSemantic:v,darkSemantic:y,lightScales:u,darkScales:d,lightPalette:f,darkPalette:p}),{specName:e.name}),b=lt(G(t,`light`)),x=ut(c,l),S=[];Object.keys(x).length>0&&S.push(` color: ${K(x,4)}`);for(let e of it){let t=b[e];t&&Object.keys(t).length>0&&S.push(` ${e}: ${K(t,4)}`)}let C=[];f&&C.push(` lightPalette: ${m(f)}`),p&&C.push(` darkPalette: ${m(p)}`),_&&C.push(` childrenThemes: ${_}`),(Object.keys(v).length>0||Object.keys(y).length>0)&&C.push(` getTheme: ({ theme, scheme }: { theme: any; scheme: "light" | "dark" }) => {
|
|
58
58
|
return scheme === "dark"
|
|
59
|
-
? ${dt(
|
|
60
|
-
: ${dt(
|
|
61
|
-
}`);let
|
|
62
|
-
`),`});`,``);let
|
|
63
|
-
`)}\n})`:`createV5Theme()`;
|
|
59
|
+
? ${dt(y,8)}
|
|
60
|
+
: ${dt(v,8)};
|
|
61
|
+
}`);let w=[`import { isWeb } from '@tamagui/constants';`];i?w.push(`import { createV5Theme, defaultConfig, type CreateV5ThemeOptions } from "@tamagui/config/v5";`):w.push(`import { createV5Theme, type CreateV5ThemeOptions } from "@tamagui/config/v5";`),a!==!1&&w.push(`import { animations } from "${et[a]}";`),n.importConfig&&w.push(`import userConfig from "${n.importConfig}";`);let T=[`createTamagui`,`px`];S.length>0&&T.push(`createTokens`);let E=Ke(t,r);E.length>0&&T.push(`createFont`),w.push(`import { ${T.join(`, `)} } from "@tamagui/core";`);let D=[`/* eslint-disable */`,``,`/*`,` * Generated by @razorwind/tamagui — Do not edit by hand.`,` * `,` * @see https://tamagui.dev/docs/core/config-v5`,` */`,``,...w,``];S.length>0&&D.push(`const tokens = createTokens({`,S.join(`,
|
|
62
|
+
`),`});`,``);let O=C.length>0?`createV5Theme({\n${C.join(`,
|
|
63
|
+
`)}\n})`:`createV5Theme()`;D.push(`const themes = ${O};`,``);let k=new Map;if(E.length>0)for(let[e,t]of E.entries()){let n=Je(t.key,e);k.set(t.key,n),D.push(Ye(t,n),``)}let A=[];if(i&&A.push(` ...defaultConfig`),a!==!1&&A.push(` animations`),S.length>0&&(i?A.push(` tokens: {
|
|
64
64
|
...defaultConfig.tokens,
|
|
65
65
|
...tokens,
|
|
66
66
|
space: {
|
|
@@ -79,19 +79,19 @@ Re-run Razorwind generate when tokens change so \`${e.outputPath}\` stays aligne
|
|
|
79
79
|
...defaultConfig.tokens.zIndex,
|
|
80
80
|
...tokens.zIndex
|
|
81
81
|
}
|
|
82
|
-
}`):
|
|
82
|
+
}`):A.push(` tokens`)),A.push(` themes`),k.size>0){let e=[...k.entries()].map(([e,t])=>` ${/^[A-Z_$][\w$]*$/i.test(e)?e:m(e)}: ${t}`);i?A.push(` fonts: {
|
|
83
83
|
...defaultConfig.fonts,
|
|
84
84
|
${e.join(`,
|
|
85
85
|
`)}
|
|
86
|
-
}`):
|
|
86
|
+
}`):A.push(` fonts: {
|
|
87
87
|
${e.join(`,
|
|
88
88
|
`)}
|
|
89
|
-
}`)}return n.shorthands&&
|
|
89
|
+
}`)}return n.shorthands&&A.push(` shorthands: ${K(n.shorthands,4)}`),n.media&&A.push(` media: ${m(n.media)}`),n.defaultFont&&A.push(` defaultFont: ${m(n.defaultFont)}`),D.push(``,...ee??[],`/**
|
|
90
90
|
* The Tamagui v5 config for the ${e.name||`design system`}.
|
|
91
91
|
*
|
|
92
92
|
* @see https://tamagui.dev/docs/core/config-v5
|
|
93
93
|
*/
|
|
94
|
-
export const config = createTamagui({`,
|
|
95
|
-
`),n.importConfig?`, ...userConfig `:``,`});`,``,`export type AppConfig = typeof config;`,``),o&&
|
|
96
|
-
`)}function Kt(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?
|
|
94
|
+
export const config = createTamagui({`,A.join(`,
|
|
95
|
+
`),n.importConfig?`, ...userConfig `:``,`});`,``,`export type AppConfig = typeof config;`,``),o&&D.push(`declare module "@tamagui/core" {`,` // eslint-disable-next-line @typescript-eslint/no-empty-object-type`,` interface TamaguiCustomConfig extends AppConfig {}`,`}`,``),D.push(`export default config;`,``),D.join(`
|
|
96
|
+
`)}function Kt(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=Gt(e,a,n),c=n.installGuide??Xe({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 qt=e(e=>({name:`tamagui`,themeGeneration:`combined`,generate:async t=>Kt(t,e??{})}));export{X as collectColorScales,Ke as collectTamaguiFonts,At as colorLightness,qt as default,oe as flattenTokens,Je as fontVarName,n as formatTokenValue,Kt as generateTamaguiConfig,E as isPaletteGroup,Z as orderPaletteForScheme,Xe as renderInstallMd,Gt as renderTamaguiConfig,re as resolveTokenCategory,a as resolveTokenSets,B as tamaguiFontKeyFromRole,M as toCamelCaseKey,o as toCssVar,h as toTamaguiValue,ie as toTokenKey,Oe as typographyFontKey};
|
|
97
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.46",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Razorwind plugin that creates Tamagui theme tokens from Razorwind design tokens.",
|
|
6
6
|
"repository": {
|
|
@@ -106,5 +106,5 @@
|
|
|
106
106
|
"typescript": "^6.0.3"
|
|
107
107
|
},
|
|
108
108
|
"publishConfig": { "access": "public" },
|
|
109
|
-
"gitHead": "
|
|
109
|
+
"gitHead": "e360b927faf08cb025ae429055c52ce504d3596b"
|
|
110
110
|
}
|