@razorwind/design-md 0.0.6 → 0.0.7
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/extract.cjs +1 -1
- package/dist/extract.d.cts +1 -1
- package/dist/extract.d.mts +1 -1
- package/dist/extract.mjs +1 -1
- package/dist/generate-BAL2uL6H.cjs +9 -0
- package/dist/generate-C71mu06Y.mjs +10 -0
- package/dist/generate-C71mu06Y.mjs.map +1 -0
- package/dist/generate-seJLuo7M.d.cts +134 -0
- package/dist/generate-seJLuo7M.d.cts.map +1 -0
- package/dist/generate-seJLuo7M.d.mts +134 -0
- package/dist/generate-seJLuo7M.d.mts.map +1 -0
- package/dist/generate.cjs +1 -1
- package/dist/generate.d.cts +2 -2
- package/dist/generate.d.mts +2 -2
- package/dist/generate.mjs +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.d.cts +1 -1
- package/dist/index.d.mts +1 -1
- package/dist/index.mjs +1 -1
- package/package.json +5 -5
- package/dist/generate-BPhbyvvs.d.cts +0 -47
- package/dist/generate-BPhbyvvs.d.cts.map +0 -1
- package/dist/generate-BPhbyvvs.d.mts +0 -47
- package/dist/generate-BPhbyvvs.d.mts.map +0 -1
- package/dist/generate-DFy3tlPT.mjs +0 -10
- package/dist/generate-DFy3tlPT.mjs.map +0 -1
- package/dist/generate-DQw2tVYc.cjs +0 -9
package/dist/extract.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});const e=require("./rolldown-runtime-BIInC43l.cjs");let t=require("@power-plant/core"),n=require("@razorwind/core/plugin"),r=require("@razorwind/core/tokens"),i=require("@razorwind/core/utils"),a=require("@stryke/fs/exists"),o=require("@stryke/fs/read-file"),s=require("@stryke/path/join"),c=require("@stryke/type-checks/is-empty-object"),l=require("yaml");var u=e.t({DESIGN_MD_FILE_PATTERN:()=>d,DESIGN_MD_PATH_CANDIDATES:()=>f,default:()=>A,designMdToTokens:()=>T,extractDesignMdFrontMatter:()=>w,isDesignMdFile:()=>D,loadDesignMdTokens:()=>k,parseDesignMdTokens:()=>E,resolveDesignMdPath:()=>O});const d=/(?:^|[/\\])design\.md$/i,f=[`DESIGN.md`,`design.md`,`docs/DESIGN.md`],p=/^\uFEFF?---\r?\n([\s\S]*?)\r?\n---(?:\r?\n|$)/,m=/^\{[^{}]+\}$/,h=new Set([`version`,`name`,`description`]),g=[`fontFamily`,`fontSize`,`fontWeight`,`lineHeight`,`letterSpacing`,`fontFeature`,`fontVariation`],_={backgroundColor:`color`,textColor:`color`,typography:`typography`,rounded:`dimension`,padding:`dimension`,size:`dimension`,height:`dimension`,width:`dimension`};function v(e){return typeof e==`string`&&m.test(e.trim())}function y(e){return typeof e==`number`?`${e}px`:e}function b(e){let t={};for(let n of g){let r=e[n];r!=null&&(t[n]=r)}for(let[n,r]of Object.entries(e))!(n in t)&&r!=null&&(typeof r==`string`||typeof r==`number`)&&(t[n]=r);return t}function x(e,t,n=!1){let r={};for(let[i,a]of Object.entries(e))a!=null&&(r[i]={$type:t,$value:v(a)?a.trim():n?y(a):a});return r}function S(e){let t={};for(let[n,r]of Object.entries(e))v(r)?t[n]={$type:`typography`,$value:r.trim()}:(0,i.isObject)(r)&&(t[n]={$type:`typography`,$value:b(r)});return t}function C(e){let t={};for(let[n,r]of Object.entries(e)){if(!(0,i.isObject)(r))continue;let e={};for(let[t,n]of Object.entries(r)){if(n==null)continue;let r=_[t];e[t]={...r?{$type:r}:{},$value:v(n)?n.trim():r===`typography`&&(0,i.isObject)(n)?b(n):y(n)}}Object.keys(e).length>0&&(t[n]=e)}return t}function w(e){let t=p.exec(e);if(!t?.[1])return;let n;try{n=(0,l.parse)(t[1])}catch(e){let t=e instanceof Error?e.message:String(e);throw Error(`Failed to parse DESIGN.md front matter as YAML: ${t}`)}return(0,i.isObject)(n)?n:void 0}function T(e){let t={};for(let[n,r]of Object.entries(e))if(!(h.has(n)||!(0,i.isObject)(r)))switch(n){case`colors`:t[n]=x(r,`color`);break;case`typography`:t[n]=S(r);break;case`rounded`:case`spacing`:t[n]=x(r,`dimension`,!0);break;case`components`:t[n]=C(r);break;default:t[n]=r;break}return(0,r.normalizeTokenTree)(t)}function E(e){let t=w(e);return t?T(t):{}}function D(e){return d.test(e)}function O(e){for(let t of f){let n=(0,s.joinPaths)(e,t);if((0,a.existsSync)(n))return n}}async function k(e){let t=O(e);if(t)return E(await(0,o.readFile)(t))}var A=(0,n.definePlugin)(
|
|
1
|
+
Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});const e=require("./rolldown-runtime-BIInC43l.cjs");let t=require("@power-plant/core"),n=require("@razorwind/core/plugin"),r=require("@razorwind/core/tokens"),i=require("@razorwind/core/utils"),a=require("@stryke/fs/exists"),o=require("@stryke/fs/read-file"),s=require("@stryke/path/join"),c=require("@stryke/type-checks/is-empty-object"),l=require("yaml");var u=e.t({DESIGN_MD_FILE_PATTERN:()=>d,DESIGN_MD_PATH_CANDIDATES:()=>f,default:()=>A,designMdToTokens:()=>T,extractDesignMdFrontMatter:()=>w,isDesignMdFile:()=>D,loadDesignMdTokens:()=>k,parseDesignMdTokens:()=>E,resolveDesignMdPath:()=>O});const d=/(?:^|[/\\])design\.md$/i,f=[`DESIGN.md`,`design.md`,`docs/DESIGN.md`],p=/^\uFEFF?---\r?\n([\s\S]*?)\r?\n---(?:\r?\n|$)/,m=/^\{[^{}]+\}$/,h=new Set([`version`,`name`,`description`]),g=[`fontFamily`,`fontSize`,`fontWeight`,`lineHeight`,`letterSpacing`,`fontFeature`,`fontVariation`],_={backgroundColor:`color`,textColor:`color`,typography:`typography`,rounded:`dimension`,padding:`dimension`,size:`dimension`,height:`dimension`,width:`dimension`};function v(e){return typeof e==`string`&&m.test(e.trim())}function y(e){return typeof e==`number`?`${e}px`:e}function b(e){let t={};for(let n of g){let r=e[n];r!=null&&(t[n]=r)}for(let[n,r]of Object.entries(e))!(n in t)&&r!=null&&(typeof r==`string`||typeof r==`number`)&&(t[n]=r);return t}function x(e,t,n=!1){let r={};for(let[i,a]of Object.entries(e))a!=null&&(r[i]={$type:t,$value:v(a)?a.trim():n?y(a):a});return r}function S(e){let t={};for(let[n,r]of Object.entries(e))v(r)?t[n]={$type:`typography`,$value:r.trim()}:(0,i.isObject)(r)&&(t[n]={$type:`typography`,$value:b(r)});return t}function C(e){let t={};for(let[n,r]of Object.entries(e)){if(!(0,i.isObject)(r))continue;let e={};for(let[t,n]of Object.entries(r)){if(n==null)continue;let r=_[t];e[t]={...r?{$type:r}:{},$value:v(n)?n.trim():r===`typography`&&(0,i.isObject)(n)?b(n):y(n)}}Object.keys(e).length>0&&(t[n]=e)}return t}function w(e){let t=p.exec(e);if(!t?.[1])return;let n;try{n=(0,l.parse)(t[1])}catch(e){let t=e instanceof Error?e.message:String(e);throw Error(`Failed to parse DESIGN.md front matter as YAML: ${t}`)}return(0,i.isObject)(n)?n:void 0}function T(e){let t={};for(let[n,r]of Object.entries(e))if(!(h.has(n)||!(0,i.isObject)(r)))switch(n){case`colors`:t[n]=x(r,`color`);break;case`typography`:t[n]=S(r);break;case`rounded`:case`spacing`:t[n]=x(r,`dimension`,!0);break;case`components`:t[n]=C(r);break;default:t[n]=r;break}return(0,r.normalizeTokenTree)(t)}function E(e){let t=w(e);return t?T(t):{}}function D(e){return d.test(e)}function O(e){for(let t of f){let n=(0,s.joinPaths)(e,t);if((0,a.existsSync)(n))return n}}async function k(e){let t=O(e);if(t)return E(await(0,o.readFile)(t))}var A=(0,n.definePlugin)(e=>({name:`design-md:extract`,parsers:[{name:`design-md`,pattern:d,parser:e=>E(e)}],extract:async n=>{if(n.tokens&&!(0,c.isEmptyObject)(n.tokens))return n;let r=e?.path;if(!r){let{cwd:e}=(0,t.useExecution)();if(r=O(e),!r)return n}let i=E(await(0,o.readFile)(r));return!i||(0,c.isEmptyObject)(i)?n:{...n,tokens:i}}}));exports.DESIGN_MD_FILE_PATTERN=d,exports.DESIGN_MD_PATH_CANDIDATES=f,exports.default=A,exports.designMdToTokens=T,exports.extractDesignMdFrontMatter=w,exports.isDesignMdFile=D,exports.loadDesignMdTokens=k,exports.parseDesignMdTokens=E,exports.resolveDesignMdPath=O,Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return u}});
|
package/dist/extract.d.cts
CHANGED
|
@@ -75,7 +75,7 @@ declare function loadDesignMdTokens(cwd: string): Promise<DesignTokens | undefin
|
|
|
75
75
|
* });
|
|
76
76
|
* ```
|
|
77
77
|
*/
|
|
78
|
-
declare const _default: (options
|
|
78
|
+
declare const _default: (options?: any) => import("@razorwind/core/plugin").Plugin;
|
|
79
79
|
//#endregion
|
|
80
80
|
export { DESIGN_MD_FILE_PATTERN, DESIGN_MD_PATH_CANDIDATES, _default as default, designMdToTokens, extractDesignMdFrontMatter, isDesignMdFile, loadDesignMdTokens, parseDesignMdTokens, resolveDesignMdPath, extract_d_exports as t };
|
|
81
81
|
//# sourceMappingURL=extract.d.cts.map
|
package/dist/extract.d.mts
CHANGED
|
@@ -75,7 +75,7 @@ declare function loadDesignMdTokens(cwd: string): Promise<DesignTokens | undefin
|
|
|
75
75
|
* });
|
|
76
76
|
* ```
|
|
77
77
|
*/
|
|
78
|
-
declare const _default: (options
|
|
78
|
+
declare const _default: (options?: any) => import("@razorwind/core/plugin").Plugin;
|
|
79
79
|
//#endregion
|
|
80
80
|
export { DESIGN_MD_FILE_PATTERN, DESIGN_MD_PATH_CANDIDATES, _default as default, designMdToTokens, extractDesignMdFrontMatter, isDesignMdFile, loadDesignMdTokens, parseDesignMdTokens, resolveDesignMdPath, extract_d_exports as t };
|
|
81
81
|
//# sourceMappingURL=extract.d.mts.map
|
package/dist/extract.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{t as e}from"./rolldown-runtime-DK3Fl9T5.mjs";import{useExecution as t}from"@power-plant/core";import{definePlugin as n}from"@razorwind/core/plugin";import{normalizeTokenTree as r}from"@razorwind/core/tokens";import{isObject as i}from"@razorwind/core/utils";import{existsSync as a}from"@stryke/fs/exists";import{readFile as o}from"@stryke/fs/read-file";import{joinPaths as s}from"@stryke/path/join";import{isEmptyObject as c}from"@stryke/type-checks/is-empty-object";import{parse as l}from"yaml";var u=e({DESIGN_MD_FILE_PATTERN:()=>d,DESIGN_MD_PATH_CANDIDATES:()=>f,default:()=>A,designMdToTokens:()=>T,extractDesignMdFrontMatter:()=>w,isDesignMdFile:()=>D,loadDesignMdTokens:()=>k,parseDesignMdTokens:()=>E,resolveDesignMdPath:()=>O});const d=/(?:^|[/\\])design\.md$/i,f=[`DESIGN.md`,`design.md`,`docs/DESIGN.md`],p=/^\uFEFF?---\r?\n([\s\S]*?)\r?\n---(?:\r?\n|$)/,m=/^\{[^{}]+\}$/,h=new Set([`version`,`name`,`description`]),g=[`fontFamily`,`fontSize`,`fontWeight`,`lineHeight`,`letterSpacing`,`fontFeature`,`fontVariation`],_={backgroundColor:`color`,textColor:`color`,typography:`typography`,rounded:`dimension`,padding:`dimension`,size:`dimension`,height:`dimension`,width:`dimension`};function v(e){return typeof e==`string`&&m.test(e.trim())}function y(e){return typeof e==`number`?`${e}px`:e}function b(e){let t={};for(let n of g){let r=e[n];r!=null&&(t[n]=r)}for(let[n,r]of Object.entries(e))!(n in t)&&r!=null&&(typeof r==`string`||typeof r==`number`)&&(t[n]=r);return t}function x(e,t,n=!1){let r={};for(let[i,a]of Object.entries(e))a!=null&&(r[i]={$type:t,$value:v(a)?a.trim():n?y(a):a});return r}function S(e){let t={};for(let[n,r]of Object.entries(e))v(r)?t[n]={$type:`typography`,$value:r.trim()}:i(r)&&(t[n]={$type:`typography`,$value:b(r)});return t}function C(e){let t={};for(let[n,r]of Object.entries(e)){if(!i(r))continue;let e={};for(let[t,n]of Object.entries(r)){if(n==null)continue;let r=_[t];e[t]={...r?{$type:r}:{},$value:v(n)?n.trim():r===`typography`&&i(n)?b(n):y(n)}}Object.keys(e).length>0&&(t[n]=e)}return t}function w(e){let t=p.exec(e);if(!t?.[1])return;let n;try{n=l(t[1])}catch(e){let t=e instanceof Error?e.message:String(e);throw Error(`Failed to parse DESIGN.md front matter as YAML: ${t}`)}return i(n)?n:void 0}function T(e){let t={};for(let[n,r]of Object.entries(e))if(!(h.has(n)||!i(r)))switch(n){case`colors`:t[n]=x(r,`color`);break;case`typography`:t[n]=S(r);break;case`rounded`:case`spacing`:t[n]=x(r,`dimension`,!0);break;case`components`:t[n]=C(r);break;default:t[n]=r;break}return r(t)}function E(e){let t=w(e);return t?T(t):{}}function D(e){return d.test(e)}function O(e){for(let t of f){let n=s(e,t);if(a(n))return n}}async function k(e){let t=O(e);if(t)return E(await o(t))}var A=n(
|
|
1
|
+
import{t as e}from"./rolldown-runtime-DK3Fl9T5.mjs";import{useExecution as t}from"@power-plant/core";import{definePlugin as n}from"@razorwind/core/plugin";import{normalizeTokenTree as r}from"@razorwind/core/tokens";import{isObject as i}from"@razorwind/core/utils";import{existsSync as a}from"@stryke/fs/exists";import{readFile as o}from"@stryke/fs/read-file";import{joinPaths as s}from"@stryke/path/join";import{isEmptyObject as c}from"@stryke/type-checks/is-empty-object";import{parse as l}from"yaml";var u=e({DESIGN_MD_FILE_PATTERN:()=>d,DESIGN_MD_PATH_CANDIDATES:()=>f,default:()=>A,designMdToTokens:()=>T,extractDesignMdFrontMatter:()=>w,isDesignMdFile:()=>D,loadDesignMdTokens:()=>k,parseDesignMdTokens:()=>E,resolveDesignMdPath:()=>O});const d=/(?:^|[/\\])design\.md$/i,f=[`DESIGN.md`,`design.md`,`docs/DESIGN.md`],p=/^\uFEFF?---\r?\n([\s\S]*?)\r?\n---(?:\r?\n|$)/,m=/^\{[^{}]+\}$/,h=new Set([`version`,`name`,`description`]),g=[`fontFamily`,`fontSize`,`fontWeight`,`lineHeight`,`letterSpacing`,`fontFeature`,`fontVariation`],_={backgroundColor:`color`,textColor:`color`,typography:`typography`,rounded:`dimension`,padding:`dimension`,size:`dimension`,height:`dimension`,width:`dimension`};function v(e){return typeof e==`string`&&m.test(e.trim())}function y(e){return typeof e==`number`?`${e}px`:e}function b(e){let t={};for(let n of g){let r=e[n];r!=null&&(t[n]=r)}for(let[n,r]of Object.entries(e))!(n in t)&&r!=null&&(typeof r==`string`||typeof r==`number`)&&(t[n]=r);return t}function x(e,t,n=!1){let r={};for(let[i,a]of Object.entries(e))a!=null&&(r[i]={$type:t,$value:v(a)?a.trim():n?y(a):a});return r}function S(e){let t={};for(let[n,r]of Object.entries(e))v(r)?t[n]={$type:`typography`,$value:r.trim()}:i(r)&&(t[n]={$type:`typography`,$value:b(r)});return t}function C(e){let t={};for(let[n,r]of Object.entries(e)){if(!i(r))continue;let e={};for(let[t,n]of Object.entries(r)){if(n==null)continue;let r=_[t];e[t]={...r?{$type:r}:{},$value:v(n)?n.trim():r===`typography`&&i(n)?b(n):y(n)}}Object.keys(e).length>0&&(t[n]=e)}return t}function w(e){let t=p.exec(e);if(!t?.[1])return;let n;try{n=l(t[1])}catch(e){let t=e instanceof Error?e.message:String(e);throw Error(`Failed to parse DESIGN.md front matter as YAML: ${t}`)}return i(n)?n:void 0}function T(e){let t={};for(let[n,r]of Object.entries(e))if(!(h.has(n)||!i(r)))switch(n){case`colors`:t[n]=x(r,`color`);break;case`typography`:t[n]=S(r);break;case`rounded`:case`spacing`:t[n]=x(r,`dimension`,!0);break;case`components`:t[n]=C(r);break;default:t[n]=r;break}return r(t)}function E(e){let t=w(e);return t?T(t):{}}function D(e){return d.test(e)}function O(e){for(let t of f){let n=s(e,t);if(a(n))return n}}async function k(e){let t=O(e);if(t)return E(await o(t))}var A=n(e=>({name:`design-md:extract`,parsers:[{name:`design-md`,pattern:d,parser:e=>E(e)}],extract:async n=>{if(n.tokens&&!c(n.tokens))return n;let r=e?.path;if(!r){let{cwd:e}=t();if(r=O(e),!r)return n}let i=E(await o(r));return!i||c(i)?n:{...n,tokens:i}}}));export{d as DESIGN_MD_FILE_PATTERN,f as DESIGN_MD_PATH_CANDIDATES,A as default,T as designMdToTokens,w as extractDesignMdFrontMatter,D as isDesignMdFile,k as loadDesignMdTokens,E as parseDesignMdTokens,O as resolveDesignMdPath,u as t};
|
|
2
2
|
//# sourceMappingURL=extract.mjs.map
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
const e=require("./rolldown-runtime-BIInC43l.cjs");let t=require("@razorwind/core/plugin"),n=require("@razorwind/core/utils");function r(e,t){let n=e.split(`.`).filter(Boolean);for(;n.length>1&&t.includes(n[0].toLowerCase());)n.shift();return n.join(`-`).replaceAll(/[^\w-]+/g,`-`).toLowerCase()}function i(e){if(typeof e==`number`||typeof e==`boolean`)return String(e);let t=String(e);return/^[a-z][\w-]*$/i.test(t)?t:JSON.stringify(t)}function a(e){return e.split(/[-_.]+/).filter(Boolean).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(` `)}const o=/^(?:light|dark|dim|high-contrast|hc|default|base|theme)(?:[._-].+)?$/i;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,r,i,a){if(!(0,n.isObject)(e))return;let o=l(e,r);if(s(e)){let r=u(e);a.push({path:t.join(`.`),type:o,value:r,cssValue:(0,n.formatTokenValue)(r,o),description:c(e),theme:i});return}for(let[n,r]of Object.entries(e))n.startsWith(`$`)||d(r,[...t,n],o,i,a)}function f(e){if(!(0,n.isObject)(e))return[];let t=Object.keys(e).filter(e=>!e.startsWith(`$`));if(t.length>0&&t.every(e=>o.test(e))){let n=e;return t.map(e=>({id:e,tokens:n[e]}))}return[{id:`default`,tokens:e}]}function p(e,t){let n=t?new Set(t):void 0,r=[];for(let t of f(e)){let e=t.id==="default"?void 0:t.id;d(t.tokens,[],void 0,e,r)}return n?r.filter(e=>!e.type||n.has(e.type)):r}var m=e.t({default:()=>z,extractDesignMd:()=>j,generateDesignMd:()=>R,renderDesignMd:()=>L,selectPrimaryTheme:()=>w});const h=new Set([`backgroundColor`,`textColor`,`typography`,`rounded`,`padding`,`size`,`height`,`width`]),g={background:`backgroundColor`,backgroundcolor:`backgroundColor`,bg:`backgroundColor`,fill:`backgroundColor`,color:`textColor`,foreground:`textColor`,text:`textColor`,textcolor:`textColor`,font:`typography`,radius:`rounded`,borderradius:`rounded`,corner:`rounded`},_=[`color`,`colors`,`palette`],v=[`typography`,`type`,`text`,`font`,`fonts`],y=/(?:^|\.)(?:radius|radii|rounded|corner)(?:\.|$)/i,b=/(?:^|\.)(?:spacing|space|gap)(?:\.|$)/i,x=/^components?$/i,S=/^\{([^}]+)\}$/,C=[`fontFamily`,`fontSize`,`fontWeight`,`lineHeight`,`letterSpacing`];function w(e){let t=[...new Set(e.map(e=>e.theme))],n=t.find(e=>e===void 0)??t.find(e=>/^light/i.test(e??``))??t.find(e=>/^(?:default|base)/i.test(e??``))??t[0];return e.filter(e=>e.theme===n)}function T(e){if(typeof e==`string`)return S.exec(e.trim())?.[1]}function E(e,t){let n=e;for(let e=0;e<8;e++){let e=T(n.value);if(!e)return n;let r=t.get(e);if(!r)return n;n=r}return n}function D(e){return e.split(/[-_.\s]+/).filter(Boolean).map((e,t)=>t===0?e.toLowerCase():e.charAt(0).toUpperCase()+e.slice(1).toLowerCase()).join(``)}function O(e){let t=D(e);return h.has(t)?t:g[t.toLowerCase()]}function k(e,t){let r={};if(!(0,n.isObject)(e))return r;for(let i of C){let a=e[i];if(a==null)continue;let o=T(a),s=o?t.get(o):void 0,c=s?E(s,t).cssValue:void 0;if(typeof a==`number`){i===`fontWeight`||i===`lineHeight`?r[i]=a:r[i]=(0,n.formatTokenValue)(a);continue}r[i]=c??(0,n.formatTokenValue)(a)}return r}function A(e,t){return{...e,...t.name!==void 0&&{name:t.name},...t.description!==void 0&&{description:t.description},...t.version!==void 0&&{version:t.version}}}function j(e){let t=w(p(e.tokens)),n=new Map(t.map(e=>[e.path,e])),i={colors:{},colorDescriptions:{},typography:{},rounded:{},spacing:{},components:{}},a=new Map,o=[];for(let e of t){let t=e.path.split(`.`);if(t[0]&&x.test(t[0])){o.push(e);continue}if(e.type===`color`){let t=r(e.path,_),o=E(e,n);i.colors[t]=o.cssValue,e.description&&(i.colorDescriptions[t]=e.description),a.set(e.path,`colors.${t}`);continue}if(e.type===`typography`){let t=r(e.path,v);i.typography[t]=k(e.value,n),a.set(e.path,`typography.${t}`);continue}if(e.type===`fontFamily`){let t=r(e.path,v);i.typography[t]??={},i.typography[t].fontFamily=e.cssValue,a.set(e.path,`typography.${t}`);continue}let s=e.type===`dimension`||e.type===`number`||typeof e.value==`number`;if(s&&y.test(e.path)){let r=t.at(-1);i.rounded[r]=E(e,n).cssValue,a.set(e.path,`rounded.${r}`);continue}if(s&&b.test(e.path)){let r=t.at(-1);i.spacing[r]=E(e,n).cssValue,a.set(e.path,`spacing.${r}`)}}for(let e of o){let t=e.path.split(`.`).slice(1);if(t.length<2)continue;let r=O(t.at(-1));if(!r)continue;let o=t.slice(0,-1).join(`-`).replaceAll(/[^\w-]+/g,`-`).toLowerCase(),s=T(e.value),c=s?a.get(s):void 0,l=c?`{${c}}`:E(e,n).cssValue;i.components[o]??={},i.components[o][r]=l}return i}function M(e,t,n){let r=Object.entries(t);if(r.length!==0){n.push(`${e}:`);for(let[e,t]of r){if(typeof t==`object`&&t){n.push(` ${e}:`);for(let[e,r]of Object.entries(t))n.push(` ${e}: ${i(r)}`);continue}n.push(` ${e}: ${i(t)}`)}}}function N(e){let t=[`---`];return e.version&&t.push(`version: ${i(e.version)}`),t.push(`name: ${i(e.name)}`),e.description&&t.push(`description: ${i(e.description)}`),M(`colors`,e.colors,t),M(`typography`,e.typography,t),M(`rounded`,e.rounded,t),M(`spacing`,e.spacing,t),M(`components`,e.components,t),t.push(`---`),`${t.join(`
|
|
2
|
+
`)}\n`}function P(e,...t){return`## ${e}\n\n${t.filter(Boolean).join(`
|
|
3
|
+
`)}\n`}function F(e){let t=[[Object.keys(e.colors).length,`color`],[Object.keys(e.typography).length,`typography`],[Object.keys(e.rounded).length,`shape`],[Object.keys(e.spacing).length,`spacing`],[Object.keys(e.components).length,`component`]].filter(([e])=>e>0).map(([e,t])=>`${e} ${t} token${e===1?``:`s`}`).join(`, `);return`${e.name} design tokens${t?` — ${t}`:``}. The YAML front matter above is the normative source; the prose below explains how to apply it.`}function I(e,t={}){let n=[P(`Overview`,t.overview??F(e))],r=Object.entries(e.colors);r.length>0&&n.push(P(`Colors`,r.map(([t,n])=>{let r=e.colorDescriptions[t];return`- **${a(t)} (${n}):**${r?` ${r}`:``}`}).join(`
|
|
4
|
+
`)));let i=Object.entries(e.typography);i.length>0&&n.push(P(`Typography`,i.map(([e,t])=>`- **${e}:** ${Object.entries(t).map(([e,t])=>`${e}: ${t}`).join(`, `)}`).join(`
|
|
5
|
+
`)));let o=Object.entries(e.spacing);o.length>0&&n.push(P(`Layout`,`Spacing scale:`,``,o.map(([e,t])=>`- **${e}:** ${t}`).join(`
|
|
6
|
+
`)));let s=Object.entries(e.rounded);s.length>0&&n.push(P(`Shapes`,`Corner radius scale:`,``,s.map(([e,t])=>`- **${e}:** ${t}`).join(`
|
|
7
|
+
`)));let c=Object.entries(e.components);return c.length>0&&n.push(P(`Components`,c.map(([e,t])=>`- **${e}:** ${Object.entries(t).map(([e,t])=>`${e}: \`${t}\``).join(`, `)}`).join(`
|
|
8
|
+
`))),n.join(`
|
|
9
|
+
`)}function L(e,t={}){return`${N(e)}\n${I(e,t)}`}function R(e,t={}){let n=A(j(e),t);return{[t.outputPath??`DESIGN.md`]:{path:t.outputPath??`DESIGN.md`,language:`markdown`,chunks:[{content:L(n,t),meta:{name:`razorwind-design-md`}}]}}}var z=(0,t.definePlugin)(e=>({name:`design-md:generate`,generate:async t=>R(t,e??{})}));Object.defineProperty(exports,"a",{enumerable:!0,get:function(){return L}}),Object.defineProperty(exports,"i",{enumerable:!0,get:function(){return m}}),Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return R}}),Object.defineProperty(exports,"o",{enumerable:!0,get:function(){return w}}),Object.defineProperty(exports,"r",{enumerable:!0,get:function(){return z}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return j}});
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import{t as e}from"./rolldown-runtime-DK3Fl9T5.mjs";import{definePlugin as t}from"@razorwind/core/plugin";import{formatTokenValue as n,isObject as r}from"@razorwind/core/utils";function i(e,t){let n=e.split(`.`).filter(Boolean);for(;n.length>1&&t.includes(n[0].toLowerCase());)n.shift();return n.join(`-`).replaceAll(/[^\w-]+/g,`-`).toLowerCase()}function a(e){if(typeof e==`number`||typeof e==`boolean`)return String(e);let t=String(e);return/^[a-z][\w-]*$/i.test(t)?t:JSON.stringify(t)}function o(e){return e.split(/[-_.]+/).filter(Boolean).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(` `)}const s=/^(?:light|dark|dim|high-contrast|hc|default|base|theme)(?:[._-].+)?$/i;function c(e){return`$value`in e||`value`in e||`$ref`in e||`ref`in e}function l(e){if(typeof e.$description==`string`)return e.$description;if(typeof e.description==`string`)return e.description}function u(e,t){return typeof e.$type==`string`?e.$type:typeof e.type==`string`?e.type:t}function d(e){if(`$value`in e)return e.$value;if(`value`in e)return e.value;if(typeof e.$ref==`string`)return e.$ref;if(typeof e.ref==`string`)return e.ref}function f(e,t,i,a,o){if(!r(e))return;let s=u(e,i);if(c(e)){let r=d(e);o.push({path:t.join(`.`),type:s,value:r,cssValue:n(r,s),description:l(e),theme:a});return}for(let[n,r]of Object.entries(e))n.startsWith(`$`)||f(r,[...t,n],s,a,o)}function p(e){if(!r(e))return[];let t=Object.keys(e).filter(e=>!e.startsWith(`$`));if(t.length>0&&t.every(e=>s.test(e))){let n=e;return t.map(e=>({id:e,tokens:n[e]}))}return[{id:`default`,tokens:e}]}function m(e,t){let n=t?new Set(t):void 0,r=[];for(let t of p(e)){let e=t.id==="default"?void 0:t.id;f(t.tokens,[],void 0,e,r)}return n?r.filter(e=>!e.type||n.has(e.type)):r}var h=e({default:()=>B,extractDesignMd:()=>M,generateDesignMd:()=>z,renderDesignMd:()=>R,selectPrimaryTheme:()=>T});const g=new Set([`backgroundColor`,`textColor`,`typography`,`rounded`,`padding`,`size`,`height`,`width`]),_={background:`backgroundColor`,backgroundcolor:`backgroundColor`,bg:`backgroundColor`,fill:`backgroundColor`,color:`textColor`,foreground:`textColor`,text:`textColor`,textcolor:`textColor`,font:`typography`,radius:`rounded`,borderradius:`rounded`,corner:`rounded`},v=[`color`,`colors`,`palette`],y=[`typography`,`type`,`text`,`font`,`fonts`],b=/(?:^|\.)(?:radius|radii|rounded|corner)(?:\.|$)/i,x=/(?:^|\.)(?:spacing|space|gap)(?:\.|$)/i,S=/^components?$/i,C=/^\{([^}]+)\}$/,w=[`fontFamily`,`fontSize`,`fontWeight`,`lineHeight`,`letterSpacing`];function T(e){let t=[...new Set(e.map(e=>e.theme))],n=t.find(e=>e===void 0)??t.find(e=>/^light/i.test(e??``))??t.find(e=>/^(?:default|base)/i.test(e??``))??t[0];return e.filter(e=>e.theme===n)}function E(e){if(typeof e==`string`)return C.exec(e.trim())?.[1]}function D(e,t){let n=e;for(let e=0;e<8;e++){let e=E(n.value);if(!e)return n;let r=t.get(e);if(!r)return n;n=r}return n}function O(e){return e.split(/[-_.\s]+/).filter(Boolean).map((e,t)=>t===0?e.toLowerCase():e.charAt(0).toUpperCase()+e.slice(1).toLowerCase()).join(``)}function k(e){let t=O(e);return g.has(t)?t:_[t.toLowerCase()]}function A(e,t){let i={};if(!r(e))return i;for(let r of w){let a=e[r];if(a==null)continue;let o=E(a),s=o?t.get(o):void 0,c=s?D(s,t).cssValue:void 0;if(typeof a==`number`){r===`fontWeight`||r===`lineHeight`?i[r]=a:i[r]=n(a);continue}i[r]=c??n(a)}return i}function j(e,t){return{...e,...t.name!==void 0&&{name:t.name},...t.description!==void 0&&{description:t.description},...t.version!==void 0&&{version:t.version}}}function M(e){let t=T(m(e.tokens)),n=new Map(t.map(e=>[e.path,e])),r={colors:{},colorDescriptions:{},typography:{},rounded:{},spacing:{},components:{}},a=new Map,o=[];for(let e of t){let t=e.path.split(`.`);if(t[0]&&S.test(t[0])){o.push(e);continue}if(e.type===`color`){let t=i(e.path,v),o=D(e,n);r.colors[t]=o.cssValue,e.description&&(r.colorDescriptions[t]=e.description),a.set(e.path,`colors.${t}`);continue}if(e.type===`typography`){let t=i(e.path,y);r.typography[t]=A(e.value,n),a.set(e.path,`typography.${t}`);continue}if(e.type===`fontFamily`){let t=i(e.path,y);r.typography[t]??={},r.typography[t].fontFamily=e.cssValue,a.set(e.path,`typography.${t}`);continue}let s=e.type===`dimension`||e.type===`number`||typeof e.value==`number`;if(s&&b.test(e.path)){let i=t.at(-1);r.rounded[i]=D(e,n).cssValue,a.set(e.path,`rounded.${i}`);continue}if(s&&x.test(e.path)){let i=t.at(-1);r.spacing[i]=D(e,n).cssValue,a.set(e.path,`spacing.${i}`)}}for(let e of o){let t=e.path.split(`.`).slice(1);if(t.length<2)continue;let i=k(t.at(-1));if(!i)continue;let o=t.slice(0,-1).join(`-`).replaceAll(/[^\w-]+/g,`-`).toLowerCase(),s=E(e.value),c=s?a.get(s):void 0,l=c?`{${c}}`:D(e,n).cssValue;r.components[o]??={},r.components[o][i]=l}return r}function N(e,t,n){let r=Object.entries(t);if(r.length!==0){n.push(`${e}:`);for(let[e,t]of r){if(typeof t==`object`&&t){n.push(` ${e}:`);for(let[e,r]of Object.entries(t))n.push(` ${e}: ${a(r)}`);continue}n.push(` ${e}: ${a(t)}`)}}}function P(e){let t=[`---`];return e.version&&t.push(`version: ${a(e.version)}`),t.push(`name: ${a(e.name)}`),e.description&&t.push(`description: ${a(e.description)}`),N(`colors`,e.colors,t),N(`typography`,e.typography,t),N(`rounded`,e.rounded,t),N(`spacing`,e.spacing,t),N(`components`,e.components,t),t.push(`---`),`${t.join(`
|
|
2
|
+
`)}\n`}function F(e,...t){return`## ${e}\n\n${t.filter(Boolean).join(`
|
|
3
|
+
`)}\n`}function I(e){let t=[[Object.keys(e.colors).length,`color`],[Object.keys(e.typography).length,`typography`],[Object.keys(e.rounded).length,`shape`],[Object.keys(e.spacing).length,`spacing`],[Object.keys(e.components).length,`component`]].filter(([e])=>e>0).map(([e,t])=>`${e} ${t} token${e===1?``:`s`}`).join(`, `);return`${e.name} design tokens${t?` — ${t}`:``}. The YAML front matter above is the normative source; the prose below explains how to apply it.`}function L(e,t={}){let n=[F(`Overview`,t.overview??I(e))],r=Object.entries(e.colors);r.length>0&&n.push(F(`Colors`,r.map(([t,n])=>{let r=e.colorDescriptions[t];return`- **${o(t)} (${n}):**${r?` ${r}`:``}`}).join(`
|
|
4
|
+
`)));let i=Object.entries(e.typography);i.length>0&&n.push(F(`Typography`,i.map(([e,t])=>`- **${e}:** ${Object.entries(t).map(([e,t])=>`${e}: ${t}`).join(`, `)}`).join(`
|
|
5
|
+
`)));let a=Object.entries(e.spacing);a.length>0&&n.push(F(`Layout`,`Spacing scale:`,``,a.map(([e,t])=>`- **${e}:** ${t}`).join(`
|
|
6
|
+
`)));let s=Object.entries(e.rounded);s.length>0&&n.push(F(`Shapes`,`Corner radius scale:`,``,s.map(([e,t])=>`- **${e}:** ${t}`).join(`
|
|
7
|
+
`)));let c=Object.entries(e.components);return c.length>0&&n.push(F(`Components`,c.map(([e,t])=>`- **${e}:** ${Object.entries(t).map(([e,t])=>`${e}: \`${t}\``).join(`, `)}`).join(`
|
|
8
|
+
`))),n.join(`
|
|
9
|
+
`)}function R(e,t={}){return`${P(e)}\n${L(e,t)}`}function z(e,t={}){let n=j(M(e),t);return{[t.outputPath??`DESIGN.md`]:{path:t.outputPath??`DESIGN.md`,language:`markdown`,chunks:[{content:R(n,t),meta:{name:`razorwind-design-md`}}]}}}var B=t(e=>({name:`design-md:generate`,generate:async t=>z(t,e??{})}));export{R as a,h as i,z as n,T as o,B as r,M as t};
|
|
10
|
+
//# sourceMappingURL=generate-C71mu06Y.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-C71mu06Y.mjs","names":[],"sources":[],"mappings":""}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import { GeneratorFunctionResult } from "@power-plant/core";
|
|
2
|
+
import { Schema } from "@razorwind/core/schema";
|
|
3
|
+
import { TokenType } from "@power-plant/dtcg-schema";
|
|
4
|
+
//#region src/types.d.ts
|
|
5
|
+
interface DesignMdGeneratePluginOptions {
|
|
6
|
+
/**
|
|
7
|
+
* Output file path (relative to the execution cwd).
|
|
8
|
+
*
|
|
9
|
+
* @default "DESIGN.md"
|
|
10
|
+
*/
|
|
11
|
+
outputPath?: string;
|
|
12
|
+
/**
|
|
13
|
+
* Design system name written to the YAML front matter.
|
|
14
|
+
*
|
|
15
|
+
* @defaultValue `"Razorwind Design System"`
|
|
16
|
+
*/
|
|
17
|
+
name?: string;
|
|
18
|
+
/**
|
|
19
|
+
* Short design system description written to the YAML front matter.
|
|
20
|
+
*/
|
|
21
|
+
description?: string;
|
|
22
|
+
/**
|
|
23
|
+
* DESIGN.md spec version written to the YAML front matter.
|
|
24
|
+
*
|
|
25
|
+
* @defaultValue `"alpha"`
|
|
26
|
+
*/
|
|
27
|
+
version?: string;
|
|
28
|
+
/**
|
|
29
|
+
* Prose used for the `## Overview` section. When omitted, a summary is
|
|
30
|
+
* generated from the extracted tokens.
|
|
31
|
+
*/
|
|
32
|
+
overview?: string;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* A flattened design token ready for DESIGN.md extraction.
|
|
36
|
+
*/
|
|
37
|
+
interface FlatToken {
|
|
38
|
+
/** Dot-separated token path (e.g. `color.primary`). */
|
|
39
|
+
path: string;
|
|
40
|
+
/** DTCG `$type`, when known. */
|
|
41
|
+
type?: TokenType | string;
|
|
42
|
+
/** Raw `$value` from the token document. */
|
|
43
|
+
value: unknown;
|
|
44
|
+
/** CSS-friendly string form of {@link value}. */
|
|
45
|
+
cssValue: string;
|
|
46
|
+
/** Optional DTCG `$description`. */
|
|
47
|
+
description?: string;
|
|
48
|
+
/** Theme / set id when tokens are a `Record<string, Tokens>`. */
|
|
49
|
+
theme?: string;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* A DESIGN.md typography token
|
|
53
|
+
* (https://github.com/google-labs-code/design.md — Token Types).
|
|
54
|
+
*/
|
|
55
|
+
interface TypographyToken {
|
|
56
|
+
fontFamily?: string;
|
|
57
|
+
fontSize?: string;
|
|
58
|
+
fontWeight?: string | number;
|
|
59
|
+
lineHeight?: string | number;
|
|
60
|
+
letterSpacing?: string;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* A DESIGN.md component token — a map of valid component properties
|
|
64
|
+
* (`backgroundColor`, `textColor`, `typography`, `rounded`, `padding`,
|
|
65
|
+
* `size`, `height`, `width`) to values or `{token.references}`.
|
|
66
|
+
*/
|
|
67
|
+
type ComponentToken = Record<string, string>;
|
|
68
|
+
/**
|
|
69
|
+
* Intermediate representation of a DESIGN.md document, extracted from the
|
|
70
|
+
* Razorwind schema before rendering.
|
|
71
|
+
*/
|
|
72
|
+
interface DesignMdDocument {
|
|
73
|
+
name?: string;
|
|
74
|
+
description?: string;
|
|
75
|
+
version?: string;
|
|
76
|
+
colors: Record<string, string>;
|
|
77
|
+
/** Prose descriptions keyed by color token name. */
|
|
78
|
+
colorDescriptions: Record<string, string>;
|
|
79
|
+
typography: Record<string, TypographyToken>;
|
|
80
|
+
rounded: Record<string, string>;
|
|
81
|
+
spacing: Record<string, string>;
|
|
82
|
+
components: Record<string, ComponentToken>;
|
|
83
|
+
}
|
|
84
|
+
declare namespace generate_d_exports {
|
|
85
|
+
export { _default as default, extractDesignMd, generateDesignMd, renderDesignMd, selectPrimaryTheme };
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Select the token set used for the front matter when tokens are split into
|
|
89
|
+
* multiple themes: the un-themed set first, then `light`, then `default`,
|
|
90
|
+
* then whichever theme appears first.
|
|
91
|
+
*/
|
|
92
|
+
declare function selectPrimaryTheme(flat: FlatToken[]): FlatToken[];
|
|
93
|
+
/**
|
|
94
|
+
* Extract a DESIGN.md document from the Razorwind schema.
|
|
95
|
+
*
|
|
96
|
+
* Colors, typography, rounded / spacing scales, and component tokens are
|
|
97
|
+
* derived from the DTCG token tree. DTCG aliases are re-emitted as DESIGN.md
|
|
98
|
+
* `{section.token}` references when the target token is part of the output,
|
|
99
|
+
* or resolved to their terminal CSS value otherwise.
|
|
100
|
+
*/
|
|
101
|
+
declare function extractDesignMd(spec: Schema): DesignMdDocument;
|
|
102
|
+
/**
|
|
103
|
+
* Render a complete DESIGN.md file — YAML front matter followed by the
|
|
104
|
+
* markdown body.
|
|
105
|
+
*
|
|
106
|
+
* @see https://github.com/google-labs-code/design.md
|
|
107
|
+
*/
|
|
108
|
+
declare function renderDesignMd(document: DesignMdDocument, options?: DesignMdGeneratePluginOptions): string;
|
|
109
|
+
/**
|
|
110
|
+
* Generate a DESIGN.md design-system specification file from a Razorwind
|
|
111
|
+
* schema.
|
|
112
|
+
*
|
|
113
|
+
* @see https://github.com/google-labs-code/design.md
|
|
114
|
+
*/
|
|
115
|
+
declare function generateDesignMd(spec: Schema, options?: DesignMdGeneratePluginOptions): GeneratorFunctionResult<Schema, DesignMdGeneratePluginOptions>;
|
|
116
|
+
/**
|
|
117
|
+
* Generate a DESIGN.md design-system specification file from a Razorwind schema.
|
|
118
|
+
*
|
|
119
|
+
* @see https://github.com/google-labs-code/design.md
|
|
120
|
+
*
|
|
121
|
+
* @example
|
|
122
|
+
* ```ts
|
|
123
|
+
* import { defineConfig } from "@razorwind/core";
|
|
124
|
+
* import designMd from "@razorwind/design-md/generate";
|
|
125
|
+
*
|
|
126
|
+
* export default defineConfig({
|
|
127
|
+
* plugins: [designMd()]
|
|
128
|
+
* });
|
|
129
|
+
* ```
|
|
130
|
+
*/
|
|
131
|
+
declare const _default: (options?: any) => import("@razorwind/core/plugin").Plugin;
|
|
132
|
+
//#endregion
|
|
133
|
+
export { renderDesignMd as a, generate_d_exports as i, extractDesignMd as n, selectPrimaryTheme as o, generateDesignMd as r, _default as t };
|
|
134
|
+
//# sourceMappingURL=generate-seJLuo7M.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-seJLuo7M.d.cts","names":[],"sources":["../src/types.ts","../src/generate.ts"],"mappings":";;;;UA6BiB;;;;;;EAMf;;;;;;EAOA;;;;EAKA;;;;;;EAOA;;;;;EAMA;;;;;UAMe;;EAEf;;EAEA,OAAO;;EAEP;;EAEA;;EAEA;;EAEA;;;;;;UAOe;EACf;EACA;EACA;EACA;EACA;;;;;;;KAQU,iBAAiB;;;;;UAMZ;EACf;EACA;EACA;EACA,QAAQ;;EAER,mBAAmB;EACnB,YAAY,eAAe;EAC3B,SAAS;EACT,SAAS;EACT,YAAY,eAAe;;;;;;;;;;iBC9Bb,mBAAmB,MAAM,cAAc;;;;;;;;;iBA6HvC,gBAAgB,MAAM,SAAS;;;;;;;iBAkR/B,eACd,UAAU,kBACV,UAAS;;;;;;;iBAWK,iBACd,MAAM,QACN,UAAS,gCACR,wBAAwB,QAAQ"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import { GeneratorFunctionResult } from "@power-plant/core";
|
|
2
|
+
import { Schema } from "@razorwind/core/schema";
|
|
3
|
+
import { TokenType } from "@power-plant/dtcg-schema";
|
|
4
|
+
//#region src/types.d.ts
|
|
5
|
+
interface DesignMdGeneratePluginOptions {
|
|
6
|
+
/**
|
|
7
|
+
* Output file path (relative to the execution cwd).
|
|
8
|
+
*
|
|
9
|
+
* @default "DESIGN.md"
|
|
10
|
+
*/
|
|
11
|
+
outputPath?: string;
|
|
12
|
+
/**
|
|
13
|
+
* Design system name written to the YAML front matter.
|
|
14
|
+
*
|
|
15
|
+
* @defaultValue `"Razorwind Design System"`
|
|
16
|
+
*/
|
|
17
|
+
name?: string;
|
|
18
|
+
/**
|
|
19
|
+
* Short design system description written to the YAML front matter.
|
|
20
|
+
*/
|
|
21
|
+
description?: string;
|
|
22
|
+
/**
|
|
23
|
+
* DESIGN.md spec version written to the YAML front matter.
|
|
24
|
+
*
|
|
25
|
+
* @defaultValue `"alpha"`
|
|
26
|
+
*/
|
|
27
|
+
version?: string;
|
|
28
|
+
/**
|
|
29
|
+
* Prose used for the `## Overview` section. When omitted, a summary is
|
|
30
|
+
* generated from the extracted tokens.
|
|
31
|
+
*/
|
|
32
|
+
overview?: string;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* A flattened design token ready for DESIGN.md extraction.
|
|
36
|
+
*/
|
|
37
|
+
interface FlatToken {
|
|
38
|
+
/** Dot-separated token path (e.g. `color.primary`). */
|
|
39
|
+
path: string;
|
|
40
|
+
/** DTCG `$type`, when known. */
|
|
41
|
+
type?: TokenType | string;
|
|
42
|
+
/** Raw `$value` from the token document. */
|
|
43
|
+
value: unknown;
|
|
44
|
+
/** CSS-friendly string form of {@link value}. */
|
|
45
|
+
cssValue: string;
|
|
46
|
+
/** Optional DTCG `$description`. */
|
|
47
|
+
description?: string;
|
|
48
|
+
/** Theme / set id when tokens are a `Record<string, Tokens>`. */
|
|
49
|
+
theme?: string;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* A DESIGN.md typography token
|
|
53
|
+
* (https://github.com/google-labs-code/design.md — Token Types).
|
|
54
|
+
*/
|
|
55
|
+
interface TypographyToken {
|
|
56
|
+
fontFamily?: string;
|
|
57
|
+
fontSize?: string;
|
|
58
|
+
fontWeight?: string | number;
|
|
59
|
+
lineHeight?: string | number;
|
|
60
|
+
letterSpacing?: string;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* A DESIGN.md component token — a map of valid component properties
|
|
64
|
+
* (`backgroundColor`, `textColor`, `typography`, `rounded`, `padding`,
|
|
65
|
+
* `size`, `height`, `width`) to values or `{token.references}`.
|
|
66
|
+
*/
|
|
67
|
+
type ComponentToken = Record<string, string>;
|
|
68
|
+
/**
|
|
69
|
+
* Intermediate representation of a DESIGN.md document, extracted from the
|
|
70
|
+
* Razorwind schema before rendering.
|
|
71
|
+
*/
|
|
72
|
+
interface DesignMdDocument {
|
|
73
|
+
name?: string;
|
|
74
|
+
description?: string;
|
|
75
|
+
version?: string;
|
|
76
|
+
colors: Record<string, string>;
|
|
77
|
+
/** Prose descriptions keyed by color token name. */
|
|
78
|
+
colorDescriptions: Record<string, string>;
|
|
79
|
+
typography: Record<string, TypographyToken>;
|
|
80
|
+
rounded: Record<string, string>;
|
|
81
|
+
spacing: Record<string, string>;
|
|
82
|
+
components: Record<string, ComponentToken>;
|
|
83
|
+
}
|
|
84
|
+
declare namespace generate_d_exports {
|
|
85
|
+
export { _default as default, extractDesignMd, generateDesignMd, renderDesignMd, selectPrimaryTheme };
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Select the token set used for the front matter when tokens are split into
|
|
89
|
+
* multiple themes: the un-themed set first, then `light`, then `default`,
|
|
90
|
+
* then whichever theme appears first.
|
|
91
|
+
*/
|
|
92
|
+
declare function selectPrimaryTheme(flat: FlatToken[]): FlatToken[];
|
|
93
|
+
/**
|
|
94
|
+
* Extract a DESIGN.md document from the Razorwind schema.
|
|
95
|
+
*
|
|
96
|
+
* Colors, typography, rounded / spacing scales, and component tokens are
|
|
97
|
+
* derived from the DTCG token tree. DTCG aliases are re-emitted as DESIGN.md
|
|
98
|
+
* `{section.token}` references when the target token is part of the output,
|
|
99
|
+
* or resolved to their terminal CSS value otherwise.
|
|
100
|
+
*/
|
|
101
|
+
declare function extractDesignMd(spec: Schema): DesignMdDocument;
|
|
102
|
+
/**
|
|
103
|
+
* Render a complete DESIGN.md file — YAML front matter followed by the
|
|
104
|
+
* markdown body.
|
|
105
|
+
*
|
|
106
|
+
* @see https://github.com/google-labs-code/design.md
|
|
107
|
+
*/
|
|
108
|
+
declare function renderDesignMd(document: DesignMdDocument, options?: DesignMdGeneratePluginOptions): string;
|
|
109
|
+
/**
|
|
110
|
+
* Generate a DESIGN.md design-system specification file from a Razorwind
|
|
111
|
+
* schema.
|
|
112
|
+
*
|
|
113
|
+
* @see https://github.com/google-labs-code/design.md
|
|
114
|
+
*/
|
|
115
|
+
declare function generateDesignMd(spec: Schema, options?: DesignMdGeneratePluginOptions): GeneratorFunctionResult<Schema, DesignMdGeneratePluginOptions>;
|
|
116
|
+
/**
|
|
117
|
+
* Generate a DESIGN.md design-system specification file from a Razorwind schema.
|
|
118
|
+
*
|
|
119
|
+
* @see https://github.com/google-labs-code/design.md
|
|
120
|
+
*
|
|
121
|
+
* @example
|
|
122
|
+
* ```ts
|
|
123
|
+
* import { defineConfig } from "@razorwind/core";
|
|
124
|
+
* import designMd from "@razorwind/design-md/generate";
|
|
125
|
+
*
|
|
126
|
+
* export default defineConfig({
|
|
127
|
+
* plugins: [designMd()]
|
|
128
|
+
* });
|
|
129
|
+
* ```
|
|
130
|
+
*/
|
|
131
|
+
declare const _default: (options?: any) => import("@razorwind/core/plugin").Plugin;
|
|
132
|
+
//#endregion
|
|
133
|
+
export { renderDesignMd as a, generate_d_exports as i, extractDesignMd as n, selectPrimaryTheme as o, generateDesignMd as r, _default as t };
|
|
134
|
+
//# sourceMappingURL=generate-seJLuo7M.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-seJLuo7M.d.mts","names":[],"sources":["../src/types.ts","../src/generate.ts"],"mappings":""}
|
package/dist/generate.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});const e=require("./generate-
|
|
1
|
+
Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});const e=require("./generate-BAL2uL6H.cjs");exports.default=e.r,exports.extractDesignMd=e.t,exports.generateDesignMd=e.n,exports.renderDesignMd=e.a,exports.selectPrimaryTheme=e.o;
|
package/dist/generate.d.cts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export { _default as default, selectPrimaryTheme };
|
|
1
|
+
import { a as renderDesignMd, n as extractDesignMd, o as selectPrimaryTheme, r as generateDesignMd, t as _default } from "./generate-seJLuo7M.cjs";
|
|
2
|
+
export { _default as default, extractDesignMd, generateDesignMd, renderDesignMd, selectPrimaryTheme };
|
package/dist/generate.d.mts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export { _default as default, selectPrimaryTheme };
|
|
1
|
+
import { a as renderDesignMd, n as extractDesignMd, o as selectPrimaryTheme, r as generateDesignMd, t as _default } from "./generate-seJLuo7M.mjs";
|
|
2
|
+
export { _default as default, extractDesignMd, generateDesignMd, renderDesignMd, selectPrimaryTheme };
|
package/dist/generate.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{a as e,n as t,o as n,r,t as i}from"./generate-C71mu06Y.mjs";export{r as default,i as extractDesignMd,t as generateDesignMd,e as renderDesignMd,n as selectPrimaryTheme};
|
package/dist/index.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./extract.cjs"),t=require("./generate-
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./extract.cjs"),t=require("./generate-BAL2uL6H.cjs");Object.defineProperty(exports,"extract",{enumerable:!0,get:function(){return e.t}}),Object.defineProperty(exports,"generate",{enumerable:!0,get:function(){return t.i}});
|
package/dist/index.d.cts
CHANGED
package/dist/index.d.mts
CHANGED
package/dist/index.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{t as e}from"./extract.mjs";import{
|
|
1
|
+
import{t as e}from"./extract.mjs";import{i as t}from"./generate-C71mu06Y.mjs";export{e as extract,t as generate};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@razorwind/design-md",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.7",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Razorwind DESIGN.md plugin that can create a DESIGN.md design-system specification file from design tokens or read a DESIGN.md file and return the design-system specification.",
|
|
6
6
|
"repository": {
|
|
@@ -78,9 +78,9 @@
|
|
|
78
78
|
"types": "./dist/index.d.cts",
|
|
79
79
|
"typings": "dist/index.d.mts",
|
|
80
80
|
"dependencies": {
|
|
81
|
-
"@power-plant/core": "^0.0.
|
|
81
|
+
"@power-plant/core": "^0.0.52",
|
|
82
82
|
"@power-plant/dtcg-schema": "^0.0.1",
|
|
83
|
-
"@razorwind/core": "^0.0.
|
|
83
|
+
"@razorwind/core": "^0.0.11",
|
|
84
84
|
"@stryke/fs": "^0.33.99",
|
|
85
85
|
"@stryke/path": "^0.29.25",
|
|
86
86
|
"@stryke/type-checks": "^0.6.31",
|
|
@@ -88,10 +88,10 @@
|
|
|
88
88
|
"yaml": "^2.9.0"
|
|
89
89
|
},
|
|
90
90
|
"devDependencies": {
|
|
91
|
-
"@powerlines/plugin-tsdown": "^0.1.
|
|
91
|
+
"@powerlines/plugin-tsdown": "^0.1.571",
|
|
92
92
|
"@types/node": "^25.9.5",
|
|
93
93
|
"typescript": "^6.0.3"
|
|
94
94
|
},
|
|
95
95
|
"publishConfig": { "access": "public" },
|
|
96
|
-
"gitHead": "
|
|
96
|
+
"gitHead": "fd7712d76c7a07b13072384c0d57b7f36d5c9946"
|
|
97
97
|
}
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
import { TokenType } from "@power-plant/dtcg-schema";
|
|
2
|
-
//#region src/types.d.ts
|
|
3
|
-
/**
|
|
4
|
-
* A flattened design token ready for DESIGN.md extraction.
|
|
5
|
-
*/
|
|
6
|
-
interface FlatToken {
|
|
7
|
-
/** Dot-separated token path (e.g. `color.primary`). */
|
|
8
|
-
path: string;
|
|
9
|
-
/** DTCG `$type`, when known. */
|
|
10
|
-
type?: TokenType | string;
|
|
11
|
-
/** Raw `$value` from the token document. */
|
|
12
|
-
value: unknown;
|
|
13
|
-
/** CSS-friendly string form of {@link value}. */
|
|
14
|
-
cssValue: string;
|
|
15
|
-
/** Optional DTCG `$description`. */
|
|
16
|
-
description?: string;
|
|
17
|
-
/** Theme / set id when tokens are a `Record<string, Tokens>`. */
|
|
18
|
-
theme?: string;
|
|
19
|
-
}
|
|
20
|
-
declare namespace generate_d_exports {
|
|
21
|
-
export { _default as default, selectPrimaryTheme };
|
|
22
|
-
}
|
|
23
|
-
/**
|
|
24
|
-
* Select the token set used for the front matter when tokens are split into
|
|
25
|
-
* multiple themes: the un-themed set first, then `light`, then `default`,
|
|
26
|
-
* then whichever theme appears first.
|
|
27
|
-
*/
|
|
28
|
-
declare function selectPrimaryTheme(flat: FlatToken[]): FlatToken[];
|
|
29
|
-
/**
|
|
30
|
-
* Generate a DESIGN.md design-system specification file from a Razorwind schema.
|
|
31
|
-
*
|
|
32
|
-
* @see https://github.com/google-labs-code/design.md
|
|
33
|
-
*
|
|
34
|
-
* @example
|
|
35
|
-
* ```ts
|
|
36
|
-
* import { defineConfig } from "@razorwind/core";
|
|
37
|
-
* import designMd from "@razorwind/design-md/generate";
|
|
38
|
-
*
|
|
39
|
-
* export default defineConfig({
|
|
40
|
-
* plugins: [designMd()]
|
|
41
|
-
* });
|
|
42
|
-
* ```
|
|
43
|
-
*/
|
|
44
|
-
declare const _default: (options: any) => import("@razorwind/core/plugin").Plugin;
|
|
45
|
-
//#endregion
|
|
46
|
-
export { generate_d_exports as n, selectPrimaryTheme as r, _default as t };
|
|
47
|
-
//# sourceMappingURL=generate-BPhbyvvs.d.cts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"generate-BPhbyvvs.d.cts","names":[],"sources":["../src/types.ts","../src/generate.ts"],"mappings":";;;;;UAkEiB;;EAEf;;EAEA,OAAO;;EAEP;;EAEA;;EAEA;;EAEA;;;;;;;;;;iBCMc,mBAAmB,MAAM,cAAc"}
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
import { TokenType } from "@power-plant/dtcg-schema";
|
|
2
|
-
//#region src/types.d.ts
|
|
3
|
-
/**
|
|
4
|
-
* A flattened design token ready for DESIGN.md extraction.
|
|
5
|
-
*/
|
|
6
|
-
interface FlatToken {
|
|
7
|
-
/** Dot-separated token path (e.g. `color.primary`). */
|
|
8
|
-
path: string;
|
|
9
|
-
/** DTCG `$type`, when known. */
|
|
10
|
-
type?: TokenType | string;
|
|
11
|
-
/** Raw `$value` from the token document. */
|
|
12
|
-
value: unknown;
|
|
13
|
-
/** CSS-friendly string form of {@link value}. */
|
|
14
|
-
cssValue: string;
|
|
15
|
-
/** Optional DTCG `$description`. */
|
|
16
|
-
description?: string;
|
|
17
|
-
/** Theme / set id when tokens are a `Record<string, Tokens>`. */
|
|
18
|
-
theme?: string;
|
|
19
|
-
}
|
|
20
|
-
declare namespace generate_d_exports {
|
|
21
|
-
export { _default as default, selectPrimaryTheme };
|
|
22
|
-
}
|
|
23
|
-
/**
|
|
24
|
-
* Select the token set used for the front matter when tokens are split into
|
|
25
|
-
* multiple themes: the un-themed set first, then `light`, then `default`,
|
|
26
|
-
* then whichever theme appears first.
|
|
27
|
-
*/
|
|
28
|
-
declare function selectPrimaryTheme(flat: FlatToken[]): FlatToken[];
|
|
29
|
-
/**
|
|
30
|
-
* Generate a DESIGN.md design-system specification file from a Razorwind schema.
|
|
31
|
-
*
|
|
32
|
-
* @see https://github.com/google-labs-code/design.md
|
|
33
|
-
*
|
|
34
|
-
* @example
|
|
35
|
-
* ```ts
|
|
36
|
-
* import { defineConfig } from "@razorwind/core";
|
|
37
|
-
* import designMd from "@razorwind/design-md/generate";
|
|
38
|
-
*
|
|
39
|
-
* export default defineConfig({
|
|
40
|
-
* plugins: [designMd()]
|
|
41
|
-
* });
|
|
42
|
-
* ```
|
|
43
|
-
*/
|
|
44
|
-
declare const _default: (options: any) => import("@razorwind/core/plugin").Plugin;
|
|
45
|
-
//#endregion
|
|
46
|
-
export { generate_d_exports as n, selectPrimaryTheme as r, _default as t };
|
|
47
|
-
//# sourceMappingURL=generate-BPhbyvvs.d.mts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"generate-BPhbyvvs.d.mts","names":[],"sources":["../src/types.ts","../src/generate.ts"],"mappings":""}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import{t as e}from"./rolldown-runtime-DK3Fl9T5.mjs";import{definePlugin as t}from"@razorwind/core/plugin";import{formatTokenValue as n,isObject as r}from"@razorwind/core/utils";function i(e,t){let n=e.split(`.`).filter(Boolean);for(;n.length>1&&t.includes(n[0].toLowerCase());)n.shift();return n.join(`-`).replaceAll(/[^\w-]+/g,`-`).toLowerCase()}function a(e){if(typeof e==`number`||typeof e==`boolean`)return String(e);let t=String(e);return/^[a-z][\w-]*$/i.test(t)?t:JSON.stringify(t)}function o(e){return e.split(/[-_.]+/).filter(Boolean).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(` `)}const s=/^(?:light|dark|dim|high-contrast|hc|default|base|theme)(?:[._-].+)?$/i;function c(e){return`$value`in e||`value`in e||`$ref`in e||`ref`in e}function l(e){if(typeof e.$description==`string`)return e.$description;if(typeof e.description==`string`)return e.description}function u(e,t){return typeof e.$type==`string`?e.$type:typeof e.type==`string`?e.type:t}function d(e){if(`$value`in e)return e.$value;if(`value`in e)return e.value;if(typeof e.$ref==`string`)return e.$ref;if(typeof e.ref==`string`)return e.ref}function f(e,t,i,a,o){if(!r(e))return;let s=u(e,i);if(c(e)){let r=d(e);o.push({path:t.join(`.`),type:s,value:r,cssValue:n(r,s),description:l(e),theme:a});return}for(let[n,r]of Object.entries(e))n.startsWith(`$`)||f(r,[...t,n],s,a,o)}function p(e){if(!r(e))return[];let t=Object.keys(e).filter(e=>!e.startsWith(`$`));return t.length>0&&t.every(e=>s.test(e))?t.map(t=>({id:t,tokens:e[t]})):[{id:`default`,tokens:e}]}function m(e,t){let n=t?new Set(t):void 0,r=[];for(let t of p(e)){let e=t.id==="default"?void 0:t.id;f(t.tokens,[],void 0,e,r)}return n?r.filter(e=>!e.type||n.has(e.type)):r}var h=e({default:()=>z,selectPrimaryTheme:()=>T});const g=new Set([`backgroundColor`,`textColor`,`typography`,`rounded`,`padding`,`size`,`height`,`width`]),_={background:`backgroundColor`,backgroundcolor:`backgroundColor`,bg:`backgroundColor`,fill:`backgroundColor`,color:`textColor`,foreground:`textColor`,text:`textColor`,textcolor:`textColor`,font:`typography`,radius:`rounded`,borderradius:`rounded`,corner:`rounded`},v=[`color`,`colors`,`palette`],y=[`typography`,`type`,`text`,`font`,`fonts`],b=/(?:^|\.)(?:radius|radii|rounded|corner)(?:\.|$)/i,x=/(?:^|\.)(?:spacing|space|gap)(?:\.|$)/i,S=/^components?$/i,C=/^\{([^}]+)\}$/,w=[`fontFamily`,`fontSize`,`fontWeight`,`lineHeight`,`letterSpacing`];function T(e){let t=[...new Set(e.map(e=>e.theme))],n=t.find(e=>e===void 0)??t.find(e=>/^light/i.test(e??``))??t.find(e=>/^(?:default|base)/i.test(e??``))??t[0];return e.filter(e=>e.theme===n)}function E(e){if(typeof e==`string`)return C.exec(e.trim())?.[1]}function D(e,t){let n=e;for(let e=0;e<8;e++){let e=E(n.value);if(!e)return n;let r=t.get(e);if(!r)return n;n=r}return n}function O(e){return e.split(/[-_.\s]+/).filter(Boolean).map((e,t)=>t===0?e.toLowerCase():e.charAt(0).toUpperCase()+e.slice(1).toLowerCase()).join(``)}function k(e){let t=O(e);return g.has(t)?t:_[t.toLowerCase()]}function A(e,t){let i={};if(!r(e))return i;for(let r of w){let a=e[r];if(a==null)continue;let o=E(a),s=o?t.get(o):void 0,c=s?D(s,t).cssValue:void 0;if(typeof a==`number`){i[r]=a;continue}i[r]=c??n(a)}return i}function j(e){let t=T(m(e.tokens)),n=new Map(t.map(e=>[e.path,e])),r={colors:{},colorDescriptions:{},typography:{},rounded:{},spacing:{},components:{}},a=new Map,o=[];for(let e of t){let t=e.path.split(`.`);if(t[0]&&S.test(t[0])){o.push(e);continue}if(e.type===`color`){let t=i(e.path,v),o=D(e,n);r.colors[t]=o.cssValue,e.description&&(r.colorDescriptions[t]=e.description),a.set(e.path,`colors.${t}`);continue}if(e.type===`typography`){let t=i(e.path,y);r.typography[t]=A(e.value,n),a.set(e.path,`typography.${t}`);continue}if(e.type===`fontFamily`){let t=i(e.path,y);r.typography[t]??={},r.typography[t].fontFamily=e.cssValue,a.set(e.path,`typography.${t}`);continue}let s=e.type===`dimension`||e.type===`number`||typeof e.value==`number`;if(s&&b.test(e.path)){let i=t.at(-1);r.rounded[i]=D(e,n).cssValue,a.set(e.path,`rounded.${i}`);continue}if(s&&x.test(e.path)){let i=t.at(-1);r.spacing[i]=D(e,n).cssValue,a.set(e.path,`spacing.${i}`)}}for(let e of o){let t=e.path.split(`.`).slice(1);if(t.length<2)continue;let i=k(t.at(-1));if(!i)continue;let o=t.slice(0,-1).join(`-`).replaceAll(/[^\w-]+/g,`-`).toLowerCase(),s=E(e.value),c=s?a.get(s):void 0,l=c?`{${c}}`:D(e,n).cssValue;r.components[o]??={},r.components[o][i]=l}return r}function M(e,t,n){let r=Object.entries(t);if(r.length!==0){n.push(`${e}:`);for(let[e,t]of r){if(typeof t==`object`&&t){n.push(` ${e}:`);for(let[e,r]of Object.entries(t))n.push(` ${e}: ${a(r)}`);continue}n.push(` ${e}: ${a(t)}`)}}}function N(e){let t=[`---`];return e.version&&t.push(`version: ${a(e.version)}`),t.push(`name: ${a(e.name)}`),e.description&&t.push(`description: ${a(e.description)}`),M(`colors`,e.colors,t),M(`typography`,e.typography,t),M(`rounded`,e.rounded,t),M(`spacing`,e.spacing,t),M(`components`,e.components,t),t.push(`---`),`${t.join(`
|
|
2
|
-
`)}\n`}function P(e,...t){return`## ${e}\n\n${t.filter(Boolean).join(`
|
|
3
|
-
`)}\n`}function F(e){let t=[[Object.keys(e.colors).length,`color`],[Object.keys(e.typography).length,`typography`],[Object.keys(e.rounded).length,`shape`],[Object.keys(e.spacing).length,`spacing`],[Object.keys(e.components).length,`component`]].filter(([e])=>e>0).map(([e,t])=>`${e} ${t} token${e===1?``:`s`}`).join(`, `);return`${e.name} design tokens${t?` — ${t}`:``}. The YAML front matter above is the normative source; the prose below explains how to apply it.`}function I(e,t={}){let n=[P(`Overview`,t.overview??F(e))],r=Object.entries(e.colors);r.length>0&&n.push(P(`Colors`,r.map(([t,n])=>{let r=e.colorDescriptions[t];return`- **${o(t)} (${n}):**${r?` ${r}`:``}`}).join(`
|
|
4
|
-
`)));let i=Object.entries(e.typography);i.length>0&&n.push(P(`Typography`,i.map(([e,t])=>`- **${e}:** ${Object.entries(t).map(([e,t])=>`${e}: ${t}`).join(`, `)}`).join(`
|
|
5
|
-
`)));let a=Object.entries(e.spacing);a.length>0&&n.push(P(`Layout`,`Spacing scale:`,``,a.map(([e,t])=>`- **${e}:** ${t}`).join(`
|
|
6
|
-
`)));let s=Object.entries(e.rounded);s.length>0&&n.push(P(`Shapes`,`Corner radius scale:`,``,s.map(([e,t])=>`- **${e}:** ${t}`).join(`
|
|
7
|
-
`)));let c=Object.entries(e.components);return c.length>0&&n.push(P(`Components`,c.map(([e,t])=>`- **${e}:** ${Object.entries(t).map(([e,t])=>`${e}: \`${t}\``).join(`, `)}`).join(`
|
|
8
|
-
`))),n.join(`
|
|
9
|
-
`)}function L(e,t={}){return`${N(e)}\n${I(e,t)}`}function R(e,t={}){let n=j(e);return{[t.outputPath??`DESIGN.md`]:{path:t.outputPath??`DESIGN.md`,language:`markdown`,chunks:[{content:L(n,t),meta:{name:`razorwind-design-md`}}]}}}var z=t((e={})=>({name:`design-md:generate`,generate:async t=>R(t,e)}));export{h as n,T as r,z as t};
|
|
10
|
-
//# sourceMappingURL=generate-DFy3tlPT.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"generate-DFy3tlPT.mjs","names":[],"sources":[],"mappings":""}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
const e=require("./rolldown-runtime-BIInC43l.cjs");let t=require("@razorwind/core/plugin"),n=require("@razorwind/core/utils");function r(e,t){let n=e.split(`.`).filter(Boolean);for(;n.length>1&&t.includes(n[0].toLowerCase());)n.shift();return n.join(`-`).replaceAll(/[^\w-]+/g,`-`).toLowerCase()}function i(e){if(typeof e==`number`||typeof e==`boolean`)return String(e);let t=String(e);return/^[a-z][\w-]*$/i.test(t)?t:JSON.stringify(t)}function a(e){return e.split(/[-_.]+/).filter(Boolean).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(` `)}const o=/^(?:light|dark|dim|high-contrast|hc|default|base|theme)(?:[._-].+)?$/i;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,r,i,a){if(!(0,n.isObject)(e))return;let o=l(e,r);if(s(e)){let r=u(e);a.push({path:t.join(`.`),type:o,value:r,cssValue:(0,n.formatTokenValue)(r,o),description:c(e),theme:i});return}for(let[n,r]of Object.entries(e))n.startsWith(`$`)||d(r,[...t,n],o,i,a)}function f(e){if(!(0,n.isObject)(e))return[];let t=Object.keys(e).filter(e=>!e.startsWith(`$`));return t.length>0&&t.every(e=>o.test(e))?t.map(t=>({id:t,tokens:e[t]})):[{id:`default`,tokens:e}]}function p(e,t){let n=t?new Set(t):void 0,r=[];for(let t of f(e)){let e=t.id==="default"?void 0:t.id;d(t.tokens,[],void 0,e,r)}return n?r.filter(e=>!e.type||n.has(e.type)):r}var m=e.t({default:()=>R,selectPrimaryTheme:()=>w});const h=new Set([`backgroundColor`,`textColor`,`typography`,`rounded`,`padding`,`size`,`height`,`width`]),g={background:`backgroundColor`,backgroundcolor:`backgroundColor`,bg:`backgroundColor`,fill:`backgroundColor`,color:`textColor`,foreground:`textColor`,text:`textColor`,textcolor:`textColor`,font:`typography`,radius:`rounded`,borderradius:`rounded`,corner:`rounded`},_=[`color`,`colors`,`palette`],v=[`typography`,`type`,`text`,`font`,`fonts`],y=/(?:^|\.)(?:radius|radii|rounded|corner)(?:\.|$)/i,b=/(?:^|\.)(?:spacing|space|gap)(?:\.|$)/i,x=/^components?$/i,S=/^\{([^}]+)\}$/,C=[`fontFamily`,`fontSize`,`fontWeight`,`lineHeight`,`letterSpacing`];function w(e){let t=[...new Set(e.map(e=>e.theme))],n=t.find(e=>e===void 0)??t.find(e=>/^light/i.test(e??``))??t.find(e=>/^(?:default|base)/i.test(e??``))??t[0];return e.filter(e=>e.theme===n)}function T(e){if(typeof e==`string`)return S.exec(e.trim())?.[1]}function E(e,t){let n=e;for(let e=0;e<8;e++){let e=T(n.value);if(!e)return n;let r=t.get(e);if(!r)return n;n=r}return n}function D(e){return e.split(/[-_.\s]+/).filter(Boolean).map((e,t)=>t===0?e.toLowerCase():e.charAt(0).toUpperCase()+e.slice(1).toLowerCase()).join(``)}function O(e){let t=D(e);return h.has(t)?t:g[t.toLowerCase()]}function k(e,t){let r={};if(!(0,n.isObject)(e))return r;for(let i of C){let a=e[i];if(a==null)continue;let o=T(a),s=o?t.get(o):void 0,c=s?E(s,t).cssValue:void 0;if(typeof a==`number`){r[i]=a;continue}r[i]=c??(0,n.formatTokenValue)(a)}return r}function A(e){let t=w(p(e.tokens)),n=new Map(t.map(e=>[e.path,e])),i={colors:{},colorDescriptions:{},typography:{},rounded:{},spacing:{},components:{}},a=new Map,o=[];for(let e of t){let t=e.path.split(`.`);if(t[0]&&x.test(t[0])){o.push(e);continue}if(e.type===`color`){let t=r(e.path,_),o=E(e,n);i.colors[t]=o.cssValue,e.description&&(i.colorDescriptions[t]=e.description),a.set(e.path,`colors.${t}`);continue}if(e.type===`typography`){let t=r(e.path,v);i.typography[t]=k(e.value,n),a.set(e.path,`typography.${t}`);continue}if(e.type===`fontFamily`){let t=r(e.path,v);i.typography[t]??={},i.typography[t].fontFamily=e.cssValue,a.set(e.path,`typography.${t}`);continue}let s=e.type===`dimension`||e.type===`number`||typeof e.value==`number`;if(s&&y.test(e.path)){let r=t.at(-1);i.rounded[r]=E(e,n).cssValue,a.set(e.path,`rounded.${r}`);continue}if(s&&b.test(e.path)){let r=t.at(-1);i.spacing[r]=E(e,n).cssValue,a.set(e.path,`spacing.${r}`)}}for(let e of o){let t=e.path.split(`.`).slice(1);if(t.length<2)continue;let r=O(t.at(-1));if(!r)continue;let o=t.slice(0,-1).join(`-`).replaceAll(/[^\w-]+/g,`-`).toLowerCase(),s=T(e.value),c=s?a.get(s):void 0,l=c?`{${c}}`:E(e,n).cssValue;i.components[o]??={},i.components[o][r]=l}return i}function j(e,t,n){let r=Object.entries(t);if(r.length!==0){n.push(`${e}:`);for(let[e,t]of r){if(typeof t==`object`&&t){n.push(` ${e}:`);for(let[e,r]of Object.entries(t))n.push(` ${e}: ${i(r)}`);continue}n.push(` ${e}: ${i(t)}`)}}}function M(e){let t=[`---`];return e.version&&t.push(`version: ${i(e.version)}`),t.push(`name: ${i(e.name)}`),e.description&&t.push(`description: ${i(e.description)}`),j(`colors`,e.colors,t),j(`typography`,e.typography,t),j(`rounded`,e.rounded,t),j(`spacing`,e.spacing,t),j(`components`,e.components,t),t.push(`---`),`${t.join(`
|
|
2
|
-
`)}\n`}function N(e,...t){return`## ${e}\n\n${t.filter(Boolean).join(`
|
|
3
|
-
`)}\n`}function P(e){let t=[[Object.keys(e.colors).length,`color`],[Object.keys(e.typography).length,`typography`],[Object.keys(e.rounded).length,`shape`],[Object.keys(e.spacing).length,`spacing`],[Object.keys(e.components).length,`component`]].filter(([e])=>e>0).map(([e,t])=>`${e} ${t} token${e===1?``:`s`}`).join(`, `);return`${e.name} design tokens${t?` — ${t}`:``}. The YAML front matter above is the normative source; the prose below explains how to apply it.`}function F(e,t={}){let n=[N(`Overview`,t.overview??P(e))],r=Object.entries(e.colors);r.length>0&&n.push(N(`Colors`,r.map(([t,n])=>{let r=e.colorDescriptions[t];return`- **${a(t)} (${n}):**${r?` ${r}`:``}`}).join(`
|
|
4
|
-
`)));let i=Object.entries(e.typography);i.length>0&&n.push(N(`Typography`,i.map(([e,t])=>`- **${e}:** ${Object.entries(t).map(([e,t])=>`${e}: ${t}`).join(`, `)}`).join(`
|
|
5
|
-
`)));let o=Object.entries(e.spacing);o.length>0&&n.push(N(`Layout`,`Spacing scale:`,``,o.map(([e,t])=>`- **${e}:** ${t}`).join(`
|
|
6
|
-
`)));let s=Object.entries(e.rounded);s.length>0&&n.push(N(`Shapes`,`Corner radius scale:`,``,s.map(([e,t])=>`- **${e}:** ${t}`).join(`
|
|
7
|
-
`)));let c=Object.entries(e.components);return c.length>0&&n.push(N(`Components`,c.map(([e,t])=>`- **${e}:** ${Object.entries(t).map(([e,t])=>`${e}: \`${t}\``).join(`, `)}`).join(`
|
|
8
|
-
`))),n.join(`
|
|
9
|
-
`)}function I(e,t={}){return`${M(e)}\n${F(e,t)}`}function L(e,t={}){let n=A(e);return{[t.outputPath??`DESIGN.md`]:{path:t.outputPath??`DESIGN.md`,language:`markdown`,chunks:[{content:I(n,t),meta:{name:`razorwind-design-md`}}]}}}var R=(0,t.definePlugin)((e={})=>({name:`design-md:generate`,generate:async t=>L(t,e)}));Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return m}}),Object.defineProperty(exports,"r",{enumerable:!0,get:function(){return w}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return R}});
|