@razorwind/docgen 0.0.24 → 0.0.26

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.
@@ -1,4 +1,4 @@
1
- import { i as __exportAll, t as DocgenExtractPluginOptions } from "./types-CW5pdxOV.cjs";
1
+ import { i as __exportAll, t as DocgenExtractPluginOptions } from "./types-tdksapmJ.cjs";
2
2
  declare namespace extract_d_exports {
3
3
  export { _default as default };
4
4
  }
@@ -1,4 +1,4 @@
1
- import { t as DocgenExtractPluginOptions } from "./types-Br4Cf9rf.mjs";
1
+ import { t as DocgenExtractPluginOptions } from "./types-Df_Xoq3m.mjs";
2
2
  declare namespace extract_d_exports {
3
3
  export { _default as default };
4
4
  }
@@ -0,0 +1,133 @@
1
+ import { i as __exportAll, n as DocgenGeneratePluginOptions, r as FlatToken } from "./types-tdksapmJ.cjs";
2
+ import { GeneratorFunctionResult } from "@power-plant/core";
3
+ import { Schema } from "@razorwind/core/schema";
4
+ //#region src/install.d.ts
5
+ /**
6
+ * Build docgen INSTALL.md for generated MDX documentation.
7
+ */
8
+ declare function renderInstallMd(options: {
9
+ outDir: string;
10
+ title?: string;
11
+ }): string;
12
+ declare namespace generate_d_exports {
13
+ export { COMPONENT_TYPES, ComponentDocType, REGISTRY_ITEM_TYPES, RegistryItemPage, RegistryItemType, _default as default, extractIcons, extractRegistryItems, generateDocs, groupTokens, renderGroupMdx, renderIconsMdx, renderIndexMdx, renderInstallMd, renderRegistryItemsMdx, renderTokenTable, tokenGroup };
14
+ }
15
+ /** Top-level path segment used to group tokens into pages. */
16
+ declare function tokenGroup(token: FlatToken): string;
17
+ /**
18
+ * Group flattened tokens by their top-level path segment.
19
+ */
20
+ declare function groupTokens(tokens: FlatToken[]): Map<string, FlatToken[]>;
21
+ /**
22
+ * Render a markdown token table for a set of flattened tokens.
23
+ */
24
+ declare function renderTokenTable(tokens: FlatToken[]): string;
25
+ /**
26
+ * Render an MDX documentation page for a single token group.
27
+ */
28
+ declare function renderGroupMdx(group: string, tokens: FlatToken[]): string;
29
+ /**
30
+ * Render the documentation index page linking to every generated page.
31
+ */
32
+ declare function renderIndexMdx(input: {
33
+ title: string;
34
+ groups: Map<string, FlatToken[]>;
35
+ hasComponents: boolean;
36
+ componentPages?: {
37
+ slug: string;
38
+ title: string;
39
+ count: number;
40
+ }[];
41
+ iconCount?: number;
42
+ }): string;
43
+ /** Component types that receive a dedicated documentation page. */
44
+ declare const COMPONENT_TYPES: {
45
+ readonly ui: {
46
+ readonly slug: "ui";
47
+ readonly title: "UI Primitives";
48
+ };
49
+ readonly component: {
50
+ readonly slug: "components";
51
+ readonly title: "Components";
52
+ };
53
+ readonly page: {
54
+ readonly slug: "pages";
55
+ readonly title: "Pages";
56
+ };
57
+ readonly block: {
58
+ readonly slug: "blocks";
59
+ readonly title: "Blocks";
60
+ };
61
+ };
62
+ /** @deprecated Use {@link COMPONENT_TYPES}. */
63
+ declare const REGISTRY_ITEM_TYPES: {
64
+ readonly "registry:ui": {
65
+ readonly slug: "ui";
66
+ readonly title: "UI Primitives";
67
+ };
68
+ readonly "registry:component": {
69
+ readonly slug: "components";
70
+ readonly title: "Components";
71
+ };
72
+ readonly "registry:page": {
73
+ readonly slug: "pages";
74
+ readonly title: "Pages";
75
+ };
76
+ readonly "registry:block": {
77
+ readonly slug: "blocks";
78
+ readonly title: "Blocks";
79
+ };
80
+ };
81
+ type ComponentDocType = keyof typeof COMPONENT_TYPES;
82
+ type RegistryItemType = keyof typeof REGISTRY_ITEM_TYPES;
83
+ /** A documented component type together with its matching items. */
84
+ interface RegistryItemPage {
85
+ type: ComponentDocType;
86
+ slug: string;
87
+ title: string;
88
+ items: Record<string, unknown>[];
89
+ }
90
+ /**
91
+ * Extract documented components from `schema.components`, grouped by type.
92
+ *
93
+ * Only `ui`, `component`, `page` and `block` items are documented — one page
94
+ * per type.
95
+ */
96
+ declare function extractRegistryItems(components: unknown): RegistryItemPage[];
97
+ /**
98
+ * Extract documented icons from `schema.icons`.
99
+ */
100
+ declare function extractIcons(icons: unknown): Record<string, unknown>[];
101
+ /**
102
+ * Render an MDX documentation page for all icons.
103
+ */
104
+ declare function renderIconsMdx(icons: Record<string, unknown>[]): string;
105
+ /**
106
+ * Render an MDX documentation page for all components of a single type.
107
+ */
108
+ declare function renderRegistryItemsMdx(page: RegistryItemPage): string;
109
+ /**
110
+ * Generate MDX documentation pages from a Razorwind schema.
111
+ *
112
+ * Produces an index page, one page per top-level token group, component
113
+ * pages grouped by type, icon documentation, and a flattened `tokens.json`
114
+ * manifest.
115
+ */
116
+ declare function generateDocs(spec: Schema, options?: DocgenGeneratePluginOptions): GeneratorFunctionResult<Schema, DocgenGeneratePluginOptions>;
117
+ /**
118
+ * Generate MDX documentation pages from a Razorwind schema.
119
+ *
120
+ * @example
121
+ * ```ts
122
+ * import { defineConfig } from "@razorwind/core";
123
+ * import docgen from "@razorwind/docgen/generate";
124
+ *
125
+ * export default defineConfig({
126
+ * plugins: [docgen()]
127
+ * });
128
+ * ```
129
+ */
130
+ declare const _default: (options?: DocgenGeneratePluginOptions | undefined) => import("@razorwind/core/plugin").Plugin;
131
+ //#endregion
132
+ export { tokenGroup as _, RegistryItemType as a, extractRegistryItems as c, groupTokens as d, renderGroupMdx as f, renderTokenTable as g, renderRegistryItemsMdx as h, RegistryItemPage as i, generateDocs as l, renderIndexMdx as m, ComponentDocType as n, _default as o, renderIconsMdx as p, REGISTRY_ITEM_TYPES as r, extractIcons as s, COMPONENT_TYPES as t, generate_d_exports as u, renderInstallMd as v };
133
+ //# sourceMappingURL=generate-Bl-XjHVv.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-Bl-XjHVv.d.cts","names":[],"sources":["../src/install.ts","../src/generate.ts"],"mappings":";;;;;;;iBAqBgB,gBAAgB;EAC9B;EACA;;;;;;iBCcc,WAAW,OAAO;;;;iBAOlB,YAAY,QAAQ,cAAc,YAAY;;;;iBAoB9C,iBAAiB,QAAQ;;;;iBAiDzB,eAAe,eAAe,QAAQ;;;;iBA8BtC,eAAe;EAC7B;EACA,QAAQ,YAAY;EACpB;EACA;IAAmB;IAAc;IAAe;;EAChD;;;cA2DW;;;;;;;;;;;;;;;;;;;cAQA;;;;;;;;;;;;;;;;;;KAOD,gCAAgC;KAChC,gCAAgC;;UAG3B;EACf,MAAM;EACN;EACA;EACA,OAAO;;;;;;;;iBA4DO,qBAAqB,sBAAsB;;;;iBA4K3C,aAAa,iBAAiB;;;;iBA8G9B,eAAe,OAAO;;;;iBAoBtB,uBAAuB,MAAM;;;;;;;;iBA2C7B,aACd,MAAM,QACN,UAAS,8BACR,wBAAwB,QAAQ"}
@@ -0,0 +1,60 @@
1
+ import{t as e}from"./rolldown-runtime-DK3Fl9T5.mjs";import{definePlugin as t}from"@razorwind/core/plugin";import{createDocument as n,flattenTokens as r,isObject as i,titleCase as a,toCssVar as o}from"@razorwind/core/utils";import{join as s}from"node:path";function c(e,t={}){let n=t.cssVarPrefix??`rw`;return r(e,{includeTypes:t.includeTypes,enrichToken:e=>({...e,cssVar:o(e.path,n)})})}function l(e){return e.trim().replaceAll(/[^\w-]+/g,`-`).replaceAll(/-{2,}/g,`-`).replaceAll(/^-|-$/g,``).toLowerCase()}function u(e){return e.replaceAll(`\\`,`\\\\`).replaceAll(`|`,`\\|`).replaceAll(`<`,`\\<`).replaceAll(`{`,`\\{`).replaceAll(/\r?\n/g,` `)}function d(e){let t=e.title??`Design System`;return`# Installing ${t} Docs
2
+
3
+ Generated by \`@razorwind/docgen\`.
4
+
5
+ ## Files
6
+
7
+ - \`${e.outDir}/index.mdx\` — documentation index
8
+ - \`${e.outDir}/tokens/\` — per-group token pages
9
+ - \`${e.outDir}/tokens.json\` — flattened token manifest
10
+
11
+ ## Setup
12
+
13
+ 1. Wire generated MDX into your docs site (Storybook, Nextra, Docusaurus, etc.).
14
+
15
+ Example for Storybook:
16
+
17
+ \`\`\`ts
18
+ // .storybook/main.ts
19
+ export default {
20
+ stories: ["../${e.outDir}/**/*.mdx"]
21
+ };
22
+ \`\`\`
23
+
24
+ 2. Open \`${e.outDir}/index.mdx\` as the **${t}** entry point.
25
+
26
+ 3. Re-run Razorwind generate when tokens or registry items change.
27
+
28
+ ## Regenerate
29
+
30
+ Docs under \`${e.outDir}/\` are generated output — edit source tokens/components instead of hand-editing MDX.
31
+ `}var f=e({COMPONENT_TYPES:()=>b,REGISTRY_ITEM_TYPES:()=>x,default:()=>z,extractIcons:()=>j,extractRegistryItems:()=>E,generateDocs:()=>R,groupTokens:()=>h,renderGroupMdx:()=>v,renderIconsMdx:()=>F,renderIndexMdx:()=>y,renderInstallMd:()=>d,renderRegistryItemsMdx:()=>I,renderTokenTable:()=>_,tokenGroup:()=>m});function p(e){return`---\n${Object.entries(e).map(([e,t])=>`${e}: ${JSON.stringify(t)}`).join(`
32
+ `)}\n---`}function m(e){return e.path.split(`.`)[0]||`tokens`}function h(e){let t=new Map;for(let n of e){let e=m(n),r=t.get(e)??[];r.push(n),t.set(e,r)}return t}function g(e){return`<span style={{ display: "inline-block", width: "1.25em", height: "1.25em", borderRadius: "4px", verticalAlign: "middle", border: "1px solid rgba(128, 128, 128, 0.35)", background: ${JSON.stringify(e)} }} />`}function _(e){let t=e.some(e=>e.theme),n=e.some(e=>e.description),r=e.some(e=>e.type===`color`),i=[...r?[`Preview`]:[],`Token`,`Type`,`Value`,`CSS Variable`,...t?[`Theme`]:[],...n?[`Description`]:[]],a=e.toSorted((e,t)=>(e.theme??``).localeCompare(t.theme??``)||e.path.localeCompare(t.path)).map(e=>`| ${[...r?[e.type===`color`?g(e.cssValue):``]:[],`\`${u(e.path)}\``,e.type?`\`${u(String(e.type))}\``:`—`,`\`${u(e.cssValue)}\``,`\`${u(e.cssVar)}\``,...t?[e.theme?u(e.theme):`—`]:[],...n?[e.description?u(e.description):`—`]:[]].join(` | `)} |`);return[`| ${i.join(` | `)} |`,`| ${i.map(()=>`---`).join(` | `)} |`,...a].join(`
33
+ `)}function v(e,t){let n=a(e),r=[...new Set(t.map(e=>e.theme).filter(Boolean))],i=[p({title:n,description:`${n} design tokens for the Razorwind design system.`}),`# ${n}`,`${t.length} token${t.length===1?``:`s`} in the \`${e}\` group.`];if(r.length>1)for(let e of r.toSorted((e,t)=>e.localeCompare(t))){let n=t.filter(t=>t.theme===e);i.push(`## ${a(e)}`,_(n))}else i.push(_(t));return`${i.join(`
34
+
35
+ `)}\n`}function y(e){let{title:t,groups:n,hasComponents:r,componentPages:i=[],iconCount:o=0}=e,s=[...n.values()].reduce((e,t)=>e+t.length,0),c=[...n.keys()].toSorted((e,t)=>e.localeCompare(t)).map(e=>{let t=n.get(e)?.length??0;return`- [${a(e)}](./tokens/${l(e)}.mdx) — ${t} token${t===1?``:`s`}`}),u=[p({title:t,description:`Generated reference documentation for the ${t} design tokens, components, and icons.`}),`# ${t}`,`This documentation is generated from the design system specification. It covers ${s} design token${s===1?``:`s`} across ${n.size} group${n.size===1?``:`s`}.`,`## Design Tokens`,c.length>0?c.join(`
36
+ `):`_No design tokens found._`];if(r||i.length>0){let e=i.map(e=>`- [${e.title}](./registry/${e.slug}.mdx) — ${e.count} item${e.count===1?``:`s`}`);u.push(`## Components`,e.length>0?e.join(`
37
+ `):`_No components found._`)}return o>0&&u.push(`## Icons`,`- [Icons](./icons.mdx) — ${o} icon${o===1?``:`s`}`),`${u.join(`
38
+
39
+ `)}\n`}const b={ui:{slug:`ui`,title:`UI Primitives`},component:{slug:`components`,title:`Components`},page:{slug:`pages`,title:`Pages`},block:{slug:`blocks`,title:`Blocks`}},x={"registry:ui":b.ui,"registry:component":b.component,"registry:page":b.page,"registry:block":b.block};function S(e,t){let n=e[t];return typeof n==`string`?n:void 0}function C(e,t){let n=e[t];return Array.isArray(n)?n.filter(e=>typeof e==`string`):[]}function w(e,t){let n=e[t];return Array.isArray(n)?n.filter(e=>typeof e==`string`):i(n)?Object.entries(n).map(([e,t])=>typeof t==`string`&&t!==`*`?`${e}@${t}`:e):[]}function T(e){let t=C(e,`categories`);if(t.length>0)return t;let n=C(e,`tags`),r=S(e,`category`);return[...r?[r]:[],...n.filter(e=>e!==r)]}function E(e){if(!i(e))return[];let t=Object.values(e).filter(i),n=[];for(let[e,r]of Object.entries(b)){let i=t.filter(t=>t.type===e);i.length>0&&n.push({type:e,slug:r.slug,title:r.title,items:i})}return n}function D(e){let t=(Array.isArray(e.files)?e.files:[]).map(e=>{if(typeof e==`string`)return`| \`${u(e)}\` | — | — |`;if(!i(e))return;let t=S(e,`path`);if(!t)return;let n=S(e,`type`),r=S(e,`target`);return`| \`${u(t)}\` | ${n?`\`${u(n)}\``:`—`} | ${r?`\`${u(r)}\``:`—`} |`}).filter(e=>e!==void 0);return t.length===0?``:[`| Path | Type | Target |`,`| --- | --- | --- |`,...t].join(`
40
+ `)}function O(e){let t=e.split(`.`).pop()?.toLowerCase();return t?t===`md`?`markdown`:t:`tsx`}function k(e){return(Array.isArray(e.usage)?e.usage:[]).map(e=>{if(!i(e))return;let t=S(e,`path`),n=S(e,`content`);if(!n)return;let r=S(e,`name`)??(t?t.split(`/`).pop()?.replace(/\.[^.]+$/,``)??`example`:`example`),o=S(e,`title`)??a(r),s=S(e,`description`),c=S(e,`language`)??(t?O(t):`tsx`),l=[`#### ${o}`];return s&&l.push(s),l.push(`\`\`\`${c}\n${n.trimEnd()}\n\`\`\``),l.join(`
41
+
42
+ `)}).filter(e=>e!==void 0).join(`
43
+
44
+ `)}function A(e){let t=S(e,`name`)??`unknown`,n=S(e,`title`)??a(t),r=S(e,`description`),i=S(e,`author`),o=T(e),s=w(e,`dependencies`),c=w(e,`registryDependencies`),l=[`## ${n}`];r&&l.push(r);let d=[`- **Name:** \`${t}\``,`- **Type:** \`${String(e.type)}\``,...i?[`- **Author:** ${u(i)}`]:[],...o.length>0?[`- **Categories:** ${o.map(e=>`\`${e}\``).join(`, `)}`]:[]];l.push(d.join(`
45
+ `)),s.length>0&&l.push(`### Dependencies`,s.map(e=>`- \`${e}\``).join(`
46
+ `)),c.length>0&&l.push(`### Registry Dependencies`,c.map(e=>`- \`${e}\``).join(`
47
+ `));let f=D(e);f&&l.push(`### Files`,f);let p=k(e);return p&&l.push(`### Usage`,p),l.join(`
48
+
49
+ `)}function j(e){return i(e)?Object.values(e).filter(i).toSorted((e,t)=>(S(e,`name`)??``).localeCompare(S(t,`name`)??``)):[]}function M(e){let t=(Array.isArray(e.files)?e.files:[]).map(e=>{if(typeof e==`string`)return`| \`${u(e)}\` | — | — | — |`;if(!i(e))return;let t=S(e,`path`);if(!t)return;let n=S(e,`type`),r=S(e,`theme`),a=S(e,`target`);return`| \`${u(t)}\` | ${n?`\`${u(n)}\``:`—`} | ${r?`\`${u(r)}\``:`—`} | ${a?`\`${u(a)}\``:`—`} |`}).filter(e=>e!==void 0);return t.length===0?``:[`| Path | Type | Theme | Target |`,`| --- | --- | --- | --- |`,...t].join(`
50
+ `)}function N(e){let t=(Array.isArray(e.files)?e.files:[]).find(e=>i(e)&&S(e,`type`)===`svg`&&typeof e.content==`string`);return!i(t)||typeof t.content!=`string`?``:[`### Preview`,`<div style={{ display: "inline-flex", width: "2rem", height: "2rem" }} dangerouslySetInnerHTML={{ __html: ${JSON.stringify(t.content)} }} />`].join(`
51
+
52
+ `)}function P(e){let t=S(e,`name`)??`unknown`,n=S(e,`title`)??a(t),r=S(e,`description`),i=S(e,`category`),o=C(e,`tags`),s=C(e,`aliases`),c=[`## ${n}`];r&&c.push(r);let l=[`- **Name:** \`${t}\``,...i?[`- **Category:** \`${i}\``]:[],...o.length>0?[`- **Tags:** ${o.map(e=>`\`${e}\``).join(`, `)}`]:[],...s.length>0?[`- **Aliases:** ${s.map(e=>`\`${e}\``).join(`, `)}`]:[]];c.push(l.join(`
53
+ `));let u=N(e);u&&c.push(u);let d=M(e);return d&&c.push(`### Files`,d),c.join(`
54
+
55
+ `)}function F(e){let t=[p({title:`Icons`,description:`Icons available in the Razorwind design system.`}),`# Icons`,`${e.length} icon${e.length===1?``:`s`} in the design system.`];for(let n of e)t.push(P(n));return`${t.join(`
56
+
57
+ `)}\n`}function I(e){let t=[p({title:e.title,description:`${e.title} available in the Razorwind component registry.`}),`# ${e.title}`,`${e.items.length} \`${e.type}\` item${e.items.length===1?``:`s`} in the component registry.`],n=e.items.toSorted((e,t)=>(S(e,`name`)??``).localeCompare(S(t,`name`)??``));for(let e of n)t.push(A(e));return`${t.join(`
58
+
59
+ `)}\n`}function L(e,t,r){return n(e,t,{name:`docgen`},r)}function R(e,t={}){let n=t.outDir??`docs/design-system`,r=t.title??`Design System`,i=c(e.tokens,t),a=h(i),o=t.skipRegistry?[]:E(e.components),u=o.length>0,f=t.skipIcons?[]:j(e.icons),p={[s(n,`index.mdx`)]:L(s(n,`index.mdx`),y({title:r,groups:a,hasComponents:u,componentPages:o.map(e=>({slug:e.slug,title:e.title,count:e.items.length})),iconCount:f.length}),`mdx`)};for(let[e,t]of a){let r=s(n,`tokens`,`${l(e)}.mdx`);p[r]=L(r,v(e,t),`mdx`)}for(let e of o){let t=s(n,`registry`,`${e.slug}.mdx`);p[t]=L(t,I(e),`mdx`)}if(f.length>0){let e=s(n,`icons.mdx`);p[e]=L(e,F(f),`mdx`)}p[s(n,`tokens.json`)]=L(s(n,`tokens.json`),`${JSON.stringify(i,null,2)}\n`,`json`);let m=t.installGuide??d({outDir:n,title:r}),g=s(n,`INSTALL.md`);return p[g]=L(g,m,`markdown`),p}var z=t(e=>({name:`docgen:generate`,generate:async t=>R(t,e??{})}));export{R as a,h as c,y as d,I as f,d as h,E as i,v as l,m,x as n,z as o,_ as p,j as r,f as s,b as t,F as u};
60
+ //# sourceMappingURL=generate-CXRg2yXU.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-CXRg2yXU.mjs","names":[],"sources":[],"mappings":""}
@@ -0,0 +1,59 @@
1
+ const e=require("./rolldown-runtime-BIInC43l.cjs");let t=require("@razorwind/core/plugin"),n=require("@razorwind/core/utils"),r=require("node:path");function i(e,t={}){let r=t.cssVarPrefix??`rw`;return(0,n.flattenTokens)(e,{includeTypes:t.includeTypes,enrichToken:e=>({...e,cssVar:(0,n.toCssVar)(e.path,r)})})}function a(e){return e.trim().replaceAll(/[^\w-]+/g,`-`).replaceAll(/-{2,}/g,`-`).replaceAll(/^-|-$/g,``).toLowerCase()}function o(e){return e.replaceAll(`\\`,`\\\\`).replaceAll(`|`,`\\|`).replaceAll(`<`,`\\<`).replaceAll(`{`,`\\{`).replaceAll(/\r?\n/g,` `)}function s(e){let t=e.title??`Design System`;return`# Installing ${t} Docs
2
+
3
+ Generated by \`@razorwind/docgen\`.
4
+
5
+ ## Files
6
+
7
+ - \`${e.outDir}/index.mdx\` — documentation index
8
+ - \`${e.outDir}/tokens/\` — per-group token pages
9
+ - \`${e.outDir}/tokens.json\` — flattened token manifest
10
+
11
+ ## Setup
12
+
13
+ 1. Wire generated MDX into your docs site (Storybook, Nextra, Docusaurus, etc.).
14
+
15
+ Example for Storybook:
16
+
17
+ \`\`\`ts
18
+ // .storybook/main.ts
19
+ export default {
20
+ stories: ["../${e.outDir}/**/*.mdx"]
21
+ };
22
+ \`\`\`
23
+
24
+ 2. Open \`${e.outDir}/index.mdx\` as the **${t}** entry point.
25
+
26
+ 3. Re-run Razorwind generate when tokens or registry items change.
27
+
28
+ ## Regenerate
29
+
30
+ Docs under \`${e.outDir}/\` are generated output — edit source tokens/components instead of hand-editing MDX.
31
+ `}var c=e.t({COMPONENT_TYPES:()=>g,REGISTRY_ITEM_TYPES:()=>_,default:()=>F,extractIcons:()=>D,extractRegistryItems:()=>S,generateDocs:()=>P,groupTokens:()=>d,renderGroupMdx:()=>m,renderIconsMdx:()=>j,renderIndexMdx:()=>h,renderInstallMd:()=>s,renderRegistryItemsMdx:()=>M,renderTokenTable:()=>p,tokenGroup:()=>u});function l(e){return`---\n${Object.entries(e).map(([e,t])=>`${e}: ${JSON.stringify(t)}`).join(`
32
+ `)}\n---`}function u(e){return e.path.split(`.`)[0]||`tokens`}function d(e){let t=new Map;for(let n of e){let e=u(n),r=t.get(e)??[];r.push(n),t.set(e,r)}return t}function f(e){return`<span style={{ display: "inline-block", width: "1.25em", height: "1.25em", borderRadius: "4px", verticalAlign: "middle", border: "1px solid rgba(128, 128, 128, 0.35)", background: ${JSON.stringify(e)} }} />`}function p(e){let t=e.some(e=>e.theme),n=e.some(e=>e.description),r=e.some(e=>e.type===`color`),i=[...r?[`Preview`]:[],`Token`,`Type`,`Value`,`CSS Variable`,...t?[`Theme`]:[],...n?[`Description`]:[]],a=e.toSorted((e,t)=>(e.theme??``).localeCompare(t.theme??``)||e.path.localeCompare(t.path)).map(e=>`| ${[...r?[e.type===`color`?f(e.cssValue):``]:[],`\`${o(e.path)}\``,e.type?`\`${o(String(e.type))}\``:`—`,`\`${o(e.cssValue)}\``,`\`${o(e.cssVar)}\``,...t?[e.theme?o(e.theme):`—`]:[],...n?[e.description?o(e.description):`—`]:[]].join(` | `)} |`);return[`| ${i.join(` | `)} |`,`| ${i.map(()=>`---`).join(` | `)} |`,...a].join(`
33
+ `)}function m(e,t){let r=(0,n.titleCase)(e),i=[...new Set(t.map(e=>e.theme).filter(Boolean))],a=[l({title:r,description:`${r} design tokens for the Razorwind design system.`}),`# ${r}`,`${t.length} token${t.length===1?``:`s`} in the \`${e}\` group.`];if(i.length>1)for(let e of i.toSorted((e,t)=>e.localeCompare(t))){let r=t.filter(t=>t.theme===e);a.push(`## ${(0,n.titleCase)(e)}`,p(r))}else a.push(p(t));return`${a.join(`
34
+
35
+ `)}\n`}function h(e){let{title:t,groups:r,hasComponents:i,componentPages:o=[],iconCount:s=0}=e,c=[...r.values()].reduce((e,t)=>e+t.length,0),u=[...r.keys()].toSorted((e,t)=>e.localeCompare(t)).map(e=>{let t=r.get(e)?.length??0;return`- [${(0,n.titleCase)(e)}](./tokens/${a(e)}.mdx) — ${t} token${t===1?``:`s`}`}),d=[l({title:t,description:`Generated reference documentation for the ${t} design tokens, components, and icons.`}),`# ${t}`,`This documentation is generated from the design system specification. It covers ${c} design token${c===1?``:`s`} across ${r.size} group${r.size===1?``:`s`}.`,`## Design Tokens`,u.length>0?u.join(`
36
+ `):`_No design tokens found._`];if(i||o.length>0){let e=o.map(e=>`- [${e.title}](./registry/${e.slug}.mdx) — ${e.count} item${e.count===1?``:`s`}`);d.push(`## Components`,e.length>0?e.join(`
37
+ `):`_No components found._`)}return s>0&&d.push(`## Icons`,`- [Icons](./icons.mdx) — ${s} icon${s===1?``:`s`}`),`${d.join(`
38
+
39
+ `)}\n`}const g={ui:{slug:`ui`,title:`UI Primitives`},component:{slug:`components`,title:`Components`},page:{slug:`pages`,title:`Pages`},block:{slug:`blocks`,title:`Blocks`}},_={"registry:ui":g.ui,"registry:component":g.component,"registry:page":g.page,"registry:block":g.block};function v(e,t){let n=e[t];return typeof n==`string`?n:void 0}function y(e,t){let n=e[t];return Array.isArray(n)?n.filter(e=>typeof e==`string`):[]}function b(e,t){let r=e[t];return Array.isArray(r)?r.filter(e=>typeof e==`string`):(0,n.isObject)(r)?Object.entries(r).map(([e,t])=>typeof t==`string`&&t!==`*`?`${e}@${t}`:e):[]}function x(e){let t=y(e,`categories`);if(t.length>0)return t;let n=y(e,`tags`),r=v(e,`category`);return[...r?[r]:[],...n.filter(e=>e!==r)]}function S(e){if(!(0,n.isObject)(e))return[];let t=Object.values(e).filter(n.isObject),r=[];for(let[e,n]of Object.entries(g)){let i=t.filter(t=>t.type===e);i.length>0&&r.push({type:e,slug:n.slug,title:n.title,items:i})}return r}function C(e){let t=(Array.isArray(e.files)?e.files:[]).map(e=>{if(typeof e==`string`)return`| \`${o(e)}\` | — | — |`;if(!(0,n.isObject)(e))return;let t=v(e,`path`);if(!t)return;let r=v(e,`type`),i=v(e,`target`);return`| \`${o(t)}\` | ${r?`\`${o(r)}\``:`—`} | ${i?`\`${o(i)}\``:`—`} |`}).filter(e=>e!==void 0);return t.length===0?``:[`| Path | Type | Target |`,`| --- | --- | --- |`,...t].join(`
40
+ `)}function w(e){let t=e.split(`.`).pop()?.toLowerCase();return t?t===`md`?`markdown`:t:`tsx`}function T(e){return(Array.isArray(e.usage)?e.usage:[]).map(e=>{if(!(0,n.isObject)(e))return;let t=v(e,`path`),r=v(e,`content`);if(!r)return;let i=v(e,`name`)??(t?t.split(`/`).pop()?.replace(/\.[^.]+$/,``)??`example`:`example`),a=v(e,`title`)??(0,n.titleCase)(i),o=v(e,`description`),s=v(e,`language`)??(t?w(t):`tsx`),c=[`#### ${a}`];return o&&c.push(o),c.push(`\`\`\`${s}\n${r.trimEnd()}\n\`\`\``),c.join(`
41
+
42
+ `)}).filter(e=>e!==void 0).join(`
43
+
44
+ `)}function E(e){let t=v(e,`name`)??`unknown`,r=v(e,`title`)??(0,n.titleCase)(t),i=v(e,`description`),a=v(e,`author`),s=x(e),c=b(e,`dependencies`),l=b(e,`registryDependencies`),u=[`## ${r}`];i&&u.push(i);let d=[`- **Name:** \`${t}\``,`- **Type:** \`${String(e.type)}\``,...a?[`- **Author:** ${o(a)}`]:[],...s.length>0?[`- **Categories:** ${s.map(e=>`\`${e}\``).join(`, `)}`]:[]];u.push(d.join(`
45
+ `)),c.length>0&&u.push(`### Dependencies`,c.map(e=>`- \`${e}\``).join(`
46
+ `)),l.length>0&&u.push(`### Registry Dependencies`,l.map(e=>`- \`${e}\``).join(`
47
+ `));let f=C(e);f&&u.push(`### Files`,f);let p=T(e);return p&&u.push(`### Usage`,p),u.join(`
48
+
49
+ `)}function D(e){return(0,n.isObject)(e)?Object.values(e).filter(n.isObject).toSorted((e,t)=>(v(e,`name`)??``).localeCompare(v(t,`name`)??``)):[]}function O(e){let t=(Array.isArray(e.files)?e.files:[]).map(e=>{if(typeof e==`string`)return`| \`${o(e)}\` | — | — | — |`;if(!(0,n.isObject)(e))return;let t=v(e,`path`);if(!t)return;let r=v(e,`type`),i=v(e,`theme`),a=v(e,`target`);return`| \`${o(t)}\` | ${r?`\`${o(r)}\``:`—`} | ${i?`\`${o(i)}\``:`—`} | ${a?`\`${o(a)}\``:`—`} |`}).filter(e=>e!==void 0);return t.length===0?``:[`| Path | Type | Theme | Target |`,`| --- | --- | --- | --- |`,...t].join(`
50
+ `)}function k(e){let t=(Array.isArray(e.files)?e.files:[]).find(e=>(0,n.isObject)(e)&&v(e,`type`)===`svg`&&typeof e.content==`string`);return!(0,n.isObject)(t)||typeof t.content!=`string`?``:[`### Preview`,`<div style={{ display: "inline-flex", width: "2rem", height: "2rem" }} dangerouslySetInnerHTML={{ __html: ${JSON.stringify(t.content)} }} />`].join(`
51
+
52
+ `)}function A(e){let t=v(e,`name`)??`unknown`,r=v(e,`title`)??(0,n.titleCase)(t),i=v(e,`description`),a=v(e,`category`),o=y(e,`tags`),s=y(e,`aliases`),c=[`## ${r}`];i&&c.push(i);let l=[`- **Name:** \`${t}\``,...a?[`- **Category:** \`${a}\``]:[],...o.length>0?[`- **Tags:** ${o.map(e=>`\`${e}\``).join(`, `)}`]:[],...s.length>0?[`- **Aliases:** ${s.map(e=>`\`${e}\``).join(`, `)}`]:[]];c.push(l.join(`
53
+ `));let u=k(e);u&&c.push(u);let d=O(e);return d&&c.push(`### Files`,d),c.join(`
54
+
55
+ `)}function j(e){let t=[l({title:`Icons`,description:`Icons available in the Razorwind design system.`}),`# Icons`,`${e.length} icon${e.length===1?``:`s`} in the design system.`];for(let n of e)t.push(A(n));return`${t.join(`
56
+
57
+ `)}\n`}function M(e){let t=[l({title:e.title,description:`${e.title} available in the Razorwind component registry.`}),`# ${e.title}`,`${e.items.length} \`${e.type}\` item${e.items.length===1?``:`s`} in the component registry.`],n=e.items.toSorted((e,t)=>(v(e,`name`)??``).localeCompare(v(t,`name`)??``));for(let e of n)t.push(E(e));return`${t.join(`
58
+
59
+ `)}\n`}function N(e,t,r){return(0,n.createDocument)(e,t,{name:`docgen`},r)}function P(e,t={}){let n=t.outDir??`docs/design-system`,o=t.title??`Design System`,c=i(e.tokens,t),l=d(c),u=t.skipRegistry?[]:S(e.components),f=u.length>0,p=t.skipIcons?[]:D(e.icons),g={[(0,r.join)(n,`index.mdx`)]:N((0,r.join)(n,`index.mdx`),h({title:o,groups:l,hasComponents:f,componentPages:u.map(e=>({slug:e.slug,title:e.title,count:e.items.length})),iconCount:p.length}),`mdx`)};for(let[e,t]of l){let i=(0,r.join)(n,`tokens`,`${a(e)}.mdx`);g[i]=N(i,m(e,t),`mdx`)}for(let e of u){let t=(0,r.join)(n,`registry`,`${e.slug}.mdx`);g[t]=N(t,M(e),`mdx`)}if(p.length>0){let e=(0,r.join)(n,`icons.mdx`);g[e]=N(e,j(p),`mdx`)}g[(0,r.join)(n,`tokens.json`)]=N((0,r.join)(n,`tokens.json`),`${JSON.stringify(c,null,2)}\n`,`json`);let _=t.installGuide??s({outDir:n,title:o}),v=(0,r.join)(n,`INSTALL.md`);return g[v]=N(v,_,`markdown`),g}var F=(0,t.definePlugin)(e=>({name:`docgen:generate`,generate:async t=>P(t,e??{})}));Object.defineProperty(exports,"a",{enumerable:!0,get:function(){return P}}),Object.defineProperty(exports,"c",{enumerable:!0,get:function(){return d}}),Object.defineProperty(exports,"d",{enumerable:!0,get:function(){return h}}),Object.defineProperty(exports,"f",{enumerable:!0,get:function(){return M}}),Object.defineProperty(exports,"h",{enumerable:!0,get:function(){return s}}),Object.defineProperty(exports,"i",{enumerable:!0,get:function(){return S}}),Object.defineProperty(exports,"l",{enumerable:!0,get:function(){return m}}),Object.defineProperty(exports,"m",{enumerable:!0,get:function(){return u}}),Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return _}}),Object.defineProperty(exports,"o",{enumerable:!0,get:function(){return F}}),Object.defineProperty(exports,"p",{enumerable:!0,get:function(){return p}}),Object.defineProperty(exports,"r",{enumerable:!0,get:function(){return D}}),Object.defineProperty(exports,"s",{enumerable:!0,get:function(){return c}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return g}}),Object.defineProperty(exports,"u",{enumerable:!0,get:function(){return j}});
@@ -0,0 +1,133 @@
1
+ import { n as DocgenGeneratePluginOptions, r as FlatToken } from "./types-Df_Xoq3m.mjs";
2
+ import { GeneratorFunctionResult } from "@power-plant/core";
3
+ import { Schema } from "@razorwind/core/schema";
4
+ //#region src/install.d.ts
5
+ /**
6
+ * Build docgen INSTALL.md for generated MDX documentation.
7
+ */
8
+ declare function renderInstallMd(options: {
9
+ outDir: string;
10
+ title?: string;
11
+ }): string;
12
+ declare namespace generate_d_exports {
13
+ export { COMPONENT_TYPES, ComponentDocType, REGISTRY_ITEM_TYPES, RegistryItemPage, RegistryItemType, _default as default, extractIcons, extractRegistryItems, generateDocs, groupTokens, renderGroupMdx, renderIconsMdx, renderIndexMdx, renderInstallMd, renderRegistryItemsMdx, renderTokenTable, tokenGroup };
14
+ }
15
+ /** Top-level path segment used to group tokens into pages. */
16
+ declare function tokenGroup(token: FlatToken): string;
17
+ /**
18
+ * Group flattened tokens by their top-level path segment.
19
+ */
20
+ declare function groupTokens(tokens: FlatToken[]): Map<string, FlatToken[]>;
21
+ /**
22
+ * Render a markdown token table for a set of flattened tokens.
23
+ */
24
+ declare function renderTokenTable(tokens: FlatToken[]): string;
25
+ /**
26
+ * Render an MDX documentation page for a single token group.
27
+ */
28
+ declare function renderGroupMdx(group: string, tokens: FlatToken[]): string;
29
+ /**
30
+ * Render the documentation index page linking to every generated page.
31
+ */
32
+ declare function renderIndexMdx(input: {
33
+ title: string;
34
+ groups: Map<string, FlatToken[]>;
35
+ hasComponents: boolean;
36
+ componentPages?: {
37
+ slug: string;
38
+ title: string;
39
+ count: number;
40
+ }[];
41
+ iconCount?: number;
42
+ }): string;
43
+ /** Component types that receive a dedicated documentation page. */
44
+ declare const COMPONENT_TYPES: {
45
+ readonly ui: {
46
+ readonly slug: "ui";
47
+ readonly title: "UI Primitives";
48
+ };
49
+ readonly component: {
50
+ readonly slug: "components";
51
+ readonly title: "Components";
52
+ };
53
+ readonly page: {
54
+ readonly slug: "pages";
55
+ readonly title: "Pages";
56
+ };
57
+ readonly block: {
58
+ readonly slug: "blocks";
59
+ readonly title: "Blocks";
60
+ };
61
+ };
62
+ /** @deprecated Use {@link COMPONENT_TYPES}. */
63
+ declare const REGISTRY_ITEM_TYPES: {
64
+ readonly "registry:ui": {
65
+ readonly slug: "ui";
66
+ readonly title: "UI Primitives";
67
+ };
68
+ readonly "registry:component": {
69
+ readonly slug: "components";
70
+ readonly title: "Components";
71
+ };
72
+ readonly "registry:page": {
73
+ readonly slug: "pages";
74
+ readonly title: "Pages";
75
+ };
76
+ readonly "registry:block": {
77
+ readonly slug: "blocks";
78
+ readonly title: "Blocks";
79
+ };
80
+ };
81
+ type ComponentDocType = keyof typeof COMPONENT_TYPES;
82
+ type RegistryItemType = keyof typeof REGISTRY_ITEM_TYPES;
83
+ /** A documented component type together with its matching items. */
84
+ interface RegistryItemPage {
85
+ type: ComponentDocType;
86
+ slug: string;
87
+ title: string;
88
+ items: Record<string, unknown>[];
89
+ }
90
+ /**
91
+ * Extract documented components from `schema.components`, grouped by type.
92
+ *
93
+ * Only `ui`, `component`, `page` and `block` items are documented — one page
94
+ * per type.
95
+ */
96
+ declare function extractRegistryItems(components: unknown): RegistryItemPage[];
97
+ /**
98
+ * Extract documented icons from `schema.icons`.
99
+ */
100
+ declare function extractIcons(icons: unknown): Record<string, unknown>[];
101
+ /**
102
+ * Render an MDX documentation page for all icons.
103
+ */
104
+ declare function renderIconsMdx(icons: Record<string, unknown>[]): string;
105
+ /**
106
+ * Render an MDX documentation page for all components of a single type.
107
+ */
108
+ declare function renderRegistryItemsMdx(page: RegistryItemPage): string;
109
+ /**
110
+ * Generate MDX documentation pages from a Razorwind schema.
111
+ *
112
+ * Produces an index page, one page per top-level token group, component
113
+ * pages grouped by type, icon documentation, and a flattened `tokens.json`
114
+ * manifest.
115
+ */
116
+ declare function generateDocs(spec: Schema, options?: DocgenGeneratePluginOptions): GeneratorFunctionResult<Schema, DocgenGeneratePluginOptions>;
117
+ /**
118
+ * Generate MDX documentation pages from a Razorwind schema.
119
+ *
120
+ * @example
121
+ * ```ts
122
+ * import { defineConfig } from "@razorwind/core";
123
+ * import docgen from "@razorwind/docgen/generate";
124
+ *
125
+ * export default defineConfig({
126
+ * plugins: [docgen()]
127
+ * });
128
+ * ```
129
+ */
130
+ declare const _default: (options?: DocgenGeneratePluginOptions | undefined) => import("@razorwind/core/plugin").Plugin;
131
+ //#endregion
132
+ export { tokenGroup as _, RegistryItemType as a, extractRegistryItems as c, groupTokens as d, renderGroupMdx as f, renderTokenTable as g, renderRegistryItemsMdx as h, RegistryItemPage as i, generateDocs as l, renderIndexMdx as m, ComponentDocType as n, _default as o, renderIconsMdx as p, REGISTRY_ITEM_TYPES as r, extractIcons as s, COMPONENT_TYPES as t, generate_d_exports as u, renderInstallMd as v };
133
+ //# sourceMappingURL=generate-tgHJ7N42.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-tgHJ7N42.d.mts","names":[],"sources":["../src/install.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-ZUMEoeQ7.cjs");exports.COMPONENT_TYPES=e.t,exports.REGISTRY_ITEM_TYPES=e.n,exports.default=e.o,exports.extractIcons=e.r,exports.extractRegistryItems=e.i,exports.generateDocs=e.a,exports.groupTokens=e.c,exports.renderGroupMdx=e.l,exports.renderIconsMdx=e.u,exports.renderIndexMdx=e.d,exports.renderRegistryItemsMdx=e.f,exports.renderTokenTable=e.p,exports.tokenGroup=e.m;
1
+ Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});const e=require("./generate-ZyNHz9gq.cjs");exports.COMPONENT_TYPES=e.t,exports.REGISTRY_ITEM_TYPES=e.n,exports.default=e.o,exports.extractIcons=e.r,exports.extractRegistryItems=e.i,exports.generateDocs=e.a,exports.groupTokens=e.c,exports.renderGroupMdx=e.l,exports.renderIconsMdx=e.u,exports.renderIndexMdx=e.d,exports.renderInstallMd=e.h,exports.renderRegistryItemsMdx=e.f,exports.renderTokenTable=e.p,exports.tokenGroup=e.m;
@@ -1,125 +1,2 @@
1
- import { i as __exportAll, n as DocgenGeneratePluginOptions, r as FlatToken } from "./types-CW5pdxOV.cjs";
2
- import { GeneratorFunctionResult } from "@power-plant/core";
3
- import { Schema } from "@razorwind/core/schema";
4
- declare namespace generate_d_exports {
5
- export { COMPONENT_TYPES, ComponentDocType, REGISTRY_ITEM_TYPES, RegistryItemPage, RegistryItemType, _default as default, extractIcons, extractRegistryItems, generateDocs, groupTokens, renderGroupMdx, renderIconsMdx, renderIndexMdx, renderRegistryItemsMdx, renderTokenTable, tokenGroup };
6
- }
7
- /** Top-level path segment used to group tokens into pages. */
8
- declare function tokenGroup(token: FlatToken): string;
9
- /**
10
- * Group flattened tokens by their top-level path segment.
11
- */
12
- declare function groupTokens(tokens: FlatToken[]): Map<string, FlatToken[]>;
13
- /**
14
- * Render a markdown token table for a set of flattened tokens.
15
- */
16
- declare function renderTokenTable(tokens: FlatToken[]): string;
17
- /**
18
- * Render an MDX documentation page for a single token group.
19
- */
20
- declare function renderGroupMdx(group: string, tokens: FlatToken[]): string;
21
- /**
22
- * Render the documentation index page linking to every generated page.
23
- */
24
- declare function renderIndexMdx(input: {
25
- title: string;
26
- groups: Map<string, FlatToken[]>;
27
- hasComponents: boolean;
28
- componentPages?: {
29
- slug: string;
30
- title: string;
31
- count: number;
32
- }[];
33
- iconCount?: number;
34
- }): string;
35
- /** Component types that receive a dedicated documentation page. */
36
- declare const COMPONENT_TYPES: {
37
- readonly ui: {
38
- readonly slug: "ui";
39
- readonly title: "UI Primitives";
40
- };
41
- readonly component: {
42
- readonly slug: "components";
43
- readonly title: "Components";
44
- };
45
- readonly page: {
46
- readonly slug: "pages";
47
- readonly title: "Pages";
48
- };
49
- readonly block: {
50
- readonly slug: "blocks";
51
- readonly title: "Blocks";
52
- };
53
- };
54
- /** @deprecated Use {@link COMPONENT_TYPES}. */
55
- declare const REGISTRY_ITEM_TYPES: {
56
- readonly "registry:ui": {
57
- readonly slug: "ui";
58
- readonly title: "UI Primitives";
59
- };
60
- readonly "registry:component": {
61
- readonly slug: "components";
62
- readonly title: "Components";
63
- };
64
- readonly "registry:page": {
65
- readonly slug: "pages";
66
- readonly title: "Pages";
67
- };
68
- readonly "registry:block": {
69
- readonly slug: "blocks";
70
- readonly title: "Blocks";
71
- };
72
- };
73
- type ComponentDocType = keyof typeof COMPONENT_TYPES;
74
- type RegistryItemType = keyof typeof REGISTRY_ITEM_TYPES;
75
- /** A documented component type together with its matching items. */
76
- interface RegistryItemPage {
77
- type: ComponentDocType;
78
- slug: string;
79
- title: string;
80
- items: Record<string, unknown>[];
81
- }
82
- /**
83
- * Extract documented components from `schema.components`, grouped by type.
84
- *
85
- * Only `ui`, `component`, `page` and `block` items are documented — one page
86
- * per type.
87
- */
88
- declare function extractRegistryItems(components: unknown): RegistryItemPage[];
89
- /**
90
- * Extract documented icons from `schema.icons`.
91
- */
92
- declare function extractIcons(icons: unknown): Record<string, unknown>[];
93
- /**
94
- * Render an MDX documentation page for all icons.
95
- */
96
- declare function renderIconsMdx(icons: Record<string, unknown>[]): string;
97
- /**
98
- * Render an MDX documentation page for all components of a single type.
99
- */
100
- declare function renderRegistryItemsMdx(page: RegistryItemPage): string;
101
- /**
102
- * Generate MDX documentation pages from a Razorwind schema.
103
- *
104
- * Produces an index page, one page per top-level token group, component
105
- * pages grouped by type, icon documentation, and a flattened `tokens.json`
106
- * manifest.
107
- */
108
- declare function generateDocs(spec: Schema, options?: DocgenGeneratePluginOptions): GeneratorFunctionResult<Schema, DocgenGeneratePluginOptions>;
109
- /**
110
- * Generate MDX documentation pages from a Razorwind schema.
111
- *
112
- * @example
113
- * ```ts
114
- * import { defineConfig } from "@razorwind/core";
115
- * import docgen from "@razorwind/docgen/generate";
116
- *
117
- * export default defineConfig({
118
- * plugins: [docgen()]
119
- * });
120
- * ```
121
- */
122
- declare const _default: (options?: DocgenGeneratePluginOptions | undefined) => import("@razorwind/core/plugin").Plugin;
123
- //#endregion
124
- export { COMPONENT_TYPES, ComponentDocType, REGISTRY_ITEM_TYPES, RegistryItemPage, RegistryItemType, _default as default, extractIcons, extractRegistryItems, generateDocs, groupTokens, renderGroupMdx, renderIconsMdx, renderIndexMdx, renderRegistryItemsMdx, renderTokenTable, generate_d_exports as t, tokenGroup };
125
- //# sourceMappingURL=generate.d.cts.map
1
+ import { _ as tokenGroup, a as RegistryItemType, c as extractRegistryItems, d as groupTokens, f as renderGroupMdx, g as renderTokenTable, h as renderRegistryItemsMdx, i as RegistryItemPage, l as generateDocs, m as renderIndexMdx, n as ComponentDocType, o as _default, p as renderIconsMdx, r as REGISTRY_ITEM_TYPES, s as extractIcons, t as COMPONENT_TYPES, v as renderInstallMd } from "./generate-Bl-XjHVv.cjs";
2
+ export { COMPONENT_TYPES, ComponentDocType, REGISTRY_ITEM_TYPES, RegistryItemPage, RegistryItemType, _default as default, extractIcons, extractRegistryItems, generateDocs, groupTokens, renderGroupMdx, renderIconsMdx, renderIndexMdx, renderInstallMd, renderRegistryItemsMdx, renderTokenTable, tokenGroup };
@@ -1,125 +1,2 @@
1
- import { n as DocgenGeneratePluginOptions, r as FlatToken } from "./types-Br4Cf9rf.mjs";
2
- import { GeneratorFunctionResult } from "@power-plant/core";
3
- import { Schema } from "@razorwind/core/schema";
4
- declare namespace generate_d_exports {
5
- export { COMPONENT_TYPES, ComponentDocType, REGISTRY_ITEM_TYPES, RegistryItemPage, RegistryItemType, _default as default, extractIcons, extractRegistryItems, generateDocs, groupTokens, renderGroupMdx, renderIconsMdx, renderIndexMdx, renderRegistryItemsMdx, renderTokenTable, tokenGroup };
6
- }
7
- /** Top-level path segment used to group tokens into pages. */
8
- declare function tokenGroup(token: FlatToken): string;
9
- /**
10
- * Group flattened tokens by their top-level path segment.
11
- */
12
- declare function groupTokens(tokens: FlatToken[]): Map<string, FlatToken[]>;
13
- /**
14
- * Render a markdown token table for a set of flattened tokens.
15
- */
16
- declare function renderTokenTable(tokens: FlatToken[]): string;
17
- /**
18
- * Render an MDX documentation page for a single token group.
19
- */
20
- declare function renderGroupMdx(group: string, tokens: FlatToken[]): string;
21
- /**
22
- * Render the documentation index page linking to every generated page.
23
- */
24
- declare function renderIndexMdx(input: {
25
- title: string;
26
- groups: Map<string, FlatToken[]>;
27
- hasComponents: boolean;
28
- componentPages?: {
29
- slug: string;
30
- title: string;
31
- count: number;
32
- }[];
33
- iconCount?: number;
34
- }): string;
35
- /** Component types that receive a dedicated documentation page. */
36
- declare const COMPONENT_TYPES: {
37
- readonly ui: {
38
- readonly slug: "ui";
39
- readonly title: "UI Primitives";
40
- };
41
- readonly component: {
42
- readonly slug: "components";
43
- readonly title: "Components";
44
- };
45
- readonly page: {
46
- readonly slug: "pages";
47
- readonly title: "Pages";
48
- };
49
- readonly block: {
50
- readonly slug: "blocks";
51
- readonly title: "Blocks";
52
- };
53
- };
54
- /** @deprecated Use {@link COMPONENT_TYPES}. */
55
- declare const REGISTRY_ITEM_TYPES: {
56
- readonly "registry:ui": {
57
- readonly slug: "ui";
58
- readonly title: "UI Primitives";
59
- };
60
- readonly "registry:component": {
61
- readonly slug: "components";
62
- readonly title: "Components";
63
- };
64
- readonly "registry:page": {
65
- readonly slug: "pages";
66
- readonly title: "Pages";
67
- };
68
- readonly "registry:block": {
69
- readonly slug: "blocks";
70
- readonly title: "Blocks";
71
- };
72
- };
73
- type ComponentDocType = keyof typeof COMPONENT_TYPES;
74
- type RegistryItemType = keyof typeof REGISTRY_ITEM_TYPES;
75
- /** A documented component type together with its matching items. */
76
- interface RegistryItemPage {
77
- type: ComponentDocType;
78
- slug: string;
79
- title: string;
80
- items: Record<string, unknown>[];
81
- }
82
- /**
83
- * Extract documented components from `schema.components`, grouped by type.
84
- *
85
- * Only `ui`, `component`, `page` and `block` items are documented — one page
86
- * per type.
87
- */
88
- declare function extractRegistryItems(components: unknown): RegistryItemPage[];
89
- /**
90
- * Extract documented icons from `schema.icons`.
91
- */
92
- declare function extractIcons(icons: unknown): Record<string, unknown>[];
93
- /**
94
- * Render an MDX documentation page for all icons.
95
- */
96
- declare function renderIconsMdx(icons: Record<string, unknown>[]): string;
97
- /**
98
- * Render an MDX documentation page for all components of a single type.
99
- */
100
- declare function renderRegistryItemsMdx(page: RegistryItemPage): string;
101
- /**
102
- * Generate MDX documentation pages from a Razorwind schema.
103
- *
104
- * Produces an index page, one page per top-level token group, component
105
- * pages grouped by type, icon documentation, and a flattened `tokens.json`
106
- * manifest.
107
- */
108
- declare function generateDocs(spec: Schema, options?: DocgenGeneratePluginOptions): GeneratorFunctionResult<Schema, DocgenGeneratePluginOptions>;
109
- /**
110
- * Generate MDX documentation pages from a Razorwind schema.
111
- *
112
- * @example
113
- * ```ts
114
- * import { defineConfig } from "@razorwind/core";
115
- * import docgen from "@razorwind/docgen/generate";
116
- *
117
- * export default defineConfig({
118
- * plugins: [docgen()]
119
- * });
120
- * ```
121
- */
122
- declare const _default: (options?: DocgenGeneratePluginOptions | undefined) => import("@razorwind/core/plugin").Plugin;
123
- //#endregion
124
- export { COMPONENT_TYPES, ComponentDocType, REGISTRY_ITEM_TYPES, RegistryItemPage, RegistryItemType, _default as default, extractIcons, extractRegistryItems, generateDocs, groupTokens, renderGroupMdx, renderIconsMdx, renderIndexMdx, renderRegistryItemsMdx, renderTokenTable, generate_d_exports as t, tokenGroup };
125
- //# sourceMappingURL=generate.d.mts.map
1
+ import { _ as tokenGroup, a as RegistryItemType, c as extractRegistryItems, d as groupTokens, f as renderGroupMdx, g as renderTokenTable, h as renderRegistryItemsMdx, i as RegistryItemPage, l as generateDocs, m as renderIndexMdx, n as ComponentDocType, o as _default, p as renderIconsMdx, r as REGISTRY_ITEM_TYPES, s as extractIcons, t as COMPONENT_TYPES, v as renderInstallMd } from "./generate-tgHJ7N42.mjs";
2
+ export { COMPONENT_TYPES, ComponentDocType, REGISTRY_ITEM_TYPES, RegistryItemPage, RegistryItemType, _default as default, extractIcons, extractRegistryItems, generateDocs, groupTokens, renderGroupMdx, renderIconsMdx, renderIndexMdx, renderInstallMd, renderRegistryItemsMdx, renderTokenTable, tokenGroup };
package/dist/generate.mjs CHANGED
@@ -1 +1 @@
1
- import{a as e,c as t,d as n,f as r,i,l as a,m as o,n as s,o as c,p as l,r as u,t as d,u as f}from"./generate-DHTLF9jO.mjs";export{d as COMPONENT_TYPES,s as REGISTRY_ITEM_TYPES,c as default,u as extractIcons,i as extractRegistryItems,e as generateDocs,t as groupTokens,a as renderGroupMdx,f as renderIconsMdx,n as renderIndexMdx,r as renderRegistryItemsMdx,l as renderTokenTable,o as tokenGroup};
1
+ import{a as e,c as t,d as n,f as r,h as i,i as a,l as o,m as s,n as c,o as l,p as u,r as d,t as f,u as p}from"./generate-CXRg2yXU.mjs";export{f as COMPONENT_TYPES,c as REGISTRY_ITEM_TYPES,l as default,d as extractIcons,a as extractRegistryItems,e as generateDocs,t as groupTokens,o as renderGroupMdx,p as renderIconsMdx,n as renderIndexMdx,i as renderInstallMd,r as renderRegistryItemsMdx,u as renderTokenTable,s as tokenGroup};
package/dist/index.cjs CHANGED
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./extract.cjs"),t=require("./generate-ZUMEoeQ7.cjs");Object.defineProperty(exports,"extract",{enumerable:!0,get:function(){return e.t}}),Object.defineProperty(exports,"generate",{enumerable:!0,get:function(){return t.s}});
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./extract.cjs"),t=require("./generate-ZyNHz9gq.cjs");Object.defineProperty(exports,"extract",{enumerable:!0,get:function(){return e.t}}),Object.defineProperty(exports,"generate",{enumerable:!0,get:function(){return t.s}});
package/dist/index.d.cts CHANGED
@@ -1,3 +1,3 @@
1
1
  import { t as extract_d_exports } from "./extract.cjs";
2
- import { t as generate_d_exports } from "./generate.cjs";
2
+ import { u as generate_d_exports } from "./generate-Bl-XjHVv.cjs";
3
3
  export { extract_d_exports as extract, generate_d_exports as generate };
package/dist/index.d.mts CHANGED
@@ -1,3 +1,3 @@
1
1
  import { t as extract_d_exports } from "./extract.mjs";
2
- import { t as generate_d_exports } from "./generate.mjs";
2
+ import { u as generate_d_exports } from "./generate-tgHJ7N42.mjs";
3
3
  export { extract_d_exports as extract, generate_d_exports as generate };
package/dist/index.mjs CHANGED
@@ -1 +1 @@
1
- import{t as e}from"./extract.mjs";import{s as t}from"./generate-DHTLF9jO.mjs";export{e as extract,t as generate};
1
+ import{t as e}from"./extract.mjs";import{s as t}from"./generate-CXRg2yXU.mjs";export{e as extract,t as generate};
@@ -43,6 +43,11 @@ interface DocgenGeneratePluginOptions {
43
43
  * @defaultValue `false`
44
44
  */
45
45
  skipIcons?: boolean;
46
+ /**
47
+ * Override body for generated `INSTALL.md`. When omitted, doc site wiring
48
+ * steps are generated for the output directory.
49
+ */
50
+ installGuide?: string;
46
51
  }
47
52
  /**
48
53
  * A flattened design token ready for documentation rendering.
@@ -65,4 +70,4 @@ interface FlatToken {
65
70
  }
66
71
  //#endregion
67
72
  export { DocgenGeneratePluginOptions as n, FlatToken as r, DocgenExtractPluginOptions as t };
68
- //# sourceMappingURL=types-Br4Cf9rf.d.mts.map
73
+ //# sourceMappingURL=types-Df_Xoq3m.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types-Df_Xoq3m.d.mts","names":[],"sources":["../src/types.ts"],"mappings":""}
@@ -44,6 +44,11 @@ interface DocgenGeneratePluginOptions {
44
44
  * @defaultValue `false`
45
45
  */
46
46
  skipIcons?: boolean;
47
+ /**
48
+ * Override body for generated `INSTALL.md`. When omitted, doc site wiring
49
+ * steps are generated for the output directory.
50
+ */
51
+ installGuide?: string;
47
52
  }
48
53
  /**
49
54
  * A flattened design token ready for documentation rendering.
@@ -66,4 +71,4 @@ interface FlatToken {
66
71
  }
67
72
  //#endregion
68
73
  export { __exportAll as i, DocgenGeneratePluginOptions as n, FlatToken as r, DocgenExtractPluginOptions as t };
69
- //# sourceMappingURL=types-CW5pdxOV.d.cts.map
74
+ //# sourceMappingURL=types-tdksapmJ.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types-tdksapmJ.d.cts","names":[],"sources":["../src/types.ts"],"mappings":";;;;;;UAuBiB;;;;UAKA;;;;;;EAMf;;;;;;EAOA;;;;;;EAOA;;;;;EAMA,eAAe;;;;;;EAOf;;;;;;EAOA;;;;;EAMA;;;;;UAMe;;EAEf;;EAEA,OAAO;;EAEP;;EAEA;;EAEA;;EAEA;;EAEA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@razorwind/docgen",
3
- "version": "0.0.24",
3
+ "version": "0.0.26",
4
4
  "type": "module",
5
5
  "description": "Razorwind plugin that creates MDX documentation for the tokens/components defined in the design system.",
6
6
  "repository": {
@@ -97,16 +97,16 @@
97
97
  "types": "./dist/index.d.cts",
98
98
  "typings": "dist/index.d.mts",
99
99
  "dependencies": {
100
- "@power-plant/core": "^0.0.75",
100
+ "@power-plant/core": "^0.0.81",
101
101
  "@power-plant/dtcg-schema": "^0.0.1",
102
- "@razorwind/core": "0.0.28",
102
+ "@razorwind/core": "^0.0.30",
103
103
  "@stryke/type-checks": "^0.6.35"
104
104
  },
105
105
  "devDependencies": {
106
- "@powerlines/plugin-tsdown": "^0.1.589",
106
+ "@powerlines/plugin-tsdown": "^0.1.590",
107
107
  "@types/node": "^25.9.5",
108
108
  "typescript": "^6.0.3"
109
109
  },
110
110
  "publishConfig": { "access": "public" },
111
- "gitHead": "1035cb442a4b46f2373951c74b1c89821749be2b"
111
+ "gitHead": "11a6e827627acf51ef0044e366fd9493f2173ec2"
112
112
  }
@@ -1,30 +0,0 @@
1
- import{t as e}from"./rolldown-runtime-DK3Fl9T5.mjs";import{definePlugin as t}from"@razorwind/core/plugin";import{createDocument as n,formatTokenValue as r,isObject as i,toCssVar as a}from"@razorwind/core/utils";import{join as o}from"node:path";function s(e){return e.trim().replaceAll(/[^\w-]+/g,`-`).replaceAll(/-{2,}/g,`-`).replaceAll(/^-|-$/g,``).toLowerCase()}function c(e){return e.replaceAll(`\\`,`\\\\`).replaceAll(`|`,`\\|`).replaceAll(`<`,`\\<`).replaceAll(`{`,`\\{`).replaceAll(/\r?\n/g,` `)}const l=/^(?:light|dark|dim|high-contrast|hc|default|base|theme)(?:[._-].+)?$/i;function u(e){return`$value`in e||`value`in e||`$ref`in e||`ref`in e}function d(e){if(typeof e.$description==`string`)return e.$description;if(typeof e.description==`string`)return e.description}function f(e,t){return typeof e.$type==`string`?e.$type:typeof e.type==`string`?e.type:t}function p(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 m(e,t,n,o,s,c){if(!i(e))return;let l=f(e,n);if(u(e)){let n=p(e),i=t.join(`.`);c.push({path:i,type:l,value:n,cssValue:r(n,l),cssVar:a(i,s),description:d(e),theme:o});return}for(let[n,r]of Object.entries(e))n.startsWith(`$`)||m(r,[...t,n],l,o,s,c)}function h(e){if(!i(e))return[];let t=Object.keys(e).filter(e=>!e.startsWith(`$`));if(t.length>0&&t.every(e=>l.test(e))){let n=e;return t.map(e=>({id:e,tokens:n[e]}))}return[{id:`default`,tokens:e}]}function g(e,t={}){let n=t.cssVarPrefix??`rw`,r=t.includeTypes?new Set(t.includeTypes):void 0,i=[];for(let t of h(e)){let e=t.id==="default"?void 0:t.id;m(t.tokens,[],void 0,e,n,i)}return r?i.filter(e=>!e.type||r.has(e.type)):i}var _=e({COMPONENT_TYPES:()=>E,REGISTRY_ITEM_TYPES:()=>D,default:()=>G,extractIcons:()=>L,extractRegistryItems:()=>M,generateDocs:()=>W,groupTokens:()=>x,renderGroupMdx:()=>w,renderIconsMdx:()=>V,renderIndexMdx:()=>T,renderRegistryItemsMdx:()=>H,renderTokenTable:()=>C,tokenGroup:()=>b});function v(e){return`---\n${Object.entries(e).map(([e,t])=>`${e}: ${JSON.stringify(t)}`).join(`
2
- `)}\n---`}function y(e){return e.split(/[._-]/).filter(Boolean).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(` `)}function b(e){return e.path.split(`.`)[0]||`tokens`}function x(e){let t=new Map;for(let n of e){let e=b(n),r=t.get(e)??[];r.push(n),t.set(e,r)}return t}function S(e){return`<span style={{ display: "inline-block", width: "1.25em", height: "1.25em", borderRadius: "4px", verticalAlign: "middle", border: "1px solid rgba(128, 128, 128, 0.35)", background: ${JSON.stringify(e)} }} />`}function C(e){let t=e.some(e=>e.theme),n=e.some(e=>e.description),r=e.some(e=>e.type===`color`),i=[...r?[`Preview`]:[],`Token`,`Type`,`Value`,`CSS Variable`,...t?[`Theme`]:[],...n?[`Description`]:[]],a=e.toSorted((e,t)=>(e.theme??``).localeCompare(t.theme??``)||e.path.localeCompare(t.path)).map(e=>`| ${[...r?[e.type===`color`?S(e.cssValue):``]:[],`\`${c(e.path)}\``,e.type?`\`${c(String(e.type))}\``:`—`,`\`${c(e.cssValue)}\``,`\`${c(e.cssVar)}\``,...t?[e.theme?c(e.theme):`—`]:[],...n?[e.description?c(e.description):`—`]:[]].join(` | `)} |`);return[`| ${i.join(` | `)} |`,`| ${i.map(()=>`---`).join(` | `)} |`,...a].join(`
3
- `)}function w(e,t){let n=y(e),r=[...new Set(t.map(e=>e.theme).filter(Boolean))],i=[v({title:n,description:`${n} design tokens for the Razorwind design system.`}),`# ${n}`,`${t.length} token${t.length===1?``:`s`} in the \`${e}\` group.`];if(r.length>1)for(let e of r.toSorted((e,t)=>e.localeCompare(t))){let n=t.filter(t=>t.theme===e);i.push(`## ${y(e)}`,C(n))}else i.push(C(t));return`${i.join(`
4
-
5
- `)}\n`}function T(e){let{title:t,groups:n,hasComponents:r,componentPages:i=[],iconCount:a=0}=e,o=[...n.values()].reduce((e,t)=>e+t.length,0),c=[...n.keys()].toSorted((e,t)=>e.localeCompare(t)).map(e=>{let t=n.get(e)?.length??0;return`- [${y(e)}](./tokens/${s(e)}.mdx) — ${t} token${t===1?``:`s`}`}),l=[v({title:t,description:`Generated reference documentation for the ${t} design tokens, components, and icons.`}),`# ${t}`,`This documentation is generated from the design system specification. It covers ${o} design token${o===1?``:`s`} across ${n.size} group${n.size===1?``:`s`}.`,`## Design Tokens`,c.length>0?c.join(`
6
- `):`_No design tokens found._`];if(r||i.length>0){let e=i.map(e=>`- [${e.title}](./registry/${e.slug}.mdx) — ${e.count} item${e.count===1?``:`s`}`);l.push(`## Components`,e.length>0?e.join(`
7
- `):`_No components found._`)}return a>0&&l.push(`## Icons`,`- [Icons](./icons.mdx) — ${a} icon${a===1?``:`s`}`),`${l.join(`
8
-
9
- `)}\n`}const E={ui:{slug:`ui`,title:`UI Primitives`},component:{slug:`components`,title:`Components`},page:{slug:`pages`,title:`Pages`},block:{slug:`blocks`,title:`Blocks`}},D={"registry:ui":E.ui,"registry:component":E.component,"registry:page":E.page,"registry:block":E.block};function O(e,t){let n=e[t];return typeof n==`string`?n:void 0}function k(e,t){let n=e[t];return Array.isArray(n)?n.filter(e=>typeof e==`string`):[]}function A(e,t){let n=e[t];return Array.isArray(n)?n.filter(e=>typeof e==`string`):i(n)?Object.entries(n).map(([e,t])=>typeof t==`string`&&t!==`*`?`${e}@${t}`:e):[]}function j(e){let t=k(e,`categories`);if(t.length>0)return t;let n=k(e,`tags`),r=O(e,`category`);return[...r?[r]:[],...n.filter(e=>e!==r)]}function M(e){if(!i(e))return[];let t=Object.values(e).filter(i),n=[];for(let[e,r]of Object.entries(E)){let i=t.filter(t=>t.type===e);i.length>0&&n.push({type:e,slug:r.slug,title:r.title,items:i})}return n}function N(e){let t=(Array.isArray(e.files)?e.files:[]).map(e=>{if(typeof e==`string`)return`| \`${c(e)}\` | — | — |`;if(!i(e))return;let t=O(e,`path`);if(!t)return;let n=O(e,`type`),r=O(e,`target`);return`| \`${c(t)}\` | ${n?`\`${c(n)}\``:`—`} | ${r?`\`${c(r)}\``:`—`} |`}).filter(e=>e!==void 0);return t.length===0?``:[`| Path | Type | Target |`,`| --- | --- | --- |`,...t].join(`
10
- `)}function P(e){let t=e.split(`.`).pop()?.toLowerCase();return t?t===`md`?`markdown`:t:`tsx`}function F(e){return(Array.isArray(e.usage)?e.usage:[]).map(e=>{if(!i(e))return;let t=O(e,`path`),n=O(e,`content`);if(!n)return;let r=O(e,`name`)??(t?t.split(`/`).pop()?.replace(/\.[^.]+$/,``)??`example`:`example`),a=O(e,`title`)??y(r),o=O(e,`description`),s=O(e,`language`)??(t?P(t):`tsx`),c=[`#### ${a}`];return o&&c.push(o),c.push(`\`\`\`${s}\n${n.trimEnd()}\n\`\`\``),c.join(`
11
-
12
- `)}).filter(e=>e!==void 0).join(`
13
-
14
- `)}function I(e){let t=O(e,`name`)??`unknown`,n=O(e,`title`)??y(t),r=O(e,`description`),i=O(e,`author`),a=j(e),o=A(e,`dependencies`),s=A(e,`registryDependencies`),l=[`## ${n}`];r&&l.push(r);let u=[`- **Name:** \`${t}\``,`- **Type:** \`${String(e.type)}\``,...i?[`- **Author:** ${c(i)}`]:[],...a.length>0?[`- **Categories:** ${a.map(e=>`\`${e}\``).join(`, `)}`]:[]];l.push(u.join(`
15
- `)),o.length>0&&l.push(`### Dependencies`,o.map(e=>`- \`${e}\``).join(`
16
- `)),s.length>0&&l.push(`### Registry Dependencies`,s.map(e=>`- \`${e}\``).join(`
17
- `));let d=N(e);d&&l.push(`### Files`,d);let f=F(e);return f&&l.push(`### Usage`,f),l.join(`
18
-
19
- `)}function L(e){return i(e)?Object.values(e).filter(i).toSorted((e,t)=>(O(e,`name`)??``).localeCompare(O(t,`name`)??``)):[]}function R(e){let t=(Array.isArray(e.files)?e.files:[]).map(e=>{if(typeof e==`string`)return`| \`${c(e)}\` | — | — | — |`;if(!i(e))return;let t=O(e,`path`);if(!t)return;let n=O(e,`type`),r=O(e,`theme`),a=O(e,`target`);return`| \`${c(t)}\` | ${n?`\`${c(n)}\``:`—`} | ${r?`\`${c(r)}\``:`—`} | ${a?`\`${c(a)}\``:`—`} |`}).filter(e=>e!==void 0);return t.length===0?``:[`| Path | Type | Theme | Target |`,`| --- | --- | --- | --- |`,...t].join(`
20
- `)}function z(e){let t=(Array.isArray(e.files)?e.files:[]).find(e=>i(e)&&O(e,`type`)===`svg`&&typeof e.content==`string`);return!i(t)||typeof t.content!=`string`?``:[`### Preview`,`<div style={{ display: "inline-flex", width: "2rem", height: "2rem" }} dangerouslySetInnerHTML={{ __html: ${JSON.stringify(t.content)} }} />`].join(`
21
-
22
- `)}function B(e){let t=O(e,`name`)??`unknown`,n=O(e,`title`)??y(t),r=O(e,`description`),i=O(e,`category`),a=k(e,`tags`),o=k(e,`aliases`),s=[`## ${n}`];r&&s.push(r);let c=[`- **Name:** \`${t}\``,...i?[`- **Category:** \`${i}\``]:[],...a.length>0?[`- **Tags:** ${a.map(e=>`\`${e}\``).join(`, `)}`]:[],...o.length>0?[`- **Aliases:** ${o.map(e=>`\`${e}\``).join(`, `)}`]:[]];s.push(c.join(`
23
- `));let l=z(e);l&&s.push(l);let u=R(e);return u&&s.push(`### Files`,u),s.join(`
24
-
25
- `)}function V(e){let t=[v({title:`Icons`,description:`Icons available in the Razorwind design system.`}),`# Icons`,`${e.length} icon${e.length===1?``:`s`} in the design system.`];for(let n of e)t.push(B(n));return`${t.join(`
26
-
27
- `)}\n`}function H(e){let t=[v({title:e.title,description:`${e.title} available in the Razorwind component registry.`}),`# ${e.title}`,`${e.items.length} \`${e.type}\` item${e.items.length===1?``:`s`} in the component registry.`],n=e.items.toSorted((e,t)=>(O(e,`name`)??``).localeCompare(O(t,`name`)??``));for(let e of n)t.push(I(e));return`${t.join(`
28
-
29
- `)}\n`}function U(e,t,r){return n(e,t,{name:`docgen`},r)}function W(e,t={}){let n=t.outDir??`docs/design-system`,r=t.title??`Design System`,i=g(e.tokens,t),a=x(i),c=t.skipRegistry?[]:M(e.components),l=c.length>0,u=t.skipIcons?[]:L(e.icons),d={[o(n,`index.mdx`)]:U(o(n,`index.mdx`),T({title:r,groups:a,hasComponents:l,componentPages:c.map(e=>({slug:e.slug,title:e.title,count:e.items.length})),iconCount:u.length}),`mdx`)};for(let[e,t]of a){let r=o(n,`tokens`,`${s(e)}.mdx`);d[r]=U(r,w(e,t),`mdx`)}for(let e of c){let t=o(n,`registry`,`${e.slug}.mdx`);d[t]=U(t,H(e),`mdx`)}if(u.length>0){let e=o(n,`icons.mdx`);d[e]=U(e,V(u),`mdx`)}return d[o(n,`tokens.json`)]=U(o(n,`tokens.json`),`${JSON.stringify(i,null,2)}\n`,`json`),d}var G=t(e=>({name:`docgen:generate`,generate:async t=>W(t,e??{})}));export{W as a,x as c,T as d,H as f,M as i,w as l,b as m,D as n,G as o,C as p,L as r,_ as s,E as t,V as u};
30
- //# sourceMappingURL=generate-DHTLF9jO.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"generate-DHTLF9jO.mjs","names":[],"sources":[],"mappings":""}
@@ -1,29 +0,0 @@
1
- const e=require("./rolldown-runtime-BIInC43l.cjs");let t=require("@razorwind/core/plugin"),n=require("@razorwind/core/utils"),r=require("node:path");function i(e){return e.trim().replaceAll(/[^\w-]+/g,`-`).replaceAll(/-{2,}/g,`-`).replaceAll(/^-|-$/g,``).toLowerCase()}function a(e){return e.replaceAll(`\\`,`\\\\`).replaceAll(`|`,`\\|`).replaceAll(`<`,`\\<`).replaceAll(`{`,`\\{`).replaceAll(/\r?\n/g,` `)}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,o){if(!(0,n.isObject)(e))return;let f=l(e,r);if(s(e)){let r=u(e),s=t.join(`.`);o.push({path:s,type:f,value:r,cssValue:(0,n.formatTokenValue)(r,f),cssVar:(0,n.toCssVar)(s,a),description:c(e),theme:i});return}for(let[n,r]of Object.entries(e))n.startsWith(`$`)||d(r,[...t,n],f,i,a,o)}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.cssVarPrefix??`rw`,r=t.includeTypes?new Set(t.includeTypes):void 0,i=[];for(let t of f(e)){let e=t.id==="default"?void 0:t.id;d(t.tokens,[],void 0,e,n,i)}return r?i.filter(e=>!e.type||r.has(e.type)):i}var m=e.t({COMPONENT_TYPES:()=>C,REGISTRY_ITEM_TYPES:()=>w,default:()=>H,extractIcons:()=>P,extractRegistryItems:()=>k,generateDocs:()=>V,groupTokens:()=>v,renderGroupMdx:()=>x,renderIconsMdx:()=>R,renderIndexMdx:()=>S,renderRegistryItemsMdx:()=>z,renderTokenTable:()=>b,tokenGroup:()=>_});function h(e){return`---\n${Object.entries(e).map(([e,t])=>`${e}: ${JSON.stringify(t)}`).join(`
2
- `)}\n---`}function g(e){return e.split(/[._-]/).filter(Boolean).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(` `)}function _(e){return e.path.split(`.`)[0]||`tokens`}function v(e){let t=new Map;for(let n of e){let e=_(n),r=t.get(e)??[];r.push(n),t.set(e,r)}return t}function y(e){return`<span style={{ display: "inline-block", width: "1.25em", height: "1.25em", borderRadius: "4px", verticalAlign: "middle", border: "1px solid rgba(128, 128, 128, 0.35)", background: ${JSON.stringify(e)} }} />`}function b(e){let t=e.some(e=>e.theme),n=e.some(e=>e.description),r=e.some(e=>e.type===`color`),i=[...r?[`Preview`]:[],`Token`,`Type`,`Value`,`CSS Variable`,...t?[`Theme`]:[],...n?[`Description`]:[]],o=e.toSorted((e,t)=>(e.theme??``).localeCompare(t.theme??``)||e.path.localeCompare(t.path)).map(e=>`| ${[...r?[e.type===`color`?y(e.cssValue):``]:[],`\`${a(e.path)}\``,e.type?`\`${a(String(e.type))}\``:`—`,`\`${a(e.cssValue)}\``,`\`${a(e.cssVar)}\``,...t?[e.theme?a(e.theme):`—`]:[],...n?[e.description?a(e.description):`—`]:[]].join(` | `)} |`);return[`| ${i.join(` | `)} |`,`| ${i.map(()=>`---`).join(` | `)} |`,...o].join(`
3
- `)}function x(e,t){let n=g(e),r=[...new Set(t.map(e=>e.theme).filter(Boolean))],i=[h({title:n,description:`${n} design tokens for the Razorwind design system.`}),`# ${n}`,`${t.length} token${t.length===1?``:`s`} in the \`${e}\` group.`];if(r.length>1)for(let e of r.toSorted((e,t)=>e.localeCompare(t))){let n=t.filter(t=>t.theme===e);i.push(`## ${g(e)}`,b(n))}else i.push(b(t));return`${i.join(`
4
-
5
- `)}\n`}function S(e){let{title:t,groups:n,hasComponents:r,componentPages:a=[],iconCount:o=0}=e,s=[...n.values()].reduce((e,t)=>e+t.length,0),c=[...n.keys()].toSorted((e,t)=>e.localeCompare(t)).map(e=>{let t=n.get(e)?.length??0;return`- [${g(e)}](./tokens/${i(e)}.mdx) — ${t} token${t===1?``:`s`}`}),l=[h({title:t,description:`Generated reference documentation for the ${t} design tokens, components, and icons.`}),`# ${t}`,`This documentation is generated from the design system specification. It covers ${s} design token${s===1?``:`s`} across ${n.size} group${n.size===1?``:`s`}.`,`## Design Tokens`,c.length>0?c.join(`
6
- `):`_No design tokens found._`];if(r||a.length>0){let e=a.map(e=>`- [${e.title}](./registry/${e.slug}.mdx) — ${e.count} item${e.count===1?``:`s`}`);l.push(`## Components`,e.length>0?e.join(`
7
- `):`_No components found._`)}return o>0&&l.push(`## Icons`,`- [Icons](./icons.mdx) — ${o} icon${o===1?``:`s`}`),`${l.join(`
8
-
9
- `)}\n`}const C={ui:{slug:`ui`,title:`UI Primitives`},component:{slug:`components`,title:`Components`},page:{slug:`pages`,title:`Pages`},block:{slug:`blocks`,title:`Blocks`}},w={"registry:ui":C.ui,"registry:component":C.component,"registry:page":C.page,"registry:block":C.block};function T(e,t){let n=e[t];return typeof n==`string`?n:void 0}function E(e,t){let n=e[t];return Array.isArray(n)?n.filter(e=>typeof e==`string`):[]}function D(e,t){let r=e[t];return Array.isArray(r)?r.filter(e=>typeof e==`string`):(0,n.isObject)(r)?Object.entries(r).map(([e,t])=>typeof t==`string`&&t!==`*`?`${e}@${t}`:e):[]}function O(e){let t=E(e,`categories`);if(t.length>0)return t;let n=E(e,`tags`),r=T(e,`category`);return[...r?[r]:[],...n.filter(e=>e!==r)]}function k(e){if(!(0,n.isObject)(e))return[];let t=Object.values(e).filter(n.isObject),r=[];for(let[e,n]of Object.entries(C)){let i=t.filter(t=>t.type===e);i.length>0&&r.push({type:e,slug:n.slug,title:n.title,items:i})}return r}function A(e){let t=(Array.isArray(e.files)?e.files:[]).map(e=>{if(typeof e==`string`)return`| \`${a(e)}\` | — | — |`;if(!(0,n.isObject)(e))return;let t=T(e,`path`);if(!t)return;let r=T(e,`type`),i=T(e,`target`);return`| \`${a(t)}\` | ${r?`\`${a(r)}\``:`—`} | ${i?`\`${a(i)}\``:`—`} |`}).filter(e=>e!==void 0);return t.length===0?``:[`| Path | Type | Target |`,`| --- | --- | --- |`,...t].join(`
10
- `)}function j(e){let t=e.split(`.`).pop()?.toLowerCase();return t?t===`md`?`markdown`:t:`tsx`}function M(e){return(Array.isArray(e.usage)?e.usage:[]).map(e=>{if(!(0,n.isObject)(e))return;let t=T(e,`path`),r=T(e,`content`);if(!r)return;let i=T(e,`name`)??(t?t.split(`/`).pop()?.replace(/\.[^.]+$/,``)??`example`:`example`),a=T(e,`title`)??g(i),o=T(e,`description`),s=T(e,`language`)??(t?j(t):`tsx`),c=[`#### ${a}`];return o&&c.push(o),c.push(`\`\`\`${s}\n${r.trimEnd()}\n\`\`\``),c.join(`
11
-
12
- `)}).filter(e=>e!==void 0).join(`
13
-
14
- `)}function N(e){let t=T(e,`name`)??`unknown`,n=T(e,`title`)??g(t),r=T(e,`description`),i=T(e,`author`),o=O(e),s=D(e,`dependencies`),c=D(e,`registryDependencies`),l=[`## ${n}`];r&&l.push(r);let u=[`- **Name:** \`${t}\``,`- **Type:** \`${String(e.type)}\``,...i?[`- **Author:** ${a(i)}`]:[],...o.length>0?[`- **Categories:** ${o.map(e=>`\`${e}\``).join(`, `)}`]:[]];l.push(u.join(`
15
- `)),s.length>0&&l.push(`### Dependencies`,s.map(e=>`- \`${e}\``).join(`
16
- `)),c.length>0&&l.push(`### Registry Dependencies`,c.map(e=>`- \`${e}\``).join(`
17
- `));let d=A(e);d&&l.push(`### Files`,d);let f=M(e);return f&&l.push(`### Usage`,f),l.join(`
18
-
19
- `)}function P(e){return(0,n.isObject)(e)?Object.values(e).filter(n.isObject).toSorted((e,t)=>(T(e,`name`)??``).localeCompare(T(t,`name`)??``)):[]}function F(e){let t=(Array.isArray(e.files)?e.files:[]).map(e=>{if(typeof e==`string`)return`| \`${a(e)}\` | — | — | — |`;if(!(0,n.isObject)(e))return;let t=T(e,`path`);if(!t)return;let r=T(e,`type`),i=T(e,`theme`),o=T(e,`target`);return`| \`${a(t)}\` | ${r?`\`${a(r)}\``:`—`} | ${i?`\`${a(i)}\``:`—`} | ${o?`\`${a(o)}\``:`—`} |`}).filter(e=>e!==void 0);return t.length===0?``:[`| Path | Type | Theme | Target |`,`| --- | --- | --- | --- |`,...t].join(`
20
- `)}function I(e){let t=(Array.isArray(e.files)?e.files:[]).find(e=>(0,n.isObject)(e)&&T(e,`type`)===`svg`&&typeof e.content==`string`);return!(0,n.isObject)(t)||typeof t.content!=`string`?``:[`### Preview`,`<div style={{ display: "inline-flex", width: "2rem", height: "2rem" }} dangerouslySetInnerHTML={{ __html: ${JSON.stringify(t.content)} }} />`].join(`
21
-
22
- `)}function L(e){let t=T(e,`name`)??`unknown`,n=T(e,`title`)??g(t),r=T(e,`description`),i=T(e,`category`),a=E(e,`tags`),o=E(e,`aliases`),s=[`## ${n}`];r&&s.push(r);let c=[`- **Name:** \`${t}\``,...i?[`- **Category:** \`${i}\``]:[],...a.length>0?[`- **Tags:** ${a.map(e=>`\`${e}\``).join(`, `)}`]:[],...o.length>0?[`- **Aliases:** ${o.map(e=>`\`${e}\``).join(`, `)}`]:[]];s.push(c.join(`
23
- `));let l=I(e);l&&s.push(l);let u=F(e);return u&&s.push(`### Files`,u),s.join(`
24
-
25
- `)}function R(e){let t=[h({title:`Icons`,description:`Icons available in the Razorwind design system.`}),`# Icons`,`${e.length} icon${e.length===1?``:`s`} in the design system.`];for(let n of e)t.push(L(n));return`${t.join(`
26
-
27
- `)}\n`}function z(e){let t=[h({title:e.title,description:`${e.title} available in the Razorwind component registry.`}),`# ${e.title}`,`${e.items.length} \`${e.type}\` item${e.items.length===1?``:`s`} in the component registry.`],n=e.items.toSorted((e,t)=>(T(e,`name`)??``).localeCompare(T(t,`name`)??``));for(let e of n)t.push(N(e));return`${t.join(`
28
-
29
- `)}\n`}function B(e,t,r){return(0,n.createDocument)(e,t,{name:`docgen`},r)}function V(e,t={}){let n=t.outDir??`docs/design-system`,a=t.title??`Design System`,o=p(e.tokens,t),s=v(o),c=t.skipRegistry?[]:k(e.components),l=c.length>0,u=t.skipIcons?[]:P(e.icons),d={[(0,r.join)(n,`index.mdx`)]:B((0,r.join)(n,`index.mdx`),S({title:a,groups:s,hasComponents:l,componentPages:c.map(e=>({slug:e.slug,title:e.title,count:e.items.length})),iconCount:u.length}),`mdx`)};for(let[e,t]of s){let a=(0,r.join)(n,`tokens`,`${i(e)}.mdx`);d[a]=B(a,x(e,t),`mdx`)}for(let e of c){let t=(0,r.join)(n,`registry`,`${e.slug}.mdx`);d[t]=B(t,z(e),`mdx`)}if(u.length>0){let e=(0,r.join)(n,`icons.mdx`);d[e]=B(e,R(u),`mdx`)}return d[(0,r.join)(n,`tokens.json`)]=B((0,r.join)(n,`tokens.json`),`${JSON.stringify(o,null,2)}\n`,`json`),d}var H=(0,t.definePlugin)(e=>({name:`docgen:generate`,generate:async t=>V(t,e??{})}));Object.defineProperty(exports,"a",{enumerable:!0,get:function(){return V}}),Object.defineProperty(exports,"c",{enumerable:!0,get:function(){return v}}),Object.defineProperty(exports,"d",{enumerable:!0,get:function(){return S}}),Object.defineProperty(exports,"f",{enumerable:!0,get:function(){return z}}),Object.defineProperty(exports,"i",{enumerable:!0,get:function(){return k}}),Object.defineProperty(exports,"l",{enumerable:!0,get:function(){return x}}),Object.defineProperty(exports,"m",{enumerable:!0,get:function(){return _}}),Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return w}}),Object.defineProperty(exports,"o",{enumerable:!0,get:function(){return H}}),Object.defineProperty(exports,"p",{enumerable:!0,get:function(){return b}}),Object.defineProperty(exports,"r",{enumerable:!0,get:function(){return P}}),Object.defineProperty(exports,"s",{enumerable:!0,get:function(){return m}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return C}}),Object.defineProperty(exports,"u",{enumerable:!0,get:function(){return R}});
@@ -1 +0,0 @@
1
- {"version":3,"file":"generate.d.cts","names":[],"sources":["../src/generate.ts"],"mappings":";;;;;;;iBA4CgB,WAAW,OAAO;;;;iBAOlB,YAAY,QAAQ,cAAc,YAAY;;;;iBAoB9C,iBAAiB,QAAQ;;;;iBAiDzB,eAAe,eAAe,QAAQ;;;;iBA8BtC,eAAe;EAC7B;EACA,QAAQ,YAAY;EACpB;EACA;IAAmB;IAAc;IAAe;;EAChD;;;cA2DW;;;;;;;;;;;;;;;;;;;cAQA;;;;;;;;;;;;;;;;;;KAOD,gCAAgC;KAChC,gCAAgC;;UAG3B;EACf,MAAM;EACN;EACA;EACA,OAAO;;;;;;;;iBA4DO,qBAAqB,sBAAsB;;;;iBA4K3C,aAAa,iBAAiB;;;;iBA8G9B,eAAe,OAAO;;;;iBAoBtB,uBAAuB,MAAM;;;;;;;;iBAyC7B,aACd,MAAM,QACN,UAAS,8BACR,wBAAwB,QAAQ"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"generate.d.mts","names":[],"sources":["../src/generate.ts"],"mappings":""}
@@ -1 +0,0 @@
1
- {"version":3,"file":"types-Br4Cf9rf.d.mts","names":[],"sources":["../src/types.ts"],"mappings":""}
@@ -1 +0,0 @@
1
- {"version":3,"file":"types-CW5pdxOV.d.cts","names":[],"sources":["../src/types.ts"],"mappings":";;;;;;UAuBiB;;;;UAKA;;;;;;EAMf;;;;;;EAOA;;;;;;EAOA;;;;;EAMA,eAAe;;;;;;EAOf;;;;;;EAOA;;;;;UAMe;;EAEf;;EAEA,OAAO;;EAEP;;EAEA;;EAEA;;EAEA;;EAEA"}