dishui 0.0.108 → 0.0.110

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 (384) hide show
  1. package/dist/.release-verified.json +3 -2
  2. package/dist/components/Accordion/index.js.map +1 -1
  3. package/dist/components/Avatar/index.js.map +1 -1
  4. package/dist/components/Badge/index.js.map +1 -1
  5. package/dist/components/Button/index.js.map +1 -1
  6. package/dist/components/ButtonMenu/index.js.map +1 -1
  7. package/dist/components/Card/Metric2.js.map +1 -1
  8. package/dist/components/Card/Ticket2.js.map +1 -1
  9. package/dist/components/Card/index.js.map +1 -1
  10. package/dist/components/Chart/Chart.js.map +1 -1
  11. package/dist/components/Checkbox/index.js.map +1 -1
  12. package/dist/components/ChoicePicker/index.js.map +1 -1
  13. package/dist/components/Column/index.js.map +1 -1
  14. package/dist/components/ConfirmDialog/index.js.map +1 -1
  15. package/dist/components/DateTimeInput/index.js.map +1 -1
  16. package/dist/components/Demo/index.js.map +1 -1
  17. package/dist/components/Demo/source.js.map +1 -1
  18. package/dist/components/Divider/index.js.map +1 -1
  19. package/dist/components/EmptyState/index.js.map +1 -1
  20. package/dist/components/Field/index.js.map +1 -1
  21. package/dist/components/FileUploader/DropZone.js.map +1 -1
  22. package/dist/components/FileUploader/FileItem.js.map +1 -1
  23. package/dist/components/FileUploader/FileUploader.js.map +1 -1
  24. package/dist/components/FileUploader/UploadQueue.js.map +1 -1
  25. package/dist/components/GroupButton/index.js.map +1 -1
  26. package/dist/components/GroupedTable/index.js.map +1 -1
  27. package/dist/components/Icon/index.js.map +1 -1
  28. package/dist/components/Image/index.js.map +1 -1
  29. package/dist/components/Input/index.js.map +1 -1
  30. package/dist/components/Label/index.js.map +1 -1
  31. package/dist/components/Layout/index.js.map +1 -1
  32. package/dist/components/LayoutSuite/DashboardSuite.js.map +1 -1
  33. package/dist/components/LayoutSuite/index.js.map +1 -1
  34. package/dist/components/List/index.js.map +1 -1
  35. package/dist/components/Markdown/Markdown.js.map +1 -1
  36. package/dist/components/Markdown/codeThemes.js.map +1 -1
  37. package/dist/components/Markdown/markdownComponents.js.map +1 -1
  38. package/dist/components/Markdown/parseCodeBlockMeta.js.map +1 -1
  39. package/dist/components/Markdown/useMarkdownSource.js.map +1 -1
  40. package/dist/components/Markdown/useMarkmapRenderer.js.map +1 -1
  41. package/dist/components/Markdown/useMermaidRenderer.js.map +1 -1
  42. package/dist/components/Modal/focusScope.js.map +1 -1
  43. package/dist/components/Modal/index.js.map +1 -1
  44. package/dist/components/MultipleChoice/index.js.map +1 -1
  45. package/dist/components/NavigationList/index.js.map +1 -1
  46. package/dist/components/Page/Float2.js.map +1 -1
  47. package/dist/components/Page/index.js.map +1 -1
  48. package/dist/components/Page/resize2.js.map +1 -1
  49. package/dist/components/PageHeader/index.js.map +1 -1
  50. package/dist/components/PagePanel/index.js.map +1 -1
  51. package/dist/components/ProtectedRoute/index.js.map +1 -1
  52. package/dist/components/Resizable/ResizeGrip.js.map +1 -1
  53. package/dist/components/Resizable/index.js.map +1 -1
  54. package/dist/components/Resizable/useResize.js.map +1 -1
  55. package/dist/components/Row/index.js.map +1 -1
  56. package/dist/components/Section/index.js.map +1 -1
  57. package/dist/components/Select/index.js.map +1 -1
  58. package/dist/components/SidebarToggleButton/index.js.map +1 -1
  59. package/dist/components/Skeleton/index.js.map +1 -1
  60. package/dist/components/Slider/index.js.map +1 -1
  61. package/dist/components/Switch/index.js.map +1 -1
  62. package/dist/components/Tab/index.js.map +1 -1
  63. package/dist/components/Table/index.js.map +1 -1
  64. package/dist/components/Tabs/index.js.map +1 -1
  65. package/dist/components/Tabs/tabNavigation.js.map +1 -1
  66. package/dist/components/Text/index.js.map +1 -1
  67. package/dist/components/Textarea/index.js.map +1 -1
  68. package/dist/components/Tooltip/index.js.map +1 -1
  69. package/dist/components/Tree/Tree.js.map +1 -1
  70. package/dist/components/ai/AgentChat/index.js.map +1 -1
  71. package/dist/components/ai/AgentRunCard/index.js.map +1 -1
  72. package/dist/components/ai/AgentScreen/index.js.map +1 -1
  73. package/dist/components/ai/ApprovalCard/index.js.map +1 -1
  74. package/dist/components/ai/CodeView/index.js.map +1 -1
  75. package/dist/components/ai/CommandSearch/index.js.map +1 -1
  76. package/dist/components/ai/ContextCards/index.js.map +1 -1
  77. package/dist/components/ai/DiffTable/index.js.map +1 -1
  78. package/dist/components/ai/FilterTable/index.js.map +1 -1
  79. package/dist/components/ai/FineTuneCard/index.js.map +1 -1
  80. package/dist/components/ai/InsightCards/index.js.map +1 -1
  81. package/dist/components/ai/IssueCard/index.js.map +1 -1
  82. package/dist/components/ai/LoadingState/index.js.map +1 -1
  83. package/dist/components/ai/PromptBar/index.js.map +1 -1
  84. package/dist/components/ai/RecommendationCard/index.js.map +1 -1
  85. package/dist/components/ai/RecordsTable/index.js.map +1 -1
  86. package/dist/components/ai/SelectionActions/index.js.map +1 -1
  87. package/dist/components/ai/StateFlow/index.js.map +1 -1
  88. package/dist/components/ai/StreamingText/index.js.map +1 -1
  89. package/dist/components/ai/TaskRows/index.js.map +1 -1
  90. package/dist/components/ai/Thinking/index.js.map +1 -1
  91. package/dist/components/ai/ToolChips/index.js.map +1 -1
  92. package/dist/components/ai/shared.js.map +1 -1
  93. package/dist/components/pro/ArticleContextMenu/index.js.map +1 -1
  94. package/dist/components/pro/ArticleControl/ArticleControl2.js.map +1 -1
  95. package/dist/components/pro/ArticleControl/buildHeadingTree.js.map +1 -1
  96. package/dist/components/pro/ArticleControl/useArticleToc.js.map +1 -1
  97. package/dist/components/pro/Calendar/Calendar.js +165 -160
  98. package/dist/components/pro/Calendar/Calendar.js.map +1 -1
  99. package/dist/components/pro/Calendar/hooks/useCalendarDrag.js.map +1 -1
  100. package/dist/components/pro/Calendar/hooks/useCalendarState.js +31 -31
  101. package/dist/components/pro/Calendar/hooks/useCalendarState.js.map +1 -1
  102. package/dist/components/pro/Calendar/utils.js.map +1 -1
  103. package/dist/components/pro/CodeEditor/editors/CodeEditor.js.map +1 -1
  104. package/dist/components/pro/CodeEditor/editors/MarkdownEditor.js.map +1 -1
  105. package/dist/components/pro/CodeEditor/editors/markdownExtensions.js.map +1 -1
  106. package/dist/components/pro/CodeEditor/extensions/contextMenu.js.map +1 -1
  107. package/dist/components/pro/CodeEditor/extensions/index.js.map +1 -1
  108. package/dist/components/pro/CodeEditor/langs/index.js.map +1 -1
  109. package/dist/components/pro/CodeEditor/langs/javascript.js.map +1 -1
  110. package/dist/components/pro/CodeEditor/langs/python.js.map +1 -1
  111. package/dist/components/pro/CodeEditor/langs/snippets.js.map +1 -1
  112. package/dist/components/pro/CodeEditor/panels/FootnotePanel.js.map +1 -1
  113. package/dist/components/pro/CodeEditor/panels/HistoryPanel.js +65 -59
  114. package/dist/components/pro/CodeEditor/panels/HistoryPanel.js.map +1 -1
  115. package/dist/components/pro/CodeEditor/panels/OutlinePanel.js.map +1 -1
  116. package/dist/components/pro/CodeEditor/panels/TableOfContentsPanel.js.map +1 -1
  117. package/dist/components/pro/CodeEditor/panels/VariablePanel.js.map +1 -1
  118. package/dist/components/pro/CodeEditor/themes.js.map +1 -1
  119. package/dist/components/pro/CodeEditor/utils.js.map +1 -1
  120. package/dist/components/pro/DataTable/DataTable.js.map +1 -1
  121. package/dist/components/pro/DataTable/Filters.js.map +1 -1
  122. package/dist/components/pro/DataTable/PivotPanel.js.map +1 -1
  123. package/dist/components/pro/DataTable/PivotView.js.map +1 -1
  124. package/dist/components/pro/DataTable/components/BulkActions.js.map +1 -1
  125. package/dist/components/pro/DataTable/components/ColumnSelector.js.map +1 -1
  126. package/dist/components/pro/DataTable/components/FilterBar.js.map +1 -1
  127. package/dist/components/pro/DataTable/components/TableBody.js.map +1 -1
  128. package/dist/components/pro/DataTable/components/TableHeader.js.map +1 -1
  129. package/dist/components/pro/DataTable/components/TablePagination.js.map +1 -1
  130. package/dist/components/pro/DataTable/components/TableToolbar.js.map +1 -1
  131. package/dist/components/pro/DataTable/extension.js.map +1 -1
  132. package/dist/components/pro/DataTable/pivotEngine.js.map +1 -1
  133. package/dist/components/pro/DataTable/pivotExtension.js.map +1 -1
  134. package/dist/components/pro/DataTable/rowDetailExtension.js.map +1 -1
  135. package/dist/components/pro/DataTable/tanstack-table.js.map +1 -1
  136. package/dist/components/pro/DataTable/treeDataUtils.js.map +1 -1
  137. package/dist/components/pro/DataTable/useColumnDragReorder.js.map +1 -1
  138. package/dist/components/pro/DataTable/useDataTableModel.js +119 -104
  139. package/dist/components/pro/DataTable/useDataTableModel.js.map +1 -1
  140. package/dist/components/pro/DataTable/utils.js.map +1 -1
  141. package/dist/components/pro/FileExplorer/Breadcrumb.js.map +1 -1
  142. package/dist/components/pro/FileExplorer/CreateDialog.js.map +1 -1
  143. package/dist/components/pro/FileExplorer/FileExplorer.js.map +1 -1
  144. package/dist/components/pro/FileExplorer/FileIcon.js.map +1 -1
  145. package/dist/components/pro/FileExplorer/GridView.js.map +1 -1
  146. package/dist/components/pro/FileExplorer/ListView.js.map +1 -1
  147. package/dist/components/pro/FileExplorer/Toolbar.js.map +1 -1
  148. package/dist/components/pro/Flow/Flow.js.map +1 -1
  149. package/dist/components/pro/Flow/FlowCanvas.js.map +1 -1
  150. package/dist/components/pro/Flow/archify/build.js.map +1 -1
  151. package/dist/components/pro/Flow/archify/convert.js.map +1 -1
  152. package/dist/components/pro/Flow/archify/palette.js.map +1 -1
  153. package/dist/components/pro/Flow/archify/presets.js.map +1 -1
  154. package/dist/components/pro/Flow/archify/spec.js.map +1 -1
  155. package/dist/components/pro/Flow/canvas/AlignmentGuides.js.map +1 -1
  156. package/dist/components/pro/Flow/canvas/GridRenderer.js.map +1 -1
  157. package/dist/components/pro/Flow/canvas/MiniMapRenderer.js.map +1 -1
  158. package/dist/components/pro/Flow/canvas/PixiApp.js.map +1 -1
  159. package/dist/components/pro/Flow/canvas/SelectionOverlay.js.map +1 -1
  160. package/dist/components/pro/Flow/canvas/ViewportContainer.js.map +1 -1
  161. package/dist/components/pro/Flow/constants.js.map +1 -1
  162. package/dist/components/pro/Flow/context/FlowAIContext.js.map +1 -1
  163. package/dist/components/pro/Flow/context/FlowContext.js.map +1 -1
  164. package/dist/components/pro/Flow/context/FlowUIContext.js.map +1 -1
  165. package/dist/components/pro/Flow/edges/EdgeRenderer.js.map +1 -1
  166. package/dist/components/pro/Flow/edges/edgeMarkers.js.map +1 -1
  167. package/dist/components/pro/Flow/edges/edgePaths.js.map +1 -1
  168. package/dist/components/pro/Flow/hooks/useAlignmentGuides.js.map +1 -1
  169. package/dist/components/pro/Flow/hooks/useClipboard.js.map +1 -1
  170. package/dist/components/pro/Flow/hooks/useCompactMode.js.map +1 -1
  171. package/dist/components/pro/Flow/hooks/useDeleteSelection.js.map +1 -1
  172. package/dist/components/pro/Flow/hooks/useDraggablePanel.js.map +1 -1
  173. package/dist/components/pro/Flow/hooks/useEdgeMutations.js.map +1 -1
  174. package/dist/components/pro/Flow/hooks/useFlowImportExport.js.map +1 -1
  175. package/dist/components/pro/Flow/hooks/useKeyboardShortcuts.js.map +1 -1
  176. package/dist/components/pro/Flow/hooks/useLayoutActions.js.map +1 -1
  177. package/dist/components/pro/Flow/hooks/useLineMutations.js.map +1 -1
  178. package/dist/components/pro/Flow/hooks/useMindMap.js.map +1 -1
  179. package/dist/components/pro/Flow/hooks/useNodeMutations.js.map +1 -1
  180. package/dist/components/pro/Flow/hooks/usePdfExport.js.map +1 -1
  181. package/dist/components/pro/Flow/hooks/usePixiApp.js.map +1 -1
  182. package/dist/components/pro/Flow/hooks/useResizablePanel.js.map +1 -1
  183. package/dist/components/pro/Flow/hooks/useSelection.js.map +1 -1
  184. package/dist/components/pro/Flow/hooks/useUndoRedo.js.map +1 -1
  185. package/dist/components/pro/Flow/hooks/useViewport.js.map +1 -1
  186. package/dist/components/pro/Flow/lines/FreehandTool.js.map +1 -1
  187. package/dist/components/pro/Flow/lines/GeometricLineTool.js.map +1 -1
  188. package/dist/components/pro/Flow/lines/LineRenderer.js.map +1 -1
  189. package/dist/components/pro/Flow/lines/lineSmoothing.js.map +1 -1
  190. package/dist/components/pro/Flow/nodes/DataNodeView.js.map +1 -1
  191. package/dist/components/pro/Flow/nodes/MediaContent.js.map +1 -1
  192. package/dist/components/pro/Flow/nodes/MediaOverlay.js.map +1 -1
  193. package/dist/components/pro/Flow/nodes/Model3DView.js.map +1 -1
  194. package/dist/components/pro/Flow/nodes/NodeHandles.js.map +1 -1
  195. package/dist/components/pro/Flow/nodes/NodeRenderer.js.map +1 -1
  196. package/dist/components/pro/Flow/nodes/NodeText.js.map +1 -1
  197. package/dist/components/pro/Flow/nodes/aiClient.js.map +1 -1
  198. package/dist/components/pro/Flow/nodes/animAnchors.js.map +1 -1
  199. package/dist/components/pro/Flow/nodes/chartGeometryBudget.js.map +1 -1
  200. package/dist/components/pro/Flow/nodes/dataUtils.js.map +1 -1
  201. package/dist/components/pro/Flow/nodes/demandRender.js.map +1 -1
  202. package/dist/components/pro/Flow/nodes/nodeUtils.js.map +1 -1
  203. package/dist/components/pro/Flow/nodes/shapes.js.map +1 -1
  204. package/dist/components/pro/Flow/nodes/svgIconTexture.js.map +1 -1
  205. package/dist/components/pro/Flow/nodes/svgIcons.js.map +1 -1
  206. package/dist/components/pro/Flow/panels/AIPanel.js.map +1 -1
  207. package/dist/components/pro/Flow/panels/Breadcrumb.js.map +1 -1
  208. package/dist/components/pro/Flow/panels/ContextMenu.js.map +1 -1
  209. package/dist/components/pro/Flow/panels/DataInspectorSection.js.map +1 -1
  210. package/dist/components/pro/Flow/panels/ExpandableTextarea.js.map +1 -1
  211. package/dist/components/pro/Flow/panels/FlowPanelGroup.js.map +1 -1
  212. package/dist/components/pro/Flow/panels/FlowToolbar.js.map +1 -1
  213. package/dist/components/pro/Flow/panels/InspectorPanel.js.map +1 -1
  214. package/dist/components/pro/Flow/panels/OutlinePanel.js.map +1 -1
  215. package/dist/components/pro/Flow/panels/PresentationMode.js.map +1 -1
  216. package/dist/components/pro/Flow/panels/ProjectTitle.js.map +1 -1
  217. package/dist/components/pro/Flow/panels/ShapePalette.js.map +1 -1
  218. package/dist/components/pro/Flow/panels/toolbarIcons.js.map +1 -1
  219. package/dist/components/pro/Flow/types.js.map +1 -1
  220. package/dist/components/pro/Flow/utils/dashedLine.js.map +1 -1
  221. package/dist/components/pro/Flow/utils/gradient.js.map +1 -1
  222. package/dist/components/pro/Flow/utils/pdfExport.js.map +1 -1
  223. package/dist/components/pro/Flow/utils/themeColor.js.map +1 -1
  224. package/dist/components/pro/Gantt/Gantt.js.map +1 -1
  225. package/dist/components/pro/Gantt/hooks/useGanttDrag.js.map +1 -1
  226. package/dist/components/pro/Gantt/hooks/useGanttState.js +79 -71
  227. package/dist/components/pro/Gantt/hooks/useGanttState.js.map +1 -1
  228. package/dist/components/pro/Gantt/utils.js.map +1 -1
  229. package/dist/components/pro/Kanban/Kanban.js.map +1 -1
  230. package/dist/components/pro/Kanban/Swimlanes.js.map +1 -1
  231. package/dist/components/pro/Kanban/useKanbanDrag.js.map +1 -1
  232. package/dist/components/pro/Kanban/utils.js.map +1 -1
  233. package/dist/components/pro/RichTextEditor/AIRewrite.js.map +1 -1
  234. package/dist/components/pro/RichTextEditor/BlockHandle.js.map +1 -1
  235. package/dist/components/pro/RichTextEditor/BubbleToolbar.js.map +1 -1
  236. package/dist/components/pro/RichTextEditor/CommentDialog.js.map +1 -1
  237. package/dist/components/pro/RichTextEditor/CommentPanel.js.map +1 -1
  238. package/dist/components/pro/RichTextEditor/CommentPopover.js.map +1 -1
  239. package/dist/components/pro/RichTextEditor/ContextMenu.js.map +1 -1
  240. package/dist/components/pro/RichTextEditor/RichTextEditor.js.map +1 -1
  241. package/dist/components/pro/RichTextEditor/SlashMenu.js.map +1 -1
  242. package/dist/components/pro/RichTextEditor/Toolbar/ColorPicker.js.map +1 -1
  243. package/dist/components/pro/RichTextEditor/Toolbar/FloatingDialogMenu.js.map +1 -1
  244. package/dist/components/pro/RichTextEditor/Toolbar/MarkdownTemplates.js.map +1 -1
  245. package/dist/components/pro/RichTextEditor/Toolbar/SelectDropdown.js.map +1 -1
  246. package/dist/components/pro/RichTextEditor/Toolbar/TableOpsMenu.js.map +1 -1
  247. package/dist/components/pro/RichTextEditor/Toolbar/Toolbar.js.map +1 -1
  248. package/dist/components/pro/RichTextEditor/Toolbar/ToolbarButton.js.map +1 -1
  249. package/dist/components/pro/RichTextEditor/Toolbar/useAnchoredDropdown.js.map +1 -1
  250. package/dist/components/pro/RichTextEditor/extensions/CodeBlockView.js.map +1 -1
  251. package/dist/components/pro/RichTextEditor/extensions/CommentMark.js.map +1 -1
  252. package/dist/components/pro/RichTextEditor/extensions/FloatingDialog.js.map +1 -1
  253. package/dist/components/pro/RichTextEditor/extensions/FontSize.js.map +1 -1
  254. package/dist/components/pro/RichTextEditor/extensions/MarkdownBlock.js.map +1 -1
  255. package/dist/components/pro/RichTextEditor/extensions/ResizableImage.js.map +1 -1
  256. package/dist/components/pro/RichTextEditor/extensions/legacyMermaid.js.map +1 -1
  257. package/dist/components/pro/RichTextEditor/types.js.map +1 -1
  258. package/dist/components/pro/Sprite/Molly/animations.d.ts +6 -0
  259. package/dist/components/pro/Sprite/Molly/animations.js +52 -0
  260. package/dist/components/pro/Sprite/Molly/animations.js.map +1 -0
  261. package/dist/components/pro/Sprite/Molly/events.d.ts +2 -0
  262. package/dist/components/pro/Sprite/Molly/events.js +46 -0
  263. package/dist/components/pro/Sprite/Molly/events.js.map +1 -0
  264. package/dist/components/pro/Sprite/Molly/index.d.ts +1 -0
  265. package/dist/components/pro/Sprite/Molly/index.js +12 -0
  266. package/dist/components/pro/Sprite/Molly/index.js.map +1 -0
  267. package/dist/components/pro/Sprite/Molly/legFlexion.d.ts +3 -0
  268. package/dist/components/pro/Sprite/Molly/legFlexion.js +48 -0
  269. package/dist/components/pro/Sprite/Molly/legFlexion.js.map +1 -0
  270. package/dist/components/pro/Sprite/Molly/locomotion.d.ts +4 -0
  271. package/dist/components/pro/Sprite/Molly/locomotion.js +51 -0
  272. package/dist/components/pro/Sprite/Molly/locomotion.js.map +1 -0
  273. package/dist/components/pro/Sprite/Molly/model.d.ts +23 -0
  274. package/dist/components/pro/Sprite/Molly/model.js +614 -0
  275. package/dist/components/pro/Sprite/Molly/model.js.map +1 -0
  276. package/dist/components/pro/Sprite/Molly/rig.d.ts +25 -0
  277. package/dist/components/pro/Sprite/Molly/rig.js +102 -0
  278. package/dist/components/pro/Sprite/Molly/rig.js.map +1 -0
  279. package/dist/components/pro/Sprite/Ruby/animations.d.ts +6 -0
  280. package/dist/components/pro/Sprite/Ruby/animations.js +58 -0
  281. package/dist/components/pro/Sprite/Ruby/animations.js.map +1 -0
  282. package/dist/components/pro/Sprite/Ruby/events.d.ts +2 -0
  283. package/dist/components/pro/Sprite/Ruby/events.js +46 -0
  284. package/dist/components/pro/Sprite/Ruby/events.js.map +1 -0
  285. package/dist/components/pro/Sprite/Ruby/index.d.ts +1 -0
  286. package/dist/components/pro/Sprite/Ruby/index.js +12 -0
  287. package/dist/components/pro/Sprite/Ruby/index.js.map +1 -0
  288. package/dist/components/pro/Sprite/Ruby/locomotion.d.ts +4 -0
  289. package/dist/components/pro/Sprite/Ruby/locomotion.js +41 -0
  290. package/dist/components/pro/Sprite/Ruby/locomotion.js.map +1 -0
  291. package/dist/components/pro/Sprite/Ruby/model.d.ts +23 -0
  292. package/dist/components/pro/Sprite/Ruby/model.js +605 -0
  293. package/dist/components/pro/Sprite/Ruby/model.js.map +1 -0
  294. package/dist/components/pro/Sprite/Ruby/rig.d.ts +26 -0
  295. package/dist/components/pro/Sprite/Ruby/rig.js +112 -0
  296. package/dist/components/pro/Sprite/Ruby/rig.js.map +1 -0
  297. package/dist/components/pro/Sprite/Sprite.d.ts +23 -0
  298. package/dist/components/pro/Sprite/Sprite2.js +224 -0
  299. package/dist/components/pro/Sprite/Sprite2.js.map +1 -0
  300. package/dist/components/pro/Sprite/actions.d.ts +3 -0
  301. package/dist/components/pro/Sprite/actions.js +16 -0
  302. package/dist/components/pro/Sprite/actions.js.map +1 -0
  303. package/dist/components/pro/Sprite/createSpriteScene.d.ts +4 -0
  304. package/dist/components/pro/Sprite/createSpriteScene.js +14 -0
  305. package/dist/components/pro/Sprite/createSpriteScene.js.map +1 -0
  306. package/dist/components/pro/Sprite/index.d.ts +4 -0
  307. package/dist/components/pro/Sprite/shared/animation.d.ts +33 -0
  308. package/dist/components/pro/Sprite/shared/animation.js +39 -0
  309. package/dist/components/pro/Sprite/shared/animation.js.map +1 -0
  310. package/dist/components/pro/Sprite/shared/createSpriteStage.d.ts +14 -0
  311. package/dist/components/pro/Sprite/shared/createSpriteStage.js +127 -0
  312. package/dist/components/pro/Sprite/shared/createSpriteStage.js.map +1 -0
  313. package/dist/components/pro/Sprite/shared/events.d.ts +5 -0
  314. package/dist/components/pro/Sprite/shared/events.js +21 -0
  315. package/dist/components/pro/Sprite/shared/events.js.map +1 -0
  316. package/dist/components/pro/Sprite/shared/face.d.ts +15 -0
  317. package/dist/components/pro/Sprite/shared/face.js +33 -0
  318. package/dist/components/pro/Sprite/shared/face.js.map +1 -0
  319. package/dist/components/pro/Sprite/shared/faceSurface.d.ts +6 -0
  320. package/dist/components/pro/Sprite/shared/faceSurface.js +66 -0
  321. package/dist/components/pro/Sprite/shared/faceSurface.js.map +1 -0
  322. package/dist/components/pro/Sprite/shared/gait.d.ts +5 -0
  323. package/dist/components/pro/Sprite/shared/gait.js +19 -0
  324. package/dist/components/pro/Sprite/shared/gait.js.map +1 -0
  325. package/dist/components/pro/Sprite/shared/geometry.d.ts +8 -0
  326. package/dist/components/pro/Sprite/shared/geometry.js +59 -0
  327. package/dist/components/pro/Sprite/shared/geometry.js.map +1 -0
  328. package/dist/components/pro/Sprite/shared/magicEffect.d.ts +27 -0
  329. package/dist/components/pro/Sprite/shared/magicEffect.js +61 -0
  330. package/dist/components/pro/Sprite/shared/magicEffect.js.map +1 -0
  331. package/dist/components/pro/Sprite/shared/playback.d.ts +8 -0
  332. package/dist/components/pro/Sprite/shared/playback.js +74 -0
  333. package/dist/components/pro/Sprite/shared/playback.js.map +1 -0
  334. package/dist/components/pro/Sprite/shared/rig.d.ts +6 -0
  335. package/dist/components/pro/Sprite/shared/rig.js +48 -0
  336. package/dist/components/pro/Sprite/shared/rig.js.map +1 -0
  337. package/dist/components/pro/Sprite/shared/scene.d.ts +9 -0
  338. package/dist/components/pro/Sprite/shared/scene.js +21 -0
  339. package/dist/components/pro/Sprite/shared/scene.js.map +1 -0
  340. package/dist/components/pro/Sprite/shared/sculptor.d.ts +14 -0
  341. package/dist/components/pro/Sprite/shared/sculptor.js +78 -0
  342. package/dist/components/pro/Sprite/shared/sculptor.js.map +1 -0
  343. package/dist/components/pro/Sprite/shared/speechBubble.d.ts +15 -0
  344. package/dist/components/pro/Sprite/shared/speechBubble.js +129 -0
  345. package/dist/components/pro/Sprite/shared/speechBubble.js.map +1 -0
  346. package/dist/components/pro/Sprite/types.d.ts +40 -0
  347. package/dist/contexts/AppContext.js.map +1 -1
  348. package/dist/contexts/authentication.js.map +1 -1
  349. package/dist/data-table.js +3 -3
  350. package/dist/data-table.js.map +1 -1
  351. package/dist/dishui.css +1 -1
  352. package/dist/hooks/useClickOutside.js.map +1 -1
  353. package/dist/hooks/useContainerElement.js.map +1 -1
  354. package/dist/hooks/useControllableState.js.map +1 -1
  355. package/dist/hooks/useCopyToClipboard.js.map +1 -1
  356. package/dist/hooks/useDebounce.js.map +1 -1
  357. package/dist/hooks/useDraggable.js.map +1 -1
  358. package/dist/hooks/useTableColumns.js.map +1 -1
  359. package/dist/hooks/useTableData.js.map +1 -1
  360. package/dist/index-nostyled.d.ts +2 -0
  361. package/dist/index.d.ts +2 -0
  362. package/dist/index.js +116 -115
  363. package/dist/layouts/MainLayout.js.map +1 -1
  364. package/dist/layouts/Navbar.js.map +1 -1
  365. package/dist/layouts/Sidebar.js.map +1 -1
  366. package/dist/layouts/headbar/Headbar.js.map +1 -1
  367. package/dist/layouts/headbar/HeadbarLangSwitcher.js.map +1 -1
  368. package/dist/layouts/headbar/HeadbarSearch.js.map +1 -1
  369. package/dist/layouts/headbar/HeadbarThemeSwitcher.js.map +1 -1
  370. package/dist/layouts/headbar/HeadbarTitle.js.map +1 -1
  371. package/dist/sprite.js +2 -0
  372. package/dist/styles/themeStyles.js.map +1 -1
  373. package/dist/utils/cn.js.map +1 -1
  374. package/dist/utils/flexLayout.js.map +1 -1
  375. package/dist/utils/i18n.js.map +1 -1
  376. package/dist/utils/menu.js.map +1 -1
  377. package/dist/utils/rehype-code-meta.js.map +1 -1
  378. package/dist/utils/remark-code-meta.js.map +1 -1
  379. package/dist/utils/routerBuilder.js.map +1 -1
  380. package/dist/utils/safeStorage.js.map +1 -1
  381. package/dist/utils/selection.js +29 -20
  382. package/dist/utils/selection.js.map +1 -1
  383. package/dist/utils/themes.js.map +1 -1
  384. package/package.json +15 -11
@@ -1 +1 @@
1
- {"version":3,"file":"TableOpsMenu.js","names":[],"sources":["../../../../../src/components/pro/RichTextEditor/Toolbar/TableOpsMenu.tsx"],"sourcesContent":["import React, { useState, useRef, useEffect } from 'react';\nimport type { Editor } from '@tiptap/react';\nimport type { RichTextEditorLabels } from '../types';\nimport { useAnchoredDropdown } from './useAnchoredDropdown';\n\ninterface TableOpsMenuProps {\n editor: Editor;\n labels: RichTextEditorLabels;\n}\n\nexport const TableOpsMenu: React.FC<TableOpsMenuProps> = ({ editor, labels }) => {\n const [isOpen, setIsOpen] = useState(false);\n const ref = useRef<HTMLDivElement>(null);\n const triggerRef = useRef<HTMLButtonElement>(null);\n const dropdownRef = useRef<HTMLDivElement>(null);\n const dropdownStyle = useAnchoredDropdown(isOpen, triggerRef, dropdownRef);\n\n useEffect(() => {\n const handler = (e: MouseEvent) => {\n if (ref.current && !ref.current.contains(e.target as Node)) {\n setIsOpen(false);\n }\n };\n document.addEventListener('mousedown', handler);\n return () => document.removeEventListener('mousedown', handler);\n }, []);\n\n const isInTable = editor.isActive('table');\n\n const actions: { label: string; action: () => void; icon: string }[] = [\n { label: labels.tableAddColumnBefore || 'Add Column Before', action: () => editor.chain().focus().addColumnBefore().run(), icon: '⇤+' },\n { label: labels.tableAddColumnAfter || 'Add Column After', action: () => editor.chain().focus().addColumnAfter().run(), icon: '+⇥' },\n { label: labels.tableDeleteColumn || 'Delete Column', action: () => editor.chain().focus().deleteColumn().run(), icon: '−⫼' },\n { label: labels.tableAddRowBefore || 'Add Row Before', action: () => editor.chain().focus().addRowBefore().run(), icon: '↑+' },\n { label: labels.tableAddRowAfter || 'Add Row After', action: () => editor.chain().focus().addRowAfter().run(), icon: '+↓' },\n { label: labels.tableDeleteRow || 'Delete Row', action: () => editor.chain().focus().deleteRow().run(), icon: '−═' },\n { label: labels.tableMergeCells || 'Merge Cells', action: () => editor.chain().focus().mergeCells().run(), icon: '⊞' },\n { label: labels.tableSplitCell || 'Split Cell', action: () => editor.chain().focus().splitCell().run(), icon: '⊟' },\n { label: labels.tableDelete || 'Delete Table', action: () => editor.chain().focus().deleteTable().run(), icon: '🗑' },\n ];\n\n return (\n <div ref={ref} className=\"rte-toolbar__template-menu\">\n <button\n type=\"button\"\n ref={triggerRef}\n className={`rte-toolbar__btn ${isOpen ? 'rte-toolbar__btn--active' : ''}`}\n onClick={() => setIsOpen(!isOpen)}\n disabled={!isInTable}\n title={labels.tableOps || 'Table Operations'}\n style={{ width: 'auto', padding: '0 6px', gap: '2px', display: 'inline-flex', alignItems: 'center', opacity: isInTable ? 1 : 0.4 }}\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" />\n <line x1=\"3\" y1=\"9\" x2=\"21\" y2=\"9\" /><line x1=\"3\" y1=\"15\" x2=\"21\" y2=\"15\" />\n <line x1=\"9\" y1=\"3\" x2=\"9\" y2=\"21\" /><line x1=\"15\" y1=\"3\" x2=\"15\" y2=\"21\" />\n </svg>\n <svg width=\"10\" height=\"10\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\">\n <polyline points=\"6 9 12 15 18 9\" />\n </svg>\n </button>\n {isOpen && isInTable && (\n <div ref={dropdownRef} className=\"rte-toolbar__template-dropdown\" style={dropdownStyle}>\n <div className=\"rte-toolbar__template-group-label\">Columns</div>\n {actions.slice(0, 3).map((a, i) => (\n <button key={i} type=\"button\" className=\"rte-toolbar__template-item\" onClick={() => { a.action(); setIsOpen(false); }}>\n <span className=\"rte-toolbar__template-icon\">{a.icon}</span>\n <span>{a.label}</span>\n </button>\n ))}\n <div className=\"rte-toolbar__template-group-label\">Rows</div>\n {actions.slice(3, 6).map((a, i) => (\n <button key={i} type=\"button\" className=\"rte-toolbar__template-item\" onClick={() => { a.action(); setIsOpen(false); }}>\n <span className=\"rte-toolbar__template-icon\">{a.icon}</span>\n <span>{a.label}</span>\n </button>\n ))}\n <div className=\"rte-toolbar__template-group-label\">Merge / Split</div>\n {actions.slice(6, 8).map((a, i) => (\n <button key={i} type=\"button\" className=\"rte-toolbar__template-item\" onClick={() => { a.action(); setIsOpen(false); }}>\n <span className=\"rte-toolbar__template-icon\">{a.icon}</span>\n <span>{a.label}</span>\n </button>\n ))}\n <div className=\"rte-toolbar__template-group-label\">Table</div>\n {actions.slice(8).map((a, i) => (\n <button key={i} type=\"button\" className=\"rte-toolbar__template-item rte-toolbar__template-item--danger\" onClick={() => { a.action(); setIsOpen(false); }}>\n <span className=\"rte-toolbar__template-icon\">{a.icon}</span>\n <span>{a.label}</span>\n </button>\n ))}\n </div>\n )}\n </div>\n );\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"TableOpsMenu.js","names":["TableOpsMenu","isOpen","setIsOpen","useState","ref","useRef","triggerRef","dropdownRef","dropdownStyle","useAnchoredDropdown","handler","isInTable","editor","actions","labels","a","i"],"sources":["../../../../../src/components/pro/RichTextEditor/Toolbar/TableOpsMenu.tsx"],"sourcesContent":["import React, { useState, useRef, useEffect } from 'react';\nimport type { Editor } from '@tiptap/react';\nimport type { RichTextEditorLabels } from '../types';\nimport { useAnchoredDropdown } from './useAnchoredDropdown';\n\ninterface TableOpsMenuProps {\n editor: Editor;\n labels: RichTextEditorLabels;\n}\n\nexport const TableOpsMenu: React.FC<TableOpsMenuProps> = ({ editor, labels }) => {\n const [isOpen, setIsOpen] = useState(false);\n const ref = useRef<HTMLDivElement>(null);\n const triggerRef = useRef<HTMLButtonElement>(null);\n const dropdownRef = useRef<HTMLDivElement>(null);\n const dropdownStyle = useAnchoredDropdown(isOpen, triggerRef, dropdownRef);\n\n useEffect(() => {\n const handler = (e: MouseEvent) => {\n if (ref.current && !ref.current.contains(e.target as Node)) {\n setIsOpen(false);\n }\n };\n document.addEventListener('mousedown', handler);\n return () => document.removeEventListener('mousedown', handler);\n }, []);\n\n const isInTable = editor.isActive('table');\n\n const actions: { label: string; action: () => void; icon: string }[] = [\n { label: labels.tableAddColumnBefore || 'Add Column Before', action: () => editor.chain().focus().addColumnBefore().run(), icon: '⇤+' },\n { label: labels.tableAddColumnAfter || 'Add Column After', action: () => editor.chain().focus().addColumnAfter().run(), icon: '+⇥' },\n { label: labels.tableDeleteColumn || 'Delete Column', action: () => editor.chain().focus().deleteColumn().run(), icon: '−⫼' },\n { label: labels.tableAddRowBefore || 'Add Row Before', action: () => editor.chain().focus().addRowBefore().run(), icon: '↑+' },\n { label: labels.tableAddRowAfter || 'Add Row After', action: () => editor.chain().focus().addRowAfter().run(), icon: '+↓' },\n { label: labels.tableDeleteRow || 'Delete Row', action: () => editor.chain().focus().deleteRow().run(), icon: '−═' },\n { label: labels.tableMergeCells || 'Merge Cells', action: () => editor.chain().focus().mergeCells().run(), icon: '⊞' },\n { label: labels.tableSplitCell || 'Split Cell', action: () => editor.chain().focus().splitCell().run(), icon: '⊟' },\n { label: labels.tableDelete || 'Delete Table', action: () => editor.chain().focus().deleteTable().run(), icon: '🗑' },\n ];\n\n return (\n <div ref={ref} className=\"rte-toolbar__template-menu\">\n <button\n type=\"button\"\n ref={triggerRef}\n className={`rte-toolbar__btn ${isOpen ? 'rte-toolbar__btn--active' : ''}`}\n onClick={() => setIsOpen(!isOpen)}\n disabled={!isInTable}\n title={labels.tableOps || 'Table Operations'}\n style={{ width: 'auto', padding: '0 6px', gap: '2px', display: 'inline-flex', alignItems: 'center', opacity: isInTable ? 1 : 0.4 }}\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" />\n <line x1=\"3\" y1=\"9\" x2=\"21\" y2=\"9\" /><line x1=\"3\" y1=\"15\" x2=\"21\" y2=\"15\" />\n <line x1=\"9\" y1=\"3\" x2=\"9\" y2=\"21\" /><line x1=\"15\" y1=\"3\" x2=\"15\" y2=\"21\" />\n </svg>\n <svg width=\"10\" height=\"10\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\">\n <polyline points=\"6 9 12 15 18 9\" />\n </svg>\n </button>\n {isOpen && isInTable && (\n <div ref={dropdownRef} className=\"rte-toolbar__template-dropdown\" style={dropdownStyle}>\n <div className=\"rte-toolbar__template-group-label\">Columns</div>\n {actions.slice(0, 3).map((a, i) => (\n <button key={i} type=\"button\" className=\"rte-toolbar__template-item\" onClick={() => { a.action(); setIsOpen(false); }}>\n <span className=\"rte-toolbar__template-icon\">{a.icon}</span>\n <span>{a.label}</span>\n </button>\n ))}\n <div className=\"rte-toolbar__template-group-label\">Rows</div>\n {actions.slice(3, 6).map((a, i) => (\n <button key={i} type=\"button\" className=\"rte-toolbar__template-item\" onClick={() => { a.action(); setIsOpen(false); }}>\n <span className=\"rte-toolbar__template-icon\">{a.icon}</span>\n <span>{a.label}</span>\n </button>\n ))}\n <div className=\"rte-toolbar__template-group-label\">Merge / Split</div>\n {actions.slice(6, 8).map((a, i) => (\n <button key={i} type=\"button\" className=\"rte-toolbar__template-item\" onClick={() => { a.action(); setIsOpen(false); }}>\n <span className=\"rte-toolbar__template-icon\">{a.icon}</span>\n <span>{a.label}</span>\n </button>\n ))}\n <div className=\"rte-toolbar__template-group-label\">Table</div>\n {actions.slice(8).map((a, i) => (\n <button key={i} type=\"button\" className=\"rte-toolbar__template-item rte-toolbar__template-item--danger\" onClick={() => { a.action(); setIsOpen(false); }}>\n <span className=\"rte-toolbar__template-icon\">{a.icon}</span>\n <span>{a.label}</span>\n </button>\n ))}\n </div>\n )}\n </div>\n );\n};\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"Toolbar.js","names":[],"sources":["../../../../../src/components/pro/RichTextEditor/Toolbar/Toolbar.tsx"],"sourcesContent":["import React, { useCallback, useState, useEffect, useRef } from 'react';\nimport { useEditorState, type Editor } from '@tiptap/react';\nimport type { Mark } from '@tiptap/pm/model';\nimport type { ToolbarButtonConfig, ToolbarSection, RichTextEditorLabels } from '../types';\nimport { defaultLabels } from '../types';\nimport { getNextFloatZIndex } from '../extensions/FloatingDialog';\nimport { ToolbarButton, ToolbarDivider } from './ToolbarButton';\nimport { ColorPicker } from './ColorPicker';\nimport { SelectDropdown, FONT_FAMILIES, FONT_SIZES } from './SelectDropdown';\nimport { MarkdownTemplateMenu } from './MarkdownTemplates';\nimport { FloatingDialogMenu } from './FloatingDialogMenu';\nimport { TableOpsMenu } from './TableOpsMenu';\n\n// Only visual formatting belongs to the painter, never links or comment IDs.\nconst PAINT_MARKS = new Set(['bold', 'italic', 'underline', 'strike', 'code', 'subscript', 'superscript', 'textStyle', 'highlight']);\n\ninterface ToolbarProps {\n editor: Editor;\n config?: ToolbarSection;\n labels?: RichTextEditorLabels;\n hasAI?: boolean;\n onAIClick?: () => void;\n onRequestAIConfig?: () => void;\n onFormatPainterChange?: (active: boolean) => void;\n children?: React.ReactNode;\n}\n\nconst Toolbar: React.FC<ToolbarProps> = ({\n editor,\n config,\n labels: propsLabels,\n hasAI,\n onAIClick,\n onRequestAIConfig,\n onFormatPainterChange,\n children,\n}) => {\n const labels = { ...defaultLabels, ...propsLabels };\n useEditorState({ editor, selector: ({ transactionNumber }) => transactionNumber });\n const [formatPainterMarks, setFormatPainterMarks] = useState<readonly Mark[] | null>(null);\n const painterChange = useRef(onFormatPainterChange);\n useEffect(() => {\n painterChange.current = onFormatPainterChange;\n }, [onFormatPainterChange]);\n\n const cfg = {\n textFormat: config?.textFormat ?? true,\n heading: config?.heading ?? true,\n alignment: config?.alignment ?? true,\n list: config?.list ?? true,\n insert: config?.insert ?? true,\n color: config?.color ?? true,\n history: config?.history ?? true,\n ai: config?.ai ?? true,\n tableOps: config?.tableOps ?? true,\n fontStyle: config?.fontStyle ?? true,\n formatPainter: config?.formatPainter ?? true,\n };\n const buttons: ToolbarButtonConfig = config?.buttons ?? {};\n const show = (button: keyof ToolbarButtonConfig, section = true) => buttons[button] ?? section;\n\n const setLink = useCallback(() => {\n const previousUrl = editor.getAttributes('link').href;\n const url = window.prompt(labels.insertLinkUrl, previousUrl);\n if (url === null) return;\n if (editor.isDestroyed || !editor.isEditable) return;\n if (url.trim() === '') {\n editor.chain().focus().extendMarkRange('link').unsetLink().run();\n return;\n }\n editor.chain().focus().extendMarkRange('link').setLink({ href: url.trim() }).run();\n }, [editor, labels.insertLinkUrl]);\n\n const addImage = useCallback(() => {\n const url = window.prompt(labels.insertImageUrl);\n if (url) {\n editor.chain().focus().setImage({ src: url }).run();\n }\n }, [editor, labels.insertImageUrl]);\n\n const insertTable = useCallback(() => {\n editor.chain().focus().insertTable({ rows: 3, cols: 3, withHeaderRow: true }).run();\n }, [editor]);\n\n const insertMarkdownBlock = useCallback(() => {\n editor.chain().focus().insertContent({\n type: 'codeBlock',\n attrs: { language: 'r-markdown' },\n content: [{ type: 'text', text: '# Markdown\\n\\nWrite your **markdown** here.' }],\n }).run();\n }, [editor]);\n\n const insertMarkdownTemplate = useCallback((content: string, focusEditor = true) => {\n if (editor.isDestroyed || !editor.isEditable) return;\n const chain = editor.chain();\n if (focusEditor) chain.focus();\n chain.insertContent({\n type: 'codeBlock',\n attrs: { language: 'r-markdown' },\n content: [{ type: 'text', text: content }],\n }).run();\n }, [editor]);\n\n const insertFloatingDialog = useCallback((layout: 'block' | 'wrap-left' | 'wrap-right' | 'float' = 'block', focusEditor = true) => {\n if (editor.isDestroyed || !editor.isEditable) return;\n const extraAttrs = layout === 'float'\n ? { x: 40, y: 40, zIndex: getNextFloatZIndex(editor) }\n : layout === 'block'\n ? {}\n : { width: 240 };\n const chain = editor.chain();\n if (focusEditor) chain.focus();\n chain.insertContent({\n type: 'floatingDialog',\n attrs: { title: 'Note', layout, ...extraAttrs },\n content: [{ type: 'paragraph' }],\n }).run();\n }, [editor]);\n\n const handleFormatPainter = useCallback(() => {\n if (formatPainterMarks) {\n setFormatPainterMarks(null);\n return;\n }\n if (editor.isDestroyed || !editor.isEditable) return;\n const { from, to } = editor.state.selection;\n if (from === to) return;\n\n let marks: readonly Mark[] | undefined;\n editor.state.doc.nodesBetween(from, to, (node) => {\n if (!node.isText) return;\n const formatting = node.marks.filter((mark) => PAINT_MARKS.has(mark.type.name));\n marks = marks === undefined ? formatting : marks.filter((mark) => formatting.some((other) => mark.eq(other)));\n });\n if (marks === undefined) return;\n setFormatPainterMarks(marks);\n }, [editor, formatPainterMarks]);\n\n useEffect(() => {\n if (!formatPainterMarks) return;\n if (editor.isDestroyed || !editor.isEditable || !cfg.formatPainter || !cfg.textFormat) {\n setFormatPainterMarks(null);\n return;\n }\n\n painterChange.current?.(true);\n const editorEl = editor.view.dom;\n let frame: number | null = null;\n let cancelled = false;\n const cancel = () => {\n cancelled = true;\n if (frame !== null) cancelAnimationFrame(frame);\n frame = null;\n setFormatPainterMarks(null);\n };\n const onTransaction = () => {\n if (!editor.isEditable) cancel();\n };\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Escape') cancel();\n };\n\n const applyMarks = () => {\n frame = null;\n if (cancelled || editor.isDestroyed || !editor.isEditable) return;\n const { from, to } = editor.state.selection;\n if (from === to) return;\n\n const { tr } = editor.state;\n for (const name of PAINT_MARKS) {\n const type = editor.schema.marks[name];\n if (type) tr.removeMark(from, to, type);\n }\n editor.state.doc.nodesBetween(from, to, (node, pos) => {\n if (!node.isText) return;\n const semantic = node.marks.filter((mark) => !PAINT_MARKS.has(mark.type.name));\n for (const mark of formatPainterMarks) {\n // Code and custom exclusions must not implicitly remove semantic marks.\n if (semantic.some((other) => mark.type.excludes(other.type) || other.type.excludes(mark.type))) continue;\n tr.addMark(Math.max(from, pos), Math.min(to, pos + node.nodeSize), mark);\n }\n });\n cancelled = true;\n editor.view.dispatch(tr);\n setFormatPainterMarks(null);\n };\n\n const onMouseUp = () => {\n if (cancelled) return;\n if (frame !== null) cancelAnimationFrame(frame);\n frame = requestAnimationFrame(applyMarks);\n };\n\n editorEl.addEventListener('mouseup', onMouseUp);\n editorEl.ownerDocument.addEventListener('keydown', onKeyDown);\n editor.on('transaction', onTransaction);\n editor.on('destroy', cancel);\n return () => {\n cancelled = true;\n if (frame !== null) cancelAnimationFrame(frame);\n editorEl.removeEventListener('mouseup', onMouseUp);\n editorEl.ownerDocument.removeEventListener('keydown', onKeyDown);\n editor.off('transaction', onTransaction);\n editor.off('destroy', cancel);\n painterChange.current?.(false);\n };\n }, [editor, formatPainterMarks, cfg.formatPainter, cfg.textFormat]);\n\n const currentFontFamily = editor.getAttributes('textStyle').fontFamily || '';\n const currentFontSize = editor.getAttributes('textStyle').fontSize || '';\n\n return (\n <div className=\"rte-toolbar\" role=\"group\" aria-label=\"Text formatting\">\n {(show('undo', cfg.history) || show('redo', cfg.history)) && (\n <>\n {show('undo', cfg.history) && <ToolbarButton\n onClick={() => editor.chain().focus().undo().run()}\n disabled={!editor.can().undo()}\n title={labels.undo}\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <polyline points=\"1 4 1 10 7 10\" />\n <path d=\"M3.51 15a9 9 0 102.13-9.36L1 10\" />\n </svg>\n </ToolbarButton>}\n {show('redo', cfg.history) && <ToolbarButton\n onClick={() => editor.chain().focus().redo().run()}\n disabled={!editor.can().redo()}\n title={labels.redo}\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <polyline points=\"23 4 23 10 17 10\" />\n <path d=\"M20.49 15a9 9 0 11-2.13-9.36L23 10\" />\n </svg>\n </ToolbarButton>}\n <ToolbarDivider />\n </>\n )}\n\n {(show('fontFamily', cfg.fontStyle) || show('fontSize', cfg.fontStyle)) && (\n <>\n {show('fontFamily', cfg.fontStyle) && <SelectDropdown\n value={currentFontFamily}\n options={FONT_FAMILIES}\n onChange={(val) => {\n if (val) {\n editor.chain().focus().setFontFamily(val).run();\n } else {\n editor.chain().focus().unsetFontFamily().run();\n }\n }}\n title={labels.fontFamily}\n width={120}\n />}\n {show('fontSize', cfg.fontStyle) && <SelectDropdown\n value={currentFontSize}\n options={FONT_SIZES}\n onChange={(val) => {\n if (val) {\n (editor.chain().focus() as any).setFontSize(val).run();\n } else {\n (editor.chain().focus() as any).unsetFontSize().run();\n }\n }}\n title={labels.fontSize}\n width={80}\n />}\n <ToolbarDivider />\n </>\n )}\n\n {(['bold', 'italic', 'underline', 'strikethrough', 'subscript', 'superscript', 'formatPainter'] as const).some((button) => show(button, button === 'formatPainter' ? cfg.formatPainter : cfg.textFormat)) && (\n <>\n {show('bold', cfg.textFormat) && <ToolbarButton\n onClick={() => editor.chain().focus().toggleBold().run()}\n isActive={editor.isActive('bold')}\n title={labels.bold}\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M6 4h8a4 4 0 014 4 4 4 0 01-4 4H6z\" />\n <path d=\"M6 12h9a4 4 0 014 4 4 4 0 01-4 4H6z\" />\n </svg>\n </ToolbarButton>}\n {show('italic', cfg.textFormat) && <ToolbarButton\n onClick={() => editor.chain().focus().toggleItalic().run()}\n isActive={editor.isActive('italic')}\n title={labels.italic}\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <line x1=\"19\" y1=\"4\" x2=\"10\" y2=\"4\" />\n <line x1=\"14\" y1=\"20\" x2=\"5\" y2=\"20\" />\n <line x1=\"15\" y1=\"4\" x2=\"9\" y2=\"20\" />\n </svg>\n </ToolbarButton>}\n {show('underline', cfg.textFormat) && <ToolbarButton\n onClick={() => editor.chain().focus().toggleUnderline().run()}\n isActive={editor.isActive('underline')}\n title={labels.underline}\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M6 3v7a6 6 0 006 6 6 6 0 006-6V3\" />\n <line x1=\"4\" y1=\"21\" x2=\"20\" y2=\"21\" />\n </svg>\n </ToolbarButton>}\n {show('strikethrough', cfg.textFormat) && <ToolbarButton\n onClick={() => editor.chain().focus().toggleStrike().run()}\n isActive={editor.isActive('strike')}\n title={labels.strikethrough}\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M17.3 4.9c-2.3-.6-4.4-1-6.2-.9-2.7 0-5.3.7-5.3 3.6 0 1.5 1.8 3.3 7.2 3.3\" />\n <path d=\"M13 15.1c0 2.8-2.6 3.6-5.3 3.6-1.8-.1-3.9-.5-6.2-.9\" />\n <line x1=\"4\" y1=\"12\" x2=\"20\" y2=\"12\" />\n </svg>\n </ToolbarButton>}\n {show('subscript', cfg.textFormat) && <ToolbarButton\n onClick={() => editor.chain().focus().toggleSubscript().run()}\n isActive={editor.isActive('subscript')}\n title={labels.subscript}\n >\n <span style={{ fontSize: '13px', fontWeight: 600 }}>X<sub style={{ fontSize: '9px' }}>2</sub></span>\n </ToolbarButton>}\n {show('superscript', cfg.textFormat) && <ToolbarButton\n onClick={() => editor.chain().focus().toggleSuperscript().run()}\n isActive={editor.isActive('superscript')}\n title={labels.superscript}\n >\n <span style={{ fontSize: '13px', fontWeight: 600 }}>X<sup style={{ fontSize: '9px' }}>2</sup></span>\n </ToolbarButton>}\n {show('formatPainter', cfg.formatPainter) && (\n <ToolbarButton\n onClick={handleFormatPainter}\n disabled={!editor.isEditable || (!formatPainterMarks && editor.state.selection.empty)}\n isActive={!!formatPainterMarks}\n title={formatPainterMarks ? labels.formatPainterActive : labels.formatPainter}\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M19 3H5a2 2 0 00-2 2v2a2 2 0 002 2h14a2 2 0 002-2V5a2 2 0 00-2-2z\" />\n <path d=\"M10 7v4a2 2 0 01-2 2H7\" />\n <path d=\"M7 13l-3 8\" />\n <path d=\"M4 21h6\" />\n </svg>\n </ToolbarButton>\n )}\n <ToolbarDivider />\n </>\n )}\n\n {([1, 2, 3, 4, 5, 6] as const).some((level) => show(`heading${level}` as keyof ToolbarButtonConfig, cfg.heading)) && (\n <>\n {([1, 2, 3, 4, 5, 6] as const).filter((level) => show(`heading${level}` as keyof ToolbarButtonConfig, cfg.heading)).map((level) => (\n <ToolbarButton\n key={level}\n onClick={() => editor.chain().focus().toggleHeading({ level }).run()}\n isActive={editor.isActive('heading', { level })}\n title={`${labels.heading} ${level}`}\n >\n <span style={{ fontSize: '12px', fontWeight: 700 }}>H{level}</span>\n </ToolbarButton>\n ))}\n <ToolbarDivider />\n </>\n )}\n\n {(['alignLeft', 'alignCenter', 'alignRight', 'alignJustify'] as const).some((button) => show(button, cfg.alignment)) && (\n <>\n {show('alignLeft', cfg.alignment) && <ToolbarButton\n onClick={() => editor.chain().focus().setTextAlign('left').run()}\n isActive={editor.isActive({ textAlign: 'left' })}\n title={labels.alignLeft}\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <line x1=\"17\" y1=\"10\" x2=\"3\" y2=\"10\" /><line x1=\"21\" y1=\"6\" x2=\"3\" y2=\"6\" />\n <line x1=\"21\" y1=\"14\" x2=\"3\" y2=\"14\" /><line x1=\"17\" y1=\"18\" x2=\"3\" y2=\"18\" />\n </svg>\n </ToolbarButton>}\n {show('alignCenter', cfg.alignment) && <ToolbarButton\n onClick={() => editor.chain().focus().setTextAlign('center').run()}\n isActive={editor.isActive({ textAlign: 'center' })}\n title={labels.alignCenter}\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <line x1=\"18\" y1=\"10\" x2=\"6\" y2=\"10\" /><line x1=\"21\" y1=\"6\" x2=\"3\" y2=\"6\" />\n <line x1=\"21\" y1=\"14\" x2=\"3\" y2=\"14\" /><line x1=\"18\" y1=\"18\" x2=\"6\" y2=\"18\" />\n </svg>\n </ToolbarButton>}\n {show('alignRight', cfg.alignment) && <ToolbarButton\n onClick={() => editor.chain().focus().setTextAlign('right').run()}\n isActive={editor.isActive({ textAlign: 'right' })}\n title={labels.alignRight}\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <line x1=\"21\" y1=\"10\" x2=\"7\" y2=\"10\" /><line x1=\"21\" y1=\"6\" x2=\"3\" y2=\"6\" />\n <line x1=\"21\" y1=\"14\" x2=\"3\" y2=\"14\" /><line x1=\"21\" y1=\"18\" x2=\"7\" y2=\"18\" />\n </svg>\n </ToolbarButton>}\n {show('alignJustify', cfg.alignment) && <ToolbarButton\n onClick={() => editor.chain().focus().setTextAlign('justify').run()}\n isActive={editor.isActive({ textAlign: 'justify' })}\n title={labels.alignJustify}\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <line x1=\"21\" y1=\"10\" x2=\"3\" y2=\"10\" /><line x1=\"21\" y1=\"6\" x2=\"3\" y2=\"6\" />\n <line x1=\"21\" y1=\"14\" x2=\"3\" y2=\"14\" /><line x1=\"21\" y1=\"18\" x2=\"3\" y2=\"18\" />\n </svg>\n </ToolbarButton>}\n <ToolbarDivider />\n </>\n )}\n\n {(['bulletList', 'orderedList', 'taskList'] as const).some((button) => show(button, cfg.list)) && (\n <>\n {show('bulletList', cfg.list) && <ToolbarButton\n onClick={() => editor.chain().focus().toggleBulletList().run()}\n isActive={editor.isActive('bulletList')}\n title={labels.bulletList}\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <line x1=\"8\" y1=\"6\" x2=\"21\" y2=\"6\" /><line x1=\"8\" y1=\"12\" x2=\"21\" y2=\"12\" />\n <line x1=\"8\" y1=\"18\" x2=\"21\" y2=\"18\" />\n <circle cx=\"4\" cy=\"6\" r=\"1\" fill=\"currentColor\" /><circle cx=\"4\" cy=\"12\" r=\"1\" fill=\"currentColor\" />\n <circle cx=\"4\" cy=\"18\" r=\"1\" fill=\"currentColor\" />\n </svg>\n </ToolbarButton>}\n {show('orderedList', cfg.list) && <ToolbarButton\n onClick={() => editor.chain().focus().toggleOrderedList().run()}\n isActive={editor.isActive('orderedList')}\n title={labels.orderedList}\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <line x1=\"10\" y1=\"6\" x2=\"21\" y2=\"6\" /><line x1=\"10\" y1=\"12\" x2=\"21\" y2=\"12\" />\n <line x1=\"10\" y1=\"18\" x2=\"21\" y2=\"18\" />\n <text x=\"2\" y=\"8\" fontSize=\"8\" fill=\"currentColor\" stroke=\"none\" fontWeight=\"bold\">1</text>\n <text x=\"2\" y=\"14\" fontSize=\"8\" fill=\"currentColor\" stroke=\"none\" fontWeight=\"bold\">2</text>\n <text x=\"2\" y=\"20\" fontSize=\"8\" fill=\"currentColor\" stroke=\"none\" fontWeight=\"bold\">3</text>\n </svg>\n </ToolbarButton>}\n {show('taskList', cfg.list) && <ToolbarButton\n onClick={() => editor.chain().focus().toggleTaskList().run()}\n isActive={editor.isActive('taskList')}\n title={labels.taskList}\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <rect x=\"3\" y=\"5\" width=\"6\" height=\"6\" rx=\"1\" /><path d=\"M5 8l1.5 1.5L9 6.5\" />\n <line x1=\"12\" y1=\"8\" x2=\"21\" y2=\"8\" />\n <rect x=\"3\" y=\"14\" width=\"6\" height=\"6\" rx=\"1\" />\n <line x1=\"12\" y1=\"17\" x2=\"21\" y2=\"17\" />\n </svg>\n </ToolbarButton>}\n <ToolbarDivider />\n </>\n )}\n\n {(['blockquote', 'codeBlock', 'mermaidBlock', 'link', 'image', 'table', 'tableOps', 'horizontalRule', 'markdownBlock', 'markdownTemplates', 'floatingDialog'] as const).some((button) => show(button, button === 'tableOps' ? cfg.tableOps : cfg.insert)) && (\n <>\n {show('blockquote', cfg.insert) && <ToolbarButton\n onClick={() => editor.chain().focus().toggleBlockquote().run()}\n isActive={editor.isActive('blockquote')}\n title={labels.blockquote}\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M3 21c3 0 7-1 7-8V5c0-1.25-.756-2.017-2-2H4c-1.25 0-2 .75-2 1.972V11c0 1.25.75 2 2 2 1 0 1 0 1 1v1c0 1-1 2-2 2s-1 .008-1 1.031V21z\" />\n <path d=\"M15 21c3 0 7-1 7-8V5c0-1.25-.757-2.017-2-2h-4c-1.25 0-2 .75-2 1.972V11c0 1.25.75 2 2 2h.75c0 2.25.25 4-2.75 4v3z\" />\n </svg>\n </ToolbarButton>}\n {show('codeBlock', cfg.insert) && <ToolbarButton\n onClick={() => editor.chain().focus().toggleNode('codeBlock', 'paragraph').run()}\n isActive={editor.isActive('codeBlock')}\n title={labels.codeBlock}\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <polyline points=\"16 18 22 12 16 6\" /><polyline points=\"8 6 2 12 8 18\" />\n </svg>\n </ToolbarButton>}\n {show('mermaidBlock', cfg.insert) && <ToolbarButton\n onClick={() => {\n editor.chain().focus().insertContent({\n type: 'codeBlock',\n attrs: { language: 'r-mermaid' },\n content: [{ type: 'text', text: 'graph TD\\n A[Start] --> B[End]' }],\n }).run();\n }}\n title={labels.mermaidBlock}\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <circle cx=\"6\" cy=\"6\" r=\"3\" /><circle cx=\"18\" cy=\"6\" r=\"3\" />\n <circle cx=\"12\" cy=\"18\" r=\"3\" />\n <line x1=\"6\" y1=\"9\" x2=\"12\" y2=\"15\" /><line x1=\"18\" y1=\"9\" x2=\"12\" y2=\"15\" />\n </svg>\n </ToolbarButton>}\n {show('link', cfg.insert) && <ToolbarButton onClick={setLink} isActive={editor.isActive('link')} title={labels.link}>\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M10 13a5 5 0 007.54.54l3-3a5 5 0 00-7.07-7.07l-1.72 1.71\" />\n <path d=\"M14 11a5 5 0 00-7.54-.54l-3 3a5 5 0 007.07 7.07l1.71-1.71\" />\n </svg>\n </ToolbarButton>}\n {show('image', cfg.insert) && <ToolbarButton onClick={addImage} title={labels.image}>\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\" />\n <circle cx=\"8.5\" cy=\"8.5\" r=\"1.5\" /><polyline points=\"21 15 16 10 5 21\" />\n </svg>\n </ToolbarButton>}\n {show('table', cfg.insert) && <ToolbarButton onClick={insertTable} title={labels.table}>\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" />\n <line x1=\"3\" y1=\"9\" x2=\"21\" y2=\"9\" /><line x1=\"3\" y1=\"15\" x2=\"21\" y2=\"15\" />\n <line x1=\"9\" y1=\"3\" x2=\"9\" y2=\"21\" /><line x1=\"15\" y1=\"3\" x2=\"15\" y2=\"21\" />\n </svg>\n </ToolbarButton>}\n {show('tableOps', cfg.tableOps) && <TableOpsMenu editor={editor} labels={labels} />}\n {show('horizontalRule', cfg.insert) && <ToolbarButton\n onClick={() => editor.chain().focus().setHorizontalRule().run()}\n title={labels.horizontalRule}\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\">\n <line x1=\"3\" y1=\"12\" x2=\"21\" y2=\"12\" />\n </svg>\n </ToolbarButton>}\n {show('markdownBlock', cfg.insert) && <ToolbarButton onClick={insertMarkdownBlock} title={labels.markdownBlock}>\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M2 3h20v18H2z\" />\n <path d=\"M5 15V9l3 3.5L11 9v6\" />\n <path d=\"M17 9l-2.5 3H17v3\" />\n </svg>\n </ToolbarButton>}\n {show('markdownTemplates', cfg.insert) && <MarkdownTemplateMenu labels={labels} onSelect={insertMarkdownTemplate} />}\n {show('floatingDialog', cfg.insert) && <FloatingDialogMenu labels={labels} onInsert={insertFloatingDialog} />}\n <ToolbarDivider />\n </>\n )}\n\n {(['textColor', 'highlight'] as const).some((button) => show(button, cfg.color)) && (\n <>\n {show('textColor', cfg.color) && <ColorPicker\n value={editor.getAttributes('textStyle').color || ''}\n onChange={(color) => {\n if (color) {\n editor.chain().focus().setColor(color).run();\n } else {\n editor.chain().focus().unsetColor().run();\n }\n }}\n title={labels.color}\n kind=\"text\"\n />}\n {show('highlight', cfg.color) && <ColorPicker\n value={editor.getAttributes('highlight').color || ''}\n onChange={(color) => {\n if (color) {\n editor.chain().focus().toggleHighlight({ color }).run();\n } else {\n editor.chain().focus().unsetHighlight().run();\n }\n }}\n title={labels.highlight}\n kind=\"highlight\"\n />}\n <ToolbarDivider />\n </>\n )}\n\n {show('ai', cfg.ai) && onAIClick && (\n <ToolbarButton\n onClick={hasAI ? onAIClick : (onRequestAIConfig || (() => {}))}\n disabled={!hasAI && !onRequestAIConfig}\n title={hasAI ? labels.ai : (onRequestAIConfig ? labels.aiConfigure : labels.aiNotConfigured)}\n className={`rte-toolbar__ai-btn ${!hasAI ? 'rte-toolbar__ai-btn--unconfigured' : ''}`}\n >\n <svg className=\"rte-toolbar__ai-icon\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M12 2.75l1.14 4.11a5.5 5.5 0 003.82 3.82L21.25 12l-4.29 1.32a5.5 5.5 0 00-3.82 3.82L12 21.25l-1.14-4.11a5.5 5.5 0 00-3.82-3.82L2.75 12l4.29-1.32a5.5 5.5 0 003.82-3.82L12 2.75z\" fill=\"currentColor\" />\n <path d=\"M19 2.75l.42 1.52a2 2 0 001.31 1.31l1.52.42-1.52.42a2 2 0 00-1.31 1.31L19 9.25l-.42-1.52a2 2 0 00-1.31-1.31L15.75 6l1.52-.42a2 2 0 001.31-1.31L19 2.75z\" fill=\"currentColor\" opacity=\".68\" />\n </svg>\n <span className=\"rte-toolbar__ai-label\">AI</span>\n {!hasAI && onRequestAIConfig && <span className=\"rte-toolbar__ai-configure\">{labels.aiConfigure}</span>}\n </ToolbarButton>\n )}\n\n {children}\n </div>\n );\n};\n\nexport default Toolbar;\n"],"mappings":";;;;;;;;;;;;AAcA,IAAM,oBAAc,IAAI,IAAI;CAAC;CAAQ;CAAU;CAAa;CAAU;CAAQ;CAAa;CAAe;CAAa;AAAW,CAAC,GAa7H,KAAmC,EACvC,WACA,WACA,QAAQ,GACR,UACA,cACA,sBACA,0BACA,kBACI;CACJ,IAAM,IAAS;EAAE,GAAG;EAAe,GAAG;CAAY;CAClD,EAAe;EAAE;EAAQ,WAAW,EAAE,2BAAwB;CAAkB,CAAC;CACjF,IAAM,CAAC,GAAoB,KAAyB,EAAiC,IAAI,GACnF,IAAgB,EAAO,CAAqB;CAClD,QAAgB;EACd,EAAc,UAAU;CAC1B,GAAG,CAAC,CAAqB,CAAC;CAE1B,IAAM,IAAM;EACV,YAAY,GAAQ,cAAc;EAClC,SAAS,GAAQ,WAAW;EAC5B,WAAW,GAAQ,aAAa;EAChC,MAAM,GAAQ,QAAQ;EACtB,QAAQ,GAAQ,UAAU;EAC1B,OAAO,GAAQ,SAAS;EACxB,SAAS,GAAQ,WAAW;EAC5B,IAAI,GAAQ,MAAM;EAClB,UAAU,GAAQ,YAAY;EAC9B,WAAW,GAAQ,aAAa;EAChC,eAAe,GAAQ,iBAAiB;CAC1C,GACM,IAA+B,GAAQ,WAAW,CAAC,GACnD,KAAQ,GAAmC,IAAU,OAAS,EAAQ,MAAW,GAEjF,IAAU,QAAkB;EAChC,IAAM,IAAc,EAAO,cAAc,MAAM,CAAC,CAAC,MAC3C,IAAM,OAAO,OAAO,EAAO,eAAe,CAAW;EACvD,UAAQ,QACR,GAAO,eAAgB,EAAO,YAClC;OAAI,EAAI,KAAK,MAAM,IAAI;IACrB,EAAO,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,gBAAgB,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC,IAAI;IAC/D;GACF;GACA,EAAO,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,gBAAgB,MAAM,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAI,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI;EADjF;CAEF,GAAG,CAAC,GAAQ,EAAO,aAAa,CAAC,GAE3B,IAAW,QAAkB;EACjC,IAAM,IAAM,OAAO,OAAO,EAAO,cAAc;EAC/C,AAAI,KACF,EAAO,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,KAAK,EAAI,CAAC,CAAC,CAAC,IAAI;CAEtD,GAAG,CAAC,GAAQ,EAAO,cAAc,CAAC,GAE5B,IAAc,QAAkB;EACpC,EAAO,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,YAAY;GAAE,MAAM;GAAG,MAAM;GAAG,eAAe;EAAK,CAAC,CAAC,CAAC,IAAI;CACpF,GAAG,CAAC,CAAM,CAAC,GAEL,IAAsB,QAAkB;EAC5C,EAAO,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,cAAc;GACnC,MAAM;GACN,OAAO,EAAE,UAAU,aAAa;GAChC,SAAS,CAAC;IAAE,MAAM;IAAQ,MAAM;GAA8C,CAAC;EACjF,CAAC,CAAC,CAAC,IAAI;CACT,GAAG,CAAC,CAAM,CAAC,GAEL,IAAyB,GAAa,GAAiB,IAAc,OAAS;EAClF,IAAI,EAAO,eAAe,CAAC,EAAO,YAAY;EAC9C,IAAM,IAAQ,EAAO,MAAM;EAE3B,AADI,KAAa,EAAM,MAAM,GAC7B,EAAM,cAAc;GAClB,MAAM;GACN,OAAO,EAAE,UAAU,aAAa;GAChC,SAAS,CAAC;IAAE,MAAM;IAAQ,MAAM;GAAQ,CAAC;EAC3C,CAAC,CAAC,CAAC,IAAI;CACT,GAAG,CAAC,CAAM,CAAC,GAEL,IAAuB,GAAa,IAAyD,SAAS,IAAc,OAAS;EAC/H,IAAI,EAAO,eAAe,CAAC,EAAO,YAAY;EAChD,IAAM,IAAa,MAAW,UAC1B;GAAE,GAAG;GAAI,GAAG;GAAI,QAAQ,EAAmB,CAAM;EAAE,IACnD,MAAW,UACT,CAAC,IACD,EAAE,OAAO,IAAI,GACb,IAAQ,EAAO,MAAM;EAE3B,AADI,KAAa,EAAM,MAAM,GAC7B,EAAM,cAAc;GAClB,MAAM;GACN,OAAO;IAAE,OAAO;IAAQ;IAAQ,GAAG;GAAW;GAC9C,SAAS,CAAC,EAAE,MAAM,YAAY,CAAC;EACjC,CAAC,CAAC,CAAC,IAAI;CACT,GAAG,CAAC,CAAM,CAAC,GAEL,IAAsB,QAAkB;EAC5C,IAAI,GAAoB;GACtB,EAAsB,IAAI;GAC1B;EACF;EACA,IAAI,EAAO,eAAe,CAAC,EAAO,YAAY;EAC9C,IAAM,EAAE,SAAM,UAAO,EAAO,MAAM;EAClC,IAAI,MAAS,GAAI;EAEjB,IAAI;EACJ,EAAO,MAAM,IAAI,aAAa,GAAM,IAAK,MAAS;GAChD,IAAI,CAAC,EAAK,QAAQ;GAClB,IAAM,IAAa,EAAK,MAAM,QAAQ,MAAS,EAAY,IAAI,EAAK,KAAK,IAAI,CAAC;GAC9E,IAAQ,MAAU,KAAA,IAAY,IAAa,EAAM,QAAQ,MAAS,EAAW,MAAM,MAAU,EAAK,GAAG,CAAK,CAAC,CAAC;EAC9G,CAAC,GACG,MAAU,KAAA,KACd,EAAsB,CAAK;CAC7B,GAAG,CAAC,GAAQ,CAAkB,CAAC;CAE/B,QAAgB;EACd,IAAI,CAAC,GAAoB;EACzB,IAAI,EAAO,eAAe,CAAC,EAAO,cAAc,CAAC,EAAI,iBAAiB,CAAC,EAAI,YAAY;GACrF,EAAsB,IAAI;GAC1B;EACF;EAEA,EAAc,UAAU,EAAI;EAC5B,IAAM,IAAW,EAAO,KAAK,KACzB,IAAuB,MACvB,IAAY,IACV,UAAe;GAInB,AAHA,IAAY,IACR,MAAU,QAAM,qBAAqB,CAAK,GAC9C,IAAQ,MACR,EAAsB,IAAI;EAC5B,GACM,UAAsB;GAC1B,AAAK,EAAO,cAAY,EAAO;EACjC,GACM,KAAa,MAAyB;GAC1C,AAAI,EAAM,QAAQ,YAAU,EAAO;EACrC,GAEM,UAAmB;GAEvB,IADA,IAAQ,MACJ,KAAa,EAAO,eAAe,CAAC,EAAO,YAAY;GAC3D,IAAM,EAAE,SAAM,UAAO,EAAO,MAAM;GAClC,IAAI,MAAS,GAAI;GAEjB,IAAM,EAAE,UAAO,EAAO;GACtB,KAAK,IAAM,KAAQ,GAAa;IAC9B,IAAM,IAAO,EAAO,OAAO,MAAM;IACjC,AAAI,KAAM,EAAG,WAAW,GAAM,GAAI,CAAI;GACxC;GAYA,AAXA,EAAO,MAAM,IAAI,aAAa,GAAM,IAAK,GAAM,MAAQ;IACrD,IAAI,CAAC,EAAK,QAAQ;IAClB,IAAM,IAAW,EAAK,MAAM,QAAQ,MAAS,CAAC,EAAY,IAAI,EAAK,KAAK,IAAI,CAAC;IAC7E,KAAK,IAAM,KAAQ,GAEb,EAAS,MAAM,MAAU,EAAK,KAAK,SAAS,EAAM,IAAI,KAAK,EAAM,KAAK,SAAS,EAAK,IAAI,CAAC,KAC7F,EAAG,QAAQ,KAAK,IAAI,GAAM,CAAG,GAAG,KAAK,IAAI,GAAI,IAAM,EAAK,QAAQ,GAAG,CAAI;GAE3E,CAAC,GACD,IAAY,IACZ,EAAO,KAAK,SAAS,CAAE,GACvB,EAAsB,IAAI;EAC5B,GAEM,UAAkB;GAClB,MACA,MAAU,QAAM,qBAAqB,CAAK,GAC9C,IAAQ,sBAAsB,CAAU;EAC1C;EAMA,OAJA,EAAS,iBAAiB,WAAW,CAAS,GAC9C,EAAS,cAAc,iBAAiB,WAAW,CAAS,GAC5D,EAAO,GAAG,eAAe,CAAa,GACtC,EAAO,GAAG,WAAW,CAAM,SACd;GAOX,AANA,IAAY,IACR,MAAU,QAAM,qBAAqB,CAAK,GAC9C,EAAS,oBAAoB,WAAW,CAAS,GACjD,EAAS,cAAc,oBAAoB,WAAW,CAAS,GAC/D,EAAO,IAAI,eAAe,CAAa,GACvC,EAAO,IAAI,WAAW,CAAM,GAC5B,EAAc,UAAU,EAAK;EAC/B;CACF,GAAG;EAAC;EAAQ;EAAoB,EAAI;EAAe,EAAI;CAAU,CAAC;CAElE,IAAM,IAAoB,EAAO,cAAc,WAAW,CAAC,CAAC,cAAc,IACpE,IAAkB,EAAO,cAAc,WAAW,CAAC,CAAC,YAAY;CAEtE,OACE,kBAAC,OAAD;EAAK,WAAU;EAAc,MAAK;EAAQ,cAAW;EAArD,UAAA;IACI,EAAK,QAAQ,EAAI,OAAO,KAAK,EAAK,QAAQ,EAAI,OAAO,MACrD,kBAAA,GAAA,EAAA,UAAA;IACG,EAAK,QAAQ,EAAI,OAAO,KAAK,kBAAC,GAAD;KAC5B,eAAe,EAAO,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI;KACjD,UAAU,CAAC,EAAO,IAAI,CAAC,CAAC,KAAK;KAC7B,OAAO,EAAO;KAEd,UAAA,kBAAC,OAAD;MAAK,OAAM;MAAK,QAAO;MAAK,SAAQ;MAAY,MAAK;MAAO,QAAO;MAAe,aAAY;MAAI,eAAc;MAAQ,gBAAe;MAAvI,UAAA,CACE,kBAAC,YAAD,EAAU,QAAO,gBAAiB,CAAA,GAClC,kBAAC,QAAD,EAAM,GAAE,kCAAmC,CAAA,CACxC;;IACQ,CAAA;IACd,EAAK,QAAQ,EAAI,OAAO,KAAK,kBAAC,GAAD;KAC5B,eAAe,EAAO,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI;KACjD,UAAU,CAAC,EAAO,IAAI,CAAC,CAAC,KAAK;KAC7B,OAAO,EAAO;KAEd,UAAA,kBAAC,OAAD;MAAK,OAAM;MAAK,QAAO;MAAK,SAAQ;MAAY,MAAK;MAAO,QAAO;MAAe,aAAY;MAAI,eAAc;MAAQ,gBAAe;MAAvI,UAAA,CACE,kBAAC,YAAD,EAAU,QAAO,mBAAoB,CAAA,GACrC,kBAAC,QAAD,EAAM,GAAE,qCAAsC,CAAA,CAC3C;;IACQ,CAAA;IACf,kBAAC,GAAD,CAAiB,CAAA;GACjB,EAAA,CAAA;IAGF,EAAK,cAAc,EAAI,SAAS,KAAK,EAAK,YAAY,EAAI,SAAS,MACnE,kBAAA,GAAA,EAAA,UAAA;IACG,EAAK,cAAc,EAAI,SAAS,KAAK,kBAAC,GAAD;KACpC,OAAO;KACP,SAAS;KACT,WAAW,MAAQ;MACjB,AAAI,IACF,EAAO,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,cAAc,CAAG,CAAC,CAAC,IAAI,IAE9C,EAAO,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,gBAAgB,CAAC,CAAC,IAAI;KAEjD;KACA,OAAO,EAAO;KACd,OAAO;IACR,CAAA;IACA,EAAK,YAAY,EAAI,SAAS,KAAK,kBAAC,GAAD;KAClC,OAAO;KACP,SAAS;KACT,WAAW,MAAQ;MACjB,AAAI,IACF,EAAQ,MAAM,CAAC,CAAC,MAAM,CAAC,CAAS,YAAY,CAAG,CAAC,CAAC,IAAI,IAErD,EAAQ,MAAM,CAAC,CAAC,MAAM,CAAC,CAAS,cAAc,CAAC,CAAC,IAAI;KAExD;KACA,OAAO,EAAO;KACd,OAAO;IACR,CAAA;IACD,kBAAC,GAAD,CAAiB,CAAA;GACjB,EAAA,CAAA;GAGF;IAAC;IAAQ;IAAU;IAAa;IAAiB;IAAa;IAAe;GAAe,CAAC,CAAW,MAAM,MAAW,EAAK,GAAQ,MAAW,kBAAkB,EAAI,gBAAgB,EAAI,UAAU,CAAC,KACtM,kBAAA,GAAA,EAAA,UAAA;IACG,EAAK,QAAQ,EAAI,UAAU,KAAK,kBAAC,GAAD;KAC/B,eAAe,EAAO,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,CAAC,IAAI;KACvD,UAAU,EAAO,SAAS,MAAM;KAChC,OAAO,EAAO;KAEd,UAAA,kBAAC,OAAD;MAAK,OAAM;MAAK,QAAO;MAAK,SAAQ;MAAY,MAAK;MAAO,QAAO;MAAe,aAAY;MAAM,eAAc;MAAQ,gBAAe;MAAzI,UAAA,CACE,kBAAC,QAAD,EAAM,GAAE,qCAAsC,CAAA,GAC9C,kBAAC,QAAD,EAAM,GAAE,sCAAuC,CAAA,CAC5C;;IACQ,CAAA;IACd,EAAK,UAAU,EAAI,UAAU,KAAK,kBAAC,GAAD;KACjC,eAAe,EAAO,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,aAAa,CAAC,CAAC,IAAI;KACzD,UAAU,EAAO,SAAS,QAAQ;KAClC,OAAO,EAAO;KAEd,UAAA,kBAAC,OAAD;MAAK,OAAM;MAAK,QAAO;MAAK,SAAQ;MAAY,MAAK;MAAO,QAAO;MAAe,aAAY;MAAI,eAAc;MAAQ,gBAAe;MAAvI,UAAA;OACE,kBAAC,QAAD;QAAM,IAAG;QAAK,IAAG;QAAI,IAAG;QAAK,IAAG;OAAK,CAAA;OACrC,kBAAC,QAAD;QAAM,IAAG;QAAK,IAAG;QAAK,IAAG;QAAI,IAAG;OAAM,CAAA;OACtC,kBAAC,QAAD;QAAM,IAAG;QAAK,IAAG;QAAI,IAAG;QAAI,IAAG;OAAM,CAAA;MAClC;;IACQ,CAAA;IACd,EAAK,aAAa,EAAI,UAAU,KAAK,kBAAC,GAAD;KACpC,eAAe,EAAO,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,gBAAgB,CAAC,CAAC,IAAI;KAC5D,UAAU,EAAO,SAAS,WAAW;KACrC,OAAO,EAAO;KAEd,UAAA,kBAAC,OAAD;MAAK,OAAM;MAAK,QAAO;MAAK,SAAQ;MAAY,MAAK;MAAO,QAAO;MAAe,aAAY;MAAI,eAAc;MAAQ,gBAAe;MAAvI,UAAA,CACE,kBAAC,QAAD,EAAM,GAAE,mCAAoC,CAAA,GAC5C,kBAAC,QAAD;OAAM,IAAG;OAAI,IAAG;OAAK,IAAG;OAAK,IAAG;MAAM,CAAA,CACnC;;IACQ,CAAA;IACd,EAAK,iBAAiB,EAAI,UAAU,KAAK,kBAAC,GAAD;KACxC,eAAe,EAAO,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,aAAa,CAAC,CAAC,IAAI;KACzD,UAAU,EAAO,SAAS,QAAQ;KAClC,OAAO,EAAO;KAEd,UAAA,kBAAC,OAAD;MAAK,OAAM;MAAK,QAAO;MAAK,SAAQ;MAAY,MAAK;MAAO,QAAO;MAAe,aAAY;MAAI,eAAc;MAAQ,gBAAe;MAAvI,UAAA;OACE,kBAAC,QAAD,EAAM,GAAE,2EAA4E,CAAA;OACpF,kBAAC,QAAD,EAAM,GAAE,sDAAuD,CAAA;OAC/D,kBAAC,QAAD;QAAM,IAAG;QAAI,IAAG;QAAK,IAAG;QAAK,IAAG;OAAM,CAAA;MACnC;;IACQ,CAAA;IACd,EAAK,aAAa,EAAI,UAAU,KAAK,kBAAC,GAAD;KACpC,eAAe,EAAO,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,gBAAgB,CAAC,CAAC,IAAI;KAC5D,UAAU,EAAO,SAAS,WAAW;KACrC,OAAO,EAAO;KAEd,UAAA,kBAAC,QAAD;MAAM,OAAO;OAAE,UAAU;OAAQ,YAAY;MAAI;MAAjD,UAAA,CAAoD,KAAC,kBAAC,OAAD;OAAK,OAAO,EAAE,UAAU,MAAM;OAAG,UAAA;MAAM,CAAA,CAAO;;IACtF,CAAA;IACd,EAAK,eAAe,EAAI,UAAU,KAAK,kBAAC,GAAD;KACtC,eAAe,EAAO,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,kBAAkB,CAAC,CAAC,IAAI;KAC9D,UAAU,EAAO,SAAS,aAAa;KACvC,OAAO,EAAO;KAEd,UAAA,kBAAC,QAAD;MAAM,OAAO;OAAE,UAAU;OAAQ,YAAY;MAAI;MAAjD,UAAA,CAAoD,KAAC,kBAAC,OAAD;OAAK,OAAO,EAAE,UAAU,MAAM;OAAG,UAAA;MAAM,CAAA,CAAO;;IACtF,CAAA;IACd,EAAK,iBAAiB,EAAI,aAAa,KACtC,kBAAC,GAAD;KACE,SAAS;KACT,UAAU,CAAC,EAAO,cAAe,CAAC,KAAsB,EAAO,MAAM,UAAU;KAC/E,UAAU,CAAC,CAAC;KACZ,OAAO,IAAqB,EAAO,sBAAsB,EAAO;KAEhE,UAAA,kBAAC,OAAD;MAAK,OAAM;MAAK,QAAO;MAAK,SAAQ;MAAY,MAAK;MAAO,QAAO;MAAe,aAAY;MAAI,eAAc;MAAQ,gBAAe;MAAvI,UAAA;OACE,kBAAC,QAAD,EAAM,GAAE,oEAAqE,CAAA;OAC7E,kBAAC,QAAD,EAAM,GAAE,yBAA0B,CAAA;OAClC,kBAAC,QAAD,EAAM,GAAE,aAAc,CAAA;OACtB,kBAAC,QAAD,EAAM,GAAE,UAAW,CAAA;MAChB;;IACQ,CAAA;IAEjB,kBAAC,GAAD,CAAiB,CAAA;GACjB,EAAA,CAAA;GAGF;IAAC;IAAG;IAAG;IAAG;IAAG;IAAG;GAAC,CAAC,CAAW,MAAM,MAAU,EAAK,UAAU,KAAsC,EAAI,OAAO,CAAC,KAC9G,kBAAA,GAAA,EAAA,UAAA,CACI;IAAC;IAAG;IAAG;IAAG;IAAG;IAAG;GAAC,CAAC,CAAW,QAAQ,MAAU,EAAK,UAAU,KAAsC,EAAI,OAAO,CAAC,CAAC,CAAC,KAAK,MACvH,kBAAC,GAAD;IAEE,eAAe,EAAO,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,cAAc,EAAE,SAAM,CAAC,CAAC,CAAC,IAAI;IACnE,UAAU,EAAO,SAAS,WAAW,EAAE,SAAM,CAAC;IAC9C,OAAO,GAAG,EAAO,QAAQ,GAAG;IAE5B,UAAA,kBAAC,QAAD;KAAM,OAAO;MAAE,UAAU;MAAQ,YAAY;KAAI;KAAjD,UAAA,CAAoD,KAAE,CAAY;;GACrD,GANR,CAMQ,CAChB,GACD,kBAAC,GAAD,CAAiB,CAAA,CACjB,EAAA,CAAA;GAGF;IAAC;IAAa;IAAe;IAAc;GAAc,CAAC,CAAW,MAAM,MAAW,EAAK,GAAQ,EAAI,SAAS,CAAC,KACjH,kBAAA,GAAA,EAAA,UAAA;IACG,EAAK,aAAa,EAAI,SAAS,KAAK,kBAAC,GAAD;KACnC,eAAe,EAAO,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,aAAa,MAAM,CAAC,CAAC,IAAI;KAC/D,UAAU,EAAO,SAAS,EAAE,WAAW,OAAO,CAAC;KAC/C,OAAO,EAAO;KAEd,UAAA,kBAAC,OAAD;MAAK,OAAM;MAAK,QAAO;MAAK,SAAQ;MAAY,MAAK;MAAO,QAAO;MAAe,aAAY;MAAI,eAAc;MAAQ,gBAAe;MAAvI,UAAA;OACE,kBAAC,QAAD;QAAM,IAAG;QAAK,IAAG;QAAK,IAAG;QAAI,IAAG;OAAM,CAAA;OAAC,kBAAC,QAAD;QAAM,IAAG;QAAK,IAAG;QAAI,IAAG;QAAI,IAAG;OAAK,CAAA;OAC3E,kBAAC,QAAD;QAAM,IAAG;QAAK,IAAG;QAAK,IAAG;QAAI,IAAG;OAAM,CAAA;OAAC,kBAAC,QAAD;QAAM,IAAG;QAAK,IAAG;QAAK,IAAG;QAAI,IAAG;OAAM,CAAA;MAC1E;;IACQ,CAAA;IACd,EAAK,eAAe,EAAI,SAAS,KAAK,kBAAC,GAAD;KACrC,eAAe,EAAO,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,aAAa,QAAQ,CAAC,CAAC,IAAI;KACjE,UAAU,EAAO,SAAS,EAAE,WAAW,SAAS,CAAC;KACjD,OAAO,EAAO;KAEd,UAAA,kBAAC,OAAD;MAAK,OAAM;MAAK,QAAO;MAAK,SAAQ;MAAY,MAAK;MAAO,QAAO;MAAe,aAAY;MAAI,eAAc;MAAQ,gBAAe;MAAvI,UAAA;OACE,kBAAC,QAAD;QAAM,IAAG;QAAK,IAAG;QAAK,IAAG;QAAI,IAAG;OAAM,CAAA;OAAC,kBAAC,QAAD;QAAM,IAAG;QAAK,IAAG;QAAI,IAAG;QAAI,IAAG;OAAK,CAAA;OAC3E,kBAAC,QAAD;QAAM,IAAG;QAAK,IAAG;QAAK,IAAG;QAAI,IAAG;OAAM,CAAA;OAAC,kBAAC,QAAD;QAAM,IAAG;QAAK,IAAG;QAAK,IAAG;QAAI,IAAG;OAAM,CAAA;MAC1E;;IACQ,CAAA;IACd,EAAK,cAAc,EAAI,SAAS,KAAK,kBAAC,GAAD;KACpC,eAAe,EAAO,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,aAAa,OAAO,CAAC,CAAC,IAAI;KAChE,UAAU,EAAO,SAAS,EAAE,WAAW,QAAQ,CAAC;KAChD,OAAO,EAAO;KAEd,UAAA,kBAAC,OAAD;MAAK,OAAM;MAAK,QAAO;MAAK,SAAQ;MAAY,MAAK;MAAO,QAAO;MAAe,aAAY;MAAI,eAAc;MAAQ,gBAAe;MAAvI,UAAA;OACE,kBAAC,QAAD;QAAM,IAAG;QAAK,IAAG;QAAK,IAAG;QAAI,IAAG;OAAM,CAAA;OAAC,kBAAC,QAAD;QAAM,IAAG;QAAK,IAAG;QAAI,IAAG;QAAI,IAAG;OAAK,CAAA;OAC3E,kBAAC,QAAD;QAAM,IAAG;QAAK,IAAG;QAAK,IAAG;QAAI,IAAG;OAAM,CAAA;OAAC,kBAAC,QAAD;QAAM,IAAG;QAAK,IAAG;QAAK,IAAG;QAAI,IAAG;OAAM,CAAA;MAC1E;;IACQ,CAAA;IACd,EAAK,gBAAgB,EAAI,SAAS,KAAK,kBAAC,GAAD;KACtC,eAAe,EAAO,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,aAAa,SAAS,CAAC,CAAC,IAAI;KAClE,UAAU,EAAO,SAAS,EAAE,WAAW,UAAU,CAAC;KAClD,OAAO,EAAO;KAEd,UAAA,kBAAC,OAAD;MAAK,OAAM;MAAK,QAAO;MAAK,SAAQ;MAAY,MAAK;MAAO,QAAO;MAAe,aAAY;MAAI,eAAc;MAAQ,gBAAe;MAAvI,UAAA;OACE,kBAAC,QAAD;QAAM,IAAG;QAAK,IAAG;QAAK,IAAG;QAAI,IAAG;OAAM,CAAA;OAAC,kBAAC,QAAD;QAAM,IAAG;QAAK,IAAG;QAAI,IAAG;QAAI,IAAG;OAAK,CAAA;OAC3E,kBAAC,QAAD;QAAM,IAAG;QAAK,IAAG;QAAK,IAAG;QAAI,IAAG;OAAM,CAAA;OAAC,kBAAC,QAAD;QAAM,IAAG;QAAK,IAAG;QAAK,IAAG;QAAI,IAAG;OAAM,CAAA;MAC1E;;IACQ,CAAA;IACf,kBAAC,GAAD,CAAiB,CAAA;GACjB,EAAA,CAAA;GAGF;IAAC;IAAc;IAAe;GAAU,CAAC,CAAW,MAAM,MAAW,EAAK,GAAQ,EAAI,IAAI,CAAC,KAC3F,kBAAA,GAAA,EAAA,UAAA;IACG,EAAK,cAAc,EAAI,IAAI,KAAK,kBAAC,GAAD;KAC/B,eAAe,EAAO,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,iBAAiB,CAAC,CAAC,IAAI;KAC7D,UAAU,EAAO,SAAS,YAAY;KACtC,OAAO,EAAO;KAEd,UAAA,kBAAC,OAAD;MAAK,OAAM;MAAK,QAAO;MAAK,SAAQ;MAAY,MAAK;MAAO,QAAO;MAAe,aAAY;MAAI,eAAc;MAAQ,gBAAe;MAAvI,UAAA;OACE,kBAAC,QAAD;QAAM,IAAG;QAAI,IAAG;QAAI,IAAG;QAAK,IAAG;OAAK,CAAA;OAAC,kBAAC,QAAD;QAAM,IAAG;QAAI,IAAG;QAAK,IAAG;QAAK,IAAG;OAAM,CAAA;OAC3E,kBAAC,QAAD;QAAM,IAAG;QAAI,IAAG;QAAK,IAAG;QAAK,IAAG;OAAM,CAAA;OACtC,kBAAC,UAAD;QAAQ,IAAG;QAAI,IAAG;QAAI,GAAE;QAAI,MAAK;OAAgB,CAAA;OAAC,kBAAC,UAAD;QAAQ,IAAG;QAAI,IAAG;QAAK,GAAE;QAAI,MAAK;OAAgB,CAAA;OACpG,kBAAC,UAAD;QAAQ,IAAG;QAAI,IAAG;QAAK,GAAE;QAAI,MAAK;OAAgB,CAAA;MAC/C;;IACQ,CAAA;IACd,EAAK,eAAe,EAAI,IAAI,KAAK,kBAAC,GAAD;KAChC,eAAe,EAAO,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,kBAAkB,CAAC,CAAC,IAAI;KAC9D,UAAU,EAAO,SAAS,aAAa;KACvC,OAAO,EAAO;KAEd,UAAA,kBAAC,OAAD;MAAK,OAAM;MAAK,QAAO;MAAK,SAAQ;MAAY,MAAK;MAAO,QAAO;MAAe,aAAY;MAAI,eAAc;MAAQ,gBAAe;MAAvI,UAAA;OACE,kBAAC,QAAD;QAAM,IAAG;QAAK,IAAG;QAAI,IAAG;QAAK,IAAG;OAAK,CAAA;OAAC,kBAAC,QAAD;QAAM,IAAG;QAAK,IAAG;QAAK,IAAG;QAAK,IAAG;OAAM,CAAA;OAC7E,kBAAC,QAAD;QAAM,IAAG;QAAK,IAAG;QAAK,IAAG;QAAK,IAAG;OAAM,CAAA;OACvC,kBAAC,QAAD;QAAM,GAAE;QAAI,GAAE;QAAI,UAAS;QAAI,MAAK;QAAe,QAAO;QAAO,YAAW;QAAO,UAAA;OAAO,CAAA;OAC1F,kBAAC,QAAD;QAAM,GAAE;QAAI,GAAE;QAAK,UAAS;QAAI,MAAK;QAAe,QAAO;QAAO,YAAW;QAAO,UAAA;OAAO,CAAA;OAC3F,kBAAC,QAAD;QAAM,GAAE;QAAI,GAAE;QAAK,UAAS;QAAI,MAAK;QAAe,QAAO;QAAO,YAAW;QAAO,UAAA;OAAO,CAAA;MACxF;;IACQ,CAAA;IACd,EAAK,YAAY,EAAI,IAAI,KAAK,kBAAC,GAAD;KAC7B,eAAe,EAAO,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,IAAI;KAC3D,UAAU,EAAO,SAAS,UAAU;KACpC,OAAO,EAAO;KAEd,UAAA,kBAAC,OAAD;MAAK,OAAM;MAAK,QAAO;MAAK,SAAQ;MAAY,MAAK;MAAO,QAAO;MAAe,aAAY;MAAI,eAAc;MAAQ,gBAAe;MAAvI,UAAA;OACE,kBAAC,QAAD;QAAM,GAAE;QAAI,GAAE;QAAI,OAAM;QAAI,QAAO;QAAI,IAAG;OAAK,CAAA;OAAC,kBAAC,QAAD,EAAM,GAAE,qBAAsB,CAAA;OAC9E,kBAAC,QAAD;QAAM,IAAG;QAAK,IAAG;QAAI,IAAG;QAAK,IAAG;OAAK,CAAA;OACrC,kBAAC,QAAD;QAAM,GAAE;QAAI,GAAE;QAAK,OAAM;QAAI,QAAO;QAAI,IAAG;OAAK,CAAA;OAChD,kBAAC,QAAD;QAAM,IAAG;QAAK,IAAG;QAAK,IAAG;QAAK,IAAG;OAAM,CAAA;MACpC;;IACQ,CAAA;IACf,kBAAC,GAAD,CAAiB,CAAA;GACjB,EAAA,CAAA;GAGF;IAAC;IAAc;IAAa;IAAgB;IAAQ;IAAS;IAAS;IAAY;IAAkB;IAAiB;IAAqB;GAAgB,CAAC,CAAW,MAAM,MAAW,EAAK,GAAQ,MAAW,aAAa,EAAI,WAAW,EAAI,MAAM,CAAC,KACtP,kBAAA,GAAA,EAAA,UAAA;IACG,EAAK,cAAc,EAAI,MAAM,KAAK,kBAAC,GAAD;KACjC,eAAe,EAAO,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,iBAAiB,CAAC,CAAC,IAAI;KAC7D,UAAU,EAAO,SAAS,YAAY;KACtC,OAAO,EAAO;KAEd,UAAA,kBAAC,OAAD;MAAK,OAAM;MAAK,QAAO;MAAK,SAAQ;MAAY,MAAK;MAAO,QAAO;MAAe,aAAY;MAAI,eAAc;MAAQ,gBAAe;MAAvI,UAAA,CACE,kBAAC,QAAD,EAAM,GAAE,qIAAsI,CAAA,GAC9I,kBAAC,QAAD,EAAM,GAAE,mHAAoH,CAAA,CACzH;;IACQ,CAAA;IACd,EAAK,aAAa,EAAI,MAAM,KAAK,kBAAC,GAAD;KAChC,eAAe,EAAO,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,WAAW,aAAa,WAAW,CAAC,CAAC,IAAI;KAC/E,UAAU,EAAO,SAAS,WAAW;KACrC,OAAO,EAAO;KAEd,UAAA,kBAAC,OAAD;MAAK,OAAM;MAAK,QAAO;MAAK,SAAQ;MAAY,MAAK;MAAO,QAAO;MAAe,aAAY;MAAI,eAAc;MAAQ,gBAAe;MAAvI,UAAA,CACE,kBAAC,YAAD,EAAU,QAAO,mBAAoB,CAAA,GAAC,kBAAC,YAAD,EAAU,QAAO,gBAAiB,CAAA,CACrE;;IACQ,CAAA;IACd,EAAK,gBAAgB,EAAI,MAAM,KAAK,kBAAC,GAAD;KACnC,eAAe;MACb,EAAO,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,cAAc;OACnC,MAAM;OACN,OAAO,EAAE,UAAU,YAAY;OAC/B,SAAS,CAAC;QAAE,MAAM;QAAQ,MAAM;OAAoC,CAAC;MACvE,CAAC,CAAC,CAAC,IAAI;KACT;KACA,OAAO,EAAO;KAEd,UAAA,kBAAC,OAAD;MAAK,OAAM;MAAK,QAAO;MAAK,SAAQ;MAAY,MAAK;MAAO,QAAO;MAAe,aAAY;MAAI,eAAc;MAAQ,gBAAe;MAAvI,UAAA;OACE,kBAAC,UAAD;QAAQ,IAAG;QAAI,IAAG;QAAI,GAAE;OAAK,CAAA;OAAC,kBAAC,UAAD;QAAQ,IAAG;QAAK,IAAG;QAAI,GAAE;OAAK,CAAA;OAC5D,kBAAC,UAAD;QAAQ,IAAG;QAAK,IAAG;QAAK,GAAE;OAAK,CAAA;OAC/B,kBAAC,QAAD;QAAM,IAAG;QAAI,IAAG;QAAI,IAAG;QAAK,IAAG;OAAM,CAAA;OAAC,kBAAC,QAAD;QAAM,IAAG;QAAK,IAAG;QAAI,IAAG;QAAK,IAAG;OAAM,CAAA;MACzE;;IACQ,CAAA;IACd,EAAK,QAAQ,EAAI,MAAM,KAAK,kBAAC,GAAD;KAAe,SAAS;KAAS,UAAU,EAAO,SAAS,MAAM;KAAG,OAAO,EAAO;KAC7G,UAAA,kBAAC,OAAD;MAAK,OAAM;MAAK,QAAO;MAAK,SAAQ;MAAY,MAAK;MAAO,QAAO;MAAe,aAAY;MAAI,eAAc;MAAQ,gBAAe;MAAvI,UAAA,CACE,kBAAC,QAAD,EAAM,GAAE,2DAA4D,CAAA,GACpE,kBAAC,QAAD,EAAM,GAAE,4DAA6D,CAAA,CAClE;;IACQ,CAAA;IACd,EAAK,SAAS,EAAI,MAAM,KAAK,kBAAC,GAAD;KAAe,SAAS;KAAU,OAAO,EAAO;KAC5E,UAAA,kBAAC,OAAD;MAAK,OAAM;MAAK,QAAO;MAAK,SAAQ;MAAY,MAAK;MAAO,QAAO;MAAe,aAAY;MAAI,eAAc;MAAQ,gBAAe;MAAvI,UAAA;OACE,kBAAC,QAAD;QAAM,GAAE;QAAI,GAAE;QAAI,OAAM;QAAK,QAAO;QAAK,IAAG;QAAI,IAAG;OAAK,CAAA;OACxD,kBAAC,UAAD;QAAQ,IAAG;QAAM,IAAG;QAAM,GAAE;OAAO,CAAA;OAAC,kBAAC,YAAD,EAAU,QAAO,mBAAoB,CAAA;MACtE;;IACQ,CAAA;IACd,EAAK,SAAS,EAAI,MAAM,KAAK,kBAAC,GAAD;KAAe,SAAS;KAAa,OAAO,EAAO;KAC/E,UAAA,kBAAC,OAAD;MAAK,OAAM;MAAK,QAAO;MAAK,SAAQ;MAAY,MAAK;MAAO,QAAO;MAAe,aAAY;MAAI,eAAc;MAAQ,gBAAe;MAAvI,UAAA;OACE,kBAAC,QAAD;QAAM,GAAE;QAAI,GAAE;QAAI,OAAM;QAAK,QAAO;QAAK,IAAG;OAAK,CAAA;OACjD,kBAAC,QAAD;QAAM,IAAG;QAAI,IAAG;QAAI,IAAG;QAAK,IAAG;OAAK,CAAA;OAAC,kBAAC,QAAD;QAAM,IAAG;QAAI,IAAG;QAAK,IAAG;QAAK,IAAG;OAAM,CAAA;OAC3E,kBAAC,QAAD;QAAM,IAAG;QAAI,IAAG;QAAI,IAAG;QAAI,IAAG;OAAM,CAAA;OAAC,kBAAC,QAAD;QAAM,IAAG;QAAK,IAAG;QAAI,IAAG;QAAK,IAAG;OAAM,CAAA;MACxE;;IACQ,CAAA;IACd,EAAK,YAAY,EAAI,QAAQ,KAAK,kBAAC,GAAD;KAAsB;KAAgB;IAAS,CAAA;IACjF,EAAK,kBAAkB,EAAI,MAAM,KAAK,kBAAC,GAAD;KACrC,eAAe,EAAO,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,kBAAkB,CAAC,CAAC,IAAI;KAC9D,OAAO,EAAO;KAEd,UAAA,kBAAC,OAAD;MAAK,OAAM;MAAK,QAAO;MAAK,SAAQ;MAAY,MAAK;MAAO,QAAO;MAAe,aAAY;MAAI,eAAc;MAC9G,UAAA,kBAAC,QAAD;OAAM,IAAG;OAAI,IAAG;OAAK,IAAG;OAAK,IAAG;MAAM,CAAA;KACnC,CAAA;IACQ,CAAA;IACd,EAAK,iBAAiB,EAAI,MAAM,KAAK,kBAAC,GAAD;KAAe,SAAS;KAAqB,OAAO,EAAO;KAC/F,UAAA,kBAAC,OAAD;MAAK,OAAM;MAAK,QAAO;MAAK,SAAQ;MAAY,MAAK;MAAO,QAAO;MAAe,aAAY;MAAI,eAAc;MAAQ,gBAAe;MAAvI,UAAA;OACE,kBAAC,QAAD,EAAM,GAAE,gBAAiB,CAAA;OACzB,kBAAC,QAAD,EAAM,GAAE,uBAAwB,CAAA;OAChC,kBAAC,QAAD,EAAM,GAAE,oBAAqB,CAAA;MAC1B;;IACQ,CAAA;IACd,EAAK,qBAAqB,EAAI,MAAM,KAAK,kBAAC,GAAD;KAA8B;KAAQ,UAAU;IAAyB,CAAA;IAClH,EAAK,kBAAkB,EAAI,MAAM,KAAK,kBAAC,GAAD;KAA4B;KAAQ,UAAU;IAAuB,CAAA;IAC5G,kBAAC,GAAD,CAAiB,CAAA;GACjB,EAAA,CAAA;GAGF,CAAC,aAAa,WAAW,CAAC,CAAW,MAAM,MAAW,EAAK,GAAQ,EAAI,KAAK,CAAC,KAC7E,kBAAA,GAAA,EAAA,UAAA;IACG,EAAK,aAAa,EAAI,KAAK,KAAK,kBAAC,GAAD;KAC/B,OAAO,EAAO,cAAc,WAAW,CAAC,CAAC,SAAS;KAClD,WAAW,MAAU;MACnB,AAAI,IACF,EAAO,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,SAAS,CAAK,CAAC,CAAC,IAAI,IAE3C,EAAO,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,CAAC,IAAI;KAE5C;KACA,OAAO,EAAO;KACd,MAAK;IACN,CAAA;IACA,EAAK,aAAa,EAAI,KAAK,KAAK,kBAAC,GAAD;KAC/B,OAAO,EAAO,cAAc,WAAW,CAAC,CAAC,SAAS;KAClD,WAAW,MAAU;MACnB,AAAI,IACF,EAAO,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,gBAAgB,EAAE,SAAM,CAAC,CAAC,CAAC,IAAI,IAEtD,EAAO,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,IAAI;KAEhD;KACA,OAAO,EAAO;KACd,MAAK;IACN,CAAA;IACD,kBAAC,GAAD,CAAiB,CAAA;GACjB,EAAA,CAAA;GAGH,EAAK,MAAM,EAAI,EAAE,KAAK,KACrB,kBAAC,GAAD;IACE,SAAS,IAAQ,IAAa,YAA4B,CAAC;IAC3D,UAAU,CAAC,KAAS,CAAC;IACrB,OAAO,IAAQ,EAAO,KAAM,IAAoB,EAAO,cAAc,EAAO;IAC5E,WAAW,uBAAwB,IAA8C,KAAtC;IAJ7C,UAAA;KAME,kBAAC,OAAD;MAAK,WAAU;MAAuB,OAAM;MAAK,QAAO;MAAK,SAAQ;MAAY,MAAK;MAAO,eAAY;MAAzG,UAAA,CACE,kBAAC,QAAD;OAAM,GAAE;OAAkL,MAAK;MAAgB,CAAA,GAC/M,kBAAC,QAAD;OAAM,GAAE;OAA0J,MAAK;OAAe,SAAQ;MAAO,CAAA,CAClM;;KACL,kBAAC,QAAD;MAAM,WAAU;MAAwB,UAAA;KAAQ,CAAA;KAC/C,CAAC,KAAS,KAAqB,kBAAC,QAAD;MAAM,WAAU;MAA6B,UAAA,EAAO;KAAkB,CAAA;IACzF;;GAGhB;EACE;;AAET"}
1
+ {"version":3,"file":"Toolbar.js","names":["_Fragment","PAINT_MARKS","Toolbar","propsLabels","labels","defaultLabels","transactionNumber","formatPainterMarks","setFormatPainterMarks","useState","painterChange","useRef","onFormatPainterChange","cfg","config","buttons","show","button","section","setLink","useCallback","previousUrl","editor","url","addImage","insertTable","insertMarkdownBlock","insertMarkdownTemplate","chain","focusEditor","content","insertFloatingDialog","extraAttrs","layout","getNextFloatZIndex","handleFormatPainter","from","to","marks","node","formatting","mark","other","editorEl","frame","cancelled","cancel","onTransaction","onKeyDown","event","applyMarks","name","type","tr","semantic","pos","onMouseUp","currentFontFamily","currentFontSize","Fragment","ToolbarButton","ToolbarDivider","SelectDropdown","FONT_FAMILIES","val","FONT_SIZES","level","TableOpsMenu","MarkdownTemplateMenu","FloatingDialogMenu","ColorPicker","color","onAIClick","hasAI","onRequestAIConfig","children"],"sources":["../../../../../src/components/pro/RichTextEditor/Toolbar/Toolbar.tsx"],"sourcesContent":["import React, { useCallback, useState, useEffect, useRef } from 'react';\nimport { useEditorState, type Editor } from '@tiptap/react';\nimport type { Mark } from '@tiptap/pm/model';\nimport type { ToolbarButtonConfig, ToolbarSection, RichTextEditorLabels } from '../types';\nimport { defaultLabels } from '../types';\nimport { getNextFloatZIndex } from '../extensions/FloatingDialog';\nimport { ToolbarButton, ToolbarDivider } from './ToolbarButton';\nimport { ColorPicker } from './ColorPicker';\nimport { SelectDropdown, FONT_FAMILIES, FONT_SIZES } from './SelectDropdown';\nimport { MarkdownTemplateMenu } from './MarkdownTemplates';\nimport { FloatingDialogMenu } from './FloatingDialogMenu';\nimport { TableOpsMenu } from './TableOpsMenu';\n\n// Only visual formatting belongs to the painter, never links or comment IDs.\nconst PAINT_MARKS = new Set(['bold', 'italic', 'underline', 'strike', 'code', 'subscript', 'superscript', 'textStyle', 'highlight']);\n\ninterface ToolbarProps {\n editor: Editor;\n config?: ToolbarSection;\n labels?: RichTextEditorLabels;\n hasAI?: boolean;\n onAIClick?: () => void;\n onRequestAIConfig?: () => void;\n onFormatPainterChange?: (active: boolean) => void;\n children?: React.ReactNode;\n}\n\nconst Toolbar: React.FC<ToolbarProps> = ({\n editor,\n config,\n labels: propsLabels,\n hasAI,\n onAIClick,\n onRequestAIConfig,\n onFormatPainterChange,\n children,\n}) => {\n const labels = { ...defaultLabels, ...propsLabels };\n useEditorState({ editor, selector: ({ transactionNumber }) => transactionNumber });\n const [formatPainterMarks, setFormatPainterMarks] = useState<readonly Mark[] | null>(null);\n const painterChange = useRef(onFormatPainterChange);\n useEffect(() => {\n painterChange.current = onFormatPainterChange;\n }, [onFormatPainterChange]);\n\n const cfg = {\n textFormat: config?.textFormat ?? true,\n heading: config?.heading ?? true,\n alignment: config?.alignment ?? true,\n list: config?.list ?? true,\n insert: config?.insert ?? true,\n color: config?.color ?? true,\n history: config?.history ?? true,\n ai: config?.ai ?? true,\n tableOps: config?.tableOps ?? true,\n fontStyle: config?.fontStyle ?? true,\n formatPainter: config?.formatPainter ?? true,\n };\n const buttons: ToolbarButtonConfig = config?.buttons ?? {};\n const show = (button: keyof ToolbarButtonConfig, section = true) => buttons[button] ?? section;\n\n const setLink = useCallback(() => {\n const previousUrl = editor.getAttributes('link').href;\n const url = window.prompt(labels.insertLinkUrl, previousUrl);\n if (url === null) return;\n if (editor.isDestroyed || !editor.isEditable) return;\n if (url.trim() === '') {\n editor.chain().focus().extendMarkRange('link').unsetLink().run();\n return;\n }\n editor.chain().focus().extendMarkRange('link').setLink({ href: url.trim() }).run();\n }, [editor, labels.insertLinkUrl]);\n\n const addImage = useCallback(() => {\n const url = window.prompt(labels.insertImageUrl);\n if (url) {\n editor.chain().focus().setImage({ src: url }).run();\n }\n }, [editor, labels.insertImageUrl]);\n\n const insertTable = useCallback(() => {\n editor.chain().focus().insertTable({ rows: 3, cols: 3, withHeaderRow: true }).run();\n }, [editor]);\n\n const insertMarkdownBlock = useCallback(() => {\n editor.chain().focus().insertContent({\n type: 'codeBlock',\n attrs: { language: 'r-markdown' },\n content: [{ type: 'text', text: '# Markdown\\n\\nWrite your **markdown** here.' }],\n }).run();\n }, [editor]);\n\n const insertMarkdownTemplate = useCallback((content: string, focusEditor = true) => {\n if (editor.isDestroyed || !editor.isEditable) return;\n const chain = editor.chain();\n if (focusEditor) chain.focus();\n chain.insertContent({\n type: 'codeBlock',\n attrs: { language: 'r-markdown' },\n content: [{ type: 'text', text: content }],\n }).run();\n }, [editor]);\n\n const insertFloatingDialog = useCallback((layout: 'block' | 'wrap-left' | 'wrap-right' | 'float' = 'block', focusEditor = true) => {\n if (editor.isDestroyed || !editor.isEditable) return;\n const extraAttrs = layout === 'float'\n ? { x: 40, y: 40, zIndex: getNextFloatZIndex(editor) }\n : layout === 'block'\n ? {}\n : { width: 240 };\n const chain = editor.chain();\n if (focusEditor) chain.focus();\n chain.insertContent({\n type: 'floatingDialog',\n attrs: { title: 'Note', layout, ...extraAttrs },\n content: [{ type: 'paragraph' }],\n }).run();\n }, [editor]);\n\n const handleFormatPainter = useCallback(() => {\n if (formatPainterMarks) {\n setFormatPainterMarks(null);\n return;\n }\n if (editor.isDestroyed || !editor.isEditable) return;\n const { from, to } = editor.state.selection;\n if (from === to) return;\n\n let marks: readonly Mark[] | undefined;\n editor.state.doc.nodesBetween(from, to, (node) => {\n if (!node.isText) return;\n const formatting = node.marks.filter((mark) => PAINT_MARKS.has(mark.type.name));\n marks = marks === undefined ? formatting : marks.filter((mark) => formatting.some((other) => mark.eq(other)));\n });\n if (marks === undefined) return;\n setFormatPainterMarks(marks);\n }, [editor, formatPainterMarks]);\n\n useEffect(() => {\n if (!formatPainterMarks) return;\n if (editor.isDestroyed || !editor.isEditable || !cfg.formatPainter || !cfg.textFormat) {\n setFormatPainterMarks(null);\n return;\n }\n\n painterChange.current?.(true);\n const editorEl = editor.view.dom;\n let frame: number | null = null;\n let cancelled = false;\n const cancel = () => {\n cancelled = true;\n if (frame !== null) cancelAnimationFrame(frame);\n frame = null;\n setFormatPainterMarks(null);\n };\n const onTransaction = () => {\n if (!editor.isEditable) cancel();\n };\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Escape') cancel();\n };\n\n const applyMarks = () => {\n frame = null;\n if (cancelled || editor.isDestroyed || !editor.isEditable) return;\n const { from, to } = editor.state.selection;\n if (from === to) return;\n\n const { tr } = editor.state;\n for (const name of PAINT_MARKS) {\n const type = editor.schema.marks[name];\n if (type) tr.removeMark(from, to, type);\n }\n editor.state.doc.nodesBetween(from, to, (node, pos) => {\n if (!node.isText) return;\n const semantic = node.marks.filter((mark) => !PAINT_MARKS.has(mark.type.name));\n for (const mark of formatPainterMarks) {\n // Code and custom exclusions must not implicitly remove semantic marks.\n if (semantic.some((other) => mark.type.excludes(other.type) || other.type.excludes(mark.type))) continue;\n tr.addMark(Math.max(from, pos), Math.min(to, pos + node.nodeSize), mark);\n }\n });\n cancelled = true;\n editor.view.dispatch(tr);\n setFormatPainterMarks(null);\n };\n\n const onMouseUp = () => {\n if (cancelled) return;\n if (frame !== null) cancelAnimationFrame(frame);\n frame = requestAnimationFrame(applyMarks);\n };\n\n editorEl.addEventListener('mouseup', onMouseUp);\n editorEl.ownerDocument.addEventListener('keydown', onKeyDown);\n editor.on('transaction', onTransaction);\n editor.on('destroy', cancel);\n return () => {\n cancelled = true;\n if (frame !== null) cancelAnimationFrame(frame);\n editorEl.removeEventListener('mouseup', onMouseUp);\n editorEl.ownerDocument.removeEventListener('keydown', onKeyDown);\n editor.off('transaction', onTransaction);\n editor.off('destroy', cancel);\n painterChange.current?.(false);\n };\n }, [editor, formatPainterMarks, cfg.formatPainter, cfg.textFormat]);\n\n const currentFontFamily = editor.getAttributes('textStyle').fontFamily || '';\n const currentFontSize = editor.getAttributes('textStyle').fontSize || '';\n\n return (\n <div className=\"rte-toolbar\" role=\"group\" aria-label=\"Text formatting\">\n {(show('undo', cfg.history) || show('redo', cfg.history)) && (\n <>\n {show('undo', cfg.history) && <ToolbarButton\n onClick={() => editor.chain().focus().undo().run()}\n disabled={!editor.can().undo()}\n title={labels.undo}\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <polyline points=\"1 4 1 10 7 10\" />\n <path d=\"M3.51 15a9 9 0 102.13-9.36L1 10\" />\n </svg>\n </ToolbarButton>}\n {show('redo', cfg.history) && <ToolbarButton\n onClick={() => editor.chain().focus().redo().run()}\n disabled={!editor.can().redo()}\n title={labels.redo}\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <polyline points=\"23 4 23 10 17 10\" />\n <path d=\"M20.49 15a9 9 0 11-2.13-9.36L23 10\" />\n </svg>\n </ToolbarButton>}\n <ToolbarDivider />\n </>\n )}\n\n {(show('fontFamily', cfg.fontStyle) || show('fontSize', cfg.fontStyle)) && (\n <>\n {show('fontFamily', cfg.fontStyle) && <SelectDropdown\n value={currentFontFamily}\n options={FONT_FAMILIES}\n onChange={(val) => {\n if (val) {\n editor.chain().focus().setFontFamily(val).run();\n } else {\n editor.chain().focus().unsetFontFamily().run();\n }\n }}\n title={labels.fontFamily}\n width={120}\n />}\n {show('fontSize', cfg.fontStyle) && <SelectDropdown\n value={currentFontSize}\n options={FONT_SIZES}\n onChange={(val) => {\n if (val) {\n (editor.chain().focus() as any).setFontSize(val).run();\n } else {\n (editor.chain().focus() as any).unsetFontSize().run();\n }\n }}\n title={labels.fontSize}\n width={80}\n />}\n <ToolbarDivider />\n </>\n )}\n\n {(['bold', 'italic', 'underline', 'strikethrough', 'subscript', 'superscript', 'formatPainter'] as const).some((button) => show(button, button === 'formatPainter' ? cfg.formatPainter : cfg.textFormat)) && (\n <>\n {show('bold', cfg.textFormat) && <ToolbarButton\n onClick={() => editor.chain().focus().toggleBold().run()}\n isActive={editor.isActive('bold')}\n title={labels.bold}\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M6 4h8a4 4 0 014 4 4 4 0 01-4 4H6z\" />\n <path d=\"M6 12h9a4 4 0 014 4 4 4 0 01-4 4H6z\" />\n </svg>\n </ToolbarButton>}\n {show('italic', cfg.textFormat) && <ToolbarButton\n onClick={() => editor.chain().focus().toggleItalic().run()}\n isActive={editor.isActive('italic')}\n title={labels.italic}\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <line x1=\"19\" y1=\"4\" x2=\"10\" y2=\"4\" />\n <line x1=\"14\" y1=\"20\" x2=\"5\" y2=\"20\" />\n <line x1=\"15\" y1=\"4\" x2=\"9\" y2=\"20\" />\n </svg>\n </ToolbarButton>}\n {show('underline', cfg.textFormat) && <ToolbarButton\n onClick={() => editor.chain().focus().toggleUnderline().run()}\n isActive={editor.isActive('underline')}\n title={labels.underline}\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M6 3v7a6 6 0 006 6 6 6 0 006-6V3\" />\n <line x1=\"4\" y1=\"21\" x2=\"20\" y2=\"21\" />\n </svg>\n </ToolbarButton>}\n {show('strikethrough', cfg.textFormat) && <ToolbarButton\n onClick={() => editor.chain().focus().toggleStrike().run()}\n isActive={editor.isActive('strike')}\n title={labels.strikethrough}\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M17.3 4.9c-2.3-.6-4.4-1-6.2-.9-2.7 0-5.3.7-5.3 3.6 0 1.5 1.8 3.3 7.2 3.3\" />\n <path d=\"M13 15.1c0 2.8-2.6 3.6-5.3 3.6-1.8-.1-3.9-.5-6.2-.9\" />\n <line x1=\"4\" y1=\"12\" x2=\"20\" y2=\"12\" />\n </svg>\n </ToolbarButton>}\n {show('subscript', cfg.textFormat) && <ToolbarButton\n onClick={() => editor.chain().focus().toggleSubscript().run()}\n isActive={editor.isActive('subscript')}\n title={labels.subscript}\n >\n <span style={{ fontSize: '13px', fontWeight: 600 }}>X<sub style={{ fontSize: '9px' }}>2</sub></span>\n </ToolbarButton>}\n {show('superscript', cfg.textFormat) && <ToolbarButton\n onClick={() => editor.chain().focus().toggleSuperscript().run()}\n isActive={editor.isActive('superscript')}\n title={labels.superscript}\n >\n <span style={{ fontSize: '13px', fontWeight: 600 }}>X<sup style={{ fontSize: '9px' }}>2</sup></span>\n </ToolbarButton>}\n {show('formatPainter', cfg.formatPainter) && (\n <ToolbarButton\n onClick={handleFormatPainter}\n disabled={!editor.isEditable || (!formatPainterMarks && editor.state.selection.empty)}\n isActive={!!formatPainterMarks}\n title={formatPainterMarks ? labels.formatPainterActive : labels.formatPainter}\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M19 3H5a2 2 0 00-2 2v2a2 2 0 002 2h14a2 2 0 002-2V5a2 2 0 00-2-2z\" />\n <path d=\"M10 7v4a2 2 0 01-2 2H7\" />\n <path d=\"M7 13l-3 8\" />\n <path d=\"M4 21h6\" />\n </svg>\n </ToolbarButton>\n )}\n <ToolbarDivider />\n </>\n )}\n\n {([1, 2, 3, 4, 5, 6] as const).some((level) => show(`heading${level}` as keyof ToolbarButtonConfig, cfg.heading)) && (\n <>\n {([1, 2, 3, 4, 5, 6] as const).filter((level) => show(`heading${level}` as keyof ToolbarButtonConfig, cfg.heading)).map((level) => (\n <ToolbarButton\n key={level}\n onClick={() => editor.chain().focus().toggleHeading({ level }).run()}\n isActive={editor.isActive('heading', { level })}\n title={`${labels.heading} ${level}`}\n >\n <span style={{ fontSize: '12px', fontWeight: 700 }}>H{level}</span>\n </ToolbarButton>\n ))}\n <ToolbarDivider />\n </>\n )}\n\n {(['alignLeft', 'alignCenter', 'alignRight', 'alignJustify'] as const).some((button) => show(button, cfg.alignment)) && (\n <>\n {show('alignLeft', cfg.alignment) && <ToolbarButton\n onClick={() => editor.chain().focus().setTextAlign('left').run()}\n isActive={editor.isActive({ textAlign: 'left' })}\n title={labels.alignLeft}\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <line x1=\"17\" y1=\"10\" x2=\"3\" y2=\"10\" /><line x1=\"21\" y1=\"6\" x2=\"3\" y2=\"6\" />\n <line x1=\"21\" y1=\"14\" x2=\"3\" y2=\"14\" /><line x1=\"17\" y1=\"18\" x2=\"3\" y2=\"18\" />\n </svg>\n </ToolbarButton>}\n {show('alignCenter', cfg.alignment) && <ToolbarButton\n onClick={() => editor.chain().focus().setTextAlign('center').run()}\n isActive={editor.isActive({ textAlign: 'center' })}\n title={labels.alignCenter}\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <line x1=\"18\" y1=\"10\" x2=\"6\" y2=\"10\" /><line x1=\"21\" y1=\"6\" x2=\"3\" y2=\"6\" />\n <line x1=\"21\" y1=\"14\" x2=\"3\" y2=\"14\" /><line x1=\"18\" y1=\"18\" x2=\"6\" y2=\"18\" />\n </svg>\n </ToolbarButton>}\n {show('alignRight', cfg.alignment) && <ToolbarButton\n onClick={() => editor.chain().focus().setTextAlign('right').run()}\n isActive={editor.isActive({ textAlign: 'right' })}\n title={labels.alignRight}\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <line x1=\"21\" y1=\"10\" x2=\"7\" y2=\"10\" /><line x1=\"21\" y1=\"6\" x2=\"3\" y2=\"6\" />\n <line x1=\"21\" y1=\"14\" x2=\"3\" y2=\"14\" /><line x1=\"21\" y1=\"18\" x2=\"7\" y2=\"18\" />\n </svg>\n </ToolbarButton>}\n {show('alignJustify', cfg.alignment) && <ToolbarButton\n onClick={() => editor.chain().focus().setTextAlign('justify').run()}\n isActive={editor.isActive({ textAlign: 'justify' })}\n title={labels.alignJustify}\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <line x1=\"21\" y1=\"10\" x2=\"3\" y2=\"10\" /><line x1=\"21\" y1=\"6\" x2=\"3\" y2=\"6\" />\n <line x1=\"21\" y1=\"14\" x2=\"3\" y2=\"14\" /><line x1=\"21\" y1=\"18\" x2=\"3\" y2=\"18\" />\n </svg>\n </ToolbarButton>}\n <ToolbarDivider />\n </>\n )}\n\n {(['bulletList', 'orderedList', 'taskList'] as const).some((button) => show(button, cfg.list)) && (\n <>\n {show('bulletList', cfg.list) && <ToolbarButton\n onClick={() => editor.chain().focus().toggleBulletList().run()}\n isActive={editor.isActive('bulletList')}\n title={labels.bulletList}\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <line x1=\"8\" y1=\"6\" x2=\"21\" y2=\"6\" /><line x1=\"8\" y1=\"12\" x2=\"21\" y2=\"12\" />\n <line x1=\"8\" y1=\"18\" x2=\"21\" y2=\"18\" />\n <circle cx=\"4\" cy=\"6\" r=\"1\" fill=\"currentColor\" /><circle cx=\"4\" cy=\"12\" r=\"1\" fill=\"currentColor\" />\n <circle cx=\"4\" cy=\"18\" r=\"1\" fill=\"currentColor\" />\n </svg>\n </ToolbarButton>}\n {show('orderedList', cfg.list) && <ToolbarButton\n onClick={() => editor.chain().focus().toggleOrderedList().run()}\n isActive={editor.isActive('orderedList')}\n title={labels.orderedList}\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <line x1=\"10\" y1=\"6\" x2=\"21\" y2=\"6\" /><line x1=\"10\" y1=\"12\" x2=\"21\" y2=\"12\" />\n <line x1=\"10\" y1=\"18\" x2=\"21\" y2=\"18\" />\n <text x=\"2\" y=\"8\" fontSize=\"8\" fill=\"currentColor\" stroke=\"none\" fontWeight=\"bold\">1</text>\n <text x=\"2\" y=\"14\" fontSize=\"8\" fill=\"currentColor\" stroke=\"none\" fontWeight=\"bold\">2</text>\n <text x=\"2\" y=\"20\" fontSize=\"8\" fill=\"currentColor\" stroke=\"none\" fontWeight=\"bold\">3</text>\n </svg>\n </ToolbarButton>}\n {show('taskList', cfg.list) && <ToolbarButton\n onClick={() => editor.chain().focus().toggleTaskList().run()}\n isActive={editor.isActive('taskList')}\n title={labels.taskList}\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <rect x=\"3\" y=\"5\" width=\"6\" height=\"6\" rx=\"1\" /><path d=\"M5 8l1.5 1.5L9 6.5\" />\n <line x1=\"12\" y1=\"8\" x2=\"21\" y2=\"8\" />\n <rect x=\"3\" y=\"14\" width=\"6\" height=\"6\" rx=\"1\" />\n <line x1=\"12\" y1=\"17\" x2=\"21\" y2=\"17\" />\n </svg>\n </ToolbarButton>}\n <ToolbarDivider />\n </>\n )}\n\n {(['blockquote', 'codeBlock', 'mermaidBlock', 'link', 'image', 'table', 'tableOps', 'horizontalRule', 'markdownBlock', 'markdownTemplates', 'floatingDialog'] as const).some((button) => show(button, button === 'tableOps' ? cfg.tableOps : cfg.insert)) && (\n <>\n {show('blockquote', cfg.insert) && <ToolbarButton\n onClick={() => editor.chain().focus().toggleBlockquote().run()}\n isActive={editor.isActive('blockquote')}\n title={labels.blockquote}\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M3 21c3 0 7-1 7-8V5c0-1.25-.756-2.017-2-2H4c-1.25 0-2 .75-2 1.972V11c0 1.25.75 2 2 2 1 0 1 0 1 1v1c0 1-1 2-2 2s-1 .008-1 1.031V21z\" />\n <path d=\"M15 21c3 0 7-1 7-8V5c0-1.25-.757-2.017-2-2h-4c-1.25 0-2 .75-2 1.972V11c0 1.25.75 2 2 2h.75c0 2.25.25 4-2.75 4v3z\" />\n </svg>\n </ToolbarButton>}\n {show('codeBlock', cfg.insert) && <ToolbarButton\n onClick={() => editor.chain().focus().toggleNode('codeBlock', 'paragraph').run()}\n isActive={editor.isActive('codeBlock')}\n title={labels.codeBlock}\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <polyline points=\"16 18 22 12 16 6\" /><polyline points=\"8 6 2 12 8 18\" />\n </svg>\n </ToolbarButton>}\n {show('mermaidBlock', cfg.insert) && <ToolbarButton\n onClick={() => {\n editor.chain().focus().insertContent({\n type: 'codeBlock',\n attrs: { language: 'r-mermaid' },\n content: [{ type: 'text', text: 'graph TD\\n A[Start] --> B[End]' }],\n }).run();\n }}\n title={labels.mermaidBlock}\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <circle cx=\"6\" cy=\"6\" r=\"3\" /><circle cx=\"18\" cy=\"6\" r=\"3\" />\n <circle cx=\"12\" cy=\"18\" r=\"3\" />\n <line x1=\"6\" y1=\"9\" x2=\"12\" y2=\"15\" /><line x1=\"18\" y1=\"9\" x2=\"12\" y2=\"15\" />\n </svg>\n </ToolbarButton>}\n {show('link', cfg.insert) && <ToolbarButton onClick={setLink} isActive={editor.isActive('link')} title={labels.link}>\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M10 13a5 5 0 007.54.54l3-3a5 5 0 00-7.07-7.07l-1.72 1.71\" />\n <path d=\"M14 11a5 5 0 00-7.54-.54l-3 3a5 5 0 007.07 7.07l1.71-1.71\" />\n </svg>\n </ToolbarButton>}\n {show('image', cfg.insert) && <ToolbarButton onClick={addImage} title={labels.image}>\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\" />\n <circle cx=\"8.5\" cy=\"8.5\" r=\"1.5\" /><polyline points=\"21 15 16 10 5 21\" />\n </svg>\n </ToolbarButton>}\n {show('table', cfg.insert) && <ToolbarButton onClick={insertTable} title={labels.table}>\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" />\n <line x1=\"3\" y1=\"9\" x2=\"21\" y2=\"9\" /><line x1=\"3\" y1=\"15\" x2=\"21\" y2=\"15\" />\n <line x1=\"9\" y1=\"3\" x2=\"9\" y2=\"21\" /><line x1=\"15\" y1=\"3\" x2=\"15\" y2=\"21\" />\n </svg>\n </ToolbarButton>}\n {show('tableOps', cfg.tableOps) && <TableOpsMenu editor={editor} labels={labels} />}\n {show('horizontalRule', cfg.insert) && <ToolbarButton\n onClick={() => editor.chain().focus().setHorizontalRule().run()}\n title={labels.horizontalRule}\n >\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\">\n <line x1=\"3\" y1=\"12\" x2=\"21\" y2=\"12\" />\n </svg>\n </ToolbarButton>}\n {show('markdownBlock', cfg.insert) && <ToolbarButton onClick={insertMarkdownBlock} title={labels.markdownBlock}>\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M2 3h20v18H2z\" />\n <path d=\"M5 15V9l3 3.5L11 9v6\" />\n <path d=\"M17 9l-2.5 3H17v3\" />\n </svg>\n </ToolbarButton>}\n {show('markdownTemplates', cfg.insert) && <MarkdownTemplateMenu labels={labels} onSelect={insertMarkdownTemplate} />}\n {show('floatingDialog', cfg.insert) && <FloatingDialogMenu labels={labels} onInsert={insertFloatingDialog} />}\n <ToolbarDivider />\n </>\n )}\n\n {(['textColor', 'highlight'] as const).some((button) => show(button, cfg.color)) && (\n <>\n {show('textColor', cfg.color) && <ColorPicker\n value={editor.getAttributes('textStyle').color || ''}\n onChange={(color) => {\n if (color) {\n editor.chain().focus().setColor(color).run();\n } else {\n editor.chain().focus().unsetColor().run();\n }\n }}\n title={labels.color}\n kind=\"text\"\n />}\n {show('highlight', cfg.color) && <ColorPicker\n value={editor.getAttributes('highlight').color || ''}\n onChange={(color) => {\n if (color) {\n editor.chain().focus().toggleHighlight({ color }).run();\n } else {\n editor.chain().focus().unsetHighlight().run();\n }\n }}\n title={labels.highlight}\n kind=\"highlight\"\n />}\n <ToolbarDivider />\n </>\n )}\n\n {show('ai', cfg.ai) && onAIClick && (\n <ToolbarButton\n onClick={hasAI ? onAIClick : (onRequestAIConfig || (() => {}))}\n disabled={!hasAI && !onRequestAIConfig}\n title={hasAI ? labels.ai : (onRequestAIConfig ? labels.aiConfigure : labels.aiNotConfigured)}\n className={`rte-toolbar__ai-btn ${!hasAI ? 'rte-toolbar__ai-btn--unconfigured' : ''}`}\n >\n <svg className=\"rte-toolbar__ai-icon\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M12 2.75l1.14 4.11a5.5 5.5 0 003.82 3.82L21.25 12l-4.29 1.32a5.5 5.5 0 00-3.82 3.82L12 21.25l-1.14-4.11a5.5 5.5 0 00-3.82-3.82L2.75 12l4.29-1.32a5.5 5.5 0 003.82-3.82L12 2.75z\" fill=\"currentColor\" />\n <path d=\"M19 2.75l.42 1.52a2 2 0 001.31 1.31l1.52.42-1.52.42a2 2 0 00-1.31 1.31L19 9.25l-.42-1.52a2 2 0 00-1.31-1.31L15.75 6l1.52-.42a2 2 0 001.31-1.31L19 2.75z\" fill=\"currentColor\" opacity=\".68\" />\n </svg>\n <span className=\"rte-toolbar__ai-label\">AI</span>\n {!hasAI && onRequestAIConfig && <span className=\"rte-toolbar__ai-configure\">{labels.aiConfigure}</span>}\n </ToolbarButton>\n )}\n\n {children}\n </div>\n );\n};\n\nexport default Toolbar;\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ToolbarButton.js","names":[],"sources":["../../../../../src/components/pro/RichTextEditor/Toolbar/ToolbarButton.tsx"],"sourcesContent":["import React from 'react';\n\nexport const ToolbarDivider: React.FC = () => <div className=\"rte-toolbar__divider\" />;\n\ninterface ToolbarButtonProps {\n onClick: () => void;\n isActive?: boolean;\n disabled?: boolean;\n title?: string;\n className?: string;\n children: React.ReactNode;\n}\n\nexport const ToolbarButton: React.FC<ToolbarButtonProps> = ({\n onClick,\n isActive,\n disabled,\n title,\n className,\n children,\n}) => (\n <button\n type=\"button\"\n className={`rte-toolbar__btn ${isActive ? 'rte-toolbar__btn--active' : ''} ${className || ''}`}\n onClick={onClick}\n disabled={disabled}\n title={title}\n >\n {children}\n </button>\n);\n"],"mappings":";;;AAEA,IAAa,UAAiC,kBAAC,OAAD,EAAK,WAAU,uBAAwB,CAAA,GAWxE,KAA+C,EAC1D,YACA,aACA,aACA,UACA,cACA,kBAEA,kBAAC,UAAD;CACE,MAAK;CACL,WAAW,oBAAoB,IAAW,6BAA6B,GAAG,GAAG,KAAa;CACjF;CACC;CACH;CAEN;AACK,CAAA"}
1
+ {"version":3,"file":"ToolbarButton.js","names":["ToolbarDivider","ToolbarButton","isActive","className"],"sources":["../../../../../src/components/pro/RichTextEditor/Toolbar/ToolbarButton.tsx"],"sourcesContent":["import React from 'react';\n\nexport const ToolbarDivider: React.FC = () => <div className=\"rte-toolbar__divider\" />;\n\ninterface ToolbarButtonProps {\n onClick: () => void;\n isActive?: boolean;\n disabled?: boolean;\n title?: string;\n className?: string;\n children: React.ReactNode;\n}\n\nexport const ToolbarButton: React.FC<ToolbarButtonProps> = ({\n onClick,\n isActive,\n disabled,\n title,\n className,\n children,\n}) => (\n <button\n type=\"button\"\n className={`rte-toolbar__btn ${isActive ? 'rte-toolbar__btn--active' : ''} ${className || ''}`}\n onClick={onClick}\n disabled={disabled}\n title={title}\n >\n {children}\n </button>\n);\n"],"mappings":";;;AAEA,IAAaA,UAAiC,kBAAC,OAAD,EAAK,WAAU,uBAAwB,CAAA,GAWxEC,KAA+C,EAC1D,YACA,aACA,aACA,UACA,cACA,kBAEA,kBAAC,UAAD;CACE,MAAK;CACL,WAAW,oBAAoBC,IAAW,6BAA6B,GAAG,GAAGC,KAAa;CACjF;CACC;CACH;CAEN;AACK,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"useAnchoredDropdown.js","names":[],"sources":["../../../../../src/components/pro/RichTextEditor/Toolbar/useAnchoredDropdown.ts"],"sourcesContent":["import { useCallback, useLayoutEffect, useState, type CSSProperties, type RefObject } from 'react';\n\nconst VIEWPORT_GAP = 8;\nconst DROPDOWN_GAP = 6;\n\n/** Positions a toolbar dropdown inside the viewport and flips it above when needed. */\nexport function useAnchoredDropdown(\n open: boolean,\n anchorRef: RefObject<HTMLElement | null>,\n dropdownRef: RefObject<HTMLElement | null>,\n): CSSProperties {\n const [style, setStyle] = useState<CSSProperties>({});\n\n const place = useCallback(() => {\n const anchor = anchorRef.current;\n const dropdown = dropdownRef.current;\n if (!open || !anchor || !dropdown) return;\n\n const anchorRect = anchor.getBoundingClientRect();\n const naturalWidth = dropdown.scrollWidth || dropdown.offsetWidth;\n const width = Math.min(naturalWidth, window.innerWidth - VIEWPORT_GAP * 2);\n const height = Math.min(dropdown.scrollHeight, window.innerHeight - VIEWPORT_GAP * 2);\n const left = Math.max(\n VIEWPORT_GAP,\n Math.min(anchorRect.left, window.innerWidth - width - VIEWPORT_GAP),\n );\n const roomBelow = window.innerHeight - anchorRect.bottom - VIEWPORT_GAP;\n const roomAbove = anchorRect.top - VIEWPORT_GAP;\n const placeAbove = roomBelow < Math.min(height, 240) && roomAbove > roomBelow;\n const availableHeight = Math.max(80, placeAbove ? roomAbove : roomBelow);\n const top = placeAbove\n ? Math.max(VIEWPORT_GAP, anchorRect.top - Math.min(height, availableHeight) - DROPDOWN_GAP)\n : anchorRect.bottom + DROPDOWN_GAP;\n\n setStyle({\n position: 'fixed',\n left,\n top,\n width,\n maxWidth: `calc(100vw - ${VIEWPORT_GAP * 2}px)`,\n maxHeight: Math.min(height, availableHeight),\n });\n }, [open, anchorRef, dropdownRef]);\n\n useLayoutEffect(() => {\n if (!open) return;\n place();\n window.addEventListener('resize', place);\n window.addEventListener('scroll', place, true);\n return () => {\n window.removeEventListener('resize', place);\n window.removeEventListener('scroll', place, true);\n };\n }, [open, place]);\n\n return style;\n}\n"],"mappings":";;AAEA,IAAM,IAAe,GACf,IAAe;AAGrB,SAAgB,EACd,GACA,GACA,GACe;CACf,IAAM,CAAC,GAAO,KAAY,EAAwB,CAAC,CAAC,GAE9C,IAAQ,QAAkB;EAC9B,IAAM,IAAS,EAAU,SACnB,IAAW,EAAY;EAC7B,IAAI,CAAC,KAAQ,CAAC,KAAU,CAAC,GAAU;EAEnC,IAAM,IAAa,EAAO,sBAAsB,GAC1C,IAAe,EAAS,eAAe,EAAS,aAChD,IAAQ,KAAK,IAAI,GAAc,OAAO,aAAa,EAAgB,GACnE,IAAS,KAAK,IAAI,EAAS,cAAc,OAAO,cAAc,EAAgB,GAC9E,IAAO,KAAK,IAChB,GACA,KAAK,IAAI,EAAW,MAAM,OAAO,aAAa,IAAQ,CAAY,CACpE,GACM,IAAY,OAAO,cAAc,EAAW,SAAS,GACrD,IAAY,EAAW,MAAM,GAC7B,IAAa,IAAY,KAAK,IAAI,GAAQ,GAAG,KAAK,IAAY,GAC9D,IAAkB,KAAK,IAAI,IAAI,IAAa,IAAY,CAAS,GACjE,IAAM,IACR,KAAK,IAAI,GAAc,EAAW,MAAM,KAAK,IAAI,GAAQ,CAAe,IAAI,CAAY,IACxF,EAAW,SAAS;EAExB,EAAS;GACP,UAAU;GACV;GACA;GACA;GACA,UAAU;GACV,WAAW,KAAK,IAAI,GAAQ,CAAe;EAC7C,CAAC;CACH,GAAG;EAAC;EAAM;EAAW;CAAW,CAAC;CAajC,OAXA,QAAsB;EACf,OAIL,OAHA,EAAM,GACN,OAAO,iBAAiB,UAAU,CAAK,GACvC,OAAO,iBAAiB,UAAU,GAAO,EAAI,SAChC;GAEX,AADA,OAAO,oBAAoB,UAAU,CAAK,GAC1C,OAAO,oBAAoB,UAAU,GAAO,EAAI;EAClD;CACF,GAAG,CAAC,GAAM,CAAK,CAAC,GAET;AACT"}
1
+ {"version":3,"file":"useAnchoredDropdown.js","names":["VIEWPORT_GAP","DROPDOWN_GAP","useAnchoredDropdown","style","setStyle","useState","place","useCallback","anchor","anchorRef","dropdown","dropdownRef","open","anchorRect","naturalWidth","width","height","left","roomBelow","roomAbove","placeAbove","availableHeight","top","useLayoutEffect"],"sources":["../../../../../src/components/pro/RichTextEditor/Toolbar/useAnchoredDropdown.ts"],"sourcesContent":["import { useCallback, useLayoutEffect, useState, type CSSProperties, type RefObject } from 'react';\n\nconst VIEWPORT_GAP = 8;\nconst DROPDOWN_GAP = 6;\n\n/** Positions a toolbar dropdown inside the viewport and flips it above when needed. */\nexport function useAnchoredDropdown(\n open: boolean,\n anchorRef: RefObject<HTMLElement | null>,\n dropdownRef: RefObject<HTMLElement | null>,\n): CSSProperties {\n const [style, setStyle] = useState<CSSProperties>({});\n\n const place = useCallback(() => {\n const anchor = anchorRef.current;\n const dropdown = dropdownRef.current;\n if (!open || !anchor || !dropdown) return;\n\n const anchorRect = anchor.getBoundingClientRect();\n const naturalWidth = dropdown.scrollWidth || dropdown.offsetWidth;\n const width = Math.min(naturalWidth, window.innerWidth - VIEWPORT_GAP * 2);\n const height = Math.min(dropdown.scrollHeight, window.innerHeight - VIEWPORT_GAP * 2);\n const left = Math.max(\n VIEWPORT_GAP,\n Math.min(anchorRect.left, window.innerWidth - width - VIEWPORT_GAP),\n );\n const roomBelow = window.innerHeight - anchorRect.bottom - VIEWPORT_GAP;\n const roomAbove = anchorRect.top - VIEWPORT_GAP;\n const placeAbove = roomBelow < Math.min(height, 240) && roomAbove > roomBelow;\n const availableHeight = Math.max(80, placeAbove ? roomAbove : roomBelow);\n const top = placeAbove\n ? Math.max(VIEWPORT_GAP, anchorRect.top - Math.min(height, availableHeight) - DROPDOWN_GAP)\n : anchorRect.bottom + DROPDOWN_GAP;\n\n setStyle({\n position: 'fixed',\n left,\n top,\n width,\n maxWidth: `calc(100vw - ${VIEWPORT_GAP * 2}px)`,\n maxHeight: Math.min(height, availableHeight),\n });\n }, [open, anchorRef, dropdownRef]);\n\n useLayoutEffect(() => {\n if (!open) return;\n place();\n window.addEventListener('resize', place);\n window.addEventListener('scroll', place, true);\n return () => {\n window.removeEventListener('resize', place);\n window.removeEventListener('scroll', place, true);\n };\n }, [open, place]);\n\n return style;\n}\n"],"mappings":";;AAEA,IAAMA,IAAe,GACfC,IAAe;AAGrB,SAAgBC,EACd,GACA,GACA,GACe;CACf,IAAM,CAACC,GAAOC,KAAYC,EAAwB,CAAC,CAAC,GAE9CC,IAAQC,QAAkB;EAC9B,IAAMC,IAASC,EAAU,SACnBC,IAAWC,EAAY;EAC7B,IAAI,CAACC,KAAQ,CAACJ,KAAU,CAACE,GAAU;EAEnC,IAAMG,IAAaL,EAAO,sBAAsB,GAC1CM,IAAeJ,EAAS,eAAeA,EAAS,aAChDK,IAAQ,KAAK,IAAID,GAAc,OAAO,aAAa,EAAgB,GACnEE,IAAS,KAAK,IAAIN,EAAS,cAAc,OAAO,cAAc,EAAgB,GAC9EO,IAAO,KAAK,IAChBjB,GACA,KAAK,IAAIa,EAAW,MAAM,OAAO,aAAaE,IAAQf,CAAY,CACpE,GACMkB,IAAY,OAAO,cAAcL,EAAW,SAASb,GACrDmB,IAAYN,EAAW,MAAMb,GAC7BoB,IAAaF,IAAY,KAAK,IAAIF,GAAQ,GAAG,KAAKG,IAAYD,GAC9DG,IAAkB,KAAK,IAAI,IAAID,IAAaD,IAAYD,CAAS,GACjEI,IAAMF,IACR,KAAK,IAAIpB,GAAca,EAAW,MAAM,KAAK,IAAIG,GAAQK,CAAe,IAAIpB,CAAY,IACxFY,EAAW,SAASZ;EAExB,EAAS;GACP,UAAU;GACV;GACA;GACA;GACA,UAAU;GACV,WAAW,KAAK,IAAIe,GAAQK,CAAe;EAC7C,CAAC;CACH,GAAG;EAACT;EAAMH;EAAWE;CAAW,CAAC;CAajC,OAXAY,QAAsB;EACpB,IAAKX,GAIL,OAHAN,EAAM,GACN,OAAO,iBAAiB,UAAUA,CAAK,GACvC,OAAO,iBAAiB,UAAUA,GAAO,EAAI,SAChC;GAEX,AADA,OAAO,oBAAoB,UAAUA,CAAK,GAC1C,OAAO,oBAAoB,UAAUA,GAAO,EAAI;EAClD;CACF,GAAG,CAACM,GAAMN,CAAK,CAAC,GAETH;AACT"}
@@ -1 +1 @@
1
- {"version":3,"file":"CodeBlockView.js","names":[],"sources":["../../../../../src/components/pro/RichTextEditor/extensions/CodeBlockView.tsx"],"sourcesContent":["import React, { useState, useEffect } from 'react';\nimport { Node, mergeAttributes, textblockTypeInputRule } from '@tiptap/react';\nimport { Plugin, PluginKey } from '@tiptap/pm/state';\nimport { NodeViewWrapper, NodeViewContent, ReactNodeViewRenderer } from '@tiptap/react';\nimport type { NodeViewProps } from '@tiptap/react';\nimport { Prism as SyntaxHighlighter } from 'react-syntax-highlighter';\nimport { oneLight } from 'react-syntax-highlighter/dist/esm/styles/prism';\nimport ReactMarkdown from 'react-markdown';\nimport remarkGfm from 'remark-gfm';\nimport remarkMath from 'remark-math';\nimport rehypeKatex from 'rehype-katex';\nimport { MermaidRenderer, useNodeEditable } from './MarkdownBlock';\nimport Select from '../../../Select';\nimport 'katex/dist/katex.min.css';\n\n\nconst KatexRenderer: React.FC<{ code: string }> = ({ code }) => {\n const wrapped = code.includes('$$') ? code : `$$\\n${code}\\n$$`;\n return (\n <ReactMarkdown\n remarkPlugins={[remarkMath]}\n rehypePlugins={[rehypeKatex]}\n >\n {wrapped}\n </ReactMarkdown>\n );\n};\n\nconst MarkdownRenderer: React.FC<{ code: string }> = ({ code }) => {\n return (\n <ReactMarkdown\n remarkPlugins={[remarkGfm, remarkMath]}\n rehypePlugins={[rehypeKatex]}\n components={{\n code({ className, children, ...props }) {\n const match = /language-(\\w+)/.exec(className || '');\n const lang = match?.[1];\n const text = String(children).replace(/\\n$/, '');\n\n if (lang === 'mermaid') return <MermaidRenderer code={text} />;\n\n if (lang) {\n return (\n <SyntaxHighlighter\n style={oneLight as Record<string, React.CSSProperties>}\n language={lang}\n PreTag=\"div\"\n customStyle={{ borderRadius: '0.5rem', fontSize: '0.875em', padding: '1em', margin: '0.5em 0' }}\n >\n {text}\n </SyntaxHighlighter>\n );\n }\n return <code className={className} {...props}>{children}</code>;\n },\n }}\n >\n {code}\n </ReactMarkdown>\n );\n};\n\nconst RENDER_LANGUAGES = ['markdown', 'mermaid', 'math'];\n\nconst HIGHLIGHT_LANGUAGES = [\n '', 'javascript', 'typescript', 'python', 'rust', 'go', 'java', 'c', 'cpp',\n 'csharp', 'ruby', 'php', 'swift', 'kotlin', 'sql', 'bash', 'shell',\n 'html', 'css', 'json', 'yaml', 'toml', 'xml',\n 'docker', 'graphql', 'latex', 'tex',\n];\n\nconst LANGUAGE_OPTIONS = [\n { label: 'Plain text', value: '' },\n ...HIGHLIGHT_LANGUAGES.filter(Boolean).map(lang => ({ label: `Syntax · ${lang}`, value: lang })),\n ...RENDER_LANGUAGES.map(lang => ({ label: `Render · ${lang}`, value: lang })),\n];\n\nfunction renderLang(lang: string): string {\n // Legacy documents keep their r- attributes; the selector uses canonical names.\n const canonical = lang.startsWith('r-') ? lang.slice(2) : lang;\n return RENDER_LANGUAGES.includes(canonical) ? canonical : '';\n}\n\nfunction highlightLang(lang: string): string {\n if (lang === 'math' || lang === 'latex' || lang === 'tex') return 'latex';\n return lang;\n}\n\nconst CodeBlockNodeView: React.FC<NodeViewProps> = ({\n node,\n editor,\n updateAttributes,\n}) => {\n const editable = useNodeEditable(editor);\n const language = node.attrs.language || '';\n const textContent = node.textContent;\n const hasLanguage = !!language;\n const renderLanguage = renderLang(language);\n const isRenderable = !!renderLanguage;\n\n const [isEditing, setIsEditing] = useState(true);\n\n useEffect(() => {\n if (!hasLanguage) setIsEditing(true);\n }, [language, hasLanguage]);\n\n // Read-only viewers always get the rendered/preview state, never the editor chrome.\n useEffect(() => {\n if (!editable) setIsEditing(false);\n }, [editable]);\n\n const showEditing = isEditing && editable;\n\n const editIcon = (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M11 4H4a2 2 0 00-2 2v14a2 2 0 002 2h14a2 2 0 002-2v-7\" />\n <path d=\"M18.5 2.5a2.121 2.121 0 013 3L12 15l-4 1 1-4 9.5-9.5z\" />\n </svg>\n );\n const previewIcon = (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z\" />\n <circle cx=\"12\" cy=\"12\" r=\"3\" />\n </svg>\n );\n\n const renderPreview = () => {\n if (renderLanguage === 'mermaid') {\n return textContent.trim()\n ? <MermaidRenderer code={textContent} />\n : <p className=\"rte-codeblock__placeholder\">Enter mermaid diagram code...</p>;\n }\n if (renderLanguage === 'math') {\n return textContent.trim()\n ? <KatexRenderer code={textContent} />\n : <p className=\"rte-codeblock__placeholder\">Enter KaTeX math formula...</p>;\n }\n if (renderLanguage === 'markdown') {\n return textContent.trim()\n ? <MarkdownRenderer code={textContent} />\n : <p className=\"rte-codeblock__placeholder\">Enter Markdown content...</p>;\n }\n return null;\n };\n\n const displayLabel = renderLanguage ? renderLanguage + ' (render)' : language || 'plain text';\n\n return (\n <NodeViewWrapper className={`rte-codeblock-wrapper ${!isEditing && hasLanguage ? 'rte-codeblock-wrapper--preview' : ''}`}>\n {showEditing ? (\n <>\n <div className=\"rte-codeblock__header\">\n <div contentEditable={false} className=\"rte-codeblock__lang-control\">\n <Select\n className=\"rte-codeblock__lang-select\"\n aria-label=\"Code language\"\n value={renderLanguage || language}\n options={LANGUAGE_OPTIONS}\n onChange={(next) => {\n if (editor.isDestroyed || !editor.isEditable) return;\n const selected = String(next);\n updateAttributes({ language: selected });\n if (!selected) setIsEditing(true);\n }}\n />\n </div>\n {hasLanguage && (\n <button\n type=\"button\"\n className=\"rte-codeblock__preview-btn\"\n onClick={() => setIsEditing(false)}\n contentEditable={false}\n >\n {previewIcon} Preview\n </button>\n )}\n </div>\n <pre className=\"rte-codeblock__editable-pre\">\n <NodeViewContent as={'code' as any} />\n </pre>\n </>\n ) : isRenderable ? (\n <div\n className=\"rte-codeblock__render-preview\"\n contentEditable={false}\n onDoubleClick={() => { if (editable) setIsEditing(true); }}\n >\n <div className=\"rte-codeblock__preview-toolbar\" contentEditable={false}>\n <span className=\"rte-codeblock__preview-label\">{displayLabel}</span>\n {editable && (\n <button\n type=\"button\"\n className=\"rte-codeblock__preview-edit-btn\"\n onClick={() => setIsEditing(true)}\n >\n {editIcon} Edit\n </button>\n )}\n </div>\n <div className=\"rte-codeblock__render-body\">\n {renderPreview()}\n </div>\n {/* 预览分支也必须挂载 contentDOM(隐藏):不渲染 NodeViewContent 时\n tiptap 会把代码文本以 data-node-view-content-react 形式再渲染\n 一份裸露副本,只读 / 预览下出现重复的原始代码。 */}\n <div style={{ display: 'none' }} aria-hidden=\"true\">\n <NodeViewContent as={'code' as any} />\n </div>\n </div>\n ) : (\n <div\n className=\"rte-codeblock__syntax-preview\"\n contentEditable={false}\n onDoubleClick={() => { if (editable) setIsEditing(true); }}\n >\n <div className=\"rte-codeblock__preview-toolbar\" contentEditable={false}>\n <span className=\"rte-codeblock__preview-label\">{displayLabel}</span>\n {editable && (\n <button\n type=\"button\"\n className=\"rte-codeblock__preview-edit-btn\"\n onClick={() => setIsEditing(true)}\n >\n {editIcon} Edit\n </button>\n )}\n </div>\n <SyntaxHighlighter\n style={oneLight as Record<string, React.CSSProperties>}\n language={highlightLang(language)}\n PreTag=\"div\"\n customStyle={{\n borderRadius: '0 0 0.5rem 0.5rem',\n fontSize: '0.875em',\n padding: '1em',\n margin: '0',\n }}\n >\n {textContent || ' '}\n </SyntaxHighlighter>\n <div style={{ display: 'none' }} aria-hidden=\"true\">\n <NodeViewContent as={'code' as any} />\n </div>\n </div>\n )}\n </NodeViewWrapper>\n );\n};\n\nconst backtickInputRegex = /^```([a-z-]*)[\\s\\n]$/;\nconst tildeInputRegex = /^~~~([a-z-]*)[\\s\\n]$/;\nconst tableShortcutRegex = /^(?:```|~~~)table(?:(\\d+)[x×X*](\\d+))?\\s?$/;\n\nexport const CodeBlockExtension = Node.create({\n name: 'codeBlock',\n group: 'block',\n content: 'text*',\n marks: '',\n code: true,\n defining: true,\n\n addAttributes() {\n return {\n language: {\n default: null,\n parseHTML: (element) => {\n const classAttr = element.querySelector('code')?.className ||\n element.className || '';\n const match = /language-([\\w-]+)/.exec(classAttr);\n return match?.[1] || element.getAttribute('data-language') || null;\n },\n renderHTML: (attributes) => {\n if (!attributes.language) return {};\n return { 'data-language': attributes.language };\n },\n },\n };\n },\n\n parseHTML() {\n return [\n {\n tag: 'pre',\n preserveWhitespace: 'full',\n },\n ];\n },\n\n renderHTML({ node, HTMLAttributes }) {\n return [\n 'pre',\n mergeAttributes(HTMLAttributes, { 'data-language': node.attrs.language }),\n ['code', { class: node.attrs.language ? `language-${node.attrs.language}` : undefined }, 0],\n ];\n },\n\n addInputRules() {\n return [\n textblockTypeInputRule({\n find: backtickInputRegex,\n type: this.type,\n getAttributes: (match) => {\n if (match[1]?.startsWith('table')) return false;\n return { language: match[1] || null };\n },\n }),\n textblockTypeInputRule({\n find: tildeInputRegex,\n type: this.type,\n getAttributes: (match) => {\n if (match[1]?.startsWith('table')) return false;\n return { language: match[1] || null };\n },\n }),\n ];\n },\n\n addProseMirrorPlugins() {\n const editorRef = this.editor;\n return [\n new Plugin({\n key: new PluginKey('tableShortcut'),\n props: {\n handleTextInput(view, from, to, text) {\n if (!editorRef.isEditable || text !== ' ') return false;\n const { state } = view;\n const $from = state.doc.resolve(from);\n const blockStart = $from.start();\n const textBefore = state.doc.textBetween(blockStart, from, '\\0');\n const full = textBefore + ' ';\n const m = tableShortcutRegex.exec(full);\n if (!m) return false;\n\n const rows = Math.min(Math.max(parseInt(m[1], 10) || 3, 1), 20);\n const cols = Math.min(Math.max(parseInt(m[2], 10) || 3, 1), 20);\n dispatchTable(view, blockStart, to, rows, cols);\n return true;\n },\n handleKeyDown(view, event) {\n if (!editorRef.isEditable || event.key !== 'Enter') return false;\n const { state } = view;\n const { $from } = state.selection;\n if (!$from.parent.isTextblock) return false;\n const blockStart = $from.start();\n const textBefore = state.doc.textBetween(blockStart, $from.pos, '\\0');\n const m = tableShortcutRegex.exec(textBefore);\n if (!m) return false;\n\n event.preventDefault();\n const rows = Math.min(Math.max(parseInt(m[1], 10) || 3, 1), 20);\n const cols = Math.min(Math.max(parseInt(m[2], 10) || 3, 1), 20);\n dispatchTable(view, blockStart, $from.pos, rows, cols);\n return true;\n },\n },\n }),\n ];\n\n function dispatchTable(view: typeof editorRef.view, from: number, to: number, rows: number, cols: number) {\n const { state } = view;\n const $from = state.doc.resolve(from);\n const blockNode = $from.parent;\n const blockPos = $from.before();\n\n const tableType = state.schema.nodes.table;\n const rowType = state.schema.nodes.tableRow;\n const headerType = state.schema.nodes.tableHeader;\n const cellType = state.schema.nodes.tableCell;\n if (!tableType || !rowType || !cellType) return;\n\n const emptyParagraph = state.schema.nodes.paragraph.create();\n const buildRow = (isHeader: boolean) => {\n const type = isHeader && headerType ? headerType : cellType;\n const cells = Array.from({ length: cols }, () => type.create(null, emptyParagraph));\n return rowType.create(null, cells);\n };\n\n const tableRows = [\n buildRow(true),\n ...Array.from({ length: rows - 1 }, () => buildRow(false)),\n ];\n const table = tableType.create(null, tableRows);\n const tr = state.tr.replaceWith(blockPos, blockPos + blockNode.nodeSize, table);\n view.dispatch(tr);\n }\n },\n\n addKeyboardShortcuts() {\n return {\n 'Mod-Alt-c': () => this.editor.isEditable && this.editor.commands.toggleNode('codeBlock', 'paragraph'),\n Tab: ({ editor }) => {\n if (!editor.isEditable) return false;\n if (editor.isActive('codeBlock')) {\n editor.commands.insertContent('\\t');\n return true;\n }\n return false;\n },\n Enter: ({ editor }) => {\n if (!editor.isEditable) return false;\n if (!editor.isActive('codeBlock')) return false;\n editor.commands.newlineInCode();\n return true;\n },\n ArrowDown: ({ editor }) => {\n if (!editor.isEditable) return false;\n if (!editor.isActive('codeBlock')) return false;\n const { $from } = editor.state.selection;\n const isAtEnd = $from.parentOffset === $from.parent.content.size;\n if (!isAtEnd) return false;\n const after = $from.after();\n if (after === undefined) return false;\n const nodeAfter = editor.state.doc.nodeAt(after);\n if (nodeAfter) return false;\n editor.commands.exitCode();\n return true;\n },\n };\n },\n\n addNodeView() {\n return ReactNodeViewRenderer(CodeBlockNodeView);\n },\n});\n\nexport default CodeBlockExtension;\n"],"mappings":"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"}
1
+ {"version":3,"file":"CodeBlockView.js","names":["SyntaxHighlighter","_Fragment","Select","ReactMarkdown","remarkGfm","rehypeKatex","remarkMath","KatexRenderer","wrapped","code","MarkdownRenderer","props","lang","className","text","children","MermaidRenderer","Prism","oneLight","RENDER_LANGUAGES","LANGUAGE_OPTIONS","renderLang","canonical","highlightLang","CodeBlockNodeView","editable","useNodeEditable","editor","language","node","textContent","hasLanguage","renderLanguage","isRenderable","isEditing","setIsEditing","useState","useEffect","showEditing","editIcon","previewIcon","renderPreview","displayLabel","NodeViewWrapper","Fragment","selected","next","updateAttributes","NodeViewContent","backtickInputRegex","tildeInputRegex","tableShortcutRegex","CodeBlockExtension","Node","classAttr","element","attributes","mergeAttributes","HTMLAttributes","textblockTypeInputRule","match","editorRef","Plugin","PluginKey","view","blockStart","state","from","full","m","dispatchTable","to","event","$from","textBefore","rows","cols","blockNode","blockPos","tableType","rowType","headerType","cellType","emptyParagraph","buildRow","type","isHeader","cells","tableRows","table","tr","after","ReactNodeViewRenderer"],"sources":["../../../../../src/components/pro/RichTextEditor/extensions/CodeBlockView.tsx"],"sourcesContent":["import React, { useState, useEffect } from 'react';\nimport { Node, mergeAttributes, textblockTypeInputRule } from '@tiptap/react';\nimport { Plugin, PluginKey } from '@tiptap/pm/state';\nimport { NodeViewWrapper, NodeViewContent, ReactNodeViewRenderer } from '@tiptap/react';\nimport type { NodeViewProps } from '@tiptap/react';\nimport { Prism as SyntaxHighlighter } from 'react-syntax-highlighter';\nimport { oneLight } from 'react-syntax-highlighter/dist/esm/styles/prism';\nimport ReactMarkdown from 'react-markdown';\nimport remarkGfm from 'remark-gfm';\nimport remarkMath from 'remark-math';\nimport rehypeKatex from 'rehype-katex';\nimport { MermaidRenderer, useNodeEditable } from './MarkdownBlock';\nimport Select from '../../../Select';\nimport 'katex/dist/katex.min.css';\n\n\nconst KatexRenderer: React.FC<{ code: string }> = ({ code }) => {\n const wrapped = code.includes('$$') ? code : `$$\\n${code}\\n$$`;\n return (\n <ReactMarkdown\n remarkPlugins={[remarkMath]}\n rehypePlugins={[rehypeKatex]}\n >\n {wrapped}\n </ReactMarkdown>\n );\n};\n\nconst MarkdownRenderer: React.FC<{ code: string }> = ({ code }) => {\n return (\n <ReactMarkdown\n remarkPlugins={[remarkGfm, remarkMath]}\n rehypePlugins={[rehypeKatex]}\n components={{\n code({ className, children, ...props }) {\n const match = /language-(\\w+)/.exec(className || '');\n const lang = match?.[1];\n const text = String(children).replace(/\\n$/, '');\n\n if (lang === 'mermaid') return <MermaidRenderer code={text} />;\n\n if (lang) {\n return (\n <SyntaxHighlighter\n style={oneLight as Record<string, React.CSSProperties>}\n language={lang}\n PreTag=\"div\"\n customStyle={{ borderRadius: '0.5rem', fontSize: '0.875em', padding: '1em', margin: '0.5em 0' }}\n >\n {text}\n </SyntaxHighlighter>\n );\n }\n return <code className={className} {...props}>{children}</code>;\n },\n }}\n >\n {code}\n </ReactMarkdown>\n );\n};\n\nconst RENDER_LANGUAGES = ['markdown', 'mermaid', 'math'];\n\nconst HIGHLIGHT_LANGUAGES = [\n '', 'javascript', 'typescript', 'python', 'rust', 'go', 'java', 'c', 'cpp',\n 'csharp', 'ruby', 'php', 'swift', 'kotlin', 'sql', 'bash', 'shell',\n 'html', 'css', 'json', 'yaml', 'toml', 'xml',\n 'docker', 'graphql', 'latex', 'tex',\n];\n\nconst LANGUAGE_OPTIONS = [\n { label: 'Plain text', value: '' },\n ...HIGHLIGHT_LANGUAGES.filter(Boolean).map(lang => ({ label: `Syntax · ${lang}`, value: lang })),\n ...RENDER_LANGUAGES.map(lang => ({ label: `Render · ${lang}`, value: lang })),\n];\n\nfunction renderLang(lang: string): string {\n // Legacy documents keep their r- attributes; the selector uses canonical names.\n const canonical = lang.startsWith('r-') ? lang.slice(2) : lang;\n return RENDER_LANGUAGES.includes(canonical) ? canonical : '';\n}\n\nfunction highlightLang(lang: string): string {\n if (lang === 'math' || lang === 'latex' || lang === 'tex') return 'latex';\n return lang;\n}\n\nconst CodeBlockNodeView: React.FC<NodeViewProps> = ({\n node,\n editor,\n updateAttributes,\n}) => {\n const editable = useNodeEditable(editor);\n const language = node.attrs.language || '';\n const textContent = node.textContent;\n const hasLanguage = !!language;\n const renderLanguage = renderLang(language);\n const isRenderable = !!renderLanguage;\n\n const [isEditing, setIsEditing] = useState(true);\n\n useEffect(() => {\n if (!hasLanguage) setIsEditing(true);\n }, [language, hasLanguage]);\n\n // Read-only viewers always get the rendered/preview state, never the editor chrome.\n useEffect(() => {\n if (!editable) setIsEditing(false);\n }, [editable]);\n\n const showEditing = isEditing && editable;\n\n const editIcon = (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M11 4H4a2 2 0 00-2 2v14a2 2 0 002 2h14a2 2 0 002-2v-7\" />\n <path d=\"M18.5 2.5a2.121 2.121 0 013 3L12 15l-4 1 1-4 9.5-9.5z\" />\n </svg>\n );\n const previewIcon = (\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z\" />\n <circle cx=\"12\" cy=\"12\" r=\"3\" />\n </svg>\n );\n\n const renderPreview = () => {\n if (renderLanguage === 'mermaid') {\n return textContent.trim()\n ? <MermaidRenderer code={textContent} />\n : <p className=\"rte-codeblock__placeholder\">Enter mermaid diagram code...</p>;\n }\n if (renderLanguage === 'math') {\n return textContent.trim()\n ? <KatexRenderer code={textContent} />\n : <p className=\"rte-codeblock__placeholder\">Enter KaTeX math formula...</p>;\n }\n if (renderLanguage === 'markdown') {\n return textContent.trim()\n ? <MarkdownRenderer code={textContent} />\n : <p className=\"rte-codeblock__placeholder\">Enter Markdown content...</p>;\n }\n return null;\n };\n\n const displayLabel = renderLanguage ? renderLanguage + ' (render)' : language || 'plain text';\n\n return (\n <NodeViewWrapper className={`rte-codeblock-wrapper ${!isEditing && hasLanguage ? 'rte-codeblock-wrapper--preview' : ''}`}>\n {showEditing ? (\n <>\n <div className=\"rte-codeblock__header\">\n <div contentEditable={false} className=\"rte-codeblock__lang-control\">\n <Select\n className=\"rte-codeblock__lang-select\"\n aria-label=\"Code language\"\n value={renderLanguage || language}\n options={LANGUAGE_OPTIONS}\n onChange={(next) => {\n if (editor.isDestroyed || !editor.isEditable) return;\n const selected = String(next);\n updateAttributes({ language: selected });\n if (!selected) setIsEditing(true);\n }}\n />\n </div>\n {hasLanguage && (\n <button\n type=\"button\"\n className=\"rte-codeblock__preview-btn\"\n onClick={() => setIsEditing(false)}\n contentEditable={false}\n >\n {previewIcon} Preview\n </button>\n )}\n </div>\n <pre className=\"rte-codeblock__editable-pre\">\n <NodeViewContent as={'code' as any} />\n </pre>\n </>\n ) : isRenderable ? (\n <div\n className=\"rte-codeblock__render-preview\"\n contentEditable={false}\n onDoubleClick={() => { if (editable) setIsEditing(true); }}\n >\n <div className=\"rte-codeblock__preview-toolbar\" contentEditable={false}>\n <span className=\"rte-codeblock__preview-label\">{displayLabel}</span>\n {editable && (\n <button\n type=\"button\"\n className=\"rte-codeblock__preview-edit-btn\"\n onClick={() => setIsEditing(true)}\n >\n {editIcon} Edit\n </button>\n )}\n </div>\n <div className=\"rte-codeblock__render-body\">\n {renderPreview()}\n </div>\n {/* 预览分支也必须挂载 contentDOM(隐藏):不渲染 NodeViewContent 时\n tiptap 会把代码文本以 data-node-view-content-react 形式再渲染\n 一份裸露副本,只读 / 预览下出现重复的原始代码。 */}\n <div style={{ display: 'none' }} aria-hidden=\"true\">\n <NodeViewContent as={'code' as any} />\n </div>\n </div>\n ) : (\n <div\n className=\"rte-codeblock__syntax-preview\"\n contentEditable={false}\n onDoubleClick={() => { if (editable) setIsEditing(true); }}\n >\n <div className=\"rte-codeblock__preview-toolbar\" contentEditable={false}>\n <span className=\"rte-codeblock__preview-label\">{displayLabel}</span>\n {editable && (\n <button\n type=\"button\"\n className=\"rte-codeblock__preview-edit-btn\"\n onClick={() => setIsEditing(true)}\n >\n {editIcon} Edit\n </button>\n )}\n </div>\n <SyntaxHighlighter\n style={oneLight as Record<string, React.CSSProperties>}\n language={highlightLang(language)}\n PreTag=\"div\"\n customStyle={{\n borderRadius: '0 0 0.5rem 0.5rem',\n fontSize: '0.875em',\n padding: '1em',\n margin: '0',\n }}\n >\n {textContent || ' '}\n </SyntaxHighlighter>\n <div style={{ display: 'none' }} aria-hidden=\"true\">\n <NodeViewContent as={'code' as any} />\n </div>\n </div>\n )}\n </NodeViewWrapper>\n );\n};\n\nconst backtickInputRegex = /^```([a-z-]*)[\\s\\n]$/;\nconst tildeInputRegex = /^~~~([a-z-]*)[\\s\\n]$/;\nconst tableShortcutRegex = /^(?:```|~~~)table(?:(\\d+)[x×X*](\\d+))?\\s?$/;\n\nexport const CodeBlockExtension = Node.create({\n name: 'codeBlock',\n group: 'block',\n content: 'text*',\n marks: '',\n code: true,\n defining: true,\n\n addAttributes() {\n return {\n language: {\n default: null,\n parseHTML: (element) => {\n const classAttr = element.querySelector('code')?.className ||\n element.className || '';\n const match = /language-([\\w-]+)/.exec(classAttr);\n return match?.[1] || element.getAttribute('data-language') || null;\n },\n renderHTML: (attributes) => {\n if (!attributes.language) return {};\n return { 'data-language': attributes.language };\n },\n },\n };\n },\n\n parseHTML() {\n return [\n {\n tag: 'pre',\n preserveWhitespace: 'full',\n },\n ];\n },\n\n renderHTML({ node, HTMLAttributes }) {\n return [\n 'pre',\n mergeAttributes(HTMLAttributes, { 'data-language': node.attrs.language }),\n ['code', { class: node.attrs.language ? `language-${node.attrs.language}` : undefined }, 0],\n ];\n },\n\n addInputRules() {\n return [\n textblockTypeInputRule({\n find: backtickInputRegex,\n type: this.type,\n getAttributes: (match) => {\n if (match[1]?.startsWith('table')) return false;\n return { language: match[1] || null };\n },\n }),\n textblockTypeInputRule({\n find: tildeInputRegex,\n type: this.type,\n getAttributes: (match) => {\n if (match[1]?.startsWith('table')) return false;\n return { language: match[1] || null };\n },\n }),\n ];\n },\n\n addProseMirrorPlugins() {\n const editorRef = this.editor;\n return [\n new Plugin({\n key: new PluginKey('tableShortcut'),\n props: {\n handleTextInput(view, from, to, text) {\n if (!editorRef.isEditable || text !== ' ') return false;\n const { state } = view;\n const $from = state.doc.resolve(from);\n const blockStart = $from.start();\n const textBefore = state.doc.textBetween(blockStart, from, '\\0');\n const full = textBefore + ' ';\n const m = tableShortcutRegex.exec(full);\n if (!m) return false;\n\n const rows = Math.min(Math.max(parseInt(m[1], 10) || 3, 1), 20);\n const cols = Math.min(Math.max(parseInt(m[2], 10) || 3, 1), 20);\n dispatchTable(view, blockStart, to, rows, cols);\n return true;\n },\n handleKeyDown(view, event) {\n if (!editorRef.isEditable || event.key !== 'Enter') return false;\n const { state } = view;\n const { $from } = state.selection;\n if (!$from.parent.isTextblock) return false;\n const blockStart = $from.start();\n const textBefore = state.doc.textBetween(blockStart, $from.pos, '\\0');\n const m = tableShortcutRegex.exec(textBefore);\n if (!m) return false;\n\n event.preventDefault();\n const rows = Math.min(Math.max(parseInt(m[1], 10) || 3, 1), 20);\n const cols = Math.min(Math.max(parseInt(m[2], 10) || 3, 1), 20);\n dispatchTable(view, blockStart, $from.pos, rows, cols);\n return true;\n },\n },\n }),\n ];\n\n function dispatchTable(view: typeof editorRef.view, from: number, to: number, rows: number, cols: number) {\n const { state } = view;\n const $from = state.doc.resolve(from);\n const blockNode = $from.parent;\n const blockPos = $from.before();\n\n const tableType = state.schema.nodes.table;\n const rowType = state.schema.nodes.tableRow;\n const headerType = state.schema.nodes.tableHeader;\n const cellType = state.schema.nodes.tableCell;\n if (!tableType || !rowType || !cellType) return;\n\n const emptyParagraph = state.schema.nodes.paragraph.create();\n const buildRow = (isHeader: boolean) => {\n const type = isHeader && headerType ? headerType : cellType;\n const cells = Array.from({ length: cols }, () => type.create(null, emptyParagraph));\n return rowType.create(null, cells);\n };\n\n const tableRows = [\n buildRow(true),\n ...Array.from({ length: rows - 1 }, () => buildRow(false)),\n ];\n const table = tableType.create(null, tableRows);\n const tr = state.tr.replaceWith(blockPos, blockPos + blockNode.nodeSize, table);\n view.dispatch(tr);\n }\n },\n\n addKeyboardShortcuts() {\n return {\n 'Mod-Alt-c': () => this.editor.isEditable && this.editor.commands.toggleNode('codeBlock', 'paragraph'),\n Tab: ({ editor }) => {\n if (!editor.isEditable) return false;\n if (editor.isActive('codeBlock')) {\n editor.commands.insertContent('\\t');\n return true;\n }\n return false;\n },\n Enter: ({ editor }) => {\n if (!editor.isEditable) return false;\n if (!editor.isActive('codeBlock')) return false;\n editor.commands.newlineInCode();\n return true;\n },\n ArrowDown: ({ editor }) => {\n if (!editor.isEditable) return false;\n if (!editor.isActive('codeBlock')) return false;\n const { $from } = editor.state.selection;\n const isAtEnd = $from.parentOffset === $from.parent.content.size;\n if (!isAtEnd) return false;\n const after = $from.after();\n if (after === undefined) return false;\n const nodeAfter = editor.state.doc.nodeAt(after);\n if (nodeAfter) return false;\n editor.commands.exitCode();\n return true;\n },\n };\n },\n\n addNodeView() {\n return ReactNodeViewRenderer(CodeBlockNodeView);\n },\n});\n\nexport default CodeBlockExtension;\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"CommentMark.js","names":[],"sources":["../../../../../src/components/pro/RichTextEditor/extensions/CommentMark.ts"],"sourcesContent":["import { Mark, mergeAttributes } from '@tiptap/react';\n\nexport interface CommentThread {\n id: string;\n resolved: boolean;\n comments: CommentItem[];\n createdAt: number;\n}\n\nexport interface CommentItem {\n id: string;\n author: string;\n text: string;\n createdAt: number;\n}\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n commentMark: {\n setComment: (id: string) => ReturnType;\n unsetComment: () => ReturnType;\n };\n }\n}\n\nexport const CommentMark = Mark.create({\n name: 'comment',\n inclusive: false,\n excludes: '',\n\n addAttributes() {\n return {\n commentId: {\n default: null,\n parseHTML: (el) => el.getAttribute('data-comment-id'),\n renderHTML: (attrs) => {\n if (!attrs.commentId) return {};\n return { 'data-comment-id': attrs.commentId };\n },\n },\n resolved: {\n default: false,\n parseHTML: (el) => el.getAttribute('data-resolved') === 'true',\n renderHTML: (attrs) => {\n if (!attrs.resolved) return {};\n return { 'data-resolved': 'true' };\n },\n },\n };\n },\n\n parseHTML() {\n return [{ tag: 'span[data-comment-id]' }];\n },\n\n renderHTML({ HTMLAttributes }) {\n return ['span', mergeAttributes(HTMLAttributes, {\n class: `rte-comment-mark ${HTMLAttributes['data-resolved'] === 'true' ? 'rte-comment-mark--resolved' : ''}`,\n }), 0];\n },\n\n addCommands() {\n return {\n setComment: (id: string) => ({ commands, editor }) => {\n if (!editor.isEditable) return false;\n return commands.setMark(this.name, { commentId: id });\n },\n unsetComment: () => ({ commands, editor }) => {\n if (!editor.isEditable) return false;\n return commands.unsetMark(this.name);\n },\n };\n },\n});\n\nexport default CommentMark;\n"],"mappings":";;AAyBA,IAAa,IAAc,EAAK,OAAO;CACrC,MAAM;CACN,WAAW;CACX,UAAU;CAEV,gBAAgB;EACd,OAAO;GACL,WAAW;IACT,SAAS;IACT,YAAY,MAAO,EAAG,aAAa,iBAAiB;IACpD,aAAa,MACN,EAAM,YACJ,EAAE,mBAAmB,EAAM,UAAU,IADf,CAAC;GAGlC;GACA,UAAU;IACR,SAAS;IACT,YAAY,MAAO,EAAG,aAAa,eAAe,MAAM;IACxD,aAAa,MACN,EAAM,WACJ,EAAE,iBAAiB,OAAO,IADL,CAAC;GAGjC;EACF;CACF;CAEA,YAAY;EACV,OAAO,CAAC,EAAE,KAAK,wBAAwB,CAAC;CAC1C;CAEA,WAAW,EAAE,qBAAkB;EAC7B,OAAO;GAAC;GAAQ,EAAgB,GAAgB,EAC9C,OAAO,oBAAoB,EAAe,qBAAqB,SAAS,+BAA+B,KACzG,CAAC;GAAG;EAAC;CACP;CAEA,cAAc;EACZ,OAAO;GACL,aAAa,OAAgB,EAAE,aAAU,gBAClC,EAAO,aACL,EAAS,QAAQ,KAAK,MAAM,EAAE,WAAW,EAAG,CAAC,IADrB;GAGjC,qBAAqB,EAAE,aAAU,gBAC1B,EAAO,aACL,EAAS,UAAU,KAAK,IAAI,IADJ;EAGnC;CACF;AACF,CAAC"}
1
+ {"version":3,"file":"CommentMark.js","names":["CommentMark","Mark","el","attrs","mergeAttributes","HTMLAttributes","editor","commands","id"],"sources":["../../../../../src/components/pro/RichTextEditor/extensions/CommentMark.ts"],"sourcesContent":["import { Mark, mergeAttributes } from '@tiptap/react';\n\nexport interface CommentThread {\n id: string;\n resolved: boolean;\n comments: CommentItem[];\n createdAt: number;\n}\n\nexport interface CommentItem {\n id: string;\n author: string;\n text: string;\n createdAt: number;\n}\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n commentMark: {\n setComment: (id: string) => ReturnType;\n unsetComment: () => ReturnType;\n };\n }\n}\n\nexport const CommentMark = Mark.create({\n name: 'comment',\n inclusive: false,\n excludes: '',\n\n addAttributes() {\n return {\n commentId: {\n default: null,\n parseHTML: (el) => el.getAttribute('data-comment-id'),\n renderHTML: (attrs) => {\n if (!attrs.commentId) return {};\n return { 'data-comment-id': attrs.commentId };\n },\n },\n resolved: {\n default: false,\n parseHTML: (el) => el.getAttribute('data-resolved') === 'true',\n renderHTML: (attrs) => {\n if (!attrs.resolved) return {};\n return { 'data-resolved': 'true' };\n },\n },\n };\n },\n\n parseHTML() {\n return [{ tag: 'span[data-comment-id]' }];\n },\n\n renderHTML({ HTMLAttributes }) {\n return ['span', mergeAttributes(HTMLAttributes, {\n class: `rte-comment-mark ${HTMLAttributes['data-resolved'] === 'true' ? 'rte-comment-mark--resolved' : ''}`,\n }), 0];\n },\n\n addCommands() {\n return {\n setComment: (id: string) => ({ commands, editor }) => {\n if (!editor.isEditable) return false;\n return commands.setMark(this.name, { commentId: id });\n },\n unsetComment: () => ({ commands, editor }) => {\n if (!editor.isEditable) return false;\n return commands.unsetMark(this.name);\n },\n };\n },\n});\n\nexport default CommentMark;\n"],"mappings":";;AAyBA,IAAaA,IAAcC,EAAK,OAAO;CACrC,MAAM;CACN,WAAW;CACX,UAAU;CAEV,gBAAgB;EACd,OAAO;GACL,WAAW;IACT,SAAS;IACT,YAAY,MAAOC,EAAG,aAAa,iBAAiB;IACpD,aAAa,MACNC,EAAM,YACJ,EAAE,mBAAmBA,EAAM,UAAU,IADf,CAAC;GAGlC;GACA,UAAU;IACR,SAAS;IACT,YAAY,MAAOD,EAAG,aAAa,eAAe,MAAM;IACxD,aAAa,MACNC,EAAM,WACJ,EAAE,iBAAiB,OAAO,IADL,CAAC;GAGjC;EACF;CACF;CAEA,YAAY;EACV,OAAO,CAAC,EAAE,KAAK,wBAAwB,CAAC;CAC1C;CAEA,WAAW,EAAE,qBAAkB;EAC7B,OAAO;GAAC;GAAQC,EAAgBC,GAAgB,EAC9C,OAAO,oBAAoBA,EAAe,qBAAqB,SAAS,+BAA+B,KACzG,CAAC;GAAG;EAAC;CACP;CAEA,cAAc;EACZ,OAAO;GACL,aAAa,OAAgB,EAAE,aAAU,gBAClCC,EAAO,aACLC,EAAS,QAAQ,KAAK,MAAM,EAAE,WAAWC,EAAG,CAAC,IADrB;GAGjC,qBAAqB,EAAE,aAAU,gBAC1BF,EAAO,aACLC,EAAS,UAAU,KAAK,IAAI,IADJ;EAGnC;CACF;AACF,CAAC"}