@aumnidigital/bms 0.1.0 → 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 CHANGED
@@ -15,7 +15,12 @@ Runtime MDX renderer with built-in shadcn/ui components for React applications.
15
15
  ## Installation
16
16
 
17
17
  ```bash
18
- npm install @aumnidigital/bms @mdx-js/mdx
18
+ npm install @aumnidigital/bms @mdx-js/mdx remark-gfm
19
+ ```
20
+
21
+ Or with pnpm:
22
+ ```bash
23
+ pnpm add @aumnidigital/bms @mdx-js/mdx remark-gfm
19
24
  ```
20
25
 
21
26
  ### Peer Dependencies
@@ -24,6 +29,7 @@ This package requires:
24
29
  - `react` ^18.0.0 || ^19.0.0
25
30
  - `react-dom` ^18.0.0 || ^19.0.0
26
31
  - `@mdx-js/mdx` ^3.0.0
32
+ - `remark-gfm` ^4.0.0 (for GitHub Flavored Markdown support - tables, strikethrough, task lists, etc.)
27
33
 
28
34
  ## Quick Start
29
35
 
@@ -82,6 +88,8 @@ This is a paragraph with **bold** and *italic* text.
82
88
 
83
89
  ### 1. Tailwind CSS Configuration
84
90
 
91
+ #### For Tailwind v3 (with tailwind.config.js)
92
+
85
93
  Add the package to your Tailwind `content` array:
86
94
 
87
95
  ```js
@@ -91,10 +99,34 @@ module.exports = {
91
99
  './src/**/*.{js,ts,jsx,tsx}',
92
100
  './node_modules/@aumnidigital/bms/dist/**/*.{js,cjs}',
93
101
  ],
94
- // ... rest of config
102
+ theme: {
103
+ extend: {},
104
+ },
105
+ plugins: [],
95
106
  };
96
107
  ```
97
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
+
98
130
  ### 2. CSS Variables
99
131
 
100
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
- ...options
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?.(error2);
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, options, onError]);
208
+ }, [content, memoizedOptions]);
206
209
  const mergedComponents = React__namespace.useMemo(
207
210
  () => ({ ...defaultComponents, ...customComponents }),
208
211
  [customComponents]
@@ -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":"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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 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
- ...options
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?.(error2);
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, options, onError]);
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"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aumnidigital/bms",
3
- "version": "0.1.0",
3
+ "version": "0.1.2",
4
4
  "description": "Runtime MDX renderer with shadcn/ui components for React applications",
5
5
  "type": "module",
6
6
  "sideEffects": false,
@@ -59,7 +59,13 @@
59
59
  "peerDependencies": {
60
60
  "@mdx-js/mdx": "^3.0.0",
61
61
  "react": "^18.0.0 || ^19.0.0",
62
- "react-dom": "^18.0.0 || ^19.0.0"
62
+ "react-dom": "^18.0.0 || ^19.0.0",
63
+ "remark-gfm": "^4.0.0"
64
+ },
65
+ "peerDependenciesMeta": {
66
+ "remark-gfm": {
67
+ "optional": true
68
+ }
63
69
  },
64
70
  "dependencies": {
65
71
  "@hookform/resolvers": "^5.2.2",