@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 +18 -18
- package/dist/index.d.cts +33 -4
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts +33 -4
- package/dist/index.mjs +13 -13
- package/package.json +2 -2
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
|
|
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
|
|
41
|
-
`)}\n${` `.repeat(Math.max(t-2,0))}}`}function
|
|
42
|
-
light: ${
|
|
43
|
-
dark: ${
|
|
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
|
|
46
|
-
`)}\n }`}function
|
|
47
|
-
`)}function
|
|
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
|
-
? ${
|
|
50
|
-
: ${
|
|
49
|
+
? ${O(_,8)}
|
|
50
|
+
: ${O(g,8)};
|
|
51
51
|
return semantic;
|
|
52
|
-
}`);let
|
|
53
|
-
`),`});`,``);let
|
|
54
|
-
`)}\n})`:`createV5Theme()`;
|
|
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
|
-
}`):
|
|
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
|
-
}`):
|
|
81
|
+
}`):A.push(` fonts: {
|
|
82
82
|
${e.join(`,
|
|
83
83
|
`)}
|
|
84
|
-
}`)}return
|
|
85
|
-
`),`});`,``,`export type AppConfig = typeof config;`,``),o&&
|
|
86
|
-
`)}function
|
|
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
|
-
*
|
|
145
|
+
* Collect color palettes for Tamagui `childrenThemes`.
|
|
133
146
|
*
|
|
134
|
-
*
|
|
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
|
package/dist/index.d.cts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.cts","names":[],"sources":["../src/types.ts","../src/flatten.ts","../src/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
|
|
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
|
-
*
|
|
145
|
+
* Collect color palettes for Tamagui `childrenThemes`.
|
|
133
146
|
*
|
|
134
|
-
*
|
|
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
|
|
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
|
|
41
|
-
`)}\n${` `.repeat(Math.max(t-2,0))}}`}function
|
|
42
|
-
light: ${
|
|
43
|
-
dark: ${
|
|
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
|
|
46
|
-
`)}\n }`}function
|
|
47
|
-
`)}function
|
|
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
|
-
? ${
|
|
50
|
-
: ${
|
|
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 "${
|
|
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(
|
|
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
|
|
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.
|
|
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": "
|
|
107
|
+
"gitHead": "907ed672d3b6b5cf02560ede8553693f3b4073c3"
|
|
108
108
|
}
|