@mieweb/ui 0.7.0 → 0.7.1

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.
Files changed (143) hide show
  1. package/dist/CsvBlock-2A5VEDD3.cjs +15 -0
  2. package/dist/{CsvBlock-7K6XVRYO.cjs.map → CsvBlock-2A5VEDD3.cjs.map} +1 -1
  3. package/dist/CsvBlock-D6PWAJ5X.js +6 -0
  4. package/dist/{CsvBlock-AAV4QMSF.js.map → CsvBlock-D6PWAJ5X.js.map} +1 -1
  5. package/dist/HtmlPreviewBlock-PEHTJ6C3.js +6 -0
  6. package/dist/{HtmlPreviewBlock-DNINC7RW.js.map → HtmlPreviewBlock-PEHTJ6C3.js.map} +1 -1
  7. package/dist/HtmlPreviewBlock-SYXCV5RH.cjs +15 -0
  8. package/dist/{HtmlPreviewBlock-74XQF3KT.cjs.map → HtmlPreviewBlock-SYXCV5RH.cjs.map} +1 -1
  9. package/dist/MermaidBlock-7NK3AVK2.js +6 -0
  10. package/dist/{MermaidBlock-PKXGFGU6.js.map → MermaidBlock-7NK3AVK2.js.map} +1 -1
  11. package/dist/MermaidBlock-AFXNP5NK.cjs +15 -0
  12. package/dist/{MermaidBlock-R4U7IHSZ.cjs.map → MermaidBlock-AFXNP5NK.cjs.map} +1 -1
  13. package/dist/SurveyBlock-6KRNKFH5.cjs +15 -0
  14. package/dist/{SurveyBlock-E52I4PW3.cjs.map → SurveyBlock-6KRNKFH5.cjs.map} +1 -1
  15. package/dist/SurveyBlock-NNDGXGG4.js +6 -0
  16. package/dist/{SurveyBlock-IULSBG22.js.map → SurveyBlock-NNDGXGG4.js.map} +1 -1
  17. package/dist/chunk-6CGM5H4J.js +17 -0
  18. package/dist/chunk-6CGM5H4J.js.map +1 -0
  19. package/dist/{chunk-HRS6W74P.js → chunk-6D5F7EDM.js} +3 -3
  20. package/dist/{chunk-HRS6W74P.js.map → chunk-6D5F7EDM.js.map} +1 -1
  21. package/dist/{chunk-NAQ3ZALI.cjs → chunk-7VF6WO7H.cjs} +32 -16
  22. package/dist/chunk-7VF6WO7H.cjs.map +1 -0
  23. package/dist/{chunk-FGIIXD37.js → chunk-7WMSUXOQ.js} +3 -3
  24. package/dist/{chunk-FGIIXD37.js.map → chunk-7WMSUXOQ.js.map} +1 -1
  25. package/dist/{chunk-74NOFB34.cjs → chunk-BB4WQ4LV.cjs} +4 -4
  26. package/dist/{chunk-74NOFB34.cjs.map → chunk-BB4WQ4LV.cjs.map} +1 -1
  27. package/dist/{chunk-YD23ZGRU.cjs → chunk-BYUV3IZV.cjs} +16 -4
  28. package/dist/chunk-BYUV3IZV.cjs.map +1 -0
  29. package/dist/{chunk-UL3PQ7HL.cjs → chunk-CKD554XR.cjs} +12 -3
  30. package/dist/chunk-CKD554XR.cjs.map +1 -0
  31. package/dist/{chunk-FZQAF3WA.cjs → chunk-CVC4NWFA.cjs} +4 -4
  32. package/dist/{chunk-FZQAF3WA.cjs.map → chunk-CVC4NWFA.cjs.map} +1 -1
  33. package/dist/{chunk-UO3KEUYK.cjs → chunk-DG7KE4YJ.cjs} +3 -3
  34. package/dist/chunk-DG7KE4YJ.cjs.map +1 -0
  35. package/dist/{chunk-Y4ESBDQ5.cjs → chunk-FCBQP2U4.cjs} +36 -38
  36. package/dist/chunk-FCBQP2U4.cjs.map +1 -0
  37. package/dist/{chunk-CPJIOOBM.js → chunk-I2W24RHW.js} +3 -3
  38. package/dist/{chunk-CPJIOOBM.js.map → chunk-I2W24RHW.js.map} +1 -1
  39. package/dist/{chunk-LIH3IZYK.js → chunk-IHTRKWBG.js} +121 -42
  40. package/dist/chunk-IHTRKWBG.js.map +1 -0
  41. package/dist/{chunk-Y65SK5Y2.cjs → chunk-JCNPVK74.cjs} +21 -12
  42. package/dist/chunk-JCNPVK74.cjs.map +1 -0
  43. package/dist/{chunk-6RV7HQ4U.cjs → chunk-KBEKQMVY.cjs} +5 -5
  44. package/dist/{chunk-6RV7HQ4U.cjs.map → chunk-KBEKQMVY.cjs.map} +1 -1
  45. package/dist/{chunk-FGP64Z24.js → chunk-KOCTIB6U.js} +16 -4
  46. package/dist/chunk-KOCTIB6U.js.map +1 -0
  47. package/dist/{chunk-3TERETXH.js → chunk-LJ2ZWIX6.js} +28 -2
  48. package/dist/chunk-LJ2ZWIX6.js.map +1 -0
  49. package/dist/{chunk-35VBGVMB.js → chunk-MCCO4A23.js} +24 -8
  50. package/dist/chunk-MCCO4A23.js.map +1 -0
  51. package/dist/chunk-NUFUV43P.cjs +20 -0
  52. package/dist/chunk-NUFUV43P.cjs.map +1 -0
  53. package/dist/{chunk-NTYGCBCL.js → chunk-OOYEHBYJ.js} +36 -38
  54. package/dist/chunk-OOYEHBYJ.js.map +1 -0
  55. package/dist/{chunk-JQEY53SH.cjs → chunk-PFWHWIXS.cjs} +28 -2
  56. package/dist/chunk-PFWHWIXS.cjs.map +1 -0
  57. package/dist/{chunk-JTBQNOSL.cjs → chunk-PWHK7SWN.cjs} +6 -6
  58. package/dist/{chunk-JTBQNOSL.cjs.map → chunk-PWHK7SWN.cjs.map} +1 -1
  59. package/dist/{chunk-JC6Y3LGF.cjs → chunk-QUUFKGDF.cjs} +120 -41
  60. package/dist/chunk-QUUFKGDF.cjs.map +1 -0
  61. package/dist/{chunk-MHJMUKLA.js → chunk-RHYIFIT5.js} +12 -3
  62. package/dist/chunk-RHYIFIT5.js.map +1 -0
  63. package/dist/{chunk-FIWKHLWY.js → chunk-SEPYBAML.js} +3 -3
  64. package/dist/chunk-SEPYBAML.js.map +1 -0
  65. package/dist/{chunk-WGC3KOP7.js → chunk-T3RWXOCM.js} +3 -3
  66. package/dist/{chunk-WGC3KOP7.js.map → chunk-T3RWXOCM.js.map} +1 -1
  67. package/dist/{chunk-NCRYCG5G.js → chunk-UFYXU7KV.js} +3 -3
  68. package/dist/{chunk-NCRYCG5G.js.map → chunk-UFYXU7KV.js.map} +1 -1
  69. package/dist/{chunk-VO3NWSCQ.cjs → chunk-V25Z5GR6.cjs} +7 -7
  70. package/dist/{chunk-VO3NWSCQ.cjs.map → chunk-V25Z5GR6.cjs.map} +1 -1
  71. package/dist/{chunk-NSLR3B7K.js → chunk-XL7TTKHP.js} +21 -12
  72. package/dist/chunk-XL7TTKHP.js.map +1 -0
  73. package/dist/components/DateInput/index.cjs +3 -2
  74. package/dist/components/DateInput/index.d.cts +4 -0
  75. package/dist/components/DateInput/index.d.ts +4 -0
  76. package/dist/components/DateInput/index.js +2 -1
  77. package/dist/components/Markdown/index.cjs +15 -15
  78. package/dist/components/Markdown/index.css +1 -1
  79. package/dist/components/Markdown/index.css.map +1 -1
  80. package/dist/components/Markdown/index.js +6 -6
  81. package/dist/components/Markdown/styles.css +4 -1
  82. package/dist/components/MediaEditor/index.cjs +9 -9
  83. package/dist/components/MediaEditor/index.d.cts +2 -2
  84. package/dist/components/MediaEditor/index.d.ts +2 -2
  85. package/dist/components/MediaEditor/index.js +4 -4
  86. package/dist/components/MediaPlayer/index.cjs +4 -4
  87. package/dist/components/MediaPlayer/index.js +1 -1
  88. package/dist/components/SuperChat/plugins/index.cjs +3 -0
  89. package/dist/components/SuperChat/plugins/index.cjs.map +1 -1
  90. package/dist/components/SuperChat/plugins/index.js +3 -0
  91. package/dist/components/SuperChat/plugins/index.js.map +1 -1
  92. package/dist/components/TranscriptView/index.cjs +5 -5
  93. package/dist/components/TranscriptView/index.d.cts +2 -2
  94. package/dist/components/TranscriptView/index.d.ts +2 -2
  95. package/dist/components/TranscriptView/index.js +2 -2
  96. package/dist/esheet.cjs +5 -5
  97. package/dist/esheet.js +2 -2
  98. package/dist/hooks/index.cjs +10 -9
  99. package/dist/hooks/index.d.cts +2 -2
  100. package/dist/hooks/index.d.ts +2 -2
  101. package/dist/hooks/index.js +2 -1
  102. package/dist/index.cjs +82 -82
  103. package/dist/index.css +1 -1
  104. package/dist/index.css.map +1 -1
  105. package/dist/index.d.cts +4 -2
  106. package/dist/index.d.ts +4 -2
  107. package/dist/index.js +16 -16
  108. package/dist/styles.css +1 -1
  109. package/dist/tailwind-preset.cjs +4 -4
  110. package/dist/tailwind-preset.js +1 -1
  111. package/dist/{transcript-oaWqY3yr.d.ts → transcript-Cg7uSW-C.d.cts} +4 -1
  112. package/dist/{transcript-oaWqY3yr.d.cts → transcript-Cg7uSW-C.d.ts} +4 -1
  113. package/dist/{useTranscriptEdits-CWYnjbGP.d.ts → useTranscriptEdits-C2BbMU37.d.ts} +3 -2
  114. package/dist/{useTranscriptEdits-BUylQFg0.d.cts → useTranscriptEdits-Hy0Vm-H8.d.cts} +3 -2
  115. package/package.json +2 -1
  116. package/dist/CsvBlock-7K6XVRYO.cjs +0 -15
  117. package/dist/CsvBlock-AAV4QMSF.js +0 -6
  118. package/dist/HtmlPreviewBlock-74XQF3KT.cjs +0 -15
  119. package/dist/HtmlPreviewBlock-DNINC7RW.js +0 -6
  120. package/dist/MermaidBlock-PKXGFGU6.js +0 -6
  121. package/dist/MermaidBlock-R4U7IHSZ.cjs +0 -15
  122. package/dist/SurveyBlock-E52I4PW3.cjs +0 -15
  123. package/dist/SurveyBlock-IULSBG22.js +0 -6
  124. package/dist/chunk-35VBGVMB.js.map +0 -1
  125. package/dist/chunk-3TERETXH.js.map +0 -1
  126. package/dist/chunk-FGP64Z24.js.map +0 -1
  127. package/dist/chunk-FIWKHLWY.js.map +0 -1
  128. package/dist/chunk-J7KWQJOB.js +0 -14
  129. package/dist/chunk-J7KWQJOB.js.map +0 -1
  130. package/dist/chunk-JC6Y3LGF.cjs.map +0 -1
  131. package/dist/chunk-JQEY53SH.cjs.map +0 -1
  132. package/dist/chunk-LIH3IZYK.js.map +0 -1
  133. package/dist/chunk-MHJMUKLA.js.map +0 -1
  134. package/dist/chunk-NAQ3ZALI.cjs.map +0 -1
  135. package/dist/chunk-NSLR3B7K.js.map +0 -1
  136. package/dist/chunk-NTYGCBCL.js.map +0 -1
  137. package/dist/chunk-S7JQ3FV5.cjs +0 -16
  138. package/dist/chunk-S7JQ3FV5.cjs.map +0 -1
  139. package/dist/chunk-UL3PQ7HL.cjs.map +0 -1
  140. package/dist/chunk-UO3KEUYK.cjs.map +0 -1
  141. package/dist/chunk-Y4ESBDQ5.cjs.map +0 -1
  142. package/dist/chunk-Y65SK5Y2.cjs.map +0 -1
  143. package/dist/chunk-YD23ZGRU.cjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/Markdown/MermaidBlock.tsx"],"names":[],"mappings":"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","file":"chunk-WGC3KOP7.js","sourcesContent":["/**\n * MermaidBlock — Renders Mermaid diagrams.\n * Requires `mermaid` to be installed by the consumer (optional peer dependency).\n */\nimport DOMPurify from 'dompurify';\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\n\nimport { FenceBlock } from './FenceBlock';\n\ninterface MermaidBlockProps {\n code: string;\n id: string;\n}\n\ntype MermaidApi = {\n initialize: (config: Record<string, unknown>) => void;\n parse: (text: string) => Promise<unknown>;\n render: (id: string, text: string) => Promise<{ svg: string }>;\n};\n\nlet mermaidInstance: MermaidApi | null = null;\nlet mermaidReady: Promise<MermaidApi> | null = null;\nlet mermaidTheme: 'dark' | 'default' = 'default';\n\nfunction currentTheme(): 'dark' | 'default' {\n return document.documentElement.classList.contains('dark') ||\n document.documentElement.getAttribute('data-theme') === 'dark'\n ? 'dark'\n : 'default';\n}\n\nfunction buildConfig(theme: 'dark' | 'default'): Record<string, unknown> {\n const base: Record<string, unknown> = {\n startOnLoad: false,\n theme,\n securityLevel: 'strict',\n };\n if (theme === 'dark') {\n base.themeVariables = {\n nodeBorder: '#6b7280',\n mainBkg: '#4a4a4a',\n nodeTextColor: '#ffffff',\n clusterBkg: '#374151',\n titleColor: '#ffffff',\n edgeLabelBackground: '#374151',\n lineColor: '#9ca3af',\n };\n }\n return base;\n}\n\nasync function getMermaid(): Promise<MermaidApi> {\n const theme = currentTheme();\n if (mermaidInstance) {\n if (theme !== mermaidTheme) {\n mermaidTheme = theme;\n mermaidInstance.initialize(buildConfig(theme));\n }\n return mermaidInstance;\n }\n if (!mermaidReady) {\n mermaidReady = import(/* @vite-ignore */ 'mermaid').then((mod) => {\n const m = (mod as { default: MermaidApi }).default;\n mermaidTheme = currentTheme();\n m.initialize(buildConfig(mermaidTheme));\n mermaidInstance = m;\n return m;\n });\n }\n return mermaidReady;\n}\n\nfunction sanitiseSvg(svg: string): string {\n return DOMPurify.sanitize(svg, {\n USE_PROFILES: { svg: true, svgFilters: true },\n // Allow <style> so mermaid's embedded CSS applies, and <foreignObject>\n // so node label text renders (mermaid escapes its content in strict mode).\n ADD_TAGS: ['style', 'foreignObject'],\n ADD_ATTR: [\n 'style',\n 'class',\n 'dominant-baseline',\n 'text-anchor',\n 'font-size',\n 'font-family',\n 'marker-end',\n 'marker-start',\n 'marker-mid',\n 'stroke-dasharray',\n 'stroke-width',\n ],\n FORBID_TAGS: ['script'],\n FORBID_ATTR: ['onload', 'onerror', 'onclick', 'onmouseover'],\n }) as string;\n}\n\nexport const MermaidBlock: React.FC<MermaidBlockProps> = ({ code, id }) => {\n const [svg, setSvg] = useState<string>('');\n const [error, setError] = useState<string>('');\n const [loading, setLoading] = useState(true);\n\n // Derive an accessible label from the diagram's declared type (first keyword).\n const diagramLabel = useMemo(() => {\n const firstWord =\n code\n .trim()\n .split(/[\\s\\n]/)[0]\n ?.toLowerCase() ?? '';\n const typeMap: Record<string, string> = {\n graph: 'Flowchart',\n flowchart: 'Flowchart',\n sequencediagram: 'Sequence diagram',\n classdiagram: 'Class diagram',\n statediagram: 'State diagram',\n 'statediagram-v2': 'State diagram',\n erdiagram: 'Entity relationship diagram',\n gantt: 'Gantt chart',\n pie: 'Pie chart',\n journey: 'User journey diagram',\n gitgraph: 'Git graph',\n mindmap: 'Mind map',\n timeline: 'Timeline',\n quadrantchart: 'Quadrant chart',\n };\n return `${typeMap[firstWord] ?? 'Mermaid'} diagram`;\n }, [code]);\n\n const render = useCallback(async () => {\n setLoading(true);\n setError('');\n try {\n const mermaid = await getMermaid();\n await mermaid.parse(code);\n const { svg: rendered } = await mermaid.render(`mermaid-${id}`, code);\n setSvg(sanitiseSvg(rendered));\n } catch (err) {\n setError((err as Error).message ?? 'Failed to render diagram');\n } finally {\n setLoading(false);\n }\n }, [code, id]);\n\n useEffect(() => {\n void render();\n }, [render]);\n\n // Re-render when the page theme changes (dark ↔ light)\n useEffect(() => {\n const observer = new MutationObserver(() => void render());\n observer.observe(document.documentElement, {\n attributes: true,\n attributeFilter: ['class', 'data-theme'],\n });\n return () => observer.disconnect();\n }, [render]);\n\n return (\n <FenceBlock\n code={code}\n language=\"mermaid\"\n supportsRawView\n error={error || undefined}\n >\n {loading ? (\n <div className=\"flex items-center justify-center p-8\">\n <div className=\"border-primary-500 h-6 w-6 animate-spin rounded-full border-2 border-t-transparent\" />\n </div>\n ) : (\n <div\n className=\"mermaid-svg flex justify-center p-4\"\n role=\"img\"\n aria-label={diagramLabel}\n dangerouslySetInnerHTML={{ __html: svg }}\n />\n )}\n </FenceBlock>\n );\n};\n"]}
1
+ {"version":3,"sources":["../src/components/Markdown/MermaidBlock.tsx"],"names":[],"mappings":"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","file":"chunk-T3RWXOCM.js","sourcesContent":["/**\n * MermaidBlock — Renders Mermaid diagrams.\n * Requires `mermaid` to be installed by the consumer (optional peer dependency).\n */\nimport DOMPurify from 'dompurify';\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\n\nimport { FenceBlock } from './FenceBlock';\n\ninterface MermaidBlockProps {\n code: string;\n id: string;\n}\n\ntype MermaidApi = {\n initialize: (config: Record<string, unknown>) => void;\n parse: (text: string) => Promise<unknown>;\n render: (id: string, text: string) => Promise<{ svg: string }>;\n};\n\nlet mermaidInstance: MermaidApi | null = null;\nlet mermaidReady: Promise<MermaidApi> | null = null;\nlet mermaidTheme: 'dark' | 'default' = 'default';\n\nfunction currentTheme(): 'dark' | 'default' {\n return document.documentElement.classList.contains('dark') ||\n document.documentElement.getAttribute('data-theme') === 'dark'\n ? 'dark'\n : 'default';\n}\n\nfunction buildConfig(theme: 'dark' | 'default'): Record<string, unknown> {\n const base: Record<string, unknown> = {\n startOnLoad: false,\n theme,\n securityLevel: 'strict',\n };\n if (theme === 'dark') {\n base.themeVariables = {\n nodeBorder: '#6b7280',\n mainBkg: '#4a4a4a',\n nodeTextColor: '#ffffff',\n clusterBkg: '#374151',\n titleColor: '#ffffff',\n edgeLabelBackground: '#374151',\n lineColor: '#9ca3af',\n };\n }\n return base;\n}\n\nasync function getMermaid(): Promise<MermaidApi> {\n const theme = currentTheme();\n if (mermaidInstance) {\n if (theme !== mermaidTheme) {\n mermaidTheme = theme;\n mermaidInstance.initialize(buildConfig(theme));\n }\n return mermaidInstance;\n }\n if (!mermaidReady) {\n mermaidReady = import(/* @vite-ignore */ 'mermaid').then((mod) => {\n const m = (mod as { default: MermaidApi }).default;\n mermaidTheme = currentTheme();\n m.initialize(buildConfig(mermaidTheme));\n mermaidInstance = m;\n return m;\n });\n }\n return mermaidReady;\n}\n\nfunction sanitiseSvg(svg: string): string {\n return DOMPurify.sanitize(svg, {\n USE_PROFILES: { svg: true, svgFilters: true },\n // Allow <style> so mermaid's embedded CSS applies, and <foreignObject>\n // so node label text renders (mermaid escapes its content in strict mode).\n ADD_TAGS: ['style', 'foreignObject'],\n ADD_ATTR: [\n 'style',\n 'class',\n 'dominant-baseline',\n 'text-anchor',\n 'font-size',\n 'font-family',\n 'marker-end',\n 'marker-start',\n 'marker-mid',\n 'stroke-dasharray',\n 'stroke-width',\n ],\n FORBID_TAGS: ['script'],\n FORBID_ATTR: ['onload', 'onerror', 'onclick', 'onmouseover'],\n }) as string;\n}\n\nexport const MermaidBlock: React.FC<MermaidBlockProps> = ({ code, id }) => {\n const [svg, setSvg] = useState<string>('');\n const [error, setError] = useState<string>('');\n const [loading, setLoading] = useState(true);\n\n // Derive an accessible label from the diagram's declared type (first keyword).\n const diagramLabel = useMemo(() => {\n const firstWord =\n code\n .trim()\n .split(/[\\s\\n]/)[0]\n ?.toLowerCase() ?? '';\n const typeMap: Record<string, string> = {\n graph: 'Flowchart',\n flowchart: 'Flowchart',\n sequencediagram: 'Sequence diagram',\n classdiagram: 'Class diagram',\n statediagram: 'State diagram',\n 'statediagram-v2': 'State diagram',\n erdiagram: 'Entity relationship diagram',\n gantt: 'Gantt chart',\n pie: 'Pie chart',\n journey: 'User journey diagram',\n gitgraph: 'Git graph',\n mindmap: 'Mind map',\n timeline: 'Timeline',\n quadrantchart: 'Quadrant chart',\n };\n return `${typeMap[firstWord] ?? 'Mermaid'} diagram`;\n }, [code]);\n\n const render = useCallback(async () => {\n setLoading(true);\n setError('');\n try {\n const mermaid = await getMermaid();\n await mermaid.parse(code);\n const { svg: rendered } = await mermaid.render(`mermaid-${id}`, code);\n setSvg(sanitiseSvg(rendered));\n } catch (err) {\n setError((err as Error).message ?? 'Failed to render diagram');\n } finally {\n setLoading(false);\n }\n }, [code, id]);\n\n useEffect(() => {\n void render();\n }, [render]);\n\n // Re-render when the page theme changes (dark ↔ light)\n useEffect(() => {\n const observer = new MutationObserver(() => void render());\n observer.observe(document.documentElement, {\n attributes: true,\n attributeFilter: ['class', 'data-theme'],\n });\n return () => observer.disconnect();\n }, [render]);\n\n return (\n <FenceBlock\n code={code}\n language=\"mermaid\"\n supportsRawView\n error={error || undefined}\n >\n {loading ? (\n <div className=\"flex items-center justify-center p-8\">\n <div className=\"border-primary-500 h-6 w-6 animate-spin rounded-full border-2 border-t-transparent\" />\n </div>\n ) : (\n <div\n className=\"mermaid-svg flex justify-center p-4\"\n role=\"img\"\n aria-label={diagramLabel}\n dangerouslySetInnerHTML={{ __html: svg }}\n />\n )}\n </FenceBlock>\n );\n};\n"]}
@@ -1,4 +1,4 @@
1
- import { FenceBlock } from './chunk-MHJMUKLA.js';
1
+ import { FenceBlock } from './chunk-RHYIFIT5.js';
2
2
  import { Button } from './chunk-ZVSW2KS6.js';
3
3
  import { Code, Eye, Maximize2 } from 'lucide-react';
4
4
  import { useState, useRef, useEffect, useCallback } from 'react';
@@ -131,5 +131,5 @@ var HtmlPreviewBlock = ({
131
131
  };
132
132
 
133
133
  export { HtmlPreviewBlock };
134
- //# sourceMappingURL=chunk-NCRYCG5G.js.map
135
- //# sourceMappingURL=chunk-NCRYCG5G.js.map
134
+ //# sourceMappingURL=chunk-UFYXU7KV.js.map
135
+ //# sourceMappingURL=chunk-UFYXU7KV.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/Markdown/HtmlPreviewBlock.tsx"],"names":[],"mappings":"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","file":"chunk-NCRYCG5G.js","sourcesContent":["/** Sandboxed iframe preview for HTML code blocks. */\nimport { Code, Eye, Maximize2 } from 'lucide-react';\nimport React, { useCallback, useEffect, useRef, useState } from 'react';\n\nimport { Button } from '../Button';\nimport { FenceBlock } from './FenceBlock';\n\ninterface HtmlPreviewBlockProps {\n code: string;\n id: string;\n}\n\nfunction isFullDocument(html: string): boolean {\n return /<!DOCTYPE|<html/i.test(html);\n}\n\nfunction wrapFragment(html: string): string {\n return `<!DOCTYPE html>\n<html>\n<head><meta charset=\"utf-8\"><style>body{margin:0;padding:8px;font-family:system-ui,sans-serif;font-size:14px}</style></head>\n<body>${html}</body>\n</html>`;\n}\n\nexport const HtmlPreviewBlock: React.FC<HtmlPreviewBlockProps> = ({\n code,\n id,\n}) => {\n const [showPreview, setShowPreview] = useState(false);\n const [expanded, setExpanded] = useState(false);\n const iframeRef = useRef<HTMLIFrameElement>(null);\n const [iframeHeight, setIframeHeight] = useState(200);\n\n const srcdoc = isFullDocument(code) ? code : wrapFragment(code);\n\n useEffect(() => {\n function handleMessage(event: globalThis.MessageEvent) {\n // Sandboxed srcDoc iframes report origin \"null\"; validate source to prevent spoofing.\n if (event.origin !== 'null' && event.origin !== window.location.origin)\n return;\n if (event.source !== iframeRef.current?.contentWindow) return;\n if (event.data?.type === 'HTML_PREVIEW_RESIZE' && event.data?.id === id) {\n setIframeHeight(Math.min(Math.max(event.data.height, 200), 4000));\n }\n }\n window.addEventListener('message', handleMessage);\n return () => window.removeEventListener('message', handleMessage);\n }, [id]);\n\n useEffect(() => {\n if (!expanded) return;\n function handleKey(e: KeyboardEvent) {\n if (e.key === 'Escape') setExpanded(false);\n }\n document.addEventListener('keydown', handleKey);\n return () => document.removeEventListener('keydown', handleKey);\n }, [expanded]);\n\n const togglePreview = useCallback(() => setShowPreview((v) => !v), []);\n\n const headerActions = (\n <>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={togglePreview}\n className=\"h-7 gap-1 px-2 text-xs\"\n >\n {showPreview ? (\n <Code className=\"h-3 w-3\" />\n ) : (\n <Eye className=\"h-3 w-3\" />\n )}\n {showPreview ? 'Code' : 'Preview'}\n </Button>\n {showPreview && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => setExpanded(true)}\n className=\"h-7 w-7 p-0\"\n aria-label=\"Expand preview\"\n >\n <Maximize2 className=\"h-3 w-3\" />\n </Button>\n )}\n </>\n );\n\n return (\n <>\n <FenceBlock code={code} language=\"html\" headerActions={headerActions}>\n <div className=\"relative\">\n {showPreview ? (\n <iframe\n ref={iframeRef}\n srcDoc={srcdoc}\n // `allow-scripts` lets previewed HTML run its own JS (charts, demos,\n // and the optional resize-postMessage handshake). It is intentionally\n // NOT paired with `allow-same-origin`, so the content runs in an\n // opaque (null) origin with no access to this page, cookies, or storage.\n sandbox=\"allow-scripts allow-forms\"\n referrerPolicy=\"no-referrer\"\n className=\"w-full border-0\"\n style={{ height: iframeHeight }}\n title=\"HTML Preview\"\n />\n ) : (\n <pre className=\"overflow-x-auto p-3 text-sm\">\n <code>{code}</code>\n </pre>\n )}\n </div>\n </FenceBlock>\n\n {expanded && (\n <div\n className=\"fixed inset-0 z-50 flex items-center justify-center bg-black/50\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label=\"HTML Preview\"\n >\n <button\n type=\"button\"\n aria-label=\"Close preview\"\n className=\"absolute inset-0 h-full w-full cursor-default border-0 bg-transparent p-0\"\n onClick={() => setExpanded(false)}\n />\n <div className=\"relative h-[90vh] w-[90vw] overflow-hidden rounded-lg bg-white shadow-xl dark:bg-neutral-900\">\n <div className=\"flex items-center justify-between border-b border-neutral-200 px-4 py-2 dark:border-neutral-700\">\n <span className=\"text-sm font-medium\">HTML Preview</span>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => setExpanded(false)}\n >\n Close\n </Button>\n </div>\n <iframe\n srcDoc={srcdoc}\n sandbox=\"allow-scripts allow-forms\"\n referrerPolicy=\"no-referrer\"\n className=\"h-full w-full border-0\"\n title=\"HTML Preview (expanded)\"\n />\n </div>\n </div>\n )}\n </>\n );\n};\n"]}
1
+ {"version":3,"sources":["../src/components/Markdown/HtmlPreviewBlock.tsx"],"names":[],"mappings":"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","file":"chunk-UFYXU7KV.js","sourcesContent":["/** Sandboxed iframe preview for HTML code blocks. */\nimport { Code, Eye, Maximize2 } from 'lucide-react';\nimport React, { useCallback, useEffect, useRef, useState } from 'react';\n\nimport { Button } from '../Button';\nimport { FenceBlock } from './FenceBlock';\n\ninterface HtmlPreviewBlockProps {\n code: string;\n id: string;\n}\n\nfunction isFullDocument(html: string): boolean {\n return /<!DOCTYPE|<html/i.test(html);\n}\n\nfunction wrapFragment(html: string): string {\n return `<!DOCTYPE html>\n<html>\n<head><meta charset=\"utf-8\"><style>body{margin:0;padding:8px;font-family:system-ui,sans-serif;font-size:14px}</style></head>\n<body>${html}</body>\n</html>`;\n}\n\nexport const HtmlPreviewBlock: React.FC<HtmlPreviewBlockProps> = ({\n code,\n id,\n}) => {\n const [showPreview, setShowPreview] = useState(false);\n const [expanded, setExpanded] = useState(false);\n const iframeRef = useRef<HTMLIFrameElement>(null);\n const [iframeHeight, setIframeHeight] = useState(200);\n\n const srcdoc = isFullDocument(code) ? code : wrapFragment(code);\n\n useEffect(() => {\n function handleMessage(event: globalThis.MessageEvent) {\n // Sandboxed srcDoc iframes report origin \"null\"; validate source to prevent spoofing.\n if (event.origin !== 'null' && event.origin !== window.location.origin)\n return;\n if (event.source !== iframeRef.current?.contentWindow) return;\n if (event.data?.type === 'HTML_PREVIEW_RESIZE' && event.data?.id === id) {\n setIframeHeight(Math.min(Math.max(event.data.height, 200), 4000));\n }\n }\n window.addEventListener('message', handleMessage);\n return () => window.removeEventListener('message', handleMessage);\n }, [id]);\n\n useEffect(() => {\n if (!expanded) return;\n function handleKey(e: KeyboardEvent) {\n if (e.key === 'Escape') setExpanded(false);\n }\n document.addEventListener('keydown', handleKey);\n return () => document.removeEventListener('keydown', handleKey);\n }, [expanded]);\n\n const togglePreview = useCallback(() => setShowPreview((v) => !v), []);\n\n const headerActions = (\n <>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={togglePreview}\n className=\"h-7 gap-1 px-2 text-xs\"\n >\n {showPreview ? (\n <Code className=\"h-3 w-3\" />\n ) : (\n <Eye className=\"h-3 w-3\" />\n )}\n {showPreview ? 'Code' : 'Preview'}\n </Button>\n {showPreview && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => setExpanded(true)}\n className=\"h-7 w-7 p-0\"\n aria-label=\"Expand preview\"\n >\n <Maximize2 className=\"h-3 w-3\" />\n </Button>\n )}\n </>\n );\n\n return (\n <>\n <FenceBlock code={code} language=\"html\" headerActions={headerActions}>\n <div className=\"relative\">\n {showPreview ? (\n <iframe\n ref={iframeRef}\n srcDoc={srcdoc}\n // `allow-scripts` lets previewed HTML run its own JS (charts, demos,\n // and the optional resize-postMessage handshake). It is intentionally\n // NOT paired with `allow-same-origin`, so the content runs in an\n // opaque (null) origin with no access to this page, cookies, or storage.\n sandbox=\"allow-scripts allow-forms\"\n referrerPolicy=\"no-referrer\"\n className=\"w-full border-0\"\n style={{ height: iframeHeight }}\n title=\"HTML Preview\"\n />\n ) : (\n <pre className=\"overflow-x-auto p-3 text-sm\">\n <code>{code}</code>\n </pre>\n )}\n </div>\n </FenceBlock>\n\n {expanded && (\n <div\n className=\"fixed inset-0 z-50 flex items-center justify-center bg-black/50\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label=\"HTML Preview\"\n >\n <button\n type=\"button\"\n aria-label=\"Close preview\"\n className=\"absolute inset-0 h-full w-full cursor-default border-0 bg-transparent p-0\"\n onClick={() => setExpanded(false)}\n />\n <div className=\"relative h-[90vh] w-[90vw] overflow-hidden rounded-lg bg-white shadow-xl dark:bg-neutral-900\">\n <div className=\"flex items-center justify-between border-b border-neutral-200 px-4 py-2 dark:border-neutral-700\">\n <span className=\"text-sm font-medium\">HTML Preview</span>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => setExpanded(false)}\n >\n Close\n </Button>\n </div>\n <iframe\n srcDoc={srcdoc}\n sandbox=\"allow-scripts allow-forms\"\n referrerPolicy=\"no-referrer\"\n className=\"h-full w-full border-0\"\n title=\"HTML Preview (expanded)\"\n />\n </div>\n </div>\n )}\n </>\n );\n};\n"]}
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunkUL3PQ7HL_cjs = require('./chunk-UL3PQ7HL.cjs');
3
+ var chunkCKD554XR_cjs = require('./chunk-CKD554XR.cjs');
4
4
  var chunkA2QVQF54_cjs = require('./chunk-A2QVQF54.cjs');
5
5
  var lucideReact = require('lucide-react');
6
6
  var react = require('react');
@@ -99,15 +99,15 @@ var CsvBlock = ({ code, id }) => {
99
99
  setTimeout(() => URL.revokeObjectURL(url), 100);
100
100
  }, [sortedRows, id, papa]);
101
101
  if (loadError) {
102
- return /* @__PURE__ */ jsxRuntime.jsx(chunkUL3PQ7HL_cjs.FenceBlock, { code, language: "csv", error: loadError, children: /* @__PURE__ */ jsxRuntime.jsx("div", {}) });
102
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkCKD554XR_cjs.FenceBlock, { code, language: "csv", error: loadError, children: /* @__PURE__ */ jsxRuntime.jsx("div", {}) });
103
103
  }
104
104
  if (!papa) {
105
- return /* @__PURE__ */ jsxRuntime.jsx(chunkUL3PQ7HL_cjs.FenceBlock, { code, language: "csv", supportsRawView: true, children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center justify-center p-6 text-sm text-neutral-500", children: "Loading CSV parser\u2026" }) });
105
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkCKD554XR_cjs.FenceBlock, { code, language: "csv", supportsRawView: true, children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center justify-center p-6 text-sm text-neutral-500", children: "Loading CSV parser\u2026" }) });
106
106
  }
107
107
  if (parsed.error) {
108
- return /* @__PURE__ */ jsxRuntime.jsx(chunkUL3PQ7HL_cjs.FenceBlock, { code, language: "csv", error: parsed.error, children: /* @__PURE__ */ jsxRuntime.jsx("div", {}) });
108
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkCKD554XR_cjs.FenceBlock, { code, language: "csv", error: parsed.error, children: /* @__PURE__ */ jsxRuntime.jsx("div", {}) });
109
109
  }
110
- return /* @__PURE__ */ jsxRuntime.jsx(chunkUL3PQ7HL_cjs.FenceBlock, { code, language: "csv", supportsRawView: true, children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative", children: [
110
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkCKD554XR_cjs.FenceBlock, { code, language: "csv", supportsRawView: true, children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative", children: [
111
111
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between border-b border-neutral-200 px-3 py-1.5 dark:border-neutral-700", children: [
112
112
  /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-xs text-neutral-500 dark:text-neutral-400", children: [
113
113
  sortedRows.length,
@@ -180,5 +180,5 @@ var CsvBlock = ({ code, id }) => {
180
180
  };
181
181
 
182
182
  exports.CsvBlock = CsvBlock;
183
- //# sourceMappingURL=chunk-VO3NWSCQ.cjs.map
184
- //# sourceMappingURL=chunk-VO3NWSCQ.cjs.map
183
+ //# sourceMappingURL=chunk-V25Z5GR6.cjs.map
184
+ //# sourceMappingURL=chunk-V25Z5GR6.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/Markdown/CsvBlock.tsx"],"names":["useState","useEffect","useMemo","useCallback","jsx","FenceBlock","jsxs","Button","Download"],"mappings":"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","file":"chunk-VO3NWSCQ.cjs","sourcesContent":["/** CSV data rendered as a sortable table. Requires `papaparse`. */\nimport { Download } from 'lucide-react';\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\n\nimport { Button } from '../Button';\nimport { FenceBlock } from './FenceBlock';\n\ninterface CsvBlockProps {\n code: string;\n id: string;\n}\n\ninterface SortConfig {\n column: string;\n direction: 'asc' | 'desc';\n}\n\ntype CsvRow = Record<string, unknown>;\n// Minimal surface of papaparse we actually use, avoiding overload conflicts.\ninterface PapaApi {\n parse(\n input: string,\n config?: Record<string, unknown>\n ): {\n meta: { fields?: string[] };\n data: CsvRow[];\n errors: Array<{ message: string }>;\n };\n unparse(data: unknown): string;\n}\n\nlet papaPromise: Promise<PapaApi> | null = null;\nfunction loadPapa() {\n if (!papaPromise) {\n papaPromise = import(/* @vite-ignore */ 'papaparse')\n .then((mod: { default?: PapaApi } & Partial<PapaApi>) => {\n const api: PapaApi = (mod.default ?? mod) as PapaApi;\n if (!api?.parse) throw new Error('papaparse export not found');\n return api;\n })\n .catch((err) => {\n papaPromise = null;\n throw err as Error;\n });\n }\n return papaPromise;\n}\n\ninterface ParsedCsv {\n headers: string[];\n rows: CsvRow[];\n error: string | null;\n}\n\nexport const CsvBlock: React.FC<CsvBlockProps> = ({ code, id }) => {\n const [sortConfig, setSortConfig] = useState<SortConfig | null>(null);\n const [papa, setPapa] = useState<PapaApi | null>(null);\n const [loadError, setLoadError] = useState<string | null>(null);\n\n useEffect(() => {\n let cancelled = false;\n loadPapa()\n .then((api) => {\n if (!cancelled) setPapa(api);\n })\n .catch(() => {\n if (!cancelled)\n setLoadError(\n 'CSV preview requires the `papaparse` package. Install it with `npm install papaparse`.'\n );\n });\n return () => {\n cancelled = true;\n };\n }, []);\n\n const parsed = useMemo<ParsedCsv>(() => {\n if (!papa) return { headers: [], rows: [], error: null };\n try {\n const result = papa.parse(code, {\n header: true,\n dynamicTyping: true,\n skipEmptyLines: 'greedy',\n });\n if (result.errors?.length) {\n return {\n headers: result.meta.fields ?? [],\n rows: result.data,\n error: result.errors.map((e) => e.message).join('; '),\n };\n }\n return {\n headers: result.meta.fields ?? [],\n rows: result.data,\n error: null,\n };\n } catch (err) {\n return { headers: [], rows: [], error: (err as Error).message };\n }\n }, [code, papa]);\n\n const sortedRows = useMemo(() => {\n if (!sortConfig || parsed.error) return parsed.rows;\n return [...parsed.rows].sort((a, b) => {\n const aVal = a[sortConfig.column];\n const bVal = b[sortConfig.column];\n if (aVal == null && bVal == null) return 0;\n if (aVal == null) return 1;\n if (bVal == null) return -1;\n const cmp =\n typeof aVal === 'number' && typeof bVal === 'number'\n ? aVal - bVal\n : String(aVal).localeCompare(String(bVal));\n return sortConfig.direction === 'asc' ? cmp : -cmp;\n });\n }, [parsed.rows, sortConfig, parsed.error]);\n\n const handleSort = useCallback((column: string) => {\n setSortConfig((prev) => {\n if (prev?.column === column) {\n return prev.direction === 'asc' ? { column, direction: 'desc' } : null;\n }\n return { column, direction: 'asc' };\n });\n }, []);\n\n const handleExportCsv = useCallback(() => {\n if (!papa) return;\n const csvContent = papa.unparse(sortedRows);\n const blob = new Blob([csvContent], { type: 'text/csv;charset=utf-8;' });\n const url = URL.createObjectURL(blob);\n const link = document.createElement('a');\n link.href = url;\n link.download = `data-${id}.csv`;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n setTimeout(() => URL.revokeObjectURL(url), 100);\n }, [sortedRows, id, papa]);\n\n if (loadError) {\n return (\n <FenceBlock code={code} language=\"csv\" error={loadError}>\n <div />\n </FenceBlock>\n );\n }\n\n if (!papa) {\n return (\n <FenceBlock code={code} language=\"csv\" supportsRawView>\n <div className=\"flex items-center justify-center p-6 text-sm text-neutral-500\">\n Loading CSV parser…\n </div>\n </FenceBlock>\n );\n }\n\n if (parsed.error) {\n return (\n <FenceBlock code={code} language=\"csv\" error={parsed.error}>\n <div />\n </FenceBlock>\n );\n }\n\n return (\n <FenceBlock code={code} language=\"csv\" supportsRawView>\n <div className=\"relative\">\n <div className=\"flex items-center justify-between border-b border-neutral-200 px-3 py-1.5 dark:border-neutral-700\">\n <span className=\"text-xs text-neutral-500 dark:text-neutral-400\">\n {sortedRows.length} row{sortedRows.length !== 1 ? 's' : ''} ×{' '}\n {parsed.headers.length} column\n {parsed.headers.length !== 1 ? 's' : ''}\n </span>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={handleExportCsv}\n aria-label=\"Export CSV\"\n className=\"h-7 gap-1 px-2 text-xs\"\n >\n <Download className=\"h-3 w-3\" />\n Export\n </Button>\n </div>\n\n <div className=\"max-h-96 overflow-auto\">\n <table className=\"min-w-full text-sm\">\n <thead className=\"sticky top-0 bg-neutral-100 dark:bg-neutral-800\">\n <tr>\n {parsed.headers.map((header) => {\n const isSorted = sortConfig?.column === header;\n const ariaSort = isSorted\n ? sortConfig.direction === 'asc'\n ? 'ascending'\n : 'descending'\n : 'none';\n return (\n <th\n key={header}\n scope=\"col\"\n aria-sort={ariaSort}\n className=\"px-3 py-2 text-left text-xs font-medium whitespace-nowrap text-neutral-600 dark:text-neutral-400\"\n >\n <button\n type=\"button\"\n onClick={() => handleSort(header)}\n className=\"flex w-full cursor-pointer items-center gap-1 text-left font-medium select-none hover:text-neutral-900 dark:hover:text-neutral-200\"\n >\n {header}\n {isSorted && (\n <span aria-hidden=\"true\">\n {sortConfig.direction === 'asc' ? '↑' : '↓'}\n </span>\n )}\n </button>\n </th>\n );\n })}\n </tr>\n </thead>\n <tbody className=\"divide-y divide-neutral-200 dark:divide-neutral-700\">\n {sortedRows.map((row, i) => (\n <tr\n key={i}\n className=\"hover:bg-neutral-50 dark:hover:bg-neutral-800/50\"\n >\n {parsed.headers.map((header) => (\n <td\n key={header}\n className=\"px-3 py-1.5 whitespace-nowrap text-neutral-700 dark:text-neutral-300\"\n >\n {row[header] != null ? String(row[header]) : ''}\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n </div>\n </FenceBlock>\n );\n};\n"]}
1
+ {"version":3,"sources":["../src/components/Markdown/CsvBlock.tsx"],"names":["useState","useEffect","useMemo","useCallback","jsx","FenceBlock","jsxs","Button","Download"],"mappings":"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","file":"chunk-V25Z5GR6.cjs","sourcesContent":["/** CSV data rendered as a sortable table. Requires `papaparse`. */\nimport { Download } from 'lucide-react';\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\n\nimport { Button } from '../Button';\nimport { FenceBlock } from './FenceBlock';\n\ninterface CsvBlockProps {\n code: string;\n id: string;\n}\n\ninterface SortConfig {\n column: string;\n direction: 'asc' | 'desc';\n}\n\ntype CsvRow = Record<string, unknown>;\n// Minimal surface of papaparse we actually use, avoiding overload conflicts.\ninterface PapaApi {\n parse(\n input: string,\n config?: Record<string, unknown>\n ): {\n meta: { fields?: string[] };\n data: CsvRow[];\n errors: Array<{ message: string }>;\n };\n unparse(data: unknown): string;\n}\n\nlet papaPromise: Promise<PapaApi> | null = null;\nfunction loadPapa() {\n if (!papaPromise) {\n papaPromise = import(/* @vite-ignore */ 'papaparse')\n .then((mod: { default?: PapaApi } & Partial<PapaApi>) => {\n const api: PapaApi = (mod.default ?? mod) as PapaApi;\n if (!api?.parse) throw new Error('papaparse export not found');\n return api;\n })\n .catch((err) => {\n papaPromise = null;\n throw err as Error;\n });\n }\n return papaPromise;\n}\n\ninterface ParsedCsv {\n headers: string[];\n rows: CsvRow[];\n error: string | null;\n}\n\nexport const CsvBlock: React.FC<CsvBlockProps> = ({ code, id }) => {\n const [sortConfig, setSortConfig] = useState<SortConfig | null>(null);\n const [papa, setPapa] = useState<PapaApi | null>(null);\n const [loadError, setLoadError] = useState<string | null>(null);\n\n useEffect(() => {\n let cancelled = false;\n loadPapa()\n .then((api) => {\n if (!cancelled) setPapa(api);\n })\n .catch(() => {\n if (!cancelled)\n setLoadError(\n 'CSV preview requires the `papaparse` package. Install it with `npm install papaparse`.'\n );\n });\n return () => {\n cancelled = true;\n };\n }, []);\n\n const parsed = useMemo<ParsedCsv>(() => {\n if (!papa) return { headers: [], rows: [], error: null };\n try {\n const result = papa.parse(code, {\n header: true,\n dynamicTyping: true,\n skipEmptyLines: 'greedy',\n });\n if (result.errors?.length) {\n return {\n headers: result.meta.fields ?? [],\n rows: result.data,\n error: result.errors.map((e) => e.message).join('; '),\n };\n }\n return {\n headers: result.meta.fields ?? [],\n rows: result.data,\n error: null,\n };\n } catch (err) {\n return { headers: [], rows: [], error: (err as Error).message };\n }\n }, [code, papa]);\n\n const sortedRows = useMemo(() => {\n if (!sortConfig || parsed.error) return parsed.rows;\n return [...parsed.rows].sort((a, b) => {\n const aVal = a[sortConfig.column];\n const bVal = b[sortConfig.column];\n if (aVal == null && bVal == null) return 0;\n if (aVal == null) return 1;\n if (bVal == null) return -1;\n const cmp =\n typeof aVal === 'number' && typeof bVal === 'number'\n ? aVal - bVal\n : String(aVal).localeCompare(String(bVal));\n return sortConfig.direction === 'asc' ? cmp : -cmp;\n });\n }, [parsed.rows, sortConfig, parsed.error]);\n\n const handleSort = useCallback((column: string) => {\n setSortConfig((prev) => {\n if (prev?.column === column) {\n return prev.direction === 'asc' ? { column, direction: 'desc' } : null;\n }\n return { column, direction: 'asc' };\n });\n }, []);\n\n const handleExportCsv = useCallback(() => {\n if (!papa) return;\n const csvContent = papa.unparse(sortedRows);\n const blob = new Blob([csvContent], { type: 'text/csv;charset=utf-8;' });\n const url = URL.createObjectURL(blob);\n const link = document.createElement('a');\n link.href = url;\n link.download = `data-${id}.csv`;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n setTimeout(() => URL.revokeObjectURL(url), 100);\n }, [sortedRows, id, papa]);\n\n if (loadError) {\n return (\n <FenceBlock code={code} language=\"csv\" error={loadError}>\n <div />\n </FenceBlock>\n );\n }\n\n if (!papa) {\n return (\n <FenceBlock code={code} language=\"csv\" supportsRawView>\n <div className=\"flex items-center justify-center p-6 text-sm text-neutral-500\">\n Loading CSV parser…\n </div>\n </FenceBlock>\n );\n }\n\n if (parsed.error) {\n return (\n <FenceBlock code={code} language=\"csv\" error={parsed.error}>\n <div />\n </FenceBlock>\n );\n }\n\n return (\n <FenceBlock code={code} language=\"csv\" supportsRawView>\n <div className=\"relative\">\n <div className=\"flex items-center justify-between border-b border-neutral-200 px-3 py-1.5 dark:border-neutral-700\">\n <span className=\"text-xs text-neutral-500 dark:text-neutral-400\">\n {sortedRows.length} row{sortedRows.length !== 1 ? 's' : ''} ×{' '}\n {parsed.headers.length} column\n {parsed.headers.length !== 1 ? 's' : ''}\n </span>\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={handleExportCsv}\n aria-label=\"Export CSV\"\n className=\"h-7 gap-1 px-2 text-xs\"\n >\n <Download className=\"h-3 w-3\" />\n Export\n </Button>\n </div>\n\n <div className=\"max-h-96 overflow-auto\">\n <table className=\"min-w-full text-sm\">\n <thead className=\"sticky top-0 bg-neutral-100 dark:bg-neutral-800\">\n <tr>\n {parsed.headers.map((header) => {\n const isSorted = sortConfig?.column === header;\n const ariaSort = isSorted\n ? sortConfig.direction === 'asc'\n ? 'ascending'\n : 'descending'\n : 'none';\n return (\n <th\n key={header}\n scope=\"col\"\n aria-sort={ariaSort}\n className=\"px-3 py-2 text-left text-xs font-medium whitespace-nowrap text-neutral-600 dark:text-neutral-400\"\n >\n <button\n type=\"button\"\n onClick={() => handleSort(header)}\n className=\"flex w-full cursor-pointer items-center gap-1 text-left font-medium select-none hover:text-neutral-900 dark:hover:text-neutral-200\"\n >\n {header}\n {isSorted && (\n <span aria-hidden=\"true\">\n {sortConfig.direction === 'asc' ? '↑' : '↓'}\n </span>\n )}\n </button>\n </th>\n );\n })}\n </tr>\n </thead>\n <tbody className=\"divide-y divide-neutral-200 dark:divide-neutral-700\">\n {sortedRows.map((row, i) => (\n <tr\n key={i}\n className=\"hover:bg-neutral-50 dark:hover:bg-neutral-800/50\"\n >\n {parsed.headers.map((header) => (\n <td\n key={header}\n className=\"px-3 py-1.5 whitespace-nowrap text-neutral-700 dark:text-neutral-300\"\n >\n {row[header] != null ? String(row[header]) : ''}\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n </div>\n </FenceBlock>\n );\n};\n"]}
@@ -1,4 +1,4 @@
1
- import { FenceBlock } from './chunk-MHJMUKLA.js';
1
+ import { FenceBlock } from './chunk-RHYIFIT5.js';
2
2
  import { lazy, useRef, useCallback, useMemo, useState, useEffect, Suspense } from 'react';
3
3
  import DOMPurify from 'dompurify';
4
4
  import hljs from 'highlight.js/lib/core';
@@ -218,25 +218,34 @@ function useMarkdown() {
218
218
  }
219
219
  var CodeBlock = ({ code, language }) => {
220
220
  const html = useMemo(() => highlightCode(code, language), [code, language]);
221
- return /* @__PURE__ */ jsx(FenceBlock, { code, language, children: /* @__PURE__ */ jsx("pre", { className: "m-0 overflow-x-auto !bg-transparent p-3 text-sm", children: /* @__PURE__ */ jsx(
222
- "code",
221
+ return /* @__PURE__ */ jsx(FenceBlock, { code, language, children: /* @__PURE__ */ jsx(
222
+ "pre",
223
223
  {
224
- className: "hljs bg-transparent p-0",
225
- dangerouslySetInnerHTML: { __html: html }
224
+ className: "m-0 overflow-x-auto !bg-transparent p-3 text-sm",
225
+ tabIndex: 0,
226
+ role: "region",
227
+ "aria-label": language ? `${language} code` : "Code",
228
+ children: /* @__PURE__ */ jsx(
229
+ "code",
230
+ {
231
+ className: "hljs bg-transparent p-0",
232
+ dangerouslySetInnerHTML: { __html: html }
233
+ }
234
+ )
226
235
  }
227
- ) }) });
236
+ ) });
228
237
  };
229
238
  var CsvBlock = lazy(
230
- () => import('./CsvBlock-AAV4QMSF.js').then((m) => ({ default: m.CsvBlock }))
239
+ () => import('./CsvBlock-D6PWAJ5X.js').then((m) => ({ default: m.CsvBlock }))
231
240
  );
232
241
  var HtmlPreviewBlock = lazy(
233
- () => import('./HtmlPreviewBlock-DNINC7RW.js').then((m) => ({ default: m.HtmlPreviewBlock }))
242
+ () => import('./HtmlPreviewBlock-PEHTJ6C3.js').then((m) => ({ default: m.HtmlPreviewBlock }))
234
243
  );
235
244
  var MermaidBlock = lazy(
236
- () => import('./MermaidBlock-PKXGFGU6.js').then((m) => ({ default: m.MermaidBlock }))
245
+ () => import('./MermaidBlock-7NK3AVK2.js').then((m) => ({ default: m.MermaidBlock }))
237
246
  );
238
247
  var SurveyBlock = lazy(
239
- () => import('./SurveyBlock-IULSBG22.js').then((m) => ({ default: m.SurveyBlock }))
248
+ () => import('./SurveyBlock-NNDGXGG4.js').then((m) => ({ default: m.SurveyBlock }))
240
249
  );
241
250
  var BlockFallback = () => /* @__PURE__ */ jsx("div", { className: "flex items-center justify-center p-4 text-sm text-neutral-500", children: "Loading\u2026" });
242
251
  var BLOCK_RE = /<div data-block-type="([^"]+)" data-block-id="([^"]+)" data-code="([^"]*)"([^>]*\bdata-md-fence="1"[^>]*)><\/div>/g;
@@ -314,5 +323,5 @@ var MarkdownRenderer = ({
314
323
  };
315
324
 
316
325
  export { CodeBlock, MarkdownRenderer, highlightCode, useMarkdown };
317
- //# sourceMappingURL=chunk-NSLR3B7K.js.map
318
- //# sourceMappingURL=chunk-NSLR3B7K.js.map
326
+ //# sourceMappingURL=chunk-XL7TTKHP.js.map
327
+ //# sourceMappingURL=chunk-XL7TTKHP.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/Markdown/useMarkdown.ts","../src/components/Markdown/CodeBlock.tsx","../src/components/Markdown/MarkdownRenderer.tsx"],"names":["useMemo","jsx"],"mappings":"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","file":"chunk-XL7TTKHP.js","sourcesContent":["/** useMarkdown — converts markdown to sanitised HTML with hljs highlighting and special fence blocks. */\nimport DOMPurify from 'dompurify';\nimport hljs from 'highlight.js/lib/core';\n\nfunction escapeHtml(str: string): string {\n return str\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;')\n .replace(/'/g, '&#039;');\n}\nimport bash from 'highlight.js/lib/languages/bash';\nimport css from 'highlight.js/lib/languages/css';\nimport javascript from 'highlight.js/lib/languages/javascript';\nimport json from 'highlight.js/lib/languages/json';\nimport markdown from 'highlight.js/lib/languages/markdown';\nimport python from 'highlight.js/lib/languages/python';\nimport sql from 'highlight.js/lib/languages/sql';\nimport typescript from 'highlight.js/lib/languages/typescript';\nimport xml from 'highlight.js/lib/languages/xml';\nimport yaml from 'highlight.js/lib/languages/yaml';\nimport { marked, type MarkedOptions, type Tokens } from 'marked';\nimport { useCallback, useMemo, useRef } from 'react';\n\nhljs.registerLanguage('javascript', javascript);\nhljs.registerLanguage('typescript', typescript);\nhljs.registerLanguage('python', python);\nhljs.registerLanguage('json', json);\nhljs.registerLanguage('xml', xml);\nhljs.registerLanguage('html', xml);\nhljs.registerLanguage('css', css);\nhljs.registerLanguage('bash', bash);\nhljs.registerLanguage('shell', bash);\nhljs.registerLanguage('sql', sql);\nhljs.registerLanguage('yaml', yaml);\nhljs.registerLanguage('yml', yaml);\nhljs.registerLanguage('markdown', markdown);\nhljs.registerLanguage('md', markdown);\n\nconst lazyLanguages: Record<string, () => Promise<unknown>> = {\n java: () => import('highlight.js/lib/languages/java'),\n cpp: () => import('highlight.js/lib/languages/cpp'),\n 'c++': () => import('highlight.js/lib/languages/cpp'),\n c: () => import('highlight.js/lib/languages/c'),\n csharp: () => import('highlight.js/lib/languages/csharp'),\n php: () => import('highlight.js/lib/languages/php'),\n ruby: () => import('highlight.js/lib/languages/ruby'),\n go: () => import('highlight.js/lib/languages/go'),\n rust: () => import('highlight.js/lib/languages/rust'),\n perl: () => import('highlight.js/lib/languages/perl'),\n r: () => import('highlight.js/lib/languages/r'),\n makefile: () => import('highlight.js/lib/languages/makefile'),\n dockerfile: () => import('highlight.js/lib/languages/dockerfile'),\n};\n\nconst loadedLanguages = new Set<string>([\n 'javascript',\n 'typescript',\n 'python',\n 'json',\n 'xml',\n 'html',\n 'css',\n 'bash',\n 'shell',\n 'sql',\n 'yaml',\n 'yml',\n 'markdown',\n 'md',\n]);\n\nasync function ensureLanguage(lang: string): Promise<boolean> {\n const key = lang.toLowerCase();\n if (loadedLanguages.has(key)) return true;\n const loader = lazyLanguages[key];\n if (!loader) return false;\n try {\n const mod = (await loader()) as { default: unknown };\n hljs.registerLanguage(\n key,\n mod.default as Parameters<typeof hljs.registerLanguage>[1]\n );\n loadedLanguages.add(key);\n return true;\n } catch {\n return false;\n }\n}\n\nexport function highlightCode(code: string, lang?: string): string {\n if (lang && loadedLanguages.has(lang.toLowerCase())) {\n try {\n return hljs.highlight(code, { language: lang.toLowerCase() }).value;\n } catch {\n /* fall through */\n }\n }\n try {\n const result = hljs.highlightAuto(code);\n if (result.relevance > 5) return result.value;\n } catch {\n /* fall through */\n }\n return escapeHtml(code);\n}\n\nfunction sanitise(html: string): string {\n return DOMPurify.sanitize(html, {\n ADD_ATTR: [\n 'target',\n 'rel',\n 'data-block-type',\n 'data-block-id',\n 'data-code',\n 'data-lang',\n 'data-md-fence',\n ],\n }) as string;\n}\n\n// Use globalThis to prevent duplicate DOMPurify hook registration across HMR reloads.\nconst _g = globalThis as unknown as Record<string, boolean>;\n// Guard against SSR: DOMPurify hooks operate on the DOM, so only register in the browser.\nif (typeof document !== 'undefined' && !_g.__markdownAnchorHookInstalled) {\n _g.__markdownAnchorHookInstalled = true;\n DOMPurify.addHook('afterSanitizeAttributes', (node: Element) => {\n const isAnchor =\n (typeof HTMLAnchorElement !== 'undefined' &&\n node instanceof HTMLAnchorElement) ||\n node.nodeName === 'A';\n if (isAnchor) {\n node.setAttribute('target', '_blank');\n node.setAttribute('rel', 'noopener noreferrer');\n }\n });\n}\n\nlet blockCounter = 0;\n\nfunction createRenderer() {\n const renderer = new marked.Renderer();\n\n renderer.code = function (this: unknown, token: Tokens.Code) {\n const { text: code, lang = '' } = token;\n const normalised = lang.toLowerCase().trim();\n const blockId = `block-${++blockCounter}`;\n const encodedCode = encodeURIComponent(code);\n const sentinel = 'data-md-fence=\"1\"';\n\n switch (normalised) {\n case 'mermaid':\n return `<div data-block-type=\"mermaid\" data-block-id=\"${blockId}\" data-code=\"${encodedCode}\" ${sentinel}></div>`;\n case 'csv':\n return `<div data-block-type=\"csv\" data-block-id=\"${blockId}\" data-code=\"${encodedCode}\" ${sentinel}></div>`;\n case 'survey':\n return `<div data-block-type=\"survey\" data-block-id=\"${blockId}\" data-code=\"${encodedCode}\" ${sentinel}></div>`;\n case 'html':\n return `<div data-block-type=\"html-preview\" data-block-id=\"${blockId}\" data-code=\"${encodedCode}\" ${sentinel}></div>`;\n default:\n return `<div data-block-type=\"code\" data-block-id=\"${blockId}\" data-code=\"${encodedCode}\" data-lang=\"${escapeHtml(normalised)}\" ${sentinel}></div>`;\n }\n };\n\n renderer.link = function (this: unknown, token: Tokens.Link) {\n const { href, title, tokens } = token;\n const text =\n this && typeof (this as Record<string, unknown>).parser === 'object'\n ? (\n this as {\n parser: { parseInline: (t: Tokens.Link['tokens']) => string };\n }\n ).parser.parseInline(tokens)\n : token.text;\n const titleAttr = title ? ` title=\"${escapeHtml(title)}\"` : '';\n return `<a href=\"${escapeHtml(href)}\" target=\"_blank\" rel=\"noopener noreferrer\"${titleAttr}>${text}</a>`;\n };\n\n renderer.table = function (this: unknown, token: Tokens.Table) {\n const headerCells = token.header\n .map((cell) => {\n const content =\n this && typeof (this as Record<string, unknown>).parser === 'object'\n ? (\n this as {\n parser: {\n parseInline: (t: Tokens.TableCell['tokens']) => string;\n };\n }\n ).parser.parseInline(cell.tokens)\n : cell.text;\n return `<th>${content}</th>`;\n })\n .join('');\n\n const bodyRows = token.rows\n .map((row) => {\n const cells = row\n .map((cell) => {\n const content =\n this &&\n typeof (this as Record<string, unknown>).parser === 'object'\n ? (\n this as {\n parser: {\n parseInline: (t: Tokens.TableCell['tokens']) => string;\n };\n }\n ).parser.parseInline(cell.tokens)\n : cell.text;\n return `<td>${content}</td>`;\n })\n .join('');\n return `<tr>${cells}</tr>`;\n })\n .join('');\n\n return `<div class=\"overflow-x-auto\"><table class=\"min-w-full divide-y divide-neutral-200 dark:divide-neutral-700\"><thead><tr>${headerCells}</tr></thead><tbody class=\"divide-y divide-neutral-200 dark:divide-neutral-700\">${bodyRows}</tbody></table></div>`;\n };\n\n return renderer;\n}\n\nfunction makeMarkedOptions(): MarkedOptions {\n return { gfm: true, breaks: true, renderer: createRenderer() };\n}\n\nconst CACHE_MAX = 100;\nconst renderCache = new Map<string, string>();\nfunction cacheSet(key: string, value: string) {\n if (renderCache.size >= CACHE_MAX) {\n renderCache.delete(renderCache.keys().next().value as string);\n }\n renderCache.set(key, value);\n}\n\nexport interface UseMarkdownResult {\n /** Render markdown text to sanitised HTML string */\n render: (text: string, cacheKey?: string) => string;\n /** Async-render that lazy-loads needed languages first */\n renderAsync: (text: string, cacheKey?: string) => Promise<string>;\n /** Clear the render cache */\n clearCache: () => void;\n}\n\nexport function useMarkdown(): UseMarkdownResult {\n const cacheRef = useRef(renderCache);\n\n const render = useCallback((text: string, cacheKey?: string): string => {\n if (!text) return '';\n const key = cacheKey ?? text;\n const cached = cacheRef.current.get(key);\n if (cached) return cached;\n\n const raw = marked.parse(text, {\n ...makeMarkedOptions(),\n async: false,\n }) as string;\n const clean = sanitise(raw);\n cacheSet(key, clean);\n return clean;\n }, []);\n\n const renderAsync = useCallback(\n async (text: string, cacheKey?: string): Promise<string> => {\n if (!text) return '';\n const key = cacheKey ?? text;\n const cached = cacheRef.current.get(key);\n if (cached) return cached;\n\n // Allow `+`, `-`, `.` in language identifiers (c++, objective-c, bash-session, etc.)\n const fenceRegex = /^```([\\w+\\-.]+)\\s*$/gm;\n let match: RegExpExecArray | null;\n const langs: string[] = [];\n while ((match = fenceRegex.exec(text)) !== null) {\n langs.push(match[1]);\n }\n await Promise.all(langs.map((l) => ensureLanguage(l)));\n\n const raw = await marked.parse(text, makeMarkedOptions());\n const clean = sanitise(raw);\n cacheSet(key, clean);\n return clean;\n },\n []\n );\n\n const clearCache = useCallback(() => {\n cacheRef.current.clear();\n }, []);\n\n return useMemo(\n () => ({ render, renderAsync, clearCache }),\n [render, renderAsync, clearCache]\n );\n}\n","/**\n * CodeBlock — Renders a syntax-highlighted code fence using FenceBlock.\n *\n * Used by `MarkdownRenderer` for plain (non-special) fenced code blocks.\n * Highlighting is performed synchronously via the `highlightCode` helper from\n * `useMarkdown`; if the language was not pre-registered with highlight.js the\n * helper falls back to escaped raw text.\n */\nimport React, { useMemo } from 'react';\n\nimport { FenceBlock } from './FenceBlock';\nimport { highlightCode } from './useMarkdown';\n\ninterface CodeBlockProps {\n code: string;\n language?: string;\n}\n\nexport const CodeBlock: React.FC<CodeBlockProps> = ({ code, language }) => {\n const html = useMemo(() => highlightCode(code, language), [code, language]);\n\n return (\n <FenceBlock code={code} language={language}>\n {/* Focusable so keyboard users can horizontally scroll long lines\n (axe: scrollable-region-focusable). */}\n <pre\n className=\"m-0 overflow-x-auto !bg-transparent p-3 text-sm\"\n // eslint-disable-next-line jsx-a11y/no-noninteractive-tabindex -- scrollable code needs keyboard focus\n tabIndex={0}\n role=\"region\"\n aria-label={language ? `${language} code` : 'Code'}\n >\n <code\n className=\"hljs bg-transparent p-0\"\n dangerouslySetInnerHTML={{ __html: html }}\n />\n </pre>\n </FenceBlock>\n );\n};\n","/**\n * MarkdownRenderer — renders markdown with React components for special fence blocks.\n */\nimport React, { Suspense, lazy, useEffect, useState } from 'react';\n\nimport './styles.css';\nimport { CodeBlock } from './CodeBlock';\nimport { useMarkdown } from './useMarkdown';\n\n// Block components are lazy-loaded so optional peer deps (papaparse, js-yaml, mermaid)\n// aren't bundled unless actually rendered.\nconst CsvBlock = lazy(() =>\n import('./CsvBlock').then((m) => ({ default: m.CsvBlock }))\n);\nconst HtmlPreviewBlock = lazy(() =>\n import('./HtmlPreviewBlock').then((m) => ({ default: m.HtmlPreviewBlock }))\n);\nconst MermaidBlock = lazy(() =>\n import('./MermaidBlock').then((m) => ({ default: m.MermaidBlock }))\n);\nconst SurveyBlock = lazy(() =>\n import('./SurveyBlock').then((m) => ({ default: m.SurveyBlock }))\n);\n\nconst BlockFallback: React.FC = () => (\n <div className=\"flex items-center justify-center p-4 text-sm text-neutral-500\">\n Loading…\n </div>\n);\n\nexport interface MarkdownRendererProps {\n /** Raw markdown text */\n text: string;\n /** Cache key (e.g., message._id + revisionNumber) */\n cacheKey?: string;\n /** Additional CSS classes */\n className?: string;\n /** Whether the message is still streaming (may have incomplete blocks) */\n streaming?: boolean;\n}\n\n// Matches fence block markers emitted by useMarkdown (sentinel data-md-fence prevents raw-HTML injection)\nconst BLOCK_RE =\n /<div data-block-type=\"([^\"]+)\" data-block-id=\"([^\"]+)\" data-code=\"([^\"]*)\"([^>]*\\bdata-md-fence=\"1\"[^>]*)><\\/div>/g;\n\ninterface HtmlSegment {\n html: string;\n}\ninterface BlockSegment {\n type: string;\n id: string;\n code: string;\n lang?: string;\n}\ntype Segment = HtmlSegment | BlockSegment;\n\nfunction splitHtml(html: string): Segment[] {\n const segments: Segment[] = [];\n let last = 0;\n for (const m of html.matchAll(BLOCK_RE)) {\n if (m.index > last) segments.push({ html: html.slice(last, m.index) });\n const langMatch = m[4]?.match(/data-lang=\"([^\"]*)\"/)?.[1];\n segments.push({\n type: m[1],\n id: m[2],\n code: (() => {\n try {\n return decodeURIComponent(m[3]);\n } catch {\n return m[3];\n }\n })(),\n lang: langMatch ?? undefined,\n });\n last = m.index + m[0].length;\n }\n if (last < html.length) segments.push({ html: html.slice(last) });\n return segments;\n}\n\nfunction renderBlock(seg: BlockSegment): React.ReactNode {\n const wrap = (node: React.ReactNode) => (\n <Suspense key={seg.id} fallback={<BlockFallback />}>\n {node}\n </Suspense>\n );\n switch (seg.type) {\n case 'mermaid':\n return wrap(<MermaidBlock code={seg.code} id={seg.id} />);\n case 'csv':\n return wrap(<CsvBlock code={seg.code} id={seg.id} />);\n case 'survey':\n return wrap(<SurveyBlock code={seg.code} id={seg.id} />);\n case 'html-preview':\n return wrap(<HtmlPreviewBlock code={seg.code} id={seg.id} />);\n case 'code':\n return wrap(\n <CodeBlock code={seg.code} language={seg.lang || undefined} />\n );\n default:\n return null;\n }\n}\n\nexport const MarkdownRenderer: React.FC<MarkdownRendererProps> = ({\n text,\n cacheKey,\n className = '',\n streaming = false,\n}) => {\n const { render, renderAsync } = useMarkdown();\n const [html, setHtml] = useState('');\n\n useEffect(() => {\n let cancelled = false;\n\n // While streaming, append text length to the cache key so each delta\n // produces a fresh render rather than a stale hit on the messageId.\n const effectiveKey = streaming\n ? cacheKey\n ? `${cacheKey}::${text.length}`\n : undefined\n : cacheKey;\n\n async function doRender() {\n const rendered = await renderAsync(text, effectiveKey);\n if (!cancelled) setHtml(rendered);\n }\n\n if (streaming) {\n setHtml(render(text, effectiveKey));\n } else {\n void doRender();\n }\n\n return () => {\n cancelled = true;\n };\n }, [text, cacheKey, streaming, render, renderAsync]);\n\n const segments = splitHtml(html);\n const proseClass = `md-prose ${className}`.trim();\n\n return (\n <div className={proseClass}>\n {segments.map((seg, i) =>\n 'html' in seg ? (\n <div key={i} dangerouslySetInnerHTML={{ __html: seg.html }} />\n ) : (\n renderBlock(seg)\n )\n )}\n </div>\n );\n};\n"]}
@@ -1,7 +1,8 @@
1
1
  'use strict';
2
2
 
3
- var chunkJC6Y3LGF_cjs = require('../../chunk-JC6Y3LGF.cjs');
3
+ var chunkQUUFKGDF_cjs = require('../../chunk-QUUFKGDF.cjs');
4
4
  require('../../chunk-MSRU3XBH.cjs');
5
+ require('../../chunk-ZDEYV373.cjs');
5
6
  require('../../chunk-CW75IKA6.cjs');
6
7
  require('../../chunk-OR5DRJCW.cjs');
7
8
 
@@ -9,7 +10,7 @@ require('../../chunk-OR5DRJCW.cjs');
9
10
 
10
11
  Object.defineProperty(exports, "DateInput", {
11
12
  enumerable: true,
12
- get: function () { return chunkJC6Y3LGF_cjs.DateInput; }
13
+ get: function () { return chunkQUUFKGDF_cjs.DateInput; }
13
14
  });
14
15
  //# sourceMappingURL=index.cjs.map
15
16
  //# sourceMappingURL=index.cjs.map
@@ -22,6 +22,10 @@ interface DateInputProps extends Omit<InputProps, 'type' | 'onChange' | 'value'>
22
22
  minAge?: number;
23
23
  /** Maximum age for DOB validation */
24
24
  maxAge?: number;
25
+ /** Earliest allowed date in MM/DD/YYYY format. */
26
+ minDate?: string;
27
+ /** Latest allowed date in MM/DD/YYYY format. */
28
+ maxDate?: string;
25
29
  /** Whether to validate on blur */
26
30
  validateOnBlur?: boolean;
27
31
  /** Whether to show a calendar picker button */
@@ -22,6 +22,10 @@ interface DateInputProps extends Omit<InputProps, 'type' | 'onChange' | 'value'>
22
22
  minAge?: number;
23
23
  /** Maximum age for DOB validation */
24
24
  maxAge?: number;
25
+ /** Earliest allowed date in MM/DD/YYYY format. */
26
+ minDate?: string;
27
+ /** Latest allowed date in MM/DD/YYYY format. */
28
+ maxDate?: string;
25
29
  /** Whether to validate on blur */
26
30
  validateOnBlur?: boolean;
27
31
  /** Whether to show a calendar picker button */
@@ -1,5 +1,6 @@
1
- export { DateInput } from '../../chunk-LIH3IZYK.js';
1
+ export { DateInput } from '../../chunk-IHTRKWBG.js';
2
2
  import '../../chunk-PVUDXJAI.js';
3
+ import '../../chunk-QA6ZDHFP.js';
3
4
  import '../../chunk-RC2YMOMS.js';
4
5
  import '../../chunk-F3SOEIN2.js';
5
6
  //# sourceMappingURL=index.js.map
@@ -1,11 +1,11 @@
1
1
  'use strict';
2
2
 
3
- var chunkY65SK5Y2_cjs = require('../../chunk-Y65SK5Y2.cjs');
4
- var chunkVO3NWSCQ_cjs = require('../../chunk-VO3NWSCQ.cjs');
5
- var chunk74NOFB34_cjs = require('../../chunk-74NOFB34.cjs');
6
- var chunkFZQAF3WA_cjs = require('../../chunk-FZQAF3WA.cjs');
7
- var chunk6RV7HQ4U_cjs = require('../../chunk-6RV7HQ4U.cjs');
8
- var chunkUL3PQ7HL_cjs = require('../../chunk-UL3PQ7HL.cjs');
3
+ var chunkJCNPVK74_cjs = require('../../chunk-JCNPVK74.cjs');
4
+ var chunkV25Z5GR6_cjs = require('../../chunk-V25Z5GR6.cjs');
5
+ var chunkBB4WQ4LV_cjs = require('../../chunk-BB4WQ4LV.cjs');
6
+ var chunkCVC4NWFA_cjs = require('../../chunk-CVC4NWFA.cjs');
7
+ var chunkKBEKQMVY_cjs = require('../../chunk-KBEKQMVY.cjs');
8
+ var chunkCKD554XR_cjs = require('../../chunk-CKD554XR.cjs');
9
9
  require('../../chunk-A2QVQF54.cjs');
10
10
  require('../../chunk-OR5DRJCW.cjs');
11
11
 
@@ -13,39 +13,39 @@ require('../../chunk-OR5DRJCW.cjs');
13
13
 
14
14
  Object.defineProperty(exports, "CodeBlock", {
15
15
  enumerable: true,
16
- get: function () { return chunkY65SK5Y2_cjs.CodeBlock; }
16
+ get: function () { return chunkJCNPVK74_cjs.CodeBlock; }
17
17
  });
18
18
  Object.defineProperty(exports, "MarkdownRenderer", {
19
19
  enumerable: true,
20
- get: function () { return chunkY65SK5Y2_cjs.MarkdownRenderer; }
20
+ get: function () { return chunkJCNPVK74_cjs.MarkdownRenderer; }
21
21
  });
22
22
  Object.defineProperty(exports, "highlightCode", {
23
23
  enumerable: true,
24
- get: function () { return chunkY65SK5Y2_cjs.highlightCode; }
24
+ get: function () { return chunkJCNPVK74_cjs.highlightCode; }
25
25
  });
26
26
  Object.defineProperty(exports, "useMarkdown", {
27
27
  enumerable: true,
28
- get: function () { return chunkY65SK5Y2_cjs.useMarkdown; }
28
+ get: function () { return chunkJCNPVK74_cjs.useMarkdown; }
29
29
  });
30
30
  Object.defineProperty(exports, "CsvBlock", {
31
31
  enumerable: true,
32
- get: function () { return chunkVO3NWSCQ_cjs.CsvBlock; }
32
+ get: function () { return chunkV25Z5GR6_cjs.CsvBlock; }
33
33
  });
34
34
  Object.defineProperty(exports, "HtmlPreviewBlock", {
35
35
  enumerable: true,
36
- get: function () { return chunk74NOFB34_cjs.HtmlPreviewBlock; }
36
+ get: function () { return chunkBB4WQ4LV_cjs.HtmlPreviewBlock; }
37
37
  });
38
38
  Object.defineProperty(exports, "MermaidBlock", {
39
39
  enumerable: true,
40
- get: function () { return chunkFZQAF3WA_cjs.MermaidBlock; }
40
+ get: function () { return chunkCVC4NWFA_cjs.MermaidBlock; }
41
41
  });
42
42
  Object.defineProperty(exports, "SurveyBlock", {
43
43
  enumerable: true,
44
- get: function () { return chunk6RV7HQ4U_cjs.SurveyBlock; }
44
+ get: function () { return chunkKBEKQMVY_cjs.SurveyBlock; }
45
45
  });
46
46
  Object.defineProperty(exports, "FenceBlock", {
47
47
  enumerable: true,
48
- get: function () { return chunkUL3PQ7HL_cjs.FenceBlock; }
48
+ get: function () { return chunkCKD554XR_cjs.FenceBlock; }
49
49
  });
50
50
  //# sourceMappingURL=index.cjs.map
51
51
  //# sourceMappingURL=index.cjs.map
@@ -1,7 +1,7 @@
1
1
  /* src/components/Markdown/styles.css */
2
2
  pre code.hljs {
3
3
  display: block;
4
- overflow-x: auto;
4
+ overflow-x: visible;
5
5
  padding: 1em;
6
6
  background: transparent;
7
7
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/Markdown/styles.css"],"sourcesContent":["/*\n * highlight.js theme — atom-one-light (default) + atom-one-dark (scoped).\n *\n * Bundled in-tree (rather than via `@import 'highlight.js/styles/...'`) so we\n * can scope the dark variant under `[data-theme=\"dark\"]` and keep theme\n * switching synchronous — no FOUC on streamed code blocks.\n *\n * Source: highlight.js v11 atom-one-light / atom-one-dark themes.\n */\n\n/* Layout (theme-agnostic) */\npre code.hljs {\n display: block;\n overflow-x: auto;\n padding: 1em;\n /* Transparent so the parent container's background is the single source of truth */\n background: transparent;\n}\ncode.hljs {\n padding: 3px 5px;\n}\n\n/* atom-one-light (default) */\n.hljs {\n color: #383a42;\n background: #fafafa;\n}\n.hljs-comment,\n.hljs-quote {\n color: #707179;\n font-style: italic;\n}\n.hljs-doctag,\n.hljs-formula,\n.hljs-keyword {\n color: #a626a4;\n}\n.hljs-deletion,\n.hljs-name,\n.hljs-section,\n.hljs-selector-tag,\n.hljs-subst {\n color: #d72f20;\n}\n.hljs-literal {\n color: #0179ac;\n}\n.hljs-addition,\n.hljs-attribute,\n.hljs-meta .hljs-string,\n.hljs-regexp,\n.hljs-string {\n color: #3f7f3e;\n}\n.hljs-attr,\n.hljs-number,\n.hljs-selector-attr,\n.hljs-selector-class,\n.hljs-selector-pseudo,\n.hljs-template-variable,\n.hljs-type,\n.hljs-variable {\n color: #986801;\n}\n.hljs-bullet,\n.hljs-link,\n.hljs-meta,\n.hljs-selector-id,\n.hljs-symbol,\n.hljs-title {\n color: #2867f0;\n}\n.hljs-built_in,\n.hljs-class .hljs-title,\n.hljs-title.class_ {\n color: #986801;\n}\n.hljs-emphasis {\n font-style: italic;\n}\n.hljs-strong {\n font-weight: 700;\n}\n.hljs-link {\n text-decoration: underline;\n}\n\n/* atom-one-dark (scoped under data-theme=\"dark\") */\n[data-theme='dark'] .hljs,\n.dark .hljs {\n color: #abb2bf;\n background: #1a1d24;\n}\n[data-theme='dark'] .hljs-comment,\n.dark .hljs-comment,\n[data-theme='dark'] .hljs-quote,\n.dark .hljs-quote {\n color: #8e95a2;\n}\n[data-theme='dark'] .hljs-doctag,\n.dark .hljs-doctag,\n[data-theme='dark'] .hljs-formula,\n.dark .hljs-formula,\n[data-theme='dark'] .hljs-keyword,\n.dark .hljs-keyword {\n color: #c678dd;\n}\n[data-theme='dark'] .hljs-deletion,\n.dark .hljs-deletion,\n[data-theme='dark'] .hljs-name,\n.dark .hljs-name,\n[data-theme='dark'] .hljs-section,\n.dark .hljs-section,\n[data-theme='dark'] .hljs-selector-tag,\n.dark .hljs-selector-tag,\n[data-theme='dark'] .hljs-subst,\n.dark .hljs-subst {\n color: #e2747d;\n}\n[data-theme='dark'] .hljs-literal,\n.dark .hljs-literal {\n color: #56b6c2;\n}\n[data-theme='dark'] .hljs-addition,\n.dark .hljs-addition,\n[data-theme='dark'] .hljs-attribute,\n.dark .hljs-attribute,\n[data-theme='dark'] .hljs-meta .hljs-string,\n.dark .hljs-meta .hljs-string,\n[data-theme='dark'] .hljs-regexp,\n.dark .hljs-regexp,\n[data-theme='dark'] .hljs-string,\n.dark .hljs-string {\n color: #98c379;\n}\n[data-theme='dark'] .hljs-attr,\n.dark .hljs-attr,\n[data-theme='dark'] .hljs-number,\n.dark .hljs-number,\n[data-theme='dark'] .hljs-selector-attr,\n.dark .hljs-selector-attr,\n[data-theme='dark'] .hljs-selector-class,\n.dark .hljs-selector-class,\n[data-theme='dark'] .hljs-selector-pseudo,\n.dark .hljs-selector-pseudo,\n[data-theme='dark'] .hljs-template-variable,\n.dark .hljs-template-variable,\n[data-theme='dark'] .hljs-type,\n.dark .hljs-type,\n[data-theme='dark'] .hljs-variable,\n.dark .hljs-variable {\n color: #d19a66;\n}\n[data-theme='dark'] .hljs-bullet,\n.dark .hljs-bullet,\n[data-theme='dark'] .hljs-link,\n.dark .hljs-link,\n[data-theme='dark'] .hljs-meta,\n.dark .hljs-meta,\n[data-theme='dark'] .hljs-selector-id,\n.dark .hljs-selector-id,\n[data-theme='dark'] .hljs-symbol,\n.dark .hljs-symbol,\n[data-theme='dark'] .hljs-title,\n.dark .hljs-title {\n color: #61aeee;\n}\n[data-theme='dark'] .hljs-built_in,\n.dark .hljs-built_in,\n[data-theme='dark'] .hljs-class .hljs-title,\n.dark .hljs-class .hljs-title,\n[data-theme='dark'] .hljs-title.class_,\n.dark .hljs-title.class_ {\n color: #e6c07b;\n}\n\n/* ============================================================\n * Markdown prose typography — scoped to .md-prose.\n * @tailwindcss/typography is not a dependency; these styles\n * replicate the essential subset used by MarkdownRenderer.\n * ============================================================ */\n.md-prose {\n color: #374151;\n line-height: 1.7;\n font-size: 0.9375rem;\n}\n.md-prose h1,\n.md-prose h2,\n.md-prose h3,\n.md-prose h4,\n.md-prose h5,\n.md-prose h6 {\n font-weight: 600;\n line-height: 1.25;\n color: #111827;\n margin-top: 1.5em;\n margin-bottom: 0.5em;\n}\n.md-prose h1 {\n font-size: 1.75rem;\n border-bottom: 1px solid #e5e7eb;\n padding-bottom: 0.25em;\n}\n.md-prose h2 {\n font-size: 1.375rem;\n border-bottom: 1px solid #e5e7eb;\n padding-bottom: 0.2em;\n}\n.md-prose h3 {\n font-size: 1.125rem;\n}\n.md-prose h4 {\n font-size: 1rem;\n}\n.md-prose p {\n margin-top: 0;\n margin-bottom: 0.75em;\n}\n.md-prose a {\n color: #2563eb;\n text-decoration: underline;\n text-underline-offset: 2px;\n}\n.md-prose a:hover {\n color: #1d4ed8;\n}\n.md-prose strong {\n font-weight: 600;\n}\n.md-prose em {\n font-style: italic;\n}\n.md-prose del {\n text-decoration: line-through;\n}\n/* Inline code — avoid overriding code inside pre (hljs blocks) */\n.md-prose :not(pre) > code {\n font-size: 0.875em;\n background: #f3f4f6;\n border-radius: 0.25rem;\n padding: 0.125em 0.375em;\n font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;\n color: #be185d;\n}\n.md-prose ul,\n.md-prose ol {\n margin-top: 0;\n margin-bottom: 0.75em;\n padding-left: 1.75em;\n}\n.md-prose ul {\n list-style-type: disc;\n}\n.md-prose ol {\n list-style-type: decimal;\n}\n.md-prose li {\n margin-bottom: 0.25em;\n}\n.md-prose hr {\n border: none;\n border-top: 1px solid #e5e7eb;\n margin: 1.5em 0;\n}\n.md-prose blockquote {\n border-left: 3px solid #d1d5db;\n padding-left: 1em;\n margin: 1em 0;\n color: #6b7280;\n font-style: italic;\n}\n/* Tables — full borders with vertical separators */\n.md-prose table {\n border-collapse: collapse;\n width: 100%;\n font-size: 0.875rem;\n margin-bottom: 0.75em;\n}\n.md-prose th,\n.md-prose td {\n border: 1px solid #e5e7eb;\n padding: 0.5em 0.75em;\n text-align: left;\n}\n.md-prose th {\n font-weight: 600;\n background: #f9fafb;\n}\n\n/* Dark overrides */\n[data-theme='dark'] .md-prose,\n.dark .md-prose {\n color: #d1d5db;\n}\n[data-theme='dark'] .md-prose h1,\n.dark .md-prose h1,\n[data-theme='dark'] .md-prose h2,\n.dark .md-prose h2,\n[data-theme='dark'] .md-prose h3,\n.dark .md-prose h3,\n[data-theme='dark'] .md-prose h4,\n.dark .md-prose h4 {\n color: #f9fafb;\n border-color: #374151;\n}\n[data-theme='dark'] .md-prose a,\n.dark .md-prose a {\n color: #60a5fa;\n}\n[data-theme='dark'] .md-prose a:hover,\n.dark .md-prose a:hover {\n color: #93c5fd;\n}\n[data-theme='dark'] .md-prose :not(pre) > code,\n.dark .md-prose :not(pre) > code {\n background: #1f2937;\n color: #f9a8d4;\n}\n[data-theme='dark'] .md-prose hr,\n.dark .md-prose hr {\n border-color: #374151;\n}\n[data-theme='dark'] .md-prose blockquote,\n.dark .md-prose blockquote {\n border-color: #4b5563;\n color: #9ca3af;\n}\n[data-theme='dark'] .md-prose th,\n.dark .md-prose th,\n[data-theme='dark'] .md-prose td,\n.dark .md-prose td {\n border-color: #374151;\n}\n[data-theme='dark'] .md-prose th,\n.dark .md-prose th {\n background: #1f2937;\n}\n\n/* Mermaid — improve edge / arrowhead visibility in dark mode */\n[data-theme='dark'] .mermaid-svg svg .edgePath path,\n.dark .mermaid-svg svg .edgePath path,\n[data-theme='dark'] .mermaid-svg svg .flowchart-link,\n.dark .mermaid-svg svg .flowchart-link {\n stroke: #9ca3af;\n stroke-width: 1.5px;\n}\n[data-theme='dark'] .mermaid-svg svg marker path,\n.dark .mermaid-svg svg marker path {\n fill: #9ca3af;\n stroke: #9ca3af;\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../src/components/Markdown/styles.css"],"sourcesContent":["/*\n * highlight.js theme — atom-one-light (default) + atom-one-dark (scoped).\n *\n * Bundled in-tree (rather than via `@import 'highlight.js/styles/...'`) so we\n * can scope the dark variant under `[data-theme=\"dark\"]` and keep theme\n * switching synchronous — no FOUC on streamed code blocks.\n *\n * Source: highlight.js v11 atom-one-light / atom-one-dark themes.\n */\n\n/* Layout (theme-agnostic) */\npre code.hljs {\n display: block;\n /* No own scrollbar — the parent <pre> (focusable, tabIndex=0) is the single\n * scroll container. A scrollable but unfocusable <code> fails axe's\n * scrollable-region-focusable rule. */\n overflow-x: visible;\n padding: 1em;\n /* Transparent so the parent container's background is the single source of truth */\n background: transparent;\n}\ncode.hljs {\n padding: 3px 5px;\n}\n\n/* atom-one-light (default) */\n.hljs {\n color: #383a42;\n background: #fafafa;\n}\n.hljs-comment,\n.hljs-quote {\n color: #707179;\n font-style: italic;\n}\n.hljs-doctag,\n.hljs-formula,\n.hljs-keyword {\n color: #a626a4;\n}\n.hljs-deletion,\n.hljs-name,\n.hljs-section,\n.hljs-selector-tag,\n.hljs-subst {\n color: #d72f20;\n}\n.hljs-literal {\n color: #0179ac;\n}\n.hljs-addition,\n.hljs-attribute,\n.hljs-meta .hljs-string,\n.hljs-regexp,\n.hljs-string {\n color: #3f7f3e;\n}\n.hljs-attr,\n.hljs-number,\n.hljs-selector-attr,\n.hljs-selector-class,\n.hljs-selector-pseudo,\n.hljs-template-variable,\n.hljs-type,\n.hljs-variable {\n color: #986801;\n}\n.hljs-bullet,\n.hljs-link,\n.hljs-meta,\n.hljs-selector-id,\n.hljs-symbol,\n.hljs-title {\n color: #2867f0;\n}\n.hljs-built_in,\n.hljs-class .hljs-title,\n.hljs-title.class_ {\n color: #986801;\n}\n.hljs-emphasis {\n font-style: italic;\n}\n.hljs-strong {\n font-weight: 700;\n}\n.hljs-link {\n text-decoration: underline;\n}\n\n/* atom-one-dark (scoped under data-theme=\"dark\") */\n[data-theme='dark'] .hljs,\n.dark .hljs {\n color: #abb2bf;\n background: #1a1d24;\n}\n[data-theme='dark'] .hljs-comment,\n.dark .hljs-comment,\n[data-theme='dark'] .hljs-quote,\n.dark .hljs-quote {\n color: #8e95a2;\n}\n[data-theme='dark'] .hljs-doctag,\n.dark .hljs-doctag,\n[data-theme='dark'] .hljs-formula,\n.dark .hljs-formula,\n[data-theme='dark'] .hljs-keyword,\n.dark .hljs-keyword {\n color: #c678dd;\n}\n[data-theme='dark'] .hljs-deletion,\n.dark .hljs-deletion,\n[data-theme='dark'] .hljs-name,\n.dark .hljs-name,\n[data-theme='dark'] .hljs-section,\n.dark .hljs-section,\n[data-theme='dark'] .hljs-selector-tag,\n.dark .hljs-selector-tag,\n[data-theme='dark'] .hljs-subst,\n.dark .hljs-subst {\n color: #e2747d;\n}\n[data-theme='dark'] .hljs-literal,\n.dark .hljs-literal {\n color: #56b6c2;\n}\n[data-theme='dark'] .hljs-addition,\n.dark .hljs-addition,\n[data-theme='dark'] .hljs-attribute,\n.dark .hljs-attribute,\n[data-theme='dark'] .hljs-meta .hljs-string,\n.dark .hljs-meta .hljs-string,\n[data-theme='dark'] .hljs-regexp,\n.dark .hljs-regexp,\n[data-theme='dark'] .hljs-string,\n.dark .hljs-string {\n color: #98c379;\n}\n[data-theme='dark'] .hljs-attr,\n.dark .hljs-attr,\n[data-theme='dark'] .hljs-number,\n.dark .hljs-number,\n[data-theme='dark'] .hljs-selector-attr,\n.dark .hljs-selector-attr,\n[data-theme='dark'] .hljs-selector-class,\n.dark .hljs-selector-class,\n[data-theme='dark'] .hljs-selector-pseudo,\n.dark .hljs-selector-pseudo,\n[data-theme='dark'] .hljs-template-variable,\n.dark .hljs-template-variable,\n[data-theme='dark'] .hljs-type,\n.dark .hljs-type,\n[data-theme='dark'] .hljs-variable,\n.dark .hljs-variable {\n color: #d19a66;\n}\n[data-theme='dark'] .hljs-bullet,\n.dark .hljs-bullet,\n[data-theme='dark'] .hljs-link,\n.dark .hljs-link,\n[data-theme='dark'] .hljs-meta,\n.dark .hljs-meta,\n[data-theme='dark'] .hljs-selector-id,\n.dark .hljs-selector-id,\n[data-theme='dark'] .hljs-symbol,\n.dark .hljs-symbol,\n[data-theme='dark'] .hljs-title,\n.dark .hljs-title {\n color: #61aeee;\n}\n[data-theme='dark'] .hljs-built_in,\n.dark .hljs-built_in,\n[data-theme='dark'] .hljs-class .hljs-title,\n.dark .hljs-class .hljs-title,\n[data-theme='dark'] .hljs-title.class_,\n.dark .hljs-title.class_ {\n color: #e6c07b;\n}\n\n/* ============================================================\n * Markdown prose typography — scoped to .md-prose.\n * @tailwindcss/typography is not a dependency; these styles\n * replicate the essential subset used by MarkdownRenderer.\n * ============================================================ */\n.md-prose {\n color: #374151;\n line-height: 1.7;\n font-size: 0.9375rem;\n}\n.md-prose h1,\n.md-prose h2,\n.md-prose h3,\n.md-prose h4,\n.md-prose h5,\n.md-prose h6 {\n font-weight: 600;\n line-height: 1.25;\n color: #111827;\n margin-top: 1.5em;\n margin-bottom: 0.5em;\n}\n.md-prose h1 {\n font-size: 1.75rem;\n border-bottom: 1px solid #e5e7eb;\n padding-bottom: 0.25em;\n}\n.md-prose h2 {\n font-size: 1.375rem;\n border-bottom: 1px solid #e5e7eb;\n padding-bottom: 0.2em;\n}\n.md-prose h3 {\n font-size: 1.125rem;\n}\n.md-prose h4 {\n font-size: 1rem;\n}\n.md-prose p {\n margin-top: 0;\n margin-bottom: 0.75em;\n}\n.md-prose a {\n color: #2563eb;\n text-decoration: underline;\n text-underline-offset: 2px;\n}\n.md-prose a:hover {\n color: #1d4ed8;\n}\n.md-prose strong {\n font-weight: 600;\n}\n.md-prose em {\n font-style: italic;\n}\n.md-prose del {\n text-decoration: line-through;\n}\n/* Inline code — avoid overriding code inside pre (hljs blocks) */\n.md-prose :not(pre) > code {\n font-size: 0.875em;\n background: #f3f4f6;\n border-radius: 0.25rem;\n padding: 0.125em 0.375em;\n font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;\n color: #be185d;\n}\n.md-prose ul,\n.md-prose ol {\n margin-top: 0;\n margin-bottom: 0.75em;\n padding-left: 1.75em;\n}\n.md-prose ul {\n list-style-type: disc;\n}\n.md-prose ol {\n list-style-type: decimal;\n}\n.md-prose li {\n margin-bottom: 0.25em;\n}\n.md-prose hr {\n border: none;\n border-top: 1px solid #e5e7eb;\n margin: 1.5em 0;\n}\n.md-prose blockquote {\n border-left: 3px solid #d1d5db;\n padding-left: 1em;\n margin: 1em 0;\n color: #6b7280;\n font-style: italic;\n}\n/* Tables — full borders with vertical separators */\n.md-prose table {\n border-collapse: collapse;\n width: 100%;\n font-size: 0.875rem;\n margin-bottom: 0.75em;\n}\n.md-prose th,\n.md-prose td {\n border: 1px solid #e5e7eb;\n padding: 0.5em 0.75em;\n text-align: left;\n}\n.md-prose th {\n font-weight: 600;\n background: #f9fafb;\n}\n\n/* Dark overrides */\n[data-theme='dark'] .md-prose,\n.dark .md-prose {\n color: #d1d5db;\n}\n[data-theme='dark'] .md-prose h1,\n.dark .md-prose h1,\n[data-theme='dark'] .md-prose h2,\n.dark .md-prose h2,\n[data-theme='dark'] .md-prose h3,\n.dark .md-prose h3,\n[data-theme='dark'] .md-prose h4,\n.dark .md-prose h4 {\n color: #f9fafb;\n border-color: #374151;\n}\n[data-theme='dark'] .md-prose a,\n.dark .md-prose a {\n color: #60a5fa;\n}\n[data-theme='dark'] .md-prose a:hover,\n.dark .md-prose a:hover {\n color: #93c5fd;\n}\n[data-theme='dark'] .md-prose :not(pre) > code,\n.dark .md-prose :not(pre) > code {\n background: #1f2937;\n color: #f9a8d4;\n}\n[data-theme='dark'] .md-prose hr,\n.dark .md-prose hr {\n border-color: #374151;\n}\n[data-theme='dark'] .md-prose blockquote,\n.dark .md-prose blockquote {\n border-color: #4b5563;\n color: #9ca3af;\n}\n[data-theme='dark'] .md-prose th,\n.dark .md-prose th,\n[data-theme='dark'] .md-prose td,\n.dark .md-prose td {\n border-color: #374151;\n}\n[data-theme='dark'] .md-prose th,\n.dark .md-prose th {\n background: #1f2937;\n}\n\n/* Mermaid — improve edge / arrowhead visibility in dark mode */\n[data-theme='dark'] .mermaid-svg svg .edgePath path,\n.dark .mermaid-svg svg .edgePath path,\n[data-theme='dark'] .mermaid-svg svg .flowchart-link,\n.dark .mermaid-svg svg .flowchart-link {\n stroke: #9ca3af;\n stroke-width: 1.5px;\n}\n[data-theme='dark'] .mermaid-svg svg marker path,\n.dark .mermaid-svg svg marker path {\n fill: #9ca3af;\n stroke: #9ca3af;\n}\n"],"mappings":"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","names":[]}
@@ -1,9 +1,9 @@
1
- export { CodeBlock, MarkdownRenderer, highlightCode, useMarkdown } from '../../chunk-NSLR3B7K.js';
2
- export { CsvBlock } from '../../chunk-FGIIXD37.js';
3
- export { HtmlPreviewBlock } from '../../chunk-NCRYCG5G.js';
4
- export { MermaidBlock } from '../../chunk-WGC3KOP7.js';
5
- export { SurveyBlock } from '../../chunk-CPJIOOBM.js';
6
- export { FenceBlock } from '../../chunk-MHJMUKLA.js';
1
+ export { CodeBlock, MarkdownRenderer, highlightCode, useMarkdown } from '../../chunk-XL7TTKHP.js';
2
+ export { CsvBlock } from '../../chunk-7WMSUXOQ.js';
3
+ export { HtmlPreviewBlock } from '../../chunk-UFYXU7KV.js';
4
+ export { MermaidBlock } from '../../chunk-T3RWXOCM.js';
5
+ export { SurveyBlock } from '../../chunk-I2W24RHW.js';
6
+ export { FenceBlock } from '../../chunk-RHYIFIT5.js';
7
7
  import '../../chunk-ZVSW2KS6.js';
8
8
  import '../../chunk-F3SOEIN2.js';
9
9
  //# sourceMappingURL=index.js.map
@@ -11,7 +11,10 @@
11
11
  /* Layout (theme-agnostic) */
12
12
  pre code.hljs {
13
13
  display: block;
14
- overflow-x: auto;
14
+ /* No own scrollbar — the parent <pre> (focusable, tabIndex=0) is the single
15
+ * scroll container. A scrollable but unfocusable <code> fails axe's
16
+ * scrollable-region-focusable rule. */
17
+ overflow-x: visible;
15
18
  padding: 1em;
16
19
  /* Transparent so the parent container's background is the single source of truth */
17
20
  background: transparent;