@razorwind/tamagui 0.0.55 → 0.0.57
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 +40 -12
- package/dist/index.d.cts +11 -9
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts +11 -9
- package/dist/index.mjs +40 -12
- package/package.json +5 -3
package/dist/index.cjs
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});let e=require("@razorwind/core/plugin"),t=require("@razorwind/core/utils"),n=require("node:path"),r=require("@razorwind/core/lib/fonts");function i(e){return e.replaceAll(`\\`,`\\\\`).replaceAll(`"`,`\\"`).replaceAll(`
|
|
2
|
-
`,`\\n`).replaceAll(`\r`,`\\r`)}function a(e){return typeof e==`string`?`"${i(e)}"`:typeof e==`number`||typeof e==`boolean`?String(e):e==null?`undefined`:JSON.stringify(e)}function o(e,n){if(typeof e==`number`)return e;if(typeof e==`boolean`)return Number(e);if((0,t.isObject)(e)&&typeof e.value==`number`&&typeof e.unit==`string`){let t=e.unit.toLowerCase();return t===`px`||t===``?e.value:t===`rem`?e.value*16:`${e.value}${e.unit}`}if(typeof e==`string`){let t=/^(-?\d+(?:\.\d+)?)px$/i.exec(e.trim());if(t)return Number(t[1]);let n=/^(-?\d+(?:\.\d+)?)rem$/i.exec(e.trim());if(n)return Number(n[1])*16;let r=Number(e);return!Number.isNaN(r)&&e.trim()!==``?r:e}return(0,t.formatTokenValue)(e,n)}const s=/^(?:font-size|fontSize)(?:\.|$)/i,c=/^(?:font-weight|fontWeight)(?:\.|$)/i,l=/^shadow(?:\.|$)/i,u=/^inset-shadow(?:\.|$)/i,d=/^drop-shadow(?:\.|$)/i,f=/^text-shadow(?:\.|$)/i,p=/^(?:blur|blur-?radius)(?:\.|$)/i,m=new Set([`color`,`shadow`,`insetShadow`,`dropShadow`,`textShadow`]),h=[{prefix:/^(?:color|colours?|palette)(?:\.|$)/i,category:`color`},{prefix:s,category:`fontSize`},{prefix:c,category:`fontWeight`},{prefix:d,category:`dropShadow`},{prefix:u,category:`insetShadow`},{prefix:f,category:`textShadow`},{prefix:l,category:`shadow`},{prefix:p,category:`blur`},{prefix:/^(?:space|spacing|gap)(?:\.|$)/i,category:`space`},{prefix:/^inset(?:\.|$)/i,category:`space`},{prefix:/^(?:size|sizing)(?:\.|$)/i,category:`size`},{prefix:/^(?:radius|rounded|radii)(?:\.|$)/i,category:`radius`},{prefix:/^(?:z-?index|zindex|elevation)(?:\.|$)/i,category:`zIndex`}];function g(e){return`$value`in e||`value`in e||`$ref`in e||`ref`in e}function _(e){return e===!0||e===`true`||e===1}function 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 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:
|
|
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
|
|
|
9
9
|
## Files
|
|
10
10
|
|
|
11
|
-
- \`${e.outputPath}\` — Tamagui config (\`createTamagui\` + \`
|
|
11
|
+
- \`${e.outputPath}\` — Tamagui config (\`createTamagui\` + \`createThemes\` with light, dark, and nested semantic themes)
|
|
12
12
|
|
|
13
13
|
## Setup
|
|
14
14
|
|
|
@@ -48,11 +48,39 @@ export function App() {
|
|
|
48
48
|
## Regenerate
|
|
49
49
|
|
|
50
50
|
Re-run Razorwind generate when tokens change so \`${e.outputPath}\` stays aligned with your design system.
|
|
51
|
-
`}const
|
|
52
|
-
`)}\n${` `.repeat(Math.max(t-2,0))}}`}function
|
|
53
|
-
`)}\n${` `.repeat(Math.max(t-2,0))}}`}const
|
|
54
|
-
`)}\n
|
|
55
|
-
|
|
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=Q(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=wt(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`&&Dt(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,t){let n={},r=(e,t)=>{let r=t.cssValue;typeof r!=`string`||r.length===0||Et(r)||r===`[object Object]`||(n[e]=r)};for(let t of e)t.tokenKey&&(t.primitive?r(U(t),t):r(t.tokenKey,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=Z(e,t);return a!=null&&a===i}function yt(e,t,n){if(e.tokenKey&&q(e,t,n,e.tokenKey))return W(e.tokenKey);let r=Q(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=Z(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
|
+
`)}\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 bt=/^\{([^{}]+)\}$/,xt=/\{([^{}]+)\}/g,St=/^var\((--[^),\s]+)(?:\s*,[^)]*)?\)$/,Ct=/var\((--[^),\s]+)(?:\s*,[^)]*)?\)/g;function wt(e){return{byPath:new Map(e.map(e=>[e.path,e])),byCssVar:new Map(e.map(e=>[(0,t.toThemeCssVar)(e.path),e]))}}function Tt(e){if(typeof e==`string`)return bt.exec(e.trim())?.[1]?.trim()}function X(e){if(typeof e==`string`)return St.exec(e.trim())?.[1]}function Et(e){return Tt(e)!=null||X(e)!=null}function Dt(e){return/var\(|\{[^{}]+\}/.test(e)}function Z(e,t){let n=Q(e,t.byPath,t.byCssVar);if(n.category!=null&&n.category!==`color`)return;let r=[n.cssValue,n.tamaguiValue];for(let e of r)if(typeof e==`string`&&e.length>0&&!Et(e))return e}function Ot(e,t){return e.replace(xt,(e,n)=>{let r=t.byPath.get(n.trim());return r?Z(r,t)??e:e}).replace(Ct,(e,n)=>{let r=t.byCssVar.get(n);return r?Z(r,t)??e:e})}function Q(e,t,n){let r=e,i=new Set;for(let e=0;e<8;e++){if(i.has(r.path))return r;i.add(r.path);let e=Tt(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 e.category===`color`&&!e.primitive&&!!e.tokenKey}function jt(e){return tt(e)&&D(e.path.split(`.`).filter(Boolean))||e.tokenKey}function Mt(e){let t=e.toLowerCase();return Ze(t)||Qe(t)}function Nt(e,t,n){let r=jt(t);if(!r)return;let i=t.childTheme?.trim();if(!i||Mt(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 Pt(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||Dt(r)?void 0:a(e.category===`dropShadow`?st(r):r)}function Ft(e,t){let n=wt(e),r={base:{},children:{}};for(let i of e){if(At(i)){let e=yt(i,n,t);e&&Nt(r,i,e);continue}if(!tt(i))continue;let e=Pt(i,n);if(!e)continue;let a=i.childTheme?.trim();(a&&!Mt(a)||$e(i))&&Nt(r,i,e)}return r}function It(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 Lt(e){return` ${/^[A-Z_$][\w$]*$/i.test(e)?e:a(e)}: string;`}function Rt(e,t){if(e.length!==0)return[`/**`,` * Theme values available on \`useTheme()\` and \`$\` style props for the ${t.specName||`design system`}.`,` *`," * Derived from 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(Lt),`}`,``]}function zt(e){return Object.keys(e).length>0}function $(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
|
+
${r}light: ${Y(e,a)},
|
|
59
|
+
${r}dark: ${Y(t,a)}
|
|
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}${$(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}${$(e)}: {}`).join(`,
|
|
62
|
+
`)}\n${r}}`}function Gt(e,t){return`const childThemeExtras: {
|
|
63
|
+
light: Record<string, Record<string, string>>;
|
|
64
|
+
dark: Record<string, Record<string, string>>;
|
|
65
|
+
} = {
|
|
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=zt(e.base)||zt(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
|
+
`)}\n }`),o){let n=e.children.accent??t.children.accent??{},r=t.children.accent??e.children.accent??{};f.push(` accent: {
|
|
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
|
+
const child = name.replace(/^(?:light|dark)_/, "");
|
|
74
|
+
if (child === name${i}) {
|
|
75
|
+
return theme;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
const extras = childThemeExtras[scheme ?? "light"][child];
|
|
79
|
+
|
|
80
|
+
return extras ? { ...theme, ...extras } : theme;
|
|
81
|
+
}`)}return d.push(`const themes = createThemes({\n${f.join(`,
|
|
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=vt(l,u),p=H(t,`light`),m=d?H(t,`dark`):p,h=Ft(p,f),g=Ft(m,f),{statements:_,hasThemes:v}=qt(h,g,f,l,u),ee=Rt(It(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: {
|
|
56
84
|
...defaultConfig.tokens,
|
|
57
85
|
...tokens,
|
|
58
86
|
space: {
|
|
@@ -78,11 +106,11 @@ Re-run Razorwind generate when tokens change so \`${e.outputPath}\` stays aligne
|
|
|
78
106
|
}`):E.push(` fonts: {
|
|
79
107
|
${e.join(`,
|
|
80
108
|
`)}
|
|
81
|
-
}`)}return n.shorthands&&E.push(` shorthands: ${
|
|
109
|
+
}`)}return n.shorthands&&E.push(` shorthands: ${J(n.shorthands,4)}`),n.media&&E.push(` media: ${a(n.media)}`),n.defaultFont&&E.push(` defaultFont: ${a(n.defaultFont)}`),w.push(``,...ee??[],`/**
|
|
82
110
|
* The Tamagui config for the ${e.name||`design system`}.
|
|
83
111
|
*
|
|
84
112
|
* @see https://tamagui.dev/docs/core/configuration
|
|
85
113
|
*/
|
|
86
114
|
export const config = createTamagui({`,E.join(`,
|
|
87
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(`
|
|
88
|
-
`)}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
|
@@ -22,7 +22,7 @@ interface TamaguiPluginOptions {
|
|
|
22
22
|
* Output path written relative to the execution cwd.
|
|
23
23
|
*
|
|
24
24
|
* Light and dark schemes are always written to this single file — Tamagui
|
|
25
|
-
* `
|
|
25
|
+
* `createThemes` encodes both as `light` / `dark` plus nested children.
|
|
26
26
|
*
|
|
27
27
|
* @defaultValue `"tamagui.config.ts"`
|
|
28
28
|
*/
|
|
@@ -108,7 +108,7 @@ interface FlatToken {
|
|
|
108
108
|
*/
|
|
109
109
|
childTheme?: string;
|
|
110
110
|
/**
|
|
111
|
-
* True when an ancestor group is marked as a primitive (`primitive: true` or `$type: "primitive"` or `$type: "palette"`). Those scales feed `createTokens({ color })` and are skipped when building semantic
|
|
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, and are skipped when building semantic extras.
|
|
112
112
|
*/
|
|
113
113
|
primitive?: boolean;
|
|
114
114
|
}
|
|
@@ -219,7 +219,7 @@ declare function renderInstallMd(options: {
|
|
|
219
219
|
/**
|
|
220
220
|
* Render a Tamagui config module from flattened design tokens.
|
|
221
221
|
*
|
|
222
|
-
* Light and dark token sets become `
|
|
222
|
+
* Light and dark token sets become `createThemes` extra maps. Semantic colors with
|
|
223
223
|
* a `theme` / `$theme` property are nested as `light_<name>` / `dark_<name>`,
|
|
224
224
|
* with the theme name stripped from the token key. Each typography token is
|
|
225
225
|
* emitted as its own `createFont` entry with that token's size, line height,
|
|
@@ -238,15 +238,16 @@ declare function generateTamaguiConfig(spec: Schema, options?: TamaguiPluginOpti
|
|
|
238
238
|
//#region src/index.d.ts
|
|
239
239
|
/**
|
|
240
240
|
* Razorwind plugin that turns design tokens into a Tamagui config
|
|
241
|
-
* (`createTamagui` + `createTokens` + `
|
|
241
|
+
* (`createTamagui` + `createTokens` + `createThemes` + `createFont`).
|
|
242
242
|
*
|
|
243
243
|
* Light and dark token sets are emitted as a single config. Semantic colors
|
|
244
244
|
* and shadows (not marked `palette` / `primitive`) that declare `theme` /
|
|
245
|
-
* `$theme` become nested Tamagui themes
|
|
246
|
-
*
|
|
247
|
-
*
|
|
248
|
-
*
|
|
249
|
-
*
|
|
245
|
+
* `$theme` become nested Tamagui themes via `createThemes` from
|
|
246
|
+
* `@tamagui/theme-builder` (`light_primary`, `dark_danger`, …), with the theme
|
|
247
|
+
* name stripped from the token key (`backgroundPrimarySubtle` + `theme: "primary"`
|
|
248
|
+
* → `backgroundSubtle`; `ringPrimarySubtle` → `ringSubtle` on `primary`).
|
|
249
|
+
* Untagged semantic colors land on `base.extra`. Primitive palettes stay on
|
|
250
|
+
* `createTokens({ color })` and feed `base.palette` / `accent.palette`.
|
|
250
251
|
*
|
|
251
252
|
* Typography tokens (`$type: "typography"`) each emit their own Tamagui
|
|
252
253
|
* `createFont` entry with that token's size, line height, and weight. Font
|
|
@@ -255,6 +256,7 @@ declare function generateTamaguiConfig(spec: Schema, options?: TamaguiPluginOpti
|
|
|
255
256
|
*
|
|
256
257
|
* @see https://tamagui.dev/docs/core/configuration
|
|
257
258
|
* @see https://tamagui.dev/docs/intro/themes
|
|
259
|
+
* @see https://tamagui.dev/docs/guides/theme-builder
|
|
258
260
|
* @see https://tamagui.dev/docs/core/font-language#font-tokens
|
|
259
261
|
*
|
|
260
262
|
* @example
|
package/dist/index.d.cts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.cts","names":[],"sources":["../src/types.ts","../src/flatten.ts","../src/fonts.ts","../src/format.ts","../src/install.ts","../src/generate.ts","../src/index.ts"],"mappings":";;;;;;;;;;;KA0BY;;;;KAMA;;;;UAkBK;;;;;;;;;EASf;;;;;;;EAQA,aAAa;;;;;;EAOb,aAAa;;;;;;EAOb,QAAQ;;;;EAKR;;;;EAKA;;;;;;;;EASA;;;;;EAMA,eAAe;;;;;;;EAQf;;;;;EAMA;;;;;UAMe;;EAEf;;EAEA,OAAO;;EAEP;;EAEA;;EAEA;;EAEA,WAAW;;EAEX;;EAEA;;EAEA;;;;;EAKA;;;;EAIA;;;;;;;;;iBChEc,eAAe,MAAM;;;;iBAyGrB,qBACd,cACA,gBACC;;;;;;;iBAoEa,eAAe;;;;;;;;iBA0Bf,WAAW;;;;iBA2GX,cACd,QAAQ,SAAS,eAAe,SAChC,UAAS,KAAK,wCACb;;;;;;;;;UCrUc;;EAEf;;EAEA;;EAEA;EACA,MAAM;EACN,YAAY;EACZ,QAAQ;EACR,eAAe;;EAEf;;;;;;;;;iBA4Lc,uBAAuB;;;;;;;;;iBAiCvB,kBAAkB;;;;;;;iBA2WlB,oBACd,QAAQ,aACR,QAAQ,QACP;;;;;;iBAsFa,YAAY,aAAa;;;;;;;;;iBC/rBzB,eAAe,gBAAgB;;;;;;;;iBCnC/B,gBAAgB;EAAW;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"index.d.cts","names":[],"sources":["../src/types.ts","../src/flatten.ts","../src/fonts.ts","../src/format.ts","../src/install.ts","../src/generate.ts","../src/index.ts"],"mappings":";;;;;;;;;;;KA0BY;;;;KAMA;;;;UAkBK;;;;;;;;;EASf;;;;;;;EAQA,aAAa;;;;;;EAOb,aAAa;;;;;;EAOb,QAAQ;;;;EAKR;;;;EAKA;;;;;;;;EASA;;;;;EAMA,eAAe;;;;;;;EAQf;;;;;EAMA;;;;;UAMe;;EAEf;;EAEA,OAAO;;EAEP;;EAEA;;EAEA;;EAEA,WAAW;;EAEX;;EAEA;;EAEA;;;;;EAKA;;;;EAIA;;;;;;;;;iBChEc,eAAe,MAAM;;;;iBAyGrB,qBACd,cACA,gBACC;;;;;;;iBAoEa,eAAe;;;;;;;;iBA0Bf,WAAW;;;;iBA2GX,cACd,QAAQ,SAAS,eAAe,SAChC,UAAS,KAAK,wCACb;;;;;;;;;UCrUc;;EAEf;;EAEA;;EAEA;EACA,MAAM;EACN,YAAY;EACZ,QAAQ;EACR,eAAe;;EAEf;;;;;;;;;iBA4Lc,uBAAuB;;;;;;;;;iBAiCvB,kBAAkB;;;;;;;iBA2WlB,oBACd,QAAQ,aACR,QAAQ,QACP;;;;;;iBAsFa,YAAY,aAAa;;;;;;;;;iBC/rBzB,eAAe,gBAAgB;;;;;;;;iBCnC/B,gBAAgB;EAAW;;;;;;;;;;;;;;;;;iBCirC3B,oBACd,MAAM,QACN,QAAQ,aACR,UAAS;;;;iBAgOK,sBACd,MAAM,QACN,UAAS,uBACR,wBAAwB,QAAQ"}
|
package/dist/index.d.mts
CHANGED
|
@@ -22,7 +22,7 @@ interface TamaguiPluginOptions {
|
|
|
22
22
|
* Output path written relative to the execution cwd.
|
|
23
23
|
*
|
|
24
24
|
* Light and dark schemes are always written to this single file — Tamagui
|
|
25
|
-
* `
|
|
25
|
+
* `createThemes` encodes both as `light` / `dark` plus nested children.
|
|
26
26
|
*
|
|
27
27
|
* @defaultValue `"tamagui.config.ts"`
|
|
28
28
|
*/
|
|
@@ -108,7 +108,7 @@ interface FlatToken {
|
|
|
108
108
|
*/
|
|
109
109
|
childTheme?: string;
|
|
110
110
|
/**
|
|
111
|
-
* True when an ancestor group is marked as a primitive (`primitive: true` or `$type: "primitive"` or `$type: "palette"`). Those scales feed `createTokens({ color })` and are skipped when building semantic
|
|
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, and are skipped when building semantic extras.
|
|
112
112
|
*/
|
|
113
113
|
primitive?: boolean;
|
|
114
114
|
}
|
|
@@ -219,7 +219,7 @@ declare function renderInstallMd(options: {
|
|
|
219
219
|
/**
|
|
220
220
|
* Render a Tamagui config module from flattened design tokens.
|
|
221
221
|
*
|
|
222
|
-
* Light and dark token sets become `
|
|
222
|
+
* Light and dark token sets become `createThemes` extra maps. Semantic colors with
|
|
223
223
|
* a `theme` / `$theme` property are nested as `light_<name>` / `dark_<name>`,
|
|
224
224
|
* with the theme name stripped from the token key. Each typography token is
|
|
225
225
|
* emitted as its own `createFont` entry with that token's size, line height,
|
|
@@ -238,15 +238,16 @@ declare function generateTamaguiConfig(spec: Schema, options?: TamaguiPluginOpti
|
|
|
238
238
|
//#region src/index.d.ts
|
|
239
239
|
/**
|
|
240
240
|
* Razorwind plugin that turns design tokens into a Tamagui config
|
|
241
|
-
* (`createTamagui` + `createTokens` + `
|
|
241
|
+
* (`createTamagui` + `createTokens` + `createThemes` + `createFont`).
|
|
242
242
|
*
|
|
243
243
|
* Light and dark token sets are emitted as a single config. Semantic colors
|
|
244
244
|
* and shadows (not marked `palette` / `primitive`) that declare `theme` /
|
|
245
|
-
* `$theme` become nested Tamagui themes
|
|
246
|
-
*
|
|
247
|
-
*
|
|
248
|
-
*
|
|
249
|
-
*
|
|
245
|
+
* `$theme` become nested Tamagui themes via `createThemes` from
|
|
246
|
+
* `@tamagui/theme-builder` (`light_primary`, `dark_danger`, …), with the theme
|
|
247
|
+
* name stripped from the token key (`backgroundPrimarySubtle` + `theme: "primary"`
|
|
248
|
+
* → `backgroundSubtle`; `ringPrimarySubtle` → `ringSubtle` on `primary`).
|
|
249
|
+
* Untagged semantic colors land on `base.extra`. Primitive palettes stay on
|
|
250
|
+
* `createTokens({ color })` and feed `base.palette` / `accent.palette`.
|
|
250
251
|
*
|
|
251
252
|
* Typography tokens (`$type: "typography"`) each emit their own Tamagui
|
|
252
253
|
* `createFont` entry with that token's size, line height, and weight. Font
|
|
@@ -255,6 +256,7 @@ declare function generateTamaguiConfig(spec: Schema, options?: TamaguiPluginOpti
|
|
|
255
256
|
*
|
|
256
257
|
* @see https://tamagui.dev/docs/core/configuration
|
|
257
258
|
* @see https://tamagui.dev/docs/intro/themes
|
|
259
|
+
* @see https://tamagui.dev/docs/guides/theme-builder
|
|
258
260
|
* @see https://tamagui.dev/docs/core/font-language#font-tokens
|
|
259
261
|
*
|
|
260
262
|
* @example
|
package/dist/index.mjs
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import{definePlugin as e}from"@razorwind/core/plugin";import{createDocument as t,formatTokenValue as n,formatTokenValue as r,isObject as i,resolveTokenSets as a,toCssVar as o,toThemeCssVar as s}from"@razorwind/core/utils";import{basename as c,dirname as l,join as u}from"node:path";import{cssFontFamily as d,fontFamilyName as f}from"@razorwind/core/lib/fonts";function p(e){return e.replaceAll(`\\`,`\\\\`).replaceAll(`"`,`\\"`).replaceAll(`
|
|
2
|
-
`,`\\n`).replaceAll(`\r`,`\\r`)}function m(e){return typeof e==`string`?`"${p(e)}"`:typeof e==`number`||typeof e==`boolean`?String(e):e==null?`undefined`:JSON.stringify(e)}function h(e,t){if(typeof e==`number`)return e;if(typeof e==`boolean`)return Number(e);if(i(e)&&typeof e.value==`number`&&typeof e.unit==`string`){let t=e.unit.toLowerCase();return t===`px`||t===``?e.value:t===`rem`?e.value*16:`${e.value}${e.unit}`}if(typeof e==`string`){let t=/^(-?\d+(?:\.\d+)?)px$/i.exec(e.trim());if(t)return Number(t[1]);let n=/^(-?\d+(?:\.\d+)?)rem$/i.exec(e.trim());if(n)return Number(n[1])*16;let r=Number(e);return!Number.isNaN(r)&&e.trim()!==``?r:e}return r(e,t)}const g=/^(?:font-size|fontSize)(?:\.|$)/i,_=/^(?:font-weight|fontWeight)(?:\.|$)/i,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
|
|
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
|
|
|
9
9
|
## Files
|
|
10
10
|
|
|
11
|
-
- \`${e.outputPath}\` — Tamagui config (\`createTamagui\` + \`
|
|
11
|
+
- \`${e.outputPath}\` — Tamagui config (\`createTamagui\` + \`createThemes\` with light, dark, and nested semantic themes)
|
|
12
12
|
|
|
13
13
|
## Setup
|
|
14
14
|
|
|
@@ -48,11 +48,39 @@ export function App() {
|
|
|
48
48
|
## Regenerate
|
|
49
49
|
|
|
50
50
|
Re-run Razorwind generate when tokens change so \`${e.outputPath}\` stays aligned with your design system.
|
|
51
|
-
`}const
|
|
52
|
-
`)}\n${` `.repeat(Math.max(t-2,0))}}`}function
|
|
53
|
-
`)}\n${` `.repeat(Math.max(t-2,0))}}`}const
|
|
54
|
-
`)}\n
|
|
55
|
-
|
|
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=It(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=Mt(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`&&Ft(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,t){let n={},r=(e,t)=>{let r=t.cssValue;typeof r!=`string`||r.length===0||Pt(r)||r===`[object Object]`||(n[e]=r)};for(let t of e)t.tokenKey&&(t.primitive?r(W(t),t):r(t.tokenKey,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 Dt(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
|
+
`)}\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 Ot=/^\{([^{}]+)\}$/,kt=/\{([^{}]+)\}/g,At=/^var\((--[^),\s]+)(?:\s*,[^)]*)?\)$/,jt=/var\((--[^),\s]+)(?:\s*,[^)]*)?\)/g;function Mt(e){return{byPath:new Map(e.map(e=>[e.path,e])),byCssVar:new Map(e.map(e=>[s(e.path),e]))}}function Nt(e){if(typeof e==`string`)return Ot.exec(e.trim())?.[1]?.trim()}function Z(e){if(typeof e==`string`)return At.exec(e.trim())?.[1]}function Pt(e){return Nt(e)!=null||Z(e)!=null}function Ft(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&&!Pt(e))return e}function It(e,t){return e.replace(kt,(e,n)=>{let r=t.byPath.get(n.trim());return r?Q(r,t)??e:e}).replace(jt,(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=Nt(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 Lt(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 Rt(e){return e.category===`color`&&!e.primitive&&!!e.tokenKey}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=Lt(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=It(n,t);return r.length===0||Ft(r)?void 0:m(e.category===`dropShadow`?ht(r):r)}function Ut(e,t){let n=Mt(e),r={base:{},children:{}};for(let i of e){if(Rt(i)){let e=Dt(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
|
+
${r}light: ${X(e,a)},
|
|
59
|
+
${r}dark: ${X(t,a)}
|
|
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
|
+
light: Record<string, Record<string, string>>;
|
|
64
|
+
dark: Record<string, Record<string, string>>;
|
|
65
|
+
} = {
|
|
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
|
+
`)}\n }`),o){let n=e.children.accent??t.children.accent??{},r=t.children.accent??e.children.accent??{};f.push(` accent: {
|
|
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
|
+
const child = name.replace(/^(?:light|dark)_/, "");
|
|
74
|
+
if (child === name${i}) {
|
|
75
|
+
return theme;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
const extras = childThemeExtras[scheme ?? "light"][child];
|
|
79
|
+
|
|
80
|
+
return extras ? { ...theme, ...extras } : theme;
|
|
81
|
+
}`)}return d.push(`const themes = createThemes({\n${f.join(`,
|
|
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=Et(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: {
|
|
56
84
|
...defaultConfig.tokens,
|
|
57
85
|
...tokens,
|
|
58
86
|
space: {
|
|
@@ -78,12 +106,12 @@ Re-run Razorwind generate when tokens change so \`${e.outputPath}\` stays aligne
|
|
|
78
106
|
}`):D.push(` fonts: {
|
|
79
107
|
${e.join(`,
|
|
80
108
|
`)}
|
|
81
|
-
}`)}return n.shorthands&&D.push(` shorthands: ${
|
|
109
|
+
}`)}return n.shorthands&&D.push(` shorthands: ${Y(n.shorthands,4)}`),n.media&&D.push(` media: ${m(n.media)}`),n.defaultFont&&D.push(` defaultFont: ${m(n.defaultFont)}`),T.push(``,...y??[],`/**
|
|
82
110
|
* The Tamagui config for the ${e.name||`design system`}.
|
|
83
111
|
*
|
|
84
112
|
* @see https://tamagui.dev/docs/core/configuration
|
|
85
113
|
*/
|
|
86
114
|
export const config = createTamagui({`,D.join(`,
|
|
87
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(`
|
|
88
|
-
`)}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};
|
|
89
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.57",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Razorwind plugin that creates Tamagui theme tokens from Razorwind design tokens.",
|
|
6
6
|
"repository": {
|
|
@@ -85,18 +85,20 @@
|
|
|
85
85
|
"dependencies": {
|
|
86
86
|
"@power-plant/core": "^0.0.91",
|
|
87
87
|
"@power-plant/dtcg-schema": "^0.0.1",
|
|
88
|
-
"@razorwind/core": "^0.0.
|
|
88
|
+
"@razorwind/core": "^0.0.59",
|
|
89
89
|
"@stryke/type-checks": "^0.6.44",
|
|
90
90
|
"@stryke/helpers": "^0.10.51",
|
|
91
91
|
"@stryke/string-format": "^0.17.53"
|
|
92
92
|
},
|
|
93
93
|
"peerDependencies": {
|
|
94
94
|
"@tamagui/config": ">=1.120.0",
|
|
95
|
+
"@tamagui/theme-builder": ">=1.120.0",
|
|
95
96
|
"react": ">=18",
|
|
96
97
|
"tamagui": ">=1.120.0"
|
|
97
98
|
},
|
|
98
99
|
"peerDependenciesMeta": {
|
|
99
100
|
"@tamagui/config": { "optional": true },
|
|
101
|
+
"@tamagui/theme-builder": { "optional": true },
|
|
100
102
|
"react": { "optional": true },
|
|
101
103
|
"tamagui": { "optional": true }
|
|
102
104
|
},
|
|
@@ -106,5 +108,5 @@
|
|
|
106
108
|
"typescript": "^6.0.3"
|
|
107
109
|
},
|
|
108
110
|
"publishConfig": { "access": "public" },
|
|
109
|
-
"gitHead": "
|
|
111
|
+
"gitHead": "6e999219a9c5a2e7393bad76dca80d6a7b92ea08"
|
|
110
112
|
}
|