@razorwind/tamagui 0.0.16 → 0.0.18
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 +44 -6
- package/dist/index.d.cts +17 -13
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts +17 -13
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +52 -14
- package/package.json +5 -5
package/dist/index.cjs
CHANGED
|
@@ -1,17 +1,55 @@
|
|
|
1
|
-
Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});let e=require("@razorwind/core/plugin"),t=require("@razorwind/core/utils");function
|
|
2
|
-
`,`\\n`).replaceAll(`\r`,`\\r`)}function
|
|
1
|
+
Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});let e=require("@razorwind/core/plugin"),t=require("@razorwind/core/utils"),n=require("node:path");function r(e){return e.replaceAll(`\\`,`\\\\`).replaceAll(`"`,`\\"`).replaceAll(`
|
|
2
|
+
`,`\\n`).replaceAll(`\r`,`\\r`)}function i(e){return typeof e==`string`?`"${r(e)}"`:typeof e==`number`||typeof e==`boolean`?String(e):e==null?`undefined`:JSON.stringify(e)}function a(e,n){if(typeof e==`number`)return e;if(typeof e==`boolean`)return Number(e);if((0,t.isObject)(e)&&typeof e.value==`number`&&typeof e.unit==`string`){let t=e.unit.toLowerCase();return t===`px`||t===``?e.value:t===`rem`?e.value*16:`${e.value}${e.unit}`}if(typeof e==`string`){let t=/^(-?\d+(?:\.\d+)?)px$/i.exec(e.trim());if(t)return Number(t[1]);let n=/^(-?\d+(?:\.\d+)?)rem$/i.exec(e.trim());if(n)return Number(n[1])*16;let r=Number(e);return!Number.isNaN(r)&&e.trim()!==``?r:e}return String(e)}const o=[{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 s(e){return`$value`in e||`value`in e||`$ref`in e||`ref`in e}function c(e){if(typeof e.$description==`string`)return e.$description;if(typeof e.description==`string`)return e.description}function l(e,t){return typeof e.$type==`string`?e.$type:typeof e.type==`string`?e.type:t}function u(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 d(e,t){for(let{prefix:t,category:n}of o)if(t.test(e))return n;if(t===`color`)return`color`;if(t===`dimension`){if(/space|spacing|gap|inset/i.test(e))return`space`;if(/radius|rounded/i.test(e))return`radius`;if(/z-?index|elevation/i.test(e))return`zIndex`;if(/size|sizing|width|height/i.test(e))return`size`}if(t===`number`&&/z-?index|elevation/i.test(e))return`zIndex`}function f(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.join(``)||e.split(`.`).at(-1)||e;return/^(?:DEFAULT|default)$/i.test(r)?`true`:r}function p(e,n,r,i,o){if(!(0,t.isObject)(e))return;let m=l(e,r);if(s(e)){let r=u(e),s=n.join(`.`),l=d(s,m),p=(0,t.formatTokenValue)(r,m),h=l===`color`||m===`color`?p:a(r,m);o.push({path:s,type:m,value:r,cssValue:p,tamaguiValue:h,category:l,tokenKey:l?f(s):void 0,description:c(e),theme:i});return}for(let[t,r]of Object.entries(e))t.startsWith(`$`)||p(r,[...n,t],m,i,o)}function m(e,n={}){let r=n.includeTypes?new Set(n.includeTypes):void 0,i=[];for(let n of(0,t.resolveTokenSets)(e)){let e=n.id==="default"?void 0:n.id;p(n.tokens,[],void 0,e,i)}return r?i.filter(e=>!e.type||r.has(e.type)):i}function h(e){return`# Installing Tamagui Config
|
|
3
|
+
|
|
4
|
+
Generated by \`@razorwind/tamagui\`.
|
|
5
|
+
|
|
6
|
+
## Files
|
|
7
|
+
|
|
8
|
+
- \`${e.outFile}\` — Tamagui v5 config (\`createTamagui\` + generated tokens/themes)
|
|
9
|
+
|
|
10
|
+
## Setup
|
|
11
|
+
|
|
12
|
+
1. Point Tamagui at the generated config:
|
|
13
|
+
|
|
14
|
+
\`\`\`ts
|
|
15
|
+
import config from "./${e.outFile}";
|
|
16
|
+
|
|
17
|
+
export default config;
|
|
18
|
+
\`\`\`
|
|
19
|
+
|
|
20
|
+
2. Wrap your app with Tamagui (example):
|
|
21
|
+
|
|
22
|
+
\`\`\`tsx
|
|
23
|
+
import { TamaguiProvider } from "tamagui";
|
|
24
|
+
import config from "./${e.outFile}";
|
|
25
|
+
|
|
26
|
+
export function App() {
|
|
27
|
+
return (
|
|
28
|
+
<TamaguiProvider config={config} defaultTheme="light">
|
|
29
|
+
{/* … */}
|
|
30
|
+
</TamaguiProvider>
|
|
31
|
+
);
|
|
32
|
+
}
|
|
33
|
+
\`\`\`
|
|
34
|
+
|
|
35
|
+
3. Use token props such as \`color="$primary"\` or \`padding="$sm"\` per your generated token map.
|
|
36
|
+
|
|
37
|
+
## Regenerate
|
|
38
|
+
|
|
39
|
+
Re-run Razorwind generate when tokens change so \`${e.outFile}\` stays aligned with your design system.
|
|
40
|
+
`}const g=new Set([`default`,`base`,`light`,`theme`]),_=new Set([`gray`,`grey`,`neutral`,`slate`,`zinc`,`stone`,`palette`,`base`]),v={css:`@tamagui/config/v5-css`,rn:`@tamagui/config/v5-rn`,reanimated:`@tamagui/config/v5-reanimated`,motion:`@tamagui/config/v5-motion`};function y(e){let t=new Set(e.map(e=>e.theme).filter(e=>!!e));if(t.size===0)return e;for(let t of g){let n=e.filter(e=>e.theme?.toLowerCase()===t);if(n.length>0)return n}let n=[...t][0];return e.filter(e=>e.theme===n)}function b(e,t){return e.filter(e=>e.theme?.toLowerCase()===t)}function x(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 S(e,t=2){let n=` `.repeat(t),r=Object.entries(e).toSorted(([e],[t])=>e.localeCompare(t));return r.length===0?`{}`:`{\n${r.map(([e,t])=>{let r=/^[A-Z_$][\w$]*$/i.test(e)?e:i(e);return`${n}${r}: ${i(t)}`}).join(`,
|
|
3
41
|
`)}\n${` `.repeat(Math.max(t-2,0))}}`}function C(e){let t={},n=new Map;for(let t of e)!t.tokenKey||typeof t.tamaguiValue!=`string`||n.set(t.tokenKey,t.tamaguiValue);let r=/^([A-Z]+)(\d{1,2})$/i;for(let[e,i]of n){let n=r.exec(e);if(!n)continue;let[,a=``,o=``]=n,s=Number(o);if(s<0||s>12)continue;let c=t[a]??{};c[`${a}${s}`]=i,t[a]=c}return Object.fromEntries(Object.entries(t).filter(([,e])=>Object.keys(e).length>=3))}function w(e,t){let n=[];for(let r=1;r<=12;r++){let i=e[`${t}${r}`];if(!i)return;n.push(i)}return n}function T(e){let t=y(e.filter(e=>e.category===`color`)),n=b(e.filter(e=>e.category===`color`),`dark`),r=C(t),i=C(n),a,o;for(let e of Object.keys(r))if(_.has(e.toLowerCase())&&(a=w(r[e],e),a))break;for(let e of Object.keys(i))if(_.has(e.toLowerCase())&&(o=w(i[e],e),o))break;return{lightPalette:a,darkPalette:o}}function E(e){let t=C(e),n={};for(let r of e)r.category!==`color`||!r.tokenKey||typeof r.tamaguiValue!=`string`||/^[A-Z]+\d{1,2}$/i.test(r.tokenKey)&&t[r.tokenKey.replace(/\d{1,2}$/,``)]||(n[r.tokenKey]=r.tamaguiValue);return n}function D(e,t){let n=new Set([...Object.keys(e),...Object.keys(t)]);if(n.size===0)return;let r=[];for(let i of[...n].toSorted((e,t)=>e.localeCompare(t))){if(_.has(i.toLowerCase()))continue;let n=e[i]??t[i],a=t[i]??e[i];!n||!a||r.push(` ${i}: {
|
|
4
42
|
light: ${S(n,8)},
|
|
5
43
|
dark: ${S(a,8)}
|
|
6
44
|
}`)}if(r.length!==0)return`{\n${r.join(`,
|
|
7
|
-
`)}\n }`}function O(e,t={}){let n=t.useDefaultConfig!==!1,
|
|
45
|
+
`)}\n }`}function O(e,t={}){let n=t.useDefaultConfig!==!1,r=t.animations??`css`,a=t.includeTypeAugmentation!==!1,o=x(y(e)),s=y(e.filter(e=>e.category===`color`)),c=b(e.filter(e=>e.category===`color`),`dark`),l=C(s),u=C(c.length>0?c:s),{lightPalette:d,darkPalette:f}=T(e),p=D(l,u),m=E(s),h=E(c.length>0?c:s),g=Object.keys(m).length>0||Object.keys(h).length>0,_=[];for(let e of[`color`,`space`,`size`,`radius`,`zIndex`]){let t=o[e];t&&Object.keys(t).length>0&&_.push(` ${e}: ${S(t,4)}`)}let w=[];d&&w.push(` lightPalette: ${i(d)}`),f&&w.push(` darkPalette: ${i(f)}`),p&&w.push(` childrenThemes: ${p}`),g&&w.push(` getTheme: ({ scheme }) => {
|
|
8
46
|
const semantic = scheme === "dark"
|
|
9
47
|
? ${S(h,8)}
|
|
10
48
|
: ${S(m,8)};
|
|
11
49
|
return semantic;
|
|
12
|
-
}`);let O=[];n?O.push(`import { createV5Theme, defaultConfig } from "@tamagui/config/v5";`):O.push(`import { createV5Theme } from "@tamagui/config/v5";`),
|
|
50
|
+
}`);let O=[];n?O.push(`import { createV5Theme, defaultConfig } from "@tamagui/config/v5";`):O.push(`import { createV5Theme } from "@tamagui/config/v5";`),r!==!1&&O.push(`import { animations } from "${v[r]}";`);let k=[`createTamagui`];_.length>0&&k.push(`createTokens`),O.push(`import { ${k.join(`, `)} } from "tamagui";`);let A=[`/* eslint-disable */`,`/*`,` * Generated by @razorwind/tamagui — do not edit by hand.`,` * @see https://tamagui.dev/docs/core/config-v5`,` */`,``,...O,``];_.length>0&&A.push(`const tokens = createTokens({`,_.join(`,
|
|
13
51
|
`),`});`,``);let j=w.length>0?`createV5Theme({\n${w.join(`,
|
|
14
|
-
`)}\n})`:`createV5Theme()`;A.push(`const themes = ${j};`,``);let M=[];return n&&M.push(` ...defaultConfig`),
|
|
52
|
+
`)}\n})`:`createV5Theme()`;A.push(`const themes = ${j};`,``);let M=[];return n&&M.push(` ...defaultConfig`),r!==!1&&M.push(` animations`),_.length>0&&(n?M.push(` tokens: {
|
|
15
53
|
...defaultConfig.tokens,
|
|
16
54
|
...tokens,
|
|
17
55
|
color: {
|
|
@@ -36,4 +74,4 @@ Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{val
|
|
|
36
74
|
}
|
|
37
75
|
}`):M.push(` tokens`)),M.push(` themes`),A.push(`export const config = createTamagui({`,M.join(`,
|
|
38
76
|
`),`});`,``,`export type AppConfig = typeof config;`,``),a&&A.push(`declare module "tamagui" {`,` // eslint-disable-next-line @typescript-eslint/no-empty-object-type`,` interface TamaguiCustomConfig extends AppConfig {}`,`}`,``),A.push(`export default config;`,``),A.join(`
|
|
39
|
-
`)}function k(e,
|
|
77
|
+
`)}function k(e,r={}){if(!e.tokens||Object.keys(e.tokens).length===0)return{};let i=m(e.tokens,r);if(i.length===0)return{};let a=r.outFile??`tamagui.config.ts`,o=O(i,r),s=r.installGuide??h({outFile:a}),c=(0,n.join)((0,n.dirname)(a),`INSTALL.md`);return{[a]:(0,t.createDocument)(a,o,{name:`razorwind-tamagui`},`typescript`),[c]:(0,t.createDocument)(c,s,{name:`razorwind-tamagui`},`markdown`)}}var A=(0,e.definePlugin)(e=>({name:`tamagui`,generate:async t=>k(t,e??{})}));exports.collectColorScales=C,exports.default=A,exports.flattenTokens=m,Object.defineProperty(exports,"formatTokenValue",{enumerable:!0,get:function(){return t.formatTokenValue}}),exports.generateTamaguiConfig=k,exports.renderInstallMd=h,exports.renderTamaguiConfig=O,exports.resolveTokenCategory=d,exports.resolveTokenSets=t.resolveTokenSets,Object.defineProperty(exports,"toCssVar",{enumerable:!0,get:function(){return t.toCssVar}}),exports.toTamaguiValue=a,exports.toTokenKey=f;
|
package/dist/index.d.cts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { TokenType } from "@power-plant/dtcg-schema";
|
|
2
2
|
import { Schema, Tokens } from "@razorwind/core/schema";
|
|
3
|
-
import { formatTokenValue, toCssVar } from "@razorwind/core/utils";
|
|
3
|
+
import { formatTokenValue, resolveTokenSets, toCssVar } from "@razorwind/core/utils";
|
|
4
4
|
import { GeneratorFunctionResult } from "@power-plant/core";
|
|
5
5
|
//#region src/types.d.ts
|
|
6
6
|
/**
|
|
@@ -50,6 +50,11 @@ interface TamaguiPluginOptions {
|
|
|
50
50
|
* @defaultValue `true`
|
|
51
51
|
*/
|
|
52
52
|
includeTypeAugmentation?: boolean;
|
|
53
|
+
/**
|
|
54
|
+
* Override body for generated `INSTALL.md`. When omitted, Tamagui wiring
|
|
55
|
+
* steps are generated for the output config file.
|
|
56
|
+
*/
|
|
57
|
+
installGuide?: string;
|
|
53
58
|
}
|
|
54
59
|
/**
|
|
55
60
|
* A flattened design token ready for Tamagui config emission.
|
|
@@ -87,17 +92,6 @@ declare function resolveTokenCategory(path: string, type?: string): TamaguiToken
|
|
|
87
92
|
* `color.blue.1` → `blue1`.
|
|
88
93
|
*/
|
|
89
94
|
declare function toTokenKey(path: string): string;
|
|
90
|
-
interface TokenSet {
|
|
91
|
-
id: string;
|
|
92
|
-
tokens: Tokens;
|
|
93
|
-
}
|
|
94
|
-
/**
|
|
95
|
-
* Split `Schema.tokens` into one or more named token sets.
|
|
96
|
-
*
|
|
97
|
-
* A record whose keys all look like themes (`light`, `dark`, …) is treated as
|
|
98
|
-
* multi-theme input; otherwise the whole document is a single set.
|
|
99
|
-
*/
|
|
100
|
-
declare function resolveTokenSets(tokens: Tokens | Record<string, Tokens>): TokenSet[];
|
|
101
95
|
/**
|
|
102
96
|
* Flatten DTCG token trees into Tamagui config rows.
|
|
103
97
|
*/
|
|
@@ -112,6 +106,16 @@ declare function flattenTokens(tokens: Tokens | Record<string, Tokens>, options?
|
|
|
112
106
|
*/
|
|
113
107
|
declare function toTamaguiValue(value: unknown, type?: string): string | number;
|
|
114
108
|
//#endregion
|
|
109
|
+
//#region src/install.d.ts
|
|
110
|
+
/**
|
|
111
|
+
* Build Tamagui INSTALL.md for generated config file.
|
|
112
|
+
*
|
|
113
|
+
* @see https://tamagui.dev/docs/core/config-v5
|
|
114
|
+
*/
|
|
115
|
+
declare function renderInstallMd(options: {
|
|
116
|
+
outFile: string;
|
|
117
|
+
}): string;
|
|
118
|
+
//#endregion
|
|
115
119
|
//#region src/generate.d.ts
|
|
116
120
|
/**
|
|
117
121
|
* Detect 1–12 (or 0–11) stepped color scales for `createV5Theme` childrenThemes.
|
|
@@ -149,5 +153,5 @@ declare function generateTamaguiConfig(spec: Schema, options?: TamaguiPluginOpti
|
|
|
149
153
|
*/
|
|
150
154
|
declare const _default: (options?: TamaguiPluginOptions | undefined) => import("@razorwind/core/plugin").Plugin;
|
|
151
155
|
//#endregion
|
|
152
|
-
export { type FlatToken, type TamaguiAnimationDriver, type TamaguiPluginOptions, type TamaguiTokenCategory, collectColorScales, _default as default, flattenTokens, formatTokenValue, generateTamaguiConfig, renderTamaguiConfig, resolveTokenCategory, resolveTokenSets, toCssVar, toTamaguiValue, toTokenKey };
|
|
156
|
+
export { type FlatToken, type TamaguiAnimationDriver, type TamaguiPluginOptions, type TamaguiTokenCategory, collectColorScales, _default as default, flattenTokens, formatTokenValue, generateTamaguiConfig, renderInstallMd, renderTamaguiConfig, resolveTokenCategory, resolveTokenSets, toCssVar, toTamaguiValue, toTokenKey };
|
|
153
157
|
//# 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/generate.ts","../src/index.ts"],"mappings":";;;;;;;;;;KAyBY;;;;KAMA;;;;UAMK;;;;;;EAMf;;;;;;;EAQA,aAAa;;;;;;;;EASb;;;;;EAMA,eAAe;;;;;;;EAQf;;;;;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;;;;;;EAMf;;;;;;;EAQA,aAAa;;;;;;;;EASb;;;;;EAMA,eAAe;;;;;;;EAQf;;;;;EAMA;;;;;UAMe;;EAEf;;EAEA,OAAO;;EAEP;;EAEA;;EAEA;;EAEA,WAAW;;EAEX;;EAEA;;EAEA;;;;;;;iBCfc,qBACd,cACA,gBACC;;;;;;;iBAuCa,WAAW;;;;iBAuEX,cACd,QAAQ,SAAS,eAAe,SAChC,UAAS,KAAK,wCACb;;;;;;;;;iBCnJa,eAAe,gBAAgB;;;;;;;;iBCnC/B,gBAAgB;EAAW;;;;;;;;;iBCuG3B,mBACd,aAAa,cACZ,eAAe;;;;;;iBAgKF,oBACd,QAAQ,aACR,UAAS;;;;iBA0LK,sBACd,MAAM,QACN,UAAS,uBACR,wBAAwB,QAAQ"}
|
package/dist/index.d.mts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { formatTokenValue, toCssVar } from "@razorwind/core/utils";
|
|
1
|
+
import { formatTokenValue, resolveTokenSets, toCssVar } from "@razorwind/core/utils";
|
|
2
2
|
import { TokenType } from "@power-plant/dtcg-schema";
|
|
3
3
|
import { Schema, Tokens } from "@razorwind/core/schema";
|
|
4
4
|
import { GeneratorFunctionResult } from "@power-plant/core";
|
|
@@ -50,6 +50,11 @@ interface TamaguiPluginOptions {
|
|
|
50
50
|
* @defaultValue `true`
|
|
51
51
|
*/
|
|
52
52
|
includeTypeAugmentation?: boolean;
|
|
53
|
+
/**
|
|
54
|
+
* Override body for generated `INSTALL.md`. When omitted, Tamagui wiring
|
|
55
|
+
* steps are generated for the output config file.
|
|
56
|
+
*/
|
|
57
|
+
installGuide?: string;
|
|
53
58
|
}
|
|
54
59
|
/**
|
|
55
60
|
* A flattened design token ready for Tamagui config emission.
|
|
@@ -87,17 +92,6 @@ declare function resolveTokenCategory(path: string, type?: string): TamaguiToken
|
|
|
87
92
|
* `color.blue.1` → `blue1`.
|
|
88
93
|
*/
|
|
89
94
|
declare function toTokenKey(path: string): string;
|
|
90
|
-
interface TokenSet {
|
|
91
|
-
id: string;
|
|
92
|
-
tokens: Tokens;
|
|
93
|
-
}
|
|
94
|
-
/**
|
|
95
|
-
* Split `Schema.tokens` into one or more named token sets.
|
|
96
|
-
*
|
|
97
|
-
* A record whose keys all look like themes (`light`, `dark`, …) is treated as
|
|
98
|
-
* multi-theme input; otherwise the whole document is a single set.
|
|
99
|
-
*/
|
|
100
|
-
declare function resolveTokenSets(tokens: Tokens | Record<string, Tokens>): TokenSet[];
|
|
101
95
|
/**
|
|
102
96
|
* Flatten DTCG token trees into Tamagui config rows.
|
|
103
97
|
*/
|
|
@@ -112,6 +106,16 @@ declare function flattenTokens(tokens: Tokens | Record<string, Tokens>, options?
|
|
|
112
106
|
*/
|
|
113
107
|
declare function toTamaguiValue(value: unknown, type?: string): string | number;
|
|
114
108
|
//#endregion
|
|
109
|
+
//#region src/install.d.ts
|
|
110
|
+
/**
|
|
111
|
+
* Build Tamagui INSTALL.md for generated config file.
|
|
112
|
+
*
|
|
113
|
+
* @see https://tamagui.dev/docs/core/config-v5
|
|
114
|
+
*/
|
|
115
|
+
declare function renderInstallMd(options: {
|
|
116
|
+
outFile: string;
|
|
117
|
+
}): string;
|
|
118
|
+
//#endregion
|
|
115
119
|
//#region src/generate.d.ts
|
|
116
120
|
/**
|
|
117
121
|
* Detect 1–12 (or 0–11) stepped color scales for `createV5Theme` childrenThemes.
|
|
@@ -149,5 +153,5 @@ declare function generateTamaguiConfig(spec: Schema, options?: TamaguiPluginOpti
|
|
|
149
153
|
*/
|
|
150
154
|
declare const _default: (options?: TamaguiPluginOptions | undefined) => import("@razorwind/core/plugin").Plugin;
|
|
151
155
|
//#endregion
|
|
152
|
-
export { type FlatToken, type TamaguiAnimationDriver, type TamaguiPluginOptions, type TamaguiTokenCategory, collectColorScales, _default as default, flattenTokens, formatTokenValue, generateTamaguiConfig, renderTamaguiConfig, resolveTokenCategory, resolveTokenSets, toCssVar, toTamaguiValue, toTokenKey };
|
|
156
|
+
export { type FlatToken, type TamaguiAnimationDriver, type TamaguiPluginOptions, type TamaguiTokenCategory, collectColorScales, _default as default, flattenTokens, formatTokenValue, generateTamaguiConfig, renderInstallMd, renderTamaguiConfig, resolveTokenCategory, resolveTokenSets, toCssVar, toTamaguiValue, toTokenKey };
|
|
153
157
|
//# sourceMappingURL=index.d.mts.map
|
package/dist/index.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/types.ts","../src/flatten.ts","../src/format.ts","../src/generate.ts","../src/index.ts"],"mappings":""}
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/types.ts","../src/flatten.ts","../src/format.ts","../src/install.ts","../src/generate.ts","../src/index.ts"],"mappings":""}
|
package/dist/index.mjs
CHANGED
|
@@ -1,17 +1,55 @@
|
|
|
1
|
-
import{definePlugin as e}from"@razorwind/core/plugin";import{createDocument as t,formatTokenValue as n,isObject as r,toCssVar as
|
|
2
|
-
`,`\\n`).replaceAll(`\r`,`\\r`)}function
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
import{definePlugin as e}from"@razorwind/core/plugin";import{createDocument as t,formatTokenValue as n,isObject as r,resolveTokenSets as i,toCssVar as a}from"@razorwind/core/utils";import{dirname as o,join as s}from"node:path";function c(e){return e.replaceAll(`\\`,`\\\\`).replaceAll(`"`,`\\"`).replaceAll(`
|
|
2
|
+
`,`\\n`).replaceAll(`\r`,`\\r`)}function l(e){return typeof e==`string`?`"${c(e)}"`:typeof e==`number`||typeof e==`boolean`?String(e):e==null?`undefined`:JSON.stringify(e)}function u(e,t){if(typeof e==`number`)return e;if(typeof e==`boolean`)return Number(e);if(r(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 d=[{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 f(e){return`$value`in e||`value`in e||`$ref`in e||`ref`in e}function p(e){if(typeof e.$description==`string`)return e.$description;if(typeof e.description==`string`)return e.description}function m(e,t){return typeof e.$type==`string`?e.$type:typeof e.type==`string`?e.type:t}function h(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 g(e,t){for(let{prefix:t,category:n}of d)if(t.test(e))return n;if(t===`color`)return`color`;if(t===`dimension`){if(/space|spacing|gap|inset/i.test(e))return`space`;if(/radius|rounded/i.test(e))return`radius`;if(/z-?index|elevation/i.test(e))return`zIndex`;if(/size|sizing|width|height/i.test(e))return`size`}if(t===`number`&&/z-?index|elevation/i.test(e))return`zIndex`}function _(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.join(``)||e.split(`.`).at(-1)||e;return/^(?:DEFAULT|default)$/i.test(r)?`true`:r}function v(e,t,i,a,o){if(!r(e))return;let s=m(e,i);if(f(e)){let r=h(e),i=t.join(`.`),c=g(i,s),l=n(r,s),d=c===`color`||s===`color`?l:u(r,s);o.push({path:i,type:s,value:r,cssValue:l,tamaguiValue:d,category:c,tokenKey:c?_(i):void 0,description:p(e),theme:a});return}for(let[n,r]of Object.entries(e))n.startsWith(`$`)||v(r,[...t,n],s,a,o)}function y(e,t={}){let n=t.includeTypes?new Set(t.includeTypes):void 0,r=[];for(let t of i(e)){let e=t.id==="default"?void 0:t.id;v(t.tokens,[],void 0,e,r)}return n?r.filter(e=>!e.type||n.has(e.type)):r}function b(e){return`# Installing Tamagui Config
|
|
3
|
+
|
|
4
|
+
Generated by \`@razorwind/tamagui\`.
|
|
5
|
+
|
|
6
|
+
## Files
|
|
7
|
+
|
|
8
|
+
- \`${e.outFile}\` — Tamagui v5 config (\`createTamagui\` + generated tokens/themes)
|
|
9
|
+
|
|
10
|
+
## Setup
|
|
11
|
+
|
|
12
|
+
1. Point Tamagui at the generated config:
|
|
13
|
+
|
|
14
|
+
\`\`\`ts
|
|
15
|
+
import config from "./${e.outFile}";
|
|
16
|
+
|
|
17
|
+
export default config;
|
|
18
|
+
\`\`\`
|
|
19
|
+
|
|
20
|
+
2. Wrap your app with Tamagui (example):
|
|
21
|
+
|
|
22
|
+
\`\`\`tsx
|
|
23
|
+
import { TamaguiProvider } from "tamagui";
|
|
24
|
+
import config from "./${e.outFile}";
|
|
25
|
+
|
|
26
|
+
export function App() {
|
|
27
|
+
return (
|
|
28
|
+
<TamaguiProvider config={config} defaultTheme="light">
|
|
29
|
+
{/* … */}
|
|
30
|
+
</TamaguiProvider>
|
|
31
|
+
);
|
|
32
|
+
}
|
|
33
|
+
\`\`\`
|
|
34
|
+
|
|
35
|
+
3. Use token props such as \`color="$primary"\` or \`padding="$sm"\` per your generated token map.
|
|
36
|
+
|
|
37
|
+
## Regenerate
|
|
38
|
+
|
|
39
|
+
Re-run Razorwind generate when tokens change so \`${e.outFile}\` stays aligned with your design system.
|
|
40
|
+
`}const x=new Set([`default`,`base`,`light`,`theme`]),S=new Set([`gray`,`grey`,`neutral`,`slate`,`zinc`,`stone`,`palette`,`base`]),C={css:`@tamagui/config/v5-css`,rn:`@tamagui/config/v5-rn`,reanimated:`@tamagui/config/v5-reanimated`,motion:`@tamagui/config/v5-motion`};function w(e){let t=new Set(e.map(e=>e.theme).filter(e=>!!e));if(t.size===0)return e;for(let t of x){let n=e.filter(e=>e.theme?.toLowerCase()===t);if(n.length>0)return n}let n=[...t][0];return e.filter(e=>e.theme===n)}function T(e,t){return e.filter(e=>e.theme?.toLowerCase()===t)}function E(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 D(e,t=2){let n=` `.repeat(t),r=Object.entries(e).toSorted(([e],[t])=>e.localeCompare(t));return r.length===0?`{}`:`{\n${r.map(([e,t])=>{let r=/^[A-Z_$][\w$]*$/i.test(e)?e:l(e);return`${n}${r}: ${l(t)}`}).join(`,
|
|
41
|
+
`)}\n${` `.repeat(Math.max(t-2,0))}}`}function O(e){let t={},n=new Map;for(let t of e)!t.tokenKey||typeof t.tamaguiValue!=`string`||n.set(t.tokenKey,t.tamaguiValue);let r=/^([A-Z]+)(\d{1,2})$/i;for(let[e,i]of n){let n=r.exec(e);if(!n)continue;let[,a=``,o=``]=n,s=Number(o);if(s<0||s>12)continue;let c=t[a]??{};c[`${a}${s}`]=i,t[a]=c}return Object.fromEntries(Object.entries(t).filter(([,e])=>Object.keys(e).length>=3))}function k(e,t){let n=[];for(let r=1;r<=12;r++){let i=e[`${t}${r}`];if(!i)return;n.push(i)}return n}function A(e){let t=w(e.filter(e=>e.category===`color`)),n=T(e.filter(e=>e.category===`color`),`dark`),r=O(t),i=O(n),a,o;for(let e of Object.keys(r))if(S.has(e.toLowerCase())&&(a=k(r[e],e),a))break;for(let e of Object.keys(i))if(S.has(e.toLowerCase())&&(o=k(i[e],e),o))break;return{lightPalette:a,darkPalette:o}}function j(e){let t=O(e),n={};for(let r of e)r.category!==`color`||!r.tokenKey||typeof r.tamaguiValue!=`string`||/^[A-Z]+\d{1,2}$/i.test(r.tokenKey)&&t[r.tokenKey.replace(/\d{1,2}$/,``)]||(n[r.tokenKey]=r.tamaguiValue);return n}function M(e,t){let n=new Set([...Object.keys(e),...Object.keys(t)]);if(n.size===0)return;let r=[];for(let i of[...n].toSorted((e,t)=>e.localeCompare(t))){if(S.has(i.toLowerCase()))continue;let n=e[i]??t[i],a=t[i]??e[i];!n||!a||r.push(` ${i}: {
|
|
42
|
+
light: ${D(n,8)},
|
|
43
|
+
dark: ${D(a,8)}
|
|
6
44
|
}`)}if(r.length!==0)return`{\n${r.join(`,
|
|
7
|
-
`)}\n }`}function
|
|
45
|
+
`)}\n }`}function N(e,t={}){let n=t.useDefaultConfig!==!1,r=t.animations??`css`,i=t.includeTypeAugmentation!==!1,a=E(w(e)),o=w(e.filter(e=>e.category===`color`)),s=T(e.filter(e=>e.category===`color`),`dark`),c=O(o),u=O(s.length>0?s:o),{lightPalette:d,darkPalette:f}=A(e),p=M(c,u),m=j(o),h=j(s.length>0?s:o),g=Object.keys(m).length>0||Object.keys(h).length>0,_=[];for(let e of[`color`,`space`,`size`,`radius`,`zIndex`]){let t=a[e];t&&Object.keys(t).length>0&&_.push(` ${e}: ${D(t,4)}`)}let v=[];d&&v.push(` lightPalette: ${l(d)}`),f&&v.push(` darkPalette: ${l(f)}`),p&&v.push(` childrenThemes: ${p}`),g&&v.push(` getTheme: ({ scheme }) => {
|
|
8
46
|
const semantic = scheme === "dark"
|
|
9
|
-
? ${
|
|
10
|
-
: ${
|
|
47
|
+
? ${D(h,8)}
|
|
48
|
+
: ${D(m,8)};
|
|
11
49
|
return semantic;
|
|
12
|
-
}`);let y=[];n?y.push(`import { createV5Theme, defaultConfig } from "@tamagui/config/v5";`):y.push(`import { createV5Theme } from "@tamagui/config/v5";`),r!==!1&&y.push(`import { animations } from "${
|
|
13
|
-
`),`});`,``);let
|
|
14
|
-
`)}\n})`:`createV5Theme()`;
|
|
50
|
+
}`);let y=[];n?y.push(`import { createV5Theme, defaultConfig } from "@tamagui/config/v5";`):y.push(`import { createV5Theme } from "@tamagui/config/v5";`),r!==!1&&y.push(`import { animations } from "${C[r]}";`);let b=[`createTamagui`];_.length>0&&b.push(`createTokens`),y.push(`import { ${b.join(`, `)} } from "tamagui";`);let x=[`/* eslint-disable */`,`/*`,` * Generated by @razorwind/tamagui — do not edit by hand.`,` * @see https://tamagui.dev/docs/core/config-v5`,` */`,``,...y,``];_.length>0&&x.push(`const tokens = createTokens({`,_.join(`,
|
|
51
|
+
`),`});`,``);let S=v.length>0?`createV5Theme({\n${v.join(`,
|
|
52
|
+
`)}\n})`:`createV5Theme()`;x.push(`const themes = ${S};`,``);let k=[];return n&&k.push(` ...defaultConfig`),r!==!1&&k.push(` animations`),_.length>0&&(n?k.push(` tokens: {
|
|
15
53
|
...defaultConfig.tokens,
|
|
16
54
|
...tokens,
|
|
17
55
|
color: {
|
|
@@ -34,7 +72,7 @@ import{definePlugin as e}from"@razorwind/core/plugin";import{createDocument as t
|
|
|
34
72
|
...defaultConfig.tokens.zIndex,
|
|
35
73
|
...tokens.zIndex
|
|
36
74
|
}
|
|
37
|
-
}`):
|
|
38
|
-
`),`});`,``,`export type AppConfig = typeof config;`,``),i&&
|
|
39
|
-
`)}function
|
|
75
|
+
}`):k.push(` tokens`)),k.push(` themes`),x.push(`export const config = createTamagui({`,k.join(`,
|
|
76
|
+
`),`});`,``,`export type AppConfig = typeof config;`,``),i&&x.push(`declare module "tamagui" {`,` // eslint-disable-next-line @typescript-eslint/no-empty-object-type`,` interface TamaguiCustomConfig extends AppConfig {}`,`}`,``),x.push(`export default config;`,``),x.join(`
|
|
77
|
+
`)}function P(e,n={}){if(!e.tokens||Object.keys(e.tokens).length===0)return{};let r=y(e.tokens,n);if(r.length===0)return{};let i=n.outFile??`tamagui.config.ts`,a=N(r,n),c=n.installGuide??b({outFile:i}),l=s(o(i),`INSTALL.md`);return{[i]:t(i,a,{name:`razorwind-tamagui`},`typescript`),[l]:t(l,c,{name:`razorwind-tamagui`},`markdown`)}}var F=e(e=>({name:`tamagui`,generate:async t=>P(t,e??{})}));export{O as collectColorScales,F as default,y as flattenTokens,n as formatTokenValue,P as generateTamaguiConfig,b as renderInstallMd,N as renderTamaguiConfig,g as resolveTokenCategory,i as resolveTokenSets,a as toCssVar,u as toTamaguiValue,_ as toTokenKey};
|
|
40
78
|
//# 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.18",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Razorwind plugin that creates Tamagui theme tokens from Razorwind design tokens.",
|
|
6
6
|
"repository": {
|
|
@@ -83,9 +83,9 @@
|
|
|
83
83
|
"types": "./dist/index.d.cts",
|
|
84
84
|
"typings": "dist/index.d.mts",
|
|
85
85
|
"dependencies": {
|
|
86
|
-
"@power-plant/core": "^0.0.
|
|
86
|
+
"@power-plant/core": "^0.0.81",
|
|
87
87
|
"@power-plant/dtcg-schema": "^0.0.1",
|
|
88
|
-
"@razorwind/core": "0.0.
|
|
88
|
+
"@razorwind/core": "^0.0.30",
|
|
89
89
|
"@stryke/type-checks": "^0.6.35"
|
|
90
90
|
},
|
|
91
91
|
"peerDependencies": {
|
|
@@ -99,10 +99,10 @@
|
|
|
99
99
|
"tamagui": { "optional": true }
|
|
100
100
|
},
|
|
101
101
|
"devDependencies": {
|
|
102
|
-
"@powerlines/plugin-tsdown": "^0.1.
|
|
102
|
+
"@powerlines/plugin-tsdown": "^0.1.590",
|
|
103
103
|
"@types/node": "^25.9.5",
|
|
104
104
|
"typescript": "^6.0.3"
|
|
105
105
|
},
|
|
106
106
|
"publishConfig": { "access": "public" },
|
|
107
|
-
"gitHead": "
|
|
107
|
+
"gitHead": "11a6e827627acf51ef0044e366fd9493f2173ec2"
|
|
108
108
|
}
|