dishui 0.0.64 → 0.0.66

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 (504) hide show
  1. package/dist/_virtual/_rolldown/runtime.js +10 -11
  2. package/dist/chart.js +12 -46
  3. package/dist/code-editor.js +16 -43
  4. package/dist/components/Badge/index.js +11 -13
  5. package/dist/components/Badge/index.js.map +1 -1
  6. package/dist/components/Button/index.js +62 -86
  7. package/dist/components/Button/index.js.map +1 -1
  8. package/dist/components/Card/index.d.ts +87 -0
  9. package/dist/components/Card/index.js +178 -44
  10. package/dist/components/Card/index.js.map +1 -1
  11. package/dist/components/Chart/Chart.js +25 -25
  12. package/dist/components/Chart/Chart.js.map +1 -1
  13. package/dist/components/Checkbox/index.js +57 -63
  14. package/dist/components/Checkbox/index.js.map +1 -1
  15. package/dist/components/ChoicePicker/index.d.ts +44 -0
  16. package/dist/components/ChoicePicker/index.js +81 -0
  17. package/dist/components/ChoicePicker/index.js.map +1 -0
  18. package/dist/components/Column/index.d.ts +28 -0
  19. package/dist/components/Column/index.js +30 -0
  20. package/dist/components/Column/index.js.map +1 -0
  21. package/dist/components/DateTimeInput/index.d.ts +44 -0
  22. package/dist/components/DateTimeInput/index.js +48 -0
  23. package/dist/components/DateTimeInput/index.js.map +1 -0
  24. package/dist/components/Demo/index.js +107 -107
  25. package/dist/components/Demo/index.js.map +1 -1
  26. package/dist/components/Divider/index.d.ts +20 -0
  27. package/dist/components/Divider/index.js +30 -0
  28. package/dist/components/Divider/index.js.map +1 -0
  29. package/dist/components/EmptyState/index.d.ts +4 -1
  30. package/dist/components/EmptyState/index.js +24 -24
  31. package/dist/components/EmptyState/index.js.map +1 -1
  32. package/dist/components/FileUploader/DropZone.js +134 -136
  33. package/dist/components/FileUploader/DropZone.js.map +1 -1
  34. package/dist/components/FileUploader/FileItem.js +159 -163
  35. package/dist/components/FileUploader/FileItem.js.map +1 -1
  36. package/dist/components/FileUploader/FileUploader.js +126 -127
  37. package/dist/components/FileUploader/FileUploader.js.map +1 -1
  38. package/dist/components/FileUploader/UploadQueue.js +62 -62
  39. package/dist/components/FileUploader/UploadQueue.js.map +1 -1
  40. package/dist/components/FloatWindow/index.d.ts +28 -0
  41. package/dist/components/GridLayout/index.d.ts +42 -0
  42. package/dist/components/Icon/index.d.ts +24 -0
  43. package/dist/components/Icon/index.js +26 -0
  44. package/dist/components/Icon/index.js.map +1 -0
  45. package/dist/components/Image/index.d.ts +33 -0
  46. package/dist/components/Image/index.js +44 -0
  47. package/dist/components/Image/index.js.map +1 -0
  48. package/dist/components/Input/index.js +196 -197
  49. package/dist/components/Input/index.js.map +1 -1
  50. package/dist/components/Label/index.js +62 -73
  51. package/dist/components/Label/index.js.map +1 -1
  52. package/dist/components/Layout/index.js +134 -139
  53. package/dist/components/Layout/index.js.map +1 -1
  54. package/dist/components/List/index.js +45 -43
  55. package/dist/components/List/index.js.map +1 -1
  56. package/dist/components/Markdown/Markdown.js +106 -103
  57. package/dist/components/Markdown/Markdown.js.map +1 -1
  58. package/dist/components/Markdown/codeThemes.js +24 -33
  59. package/dist/components/Markdown/codeThemes.js.map +1 -1
  60. package/dist/components/Markdown/markdownComponents.js +203 -208
  61. package/dist/components/Markdown/markdownComponents.js.map +1 -1
  62. package/dist/components/Markdown/parseCodeBlockMeta.js +22 -22
  63. package/dist/components/Markdown/parseCodeBlockMeta.js.map +1 -1
  64. package/dist/components/Markdown/useMarkdownSource.js +46 -46
  65. package/dist/components/Markdown/useMarkdownSource.js.map +1 -1
  66. package/dist/components/Markdown/useMarkmapRenderer.js +35 -36
  67. package/dist/components/Markdown/useMarkmapRenderer.js.map +1 -1
  68. package/dist/components/Markdown/useMermaidRenderer.js +41 -42
  69. package/dist/components/Markdown/useMermaidRenderer.js.map +1 -1
  70. package/dist/components/Modal/index.d.ts +7 -3
  71. package/dist/components/Modal/index.js +82 -70
  72. package/dist/components/Modal/index.js.map +1 -1
  73. package/dist/components/MultipleChoice/index.d.ts +44 -0
  74. package/dist/components/MultipleChoice/index.js +52 -0
  75. package/dist/components/MultipleChoice/index.js.map +1 -0
  76. package/dist/components/Notification/index.d.ts +17 -0
  77. package/dist/components/Page/index.d.ts +58 -0
  78. package/dist/components/Page/index.js +43 -0
  79. package/dist/components/Page/index.js.map +1 -0
  80. package/dist/components/PageHeader/index.js +28 -28
  81. package/dist/components/PageHeader/index.js.map +1 -1
  82. package/dist/components/ProtectedRoute/index.js +8 -9
  83. package/dist/components/ProtectedRoute/index.js.map +1 -1
  84. package/dist/components/Row/index.d.ts +28 -0
  85. package/dist/components/Row/index.js +30 -0
  86. package/dist/components/Row/index.js.map +1 -0
  87. package/dist/components/Select/index.js +251 -257
  88. package/dist/components/Select/index.js.map +1 -1
  89. package/dist/components/SidebarToggleButton/index.js +56 -59
  90. package/dist/components/SidebarToggleButton/index.js.map +1 -1
  91. package/dist/components/Slider/index.d.ts +39 -0
  92. package/dist/components/Slider/index.js +52 -0
  93. package/dist/components/Slider/index.js.map +1 -0
  94. package/dist/components/StatCard/index.d.ts +31 -1
  95. package/dist/components/StatCard/index.js +189 -58
  96. package/dist/components/StatCard/index.js.map +1 -1
  97. package/dist/components/Switch/index.d.ts +34 -0
  98. package/dist/components/Switch/index.js +55 -0
  99. package/dist/components/Switch/index.js.map +1 -0
  100. package/dist/components/Tab/index.d.ts +40 -0
  101. package/dist/components/Table/index.js +109 -103
  102. package/dist/components/Table/index.js.map +1 -1
  103. package/dist/components/Tabs/index.d.ts +19 -5
  104. package/dist/components/Tabs/index.js +30 -21
  105. package/dist/components/Tabs/index.js.map +1 -1
  106. package/dist/components/Text/index.d.ts +43 -0
  107. package/dist/components/Text/index.js +55 -0
  108. package/dist/components/Text/index.js.map +1 -0
  109. package/dist/components/Tooltip/index.d.ts +23 -0
  110. package/dist/components/Tooltip/index.js +34 -0
  111. package/dist/components/Tooltip/index.js.map +1 -0
  112. package/dist/components/Tree/Tree.js +205 -205
  113. package/dist/components/Tree/Tree.js.map +1 -1
  114. package/dist/components/pro/ArticleContextMenu/index.js +86 -87
  115. package/dist/components/pro/ArticleContextMenu/index.js.map +1 -1
  116. package/dist/components/pro/ArticleControl/ArticleControl2.js +250 -250
  117. package/dist/components/pro/ArticleControl/ArticleControl2.js.map +1 -1
  118. package/dist/components/pro/ArticleControl/buildHeadingTree.js +31 -32
  119. package/dist/components/pro/ArticleControl/buildHeadingTree.js.map +1 -1
  120. package/dist/components/pro/ArticleControl/useArticleToc.js +100 -102
  121. package/dist/components/pro/ArticleControl/useArticleToc.js.map +1 -1
  122. package/dist/components/pro/Calendar/Calendar.d.ts +10 -0
  123. package/dist/components/pro/Calendar/hooks/useCalendarDrag.d.ts +47 -0
  124. package/dist/components/pro/Calendar/hooks/useCalendarState.d.ts +56 -0
  125. package/dist/components/pro/Calendar/index.d.ts +7 -0
  126. package/dist/components/pro/Calendar/types.d.ts +151 -0
  127. package/dist/components/pro/Calendar/utils.d.ts +94 -0
  128. package/dist/components/pro/Chat/Chat.d.ts +6 -0
  129. package/dist/components/pro/Chat/index.d.ts +2 -0
  130. package/dist/components/pro/Chat/types.d.ts +84 -0
  131. package/dist/components/pro/CodeEditor/editors/CodeEditor.js +287 -320
  132. package/dist/components/pro/CodeEditor/editors/CodeEditor.js.map +1 -1
  133. package/dist/components/pro/CodeEditor/editors/MarkdownEditor.js +167 -221
  134. package/dist/components/pro/CodeEditor/editors/MarkdownEditor.js.map +1 -1
  135. package/dist/components/pro/CodeEditor/editors/markdownExtensions.js +594 -613
  136. package/dist/components/pro/CodeEditor/editors/markdownExtensions.js.map +1 -1
  137. package/dist/components/pro/CodeEditor/extensions/contextMenu.js +54 -55
  138. package/dist/components/pro/CodeEditor/extensions/contextMenu.js.map +1 -1
  139. package/dist/components/pro/CodeEditor/extensions/index.js +152 -160
  140. package/dist/components/pro/CodeEditor/extensions/index.js.map +1 -1
  141. package/dist/components/pro/CodeEditor/langs/index.js +7 -15
  142. package/dist/components/pro/CodeEditor/langs/index.js.map +1 -1
  143. package/dist/components/pro/CodeEditor/langs/javascript.js +11 -48
  144. package/dist/components/pro/CodeEditor/langs/javascript.js.map +1 -1
  145. package/dist/components/pro/CodeEditor/langs/python.js +4 -40
  146. package/dist/components/pro/CodeEditor/langs/python.js.map +1 -1
  147. package/dist/components/pro/CodeEditor/langs/snippets.js +118 -147
  148. package/dist/components/pro/CodeEditor/langs/snippets.js.map +1 -1
  149. package/dist/components/pro/CodeEditor/panels/FootnotePanel.js +153 -153
  150. package/dist/components/pro/CodeEditor/panels/FootnotePanel.js.map +1 -1
  151. package/dist/components/pro/CodeEditor/panels/HistoryPanel.js +180 -190
  152. package/dist/components/pro/CodeEditor/panels/HistoryPanel.js.map +1 -1
  153. package/dist/components/pro/CodeEditor/panels/OutlinePanel.js +130 -137
  154. package/dist/components/pro/CodeEditor/panels/OutlinePanel.js.map +1 -1
  155. package/dist/components/pro/CodeEditor/panels/TableOfContentsPanel.js +228 -242
  156. package/dist/components/pro/CodeEditor/panels/TableOfContentsPanel.js.map +1 -1
  157. package/dist/components/pro/CodeEditor/panels/VariablePanel.js +208 -248
  158. package/dist/components/pro/CodeEditor/panels/VariablePanel.js.map +1 -1
  159. package/dist/components/pro/CodeEditor/themes.js +513 -483
  160. package/dist/components/pro/CodeEditor/themes.js.map +1 -1
  161. package/dist/components/pro/CodeEditor/types.d.ts +1 -1
  162. package/dist/components/pro/CodeEditor/utils.js +171 -175
  163. package/dist/components/pro/CodeEditor/utils.js.map +1 -1
  164. package/dist/components/pro/DataTable/DataTable.js +305 -305
  165. package/dist/components/pro/DataTable/DataTable.js.map +1 -1
  166. package/dist/components/pro/DataTable/Filters.js +299 -314
  167. package/dist/components/pro/DataTable/Filters.js.map +1 -1
  168. package/dist/components/pro/DataTable/PivotPanel.js +203 -204
  169. package/dist/components/pro/DataTable/PivotPanel.js.map +1 -1
  170. package/dist/components/pro/DataTable/PivotView.js +142 -141
  171. package/dist/components/pro/DataTable/PivotView.js.map +1 -1
  172. package/dist/components/pro/DataTable/components/BulkActions.js +42 -42
  173. package/dist/components/pro/DataTable/components/BulkActions.js.map +1 -1
  174. package/dist/components/pro/DataTable/components/ColumnSelector.js +84 -84
  175. package/dist/components/pro/DataTable/components/ColumnSelector.js.map +1 -1
  176. package/dist/components/pro/DataTable/components/FilterBar.js +58 -58
  177. package/dist/components/pro/DataTable/components/FilterBar.js.map +1 -1
  178. package/dist/components/pro/DataTable/components/TableBody.js +93 -94
  179. package/dist/components/pro/DataTable/components/TableBody.js.map +1 -1
  180. package/dist/components/pro/DataTable/components/TableHeader.js +78 -78
  181. package/dist/components/pro/DataTable/components/TableHeader.js.map +1 -1
  182. package/dist/components/pro/DataTable/components/TablePagination.js +77 -77
  183. package/dist/components/pro/DataTable/components/TablePagination.js.map +1 -1
  184. package/dist/components/pro/DataTable/components/TableToolbar.js +40 -40
  185. package/dist/components/pro/DataTable/components/TableToolbar.js.map +1 -1
  186. package/dist/components/pro/DataTable/extension.js +5 -5
  187. package/dist/components/pro/DataTable/extension.js.map +1 -1
  188. package/dist/components/pro/DataTable/pivotEngine.js +84 -92
  189. package/dist/components/pro/DataTable/pivotEngine.js.map +1 -1
  190. package/dist/components/pro/DataTable/pivotExtension.js +93 -93
  191. package/dist/components/pro/DataTable/pivotExtension.js.map +1 -1
  192. package/dist/components/pro/DataTable/rowDetailExtension.js +30 -30
  193. package/dist/components/pro/DataTable/rowDetailExtension.js.map +1 -1
  194. package/dist/components/pro/DataTable/tanstack-table.js +45 -62
  195. package/dist/components/pro/DataTable/tanstack-table.js.map +1 -1
  196. package/dist/components/pro/DataTable/treeDataUtils.js +37 -48
  197. package/dist/components/pro/DataTable/treeDataUtils.js.map +1 -1
  198. package/dist/components/pro/DataTable/useColumnDragReorder.js +68 -68
  199. package/dist/components/pro/DataTable/useColumnDragReorder.js.map +1 -1
  200. package/dist/components/pro/DataTable/utils.js +156 -168
  201. package/dist/components/pro/DataTable/utils.js.map +1 -1
  202. package/dist/components/pro/FileExplorer/Breadcrumb.js +180 -180
  203. package/dist/components/pro/FileExplorer/Breadcrumb.js.map +1 -1
  204. package/dist/components/pro/FileExplorer/CreateDialog.js +78 -78
  205. package/dist/components/pro/FileExplorer/CreateDialog.js.map +1 -1
  206. package/dist/components/pro/FileExplorer/FileExplorer.js +202 -205
  207. package/dist/components/pro/FileExplorer/FileExplorer.js.map +1 -1
  208. package/dist/components/pro/FileExplorer/FileIcon.js +190 -190
  209. package/dist/components/pro/FileExplorer/FileIcon.js.map +1 -1
  210. package/dist/components/pro/FileExplorer/GridView.js +100 -100
  211. package/dist/components/pro/FileExplorer/GridView.js.map +1 -1
  212. package/dist/components/pro/FileExplorer/ListView.js +209 -209
  213. package/dist/components/pro/FileExplorer/ListView.js.map +1 -1
  214. package/dist/components/pro/FileExplorer/Toolbar.js +199 -199
  215. package/dist/components/pro/FileExplorer/Toolbar.js.map +1 -1
  216. package/dist/components/pro/Flow/Flow.js +920 -946
  217. package/dist/components/pro/Flow/Flow.js.map +1 -1
  218. package/dist/components/pro/Flow/FlowCanvas.js +1626 -1663
  219. package/dist/components/pro/Flow/FlowCanvas.js.map +1 -1
  220. package/dist/components/pro/Flow/archify/build.js +85 -94
  221. package/dist/components/pro/Flow/archify/build.js.map +1 -1
  222. package/dist/components/pro/Flow/archify/convert.js +512 -519
  223. package/dist/components/pro/Flow/archify/convert.js.map +1 -1
  224. package/dist/components/pro/Flow/archify/palette.js +87 -104
  225. package/dist/components/pro/Flow/archify/palette.js.map +1 -1
  226. package/dist/components/pro/Flow/archify/presets.js +34 -37
  227. package/dist/components/pro/Flow/archify/presets.js.map +1 -1
  228. package/dist/components/pro/Flow/archify/spec.js +7 -7
  229. package/dist/components/pro/Flow/archify/spec.js.map +1 -1
  230. package/dist/components/pro/Flow/canvas/AlignmentGuides.js +25 -25
  231. package/dist/components/pro/Flow/canvas/AlignmentGuides.js.map +1 -1
  232. package/dist/components/pro/Flow/canvas/GridRenderer.js +54 -55
  233. package/dist/components/pro/Flow/canvas/GridRenderer.js.map +1 -1
  234. package/dist/components/pro/Flow/canvas/MiniMapRenderer.js +54 -58
  235. package/dist/components/pro/Flow/canvas/MiniMapRenderer.js.map +1 -1
  236. package/dist/components/pro/Flow/canvas/PixiApp.js +105 -102
  237. package/dist/components/pro/Flow/canvas/PixiApp.js.map +1 -1
  238. package/dist/components/pro/Flow/canvas/SelectionOverlay.js +38 -38
  239. package/dist/components/pro/Flow/canvas/SelectionOverlay.js.map +1 -1
  240. package/dist/components/pro/Flow/canvas/ViewportContainer.js +117 -117
  241. package/dist/components/pro/Flow/canvas/ViewportContainer.js.map +1 -1
  242. package/dist/components/pro/Flow/constants.js +266 -278
  243. package/dist/components/pro/Flow/constants.js.map +1 -1
  244. package/dist/components/pro/Flow/context/FlowAIContext.js +27 -28
  245. package/dist/components/pro/Flow/context/FlowAIContext.js.map +1 -1
  246. package/dist/components/pro/Flow/context/FlowContext.js +60 -61
  247. package/dist/components/pro/Flow/context/FlowContext.js.map +1 -1
  248. package/dist/components/pro/Flow/context/FlowUIContext.js +115 -117
  249. package/dist/components/pro/Flow/context/FlowUIContext.js.map +1 -1
  250. package/dist/components/pro/Flow/edges/EdgeRenderer.js +135 -138
  251. package/dist/components/pro/Flow/edges/EdgeRenderer.js.map +1 -1
  252. package/dist/components/pro/Flow/edges/edgeMarkers.js +11 -14
  253. package/dist/components/pro/Flow/edges/edgeMarkers.js.map +1 -1
  254. package/dist/components/pro/Flow/edges/edgePaths.js +351 -367
  255. package/dist/components/pro/Flow/edges/edgePaths.js.map +1 -1
  256. package/dist/components/pro/Flow/hooks/useAlignmentGuides.js +49 -52
  257. package/dist/components/pro/Flow/hooks/useAlignmentGuides.js.map +1 -1
  258. package/dist/components/pro/Flow/hooks/useClipboard.js +154 -154
  259. package/dist/components/pro/Flow/hooks/useClipboard.js.map +1 -1
  260. package/dist/components/pro/Flow/hooks/useCompactMode.js +17 -17
  261. package/dist/components/pro/Flow/hooks/useCompactMode.js.map +1 -1
  262. package/dist/components/pro/Flow/hooks/useDeleteSelection.js +40 -40
  263. package/dist/components/pro/Flow/hooks/useDeleteSelection.js.map +1 -1
  264. package/dist/components/pro/Flow/hooks/useDraggablePanel.js +51 -51
  265. package/dist/components/pro/Flow/hooks/useDraggablePanel.js.map +1 -1
  266. package/dist/components/pro/Flow/hooks/useEdgeMutations.js +157 -157
  267. package/dist/components/pro/Flow/hooks/useEdgeMutations.js.map +1 -1
  268. package/dist/components/pro/Flow/hooks/useFlowImportExport.js +190 -201
  269. package/dist/components/pro/Flow/hooks/useFlowImportExport.js.map +1 -1
  270. package/dist/components/pro/Flow/hooks/useKeyboardShortcuts.js +32 -38
  271. package/dist/components/pro/Flow/hooks/useKeyboardShortcuts.js.map +1 -1
  272. package/dist/components/pro/Flow/hooks/useLayoutActions.js +172 -182
  273. package/dist/components/pro/Flow/hooks/useLayoutActions.js.map +1 -1
  274. package/dist/components/pro/Flow/hooks/useLineMutations.js +57 -57
  275. package/dist/components/pro/Flow/hooks/useLineMutations.js.map +1 -1
  276. package/dist/components/pro/Flow/hooks/useMindMap.js +229 -238
  277. package/dist/components/pro/Flow/hooks/useMindMap.js.map +1 -1
  278. package/dist/components/pro/Flow/hooks/useNodeMutations.js +102 -102
  279. package/dist/components/pro/Flow/hooks/useNodeMutations.js.map +1 -1
  280. package/dist/components/pro/Flow/hooks/usePdfExport.js +55 -56
  281. package/dist/components/pro/Flow/hooks/usePdfExport.js.map +1 -1
  282. package/dist/components/pro/Flow/hooks/usePixiApp.js +55 -57
  283. package/dist/components/pro/Flow/hooks/usePixiApp.js.map +1 -1
  284. package/dist/components/pro/Flow/hooks/useResizablePanel.js +31 -31
  285. package/dist/components/pro/Flow/hooks/useResizablePanel.js.map +1 -1
  286. package/dist/components/pro/Flow/hooks/useSelection.js +69 -69
  287. package/dist/components/pro/Flow/hooks/useSelection.js.map +1 -1
  288. package/dist/components/pro/Flow/hooks/useUndoRedo.js +27 -27
  289. package/dist/components/pro/Flow/hooks/useUndoRedo.js.map +1 -1
  290. package/dist/components/pro/Flow/hooks/useViewport.js +28 -28
  291. package/dist/components/pro/Flow/hooks/useViewport.js.map +1 -1
  292. package/dist/components/pro/Flow/lines/FreehandTool.js +63 -63
  293. package/dist/components/pro/Flow/lines/FreehandTool.js.map +1 -1
  294. package/dist/components/pro/Flow/lines/GeometricLineTool.js +80 -80
  295. package/dist/components/pro/Flow/lines/GeometricLineTool.js.map +1 -1
  296. package/dist/components/pro/Flow/lines/LineRenderer.js +88 -88
  297. package/dist/components/pro/Flow/lines/LineRenderer.js.map +1 -1
  298. package/dist/components/pro/Flow/lines/lineSmoothing.js +32 -34
  299. package/dist/components/pro/Flow/lines/lineSmoothing.js.map +1 -1
  300. package/dist/components/pro/Flow/nodes/DataNodeView.js +236 -222
  301. package/dist/components/pro/Flow/nodes/DataNodeView.js.map +1 -1
  302. package/dist/components/pro/Flow/nodes/MediaContent.js +236 -246
  303. package/dist/components/pro/Flow/nodes/MediaContent.js.map +1 -1
  304. package/dist/components/pro/Flow/nodes/MediaOverlay.js +63 -63
  305. package/dist/components/pro/Flow/nodes/MediaOverlay.js.map +1 -1
  306. package/dist/components/pro/Flow/nodes/Model3DView.js +111 -113
  307. package/dist/components/pro/Flow/nodes/Model3DView.js.map +1 -1
  308. package/dist/components/pro/Flow/nodes/NodeHandles.js +74 -80
  309. package/dist/components/pro/Flow/nodes/NodeHandles.js.map +1 -1
  310. package/dist/components/pro/Flow/nodes/NodeRenderer.js +303 -314
  311. package/dist/components/pro/Flow/nodes/NodeRenderer.js.map +1 -1
  312. package/dist/components/pro/Flow/nodes/NodeText.js +25 -29
  313. package/dist/components/pro/Flow/nodes/NodeText.js.map +1 -1
  314. package/dist/components/pro/Flow/nodes/aiClient.js +124 -137
  315. package/dist/components/pro/Flow/nodes/aiClient.js.map +1 -1
  316. package/dist/components/pro/Flow/nodes/animAnchors.js +42 -49
  317. package/dist/components/pro/Flow/nodes/animAnchors.js.map +1 -1
  318. package/dist/components/pro/Flow/nodes/dataUtils.js +246 -267
  319. package/dist/components/pro/Flow/nodes/dataUtils.js.map +1 -1
  320. package/dist/components/pro/Flow/nodes/nodeUtils.js +23 -28
  321. package/dist/components/pro/Flow/nodes/nodeUtils.js.map +1 -1
  322. package/dist/components/pro/Flow/nodes/shapes.js +556 -591
  323. package/dist/components/pro/Flow/nodes/shapes.js.map +1 -1
  324. package/dist/components/pro/Flow/nodes/svgIconTexture.js +37 -39
  325. package/dist/components/pro/Flow/nodes/svgIconTexture.js.map +1 -1
  326. package/dist/components/pro/Flow/nodes/svgIcons.js +684 -689
  327. package/dist/components/pro/Flow/nodes/svgIcons.js.map +1 -1
  328. package/dist/components/pro/Flow/panels/AIPanel.js +464 -491
  329. package/dist/components/pro/Flow/panels/AIPanel.js.map +1 -1
  330. package/dist/components/pro/Flow/panels/Breadcrumb.js +41 -41
  331. package/dist/components/pro/Flow/panels/Breadcrumb.js.map +1 -1
  332. package/dist/components/pro/Flow/panels/ContextMenu.js +37 -37
  333. package/dist/components/pro/Flow/panels/ContextMenu.js.map +1 -1
  334. package/dist/components/pro/Flow/panels/DataInspectorSection.js +428 -432
  335. package/dist/components/pro/Flow/panels/DataInspectorSection.js.map +1 -1
  336. package/dist/components/pro/Flow/panels/ExpandableTextarea.js +61 -62
  337. package/dist/components/pro/Flow/panels/ExpandableTextarea.js.map +1 -1
  338. package/dist/components/pro/Flow/panels/FlowPanelGroup.js +114 -114
  339. package/dist/components/pro/Flow/panels/FlowPanelGroup.js.map +1 -1
  340. package/dist/components/pro/Flow/panels/FlowToolbar.js +347 -391
  341. package/dist/components/pro/Flow/panels/FlowToolbar.js.map +1 -1
  342. package/dist/components/pro/Flow/panels/InspectorPanel.js +1792 -1798
  343. package/dist/components/pro/Flow/panels/InspectorPanel.js.map +1 -1
  344. package/dist/components/pro/Flow/panels/OutlinePanel.js +242 -244
  345. package/dist/components/pro/Flow/panels/OutlinePanel.js.map +1 -1
  346. package/dist/components/pro/Flow/panels/PresentationMode.js +137 -138
  347. package/dist/components/pro/Flow/panels/PresentationMode.js.map +1 -1
  348. package/dist/components/pro/Flow/panels/ProjectTitle.js +46 -46
  349. package/dist/components/pro/Flow/panels/ProjectTitle.js.map +1 -1
  350. package/dist/components/pro/Flow/panels/ShapePalette.js +557 -567
  351. package/dist/components/pro/Flow/panels/ShapePalette.js.map +1 -1
  352. package/dist/components/pro/Flow/panels/toolbarIcons.d.ts +0 -1
  353. package/dist/components/pro/Flow/panels/toolbarIcons.js +508 -557
  354. package/dist/components/pro/Flow/panels/toolbarIcons.js.map +1 -1
  355. package/dist/components/pro/Flow/types.js +26 -26
  356. package/dist/components/pro/Flow/types.js.map +1 -1
  357. package/dist/components/pro/Flow/utils/dashedLine.js +113 -117
  358. package/dist/components/pro/Flow/utils/dashedLine.js.map +1 -1
  359. package/dist/components/pro/Flow/utils/gradient.js +55 -55
  360. package/dist/components/pro/Flow/utils/gradient.js.map +1 -1
  361. package/dist/components/pro/Flow/utils/pdfExport.js +50 -89
  362. package/dist/components/pro/Flow/utils/pdfExport.js.map +1 -1
  363. package/dist/components/pro/Flow/utils/themeColor.js +185 -195
  364. package/dist/components/pro/Flow/utils/themeColor.js.map +1 -1
  365. package/dist/components/pro/Gantt/Gantt.d.ts +7 -0
  366. package/dist/components/pro/Gantt/hooks/useGanttDrag.d.ts +31 -0
  367. package/dist/components/pro/Gantt/hooks/useGanttState.d.ts +58 -0
  368. package/dist/components/pro/Gantt/index.d.ts +6 -0
  369. package/dist/components/pro/Gantt/types.d.ts +478 -0
  370. package/dist/components/pro/Gantt/utils.d.ts +124 -0
  371. package/dist/components/pro/Resizable/Resizable.d.ts +30 -0
  372. package/dist/components/pro/Resizable/index.d.ts +2 -0
  373. package/dist/components/pro/RichTextEditor/AIRewrite.js +323 -334
  374. package/dist/components/pro/RichTextEditor/AIRewrite.js.map +1 -1
  375. package/dist/components/pro/RichTextEditor/BlockHandle.js +314 -316
  376. package/dist/components/pro/RichTextEditor/BlockHandle.js.map +1 -1
  377. package/dist/components/pro/RichTextEditor/BubbleToolbar.js +97 -97
  378. package/dist/components/pro/RichTextEditor/BubbleToolbar.js.map +1 -1
  379. package/dist/components/pro/RichTextEditor/CommentDialog.js +88 -88
  380. package/dist/components/pro/RichTextEditor/CommentDialog.js.map +1 -1
  381. package/dist/components/pro/RichTextEditor/CommentPanel.js +240 -240
  382. package/dist/components/pro/RichTextEditor/CommentPanel.js.map +1 -1
  383. package/dist/components/pro/RichTextEditor/CommentPopover.js +234 -234
  384. package/dist/components/pro/RichTextEditor/CommentPopover.js.map +1 -1
  385. package/dist/components/pro/RichTextEditor/ContextMenu.js +251 -252
  386. package/dist/components/pro/RichTextEditor/ContextMenu.js.map +1 -1
  387. package/dist/components/pro/RichTextEditor/RichTextEditor.js +267 -271
  388. package/dist/components/pro/RichTextEditor/RichTextEditor.js.map +1 -1
  389. package/dist/components/pro/RichTextEditor/SlashMenu.js +214 -214
  390. package/dist/components/pro/RichTextEditor/SlashMenu.js.map +1 -1
  391. package/dist/components/pro/RichTextEditor/Toolbar/ColorPicker.js +44 -75
  392. package/dist/components/pro/RichTextEditor/Toolbar/ColorPicker.js.map +1 -1
  393. package/dist/components/pro/RichTextEditor/Toolbar/FloatingDialogMenu.js +261 -261
  394. package/dist/components/pro/RichTextEditor/Toolbar/FloatingDialogMenu.js.map +1 -1
  395. package/dist/components/pro/RichTextEditor/Toolbar/MarkdownTemplates.js +172 -526
  396. package/dist/components/pro/RichTextEditor/Toolbar/MarkdownTemplates.js.map +1 -1
  397. package/dist/components/pro/RichTextEditor/Toolbar/SelectDropdown.js +112 -114
  398. package/dist/components/pro/RichTextEditor/Toolbar/SelectDropdown.js.map +1 -1
  399. package/dist/components/pro/RichTextEditor/Toolbar/TableOpsMenu.js +194 -194
  400. package/dist/components/pro/RichTextEditor/Toolbar/TableOpsMenu.js.map +1 -1
  401. package/dist/components/pro/RichTextEditor/Toolbar/Toolbar.js +970 -973
  402. package/dist/components/pro/RichTextEditor/Toolbar/Toolbar.js.map +1 -1
  403. package/dist/components/pro/RichTextEditor/Toolbar/ToolbarButton.js +11 -12
  404. package/dist/components/pro/RichTextEditor/Toolbar/ToolbarButton.js.map +1 -1
  405. package/dist/components/pro/RichTextEditor/extensions/CodeBlockView.js +310 -344
  406. package/dist/components/pro/RichTextEditor/extensions/CodeBlockView.js.map +1 -1
  407. package/dist/components/pro/RichTextEditor/extensions/CommentMark.js +38 -39
  408. package/dist/components/pro/RichTextEditor/extensions/CommentMark.js.map +1 -1
  409. package/dist/components/pro/RichTextEditor/extensions/FloatingDialog.js +620 -625
  410. package/dist/components/pro/RichTextEditor/extensions/FloatingDialog.js.map +1 -1
  411. package/dist/components/pro/RichTextEditor/extensions/FontSize.js +25 -25
  412. package/dist/components/pro/RichTextEditor/extensions/FontSize.js.map +1 -1
  413. package/dist/components/pro/RichTextEditor/extensions/MarkdownBlock.js +167 -176
  414. package/dist/components/pro/RichTextEditor/extensions/MarkdownBlock.js.map +1 -1
  415. package/dist/components/pro/RichTextEditor/types.js +75 -75
  416. package/dist/components/pro/RichTextEditor/types.js.map +1 -1
  417. package/dist/contexts/AppContext.d.ts +1 -1
  418. package/dist/contexts/AppContext.js +216 -221
  419. package/dist/contexts/AppContext.js.map +1 -1
  420. package/dist/data-table.js +15 -41
  421. package/dist/data-table.js.map +1 -1
  422. package/dist/dishui.css +1 -1
  423. package/dist/flow.js +27 -83
  424. package/dist/hooks/useClickOutside.js +18 -18
  425. package/dist/hooks/useClickOutside.js.map +1 -1
  426. package/dist/hooks/useContainerElement.js +9 -9
  427. package/dist/hooks/useContainerElement.js.map +1 -1
  428. package/dist/hooks/useControllableState.js +33 -35
  429. package/dist/hooks/useControllableState.js.map +1 -1
  430. package/dist/hooks/useCopyToClipboard.js +16 -16
  431. package/dist/hooks/useCopyToClipboard.js.map +1 -1
  432. package/dist/hooks/useDebounce.js +14 -14
  433. package/dist/hooks/useDebounce.js.map +1 -1
  434. package/dist/hooks/useDraggable.js +50 -50
  435. package/dist/hooks/useDraggable.js.map +1 -1
  436. package/dist/hooks/useTableColumns.js +39 -42
  437. package/dist/hooks/useTableColumns.js.map +1 -1
  438. package/dist/hooks/useTableData.js +67 -68
  439. package/dist/hooks/useTableData.js.map +1 -1
  440. package/dist/index-nostyled.d.ts +8 -0
  441. package/dist/index.d.ts +29 -1
  442. package/dist/index.js +106 -236
  443. package/dist/layouts/MainLayout.js +56 -56
  444. package/dist/layouts/MainLayout.js.map +1 -1
  445. package/dist/layouts/Navbar.js +214 -214
  446. package/dist/layouts/Navbar.js.map +1 -1
  447. package/dist/layouts/Sidebar.js +184 -165
  448. package/dist/layouts/Sidebar.js.map +1 -1
  449. package/dist/layouts/headbar/Headbar.js +25 -25
  450. package/dist/layouts/headbar/Headbar.js.map +1 -1
  451. package/dist/layouts/headbar/HeadbarLangSwitcher.js +39 -39
  452. package/dist/layouts/headbar/HeadbarLangSwitcher.js.map +1 -1
  453. package/dist/layouts/headbar/HeadbarSearch.js +120 -120
  454. package/dist/layouts/headbar/HeadbarSearch.js.map +1 -1
  455. package/dist/layouts/headbar/HeadbarThemeSwitcher.js +27 -27
  456. package/dist/layouts/headbar/HeadbarThemeSwitcher.js.map +1 -1
  457. package/dist/layouts/headbar/HeadbarTitle.js +26 -26
  458. package/dist/layouts/headbar/HeadbarTitle.js.map +1 -1
  459. package/dist/lite.js +9 -24
  460. package/dist/markdown.js +4 -9
  461. package/dist/pages/components/Calendar/index.d.ts +3 -0
  462. package/dist/pages/components/Calendar/index.en.d.ts +3 -0
  463. package/dist/pages/components/Calendar/index.zh.d.ts +3 -0
  464. package/dist/pages/components/Chat/index.d.ts +3 -0
  465. package/dist/pages/components/Chat/index.en.d.ts +3 -0
  466. package/dist/pages/components/Chat/index.zh.d.ts +3 -0
  467. package/dist/pages/components/FloatWindow/index.d.ts +3 -0
  468. package/dist/pages/components/FloatWindow/index.en.d.ts +3 -0
  469. package/dist/pages/components/FloatWindow/index.zh.d.ts +3 -0
  470. package/dist/pages/components/Gantt/index.d.ts +3 -0
  471. package/dist/pages/components/Gantt/index.en.d.ts +3 -0
  472. package/dist/pages/components/Gantt/index.zh.d.ts +3 -0
  473. package/dist/pages/components/GridLayout/index.d.ts +3 -0
  474. package/dist/pages/components/GridLayout/index.en.d.ts +3 -0
  475. package/dist/pages/components/GridLayout/index.zh.d.ts +3 -0
  476. package/dist/pages/components/Notification/index.d.ts +3 -0
  477. package/dist/pages/components/Notification/index.en.d.ts +3 -0
  478. package/dist/pages/components/Notification/index.zh.d.ts +3 -0
  479. package/dist/pages/components/Resizable/index.d.ts +3 -0
  480. package/dist/pages/components/Resizable/index.en.d.ts +3 -0
  481. package/dist/pages/components/Resizable/index.zh.d.ts +3 -0
  482. package/dist/pages/components/Tab/index.d.ts +3 -0
  483. package/dist/pages/components/Tab/index.en.d.ts +3 -0
  484. package/dist/pages/components/Tab/index.zh.d.ts +3 -0
  485. package/dist/styles/themeStyles.js +87 -86
  486. package/dist/styles/themeStyles.js.map +1 -1
  487. package/dist/utils/cn.d.ts +13 -0
  488. package/dist/utils/cn.js +16 -0
  489. package/dist/utils/cn.js.map +1 -0
  490. package/dist/utils/i18n.js +690 -602
  491. package/dist/utils/i18n.js.map +1 -1
  492. package/dist/utils/menu.js +94 -94
  493. package/dist/utils/menu.js.map +1 -1
  494. package/dist/utils/rehype-code-meta.js +14 -14
  495. package/dist/utils/rehype-code-meta.js.map +1 -1
  496. package/dist/utils/remark-code-meta.js +9 -9
  497. package/dist/utils/remark-code-meta.js.map +1 -1
  498. package/dist/utils/routerBuilder.js +59 -58
  499. package/dist/utils/routerBuilder.js.map +1 -1
  500. package/dist/utils/selection.js +28 -29
  501. package/dist/utils/selection.js.map +1 -1
  502. package/dist/utils/themes.js +275 -255
  503. package/dist/utils/themes.js.map +1 -1
  504. package/package.json +23 -10
@@ -1 +1 @@
1
- {"version":3,"file":"BlockHandle.js","names":[],"sources":["../../../../src/components/pro/RichTextEditor/BlockHandle.tsx"],"sourcesContent":["import React, { useState, useEffect, useRef, useCallback } from 'react';\nimport type { Editor } from '@tiptap/react';\n\ninterface BlockHandleProps {\n editor: Editor;\n}\n\ninterface BlockInfo {\n pos: number;\n size: number;\n domTop: number;\n domBottom: number;\n}\n\nconst BlockHandle: React.FC<BlockHandleProps> = ({ editor }) => {\n const [visible, setVisible] = useState(false);\n const [handleTop, setHandleTop] = useState(0);\n const [showMenu, setShowMenu] = useState(false);\n const [currentBlockIndex, setCurrentBlockIndex] = useState(-1);\n const [isDragging, setIsDragging] = useState(false);\n const [dropIndicator, setDropIndicator] = useState<{ top: number } | null>(null);\n const menuRef = useRef<HTMLDivElement>(null);\n const handleRef = useRef<HTMLDivElement>(null);\n const hideTimer = useRef<ReturnType<typeof setTimeout> | null>(null);\n const hoveringHandle = useRef(false);\n\n const cancelHide = useCallback(() => {\n if (hideTimer.current) {\n clearTimeout(hideTimer.current);\n hideTimer.current = null;\n }\n }, []);\n\n const scheduleHide = useCallback(() => {\n cancelHide();\n hideTimer.current = setTimeout(() => {\n if (!hoveringHandle.current && !showMenu && !isDragging) {\n setVisible(false);\n }\n }, 200);\n }, [cancelHide, showMenu, isDragging]);\n\n const getBlocks = useCallback((): BlockInfo[] => {\n const wrapperEl = editor.view.dom.closest('.rte-editor-wrapper') as HTMLElement | null;\n if (!wrapperEl) return [];\n const wrapperRect = wrapperEl.getBoundingClientRect();\n const scrollTop = wrapperEl.scrollTop;\n const blocks: BlockInfo[] = [];\n\n editor.state.doc.forEach((node, offset) => {\n const domNode = editor.view.nodeDOM(offset) as HTMLElement | null;\n if (domNode) {\n const rect = domNode.getBoundingClientRect();\n blocks.push({\n pos: offset,\n size: node.nodeSize,\n domTop: rect.top - wrapperRect.top + scrollTop,\n domBottom: rect.bottom - wrapperRect.top + scrollTop,\n });\n }\n });\n return blocks;\n }, [editor]);\n\n const findBlockByClientY = useCallback((clientY: number): number => {\n const wrapperEl = editor.view.dom.closest('.rte-editor-wrapper') as HTMLElement | null;\n if (!wrapperEl) return -1;\n const wrapperRect = wrapperEl.getBoundingClientRect();\n const y = clientY - wrapperRect.top + wrapperEl.scrollTop;\n\n const blocks = getBlocks();\n for (let i = 0; i < blocks.length; i++) {\n const mid = (blocks[i].domTop + blocks[i].domBottom) / 2;\n if (y < mid) return i;\n }\n return blocks.length - 1;\n }, [editor, getBlocks]);\n\n const findDropSlot = useCallback((clientY: number): { slotIndex: number; indicatorTop: number } | null => {\n const wrapperEl = editor.view.dom.closest('.rte-editor-wrapper') as HTMLElement | null;\n if (!wrapperEl) return null;\n const wrapperRect = wrapperEl.getBoundingClientRect();\n const y = clientY - wrapperRect.top + wrapperEl.scrollTop;\n\n const blocks = getBlocks();\n if (blocks.length === 0) return null;\n\n let bestSlot = 0;\n let bestDist = Infinity;\n let bestTop = blocks[0].domTop;\n\n for (let i = 0; i <= blocks.length; i++) {\n const edgeY = i < blocks.length ? blocks[i].domTop : blocks[blocks.length - 1].domBottom;\n const dist = Math.abs(y - edgeY);\n if (dist < bestDist) {\n bestDist = dist;\n bestSlot = i;\n bestTop = edgeY;\n }\n }\n\n return { slotIndex: bestSlot, indicatorTop: bestTop };\n }, [getBlocks]);\n\n useEffect(() => {\n const wrapperEl = editor.view.dom.closest('.rte-editor-wrapper') as HTMLElement | null;\n if (!wrapperEl) return;\n\n const handleMouseMove = (e: MouseEvent) => {\n if (isDragging) return;\n\n const idx = findBlockByClientY(e.clientY);\n if (idx < 0) return;\n\n const blocks = getBlocks();\n if (idx >= blocks.length) return;\n\n setHandleTop(blocks[idx].domTop);\n setCurrentBlockIndex(idx);\n cancelHide();\n setVisible(true);\n };\n\n const handleMouseLeave = () => {\n if (!isDragging) scheduleHide();\n };\n\n wrapperEl.addEventListener('mousemove', handleMouseMove);\n wrapperEl.addEventListener('mouseleave', handleMouseLeave);\n return () => {\n wrapperEl.removeEventListener('mousemove', handleMouseMove);\n wrapperEl.removeEventListener('mouseleave', handleMouseLeave);\n cancelHide();\n };\n }, [editor, cancelHide, scheduleHide, isDragging, findBlockByClientY, getBlocks]);\n\n useEffect(() => {\n if (!showMenu) return;\n const handler = (e: MouseEvent) => {\n if (menuRef.current && !menuRef.current.contains(e.target as Node)) {\n setShowMenu(false);\n }\n };\n document.addEventListener('mousedown', handler);\n return () => document.removeEventListener('mousedown', handler);\n }, [showMenu]);\n\n const addBlockBelow = useCallback(() => {\n const blocks = getBlocks();\n if (currentBlockIndex < 0 || currentBlockIndex >= blocks.length) return;\n const block = blocks[currentBlockIndex];\n const insertPos = block.pos + block.size;\n try {\n editor.chain().focus().insertContentAt(insertPos, { type: 'paragraph' }).run();\n editor.commands.focus(insertPos + 1);\n } catch { /* noop */ }\n setShowMenu(false);\n }, [editor, currentBlockIndex, getBlocks]);\n\n const handleDragStart = useCallback((e: React.MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n\n const dragIdx = currentBlockIndex;\n const blocks = getBlocks();\n if (dragIdx < 0 || dragIdx >= blocks.length) return;\n\n setIsDragging(true);\n\n const handleDragMove = (ev: MouseEvent) => {\n const slot = findDropSlot(ev.clientY);\n if (slot) {\n setDropIndicator({ top: slot.indicatorTop });\n }\n };\n\n const handleDragEnd = (ev: MouseEvent) => {\n document.removeEventListener('mousemove', handleDragMove);\n document.removeEventListener('mouseup', handleDragEnd);\n setIsDragging(false);\n setDropIndicator(null);\n\n const freshBlocks = getBlocks();\n if (dragIdx >= freshBlocks.length) return;\n\n const slot = findDropSlot(ev.clientY);\n if (!slot) return;\n\n let targetSlot = slot.slotIndex;\n\n // No-op: dropping at the same position or one below (no actual move)\n if (targetSlot === dragIdx || targetSlot === dragIdx + 1) return;\n\n const sourceBlock = freshBlocks[dragIdx];\n const sourceNode = editor.state.doc.nodeAt(sourceBlock.pos);\n if (!sourceNode) return;\n\n // Compute the insert position (before which block, or at end)\n let insertBefore: number;\n if (targetSlot < freshBlocks.length) {\n insertBefore = freshBlocks[targetSlot].pos;\n } else {\n const last = freshBlocks[freshBlocks.length - 1];\n insertBefore = last.pos + last.size;\n }\n\n const sourceFrom = sourceBlock.pos;\n const sourceTo = sourceBlock.pos + sourceBlock.size;\n const content = editor.state.doc.slice(sourceFrom, sourceTo).content;\n\n const { tr } = editor.state;\n\n if (targetSlot <= dragIdx) {\n // Moving up: delete source first (it's after target), then insert\n tr.delete(sourceFrom, sourceTo);\n const mapped = tr.mapping.map(insertBefore);\n tr.insert(mapped, content);\n } else {\n // Moving down: insert first (target is after source), then delete\n tr.insert(insertBefore, content);\n tr.delete(\n tr.mapping.map(sourceFrom),\n tr.mapping.map(sourceTo)\n );\n }\n\n editor.view.dispatch(tr);\n };\n\n document.addEventListener('mousemove', handleDragMove);\n document.addEventListener('mouseup', handleDragEnd);\n }, [editor, currentBlockIndex, getBlocks, findDropSlot]);\n\n const menuItems = [\n { label: 'Text', action: () => { addBlockBelow(); } },\n { label: 'Heading 1', action: () => { addBlockBelow(); editor.chain().focus().toggleHeading({ level: 1 }).run(); } },\n { label: 'Heading 2', action: () => { addBlockBelow(); editor.chain().focus().toggleHeading({ level: 2 }).run(); } },\n { label: 'Heading 3', action: () => { addBlockBelow(); editor.chain().focus().toggleHeading({ level: 3 }).run(); } },\n { label: 'Bullet List', action: () => { addBlockBelow(); editor.chain().focus().toggleBulletList().run(); } },\n { label: 'Numbered List', action: () => { addBlockBelow(); editor.chain().focus().toggleOrderedList().run(); } },\n { label: 'Task List', action: () => { addBlockBelow(); editor.chain().focus().toggleTaskList().run(); } },\n { label: 'Blockquote', action: () => { addBlockBelow(); editor.chain().focus().toggleBlockquote().run(); } },\n { label: 'Code Block', action: () => { addBlockBelow(); editor.chain().focus().toggleNode('codeBlock', 'paragraph').run(); } },\n { label: 'Divider', action: () => { addBlockBelow(); editor.chain().focus().setHorizontalRule().run(); } },\n { label: 'Table 3×3', action: () => { addBlockBelow(); editor.chain().focus().insertTable({ rows: 3, cols: 3, withHeaderRow: true }).run(); } },\n ];\n\n if (!visible && !showMenu && !isDragging) return null;\n\n return (\n <>\n <div\n ref={handleRef}\n className=\"rte-block-handle\"\n style={{ top: handleTop }}\n onMouseEnter={() => { hoveringHandle.current = true; cancelHide(); }}\n onMouseLeave={() => { hoveringHandle.current = false; if (!isDragging) scheduleHide(); }}\n onMouseDown={(e) => { e.stopPropagation(); e.preventDefault(); }}\n >\n <button\n type=\"button\"\n className=\"rte-block-handle__btn rte-block-handle__btn--add\"\n onMouseDown={(e) => { e.stopPropagation(); e.preventDefault(); }}\n onClick={(e) => { e.stopPropagation(); setShowMenu(!showMenu); }}\n title=\"Add block\"\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\"><line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\" /><line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\" /></svg>\n </button>\n <button\n type=\"button\"\n className={`rte-block-handle__btn rte-block-handle__btn--drag ${isDragging ? 'rte-block-handle__btn--dragging' : ''}`}\n title=\"Drag to reorder\"\n onMouseDown={handleDragStart}\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <circle cx=\"9\" cy=\"6\" r=\"1.5\" /><circle cx=\"15\" cy=\"6\" r=\"1.5\" />\n <circle cx=\"9\" cy=\"12\" r=\"1.5\" /><circle cx=\"15\" cy=\"12\" r=\"1.5\" />\n <circle cx=\"9\" cy=\"18\" r=\"1.5\" /><circle cx=\"15\" cy=\"18\" r=\"1.5\" />\n </svg>\n </button>\n </div>\n\n {showMenu && (\n <div\n ref={menuRef}\n className=\"rte-block-handle__menu\"\n style={{ top: handleTop + 28 }}\n onMouseDown={(e) => e.stopPropagation()}\n >\n {menuItems.map((item) => (\n <button\n key={item.label}\n type=\"button\"\n className=\"rte-block-handle__menu-item\"\n onMouseDown={(e) => e.stopPropagation()}\n onClick={(e) => { e.stopPropagation(); item.action(); setShowMenu(false); }}\n >\n {item.label}\n </button>\n ))}\n </div>\n )}\n\n {isDragging && dropIndicator && (\n <div className=\"rte-block-handle__drop-indicator\" style={{ top: dropIndicator.top }} />\n )}\n </>\n );\n};\n\nexport default BlockHandle;\n"],"mappings":"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"}
1
+ {"version":3,"file":"BlockHandle.js","names":[],"sources":["../../../../src/components/pro/RichTextEditor/BlockHandle.tsx"],"sourcesContent":["import React, { useState, useEffect, useRef, useCallback } from 'react';\nimport type { Editor } from '@tiptap/react';\n\ninterface BlockHandleProps {\n editor: Editor;\n}\n\ninterface BlockInfo {\n pos: number;\n size: number;\n domTop: number;\n domBottom: number;\n}\n\nconst BlockHandle: React.FC<BlockHandleProps> = ({ editor }) => {\n const [visible, setVisible] = useState(false);\n const [handleTop, setHandleTop] = useState(0);\n const [showMenu, setShowMenu] = useState(false);\n const [currentBlockIndex, setCurrentBlockIndex] = useState(-1);\n const [isDragging, setIsDragging] = useState(false);\n const [dropIndicator, setDropIndicator] = useState<{ top: number } | null>(null);\n const menuRef = useRef<HTMLDivElement>(null);\n const handleRef = useRef<HTMLDivElement>(null);\n const hideTimer = useRef<ReturnType<typeof setTimeout> | null>(null);\n const hoveringHandle = useRef(false);\n\n const cancelHide = useCallback(() => {\n if (hideTimer.current) {\n clearTimeout(hideTimer.current);\n hideTimer.current = null;\n }\n }, []);\n\n const scheduleHide = useCallback(() => {\n cancelHide();\n hideTimer.current = setTimeout(() => {\n if (!hoveringHandle.current && !showMenu && !isDragging) {\n setVisible(false);\n }\n }, 200);\n }, [cancelHide, showMenu, isDragging]);\n\n const getBlocks = useCallback((): BlockInfo[] => {\n const wrapperEl = editor.view.dom.closest('.rte-editor-wrapper') as HTMLElement | null;\n if (!wrapperEl) return [];\n const wrapperRect = wrapperEl.getBoundingClientRect();\n const scrollTop = wrapperEl.scrollTop;\n const blocks: BlockInfo[] = [];\n\n editor.state.doc.forEach((node, offset) => {\n const domNode = editor.view.nodeDOM(offset) as HTMLElement | null;\n if (domNode) {\n const rect = domNode.getBoundingClientRect();\n blocks.push({\n pos: offset,\n size: node.nodeSize,\n domTop: rect.top - wrapperRect.top + scrollTop,\n domBottom: rect.bottom - wrapperRect.top + scrollTop,\n });\n }\n });\n return blocks;\n }, [editor]);\n\n const findBlockByClientY = useCallback((clientY: number): number => {\n const wrapperEl = editor.view.dom.closest('.rte-editor-wrapper') as HTMLElement | null;\n if (!wrapperEl) return -1;\n const wrapperRect = wrapperEl.getBoundingClientRect();\n const y = clientY - wrapperRect.top + wrapperEl.scrollTop;\n\n const blocks = getBlocks();\n for (let i = 0; i < blocks.length; i++) {\n const mid = (blocks[i].domTop + blocks[i].domBottom) / 2;\n if (y < mid) return i;\n }\n return blocks.length - 1;\n }, [editor, getBlocks]);\n\n const findDropSlot = useCallback((clientY: number): { slotIndex: number; indicatorTop: number } | null => {\n const wrapperEl = editor.view.dom.closest('.rte-editor-wrapper') as HTMLElement | null;\n if (!wrapperEl) return null;\n const wrapperRect = wrapperEl.getBoundingClientRect();\n const y = clientY - wrapperRect.top + wrapperEl.scrollTop;\n\n const blocks = getBlocks();\n if (blocks.length === 0) return null;\n\n let bestSlot = 0;\n let bestDist = Infinity;\n let bestTop = blocks[0].domTop;\n\n for (let i = 0; i <= blocks.length; i++) {\n const edgeY = i < blocks.length ? blocks[i].domTop : blocks[blocks.length - 1].domBottom;\n const dist = Math.abs(y - edgeY);\n if (dist < bestDist) {\n bestDist = dist;\n bestSlot = i;\n bestTop = edgeY;\n }\n }\n\n return { slotIndex: bestSlot, indicatorTop: bestTop };\n }, [getBlocks]);\n\n useEffect(() => {\n const wrapperEl = editor.view.dom.closest('.rte-editor-wrapper') as HTMLElement | null;\n if (!wrapperEl) return;\n\n const handleMouseMove = (e: MouseEvent) => {\n if (isDragging) return;\n\n const idx = findBlockByClientY(e.clientY);\n if (idx < 0) return;\n\n const blocks = getBlocks();\n if (idx >= blocks.length) return;\n\n setHandleTop(blocks[idx].domTop);\n setCurrentBlockIndex(idx);\n cancelHide();\n setVisible(true);\n };\n\n const handleMouseLeave = () => {\n if (!isDragging) scheduleHide();\n };\n\n wrapperEl.addEventListener('mousemove', handleMouseMove);\n wrapperEl.addEventListener('mouseleave', handleMouseLeave);\n return () => {\n wrapperEl.removeEventListener('mousemove', handleMouseMove);\n wrapperEl.removeEventListener('mouseleave', handleMouseLeave);\n cancelHide();\n };\n }, [editor, cancelHide, scheduleHide, isDragging, findBlockByClientY, getBlocks]);\n\n useEffect(() => {\n if (!showMenu) return;\n const handler = (e: MouseEvent) => {\n if (menuRef.current && !menuRef.current.contains(e.target as Node)) {\n setShowMenu(false);\n }\n };\n document.addEventListener('mousedown', handler);\n return () => document.removeEventListener('mousedown', handler);\n }, [showMenu]);\n\n const addBlockBelow = useCallback(() => {\n const blocks = getBlocks();\n if (currentBlockIndex < 0 || currentBlockIndex >= blocks.length) return;\n const block = blocks[currentBlockIndex];\n const insertPos = block.pos + block.size;\n try {\n editor.chain().focus().insertContentAt(insertPos, { type: 'paragraph' }).run();\n editor.commands.focus(insertPos + 1);\n } catch { /* noop */ }\n setShowMenu(false);\n }, [editor, currentBlockIndex, getBlocks]);\n\n const handleDragStart = useCallback((e: React.MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n\n const dragIdx = currentBlockIndex;\n const blocks = getBlocks();\n if (dragIdx < 0 || dragIdx >= blocks.length) return;\n\n setIsDragging(true);\n\n const handleDragMove = (ev: MouseEvent) => {\n const slot = findDropSlot(ev.clientY);\n if (slot) {\n setDropIndicator({ top: slot.indicatorTop });\n }\n };\n\n const handleDragEnd = (ev: MouseEvent) => {\n document.removeEventListener('mousemove', handleDragMove);\n document.removeEventListener('mouseup', handleDragEnd);\n setIsDragging(false);\n setDropIndicator(null);\n\n const freshBlocks = getBlocks();\n if (dragIdx >= freshBlocks.length) return;\n\n const slot = findDropSlot(ev.clientY);\n if (!slot) return;\n\n let targetSlot = slot.slotIndex;\n\n // No-op: dropping at the same position or one below (no actual move)\n if (targetSlot === dragIdx || targetSlot === dragIdx + 1) return;\n\n const sourceBlock = freshBlocks[dragIdx];\n const sourceNode = editor.state.doc.nodeAt(sourceBlock.pos);\n if (!sourceNode) return;\n\n // Compute the insert position (before which block, or at end)\n let insertBefore: number;\n if (targetSlot < freshBlocks.length) {\n insertBefore = freshBlocks[targetSlot].pos;\n } else {\n const last = freshBlocks[freshBlocks.length - 1];\n insertBefore = last.pos + last.size;\n }\n\n const sourceFrom = sourceBlock.pos;\n const sourceTo = sourceBlock.pos + sourceBlock.size;\n const content = editor.state.doc.slice(sourceFrom, sourceTo).content;\n\n const { tr } = editor.state;\n\n if (targetSlot <= dragIdx) {\n // Moving up: delete source first (it's after target), then insert\n tr.delete(sourceFrom, sourceTo);\n const mapped = tr.mapping.map(insertBefore);\n tr.insert(mapped, content);\n } else {\n // Moving down: insert first (target is after source), then delete\n tr.insert(insertBefore, content);\n tr.delete(\n tr.mapping.map(sourceFrom),\n tr.mapping.map(sourceTo)\n );\n }\n\n editor.view.dispatch(tr);\n };\n\n document.addEventListener('mousemove', handleDragMove);\n document.addEventListener('mouseup', handleDragEnd);\n }, [editor, currentBlockIndex, getBlocks, findDropSlot]);\n\n const menuItems = [\n { label: 'Text', action: () => { addBlockBelow(); } },\n { label: 'Heading 1', action: () => { addBlockBelow(); editor.chain().focus().toggleHeading({ level: 1 }).run(); } },\n { label: 'Heading 2', action: () => { addBlockBelow(); editor.chain().focus().toggleHeading({ level: 2 }).run(); } },\n { label: 'Heading 3', action: () => { addBlockBelow(); editor.chain().focus().toggleHeading({ level: 3 }).run(); } },\n { label: 'Bullet List', action: () => { addBlockBelow(); editor.chain().focus().toggleBulletList().run(); } },\n { label: 'Numbered List', action: () => { addBlockBelow(); editor.chain().focus().toggleOrderedList().run(); } },\n { label: 'Task List', action: () => { addBlockBelow(); editor.chain().focus().toggleTaskList().run(); } },\n { label: 'Blockquote', action: () => { addBlockBelow(); editor.chain().focus().toggleBlockquote().run(); } },\n { label: 'Code Block', action: () => { addBlockBelow(); editor.chain().focus().toggleNode('codeBlock', 'paragraph').run(); } },\n { label: 'Divider', action: () => { addBlockBelow(); editor.chain().focus().setHorizontalRule().run(); } },\n { label: 'Table 3×3', action: () => { addBlockBelow(); editor.chain().focus().insertTable({ rows: 3, cols: 3, withHeaderRow: true }).run(); } },\n ];\n\n if (!visible && !showMenu && !isDragging) return null;\n\n return (\n <>\n <div\n ref={handleRef}\n className=\"rte-block-handle\"\n style={{ top: handleTop }}\n onMouseEnter={() => { hoveringHandle.current = true; cancelHide(); }}\n onMouseLeave={() => { hoveringHandle.current = false; if (!isDragging) scheduleHide(); }}\n onMouseDown={(e) => { e.stopPropagation(); e.preventDefault(); }}\n >\n <button\n type=\"button\"\n className=\"rte-block-handle__btn rte-block-handle__btn--add\"\n onMouseDown={(e) => { e.stopPropagation(); e.preventDefault(); }}\n onClick={(e) => { e.stopPropagation(); setShowMenu(!showMenu); }}\n title=\"Add block\"\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\"><line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\" /><line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\" /></svg>\n </button>\n <button\n type=\"button\"\n className={`rte-block-handle__btn rte-block-handle__btn--drag ${isDragging ? 'rte-block-handle__btn--dragging' : ''}`}\n title=\"Drag to reorder\"\n onMouseDown={handleDragStart}\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\">\n <circle cx=\"9\" cy=\"6\" r=\"1.5\" /><circle cx=\"15\" cy=\"6\" r=\"1.5\" />\n <circle cx=\"9\" cy=\"12\" r=\"1.5\" /><circle cx=\"15\" cy=\"12\" r=\"1.5\" />\n <circle cx=\"9\" cy=\"18\" r=\"1.5\" /><circle cx=\"15\" cy=\"18\" r=\"1.5\" />\n </svg>\n </button>\n </div>\n\n {showMenu && (\n <div\n ref={menuRef}\n className=\"rte-block-handle__menu\"\n style={{ top: handleTop + 28 }}\n onMouseDown={(e) => e.stopPropagation()}\n >\n {menuItems.map((item) => (\n <button\n key={item.label}\n type=\"button\"\n className=\"rte-block-handle__menu-item\"\n onMouseDown={(e) => e.stopPropagation()}\n onClick={(e) => { e.stopPropagation(); item.action(); setShowMenu(false); }}\n >\n {item.label}\n </button>\n ))}\n </div>\n )}\n\n {isDragging && dropIndicator && (\n <div className=\"rte-block-handle__drop-indicator\" style={{ top: dropIndicator.top }} />\n )}\n </>\n );\n};\n\nexport default BlockHandle;\n"],"mappings":"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"}
@@ -1,100 +1,100 @@
1
- import { useEffect as y, useRef as k, useState as b } from "react";
2
- import { Fragment as x, jsx as t, jsxs as a } from "react/jsx-runtime";
3
- var z = ({ editor: e, onAddComment: u }) => {
4
- const [d, r] = b(!1), [f, v] = b({
5
- x: 0,
6
- y: 0
7
- }), g = k(null);
8
- if (y(() => {
9
- const s = () => {
10
- const { from: o, to: l } = e.state.selection;
11
- if (o === l || !e.isFocused) {
12
- r(!1);
13
- return;
14
- }
15
- const i = e.view.coordsAtPos(o), c = e.view.coordsAtPos(l), h = e.view.dom.closest(".rte-editor-wrapper");
16
- if (!h) return;
17
- const p = h.getBoundingClientRect(), m = (i.left + c.left) / 2 - p.left, w = Math.min(i.top, c.top) - p.top - 44;
18
- v({
19
- x: m,
20
- y: w
21
- }), r(!0);
22
- };
23
- return e.on("selectionUpdate", s), e.on("blur", () => r(!1)), () => {
24
- e.off("selectionUpdate", s);
25
- };
26
- }, [e]), !d) return null;
27
- const n = (s, o, l, i) => /* @__PURE__ */ t("button", {
28
- type: "button",
29
- className: `rte-bubble__btn ${l ? "rte-bubble__btn--active" : ""}`,
30
- onClick: s,
31
- title: o,
32
- onMouseDown: (c) => c.preventDefault(),
33
- children: i
34
- });
35
- return /* @__PURE__ */ a("div", {
36
- ref: g,
37
- className: "rte-bubble",
38
- style: {
39
- left: f.x,
40
- top: f.y
41
- },
42
- children: [
43
- n(() => e.chain().focus().toggleBold().run(), "Bold", e.isActive("bold"), /* @__PURE__ */ t("strong", {
44
- style: { fontSize: 13 },
45
- children: "B"
46
- })),
47
- n(() => e.chain().focus().toggleItalic().run(), "Italic", e.isActive("italic"), /* @__PURE__ */ t("em", {
48
- style: { fontSize: 13 },
49
- children: "I"
50
- })),
51
- n(() => e.chain().focus().toggleUnderline().run(), "Underline", e.isActive("underline"), /* @__PURE__ */ t("span", {
52
- style: {
53
- fontSize: 13,
54
- textDecoration: "underline"
55
- },
56
- children: "U"
57
- })),
58
- n(() => e.chain().focus().toggleStrike().run(), "Strike", e.isActive("strike"), /* @__PURE__ */ t("span", {
59
- style: {
60
- fontSize: 13,
61
- textDecoration: "line-through"
62
- },
63
- children: "S"
64
- })),
65
- n(() => e.chain().focus().toggleCode().run(), "Code", e.isActive("code"), /* @__PURE__ */ t("span", {
66
- style: {
67
- fontSize: 11,
68
- fontFamily: "monospace"
69
- },
70
- children: "</>"
71
- })),
72
- n(() => {
73
- const s = window.prompt("URL:");
74
- s && e.chain().focus().setLink({ href: s }).run();
75
- }, "Link", e.isActive("link"), /* @__PURE__ */ a("svg", {
76
- width: "14",
77
- height: "14",
78
- viewBox: "0 0 24 24",
79
- fill: "none",
80
- stroke: "currentColor",
81
- strokeWidth: "2",
82
- children: [/* @__PURE__ */ t("path", { d: "M10 13a5 5 0 007.54.54l3-3a5 5 0 00-7.07-7.07l-1.72 1.71" }), /* @__PURE__ */ t("path", { d: "M14 11a5 5 0 00-7.54-.54l-3 3a5 5 0 007.07 7.07l1.71-1.71" })]
83
- })),
84
- u && /* @__PURE__ */ a(x, { children: [/* @__PURE__ */ t("div", { className: "rte-bubble__divider" }), n(u, "Comment", !1, /* @__PURE__ */ t("svg", {
85
- width: "14",
86
- height: "14",
87
- viewBox: "0 0 24 24",
88
- fill: "none",
89
- stroke: "currentColor",
90
- strokeWidth: "2",
91
- children: /* @__PURE__ */ t("path", { d: "M21 15a2 2 0 01-2 2H7l-4 4V5a2 2 0 012-2h14a2 2 0 012 2z" })
92
- }))] })
93
- ]
94
- });
95
- };
96
- export {
97
- z as default
1
+ import { useEffect as e, useRef as t, useState as n } from "react";
2
+ import { Fragment as r, jsx as i, jsxs as a } from "react/jsx-runtime";
3
+ //#region src/components/pro/RichTextEditor/BubbleToolbar.tsx
4
+ var o = ({ editor: o, onAddComment: s }) => {
5
+ let [c, l] = n(!1), [u, d] = n({
6
+ x: 0,
7
+ y: 0
8
+ }), f = t(null);
9
+ if (e(() => {
10
+ let e = () => {
11
+ let { from: e, to: t } = o.state.selection;
12
+ if (e === t || !o.isFocused) {
13
+ l(!1);
14
+ return;
15
+ }
16
+ let n = o.view.coordsAtPos(e), r = o.view.coordsAtPos(t), i = o.view.dom.closest(".rte-editor-wrapper");
17
+ if (!i) return;
18
+ let a = i.getBoundingClientRect(), s = (n.left + r.left) / 2 - a.left, c = Math.min(n.top, r.top) - a.top - 44;
19
+ d({
20
+ x: s,
21
+ y: c
22
+ }), l(!0);
23
+ };
24
+ return o.on("selectionUpdate", e), o.on("blur", () => l(!1)), () => {
25
+ o.off("selectionUpdate", e);
26
+ };
27
+ }, [o]), !c) return null;
28
+ let p = (e, t, n, r) => /* @__PURE__ */ i("button", {
29
+ type: "button",
30
+ className: `rte-bubble__btn ${n ? "rte-bubble__btn--active" : ""}`,
31
+ onClick: e,
32
+ title: t,
33
+ onMouseDown: (e) => e.preventDefault(),
34
+ children: r
35
+ });
36
+ return /* @__PURE__ */ a("div", {
37
+ ref: f,
38
+ className: "rte-bubble",
39
+ style: {
40
+ left: u.x,
41
+ top: u.y
42
+ },
43
+ children: [
44
+ p(() => o.chain().focus().toggleBold().run(), "Bold", o.isActive("bold"), /* @__PURE__ */ i("strong", {
45
+ style: { fontSize: 13 },
46
+ children: "B"
47
+ })),
48
+ p(() => o.chain().focus().toggleItalic().run(), "Italic", o.isActive("italic"), /* @__PURE__ */ i("em", {
49
+ style: { fontSize: 13 },
50
+ children: "I"
51
+ })),
52
+ p(() => o.chain().focus().toggleUnderline().run(), "Underline", o.isActive("underline"), /* @__PURE__ */ i("span", {
53
+ style: {
54
+ fontSize: 13,
55
+ textDecoration: "underline"
56
+ },
57
+ children: "U"
58
+ })),
59
+ p(() => o.chain().focus().toggleStrike().run(), "Strike", o.isActive("strike"), /* @__PURE__ */ i("span", {
60
+ style: {
61
+ fontSize: 13,
62
+ textDecoration: "line-through"
63
+ },
64
+ children: "S"
65
+ })),
66
+ p(() => o.chain().focus().toggleCode().run(), "Code", o.isActive("code"), /* @__PURE__ */ i("span", {
67
+ style: {
68
+ fontSize: 11,
69
+ fontFamily: "monospace"
70
+ },
71
+ children: "</>"
72
+ })),
73
+ p(() => {
74
+ let e = window.prompt("URL:");
75
+ e && o.chain().focus().setLink({ href: e }).run();
76
+ }, "Link", o.isActive("link"), /* @__PURE__ */ a("svg", {
77
+ width: "14",
78
+ height: "14",
79
+ viewBox: "0 0 24 24",
80
+ fill: "none",
81
+ stroke: "currentColor",
82
+ strokeWidth: "2",
83
+ children: [/* @__PURE__ */ i("path", { d: "M10 13a5 5 0 007.54.54l3-3a5 5 0 00-7.07-7.07l-1.72 1.71" }), /* @__PURE__ */ i("path", { d: "M14 11a5 5 0 00-7.54-.54l-3 3a5 5 0 007.07 7.07l1.71-1.71" })]
84
+ })),
85
+ s && /* @__PURE__ */ a(r, { children: [/* @__PURE__ */ i("div", { className: "rte-bubble__divider" }), p(s, "Comment", !1, /* @__PURE__ */ i("svg", {
86
+ width: "14",
87
+ height: "14",
88
+ viewBox: "0 0 24 24",
89
+ fill: "none",
90
+ stroke: "currentColor",
91
+ strokeWidth: "2",
92
+ children: /* @__PURE__ */ i("path", { d: "M21 15a2 2 0 01-2 2H7l-4 4V5a2 2 0 012-2h14a2 2 0 012 2z" })
93
+ }))] })
94
+ ]
95
+ });
98
96
  };
97
+ //#endregion
98
+ export { o as default };
99
99
 
100
100
  //# sourceMappingURL=BubbleToolbar.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"BubbleToolbar.js","names":[],"sources":["../../../../src/components/pro/RichTextEditor/BubbleToolbar.tsx"],"sourcesContent":["import React, { useState, useEffect, useRef } from 'react';\nimport type { Editor } from '@tiptap/react';\n\ninterface BubbleToolbarProps {\n editor: Editor;\n onAddComment?: () => void;\n}\n\nconst BubbleToolbar: React.FC<BubbleToolbarProps> = ({ editor, onAddComment }) => {\n const [visible, setVisible] = useState(false);\n const [pos, setPos] = useState({ x: 0, y: 0 });\n const ref = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n const update = () => {\n const { from, to } = editor.state.selection;\n if (from === to || !editor.isFocused) {\n setVisible(false);\n return;\n }\n const coords = editor.view.coordsAtPos(from);\n const endCoords = editor.view.coordsAtPos(to);\n const wrapperEl = editor.view.dom.closest('.rte-editor-wrapper');\n if (!wrapperEl) return;\n const rect = wrapperEl.getBoundingClientRect();\n\n const centerX = (coords.left + endCoords.left) / 2 - rect.left;\n const topY = Math.min(coords.top, endCoords.top) - rect.top - 44;\n\n setPos({ x: centerX, y: topY });\n setVisible(true);\n };\n\n editor.on('selectionUpdate', update);\n editor.on('blur', () => setVisible(false));\n return () => {\n editor.off('selectionUpdate', update);\n };\n }, [editor]);\n\n if (!visible) return null;\n\n const btn = (onClick: () => void, title: string, isActive: boolean, children: React.ReactNode) => (\n <button\n type=\"button\"\n className={`rte-bubble__btn ${isActive ? 'rte-bubble__btn--active' : ''}`}\n onClick={onClick}\n title={title}\n onMouseDown={(e) => e.preventDefault()}\n >\n {children}\n </button>\n );\n\n return (\n <div ref={ref} className=\"rte-bubble\" style={{ left: pos.x, top: pos.y }}>\n {btn(() => editor.chain().focus().toggleBold().run(), 'Bold', editor.isActive('bold'),\n <strong style={{ fontSize: 13 }}>B</strong>)}\n {btn(() => editor.chain().focus().toggleItalic().run(), 'Italic', editor.isActive('italic'),\n <em style={{ fontSize: 13 }}>I</em>)}\n {btn(() => editor.chain().focus().toggleUnderline().run(), 'Underline', editor.isActive('underline'),\n <span style={{ fontSize: 13, textDecoration: 'underline' }}>U</span>)}\n {btn(() => editor.chain().focus().toggleStrike().run(), 'Strike', editor.isActive('strike'),\n <span style={{ fontSize: 13, textDecoration: 'line-through' }}>S</span>)}\n {btn(() => editor.chain().focus().toggleCode().run(), 'Code', editor.isActive('code'),\n <span style={{ fontSize: 11, fontFamily: 'monospace' }}>&lt;/&gt;</span>)}\n {btn(() => {\n const url = window.prompt('URL:');\n if (url) editor.chain().focus().setLink({ href: url }).run();\n }, 'Link', editor.isActive('link'),\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\"><path d=\"M10 13a5 5 0 007.54.54l3-3a5 5 0 00-7.07-7.07l-1.72 1.71\" /><path d=\"M14 11a5 5 0 00-7.54-.54l-3 3a5 5 0 007.07 7.07l1.71-1.71\" /></svg>)}\n {onAddComment && (\n <>\n <div className=\"rte-bubble__divider\" />\n {btn(onAddComment, 'Comment', false,\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\"><path d=\"M21 15a2 2 0 01-2 2H7l-4 4V5a2 2 0 012-2h14a2 2 0 012 2z\" /></svg>)}\n </>\n )}\n </div>\n );\n};\n\nexport default BubbleToolbar;\n"],"mappings":"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"}
1
+ {"version":3,"file":"BubbleToolbar.js","names":[],"sources":["../../../../src/components/pro/RichTextEditor/BubbleToolbar.tsx"],"sourcesContent":["import React, { useState, useEffect, useRef } from 'react';\nimport type { Editor } from '@tiptap/react';\n\ninterface BubbleToolbarProps {\n editor: Editor;\n onAddComment?: () => void;\n}\n\nconst BubbleToolbar: React.FC<BubbleToolbarProps> = ({ editor, onAddComment }) => {\n const [visible, setVisible] = useState(false);\n const [pos, setPos] = useState({ x: 0, y: 0 });\n const ref = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n const update = () => {\n const { from, to } = editor.state.selection;\n if (from === to || !editor.isFocused) {\n setVisible(false);\n return;\n }\n const coords = editor.view.coordsAtPos(from);\n const endCoords = editor.view.coordsAtPos(to);\n const wrapperEl = editor.view.dom.closest('.rte-editor-wrapper');\n if (!wrapperEl) return;\n const rect = wrapperEl.getBoundingClientRect();\n\n const centerX = (coords.left + endCoords.left) / 2 - rect.left;\n const topY = Math.min(coords.top, endCoords.top) - rect.top - 44;\n\n setPos({ x: centerX, y: topY });\n setVisible(true);\n };\n\n editor.on('selectionUpdate', update);\n editor.on('blur', () => setVisible(false));\n return () => {\n editor.off('selectionUpdate', update);\n };\n }, [editor]);\n\n if (!visible) return null;\n\n const btn = (onClick: () => void, title: string, isActive: boolean, children: React.ReactNode) => (\n <button\n type=\"button\"\n className={`rte-bubble__btn ${isActive ? 'rte-bubble__btn--active' : ''}`}\n onClick={onClick}\n title={title}\n onMouseDown={(e) => e.preventDefault()}\n >\n {children}\n </button>\n );\n\n return (\n <div ref={ref} className=\"rte-bubble\" style={{ left: pos.x, top: pos.y }}>\n {btn(() => editor.chain().focus().toggleBold().run(), 'Bold', editor.isActive('bold'),\n <strong style={{ fontSize: 13 }}>B</strong>)}\n {btn(() => editor.chain().focus().toggleItalic().run(), 'Italic', editor.isActive('italic'),\n <em style={{ fontSize: 13 }}>I</em>)}\n {btn(() => editor.chain().focus().toggleUnderline().run(), 'Underline', editor.isActive('underline'),\n <span style={{ fontSize: 13, textDecoration: 'underline' }}>U</span>)}\n {btn(() => editor.chain().focus().toggleStrike().run(), 'Strike', editor.isActive('strike'),\n <span style={{ fontSize: 13, textDecoration: 'line-through' }}>S</span>)}\n {btn(() => editor.chain().focus().toggleCode().run(), 'Code', editor.isActive('code'),\n <span style={{ fontSize: 11, fontFamily: 'monospace' }}>&lt;/&gt;</span>)}\n {btn(() => {\n const url = window.prompt('URL:');\n if (url) editor.chain().focus().setLink({ href: url }).run();\n }, 'Link', editor.isActive('link'),\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\"><path d=\"M10 13a5 5 0 007.54.54l3-3a5 5 0 00-7.07-7.07l-1.72 1.71\" /><path d=\"M14 11a5 5 0 00-7.54-.54l-3 3a5 5 0 007.07 7.07l1.71-1.71\" /></svg>)}\n {onAddComment && (\n <>\n <div className=\"rte-bubble__divider\" />\n {btn(onAddComment, 'Comment', false,\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\"><path d=\"M21 15a2 2 0 01-2 2H7l-4 4V5a2 2 0 012-2h14a2 2 0 012 2z\" /></svg>)}\n </>\n )}\n </div>\n );\n};\n\nexport default BubbleToolbar;\n"],"mappings":";;;AAQA,IAAM,KAA+C,EAAE,WAAQ,sBAAmB;CAChF,IAAM,CAAC,GAAS,KAAc,EAAS,EAAK,GACtC,CAAC,GAAK,KAAU,EAAS;EAAE,GAAG;EAAG,GAAG;CAAE,CAAC,GACvC,IAAM,EAAuB,IAAI;CA6BvC,IA3BA,QAAgB;EACd,IAAM,UAAe;GACnB,IAAM,EAAE,SAAM,UAAO,EAAO,MAAM;GAClC,IAAI,MAAS,KAAM,CAAC,EAAO,WAAW;IACpC,EAAW,EAAK;IAChB;GACF;GACA,IAAM,IAAS,EAAO,KAAK,YAAY,CAAI,GACrC,IAAY,EAAO,KAAK,YAAY,CAAE,GACtC,IAAY,EAAO,KAAK,IAAI,QAAQ,qBAAqB;GAC/D,IAAI,CAAC,GAAW;GAChB,IAAM,IAAO,EAAU,sBAAsB,GAEvC,KAAW,EAAO,OAAO,EAAU,QAAQ,IAAI,EAAK,MACpD,IAAO,KAAK,IAAI,EAAO,KAAK,EAAU,GAAG,IAAI,EAAK,MAAM;GAG9D,AADA,EAAO;IAAE,GAAG;IAAS,GAAG;GAAK,CAAC,GAC9B,EAAW,EAAI;EACjB;EAIA,OAFA,EAAO,GAAG,mBAAmB,CAAM,GACnC,EAAO,GAAG,cAAc,EAAW,EAAK,CAAC,SAC5B;GACX,EAAO,IAAI,mBAAmB,CAAM;EACtC;CACF,GAAG,CAAC,CAAM,CAAC,GAEP,CAAC,GAAS,OAAO;CAErB,IAAM,KAAO,GAAqB,GAAe,GAAmB,MAClE,kBAAC,UAAD;EACE,MAAK;EACL,WAAW,mBAAmB,IAAW,4BAA4B;EAC5D;EACF;EACP,cAAc,MAAM,EAAE,eAAe;EAEpC;CACK,CAAA;CAGV,OACE,kBAAC,OAAD;EAAU;EAAK,WAAU;EAAa,OAAO;GAAE,MAAM,EAAI;GAAG,KAAK,EAAI;EAAE;EAAvE,UAAA;GACG,QAAU,EAAO,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,CAAC,IAAI,GAAG,QAAQ,EAAO,SAAS,MAAM,GAClF,kBAAC,UAAD;IAAQ,OAAO,EAAE,UAAU,GAAG;IAAG,UAAA;GAAS,CAAA,CAAC;GAC5C,QAAU,EAAO,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,aAAa,CAAC,CAAC,IAAI,GAAG,UAAU,EAAO,SAAS,QAAQ,GACxF,kBAAC,MAAD;IAAI,OAAO,EAAE,UAAU,GAAG;IAAG,UAAA;GAAK,CAAA,CAAC;GACpC,QAAU,EAAO,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,gBAAgB,CAAC,CAAC,IAAI,GAAG,aAAa,EAAO,SAAS,WAAW,GACjG,kBAAC,QAAD;IAAM,OAAO;KAAE,UAAU;KAAI,gBAAgB;IAAY;IAAG,UAAA;GAAO,CAAA,CAAC;GACrE,QAAU,EAAO,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,aAAa,CAAC,CAAC,IAAI,GAAG,UAAU,EAAO,SAAS,QAAQ,GACxF,kBAAC,QAAD;IAAM,OAAO;KAAE,UAAU;KAAI,gBAAgB;IAAe;IAAG,UAAA;GAAO,CAAA,CAAC;GACxE,QAAU,EAAO,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,CAAC,IAAI,GAAG,QAAQ,EAAO,SAAS,MAAM,GAClF,kBAAC,QAAD;IAAM,OAAO;KAAE,UAAU;KAAI,YAAY;IAAY;IAAG,UAAA;GAAe,CAAA,CAAC;GACzE,QAAU;IACT,IAAM,IAAM,OAAO,OAAO,MAAM;IAChC,AAAI,KAAK,EAAO,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAI,CAAC,CAAC,CAAC,IAAI;GAC7D,GAAG,QAAQ,EAAO,SAAS,MAAM,GAC/B,kBAAC,OAAD;IAAK,OAAM;IAAK,QAAO;IAAK,SAAQ;IAAY,MAAK;IAAO,QAAO;IAAe,aAAY;IAA9F,UAAA,CAAkG,kBAAC,QAAD,EAAM,GAAE,2DAA4D,CAAA,GAAC,kBAAC,QAAD,EAAM,GAAE,4DAA6D,CAAA,CAAM;GAAC,CAAA,CAAA;GACpP,KACC,kBAAA,GAAA,EAAA,UAAA,CACE,kBAAC,OAAD,EAAK,WAAU,sBAAuB,CAAA,GACrC,EAAI,GAAc,WAAW,IAC5B,kBAAC,OAAD;IAAK,OAAM;IAAK,QAAO;IAAK,SAAQ;IAAY,MAAK;IAAO,QAAO;IAAe,aAAY;IAAI,UAAA,kBAAC,QAAD,EAAM,GAAE,2DAA4D,CAAA;GAAM,CAAA,CAAC,CAC/K,EAAA,CAAA;EAED;;AAET"}
@@ -1,91 +1,91 @@
1
- import { useEffect as c, useRef as u, useState as h } from "react";
2
- import { jsx as t, jsxs as n } from "react/jsx-runtime";
3
- var y = ({ open: r, onSubmit: s, onClose: i }) => {
4
- const [a, l] = h(""), o = u(null);
5
- if (c(() => {
6
- r && (l(""), setTimeout(() => o.current?.focus(), 50));
7
- }, [r]), c(() => {
8
- if (!r) return;
9
- const e = (m) => {
10
- m.key === "Escape" && i();
11
- };
12
- return document.addEventListener("keydown", e), () => document.removeEventListener("keydown", e);
13
- }, [r, i]), !r) return null;
14
- const d = () => {
15
- a.trim() && (s(a.trim()), l(""));
16
- };
17
- return /* @__PURE__ */ t("div", {
18
- className: "rte-dialog-overlay",
19
- onClick: i,
20
- children: /* @__PURE__ */ n("div", {
21
- className: "rte-dialog",
22
- onClick: (e) => e.stopPropagation(),
23
- children: [
24
- /* @__PURE__ */ n("div", {
25
- className: "rte-dialog__header",
26
- children: [/* @__PURE__ */ t("span", {
27
- className: "rte-dialog__title",
28
- children: "Add Comment"
29
- }), /* @__PURE__ */ t("button", {
30
- type: "button",
31
- className: "rte-dialog__close",
32
- onClick: i,
33
- children: /* @__PURE__ */ n("svg", {
34
- width: "16",
35
- height: "16",
36
- viewBox: "0 0 24 24",
37
- fill: "none",
38
- stroke: "currentColor",
39
- strokeWidth: "2",
40
- children: [/* @__PURE__ */ t("line", {
41
- x1: "18",
42
- y1: "6",
43
- x2: "6",
44
- y2: "18"
45
- }), /* @__PURE__ */ t("line", {
46
- x1: "6",
47
- y1: "6",
48
- x2: "18",
49
- y2: "18"
50
- })]
51
- })
52
- })]
53
- }),
54
- /* @__PURE__ */ t("div", {
55
- className: "rte-dialog__body",
56
- children: /* @__PURE__ */ t("textarea", {
57
- ref: o,
58
- className: "rte-dialog__textarea",
59
- value: a,
60
- onChange: (e) => l(e.target.value),
61
- onKeyDown: (e) => {
62
- e.key === "Enter" && !e.shiftKey && (e.preventDefault(), d());
63
- },
64
- placeholder: "Write your comment...",
65
- rows: 3
66
- })
67
- }),
68
- /* @__PURE__ */ n("div", {
69
- className: "rte-dialog__footer",
70
- children: [/* @__PURE__ */ t("button", {
71
- type: "button",
72
- className: "rte-dialog__btn rte-dialog__btn--cancel",
73
- onClick: i,
74
- children: "Cancel"
75
- }), /* @__PURE__ */ t("button", {
76
- type: "button",
77
- className: "rte-dialog__btn rte-dialog__btn--submit",
78
- onClick: d,
79
- disabled: !a.trim(),
80
- children: "Add Comment"
81
- })]
82
- })
83
- ]
84
- })
85
- });
86
- };
87
- export {
88
- y as default
1
+ import { useEffect as e, useRef as t, useState as n } from "react";
2
+ import { jsx as r, jsxs as i } from "react/jsx-runtime";
3
+ //#region src/components/pro/RichTextEditor/CommentDialog.tsx
4
+ var a = ({ open: a, onSubmit: o, onClose: s }) => {
5
+ let [c, l] = n(""), u = t(null);
6
+ if (e(() => {
7
+ a && (l(""), setTimeout(() => u.current?.focus(), 50));
8
+ }, [a]), e(() => {
9
+ if (!a) return;
10
+ let e = (e) => {
11
+ e.key === "Escape" && s();
12
+ };
13
+ return document.addEventListener("keydown", e), () => document.removeEventListener("keydown", e);
14
+ }, [a, s]), !a) return null;
15
+ let d = () => {
16
+ c.trim() && (o(c.trim()), l(""));
17
+ };
18
+ return /* @__PURE__ */ r("div", {
19
+ className: "rte-dialog-overlay",
20
+ onClick: s,
21
+ children: /* @__PURE__ */ i("div", {
22
+ className: "rte-dialog",
23
+ onClick: (e) => e.stopPropagation(),
24
+ children: [
25
+ /* @__PURE__ */ i("div", {
26
+ className: "rte-dialog__header",
27
+ children: [/* @__PURE__ */ r("span", {
28
+ className: "rte-dialog__title",
29
+ children: "Add Comment"
30
+ }), /* @__PURE__ */ r("button", {
31
+ type: "button",
32
+ className: "rte-dialog__close",
33
+ onClick: s,
34
+ children: /* @__PURE__ */ i("svg", {
35
+ width: "16",
36
+ height: "16",
37
+ viewBox: "0 0 24 24",
38
+ fill: "none",
39
+ stroke: "currentColor",
40
+ strokeWidth: "2",
41
+ children: [/* @__PURE__ */ r("line", {
42
+ x1: "18",
43
+ y1: "6",
44
+ x2: "6",
45
+ y2: "18"
46
+ }), /* @__PURE__ */ r("line", {
47
+ x1: "6",
48
+ y1: "6",
49
+ x2: "18",
50
+ y2: "18"
51
+ })]
52
+ })
53
+ })]
54
+ }),
55
+ /* @__PURE__ */ r("div", {
56
+ className: "rte-dialog__body",
57
+ children: /* @__PURE__ */ r("textarea", {
58
+ ref: u,
59
+ className: "rte-dialog__textarea",
60
+ value: c,
61
+ onChange: (e) => l(e.target.value),
62
+ onKeyDown: (e) => {
63
+ e.key === "Enter" && !e.shiftKey && (e.preventDefault(), d());
64
+ },
65
+ placeholder: "Write your comment...",
66
+ rows: 3
67
+ })
68
+ }),
69
+ /* @__PURE__ */ i("div", {
70
+ className: "rte-dialog__footer",
71
+ children: [/* @__PURE__ */ r("button", {
72
+ type: "button",
73
+ className: "rte-dialog__btn rte-dialog__btn--cancel",
74
+ onClick: s,
75
+ children: "Cancel"
76
+ }), /* @__PURE__ */ r("button", {
77
+ type: "button",
78
+ className: "rte-dialog__btn rte-dialog__btn--submit",
79
+ onClick: d,
80
+ disabled: !c.trim(),
81
+ children: "Add Comment"
82
+ })]
83
+ })
84
+ ]
85
+ })
86
+ });
89
87
  };
88
+ //#endregion
89
+ export { a as default };
90
90
 
91
91
  //# sourceMappingURL=CommentDialog.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CommentDialog.js","names":[],"sources":["../../../../src/components/pro/RichTextEditor/CommentDialog.tsx"],"sourcesContent":["import React, { useState, useRef, useEffect } from 'react';\n\ninterface CommentDialogProps {\n open: boolean;\n onSubmit: (text: string) => void;\n onClose: () => void;\n}\n\nconst CommentDialog: React.FC<CommentDialogProps> = ({ open, onSubmit, onClose }) => {\n const [text, setText] = useState('');\n const inputRef = useRef<HTMLTextAreaElement>(null);\n\n useEffect(() => {\n if (open) {\n setText('');\n setTimeout(() => inputRef.current?.focus(), 50);\n }\n }, [open]);\n\n useEffect(() => {\n if (!open) return;\n const handleKey = (e: KeyboardEvent) => {\n if (e.key === 'Escape') onClose();\n };\n document.addEventListener('keydown', handleKey);\n return () => document.removeEventListener('keydown', handleKey);\n }, [open, onClose]);\n\n if (!open) return null;\n\n const handleSubmit = () => {\n if (text.trim()) {\n onSubmit(text.trim());\n setText('');\n }\n };\n\n return (\n <div className=\"rte-dialog-overlay\" onClick={onClose}>\n <div className=\"rte-dialog\" onClick={(e) => e.stopPropagation()}>\n <div className=\"rte-dialog__header\">\n <span className=\"rte-dialog__title\">Add Comment</span>\n <button type=\"button\" className=\"rte-dialog__close\" onClick={onClose}>\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\"><line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" /><line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" /></svg>\n </button>\n </div>\n <div className=\"rte-dialog__body\">\n <textarea\n ref={inputRef}\n className=\"rte-dialog__textarea\"\n value={text}\n onChange={(e) => setText(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === 'Enter' && !e.shiftKey) { e.preventDefault(); handleSubmit(); }\n }}\n placeholder=\"Write your comment...\"\n rows={3}\n />\n </div>\n <div className=\"rte-dialog__footer\">\n <button type=\"button\" className=\"rte-dialog__btn rte-dialog__btn--cancel\" onClick={onClose}>Cancel</button>\n <button type=\"button\" className=\"rte-dialog__btn rte-dialog__btn--submit\" onClick={handleSubmit} disabled={!text.trim()}>Add Comment</button>\n </div>\n </div>\n </div>\n );\n};\n\nexport default CommentDialog;\n"],"mappings":";;AAQA,IAAM,IAAA,CAA+C,EAAE,MAAA,GAAM,UAAA,GAAU,SAAA,EAAA,MAAc;AACnF,QAAM,CAAC,GAAM,CAAA,IAAW,EAAS,EAAE,GAC7B,IAAW,EAA4B,IAAI;AAkBjD,MAhBA,EAAA,MAAgB;AACd,IAAI,MACF,EAAQ,EAAE,GACV,WAAA,MAAiB,EAAS,SAAS,MAAM,GAAG,EAAE;AAAA,EAElD,GAAG,CAAC,CAAI,CAAC,GAET,EAAA,MAAgB;AACd,QAAI,CAAC,EAAM;AACX,UAAM,IAAA,CAAa,MAAqB;AACtC,MAAI,EAAE,QAAQ,YAAU,EAAQ;AAAA,IAClC;AACA,oBAAS,iBAAiB,WAAW,CAAS,GAC9C,MAAa,SAAS,oBAAoB,WAAW,CAAS;AAAA,EAChE,GAAG,CAAC,GAAM,CAAO,CAAC,GAEd,CAAC,EAAM,QAAO;AAElB,QAAM,IAAA,MAAqB;AACzB,IAAI,EAAK,KAAK,MACZ,EAAS,EAAK,KAAK,CAAC,GACpB,EAAQ,EAAE;AAAA,EAEd;AAEA,SACE,gBAAA,EAAC,OAAD;AAAA,IAAK,WAAU;AAAA,IAAqB,SAAS;AAAA,cAC3C,gBAAA,EAAC,OAAD;AAAA,MAAK,WAAU;AAAA,MAAa,SAAA,CAAU,MAAM,EAAE,gBAAgB;AAAA,gBAA9D;AAAA,QACE,gBAAA,EAAC,OAAD;AAAA,UAAK,WAAU;AAAA,oBAAf,CACE,gBAAA,EAAC,QAAD;AAAA,YAAM,WAAU;AAAA,sBAAoB;AAAA,UAAiB,CAAA,GACrD,gBAAA,EAAC,UAAD;AAAA,YAAQ,MAAK;AAAA,YAAS,WAAU;AAAA,YAAoB,SAAS;AAAA,sBAC3D,gBAAA,EAAC,OAAD;AAAA,cAAK,OAAM;AAAA,cAAK,QAAO;AAAA,cAAK,SAAQ;AAAA,cAAY,MAAK;AAAA,cAAO,QAAO;AAAA,cAAe,aAAY;AAAA,wBAA9F,CAAkG,gBAAA,EAAC,QAAD;AAAA,gBAAM,IAAG;AAAA,gBAAK,IAAG;AAAA,gBAAI,IAAG;AAAA,gBAAI,IAAG;AAAA,cAAM,CAAA,GAAC,gBAAA,EAAC,QAAD;AAAA,gBAAM,IAAG;AAAA,gBAAI,IAAG;AAAA,gBAAI,IAAG;AAAA,gBAAK,IAAG;AAAA,cAAM,CAAA,CAAM;AAAA;UAC7K,CAAA,CACL;AAAA;QACL,gBAAA,EAAC,OAAD;AAAA,UAAK,WAAU;AAAA,oBACb,gBAAA,EAAC,YAAD;AAAA,YACE,KAAK;AAAA,YACL,WAAU;AAAA,YACV,OAAO;AAAA,YACP,UAAA,CAAW,MAAM,EAAQ,EAAE,OAAO,KAAK;AAAA,YACvC,WAAA,CAAY,MAAM;AAChB,cAAI,EAAE,QAAQ,WAAW,CAAC,EAAE,aAAY,EAAE,eAAe,GAAG,EAAa;AAAA,YAC3E;AAAA,YACA,aAAY;AAAA,YACZ,MAAM;AAAA,UACP,CAAA;AAAA,QACE,CAAA;AAAA,QACL,gBAAA,EAAC,OAAD;AAAA,UAAK,WAAU;AAAA,oBAAf,CACE,gBAAA,EAAC,UAAD;AAAA,YAAQ,MAAK;AAAA,YAAS,WAAU;AAAA,YAA0C,SAAS;AAAA,sBAAS;AAAA,UAAc,CAAA,GAC1G,gBAAA,EAAC,UAAD;AAAA,YAAQ,MAAK;AAAA,YAAS,WAAU;AAAA,YAA0C,SAAS;AAAA,YAAc,UAAU,CAAC,EAAK,KAAK;AAAA,sBAAG;AAAA,UAAmB,CAAA,CACzI;AAAA;MACF;AAAA;EACF,CAAA;AAET"}
1
+ {"version":3,"file":"CommentDialog.js","names":[],"sources":["../../../../src/components/pro/RichTextEditor/CommentDialog.tsx"],"sourcesContent":["import React, { useState, useRef, useEffect } from 'react';\n\ninterface CommentDialogProps {\n open: boolean;\n onSubmit: (text: string) => void;\n onClose: () => void;\n}\n\nconst CommentDialog: React.FC<CommentDialogProps> = ({ open, onSubmit, onClose }) => {\n const [text, setText] = useState('');\n const inputRef = useRef<HTMLTextAreaElement>(null);\n\n useEffect(() => {\n if (open) {\n setText('');\n setTimeout(() => inputRef.current?.focus(), 50);\n }\n }, [open]);\n\n useEffect(() => {\n if (!open) return;\n const handleKey = (e: KeyboardEvent) => {\n if (e.key === 'Escape') onClose();\n };\n document.addEventListener('keydown', handleKey);\n return () => document.removeEventListener('keydown', handleKey);\n }, [open, onClose]);\n\n if (!open) return null;\n\n const handleSubmit = () => {\n if (text.trim()) {\n onSubmit(text.trim());\n setText('');\n }\n };\n\n return (\n <div className=\"rte-dialog-overlay\" onClick={onClose}>\n <div className=\"rte-dialog\" onClick={(e) => e.stopPropagation()}>\n <div className=\"rte-dialog__header\">\n <span className=\"rte-dialog__title\">Add Comment</span>\n <button type=\"button\" className=\"rte-dialog__close\" onClick={onClose}>\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\"><line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" /><line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" /></svg>\n </button>\n </div>\n <div className=\"rte-dialog__body\">\n <textarea\n ref={inputRef}\n className=\"rte-dialog__textarea\"\n value={text}\n onChange={(e) => setText(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === 'Enter' && !e.shiftKey) { e.preventDefault(); handleSubmit(); }\n }}\n placeholder=\"Write your comment...\"\n rows={3}\n />\n </div>\n <div className=\"rte-dialog__footer\">\n <button type=\"button\" className=\"rte-dialog__btn rte-dialog__btn--cancel\" onClick={onClose}>Cancel</button>\n <button type=\"button\" className=\"rte-dialog__btn rte-dialog__btn--submit\" onClick={handleSubmit} disabled={!text.trim()}>Add Comment</button>\n </div>\n </div>\n </div>\n );\n};\n\nexport default CommentDialog;\n"],"mappings":";;;AAQA,IAAM,KAA+C,EAAE,SAAM,aAAU,iBAAc;CACnF,IAAM,CAAC,GAAM,KAAW,EAAS,EAAE,GAC7B,IAAW,EAA4B,IAAI;CAkBjD,IAhBA,QAAgB;EACd,AAAI,MACF,EAAQ,EAAE,GACV,iBAAiB,EAAS,SAAS,MAAM,GAAG,EAAE;CAElD,GAAG,CAAC,CAAI,CAAC,GAET,QAAgB;EACd,IAAI,CAAC,GAAM;EACX,IAAM,KAAa,MAAqB;GACtC,AAAI,EAAE,QAAQ,YAAU,EAAQ;EAClC;EAEA,OADA,SAAS,iBAAiB,WAAW,CAAS,SACjC,SAAS,oBAAoB,WAAW,CAAS;CAChE,GAAG,CAAC,GAAM,CAAO,CAAC,GAEd,CAAC,GAAM,OAAO;CAElB,IAAM,UAAqB;EACzB,AAAI,EAAK,KAAK,MACZ,EAAS,EAAK,KAAK,CAAC,GACpB,EAAQ,EAAE;CAEd;CAEA,OACE,kBAAC,OAAD;EAAK,WAAU;EAAqB,SAAS;EAC3C,UAAA,kBAAC,OAAD;GAAK,WAAU;GAAa,UAAU,MAAM,EAAE,gBAAgB;GAA9D,UAAA;IACE,kBAAC,OAAD;KAAK,WAAU;KAAf,UAAA,CACE,kBAAC,QAAD;MAAM,WAAU;MAAoB,UAAA;KAAiB,CAAA,GACrD,kBAAC,UAAD;MAAQ,MAAK;MAAS,WAAU;MAAoB,SAAS;MAC3D,UAAA,kBAAC,OAAD;OAAK,OAAM;OAAK,QAAO;OAAK,SAAQ;OAAY,MAAK;OAAO,QAAO;OAAe,aAAY;OAA9F,UAAA,CAAkG,kBAAC,QAAD;QAAM,IAAG;QAAK,IAAG;QAAI,IAAG;QAAI,IAAG;OAAM,CAAA,GAAC,kBAAC,QAAD;QAAM,IAAG;QAAI,IAAG;QAAI,IAAG;QAAK,IAAG;OAAM,CAAA,CAAM;;KAC7K,CAAA,CACL;;IACL,kBAAC,OAAD;KAAK,WAAU;KACb,UAAA,kBAAC,YAAD;MACE,KAAK;MACL,WAAU;MACV,OAAO;MACP,WAAW,MAAM,EAAQ,EAAE,OAAO,KAAK;MACvC,YAAY,MAAM;OAChB,AAAI,EAAE,QAAQ,WAAW,CAAC,EAAE,aAAY,EAAE,eAAe,GAAG,EAAa;MAC3E;MACA,aAAY;MACZ,MAAM;KACP,CAAA;IACE,CAAA;IACL,kBAAC,OAAD;KAAK,WAAU;KAAf,UAAA,CACE,kBAAC,UAAD;MAAQ,MAAK;MAAS,WAAU;MAA0C,SAAS;MAAS,UAAA;KAAc,CAAA,GAC1G,kBAAC,UAAD;MAAQ,MAAK;MAAS,WAAU;MAA0C,SAAS;MAAc,UAAU,CAAC,EAAK,KAAK;MAAG,UAAA;KAAmB,CAAA,CACzI;;GACF;;CACF,CAAA;AAET"}