@razorwind/tamagui 0.0.56 → 0.0.58
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 +18 -12
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts +18 -12
- package/dist/index.mjs +22 -22
- package/package.json +2 -2
package/dist/index.cjs
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});let e=require("@razorwind/core/plugin"),t=require("@razorwind/core/utils"),n=require("node:path"),r=require("@razorwind/core/lib/fonts");function i(e){return e.replaceAll(`\\`,`\\\\`).replaceAll(`"`,`\\"`).replaceAll(`
|
|
2
|
-
`,`\\n`).replaceAll(`\r`,`\\r`)}function a(e){return typeof e==`string`?`"${i(e)}"`:typeof e==`number`||typeof e==`boolean`?String(e):e==null?`undefined`:JSON.stringify(e)}function o(e,n){if(typeof e==`number`)return e;if(typeof e==`boolean`)return Number(e);if((0,t.isObject)(e)&&typeof e.value==`number`&&typeof e.unit==`string`){let t=e.unit.toLowerCase();return t===`px`||t===``?e.value:t===`rem`?e.value*16:`${e.value}${e.unit}`}if(typeof e==`string`){let t=/^(-?\d+(?:\.\d+)?)px$/i.exec(e.trim());if(t)return Number(t[1]);let n=/^(-?\d+(?:\.\d+)?)rem$/i.exec(e.trim());if(n)return Number(n[1])*16;let r=Number(e);return!Number.isNaN(r)&&e.trim()!==``?r:e}return(0,t.formatTokenValue)(e,n)}const s=/^(?:font-size|fontSize)(?:\.|$)/i,c=/^(?:font-weight|fontWeight)(?:\.|$)/i,l=/^shadow(?:\.|$)/i,u=/^inset-shadow(?:\.|$)/i,d=/^drop-shadow(?:\.|$)/i,f=/^text-shadow(?:\.|$)/i,p=/^(?:blur|blur-?radius)(?:\.|$)/i,m=new Set([`color`,`shadow`,`insetShadow`,`dropShadow`,`textShadow`]),h=[{prefix:/^(?:color|colours?|palette)(?:\.|$)/i,category:`color`},{prefix:s,category:`fontSize`},{prefix:c,category:`fontWeight`},{prefix:d,category:`dropShadow`},{prefix:u,category:`insetShadow`},{prefix:f,category:`textShadow`},{prefix:l,category:`shadow`},{prefix:p,category:`blur`},{prefix:/^(?:space|spacing|gap)(?:\.|$)/i,category:`space`},{prefix:/^inset(?:\.|$)/i,category:`space`},{prefix:/^(?:size|sizing)(?:\.|$)/i,category:`size`},{prefix:/^(?:radius|rounded|radii)(?:\.|$)/i,category:`radius`},{prefix:/^(?:z-?index|zindex|elevation)(?:\.|$)/i,category:`zIndex`}];function g(e){return`$value`in e||`value`in e||`$ref`in e||`ref`in e}function _(e){return e===!0||e===`true`||e===1}function v(e){return _(e.palette)||_(e.$palette)?!0:T(e)===`palette`}function ee(e,t){return(e===`palette`||e===`$palette`)&&(typeof t==`boolean`||typeof t==`number`||typeof t==`string`)}function y(e){return e===!0||e===`true`||e===1}function b(e){return y(e.primitive)||y(e.$primitive)?!0:T(e)===`primitive`}function x(e,t){return(e===`primitive`||e===`$primitive`)&&(typeof t==`boolean`||typeof t==`number`||typeof t==`string`)}function S(e,t){return(e===`theme`||e===`$theme`)&&typeof t==`string`}function C(e){if(typeof e.theme==`string`&&e.theme.length>0)return e.theme;if(typeof e.$theme==`string`&&e.$theme.length>0)return e.$theme}function w(e){if(typeof e.$description==`string`)return e.$description;if(typeof e.description==`string`)return e.description}function T(e,t){return typeof e.$type==`string`?e.$type:typeof e.type==`string`?e.type:t}function E(e){if(`$value`in e)return e.$value;if(`value`in e)return e.value;if(typeof e.$ref==`string`)return e.$ref;if(typeof e.ref==`string`)return e.ref}function te(e,t){for(let{prefix:t,category:n}of h)if(t.test(e))return n;if(t===`color`||t===`palette`)return`color`;if(t===`shadow`)return u.test(e)?`insetShadow`:d.test(e)?`dropShadow`:f.test(e)?`textShadow`:`shadow`;if(t===`dimension`){if(s.test(e))return`fontSize`;if(p.test(e))return`blur`;if(/(?:^|\.)(?:space|spacing|gap)(?:\.|$)/i.test(e)||/(?:^|\.)inset(?:\.|$)/i.test(e))return`space`;if(/radius|rounded/i.test(e))return`radius`;if(/z-?index|elevation/i.test(e))return`zIndex`;if(/(?:^|\.)(?:size|sizing)(?:\.|$)/i.test(e)||/(?:^|\.)(?:width|height)(?:\.|$)/i.test(e))return`size`}if(t===`number`&&/z-?index|elevation/i.test(e))return`zIndex`;if(t===`fontWeight`||c.test(e))return`fontWeight`}function D(e){return e.flatMap(e=>e.split(/[-_\s]+/)).filter(Boolean).map((e,t)=>{if(/^\d/.test(e))return e;let n=e.toLowerCase();return t===0?n:`${n.charAt(0).toUpperCase()}${n.slice(1)}`}).join(``)}function ne(e){let t=e.split(`.`).filter(Boolean),n=t[0];n&&/^(?:color|colours?|palette|primitive|space|spacing|gap|inset|shadow|inset-shadow|drop-shadow|text-shadow|font-size|fontSize|font-weight|fontWeight|size|sizing|radius|rounded|radii|z-?index|zindex|elevation|blur)$/i.test(n)&&t.shift();let r=t.length>0?t:e.split(`.`).slice(-1);return r.length===1&&/^(?:DEFAULT|default)$/i.test(r[0]??``)?`true`:D(r)}function
|
|
3
|
-
`)}\n }`}function
|
|
4
|
-
`)}\n${r}}`}function
|
|
5
|
-
`)}\n});`}function
|
|
2
|
+
`,`\\n`).replaceAll(`\r`,`\\r`)}function a(e){return typeof e==`string`?`"${i(e)}"`:typeof e==`number`||typeof e==`boolean`?String(e):e==null?`undefined`:JSON.stringify(e)}function o(e,n){if(typeof e==`number`)return e;if(typeof e==`boolean`)return Number(e);if((0,t.isObject)(e)&&typeof e.value==`number`&&typeof e.unit==`string`){let t=e.unit.toLowerCase();return t===`px`||t===``?e.value:t===`rem`?e.value*16:`${e.value}${e.unit}`}if(typeof e==`string`){let t=/^(-?\d+(?:\.\d+)?)px$/i.exec(e.trim());if(t)return Number(t[1]);let n=/^(-?\d+(?:\.\d+)?)rem$/i.exec(e.trim());if(n)return Number(n[1])*16;let r=Number(e);return!Number.isNaN(r)&&e.trim()!==``?r:e}return(0,t.formatTokenValue)(e,n)}const s=/^(?:font-size|fontSize)(?:\.|$)/i,c=/^(?:font-weight|fontWeight)(?:\.|$)/i,l=/^shadow(?:\.|$)/i,u=/^inset-shadow(?:\.|$)/i,d=/^drop-shadow(?:\.|$)/i,f=/^text-shadow(?:\.|$)/i,p=/^(?:blur|blur-?radius)(?:\.|$)/i,m=new Set([`color`,`shadow`,`insetShadow`,`dropShadow`,`textShadow`]),h=[{prefix:/^(?:color|colours?|palette)(?:\.|$)/i,category:`color`},{prefix:s,category:`fontSize`},{prefix:c,category:`fontWeight`},{prefix:d,category:`dropShadow`},{prefix:u,category:`insetShadow`},{prefix:f,category:`textShadow`},{prefix:l,category:`shadow`},{prefix:p,category:`blur`},{prefix:/^(?:space|spacing|gap)(?:\.|$)/i,category:`space`},{prefix:/^inset(?:\.|$)/i,category:`space`},{prefix:/^(?:size|sizing)(?:\.|$)/i,category:`size`},{prefix:/^(?:radius|rounded|radii)(?:\.|$)/i,category:`radius`},{prefix:/^(?:z-?index|zindex|elevation)(?:\.|$)/i,category:`zIndex`}];function g(e){return`$value`in e||`value`in e||`$ref`in e||`ref`in e}function _(e){return e===!0||e===`true`||e===1}function v(e){return _(e.palette)||_(e.$palette)?!0:T(e)===`palette`}function ee(e,t){return(e===`palette`||e===`$palette`)&&(typeof t==`boolean`||typeof t==`number`||typeof t==`string`)}function y(e){return e===!0||e===`true`||e===1}function b(e){return y(e.primitive)||y(e.$primitive)?!0:T(e)===`primitive`}function x(e,t){return(e===`primitive`||e===`$primitive`)&&(typeof t==`boolean`||typeof t==`number`||typeof t==`string`)}function S(e,t){return(e===`theme`||e===`$theme`)&&typeof t==`string`}function C(e){if(typeof e.theme==`string`&&e.theme.length>0)return e.theme;if(typeof e.$theme==`string`&&e.$theme.length>0)return e.$theme}function w(e){if(typeof e.$description==`string`)return e.$description;if(typeof e.description==`string`)return e.description}function T(e,t){return typeof e.$type==`string`?e.$type:typeof e.type==`string`?e.type:t}function E(e){if(`$value`in e)return e.$value;if(`value`in e)return e.value;if(typeof e.$ref==`string`)return e.$ref;if(typeof e.ref==`string`)return e.ref}function te(e,t){for(let{prefix:t,category:n}of h)if(t.test(e))return n;if(t===`color`||t===`palette`)return`color`;if(t===`shadow`)return u.test(e)?`insetShadow`:d.test(e)?`dropShadow`:f.test(e)?`textShadow`:`shadow`;if(t===`dimension`){if(s.test(e))return`fontSize`;if(p.test(e))return`blur`;if(/(?:^|\.)(?:space|spacing|gap)(?:\.|$)/i.test(e)||/(?:^|\.)inset(?:\.|$)/i.test(e))return`space`;if(/radius|rounded/i.test(e))return`radius`;if(/z-?index|elevation/i.test(e))return`zIndex`;if(/(?:^|\.)(?:size|sizing)(?:\.|$)/i.test(e)||/(?:^|\.)(?:width|height)(?:\.|$)/i.test(e))return`size`}if(t===`number`&&/z-?index|elevation/i.test(e))return`zIndex`;if(t===`fontWeight`||c.test(e))return`fontWeight`}function D(e){return e.flatMap(e=>e.split(/[-_\s]+/)).filter(Boolean).map((e,t)=>{if(/^\d/.test(e))return e;let n=e.toLowerCase();return t===0?n:`${n.charAt(0).toUpperCase()}${n.slice(1)}`}).join(``)}function ne(e){let t=e.split(`.`).filter(Boolean),n=t[0];n&&/^(?:color|colours?|palette|primitive|space|spacing|gap|inset|shadow|inset-shadow|drop-shadow|text-shadow|font-size|fontSize|font-weight|fontWeight|size|sizing|radius|rounded|radii|z-?index|zindex|elevation|blur)$/i.test(n)&&t.shift();let r=t.length>0?t:e.split(`.`).slice(-1);return r.length===1&&/^(?:DEFAULT|default)$/i.test(r[0]??``)?`true`:D(r)}function re(e,n,r,i,a,s,c){if(!(0,t.isObject)(e))return;let l=a||b(e)||v(e),u=T(e,r),d=C(e)??s;if(g(e)){let r=E(e),a=n.join(`.`),s=te(a,u)??(l||u===`primitive`||u===`palette`?`color`:void 0),f=(0,t.formatTokenValue)(r,u),p=s&&m.has(s)||u===`color`||u===`palette`||u===`primitive`||u===`shadow`?f:o(r,u);c.push({path:a,type:u===`palette`||u===`primitive`?`color`:u,value:r,cssValue:f,tamaguiValue:p,category:s,tokenKey:s?ne(a):void 0,description:w(e),theme:i,...d?{childTheme:d}:{},...l?{primitive:!0}:{}});return}for(let[t,r]of Object.entries(e))t.startsWith(`$`)&&t!==`$palette`&&t!==`$primitive`||ee(t,r)||x(t,r)||S(t,r)||re(r,[...n,t],u,i,l,d,c)}function O(e,n={}){let r=n.includeTypes?new Set(n.includeTypes):void 0,i=[];for(let n of(0,t.resolveTokenSets)(e)){let e=n.id==="default"?void 0:n.id;re(n.tokens,[],void 0,e,!1,void 0,i)}return r?i.filter(e=>!e.type||r.has(e.type)):i}const ie=/^\{([^{}]+)\}$/,ae=/^(?:typography|type|text)$/i,k=/^(?:font|fonts|font-family|fontFamily)$/i,oe=/^(?:font-size|fontSize)$/i,se=/^(?:font-weight|fontWeight)$/i,ce=/^(?:line-height|lineHeight|leading)$/i,le=/^(?:letter-spacing|letterSpacing|tracking)$/i,ue=/^(?:[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,de=[`fontFamily`,`font-family`,`family`],fe=[`fontSize`,`font-size`,`size`],pe=[`fontWeight`,`font-weight`,`weight`],me=[`lineHeight`,`line-height`,`leading`],he=[`letterSpacing`,`letter-spacing`,`tracking`],ge={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 ie.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 _e(e){return(e.split(`,`)[0]?.trim()??e).replaceAll(/^["']|["']$/g,``)}function ve(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 ye(e){return Number.isInteger(e)?e:Math.round(e*1e3)/1e3}function N(e){if(e==null)return;let t=o(e);if(typeof t==`number`&&Number.isFinite(t))return t;if(typeof t==`string`){let e=/^(-?\d+(?:\.\d+)?)%$/.exec(t.trim());if(e)return Number.parseFloat(e[1])/100}}function be(e){if(typeof e==`number`&&Number.isFinite(e))return String(e);if(typeof e==`string`){let t=e.trim();if(t.length===0||A(t))return;let n=Number(t);return Number.isNaN(n)?t:String(n)}let t=o(e);if(typeof t==`number`&&Number.isFinite(t))return String(t);if(typeof t==`string`&&t.length>0)return t}function xe(e,t){let n=N(e);if(n!=null)return ye(t!=null&&n>0&&n<=4?n*t:n)}function P(e,t){return t.test(e.split(`.`)[0]??``)}function Se(e){return e.split(`.`).filter(Boolean).at(-1)??e}function F(e,t){let n=e.split(`.`).filter(Boolean);return n[0]&&t.test(n[0])&&n.shift(),n}function I(e){let t=e.flatMap(e=>e.split(`-`)).filter(Boolean);return t.length===0?`body`:t.map((e,t)=>t===0?`${e.charAt(0).toLowerCase()}${e.slice(1)}`:`${e.charAt(0).toUpperCase()}${e.slice(1)}`).join(``)}function L(e){switch(e.toLowerCase()){case`sans`:case`body`:case`serif`:return`body`;case`monospace`:case`mono`:return`mono`;default:return I([e])}}function Ce(e){return e.role?L(e.role):L(e.name)}function we(e){let t=F(e,ae);if(t.length===0)return`body`;let n=t.at(-1);return n&&t.length>=2&&ue.test(n)&&!n.includes(`_`)?`${t.slice(0,-1).join(`-`)}_${n}`:t.join(`-`)}function Te(e){return L(F(e,k)[0]??Se(e))}function Ee(e,t){let n=F(e,t);return n.length===0||n.length===1&&/^(?:DEFAULT|default)$/i.test(n[0])?`true`:I(n)}function De(e){return e.type===`typography`&&(0,t.isObject)(e.value)}function Oe(e){return e.category===`fontSize`||e.category===`fontWeight`||ke(e)||Ae(e)||je(e)||Me(e)?!1:e.type===`fontFamily`||P(e.path,k)}function ke(e){return e.category===`fontSize`||P(e.path,oe)}function Ae(e){return e.category===`fontWeight`||e.type===`fontWeight`||P(e.path,se)}function je(e){return P(e.path,ce)}function Me(e){return P(e.path,le)}function Ne(e,t){if(!e.has(t))return t;let n=2,r=`${t}${n}`;for(;e.has(r);)n++,r=`${t}${n}`;return r}function Pe(e){let t=new Map;for(let n of Object.values(e)){let e=Ce(n);t.has(e)&&(e=Ne(t,I([n.name]))),t.set(e,n)}return t}function Fe(e,t,n){if(!e)return;let i=Object.values(e);if(i.length===0)return;if(n){let e=n.split(`.`).filter(Boolean).at(-1);if(e){let t=i.find(t=>t.role===e||t.name.toLowerCase()===e.toLowerCase());if(t)return t}}if(!t)return;let a=_e(t).toLowerCase();return i.find(e=>(0,r.fontFamilyName)(e).toLowerCase()===a||e.title.toLowerCase()===a||e.name.toLowerCase()===a)}function Ie(e){let t=new Map;for(let r of e.files){let e=String(r.weight??400),i=(0,n.basename)(r.path).replace(/\.[^.]+$/,``),a=t.get(e)??{};r.style===`italic`||r.style===`oblique`?a.italic=i:a.normal=i,t.set(e,a)}if(t.size!==0)return`{\n${[...t.entries()].toSorted(([e],[t])=>e.localeCompare(t,void 0,{numeric:!0})).map(([e,t])=>{let n=[];return t.normal&&n.push(`normal: ${a(t.normal)}`),t.italic&&n.push(`italic: ${a(t.italic)}`),` ${e}: { ${n.join(`, `)} }`}).join(`,
|
|
3
|
+
`)}\n }`}function R(e,t){return{...e,webFamily:(0,r.cssFontFamily)(t),nativeFamily:(0,r.fontFamilyName)(t),face:t.source===`local`?Ie(t):e.face}}function z(e){return{key:e,webFamily:`system-ui, sans-serif`,nativeFamily:`system-ui`,size:{},lineHeight:{},weight:{},letterSpacing:{}}}function Le(e,t){return{...e,webFamily:t,nativeFamily:_e(t)}}const Re=/^(?:font-size|fontSize|font-weight|fontWeight|line-height|lineHeight|leading|letter-spacing|letterSpacing|tracking)$/i;function B(e,t){let n={true:e},r=A(t);if(!r)return n;let i=Ee(r,Re);return i&&i!==`true`&&(n[i]=e),n}function ze(e){return Object.keys(e.size).length>0?e:{...e,size:{...ge}}}function Be(e,n,r,i){if(!(0,t.isObject)(n.value))return e;let a=M(n.value,de),o=A(a),s=ve(j(a,r)),c=Fe(i,s,o),l=e;c?l=R(l,c):s&&(l=Le(l,s));let u=M(n.value,fe),d=N(j(u,r));d!=null&&(l={...l,size:B(d,u)});let f=M(n.value,pe),p=be(j(f,r));p&&(l={...l,weight:B(p,f)});let m=M(n.value,he),h=N(j(m,r));h!=null&&(l={...l,letterSpacing:B(h,m)});let g=M(n.value,me),_=xe(j(g,r),l.size.true??d);return _!=null&&(l={...l,lineHeight:B(_,g)}),Ve(l)}function Ve(e){let t=Object.keys(e.size);if(t.length===0)return e;let n=e=>{let n=e.true??Object.values(e)[0];if(n==null)return e;let r={...e};for(let e of t)r[e]??=n;return r};return{...e,lineHeight:Object.keys(e.lineHeight).length>0?n(e.lineHeight):e.lineHeight,weight:Object.keys(e.weight).length>0?n(e.weight):e.weight,letterSpacing:Object.keys(e.letterSpacing).length>0?n(e.letterSpacing):e.letterSpacing}}function He(e,t){let n=new Map(e.map(e=>[e.path,e])),r=new Map,i=e=>{r.set(e.key,e)};if(t)for(let[e,n]of Pe(t))i(R(z(e),n));for(let a of e){if(!Oe(a)||De(a))continue;let e=Te(a.path),o=ve(j(a.value,n)),s=r.get(e)??z(e),c=Fe(t,o,a.path),l=s;c?l=R(l,c):(o&&s.webFamily===z(e).webFamily||o&&!r.has(e))&&(l=Le(l,o)),i(l)}for(let a of e){if(!De(a))continue;let e=we(a.path);i(Be(r.get(e)??z(e),a,n,t))}return[...r.values()].map(ze).toSorted((e,t)=>e.key.localeCompare(t.key))}function Ue(e){return/^\d+$/.test(e)||/^[A-Z_$][\w$]*$/i.test(e)?e:a(e)}function V(e,t=4){let n=` `.repeat(t),r=` `.repeat(Math.max(t-2,0)),i=Object.entries(e).toSorted(([e],[t])=>e.localeCompare(t,void 0,{numeric:!0}));return i.length===0?`{}`:`{\n${i.map(([e,t])=>`${n}${Ue(e)}: ${a(t)}`).join(`,
|
|
4
|
+
`)}\n${r}}`}function We(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 Ge(e,t){let n=a(e.webFamily),r=a(e.nativeFamily),i=[n===r?` family: ${n}`:` family: isWeb ? ${n} : ${r}`,` size: ${V(e.size)}`];return Object.keys(e.lineHeight).length>0&&i.push(` lineHeight: ${V(e.lineHeight)}`),Object.keys(e.weight).length>0&&i.push(` weight: ${V(e.weight)}`),Object.keys(e.letterSpacing).length>0&&i.push(` letterSpacing: ${V(e.letterSpacing)}`),e.face&&i.push(` face: ${e.face}`),`const ${t} = createFont({\n${i.join(`,
|
|
5
|
+
`)}\n});`}function Ke(e){return`# Installing Tamagui Config
|
|
6
6
|
|
|
7
7
|
Generated by \`@razorwind/tamagui\`.
|
|
8
8
|
|
|
@@ -48,28 +48,28 @@ 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
|
|
51
|
+
`}const qe=new Set([`default`,`light`,`theme`]),Je=/^base(?:[A-Z]\w*|[._-].+)?$/i,Ye=/^ring(?:\.|$)/i,Xe={css:`@tamagui/config/v5-css`,rn:`@tamagui/config/v5-rn`,reanimated:`@tamagui/config/v5-reanimated`,motion:`@tamagui/config/v5-motion`};function Ze(e){return qe.has(e)}function Qe(e){return e===`dark`}function H(e,t){let n=new Map,r=t===`dark`?Qe:Ze;for(let t of e){let e=t.theme?.toLowerCase();(!e||Je.test(e))&&n.set(t.path,t)}for(let t of e){let e=t.theme?.toLowerCase();e&&r(e)&&n.set(t.path,t)}return[...n.values()]}function $e(e){return Ye.test(e.path)&&e.category===`shadow`}const et=new Set([`shadow`,`insetShadow`,`dropShadow`,`textShadow`,`boxShadow`]);function tt(e){return!e.primitive&&!!e.tokenKey&&(e.type===`shadow`||e.category!=null&&et.has(e.category))}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?D([t]):e.tokenKey}return e.tokenKey??``}function ot(e,t){let n=$(e,t.byPath,t.byCssVar).tamaguiValue;if(e.category&&nt.has(e.category)&&typeof n==`number`)return`px(${n})`;if(typeof n==`string`){let r=Ot(n,t);return e.category===`dropShadow`?st(r):r}return n}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={},n=Tt(e);for(let r of e){if(!r.category||r.category===`color`||!r.tokenKey||$e(r))continue;let e=at(r);if(!e)continue;let i=ot(r,n);if(typeof i==`string`&&Z(i))continue;let a=t[r.category]??{};a[e]=i,t[r.category]=a}return t}function U(e){let t=e.path.replace(/^color\./i,``).replaceAll(`.`,``);return e.theme?`${e.theme}${t[0]?.toUpperCase()??``}${t.slice(1)}`:t}function W(e){return`tokens.color.${e}.val`}const lt=[`base`,`gray`,`grey`,`neutral`],ut=[`accent`,`brand`],dt=[`"#ffffff"`,`"#000000"`],ft=[`"#000000"`,`"#ffffff"`];function pt(e){if(e.category!==`color`||!e.primitive)return;let t=e.path.replace(/^color\./i,``).split(`.`).filter(Boolean),n=t.at(-1);if(!n||t.length<2)return;let r=Number(n);if(Number.isFinite(r))return{name:t.slice(0,-1).join(`.`).toLowerCase(),step:r}}function mt(e,t){let n=U(e);if(n in t)return W(n);let r=typeof e.cssValue==`string`&&e.cssValue.length>0?e.cssValue:typeof e.tamaguiValue==`string`?e.tamaguiValue:void 0;return r?a(r):`"#000000"`}function ht(e){let t=e.trim(),n=/^oklch\(\s*([0-9.]+)(%?)/i.exec(t);if(n){let e=Number(n[1]);return Number.isFinite(e)?n[2]===`%`||e>1?e/100:e:void 0}let r=/^#([\da-f]{3,8})$/i.exec(t);if(!r)return;let i=r[1],a,o,s;if(i.length===3||i.length===4)a=Number.parseInt(i[0]+i[0],16),o=Number.parseInt(i[1]+i[1],16),s=Number.parseInt(i[2]+i[2],16);else if(i.length===6||i.length===8)a=Number.parseInt(i.slice(0,2),16),o=Number.parseInt(i.slice(2,4),16),s=Number.parseInt(i.slice(4,6),16);else return;return(.2126*a+.7152*o+.0722*s)/255}function gt(e,t,n){let r=new Map;for(let t of e){let e=pt(t);if(!e)continue;let i=typeof t.cssValue==`string`&&t.cssValue.length>0?t.cssValue:void 0,a=r.get(e.name)??[];a.push({step:e.step,expression:mt(t,n),lightness:i?ht(i):void 0}),r.set(e.name,a)}for(let e of t){let t=r.get(e);if(!t||t.length===0)continue;let n=new Map;for(let e of t.toSorted((e,t)=>e.step-t.step))n.set(e.step,e);return[...n.values()]}}function G(e,t){if(e.filter(e=>e.lightness!=null).length>=2)return[...e].toSorted((e,n)=>{let r=e.lightness??.5,i=n.lightness??.5;return t===`light`?i-r:r-i}).map(e=>e.expression);let n=e.toSorted((e,t)=>e.step-t.step).map(e=>e.expression);return t===`light`?n:[...n].toReversed()}function K(e,t){return e.length>=2?e:e.length===1?[e[0],t[1]??`"#000000"`]:[...t]}function _t(e,t,n,r,i,a){let o=gt(e,n,r),s=gt(t,n,r);if(o&&s)return{light:K(G(o,`light`),i),dark:K(G(s,`dark`),a)};if(o){let e=K(G(o,`light`),i);return{light:e,dark:[...e].toReversed()}}if(s){let e=K(G(s,`dark`),a);return{light:[...e].toReversed(),dark:e}}return{light:[...i],dark:[...a]}}function vt(e){return e.category===`color`&&!e.primitive&&!!e.tokenKey}function yt(e,t){let n={},r=(e,t)=>{let r=t.cssValue;typeof r!=`string`||r.length===0||Dt(r)||r===`[object Object]`||(n[e]=r)};for(let t of e)!t.tokenKey||vt(t)||r(U(t),t);for(let e of t)!e.tokenKey||!e.primitive||r(U(e),e);return n}function q(e,t,n,r){let i=n[r];if(typeof i!=`string`)return!1;let a=Q(e,t);return a!=null&&a===i}function bt(e,t,n){if(e.tokenKey&&q(e,t,n,e.tokenKey))return W(e.tokenKey);let r=$(e,t.byPath,t.byCssVar);if(r.tokenKey&&q(e,t,n,r.tokenKey))return W(r.tokenKey);if(r.primitive){let i=U(r);if(q(e,t,n,i))return W(i)}let i=Q(e,t);if(i)return a(i)}function J(e,t=2){let n=` `.repeat(t),r=Object.entries(e).toSorted(([e],[t])=>e.localeCompare(t,void 0,{numeric:!0}));return r.length===0?`{}`:`{\n${r.map(([e,t])=>{let r=typeof t==`string`&&it(t)?t:a(t);return`${n}${/^[A-Z_$][\w$]*$/i.test(e)?e:a(e)}: ${r}`}).join(`,
|
|
52
52
|
`)}\n${` `.repeat(Math.max(t-2,0))}}`}function Y(e,t=2){let n=` `.repeat(t),r=Object.entries(e).toSorted(([e],[t])=>e.localeCompare(t,void 0,{numeric:!0}));return r.length===0?`{}`:`{\n${r.map(([e,t])=>`${n}${/^[A-Z_$][\w$]*$/i.test(e)?e:a(e)}: ${t}`).join(`,
|
|
53
|
-
`)}\n${` `.repeat(Math.max(t-2,0))}}`}const
|
|
54
|
-
`)}\n${r}]`}function
|
|
55
|
-
${r}light: ${
|
|
56
|
-
${r}dark: ${
|
|
57
|
-
${i}}`}function
|
|
53
|
+
`)}\n${` `.repeat(Math.max(t-2,0))}}`}const xt=/^\{([^{}]+)\}$/,St=/\{([^{}]+)\}/g,Ct=/^var\((--[^),\s]+)(?:\s*,[^)]*)?\)$/,wt=/var\((--[^),\s]+)(?:\s*,[^)]*)?\)/g;function Tt(e){return{byPath:new Map(e.map(e=>[e.path,e])),byCssVar:new Map(e.map(e=>[(0,t.toThemeCssVar)(e.path),e]))}}function Et(e){if(typeof e==`string`)return xt.exec(e.trim())?.[1]?.trim()}function X(e){if(typeof e==`string`)return Ct.exec(e.trim())?.[1]}function Dt(e){return Et(e)!=null||X(e)!=null}function Z(e){return/var\(|\{[^{}]+\}/.test(e)}function Q(e,t){let n=$(e,t.byPath,t.byCssVar);if(n.category!=null&&n.category!==`color`)return;let r=[n.cssValue,n.tamaguiValue];for(let e of r)if(typeof e==`string`&&e.length>0&&!Dt(e))return e}function Ot(e,t){return e.replace(St,(e,n)=>{let r=t.byPath.get(n.trim());return r?Q(r,t)??e:e}).replace(wt,(e,n)=>{let r=t.byCssVar.get(n);return r?Q(r,t)??e:e})}function $(e,t,n){let r=e,i=new Set;for(let e=0;e<8;e++){if(i.has(r.path))return r;i.add(r.path);let e=Et(r.value);if(e){let n=t.get(e);if(!n||n.path===r.path)return r;r=n;continue}let a=X(r.value)??X(r.cssValue)??X(r.tamaguiValue);if(a){let e=n.get(a);if(!e||e.path===r.path)return r;r=e;continue}return r}return r}function kt(e,t){let n=t.toLowerCase(),r=e.split(/(?=[A-Z])/).filter(Boolean).filter(e=>e.toLowerCase()!==n);if(r.length!==0)return D(r)}function At(e){return tt(e)&&D(e.path.split(`.`).filter(Boolean))||e.tokenKey}function jt(e){let t=e.toLowerCase();return Ze(t)||Qe(t)}function Mt(e,t,n){let r=At(t);if(!r)return;let i=t.childTheme?.trim();if(!i||jt(i)){e.base[r]=n;return}let a=D([i]),o=kt(r,a);if(!o)return;let s=e.children[a]??{};s[o]=n,e.children[a]=s}function Nt(e,t){let n=typeof e.tamaguiValue==`string`?e.tamaguiValue:e.cssValue;if(typeof n!=`string`||n.length===0)return;let r=Ot(n,t);return r.length===0||Z(r)?void 0:a(e.category===`dropShadow`?st(r):r)}function Pt(e,t){let n=Tt(e),r={base:{},children:{}};for(let i of e){if(vt(i)){let e=bt(i,n,t);e&&Mt(r,i,e);continue}if(!tt(i))continue;let e=Nt(i,n);if(!e)continue;let a=i.childTheme?.trim();(a&&!jt(a)||$e(i))&&Mt(r,i,e)}return r}function Ft(e){let t=new Set;for(let n of e){for(let e of Object.keys(n.base))t.add(e);for(let e of Object.values(n.children))for(let n of Object.keys(e))t.add(n)}return[...t].toSorted((e,t)=>e.localeCompare(t,void 0,{numeric:!0}))}function It(e){return` ${/^[A-Z_$][\w$]*$/i.test(e)?e:a(e)}: string;`}function Lt(e,t){if(e.length!==0)return[`/**`,` * Theme values available on \`useTheme()\` and \`$\` style props for the ${t.specName||`design system`}.`,` *`," * Derived from semantic color tokens mapped by `createThemes`. Nested"," * themes (`light_primary`, `dark_danger`, …) come from each token's"," * `theme` / `$theme` property.",` *`,` * @see https://tamagui.dev/docs/intro/themes`,` */`,`export interface AppTheme {`,...e.map(It),`}`,``]}function Rt(e){return Object.keys(e).length>0}function zt(e){return/^[A-Z_$][\w$]*$/i.test(e)?e:a(e)}function Bt(e,t){let n=` `.repeat(t),r=` `.repeat(Math.max(t-2,0));return`[\n${e.map(e=>`${n}${e}`).join(`,
|
|
54
|
+
`)}\n${r}]`}function Vt(e,t,n){let r=` `.repeat(n),i=` `.repeat(Math.max(n-2,0)),a=n+2;return`{
|
|
55
|
+
${r}light: ${Bt(e,a)},
|
|
56
|
+
${r}dark: ${Bt(t,a)}
|
|
57
|
+
${i}}`}function Ht(e,t,n){let r=` `.repeat(n),i=` `.repeat(Math.max(n-2,0)),a=n+2;return`{
|
|
58
58
|
${r}light: ${Y(e,a)},
|
|
59
59
|
${r}dark: ${Y(t,a)}
|
|
60
|
-
${i}}`}function
|
|
61
|
-
`)}\n${i}}`}function
|
|
62
|
-
`)}\n${r}}`}function
|
|
60
|
+
${i}}`}function Ut(e,t){let n=Object.entries(e).toSorted(([e],[t])=>e.localeCompare(t));if(n.length===0)return`{}`;let r=` `.repeat(t),i=` `.repeat(Math.max(t-2,0)),a=t+2;return`{\n${n.map(([e,t])=>`${r}${zt(e)}: ${Y(t,a)}`).join(`,
|
|
61
|
+
`)}\n${i}}`}function Wt(e,t){let n=` `.repeat(t),r=` `.repeat(Math.max(t-2,0));return`{\n${e.map(e=>`${n}${zt(e)}: {}`).join(`,
|
|
62
|
+
`)}\n${r}}`}function Gt(e,t){return`const childThemeExtras: {
|
|
63
63
|
light: Record<string, Record<string, string>>;
|
|
64
64
|
dark: Record<string, Record<string, string>>;
|
|
65
65
|
} = {
|
|
66
|
-
light: ${
|
|
67
|
-
dark: ${
|
|
68
|
-
};`}function
|
|
66
|
+
light: ${Ut(e,4)},
|
|
67
|
+
dark: ${Ut(t,4)}
|
|
68
|
+
};`}function Kt(e,t,n){return Object.fromEntries(n.map(n=>[n,e.children[n]??t.children[n]??{}]))}function qt(e,t,n,r,i){let a=[...new Set([...Object.keys(e.children),...Object.keys(t.children)])].toSorted((e,t)=>e.localeCompare(t)),o=a.includes(`accent`),s=a.filter(e=>e!==`accent`),c=Rt(e.base)||Rt(t.base);if(!c&&a.length===0)return{statements:[],hasThemes:!1};let l=_t(r,i,lt,n,dt,ft),u=_t(r,i,ut,n,l.light,l.dark),d=[],f=[` componentThemes: false`],p=[` palette: ${Vt(l.light,l.dark,6)}`];if(c&&p.push(` extra: ${Ht(e.base,t.base,6)}`),f.push(` base: {\n${p.join(`,
|
|
69
69
|
`)}\n }`),o){let n=e.children.accent??t.children.accent??{},r=t.children.accent??e.children.accent??{};f.push(` accent: {
|
|
70
|
-
palette: ${
|
|
71
|
-
extra: ${
|
|
72
|
-
}`)}if(s.length>0){let n=
|
|
70
|
+
palette: ${Vt(u.light,u.dark,6)},
|
|
71
|
+
extra: ${Ht(n,r,6)}
|
|
72
|
+
}`)}if(s.length>0){let n=Kt(e,t,s),r=Kt(t,e,s);d.push(Gt(n,r),``),f.push(` childrenThemes: ${Wt(s,4)}`);let i=o?` || child === "accent"`:``;f.push(` getTheme: ({ name, theme, scheme }) => {
|
|
73
73
|
const child = name.replace(/^(?:light|dark)_/, "");
|
|
74
74
|
if (child === name${i}) {
|
|
75
75
|
return theme;
|
|
@@ -79,8 +79,8 @@ ${i}}`}function Vt(e,t){let n=Object.entries(e).toSorted(([e],[t])=>e.localeComp
|
|
|
79
79
|
|
|
80
80
|
return extras ? { ...theme, ...extras } : theme;
|
|
81
81
|
}`)}return d.push(`const themes = createThemes({\n${f.join(`,
|
|
82
|
-
`)}\n});`),{statements:d,hasThemes:!0}}function
|
|
83
|
-
`),`});`,``),_.length>0&&w.push(..._,``);let T=new Map;if(C.length>0)for(let[e,t]of C.entries()){let n=
|
|
82
|
+
`)}\n});`),{statements:d,hasThemes:!0}}function Jt(e,t,n={}){let r=e.fonts??{},i=n.useDefaultConfig===!0,o=n.animations??`css`,s=n.includeTypeAugmentation!==!1,c=t.filter(e=>e.category===`color`),l=H(c,`light`),u=H(c,`dark`),d=u.length>0,f=yt(l,u),p=H(t,`light`),m=d?H(t,`dark`):p,h=Pt(p,f),g=Pt(m,f),{statements:_,hasThemes:v}=qt(h,g,f,l,u),ee=Lt(Ft(d?[h,g]:[h]),{specName:e.name}),y=ct(p),b=[];Object.keys(f).length>0&&b.push(` color: ${J(f,4)}`);for(let e of rt){let t=y[e];t&&Object.keys(t).length>0&&b.push(` ${e}: ${J(t,4)}`)}let x=[`import { isWeb } from '@tamagui/constants';`];i&&x.push(`import { defaultConfig } from "@tamagui/config/v5";`),o!==!1&&x.push(`import { animations } from "${Xe[o]}";`),n.importConfig&&x.push(`import userConfig from "${n.importConfig}";`),v&&x.push(`import { createThemes } from "@tamagui/theme-builder";`);let S=[`createTamagui`,`px`];b.length>0&&S.push(`createTokens`);let C=He(t,r);C.length>0&&S.push(`createFont`),x.push(`import { ${S.join(`, `)} } from "@tamagui/core";`);let w=[`/* eslint-disable */`,``,`/*`,` * Generated by @razorwind/tamagui — Do not edit by hand.`,` * `,` * @see https://tamagui.dev/docs/core/configuration`,` * @see https://tamagui.dev/docs/intro/themes`,` * @see https://tamagui.dev/docs/guides/theme-builder`,` */`,``,...x,``];b.length>0&&w.push(`const tokens = createTokens({`,b.join(`,
|
|
83
|
+
`),`});`,``),_.length>0&&w.push(..._,``);let T=new Map;if(C.length>0)for(let[e,t]of C.entries()){let n=We(t.key,e);T.set(t.key,n),w.push(Ge(t,n),``)}let E=[];if(i&&E.push(` ...defaultConfig`),o!==!1&&E.push(` animations`),b.length>0&&(i?E.push(` tokens: {
|
|
84
84
|
...defaultConfig.tokens,
|
|
85
85
|
...tokens,
|
|
86
86
|
space: {
|
|
@@ -113,4 +113,4 @@ ${i}}`}function Vt(e,t){let n=Object.entries(e).toSorted(([e],[t])=>e.localeComp
|
|
|
113
113
|
*/
|
|
114
114
|
export const config = createTamagui({`,E.join(`,
|
|
115
115
|
`),n.importConfig?`, ...userConfig `:``,`});`,``,`export type AppConfig = typeof config;`,``),s&&w.push(`declare module "@tamagui/core" {`,` // eslint-disable-next-line @typescript-eslint/no-empty-object-type`,` interface TamaguiCustomConfig extends AppConfig {}`,`}`,``),w.push(`export default config;`,``),w.join(`
|
|
116
|
-
`)}function
|
|
116
|
+
`)}function Yt(e,r={}){let i=e.tokens&&Object.keys(e.tokens).length>0,a=e.fonts&&Object.keys(e.fonts).length>0;if(!i&&!a)return{};let o=i?O(e.tokens,r):[];if(o.length===0&&!a)return{};let s=r.outputPath??`tamagui.config.ts`,c=Jt(e,o,r),l=r.installGuide??Ke({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 Xt=(0,e.definePlugin)(e=>({name:`tamagui`,themeGeneration:`combined`,generate:async t=>Yt(t,e??{})}));exports.collectTamaguiFonts=He,exports.default=Xt,exports.flattenTokens=O,exports.fontVarName=We,Object.defineProperty(exports,"formatTokenValue",{enumerable:!0,get:function(){return t.formatTokenValue}}),exports.generateTamaguiConfig=Yt,exports.isPaletteGroup=v,exports.renderInstallMd=Ke,exports.renderTamaguiConfig=Jt,exports.resolveTokenCategory=te,exports.resolveTokenSets=t.resolveTokenSets,exports.tamaguiFontKeyFromRole=L,exports.toCamelCaseKey=D,Object.defineProperty(exports,"toCssVar",{enumerable:!0,get:function(){return t.toCssVar}}),exports.toTamaguiValue=o,exports.toTokenKey=ne,exports.typographyFontKey=we;
|
package/dist/index.d.cts
CHANGED
|
@@ -12,6 +12,9 @@ import { GeneratorFunctionResult } from "@power-plant/core";
|
|
|
12
12
|
type TamaguiAnimationDriver = "css" | "rn" | "reanimated" | "motion" | false;
|
|
13
13
|
/**
|
|
14
14
|
* Tamagui `createTokens` category keys we emit from DTCG tokens.
|
|
15
|
+
*
|
|
16
|
+
* `color` is palettes / primitives only. Semantic theme / `$theme` colors
|
|
17
|
+
* (including computed state siblings) go to `createThemes` extras.
|
|
15
18
|
*/
|
|
16
19
|
type TamaguiTokenCategory = "color" | "space" | "size" | "radius" | "zIndex" | "blur" | "fontSize" | "shadow" | "insetShadow" | "dropShadow" | "textShadow" | "fontWeight" | "boxShadow";
|
|
17
20
|
/**
|
|
@@ -108,7 +111,7 @@ interface FlatToken {
|
|
|
108
111
|
*/
|
|
109
112
|
childTheme?: string;
|
|
110
113
|
/**
|
|
111
|
-
* True when an ancestor group is marked as a primitive (`primitive: true` or `$type: "primitive"` or `$type: "palette"`). Those scales feed `createTokens({ color })` and `createThemes` palettes
|
|
114
|
+
* True when an ancestor group is marked as a primitive (`primitive: true` or `$type: "primitive"` or `$type: "palette"`). Those scales feed `createTokens({ color })` and `createThemes` palettes. Semantic colors (theme / `$theme`, including computed state siblings) are not primitives and go to extras only.
|
|
112
115
|
*/
|
|
113
116
|
primitive?: boolean;
|
|
114
117
|
}
|
|
@@ -219,11 +222,11 @@ declare function renderInstallMd(options: {
|
|
|
219
222
|
/**
|
|
220
223
|
* Render a Tamagui config module from flattened design tokens.
|
|
221
224
|
*
|
|
222
|
-
*
|
|
223
|
-
*
|
|
224
|
-
* with the theme name stripped from the token
|
|
225
|
-
* emitted as its own `createFont` entry with
|
|
226
|
-
* and weight (not a shared type scale).
|
|
225
|
+
* `createTokens({ color })` holds palette / primitive scales. Light and dark
|
|
226
|
+
* semantic colors become `createThemes` extra maps (tagged `$theme` names as
|
|
227
|
+
* `light_<name>` / `dark_<name>`, with the theme name stripped from the token
|
|
228
|
+
* key). Each typography token is emitted as its own `createFont` entry with
|
|
229
|
+
* that token's size, line height, and weight (not a shared type scale).
|
|
227
230
|
*
|
|
228
231
|
* @see https://tamagui.dev/docs/core/configuration
|
|
229
232
|
* @see https://tamagui.dev/docs/intro/themes
|
|
@@ -240,14 +243,17 @@ declare function generateTamaguiConfig(spec: Schema, options?: TamaguiPluginOpti
|
|
|
240
243
|
* Razorwind plugin that turns design tokens into a Tamagui config
|
|
241
244
|
* (`createTamagui` + `createTokens` + `createThemes` + `createFont`).
|
|
242
245
|
*
|
|
243
|
-
* Light and dark token sets are emitted as a single config.
|
|
244
|
-
*
|
|
245
|
-
* `$theme`
|
|
246
|
+
* Light and dark token sets are emitted as a single config.
|
|
247
|
+
* `createTokens({ color })` is palettes / primitives only. Semantic theme /
|
|
248
|
+
* `$theme` colors (including computed state siblings such as hover / pressed /
|
|
249
|
+
* disabled) go to `createThemes` extras — never to `tokens.color.*`. Tagged
|
|
250
|
+
* semantics become nested Tamagui themes via `createThemes` from
|
|
246
251
|
* `@tamagui/theme-builder` (`light_primary`, `dark_danger`, …), with the theme
|
|
247
252
|
* name stripped from the token key (`backgroundPrimarySubtle` + `theme: "primary"`
|
|
248
|
-
* → `backgroundSubtle`; `
|
|
249
|
-
*
|
|
250
|
-
*
|
|
253
|
+
* → `backgroundSubtle`; `backgroundDangerHover` → `backgroundHover` on `danger`;
|
|
254
|
+
* `ringPrimarySubtle` → `ringSubtle` on `primary`). Untagged semantic colors
|
|
255
|
+
* (overlay, link, …) land on `base.extra`. Primitive palettes feed
|
|
256
|
+
* `base.palette` / `accent.palette`.
|
|
251
257
|
*
|
|
252
258
|
* Typography tokens (`$type: "typography"`) each emit their own Tamagui
|
|
253
259
|
* `createFont` entry with that token's size, line height, and weight. Font
|
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;;;;
|
|
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;;;;;;;KASA;;;;UAkBK;;;;;;;;;EASf;;;;;;;EAQA,aAAa;;;;;;EAOb,aAAa;;;;;;EAOb,QAAQ;;;;EAKR;;;;EAKA;;;;;;;;EASA;;;;;EAMA,eAAe;;;;;;;EAQf;;;;;EAMA;;;;;UAMe;;EAEf;;EAEA,OAAO;;EAEP;;EAEA;;EAEA;;EAEA,WAAW;;EAEX;;EAEA;;EAEA;;;;;EAKA;;;;EAIA;;;;;;;;;iBCnEc,eAAe,MAAM;;;;iBAyGrB,qBACd,cACA,gBACC;;;;;;;iBAoEa,eAAe;;;;;;;;iBA0Bf,WAAW;;;;iBA2GX,cACd,QAAQ,SAAS,eAAe,SAChC,UAAS,KAAK,wCACb;;;;;;;;;UCrUc;;EAEf;;EAEA;;EAEA;EACA,MAAM;EACN,YAAY;EACZ,QAAQ;EACR,eAAe;;EAEf;;;;;;;;;iBA4Lc,uBAAuB;;;;;;;;;iBAiCvB,kBAAkB;;;;;;;iBA2WlB,oBACd,QAAQ,aACR,QAAQ,QACP;;;;;;iBAsFa,YAAY,aAAa;;;;;;;;;iBC/rBzB,eAAe,gBAAgB;;;;;;;;iBCnC/B,gBAAgB;EAAW;;;;;;;;;;;;;;;;;iBCkrC3B,oBACd,MAAM,QACN,QAAQ,aACR,UAAS;;;;iBAgOK,sBACd,MAAM,QACN,UAAS,uBACR,wBAAwB,QAAQ"}
|
package/dist/index.d.mts
CHANGED
|
@@ -12,6 +12,9 @@ import { GeneratorFunctionResult } from "@power-plant/core";
|
|
|
12
12
|
type TamaguiAnimationDriver = "css" | "rn" | "reanimated" | "motion" | false;
|
|
13
13
|
/**
|
|
14
14
|
* Tamagui `createTokens` category keys we emit from DTCG tokens.
|
|
15
|
+
*
|
|
16
|
+
* `color` is palettes / primitives only. Semantic theme / `$theme` colors
|
|
17
|
+
* (including computed state siblings) go to `createThemes` extras.
|
|
15
18
|
*/
|
|
16
19
|
type TamaguiTokenCategory = "color" | "space" | "size" | "radius" | "zIndex" | "blur" | "fontSize" | "shadow" | "insetShadow" | "dropShadow" | "textShadow" | "fontWeight" | "boxShadow";
|
|
17
20
|
/**
|
|
@@ -108,7 +111,7 @@ interface FlatToken {
|
|
|
108
111
|
*/
|
|
109
112
|
childTheme?: string;
|
|
110
113
|
/**
|
|
111
|
-
* True when an ancestor group is marked as a primitive (`primitive: true` or `$type: "primitive"` or `$type: "palette"`). Those scales feed `createTokens({ color })` and `createThemes` palettes
|
|
114
|
+
* True when an ancestor group is marked as a primitive (`primitive: true` or `$type: "primitive"` or `$type: "palette"`). Those scales feed `createTokens({ color })` and `createThemes` palettes. Semantic colors (theme / `$theme`, including computed state siblings) are not primitives and go to extras only.
|
|
112
115
|
*/
|
|
113
116
|
primitive?: boolean;
|
|
114
117
|
}
|
|
@@ -219,11 +222,11 @@ declare function renderInstallMd(options: {
|
|
|
219
222
|
/**
|
|
220
223
|
* Render a Tamagui config module from flattened design tokens.
|
|
221
224
|
*
|
|
222
|
-
*
|
|
223
|
-
*
|
|
224
|
-
* with the theme name stripped from the token
|
|
225
|
-
* emitted as its own `createFont` entry with
|
|
226
|
-
* and weight (not a shared type scale).
|
|
225
|
+
* `createTokens({ color })` holds palette / primitive scales. Light and dark
|
|
226
|
+
* semantic colors become `createThemes` extra maps (tagged `$theme` names as
|
|
227
|
+
* `light_<name>` / `dark_<name>`, with the theme name stripped from the token
|
|
228
|
+
* key). Each typography token is emitted as its own `createFont` entry with
|
|
229
|
+
* that token's size, line height, and weight (not a shared type scale).
|
|
227
230
|
*
|
|
228
231
|
* @see https://tamagui.dev/docs/core/configuration
|
|
229
232
|
* @see https://tamagui.dev/docs/intro/themes
|
|
@@ -240,14 +243,17 @@ declare function generateTamaguiConfig(spec: Schema, options?: TamaguiPluginOpti
|
|
|
240
243
|
* Razorwind plugin that turns design tokens into a Tamagui config
|
|
241
244
|
* (`createTamagui` + `createTokens` + `createThemes` + `createFont`).
|
|
242
245
|
*
|
|
243
|
-
* Light and dark token sets are emitted as a single config.
|
|
244
|
-
*
|
|
245
|
-
* `$theme`
|
|
246
|
+
* Light and dark token sets are emitted as a single config.
|
|
247
|
+
* `createTokens({ color })` is palettes / primitives only. Semantic theme /
|
|
248
|
+
* `$theme` colors (including computed state siblings such as hover / pressed /
|
|
249
|
+
* disabled) go to `createThemes` extras — never to `tokens.color.*`. Tagged
|
|
250
|
+
* semantics become nested Tamagui themes via `createThemes` from
|
|
246
251
|
* `@tamagui/theme-builder` (`light_primary`, `dark_danger`, …), with the theme
|
|
247
252
|
* name stripped from the token key (`backgroundPrimarySubtle` + `theme: "primary"`
|
|
248
|
-
* → `backgroundSubtle`; `
|
|
249
|
-
*
|
|
250
|
-
*
|
|
253
|
+
* → `backgroundSubtle`; `backgroundDangerHover` → `backgroundHover` on `danger`;
|
|
254
|
+
* `ringPrimarySubtle` → `ringSubtle` on `primary`). Untagged semantic colors
|
|
255
|
+
* (overlay, link, …) land on `base.extra`. Primitive palettes feed
|
|
256
|
+
* `base.palette` / `accent.palette`.
|
|
251
257
|
*
|
|
252
258
|
* Typography tokens (`$type: "typography"`) each emit their own Tamagui
|
|
253
259
|
* `createFont` entry with that token's size, line height, and weight. Font
|
package/dist/index.mjs
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import{definePlugin as e}from"@razorwind/core/plugin";import{createDocument as t,formatTokenValue as n,formatTokenValue as r,isObject as i,resolveTokenSets as a,toCssVar as o,toThemeCssVar as s}from"@razorwind/core/utils";import{basename as c,dirname as l,join as u}from"node:path";import{cssFontFamily as d,fontFamilyName as f}from"@razorwind/core/lib/fonts";function p(e){return e.replaceAll(`\\`,`\\\\`).replaceAll(`"`,`\\"`).replaceAll(`
|
|
2
|
-
`,`\\n`).replaceAll(`\r`,`\\r`)}function m(e){return typeof e==`string`?`"${p(e)}"`:typeof e==`number`||typeof e==`boolean`?String(e):e==null?`undefined`:JSON.stringify(e)}function h(e,t){if(typeof e==`number`)return e;if(typeof e==`boolean`)return Number(e);if(i(e)&&typeof e.value==`number`&&typeof e.unit==`string`){let t=e.unit.toLowerCase();return t===`px`||t===``?e.value:t===`rem`?e.value*16:`${e.value}${e.unit}`}if(typeof e==`string`){let t=/^(-?\d+(?:\.\d+)?)px$/i.exec(e.trim());if(t)return Number(t[1]);let n=/^(-?\d+(?:\.\d+)?)rem$/i.exec(e.trim());if(n)return Number(n[1])*16;let r=Number(e);return!Number.isNaN(r)&&e.trim()!==``?r:e}return r(e,t)}const g=/^(?:font-size|fontSize)(?:\.|$)/i,_=/^(?:font-weight|fontWeight)(?:\.|$)/i,v=/^shadow(?:\.|$)/i,y=/^inset-shadow(?:\.|$)/i,b=/^drop-shadow(?:\.|$)/i,x=/^text-shadow(?:\.|$)/i,S=/^(?:blur|blur-?radius)(?:\.|$)/i,C=new Set([`color`,`shadow`,`insetShadow`,`dropShadow`,`textShadow`]),w=[{prefix:/^(?:color|colours?|palette)(?:\.|$)/i,category:`color`},{prefix:g,category:`fontSize`},{prefix:_,category:`fontWeight`},{prefix:b,category:`dropShadow`},{prefix:y,category:`insetShadow`},{prefix:x,category:`textShadow`},{prefix:v,category:`shadow`},{prefix:S,category:`blur`},{prefix:/^(?:space|spacing|gap)(?:\.|$)/i,category:`space`},{prefix:/^inset(?:\.|$)/i,category:`space`},{prefix:/^(?:size|sizing)(?:\.|$)/i,category:`size`},{prefix:/^(?:radius|rounded|radii)(?:\.|$)/i,category:`radius`},{prefix:/^(?:z-?index|zindex|elevation)(?:\.|$)/i,category:`zIndex`}];function T(e){return`$value`in e||`value`in e||`$ref`in e||`ref`in e}function E(e){return e===!0||e===`true`||e===1}function D(e){return E(e.palette)||E(e.$palette)?!0:
|
|
3
|
-
`)}\n }`}function
|
|
4
|
-
`)}\n${r}}`}function
|
|
5
|
-
`)}\n});`}function
|
|
2
|
+
`,`\\n`).replaceAll(`\r`,`\\r`)}function m(e){return typeof e==`string`?`"${p(e)}"`:typeof e==`number`||typeof e==`boolean`?String(e):e==null?`undefined`:JSON.stringify(e)}function h(e,t){if(typeof e==`number`)return e;if(typeof e==`boolean`)return Number(e);if(i(e)&&typeof e.value==`number`&&typeof e.unit==`string`){let t=e.unit.toLowerCase();return t===`px`||t===``?e.value:t===`rem`?e.value*16:`${e.value}${e.unit}`}if(typeof e==`string`){let t=/^(-?\d+(?:\.\d+)?)px$/i.exec(e.trim());if(t)return Number(t[1]);let n=/^(-?\d+(?:\.\d+)?)rem$/i.exec(e.trim());if(n)return Number(n[1])*16;let r=Number(e);return!Number.isNaN(r)&&e.trim()!==``?r:e}return r(e,t)}const g=/^(?:font-size|fontSize)(?:\.|$)/i,_=/^(?:font-weight|fontWeight)(?:\.|$)/i,v=/^shadow(?:\.|$)/i,y=/^inset-shadow(?:\.|$)/i,b=/^drop-shadow(?:\.|$)/i,x=/^text-shadow(?:\.|$)/i,S=/^(?:blur|blur-?radius)(?:\.|$)/i,C=new Set([`color`,`shadow`,`insetShadow`,`dropShadow`,`textShadow`]),w=[{prefix:/^(?:color|colours?|palette)(?:\.|$)/i,category:`color`},{prefix:g,category:`fontSize`},{prefix:_,category:`fontWeight`},{prefix:b,category:`dropShadow`},{prefix:y,category:`insetShadow`},{prefix:x,category:`textShadow`},{prefix:v,category:`shadow`},{prefix:S,category:`blur`},{prefix:/^(?:space|spacing|gap)(?:\.|$)/i,category:`space`},{prefix:/^inset(?:\.|$)/i,category:`space`},{prefix:/^(?:size|sizing)(?:\.|$)/i,category:`size`},{prefix:/^(?:radius|rounded|radii)(?:\.|$)/i,category:`radius`},{prefix:/^(?:z-?index|zindex|elevation)(?:\.|$)/i,category:`zIndex`}];function T(e){return`$value`in e||`value`in e||`$ref`in e||`ref`in e}function E(e){return e===!0||e===`true`||e===1}function D(e){return E(e.palette)||E(e.$palette)?!0:O(e)===`palette`}function ee(e,t){return(e===`palette`||e===`$palette`)&&(typeof t==`boolean`||typeof t==`number`||typeof t==`string`)}function te(e){return e===!0||e===`true`||e===1}function ne(e){return te(e.primitive)||te(e.$primitive)?!0:O(e)===`primitive`}function re(e,t){return(e===`primitive`||e===`$primitive`)&&(typeof t==`boolean`||typeof t==`number`||typeof t==`string`)}function ie(e,t){return(e===`theme`||e===`$theme`)&&typeof t==`string`}function ae(e){if(typeof e.theme==`string`&&e.theme.length>0)return e.theme;if(typeof e.$theme==`string`&&e.$theme.length>0)return e.$theme}function oe(e){if(typeof e.$description==`string`)return e.$description;if(typeof e.description==`string`)return e.description}function O(e,t){return typeof e.$type==`string`?e.$type:typeof e.type==`string`?e.type:t}function se(e){if(`$value`in e)return e.$value;if(`value`in e)return e.value;if(typeof e.$ref==`string`)return e.$ref;if(typeof e.ref==`string`)return e.ref}function ce(e,t){for(let{prefix:t,category:n}of w)if(t.test(e))return n;if(t===`color`||t===`palette`)return`color`;if(t===`shadow`)return y.test(e)?`insetShadow`:b.test(e)?`dropShadow`:x.test(e)?`textShadow`:`shadow`;if(t===`dimension`){if(g.test(e))return`fontSize`;if(S.test(e))return`blur`;if(/(?:^|\.)(?:space|spacing|gap)(?:\.|$)/i.test(e)||/(?:^|\.)inset(?:\.|$)/i.test(e))return`space`;if(/radius|rounded/i.test(e))return`radius`;if(/z-?index|elevation/i.test(e))return`zIndex`;if(/(?:^|\.)(?:size|sizing)(?:\.|$)/i.test(e)||/(?:^|\.)(?:width|height)(?:\.|$)/i.test(e))return`size`}if(t===`number`&&/z-?index|elevation/i.test(e))return`zIndex`;if(t===`fontWeight`||_.test(e))return`fontWeight`}function k(e){return e.flatMap(e=>e.split(/[-_\s]+/)).filter(Boolean).map((e,t)=>{if(/^\d/.test(e))return e;let n=e.toLowerCase();return t===0?n:`${n.charAt(0).toUpperCase()}${n.slice(1)}`}).join(``)}function le(e){let t=e.split(`.`).filter(Boolean),n=t[0];n&&/^(?:color|colours?|palette|primitive|space|spacing|gap|inset|shadow|inset-shadow|drop-shadow|text-shadow|font-size|fontSize|font-weight|fontWeight|size|sizing|radius|rounded|radii|z-?index|zindex|elevation|blur)$/i.test(n)&&t.shift();let r=t.length>0?t:e.split(`.`).slice(-1);return r.length===1&&/^(?:DEFAULT|default)$/i.test(r[0]??``)?`true`:k(r)}function ue(e,t,r,a,o,s,c){if(!i(e))return;let l=o||ne(e)||D(e),u=O(e,r),d=ae(e)??s;if(T(e)){let r=se(e),i=t.join(`.`),o=ce(i,u)??(l||u===`primitive`||u===`palette`?`color`:void 0),s=n(r,u),f=o&&C.has(o)||u===`color`||u===`palette`||u===`primitive`||u===`shadow`?s:h(r,u);c.push({path:i,type:u===`palette`||u===`primitive`?`color`:u,value:r,cssValue:s,tamaguiValue:f,category:o,tokenKey:o?le(i):void 0,description:oe(e),theme:a,...d?{childTheme:d}:{},...l?{primitive:!0}:{}});return}for(let[n,r]of Object.entries(e))n.startsWith(`$`)&&n!==`$palette`&&n!==`$primitive`||ee(n,r)||re(n,r)||ie(n,r)||ue(r,[...t,n],u,a,l,d,c)}function de(e,t={}){let n=t.includeTypes?new Set(t.includeTypes):void 0,r=[];for(let t of a(e)){let e=t.id==="default"?void 0:t.id;ue(t.tokens,[],void 0,e,!1,void 0,r)}return n?r.filter(e=>!e.type||n.has(e.type)):r}const fe=/^\{([^{}]+)\}$/,pe=/^(?:typography|type|text)$/i,me=/^(?:font|fonts|font-family|fontFamily)$/i,he=/^(?:font-size|fontSize)$/i,ge=/^(?:font-weight|fontWeight)$/i,_e=/^(?:line-height|lineHeight|leading)$/i,ve=/^(?:letter-spacing|letterSpacing|tracking)$/i,ye=/^(?:[a-z]{2}(?:-[A-Z]{2})?|cn|zh|jp|ja|kr|ko|ar|he|th|hi|ru|french|mandarin|chinese|japanese|korean|arabic|hebrew)$/i,be=[`fontFamily`,`font-family`,`family`],xe=[`fontSize`,`font-size`,`size`],Se=[`fontWeight`,`font-weight`,`weight`],Ce=[`lineHeight`,`line-height`,`leading`],we=[`letterSpacing`,`letter-spacing`,`tracking`],Te={1:12,2:14,3:16,4:18,5:20,6:24,7:28,8:32,9:40,10:48};function A(e){if(typeof e==`string`)return fe.exec(e.trim())?.[1]?.trim()}function j(e,t){let n=A(e);if(!n)return e;let r=t.get(n),i=new Set([n]);for(let e=0;e<8&&r;e++){let e=A(r.value);if(!e||i.has(e))return r.value;i.add(e),r=t.get(e)}return r?.value??e}function M(e,t){for(let n of t)if(e[n]!==void 0&&e[n]!==null)return e[n]}function Ee(e){return(e.split(`,`)[0]?.trim()??e).replaceAll(/^["']|["']$/g,``)}function De(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 Oe(e){return Number.isInteger(e)?e:Math.round(e*1e3)/1e3}function N(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 ke(e){if(typeof e==`number`&&Number.isFinite(e))return String(e);if(typeof e==`string`){let t=e.trim();if(t.length===0||A(t))return;let n=Number(t);return Number.isNaN(n)?t:String(n)}let t=h(e);if(typeof t==`number`&&Number.isFinite(t))return String(t);if(typeof t==`string`&&t.length>0)return t}function Ae(e,t){let n=N(e);if(n!=null)return Oe(t!=null&&n>0&&n<=4?n*t:n)}function P(e,t){return t.test(e.split(`.`)[0]??``)}function je(e){return e.split(`.`).filter(Boolean).at(-1)??e}function F(e,t){let n=e.split(`.`).filter(Boolean);return n[0]&&t.test(n[0])&&n.shift(),n}function I(e){let t=e.flatMap(e=>e.split(`-`)).filter(Boolean);return t.length===0?`body`:t.map((e,t)=>t===0?`${e.charAt(0).toLowerCase()}${e.slice(1)}`:`${e.charAt(0).toUpperCase()}${e.slice(1)}`).join(``)}function L(e){switch(e.toLowerCase()){case`sans`:case`body`:case`serif`:return`body`;case`monospace`:case`mono`:return`mono`;default:return I([e])}}function Me(e){return e.role?L(e.role):L(e.name)}function Ne(e){let t=F(e,pe);if(t.length===0)return`body`;let n=t.at(-1);return n&&t.length>=2&&ye.test(n)&&!n.includes(`_`)?`${t.slice(0,-1).join(`-`)}_${n}`:t.join(`-`)}function Pe(e){return L(F(e,me)[0]??je(e))}function Fe(e,t){let n=F(e,t);return n.length===0||n.length===1&&/^(?:DEFAULT|default)$/i.test(n[0])?`true`:I(n)}function Ie(e){return e.type===`typography`&&i(e.value)}function Le(e){return e.category===`fontSize`||e.category===`fontWeight`||Re(e)||ze(e)||Be(e)||Ve(e)?!1:e.type===`fontFamily`||P(e.path,me)}function Re(e){return e.category===`fontSize`||P(e.path,he)}function ze(e){return e.category===`fontWeight`||e.type===`fontWeight`||P(e.path,ge)}function Be(e){return P(e.path,_e)}function Ve(e){return P(e.path,ve)}function He(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 Ue(e){let t=new Map;for(let n of Object.values(e)){let e=Me(n);t.has(e)&&(e=He(t,I([n.name]))),t.set(e,n)}return t}function We(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=Ee(t).toLowerCase();return r.find(e=>f(e).toLowerCase()===i||e.title.toLowerCase()===i||e.name.toLowerCase()===i)}function Ge(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 R(e,t){return{...e,webFamily:d(t),nativeFamily:f(t),face:t.source===`local`?Ge(t):e.face}}function z(e){return{key:e,webFamily:`system-ui, sans-serif`,nativeFamily:`system-ui`,size:{},lineHeight:{},weight:{},letterSpacing:{}}}function Ke(e,t){return{...e,webFamily:t,nativeFamily:Ee(t)}}const qe=/^(?:font-size|fontSize|font-weight|fontWeight|line-height|lineHeight|leading|letter-spacing|letterSpacing|tracking)$/i;function B(e,t){let n={true:e},r=A(t);if(!r)return n;let i=Fe(r,qe);return i&&i!==`true`&&(n[i]=e),n}function Je(e){return Object.keys(e.size).length>0?e:{...e,size:{...Te}}}function Ye(e,t,n,r){if(!i(t.value))return e;let a=M(t.value,be),o=A(a),s=De(j(a,n)),c=We(r,s,o),l=e;c?l=R(l,c):s&&(l=Ke(l,s));let u=M(t.value,xe),d=N(j(u,n));d!=null&&(l={...l,size:B(d,u)});let f=M(t.value,Se),p=ke(j(f,n));p&&(l={...l,weight:B(p,f)});let m=M(t.value,we),h=N(j(m,n));h!=null&&(l={...l,letterSpacing:B(h,m)});let g=M(t.value,Ce),_=Ae(j(g,n),l.size.true??d);return _!=null&&(l={...l,lineHeight:B(_,g)}),Xe(l)}function Xe(e){let t=Object.keys(e.size);if(t.length===0)return e;let n=e=>{let n=e.true??Object.values(e)[0];if(n==null)return e;let r={...e};for(let e of t)r[e]??=n;return r};return{...e,lineHeight:Object.keys(e.lineHeight).length>0?n(e.lineHeight):e.lineHeight,weight:Object.keys(e.weight).length>0?n(e.weight):e.weight,letterSpacing:Object.keys(e.letterSpacing).length>0?n(e.letterSpacing):e.letterSpacing}}function V(e,t){let n=new Map(e.map(e=>[e.path,e])),r=new Map,i=e=>{r.set(e.key,e)};if(t)for(let[e,n]of Ue(t))i(R(z(e),n));for(let a of e){if(!Le(a)||Ie(a))continue;let e=Pe(a.path),o=De(j(a.value,n)),s=r.get(e)??z(e),c=We(t,o,a.path),l=s;c?l=R(l,c):(o&&s.webFamily===z(e).webFamily||o&&!r.has(e))&&(l=Ke(l,o)),i(l)}for(let a of e){if(!Ie(a))continue;let e=Ne(a.path);i(Ye(r.get(e)??z(e),a,n,t))}return[...r.values()].map(Je).toSorted((e,t)=>e.key.localeCompare(t.key))}function Ze(e){return/^\d+$/.test(e)||/^[A-Z_$][\w$]*$/i.test(e)?e:m(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}${Ze(e)}: ${m(t)}`).join(`,
|
|
4
|
+
`)}\n${r}}`}function Qe(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 $e(e,t){let n=m(e.webFamily),r=m(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 et(e){return`# Installing Tamagui Config
|
|
6
6
|
|
|
7
7
|
Generated by \`@razorwind/tamagui\`.
|
|
8
8
|
|
|
@@ -48,28 +48,28 @@ 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
|
|
51
|
+
`}const tt=new Set([`default`,`light`,`theme`]),nt=/^base(?:[A-Z]\w*|[._-].+)?$/i,rt=/^ring(?:\.|$)/i,it={css:`@tamagui/config/v5-css`,rn:`@tamagui/config/v5-rn`,reanimated:`@tamagui/config/v5-reanimated`,motion:`@tamagui/config/v5-motion`};function at(e){return tt.has(e)}function ot(e){return e===`dark`}function U(e,t){let n=new Map,r=t===`dark`?ot:at;for(let t of e){let e=t.theme?.toLowerCase();(!e||nt.test(e))&&n.set(t.path,t)}for(let t of e){let e=t.theme?.toLowerCase();e&&r(e)&&n.set(t.path,t)}return[...n.values()]}function st(e){return rt.test(e.path)&&e.category===`shadow`}const ct=new Set([`shadow`,`insetShadow`,`dropShadow`,`textShadow`,`boxShadow`]);function lt(e){return!e.primitive&&!!e.tokenKey&&(e.type===`shadow`||e.category!=null&&ct.has(e.category))}const ut=new Set([`fontSize`,`blur`]),dt=[`space`,`size`,`radius`,`zIndex`,`blur`,`fontSize`,`shadow`,`insetShadow`,`dropShadow`,`textShadow`,`boxShadow`,`fontWeight`];function ft(e){return/^px\(-?\d/.test(e)}function pt(e){if(e.category===`radius`&&e.tokenKey?.startsWith(`borderRadius`)){let t=e.tokenKey.replace(/^borderRadius/,``);return t?k([t]):e.tokenKey}return e.tokenKey??``}function mt(e,t){let n=$(e,t.byPath,t.byCssVar).tamaguiValue;if(e.category&&ut.has(e.category)&&typeof n==`number`)return`px(${n})`;if(typeof n==`string`){let r=Lt(n,t);return e.category===`dropShadow`?ht(r):r}return n}function ht(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 gt(e){let t={},n=Nt(e);for(let r of e){if(!r.category||r.category===`color`||!r.tokenKey||st(r))continue;let e=pt(r);if(!e)continue;let i=mt(r,n);if(typeof i==`string`&&It(i))continue;let a=t[r.category]??{};a[e]=i,t[r.category]=a}return t}function W(e){let t=e.path.replace(/^color\./i,``).replaceAll(`.`,``);return e.theme?`${e.theme}${t[0]?.toUpperCase()??``}${t.slice(1)}`:t}function G(e){return`tokens.color.${e}.val`}const _t=[`base`,`gray`,`grey`,`neutral`],vt=[`accent`,`brand`],yt=[`"#ffffff"`,`"#000000"`],bt=[`"#000000"`,`"#ffffff"`];function xt(e){if(e.category!==`color`||!e.primitive)return;let t=e.path.replace(/^color\./i,``).split(`.`).filter(Boolean),n=t.at(-1);if(!n||t.length<2)return;let r=Number(n);if(Number.isFinite(r))return{name:t.slice(0,-1).join(`.`).toLowerCase(),step:r}}function St(e,t){let n=W(e);if(n in t)return G(n);let r=typeof e.cssValue==`string`&&e.cssValue.length>0?e.cssValue:typeof e.tamaguiValue==`string`?e.tamaguiValue:void 0;return r?m(r):`"#000000"`}function Ct(e){let t=e.trim(),n=/^oklch\(\s*([0-9.]+)(%?)/i.exec(t);if(n){let e=Number(n[1]);return Number.isFinite(e)?n[2]===`%`||e>1?e/100:e:void 0}let r=/^#([\da-f]{3,8})$/i.exec(t);if(!r)return;let i=r[1],a,o,s;if(i.length===3||i.length===4)a=Number.parseInt(i[0]+i[0],16),o=Number.parseInt(i[1]+i[1],16),s=Number.parseInt(i[2]+i[2],16);else if(i.length===6||i.length===8)a=Number.parseInt(i.slice(0,2),16),o=Number.parseInt(i.slice(2,4),16),s=Number.parseInt(i.slice(4,6),16);else return;return(.2126*a+.7152*o+.0722*s)/255}function wt(e,t,n){let r=new Map;for(let t of e){let e=xt(t);if(!e)continue;let i=typeof t.cssValue==`string`&&t.cssValue.length>0?t.cssValue:void 0,a=r.get(e.name)??[];a.push({step:e.step,expression:St(t,n),lightness:i?Ct(i):void 0}),r.set(e.name,a)}for(let e of t){let t=r.get(e);if(!t||t.length===0)continue;let n=new Map;for(let e of t.toSorted((e,t)=>e.step-t.step))n.set(e.step,e);return[...n.values()]}}function K(e,t){if(e.filter(e=>e.lightness!=null).length>=2)return[...e].toSorted((e,n)=>{let r=e.lightness??.5,i=n.lightness??.5;return t===`light`?i-r:r-i}).map(e=>e.expression);let n=e.toSorted((e,t)=>e.step-t.step).map(e=>e.expression);return t===`light`?n:[...n].toReversed()}function q(e,t){return e.length>=2?e:e.length===1?[e[0],t[1]??`"#000000"`]:[...t]}function Tt(e,t,n,r,i,a){let o=wt(e,n,r),s=wt(t,n,r);if(o&&s)return{light:q(K(o,`light`),i),dark:q(K(s,`dark`),a)};if(o){let e=q(K(o,`light`),i);return{light:e,dark:[...e].toReversed()}}if(s){let e=q(K(s,`dark`),a);return{light:[...e].toReversed(),dark:e}}return{light:[...i],dark:[...a]}}function Et(e){return e.category===`color`&&!e.primitive&&!!e.tokenKey}function Dt(e,t){let n={},r=(e,t)=>{let r=t.cssValue;typeof r!=`string`||r.length===0||Ft(r)||r===`[object Object]`||(n[e]=r)};for(let t of e)!t.tokenKey||Et(t)||r(W(t),t);for(let e of t)!e.tokenKey||!e.primitive||r(W(e),e);return n}function J(e,t,n,r){let i=n[r];if(typeof i!=`string`)return!1;let a=Q(e,t);return a!=null&&a===i}function Ot(e,t,n){if(e.tokenKey&&J(e,t,n,e.tokenKey))return G(e.tokenKey);let r=$(e,t.byPath,t.byCssVar);if(r.tokenKey&&J(e,t,n,r.tokenKey))return G(r.tokenKey);if(r.primitive){let i=W(r);if(J(e,t,n,i))return G(i)}let i=Q(e,t);if(i)return m(i)}function Y(e,t=2){let n=` `.repeat(t),r=Object.entries(e).toSorted(([e],[t])=>e.localeCompare(t,void 0,{numeric:!0}));return r.length===0?`{}`:`{\n${r.map(([e,t])=>{let r=typeof t==`string`&&ft(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 X(e,t=2){let n=` `.repeat(t),r=Object.entries(e).toSorted(([e],[t])=>e.localeCompare(t,void 0,{numeric:!0}));return r.length===0?`{}`:`{\n${r.map(([e,t])=>`${n}${/^[A-Z_$][\w$]*$/i.test(e)?e:m(e)}: ${t}`).join(`,
|
|
53
|
-
`)}\n${` `.repeat(Math.max(t-2,0))}}`}const
|
|
54
|
-
`)}\n${r}]`}function
|
|
55
|
-
${r}light: ${
|
|
56
|
-
${r}dark: ${
|
|
57
|
-
${i}}`}function
|
|
53
|
+
`)}\n${` `.repeat(Math.max(t-2,0))}}`}const kt=/^\{([^{}]+)\}$/,At=/\{([^{}]+)\}/g,jt=/^var\((--[^),\s]+)(?:\s*,[^)]*)?\)$/,Mt=/var\((--[^),\s]+)(?:\s*,[^)]*)?\)/g;function Nt(e){return{byPath:new Map(e.map(e=>[e.path,e])),byCssVar:new Map(e.map(e=>[s(e.path),e]))}}function Pt(e){if(typeof e==`string`)return kt.exec(e.trim())?.[1]?.trim()}function Z(e){if(typeof e==`string`)return jt.exec(e.trim())?.[1]}function Ft(e){return Pt(e)!=null||Z(e)!=null}function It(e){return/var\(|\{[^{}]+\}/.test(e)}function Q(e,t){let n=$(e,t.byPath,t.byCssVar);if(n.category!=null&&n.category!==`color`)return;let r=[n.cssValue,n.tamaguiValue];for(let e of r)if(typeof e==`string`&&e.length>0&&!Ft(e))return e}function Lt(e,t){return e.replace(At,(e,n)=>{let r=t.byPath.get(n.trim());return r?Q(r,t)??e:e}).replace(Mt,(e,n)=>{let r=t.byCssVar.get(n);return r?Q(r,t)??e:e})}function $(e,t,n){let r=e,i=new Set;for(let e=0;e<8;e++){if(i.has(r.path))return r;i.add(r.path);let e=Pt(r.value);if(e){let n=t.get(e);if(!n||n.path===r.path)return r;r=n;continue}let a=Z(r.value)??Z(r.cssValue)??Z(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 Rt(e,t){let n=t.toLowerCase(),r=e.split(/(?=[A-Z])/).filter(Boolean).filter(e=>e.toLowerCase()!==n);if(r.length!==0)return k(r)}function zt(e){return lt(e)&&k(e.path.split(`.`).filter(Boolean))||e.tokenKey}function Bt(e){let t=e.toLowerCase();return at(t)||ot(t)}function Vt(e,t,n){let r=zt(t);if(!r)return;let i=t.childTheme?.trim();if(!i||Bt(i)){e.base[r]=n;return}let a=k([i]),o=Rt(r,a);if(!o)return;let s=e.children[a]??{};s[o]=n,e.children[a]=s}function Ht(e,t){let n=typeof e.tamaguiValue==`string`?e.tamaguiValue:e.cssValue;if(typeof n!=`string`||n.length===0)return;let r=Lt(n,t);return r.length===0||It(r)?void 0:m(e.category===`dropShadow`?ht(r):r)}function Ut(e,t){let n=Nt(e),r={base:{},children:{}};for(let i of e){if(Et(i)){let e=Ot(i,n,t);e&&Vt(r,i,e);continue}if(!lt(i))continue;let e=Ht(i,n);if(!e)continue;let a=i.childTheme?.trim();(a&&!Bt(a)||st(i))&&Vt(r,i,e)}return r}function Wt(e){let t=new Set;for(let n of e){for(let e of Object.keys(n.base))t.add(e);for(let e of Object.values(n.children))for(let n of Object.keys(e))t.add(n)}return[...t].toSorted((e,t)=>e.localeCompare(t,void 0,{numeric:!0}))}function Gt(e){return` ${/^[A-Z_$][\w$]*$/i.test(e)?e:m(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 semantic color tokens mapped by `createThemes`. Nested"," * themes (`light_primary`, `dark_danger`, …) come from each token's"," * `theme` / `$theme` property.",` *`,` * @see https://tamagui.dev/docs/intro/themes`,` */`,`export interface AppTheme {`,...e.map(Gt),`}`,``]}function qt(e){return Object.keys(e).length>0}function Jt(e){return/^[A-Z_$][\w$]*$/i.test(e)?e:m(e)}function Yt(e,t){let n=` `.repeat(t),r=` `.repeat(Math.max(t-2,0));return`[\n${e.map(e=>`${n}${e}`).join(`,
|
|
54
|
+
`)}\n${r}]`}function Xt(e,t,n){let r=` `.repeat(n),i=` `.repeat(Math.max(n-2,0)),a=n+2;return`{
|
|
55
|
+
${r}light: ${Yt(e,a)},
|
|
56
|
+
${r}dark: ${Yt(t,a)}
|
|
57
|
+
${i}}`}function Zt(e,t,n){let r=` `.repeat(n),i=` `.repeat(Math.max(n-2,0)),a=n+2;return`{
|
|
58
58
|
${r}light: ${X(e,a)},
|
|
59
59
|
${r}dark: ${X(t,a)}
|
|
60
|
-
${i}}`}function
|
|
61
|
-
`)}\n${i}}`}function
|
|
62
|
-
`)}\n${r}}`}function
|
|
60
|
+
${i}}`}function Qt(e,t){let n=Object.entries(e).toSorted(([e],[t])=>e.localeCompare(t));if(n.length===0)return`{}`;let r=` `.repeat(t),i=` `.repeat(Math.max(t-2,0)),a=t+2;return`{\n${n.map(([e,t])=>`${r}${Jt(e)}: ${X(t,a)}`).join(`,
|
|
61
|
+
`)}\n${i}}`}function $t(e,t){let n=` `.repeat(t),r=` `.repeat(Math.max(t-2,0));return`{\n${e.map(e=>`${n}${Jt(e)}: {}`).join(`,
|
|
62
|
+
`)}\n${r}}`}function en(e,t){return`const childThemeExtras: {
|
|
63
63
|
light: Record<string, Record<string, string>>;
|
|
64
64
|
dark: Record<string, Record<string, string>>;
|
|
65
65
|
} = {
|
|
66
|
-
light: ${
|
|
67
|
-
dark: ${
|
|
68
|
-
};`}function
|
|
66
|
+
light: ${Qt(e,4)},
|
|
67
|
+
dark: ${Qt(t,4)}
|
|
68
|
+
};`}function tn(e,t,n){return Object.fromEntries(n.map(n=>[n,e.children[n]??t.children[n]??{}]))}function nn(e,t,n,r,i){let a=[...new Set([...Object.keys(e.children),...Object.keys(t.children)])].toSorted((e,t)=>e.localeCompare(t)),o=a.includes(`accent`),s=a.filter(e=>e!==`accent`),c=qt(e.base)||qt(t.base);if(!c&&a.length===0)return{statements:[],hasThemes:!1};let l=Tt(r,i,_t,n,yt,bt),u=Tt(r,i,vt,n,l.light,l.dark),d=[],f=[` componentThemes: false`],p=[` palette: ${Xt(l.light,l.dark,6)}`];if(c&&p.push(` extra: ${Zt(e.base,t.base,6)}`),f.push(` base: {\n${p.join(`,
|
|
69
69
|
`)}\n }`),o){let n=e.children.accent??t.children.accent??{},r=t.children.accent??e.children.accent??{};f.push(` accent: {
|
|
70
|
-
palette: ${
|
|
71
|
-
extra: ${
|
|
72
|
-
}`)}if(s.length>0){let n
|
|
70
|
+
palette: ${Xt(u.light,u.dark,6)},
|
|
71
|
+
extra: ${Zt(n,r,6)}
|
|
72
|
+
}`)}if(s.length>0){let n=tn(e,t,s),r=tn(t,e,s);d.push(en(n,r),``),f.push(` childrenThemes: ${$t(s,4)}`);let i=o?` || child === "accent"`:``;f.push(` getTheme: ({ name, theme, scheme }) => {
|
|
73
73
|
const child = name.replace(/^(?:light|dark)_/, "");
|
|
74
74
|
if (child === name${i}) {
|
|
75
75
|
return theme;
|
|
@@ -79,8 +79,8 @@ ${i}}`}function Xt(e,t){let n=Object.entries(e).toSorted(([e],[t])=>e.localeComp
|
|
|
79
79
|
|
|
80
80
|
return extras ? { ...theme, ...extras } : theme;
|
|
81
81
|
}`)}return d.push(`const themes = createThemes({\n${f.join(`,
|
|
82
|
-
`)}\n});`),{statements:d,hasThemes:!0}}function
|
|
83
|
-
`),`});`,``),_.length>0&&T.push(..._,``);let E=new Map;if(w.length>0)for(let[e,t]of w.entries()){let n=
|
|
82
|
+
`)}\n});`),{statements:d,hasThemes:!0}}function rn(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=U(s,`light`),l=U(s,`dark`),u=l.length>0,d=Dt(c,l),f=U(t,`light`),p=u?U(t,`dark`):f,h=Ut(f,d),g=Ut(p,d),{statements:_,hasThemes:v}=nn(h,g,d,c,l),y=Kt(Wt(u?[h,g]:[h]),{specName:e.name}),b=gt(f),x=[];Object.keys(d).length>0&&x.push(` color: ${Y(d,4)}`);for(let e of dt){let t=b[e];t&&Object.keys(t).length>0&&x.push(` ${e}: ${Y(t,4)}`)}let S=[`import { isWeb } from '@tamagui/constants';`];i&&S.push(`import { defaultConfig } from "@tamagui/config/v5";`),a!==!1&&S.push(`import { animations } from "${it[a]}";`),n.importConfig&&S.push(`import userConfig from "${n.importConfig}";`),v&&S.push(`import { createThemes } from "@tamagui/theme-builder";`);let C=[`createTamagui`,`px`];x.length>0&&C.push(`createTokens`);let w=V(t,r);w.length>0&&C.push(`createFont`),S.push(`import { ${C.join(`, `)} } from "@tamagui/core";`);let T=[`/* eslint-disable */`,``,`/*`,` * Generated by @razorwind/tamagui — Do not edit by hand.`,` * `,` * @see https://tamagui.dev/docs/core/configuration`,` * @see https://tamagui.dev/docs/intro/themes`,` * @see https://tamagui.dev/docs/guides/theme-builder`,` */`,``,...S,``];x.length>0&&T.push(`const tokens = createTokens({`,x.join(`,
|
|
83
|
+
`),`});`,``),_.length>0&&T.push(..._,``);let E=new Map;if(w.length>0)for(let[e,t]of w.entries()){let n=Qe(t.key,e);E.set(t.key,n),T.push($e(t,n),``)}let D=[];if(i&&D.push(` ...defaultConfig`),a!==!1&&D.push(` animations`),x.length>0&&(i?D.push(` tokens: {
|
|
84
84
|
...defaultConfig.tokens,
|
|
85
85
|
...tokens,
|
|
86
86
|
space: {
|
|
@@ -113,5 +113,5 @@ ${i}}`}function Xt(e,t){let n=Object.entries(e).toSorted(([e],[t])=>e.localeComp
|
|
|
113
113
|
*/
|
|
114
114
|
export const config = createTamagui({`,D.join(`,
|
|
115
115
|
`),n.importConfig?`, ...userConfig `:``,`});`,``,`export type AppConfig = typeof config;`,``),o&&T.push(`declare module "@tamagui/core" {`,` // eslint-disable-next-line @typescript-eslint/no-empty-object-type`,` interface TamaguiCustomConfig extends AppConfig {}`,`}`,``),T.push(`export default config;`,``),T.join(`
|
|
116
|
-
`)}function
|
|
116
|
+
`)}function an(e,n={}){let r=e.tokens&&Object.keys(e.tokens).length>0,i=e.fonts&&Object.keys(e.fonts).length>0;if(!r&&!i)return{};let a=r?de(e.tokens,n):[];if(a.length===0&&!i)return{};let o=n.outputPath??`tamagui.config.ts`,s=rn(e,a,n),c=n.installGuide??et({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 on=e(e=>({name:`tamagui`,themeGeneration:`combined`,generate:async t=>an(t,e??{})}));export{V as collectTamaguiFonts,on as default,de as flattenTokens,Qe as fontVarName,n as formatTokenValue,an as generateTamaguiConfig,D as isPaletteGroup,et as renderInstallMd,rn as renderTamaguiConfig,ce as resolveTokenCategory,a as resolveTokenSets,L as tamaguiFontKeyFromRole,k as toCamelCaseKey,o as toCssVar,h as toTamaguiValue,le as toTokenKey,Ne as typographyFontKey};
|
|
117
117
|
//# 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.58",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Razorwind plugin that creates Tamagui theme tokens from Razorwind design tokens.",
|
|
6
6
|
"repository": {
|
|
@@ -108,5 +108,5 @@
|
|
|
108
108
|
"typescript": "^6.0.3"
|
|
109
109
|
},
|
|
110
110
|
"publishConfig": { "access": "public" },
|
|
111
|
-
"gitHead": "
|
|
111
|
+
"gitHead": "f4837fd0768365441dbe976e43c16cff981b2a9b"
|
|
112
112
|
}
|