@aumnidigital/bms 0.1.1 → 0.1.2
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/README.md +27 -1
- package/dist/index.cjs +6 -3
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +6 -3
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -88,6 +88,8 @@ This is a paragraph with **bold** and *italic* text.
|
|
|
88
88
|
|
|
89
89
|
### 1. Tailwind CSS Configuration
|
|
90
90
|
|
|
91
|
+
#### For Tailwind v3 (with tailwind.config.js)
|
|
92
|
+
|
|
91
93
|
Add the package to your Tailwind `content` array:
|
|
92
94
|
|
|
93
95
|
```js
|
|
@@ -97,10 +99,34 @@ module.exports = {
|
|
|
97
99
|
'./src/**/*.{js,ts,jsx,tsx}',
|
|
98
100
|
'./node_modules/@aumnidigital/bms/dist/**/*.{js,cjs}',
|
|
99
101
|
],
|
|
100
|
-
|
|
102
|
+
theme: {
|
|
103
|
+
extend: {},
|
|
104
|
+
},
|
|
105
|
+
plugins: [],
|
|
101
106
|
};
|
|
102
107
|
```
|
|
103
108
|
|
|
109
|
+
#### For Tailwind v4 (with CSS imports) - Vite
|
|
110
|
+
|
|
111
|
+
In your main CSS file:
|
|
112
|
+
|
|
113
|
+
```css
|
|
114
|
+
@import "tailwindcss";
|
|
115
|
+
|
|
116
|
+
/* Include the package components */
|
|
117
|
+
@source "../node_modules/@aumnidigital/bms/dist/**/*.{js,cjs}";
|
|
118
|
+
@source "./src/**/*.{js,ts,jsx,tsx}";
|
|
119
|
+
|
|
120
|
+
/* CSS variables for shadcn */
|
|
121
|
+
@layer base {
|
|
122
|
+
:root {
|
|
123
|
+
/* ... CSS variables here ... */
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
**Note for Vite users**: If `@source` doesn't work, use a `tailwind.config.js` file instead with the content array shown above.
|
|
129
|
+
|
|
104
130
|
### 2. CSS Variables
|
|
105
131
|
|
|
106
132
|
Add these CSS variables to your global stylesheet (required for shadcn components):
|
package/dist/index.cjs
CHANGED
|
@@ -166,6 +166,7 @@ function MDXRenderer({
|
|
|
166
166
|
);
|
|
167
167
|
const [error, setError] = React__namespace.useState(null);
|
|
168
168
|
const [isLoading, setIsLoading] = React__namespace.useState(true);
|
|
169
|
+
const memoizedOptions = React__namespace.useMemo(() => options, [JSON.stringify(options)]);
|
|
169
170
|
React__namespace.useEffect(() => {
|
|
170
171
|
let isCancelled = false;
|
|
171
172
|
async function compileMDX() {
|
|
@@ -175,7 +176,7 @@ function MDXRenderer({
|
|
|
175
176
|
const compiled = await mdx.compile(content, {
|
|
176
177
|
outputFormat: "function-body",
|
|
177
178
|
remarkPlugins: [remarkGfm__default.default],
|
|
178
|
-
...
|
|
179
|
+
...memoizedOptions
|
|
179
180
|
});
|
|
180
181
|
const { default: Content2 } = await mdx.run(String(compiled), {
|
|
181
182
|
...runtime__namespace,
|
|
@@ -188,7 +189,9 @@ function MDXRenderer({
|
|
|
188
189
|
if (!isCancelled) {
|
|
189
190
|
const error2 = err instanceof Error ? err : new Error(String(err));
|
|
190
191
|
setError(error2);
|
|
191
|
-
onError
|
|
192
|
+
if (onError) {
|
|
193
|
+
onError(error2);
|
|
194
|
+
}
|
|
192
195
|
}
|
|
193
196
|
} finally {
|
|
194
197
|
if (!isCancelled) {
|
|
@@ -202,7 +205,7 @@ function MDXRenderer({
|
|
|
202
205
|
return () => {
|
|
203
206
|
isCancelled = true;
|
|
204
207
|
};
|
|
205
|
-
}, [content,
|
|
208
|
+
}, [content, memoizedOptions]);
|
|
206
209
|
const mergedComponents = React__namespace.useMemo(
|
|
207
210
|
() => ({ ...defaultComponents, ...customComponents }),
|
|
208
211
|
[customComponents]
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/renderer/MDXRenderer.tsx"],"names":["CTAButtonGroup","CTASection","Button","Card","CardHeader","CardTitle","CardDescription","CardContent","CardFooter","Alert","AlertTitle","AlertDescription","Badge","Accordion","AccordionContent","AccordionItem","AccordionTrigger","Tabs","TabsContent","TabsList","TabsTrigger","Separator","Avatar","AvatarFallback","AvatarImage","Breadcrumb","BreadcrumbItem","BreadcrumbLink","BreadcrumbList","BreadcrumbPage","BreadcrumbSeparator","Checkbox","Progress","Skeleton","Table","TableBody","TableCaption","TableCell","TableHead","TableHeader","TableRow","Tooltip","TooltipContent","TooltipProvider","TooltipTrigger","AspectRatio","jsx","React","compile","remarkGfm","Content","run","runtime","error","jsxs"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4DA,IAAM,iBAAA,GAAoB;AAAA;AAAA,kBAExBA,gCAAA;AAAA,cACAC,4BAAA;AAAA;AAAA,UAGAC,wBAAA;AAAA,QACAC,sBAAA;AAAA,cACAC,4BAAA;AAAA,aACAC,2BAAA;AAAA,mBACAC,iCAAA;AAAA,eACAC,6BAAA;AAAA,cACAC,4BAAA;AAAA,SACAC,uBAAA;AAAA,cACAC,4BAAA;AAAA,oBACAC,kCAAA;AAAA,SACAC,uBAAA;AAAA,aACAC,2BAAA;AAAA,oBACAC,kCAAA;AAAA,iBACAC,+BAAA;AAAA,oBACAC,kCAAA;AAAA,QACAC,sBAAA;AAAA,eACAC,6BAAA;AAAA,YACAC,0BAAA;AAAA,eACAC,6BAAA;AAAA,aACAC,2BAAA;AAAA,UACAC,wBAAA;AAAA,kBACAC,gCAAA;AAAA,eACAC,6BAAA;AAAA,cACAC,4BAAA;AAAA,kBACAC,gCAAA;AAAA,kBACAC,gCAAA;AAAA,kBACAC,gCAAA;AAAA,kBACAC,gCAAA;AAAA,uBACAC,qCAAA;AAAA,YACAC,0BAAA;AAAA,YACAC,0BAAA;AAAA,YACAC,0BAAA;AAAA,SACAC,uBAAA;AAAA,aACAC,2BAAA;AAAA,gBACAC,8BAAA;AAAA,aACAC,2BAAA;AAAA,aACAC,2BAAA;AAAA,eACAC,6BAAA;AAAA,YACAC,0BAAA;AAAA,WACAC,yBAAA;AAAA,kBACAC,gCAAA;AAAA,mBACAC,iCAAA;AAAA,kBACAC,gCAAA;AAAA,eACAC,6BAAA;AAAA;AAAA,EAGA,EAAA,EAAI,CAAC,KAAA,qBACHC,WAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,gEAAA;AAAA,MACT,GAAG;AAAA;AAAA,GACN;AAAA,EAEF,EAAA,EAAI,CAAC,KAAA,qBACHA,WAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,4EAAA;AAAA,MACT,GAAG;AAAA;AAAA,GACN;AAAA,EAEF,EAAA,EAAI,CAAC,KAAA,qBACHA,WAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,mDAAA;AAAA,MACT,GAAG;AAAA;AAAA,GACN;AAAA,EAEF,EAAA,EAAI,CAAC,KAAA,qBACHA,WAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,kDAAA;AAAA,MACT,GAAG;AAAA;AAAA,GACN;AAAA,EAEF,CAAA,EAAG,CAAC,KAAA,qBACFA,WAAA,CAAC,OAAE,SAAA,EAAU,sCAAA,EAAwC,GAAG,KAAA,EAAO,CAAA;AAAA,EAEjE,CAAA,EAAG,CAAC,KAAA,qBACFA,WAAA;AAAA,IAAC,GAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,uDAAA;AAAA,MACT,GAAG;AAAA;AAAA,GACN;AAAA,EAEF,EAAA,EAAI,CAAC,KAAA,qBACHA,WAAA,CAAC,QAAG,SAAA,EAAU,iCAAA,EAAmC,GAAG,KAAA,EAAO,CAAA;AAAA,EAE7D,EAAA,EAAI,CAAC,KAAA,qBACHA,WAAA,CAAC,QAAG,SAAA,EAAU,oCAAA,EAAsC,GAAG,KAAA,EAAO,CAAA;AAAA,EAEhE,EAAA,EAAI,CAAC,KAAA,qBAAeA,WAAA,CAAC,QAAG,SAAA,EAAU,MAAA,EAAQ,GAAG,KAAA,EAAO,CAAA;AAAA,EACpD,UAAA,EAAY,CAAC,KAAA,qBACXA,WAAA,CAAC,gBAAW,SAAA,EAAU,6BAAA,EAA+B,GAAG,KAAA,EAAO,CAAA;AAAA,EAEjE,IAAA,EAAM,CAAC,KAAA,qBACLA,WAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,mFAAA;AAAA,MACT,GAAG;AAAA;AAAA,GACN;AAAA,EAEF,GAAA,EAAK,CAAC,KAAA,qBACJA,WAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,0DAAA;AAAA,MACT,GAAG;AAAA;AAAA,GACN;AAAA,EAEF,EAAA,EAAI,CAAC,KAAA,qBAAeA,WAAA,CAAC,QAAG,SAAA,EAAU,cAAA,EAAgB,GAAG,KAAA,EAAO,CAAA;AAAA,EAC5D,KAAA,EAAO,CAAC,KAAA,qBACNA,WAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6BAAA,EACb,QAAA,kBAAAA,WAAA,CAAC,OAAA,EAAA,EAAM,SAAA,EAAU,QAAA,EAAU,GAAG,OAAO,CAAA,EACvC,CAAA;AAAA,EAEF,EAAA,EAAI,CAAC,KAAA,qBACHA,WAAA,CAAC,QAAG,SAAA,EAAU,gCAAA,EAAkC,GAAG,KAAA,EAAO,CAAA;AAAA,EAE5D,EAAA,EAAI,CAAC,KAAA,qBACHA,WAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,gGAAA;AAAA,MACT,GAAG;AAAA;AAAA,GACN;AAAA,EAEF,EAAA,EAAI,CAAC,KAAA,qBACHA,WAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,sFAAA;AAAA,MACT,GAAG;AAAA;AAAA;AAGV,CAAA;AAEO,SAAS,WAAA,CAAY;AAAA,EAC1B,OAAA;AAAA,EACA,UAAA,EAAY,mBAAmB,EAAC;AAAA,EAChC,QAAQ,EAAC;AAAA,EACT,UAAU,EAAC;AAAA,EACX,QAAA;AAAA,EACA;AACF,CAAA,EAAqB;AACnB,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAUC,gBAAA,CAAA,QAAA;AAAA,IACxC;AAAA,GACF;AACA,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAUA,0BAAuB,IAAI,CAAA;AAC3D,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAUA,0BAAS,IAAI,CAAA;AAErD,EAAMA,2BAAU,MAAM;AACpB,IAAA,IAAI,WAAA,GAAc,KAAA;AAElB,IAAA,eAAe,UAAA,GAAa;AAC1B,MAAA,IAAI;AACF,QAAA,YAAA,CAAa,IAAI,CAAA;AACjB,QAAA,QAAA,CAAS,IAAI,CAAA;AAGb,QAAA,MAAM,QAAA,GAAW,MAAMC,WAAA,CAAQ,OAAA,EAAS;AAAA,UACtC,YAAA,EAAc,eAAA;AAAA,UACd,aAAA,EAAe,CAACC,0BAAS,CAAA;AAAA,UACzB,GAAG;AAAA,SACJ,CAAA;AAGD,QAAA,MAAM,EAAE,SAASC,QAAAA,EAAQ,GAAI,MAAMC,OAAA,CAAI,MAAA,CAAO,QAAQ,CAAA,EAAG;AAAA,UACvD,GAAGC,kBAAA;AAAA,UACH,SAAS;AAAY,SACtB,CAAA;AAED,QAAA,IAAI,CAAC,WAAA,EAAa;AAChB,UAAA,aAAA,CAAc,MAAMF,QAAO,CAAA;AAAA,QAC7B;AAAA,MACF,SAAS,GAAA,EAAK;AACZ,QAAA,IAAI,CAAC,WAAA,EAAa;AAChB,UAAA,MAAMG,MAAAA,GAAQ,eAAe,KAAA,GAAQ,GAAA,GAAM,IAAI,KAAA,CAAM,MAAA,CAAO,GAAG,CAAC,CAAA;AAChE,UAAA,QAAA,CAASA,MAAK,CAAA;AACd,UAAA,OAAA,GAAUA,MAAK,CAAA;AAAA,QACjB;AAAA,MACF,CAAA,SAAE;AACA,QAAA,IAAI,CAAC,WAAA,EAAa;AAChB,UAAA,YAAA,CAAa,KAAK,CAAA;AAAA,QACpB;AAAA,MACF;AAAA,IACF;AAEA,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,UAAA,EAAW;AAAA,IACb;AAEA,IAAA,OAAO,MAAM;AACX,MAAA,WAAA,GAAc,IAAA;AAAA,IAChB,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,OAAA,EAAS,OAAA,EAAS,OAAO,CAAC,CAAA;AAE9B,EAAA,MAAM,gBAAA,GAAyBN,gBAAA,CAAA,OAAA;AAAA,IAC7B,OAAO,EAAE,GAAG,iBAAA,EAAmB,GAAG,gBAAA,EAAiB,CAAA;AAAA,IACnD,CAAC,gBAAgB;AAAA,GACnB;AAGA,EAAA,IAAI,SAAA,EAAW;AACb,IAAA,OACE,QAAA,oBACEO,YAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACb,QAAA,EAAA;AAAA,sBAAAR,WAAA,CAAC,KAAA,EAAA,EAAI,WAAU,4BAAA,EAA6B,CAAA;AAAA,sBAC5CA,WAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6BAAA,EAA8B,CAAA;AAAA,sBAC7CA,WAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4BAAA,EAA6B;AAAA,KAAA,EAC9C,CAAA;AAAA,EAGN;AAGA,EAAA,IAAI,KAAA,EAAO;AACT,IAAA,uBACEQ,YAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oEAAA,EACb,QAAA,EAAA;AAAA,sBAAAR,WAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,qCAAA,EAAsC,QAAA,EAAA,uBAAA,EAEpD,CAAA;AAAA,sBACAA,WAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iEAAA,EACZ,gBAAM,OAAA,EACT;AAAA,KAAA,EACF,CAAA;AAAA,EAEJ;AAGA,EAAA,IAAI,CAAC,UAAA,EAAY;AACf,IAAA,OAAO,IAAA;AAAA,EACT;AAGA,EAAA,MAAM,OAAA,GAAU,UAAA;AAChB,EAAA,uBAAOA,WAAA,CAAC,OAAA,EAAA,EAAQ,UAAA,EAAY,gBAAA,EAAmB,GAAG,KAAA,EAAO,CAAA;AAC3D","file":"index.cjs","sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport { compile, run } from \"@mdx-js/mdx\";\nimport * as runtime from \"react/jsx-runtime\";\nimport remarkGfm from \"remark-gfm\";\nimport type { MDXRendererProps } from \"./types\";\n\n// Import all components for MDX usage\nimport { Button } from \"@/components/ui/button\";\nimport {\n Card,\n CardHeader,\n CardTitle,\n CardDescription,\n CardContent,\n CardFooter,\n} from \"@/components/ui/card\";\nimport { Alert, AlertTitle, AlertDescription } from \"@/components/ui/alert\";\nimport { Badge } from \"@/components/ui/badge\";\nimport {\n Accordion,\n AccordionContent,\n AccordionItem,\n AccordionTrigger,\n} from \"@/components/ui/accordion\";\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from \"@/components/ui/tabs\";\nimport { Separator } from \"@/components/ui/separator\";\nimport { Avatar, AvatarFallback, AvatarImage } from \"@/components/ui/avatar\";\nimport {\n Breadcrumb,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbList,\n BreadcrumbPage,\n BreadcrumbSeparator,\n} from \"@/components/ui/breadcrumb\";\nimport { Checkbox } from \"@/components/ui/checkbox\";\nimport { Progress } from \"@/components/ui/progress\";\nimport { Skeleton } from \"@/components/ui/skeleton\";\nimport {\n Table,\n TableBody,\n TableCaption,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from \"@/components/ui/table\";\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"@/components/ui/tooltip\";\nimport { AspectRatio } from \"@/components/ui/aspect-ratio\";\nimport { CTAButtonGroup } from \"@/components/custom/cta-buttons\";\nimport { CTASection } from \"@/components/custom/cta-section\";\n\n// Default components available in MDX\nconst defaultComponents = {\n // Custom components\n CTAButtonGroup,\n CTASection,\n\n // UI Components\n Button,\n Card,\n CardHeader,\n CardTitle,\n CardDescription,\n CardContent,\n CardFooter,\n Alert,\n AlertTitle,\n AlertDescription,\n Badge,\n Accordion,\n AccordionContent,\n AccordionItem,\n AccordionTrigger,\n Tabs,\n TabsContent,\n TabsList,\n TabsTrigger,\n Separator,\n Avatar,\n AvatarFallback,\n AvatarImage,\n Breadcrumb,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbList,\n BreadcrumbPage,\n BreadcrumbSeparator,\n Checkbox,\n Progress,\n Skeleton,\n Table,\n TableBody,\n TableCaption,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n AspectRatio,\n\n // HTML element overrides for better typography\n h1: (props: any) => (\n <h1\n className=\"scroll-m-20 text-4xl font-extrabold tracking-tight lg:text-5xl\"\n {...props}\n />\n ),\n h2: (props: any) => (\n <h2\n className=\"scroll-m-20 border-b pb-2 text-3xl font-semibold tracking-tight first:mt-0\"\n {...props}\n />\n ),\n h3: (props: any) => (\n <h3\n className=\"scroll-m-20 text-2xl font-semibold tracking-tight\"\n {...props}\n />\n ),\n h4: (props: any) => (\n <h4\n className=\"scroll-m-20 text-xl font-semibold tracking-tight\"\n {...props}\n />\n ),\n p: (props: any) => (\n <p className=\"leading-7 [&:not(:first-child)]:mt-6\" {...props} />\n ),\n a: (props: any) => (\n <a\n className=\"font-medium text-primary underline underline-offset-4\"\n {...props}\n />\n ),\n ul: (props: any) => (\n <ul className=\"my-6 ml-6 list-disc [&>li]:mt-2\" {...props} />\n ),\n ol: (props: any) => (\n <ol className=\"my-6 ml-6 list-decimal [&>li]:mt-2\" {...props} />\n ),\n li: (props: any) => <li className=\"mt-2\" {...props} />,\n blockquote: (props: any) => (\n <blockquote className=\"mt-6 border-l-2 pl-6 italic\" {...props} />\n ),\n code: (props: any) => (\n <code\n className=\"relative rounded bg-muted px-[0.3rem] py-[0.2rem] font-mono text-sm font-semibold\"\n {...props}\n />\n ),\n pre: (props: any) => (\n <pre\n className=\"mb-4 mt-6 overflow-x-auto rounded-lg border bg-muted p-4\"\n {...props}\n />\n ),\n hr: (props: any) => <hr className=\"my-4 md:my-8\" {...props} />,\n table: (props: any) => (\n <div className=\"my-6 w-full overflow-y-auto\">\n <table className=\"w-full\" {...props} />\n </div>\n ),\n tr: (props: any) => (\n <tr className=\"m-0 border-t p-0 even:bg-muted\" {...props} />\n ),\n th: (props: any) => (\n <th\n className=\"border px-4 py-2 text-left font-bold [&[align=center]]:text-center [&[align=right]]:text-right\"\n {...props}\n />\n ),\n td: (props: any) => (\n <td\n className=\"border px-4 py-2 text-left [&[align=center]]:text-center [&[align=right]]:text-right\"\n {...props}\n />\n ),\n};\n\nexport function MDXRenderer({\n content,\n components: customComponents = {},\n scope = {},\n options = {},\n fallback,\n onError,\n}: MDXRendererProps) {\n const [MDXContent, setMDXContent] = React.useState<React.ComponentType | null>(\n null\n );\n const [error, setError] = React.useState<Error | null>(null);\n const [isLoading, setIsLoading] = React.useState(true);\n\n React.useEffect(() => {\n let isCancelled = false;\n\n async function compileMDX() {\n try {\n setIsLoading(true);\n setError(null);\n\n // Compile MDX content\n const compiled = await compile(content, {\n outputFormat: \"function-body\",\n remarkPlugins: [remarkGfm],\n ...options,\n });\n\n // Run the compiled code\n const { default: Content } = await run(String(compiled), {\n ...runtime,\n baseUrl: import.meta.url,\n });\n\n if (!isCancelled) {\n setMDXContent(() => Content);\n }\n } catch (err) {\n if (!isCancelled) {\n const error = err instanceof Error ? err : new Error(String(err));\n setError(error);\n onError?.(error);\n }\n } finally {\n if (!isCancelled) {\n setIsLoading(false);\n }\n }\n }\n\n if (content) {\n compileMDX();\n }\n\n return () => {\n isCancelled = true;\n };\n }, [content, options, onError]);\n\n const mergedComponents = React.useMemo(\n () => ({ ...defaultComponents, ...customComponents }),\n [customComponents]\n );\n\n // Loading state\n if (isLoading) {\n return (\n fallback ?? (\n <div className=\"animate-pulse space-y-4\">\n <div className=\"h-4 bg-muted rounded w-3/4\"></div>\n <div className=\"h-4 bg-muted rounded w-full\"></div>\n <div className=\"h-4 bg-muted rounded w-5/6\"></div>\n </div>\n )\n );\n }\n\n // Error state\n if (error) {\n return (\n <div className=\"bg-destructive/10 border border-destructive/20 rounded-lg p-6 my-8\">\n <h3 className=\"text-destructive font-semibold mb-2\">\n MDX Compilation Error\n </h3>\n <pre className=\"text-sm text-destructive/80 whitespace-pre-wrap overflow-x-auto\">\n {error.message}\n </pre>\n </div>\n );\n }\n\n // Empty state\n if (!MDXContent) {\n return null;\n }\n\n // Render compiled MDX\n const Content = MDXContent as React.ComponentType<any>;\n return <Content components={mergedComponents} {...scope} />;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/renderer/MDXRenderer.tsx"],"names":["CTAButtonGroup","CTASection","Button","Card","CardHeader","CardTitle","CardDescription","CardContent","CardFooter","Alert","AlertTitle","AlertDescription","Badge","Accordion","AccordionContent","AccordionItem","AccordionTrigger","Tabs","TabsContent","TabsList","TabsTrigger","Separator","Avatar","AvatarFallback","AvatarImage","Breadcrumb","BreadcrumbItem","BreadcrumbLink","BreadcrumbList","BreadcrumbPage","BreadcrumbSeparator","Checkbox","Progress","Skeleton","Table","TableBody","TableCaption","TableCell","TableHead","TableHeader","TableRow","Tooltip","TooltipContent","TooltipProvider","TooltipTrigger","AspectRatio","jsx","React","compile","remarkGfm","Content","run","runtime","error","jsxs"],"mappings":"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","file":"index.cjs","sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport { compile, run } from \"@mdx-js/mdx\";\nimport * as runtime from \"react/jsx-runtime\";\nimport remarkGfm from \"remark-gfm\";\nimport type { MDXRendererProps } from \"./types\";\n\n// Import all components for MDX usage\nimport { Button } from \"@/components/ui/button\";\nimport {\n Card,\n CardHeader,\n CardTitle,\n CardDescription,\n CardContent,\n CardFooter,\n} from \"@/components/ui/card\";\nimport { Alert, AlertTitle, AlertDescription } from \"@/components/ui/alert\";\nimport { Badge } from \"@/components/ui/badge\";\nimport {\n Accordion,\n AccordionContent,\n AccordionItem,\n AccordionTrigger,\n} from \"@/components/ui/accordion\";\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from \"@/components/ui/tabs\";\nimport { Separator } from \"@/components/ui/separator\";\nimport { Avatar, AvatarFallback, AvatarImage } from \"@/components/ui/avatar\";\nimport {\n Breadcrumb,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbList,\n BreadcrumbPage,\n BreadcrumbSeparator,\n} from \"@/components/ui/breadcrumb\";\nimport { Checkbox } from \"@/components/ui/checkbox\";\nimport { Progress } from \"@/components/ui/progress\";\nimport { Skeleton } from \"@/components/ui/skeleton\";\nimport {\n Table,\n TableBody,\n TableCaption,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from \"@/components/ui/table\";\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"@/components/ui/tooltip\";\nimport { AspectRatio } from \"@/components/ui/aspect-ratio\";\nimport { CTAButtonGroup } from \"@/components/custom/cta-buttons\";\nimport { CTASection } from \"@/components/custom/cta-section\";\n\n// Default components available in MDX\nconst defaultComponents = {\n // Custom components\n CTAButtonGroup,\n CTASection,\n\n // UI Components\n Button,\n Card,\n CardHeader,\n CardTitle,\n CardDescription,\n CardContent,\n CardFooter,\n Alert,\n AlertTitle,\n AlertDescription,\n Badge,\n Accordion,\n AccordionContent,\n AccordionItem,\n AccordionTrigger,\n Tabs,\n TabsContent,\n TabsList,\n TabsTrigger,\n Separator,\n Avatar,\n AvatarFallback,\n AvatarImage,\n Breadcrumb,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbList,\n BreadcrumbPage,\n BreadcrumbSeparator,\n Checkbox,\n Progress,\n Skeleton,\n Table,\n TableBody,\n TableCaption,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n AspectRatio,\n\n // HTML element overrides for better typography\n h1: (props: any) => (\n <h1\n className=\"scroll-m-20 text-4xl font-extrabold tracking-tight lg:text-5xl\"\n {...props}\n />\n ),\n h2: (props: any) => (\n <h2\n className=\"scroll-m-20 border-b pb-2 text-3xl font-semibold tracking-tight first:mt-0\"\n {...props}\n />\n ),\n h3: (props: any) => (\n <h3\n className=\"scroll-m-20 text-2xl font-semibold tracking-tight\"\n {...props}\n />\n ),\n h4: (props: any) => (\n <h4\n className=\"scroll-m-20 text-xl font-semibold tracking-tight\"\n {...props}\n />\n ),\n p: (props: any) => (\n <p className=\"leading-7 [&:not(:first-child)]:mt-6\" {...props} />\n ),\n a: (props: any) => (\n <a\n className=\"font-medium text-primary underline underline-offset-4\"\n {...props}\n />\n ),\n ul: (props: any) => (\n <ul className=\"my-6 ml-6 list-disc [&>li]:mt-2\" {...props} />\n ),\n ol: (props: any) => (\n <ol className=\"my-6 ml-6 list-decimal [&>li]:mt-2\" {...props} />\n ),\n li: (props: any) => <li className=\"mt-2\" {...props} />,\n blockquote: (props: any) => (\n <blockquote className=\"mt-6 border-l-2 pl-6 italic\" {...props} />\n ),\n code: (props: any) => (\n <code\n className=\"relative rounded bg-muted px-[0.3rem] py-[0.2rem] font-mono text-sm font-semibold\"\n {...props}\n />\n ),\n pre: (props: any) => (\n <pre\n className=\"mb-4 mt-6 overflow-x-auto rounded-lg border bg-muted p-4\"\n {...props}\n />\n ),\n hr: (props: any) => <hr className=\"my-4 md:my-8\" {...props} />,\n table: (props: any) => (\n <div className=\"my-6 w-full overflow-y-auto\">\n <table className=\"w-full\" {...props} />\n </div>\n ),\n tr: (props: any) => (\n <tr className=\"m-0 border-t p-0 even:bg-muted\" {...props} />\n ),\n th: (props: any) => (\n <th\n className=\"border px-4 py-2 text-left font-bold [&[align=center]]:text-center [&[align=right]]:text-right\"\n {...props}\n />\n ),\n td: (props: any) => (\n <td\n className=\"border px-4 py-2 text-left [&[align=center]]:text-center [&[align=right]]:text-right\"\n {...props}\n />\n ),\n};\n\nexport function MDXRenderer({\n content,\n components: customComponents = {},\n scope = {},\n options = {},\n fallback,\n onError,\n}: MDXRendererProps) {\n const [MDXContent, setMDXContent] = React.useState<React.ComponentType | null>(\n null\n );\n const [error, setError] = React.useState<Error | null>(null);\n const [isLoading, setIsLoading] = React.useState(true);\n\n // Memoize options to prevent infinite re-renders\n const memoizedOptions = React.useMemo(() => options, [JSON.stringify(options)]);\n\n React.useEffect(() => {\n let isCancelled = false;\n\n async function compileMDX() {\n try {\n setIsLoading(true);\n setError(null);\n\n // Compile MDX content\n const compiled = await compile(content, {\n outputFormat: \"function-body\",\n remarkPlugins: [remarkGfm],\n ...memoizedOptions,\n });\n\n // Run the compiled code\n const { default: Content } = await run(String(compiled), {\n ...runtime,\n baseUrl: import.meta.url,\n });\n\n if (!isCancelled) {\n setMDXContent(() => Content);\n }\n } catch (err) {\n if (!isCancelled) {\n const error = err instanceof Error ? err : new Error(String(err));\n setError(error);\n if (onError) {\n onError(error);\n }\n }\n } finally {\n if (!isCancelled) {\n setIsLoading(false);\n }\n }\n }\n\n if (content) {\n compileMDX();\n }\n\n return () => {\n isCancelled = true;\n };\n }, [content, memoizedOptions]);\n\n const mergedComponents = React.useMemo(\n () => ({ ...defaultComponents, ...customComponents }),\n [customComponents]\n );\n\n // Loading state\n if (isLoading) {\n return (\n fallback ?? (\n <div className=\"animate-pulse space-y-4\">\n <div className=\"h-4 bg-muted rounded w-3/4\"></div>\n <div className=\"h-4 bg-muted rounded w-full\"></div>\n <div className=\"h-4 bg-muted rounded w-5/6\"></div>\n </div>\n )\n );\n }\n\n // Error state\n if (error) {\n return (\n <div className=\"bg-destructive/10 border border-destructive/20 rounded-lg p-6 my-8\">\n <h3 className=\"text-destructive font-semibold mb-2\">\n MDX Compilation Error\n </h3>\n <pre className=\"text-sm text-destructive/80 whitespace-pre-wrap overflow-x-auto\">\n {error.message}\n </pre>\n </div>\n );\n }\n\n // Empty state\n if (!MDXContent) {\n return null;\n }\n\n // Render compiled MDX\n const Content = MDXContent as React.ComponentType<any>;\n return <Content components={mergedComponents} {...scope} />;\n}\n"]}
|
package/dist/index.js
CHANGED
|
@@ -141,6 +141,7 @@ function MDXRenderer({
|
|
|
141
141
|
);
|
|
142
142
|
const [error, setError] = React.useState(null);
|
|
143
143
|
const [isLoading, setIsLoading] = React.useState(true);
|
|
144
|
+
const memoizedOptions = React.useMemo(() => options, [JSON.stringify(options)]);
|
|
144
145
|
React.useEffect(() => {
|
|
145
146
|
let isCancelled = false;
|
|
146
147
|
async function compileMDX() {
|
|
@@ -150,7 +151,7 @@ function MDXRenderer({
|
|
|
150
151
|
const compiled = await compile(content, {
|
|
151
152
|
outputFormat: "function-body",
|
|
152
153
|
remarkPlugins: [remarkGfm],
|
|
153
|
-
...
|
|
154
|
+
...memoizedOptions
|
|
154
155
|
});
|
|
155
156
|
const { default: Content2 } = await run(String(compiled), {
|
|
156
157
|
...runtime,
|
|
@@ -163,7 +164,9 @@ function MDXRenderer({
|
|
|
163
164
|
if (!isCancelled) {
|
|
164
165
|
const error2 = err instanceof Error ? err : new Error(String(err));
|
|
165
166
|
setError(error2);
|
|
166
|
-
onError
|
|
167
|
+
if (onError) {
|
|
168
|
+
onError(error2);
|
|
169
|
+
}
|
|
167
170
|
}
|
|
168
171
|
} finally {
|
|
169
172
|
if (!isCancelled) {
|
|
@@ -177,7 +180,7 @@ function MDXRenderer({
|
|
|
177
180
|
return () => {
|
|
178
181
|
isCancelled = true;
|
|
179
182
|
};
|
|
180
|
-
}, [content,
|
|
183
|
+
}, [content, memoizedOptions]);
|
|
181
184
|
const mergedComponents = React.useMemo(
|
|
182
185
|
() => ({ ...defaultComponents, ...customComponents }),
|
|
183
186
|
[customComponents]
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/renderer/MDXRenderer.tsx"],"names":["Content","error"],"mappings":"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","file":"index.js","sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport { compile, run } from \"@mdx-js/mdx\";\nimport * as runtime from \"react/jsx-runtime\";\nimport remarkGfm from \"remark-gfm\";\nimport type { MDXRendererProps } from \"./types\";\n\n// Import all components for MDX usage\nimport { Button } from \"@/components/ui/button\";\nimport {\n Card,\n CardHeader,\n CardTitle,\n CardDescription,\n CardContent,\n CardFooter,\n} from \"@/components/ui/card\";\nimport { Alert, AlertTitle, AlertDescription } from \"@/components/ui/alert\";\nimport { Badge } from \"@/components/ui/badge\";\nimport {\n Accordion,\n AccordionContent,\n AccordionItem,\n AccordionTrigger,\n} from \"@/components/ui/accordion\";\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from \"@/components/ui/tabs\";\nimport { Separator } from \"@/components/ui/separator\";\nimport { Avatar, AvatarFallback, AvatarImage } from \"@/components/ui/avatar\";\nimport {\n Breadcrumb,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbList,\n BreadcrumbPage,\n BreadcrumbSeparator,\n} from \"@/components/ui/breadcrumb\";\nimport { Checkbox } from \"@/components/ui/checkbox\";\nimport { Progress } from \"@/components/ui/progress\";\nimport { Skeleton } from \"@/components/ui/skeleton\";\nimport {\n Table,\n TableBody,\n TableCaption,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from \"@/components/ui/table\";\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"@/components/ui/tooltip\";\nimport { AspectRatio } from \"@/components/ui/aspect-ratio\";\nimport { CTAButtonGroup } from \"@/components/custom/cta-buttons\";\nimport { CTASection } from \"@/components/custom/cta-section\";\n\n// Default components available in MDX\nconst defaultComponents = {\n // Custom components\n CTAButtonGroup,\n CTASection,\n\n // UI Components\n Button,\n Card,\n CardHeader,\n CardTitle,\n CardDescription,\n CardContent,\n CardFooter,\n Alert,\n AlertTitle,\n AlertDescription,\n Badge,\n Accordion,\n AccordionContent,\n AccordionItem,\n AccordionTrigger,\n Tabs,\n TabsContent,\n TabsList,\n TabsTrigger,\n Separator,\n Avatar,\n AvatarFallback,\n AvatarImage,\n Breadcrumb,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbList,\n BreadcrumbPage,\n BreadcrumbSeparator,\n Checkbox,\n Progress,\n Skeleton,\n Table,\n TableBody,\n TableCaption,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n AspectRatio,\n\n // HTML element overrides for better typography\n h1: (props: any) => (\n <h1\n className=\"scroll-m-20 text-4xl font-extrabold tracking-tight lg:text-5xl\"\n {...props}\n />\n ),\n h2: (props: any) => (\n <h2\n className=\"scroll-m-20 border-b pb-2 text-3xl font-semibold tracking-tight first:mt-0\"\n {...props}\n />\n ),\n h3: (props: any) => (\n <h3\n className=\"scroll-m-20 text-2xl font-semibold tracking-tight\"\n {...props}\n />\n ),\n h4: (props: any) => (\n <h4\n className=\"scroll-m-20 text-xl font-semibold tracking-tight\"\n {...props}\n />\n ),\n p: (props: any) => (\n <p className=\"leading-7 [&:not(:first-child)]:mt-6\" {...props} />\n ),\n a: (props: any) => (\n <a\n className=\"font-medium text-primary underline underline-offset-4\"\n {...props}\n />\n ),\n ul: (props: any) => (\n <ul className=\"my-6 ml-6 list-disc [&>li]:mt-2\" {...props} />\n ),\n ol: (props: any) => (\n <ol className=\"my-6 ml-6 list-decimal [&>li]:mt-2\" {...props} />\n ),\n li: (props: any) => <li className=\"mt-2\" {...props} />,\n blockquote: (props: any) => (\n <blockquote className=\"mt-6 border-l-2 pl-6 italic\" {...props} />\n ),\n code: (props: any) => (\n <code\n className=\"relative rounded bg-muted px-[0.3rem] py-[0.2rem] font-mono text-sm font-semibold\"\n {...props}\n />\n ),\n pre: (props: any) => (\n <pre\n className=\"mb-4 mt-6 overflow-x-auto rounded-lg border bg-muted p-4\"\n {...props}\n />\n ),\n hr: (props: any) => <hr className=\"my-4 md:my-8\" {...props} />,\n table: (props: any) => (\n <div className=\"my-6 w-full overflow-y-auto\">\n <table className=\"w-full\" {...props} />\n </div>\n ),\n tr: (props: any) => (\n <tr className=\"m-0 border-t p-0 even:bg-muted\" {...props} />\n ),\n th: (props: any) => (\n <th\n className=\"border px-4 py-2 text-left font-bold [&[align=center]]:text-center [&[align=right]]:text-right\"\n {...props}\n />\n ),\n td: (props: any) => (\n <td\n className=\"border px-4 py-2 text-left [&[align=center]]:text-center [&[align=right]]:text-right\"\n {...props}\n />\n ),\n};\n\nexport function MDXRenderer({\n content,\n components: customComponents = {},\n scope = {},\n options = {},\n fallback,\n onError,\n}: MDXRendererProps) {\n const [MDXContent, setMDXContent] = React.useState<React.ComponentType | null>(\n null\n );\n const [error, setError] = React.useState<Error | null>(null);\n const [isLoading, setIsLoading] = React.useState(true);\n\n React.useEffect(() => {\n let isCancelled = false;\n\n async function compileMDX() {\n try {\n setIsLoading(true);\n setError(null);\n\n // Compile MDX content\n const compiled = await compile(content, {\n outputFormat: \"function-body\",\n remarkPlugins: [remarkGfm],\n ...options,\n });\n\n // Run the compiled code\n const { default: Content } = await run(String(compiled), {\n ...runtime,\n baseUrl: import.meta.url,\n });\n\n if (!isCancelled) {\n setMDXContent(() => Content);\n }\n } catch (err) {\n if (!isCancelled) {\n const error = err instanceof Error ? err : new Error(String(err));\n setError(error);\n onError?.(error);\n }\n } finally {\n if (!isCancelled) {\n setIsLoading(false);\n }\n }\n }\n\n if (content) {\n compileMDX();\n }\n\n return () => {\n isCancelled = true;\n };\n }, [content, options, onError]);\n\n const mergedComponents = React.useMemo(\n () => ({ ...defaultComponents, ...customComponents }),\n [customComponents]\n );\n\n // Loading state\n if (isLoading) {\n return (\n fallback ?? (\n <div className=\"animate-pulse space-y-4\">\n <div className=\"h-4 bg-muted rounded w-3/4\"></div>\n <div className=\"h-4 bg-muted rounded w-full\"></div>\n <div className=\"h-4 bg-muted rounded w-5/6\"></div>\n </div>\n )\n );\n }\n\n // Error state\n if (error) {\n return (\n <div className=\"bg-destructive/10 border border-destructive/20 rounded-lg p-6 my-8\">\n <h3 className=\"text-destructive font-semibold mb-2\">\n MDX Compilation Error\n </h3>\n <pre className=\"text-sm text-destructive/80 whitespace-pre-wrap overflow-x-auto\">\n {error.message}\n </pre>\n </div>\n );\n }\n\n // Empty state\n if (!MDXContent) {\n return null;\n }\n\n // Render compiled MDX\n const Content = MDXContent as React.ComponentType<any>;\n return <Content components={mergedComponents} {...scope} />;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/renderer/MDXRenderer.tsx"],"names":["Content","error"],"mappings":";;;;;;;;AA4DA,IAAM,iBAAA,GAAoB;AAAA;AAAA,EAExB,cAAA;AAAA,EACA,UAAA;AAAA;AAAA,EAGA,MAAA;AAAA,EACA,IAAA;AAAA,EACA,UAAA;AAAA,EACA,SAAA;AAAA,EACA,eAAA;AAAA,EACA,WAAA;AAAA,EACA,UAAA;AAAA,EACA,KAAA;AAAA,EACA,UAAA;AAAA,EACA,gBAAA;AAAA,EACA,KAAA;AAAA,EACA,SAAA;AAAA,EACA,gBAAA;AAAA,EACA,aAAA;AAAA,EACA,gBAAA;AAAA,EACA,IAAA;AAAA,EACA,WAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA;AAAA,EACA,SAAA;AAAA,EACA,MAAA;AAAA,EACA,cAAA;AAAA,EACA,WAAA;AAAA,EACA,UAAA;AAAA,EACA,cAAA;AAAA,EACA,cAAA;AAAA,EACA,cAAA;AAAA,EACA,cAAA;AAAA,EACA,mBAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA;AAAA,EACA,SAAA;AAAA,EACA,YAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,WAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,cAAA;AAAA,EACA,eAAA;AAAA,EACA,cAAA;AAAA,EACA,WAAA;AAAA;AAAA,EAGA,EAAA,EAAI,CAAC,KAAA,qBACH,GAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,gEAAA;AAAA,MACT,GAAG;AAAA;AAAA,GACN;AAAA,EAEF,EAAA,EAAI,CAAC,KAAA,qBACH,GAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,4EAAA;AAAA,MACT,GAAG;AAAA;AAAA,GACN;AAAA,EAEF,EAAA,EAAI,CAAC,KAAA,qBACH,GAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,mDAAA;AAAA,MACT,GAAG;AAAA;AAAA,GACN;AAAA,EAEF,EAAA,EAAI,CAAC,KAAA,qBACH,GAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,kDAAA;AAAA,MACT,GAAG;AAAA;AAAA,GACN;AAAA,EAEF,CAAA,EAAG,CAAC,KAAA,qBACF,GAAA,CAAC,OAAE,SAAA,EAAU,sCAAA,EAAwC,GAAG,KAAA,EAAO,CAAA;AAAA,EAEjE,CAAA,EAAG,CAAC,KAAA,qBACF,GAAA;AAAA,IAAC,GAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,uDAAA;AAAA,MACT,GAAG;AAAA;AAAA,GACN;AAAA,EAEF,EAAA,EAAI,CAAC,KAAA,qBACH,GAAA,CAAC,QAAG,SAAA,EAAU,iCAAA,EAAmC,GAAG,KAAA,EAAO,CAAA;AAAA,EAE7D,EAAA,EAAI,CAAC,KAAA,qBACH,GAAA,CAAC,QAAG,SAAA,EAAU,oCAAA,EAAsC,GAAG,KAAA,EAAO,CAAA;AAAA,EAEhE,EAAA,EAAI,CAAC,KAAA,qBAAe,GAAA,CAAC,QAAG,SAAA,EAAU,MAAA,EAAQ,GAAG,KAAA,EAAO,CAAA;AAAA,EACpD,UAAA,EAAY,CAAC,KAAA,qBACX,GAAA,CAAC,gBAAW,SAAA,EAAU,6BAAA,EAA+B,GAAG,KAAA,EAAO,CAAA;AAAA,EAEjE,IAAA,EAAM,CAAC,KAAA,qBACL,GAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,mFAAA;AAAA,MACT,GAAG;AAAA;AAAA,GACN;AAAA,EAEF,GAAA,EAAK,CAAC,KAAA,qBACJ,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,0DAAA;AAAA,MACT,GAAG;AAAA;AAAA,GACN;AAAA,EAEF,EAAA,EAAI,CAAC,KAAA,qBAAe,GAAA,CAAC,QAAG,SAAA,EAAU,cAAA,EAAgB,GAAG,KAAA,EAAO,CAAA;AAAA,EAC5D,KAAA,EAAO,CAAC,KAAA,qBACN,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6BAAA,EACb,QAAA,kBAAA,GAAA,CAAC,OAAA,EAAA,EAAM,SAAA,EAAU,QAAA,EAAU,GAAG,OAAO,CAAA,EACvC,CAAA;AAAA,EAEF,EAAA,EAAI,CAAC,KAAA,qBACH,GAAA,CAAC,QAAG,SAAA,EAAU,gCAAA,EAAkC,GAAG,KAAA,EAAO,CAAA;AAAA,EAE5D,EAAA,EAAI,CAAC,KAAA,qBACH,GAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,gGAAA;AAAA,MACT,GAAG;AAAA;AAAA,GACN;AAAA,EAEF,EAAA,EAAI,CAAC,KAAA,qBACH,GAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,sFAAA;AAAA,MACT,GAAG;AAAA;AAAA;AAGV,CAAA;AAEO,SAAS,WAAA,CAAY;AAAA,EAC1B,OAAA;AAAA,EACA,UAAA,EAAY,mBAAmB,EAAC;AAAA,EAChC,QAAQ,EAAC;AAAA,EACT,UAAU,EAAC;AAAA,EACX,QAAA;AAAA,EACA;AACF,CAAA,EAAqB;AACnB,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAU,KAAA,CAAA,QAAA;AAAA,IACxC;AAAA,GACF;AACA,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAU,eAAuB,IAAI,CAAA;AAC3D,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAU,eAAS,IAAI,CAAA;AAGrD,EAAA,MAAM,eAAA,GAAwB,cAAQ,MAAM,OAAA,EAAS,CAAC,IAAA,CAAK,SAAA,CAAU,OAAO,CAAC,CAAC,CAAA;AAE9E,EAAM,gBAAU,MAAM;AACpB,IAAA,IAAI,WAAA,GAAc,KAAA;AAElB,IAAA,eAAe,UAAA,GAAa;AAC1B,MAAA,IAAI;AACF,QAAA,YAAA,CAAa,IAAI,CAAA;AACjB,QAAA,QAAA,CAAS,IAAI,CAAA;AAGb,QAAA,MAAM,QAAA,GAAW,MAAM,OAAA,CAAQ,OAAA,EAAS;AAAA,UACtC,YAAA,EAAc,eAAA;AAAA,UACd,aAAA,EAAe,CAAC,SAAS,CAAA;AAAA,UACzB,GAAG;AAAA,SACJ,CAAA;AAGD,QAAA,MAAM,EAAE,SAASA,QAAAA,EAAQ,GAAI,MAAM,GAAA,CAAI,MAAA,CAAO,QAAQ,CAAA,EAAG;AAAA,UACvD,GAAG,OAAA;AAAA,UACH,SAAS,MAAA,CAAA,IAAA,CAAY;AAAA,SACtB,CAAA;AAED,QAAA,IAAI,CAAC,WAAA,EAAa;AAChB,UAAA,aAAA,CAAc,MAAMA,QAAO,CAAA;AAAA,QAC7B;AAAA,MACF,SAAS,GAAA,EAAK;AACZ,QAAA,IAAI,CAAC,WAAA,EAAa;AAChB,UAAA,MAAMC,MAAAA,GAAQ,eAAe,KAAA,GAAQ,GAAA,GAAM,IAAI,KAAA,CAAM,MAAA,CAAO,GAAG,CAAC,CAAA;AAChE,UAAA,QAAA,CAASA,MAAK,CAAA;AACd,UAAA,IAAI,OAAA,EAAS;AACX,YAAA,OAAA,CAAQA,MAAK,CAAA;AAAA,UACf;AAAA,QACF;AAAA,MACF,CAAA,SAAE;AACA,QAAA,IAAI,CAAC,WAAA,EAAa;AAChB,UAAA,YAAA,CAAa,KAAK,CAAA;AAAA,QACpB;AAAA,MACF;AAAA,IACF;AAEA,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,UAAA,EAAW;AAAA,IACb;AAEA,IAAA,OAAO,MAAM;AACX,MAAA,WAAA,GAAc,IAAA;AAAA,IAChB,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,OAAA,EAAS,eAAe,CAAC,CAAA;AAE7B,EAAA,MAAM,gBAAA,GAAyB,KAAA,CAAA,OAAA;AAAA,IAC7B,OAAO,EAAE,GAAG,iBAAA,EAAmB,GAAG,gBAAA,EAAiB,CAAA;AAAA,IACnD,CAAC,gBAAgB;AAAA,GACnB;AAGA,EAAA,IAAI,SAAA,EAAW;AACb,IAAA,OACE,QAAA,oBACE,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACb,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,KAAA,EAAA,EAAI,WAAU,4BAAA,EAA6B,CAAA;AAAA,sBAC5C,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6BAAA,EAA8B,CAAA;AAAA,sBAC7C,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4BAAA,EAA6B;AAAA,KAAA,EAC9C,CAAA;AAAA,EAGN;AAGA,EAAA,IAAI,KAAA,EAAO;AACT,IAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oEAAA,EACb,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,qCAAA,EAAsC,QAAA,EAAA,uBAAA,EAEpD,CAAA;AAAA,sBACA,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iEAAA,EACZ,gBAAM,OAAA,EACT;AAAA,KAAA,EACF,CAAA;AAAA,EAEJ;AAGA,EAAA,IAAI,CAAC,UAAA,EAAY;AACf,IAAA,OAAO,IAAA;AAAA,EACT;AAGA,EAAA,MAAM,OAAA,GAAU,UAAA;AAChB,EAAA,uBAAO,GAAA,CAAC,OAAA,EAAA,EAAQ,UAAA,EAAY,gBAAA,EAAmB,GAAG,KAAA,EAAO,CAAA;AAC3D","file":"index.js","sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport { compile, run } from \"@mdx-js/mdx\";\nimport * as runtime from \"react/jsx-runtime\";\nimport remarkGfm from \"remark-gfm\";\nimport type { MDXRendererProps } from \"./types\";\n\n// Import all components for MDX usage\nimport { Button } from \"@/components/ui/button\";\nimport {\n Card,\n CardHeader,\n CardTitle,\n CardDescription,\n CardContent,\n CardFooter,\n} from \"@/components/ui/card\";\nimport { Alert, AlertTitle, AlertDescription } from \"@/components/ui/alert\";\nimport { Badge } from \"@/components/ui/badge\";\nimport {\n Accordion,\n AccordionContent,\n AccordionItem,\n AccordionTrigger,\n} from \"@/components/ui/accordion\";\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from \"@/components/ui/tabs\";\nimport { Separator } from \"@/components/ui/separator\";\nimport { Avatar, AvatarFallback, AvatarImage } from \"@/components/ui/avatar\";\nimport {\n Breadcrumb,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbList,\n BreadcrumbPage,\n BreadcrumbSeparator,\n} from \"@/components/ui/breadcrumb\";\nimport { Checkbox } from \"@/components/ui/checkbox\";\nimport { Progress } from \"@/components/ui/progress\";\nimport { Skeleton } from \"@/components/ui/skeleton\";\nimport {\n Table,\n TableBody,\n TableCaption,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n} from \"@/components/ui/table\";\nimport {\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"@/components/ui/tooltip\";\nimport { AspectRatio } from \"@/components/ui/aspect-ratio\";\nimport { CTAButtonGroup } from \"@/components/custom/cta-buttons\";\nimport { CTASection } from \"@/components/custom/cta-section\";\n\n// Default components available in MDX\nconst defaultComponents = {\n // Custom components\n CTAButtonGroup,\n CTASection,\n\n // UI Components\n Button,\n Card,\n CardHeader,\n CardTitle,\n CardDescription,\n CardContent,\n CardFooter,\n Alert,\n AlertTitle,\n AlertDescription,\n Badge,\n Accordion,\n AccordionContent,\n AccordionItem,\n AccordionTrigger,\n Tabs,\n TabsContent,\n TabsList,\n TabsTrigger,\n Separator,\n Avatar,\n AvatarFallback,\n AvatarImage,\n Breadcrumb,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbList,\n BreadcrumbPage,\n BreadcrumbSeparator,\n Checkbox,\n Progress,\n Skeleton,\n Table,\n TableBody,\n TableCaption,\n TableCell,\n TableHead,\n TableHeader,\n TableRow,\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n AspectRatio,\n\n // HTML element overrides for better typography\n h1: (props: any) => (\n <h1\n className=\"scroll-m-20 text-4xl font-extrabold tracking-tight lg:text-5xl\"\n {...props}\n />\n ),\n h2: (props: any) => (\n <h2\n className=\"scroll-m-20 border-b pb-2 text-3xl font-semibold tracking-tight first:mt-0\"\n {...props}\n />\n ),\n h3: (props: any) => (\n <h3\n className=\"scroll-m-20 text-2xl font-semibold tracking-tight\"\n {...props}\n />\n ),\n h4: (props: any) => (\n <h4\n className=\"scroll-m-20 text-xl font-semibold tracking-tight\"\n {...props}\n />\n ),\n p: (props: any) => (\n <p className=\"leading-7 [&:not(:first-child)]:mt-6\" {...props} />\n ),\n a: (props: any) => (\n <a\n className=\"font-medium text-primary underline underline-offset-4\"\n {...props}\n />\n ),\n ul: (props: any) => (\n <ul className=\"my-6 ml-6 list-disc [&>li]:mt-2\" {...props} />\n ),\n ol: (props: any) => (\n <ol className=\"my-6 ml-6 list-decimal [&>li]:mt-2\" {...props} />\n ),\n li: (props: any) => <li className=\"mt-2\" {...props} />,\n blockquote: (props: any) => (\n <blockquote className=\"mt-6 border-l-2 pl-6 italic\" {...props} />\n ),\n code: (props: any) => (\n <code\n className=\"relative rounded bg-muted px-[0.3rem] py-[0.2rem] font-mono text-sm font-semibold\"\n {...props}\n />\n ),\n pre: (props: any) => (\n <pre\n className=\"mb-4 mt-6 overflow-x-auto rounded-lg border bg-muted p-4\"\n {...props}\n />\n ),\n hr: (props: any) => <hr className=\"my-4 md:my-8\" {...props} />,\n table: (props: any) => (\n <div className=\"my-6 w-full overflow-y-auto\">\n <table className=\"w-full\" {...props} />\n </div>\n ),\n tr: (props: any) => (\n <tr className=\"m-0 border-t p-0 even:bg-muted\" {...props} />\n ),\n th: (props: any) => (\n <th\n className=\"border px-4 py-2 text-left font-bold [&[align=center]]:text-center [&[align=right]]:text-right\"\n {...props}\n />\n ),\n td: (props: any) => (\n <td\n className=\"border px-4 py-2 text-left [&[align=center]]:text-center [&[align=right]]:text-right\"\n {...props}\n />\n ),\n};\n\nexport function MDXRenderer({\n content,\n components: customComponents = {},\n scope = {},\n options = {},\n fallback,\n onError,\n}: MDXRendererProps) {\n const [MDXContent, setMDXContent] = React.useState<React.ComponentType | null>(\n null\n );\n const [error, setError] = React.useState<Error | null>(null);\n const [isLoading, setIsLoading] = React.useState(true);\n\n // Memoize options to prevent infinite re-renders\n const memoizedOptions = React.useMemo(() => options, [JSON.stringify(options)]);\n\n React.useEffect(() => {\n let isCancelled = false;\n\n async function compileMDX() {\n try {\n setIsLoading(true);\n setError(null);\n\n // Compile MDX content\n const compiled = await compile(content, {\n outputFormat: \"function-body\",\n remarkPlugins: [remarkGfm],\n ...memoizedOptions,\n });\n\n // Run the compiled code\n const { default: Content } = await run(String(compiled), {\n ...runtime,\n baseUrl: import.meta.url,\n });\n\n if (!isCancelled) {\n setMDXContent(() => Content);\n }\n } catch (err) {\n if (!isCancelled) {\n const error = err instanceof Error ? err : new Error(String(err));\n setError(error);\n if (onError) {\n onError(error);\n }\n }\n } finally {\n if (!isCancelled) {\n setIsLoading(false);\n }\n }\n }\n\n if (content) {\n compileMDX();\n }\n\n return () => {\n isCancelled = true;\n };\n }, [content, memoizedOptions]);\n\n const mergedComponents = React.useMemo(\n () => ({ ...defaultComponents, ...customComponents }),\n [customComponents]\n );\n\n // Loading state\n if (isLoading) {\n return (\n fallback ?? (\n <div className=\"animate-pulse space-y-4\">\n <div className=\"h-4 bg-muted rounded w-3/4\"></div>\n <div className=\"h-4 bg-muted rounded w-full\"></div>\n <div className=\"h-4 bg-muted rounded w-5/6\"></div>\n </div>\n )\n );\n }\n\n // Error state\n if (error) {\n return (\n <div className=\"bg-destructive/10 border border-destructive/20 rounded-lg p-6 my-8\">\n <h3 className=\"text-destructive font-semibold mb-2\">\n MDX Compilation Error\n </h3>\n <pre className=\"text-sm text-destructive/80 whitespace-pre-wrap overflow-x-auto\">\n {error.message}\n </pre>\n </div>\n );\n }\n\n // Empty state\n if (!MDXContent) {\n return null;\n }\n\n // Render compiled MDX\n const Content = MDXContent as React.ComponentType<any>;\n return <Content components={mergedComponents} {...scope} />;\n}\n"]}
|