@razorwind/tamagui 0.0.57 → 0.0.59

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
@@ -48,24 +48,24 @@ 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 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(`,
51
+ `}const qe=new Set([`default`,`light`,`theme`]),Je=/^base(?:[A-Z]\w*|[._-].+)?$/i,Ye=/^ring(?:\.|$)/i,Xe={css:`@tamagui/config/v5-css`,rn:`@tamagui/config/v5-rn`,reanimated:`@tamagui/config/v5-reanimated`,motion:`@tamagui/config/v5-motion`};function Ze(e){return qe.has(e)}function Qe(e){return e===`dark`}function H(e,t){let n=new Map,r=t===`dark`?Qe:Ze;for(let t of e){let e=t.theme?.toLowerCase();(!e||Je.test(e))&&n.set(t.path,t)}for(let t of e){let e=t.theme?.toLowerCase();e&&r(e)&&n.set(t.path,t)}return[...n.values()]}function $e(e){return Ye.test(e.path)&&e.category===`shadow`}const et=new Set([`shadow`,`insetShadow`,`dropShadow`,`textShadow`,`boxShadow`]);function tt(e){return!e.primitive&&!!e.tokenKey&&(e.type===`shadow`||e.category!=null&&et.has(e.category))}const nt=new Set([`fontSize`,`blur`]),rt=[`space`,`size`,`radius`,`zIndex`,`blur`,`fontSize`,`shadow`,`insetShadow`,`dropShadow`,`textShadow`,`boxShadow`,`fontWeight`];function it(e){return/^px\(-?\d/.test(e)}function at(e){if(e.category===`radius`&&e.tokenKey?.startsWith(`borderRadius`)){let t=e.tokenKey.replace(/^borderRadius/,``);return t?D([t]):e.tokenKey}return e.tokenKey??``}function ot(e,t){let n=$(e,t.byPath,t.byCssVar).tamaguiValue;if(e.category&&nt.has(e.category)&&typeof n==`number`)return`px(${n})`;if(typeof n==`string`){let r=Ot(n,t);return e.category===`dropShadow`?st(r):r}return n}function st(e){return e.includes(`drop-shadow(`)?e:e.split(`,`).map(e=>e.trim()).filter(Boolean).map(e=>{let t=e.replace(/^inset\s+/i,``).split(/\s+/);if(t.length>=5){let[e,n,r]=t;return`drop-shadow(${e} ${n} ${r} ${t.slice(4).join(` `)})`}return`drop-shadow(${e.replace(/^inset\s+/i,``)})`}).join(` `)}function ct(e){let t={},n=Tt(e);for(let r of e){if(!r.category||r.category===`color`||!r.tokenKey||$e(r))continue;let e=at(r);if(!e)continue;let i=ot(r,n);if(typeof i==`string`&&Z(i))continue;let a=t[r.category]??{};a[e]=i,t[r.category]=a}return t}function U(e){let t=e.path.replace(/^color\./i,``).replaceAll(`.`,``);return e.theme?`${e.theme}${t[0]?.toUpperCase()??``}${t.slice(1)}`:t}function W(e){return`tokens.color.${e}.val`}const lt=[`base`,`gray`,`grey`,`neutral`],ut=[`accent`,`brand`],dt=[`"#ffffff"`,`"#000000"`],ft=[`"#000000"`,`"#ffffff"`];function pt(e){if(e.category!==`color`||!e.primitive)return;let t=e.path.replace(/^color\./i,``).split(`.`).filter(Boolean),n=t.at(-1);if(!n||t.length<2)return;let r=Number(n);if(Number.isFinite(r))return{name:t.slice(0,-1).join(`.`).toLowerCase(),step:r}}function mt(e,t){let n=U(e);if(n in t)return W(n);let r=typeof e.cssValue==`string`&&e.cssValue.length>0?e.cssValue:typeof e.tamaguiValue==`string`?e.tamaguiValue:void 0;return r?a(r):`"#000000"`}function ht(e){let t=e.trim(),n=/^oklch\(\s*([0-9.]+)(%?)/i.exec(t);if(n){let e=Number(n[1]);return Number.isFinite(e)?n[2]===`%`||e>1?e/100:e:void 0}let r=/^#([\da-f]{3,8})$/i.exec(t);if(!r)return;let i=r[1],a,o,s;if(i.length===3||i.length===4)a=Number.parseInt(i[0]+i[0],16),o=Number.parseInt(i[1]+i[1],16),s=Number.parseInt(i[2]+i[2],16);else if(i.length===6||i.length===8)a=Number.parseInt(i.slice(0,2),16),o=Number.parseInt(i.slice(2,4),16),s=Number.parseInt(i.slice(4,6),16);else return;return(.2126*a+.7152*o+.0722*s)/255}function gt(e,t,n){let r=new Map;for(let t of e){let e=pt(t);if(!e)continue;let i=typeof t.cssValue==`string`&&t.cssValue.length>0?t.cssValue:void 0,a=r.get(e.name)??[];a.push({step:e.step,expression:mt(t,n),lightness:i?ht(i):void 0}),r.set(e.name,a)}for(let e of t){let t=r.get(e);if(!t||t.length===0)continue;let n=new Map;for(let e of t.toSorted((e,t)=>e.step-t.step))n.set(e.step,e);return[...n.values()]}}function G(e,t){if(e.filter(e=>e.lightness!=null).length>=2)return[...e].toSorted((e,n)=>{let r=e.lightness??.5,i=n.lightness??.5;return t===`light`?i-r:r-i}).map(e=>e.expression);let n=e.toSorted((e,t)=>e.step-t.step).map(e=>e.expression);return t===`light`?n:[...n].toReversed()}function K(e,t){return e.length>=2?e:e.length===1?[e[0],t[1]??`"#000000"`]:[...t]}function _t(e,t,n,r,i,a){let o=gt(e,n,r),s=gt(t,n,r);if(o&&s)return{light:K(G(o,`light`),i),dark:K(G(s,`dark`),a)};if(o){let e=K(G(o,`light`),i);return{light:e,dark:[...e].toReversed()}}if(s){let e=K(G(s,`dark`),a);return{light:[...e].toReversed(),dark:e}}return{light:[...i],dark:[...a]}}function vt(e){return e.category===`color`&&!e.primitive&&!!e.tokenKey}function yt(e,t){let n={},r=(e,t)=>{let r=t.cssValue;typeof r!=`string`||r.length===0||Dt(r)||r===`[object Object]`||(n[e]=r)};for(let t of e)!t.tokenKey||vt(t)||r(U(t),t);for(let e of t)!e.tokenKey||!e.primitive||r(U(e),e);return n}function q(e,t,n,r){let i=n[r];if(typeof i!=`string`)return!1;let a=Q(e,t);return a!=null&&a===i}function bt(e,t,n){if(e.tokenKey&&q(e,t,n,e.tokenKey))return W(e.tokenKey);let r=$(e,t.byPath,t.byCssVar);if(r.tokenKey&&q(e,t,n,r.tokenKey))return W(r.tokenKey);if(r.primitive){let i=U(r);if(q(e,t,n,i))return W(i)}let i=Q(e,t);if(i)return a(i)}function J(e,t=2){let n=` `.repeat(t),r=Object.entries(e).toSorted(([e],[t])=>e.localeCompare(t,void 0,{numeric:!0}));return r.length===0?`{}`:`{\n${r.map(([e,t])=>{let r=typeof t==`string`&&it(t)?t:a(t);return`${n}${/^[A-Z_$][\w$]*$/i.test(e)?e:a(e)}: ${r}`}).join(`,
52
52
  `)}\n${` `.repeat(Math.max(t-2,0))}}`}function Y(e,t=2){let n=` `.repeat(t),r=Object.entries(e).toSorted(([e],[t])=>e.localeCompare(t,void 0,{numeric:!0}));return r.length===0?`{}`:`{\n${r.map(([e,t])=>`${n}${/^[A-Z_$][\w$]*$/i.test(e)?e:a(e)}: ${t}`).join(`,
53
- `)}\n${` `.repeat(Math.max(t-2,0))}}`}const 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(`,
53
+ `)}\n${` `.repeat(Math.max(t-2,0))}}`}const xt=/^\{([^{}]+)\}$/,St=/\{([^{}]+)\}/g,Ct=/^var\((--[^),\s]+)(?:\s*,[^)]*)?\)$/,wt=/var\((--[^),\s]+)(?:\s*,[^)]*)?\)/g;function Tt(e){return{byPath:new Map(e.map(e=>[e.path,e])),byCssVar:new Map(e.map(e=>[(0,t.toThemeCssVar)(e.path),e]))}}function Et(e){if(typeof e==`string`)return xt.exec(e.trim())?.[1]?.trim()}function X(e){if(typeof e==`string`)return Ct.exec(e.trim())?.[1]}function Dt(e){return Et(e)!=null||X(e)!=null}function Z(e){return/var\(|\{[^{}]+\}/.test(e)}function Q(e,t){let n=$(e,t.byPath,t.byCssVar);if(n.category!=null&&n.category!==`color`)return;let r=[n.cssValue,n.tamaguiValue];for(let e of r)if(typeof e==`string`&&e.length>0&&!Dt(e))return e}function Ot(e,t){return e.replace(St,(e,n)=>{let r=t.byPath.get(n.trim());return r?Q(r,t)??e:e}).replace(wt,(e,n)=>{let r=t.byCssVar.get(n);return r?Q(r,t)??e:e})}function $(e,t,n){let r=e,i=new Set;for(let e=0;e<8;e++){if(i.has(r.path))return r;i.add(r.path);let e=Et(r.value);if(e){let n=t.get(e);if(!n||n.path===r.path)return r;r=n;continue}let a=X(r.value)??X(r.cssValue)??X(r.tamaguiValue);if(a){let e=n.get(a);if(!e||e.path===r.path)return r;r=e;continue}return r}return r}function kt(e,t){let n=t.toLowerCase(),r=e.split(/(?=[A-Z])/).filter(Boolean).filter(e=>e.toLowerCase()!==n);if(r.length!==0)return D(r)}function At(e){return tt(e)&&D(e.path.split(`.`).filter(Boolean))||e.tokenKey}function jt(e){let t=e.toLowerCase();return Ze(t)||Qe(t)}function Mt(e,t,n){let r=At(t);if(!r)return;let i=t.childTheme?.trim();if(!i||jt(i)){e.base[r]=n;return}let a=D([i]),o=kt(r,a);if(!o)return;let s=e.children[a]??{};s[o]=n,e.children[a]=s}function Nt(e,t){let n=typeof e.tamaguiValue==`string`?e.tamaguiValue:e.cssValue;if(typeof n!=`string`||n.length===0)return;let r=Ot(n,t);return r.length===0||Z(r)?void 0:a(e.category===`dropShadow`?st(r):r)}function Pt(e,t){let n=Tt(e),r={base:{},children:{}};for(let i of e){if(vt(i)){let e=bt(i,n,t);e&&Mt(r,i,e);continue}if(!tt(i))continue;let e=Nt(i,n);if(!e)continue;let a=i.childTheme?.trim();(a&&!jt(a)||$e(i))&&Mt(r,i,e)}return r}function Ft(e){let t=new Set;for(let n of e){for(let e of Object.keys(n.base))t.add(e);for(let e of Object.values(n.children))for(let n of Object.keys(e))t.add(n)}return[...t].toSorted((e,t)=>e.localeCompare(t,void 0,{numeric:!0}))}function It(e){return` ${/^[A-Z_$][\w$]*$/i.test(e)?e:a(e)}: string;`}function Lt(e,t){if(e.length!==0)return[`/**`,` * Theme values available on \`useTheme()\` and \`$\` style props for the ${t.specName||`design system`}.`,` *`," * Derived from semantic color tokens mapped by `createThemes`. Nested"," * themes (`light_primary`, `dark_danger`, …) come from each token's"," * `theme` / `$theme` property.",` *`,` * @see https://tamagui.dev/docs/intro/themes`,` */`,`export interface AppTheme {`,...e.map(It),`}`,``]}function Rt(e){return Object.keys(e).length>0}function zt(e){return/^[A-Z_$][\w$]*$/i.test(e)?e:a(e)}function Bt(e,t){let n=` `.repeat(t),r=` `.repeat(Math.max(t-2,0));return`[\n${e.map(e=>`${n}${e}`).join(`,
54
54
  `)}\n${r}]`}function Vt(e,t,n){let r=` `.repeat(n),i=` `.repeat(Math.max(n-2,0)),a=n+2;return`{
55
55
  ${r}light: ${Bt(e,a)},
56
56
  ${r}dark: ${Bt(t,a)}
57
57
  ${i}}`}function Ht(e,t,n){let r=` `.repeat(n),i=` `.repeat(Math.max(n-2,0)),a=n+2;return`{
58
58
  ${r}light: ${Y(e,a)},
59
59
  ${r}dark: ${Y(t,a)}
60
- ${i}}`}function 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(`,
60
+ ${i}}`}function Ut(e,t){let n=Object.entries(e).toSorted(([e],[t])=>e.localeCompare(t));if(n.length===0)return`{}`;let r=` `.repeat(t),i=` `.repeat(Math.max(t-2,0)),a=t+2;return`{\n${n.map(([e,t])=>`${r}${zt(e)}: ${Y(t,a)}`).join(`,
61
+ `)}\n${i}}`}function Wt(e,t){let n=` `.repeat(t),r=` `.repeat(Math.max(t-2,0));return`{\n${e.map(e=>`${n}${zt(e)}: {}`).join(`,
62
62
  `)}\n${r}}`}function Gt(e,t){return`const childThemeExtras: {
63
63
  light: Record<string, Record<string, string>>;
64
64
  dark: Record<string, Record<string, string>>;
65
65
  } = {
66
66
  light: ${Ut(e,4)},
67
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(`,
68
+ };`}function Kt(e,t,n){return Object.fromEntries(n.map(n=>[n,e.children[n]??t.children[n]??{}]))}function qt(e,t,n,r,i){let a=[...new Set([...Object.keys(e.children),...Object.keys(t.children)])].toSorted((e,t)=>e.localeCompare(t)),o=a.includes(`accent`),s=a.filter(e=>e!==`accent`),c=Rt(e.base)||Rt(t.base);if(!c&&a.length===0)return{statements:[],hasThemes:!1};let l=_t(r,i,lt,n,dt,ft),u=_t(r,i,ut,n,l.light,l.dark),d=[],f=[` componentThemes: false`],p=[` palette: ${Vt(l.light,l.dark,6)}`];if(c&&p.push(` extra: ${Ht(e.base,t.base,6)}`),f.push(` base: {\n${p.join(`,
69
69
  `)}\n }`),o){let n=e.children.accent??t.children.accent??{},r=t.children.accent??e.children.accent??{};f.push(` accent: {
70
70
  palette: ${Vt(u.light,u.dark,6)},
71
71
  extra: ${Ht(n,r,6)}
@@ -79,7 +79,7 @@ ${i}}`}function Ut(e,t){let n=Object.entries(e).toSorted(([e],[t])=>e.localeComp
79
79
 
80
80
  return extras ? { ...theme, ...extras } : theme;
81
81
  }`)}return d.push(`const themes = createThemes({\n${f.join(`,
82
- `)}\n});`),{statements:d,hasThemes:!0}}function 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(`,
82
+ `)}\n});`),{statements:d,hasThemes:!0}}function Jt(e,t,n={}){let r=e.fonts??{},i=n.useDefaultConfig===!0,o=n.animations??`css`,s=n.includeTypeAugmentation!==!1,c=t.filter(e=>e.category===`color`),l=H(c,`light`),u=H(c,`dark`),d=u.length>0,f=yt(l,u),p=H(t,`light`),m=d?H(t,`dark`):p,h=Pt(p,f),g=Pt(m,f),{statements:_,hasThemes:v}=qt(h,g,f,l,u),ee=Lt(Ft(d?[h,g]:[h]),{specName:e.name}),y=ct(p),b=[];Object.keys(f).length>0&&b.push(` color: ${J(f,4)}`);for(let e of rt){let t=y[e];t&&Object.keys(t).length>0&&b.push(` ${e}: ${J(t,4)}`)}let x=[`import { isWeb } from '@tamagui/constants';`];i&&x.push(`import { defaultConfig } from "@tamagui/config/v5";`),o!==!1&&x.push(`import { animations } from "${Xe[o]}";`),n.importConfig&&x.push(`import userConfig from "${n.importConfig}";`),v&&x.push(`import { createThemes } from "@tamagui/theme-builder";`);let S=[`createTamagui`,`px`];b.length>0&&S.push(`createTokens`);let C=He(t,r);C.length>0&&S.push(`createFont`),x.push(`import { ${S.join(`, `)} } from "@tamagui/core";`);let w=[`/* eslint-disable */`,``,`/*`,` * Generated by @razorwind/tamagui — Do not edit by hand.`,` * `,` * @see https://tamagui.dev/docs/core/configuration`,` * @see https://tamagui.dev/docs/intro/themes`,` * @see https://tamagui.dev/docs/guides/theme-builder`,` */`,``,...x,``];b.length>0&&w.push(`const tokens = createTokens({`,b.join(`,
83
83
  `),`});`,``),_.length>0&&w.push(..._,``);let T=new Map;if(C.length>0)for(let[e,t]of C.entries()){let n=We(t.key,e);T.set(t.key,n),w.push(Ge(t,n),``)}let E=[];if(i&&E.push(` ...defaultConfig`),o!==!1&&E.push(` animations`),b.length>0&&(i?E.push(` tokens: {
84
84
  ...defaultConfig.tokens,
85
85
  ...tokens,
package/dist/index.d.cts CHANGED
@@ -12,6 +12,9 @@ import { GeneratorFunctionResult } from "@power-plant/core";
12
12
  type TamaguiAnimationDriver = "css" | "rn" | "reanimated" | "motion" | false;
13
13
  /**
14
14
  * Tamagui `createTokens` category keys we emit from DTCG tokens.
15
+ *
16
+ * `color` is palettes / primitives only. Semantic theme / `$theme` colors
17
+ * (including computed state siblings) go to `createThemes` extras.
15
18
  */
16
19
  type TamaguiTokenCategory = "color" | "space" | "size" | "radius" | "zIndex" | "blur" | "fontSize" | "shadow" | "insetShadow" | "dropShadow" | "textShadow" | "fontWeight" | "boxShadow";
17
20
  /**
@@ -108,7 +111,7 @@ interface FlatToken {
108
111
  */
109
112
  childTheme?: string;
110
113
  /**
111
- * True when an ancestor group is marked as a primitive (`primitive: true` or `$type: "primitive"` or `$type: "palette"`). Those scales feed `createTokens({ color })` and `createThemes` palettes, and are skipped when building semantic extras.
114
+ * True when an ancestor group is marked as a primitive (`primitive: true` or `$type: "primitive"` or `$type: "palette"`). Those scales feed `createTokens({ color })` and `createThemes` palettes. Semantic colors (theme / `$theme`, including computed state siblings) are not primitives and go to extras only.
112
115
  */
113
116
  primitive?: boolean;
114
117
  }
@@ -219,11 +222,11 @@ declare function renderInstallMd(options: {
219
222
  /**
220
223
  * Render a Tamagui config module from flattened design tokens.
221
224
  *
222
- * Light and dark token sets become `createThemes` extra maps. Semantic colors with
223
- * a `theme` / `$theme` property are nested as `light_<name>` / `dark_<name>`,
224
- * with the theme name stripped from the token key. Each typography token is
225
- * emitted as its own `createFont` entry with that token's size, line height,
226
- * and weight (not a shared type scale).
225
+ * `createTokens({ color })` holds palette / primitive scales. Light and dark
226
+ * semantic colors become `createThemes` extra maps (tagged `$theme` names as
227
+ * `light_<name>` / `dark_<name>`, with the theme name stripped from the token
228
+ * key). Each typography token is emitted as its own `createFont` entry with
229
+ * that token's size, line height, and weight (not a shared type scale).
227
230
  *
228
231
  * @see https://tamagui.dev/docs/core/configuration
229
232
  * @see https://tamagui.dev/docs/intro/themes
@@ -240,14 +243,17 @@ declare function generateTamaguiConfig(spec: Schema, options?: TamaguiPluginOpti
240
243
  * Razorwind plugin that turns design tokens into a Tamagui config
241
244
  * (`createTamagui` + `createTokens` + `createThemes` + `createFont`).
242
245
  *
243
- * Light and dark token sets are emitted as a single config. Semantic colors
244
- * and shadows (not marked `palette` / `primitive`) that declare `theme` /
245
- * `$theme` become nested Tamagui themes via `createThemes` from
246
+ * Light and dark token sets are emitted as a single config.
247
+ * `createTokens({ color })` is palettes / primitives only. Semantic theme /
248
+ * `$theme` colors (including computed state siblings such as hover / pressed /
249
+ * disabled) go to `createThemes` extras — never to `tokens.color.*`. Tagged
250
+ * semantics become nested Tamagui themes via `createThemes` from
246
251
  * `@tamagui/theme-builder` (`light_primary`, `dark_danger`, …), with the theme
247
252
  * name stripped from the token key (`backgroundPrimarySubtle` + `theme: "primary"`
248
- * → `backgroundSubtle`; `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`.
253
+ * → `backgroundSubtle`; `backgroundDangerHover` → `backgroundHover` on `danger`;
254
+ * `ringPrimarySubtle` `ringSubtle` on `primary`). Untagged semantic colors
255
+ * (overlay, link, ) land on `base.extra`. Primitive palettes feed
256
+ * `base.palette` / `accent.palette`.
251
257
  *
252
258
  * Typography tokens (`$type: "typography"`) each emit their own Tamagui
253
259
  * `createFont` entry with that token's size, line height, and weight. Font
@@ -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;;;;;;;;;;;;;;;;;iBCirC3B,oBACd,MAAM,QACN,QAAQ,aACR,UAAS;;;;iBAgOK,sBACd,MAAM,QACN,UAAS,uBACR,wBAAwB,QAAQ"}
1
+ {"version":3,"file":"index.d.cts","names":[],"sources":["../src/types.ts","../src/flatten.ts","../src/fonts.ts","../src/format.ts","../src/install.ts","../src/generate.ts","../src/index.ts"],"mappings":";;;;;;;;;;;KA0BY;;;;;;;KASA;;;;UAkBK;;;;;;;;;EASf;;;;;;;EAQA,aAAa;;;;;;EAOb,aAAa;;;;;;EAOb,QAAQ;;;;EAKR;;;;EAKA;;;;;;;;EASA;;;;;EAMA,eAAe;;;;;;;EAQf;;;;;EAMA;;;;;UAMe;;EAEf;;EAEA,OAAO;;EAEP;;EAEA;;EAEA;;EAEA,WAAW;;EAEX;;EAEA;;EAEA;;;;;EAKA;;;;EAIA;;;;;;;;;iBCnEc,eAAe,MAAM;;;;iBAyGrB,qBACd,cACA,gBACC;;;;;;;iBAoEa,eAAe;;;;;;;;iBA0Bf,WAAW;;;;iBA2GX,cACd,QAAQ,SAAS,eAAe,SAChC,UAAS,KAAK,wCACb;;;;;;;;;UCrUc;;EAEf;;EAEA;;EAEA;EACA,MAAM;EACN,YAAY;EACZ,QAAQ;EACR,eAAe;;EAEf;;;;;;;;;iBA4Lc,uBAAuB;;;;;;;;;iBAiCvB,kBAAkB;;;;;;;iBA2WlB,oBACd,QAAQ,aACR,QAAQ,QACP;;;;;;iBAsFa,YAAY,aAAa;;;;;;;;;iBC/rBzB,eAAe,gBAAgB;;;;;;;;iBCnC/B,gBAAgB;EAAW;;;;;;;;;;;;;;;;;iBCkrC3B,oBACd,MAAM,QACN,QAAQ,aACR,UAAS;;;;iBAgOK,sBACd,MAAM,QACN,UAAS,uBACR,wBAAwB,QAAQ"}
package/dist/index.d.mts CHANGED
@@ -12,6 +12,9 @@ import { GeneratorFunctionResult } from "@power-plant/core";
12
12
  type TamaguiAnimationDriver = "css" | "rn" | "reanimated" | "motion" | false;
13
13
  /**
14
14
  * Tamagui `createTokens` category keys we emit from DTCG tokens.
15
+ *
16
+ * `color` is palettes / primitives only. Semantic theme / `$theme` colors
17
+ * (including computed state siblings) go to `createThemes` extras.
15
18
  */
16
19
  type TamaguiTokenCategory = "color" | "space" | "size" | "radius" | "zIndex" | "blur" | "fontSize" | "shadow" | "insetShadow" | "dropShadow" | "textShadow" | "fontWeight" | "boxShadow";
17
20
  /**
@@ -108,7 +111,7 @@ interface FlatToken {
108
111
  */
109
112
  childTheme?: string;
110
113
  /**
111
- * True when an ancestor group is marked as a primitive (`primitive: true` or `$type: "primitive"` or `$type: "palette"`). Those scales feed `createTokens({ color })` and `createThemes` palettes, and are skipped when building semantic extras.
114
+ * True when an ancestor group is marked as a primitive (`primitive: true` or `$type: "primitive"` or `$type: "palette"`). Those scales feed `createTokens({ color })` and `createThemes` palettes. Semantic colors (theme / `$theme`, including computed state siblings) are not primitives and go to extras only.
112
115
  */
113
116
  primitive?: boolean;
114
117
  }
@@ -219,11 +222,11 @@ declare function renderInstallMd(options: {
219
222
  /**
220
223
  * Render a Tamagui config module from flattened design tokens.
221
224
  *
222
- * Light and dark token sets become `createThemes` extra maps. Semantic colors with
223
- * a `theme` / `$theme` property are nested as `light_<name>` / `dark_<name>`,
224
- * with the theme name stripped from the token key. Each typography token is
225
- * emitted as its own `createFont` entry with that token's size, line height,
226
- * and weight (not a shared type scale).
225
+ * `createTokens({ color })` holds palette / primitive scales. Light and dark
226
+ * semantic colors become `createThemes` extra maps (tagged `$theme` names as
227
+ * `light_<name>` / `dark_<name>`, with the theme name stripped from the token
228
+ * key). Each typography token is emitted as its own `createFont` entry with
229
+ * that token's size, line height, and weight (not a shared type scale).
227
230
  *
228
231
  * @see https://tamagui.dev/docs/core/configuration
229
232
  * @see https://tamagui.dev/docs/intro/themes
@@ -240,14 +243,17 @@ declare function generateTamaguiConfig(spec: Schema, options?: TamaguiPluginOpti
240
243
  * Razorwind plugin that turns design tokens into a Tamagui config
241
244
  * (`createTamagui` + `createTokens` + `createThemes` + `createFont`).
242
245
  *
243
- * Light and dark token sets are emitted as a single config. Semantic colors
244
- * and shadows (not marked `palette` / `primitive`) that declare `theme` /
245
- * `$theme` become nested Tamagui themes via `createThemes` from
246
+ * Light and dark token sets are emitted as a single config.
247
+ * `createTokens({ color })` is palettes / primitives only. Semantic theme /
248
+ * `$theme` colors (including computed state siblings such as hover / pressed /
249
+ * disabled) go to `createThemes` extras — never to `tokens.color.*`. Tagged
250
+ * semantics become nested Tamagui themes via `createThemes` from
246
251
  * `@tamagui/theme-builder` (`light_primary`, `dark_danger`, …), with the theme
247
252
  * name stripped from the token key (`backgroundPrimarySubtle` + `theme: "primary"`
248
- * → `backgroundSubtle`; `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`.
253
+ * → `backgroundSubtle`; `backgroundDangerHover` → `backgroundHover` on `danger`;
254
+ * `ringPrimarySubtle` `ringSubtle` on `primary`). Untagged semantic colors
255
+ * (overlay, link, ) land on `base.extra`. Primitive palettes feed
256
+ * `base.palette` / `accent.palette`.
251
257
  *
252
258
  * Typography tokens (`$type: "typography"`) each emit their own Tamagui
253
259
  * `createFont` entry with that token's size, line height, and weight. Font
package/dist/index.mjs CHANGED
@@ -48,9 +48,9 @@ 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 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(`,
51
+ `}const tt=new Set([`default`,`light`,`theme`]),nt=/^base(?:[A-Z]\w*|[._-].+)?$/i,rt=/^ring(?:\.|$)/i,it={css:`@tamagui/config/v5-css`,rn:`@tamagui/config/v5-rn`,reanimated:`@tamagui/config/v5-reanimated`,motion:`@tamagui/config/v5-motion`};function at(e){return tt.has(e)}function ot(e){return e===`dark`}function U(e,t){let n=new Map,r=t===`dark`?ot:at;for(let t of e){let e=t.theme?.toLowerCase();(!e||nt.test(e))&&n.set(t.path,t)}for(let t of e){let e=t.theme?.toLowerCase();e&&r(e)&&n.set(t.path,t)}return[...n.values()]}function st(e){return rt.test(e.path)&&e.category===`shadow`}const ct=new Set([`shadow`,`insetShadow`,`dropShadow`,`textShadow`,`boxShadow`]);function lt(e){return!e.primitive&&!!e.tokenKey&&(e.type===`shadow`||e.category!=null&&ct.has(e.category))}const ut=new Set([`fontSize`,`blur`]),dt=[`space`,`size`,`radius`,`zIndex`,`blur`,`fontSize`,`shadow`,`insetShadow`,`dropShadow`,`textShadow`,`boxShadow`,`fontWeight`];function ft(e){return/^px\(-?\d/.test(e)}function pt(e){if(e.category===`radius`&&e.tokenKey?.startsWith(`borderRadius`)){let t=e.tokenKey.replace(/^borderRadius/,``);return t?k([t]):e.tokenKey}return e.tokenKey??``}function mt(e,t){let n=$(e,t.byPath,t.byCssVar).tamaguiValue;if(e.category&&ut.has(e.category)&&typeof n==`number`)return`px(${n})`;if(typeof n==`string`){let r=Lt(n,t);return e.category===`dropShadow`?ht(r):r}return n}function ht(e){return e.includes(`drop-shadow(`)?e:e.split(`,`).map(e=>e.trim()).filter(Boolean).map(e=>{let t=e.replace(/^inset\s+/i,``).split(/\s+/);if(t.length>=5){let[e,n,r]=t;return`drop-shadow(${e} ${n} ${r} ${t.slice(4).join(` `)})`}return`drop-shadow(${e.replace(/^inset\s+/i,``)})`}).join(` `)}function gt(e){let t={},n=Nt(e);for(let r of e){if(!r.category||r.category===`color`||!r.tokenKey||st(r))continue;let e=pt(r);if(!e)continue;let i=mt(r,n);if(typeof i==`string`&&It(i))continue;let a=t[r.category]??{};a[e]=i,t[r.category]=a}return t}function W(e){let t=e.path.replace(/^color\./i,``).replaceAll(`.`,``);return e.theme?`${e.theme}${t[0]?.toUpperCase()??``}${t.slice(1)}`:t}function G(e){return`tokens.color.${e}.val`}const _t=[`base`,`gray`,`grey`,`neutral`],vt=[`accent`,`brand`],yt=[`"#ffffff"`,`"#000000"`],bt=[`"#000000"`,`"#ffffff"`];function xt(e){if(e.category!==`color`||!e.primitive)return;let t=e.path.replace(/^color\./i,``).split(`.`).filter(Boolean),n=t.at(-1);if(!n||t.length<2)return;let r=Number(n);if(Number.isFinite(r))return{name:t.slice(0,-1).join(`.`).toLowerCase(),step:r}}function St(e,t){let n=W(e);if(n in t)return G(n);let r=typeof e.cssValue==`string`&&e.cssValue.length>0?e.cssValue:typeof e.tamaguiValue==`string`?e.tamaguiValue:void 0;return r?m(r):`"#000000"`}function Ct(e){let t=e.trim(),n=/^oklch\(\s*([0-9.]+)(%?)/i.exec(t);if(n){let e=Number(n[1]);return Number.isFinite(e)?n[2]===`%`||e>1?e/100:e:void 0}let r=/^#([\da-f]{3,8})$/i.exec(t);if(!r)return;let i=r[1],a,o,s;if(i.length===3||i.length===4)a=Number.parseInt(i[0]+i[0],16),o=Number.parseInt(i[1]+i[1],16),s=Number.parseInt(i[2]+i[2],16);else if(i.length===6||i.length===8)a=Number.parseInt(i.slice(0,2),16),o=Number.parseInt(i.slice(2,4),16),s=Number.parseInt(i.slice(4,6),16);else return;return(.2126*a+.7152*o+.0722*s)/255}function wt(e,t,n){let r=new Map;for(let t of e){let e=xt(t);if(!e)continue;let i=typeof t.cssValue==`string`&&t.cssValue.length>0?t.cssValue:void 0,a=r.get(e.name)??[];a.push({step:e.step,expression:St(t,n),lightness:i?Ct(i):void 0}),r.set(e.name,a)}for(let e of t){let t=r.get(e);if(!t||t.length===0)continue;let n=new Map;for(let e of t.toSorted((e,t)=>e.step-t.step))n.set(e.step,e);return[...n.values()]}}function K(e,t){if(e.filter(e=>e.lightness!=null).length>=2)return[...e].toSorted((e,n)=>{let r=e.lightness??.5,i=n.lightness??.5;return t===`light`?i-r:r-i}).map(e=>e.expression);let n=e.toSorted((e,t)=>e.step-t.step).map(e=>e.expression);return t===`light`?n:[...n].toReversed()}function q(e,t){return e.length>=2?e:e.length===1?[e[0],t[1]??`"#000000"`]:[...t]}function Tt(e,t,n,r,i,a){let o=wt(e,n,r),s=wt(t,n,r);if(o&&s)return{light:q(K(o,`light`),i),dark:q(K(s,`dark`),a)};if(o){let e=q(K(o,`light`),i);return{light:e,dark:[...e].toReversed()}}if(s){let e=q(K(s,`dark`),a);return{light:[...e].toReversed(),dark:e}}return{light:[...i],dark:[...a]}}function Et(e){return e.category===`color`&&!e.primitive&&!!e.tokenKey}function Dt(e,t){let n={},r=(e,t)=>{let r=t.cssValue;typeof r!=`string`||r.length===0||Ft(r)||r===`[object Object]`||(n[e]=r)};for(let t of e)!t.tokenKey||Et(t)||r(W(t),t);for(let e of t)!e.tokenKey||!e.primitive||r(W(e),e);return n}function J(e,t,n,r){let i=n[r];if(typeof i!=`string`)return!1;let a=Q(e,t);return a!=null&&a===i}function Ot(e,t,n){if(e.tokenKey&&J(e,t,n,e.tokenKey))return G(e.tokenKey);let r=$(e,t.byPath,t.byCssVar);if(r.tokenKey&&J(e,t,n,r.tokenKey))return G(r.tokenKey);if(r.primitive){let i=W(r);if(J(e,t,n,i))return G(i)}let i=Q(e,t);if(i)return m(i)}function Y(e,t=2){let n=` `.repeat(t),r=Object.entries(e).toSorted(([e],[t])=>e.localeCompare(t,void 0,{numeric:!0}));return r.length===0?`{}`:`{\n${r.map(([e,t])=>{let r=typeof t==`string`&&ft(t)?t:m(t);return`${n}${/^[A-Z_$][\w$]*$/i.test(e)?e:m(e)}: ${r}`}).join(`,
52
52
  `)}\n${` `.repeat(Math.max(t-2,0))}}`}function X(e,t=2){let n=` `.repeat(t),r=Object.entries(e).toSorted(([e],[t])=>e.localeCompare(t,void 0,{numeric:!0}));return r.length===0?`{}`:`{\n${r.map(([e,t])=>`${n}${/^[A-Z_$][\w$]*$/i.test(e)?e:m(e)}: ${t}`).join(`,
53
- `)}\n${` `.repeat(Math.max(t-2,0))}}`}const 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(`,
53
+ `)}\n${` `.repeat(Math.max(t-2,0))}}`}const kt=/^\{([^{}]+)\}$/,At=/\{([^{}]+)\}/g,jt=/^var\((--[^),\s]+)(?:\s*,[^)]*)?\)$/,Mt=/var\((--[^),\s]+)(?:\s*,[^)]*)?\)/g;function Nt(e){return{byPath:new Map(e.map(e=>[e.path,e])),byCssVar:new Map(e.map(e=>[s(e.path),e]))}}function Pt(e){if(typeof e==`string`)return kt.exec(e.trim())?.[1]?.trim()}function Z(e){if(typeof e==`string`)return jt.exec(e.trim())?.[1]}function Ft(e){return Pt(e)!=null||Z(e)!=null}function It(e){return/var\(|\{[^{}]+\}/.test(e)}function Q(e,t){let n=$(e,t.byPath,t.byCssVar);if(n.category!=null&&n.category!==`color`)return;let r=[n.cssValue,n.tamaguiValue];for(let e of r)if(typeof e==`string`&&e.length>0&&!Ft(e))return e}function Lt(e,t){return e.replace(At,(e,n)=>{let r=t.byPath.get(n.trim());return r?Q(r,t)??e:e}).replace(Mt,(e,n)=>{let r=t.byCssVar.get(n);return r?Q(r,t)??e:e})}function $(e,t,n){let r=e,i=new Set;for(let e=0;e<8;e++){if(i.has(r.path))return r;i.add(r.path);let e=Pt(r.value);if(e){let n=t.get(e);if(!n||n.path===r.path)return r;r=n;continue}let a=Z(r.value)??Z(r.cssValue)??Z(r.tamaguiValue);if(a){let e=n.get(a);if(!e||e.path===r.path)return r;r=e;continue}return r}return r}function Rt(e,t){let n=t.toLowerCase(),r=e.split(/(?=[A-Z])/).filter(Boolean).filter(e=>e.toLowerCase()!==n);if(r.length!==0)return k(r)}function zt(e){return lt(e)&&k(e.path.split(`.`).filter(Boolean))||e.tokenKey}function Bt(e){let t=e.toLowerCase();return at(t)||ot(t)}function Vt(e,t,n){let r=zt(t);if(!r)return;let i=t.childTheme?.trim();if(!i||Bt(i)){e.base[r]=n;return}let a=k([i]),o=Rt(r,a);if(!o)return;let s=e.children[a]??{};s[o]=n,e.children[a]=s}function Ht(e,t){let n=typeof e.tamaguiValue==`string`?e.tamaguiValue:e.cssValue;if(typeof n!=`string`||n.length===0)return;let r=Lt(n,t);return r.length===0||It(r)?void 0:m(e.category===`dropShadow`?ht(r):r)}function Ut(e,t){let n=Nt(e),r={base:{},children:{}};for(let i of e){if(Et(i)){let e=Ot(i,n,t);e&&Vt(r,i,e);continue}if(!lt(i))continue;let e=Ht(i,n);if(!e)continue;let a=i.childTheme?.trim();(a&&!Bt(a)||st(i))&&Vt(r,i,e)}return r}function Wt(e){let t=new Set;for(let n of e){for(let e of Object.keys(n.base))t.add(e);for(let e of Object.values(n.children))for(let n of Object.keys(e))t.add(n)}return[...t].toSorted((e,t)=>e.localeCompare(t,void 0,{numeric:!0}))}function Gt(e){return` ${/^[A-Z_$][\w$]*$/i.test(e)?e:m(e)}: string;`}function Kt(e,t){if(e.length!==0)return[`/**`,` * Theme values available on \`useTheme()\` and \`$\` style props for the ${t.specName||`design system`}.`,` *`," * Derived from semantic color tokens mapped by `createThemes`. Nested"," * themes (`light_primary`, `dark_danger`, …) come from each token's"," * `theme` / `$theme` property.",` *`,` * @see https://tamagui.dev/docs/intro/themes`,` */`,`export interface AppTheme {`,...e.map(Gt),`}`,``]}function qt(e){return Object.keys(e).length>0}function Jt(e){return/^[A-Z_$][\w$]*$/i.test(e)?e:m(e)}function Yt(e,t){let n=` `.repeat(t),r=` `.repeat(Math.max(t-2,0));return`[\n${e.map(e=>`${n}${e}`).join(`,
54
54
  `)}\n${r}]`}function Xt(e,t,n){let r=` `.repeat(n),i=` `.repeat(Math.max(n-2,0)),a=n+2;return`{
55
55
  ${r}light: ${Yt(e,a)},
56
56
  ${r}dark: ${Yt(t,a)}
@@ -79,7 +79,7 @@ ${i}}`}function Qt(e,t){let n=Object.entries(e).toSorted(([e],[t])=>e.localeComp
79
79
 
80
80
  return extras ? { ...theme, ...extras } : theme;
81
81
  }`)}return d.push(`const themes = createThemes({\n${f.join(`,
82
- `)}\n});`),{statements:d,hasThemes:!0}}function 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(`,
82
+ `)}\n});`),{statements:d,hasThemes:!0}}function rn(e,t,n={}){let r=e.fonts??{},i=n.useDefaultConfig===!0,a=n.animations??`css`,o=n.includeTypeAugmentation!==!1,s=t.filter(e=>e.category===`color`),c=U(s,`light`),l=U(s,`dark`),u=l.length>0,d=Dt(c,l),f=U(t,`light`),p=u?U(t,`dark`):f,h=Ut(f,d),g=Ut(p,d),{statements:_,hasThemes:v}=nn(h,g,d,c,l),y=Kt(Wt(u?[h,g]:[h]),{specName:e.name}),b=gt(f),x=[];Object.keys(d).length>0&&x.push(` color: ${Y(d,4)}`);for(let e of dt){let t=b[e];t&&Object.keys(t).length>0&&x.push(` ${e}: ${Y(t,4)}`)}let S=[`import { isWeb } from '@tamagui/constants';`];i&&S.push(`import { defaultConfig } from "@tamagui/config/v5";`),a!==!1&&S.push(`import { animations } from "${it[a]}";`),n.importConfig&&S.push(`import userConfig from "${n.importConfig}";`),v&&S.push(`import { createThemes } from "@tamagui/theme-builder";`);let C=[`createTamagui`,`px`];x.length>0&&C.push(`createTokens`);let w=V(t,r);w.length>0&&C.push(`createFont`),S.push(`import { ${C.join(`, `)} } from "@tamagui/core";`);let T=[`/* eslint-disable */`,``,`/*`,` * Generated by @razorwind/tamagui — Do not edit by hand.`,` * `,` * @see https://tamagui.dev/docs/core/configuration`,` * @see https://tamagui.dev/docs/intro/themes`,` * @see https://tamagui.dev/docs/guides/theme-builder`,` */`,``,...S,``];x.length>0&&T.push(`const tokens = createTokens({`,x.join(`,
83
83
  `),`});`,``),_.length>0&&T.push(..._,``);let E=new Map;if(w.length>0)for(let[e,t]of w.entries()){let n=Qe(t.key,e);E.set(t.key,n),T.push($e(t,n),``)}let D=[];if(i&&D.push(` ...defaultConfig`),a!==!1&&D.push(` animations`),x.length>0&&(i?D.push(` tokens: {
84
84
  ...defaultConfig.tokens,
85
85
  ...tokens,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@razorwind/tamagui",
3
- "version": "0.0.57",
3
+ "version": "0.0.59",
4
4
  "type": "module",
5
5
  "description": "Razorwind plugin that creates Tamagui theme tokens from Razorwind design tokens.",
6
6
  "repository": {
@@ -85,7 +85,7 @@
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.59",
88
+ "@razorwind/core": "^0.0.60",
89
89
  "@stryke/type-checks": "^0.6.44",
90
90
  "@stryke/helpers": "^0.10.51",
91
91
  "@stryke/string-format": "^0.17.53"
@@ -108,5 +108,5 @@
108
108
  "typescript": "^6.0.3"
109
109
  },
110
110
  "publishConfig": { "access": "public" },
111
- "gitHead": "6e999219a9c5a2e7393bad76dca80d6a7b92ea08"
111
+ "gitHead": "473392c2d86a28f9ce117cdc5c30182181c14ee8"
112
112
  }