@amritanshu3011/mdx-renderer 1.0.8 → 1.0.10

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.
@@ -3,6 +3,7 @@ interface IntentProviderProps {
3
3
  children: React.ReactNode;
4
4
  data?: any[];
5
5
  theme?: any;
6
+ registry?: Record<string, React.ComponentType<any>>;
6
7
  }
7
8
  export declare const IntentProvider: React.FC<IntentProviderProps>;
8
9
  export {};
@@ -1,6 +1,7 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { ThemeProvider } from './theme/ThemeContext';
3
3
  import { VisualizationProvider } from './context/VisualizationContext';
4
- export const IntentProvider = ({ children, data = [], theme }) => {
5
- return (_jsx(ThemeProvider, { initialTheme: theme, children: _jsx(VisualizationProvider, { initialVisualizations: data, children: children }) }));
4
+ export const IntentProvider = ({ children, data = [], theme, registry = {} // Default to empty
5
+ }) => {
6
+ return (_jsx(ThemeProvider, { initialTheme: theme, children: _jsx(VisualizationProvider, { initialVisualizations: data, customRegistry: registry, children: children }) }));
6
7
  };
@@ -1,17 +1,19 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { useVisualizations } from '../context/VisualizationContext';
3
- import { visualizationRegistry } from '../registry/visualizationRegistry';
4
3
  export const DynamicVisualizations = () => {
5
- const { visualizations } = useVisualizations();
6
- if (visualizations.length === 0)
4
+ // 1. Get the MERGED registry from Context (Defaults + User Custom)
5
+ const { visualizations, registry } = useVisualizations();
6
+ if (!visualizations || visualizations.length === 0)
7
7
  return null;
8
- return (_jsx("div", { children: visualizations.map((viz, index) => {
9
- const vizType = viz.type;
10
- const Component = visualizationRegistry[vizType];
8
+ return (_jsx("div", { className: "w-full flex flex-col gap-8 my-8", children: visualizations.map((viz, index) => {
9
+ // 2. Look up component in the Context Registry
10
+ // We use string indexing because users can add ANY key
11
+ const Component = registry[viz.type];
11
12
  if (!Component) {
12
- console.warn(`Unknown visualization type: ${viz.type}`);
13
- return null;
13
+ console.warn(`MDX Renderer: Unknown visualization type "${viz.type}"`);
14
+ // Render a helpful error for the developer/user
15
+ return (_jsxs("div", { className: "p-4 border border-red-200 bg-red-50 text-red-600 rounded-lg text-sm font-mono", children: ["\u26A0\uFE0F Unknown component type: ", _jsx("strong", { children: viz.type })] }, index));
14
16
  }
15
- return (_jsx("div", { children: _jsx(Component, { ...viz.data }) }, index));
17
+ return (_jsx("div", { className: "mdx-viz-block w-full", children: _jsx(Component, { ...viz.data }) }, index));
16
18
  }) }));
17
19
  };
@@ -1,13 +1,19 @@
1
- import React from 'react';
2
- import type { LLMResponse } from '../types/mockLLM';
1
+ import { ReactNode, ComponentType } from 'react';
2
+ export interface VisualizationItem {
3
+ type: string;
4
+ data: any;
5
+ }
3
6
  interface VisualizationContextType {
4
- visualizations: LLMResponse[];
5
- addVisualization: (viz: LLMResponse) => void;
7
+ visualizations: VisualizationItem[];
8
+ addVisualization: (viz: VisualizationItem) => void;
6
9
  clearVisualizations: () => void;
10
+ registry: Record<string, ComponentType<any>>;
11
+ }
12
+ export interface VisualizationProviderProps {
13
+ children: ReactNode;
14
+ initialVisualizations?: VisualizationItem[];
15
+ customRegistry?: Record<string, ComponentType<any>>;
7
16
  }
8
- export declare const VisualizationProvider: ({ children, initialVisualizations }: {
9
- children: React.ReactNode;
10
- initialVisualizations?: any[];
11
- }) => import("react/jsx-runtime").JSX.Element;
17
+ export declare const VisualizationProvider: ({ children, initialVisualizations, customRegistry }: VisualizationProviderProps) => import("react/jsx-runtime").JSX.Element;
12
18
  export declare const useVisualizations: () => VisualizationContextType;
13
19
  export {};
@@ -1,21 +1,32 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
- import React, { createContext, useContext } from 'react';
2
+ import React, { createContext, useContext, useState } from 'react';
3
+ // Import your default registry to use as a base
4
+ import { visualizationRegistry as defaultRegistry } from '../registry/visualizationRegistry';
3
5
  const VisualizationContext = createContext(undefined);
4
- export const VisualizationProvider = ({ children, initialVisualizations = [] }) => {
5
- const [visualizations, setVisualizations] = React.useState(initialVisualizations);
6
+ export const VisualizationProvider = ({ children, initialVisualizations = [], customRegistry = {} }) => {
7
+ const [visualizations, setVisualizations] = useState(initialVisualizations);
8
+ // 1. MERGE LOGIC: Combine defaults with user overrides
9
+ // Using useMemo is good practice here to prevent recreation on every render,
10
+ // but for simplicity, direct object spread works too.
11
+ const mergedRegistry = { ...defaultRegistry, ...customRegistry };
12
+ // 2. Reactive State Update
6
13
  React.useEffect(() => {
7
14
  if (initialVisualizations.length > 0) {
8
15
  setVisualizations(initialVisualizations);
9
16
  }
10
17
  }, [initialVisualizations]);
11
18
  const addVisualization = (viz) => {
12
- console.log('Storing visualization:', viz);
13
19
  setVisualizations(prev => [...prev, viz]);
14
20
  };
15
21
  const clearVisualizations = () => {
16
22
  setVisualizations([]);
17
23
  };
18
- return (_jsx(VisualizationContext.Provider, { value: { visualizations, addVisualization, clearVisualizations }, children: children }));
24
+ return (_jsx(VisualizationContext.Provider, { value: {
25
+ visualizations,
26
+ addVisualization,
27
+ clearVisualizations,
28
+ registry: mergedRegistry // <--- Pass the merged registry to the app
29
+ }, children: children }));
19
30
  };
20
31
  export const useVisualizations = () => {
21
32
  const context = useContext(VisualizationContext);
package/dist/index.d.ts CHANGED
@@ -5,7 +5,6 @@ export { useThemeWithFallback } from './utils/useThemeWithFallback';
5
5
  export type { Theme } from './theme/types';
6
6
  export { MDXRenderer } from './MDXRenderer';
7
7
  export { IntentProvider } from './IntentProvider';
8
- import './styles/base.css';
9
8
  export { ProsConsBlock } from './components/smart/ProsConsBlock';
10
9
  export { ComparisonBlock } from './components/smart/ComparisonBlock';
11
10
  export { FlowBlock } from './components/smart/FlowBlock';
package/dist/index.js CHANGED
@@ -6,7 +6,6 @@ export { useThemeWithFallback } from './utils/useThemeWithFallback';
6
6
  // Renderer
7
7
  export { MDXRenderer } from './MDXRenderer';
8
8
  export { IntentProvider } from './IntentProvider';
9
- import './styles/base.css';
10
9
  // Smart Components
11
10
  export { ProsConsBlock } from './components/smart/ProsConsBlock';
12
11
  export { ComparisonBlock } from './components/smart/ComparisonBlock';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@amritanshu3011/mdx-renderer",
3
- "version": "1.0.8",
3
+ "version": "1.0.10",
4
4
  "description": "Reusable MDX visualization library",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",