@razorwind/tamagui 0.0.39 → 0.0.40

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -1,5 +1,5 @@
1
1
  Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});let e=require("@razorwind/core/plugin"),t=require("@razorwind/core/lib/fonts"),n=require("@razorwind/core/utils"),r=require("node:path");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,t){if(typeof e==`number`)return e;if(typeof e==`boolean`)return Number(e);if((0,n.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 String(e)}const s=[{prefix:/^(?:color|colours?|palette)\b/i,category:`color`},{prefix:/^(?:space|spacing|gap|inset)\b/i,category:`space`},{prefix:/^(?:size|sizing)\b/i,category:`size`},{prefix:/^(?:radius|rounded|radii)\b/i,category:`radius`},{prefix:/^(?:z-?index|zindex|elevation)\b/i,category:`zIndex`}];function c(e){return`$value`in e||`value`in e||`$ref`in e||`ref`in e}function l(e){if(typeof e.$description==`string`)return e.$description;if(typeof e.description==`string`)return e.description}function u(e,t){return typeof e.$type==`string`?e.$type:typeof e.type==`string`?e.type:t}function d(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 f(e,t){for(let{prefix:t,category:n}of s)if(t.test(e))return n;if(t===`color`)return`color`;if(t===`dimension`){if(/space|spacing|gap|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|width|height/i.test(e))return`size`}if(t===`number`&&/z-?index|elevation/i.test(e))return`zIndex`}function p(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 m(e){let t=e.split(`.`).filter(Boolean),n=t[0];n&&/^(?:color|colours?|palette|space|spacing|gap|inset|size|sizing|radius|rounded|radii|z-?index|zindex|elevation)$/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`:p(r)}function h(e,t,r,i,a){if(!(0,n.isObject)(e))return;let s=u(e,r);if(c(e)){let r=d(e),c=t.join(`.`),u=f(c,s),p=(0,n.formatTokenValue)(r,s),h=u===`color`||s===`color`?p:o(r,s);a.push({path:c,type:s,value:r,cssValue:p,tamaguiValue:h,category:u,tokenKey:u?m(c):void 0,description:l(e),theme:i});return}for(let[n,r]of Object.entries(e))n.startsWith(`$`)||h(r,[...t,n],s,i,a)}function g(e,t={}){let r=t.includeTypes?new Set(t.includeTypes):void 0,i=[];for(let t of(0,n.resolveTokenSets)(e)){let e=t.id==="default"?void 0:t.id;h(t.tokens,[],void 0,e,i)}return r?i.filter(e=>!e.type||r.has(e.type)):i}function _(e){return`# Installing Tamagui Config
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,t){if(typeof e==`number`)return e;if(typeof e==`boolean`)return Number(e);if((0,n.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 String(e)}const s=[{prefix:/^(?:color|colours?|palette)\b/i,category:`color`},{prefix:/^(?:space|spacing|gap|inset)\b/i,category:`space`},{prefix:/^(?:size|sizing)\b/i,category:`size`},{prefix:/^(?:radius|rounded|radii)\b/i,category:`radius`},{prefix:/^(?:z-?index|zindex|elevation)\b/i,category:`zIndex`}];function c(e){return`$value`in e||`value`in e||`$ref`in e||`ref`in e}function l(e){return e===!0||e===`true`||e===1}function u(e){return l(e.palette)||l(e.$palette)?!0:p(e)===`palette`}function d(e,t){return(e===`palette`||e===`$palette`)&&(typeof t==`boolean`||typeof t==`number`||typeof t==`string`)}function f(e){if(typeof e.$description==`string`)return e.$description;if(typeof e.description==`string`)return e.description}function p(e,t){return typeof e.$type==`string`?e.$type:typeof e.type==`string`?e.type:t}function m(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 h(e,t){for(let{prefix:t,category:n}of s)if(t.test(e))return n;if(t===`color`||t===`palette`)return`color`;if(t===`dimension`){if(/space|spacing|gap|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|width|height/i.test(e))return`size`}if(t===`number`&&/z-?index|elevation/i.test(e))return`zIndex`}function g(e){return e.flatMap(e=>e.split(/[-_\s]+/)).filter(Boolean).map((e,t)=>{if(/^\d/.test(e))return e;let n=e.toLowerCase();return t===0?n:`${n.charAt(0).toUpperCase()}${n.slice(1)}`}).join(``)}function _(e){let t=e.split(`.`).filter(Boolean),n=t[0];n&&/^(?:color|colours?|palette|space|spacing|gap|inset|size|sizing|radius|rounded|radii|z-?index|zindex|elevation)$/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`:g(r)}function v(e,t,r,i,a,s){if(!(0,n.isObject)(e))return;let l=a||u(e),g=p(e,r);if(c(e)){let r=m(e),a=t.join(`.`),c=h(a,g)??(l||g===`palette`?`color`:void 0),u=(0,n.formatTokenValue)(r,g),d=c===`color`||g===`color`||g===`palette`?u:o(r,g);s.push({path:a,type:g===`palette`?`color`:g,value:r,cssValue:u,tamaguiValue:d,category:c,tokenKey:c?_(a):void 0,description:f(e),theme:i,palette:l||void 0});return}for(let[n,r]of Object.entries(e))n.startsWith(`$`)&&n!==`$palette`||d(n,r)||v(r,[...t,n],g,i,l,s)}function y(e,t={}){let r=t.includeTypes?new Set(t.includeTypes):void 0,i=[];for(let t of(0,n.resolveTokenSets)(e)){let e=t.id==="default"?void 0:t.id;v(t.tokens,[],void 0,e,!1,i)}return r?i.filter(e=>!e.type||r.has(e.type)):i}function b(e){return`# Installing Tamagui Config
3
3
 
4
4
  Generated by \`@razorwind/tamagui\`.
5
5
 
@@ -37,21 +37,21 @@ export function App() {
37
37
  ## Regenerate
38
38
 
39
39
  Re-run Razorwind generate when tokens change so \`${e.outputPath}\` stays aligned with your design system.
40
- `}const v=new Set([`default`,`light`,`theme`]),y=/^base(?:[A-Z]\w*|[._-].+)?$/i,b=new Set([`gray`,`grey`,`neutral`,`slate`,`zinc`,`stone`,`palette`,`base`]),x={css:`@tamagui/config/v5-css`,rn:`@tamagui/config/v5-rn`,reanimated:`@tamagui/config/v5-reanimated`,motion:`@tamagui/config/v5-motion`};function S(e){return v.has(e)}function C(e){return e===`dark`}function w(e,t){let n=new Map,r=t===`dark`?C:S;for(let t of e){let e=t.theme?.toLowerCase();(!e||y.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 T(e){let t={};for(let n of e){if(!n.category||!n.tokenKey)continue;let e=t[n.category]??{};e[n.tokenKey]=n.tamaguiValue,t[n.category]=e}return t}function E(e,t=2){let n=` `.repeat(t),r=Object.entries(e).toSorted(([e],[t])=>e.localeCompare(t));return r.length===0?`{}`:`{\n${r.map(([e,t])=>{let r=/^[A-Z_$][\w$]*$/i.test(e)?e:a(e);return`${n}${r}: ${a(t)}`}).join(`,
41
- `)}\n${` `.repeat(Math.max(t-2,0))}}`}function D(e){let t={},n=new Map;for(let t of e)!t.tokenKey||typeof t.tamaguiValue!=`string`||n.set(t.tokenKey,t.tamaguiValue);let r=/^([A-Z]+)(\d{1,2})$/i;for(let[e,i]of n){let n=r.exec(e);if(!n)continue;let[,a=``,o=``]=n,s=Number(o);if(s<0||s>12)continue;let c=t[a]??{};c[`${a}${s}`]=i,t[a]=c}return Object.fromEntries(Object.entries(t).filter(([,e])=>Object.keys(e).length>=3))}function O(e,t){let n=[];for(let r=1;r<=12;r++){let i=e[`${t}${r}`];if(!i)return;n.push(i)}return n}function k(e){let t=e.filter(e=>e.category===`color`),n=D(w(t,`light`)),r=D(w(t,`dark`)),i,a;for(let e of Object.keys(n))if(b.has(e.toLowerCase())&&(i=O(n[e],e),i))break;for(let e of Object.keys(r))if(b.has(e.toLowerCase())&&(a=O(r[e],e),a))break;return{lightPalette:i,darkPalette:a}}function A(e){let t=D(e),n={};for(let r of e)r.category!==`color`||!r.tokenKey||typeof r.tamaguiValue!=`string`||/^[A-Z]+\d{1,2}$/i.test(r.tokenKey)&&t[r.tokenKey.replace(/\d{1,2}$/,``)]||(n[r.tokenKey]=r.tamaguiValue);return n}function j(e,t){let n=new Set([...Object.keys(e),...Object.keys(t)]);if(n.size===0)return;let r=[];for(let i of[...n].toSorted((e,t)=>e.localeCompare(t))){if(b.has(i.toLowerCase()))continue;let n=e[i]??t[i],a=t[i]??e[i];!n||!a||r.push(` ${i}: {
42
- light: ${E(n,8)},
43
- dark: ${E(a,8)}
40
+ `}const x=new Set([`default`,`light`,`theme`]),S=/^base(?:[A-Z]\w*|[._-].+)?$/i,C=[`base`,`gray`,`grey`,`neutral`],w={css:`@tamagui/config/v5-css`,rn:`@tamagui/config/v5-rn`,reanimated:`@tamagui/config/v5-reanimated`,motion:`@tamagui/config/v5-motion`};function T(e){return x.has(e)}function E(e){return e===`dark`}function D(e,t){let n=new Map,r=t===`dark`?E:T;for(let t of e){let e=t.theme?.toLowerCase();(!e||S.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 ee(e){let t={};for(let n of e){if(!n.category||!n.tokenKey)continue;let e=t[n.category]??{};e[n.tokenKey]=n.tamaguiValue,t[n.category]=e}return t}function O(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=/^[A-Z_$][\w$]*$/i.test(e)?e:a(e);return`${n}${r}: ${a(t)}`}).join(`,
41
+ `)}\n${` `.repeat(Math.max(t-2,0))}}`}function k(e){if(e>=1&&e<=12)return e;if(e>=100&&e<=900&&e%100==0)return e/100}function A(e){let t=e.path.split(`.`).filter(Boolean),n=t.at(-1);if(n&&/^\d+$/.test(n)){let e=k(Number(n)),r=t.at(-2);if(e!=null&&r&&!/^(?:color|colours?|palette)$/i.test(r))return{name:g([r]),step:e}}if(!e.tokenKey)return;let r=/^([A-Z]+)(\d{1,3})$/i.exec(e.tokenKey);if(!r)return;let[,i=``,a=``]=r,o=k(Number(a));if(o!=null)return{name:i,step:o}}function j(e,t,n,r){let i=e[t]??{};i[`${t}${n}`]=r,e[t]=i}function M(e){let t={};for(let n of e){if(typeof n.tamaguiValue!=`string`)continue;let e=A(n);e&&j(t,e.name,e.step,n.tamaguiValue)}return Object.fromEntries(Object.entries(t).filter(([,e])=>Object.keys(e).length>=3))}function N(e){let t={};for(let n of e){if(!n.palette||typeof n.tamaguiValue!=`string`)continue;let e=A(n);e&&j(t,e.name,e.step,n.tamaguiValue)}let n=Object.fromEntries(Object.entries(t).filter(([,e])=>Object.keys(e).length>=2));return Object.keys(n).length>0?n:M(e)}function P(e,t){if(e.length<2)return[...e];let n=B(e[0]),r=B(e[e.length-1]);if(n==null||r==null||n===r)return[...e];let i=n>r;return t===`light`?i?[...e]:e.toReversed():i?e.toReversed():[...e]}function F(e){return e<=.04045?e/12.92:((e+.055)/1.055)**2.4}function I(e){let t=e.startsWith(`#`)?e.slice(1):``;if((t.length===3||t.length===4)&&(t=[...t].map(e=>e+e).join(``)),t.length===8&&(t=t.slice(0,6)),t.length!==6||/[^0-9a-f]/i.test(t))return;let n=Number.parseInt(t.slice(0,2),16)/255,r=Number.parseInt(t.slice(2,4),16)/255,i=Number.parseInt(t.slice(4,6),16)/255;return .2126*F(n)+.7152*F(r)+.0722*F(i)}function L(e){let t=e.trim();if(t.endsWith(`%`)){let e=Number.parseFloat(t);return Number.isFinite(e)?e/100:void 0}let n=Number.parseFloat(t);return Number.isFinite(n)?n:void 0}function R(e){return e>1?e/100:e}function z(e,t){let n=RegExp(`^${t}\\((.+)\\)$`,`i`).exec(e.trim());if(n?.[1])return n[1].split(/[\s,/]+/).filter(Boolean)}function B(e){let t=e.trim();if(!t||t.startsWith(`var(`)||t.includes(`{`))return;let n=I(t);if(n!=null)return n;let r=z(t,`oklch`);if(r?.[0]){let e=L(r[0]);return e==null?void 0:R(e)}let i=z(t,`hsla?`);if(i?.[2]){let e=L(i[2]);return e==null?void 0:R(e)}let a=z(t,`rgba?`);if(a?.[0]&&a[1]&&a[2]){let e=L(a[0]),t=L(a[1]),n=L(a[2]);if(e==null||t==null||n==null)return;let r=(e,t)=>t.trim().endsWith(`%`)||e<=1?e:e/255;return .2126*F(r(e,a[0]))+.7152*F(r(t,a[1]))+.0722*F(r(n,a[2]))}}function V(e,t){let n=[],r=t.toLowerCase();for(let[i,a]of Object.entries(e)){if(!i.toLowerCase().startsWith(r))continue;let e=i.slice(t.length);/^\d+$/.test(e)&&n.push([Number(e),a])}return n.sort(([e],[t])=>e-t),n}function H(e,t,n){let r=V(e,t);if(r.length===0)return e;let i=P(r.map(([,e])=>e),n),a={};for(let[e,[n]]of r.entries())a[`${t}${n}`]=i[e]??r[e][1];return a}function te(e){if(e.length>=12)return e.slice(0,12);let t=[...e],n=t.at(-1);if(n==null)return t;for(;t.length<12;)t.push(n);return t}function U(e,t,n){let r=V(e,t);if(!(r.length<2))return te(P(r.map(([,e])=>e),n))}function W(e,t){let n=new Map(Object.entries(e).map(([e,t])=>[e.toLowerCase(),{name:e,scale:t}]));for(let e of C){let r=n.get(e);if(!r)continue;let i=U(r.scale,r.name,t);if(i)return i}}function G(e){let t=e.filter(e=>e.category===`color`||e.palette),n=N(D(t,`light`)),r=N(D(t,`dark`));return{lightPalette:W(n,`light`),darkPalette:W(r,`dark`)}}function K(e){let t=N(e),n={};for(let r of e)r.category!==`color`||!r.tokenKey||typeof r.tamaguiValue!=`string`||r.palette||/^[A-Z]+\d{1,3}$/i.test(r.tokenKey)&&t[r.tokenKey.replace(/\d{1,3}$/,``)]||(n[r.tokenKey]=r.tamaguiValue);return n}function q(e,t){let n=new Set([...Object.keys(e),...Object.keys(t)]);if(n.size===0)return;let r=[];for(let i of[...n].toSorted((e,t)=>e.localeCompare(t))){let n=H(e[i]??t[i]??{},i,`light`),a=H(t[i]??e[i]??{},i,`dark`);Object.keys(n).length!==0&&Object.keys(a).length!==0&&r.push(` ${i}: {
42
+ light: ${O(n,8)},
43
+ dark: ${O(a,8)}
44
44
  }`)}if(r.length!==0)return`{\n${r.join(`,
45
- `)}\n }`}function M(e){switch(e.role){case`heading`:case`display`:return`heading`;case`mono`:case`code`:return`mono`;case`sans`:case`body`:case`serif`:return`body`;case void 0:default:return e.name?.replaceAll(/\W/g,``)||`body`}}function N(e){let t=new Map;for(let n of Object.values(e)){let e=M(n),r=t.get(e);(!r||n.role===e&&r.role!==e)&&t.set(e,n)}return t}function P(e){let t=new Map;for(let n of e.files){let e=String(n.weight??400),i=(0,r.basename)(n.path).replace(/\.[^.]+$/,``),a=t.get(e)??{};n.style===`italic`||n.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(`,
46
- `)}\n }`}function F(e,n){let r=e.source===`local`?P(e):void 0,i=[`const ${n} = createFont({`,` family: isWeb ? ${a((0,t.cssFontFamily)(e))} : ${a((0,t.fontFamilyName)(e))},`,` size: {`,` 1: 12,`,` 2: 14,`,` 3: 16,`,` 4: 18,`,` 5: 20,`,` 6: 24,`,` 7: 28,`,` 8: 32,`,` 9: 40,`,` 10: 48`,` }${r?`,`:``}`];return r&&i.push(` face: ${r}`),i.push(`});`),i.join(`
47
- `)}function I(e,t={},n){let r=t.useDefaultConfig!==!1,i=t.animations??`css`,o=t.includeTypeAugmentation!==!1,s=T(w(e,`light`)),c=e.filter(e=>e.category===`color`),l=w(c,`light`),u=w(c,`dark`),d=D(l),f=D(u.length>0?u:l),{lightPalette:p,darkPalette:m}=k(e),h=j(d,f),g=A(l),_=A(u.length>0?u:l),v=Object.keys(g).length>0||Object.keys(_).length>0,y=[];for(let e of[`color`,`space`,`size`,`radius`,`zIndex`]){let t=s[e];t&&Object.keys(t).length>0&&y.push(` ${e}: ${E(t,4)}`)}let b=[];p&&b.push(` lightPalette: ${a(p)}`),m&&b.push(` darkPalette: ${a(m)}`),h&&b.push(` childrenThemes: ${h}`),v&&b.push(` getTheme: ({ scheme }) => {
45
+ `)}\n }`}function J(e){switch(e.role){case`heading`:case`display`:return`heading`;case`mono`:case`code`:return`mono`;case`sans`:case`body`:case`serif`:return`body`;case void 0:default:return e.name?.replaceAll(/\W/g,``)||`body`}}function Y(e){let t=new Map;for(let n of Object.values(e)){let e=J(n),r=t.get(e);(!r||n.role===e&&r.role!==e)&&t.set(e,n)}return t}function X(e){let t=new Map;for(let n of e.files){let e=String(n.weight??400),i=(0,r.basename)(n.path).replace(/\.[^.]+$/,``),a=t.get(e)??{};n.style===`italic`||n.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(`,
46
+ `)}\n }`}function Z(e,n){let r=e.source===`local`?X(e):void 0,i=[`const ${n} = createFont({`,` family: isWeb ? ${a((0,t.cssFontFamily)(e))} : ${a((0,t.fontFamilyName)(e))},`,` size: {`,` 1: 12,`,` 2: 14,`,` 3: 16,`,` 4: 18,`,` 5: 20,`,` 6: 24,`,` 7: 28,`,` 8: 32,`,` 9: 40,`,` 10: 48`,` }${r?`,`:``}`];return r&&i.push(` face: ${r}`),i.push(`});`),i.join(`
47
+ `)}function Q(e,t={},n){let r=t.useDefaultConfig!==!1,i=t.animations??`css`,o=t.includeTypeAugmentation!==!1,s=ee(D(e,`light`)),c=e.filter(e=>e.category===`color`),l=D(c,`light`),u=D(c,`dark`),d=N(l),f=N(u.length>0?u:l),{lightPalette:p,darkPalette:m}=G(e),h=q(d,f),g=K(l),_=K(u.length>0?u:l),v=Object.keys(g).length>0||Object.keys(_).length>0,y=[];for(let e of[`color`,`space`,`size`,`radius`,`zIndex`]){let t=s[e];t&&Object.keys(t).length>0&&y.push(` ${e}: ${O(t,4)}`)}let b=[];p&&b.push(` lightPalette: ${a(p)}`),m&&b.push(` darkPalette: ${a(m)}`),h&&b.push(` childrenThemes: ${h}`),v&&b.push(` getTheme: ({ scheme }) => {
48
48
  const semantic = scheme === "dark"
49
- ? ${E(_,8)}
50
- : ${E(g,8)};
49
+ ? ${O(_,8)}
50
+ : ${O(g,8)};
51
51
  return semantic;
52
- }`);let S=[];r?S.push(`import { createV5Theme, defaultConfig } from "@tamagui/config/v5";`):S.push(`import { createV5Theme } from "@tamagui/config/v5";`),i!==!1&&S.push(`import { animations } from "${x[i]}";`);let C=[`createTamagui`];y.length>0&&C.push(`createTokens`);let O=n?N(n):new Map;O.size>0&&C.push(`createFont`,`isWeb`),S.push(`import { ${C.join(`, `)} } from "tamagui";`);let M=[`/* eslint-disable */`,`/*`,` * Generated by @razorwind/tamagui — do not edit by hand.`,` * @see https://tamagui.dev/docs/core/config-v5`,` */`,``,...S,``];y.length>0&&M.push(`const tokens = createTokens({`,y.join(`,
53
- `),`});`,``);let P=b.length>0?`createV5Theme({\n${b.join(`,
54
- `)}\n})`:`createV5Theme()`;M.push(`const themes = ${P};`,``);let I=new Map;if(O.size>0){let e=0;for(let[t,n]of O){let r=`${t}Font`.replaceAll(/\W/g,``)||`font${e}`;I.set(t,r),M.push(F(n,r),``),e+=1}}let L=[];if(r&&L.push(` ...defaultConfig`),i!==!1&&L.push(` animations`),y.length>0&&(r?L.push(` tokens: {
52
+ }`);let x=[];r?x.push(`import { createV5Theme, defaultConfig } from "@tamagui/config/v5";`):x.push(`import { createV5Theme } from "@tamagui/config/v5";`),i!==!1&&x.push(`import { animations } from "${w[i]}";`);let S=[`createTamagui`];y.length>0&&S.push(`createTokens`);let C=n?Y(n):new Map;C.size>0&&S.push(`createFont`,`isWeb`),x.push(`import { ${S.join(`, `)} } from "tamagui";`);let T=[`/* eslint-disable */`,`/*`,` * Generated by @razorwind/tamagui — do not edit by hand.`,` * @see https://tamagui.dev/docs/core/config-v5`,` */`,``,...x,``];y.length>0&&T.push(`const tokens = createTokens({`,y.join(`,
53
+ `),`});`,``);let E=b.length>0?`createV5Theme({\n${b.join(`,
54
+ `)}\n})`:`createV5Theme()`;T.push(`const themes = ${E};`,``);let k=new Map;if(C.size>0){let e=0;for(let[t,n]of C){let r=`${t}Font`.replaceAll(/\W/g,``)||`font${e}`;k.set(t,r),T.push(Z(n,r),``),e+=1}}let A=[];if(r&&A.push(` ...defaultConfig`),i!==!1&&A.push(` animations`),y.length>0&&(r?A.push(` tokens: {
55
55
  ...defaultConfig.tokens,
56
56
  ...tokens,
57
57
  color: {
@@ -74,13 +74,13 @@ Re-run Razorwind generate when tokens change so \`${e.outputPath}\` stays aligne
74
74
  ...defaultConfig.tokens.zIndex,
75
75
  ...tokens.zIndex
76
76
  }
77
- }`):L.push(` tokens`)),L.push(` themes`),I.size>0){let e=[...I.entries()].map(([e,t])=>` ${e}: ${t}`);r?L.push(` fonts: {
77
+ }`):A.push(` tokens`)),A.push(` themes`),k.size>0){let e=[...k.entries()].map(([e,t])=>` ${e}: ${t}`);r?A.push(` fonts: {
78
78
  ...defaultConfig.fonts,
79
79
  ${e.join(`,
80
80
  `)}
81
- }`):L.push(` fonts: {
81
+ }`):A.push(` fonts: {
82
82
  ${e.join(`,
83
83
  `)}
84
- }`)}return M.push(`export const config = createTamagui({`,L.join(`,
85
- `),`});`,``,`export type AppConfig = typeof config;`,``),o&&M.push(`declare module "tamagui" {`,` // eslint-disable-next-line @typescript-eslint/no-empty-object-type`,` interface TamaguiCustomConfig extends AppConfig {}`,`}`,``),M.push(`export default config;`,``),M.join(`
86
- `)}function L(e,t={}){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?g(e.tokens,t):[];if(o.length===0&&!a)return{};let s=t.outputPath??`tamagui.config.ts`,c=I(o,t,e.fonts),l=t.installGuide??_({outputPath:s}),u=(0,r.join)((0,r.dirname)(s),`INSTALL.md`);return{[s]:(0,n.createDocument)(s,c,{name:`razorwind-tamagui`},!1,`typescript`),[u]:(0,n.createDocument)(u,l,{name:`razorwind-tamagui`},!1,`markdown`)}}var R=(0,e.definePlugin)(e=>({name:`tamagui`,themeGeneration:`combined`,generate:async t=>L(t,e??{})}));exports.collectColorScales=D,exports.default=R,exports.flattenTokens=g,Object.defineProperty(exports,"formatTokenValue",{enumerable:!0,get:function(){return n.formatTokenValue}}),exports.generateTamaguiConfig=L,exports.renderInstallMd=_,exports.renderTamaguiConfig=I,exports.resolveTokenCategory=f,exports.resolveTokenSets=n.resolveTokenSets,exports.toCamelCaseKey=p,Object.defineProperty(exports,"toCssVar",{enumerable:!0,get:function(){return n.toCssVar}}),exports.toTamaguiValue=o,exports.toTokenKey=m;
84
+ }`)}return T.push(`export const config = createTamagui({`,A.join(`,
85
+ `),`});`,``,`export type AppConfig = typeof config;`,``),o&&T.push(`declare module "tamagui" {`,` // eslint-disable-next-line @typescript-eslint/no-empty-object-type`,` interface TamaguiCustomConfig extends AppConfig {}`,`}`,``),T.push(`export default config;`,``),T.join(`
86
+ `)}function $(e,t={}){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?y(e.tokens,t):[];if(o.length===0&&!a)return{};let s=t.outputPath??`tamagui.config.ts`,c=Q(o,t,e.fonts),l=t.installGuide??b({outputPath:s}),u=(0,r.join)((0,r.dirname)(s),`INSTALL.md`);return{[s]:(0,n.createDocument)(s,c,{name:`razorwind-tamagui`},!1,`typescript`),[u]:(0,n.createDocument)(u,l,{name:`razorwind-tamagui`},!1,`markdown`)}}var ne=(0,e.definePlugin)(e=>({name:`tamagui`,themeGeneration:`combined`,generate:async t=>$(t,e??{})}));exports.collectColorScales=N,exports.colorLightness=B,exports.default=ne,exports.flattenTokens=y,Object.defineProperty(exports,"formatTokenValue",{enumerable:!0,get:function(){return n.formatTokenValue}}),exports.generateTamaguiConfig=$,exports.isPaletteGroup=u,exports.orderPaletteForScheme=P,exports.renderInstallMd=b,exports.renderTamaguiConfig=Q,exports.resolveTokenCategory=h,exports.resolveTokenSets=n.resolveTokenSets,exports.toCamelCaseKey=g,Object.defineProperty(exports,"toCssVar",{enumerable:!0,get:function(){return n.toCssVar}}),exports.toTamaguiValue=o,exports.toTokenKey=_;
package/dist/index.d.cts CHANGED
@@ -81,9 +81,21 @@ interface FlatToken {
81
81
  description?: string;
82
82
  /** Theme / set id when tokens are a `Record<string, Tokens>`. */
83
83
  theme?: string;
84
+ /**
85
+ * True when an ancestor group is marked as a palette (`palette: true` or
86
+ * `$type: "palette"`). Those scales feed Tamagui `childrenThemes` /
87
+ * `lightPalette` / `darkPalette`.
88
+ */
89
+ palette?: boolean;
84
90
  }
85
91
  //#endregion
86
92
  //#region src/flatten.d.ts
93
+ /**
94
+ * True when a DTCG group is explicitly a color palette.
95
+ *
96
+ * Accepts `palette: true`, `$palette: true`, or `$type: "palette"`.
97
+ */
98
+ declare function isPaletteGroup(node: Record<string, unknown>): boolean;
87
99
  /**
88
100
  * Map a DTCG token path + type onto a Tamagui `createTokens` category.
89
101
  */
@@ -128,12 +140,26 @@ declare function renderInstallMd(options: {
128
140
  }): string;
129
141
  //#endregion
130
142
  //#region src/generate.d.ts
143
+ type ColorScheme = "light" | "dark";
131
144
  /**
132
- * Detect 1–12 (or 0–11) stepped color scales for `createV5Theme` childrenThemes.
145
+ * Collect color palettes for Tamagui `childrenThemes`.
133
146
  *
134
- * Accepts keys like `blue1`…`blue12` or nested paths already flattened to those keys.
147
+ * Groups marked `palette: true` (or `$type: "palette"`) win. When none are
148
+ * marked, numbered 1–12 (or 100–900) scales are used as a fallback.
135
149
  */
136
150
  declare function collectColorScales(colorTokens: FlatToken[]): Record<string, Record<string, string>>;
151
+ /**
152
+ * Tamagui v5 palettes: light runs lightest → darkest, dark runs darkest →
153
+ * lightest (`color1`–`color12`).
154
+ *
155
+ * @see https://tamagui.dev/docs/core/config-v5#base-colors-color1-12
156
+ */
157
+ declare function orderPaletteForScheme(values: readonly string[], scheme: ColorScheme): string[];
158
+ /**
159
+ * Approximate perceptual lightness (0–1) for hex, rgb, hsl, and oklch colors.
160
+ * CSS variables and unresolved aliases return `undefined`.
161
+ */
162
+ declare function colorLightness(color: string): number | undefined;
137
163
  /**
138
164
  * Render a Tamagui v5 config module from flattened design tokens.
139
165
  *
@@ -154,7 +180,10 @@ declare function generateTamaguiConfig(spec: Schema, options?: TamaguiPluginOpti
154
180
  *
155
181
  * Light and dark token sets are emitted as a single config: `createV5Theme`
156
182
  * receives both `lightPalette` / `darkPalette` and `childrenThemes` with
157
- * `{ light, dark }` palettes.
183
+ * `{ light, dark }` palettes. Groups marked `palette: true` become
184
+ * `childrenThemes`; palettes named `base`, `grey`, `gray`, or `neutral` also
185
+ * set `lightPalette` / `darkPalette` (`color1`–`color12`). Light palettes are
186
+ * ordered lightest-first; dark palettes darkest-first.
158
187
  *
159
188
  * @see https://tamagui.dev/docs/core/config-v5
160
189
  *
@@ -170,5 +199,5 @@ declare function generateTamaguiConfig(spec: Schema, options?: TamaguiPluginOpti
170
199
  */
171
200
  declare const _default: (options?: TamaguiPluginOptions | undefined) => import("@razorwind/core/plugin").Plugin;
172
201
  //#endregion
173
- export { type FlatToken, type TamaguiAnimationDriver, type TamaguiPluginOptions, type TamaguiTokenCategory, collectColorScales, _default as default, flattenTokens, formatTokenValue, generateTamaguiConfig, renderInstallMd, renderTamaguiConfig, resolveTokenCategory, resolveTokenSets, toCamelCaseKey, toCssVar, toTamaguiValue, toTokenKey };
202
+ export { type FlatToken, type TamaguiAnimationDriver, type TamaguiPluginOptions, type TamaguiTokenCategory, collectColorScales, colorLightness, _default as default, flattenTokens, formatTokenValue, generateTamaguiConfig, isPaletteGroup, orderPaletteForScheme, renderInstallMd, renderTamaguiConfig, resolveTokenCategory, resolveTokenSets, toCamelCaseKey, toCssVar, toTamaguiValue, toTokenKey };
174
203
  //# sourceMappingURL=index.d.cts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.cts","names":[],"sources":["../src/types.ts","../src/flatten.ts","../src/format.ts","../src/install.ts","../src/generate.ts","../src/index.ts"],"mappings":";;;;;;;;;;KAyBY;;;;KAMA;;;;UAMK;;;;;;;;;EASf;;;;;;;EAQA,aAAa;;;;;;;;EASb;;;;;EAMA,eAAe;;;;;;;EAQf;;;;;EAMA;;;;;UAMe;;EAEf;;EAEA,OAAO;;EAEP;;EAEA;;EAEA;;EAEA,WAAW;;EAEX;;EAEA;;EAEA;;;;;;;iBCjBc,qBACd,cACA,gBACC;;;;;;;iBAuCa,eAAe;;;;;;;;iBA0Bf,WAAW;;;;iBA0EX,cACd,QAAQ,SAAS,eAAe,SAChC,UAAS,KAAK,wCACb;;;;;;;;;iBCjLa,eAAe,gBAAgB;;;;;;;;iBCnC/B,gBAAgB;EAAW;;;;;;;;;iBCwH3B,mBACd,aAAa,cACZ,eAAe;;;;;;;;iBA2PF,oBACd,QAAQ,aACR,UAAS,sBACT,QAAQ;;;;iBAuNM,sBACd,MAAM,QACN,UAAS,uBACR,wBAAwB,QAAQ"}
1
+ {"version":3,"file":"index.d.cts","names":[],"sources":["../src/types.ts","../src/flatten.ts","../src/format.ts","../src/install.ts","../src/generate.ts","../src/index.ts"],"mappings":";;;;;;;;;;KAyBY;;;;KAMA;;;;UAMK;;;;;;;;;EASf;;;;;;;EAQA,aAAa;;;;;;;;EASb;;;;;EAMA,eAAe;;;;;;;EAQf;;;;;EAMA;;;;;UAMe;;EAEf;;EAEA,OAAO;;EAEP;;EAEA;;EAEA;;EAEA,WAAW;;EAEX;;EAEA;;EAEA;;;;;;EAMA;;;;;;;;;iBCxDc,eAAe,MAAM;;;;iBA2DrB,qBACd,cACA,gBACC;;;;;;;iBAuCa,eAAe;;;;;;;;iBA0Bf,WAAW;;;;iBAkFX,cACd,QAAQ,SAAS,eAAe,SAChC,UAAS,KAAK,wCACb;;;;;;;;;iBCnNa,eAAe,gBAAgB;;;;;;;;iBCnC/B,gBAAgB;EAAW;;;;KCiCtC;;;;;;;iBA0KW,mBACd,aAAa,cACZ,eAAe;;;;;;;iBAmCF,sBACd,2BACA,QAAQ;;;;;iBA+EM,eAAe;;;;;;;;iBAsWf,oBACd,QAAQ,aACR,UAAS,sBACT,QAAQ;;;;iBAuNM,sBACd,MAAM,QACN,UAAS,uBACR,wBAAwB,QAAQ"}
package/dist/index.d.mts CHANGED
@@ -81,9 +81,21 @@ interface FlatToken {
81
81
  description?: string;
82
82
  /** Theme / set id when tokens are a `Record<string, Tokens>`. */
83
83
  theme?: string;
84
+ /**
85
+ * True when an ancestor group is marked as a palette (`palette: true` or
86
+ * `$type: "palette"`). Those scales feed Tamagui `childrenThemes` /
87
+ * `lightPalette` / `darkPalette`.
88
+ */
89
+ palette?: boolean;
84
90
  }
85
91
  //#endregion
86
92
  //#region src/flatten.d.ts
93
+ /**
94
+ * True when a DTCG group is explicitly a color palette.
95
+ *
96
+ * Accepts `palette: true`, `$palette: true`, or `$type: "palette"`.
97
+ */
98
+ declare function isPaletteGroup(node: Record<string, unknown>): boolean;
87
99
  /**
88
100
  * Map a DTCG token path + type onto a Tamagui `createTokens` category.
89
101
  */
@@ -128,12 +140,26 @@ declare function renderInstallMd(options: {
128
140
  }): string;
129
141
  //#endregion
130
142
  //#region src/generate.d.ts
143
+ type ColorScheme = "light" | "dark";
131
144
  /**
132
- * Detect 1–12 (or 0–11) stepped color scales for `createV5Theme` childrenThemes.
145
+ * Collect color palettes for Tamagui `childrenThemes`.
133
146
  *
134
- * Accepts keys like `blue1`…`blue12` or nested paths already flattened to those keys.
147
+ * Groups marked `palette: true` (or `$type: "palette"`) win. When none are
148
+ * marked, numbered 1–12 (or 100–900) scales are used as a fallback.
135
149
  */
136
150
  declare function collectColorScales(colorTokens: FlatToken[]): Record<string, Record<string, string>>;
151
+ /**
152
+ * Tamagui v5 palettes: light runs lightest → darkest, dark runs darkest →
153
+ * lightest (`color1`–`color12`).
154
+ *
155
+ * @see https://tamagui.dev/docs/core/config-v5#base-colors-color1-12
156
+ */
157
+ declare function orderPaletteForScheme(values: readonly string[], scheme: ColorScheme): string[];
158
+ /**
159
+ * Approximate perceptual lightness (0–1) for hex, rgb, hsl, and oklch colors.
160
+ * CSS variables and unresolved aliases return `undefined`.
161
+ */
162
+ declare function colorLightness(color: string): number | undefined;
137
163
  /**
138
164
  * Render a Tamagui v5 config module from flattened design tokens.
139
165
  *
@@ -154,7 +180,10 @@ declare function generateTamaguiConfig(spec: Schema, options?: TamaguiPluginOpti
154
180
  *
155
181
  * Light and dark token sets are emitted as a single config: `createV5Theme`
156
182
  * receives both `lightPalette` / `darkPalette` and `childrenThemes` with
157
- * `{ light, dark }` palettes.
183
+ * `{ light, dark }` palettes. Groups marked `palette: true` become
184
+ * `childrenThemes`; palettes named `base`, `grey`, `gray`, or `neutral` also
185
+ * set `lightPalette` / `darkPalette` (`color1`–`color12`). Light palettes are
186
+ * ordered lightest-first; dark palettes darkest-first.
158
187
  *
159
188
  * @see https://tamagui.dev/docs/core/config-v5
160
189
  *
@@ -170,5 +199,5 @@ declare function generateTamaguiConfig(spec: Schema, options?: TamaguiPluginOpti
170
199
  */
171
200
  declare const _default: (options?: TamaguiPluginOptions | undefined) => import("@razorwind/core/plugin").Plugin;
172
201
  //#endregion
173
- export { type FlatToken, type TamaguiAnimationDriver, type TamaguiPluginOptions, type TamaguiTokenCategory, collectColorScales, _default as default, flattenTokens, formatTokenValue, generateTamaguiConfig, renderInstallMd, renderTamaguiConfig, resolveTokenCategory, resolveTokenSets, toCamelCaseKey, toCssVar, toTamaguiValue, toTokenKey };
202
+ export { type FlatToken, type TamaguiAnimationDriver, type TamaguiPluginOptions, type TamaguiTokenCategory, collectColorScales, colorLightness, _default as default, flattenTokens, formatTokenValue, generateTamaguiConfig, isPaletteGroup, orderPaletteForScheme, renderInstallMd, renderTamaguiConfig, resolveTokenCategory, resolveTokenSets, toCamelCaseKey, toCssVar, toTamaguiValue, toTokenKey };
174
203
  //# sourceMappingURL=index.d.mts.map
package/dist/index.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  import{definePlugin as e}from"@razorwind/core/plugin";import{cssFontFamily as t,fontFamilyName as n}from"@razorwind/core/lib/fonts";import{createDocument as r,formatTokenValue as i,isObject as a,resolveTokenSets as o,toCssVar as s}from"@razorwind/core/utils";import{basename as c,dirname as l,join as u}from"node:path";function d(e){return e.replaceAll(`\\`,`\\\\`).replaceAll(`"`,`\\"`).replaceAll(`
2
- `,`\\n`).replaceAll(`\r`,`\\r`)}function f(e){return typeof e==`string`?`"${d(e)}"`:typeof e==`number`||typeof e==`boolean`?String(e):e==null?`undefined`:JSON.stringify(e)}function p(e,t){if(typeof e==`number`)return e;if(typeof e==`boolean`)return Number(e);if(a(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 String(e)}const m=[{prefix:/^(?:color|colours?|palette)\b/i,category:`color`},{prefix:/^(?:space|spacing|gap|inset)\b/i,category:`space`},{prefix:/^(?:size|sizing)\b/i,category:`size`},{prefix:/^(?:radius|rounded|radii)\b/i,category:`radius`},{prefix:/^(?:z-?index|zindex|elevation)\b/i,category:`zIndex`}];function h(e){return`$value`in e||`value`in e||`$ref`in e||`ref`in e}function g(e){if(typeof e.$description==`string`)return e.$description;if(typeof e.description==`string`)return e.description}function _(e,t){return typeof e.$type==`string`?e.$type:typeof e.type==`string`?e.type:t}function v(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 y(e,t){for(let{prefix:t,category:n}of m)if(t.test(e))return n;if(t===`color`)return`color`;if(t===`dimension`){if(/space|spacing|gap|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|width|height/i.test(e))return`size`}if(t===`number`&&/z-?index|elevation/i.test(e))return`zIndex`}function b(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 x(e){let t=e.split(`.`).filter(Boolean),n=t[0];n&&/^(?:color|colours?|palette|space|spacing|gap|inset|size|sizing|radius|rounded|radii|z-?index|zindex|elevation)$/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`:b(r)}function S(e,t,n,r,o){if(!a(e))return;let s=_(e,n);if(h(e)){let n=v(e),a=t.join(`.`),c=y(a,s),l=i(n,s),u=c===`color`||s===`color`?l:p(n,s);o.push({path:a,type:s,value:n,cssValue:l,tamaguiValue:u,category:c,tokenKey:c?x(a):void 0,description:g(e),theme:r});return}for(let[n,i]of Object.entries(e))n.startsWith(`$`)||S(i,[...t,n],s,r,o)}function C(e,t={}){let n=t.includeTypes?new Set(t.includeTypes):void 0,r=[];for(let t of o(e)){let e=t.id==="default"?void 0:t.id;S(t.tokens,[],void 0,e,r)}return n?r.filter(e=>!e.type||n.has(e.type)):r}function w(e){return`# Installing Tamagui Config
2
+ `,`\\n`).replaceAll(`\r`,`\\r`)}function f(e){return typeof e==`string`?`"${d(e)}"`:typeof e==`number`||typeof e==`boolean`?String(e):e==null?`undefined`:JSON.stringify(e)}function p(e,t){if(typeof e==`number`)return e;if(typeof e==`boolean`)return Number(e);if(a(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 String(e)}const m=[{prefix:/^(?:color|colours?|palette)\b/i,category:`color`},{prefix:/^(?:space|spacing|gap|inset)\b/i,category:`space`},{prefix:/^(?:size|sizing)\b/i,category:`size`},{prefix:/^(?:radius|rounded|radii)\b/i,category:`radius`},{prefix:/^(?:z-?index|zindex|elevation)\b/i,category:`zIndex`}];function h(e){return`$value`in e||`value`in e||`$ref`in e||`ref`in e}function g(e){return e===!0||e===`true`||e===1}function _(e){return g(e.palette)||g(e.$palette)?!0:b(e)===`palette`}function v(e,t){return(e===`palette`||e===`$palette`)&&(typeof t==`boolean`||typeof t==`number`||typeof t==`string`)}function y(e){if(typeof e.$description==`string`)return e.$description;if(typeof e.description==`string`)return e.description}function b(e,t){return typeof e.$type==`string`?e.$type:typeof e.type==`string`?e.type:t}function x(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 S(e,t){for(let{prefix:t,category:n}of m)if(t.test(e))return n;if(t===`color`||t===`palette`)return`color`;if(t===`dimension`){if(/space|spacing|gap|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|width|height/i.test(e))return`size`}if(t===`number`&&/z-?index|elevation/i.test(e))return`zIndex`}function C(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 w(e){let t=e.split(`.`).filter(Boolean),n=t[0];n&&/^(?:color|colours?|palette|space|spacing|gap|inset|size|sizing|radius|rounded|radii|z-?index|zindex|elevation)$/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`:C(r)}function T(e,t,n,r,o,s){if(!a(e))return;let c=o||_(e),l=b(e,n);if(h(e)){let n=x(e),a=t.join(`.`),o=S(a,l)??(c||l===`palette`?`color`:void 0),u=i(n,l),d=o===`color`||l===`color`||l===`palette`?u:p(n,l);s.push({path:a,type:l===`palette`?`color`:l,value:n,cssValue:u,tamaguiValue:d,category:o,tokenKey:o?w(a):void 0,description:y(e),theme:r,palette:c||void 0});return}for(let[n,i]of Object.entries(e))n.startsWith(`$`)&&n!==`$palette`||v(n,i)||T(i,[...t,n],l,r,c,s)}function E(e,t={}){let n=t.includeTypes?new Set(t.includeTypes):void 0,r=[];for(let t of o(e)){let e=t.id==="default"?void 0:t.id;T(t.tokens,[],void 0,e,!1,r)}return n?r.filter(e=>!e.type||n.has(e.type)):r}function D(e){return`# Installing Tamagui Config
3
3
 
4
4
  Generated by \`@razorwind/tamagui\`.
5
5
 
@@ -37,21 +37,21 @@ export function App() {
37
37
  ## Regenerate
38
38
 
39
39
  Re-run Razorwind generate when tokens change so \`${e.outputPath}\` stays aligned with your design system.
40
- `}const T=new Set([`default`,`light`,`theme`]),E=/^base(?:[A-Z]\w*|[._-].+)?$/i,D=new Set([`gray`,`grey`,`neutral`,`slate`,`zinc`,`stone`,`palette`,`base`]),O={css:`@tamagui/config/v5-css`,rn:`@tamagui/config/v5-rn`,reanimated:`@tamagui/config/v5-reanimated`,motion:`@tamagui/config/v5-motion`};function k(e){return T.has(e)}function A(e){return e===`dark`}function j(e,t){let n=new Map,r=t===`dark`?A:k;for(let t of e){let e=t.theme?.toLowerCase();(!e||E.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 M(e){let t={};for(let n of e){if(!n.category||!n.tokenKey)continue;let e=t[n.category]??{};e[n.tokenKey]=n.tamaguiValue,t[n.category]=e}return t}function N(e,t=2){let n=` `.repeat(t),r=Object.entries(e).toSorted(([e],[t])=>e.localeCompare(t));return r.length===0?`{}`:`{\n${r.map(([e,t])=>{let r=/^[A-Z_$][\w$]*$/i.test(e)?e:f(e);return`${n}${r}: ${f(t)}`}).join(`,
41
- `)}\n${` `.repeat(Math.max(t-2,0))}}`}function P(e){let t={},n=new Map;for(let t of e)!t.tokenKey||typeof t.tamaguiValue!=`string`||n.set(t.tokenKey,t.tamaguiValue);let r=/^([A-Z]+)(\d{1,2})$/i;for(let[e,i]of n){let n=r.exec(e);if(!n)continue;let[,a=``,o=``]=n,s=Number(o);if(s<0||s>12)continue;let c=t[a]??{};c[`${a}${s}`]=i,t[a]=c}return Object.fromEntries(Object.entries(t).filter(([,e])=>Object.keys(e).length>=3))}function F(e,t){let n=[];for(let r=1;r<=12;r++){let i=e[`${t}${r}`];if(!i)return;n.push(i)}return n}function I(e){let t=e.filter(e=>e.category===`color`),n=P(j(t,`light`)),r=P(j(t,`dark`)),i,a;for(let e of Object.keys(n))if(D.has(e.toLowerCase())&&(i=F(n[e],e),i))break;for(let e of Object.keys(r))if(D.has(e.toLowerCase())&&(a=F(r[e],e),a))break;return{lightPalette:i,darkPalette:a}}function L(e){let t=P(e),n={};for(let r of e)r.category!==`color`||!r.tokenKey||typeof r.tamaguiValue!=`string`||/^[A-Z]+\d{1,2}$/i.test(r.tokenKey)&&t[r.tokenKey.replace(/\d{1,2}$/,``)]||(n[r.tokenKey]=r.tamaguiValue);return n}function R(e,t){let n=new Set([...Object.keys(e),...Object.keys(t)]);if(n.size===0)return;let r=[];for(let i of[...n].toSorted((e,t)=>e.localeCompare(t))){if(D.has(i.toLowerCase()))continue;let n=e[i]??t[i],a=t[i]??e[i];!n||!a||r.push(` ${i}: {
42
- light: ${N(n,8)},
43
- dark: ${N(a,8)}
40
+ `}const O=new Set([`default`,`light`,`theme`]),k=/^base(?:[A-Z]\w*|[._-].+)?$/i,A=[`base`,`gray`,`grey`,`neutral`],j={css:`@tamagui/config/v5-css`,rn:`@tamagui/config/v5-rn`,reanimated:`@tamagui/config/v5-reanimated`,motion:`@tamagui/config/v5-motion`};function M(e){return O.has(e)}function N(e){return e===`dark`}function P(e,t){let n=new Map,r=t===`dark`?N:M;for(let t of e){let e=t.theme?.toLowerCase();(!e||k.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 ee(e){let t={};for(let n of e){if(!n.category||!n.tokenKey)continue;let e=t[n.category]??{};e[n.tokenKey]=n.tamaguiValue,t[n.category]=e}return t}function F(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=/^[A-Z_$][\w$]*$/i.test(e)?e:f(e);return`${n}${r}: ${f(t)}`}).join(`,
41
+ `)}\n${` `.repeat(Math.max(t-2,0))}}`}function I(e){if(e>=1&&e<=12)return e;if(e>=100&&e<=900&&e%100==0)return e/100}function L(e){let t=e.path.split(`.`).filter(Boolean),n=t.at(-1);if(n&&/^\d+$/.test(n)){let e=I(Number(n)),r=t.at(-2);if(e!=null&&r&&!/^(?:color|colours?|palette)$/i.test(r))return{name:C([r]),step:e}}if(!e.tokenKey)return;let r=/^([A-Z]+)(\d{1,3})$/i.exec(e.tokenKey);if(!r)return;let[,i=``,a=``]=r,o=I(Number(a));if(o!=null)return{name:i,step:o}}function R(e,t,n,r){let i=e[t]??{};i[`${t}${n}`]=r,e[t]=i}function z(e){let t={};for(let n of e){if(typeof n.tamaguiValue!=`string`)continue;let e=L(n);e&&R(t,e.name,e.step,n.tamaguiValue)}return Object.fromEntries(Object.entries(t).filter(([,e])=>Object.keys(e).length>=3))}function B(e){let t={};for(let n of e){if(!n.palette||typeof n.tamaguiValue!=`string`)continue;let e=L(n);e&&R(t,e.name,e.step,n.tamaguiValue)}let n=Object.fromEntries(Object.entries(t).filter(([,e])=>Object.keys(e).length>=2));return Object.keys(n).length>0?n:z(e)}function V(e,t){if(e.length<2)return[...e];let n=q(e[0]),r=q(e[e.length-1]);if(n==null||r==null||n===r)return[...e];let i=n>r;return t===`light`?i?[...e]:e.toReversed():i?e.toReversed():[...e]}function H(e){return e<=.04045?e/12.92:((e+.055)/1.055)**2.4}function U(e){let t=e.startsWith(`#`)?e.slice(1):``;if((t.length===3||t.length===4)&&(t=[...t].map(e=>e+e).join(``)),t.length===8&&(t=t.slice(0,6)),t.length!==6||/[^0-9a-f]/i.test(t))return;let n=Number.parseInt(t.slice(0,2),16)/255,r=Number.parseInt(t.slice(2,4),16)/255,i=Number.parseInt(t.slice(4,6),16)/255;return .2126*H(n)+.7152*H(r)+.0722*H(i)}function W(e){let t=e.trim();if(t.endsWith(`%`)){let e=Number.parseFloat(t);return Number.isFinite(e)?e/100:void 0}let n=Number.parseFloat(t);return Number.isFinite(n)?n:void 0}function G(e){return e>1?e/100:e}function K(e,t){let n=RegExp(`^${t}\\((.+)\\)$`,`i`).exec(e.trim());if(n?.[1])return n[1].split(/[\s,/]+/).filter(Boolean)}function q(e){let t=e.trim();if(!t||t.startsWith(`var(`)||t.includes(`{`))return;let n=U(t);if(n!=null)return n;let r=K(t,`oklch`);if(r?.[0]){let e=W(r[0]);return e==null?void 0:G(e)}let i=K(t,`hsla?`);if(i?.[2]){let e=W(i[2]);return e==null?void 0:G(e)}let a=K(t,`rgba?`);if(a?.[0]&&a[1]&&a[2]){let e=W(a[0]),t=W(a[1]),n=W(a[2]);if(e==null||t==null||n==null)return;let r=(e,t)=>t.trim().endsWith(`%`)||e<=1?e:e/255;return .2126*H(r(e,a[0]))+.7152*H(r(t,a[1]))+.0722*H(r(n,a[2]))}}function J(e,t){let n=[],r=t.toLowerCase();for(let[i,a]of Object.entries(e)){if(!i.toLowerCase().startsWith(r))continue;let e=i.slice(t.length);/^\d+$/.test(e)&&n.push([Number(e),a])}return n.sort(([e],[t])=>e-t),n}function Y(e,t,n){let r=J(e,t);if(r.length===0)return e;let i=V(r.map(([,e])=>e),n),a={};for(let[e,[n]]of r.entries())a[`${t}${n}`]=i[e]??r[e][1];return a}function te(e){if(e.length>=12)return e.slice(0,12);let t=[...e],n=t.at(-1);if(n==null)return t;for(;t.length<12;)t.push(n);return t}function ne(e,t,n){let r=J(e,t);if(!(r.length<2))return te(V(r.map(([,e])=>e),n))}function X(e,t){let n=new Map(Object.entries(e).map(([e,t])=>[e.toLowerCase(),{name:e,scale:t}]));for(let e of A){let r=n.get(e);if(!r)continue;let i=ne(r.scale,r.name,t);if(i)return i}}function re(e){let t=e.filter(e=>e.category===`color`||e.palette),n=B(P(t,`light`)),r=B(P(t,`dark`));return{lightPalette:X(n,`light`),darkPalette:X(r,`dark`)}}function Z(e){let t=B(e),n={};for(let r of e)r.category!==`color`||!r.tokenKey||typeof r.tamaguiValue!=`string`||r.palette||/^[A-Z]+\d{1,3}$/i.test(r.tokenKey)&&t[r.tokenKey.replace(/\d{1,3}$/,``)]||(n[r.tokenKey]=r.tamaguiValue);return n}function ie(e,t){let n=new Set([...Object.keys(e),...Object.keys(t)]);if(n.size===0)return;let r=[];for(let i of[...n].toSorted((e,t)=>e.localeCompare(t))){let n=Y(e[i]??t[i]??{},i,`light`),a=Y(t[i]??e[i]??{},i,`dark`);Object.keys(n).length!==0&&Object.keys(a).length!==0&&r.push(` ${i}: {
42
+ light: ${F(n,8)},
43
+ dark: ${F(a,8)}
44
44
  }`)}if(r.length!==0)return`{\n${r.join(`,
45
- `)}\n }`}function z(e){switch(e.role){case`heading`:case`display`:return`heading`;case`mono`:case`code`:return`mono`;case`sans`:case`body`:case`serif`:return`body`;case void 0:default:return e.name?.replaceAll(/\W/g,``)||`body`}}function B(e){let t=new Map;for(let n of Object.values(e)){let e=z(n),r=t.get(e);(!r||n.role===e&&r.role!==e)&&t.set(e,n)}return t}function V(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: ${f(t.normal)}`),t.italic&&n.push(`italic: ${f(t.italic)}`),` ${e}: { ${n.join(`, `)} }`}).join(`,
46
- `)}\n }`}function H(e,r){let i=e.source===`local`?V(e):void 0,a=[`const ${r} = createFont({`,` family: isWeb ? ${f(t(e))} : ${f(n(e))},`,` size: {`,` 1: 12,`,` 2: 14,`,` 3: 16,`,` 4: 18,`,` 5: 20,`,` 6: 24,`,` 7: 28,`,` 8: 32,`,` 9: 40,`,` 10: 48`,` }${i?`,`:``}`];return i&&a.push(` face: ${i}`),a.push(`});`),a.join(`
47
- `)}function U(e,t={},n){let r=t.useDefaultConfig!==!1,i=t.animations??`css`,a=t.includeTypeAugmentation!==!1,o=M(j(e,`light`)),s=e.filter(e=>e.category===`color`),c=j(s,`light`),l=j(s,`dark`),u=P(c),d=P(l.length>0?l:c),{lightPalette:p,darkPalette:m}=I(e),h=R(u,d),g=L(c),_=L(l.length>0?l:c),v=Object.keys(g).length>0||Object.keys(_).length>0,y=[];for(let e of[`color`,`space`,`size`,`radius`,`zIndex`]){let t=o[e];t&&Object.keys(t).length>0&&y.push(` ${e}: ${N(t,4)}`)}let b=[];p&&b.push(` lightPalette: ${f(p)}`),m&&b.push(` darkPalette: ${f(m)}`),h&&b.push(` childrenThemes: ${h}`),v&&b.push(` getTheme: ({ scheme }) => {
45
+ `)}\n }`}function ae(e){switch(e.role){case`heading`:case`display`:return`heading`;case`mono`:case`code`:return`mono`;case`sans`:case`body`:case`serif`:return`body`;case void 0:default:return e.name?.replaceAll(/\W/g,``)||`body`}}function oe(e){let t=new Map;for(let n of Object.values(e)){let e=ae(n),r=t.get(e);(!r||n.role===e&&r.role!==e)&&t.set(e,n)}return t}function se(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: ${f(t.normal)}`),t.italic&&n.push(`italic: ${f(t.italic)}`),` ${e}: { ${n.join(`, `)} }`}).join(`,
46
+ `)}\n }`}function ce(e,r){let i=e.source===`local`?se(e):void 0,a=[`const ${r} = createFont({`,` family: isWeb ? ${f(t(e))} : ${f(n(e))},`,` size: {`,` 1: 12,`,` 2: 14,`,` 3: 16,`,` 4: 18,`,` 5: 20,`,` 6: 24,`,` 7: 28,`,` 8: 32,`,` 9: 40,`,` 10: 48`,` }${i?`,`:``}`];return i&&a.push(` face: ${i}`),a.push(`});`),a.join(`
47
+ `)}function Q(e,t={},n){let r=t.useDefaultConfig!==!1,i=t.animations??`css`,a=t.includeTypeAugmentation!==!1,o=ee(P(e,`light`)),s=e.filter(e=>e.category===`color`),c=P(s,`light`),l=P(s,`dark`),u=B(c),d=B(l.length>0?l:c),{lightPalette:p,darkPalette:m}=re(e),h=ie(u,d),g=Z(c),_=Z(l.length>0?l:c),v=Object.keys(g).length>0||Object.keys(_).length>0,y=[];for(let e of[`color`,`space`,`size`,`radius`,`zIndex`]){let t=o[e];t&&Object.keys(t).length>0&&y.push(` ${e}: ${F(t,4)}`)}let b=[];p&&b.push(` lightPalette: ${f(p)}`),m&&b.push(` darkPalette: ${f(m)}`),h&&b.push(` childrenThemes: ${h}`),v&&b.push(` getTheme: ({ scheme }) => {
48
48
  const semantic = scheme === "dark"
49
- ? ${N(_,8)}
50
- : ${N(g,8)};
49
+ ? ${F(_,8)}
50
+ : ${F(g,8)};
51
51
  return semantic;
52
- }`);let x=[];r?x.push(`import { createV5Theme, defaultConfig } from "@tamagui/config/v5";`):x.push(`import { createV5Theme } from "@tamagui/config/v5";`),i!==!1&&x.push(`import { animations } from "${O[i]}";`);let S=[`createTamagui`];y.length>0&&S.push(`createTokens`);let C=n?B(n):new Map;C.size>0&&S.push(`createFont`,`isWeb`),x.push(`import { ${S.join(`, `)} } from "tamagui";`);let w=[`/* eslint-disable */`,`/*`,` * Generated by @razorwind/tamagui — do not edit by hand.`,` * @see https://tamagui.dev/docs/core/config-v5`,` */`,``,...x,``];y.length>0&&w.push(`const tokens = createTokens({`,y.join(`,
52
+ }`);let x=[];r?x.push(`import { createV5Theme, defaultConfig } from "@tamagui/config/v5";`):x.push(`import { createV5Theme } from "@tamagui/config/v5";`),i!==!1&&x.push(`import { animations } from "${j[i]}";`);let S=[`createTamagui`];y.length>0&&S.push(`createTokens`);let C=n?oe(n):new Map;C.size>0&&S.push(`createFont`,`isWeb`),x.push(`import { ${S.join(`, `)} } from "tamagui";`);let w=[`/* eslint-disable */`,`/*`,` * Generated by @razorwind/tamagui — do not edit by hand.`,` * @see https://tamagui.dev/docs/core/config-v5`,` */`,``,...x,``];y.length>0&&w.push(`const tokens = createTokens({`,y.join(`,
53
53
  `),`});`,``);let T=b.length>0?`createV5Theme({\n${b.join(`,
54
- `)}\n})`:`createV5Theme()`;w.push(`const themes = ${T};`,``);let E=new Map;if(C.size>0){let e=0;for(let[t,n]of C){let r=`${t}Font`.replaceAll(/\W/g,``)||`font${e}`;E.set(t,r),w.push(H(n,r),``),e+=1}}let D=[];if(r&&D.push(` ...defaultConfig`),i!==!1&&D.push(` animations`),y.length>0&&(r?D.push(` tokens: {
54
+ `)}\n})`:`createV5Theme()`;w.push(`const themes = ${T};`,``);let E=new Map;if(C.size>0){let e=0;for(let[t,n]of C){let r=`${t}Font`.replaceAll(/\W/g,``)||`font${e}`;E.set(t,r),w.push(ce(n,r),``),e+=1}}let D=[];if(r&&D.push(` ...defaultConfig`),i!==!1&&D.push(` animations`),y.length>0&&(r?D.push(` tokens: {
55
55
  ...defaultConfig.tokens,
56
56
  ...tokens,
57
57
  color: {
@@ -83,5 +83,5 @@ ${e.join(`,
83
83
  `)}
84
84
  }`)}return w.push(`export const config = createTamagui({`,D.join(`,
85
85
  `),`});`,``,`export type AppConfig = typeof config;`,``),a&&w.push(`declare module "tamagui" {`,` // eslint-disable-next-line @typescript-eslint/no-empty-object-type`,` interface TamaguiCustomConfig extends AppConfig {}`,`}`,``),w.push(`export default config;`,``),w.join(`
86
- `)}function W(e,t={}){let n=e.tokens&&Object.keys(e.tokens).length>0,i=e.fonts&&Object.keys(e.fonts).length>0;if(!n&&!i)return{};let a=n?C(e.tokens,t):[];if(a.length===0&&!i)return{};let o=t.outputPath??`tamagui.config.ts`,s=U(a,t,e.fonts),c=t.installGuide??w({outputPath:o}),d=u(l(o),`INSTALL.md`);return{[o]:r(o,s,{name:`razorwind-tamagui`},!1,`typescript`),[d]:r(d,c,{name:`razorwind-tamagui`},!1,`markdown`)}}var G=e(e=>({name:`tamagui`,themeGeneration:`combined`,generate:async t=>W(t,e??{})}));export{P as collectColorScales,G as default,C as flattenTokens,i as formatTokenValue,W as generateTamaguiConfig,w as renderInstallMd,U as renderTamaguiConfig,y as resolveTokenCategory,o as resolveTokenSets,b as toCamelCaseKey,s as toCssVar,p as toTamaguiValue,x as toTokenKey};
86
+ `)}function $(e,t={}){let n=e.tokens&&Object.keys(e.tokens).length>0,i=e.fonts&&Object.keys(e.fonts).length>0;if(!n&&!i)return{};let a=n?E(e.tokens,t):[];if(a.length===0&&!i)return{};let o=t.outputPath??`tamagui.config.ts`,s=Q(a,t,e.fonts),c=t.installGuide??D({outputPath:o}),d=u(l(o),`INSTALL.md`);return{[o]:r(o,s,{name:`razorwind-tamagui`},!1,`typescript`),[d]:r(d,c,{name:`razorwind-tamagui`},!1,`markdown`)}}var le=e(e=>({name:`tamagui`,themeGeneration:`combined`,generate:async t=>$(t,e??{})}));export{B as collectColorScales,q as colorLightness,le as default,E as flattenTokens,i as formatTokenValue,$ as generateTamaguiConfig,_ as isPaletteGroup,V as orderPaletteForScheme,D as renderInstallMd,Q as renderTamaguiConfig,S as resolveTokenCategory,o as resolveTokenSets,C as toCamelCaseKey,s as toCssVar,p as toTamaguiValue,w as toTokenKey};
87
87
  //# sourceMappingURL=index.mjs.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@razorwind/tamagui",
3
- "version": "0.0.39",
3
+ "version": "0.0.40",
4
4
  "type": "module",
5
5
  "description": "Razorwind plugin that creates Tamagui theme tokens from Razorwind design tokens.",
6
6
  "repository": {
@@ -104,5 +104,5 @@
104
104
  "typescript": "^6.0.3"
105
105
  },
106
106
  "publishConfig": { "access": "public" },
107
- "gitHead": "3a51456206724861cda83c344cb35ffcb8b3b8f1"
107
+ "gitHead": "907ed672d3b6b5cf02560ede8553693f3b4073c3"
108
108
  }