@ai-matrx/rich-content 0.2.4 → 0.2.6

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 (381) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/dist/code-block/CodeBlock.d.ts +44 -0
  3. package/dist/code-block/CodeBlock.js +449 -0
  4. package/dist/code-block/CodeBlockHeader.d.ts +63 -0
  5. package/dist/code-block/CodeBlockHeader.js +472 -0
  6. package/dist/code-block/CodeEditorLoading.d.ts +3 -0
  7. package/dist/code-block/CodeEditorLoading.js +34 -0
  8. package/dist/code-block/LanguageDisplay.d.ts +28 -0
  9. package/dist/code-block/LanguageDisplay.js +279 -0
  10. package/dist/code-block/SmallCodeEditor.d.ts +30 -0
  11. package/dist/code-block/SmallCodeEditor.js +22 -0
  12. package/dist/code-block/StickyButtons.d.ts +35 -0
  13. package/dist/code-block/StickyButtons.js +88 -0
  14. package/dist/code-block/highlight/ShikiCodeView.d.ts +26 -0
  15. package/dist/code-block/highlight/ShikiCodeView.js +134 -0
  16. package/dist/code-block/highlight/shiki-highlighter.d.ts +14 -0
  17. package/dist/code-block/highlight/shiki-highlighter.js +126 -0
  18. package/dist/code-block/highlight/useHighlightedLines.d.ts +18 -0
  19. package/dist/code-block/highlight/useHighlightedLines.js +142 -0
  20. package/dist/code-block/sticky-inset.d.ts +6 -0
  21. package/dist/code-block/sticky-inset.js +10 -0
  22. package/dist/display/block-interaction.d.ts +33 -0
  23. package/dist/display/block-interaction.js +13 -0
  24. package/dist/display/blocks/ChatCollapsibleWrapper.d.ts +13 -0
  25. package/dist/display/blocks/ChatCollapsibleWrapper.js +56 -0
  26. package/dist/display/blocks/buildMediaSource.d.ts +25 -0
  27. package/dist/display/blocks/buildMediaSource.js +43 -0
  28. package/dist/display/blocks/canvas-adaptive.d.ts +118 -0
  29. package/dist/display/blocks/canvas-adaptive.js +127 -0
  30. package/dist/display/blocks/canvas-fit.d.ts +24 -0
  31. package/dist/display/blocks/canvas-fit.js +19 -0
  32. package/dist/display/blocks/chart/ChartBlock.d.ts +8 -0
  33. package/dist/display/blocks/chart/ChartBlock.js +125 -0
  34. package/dist/display/blocks/chart/ChartCanvas.d.ts +18 -0
  35. package/dist/display/blocks/chart/ChartCanvas.js +159 -0
  36. package/dist/display/blocks/chart/TableChart.d.ts +25 -0
  37. package/dist/display/blocks/chart/TableChart.js +97 -0
  38. package/dist/display/blocks/chart/chart-spec.d.ts +39 -0
  39. package/dist/display/blocks/chart/chart-spec.js +128 -0
  40. package/dist/display/blocks/chart/labels.d.ts +20 -0
  41. package/dist/display/blocks/chart/labels.js +7 -0
  42. package/dist/display/blocks/chart/table-chart.d.ts +37 -0
  43. package/dist/display/blocks/chart/table-chart.js +231 -0
  44. package/dist/display/blocks/common/BlockHeaderWrapper.d.ts +56 -0
  45. package/dist/display/blocks/common/BlockHeaderWrapper.js +310 -0
  46. package/dist/display/blocks/common/ContentBlockWrapper.d.ts +40 -0
  47. package/dist/display/blocks/common/ContentBlockWrapper.js +214 -0
  48. package/dist/display/blocks/common/SandboxedHtml.d.ts +27 -0
  49. package/dist/display/blocks/common/SandboxedHtml.js +26 -0
  50. package/dist/display/blocks/diagram/DiagramLoadingVisualization.d.ts +6 -0
  51. package/dist/display/blocks/diagram/DiagramLoadingVisualization.js +190 -0
  52. package/dist/display/blocks/diagram/InteractiveDiagramBlock.d.ts +51 -0
  53. package/dist/display/blocks/diagram/InteractiveDiagramBlock.js +2415 -0
  54. package/dist/display/blocks/diagram/diagram-printer.d.ts +16 -0
  55. package/dist/display/blocks/diagram/diagram-printer.js +294 -0
  56. package/dist/display/blocks/diagram/diagram-visual-defaults.d.ts +116 -0
  57. package/dist/display/blocks/diagram/diagram-visual-defaults.js +400 -0
  58. package/dist/display/blocks/diagram/layout-utils.d.ts +90 -0
  59. package/dist/display/blocks/diagram/layout-utils.js +347 -0
  60. package/dist/display/blocks/diagram/parseDiagramJSON.d.ts +105 -0
  61. package/dist/display/blocks/diagram/parseDiagramJSON.js +296 -0
  62. package/dist/display/blocks/diagram/presentation-direction.d.ts +29 -0
  63. package/dist/display/blocks/diagram/presentation-direction.js +19 -0
  64. package/dist/display/blocks/diagram/ui-utils.d.ts +1 -0
  65. package/dist/display/blocks/diagram/ui-utils.js +18 -0
  66. package/dist/display/blocks/diff/DiffBlock.d.ts +10 -0
  67. package/dist/display/blocks/diff/DiffBlock.js +119 -0
  68. package/dist/display/blocks/diff/DiffCanvas.d.ts +15 -0
  69. package/dist/display/blocks/diff/DiffCanvas.js +20 -0
  70. package/dist/display/blocks/generic/GenericStructuredBlock.d.ts +24 -0
  71. package/dist/display/blocks/generic/GenericStructuredBlock.js +53 -0
  72. package/dist/display/blocks/generic/StructuredValueTabs.d.ts +21 -0
  73. package/dist/display/blocks/generic/StructuredValueTabs.js +124 -0
  74. package/dist/display/blocks/generic/tile-actions-slot.d.ts +39 -0
  75. package/dist/display/blocks/generic/tile-actions-slot.js +33 -0
  76. package/dist/display/blocks/images/ImageBlock.d.ts +8 -0
  77. package/dist/display/blocks/images/ImageBlock.js +265 -0
  78. package/dist/display/blocks/json/JsonBlock.d.ts +34 -0
  79. package/dist/display/blocks/json/JsonBlock.js +562 -0
  80. package/dist/display/blocks/json/JsonTableView.d.ts +10 -0
  81. package/dist/display/blocks/json/JsonTableView.js +173 -0
  82. package/dist/display/blocks/json/json-compact-stringify.d.ts +25 -0
  83. package/dist/display/blocks/json/json-compact-stringify.js +52 -0
  84. package/dist/display/blocks/json/json-tabular-utils.d.ts +65 -0
  85. package/dist/display/blocks/json/json-tabular-utils.js +121 -0
  86. package/dist/display/blocks/links/LinkComponent.d.ts +6 -0
  87. package/dist/display/blocks/links/LinkComponent.js +373 -0
  88. package/dist/display/blocks/links/LinkComponentWithFetch.d.ts +1 -0
  89. package/dist/display/blocks/links/LinkComponentWithFetch.js +0 -0
  90. package/dist/display/blocks/markdown/MarkdownKindBlock.d.ts +48 -0
  91. package/dist/display/blocks/markdown/MarkdownKindBlock.js +52 -0
  92. package/dist/display/blocks/markdown-preview/MarkdownPreviewBlock.d.ts +17 -0
  93. package/dist/display/blocks/markdown-preview/MarkdownPreviewBlock.js +70 -0
  94. package/dist/display/blocks/mermaid/MermaidBlock.d.ts +19 -0
  95. package/dist/display/blocks/mermaid/MermaidBlock.js +386 -0
  96. package/dist/display/blocks/search-replace/SearchReplaceBlock.d.ts +50 -0
  97. package/dist/display/blocks/search-replace/SearchReplaceBlock.js +71 -0
  98. package/dist/display/blocks/svg/SvgBlock.d.ts +8 -0
  99. package/dist/display/blocks/svg/SvgBlock.js +126 -0
  100. package/dist/display/blocks/table/StreamingTableRenderer.d.ts +53 -0
  101. package/dist/display/blocks/table/StreamingTableRenderer.js +907 -0
  102. package/dist/display/blocks/table/TableRenderPathDiagnostic.d.ts +21 -0
  103. package/dist/display/blocks/table/TableRenderPathDiagnostic.js +79 -0
  104. package/dist/display/blocks/thinking-reasoning/ConsolidatedReasoningVisualization.d.ts +14 -0
  105. package/dist/display/blocks/thinking-reasoning/ConsolidatedReasoningVisualization.js +15 -0
  106. package/dist/display/blocks/thinking-reasoning/ReasoningVisualization.d.ts +13 -0
  107. package/dist/display/blocks/thinking-reasoning/ReasoningVisualization.js +19 -0
  108. package/dist/display/blocks/thinking-reasoning/ThinkingTrace.d.ts +30 -0
  109. package/dist/display/blocks/thinking-reasoning/ThinkingTrace.js +75 -0
  110. package/dist/display/blocks/thinking-reasoning/ThinkingTraceMarkdown.d.ts +13 -0
  111. package/dist/display/blocks/thinking-reasoning/ThinkingTraceMarkdown.js +48 -0
  112. package/dist/display/blocks/thinking-reasoning/ThinkingVisualization.d.ts +12 -0
  113. package/dist/display/blocks/thinking-reasoning/ThinkingVisualization.js +19 -0
  114. package/dist/display/blocks/toml/TomlBlock.d.ts +7 -0
  115. package/dist/display/blocks/toml/TomlBlock.js +167 -0
  116. package/dist/display/blocks/tree/TreeBlock.d.ts +7 -0
  117. package/dist/display/blocks/tree/TreeBlock.js +163 -0
  118. package/dist/display/blocks/xml/XmlBlock.d.ts +23 -0
  119. package/dist/display/blocks/xml/XmlBlock.js +197 -0
  120. package/dist/display/blocks/xml/readXmlTag.d.ts +1 -0
  121. package/dist/display/blocks/xml/readXmlTag.js +1 -0
  122. package/dist/display/blocks/xml/xml-tokenize.d.ts +13 -0
  123. package/dist/display/blocks/xml/xml-tokenize.js +169 -0
  124. package/dist/display/blocks/yaml/YamlBlock.d.ts +7 -0
  125. package/dist/display/blocks/yaml/YamlBlock.js +191 -0
  126. package/dist/display/chat-markdown/BasicMarkdownContent.d.ts +29 -0
  127. package/dist/display/chat-markdown/BasicMarkdownContent.js +122 -0
  128. package/dist/display/chat-markdown/BlockRenderingContext.d.ts +23 -0
  129. package/dist/display/chat-markdown/BlockRenderingContext.js +17 -0
  130. package/dist/display/chat-markdown/ConfigurableMarkdownContent.d.ts +172 -0
  131. package/dist/display/chat-markdown/ConfigurableMarkdownContent.js +649 -0
  132. package/dist/display/chat-markdown/InlineCodeSnippet.d.ts +19 -0
  133. package/dist/display/chat-markdown/InlineCodeSnippet.js +146 -0
  134. package/dist/display/chat-markdown/InlineCodeSnippetKindGate.d.ts +11 -0
  135. package/dist/display/chat-markdown/InlineCodeSnippetKindGate.js +9 -0
  136. package/dist/display/chat-markdown/KindTextGate.d.ts +31 -0
  137. package/dist/display/chat-markdown/KindTextGate.js +60 -0
  138. package/dist/display/chat-markdown/QuestionnaireLoadingVisualization.d.ts +6 -0
  139. package/dist/display/chat-markdown/QuestionnaireLoadingVisualization.js +92 -0
  140. package/dist/display/chat-markdown/block-registry/BlockComponentRegistry.d.ts +72 -0
  141. package/dist/display/chat-markdown/block-registry/BlockComponentRegistry.js +94 -0
  142. package/dist/display/chat-markdown/block-registry/BlockRenderer.d.ts +126 -0
  143. package/dist/display/chat-markdown/block-registry/BlockRenderer.js +473 -0
  144. package/dist/display/chat-markdown/block-registry/block-dispatch.d.ts +410 -0
  145. package/dist/display/chat-markdown/block-registry/block-dispatch.js +495 -0
  146. package/dist/display/chat-markdown/block-registry/json-parse-utils.d.ts +13 -0
  147. package/dist/display/chat-markdown/block-registry/json-parse-utils.js +236 -0
  148. package/dist/display/chat-markdown/constants.d.ts +14 -0
  149. package/dist/display/chat-markdown/constants.js +317 -0
  150. package/dist/display/chat-markdown/diff-blocks/DiffCollapsible.d.ts +31 -0
  151. package/dist/display/chat-markdown/diff-blocks/DiffCollapsible.js +62 -0
  152. package/dist/display/chat-markdown/diff-blocks/DiffLoadingIndicator.d.ts +12 -0
  153. package/dist/display/chat-markdown/diff-blocks/DiffLoadingIndicator.js +18 -0
  154. package/dist/display/chat-markdown/diff-blocks/StreamingDiffBlock.d.ts +22 -0
  155. package/dist/display/chat-markdown/diff-blocks/StreamingDiffBlock.js +130 -0
  156. package/dist/display/chat-markdown/diff-blocks/diff-style-registry.d.ts +21 -0
  157. package/dist/display/chat-markdown/diff-blocks/diff-style-registry.js +91 -0
  158. package/dist/display/chat-markdown/diff-blocks/renderers/SearchReplaceDiffRenderer.d.ts +26 -0
  159. package/dist/display/chat-markdown/diff-blocks/renderers/SearchReplaceDiffRenderer.js +186 -0
  160. package/dist/display/chat-markdown/diff-blocks/types.d.ts +56 -0
  161. package/dist/display/chat-markdown/diff-blocks/types.js +0 -0
  162. package/dist/display/chat-markdown/internal-handlers/BlockFallback.d.ts +20 -0
  163. package/dist/display/chat-markdown/internal-handlers/BlockFallback.js +83 -0
  164. package/dist/display/chat-markdown/internal-handlers/InlineStatusIndicator.d.ts +4 -0
  165. package/dist/display/chat-markdown/internal-handlers/InlineStatusIndicator.js +16 -0
  166. package/dist/display/chat-markdown/internal-handlers/MarkdownErrorBoundary.d.ts +17 -0
  167. package/dist/display/chat-markdown/internal-handlers/MarkdownErrorBoundary.js +40 -0
  168. package/dist/display/chat-markdown/internal-handlers/PlainTextFallback.d.ts +8 -0
  169. package/dist/display/chat-markdown/internal-handlers/PlainTextFallback.js +91 -0
  170. package/dist/display/chat-markdown/internal-handlers/SafeBlockRenderer.d.ts +20 -0
  171. package/dist/display/chat-markdown/internal-handlers/SafeBlockRenderer.js +72 -0
  172. package/dist/display/chat-markdown/kind-source-view.d.ts +14 -0
  173. package/dist/display/chat-markdown/kind-source-view.js +14 -0
  174. package/dist/display/chat-markdown/matrx-variables/MatrxVariableInline.d.ts +28 -0
  175. package/dist/display/chat-markdown/matrx-variables/MatrxVariableInline.js +65 -0
  176. package/dist/display/chat-markdown/progressive-mount.d.ts +18 -0
  177. package/dist/display/chat-markdown/progressive-mount.js +90 -0
  178. package/dist/display/chat-markdown/render-block-to-content-block.d.ts +31 -0
  179. package/dist/display/chat-markdown/render-block-to-content-block.js +32 -0
  180. package/dist/display/chat-markdown/settle-stream-blocks.d.ts +50 -0
  181. package/dist/display/chat-markdown/settle-stream-blocks.js +26 -0
  182. package/dist/display/chat-markdown/stable-blocks.d.ts +15 -0
  183. package/dist/display/chat-markdown/stable-blocks.js +54 -0
  184. package/dist/display/chat-markdown/types.d.ts +11 -0
  185. package/dist/display/chat-markdown/types.js +26 -0
  186. package/dist/display/specimen/SpecimenContext.d.ts +26 -0
  187. package/dist/display/specimen/SpecimenContext.js +64 -0
  188. package/dist/display/tables/MarkdownTable.d.ts +23 -0
  189. package/dist/display/tables/MarkdownTable.js +769 -0
  190. package/dist/display/tables/MarkdownTableScrollArea.d.ts +12 -0
  191. package/dist/display/tables/MarkdownTableScrollArea.js +92 -0
  192. package/dist/display/tables/SendToGoogleSheetButton.d.ts +19 -0
  193. package/dist/display/tables/SendToGoogleSheetButton.js +93 -0
  194. package/dist/display/tables/SendToWorkbookButton.d.ts +24 -0
  195. package/dist/display/tables/SendToWorkbookButton.js +93 -0
  196. package/dist/display/tables/TableSaveToMenu.d.ts +16 -0
  197. package/dist/display/tables/TableSaveToMenu.js +98 -0
  198. package/dist/display/tables/TableWithSeparatedControls.d.ts +22 -0
  199. package/dist/display/tables/TableWithSeparatedControls.js +574 -0
  200. package/dist/display/tables/ViewTableModal.d.ts +14 -0
  201. package/dist/display/tables/ViewTableModal.js +67 -0
  202. package/dist/display/tables/editing/ColumnActionsMenu.d.ts +16 -0
  203. package/dist/display/tables/editing/ColumnActionsMenu.js +80 -0
  204. package/dist/display/tables/editing/RowActionsMenu.d.ts +16 -0
  205. package/dist/display/tables/editing/RowActionsMenu.js +80 -0
  206. package/dist/display/tables/editing/TableEditToolbar.d.ts +15 -0
  207. package/dist/display/tables/editing/TableEditToolbar.js +63 -0
  208. package/dist/display/tables/editing/tableMutations.d.ts +50 -0
  209. package/dist/display/tables/editing/tableMutations.js +148 -0
  210. package/dist/display/tables/editing/useDoubleClickEdit.d.ts +43 -0
  211. package/dist/display/tables/editing/useDoubleClickEdit.js +51 -0
  212. package/dist/display/tables/editing/useTableUndo.d.ts +25 -0
  213. package/dist/display/tables/editing/useTableUndo.js +17 -0
  214. package/dist/display/tables/table-action-row.d.ts +8 -0
  215. package/dist/display/tables/table-action-row.js +31 -0
  216. package/dist/display/tables/table-viewer.d.ts +13 -0
  217. package/dist/display/tables/table-viewer.js +18 -0
  218. package/dist/host/ErrorActions.d.ts +1 -1
  219. package/dist/host/ErrorNotice.d.ts +10 -0
  220. package/dist/host/ErrorNotice.js +19 -0
  221. package/dist/host/app-bindings.d.ts +155 -0
  222. package/dist/host/app-bindings.js +160 -0
  223. package/dist/host/diagnostics.d.ts +2 -2
  224. package/dist/host/diagnostics.js +2 -1
  225. package/dist/host/tables.d.ts +1 -6
  226. package/dist/host/types.d.ts +14 -7
  227. package/dist/levels/RichContent.d.ts +3 -0
  228. package/dist/levels/RichContent.js +102 -0
  229. package/dist/levels/RichContentInline.d.ts +28 -0
  230. package/dist/levels/RichContentInline.js +61 -0
  231. package/dist/levels/RichContentPreview.d.ts +12 -0
  232. package/dist/levels/RichContentPreview.js +39 -0
  233. package/dist/levels/RichContentStandardImpl.d.ts +12 -0
  234. package/dist/levels/RichContentStandardImpl.js +27 -0
  235. package/dist/levels/RichContentStaticProse.d.ts +46 -0
  236. package/dist/levels/RichContentStaticProse.js +100 -0
  237. package/dist/levels/depth.d.ts +18 -0
  238. package/dist/levels/depth.js +32 -0
  239. package/dist/levels/prose/inline-level-elements.d.ts +19 -0
  240. package/dist/levels/prose/inline-level-elements.js +103 -0
  241. package/dist/levels/prose/prose-block-elements.d.ts +25 -0
  242. package/dist/levels/prose/prose-block-elements.js +313 -0
  243. package/dist/levels/prose/prose-inline-elements.d.ts +13 -0
  244. package/dist/levels/prose/prose-inline-elements.js +143 -0
  245. package/dist/levels/prose/prose-prepare.d.ts +50 -0
  246. package/dist/levels/prose/prose-prepare.js +246 -0
  247. package/dist/levels/prose/remote-image-policy.d.ts +34 -0
  248. package/dist/levels/prose/remote-image-policy.js +153 -0
  249. package/dist/levels/prose/variant-root.d.ts +9 -0
  250. package/dist/levels/prose/variant-root.js +34 -0
  251. package/dist/levels/rich-content-types.d.ts +93 -0
  252. package/dist/levels/rich-content-types.js +4 -0
  253. package/dist/levels/server/DelimiterViolationReport.d.ts +7 -0
  254. package/dist/levels/server/DelimiterViolationReport.js +24 -0
  255. package/dist/levels/server/RichContentServer.d.ts +27 -0
  256. package/dist/levels/server/RichContentServer.js +97 -0
  257. package/dist/levels/standard/NestedRichContent.d.ts +7 -0
  258. package/dist/levels/standard/NestedRichContent.js +70 -0
  259. package/dist/levels/standard/StandardBlocks.d.ts +13 -0
  260. package/dist/levels/standard/StandardBlocks.js +239 -0
  261. package/dist/levels/standard/StandardKindRegion.d.ts +14 -0
  262. package/dist/levels/standard/StandardKindRegion.js +69 -0
  263. package/dist/levels/standard/standard-kind-region.d.ts +19 -0
  264. package/dist/levels/standard/standard-kind-region.js +21 -0
  265. package/dist/levels/standard/static-standard.d.ts +23 -0
  266. package/dist/levels/standard/static-standard.js +187 -0
  267. package/dist/levels/standard/stream-holdback.d.ts +2 -0
  268. package/dist/levels/standard/stream-holdback.js +77 -0
  269. package/dist/mermaid/MermaidFullscreen.d.ts +17 -0
  270. package/dist/mermaid/MermaidFullscreen.js +71 -0
  271. package/dist/mermaid/MermaidRenderer.d.ts +20 -0
  272. package/dist/mermaid/MermaidRenderer.js +267 -0
  273. package/dist/mermaid/MermaidView.d.ts +27 -0
  274. package/dist/mermaid/MermaidView.js +68 -0
  275. package/dist/mermaid/MermaidViewport.d.ts +75 -0
  276. package/dist/mermaid/MermaidViewport.js +286 -0
  277. package/dist/mermaid/adapters/er.d.ts +10 -0
  278. package/dist/mermaid/adapters/er.js +205 -0
  279. package/dist/mermaid/adapters/flowchart.d.ts +17 -0
  280. package/dist/mermaid/adapters/flowchart.js +634 -0
  281. package/dist/mermaid/adapters/journey.d.ts +9 -0
  282. package/dist/mermaid/adapters/journey.js +207 -0
  283. package/dist/mermaid/adapters/mindmap.d.ts +12 -0
  284. package/dist/mermaid/adapters/mindmap.js +252 -0
  285. package/dist/mermaid/adapters/pie.d.ts +7 -0
  286. package/dist/mermaid/adapters/pie.js +172 -0
  287. package/dist/mermaid/adapters/quadrant.d.ts +8 -0
  288. package/dist/mermaid/adapters/quadrant.js +231 -0
  289. package/dist/mermaid/adapters/register.d.ts +7 -0
  290. package/dist/mermaid/adapters/register.js +19 -0
  291. package/dist/mermaid/adapters/sequence.d.ts +8 -0
  292. package/dist/mermaid/adapters/sequence.js +251 -0
  293. package/dist/mermaid/adapters/state.d.ts +12 -0
  294. package/dist/mermaid/adapters/state.js +245 -0
  295. package/dist/mermaid/adapters/timeline.d.ts +8 -0
  296. package/dist/mermaid/adapters/timeline.js +245 -0
  297. package/dist/mermaid/catalog.d.ts +33 -0
  298. package/dist/mermaid/catalog.js +202 -0
  299. package/dist/mermaid/diagram-type.d.ts +39 -0
  300. package/dist/mermaid/diagram-type.js +89 -0
  301. package/dist/mermaid/export.d.ts +21 -0
  302. package/dist/mermaid/export.js +112 -0
  303. package/dist/mermaid/extract-fence.d.ts +15 -0
  304. package/dist/mermaid/extract-fence.js +22 -0
  305. package/dist/mermaid/lazy-draw.d.ts +40 -0
  306. package/dist/mermaid/lazy-draw.js +168 -0
  307. package/dist/mermaid/model/adapter.d.ts +28 -0
  308. package/dist/mermaid/model/adapter.js +16 -0
  309. package/dist/mermaid/model/ops.d.ts +282 -0
  310. package/dist/mermaid/model/ops.js +9 -0
  311. package/dist/mermaid/model/round-trip.d.ts +22 -0
  312. package/dist/mermaid/model/round-trip.js +45 -0
  313. package/dist/mermaid/model/types.d.ts +271 -0
  314. package/dist/mermaid/model/types.js +0 -0
  315. package/dist/mermaid/print-render.d.ts +9 -0
  316. package/dist/mermaid/print-render.js +39 -0
  317. package/dist/mermaid/runtime.d.ts +25 -0
  318. package/dist/mermaid/runtime.js +183 -0
  319. package/dist/mermaid/sanitize.d.ts +46 -0
  320. package/dist/mermaid/sanitize.js +234 -0
  321. package/dist/mermaid/types.d.ts +43 -0
  322. package/dist/mermaid/types.js +21 -0
  323. package/dist/mermaid/view/ViewModePane.d.ts +24 -0
  324. package/dist/mermaid/view/ViewModePane.js +9 -0
  325. package/dist/utils/client-lazy.d.ts +1 -1
  326. package/dist/utils/client-lazy.js +4 -1
  327. package/dist/utils/lifted/DiffView.d.ts +10 -0
  328. package/dist/utils/lifted/DiffView.js +26 -0
  329. package/dist/utils/lifted/IconButton.d.ts +24 -0
  330. package/dist/utils/lifted/IconButton.js +43 -0
  331. package/dist/utils/lifted/MatrxMiniLoader.d.ts +1 -0
  332. package/dist/utils/lifted/MatrxMiniLoader.js +8 -0
  333. package/dist/utils/lifted/ShimmerText.d.ts +5 -0
  334. package/dist/utils/lifted/ShimmerText.js +21 -0
  335. package/dist/utils/lifted/SuspenseLoader.d.ts +16 -0
  336. package/dist/utils/lifted/SuspenseLoader.js +42 -0
  337. package/dist/utils/lifted/Tooltip.d.ts +20 -0
  338. package/dist/utils/lifted/Tooltip.js +52 -0
  339. package/dist/utils/lifted/artifactId.d.ts +34 -0
  340. package/dist/utils/lifted/artifactId.js +15 -0
  341. package/dist/utils/lifted/canvasContent.d.ts +63 -0
  342. package/dist/utils/lifted/canvasContent.js +98 -0
  343. package/dist/utils/lifted/captureReactError.d.ts +24 -0
  344. package/dist/utils/lifted/captureReactError.js +28 -0
  345. package/dist/utils/lifted/chunk-load-recovery.d.ts +25 -0
  346. package/dist/utils/lifted/chunk-load-recovery.js +36 -0
  347. package/dist/utils/lifted/code-editor-agent-types.d.ts +6 -0
  348. package/dist/utils/lifted/code-editor-agent-types.js +0 -0
  349. package/dist/utils/lifted/code-editor-agents.d.ts +39 -0
  350. package/dist/utils/lifted/code-editor-agents.js +52 -0
  351. package/dist/utils/lifted/code-language-extension.d.ts +1 -0
  352. package/dist/utils/lifted/code-language-extension.js +60 -0
  353. package/dist/utils/lifted/custom-icons.d.ts +16 -0
  354. package/dist/utils/lifted/custom-icons.js +47 -0
  355. package/dist/utils/lifted/durability.d.ts +16 -0
  356. package/dist/utils/lifted/durability.js +45 -0
  357. package/dist/utils/lifted/errors.d.ts +30 -0
  358. package/dist/utils/lifted/errors.js +29 -0
  359. package/dist/utils/lifted/html-document.d.ts +1 -0
  360. package/dist/utils/lifted/html-document.js +12 -0
  361. package/dist/utils/lifted/languageOptions.d.ts +9 -0
  362. package/dist/utils/lifted/languageOptions.js +52 -0
  363. package/dist/utils/lifted/languages.d.ts +34 -0
  364. package/dist/utils/lifted/languages.js +175 -0
  365. package/dist/utils/lifted/loading-spinner.d.ts +18 -0
  366. package/dist/utils/lifted/loading-spinner.js +200 -0
  367. package/dist/utils/lifted/media-refs.d.ts +13 -0
  368. package/dist/utils/lifted/media-refs.js +27 -0
  369. package/dist/utils/lifted/scroll-root.d.ts +1 -0
  370. package/dist/utils/lifted/scroll-root.js +25 -0
  371. package/dist/utils/lifted/syntax-themes.d.ts +32 -0
  372. package/dist/utils/lifted/syntax-themes.js +100 -0
  373. package/dist/utils/lifted/url-utm.d.ts +24 -0
  374. package/dist/utils/lifted/url-utm.js +66 -0
  375. package/dist/utils/lifted/use-is-mounted.d.ts +24 -0
  376. package/dist/utils/lifted/use-is-mounted.js +21 -0
  377. package/dist/utils/lifted/useToastManager.d.ts +1 -0
  378. package/dist/utils/lifted/useToastManager.js +7 -0
  379. package/dist/utils/report-kind-at-raw-renderer.d.ts +19 -0
  380. package/dist/utils/report-kind-at-raw-renderer.js +32 -0
  381. package/package.json +32 -3
@@ -0,0 +1,769 @@
1
+ "use client";
2
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
3
+ import { useClipboard } from "@ai-matrx/kit/clipboard";
4
+ import { toast as copyToast } from "../../host/toast.js";
5
+ import { rewriteTableSource } from "../../utils/table-source.js";
6
+ import {
7
+ useState,
8
+ useEffect,
9
+ useMemo,
10
+ useRef
11
+ } from "react";
12
+ import { useIsMobile } from "@ai-matrx/kit/media-query";
13
+ import { cn } from "@ai-matrx/design-system";
14
+ import { RichContent } from "../../levels/RichContent.js";
15
+ import { Button } from "@ai-matrx/design-system";
16
+ import {
17
+ Download,
18
+ Eye,
19
+ Edit,
20
+ Save,
21
+ X,
22
+ FileJson,
23
+ FileText,
24
+ FileSpreadsheet,
25
+ FileDown,
26
+ ChevronDown
27
+ } from "lucide-react";
28
+ import {
29
+ DropdownMenu,
30
+ DropdownMenuContent,
31
+ DropdownMenuItem,
32
+ DropdownMenuTrigger,
33
+ DropdownMenuSeparator
34
+ } from "@ai-matrx/design-system";
35
+ import { useToastManager } from "../../utils/lifted/useToastManager.js";
36
+ import { THEMES } from "../themes.js";
37
+ import { TableEditToolbar } from "./editing/TableEditToolbar.js";
38
+ import { RowActionsMenu } from "./editing/RowActionsMenu.js";
39
+ import { ColumnActionsMenu } from "./editing/ColumnActionsMenu.js";
40
+ import { useTableUndo } from "./editing/useTableUndo.js";
41
+ import { useDoubleClickEdit } from "./editing/useDoubleClickEdit.js";
42
+ import { useSpecimenMode } from "../specimen/SpecimenContext.js";
43
+ import { MarkdownTableScrollArea } from "./MarkdownTableScrollArea.js";
44
+ import { ChartThisButton, TableChartPanel } from "../blocks/chart/TableChart.js";
45
+ import { tableActionRowClass, useTableActionTitles } from "./table-action-row.js";
46
+ import { TableSaveToMenu } from "./TableSaveToMenu.js";
47
+ import { phoneStackCellProps, useTableViewer } from "./table-viewer.js";
48
+ import {
49
+ appendRow,
50
+ appendColumn,
51
+ clearAllContents,
52
+ insertRowAbove,
53
+ insertRowBelow,
54
+ removeRow,
55
+ clearRow,
56
+ duplicateRow,
57
+ insertColumnBefore,
58
+ insertColumnAfter,
59
+ removeColumn,
60
+ clearColumn,
61
+ duplicateColumn
62
+ } from "./editing/tableMutations.js";
63
+ const ExportDropdownMenu = ({
64
+ tableData,
65
+ content,
66
+ copyTableToClipboard,
67
+ copyMarkdownToClipboard,
68
+ copyJsonToClipboard,
69
+ downloadCSV,
70
+ downloadMarkdown,
71
+ isStreamActive = false
72
+ }) => {
73
+ const [isDataStable, setIsDataStable] = useState(false);
74
+ const stabilityTimerRef = useRef(null);
75
+ const stableTableData = useMemo(
76
+ () => ({
77
+ headers: tableData.headers,
78
+ rows: tableData.rows,
79
+ normalizedData: tableData.normalizedData
80
+ }),
81
+ [
82
+ JSON.stringify(tableData.headers),
83
+ JSON.stringify(tableData.rows),
84
+ JSON.stringify(tableData.normalizedData)
85
+ ]
86
+ );
87
+ useEffect(() => {
88
+ if (isStreamActive) {
89
+ setIsDataStable(false);
90
+ if (stabilityTimerRef.current) {
91
+ clearTimeout(stabilityTimerRef.current);
92
+ stabilityTimerRef.current = null;
93
+ }
94
+ return void 0;
95
+ }
96
+ if (stabilityTimerRef.current) {
97
+ clearTimeout(stabilityTimerRef.current);
98
+ }
99
+ setIsDataStable(false);
100
+ stabilityTimerRef.current = setTimeout(() => {
101
+ setIsDataStable(true);
102
+ }, 1e3);
103
+ return () => {
104
+ if (stabilityTimerRef.current) {
105
+ clearTimeout(stabilityTimerRef.current);
106
+ }
107
+ };
108
+ }, [stableTableData, content, isStreamActive]);
109
+ if (isStreamActive || !isDataStable) {
110
+ return null;
111
+ }
112
+ return /* @__PURE__ */ jsxs(DropdownMenu, { children: [
113
+ /* @__PURE__ */ jsx(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsxs(
114
+ Button,
115
+ {
116
+ variant: "outline",
117
+ size: "sm",
118
+ className: "flex items-center gap-2 hover:bg-blue-100 dark:hover:bg-blue-800/30",
119
+ children: [
120
+ /* @__PURE__ */ jsx(Download, { className: "h-4 w-4" }),
121
+ "Export",
122
+ /* @__PURE__ */ jsx(ChevronDown, { className: "h-4 w-4 ml-1" })
123
+ ]
124
+ }
125
+ ) }),
126
+ /* @__PURE__ */ jsxs(DropdownMenuContent, { align: "end", className: "w-64", children: [
127
+ /* @__PURE__ */ jsxs(
128
+ DropdownMenuItem,
129
+ {
130
+ onClick: copyTableToClipboard,
131
+ className: "flex items-center gap-2 cursor-pointer",
132
+ children: [
133
+ /* @__PURE__ */ jsx(FileText, { className: "h-4 w-4 text-green-500" }),
134
+ /* @__PURE__ */ jsx("span", { children: "Copy as Text" })
135
+ ]
136
+ }
137
+ ),
138
+ content && /* @__PURE__ */ jsxs(
139
+ DropdownMenuItem,
140
+ {
141
+ onClick: copyMarkdownToClipboard,
142
+ className: "flex items-center gap-2 cursor-pointer",
143
+ children: [
144
+ /* @__PURE__ */ jsx(FileDown, { className: "h-4 w-4 text-purple-500" }),
145
+ /* @__PURE__ */ jsx("span", { children: "Copy as Markdown" })
146
+ ]
147
+ }
148
+ ),
149
+ tableData.normalizedData && /* @__PURE__ */ jsxs(
150
+ DropdownMenuItem,
151
+ {
152
+ onClick: copyJsonToClipboard,
153
+ className: "flex items-center gap-2 cursor-pointer",
154
+ children: [
155
+ /* @__PURE__ */ jsx(FileJson, { className: "h-4 w-4 text-blue-500" }),
156
+ /* @__PURE__ */ jsx("span", { children: "Copy as JSON" })
157
+ ]
158
+ }
159
+ ),
160
+ /* @__PURE__ */ jsx(DropdownMenuSeparator, {}),
161
+ /* @__PURE__ */ jsxs(
162
+ DropdownMenuItem,
163
+ {
164
+ onClick: downloadCSV,
165
+ className: "flex items-center gap-2 cursor-pointer",
166
+ children: [
167
+ /* @__PURE__ */ jsx(FileSpreadsheet, { className: "h-4 w-4 text-orange-500" }),
168
+ /* @__PURE__ */ jsx("span", { children: "Download as CSV" })
169
+ ]
170
+ }
171
+ ),
172
+ content && /* @__PURE__ */ jsxs(
173
+ DropdownMenuItem,
174
+ {
175
+ onClick: downloadMarkdown,
176
+ className: "flex items-center gap-2 cursor-pointer",
177
+ children: [
178
+ /* @__PURE__ */ jsx(FileDown, { className: "h-4 w-4 text-indigo-500" }),
179
+ /* @__PURE__ */ jsx("span", { children: "Download as Markdown" })
180
+ ]
181
+ }
182
+ )
183
+ ] })
184
+ ] });
185
+ };
186
+ const MarkdownTable = ({
187
+ data,
188
+ className = "",
189
+ fontSize = 14,
190
+ theme = "professional",
191
+ onSave = () => {
192
+ },
193
+ content = "",
194
+ onContentChange,
195
+ isStreamActive = false
196
+ }) => {
197
+ const { copyText } = useClipboard({
198
+ notify: (message, kind) => kind === "error" ? copyToast.error(message) : copyToast.success(message)
199
+ });
200
+ const isMobile = useIsMobile();
201
+ const { canWrite } = useTableViewer();
202
+ const specimenMode = useSpecimenMode();
203
+ const tableData = useMemo(() => {
204
+ if (!data) {
205
+ return {
206
+ headers: [],
207
+ rows: [],
208
+ normalizedData: void 0
209
+ };
210
+ }
211
+ return {
212
+ headers: data.headers || [],
213
+ rows: data.rows || [],
214
+ normalizedData: data.normalizedData
215
+ };
216
+ }, [
217
+ JSON.stringify(data?.headers || []),
218
+ JSON.stringify(data?.rows || []),
219
+ JSON.stringify(data?.normalizedData || [])
220
+ ]);
221
+ const [internalTableData, setInternalTableData] = useState(tableData);
222
+ const [showNormalized, setShowNormalized] = useState(false);
223
+ const [editMode, setEditMode] = useState("none");
224
+ const tableFontsize = fontSize;
225
+ const toast = useToastManager();
226
+ const tableTheme = THEMES[theme]?.table || THEMES.professional.table;
227
+ const [showChart, setShowChart] = useState(false);
228
+ const actionRowRef = useTableActionTitles();
229
+ const previousDataRef = useRef("");
230
+ useEffect(() => {
231
+ setInternalTableData(tableData);
232
+ }, [tableData]);
233
+ useEffect(() => {
234
+ if (data) {
235
+ const dataHash = JSON.stringify({
236
+ headers: data.headers || [],
237
+ rows: data.rows || [],
238
+ normalizedData: data.normalizedData
239
+ });
240
+ if (dataHash !== previousDataRef.current) {
241
+ previousDataRef.current = dataHash;
242
+ setInternalTableData({
243
+ headers: data.headers || [],
244
+ rows: data.rows || [],
245
+ normalizedData: data.normalizedData
246
+ });
247
+ }
248
+ }
249
+ }, [data]);
250
+ const generateMarkdownTable = () => rewriteTableSource(content, { headers: internalTableData.headers, rows: internalTableData.rows });
251
+ const notifyContentChange = () => {
252
+ if (onContentChange && content) {
253
+ try {
254
+ onContentChange(generateMarkdownTable());
255
+ } catch (error) {
256
+ toast.error(error instanceof Error ? error.message : String(error));
257
+ return false;
258
+ }
259
+ }
260
+ return true;
261
+ };
262
+ const copyTableToClipboard = async () => {
263
+ try {
264
+ const formattedTable = generateMarkdownTable();
265
+ await copyText(formattedTable, "Table copied to clipboard");
266
+ } catch (err) {
267
+ toast.error(err instanceof Error ? err.message : "Failed to copy table");
268
+ }
269
+ };
270
+ const copyJsonToClipboard = async () => {
271
+ try {
272
+ await copyText(
273
+ JSON.stringify(internalTableData.normalizedData, null, 2)
274
+ );
275
+ toast.success("JSON copied to clipboard");
276
+ } catch (err) {
277
+ toast.error(err instanceof Error ? err.message : "Failed to copy JSON");
278
+ }
279
+ };
280
+ const copyMarkdownToClipboard = async () => {
281
+ try {
282
+ if (content) {
283
+ await copyText(content, "Markdown copied to clipboard");
284
+ } else {
285
+ copyTableToClipboard();
286
+ }
287
+ } catch (err) {
288
+ toast.error(err instanceof Error ? err.message : "Failed to copy markdown");
289
+ }
290
+ };
291
+ const downloadCSV = () => {
292
+ try {
293
+ const csvContent = [
294
+ internalTableData.headers.map((h) => h.replace(/"/g, '""')).join(","),
295
+ ...internalTableData.rows.map(
296
+ (row) => row.map((cell) => {
297
+ const escaped = cell.replace(/"/g, '""');
298
+ return cell.includes(",") ? `"${escaped}"` : escaped;
299
+ }).join(",")
300
+ )
301
+ ].join("\n");
302
+ const blob = new Blob([csvContent], { type: "text/csv;charset=utf-8;" });
303
+ const url = URL.createObjectURL(blob);
304
+ const link = document.createElement("a");
305
+ link.href = url;
306
+ link.download = "table_data.csv";
307
+ link.click();
308
+ URL.revokeObjectURL(url);
309
+ toast.success("Table exported to CSV", {
310
+ action: {
311
+ label: "Download Again",
312
+ onClick: () => link.click(),
313
+ className: "font-medium"
314
+ }
315
+ });
316
+ } catch (err) {
317
+ toast.error(err instanceof Error ? err.message : "Failed to download CSV");
318
+ }
319
+ };
320
+ const downloadMarkdown = () => {
321
+ try {
322
+ const markdownContent = content || "";
323
+ const fileName = internalTableData.headers && internalTableData.headers[0] ? `${internalTableData.headers[0].replace(/[^a-z0-9]/gi, "_").toLowerCase()}.md` : "table_data.md";
324
+ const blob = new Blob([markdownContent], {
325
+ type: "text/markdown;charset=utf-8"
326
+ });
327
+ const url = URL.createObjectURL(blob);
328
+ const link = document.createElement("a");
329
+ link.href = url;
330
+ link.download = fileName;
331
+ document.body.appendChild(link);
332
+ link.click();
333
+ document.body.removeChild(link);
334
+ URL.revokeObjectURL(url);
335
+ toast.success("Markdown file downloaded", {
336
+ action: {
337
+ label: "Download Again",
338
+ onClick: () => {
339
+ const newLink = document.createElement("a");
340
+ newLink.href = url;
341
+ newLink.download = fileName;
342
+ document.body.appendChild(newLink);
343
+ newLink.click();
344
+ document.body.removeChild(newLink);
345
+ },
346
+ className: "font-medium"
347
+ }
348
+ });
349
+ } catch (err) {
350
+ toast.error(err instanceof Error ? err.message : "Failed to download Markdown");
351
+ }
352
+ };
353
+ const toggleGlobalEditMode = () => {
354
+ if (editMode !== "none") {
355
+ if (!notifyContentChange()) return;
356
+ onSave(internalTableData);
357
+ setEditMode("none");
358
+ toast.info("Edit mode deactivated");
359
+ } else {
360
+ setEditMode("header");
361
+ toast.info("Edit mode activated");
362
+ }
363
+ };
364
+ const handleHeaderChange = (index, value) => {
365
+ const newHeaders = [...internalTableData.headers];
366
+ newHeaders[index] = value;
367
+ setInternalTableData({ ...internalTableData, headers: newHeaders });
368
+ };
369
+ const handleCellChange = (rowIndex, colIndex, value) => {
370
+ const newRows = internalTableData.rows.map(
371
+ (row, i) => i === rowIndex ? row.map((cell, j) => j === colIndex ? value : cell) : row
372
+ );
373
+ setInternalTableData({ ...internalTableData, rows: newRows });
374
+ };
375
+ const handleRowClick = (rowIndex) => {
376
+ if (editMode === "none") return;
377
+ onSave(internalTableData);
378
+ setEditMode(rowIndex);
379
+ };
380
+ const handleHeaderClick = () => {
381
+ if (editMode === "none") return;
382
+ onSave(internalTableData);
383
+ setEditMode("header");
384
+ };
385
+ const handleSave = () => {
386
+ if (!notifyContentChange()) return;
387
+ onSave(internalTableData);
388
+ setEditMode("none");
389
+ toast.success("Table data saved");
390
+ };
391
+ const handleCancel = () => {
392
+ if (data) {
393
+ setInternalTableData({
394
+ headers: data.headers || [],
395
+ rows: data.rows || [],
396
+ normalizedData: data.normalizedData
397
+ });
398
+ }
399
+ setEditMode("none");
400
+ toast.info("Edits cancelled");
401
+ };
402
+ const undo = useTableUndo();
403
+ const applyMutation = (mutator) => {
404
+ const next = mutator(internalTableData);
405
+ setInternalTableData({
406
+ headers: next.headers,
407
+ rows: next.rows,
408
+ normalizedData: next.normalizedData
409
+ });
410
+ };
411
+ const undoLast = () => {
412
+ const prev = undo.consume();
413
+ if (prev) {
414
+ setInternalTableData(prev);
415
+ toast.info("Undone");
416
+ }
417
+ };
418
+ const undoToastAction = {
419
+ label: "Undo",
420
+ onClick: undoLast,
421
+ className: "font-medium"
422
+ };
423
+ const handleAppendRow = () => {
424
+ applyMutation(appendRow);
425
+ toast.success("Row added");
426
+ };
427
+ const handleInsertRowAbove = (rowIndex) => {
428
+ applyMutation((t) => insertRowAbove(t, rowIndex));
429
+ toast.success("Row inserted above");
430
+ };
431
+ const handleInsertRowBelow = (rowIndex) => {
432
+ applyMutation((t) => insertRowBelow(t, rowIndex));
433
+ toast.success("Row inserted below");
434
+ };
435
+ const handleDuplicateRow = (rowIndex) => {
436
+ applyMutation((t) => duplicateRow(t, rowIndex));
437
+ toast.success("Row duplicated");
438
+ };
439
+ const handleClearRow = (rowIndex) => {
440
+ undo.snapshot(internalTableData);
441
+ applyMutation((t) => clearRow(t, rowIndex));
442
+ toast.success("Row cleared", { action: undoToastAction });
443
+ };
444
+ const handleDeleteRow = (rowIndex) => {
445
+ undo.snapshot(internalTableData);
446
+ applyMutation((t) => removeRow(t, rowIndex));
447
+ if (editMode === rowIndex) {
448
+ setEditMode("header");
449
+ }
450
+ toast.success("Row deleted", { action: undoToastAction });
451
+ };
452
+ const handleClearAllContents = () => {
453
+ if (internalTableData.rows.length === 0 || internalTableData.headers.length <= 1) {
454
+ return;
455
+ }
456
+ undo.snapshot(internalTableData);
457
+ applyMutation(clearAllContents);
458
+ toast.success("Cleared all contents (kept first column)", {
459
+ action: undoToastAction
460
+ });
461
+ };
462
+ const handleAppendColumn = () => {
463
+ applyMutation((t) => appendColumn(t));
464
+ toast.success("Column added");
465
+ };
466
+ const handleInsertColumnBefore = (colIndex) => {
467
+ applyMutation((t) => insertColumnBefore(t, colIndex));
468
+ toast.success("Column inserted before");
469
+ };
470
+ const handleInsertColumnAfter = (colIndex) => {
471
+ applyMutation((t) => insertColumnAfter(t, colIndex));
472
+ toast.success("Column inserted after");
473
+ };
474
+ const handleDuplicateColumn = (colIndex) => {
475
+ applyMutation((t) => duplicateColumn(t, colIndex));
476
+ toast.success("Column duplicated");
477
+ };
478
+ const handleClearColumn = (colIndex) => {
479
+ undo.snapshot(internalTableData);
480
+ applyMutation((t) => clearColumn(t, colIndex));
481
+ toast.success("Column cleared", { action: undoToastAction });
482
+ };
483
+ const handleDeleteColumn = (colIndex) => {
484
+ undo.snapshot(internalTableData);
485
+ applyMutation((t) => removeColumn(t, colIndex));
486
+ toast.success("Column deleted", { action: undoToastAction });
487
+ };
488
+ const isEditingEnabled = editMode !== "none";
489
+ const isEditingHeader = editMode === "header";
490
+ const editingBorderStyle = "overflow-x-auto rounded-xl border-3 border-dashed border-red-500 rounded-xl";
491
+ const normalBorderStyle = `overflow-x-auto rounded-xl border-3 ${tableTheme.border}`;
492
+ const canEnterEditMode = !isStreamActive && !specimenMode;
493
+ const { handleTableDoubleClick, bindCellTextareaRef } = useDoubleClickEdit({
494
+ canEnterEditMode,
495
+ editMode,
496
+ setEditMode
497
+ });
498
+ const phoneStack = !isEditingEnabled;
499
+ return /* @__PURE__ */ jsxs("div", { className: cn("relative", className), children: [
500
+ showNormalized && internalTableData.normalizedData ? /* @__PURE__ */ jsxs("div", { className: "relative p-4 bg-gray-100 dark:bg-gray-800 rounded-lg", children: [
501
+ /* @__PURE__ */ jsx("pre", { className: "text-sm overflow-auto", children: JSON.stringify(internalTableData.normalizedData, null, 2) }),
502
+ /* @__PURE__ */ jsxs(
503
+ Button,
504
+ {
505
+ variant: "outline",
506
+ size: "sm",
507
+ onClick: () => setShowNormalized(false),
508
+ className: "absolute top-2 right-2 opacity-90 hover:opacity-100 flex items-center gap-1 shadow-md",
509
+ children: [
510
+ /* @__PURE__ */ jsx(Eye, { className: "h-4 w-4" }),
511
+ "View Table"
512
+ ]
513
+ }
514
+ )
515
+ ] }) : /* @__PURE__ */ jsx(
516
+ MarkdownTableScrollArea,
517
+ {
518
+ className: cn(
519
+ isEditingEnabled ? editingBorderStyle : normalBorderStyle,
520
+ isMobile && "-mx-1",
521
+ phoneStack && "phone-stack"
522
+ ),
523
+ children: /* @__PURE__ */ jsxs(
524
+ "table",
525
+ {
526
+ className: cn(
527
+ "border-collapse",
528
+ isMobile && !phoneStack ? "min-w-max w-full" : "w-full"
529
+ ),
530
+ style: { fontSize: `${tableFontsize}px` },
531
+ onDoubleClick: canWrite ? handleTableDoubleClick : void 0,
532
+ children: [
533
+ /* @__PURE__ */ jsx("thead", { className: tableTheme.header, children: /* @__PURE__ */ jsxs("tr", { onClick: handleHeaderClick, children: [
534
+ isEditingEnabled && /* @__PURE__ */ jsx("th", { className: "w-5 p-0", "aria-hidden": "true" }),
535
+ internalTableData.headers.map((header, i) => /* @__PURE__ */ jsx(
536
+ "th",
537
+ {
538
+ "data-cell": "header",
539
+ "data-cell-col": i,
540
+ className: cn(
541
+ "p-2 text-left",
542
+ tableTheme.headerText,
543
+ isMobile && "whitespace-nowrap",
544
+ isEditingEnabled && "group/col"
545
+ ),
546
+ children: /* @__PURE__ */ jsxs(
547
+ "div",
548
+ {
549
+ className: cn(
550
+ "flex items-center gap-2",
551
+ isEditingEnabled && "justify-between"
552
+ ),
553
+ children: [
554
+ /* @__PURE__ */ jsx("div", { className: "flex-1 min-w-0", children: isEditingHeader ? /* @__PURE__ */ jsx(
555
+ "input",
556
+ {
557
+ type: "text",
558
+ value: internalTableData.headers[i] || header,
559
+ onChange: (e) => handleHeaderChange(i, e.target.value),
560
+ className: cn(
561
+ "w-full bg-transparent outline-none border border-dashed border-blue-300 p-1",
562
+ tableTheme.headerText
563
+ ),
564
+ onClick: (e) => e.stopPropagation()
565
+ }
566
+ ) : /* @__PURE__ */ jsx(RichContent, { level: "inline", source: header, isStreaming: false, gfmCell: true }) }),
567
+ isEditingEnabled && /* @__PURE__ */ jsx(
568
+ ColumnActionsMenu,
569
+ {
570
+ onInsertBefore: () => handleInsertColumnBefore(i),
571
+ onInsertAfter: () => handleInsertColumnAfter(i),
572
+ onDuplicate: () => handleDuplicateColumn(i),
573
+ onClear: () => handleClearColumn(i),
574
+ onDelete: () => handleDeleteColumn(i)
575
+ }
576
+ )
577
+ ]
578
+ }
579
+ )
580
+ },
581
+ i
582
+ ))
583
+ ] }) }),
584
+ /* @__PURE__ */ jsx("tbody", { children: internalTableData.rows.map((row, rowIndex) => /* @__PURE__ */ jsxs(
585
+ "tr",
586
+ {
587
+ className: cn(
588
+ "border-t",
589
+ tableTheme.row,
590
+ editMode === rowIndex && "bg-blue-50 dark:bg-blue-900/20",
591
+ isEditingEnabled && "group/row"
592
+ ),
593
+ onClick: () => handleRowClick(rowIndex),
594
+ children: [
595
+ isEditingEnabled && /* @__PURE__ */ jsx("td", { className: "w-5 p-0 text-center align-middle", children: /* @__PURE__ */ jsx(
596
+ RowActionsMenu,
597
+ {
598
+ onInsertAbove: () => handleInsertRowAbove(rowIndex),
599
+ onInsertBelow: () => handleInsertRowBelow(rowIndex),
600
+ onDuplicate: () => handleDuplicateRow(rowIndex),
601
+ onClear: () => handleClearRow(rowIndex),
602
+ onDelete: () => handleDeleteRow(rowIndex)
603
+ }
604
+ ) }),
605
+ row.map((cell, colIndex) => /* @__PURE__ */ jsx(
606
+ "td",
607
+ {
608
+ "data-cell": "body",
609
+ "data-cell-row": rowIndex,
610
+ "data-cell-col": colIndex,
611
+ ...phoneStack ? phoneStackCellProps(internalTableData.headers, colIndex) : {},
612
+ className: cn(
613
+ "p-2",
614
+ colIndex === 0 && "font-semibold",
615
+ isMobile && !phoneStack && "whitespace-nowrap max-w-[200px] overflow-hidden text-ellipsis"
616
+ ),
617
+ children: editMode === rowIndex ? /* @__PURE__ */ jsx(
618
+ "textarea",
619
+ {
620
+ ref: bindCellTextareaRef(rowIndex, colIndex),
621
+ value: internalTableData.rows[rowIndex]?.[colIndex] || cell,
622
+ onChange: (e) => handleCellChange(rowIndex, colIndex, e.target.value),
623
+ className: cn(
624
+ "w-full bg-transparent outline-none border border-dashed border-blue-300 p-1",
625
+ "resize-y min-h-[8rem]",
626
+ colIndex === 0 && "font-semibold"
627
+ ),
628
+ onClick: (e) => e.stopPropagation(),
629
+ onFocus: (e) => e.target.select()
630
+ }
631
+ ) : /* @__PURE__ */ jsx(RichContent, { level: "inline", source: cell, isStreaming: false, gfmCell: true })
632
+ },
633
+ colIndex
634
+ ))
635
+ ]
636
+ },
637
+ rowIndex
638
+ )) })
639
+ ]
640
+ }
641
+ )
642
+ }
643
+ ),
644
+ showChart && !isStreamActive && !specimenMode && /* @__PURE__ */ jsx(
645
+ TableChartPanel,
646
+ {
647
+ table: {
648
+ headers: internalTableData.headers,
649
+ rows: internalTableData.rows
650
+ },
651
+ onClose: () => setShowChart(false)
652
+ }
653
+ ),
654
+ !isStreamActive && !specimenMode && /* @__PURE__ */ jsxs(
655
+ "div",
656
+ {
657
+ ref: actionRowRef,
658
+ role: "toolbar",
659
+ "aria-label": "Table actions",
660
+ className: tableActionRowClass(isMobile),
661
+ children: [
662
+ isEditingEnabled && /* @__PURE__ */ jsx(
663
+ TableEditToolbar,
664
+ {
665
+ onAddRow: handleAppendRow,
666
+ onAddColumn: handleAppendColumn,
667
+ onClearAllContents: handleClearAllContents,
668
+ rowCount: internalTableData.rows.length,
669
+ colCount: internalTableData.headers.length,
670
+ className: "contents"
671
+ }
672
+ ),
673
+ !isEditingEnabled && /* @__PURE__ */ jsxs(Fragment, { children: [
674
+ internalTableData.normalizedData && /* @__PURE__ */ jsxs(
675
+ Button,
676
+ {
677
+ variant: "outline",
678
+ size: "sm",
679
+ onClick: () => setShowNormalized(!showNormalized),
680
+ className: "flex items-center gap-2 hover:bg-blue-100 dark:hover:bg-blue-800/30",
681
+ children: [
682
+ /* @__PURE__ */ jsx(Eye, { className: "h-4 w-4" }),
683
+ showNormalized ? "Table" : "Data"
684
+ ]
685
+ }
686
+ ),
687
+ /* @__PURE__ */ jsx(
688
+ ChartThisButton,
689
+ {
690
+ table: {
691
+ headers: internalTableData.headers,
692
+ rows: internalTableData.rows
693
+ },
694
+ active: showChart,
695
+ onToggle: () => setShowChart((v) => !v)
696
+ }
697
+ ),
698
+ canWrite && internalTableData.normalizedData && /* @__PURE__ */ jsx(
699
+ TableSaveToMenu,
700
+ {
701
+ headers: internalTableData.headers,
702
+ rows: internalTableData.rows
703
+ }
704
+ ),
705
+ /* @__PURE__ */ jsx(
706
+ ExportDropdownMenu,
707
+ {
708
+ tableData: internalTableData,
709
+ content,
710
+ copyTableToClipboard,
711
+ copyMarkdownToClipboard,
712
+ copyJsonToClipboard,
713
+ downloadCSV,
714
+ downloadMarkdown,
715
+ isStreamActive
716
+ }
717
+ )
718
+ ] }),
719
+ isEditingEnabled ? /* @__PURE__ */ jsxs(Fragment, { children: [
720
+ /* @__PURE__ */ jsxs(
721
+ Button,
722
+ {
723
+ variant: "outline",
724
+ size: "sm",
725
+ onClick: handleSave,
726
+ "data-keep-label": "",
727
+ className: "flex items-center gap-2 border-1 border-dashed border-green-500 rounded-xl",
728
+ children: [
729
+ /* @__PURE__ */ jsx(Save, { className: "h-4 w-4" }),
730
+ "Save"
731
+ ]
732
+ }
733
+ ),
734
+ /* @__PURE__ */ jsxs(
735
+ Button,
736
+ {
737
+ variant: "outline",
738
+ size: "sm",
739
+ onClick: handleCancel,
740
+ "data-keep-label": "",
741
+ className: "flex items-center gap-2 border-1 border-dashed border-red-500 rounded-xl",
742
+ children: [
743
+ /* @__PURE__ */ jsx(X, { className: "h-4 w-4" }),
744
+ "Cancel"
745
+ ]
746
+ }
747
+ )
748
+ ] }) : canWrite ? /* @__PURE__ */ jsxs(
749
+ Button,
750
+ {
751
+ variant: "outline",
752
+ size: "sm",
753
+ onClick: toggleGlobalEditMode,
754
+ className: "flex items-center gap-2 hover:bg-blue-100 dark:hover:bg-blue-800/30",
755
+ children: [
756
+ /* @__PURE__ */ jsx(Edit, { className: "h-4 w-4" }),
757
+ "Edit"
758
+ ]
759
+ }
760
+ ) : null
761
+ ]
762
+ }
763
+ )
764
+ ] });
765
+ };
766
+ var MarkdownTable_default = MarkdownTable;
767
+ export {
768
+ MarkdownTable_default as default
769
+ };