{"version":3,"sources":["../src/components/Button.tsx","../src/components/ButtonGroup.tsx","../src/components/ChartJSBlock.tsx","../src/components/MermaidBlock.tsx","../src/types.ts","../src/fences.tsx","../src/ChatMarkdown.tsx"],"names":["React","jsx","React3","jsxs"],"mappings":"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","file":"index.mjs","sourcesContent":["import * as React from \"react\";\nimport type { ButtonSpec, ButtonDefaults } from \"../types\";\n\ntype Props = ButtonSpec & { \n  onAction?: (action: string, payload?: unknown) => void;\n  buttonDefaults?: ButtonDefaults;\n};\n\nexport const Button: React.FC<Props> = ({ \n  label, \n  action, \n  variant = \"primary\", \n  size = \"md\", \n  payload, \n  onAction,\n  buttonDefaults \n}) => {\n  const getVariantStyles = () => {\n    switch (variant) {\n      case \"primary\":\n        return {\n          backgroundColor: \"#000000\",\n          color: \"#ffffff\",\n          borderColor: \"#000000\"\n        };\n      case \"success\":\n        return {\n          backgroundColor: \"#16a34a\",\n          color: \"#ffffff\",\n          borderColor: \"#16a34a\"\n        };\n      case \"warning\":\n        return {\n          backgroundColor: \"#eab308\",\n          color: \"#000000\",\n          borderColor: \"#eab308\"\n        };\n      case \"destructive\":\n        return {\n          backgroundColor: \"#dc2626\",\n          color: \"#ffffff\",\n          borderColor: \"#dc2626\"\n        };\n      default:\n        return {\n          backgroundColor: \"#000000\",\n          color: \"#ffffff\",\n          borderColor: \"#000000\"\n        };\n    }\n  };\n\n  const getSizeStyles = () => {\n    switch (size) {\n      case \"xs\":\n        return {\n          fontSize: \"12px\",\n          padding: \"4px 8px\"\n        };\n      case \"sm\":\n        return {\n          fontSize: \"14px\",\n          padding: \"6px 12px\"\n        };\n      case \"lg\":\n        return {\n          fontSize: \"16px\",\n          padding: \"12px 16px\"\n        };\n      default: // md\n        return {\n          fontSize: \"14px\",\n          padding: \"8px 12px\"\n        };\n    }\n  };\n\n  // Base styles that always apply\n  const baseStyles: React.CSSProperties = {\n    display: \"inline-flex\",\n    alignItems: \"center\",\n    border: \"1px solid\",\n    fontWeight: \"500\",\n    cursor: \"pointer\",\n    transition: \"all 0.2s ease\",\n    textDecoration: \"none\",\n    outline: \"none\",\n  };\n\n  // Merge: base -> variant -> size -> developer defaults\n  const buttonStyles: React.CSSProperties = {\n    ...baseStyles,\n    ...getVariantStyles(),\n    ...getSizeStyles(),\n    // Developer defaults override everything\n    ...(buttonDefaults?.backgroundColor && { backgroundColor: buttonDefaults.backgroundColor }),\n    ...(buttonDefaults?.color && { color: buttonDefaults.color }),\n    ...(buttonDefaults?.borderColor && { borderColor: buttonDefaults.borderColor }),\n    ...(buttonDefaults?.borderRadius && { borderRadius: buttonDefaults.borderRadius }),\n    ...(buttonDefaults?.fontSize && { fontSize: buttonDefaults.fontSize }),\n    ...(buttonDefaults?.padding && { padding: buttonDefaults.padding }),\n    ...(buttonDefaults?.fontWeight && { fontWeight: buttonDefaults.fontWeight }),\n  };\n\n  // Default hover styles\n  const defaultHoverStyles: React.CSSProperties = {\n    opacity: 0.9,\n    transform: \"translateY(-1px)\"\n  };\n\n  // Developer can override hover styles\n  const hoverStyles: React.CSSProperties = {\n    ...defaultHoverStyles,\n    ...(buttonDefaults?.hoverBackgroundColor && { backgroundColor: buttonDefaults.hoverBackgroundColor }),\n    ...(buttonDefaults?.hoverColor && { color: buttonDefaults.hoverColor }),\n    ...(buttonDefaults?.hoverTransform && { transform: buttonDefaults.hoverTransform }),\n  };\n\n  const [isHovered, setIsHovered] = React.useState(false);\n\n  const handleClick = () => {\n    onAction?.(action, payload);\n  };\n\n  return (\n    <button\n      style={{\n        ...buttonStyles,\n        ...(isHovered ? hoverStyles : {})\n      }}\n      onClick={handleClick}\n      onMouseEnter={() => setIsHovered(true)}\n      onMouseLeave={() => setIsHovered(false)}\n    >\n      {label}\n    </button>\n  );\n};\n","import * as React from \"react\";\nimport type { ButtonGroupSpec, ButtonDefaults } from \"../types\";\nimport { Button } from \"./Button\";\n\nexport const ButtonGroup: React.FC<{ \n  buttons: ButtonGroupSpec; \n  onAction?: (action: string, payload?: unknown) => void;\n  buttonDefaults?: ButtonDefaults;\n}> = ({ buttons, onAction, buttonDefaults }) => {\n  const containerStyles: React.CSSProperties = {\n    display: \"flex\",\n    flexWrap: \"wrap\",\n    gap: \"8px\",\n    alignItems: \"flex-start\"\n  };\n\n  return (\n    <div style={containerStyles}>\n      {buttons.map((button, index) => (\n        <Button \n          key={index} \n          {...button} \n          onAction={onAction}\n          buttonDefaults={buttonDefaults}\n        />\n      ))}\n    </div>\n  );\n};\n","import * as React from \"react\";\nimport type { ChartJSSpec, ChartDefaults } from \"../types\";\n\nlet Chart: any; // lazy-loaded\n\nconst SUPPORTED_CHART_TYPES = [\"bar\", \"line\"];\n\nexport const ChartJSBlock: React.FC<{ \n  spec: ChartJSSpec;\n  chartDefaults?: ChartDefaults;\n}> = ({ spec, chartDefaults }) => {\n  const canvasRef = React.useRef<HTMLCanvasElement | null>(null);\n  const chartRef = React.useRef<any>(null);\n  const [isLoading, setIsLoading] = React.useState(true);\n  const [error, setError] = React.useState<string | null>(null);\n\n  // Validate chart type\n  if (!SUPPORTED_CHART_TYPES.includes(spec.type)) {\n    return (\n      <div style={{\n        padding: \"16px\",\n        border: \"1px solid #fca5a5\",\n        borderRadius: \"8px\",\n        backgroundColor: \"#fee2e2\",\n        color: \"#dc2626\",\n        fontSize: \"14px\"\n      }}>\n        <strong>Chart type not supported:</strong> '{spec.type}'. \n        Only 'bar' and 'line' charts are supported.\n      </div>\n    );\n  }\n\n  React.useEffect(() => {\n    let mounted = true;\n    \n    const loadChart = async () => {\n      try {\n        if (!Chart) {\n          // Dynamic import keeps Chart.js out of bundles that don't use it\n          const mod = await import(\"chart.js/auto\");\n          Chart = mod.Chart || (mod as any).default;\n        }\n        \n        if (!mounted || !canvasRef.current) return;\n        \n        // Destroy existing chart\n        if (chartRef.current) {\n          chartRef.current.destroy();\n        }\n        \n        // Merge developer defaults with spec options\n        const mergedOptions = {\n          ...spec.options,\n          // Apply developer defaults to chart options\n          ...(chartDefaults?.backgroundColor && {\n            backgroundColor: chartDefaults.backgroundColor\n          }),\n          plugins: {\n            ...spec.options?.plugins,\n            legend: {\n              ...spec.options?.plugins?.legend,\n              labels: {\n                ...spec.options?.plugins?.legend?.labels,\n                ...(chartDefaults?.fontFamily && { font: { family: chartDefaults.fontFamily } }),\n                ...(chartDefaults?.fontSize && { font: { size: chartDefaults.fontSize } }),\n              }\n            }\n          },\n          scales: {\n            ...spec.options?.scales,\n            ...(chartDefaults?.gridColor && {\n              x: {\n                ...spec.options?.scales?.x,\n                grid: {\n                  ...spec.options?.scales?.x?.grid,\n                  color: chartDefaults.gridColor\n                }\n              },\n              y: {\n                ...spec.options?.scales?.y,\n                grid: {\n                  ...spec.options?.scales?.y?.grid,\n                  color: chartDefaults.gridColor\n                }\n              }\n            })\n          }\n        };\n\n        // Apply border color defaults if provided\n        const mergedSpec = {\n          ...spec,\n          options: mergedOptions,\n          ...(chartDefaults?.borderColor && {\n            data: {\n              ...spec.data,\n              datasets: spec.data.datasets?.map((dataset: any) => ({\n                ...dataset,\n                borderColor: dataset.borderColor || chartDefaults.borderColor\n              }))\n            }\n          })\n        };\n        \n        // Create new chart\n        chartRef.current = new Chart(canvasRef.current, mergedSpec);\n        setIsLoading(false);\n      } catch (err) {\n        if (mounted) {\n          setError(err instanceof Error ? err.message : \"Failed to load chart\");\n          setIsLoading(false);\n        }\n      }\n    };\n\n    loadChart();\n\n    return () => { \n      mounted = false; \n      if (chartRef.current) {\n        chartRef.current.destroy();\n      }\n    };\n  }, [spec, chartDefaults]);\n\n  if (error) {\n    return (\n      <div style={{\n        padding: \"16px\",\n        border: \"1px solid #e5e7eb\",\n        borderRadius: \"8px\",\n        backgroundColor: \"#f9fafb\",\n        color: \"#dc2626\",\n        fontSize: \"14px\"\n      }}>\n        Chart Error: {error}\n      </div>\n    );\n  }\n\n  if (isLoading) {\n    return (\n      <div style={{\n        padding: \"16px\",\n        border: \"1px solid #e5e7eb\",\n        borderRadius: \"8px\",\n        backgroundColor: \"#f9fafb\",\n        color: \"#6b7280\",\n        fontSize: \"14px\",\n        textAlign: \"center\"\n      }}>\n        Loading chart...\n      </div>\n    );\n  }\n\n  const containerStyle: React.CSSProperties = {\n    width: chartDefaults?.width || \"100%\",\n    height: chartDefaults?.height || \"320px\",\n    position: \"relative\",\n    ...(chartDefaults?.backgroundColor && { backgroundColor: chartDefaults.backgroundColor })\n  };\n\n  return (\n    <div style={containerStyle}>\n      <canvas \n        ref={canvasRef} \n        style={{ \n          width: \"100%\", \n          height: \"100%\",\n          maxWidth: \"100%\",\n          maxHeight: \"100%\"\n        }} \n      />\n    </div>\n  );\n};\n","import * as React from \"react\";\n\nlet mermaidLib: any;\n\nexport const MermaidBlock: React.FC<{ code: string }> = ({ code }) => {\n  const id = React.useMemo(() => \"m\" + Math.random().toString(36).slice(2), []);\n  const hostRef = React.useRef<HTMLDivElement | null>(null);\n  const [isLoading, setIsLoading] = React.useState(true);\n  const [error, setError] = React.useState<string | null>(null);\n\n  React.useEffect(() => {\n    let mounted = true;\n    \n    const loadMermaid = async () => {\n      try {\n        if (!mermaidLib) {\n          const mod = await import(\"mermaid\");\n          mermaidLib = mod.default || mod;\n          mermaidLib.initialize({ \n            startOnLoad: false, \n            securityLevel: \"strict\",\n            theme: \"default\"\n          });\n        }\n        \n        if (!mounted || !hostRef.current) return;\n        \n        // Clear previous content\n        if (hostRef.current) {\n          hostRef.current.innerHTML = \"\";\n        }\n        \n        const { svg } = await mermaidLib.render(id, code);\n        if (hostRef.current && mounted) {\n          hostRef.current.innerHTML = svg;\n          setIsLoading(false);\n        }\n      } catch (err) {\n        if (mounted) {\n          setError(err instanceof Error ? err.message : \"Failed to render diagram\");\n          setIsLoading(false);\n        }\n      }\n    };\n\n    loadMermaid();\n\n    return () => { \n      mounted = false; \n    };\n  }, [code, id]);\n\n  if (error) {\n    return (\n      <div style={{\n        padding: \"16px\",\n        border: \"1px solid #e5e7eb\",\n        borderRadius: \"8px\",\n        backgroundColor: \"#f9fafb\",\n        color: \"#dc2626\",\n        fontSize: \"14px\"\n      }}>\n        Mermaid Error: {error}\n      </div>\n    );\n  }\n\n  if (isLoading) {\n    return (\n      <div style={{\n        padding: \"16px\",\n        border: \"1px solid #e5e7eb\",\n        borderRadius: \"8px\",\n        backgroundColor: \"#f9fafb\",\n        color: \"#6b7280\",\n        fontSize: \"14px\",\n        textAlign: \"center\"\n      }}>\n        Loading diagram...\n      </div>\n    );\n  }\n\n  return (\n    <div \n      ref={hostRef} \n      style={{\n        width: \"100%\",\n        display: \"flex\",\n        justifyContent: \"center\",\n        alignItems: \"center\",\n        minHeight: \"200px\"\n      }}\n    />\n  );\n};\n","import { z } from \"zod\";\n\nexport const ButtonSpec = z.object({\n  label: z.string(),\n  action: z.string(),\n  variant: z.enum([\"primary\", \"success\", \"warning\", \"destructive\"]).optional(),\n  size: z.enum([\"xs\", \"sm\", \"md\", \"lg\"]).optional(),\n  payload: z.unknown().optional(),\n});\nexport type ButtonSpec = z.infer<typeof ButtonSpec>;\n\nexport const ButtonGroupSpec = z.array(ButtonSpec);\nexport type ButtonGroupSpec = z.infer<typeof ButtonGroupSpec>;\n\n// Developer defaults for button customization\nexport const ButtonDefaults = z.object({\n  backgroundColor: z.string().optional(),\n  color: z.string().optional(),\n  borderColor: z.string().optional(),\n  borderRadius: z.string().optional(),\n  fontSize: z.string().optional(),\n  padding: z.string().optional(),\n  fontWeight: z.string().optional(),\n  hoverBackgroundColor: z.string().optional(),\n  hoverColor: z.string().optional(),\n  hoverTransform: z.string().optional(),\n}).optional();\nexport type ButtonDefaults = z.infer<typeof ButtonDefaults>;\n\n// Developer defaults for chart customization\nexport const ChartDefaults = z.object({\n  width: z.string().optional(),\n  height: z.string().optional(),\n  backgroundColor: z.string().optional(),\n  borderColor: z.string().optional(),\n  gridColor: z.string().optional(),\n  fontFamily: z.string().optional(),\n  fontSize: z.number().optional(),\n}).optional();\nexport type ChartDefaults = z.infer<typeof ChartDefaults>;\n\n// Chart.js config - restricted to bar and line only\nexport const ChartJSSpec = z.object({\n  type: z.enum([\"bar\", \"line\"]),\n  data: z.record(z.string(), z.any()),\n  options: z.record(z.string(), z.any()).optional(),\n});\nexport type ChartJSSpec = z.infer<typeof ChartJSSpec>;\n","import * as React from \"react\";\nimport { Button } from \"./components/Button\";\nimport { ButtonGroup } from \"./components/ButtonGroup\";\nimport { ChartJSBlock } from \"./components/ChartJSBlock\";\nimport { MermaidBlock } from \"./components/MermaidBlock\";\nimport { ButtonSpec, ButtonGroupSpec, ChartJSSpec, ButtonDefaults, ChartDefaults } from \"./types\";\n\nconst safeJSON = <T,>(raw: string, parse: (v: unknown) => T | null): T | null => {\n  try { \n    return parse(JSON.parse(raw)); \n  } catch { \n    return null; \n  }\n};\n\nexport type FenceRenderer = (args: {\n  raw: string;\n  onAction?: (action: string, payload?: unknown) => void;\n  buttonDefaults?: ButtonDefaults;\n  chartDefaults?: ChartDefaults;\n}) => React.ReactNode;\n\nexport type FenceMap = Record<string, FenceRenderer>;\n\nexport const defaultFences: FenceMap = {\n  button: ({ raw, onAction, buttonDefaults }) => {\n    const spec = safeJSON<ButtonSpec>(raw, v => \n      ButtonSpec.safeParse(v).success ? (v as any) : null\n    );\n    return spec ? <Button {...spec} onAction={onAction} buttonDefaults={buttonDefaults} /> : <pre>{raw}</pre>;\n  },\n  \n  buttongroup: ({ raw, onAction, buttonDefaults }) => {\n    const spec = safeJSON<ButtonGroupSpec>(raw, v => \n      ButtonGroupSpec.safeParse(v).success ? (v as any) : null\n    );\n    return spec ? <ButtonGroup buttons={spec} onAction={onAction} buttonDefaults={buttonDefaults} /> : <pre>{raw}</pre>;\n  },\n  \n  chartjs: ({ raw, chartDefaults }) => {\n    const spec = safeJSON<ChartJSSpec>(raw, v => \n      ChartJSSpec.safeParse(v).success ? (v as any) : null\n    );\n    return spec ? <ChartJSBlock spec={spec} chartDefaults={chartDefaults} /> : <pre>{raw}</pre>;\n  },\n  \n  mermaid: ({ raw }) => <MermaidBlock code={raw} />,\n};\n","import * as React from \"react\";\nimport ReactMarkdown from \"react-markdown\";\nimport remarkGfm from \"remark-gfm\";\nimport type { FenceMap } from \"./fences\";\nimport { defaultFences as builtinFences } from \"./fences\";\nimport type { ButtonDefaults, ChartDefaults } from \"./types\";\n\nexport type ChatMarkdownProps = {\n  markdown: string;\n  fences?: FenceMap;\n  onAction?: (actionId: string, payload?: unknown) => void;\n  showUnknown?: boolean;\n  buttonDefaults?: ButtonDefaults;\n  chartDefaults?: ChartDefaults;\n};\n\nexport const ChatMarkdown: React.FC<ChatMarkdownProps> = ({\n  markdown,\n  fences = builtinFences,\n  onAction,\n  showUnknown = true,\n  buttonDefaults,\n  chartDefaults,\n}) => {\n  return (\n    <ReactMarkdown\n      remarkPlugins={[remarkGfm]}\n      components={{\n        code({ inline, className, children, ...props }: any) {\n          if (inline) {\n            return (\n              <code \n                className={className} \n                style={{\n                  backgroundColor: \"#f1f5f9\",\n                  padding: \"2px 4px\",\n                  borderRadius: \"4px\",\n                  fontSize: \"0.875em\",\n                  fontFamily: \"ui-monospace, SFMono-Regular, 'SF Mono', Consolas, 'Liberation Mono', Menlo, monospace\"\n                }}\n                {...props}\n              >\n                {children}\n              </code>\n            );\n          }\n          \n          const lang = (className || \"\").replace(\"language-\", \"\").trim().toLowerCase();\n          const raw = String(children ?? \"\").trim();\n          const render = fences[lang];\n          \n          if (render) {\n            return (\n              <div style={{ margin: \"8px 0\" }}>\n                {render({ raw, onAction, buttonDefaults, chartDefaults })}\n              </div>\n            );\n          }\n          \n          return showUnknown ? (\n            <pre \n              className={className}\n              style={{\n                backgroundColor: \"#f8fafc\",\n                border: \"1px solid #e2e8f0\",\n                borderRadius: \"8px\",\n                padding: \"16px\",\n                overflow: \"auto\",\n                fontSize: \"14px\",\n                fontFamily: \"ui-monospace, SFMono-Regular, 'SF Mono', Consolas, 'Liberation Mono', Menlo, monospace\",\n                lineHeight: \"1.5\",\n                margin: \"8px 0\"\n              }}\n            >\n              <code>{raw}</code>\n            </pre>\n          ) : null;\n        }\n      }}\n    >\n      {markdown}\n    </ReactMarkdown>\n  );\n};\n"]}