roosterjs-content-model-plugins 0.27.0 → 0.28.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (431) hide show
  1. package/lib/autoFormat/AutoFormatPlugin.d.ts +9 -0
  2. package/lib/autoFormat/AutoFormatPlugin.js +24 -4
  3. package/lib/autoFormat/AutoFormatPlugin.js.map +1 -1
  4. package/lib/autoFormat/link/createLink.d.ts +5 -0
  5. package/lib/autoFormat/link/createLink.js +26 -0
  6. package/lib/autoFormat/link/createLink.js.map +1 -0
  7. package/lib/autoFormat/link/createLinkAfterSpace.d.ts +5 -0
  8. package/lib/autoFormat/link/createLinkAfterSpace.js +39 -0
  9. package/lib/autoFormat/link/createLinkAfterSpace.js.map +1 -0
  10. package/lib/autoFormat/link/getLinkSegment.d.ts +5 -0
  11. package/lib/autoFormat/link/getLinkSegment.js +27 -0
  12. package/lib/autoFormat/link/getLinkSegment.js.map +1 -0
  13. package/lib/autoFormat/link/unlink.d.ts +5 -0
  14. package/lib/autoFormat/link/unlink.js +20 -0
  15. package/lib/autoFormat/link/unlink.js.map +1 -0
  16. package/lib/autoFormat/list/convertAlphaToDecimals.js.map +1 -0
  17. package/lib/autoFormat/list/getIndex.js.map +1 -0
  18. package/lib/autoFormat/{utils → list}/getListTypeStyle.js +3 -0
  19. package/lib/autoFormat/list/getListTypeStyle.js.map +1 -0
  20. package/lib/autoFormat/list/getNumberingListStyle.js.map +1 -0
  21. package/lib/autoFormat/{keyboardListTrigger.js → list/keyboardListTrigger.js} +17 -15
  22. package/lib/autoFormat/list/keyboardListTrigger.js.map +1 -0
  23. package/lib/contextMenuBase/ContextMenuPluginBase.d.ts +58 -0
  24. package/lib/contextMenuBase/ContextMenuPluginBase.js +84 -0
  25. package/lib/contextMenuBase/ContextMenuPluginBase.js.map +1 -0
  26. package/lib/edit/EditPlugin.js.map +1 -1
  27. package/lib/edit/deleteSteps/deleteAllSegmentBefore.js.map +1 -1
  28. package/lib/edit/deleteSteps/deleteCollapsedSelection.js.map +1 -1
  29. package/lib/edit/deleteSteps/deleteEmptyQuote.d.ts +5 -0
  30. package/lib/edit/deleteSteps/deleteEmptyQuote.js +60 -0
  31. package/lib/edit/deleteSteps/deleteEmptyQuote.js.map +1 -0
  32. package/lib/edit/deleteSteps/deleteList.js +2 -1
  33. package/lib/edit/deleteSteps/deleteList.js.map +1 -1
  34. package/lib/edit/deleteSteps/deleteWordSelection.js.map +1 -1
  35. package/lib/edit/handleKeyboardEventCommon.js.map +1 -1
  36. package/lib/edit/inputSteps/handleEnterOnList.js +1 -1
  37. package/lib/edit/inputSteps/handleEnterOnList.js.map +1 -1
  38. package/lib/edit/keyboardDelete.js +9 -1
  39. package/lib/edit/keyboardDelete.js.map +1 -1
  40. package/lib/edit/keyboardInput.js +2 -1
  41. package/lib/edit/keyboardInput.js.map +1 -1
  42. package/lib/edit/keyboardTab.js.map +1 -1
  43. package/lib/edit/tabUtils/handleTabOnList.js.map +1 -1
  44. package/lib/edit/tabUtils/handleTabOnParagraph.js +7 -0
  45. package/lib/edit/tabUtils/handleTabOnParagraph.js.map +1 -1
  46. package/lib/edit/utils/getLeafSiblingBlock.js.map +1 -1
  47. package/lib/index.d.ts +2 -1
  48. package/lib/index.js +5 -1
  49. package/lib/index.js.map +1 -1
  50. package/lib/paste/Excel/processPastedContentFromExcel.js +1 -1
  51. package/lib/paste/Excel/processPastedContentFromExcel.js.map +1 -1
  52. package/lib/paste/PastePlugin.js +6 -6
  53. package/lib/paste/PastePlugin.js.map +1 -1
  54. package/lib/paste/PowerPoint/processPastedContentFromPowerPoint.js.map +1 -1
  55. package/lib/paste/WacComponents/constants.js.map +1 -1
  56. package/lib/paste/WacComponents/processPastedContentWacComponents.js +6 -6
  57. package/lib/paste/WacComponents/processPastedContentWacComponents.js.map +1 -1
  58. package/lib/paste/WordDesktop/WordMetadata.js.map +1 -1
  59. package/lib/paste/WordDesktop/getStyleMetadata.d.ts +1 -1
  60. package/lib/paste/WordDesktop/getStyleMetadata.js +2 -1
  61. package/lib/paste/WordDesktop/getStyleMetadata.js.map +1 -1
  62. package/lib/paste/WordDesktop/processPastedContentFromWordDesktop.js +5 -17
  63. package/lib/paste/WordDesktop/processPastedContentFromWordDesktop.js.map +1 -1
  64. package/lib/paste/WordDesktop/processWordComments.js.map +1 -1
  65. package/lib/paste/WordDesktop/processWordLists.js.map +1 -1
  66. package/lib/paste/WordDesktop/removeNegativeTextIndentParser.js.map +1 -1
  67. package/lib/paste/pasteSourceValidations/constants.js.map +1 -1
  68. package/lib/paste/pasteSourceValidations/documentContainWacElements.js.map +1 -1
  69. package/lib/paste/pasteSourceValidations/getPasteSource.js.map +1 -1
  70. package/lib/paste/pasteSourceValidations/isExcelDesktopDocument.js.map +1 -1
  71. package/lib/paste/pasteSourceValidations/isExcelOnlineDocument.js.map +1 -1
  72. package/lib/paste/pasteSourceValidations/isGoogleSheetDocument.js.map +1 -1
  73. package/lib/paste/pasteSourceValidations/isPowerPointDesktopDocument.js.map +1 -1
  74. package/lib/paste/pasteSourceValidations/isWordDesktopDocument.js.map +1 -1
  75. package/lib/paste/pasteSourceValidations/shouldConvertToSingleImage.js.map +1 -1
  76. package/lib/paste/utils/addParser.d.ts +1 -1
  77. package/lib/paste/utils/addParser.js +2 -1
  78. package/lib/paste/utils/addParser.js.map +1 -1
  79. package/lib/paste/utils/deprecatedColorParser.js.map +1 -1
  80. package/lib/paste/utils/getStyles.js.map +1 -1
  81. package/lib/paste/utils/linkParser.js.map +1 -1
  82. package/lib/paste/utils/setProcessor.js.map +1 -1
  83. package/lib/pluginUtils/CreateElement/CreateElementData.d.ts +1 -1
  84. package/lib/pluginUtils/CreateElement/CreateElementData.js.map +1 -1
  85. package/lib/pluginUtils/CreateElement/createElement.d.ts +2 -2
  86. package/lib/pluginUtils/CreateElement/createElement.js +2 -1
  87. package/lib/pluginUtils/CreateElement/createElement.js.map +1 -1
  88. package/lib/pluginUtils/Disposable.d.ts +1 -1
  89. package/lib/pluginUtils/Disposable.js.map +1 -1
  90. package/lib/pluginUtils/DragAndDrop/DragAndDropHandler.d.ts +1 -1
  91. package/lib/pluginUtils/DragAndDrop/DragAndDropHandler.js.map +1 -1
  92. package/lib/pluginUtils/DragAndDrop/DragAndDropHelper.d.ts +3 -3
  93. package/lib/pluginUtils/DragAndDrop/DragAndDropHelper.js +2 -1
  94. package/lib/pluginUtils/DragAndDrop/DragAndDropHelper.js.map +1 -1
  95. package/lib/pluginUtils/Rect/getIntersectedRect.d.ts +1 -1
  96. package/lib/pluginUtils/Rect/getIntersectedRect.js +4 -3
  97. package/lib/pluginUtils/Rect/getIntersectedRect.js.map +1 -1
  98. package/lib/shortcut/ShortcutCommand.js.map +1 -1
  99. package/lib/shortcut/ShortcutPlugin.js +2 -0
  100. package/lib/shortcut/ShortcutPlugin.js.map +1 -1
  101. package/lib/shortcut/shortcuts.d.ts +12 -0
  102. package/lib/shortcut/shortcuts.js +34 -1
  103. package/lib/shortcut/shortcuts.js.map +1 -1
  104. package/lib/shortcut/utils/setShortcutIndentationCommand.d.ts +5 -0
  105. package/lib/shortcut/utils/setShortcutIndentationCommand.js +22 -0
  106. package/lib/shortcut/utils/setShortcutIndentationCommand.js.map +1 -0
  107. package/lib/tableEdit/TableEditPlugin.js +5 -5
  108. package/lib/tableEdit/TableEditPlugin.js.map +1 -1
  109. package/lib/tableEdit/editors/TableEditor.d.ts +1 -1
  110. package/lib/tableEdit/editors/TableEditor.js +17 -17
  111. package/lib/tableEdit/editors/TableEditor.js.map +1 -1
  112. package/lib/tableEdit/editors/features/CellResizer.d.ts +2 -2
  113. package/lib/tableEdit/editors/features/CellResizer.js +7 -7
  114. package/lib/tableEdit/editors/features/CellResizer.js.map +1 -1
  115. package/{lib-mjs/tableEdit/editors/features/TableEditorFeature.d.ts → lib/tableEdit/editors/features/TableEditFeature.d.ts} +2 -2
  116. package/lib/tableEdit/editors/features/{TableEditorFeature.js → TableEditFeature.js} +1 -1
  117. package/lib/tableEdit/editors/features/TableEditFeature.js.map +1 -0
  118. package/lib/tableEdit/editors/features/TableInserter.d.ts +2 -2
  119. package/lib/tableEdit/editors/features/TableInserter.js +5 -5
  120. package/lib/tableEdit/editors/features/TableInserter.js.map +1 -1
  121. package/lib/tableEdit/editors/features/TableMover.d.ts +2 -2
  122. package/lib/tableEdit/editors/features/TableMover.js +6 -6
  123. package/lib/tableEdit/editors/features/TableMover.js.map +1 -1
  124. package/lib/tableEdit/editors/features/TableResizer.d.ts +2 -2
  125. package/lib/tableEdit/editors/features/TableResizer.js +11 -8
  126. package/lib/tableEdit/editors/features/TableResizer.js.map +1 -1
  127. package/lib-amd/autoFormat/AutoFormatPlugin.d.ts +9 -0
  128. package/lib-amd/autoFormat/AutoFormatPlugin.js +21 -4
  129. package/lib-amd/autoFormat/AutoFormatPlugin.js.map +1 -1
  130. package/lib-amd/autoFormat/link/createLink.d.ts +5 -0
  131. package/lib-amd/autoFormat/link/createLink.js +26 -0
  132. package/lib-amd/autoFormat/link/createLink.js.map +1 -0
  133. package/lib-amd/autoFormat/link/createLinkAfterSpace.d.ts +5 -0
  134. package/lib-amd/autoFormat/link/createLinkAfterSpace.js +38 -0
  135. package/lib-amd/autoFormat/link/createLinkAfterSpace.js.map +1 -0
  136. package/lib-amd/autoFormat/link/getLinkSegment.d.ts +5 -0
  137. package/lib-amd/autoFormat/link/getLinkSegment.js +27 -0
  138. package/lib-amd/autoFormat/link/getLinkSegment.js.map +1 -0
  139. package/lib-amd/autoFormat/link/unlink.d.ts +5 -0
  140. package/lib-amd/autoFormat/link/unlink.js +21 -0
  141. package/lib-amd/autoFormat/link/unlink.js.map +1 -0
  142. package/lib-amd/autoFormat/list/convertAlphaToDecimals.js.map +1 -0
  143. package/lib-amd/autoFormat/list/getIndex.js.map +1 -0
  144. package/lib-amd/autoFormat/{utils → list}/getListTypeStyle.js +3 -0
  145. package/lib-amd/autoFormat/list/getListTypeStyle.js.map +1 -0
  146. package/lib-amd/autoFormat/list/getNumberingListStyle.js.map +1 -0
  147. package/lib-amd/autoFormat/list/keyboardListTrigger.js +46 -0
  148. package/lib-amd/autoFormat/list/keyboardListTrigger.js.map +1 -0
  149. package/lib-amd/contextMenuBase/ContextMenuPluginBase.d.ts +58 -0
  150. package/lib-amd/contextMenuBase/ContextMenuPluginBase.js +86 -0
  151. package/lib-amd/contextMenuBase/ContextMenuPluginBase.js.map +1 -0
  152. package/lib-amd/edit/EditPlugin.js.map +1 -1
  153. package/lib-amd/edit/deleteSteps/deleteAllSegmentBefore.js.map +1 -1
  154. package/lib-amd/edit/deleteSteps/deleteCollapsedSelection.js.map +1 -1
  155. package/lib-amd/edit/deleteSteps/deleteEmptyQuote.d.ts +5 -0
  156. package/lib-amd/edit/deleteSteps/deleteEmptyQuote.js +60 -0
  157. package/lib-amd/edit/deleteSteps/deleteEmptyQuote.js.map +1 -0
  158. package/lib-amd/edit/deleteSteps/deleteList.js +2 -1
  159. package/lib-amd/edit/deleteSteps/deleteList.js.map +1 -1
  160. package/lib-amd/edit/deleteSteps/deleteWordSelection.js.map +1 -1
  161. package/lib-amd/edit/handleKeyboardEventCommon.js.map +1 -1
  162. package/lib-amd/edit/inputSteps/handleEnterOnList.js +1 -1
  163. package/lib-amd/edit/inputSteps/handleEnterOnList.js.map +1 -1
  164. package/lib-amd/edit/keyboardDelete.js +9 -2
  165. package/lib-amd/edit/keyboardDelete.js.map +1 -1
  166. package/lib-amd/edit/keyboardInput.js +2 -2
  167. package/lib-amd/edit/keyboardInput.js.map +1 -1
  168. package/lib-amd/edit/keyboardTab.js.map +1 -1
  169. package/lib-amd/edit/tabUtils/handleTabOnList.js.map +1 -1
  170. package/lib-amd/edit/tabUtils/handleTabOnParagraph.js +7 -0
  171. package/lib-amd/edit/tabUtils/handleTabOnParagraph.js.map +1 -1
  172. package/lib-amd/edit/utils/getLeafSiblingBlock.js.map +1 -1
  173. package/lib-amd/index.d.ts +2 -1
  174. package/lib-amd/index.js +5 -2
  175. package/lib-amd/index.js.map +1 -1
  176. package/lib-amd/paste/Excel/processPastedContentFromExcel.js +1 -1
  177. package/lib-amd/paste/Excel/processPastedContentFromExcel.js.map +1 -1
  178. package/lib-amd/paste/PastePlugin.js +6 -6
  179. package/lib-amd/paste/PastePlugin.js.map +1 -1
  180. package/lib-amd/paste/PowerPoint/processPastedContentFromPowerPoint.js.map +1 -1
  181. package/lib-amd/paste/WacComponents/constants.js.map +1 -1
  182. package/lib-amd/paste/WacComponents/processPastedContentWacComponents.js +6 -6
  183. package/lib-amd/paste/WacComponents/processPastedContentWacComponents.js.map +1 -1
  184. package/lib-amd/paste/WordDesktop/WordMetadata.js.map +1 -1
  185. package/lib-amd/paste/WordDesktop/getStyleMetadata.d.ts +1 -1
  186. package/lib-amd/paste/WordDesktop/getStyleMetadata.js +2 -1
  187. package/lib-amd/paste/WordDesktop/getStyleMetadata.js.map +1 -1
  188. package/lib-amd/paste/WordDesktop/processPastedContentFromWordDesktop.js +5 -17
  189. package/lib-amd/paste/WordDesktop/processPastedContentFromWordDesktop.js.map +1 -1
  190. package/lib-amd/paste/WordDesktop/processWordComments.js.map +1 -1
  191. package/lib-amd/paste/WordDesktop/processWordLists.js.map +1 -1
  192. package/lib-amd/paste/WordDesktop/removeNegativeTextIndentParser.js.map +1 -1
  193. package/lib-amd/paste/pasteSourceValidations/constants.js.map +1 -1
  194. package/lib-amd/paste/pasteSourceValidations/documentContainWacElements.js.map +1 -1
  195. package/lib-amd/paste/pasteSourceValidations/getPasteSource.js.map +1 -1
  196. package/lib-amd/paste/pasteSourceValidations/isExcelDesktopDocument.js.map +1 -1
  197. package/lib-amd/paste/pasteSourceValidations/isExcelOnlineDocument.js.map +1 -1
  198. package/lib-amd/paste/pasteSourceValidations/isGoogleSheetDocument.js.map +1 -1
  199. package/lib-amd/paste/pasteSourceValidations/isPowerPointDesktopDocument.js.map +1 -1
  200. package/lib-amd/paste/pasteSourceValidations/isWordDesktopDocument.js.map +1 -1
  201. package/lib-amd/paste/pasteSourceValidations/shouldConvertToSingleImage.js.map +1 -1
  202. package/lib-amd/paste/utils/addParser.d.ts +1 -1
  203. package/lib-amd/paste/utils/addParser.js +2 -1
  204. package/lib-amd/paste/utils/addParser.js.map +1 -1
  205. package/lib-amd/paste/utils/deprecatedColorParser.js.map +1 -1
  206. package/lib-amd/paste/utils/getStyles.js.map +1 -1
  207. package/lib-amd/paste/utils/linkParser.js.map +1 -1
  208. package/lib-amd/paste/utils/setProcessor.js.map +1 -1
  209. package/lib-amd/pluginUtils/CreateElement/CreateElementData.d.ts +1 -1
  210. package/lib-amd/pluginUtils/CreateElement/CreateElementData.js.map +1 -1
  211. package/lib-amd/pluginUtils/CreateElement/createElement.d.ts +2 -2
  212. package/lib-amd/pluginUtils/CreateElement/createElement.js +2 -1
  213. package/lib-amd/pluginUtils/CreateElement/createElement.js.map +1 -1
  214. package/lib-amd/pluginUtils/Disposable.d.ts +1 -1
  215. package/lib-amd/pluginUtils/Disposable.js.map +1 -1
  216. package/lib-amd/pluginUtils/DragAndDrop/DragAndDropHandler.d.ts +1 -1
  217. package/lib-amd/pluginUtils/DragAndDrop/DragAndDropHandler.js.map +1 -1
  218. package/lib-amd/pluginUtils/DragAndDrop/DragAndDropHelper.d.ts +3 -3
  219. package/lib-amd/pluginUtils/DragAndDrop/DragAndDropHelper.js +2 -1
  220. package/lib-amd/pluginUtils/DragAndDrop/DragAndDropHelper.js.map +1 -1
  221. package/lib-amd/pluginUtils/Rect/getIntersectedRect.d.ts +1 -1
  222. package/lib-amd/pluginUtils/Rect/getIntersectedRect.js +4 -3
  223. package/lib-amd/pluginUtils/Rect/getIntersectedRect.js.map +1 -1
  224. package/lib-amd/shortcut/ShortcutCommand.js.map +1 -1
  225. package/lib-amd/shortcut/ShortcutPlugin.js +2 -0
  226. package/lib-amd/shortcut/ShortcutPlugin.js.map +1 -1
  227. package/lib-amd/shortcut/shortcuts.d.ts +12 -0
  228. package/lib-amd/shortcut/shortcuts.js +34 -2
  229. package/lib-amd/shortcut/shortcuts.js.map +1 -1
  230. package/lib-amd/shortcut/utils/setShortcutIndentationCommand.d.ts +5 -0
  231. package/lib-amd/shortcut/utils/setShortcutIndentationCommand.js +22 -0
  232. package/lib-amd/shortcut/utils/setShortcutIndentationCommand.js.map +1 -0
  233. package/lib-amd/tableEdit/TableEditPlugin.js +5 -4
  234. package/lib-amd/tableEdit/TableEditPlugin.js.map +1 -1
  235. package/lib-amd/tableEdit/editors/TableEditor.d.ts +1 -1
  236. package/lib-amd/tableEdit/editors/TableEditor.js +17 -16
  237. package/lib-amd/tableEdit/editors/TableEditor.js.map +1 -1
  238. package/lib-amd/tableEdit/editors/features/CellResizer.d.ts +2 -2
  239. package/lib-amd/tableEdit/editors/features/CellResizer.js +8 -7
  240. package/lib-amd/tableEdit/editors/features/CellResizer.js.map +1 -1
  241. package/lib-amd/tableEdit/editors/features/{TableEditorFeature.d.ts → TableEditFeature.d.ts} +2 -2
  242. package/lib-amd/tableEdit/editors/features/{TableEditorFeature.js → TableEditFeature.js} +1 -1
  243. package/lib-amd/tableEdit/editors/features/TableEditFeature.js.map +1 -0
  244. package/lib-amd/tableEdit/editors/features/TableInserter.d.ts +2 -2
  245. package/lib-amd/tableEdit/editors/features/TableInserter.js +6 -5
  246. package/lib-amd/tableEdit/editors/features/TableInserter.js.map +1 -1
  247. package/lib-amd/tableEdit/editors/features/TableMover.d.ts +2 -2
  248. package/lib-amd/tableEdit/editors/features/TableMover.js +7 -6
  249. package/lib-amd/tableEdit/editors/features/TableMover.js.map +1 -1
  250. package/lib-amd/tableEdit/editors/features/TableResizer.d.ts +2 -2
  251. package/lib-amd/tableEdit/editors/features/TableResizer.js +12 -8
  252. package/lib-amd/tableEdit/editors/features/TableResizer.js.map +1 -1
  253. package/lib-mjs/autoFormat/AutoFormatPlugin.d.ts +9 -0
  254. package/lib-mjs/autoFormat/AutoFormatPlugin.js +24 -4
  255. package/lib-mjs/autoFormat/AutoFormatPlugin.js.map +1 -1
  256. package/lib-mjs/autoFormat/link/createLink.d.ts +5 -0
  257. package/lib-mjs/autoFormat/link/createLink.js +22 -0
  258. package/lib-mjs/autoFormat/link/createLink.js.map +1 -0
  259. package/lib-mjs/autoFormat/link/createLinkAfterSpace.d.ts +5 -0
  260. package/lib-mjs/autoFormat/link/createLinkAfterSpace.js +35 -0
  261. package/lib-mjs/autoFormat/link/createLinkAfterSpace.js.map +1 -0
  262. package/lib-mjs/autoFormat/link/getLinkSegment.d.ts +5 -0
  263. package/lib-mjs/autoFormat/link/getLinkSegment.js +23 -0
  264. package/lib-mjs/autoFormat/link/getLinkSegment.js.map +1 -0
  265. package/lib-mjs/autoFormat/link/unlink.d.ts +5 -0
  266. package/lib-mjs/autoFormat/link/unlink.js +16 -0
  267. package/lib-mjs/autoFormat/link/unlink.js.map +1 -0
  268. package/lib-mjs/autoFormat/list/convertAlphaToDecimals.js.map +1 -0
  269. package/lib-mjs/autoFormat/list/getIndex.js.map +1 -0
  270. package/lib-mjs/autoFormat/{utils → list}/getListTypeStyle.js +3 -0
  271. package/lib-mjs/autoFormat/list/getListTypeStyle.js.map +1 -0
  272. package/lib-mjs/autoFormat/list/getNumberingListStyle.js.map +1 -0
  273. package/lib-mjs/autoFormat/{keyboardListTrigger.js → list/keyboardListTrigger.js} +17 -15
  274. package/lib-mjs/autoFormat/list/keyboardListTrigger.js.map +1 -0
  275. package/lib-mjs/contextMenuBase/ContextMenuPluginBase.d.ts +58 -0
  276. package/lib-mjs/contextMenuBase/ContextMenuPluginBase.js +81 -0
  277. package/lib-mjs/contextMenuBase/ContextMenuPluginBase.js.map +1 -0
  278. package/lib-mjs/edit/EditPlugin.js.map +1 -1
  279. package/lib-mjs/edit/deleteSteps/deleteAllSegmentBefore.js.map +1 -1
  280. package/lib-mjs/edit/deleteSteps/deleteCollapsedSelection.js.map +1 -1
  281. package/lib-mjs/edit/deleteSteps/deleteEmptyQuote.d.ts +5 -0
  282. package/lib-mjs/edit/deleteSteps/deleteEmptyQuote.js +56 -0
  283. package/lib-mjs/edit/deleteSteps/deleteEmptyQuote.js.map +1 -0
  284. package/lib-mjs/edit/deleteSteps/deleteList.js +2 -1
  285. package/lib-mjs/edit/deleteSteps/deleteList.js.map +1 -1
  286. package/lib-mjs/edit/deleteSteps/deleteWordSelection.js.map +1 -1
  287. package/lib-mjs/edit/handleKeyboardEventCommon.js.map +1 -1
  288. package/lib-mjs/edit/inputSteps/handleEnterOnList.js +1 -1
  289. package/lib-mjs/edit/inputSteps/handleEnterOnList.js.map +1 -1
  290. package/lib-mjs/edit/keyboardDelete.js +9 -1
  291. package/lib-mjs/edit/keyboardDelete.js.map +1 -1
  292. package/lib-mjs/edit/keyboardInput.js +2 -1
  293. package/lib-mjs/edit/keyboardInput.js.map +1 -1
  294. package/lib-mjs/edit/keyboardTab.js.map +1 -1
  295. package/lib-mjs/edit/tabUtils/handleTabOnList.js.map +1 -1
  296. package/lib-mjs/edit/tabUtils/handleTabOnParagraph.js +7 -0
  297. package/lib-mjs/edit/tabUtils/handleTabOnParagraph.js.map +1 -1
  298. package/lib-mjs/edit/utils/getLeafSiblingBlock.js.map +1 -1
  299. package/lib-mjs/index.d.ts +2 -1
  300. package/lib-mjs/index.js +2 -1
  301. package/lib-mjs/index.js.map +1 -1
  302. package/lib-mjs/paste/Excel/processPastedContentFromExcel.js +1 -1
  303. package/lib-mjs/paste/Excel/processPastedContentFromExcel.js.map +1 -1
  304. package/lib-mjs/paste/PastePlugin.js +1 -1
  305. package/lib-mjs/paste/PastePlugin.js.map +1 -1
  306. package/lib-mjs/paste/PowerPoint/processPastedContentFromPowerPoint.js.map +1 -1
  307. package/lib-mjs/paste/WacComponents/constants.js.map +1 -1
  308. package/lib-mjs/paste/WacComponents/processPastedContentWacComponents.js +1 -1
  309. package/lib-mjs/paste/WacComponents/processPastedContentWacComponents.js.map +1 -1
  310. package/lib-mjs/paste/WordDesktop/WordMetadata.js.map +1 -1
  311. package/lib-mjs/paste/WordDesktop/getStyleMetadata.d.ts +1 -1
  312. package/lib-mjs/paste/WordDesktop/getStyleMetadata.js +1 -1
  313. package/lib-mjs/paste/WordDesktop/getStyleMetadata.js.map +1 -1
  314. package/lib-mjs/paste/WordDesktop/processPastedContentFromWordDesktop.js +2 -14
  315. package/lib-mjs/paste/WordDesktop/processPastedContentFromWordDesktop.js.map +1 -1
  316. package/lib-mjs/paste/WordDesktop/processWordComments.js.map +1 -1
  317. package/lib-mjs/paste/WordDesktop/processWordLists.js.map +1 -1
  318. package/lib-mjs/paste/WordDesktop/removeNegativeTextIndentParser.js.map +1 -1
  319. package/lib-mjs/paste/pasteSourceValidations/constants.js.map +1 -1
  320. package/lib-mjs/paste/pasteSourceValidations/documentContainWacElements.js.map +1 -1
  321. package/lib-mjs/paste/pasteSourceValidations/getPasteSource.js.map +1 -1
  322. package/lib-mjs/paste/pasteSourceValidations/isExcelDesktopDocument.js.map +1 -1
  323. package/lib-mjs/paste/pasteSourceValidations/isExcelOnlineDocument.js.map +1 -1
  324. package/lib-mjs/paste/pasteSourceValidations/isGoogleSheetDocument.js.map +1 -1
  325. package/lib-mjs/paste/pasteSourceValidations/isPowerPointDesktopDocument.js.map +1 -1
  326. package/lib-mjs/paste/pasteSourceValidations/isWordDesktopDocument.js.map +1 -1
  327. package/lib-mjs/paste/pasteSourceValidations/shouldConvertToSingleImage.js.map +1 -1
  328. package/lib-mjs/paste/utils/addParser.d.ts +1 -1
  329. package/lib-mjs/paste/utils/addParser.js +1 -1
  330. package/lib-mjs/paste/utils/addParser.js.map +1 -1
  331. package/lib-mjs/paste/utils/deprecatedColorParser.js.map +1 -1
  332. package/lib-mjs/paste/utils/getStyles.js.map +1 -1
  333. package/lib-mjs/paste/utils/linkParser.js.map +1 -1
  334. package/lib-mjs/paste/utils/setProcessor.js.map +1 -1
  335. package/lib-mjs/pluginUtils/CreateElement/CreateElementData.d.ts +1 -1
  336. package/lib-mjs/pluginUtils/CreateElement/CreateElementData.js.map +1 -1
  337. package/lib-mjs/pluginUtils/CreateElement/createElement.d.ts +2 -2
  338. package/lib-mjs/pluginUtils/CreateElement/createElement.js +1 -1
  339. package/lib-mjs/pluginUtils/CreateElement/createElement.js.map +1 -1
  340. package/lib-mjs/pluginUtils/Disposable.d.ts +1 -1
  341. package/lib-mjs/pluginUtils/Disposable.js.map +1 -1
  342. package/lib-mjs/pluginUtils/DragAndDrop/DragAndDropHandler.d.ts +1 -1
  343. package/lib-mjs/pluginUtils/DragAndDrop/DragAndDropHandler.js.map +1 -1
  344. package/lib-mjs/pluginUtils/DragAndDrop/DragAndDropHelper.d.ts +3 -3
  345. package/lib-mjs/pluginUtils/DragAndDrop/DragAndDropHelper.js +1 -1
  346. package/lib-mjs/pluginUtils/DragAndDrop/DragAndDropHelper.js.map +1 -1
  347. package/lib-mjs/pluginUtils/Rect/getIntersectedRect.d.ts +1 -1
  348. package/lib-mjs/pluginUtils/Rect/getIntersectedRect.js +2 -2
  349. package/lib-mjs/pluginUtils/Rect/getIntersectedRect.js.map +1 -1
  350. package/lib-mjs/shortcut/ShortcutCommand.js.map +1 -1
  351. package/lib-mjs/shortcut/ShortcutPlugin.js +3 -1
  352. package/lib-mjs/shortcut/ShortcutPlugin.js.map +1 -1
  353. package/lib-mjs/shortcut/shortcuts.d.ts +12 -0
  354. package/lib-mjs/shortcut/shortcuts.js +33 -0
  355. package/lib-mjs/shortcut/shortcuts.js.map +1 -1
  356. package/lib-mjs/shortcut/utils/setShortcutIndentationCommand.d.ts +5 -0
  357. package/lib-mjs/shortcut/utils/setShortcutIndentationCommand.js +18 -0
  358. package/lib-mjs/shortcut/utils/setShortcutIndentationCommand.js.map +1 -0
  359. package/lib-mjs/tableEdit/TableEditPlugin.js +4 -4
  360. package/lib-mjs/tableEdit/TableEditPlugin.js.map +1 -1
  361. package/lib-mjs/tableEdit/editors/TableEditor.d.ts +1 -1
  362. package/lib-mjs/tableEdit/editors/TableEditor.js +7 -8
  363. package/lib-mjs/tableEdit/editors/TableEditor.js.map +1 -1
  364. package/lib-mjs/tableEdit/editors/features/CellResizer.d.ts +2 -2
  365. package/lib-mjs/tableEdit/editors/features/CellResizer.js +4 -5
  366. package/lib-mjs/tableEdit/editors/features/CellResizer.js.map +1 -1
  367. package/{lib/tableEdit/editors/features/TableEditorFeature.d.ts → lib-mjs/tableEdit/editors/features/TableEditFeature.d.ts} +2 -2
  368. package/lib-mjs/tableEdit/editors/features/{TableEditorFeature.js → TableEditFeature.js} +1 -1
  369. package/lib-mjs/tableEdit/editors/features/TableEditFeature.js.map +1 -0
  370. package/lib-mjs/tableEdit/editors/features/TableInserter.d.ts +2 -2
  371. package/lib-mjs/tableEdit/editors/features/TableInserter.js +4 -5
  372. package/lib-mjs/tableEdit/editors/features/TableInserter.js.map +1 -1
  373. package/lib-mjs/tableEdit/editors/features/TableMover.d.ts +2 -2
  374. package/lib-mjs/tableEdit/editors/features/TableMover.js +4 -5
  375. package/lib-mjs/tableEdit/editors/features/TableMover.js.map +1 -1
  376. package/lib-mjs/tableEdit/editors/features/TableResizer.d.ts +2 -2
  377. package/lib-mjs/tableEdit/editors/features/TableResizer.js +7 -5
  378. package/lib-mjs/tableEdit/editors/features/TableResizer.js.map +1 -1
  379. package/package.json +5 -5
  380. package/lib/autoFormat/keyboardListTrigger.js.map +0 -1
  381. package/lib/autoFormat/utils/convertAlphaToDecimals.js.map +0 -1
  382. package/lib/autoFormat/utils/getIndex.js.map +0 -1
  383. package/lib/autoFormat/utils/getListTypeStyle.js.map +0 -1
  384. package/lib/autoFormat/utils/getNumberingListStyle.js.map +0 -1
  385. package/lib/pluginUtils/Rect/normalizeRect.d.ts +0 -7
  386. package/lib/pluginUtils/Rect/normalizeRect.js +0 -20
  387. package/lib/pluginUtils/Rect/normalizeRect.js.map +0 -1
  388. package/lib/tableEdit/editors/features/TableEditorFeature.js.map +0 -1
  389. package/lib-amd/autoFormat/keyboardListTrigger.js +0 -44
  390. package/lib-amd/autoFormat/keyboardListTrigger.js.map +0 -1
  391. package/lib-amd/autoFormat/utils/convertAlphaToDecimals.js.map +0 -1
  392. package/lib-amd/autoFormat/utils/getIndex.js.map +0 -1
  393. package/lib-amd/autoFormat/utils/getListTypeStyle.js.map +0 -1
  394. package/lib-amd/autoFormat/utils/getNumberingListStyle.js.map +0 -1
  395. package/lib-amd/pluginUtils/Rect/normalizeRect.d.ts +0 -7
  396. package/lib-amd/pluginUtils/Rect/normalizeRect.js +0 -22
  397. package/lib-amd/pluginUtils/Rect/normalizeRect.js.map +0 -1
  398. package/lib-amd/tableEdit/editors/features/TableEditorFeature.js.map +0 -1
  399. package/lib-mjs/autoFormat/keyboardListTrigger.js.map +0 -1
  400. package/lib-mjs/autoFormat/utils/convertAlphaToDecimals.js.map +0 -1
  401. package/lib-mjs/autoFormat/utils/getIndex.js.map +0 -1
  402. package/lib-mjs/autoFormat/utils/getListTypeStyle.js.map +0 -1
  403. package/lib-mjs/autoFormat/utils/getNumberingListStyle.js.map +0 -1
  404. package/lib-mjs/pluginUtils/Rect/normalizeRect.d.ts +0 -7
  405. package/lib-mjs/pluginUtils/Rect/normalizeRect.js +0 -17
  406. package/lib-mjs/pluginUtils/Rect/normalizeRect.js.map +0 -1
  407. package/lib-mjs/tableEdit/editors/features/TableEditorFeature.js.map +0 -1
  408. /package/lib/autoFormat/{utils → list}/convertAlphaToDecimals.d.ts +0 -0
  409. /package/lib/autoFormat/{utils → list}/convertAlphaToDecimals.js +0 -0
  410. /package/lib/autoFormat/{utils → list}/getIndex.d.ts +0 -0
  411. /package/lib/autoFormat/{utils → list}/getIndex.js +0 -0
  412. /package/lib/autoFormat/{utils → list}/getListTypeStyle.d.ts +0 -0
  413. /package/lib/autoFormat/{utils → list}/getNumberingListStyle.d.ts +0 -0
  414. /package/lib/autoFormat/{utils → list}/getNumberingListStyle.js +0 -0
  415. /package/lib/autoFormat/{keyboardListTrigger.d.ts → list/keyboardListTrigger.d.ts} +0 -0
  416. /package/lib-amd/autoFormat/{utils → list}/convertAlphaToDecimals.d.ts +0 -0
  417. /package/lib-amd/autoFormat/{utils → list}/convertAlphaToDecimals.js +0 -0
  418. /package/lib-amd/autoFormat/{utils → list}/getIndex.d.ts +0 -0
  419. /package/lib-amd/autoFormat/{utils → list}/getIndex.js +0 -0
  420. /package/lib-amd/autoFormat/{utils → list}/getListTypeStyle.d.ts +0 -0
  421. /package/lib-amd/autoFormat/{utils → list}/getNumberingListStyle.d.ts +0 -0
  422. /package/lib-amd/autoFormat/{utils → list}/getNumberingListStyle.js +0 -0
  423. /package/lib-amd/autoFormat/{keyboardListTrigger.d.ts → list/keyboardListTrigger.d.ts} +0 -0
  424. /package/lib-mjs/autoFormat/{utils → list}/convertAlphaToDecimals.d.ts +0 -0
  425. /package/lib-mjs/autoFormat/{utils → list}/convertAlphaToDecimals.js +0 -0
  426. /package/lib-mjs/autoFormat/{utils → list}/getIndex.d.ts +0 -0
  427. /package/lib-mjs/autoFormat/{utils → list}/getIndex.js +0 -0
  428. /package/lib-mjs/autoFormat/{utils → list}/getListTypeStyle.d.ts +0 -0
  429. /package/lib-mjs/autoFormat/{utils → list}/getNumberingListStyle.d.ts +0 -0
  430. /package/lib-mjs/autoFormat/{utils → list}/getNumberingListStyle.js +0 -0
  431. /package/lib-mjs/autoFormat/{keyboardListTrigger.d.ts → list/keyboardListTrigger.d.ts} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"TableEditPlugin.js","sourceRoot":"","sources":["../../../../packages-content-model/roosterjs-content-model-plugins/lib/tableEdit/TableEditPlugin.ts"],"names":[],"mappings":"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","sourcesContent":["import normalizeRect from '../pluginUtils/Rect/normalizeRect';\nimport TableEditor from './editors/TableEditor';\nimport { isNodeOfType } from 'roosterjs-content-model-dom';\nimport type { EditorPlugin, IEditor, PluginEvent, Rect } from 'roosterjs-content-model-types';\n\nconst TABLE_RESIZER_LENGTH = 12;\n\n/**\n * TableEdit plugin, provides the ability to resize a table by drag-and-drop\n */\nexport class TableEditPlugin implements EditorPlugin {\n private editor: IEditor | null = null;\n private onMouseMoveDisposer: (() => void) | null = null;\n private tableRectMap: { table: HTMLTableElement; rect: Rect }[] | null = null;\n private tableEditor: TableEditor | null = null;\n\n /**\n * Construct a new instance of TableResize plugin\n * @param anchorContainerSelector An optional selector string to specify the container to host the plugin.\n * The container must not be affected by transform: scale(), otherwise the position calculation will be wrong.\n * If not specified, the plugin will be inserted in document.body\n */\n constructor(private anchorContainerSelector?: string) {}\n\n /**\n * Get a friendly name of this plugin\n */\n getName() {\n return 'TableEdit';\n }\n\n /**\n * Initialize this plugin. This should only be called from Editor\n * @param editor Editor instance\n */\n initialize(editor: IEditor) {\n this.editor = editor;\n this.onMouseMoveDisposer = this.editor.attachDomEvent({\n mousemove: { beforeDispatch: this.onMouseMove },\n });\n const scrollContainer = this.editor.getScrollContainer();\n scrollContainer.addEventListener('mouseout', this.onMouseOut);\n }\n\n private onMouseOut = ({ relatedTarget, currentTarget }: MouseEvent) => {\n const relatedTargetNode = relatedTarget as Node;\n const currentTargetNode = currentTarget as Node;\n if (\n isNodeOfType(relatedTargetNode, 'ELEMENT_NODE') &&\n isNodeOfType(currentTargetNode, 'ELEMENT_NODE') &&\n this.tableEditor &&\n !this.tableEditor.isOwnedElement(relatedTargetNode) &&\n !currentTargetNode.contains(relatedTargetNode)\n ) {\n this.setTableEditor(null);\n }\n };\n\n /**\n * Dispose this plugin\n */\n dispose() {\n const scrollContainer = this.editor?.getScrollContainer();\n scrollContainer?.removeEventListener('mouseout', this.onMouseOut);\n this.onMouseMoveDisposer?.();\n this.invalidateTableRects();\n this.disposeTableEditor();\n this.editor = null;\n this.onMouseMoveDisposer = null;\n }\n\n /**\n * Handle events triggered from editor\n * @param event PluginEvent object\n */\n onPluginEvent(e: PluginEvent) {\n switch (e.eventType) {\n case 'input':\n case 'contentChanged':\n case 'scroll':\n case 'zoomChanged':\n this.setTableEditor(null);\n this.invalidateTableRects();\n break;\n }\n }\n\n private onMouseMove = (event: Event) => {\n const e = event as MouseEvent;\n\n if (e.buttons > 0 || !this.editor) {\n return;\n }\n\n this.ensureTableRects();\n\n const editorWindow = this.editor.getDocument().defaultView || window;\n const x = e.pageX - editorWindow.scrollX;\n const y = e.pageY - editorWindow.scrollY;\n let currentTable: HTMLTableElement | null = null;\n\n //Find table in range of mouse\n if (this.tableRectMap) {\n for (let i = this.tableRectMap.length - 1; i >= 0; i--) {\n const { table, rect } = this.tableRectMap[i];\n\n if (\n x >= rect.left - TABLE_RESIZER_LENGTH &&\n x <= rect.right + TABLE_RESIZER_LENGTH &&\n y >= rect.top - TABLE_RESIZER_LENGTH &&\n y <= rect.bottom + TABLE_RESIZER_LENGTH\n ) {\n currentTable = table;\n break;\n }\n }\n }\n\n this.setTableEditor(currentTable, e);\n this.tableEditor?.onMouseMove(x, y);\n };\n\n /**\n * @internal Public only for unit test\n * @param table Table to use when setting the Editors\n * @param event (Optional) Mouse event\n */\n public setTableEditor(table: HTMLTableElement | null, event?: MouseEvent) {\n if (this.tableEditor && !this.tableEditor.isEditing() && table != this.tableEditor.table) {\n this.disposeTableEditor();\n }\n\n if (!this.tableEditor && table && this.editor && table.rows.length > 0) {\n const container = this.anchorContainerSelector\n ? this.editor.getDOMHelper().queryElements(this.anchorContainerSelector)[0]\n : undefined;\n\n this.tableEditor = new TableEditor(\n this.editor,\n table,\n this.invalidateTableRects,\n isNodeOfType(container as Node, 'ELEMENT_NODE') ? container : undefined,\n event?.currentTarget\n );\n }\n }\n\n private invalidateTableRects = () => {\n this.tableRectMap = null;\n };\n\n private disposeTableEditor() {\n this.tableEditor?.dispose();\n this.tableEditor = null;\n }\n\n private ensureTableRects() {\n if (!this.tableRectMap && this.editor) {\n this.tableRectMap = [];\n\n const tables = this.editor.getDOMHelper().queryElements('table');\n tables.forEach(table => {\n if (table.isContentEditable) {\n const rect = normalizeRect(table.getBoundingClientRect());\n if (rect && this.tableRectMap) {\n this.tableRectMap.push({\n table,\n rect,\n });\n }\n }\n });\n }\n }\n}\n"]}
1
+ {"version":3,"file":"TableEditPlugin.js","sourceRoot":"","sources":["../../../../packages/roosterjs-content-model-plugins/lib/tableEdit/TableEditPlugin.ts"],"names":[],"mappings":"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","sourcesContent":["import { isNodeOfType, normalizeRect } from 'roosterjs-content-model-dom';\nimport { TableEditor } from './editors/TableEditor';\nimport type { EditorPlugin, IEditor, PluginEvent, Rect } from 'roosterjs-content-model-types';\n\nconst TABLE_RESIZER_LENGTH = 12;\n\n/**\n * TableEdit plugin, provides the ability to resize a table by drag-and-drop\n */\nexport class TableEditPlugin implements EditorPlugin {\n private editor: IEditor | null = null;\n private onMouseMoveDisposer: (() => void) | null = null;\n private tableRectMap: { table: HTMLTableElement; rect: Rect }[] | null = null;\n private tableEditor: TableEditor | null = null;\n\n /**\n * Construct a new instance of TableResize plugin\n * @param anchorContainerSelector An optional selector string to specify the container to host the plugin.\n * The container must not be affected by transform: scale(), otherwise the position calculation will be wrong.\n * If not specified, the plugin will be inserted in document.body\n */\n constructor(private anchorContainerSelector?: string) {}\n\n /**\n * Get a friendly name of this plugin\n */\n getName() {\n return 'TableEdit';\n }\n\n /**\n * Initialize this plugin. This should only be called from Editor\n * @param editor Editor instance\n */\n initialize(editor: IEditor) {\n this.editor = editor;\n this.onMouseMoveDisposer = this.editor.attachDomEvent({\n mousemove: { beforeDispatch: this.onMouseMove },\n });\n const scrollContainer = this.editor.getScrollContainer();\n scrollContainer.addEventListener('mouseout', this.onMouseOut);\n }\n\n private onMouseOut = ({ relatedTarget, currentTarget }: MouseEvent) => {\n const relatedTargetNode = relatedTarget as Node;\n const currentTargetNode = currentTarget as Node;\n if (\n isNodeOfType(relatedTargetNode, 'ELEMENT_NODE') &&\n isNodeOfType(currentTargetNode, 'ELEMENT_NODE') &&\n this.tableEditor &&\n !this.tableEditor.isOwnedElement(relatedTargetNode) &&\n !currentTargetNode.contains(relatedTargetNode)\n ) {\n this.setTableEditor(null);\n }\n };\n\n /**\n * Dispose this plugin\n */\n dispose() {\n const scrollContainer = this.editor?.getScrollContainer();\n scrollContainer?.removeEventListener('mouseout', this.onMouseOut);\n this.onMouseMoveDisposer?.();\n this.invalidateTableRects();\n this.disposeTableEditor();\n this.editor = null;\n this.onMouseMoveDisposer = null;\n }\n\n /**\n * Handle events triggered from editor\n * @param event PluginEvent object\n */\n onPluginEvent(e: PluginEvent) {\n switch (e.eventType) {\n case 'input':\n case 'contentChanged':\n case 'scroll':\n case 'zoomChanged':\n this.setTableEditor(null);\n this.invalidateTableRects();\n break;\n }\n }\n\n private onMouseMove = (event: Event) => {\n const e = event as MouseEvent;\n\n if (e.buttons > 0 || !this.editor) {\n return;\n }\n\n this.ensureTableRects();\n\n const editorWindow = this.editor.getDocument().defaultView || window;\n const x = e.pageX - editorWindow.scrollX;\n const y = e.pageY - editorWindow.scrollY;\n let currentTable: HTMLTableElement | null = null;\n\n //Find table in range of mouse\n if (this.tableRectMap) {\n for (let i = this.tableRectMap.length - 1; i >= 0; i--) {\n const { table, rect } = this.tableRectMap[i];\n\n if (\n x >= rect.left - TABLE_RESIZER_LENGTH &&\n x <= rect.right + TABLE_RESIZER_LENGTH &&\n y >= rect.top - TABLE_RESIZER_LENGTH &&\n y <= rect.bottom + TABLE_RESIZER_LENGTH\n ) {\n currentTable = table;\n break;\n }\n }\n }\n\n this.setTableEditor(currentTable, e);\n this.tableEditor?.onMouseMove(x, y);\n };\n\n /**\n * @internal Public only for unit test\n * @param table Table to use when setting the Editors\n * @param event (Optional) Mouse event\n */\n public setTableEditor(table: HTMLTableElement | null, event?: MouseEvent) {\n if (this.tableEditor && !this.tableEditor.isEditing() && table != this.tableEditor.table) {\n this.disposeTableEditor();\n }\n\n if (!this.tableEditor && table && this.editor && table.rows.length > 0) {\n // anchorContainerSelector is used to specify the container to host the plugin, which can be outside of the editor's div\n const container = this.anchorContainerSelector\n ? this.editor.getDocument().querySelector(this.anchorContainerSelector)\n : undefined;\n\n this.tableEditor = new TableEditor(\n this.editor,\n table,\n this.invalidateTableRects,\n isNodeOfType(container, 'ELEMENT_NODE') ? container : undefined,\n event?.currentTarget\n );\n }\n }\n\n private invalidateTableRects = () => {\n this.tableRectMap = null;\n };\n\n private disposeTableEditor() {\n this.tableEditor?.dispose();\n this.tableEditor = null;\n }\n\n private ensureTableRects() {\n if (!this.tableRectMap && this.editor) {\n this.tableRectMap = [];\n\n const tables = this.editor.getDOMHelper().queryElements('table');\n tables.forEach(table => {\n if (table.isContentEditable) {\n const rect = normalizeRect(table.getBoundingClientRect());\n if (rect && this.tableRectMap) {\n this.tableRectMap.push({\n table,\n rect,\n });\n }\n }\n });\n }\n }\n}\n"]}
@@ -28,7 +28,7 @@ import type { IEditor } from 'roosterjs-content-model-types';
28
28
  *
29
29
  * When set a different current table or change current TD, we need to update these areas
30
30
  */
31
- export default class TableEditor {
31
+ export declare class TableEditor {
32
32
  private editor;
33
33
  readonly table: HTMLTableElement;
34
34
  private onChanged;
@@ -1,11 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TableEditor = void 0;
3
4
  var CellResizer_1 = require("./features/CellResizer");
4
5
  var TableInserter_1 = require("./features/TableInserter");
5
6
  var TableMover_1 = require("./features/TableMover");
6
7
  var TableResizer_1 = require("./features/TableResizer");
7
- var normalizeRect_1 = require("../../pluginUtils/Rect/normalizeRect");
8
- var TableEditorFeature_1 = require("./features/TableEditorFeature");
8
+ var TableEditFeature_1 = require("./features/TableEditFeature");
9
9
  var roosterjs_content_model_dom_1 = require("roosterjs-content-model-dom");
10
10
  var INSERTER_HOVER_OFFSET = 6;
11
11
  var TOP_OR_SIDE;
@@ -142,7 +142,7 @@ var TableEditor = /** @class */ (function () {
142
142
  TableEditor.prototype.onMouseMove = function (x, y) {
143
143
  var _a;
144
144
  // Get whole table rect
145
- var tableRect = (0, normalizeRect_1.default)(this.table.getBoundingClientRect());
145
+ var tableRect = (0, roosterjs_content_model_dom_1.normalizeRect)(this.table.getBoundingClientRect());
146
146
  //console.log('>>>tableRect', tableRect);
147
147
  if (!tableRect) {
148
148
  return;
@@ -164,7 +164,7 @@ var TableEditor = /** @class */ (function () {
164
164
  var j = 0;
165
165
  for (; j < tr.cells.length; j++) {
166
166
  var td = tr.cells[j];
167
- var tdRect = (0, normalizeRect_1.default)(td.getBoundingClientRect());
167
+ var tdRect = (0, roosterjs_content_model_dom_1.normalizeRect)(td.getBoundingClientRect());
168
168
  if (!tdRect || !tableRect) {
169
169
  continue;
170
170
  }
@@ -186,7 +186,7 @@ var TableEditor = /** @class */ (function () {
186
186
  else if (j === 0 && topOrSide == 1 /* side */) {
187
187
  var tdAbove = (_a = this.table.rows[i - 1]) === null || _a === void 0 ? void 0 : _a.cells[0];
188
188
  var tdAboveRect = tdAbove
189
- ? (0, normalizeRect_1.default)(tdAbove.getBoundingClientRect())
189
+ ? (0, roosterjs_content_model_dom_1.normalizeRect)(tdAbove.getBoundingClientRect())
190
190
  : null;
191
191
  var isTdNotAboveMerged = !tdAboveRect
192
192
  ? null
@@ -214,10 +214,10 @@ var TableEditor = /** @class */ (function () {
214
214
  };
215
215
  TableEditor.prototype.setEditorFeatures = function () {
216
216
  if (!this.tableMover) {
217
- this.tableMover = (0, TableMover_1.default)(this.table, this.editor, this.isRTL, this.onSelect, this.getOnMouseOut, this.contentDiv, this.anchorContainer);
217
+ this.tableMover = (0, TableMover_1.createTableMover)(this.table, this.editor, this.isRTL, this.onSelect, this.getOnMouseOut, this.contentDiv, this.anchorContainer);
218
218
  }
219
219
  if (!this.tableResizer) {
220
- this.tableResizer = (0, TableResizer_1.default)(this.table, this.editor, this.isRTL, this.onStartTableResize, this.onFinishEditing, this.contentDiv, this.anchorContainer);
220
+ this.tableResizer = (0, TableResizer_1.createTableResizer)(this.table, this.editor, this.isRTL, this.onStartTableResize, this.onFinishEditing, this.contentDiv, this.anchorContainer);
221
221
  }
222
222
  };
223
223
  TableEditor.prototype.setResizingTd = function (td) {
@@ -225,8 +225,8 @@ var TableEditor = /** @class */ (function () {
225
225
  this.disposeCellResizers();
226
226
  }
227
227
  if (!this.horizontalResizer && td) {
228
- this.horizontalResizer = (0, CellResizer_1.default)(this.editor, td, this.table, this.isRTL, true /*isHorizontal*/, this.onStartCellResize, this.onFinishEditing, this.anchorContainer);
229
- this.verticalResizer = (0, CellResizer_1.default)(this.editor, td, this.table, this.isRTL, false /*isHorizontal*/, this.onStartCellResize, this.onFinishEditing, this.anchorContainer);
228
+ this.horizontalResizer = (0, CellResizer_1.createCellResizer)(this.editor, td, this.table, this.isRTL, true /*isHorizontal*/, this.onStartCellResize, this.onFinishEditing, this.anchorContainer);
229
+ this.verticalResizer = (0, CellResizer_1.createCellResizer)(this.editor, td, this.table, this.isRTL, false /*isHorizontal*/, this.onStartCellResize, this.onFinishEditing, this.anchorContainer);
230
230
  }
231
231
  };
232
232
  /**
@@ -239,7 +239,7 @@ var TableEditor = /** @class */ (function () {
239
239
  this.disposeTableInserter();
240
240
  }
241
241
  if (!this.horizontalInserter && !this.verticalInserter && td) {
242
- var newInserter = (0, TableInserter_1.default)(this.editor, td, this.table, this.isRTL, !!isHorizontal, this.onInserted, this.getOnMouseOut, this.anchorContainer);
242
+ var newInserter = (0, TableInserter_1.createTableInserter)(this.editor, td, this.table, this.isRTL, !!isHorizontal, this.onInserted, this.getOnMouseOut, this.anchorContainer);
243
243
  if (isHorizontal) {
244
244
  this.horizontalInserter = newInserter;
245
245
  }
@@ -250,33 +250,33 @@ var TableEditor = /** @class */ (function () {
250
250
  };
251
251
  TableEditor.prototype.disposeTableResizer = function () {
252
252
  if (this.tableResizer) {
253
- (0, TableEditorFeature_1.disposeTableEditFeature)(this.tableResizer);
253
+ (0, TableEditFeature_1.disposeTableEditFeature)(this.tableResizer);
254
254
  this.tableResizer = null;
255
255
  }
256
256
  };
257
257
  TableEditor.prototype.disposeTableInserter = function () {
258
258
  if (this.horizontalInserter) {
259
- (0, TableEditorFeature_1.disposeTableEditFeature)(this.horizontalInserter);
259
+ (0, TableEditFeature_1.disposeTableEditFeature)(this.horizontalInserter);
260
260
  this.horizontalInserter = null;
261
261
  }
262
262
  if (this.verticalInserter) {
263
- (0, TableEditorFeature_1.disposeTableEditFeature)(this.verticalInserter);
263
+ (0, TableEditFeature_1.disposeTableEditFeature)(this.verticalInserter);
264
264
  this.verticalInserter = null;
265
265
  }
266
266
  };
267
267
  TableEditor.prototype.disposeCellResizers = function () {
268
268
  if (this.horizontalResizer) {
269
- (0, TableEditorFeature_1.disposeTableEditFeature)(this.horizontalResizer);
269
+ (0, TableEditFeature_1.disposeTableEditFeature)(this.horizontalResizer);
270
270
  this.horizontalResizer = null;
271
271
  }
272
272
  if (this.verticalResizer) {
273
- (0, TableEditorFeature_1.disposeTableEditFeature)(this.verticalResizer);
273
+ (0, TableEditFeature_1.disposeTableEditFeature)(this.verticalResizer);
274
274
  this.verticalResizer = null;
275
275
  }
276
276
  };
277
277
  TableEditor.prototype.disposeTableMover = function () {
278
278
  if (this.tableMover) {
279
- (0, TableEditorFeature_1.disposeTableEditFeature)(this.tableMover);
279
+ (0, TableEditFeature_1.disposeTableEditFeature)(this.tableMover);
280
280
  this.tableMover = null;
281
281
  }
282
282
  };
@@ -290,5 +290,5 @@ var TableEditor = /** @class */ (function () {
290
290
  };
291
291
  return TableEditor;
292
292
  }());
293
- exports.default = TableEditor;
293
+ exports.TableEditor = TableEditor;
294
294
  //# sourceMappingURL=TableEditor.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TableEditor.js","sourceRoot":"","sources":["../../../../../packages-content-model/roosterjs-content-model-plugins/lib/tableEdit/editors/TableEditor.ts"],"names":[],"mappings":";;AAAA,sDAAuD;AACvD,0DAA2D;AAC3D,oDAAqD;AACrD,wDAAyD;AACzD,sEAAiE;AACjE,oEAAwE;AACxE,2EAA2D;AAI3D,IAAM,qBAAqB,GAAG,CAAC,CAAC;AAChC,IAAW,WAGV;AAHD,WAAW,WAAW;IAClB,2CAAO,CAAA;IACP,6CAAQ,CAAA;AACZ,CAAC,EAHU,WAAW,KAAX,WAAW,QAGrB;AACD;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH;IAmBI,qBACY,MAAe,EACP,KAAuB,EAC/B,SAAqB,EACrB,eAA6B,EAC7B,UAA+B;QAL3C,iBAUC;;QATW,WAAM,GAAN,MAAM,CAAS;QACP,UAAK,GAAL,KAAK,CAAkB;QAC/B,cAAS,GAAT,SAAS,CAAY;QACrB,oBAAe,GAAf,eAAe,CAAc;QAC7B,eAAU,GAAV,UAAU,CAAqB;QAvB3C,kCAAkC;QAC1B,uBAAkB,GAA4B,IAAI,CAAC;QACnD,qBAAgB,GAA4B,IAAI,CAAC;QAEzD,8CAA8C;QACtC,sBAAiB,GAA4B,IAAI,CAAC;QAClD,oBAAe,GAA4B,IAAI,CAAC;QAExD,yBAAyB;QACjB,iBAAY,GAA4B,IAAI,CAAC;QAErD,yCAAyC;QACjC,eAAU,GAA4B,IAAI,CAAC;QAG3C,UAAK,GAAiB,IAAI,CAAC;QAyP3B,oBAAe,GAAG;YACtB,KAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YAEpB,IAAI,KAAI,CAAC,KAAK,EAAE;gBACZ,KAAI,CAAC,MAAM,CAAC,eAAe,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,KAAI,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC;aACxF;YAED,KAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC,0EAA0E;YACtG,KAAI,CAAC,SAAS,EAAE,CAAC;YACjB,KAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;YAEhC,OAAO,KAAK,CAAC;QACjB,CAAC,CAAC;QAEM,uBAAkB,GAAG;YACzB,KAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;YAC/B,KAAI,CAAC,aAAa,EAAE,CAAC;QACzB,CAAC,CAAC;QAEM,sBAAiB,GAAG;YACxB,KAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;YAC/B,KAAI,CAAC,mBAAmB,EAAE,CAAC;YAC3B,KAAI,CAAC,aAAa,EAAE,CAAC;QACzB,CAAC,CAAC;QAaM,eAAU,GAAG;YACjB,KAAI,CAAC,mBAAmB,EAAE,CAAC;YAC3B,KAAI,CAAC,eAAe,EAAE,CAAC;QAC3B,CAAC,CAAC;QAEF;;;WAGG;QACI,aAAQ,GAAG,UAAC,KAAuB;YACtC,KAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YAEpB,IAAI,KAAK,EAAE;gBACP,IAAM,SAAS,GAAmB;oBAC9B,KAAK,EAAE,KAAK;oBACZ,QAAQ,EAAE,CAAC;oBACX,WAAW,EAAE,CAAC;oBACd,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC;oBAC9B,UAAU,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;oBAC9D,IAAI,EAAE,OAAO;iBAChB,CAAC;gBAEF,KAAI,CAAC,MAAM,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;aAC1C;QACL,CAAC,CAAC;QAEM,kBAAa,GAAG,UAAC,OAAoB;YACzC,OAAO,UAAC,EAAc;gBAClB,IACI,OAAO;oBACP,EAAE,CAAC,aAAa,IAAI,OAAO;oBAC3B,IAAA,0CAAY,EAAC,KAAI,CAAC,UAAkB,EAAE,cAAc,CAAC;oBACrD,IAAA,0CAAY,EAAC,EAAE,CAAC,aAAqB,EAAE,cAAc,CAAC;oBACtD,CAAC,CAAC,KAAI,CAAC,UAAU,IAAI,EAAE,CAAC,aAAa,CAAC,EACxC;oBACE,KAAI,CAAC,OAAO,EAAE,CAAC;iBAClB;YACL,CAAC,CAAC;QACN,CAAC,CAAC;QAzTE,IAAI,CAAC,KAAK,GAAG,CAAA,MAAA,MAAM,CAAC,WAAW,EAAE,CAAC,WAAW,0CAAE,gBAAgB,CAAC,KAAK,EAAE,SAAS,KAAI,KAAK,CAAC;QAC1F,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;IACpC,CAAC;IAED,6BAAO,GAAP;QACI,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC3B,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC3B,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC5B,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC7B,CAAC;IAED,+BAAS,GAAT;QACI,OAAO,IAAI,CAAC,kBAAkB,CAAC;IACnC,CAAC;IAED,oCAAc,GAAd,UAAe,IAAU;QACrB,OAAO;YACH,IAAI,CAAC,YAAY;YACjB,IAAI,CAAC,UAAU;YACf,IAAI,CAAC,kBAAkB;YACvB,IAAI,CAAC,gBAAgB;YACrB,IAAI,CAAC,iBAAiB;YACtB,IAAI,CAAC,eAAe;SACvB;aACI,MAAM,CAAC,UAAA,OAAO,IAAI,OAAA,CAAC,CAAC,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,GAAG,CAAA,EAAd,CAAc,CAAC;aACjC,IAAI,CAAC,UAAA,OAAO,IAAI,OAAA,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,GAAG,KAAI,IAAI,EAApB,CAAoB,CAAC,CAAC;IAC/C,CAAC;IAED,iCAAW,GAAX,UAAY,CAAS,EAAE,CAAS;;QAC5B,uBAAuB;QACvB,IAAM,SAAS,GAAG,IAAA,uBAAa,EAAC,IAAI,CAAC,KAAK,CAAC,qBAAqB,EAAE,CAAC,CAAC;QAEpE,yCAAyC;QACzC,IAAI,CAAC,SAAS,EAAE;YACZ,OAAO;SACV;QAED,wCAAwC;QACxC,IAAM,SAAS,GACX,CAAC,IAAI,SAAS,CAAC,GAAG,GAAG,qBAAqB;YACtC,CAAC;YACD,CAAC,CAAC,IAAI,CAAC,KAAK;gBACZ,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,KAAK,GAAG,qBAAqB;oBAC1C,CAAC;oBACD,CAAC,CAAC,SAAS;gBACf,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,IAAI,GAAG,qBAAqB;oBAC7C,CAAC;oBACD,CAAC,CAAC,SAAS,CAAC;QACpB,IAAM,eAAe,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAE1C,oCAAoC;QACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC7C,IAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC9B,IAAI,CAAC,GAAG,CAAC,CAAC;YACV,OAAO,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAC7B,IAAM,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBACvB,IAAM,MAAM,GAAG,IAAA,uBAAa,EAAC,EAAE,CAAC,qBAAqB,EAAE,CAAC,CAAC;gBAEzD,IAAI,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE;oBACvB,SAAS;iBACZ;gBAED,+CAA+C;gBAC/C,+CAA+C;gBAC/C,IAAM,cAAc,GAAG,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC;gBAC1C,IAAM,aAAa,GAAG,IAAI,CAAC,KAAK;oBAC5B,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,KAAK,GAAG,qBAAqB,GAAG,eAAe;oBAC7D,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC;gBACxB,IAAM,YAAY,GAAG,IAAI,CAAC,KAAK;oBAC3B,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,IAAI;oBAClB,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,IAAI,GAAG,qBAAqB,GAAG,eAAe,CAAC;gBAEjE,IAAI,cAAc,IAAI,aAAa,IAAI,YAAY,EAAE;oBACjD,IAAI,CAAC,KAAK,CAAC,IAAI,SAAS,eAAmB,EAAE;wBACzC,IAAM,MAAM,GAAG,CAAC,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;wBAChD,IAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;wBAC3D,IAAI,CAAC,aAAa,CACd,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,EACpC,KAAK,CAAC,gBAAgB,CACzB,CAAC;qBACL;yBAAM,IAAI,CAAC,KAAK,CAAC,IAAI,SAAS,gBAAoB,EAAE;wBACjD,IAAM,OAAO,GAAG,MAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,0CAAE,KAAK,CAAC,CAAC,CAAC,CAAC;wBACjD,IAAM,WAAW,GAAG,OAAO;4BACvB,CAAC,CAAC,IAAA,uBAAa,EAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC;4BAChD,CAAC,CAAC,IAAI,CAAC;wBAEX,IAAM,kBAAkB,GAAG,CAAC,WAAW;4BACnC,CAAC,CAAC,IAAI;4BACN,CAAC,CAAC,IAAI,CAAC,KAAK;gCACZ,CAAC,CAAC,WAAW,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK;gCACpC,CAAC,CAAC,WAAW,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,CAAC;wBAEvC,IAAI,CAAC,aAAa,CACd,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,kBAAkB;4BACtD,CAAC,CAAC,OAAO;4BACT,CAAC,CAAC,EAAE,EACR,IAAI,CAAC,gBAAgB,CACxB,CAAC;qBACL;yBAAM;wBACH,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;qBAC5B;oBAED,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;oBAEvB,YAAY;oBACZ,MAAM;iBACT;aACJ;YAED,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE;gBACrB,MAAM;aACT;SACJ;QAED,2BAA2B;QAC3B,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC7B,CAAC;IAEO,uCAAiB,GAAzB;QACI,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YAClB,IAAI,CAAC,UAAU,GAAG,IAAA,oBAAgB,EAC9B,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,aAAa,EAClB,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,eAAe,CACvB,CAAC;SACL;QAED,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;YACpB,IAAI,CAAC,YAAY,GAAG,IAAA,sBAAkB,EAClC,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,kBAAkB,EACvB,IAAI,CAAC,eAAe,EACpB,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,eAAe,CACvB,CAAC;SACL;IACL,CAAC;IAEO,mCAAa,GAArB,UAAsB,EAAwB;QAC1C,IAAI,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,iBAAiB,CAAC,IAAI,IAAI,EAAE,EAAE;YAC7D,IAAI,CAAC,mBAAmB,EAAE,CAAC;SAC9B;QAED,IAAI,CAAC,IAAI,CAAC,iBAAiB,IAAI,EAAE,EAAE;YAC/B,IAAI,CAAC,iBAAiB,GAAG,IAAA,qBAAiB,EACtC,IAAI,CAAC,MAAM,EACX,EAAE,EACF,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,gBAAgB,EACrB,IAAI,CAAC,iBAAiB,EACtB,IAAI,CAAC,eAAe,EACpB,IAAI,CAAC,eAAe,CACvB,CAAC;YACF,IAAI,CAAC,eAAe,GAAG,IAAA,qBAAiB,EACpC,IAAI,CAAC,MAAM,EACX,EAAE,EACF,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,KAAK,EACV,KAAK,CAAC,gBAAgB,EACtB,IAAI,CAAC,iBAAiB,EACtB,IAAI,CAAC,eAAe,EACpB,IAAI,CAAC,eAAe,CACvB,CAAC;SACL;IACL,CAAC;IAED;;;OAGG;IACK,mCAAa,GAArB,UAAsB,EAA+B,EAAE,YAAsB;QACzE,IAAM,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC;QAChF,IAAI,EAAE,KAAK,IAAI,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE;YAClD,IAAI,CAAC,oBAAoB,EAAE,CAAC;SAC/B;QAED,IAAI,CAAC,IAAI,CAAC,kBAAkB,IAAI,CAAC,IAAI,CAAC,gBAAgB,IAAI,EAAE,EAAE;YAC1D,IAAM,WAAW,GAAG,IAAA,uBAAmB,EACnC,IAAI,CAAC,MAAM,EACX,EAAE,EACF,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,KAAK,EACV,CAAC,CAAC,YAAY,EACd,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,aAAa,EAClB,IAAI,CAAC,eAAe,CACvB,CAAC;YACF,IAAI,YAAY,EAAE;gBACd,IAAI,CAAC,kBAAkB,GAAG,WAAW,CAAC;aACzC;iBAAM;gBACH,IAAI,CAAC,gBAAgB,GAAG,WAAW,CAAC;aACvC;SACJ;IACL,CAAC;IAEO,yCAAmB,GAA3B;QACI,IAAI,IAAI,CAAC,YAAY,EAAE;YACnB,IAAA,4CAAuB,EAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAC3C,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;SAC5B;IACL,CAAC;IAEO,0CAAoB,GAA5B;QACI,IAAI,IAAI,CAAC,kBAAkB,EAAE;YACzB,IAAA,4CAAuB,EAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;YACjD,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;SAClC;QACD,IAAI,IAAI,CAAC,gBAAgB,EAAE;YACvB,IAAA,4CAAuB,EAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YAC/C,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;SAChC;IACL,CAAC;IAEO,yCAAmB,GAA3B;QACI,IAAI,IAAI,CAAC,iBAAiB,EAAE;YACxB,IAAA,4CAAuB,EAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;YAChD,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;SACjC;QACD,IAAI,IAAI,CAAC,eAAe,EAAE;YACtB,IAAA,4CAAuB,EAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YAC9C,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;SAC/B;IACL,CAAC;IAEO,uCAAiB,GAAzB;QACI,IAAI,IAAI,CAAC,UAAU,EAAE;YACjB,IAAA,4CAAuB,EAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACzC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;SAC1B;IACL,CAAC;IA2BO,mCAAa,GAArB;QACI,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;QAC/B,IAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC;QAE5C,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,IAAI,OAAO,EAAE;YAChC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;SAC5B;QAED,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;IAC/B,CAAC;IAyCL,kBAAC;AAAD,CAAC,AApVD,IAoVC","sourcesContent":["import createCellResizer from './features/CellResizer';\nimport createTableInserter from './features/TableInserter';\nimport createTableMover from './features/TableMover';\nimport createTableResizer from './features/TableResizer';\nimport normalizeRect from '../../pluginUtils/Rect/normalizeRect';\nimport { disposeTableEditFeature } from './features/TableEditorFeature';\nimport { isNodeOfType } from 'roosterjs-content-model-dom';\nimport type TableEditFeature from './features/TableEditorFeature';\nimport type { IEditor, TableSelection } from 'roosterjs-content-model-types';\n\nconst INSERTER_HOVER_OFFSET = 6;\nconst enum TOP_OR_SIDE {\n top = 0,\n side = 1,\n}\n/**\n * @internal\n *\n * A table has 6 hot areas to be resized/edited (take LTR example):\n *\n * [6] [ ]\n * +[ 1 ]+--------------------+\n * |[ ]| |\n * [ ] [ ] |\n * [ ] [ ] |\n * [2] [3] |\n * [ ] [ ] |\n * [ ][ 4 ]| |\n * +------------------+--------------------+\n * | | |\n * | | |\n * | | |\n * +------------------+--------------------+\n * [5]\n *\n * 1 - Hover area to show insert column button\n * 2 - Hover area to show insert row button\n * 3 - Hover area to show vertical resizing bar\n * 4 - Hover area to show horizontal resizing bar\n * 5 - Hover area to show whole table resize handle\n * 6 - Hover area to show whole table mover handle\n *\n * When set a different current table or change current TD, we need to update these areas\n */\nexport default class TableEditor {\n // 1, 2 - Insert a column or a row\n private horizontalInserter: TableEditFeature | null = null;\n private verticalInserter: TableEditFeature | null = null;\n\n // 3, 4 - Resize a column or a row from a cell\n private horizontalResizer: TableEditFeature | null = null;\n private verticalResizer: TableEditFeature | null = null;\n\n // 5 - Resize whole table\n private tableResizer: TableEditFeature | null = null;\n\n // 6 - Move as well as select whole table\n private tableMover: TableEditFeature | null = null;\n\n private isRTL: boolean;\n private range: Range | null = null;\n private isCurrentlyEditing: boolean;\n\n constructor(\n private editor: IEditor,\n public readonly table: HTMLTableElement,\n private onChanged: () => void,\n private anchorContainer?: HTMLElement,\n private contentDiv?: EventTarget | null\n ) {\n this.isRTL = editor.getDocument().defaultView?.getComputedStyle(table).direction == 'rtl';\n this.setEditorFeatures();\n this.isCurrentlyEditing = false;\n }\n\n dispose() {\n this.disposeTableResizer();\n this.disposeCellResizers();\n this.disposeTableInserter();\n this.disposeTableMover();\n }\n\n isEditing(): boolean {\n return this.isCurrentlyEditing;\n }\n\n isOwnedElement(node: Node) {\n return [\n this.tableResizer,\n this.tableMover,\n this.horizontalInserter,\n this.verticalInserter,\n this.horizontalResizer,\n this.verticalResizer,\n ]\n .filter(feature => !!feature?.div)\n .some(feature => feature?.div == node);\n }\n\n onMouseMove(x: number, y: number) {\n // Get whole table rect\n const tableRect = normalizeRect(this.table.getBoundingClientRect());\n\n //console.log('>>>tableRect', tableRect);\n if (!tableRect) {\n return;\n }\n\n // Determine if cursor is on top or side\n const topOrSide =\n y <= tableRect.top + INSERTER_HOVER_OFFSET\n ? TOP_OR_SIDE.top\n : this.isRTL\n ? x >= tableRect.right - INSERTER_HOVER_OFFSET\n ? TOP_OR_SIDE.side\n : undefined\n : x <= tableRect.left + INSERTER_HOVER_OFFSET\n ? TOP_OR_SIDE.side\n : undefined;\n const topOrSideBinary = topOrSide ? 1 : 0;\n\n // i is row index, j is column index\n for (let i = 0; i < this.table.rows.length; i++) {\n const tr = this.table.rows[i];\n let j = 0;\n for (; j < tr.cells.length; j++) {\n const td = tr.cells[j];\n const tdRect = normalizeRect(td.getBoundingClientRect());\n\n if (!tdRect || !tableRect) {\n continue;\n }\n\n // Determine the cell the cursor is in range of\n // Offset is only used for first row and column\n const lessThanBottom = y <= tdRect.bottom;\n const lessThanRight = this.isRTL\n ? x <= tdRect.right + INSERTER_HOVER_OFFSET * topOrSideBinary\n : x <= tdRect.right;\n const moreThanLeft = this.isRTL\n ? x >= tdRect.left\n : x >= tdRect.left - INSERTER_HOVER_OFFSET * topOrSideBinary;\n\n if (lessThanBottom && lessThanRight && moreThanLeft) {\n if (i === 0 && topOrSide == TOP_OR_SIDE.top) {\n const center = (tdRect.left + tdRect.right) / 2;\n const isOnRightHalf = this.isRTL ? x < center : x > center;\n this.setInserterTd(\n isOnRightHalf ? td : tr.cells[j - 1],\n false /*isHorizontal*/\n );\n } else if (j === 0 && topOrSide == TOP_OR_SIDE.side) {\n const tdAbove = this.table.rows[i - 1]?.cells[0];\n const tdAboveRect = tdAbove\n ? normalizeRect(tdAbove.getBoundingClientRect())\n : null;\n\n const isTdNotAboveMerged = !tdAboveRect\n ? null\n : this.isRTL\n ? tdAboveRect.right === tdRect.right\n : tdAboveRect.left === tdRect.left;\n\n this.setInserterTd(\n y < (tdRect.top + tdRect.bottom) / 2 && isTdNotAboveMerged\n ? tdAbove\n : td,\n true /*isHorizontal*/\n );\n } else {\n this.setInserterTd(null);\n }\n\n this.setResizingTd(td);\n\n //Cell found\n break;\n }\n }\n\n if (j < tr.cells.length) {\n break;\n }\n }\n\n // Create Mover and Resizer\n this.setEditorFeatures();\n }\n\n private setEditorFeatures() {\n if (!this.tableMover) {\n this.tableMover = createTableMover(\n this.table,\n this.editor,\n this.isRTL,\n this.onSelect,\n this.getOnMouseOut,\n this.contentDiv,\n this.anchorContainer\n );\n }\n\n if (!this.tableResizer) {\n this.tableResizer = createTableResizer(\n this.table,\n this.editor,\n this.isRTL,\n this.onStartTableResize,\n this.onFinishEditing,\n this.contentDiv,\n this.anchorContainer\n );\n }\n }\n\n private setResizingTd(td: HTMLTableCellElement) {\n if (this.horizontalResizer && this.horizontalResizer.node != td) {\n this.disposeCellResizers();\n }\n\n if (!this.horizontalResizer && td) {\n this.horizontalResizer = createCellResizer(\n this.editor,\n td,\n this.table,\n this.isRTL,\n true /*isHorizontal*/,\n this.onStartCellResize,\n this.onFinishEditing,\n this.anchorContainer\n );\n this.verticalResizer = createCellResizer(\n this.editor,\n td,\n this.table,\n this.isRTL,\n false /*isHorizontal*/,\n this.onStartCellResize,\n this.onFinishEditing,\n this.anchorContainer\n );\n }\n }\n\n /**\n * create or remove TableInserter\n * @param td td to attach to, set this to null to remove inserters (both horizontal and vertical)\n */\n private setInserterTd(td: HTMLTableCellElement | null, isHorizontal?: boolean) {\n const inserter = isHorizontal ? this.horizontalInserter : this.verticalInserter;\n if (td === null || (inserter && inserter.node != td)) {\n this.disposeTableInserter();\n }\n\n if (!this.horizontalInserter && !this.verticalInserter && td) {\n const newInserter = createTableInserter(\n this.editor,\n td,\n this.table,\n this.isRTL,\n !!isHorizontal,\n this.onInserted,\n this.getOnMouseOut,\n this.anchorContainer\n );\n if (isHorizontal) {\n this.horizontalInserter = newInserter;\n } else {\n this.verticalInserter = newInserter;\n }\n }\n }\n\n private disposeTableResizer() {\n if (this.tableResizer) {\n disposeTableEditFeature(this.tableResizer);\n this.tableResizer = null;\n }\n }\n\n private disposeTableInserter() {\n if (this.horizontalInserter) {\n disposeTableEditFeature(this.horizontalInserter);\n this.horizontalInserter = null;\n }\n if (this.verticalInserter) {\n disposeTableEditFeature(this.verticalInserter);\n this.verticalInserter = null;\n }\n }\n\n private disposeCellResizers() {\n if (this.horizontalResizer) {\n disposeTableEditFeature(this.horizontalResizer);\n this.horizontalResizer = null;\n }\n if (this.verticalResizer) {\n disposeTableEditFeature(this.verticalResizer);\n this.verticalResizer = null;\n }\n }\n\n private disposeTableMover() {\n if (this.tableMover) {\n disposeTableEditFeature(this.tableMover);\n this.tableMover = null;\n }\n }\n\n private onFinishEditing = (): false => {\n this.editor.focus();\n\n if (this.range) {\n this.editor.setDOMSelection({ type: 'range', range: this.range, isReverted: false });\n }\n\n this.editor.takeSnapshot(); // Pass in an empty callback to make sure ContentChangedEvent is triggered\n this.onChanged();\n this.isCurrentlyEditing = false;\n\n return false;\n };\n\n private onStartTableResize = () => {\n this.isCurrentlyEditing = true;\n this.onStartResize();\n };\n\n private onStartCellResize = () => {\n this.isCurrentlyEditing = true;\n this.disposeTableResizer();\n this.onStartResize();\n };\n\n private onStartResize() {\n this.isCurrentlyEditing = true;\n const range = this.editor.getDOMSelection();\n\n if (range && range.type == 'range') {\n this.range = range.range;\n }\n\n this.editor.takeSnapshot();\n }\n\n private onInserted = () => {\n this.disposeTableResizer();\n this.onFinishEditing();\n };\n\n /**\n * Public only for testing purposes\n * @param table the table to select\n */\n public onSelect = (table: HTMLTableElement) => {\n this.editor.focus();\n\n if (table) {\n const selection: TableSelection = {\n table: table,\n firstRow: 0,\n firstColumn: 0,\n lastRow: table.rows.length - 1,\n lastColumn: table.rows[table.rows.length - 1].cells.length - 1,\n type: 'table',\n };\n\n this.editor.setDOMSelection(selection);\n }\n };\n\n private getOnMouseOut = (feature: HTMLElement) => {\n return (ev: MouseEvent) => {\n if (\n feature &&\n ev.relatedTarget != feature &&\n isNodeOfType(this.contentDiv as Node, 'ELEMENT_NODE') &&\n isNodeOfType(ev.relatedTarget as Node, 'ELEMENT_NODE') &&\n !(this.contentDiv == ev.relatedTarget)\n ) {\n this.dispose();\n }\n };\n };\n}\n"]}
1
+ {"version":3,"file":"TableEditor.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-plugins/lib/tableEdit/editors/TableEditor.ts"],"names":[],"mappings":"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","sourcesContent":["import { createCellResizer } from './features/CellResizer';\nimport { createTableInserter } from './features/TableInserter';\nimport { createTableMover } from './features/TableMover';\nimport { createTableResizer } from './features/TableResizer';\nimport { disposeTableEditFeature } from './features/TableEditFeature';\nimport { isNodeOfType, normalizeRect } from 'roosterjs-content-model-dom';\nimport type { TableEditFeature } from './features/TableEditFeature';\nimport type { IEditor, TableSelection } from 'roosterjs-content-model-types';\n\nconst INSERTER_HOVER_OFFSET = 6;\nconst enum TOP_OR_SIDE {\n top = 0,\n side = 1,\n}\n/**\n * @internal\n *\n * A table has 6 hot areas to be resized/edited (take LTR example):\n *\n * [6] [ ]\n * +[ 1 ]+--------------------+\n * |[ ]| |\n * [ ] [ ] |\n * [ ] [ ] |\n * [2] [3] |\n * [ ] [ ] |\n * [ ][ 4 ]| |\n * +------------------+--------------------+\n * | | |\n * | | |\n * | | |\n * +------------------+--------------------+\n * [5]\n *\n * 1 - Hover area to show insert column button\n * 2 - Hover area to show insert row button\n * 3 - Hover area to show vertical resizing bar\n * 4 - Hover area to show horizontal resizing bar\n * 5 - Hover area to show whole table resize handle\n * 6 - Hover area to show whole table mover handle\n *\n * When set a different current table or change current TD, we need to update these areas\n */\nexport class TableEditor {\n // 1, 2 - Insert a column or a row\n private horizontalInserter: TableEditFeature | null = null;\n private verticalInserter: TableEditFeature | null = null;\n\n // 3, 4 - Resize a column or a row from a cell\n private horizontalResizer: TableEditFeature | null = null;\n private verticalResizer: TableEditFeature | null = null;\n\n // 5 - Resize whole table\n private tableResizer: TableEditFeature | null = null;\n\n // 6 - Move as well as select whole table\n private tableMover: TableEditFeature | null = null;\n\n private isRTL: boolean;\n private range: Range | null = null;\n private isCurrentlyEditing: boolean;\n\n constructor(\n private editor: IEditor,\n public readonly table: HTMLTableElement,\n private onChanged: () => void,\n private anchorContainer?: HTMLElement,\n private contentDiv?: EventTarget | null\n ) {\n this.isRTL = editor.getDocument().defaultView?.getComputedStyle(table).direction == 'rtl';\n this.setEditorFeatures();\n this.isCurrentlyEditing = false;\n }\n\n dispose() {\n this.disposeTableResizer();\n this.disposeCellResizers();\n this.disposeTableInserter();\n this.disposeTableMover();\n }\n\n isEditing(): boolean {\n return this.isCurrentlyEditing;\n }\n\n isOwnedElement(node: Node) {\n return [\n this.tableResizer,\n this.tableMover,\n this.horizontalInserter,\n this.verticalInserter,\n this.horizontalResizer,\n this.verticalResizer,\n ]\n .filter(feature => !!feature?.div)\n .some(feature => feature?.div == node);\n }\n\n onMouseMove(x: number, y: number) {\n // Get whole table rect\n const tableRect = normalizeRect(this.table.getBoundingClientRect());\n\n //console.log('>>>tableRect', tableRect);\n if (!tableRect) {\n return;\n }\n\n // Determine if cursor is on top or side\n const topOrSide =\n y <= tableRect.top + INSERTER_HOVER_OFFSET\n ? TOP_OR_SIDE.top\n : this.isRTL\n ? x >= tableRect.right - INSERTER_HOVER_OFFSET\n ? TOP_OR_SIDE.side\n : undefined\n : x <= tableRect.left + INSERTER_HOVER_OFFSET\n ? TOP_OR_SIDE.side\n : undefined;\n const topOrSideBinary = topOrSide ? 1 : 0;\n\n // i is row index, j is column index\n for (let i = 0; i < this.table.rows.length; i++) {\n const tr = this.table.rows[i];\n let j = 0;\n for (; j < tr.cells.length; j++) {\n const td = tr.cells[j];\n const tdRect = normalizeRect(td.getBoundingClientRect());\n\n if (!tdRect || !tableRect) {\n continue;\n }\n\n // Determine the cell the cursor is in range of\n // Offset is only used for first row and column\n const lessThanBottom = y <= tdRect.bottom;\n const lessThanRight = this.isRTL\n ? x <= tdRect.right + INSERTER_HOVER_OFFSET * topOrSideBinary\n : x <= tdRect.right;\n const moreThanLeft = this.isRTL\n ? x >= tdRect.left\n : x >= tdRect.left - INSERTER_HOVER_OFFSET * topOrSideBinary;\n\n if (lessThanBottom && lessThanRight && moreThanLeft) {\n if (i === 0 && topOrSide == TOP_OR_SIDE.top) {\n const center = (tdRect.left + tdRect.right) / 2;\n const isOnRightHalf = this.isRTL ? x < center : x > center;\n this.setInserterTd(\n isOnRightHalf ? td : tr.cells[j - 1],\n false /*isHorizontal*/\n );\n } else if (j === 0 && topOrSide == TOP_OR_SIDE.side) {\n const tdAbove = this.table.rows[i - 1]?.cells[0];\n const tdAboveRect = tdAbove\n ? normalizeRect(tdAbove.getBoundingClientRect())\n : null;\n\n const isTdNotAboveMerged = !tdAboveRect\n ? null\n : this.isRTL\n ? tdAboveRect.right === tdRect.right\n : tdAboveRect.left === tdRect.left;\n\n this.setInserterTd(\n y < (tdRect.top + tdRect.bottom) / 2 && isTdNotAboveMerged\n ? tdAbove\n : td,\n true /*isHorizontal*/\n );\n } else {\n this.setInserterTd(null);\n }\n\n this.setResizingTd(td);\n\n //Cell found\n break;\n }\n }\n\n if (j < tr.cells.length) {\n break;\n }\n }\n\n // Create Mover and Resizer\n this.setEditorFeatures();\n }\n\n private setEditorFeatures() {\n if (!this.tableMover) {\n this.tableMover = createTableMover(\n this.table,\n this.editor,\n this.isRTL,\n this.onSelect,\n this.getOnMouseOut,\n this.contentDiv,\n this.anchorContainer\n );\n }\n\n if (!this.tableResizer) {\n this.tableResizer = createTableResizer(\n this.table,\n this.editor,\n this.isRTL,\n this.onStartTableResize,\n this.onFinishEditing,\n this.contentDiv,\n this.anchorContainer\n );\n }\n }\n\n private setResizingTd(td: HTMLTableCellElement) {\n if (this.horizontalResizer && this.horizontalResizer.node != td) {\n this.disposeCellResizers();\n }\n\n if (!this.horizontalResizer && td) {\n this.horizontalResizer = createCellResizer(\n this.editor,\n td,\n this.table,\n this.isRTL,\n true /*isHorizontal*/,\n this.onStartCellResize,\n this.onFinishEditing,\n this.anchorContainer\n );\n this.verticalResizer = createCellResizer(\n this.editor,\n td,\n this.table,\n this.isRTL,\n false /*isHorizontal*/,\n this.onStartCellResize,\n this.onFinishEditing,\n this.anchorContainer\n );\n }\n }\n\n /**\n * create or remove TableInserter\n * @param td td to attach to, set this to null to remove inserters (both horizontal and vertical)\n */\n private setInserterTd(td: HTMLTableCellElement | null, isHorizontal?: boolean) {\n const inserter = isHorizontal ? this.horizontalInserter : this.verticalInserter;\n if (td === null || (inserter && inserter.node != td)) {\n this.disposeTableInserter();\n }\n\n if (!this.horizontalInserter && !this.verticalInserter && td) {\n const newInserter = createTableInserter(\n this.editor,\n td,\n this.table,\n this.isRTL,\n !!isHorizontal,\n this.onInserted,\n this.getOnMouseOut,\n this.anchorContainer\n );\n if (isHorizontal) {\n this.horizontalInserter = newInserter;\n } else {\n this.verticalInserter = newInserter;\n }\n }\n }\n\n private disposeTableResizer() {\n if (this.tableResizer) {\n disposeTableEditFeature(this.tableResizer);\n this.tableResizer = null;\n }\n }\n\n private disposeTableInserter() {\n if (this.horizontalInserter) {\n disposeTableEditFeature(this.horizontalInserter);\n this.horizontalInserter = null;\n }\n if (this.verticalInserter) {\n disposeTableEditFeature(this.verticalInserter);\n this.verticalInserter = null;\n }\n }\n\n private disposeCellResizers() {\n if (this.horizontalResizer) {\n disposeTableEditFeature(this.horizontalResizer);\n this.horizontalResizer = null;\n }\n if (this.verticalResizer) {\n disposeTableEditFeature(this.verticalResizer);\n this.verticalResizer = null;\n }\n }\n\n private disposeTableMover() {\n if (this.tableMover) {\n disposeTableEditFeature(this.tableMover);\n this.tableMover = null;\n }\n }\n\n private onFinishEditing = (): false => {\n this.editor.focus();\n\n if (this.range) {\n this.editor.setDOMSelection({ type: 'range', range: this.range, isReverted: false });\n }\n\n this.editor.takeSnapshot(); // Pass in an empty callback to make sure ContentChangedEvent is triggered\n this.onChanged();\n this.isCurrentlyEditing = false;\n\n return false;\n };\n\n private onStartTableResize = () => {\n this.isCurrentlyEditing = true;\n this.onStartResize();\n };\n\n private onStartCellResize = () => {\n this.isCurrentlyEditing = true;\n this.disposeTableResizer();\n this.onStartResize();\n };\n\n private onStartResize() {\n this.isCurrentlyEditing = true;\n const range = this.editor.getDOMSelection();\n\n if (range && range.type == 'range') {\n this.range = range.range;\n }\n\n this.editor.takeSnapshot();\n }\n\n private onInserted = () => {\n this.disposeTableResizer();\n this.onFinishEditing();\n };\n\n /**\n * Public only for testing purposes\n * @param table the table to select\n */\n public onSelect = (table: HTMLTableElement) => {\n this.editor.focus();\n\n if (table) {\n const selection: TableSelection = {\n table: table,\n firstRow: 0,\n firstColumn: 0,\n lastRow: table.rows.length - 1,\n lastColumn: table.rows[table.rows.length - 1].cells.length - 1,\n type: 'table',\n };\n\n this.editor.setDOMSelection(selection);\n }\n };\n\n private getOnMouseOut = (feature: HTMLElement) => {\n return (ev: MouseEvent) => {\n if (\n feature &&\n ev.relatedTarget != feature &&\n isNodeOfType(this.contentDiv as Node, 'ELEMENT_NODE') &&\n isNodeOfType(ev.relatedTarget as Node, 'ELEMENT_NODE') &&\n !(this.contentDiv == ev.relatedTarget)\n ) {\n this.dispose();\n }\n };\n };\n}\n"]}
@@ -1,6 +1,6 @@
1
1
  import type { IEditor } from 'roosterjs-content-model-types';
2
- import type TableEditFeature from './TableEditorFeature';
2
+ import type { TableEditFeature } from './TableEditFeature';
3
3
  /**
4
4
  * @internal
5
5
  */
6
- export default function createCellResizer(editor: IEditor, td: HTMLTableCellElement, table: HTMLTableElement, isRTL: boolean, isHorizontal: boolean, onStart: () => void, onEnd: () => false, anchorContainer?: HTMLElement): TableEditFeature | null;
6
+ export declare function createCellResizer(editor: IEditor, td: HTMLTableCellElement, table: HTMLTableElement, isRTL: boolean, isHorizontal: boolean, onStart: () => void, onEnd: () => false, anchorContainer?: HTMLElement): TableEditFeature | null;
@@ -1,9 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createCellResizer = void 0;
3
4
  var tslib_1 = require("tslib");
4
5
  var createElement_1 = require("../../../pluginUtils/CreateElement/createElement");
5
6
  var DragAndDropHelper_1 = require("../../../pluginUtils/DragAndDrop/DragAndDropHelper");
6
- var normalizeRect_1 = require("../../../pluginUtils/Rect/normalizeRect");
7
7
  var roosterjs_content_model_dom_1 = require("roosterjs-content-model-dom");
8
8
  var roosterjs_content_model_core_1 = require("roosterjs-content-model-core");
9
9
  var CELL_RESIZER_WIDTH = 4;
@@ -17,7 +17,7 @@ function createCellResizer(editor, td, table, isRTL, isHorizontal, onStart, onEn
17
17
  style: "position: fixed; cursor: " + (isHorizontal ? 'row' : 'col') + "-resize; user-select: none",
18
18
  };
19
19
  var zoomScale = editor.getDOMHelper().calculateZoomScale();
20
- var div = (0, createElement_1.default)(createElementData, document);
20
+ var div = (0, createElement_1.createElement)(createElementData, document);
21
21
  (anchorContainer || document.body).appendChild(div);
22
22
  var context = { editor: editor, td: td, table: table, isRTL: isRTL, zoomScale: zoomScale, onStart: onStart };
23
23
  var setPosition = isHorizontal ? setHorizontalPosition : setVerticalPosition;
@@ -28,13 +28,13 @@ function createCellResizer(editor, td, table, isRTL, isHorizontal, onStart, onEn
28
28
  onDragging: isHorizontal ? onDraggingHorizontal : onDraggingVertical,
29
29
  onDragEnd: onEnd,
30
30
  };
31
- var featureHandler = new DragAndDropHelper_1.default(div, context, setPosition, handler, zoomScale, editor.getEnvironment().isMobileOrTablet);
31
+ var featureHandler = new DragAndDropHelper_1.DragAndDropHelper(div, context, setPosition, handler, zoomScale, editor.getEnvironment().isMobileOrTablet);
32
32
  return { node: td, div: div, featureHandler: featureHandler };
33
33
  }
34
- exports.default = createCellResizer;
34
+ exports.createCellResizer = createCellResizer;
35
35
  function onDragStart(context, event) {
36
36
  var td = context.td, onStart = context.onStart;
37
- var rect = (0, normalizeRect_1.default)(td.getBoundingClientRect());
37
+ var rect = (0, roosterjs_content_model_dom_1.normalizeRect)(td.getBoundingClientRect());
38
38
  // Get cell coordinates
39
39
  var columnIndex = td.cellIndex;
40
40
  var row = td.parentElement && (0, roosterjs_content_model_dom_1.isElementOfType)(td.parentElement, 'tr') ? td.parentElement : undefined;
@@ -146,7 +146,7 @@ function onDraggingVertical(context, event, initValue, deltaX) {
146
146
  }
147
147
  function setHorizontalPosition(context, trigger) {
148
148
  var td = context.td;
149
- var rect = (0, normalizeRect_1.default)(td.getBoundingClientRect());
149
+ var rect = (0, roosterjs_content_model_dom_1.normalizeRect)(td.getBoundingClientRect());
150
150
  if (rect) {
151
151
  trigger.id = 'horizontalResizer';
152
152
  trigger.style.top = rect.bottom - CELL_RESIZER_WIDTH + 'px';
@@ -157,7 +157,7 @@ function setHorizontalPosition(context, trigger) {
157
157
  }
158
158
  function setVerticalPosition(context, trigger) {
159
159
  var td = context.td, isRTL = context.isRTL;
160
- var rect = (0, normalizeRect_1.default)(td.getBoundingClientRect());
160
+ var rect = (0, roosterjs_content_model_dom_1.normalizeRect)(td.getBoundingClientRect());
161
161
  if (rect) {
162
162
  trigger.id = 'verticalResizer';
163
163
  trigger.style.top = rect.top + 'px';
@@ -1 +1 @@
1
- {"version":3,"file":"CellResizer.js","sourceRoot":"","sources":["../../../../../../packages-content-model/roosterjs-content-model-plugins/lib/tableEdit/editors/features/CellResizer.ts"],"names":[],"mappings":"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","sourcesContent":["import createElement from '../../../pluginUtils/CreateElement/createElement';\nimport DragAndDropHelper from '../../../pluginUtils/DragAndDrop/DragAndDropHelper';\nimport normalizeRect from '../../../pluginUtils/Rect/normalizeRect';\nimport { isElementOfType } from 'roosterjs-content-model-dom';\nimport {\n getFirstSelectedTable,\n MIN_ALLOWED_TABLE_CELL_WIDTH,\n normalizeTable,\n} from 'roosterjs-content-model-core';\nimport type DragAndDropHandler from '../../../pluginUtils/DragAndDrop/DragAndDropHandler';\nimport type { ContentModelTable, IEditor } from 'roosterjs-content-model-types';\nimport type TableEditFeature from './TableEditorFeature';\n\nconst CELL_RESIZER_WIDTH = 4;\n\n/**\n * @internal\n */\nexport default function createCellResizer(\n editor: IEditor,\n td: HTMLTableCellElement,\n table: HTMLTableElement,\n isRTL: boolean,\n isHorizontal: boolean,\n onStart: () => void,\n onEnd: () => false,\n anchorContainer?: HTMLElement\n): TableEditFeature | null {\n const document = td.ownerDocument;\n const createElementData = {\n tag: 'div',\n style: `position: fixed; cursor: ${isHorizontal ? 'row' : 'col'}-resize; user-select: none`,\n };\n const zoomScale = editor.getDOMHelper().calculateZoomScale();\n\n const div = createElement(createElementData, document) as HTMLDivElement;\n\n (anchorContainer || document.body).appendChild(div);\n\n const context: DragAndDropContext = { editor, td, table, isRTL, zoomScale, onStart };\n const setPosition = isHorizontal ? setHorizontalPosition : setVerticalPosition;\n setPosition(context, div);\n\n const handler: DragAndDropHandler<DragAndDropContext, DragAndDropInitValue> = {\n onDragStart,\n // Horizontal modifies row height, vertical modifies column width\n onDragging: isHorizontal ? onDraggingHorizontal : onDraggingVertical,\n onDragEnd: onEnd,\n };\n\n const featureHandler = new DragAndDropHelper<DragAndDropContext, DragAndDropInitValue>(\n div,\n context,\n setPosition,\n handler,\n zoomScale,\n editor.getEnvironment().isMobileOrTablet\n );\n\n return { node: td, div, featureHandler };\n}\n\ninterface DragAndDropContext {\n editor: IEditor;\n td: HTMLTableCellElement;\n table: HTMLTableElement;\n isRTL: boolean;\n zoomScale: number;\n onStart: () => void;\n}\n\ninterface DragAndDropInitValue {\n cmTable: ContentModelTable | undefined;\n anchorColumn: number | undefined;\n anchorRow: number | undefined;\n anchorRowHeight: number;\n allWidths: number[];\n}\n\nfunction onDragStart(context: DragAndDropContext, event: MouseEvent): DragAndDropInitValue {\n const { td, onStart } = context;\n const rect = normalizeRect(td.getBoundingClientRect());\n\n // Get cell coordinates\n const columnIndex = td.cellIndex;\n const row =\n td.parentElement && isElementOfType(td.parentElement, 'tr') ? td.parentElement : undefined;\n const rowIndex = row?.rowIndex;\n\n if (rowIndex == undefined) {\n return {\n cmTable: undefined,\n anchorColumn: undefined,\n anchorRow: undefined,\n anchorRowHeight: -1,\n allWidths: [],\n }; // Just a fallback\n }\n\n const { editor, table } = context;\n\n // Get current selection\n const selection = editor.getDOMSelection();\n\n // Select first cell of the table\n editor.setDOMSelection({\n type: 'table',\n firstColumn: 0,\n firstRow: 0,\n lastColumn: 0,\n lastRow: 0,\n table: table,\n });\n\n // Get the table content model\n const cmTable = getFirstSelectedTable(editor.getContentModelCopy('disconnected'))[0];\n\n // Restore selection\n editor.setDOMSelection(selection);\n\n if (rect && cmTable) {\n onStart();\n\n return {\n cmTable,\n anchorColumn: columnIndex,\n anchorRow: rowIndex,\n anchorRowHeight: cmTable.rows[rowIndex].height,\n allWidths: [...cmTable.widths],\n };\n } else {\n return {\n cmTable,\n anchorColumn: undefined,\n anchorRow: undefined,\n anchorRowHeight: -1,\n allWidths: [],\n }; // Just a fallback\n }\n}\n\nfunction onDraggingHorizontal(\n context: DragAndDropContext,\n event: MouseEvent,\n initValue: DragAndDropInitValue,\n deltaX: number,\n deltaY: number\n) {\n const { table } = context;\n const { cmTable, anchorRow, anchorRowHeight } = initValue;\n\n // Assign new widths and heights to the CM table\n if (cmTable && anchorRow != undefined) {\n // Modify the CM Table size\n cmTable.rows[anchorRow].height = (anchorRowHeight ?? 0) + deltaY;\n\n // Normalize the table\n normalizeTable(cmTable);\n\n // Writeback CM Table size changes to DOM Table\n const tableRow = table.rows[anchorRow];\n for (let col = 0; col < tableRow.cells.length; col++) {\n const td = tableRow.cells[col];\n td.style.height = cmTable.rows[anchorRow].height + 'px';\n }\n\n return true;\n } else {\n return false;\n }\n}\n\nfunction onDraggingVertical(\n context: DragAndDropContext,\n event: MouseEvent,\n initValue: DragAndDropInitValue,\n deltaX: number\n) {\n const { table, isRTL } = context;\n const { cmTable, anchorColumn, allWidths } = initValue;\n\n // Assign new widths and heights to the CM table\n if (cmTable && anchorColumn != undefined) {\n // Modify the CM Table size\n const lastColumn = anchorColumn == cmTable.widths.length - 1;\n const change = deltaX * (isRTL ? -1 : 1);\n // This is the last column\n if (lastColumn) {\n // Only the last column changes\n cmTable.widths[anchorColumn] = allWidths[anchorColumn] + change;\n } else {\n // Any other two columns\n const anchorChange = allWidths[anchorColumn] + change;\n const nextAnchorChange = allWidths[anchorColumn + 1] - change;\n if (\n anchorChange < MIN_ALLOWED_TABLE_CELL_WIDTH ||\n nextAnchorChange < MIN_ALLOWED_TABLE_CELL_WIDTH\n ) {\n return false;\n }\n cmTable.widths[anchorColumn] = anchorChange;\n cmTable.widths[anchorColumn + 1] = nextAnchorChange;\n }\n\n // Normalize the table\n normalizeTable(cmTable);\n\n // Writeback CM Table size changes to DOM Table\n for (let row = 0; row < table.rows.length; row++) {\n const tableRow = table.rows[row];\n for (let col = 0; col < tableRow.cells.length; col++) {\n tableRow.cells[col].style.width = cmTable.widths[col] + 'px';\n }\n }\n\n return true;\n } else {\n return false;\n }\n}\n\nfunction setHorizontalPosition(context: DragAndDropContext, trigger: HTMLElement) {\n const { td } = context;\n const rect = normalizeRect(td.getBoundingClientRect());\n if (rect) {\n trigger.id = 'horizontalResizer';\n trigger.style.top = rect.bottom - CELL_RESIZER_WIDTH + 'px';\n trigger.style.left = rect.left + 'px';\n trigger.style.width = rect.right - rect.left + 'px';\n trigger.style.height = CELL_RESIZER_WIDTH + 'px';\n }\n}\n\nfunction setVerticalPosition(context: DragAndDropContext, trigger: HTMLElement) {\n const { td, isRTL } = context;\n const rect = normalizeRect(td.getBoundingClientRect());\n if (rect) {\n trigger.id = 'verticalResizer';\n trigger.style.top = rect.top + 'px';\n trigger.style.left = (isRTL ? rect.left : rect.right) - CELL_RESIZER_WIDTH + 1 + 'px';\n trigger.style.width = CELL_RESIZER_WIDTH + 'px';\n trigger.style.height = rect.bottom - rect.top + 'px';\n }\n}\n"]}
1
+ {"version":3,"file":"CellResizer.js","sourceRoot":"","sources":["../../../../../../packages/roosterjs-content-model-plugins/lib/tableEdit/editors/features/CellResizer.ts"],"names":[],"mappings":"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","sourcesContent":["import { createElement } from '../../../pluginUtils/CreateElement/createElement';\nimport { DragAndDropHelper } from '../../../pluginUtils/DragAndDrop/DragAndDropHelper';\nimport { isElementOfType, normalizeRect } from 'roosterjs-content-model-dom';\nimport {\n getFirstSelectedTable,\n MIN_ALLOWED_TABLE_CELL_WIDTH,\n normalizeTable,\n} from 'roosterjs-content-model-core';\nimport type { DragAndDropHandler } from '../../../pluginUtils/DragAndDrop/DragAndDropHandler';\nimport type { ContentModelTable, IEditor } from 'roosterjs-content-model-types';\nimport type { TableEditFeature } from './TableEditFeature';\n\nconst CELL_RESIZER_WIDTH = 4;\n\n/**\n * @internal\n */\nexport function createCellResizer(\n editor: IEditor,\n td: HTMLTableCellElement,\n table: HTMLTableElement,\n isRTL: boolean,\n isHorizontal: boolean,\n onStart: () => void,\n onEnd: () => false,\n anchorContainer?: HTMLElement\n): TableEditFeature | null {\n const document = td.ownerDocument;\n const createElementData = {\n tag: 'div',\n style: `position: fixed; cursor: ${isHorizontal ? 'row' : 'col'}-resize; user-select: none`,\n };\n const zoomScale = editor.getDOMHelper().calculateZoomScale();\n\n const div = createElement(createElementData, document) as HTMLDivElement;\n\n (anchorContainer || document.body).appendChild(div);\n\n const context: DragAndDropContext = { editor, td, table, isRTL, zoomScale, onStart };\n const setPosition = isHorizontal ? setHorizontalPosition : setVerticalPosition;\n setPosition(context, div);\n\n const handler: DragAndDropHandler<DragAndDropContext, DragAndDropInitValue> = {\n onDragStart,\n // Horizontal modifies row height, vertical modifies column width\n onDragging: isHorizontal ? onDraggingHorizontal : onDraggingVertical,\n onDragEnd: onEnd,\n };\n\n const featureHandler = new DragAndDropHelper<DragAndDropContext, DragAndDropInitValue>(\n div,\n context,\n setPosition,\n handler,\n zoomScale,\n editor.getEnvironment().isMobileOrTablet\n );\n\n return { node: td, div, featureHandler };\n}\n\ninterface DragAndDropContext {\n editor: IEditor;\n td: HTMLTableCellElement;\n table: HTMLTableElement;\n isRTL: boolean;\n zoomScale: number;\n onStart: () => void;\n}\n\ninterface DragAndDropInitValue {\n cmTable: ContentModelTable | undefined;\n anchorColumn: number | undefined;\n anchorRow: number | undefined;\n anchorRowHeight: number;\n allWidths: number[];\n}\n\nfunction onDragStart(context: DragAndDropContext, event: MouseEvent): DragAndDropInitValue {\n const { td, onStart } = context;\n const rect = normalizeRect(td.getBoundingClientRect());\n\n // Get cell coordinates\n const columnIndex = td.cellIndex;\n const row =\n td.parentElement && isElementOfType(td.parentElement, 'tr') ? td.parentElement : undefined;\n const rowIndex = row?.rowIndex;\n\n if (rowIndex == undefined) {\n return {\n cmTable: undefined,\n anchorColumn: undefined,\n anchorRow: undefined,\n anchorRowHeight: -1,\n allWidths: [],\n }; // Just a fallback\n }\n\n const { editor, table } = context;\n\n // Get current selection\n const selection = editor.getDOMSelection();\n\n // Select first cell of the table\n editor.setDOMSelection({\n type: 'table',\n firstColumn: 0,\n firstRow: 0,\n lastColumn: 0,\n lastRow: 0,\n table: table,\n });\n\n // Get the table content model\n const cmTable = getFirstSelectedTable(editor.getContentModelCopy('disconnected'))[0];\n\n // Restore selection\n editor.setDOMSelection(selection);\n\n if (rect && cmTable) {\n onStart();\n\n return {\n cmTable,\n anchorColumn: columnIndex,\n anchorRow: rowIndex,\n anchorRowHeight: cmTable.rows[rowIndex].height,\n allWidths: [...cmTable.widths],\n };\n } else {\n return {\n cmTable,\n anchorColumn: undefined,\n anchorRow: undefined,\n anchorRowHeight: -1,\n allWidths: [],\n }; // Just a fallback\n }\n}\n\nfunction onDraggingHorizontal(\n context: DragAndDropContext,\n event: MouseEvent,\n initValue: DragAndDropInitValue,\n deltaX: number,\n deltaY: number\n) {\n const { table } = context;\n const { cmTable, anchorRow, anchorRowHeight } = initValue;\n\n // Assign new widths and heights to the CM table\n if (cmTable && anchorRow != undefined) {\n // Modify the CM Table size\n cmTable.rows[anchorRow].height = (anchorRowHeight ?? 0) + deltaY;\n\n // Normalize the table\n normalizeTable(cmTable);\n\n // Writeback CM Table size changes to DOM Table\n const tableRow = table.rows[anchorRow];\n for (let col = 0; col < tableRow.cells.length; col++) {\n const td = tableRow.cells[col];\n td.style.height = cmTable.rows[anchorRow].height + 'px';\n }\n\n return true;\n } else {\n return false;\n }\n}\n\nfunction onDraggingVertical(\n context: DragAndDropContext,\n event: MouseEvent,\n initValue: DragAndDropInitValue,\n deltaX: number\n) {\n const { table, isRTL } = context;\n const { cmTable, anchorColumn, allWidths } = initValue;\n\n // Assign new widths and heights to the CM table\n if (cmTable && anchorColumn != undefined) {\n // Modify the CM Table size\n const lastColumn = anchorColumn == cmTable.widths.length - 1;\n const change = deltaX * (isRTL ? -1 : 1);\n // This is the last column\n if (lastColumn) {\n // Only the last column changes\n cmTable.widths[anchorColumn] = allWidths[anchorColumn] + change;\n } else {\n // Any other two columns\n const anchorChange = allWidths[anchorColumn] + change;\n const nextAnchorChange = allWidths[anchorColumn + 1] - change;\n if (\n anchorChange < MIN_ALLOWED_TABLE_CELL_WIDTH ||\n nextAnchorChange < MIN_ALLOWED_TABLE_CELL_WIDTH\n ) {\n return false;\n }\n cmTable.widths[anchorColumn] = anchorChange;\n cmTable.widths[anchorColumn + 1] = nextAnchorChange;\n }\n\n // Normalize the table\n normalizeTable(cmTable);\n\n // Writeback CM Table size changes to DOM Table\n for (let row = 0; row < table.rows.length; row++) {\n const tableRow = table.rows[row];\n for (let col = 0; col < tableRow.cells.length; col++) {\n tableRow.cells[col].style.width = cmTable.widths[col] + 'px';\n }\n }\n\n return true;\n } else {\n return false;\n }\n}\n\nfunction setHorizontalPosition(context: DragAndDropContext, trigger: HTMLElement) {\n const { td } = context;\n const rect = normalizeRect(td.getBoundingClientRect());\n if (rect) {\n trigger.id = 'horizontalResizer';\n trigger.style.top = rect.bottom - CELL_RESIZER_WIDTH + 'px';\n trigger.style.left = rect.left + 'px';\n trigger.style.width = rect.right - rect.left + 'px';\n trigger.style.height = CELL_RESIZER_WIDTH + 'px';\n }\n}\n\nfunction setVerticalPosition(context: DragAndDropContext, trigger: HTMLElement) {\n const { td, isRTL } = context;\n const rect = normalizeRect(td.getBoundingClientRect());\n if (rect) {\n trigger.id = 'verticalResizer';\n trigger.style.top = rect.top + 'px';\n trigger.style.left = (isRTL ? rect.left : rect.right) - CELL_RESIZER_WIDTH + 1 + 'px';\n trigger.style.width = CELL_RESIZER_WIDTH + 'px';\n trigger.style.height = rect.bottom - rect.top + 'px';\n }\n}\n"]}
@@ -1,8 +1,8 @@
1
- import type Disposable from '../../../pluginUtils/Disposable';
1
+ import type { Disposable } from '../../../pluginUtils/Disposable';
2
2
  /**
3
3
  * @internal
4
4
  */
5
- export default interface TableEditFeature {
5
+ export interface TableEditFeature {
6
6
  node: Node;
7
7
  div: HTMLDivElement | null;
8
8
  featureHandler: Disposable | null;
@@ -14,4 +14,4 @@ function disposeTableEditFeature(resizer) {
14
14
  }
15
15
  }
16
16
  exports.disposeTableEditFeature = disposeTableEditFeature;
17
- //# sourceMappingURL=TableEditorFeature.js.map
17
+ //# sourceMappingURL=TableEditFeature.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TableEditFeature.js","sourceRoot":"","sources":["../../../../../../packages/roosterjs-content-model-plugins/lib/tableEdit/editors/features/TableEditFeature.ts"],"names":[],"mappings":";;;AAWA;;GAEG;AACH,SAAgB,uBAAuB,CAAC,OAAgC;;IACpE,IAAI,OAAO,EAAE;QACT,MAAA,MAAA,OAAO,CAAC,GAAG,0CAAE,UAAU,0CAAE,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAClD,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC;QACnB,MAAA,OAAO,CAAC,cAAc,0CAAE,OAAO,EAAE,CAAC;QAClC,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;KACjC;AACL,CAAC;AAPD,0DAOC","sourcesContent":["import type { Disposable } from '../../../pluginUtils/Disposable';\n\n/**\n * @internal\n */\nexport interface TableEditFeature {\n node: Node;\n div: HTMLDivElement | null;\n featureHandler: Disposable | null;\n}\n\n/**\n * @internal\n */\nexport function disposeTableEditFeature(resizer: TableEditFeature | null) {\n if (resizer) {\n resizer.div?.parentNode?.removeChild(resizer.div);\n resizer.div = null;\n resizer.featureHandler?.dispose();\n resizer.featureHandler = null;\n }\n}\n"]}
@@ -1,6 +1,6 @@
1
- import type TableEditFeature from './TableEditorFeature';
1
+ import type { TableEditFeature } from './TableEditFeature';
2
2
  import type { IEditor } from 'roosterjs-content-model-types';
3
3
  /**
4
4
  * @internal
5
5
  */
6
- export default function createTableInserter(editor: IEditor, td: HTMLTableCellElement, table: HTMLTableElement, isRTL: boolean, isHorizontal: boolean, onInsert: () => void, getOnMouseOut: (feature: HTMLElement) => (ev: MouseEvent) => void, anchorContainer?: HTMLElement): TableEditFeature | null;
6
+ export declare function createTableInserter(editor: IEditor, td: HTMLTableCellElement, table: HTMLTableElement, isRTL: boolean, isHorizontal: boolean, onInsert: () => void, getOnMouseOut: (feature: HTMLElement) => (ev: MouseEvent) => void, anchorContainer?: HTMLElement): TableEditFeature | null;
@@ -1,8 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createTableInserter = void 0;
3
4
  var createElement_1 = require("../../../pluginUtils/CreateElement/createElement");
4
5
  var getIntersectedRect_1 = require("../../../pluginUtils/Rect/getIntersectedRect");
5
- var normalizeRect_1 = require("../../../pluginUtils/Rect/normalizeRect");
6
6
  var roosterjs_content_model_dom_1 = require("roosterjs-content-model-dom");
7
7
  var roosterjs_content_model_api_1 = require("roosterjs-content-model-api");
8
8
  var INSERTER_COLOR = '#4A4A4A';
@@ -13,14 +13,14 @@ var INSERTER_BORDER_SIZE = 1;
13
13
  * @internal
14
14
  */
15
15
  function createTableInserter(editor, td, table, isRTL, isHorizontal, onInsert, getOnMouseOut, anchorContainer) {
16
- var tdRect = (0, normalizeRect_1.default)(td.getBoundingClientRect());
16
+ var tdRect = (0, roosterjs_content_model_dom_1.normalizeRect)(td.getBoundingClientRect());
17
17
  var viewPort = editor.getVisibleViewport();
18
- var tableRect = table && viewPort ? (0, getIntersectedRect_1.default)([table], [viewPort]) : null;
18
+ var tableRect = table && viewPort ? (0, getIntersectedRect_1.getIntersectedRect)([table], [viewPort]) : null;
19
19
  // set inserter position
20
20
  if (tdRect && tableRect) {
21
21
  var document_1 = td.ownerDocument;
22
22
  var createElementData = getInsertElementData(isHorizontal, editor.isDarkMode(), isRTL, editor.getDOMHelper().getDomStyle('backgroundColor') || 'white');
23
- var div = (0, createElement_1.default)(createElementData, document_1);
23
+ var div = (0, createElement_1.createElement)(createElementData, document_1);
24
24
  if (isHorizontal) {
25
25
  // tableRect.left/right is used because the Inserter is always intended to be on the side
26
26
  div.id = 'horizontalInserter';
@@ -43,7 +43,7 @@ function createTableInserter(editor, td, table, isRTL, isHorizontal, onInsert, g
43
43
  }
44
44
  return null;
45
45
  }
46
- exports.default = createTableInserter;
46
+ exports.createTableInserter = createTableInserter;
47
47
  var TableInsertHandler = /** @class */ (function () {
48
48
  function TableInsertHandler(div, td, table, isHorizontal, editor, onInsert, getOnMouseOut) {
49
49
  var _this = this;
@@ -1 +1 @@
1
- {"version":3,"file":"TableInserter.js","sourceRoot":"","sources":["../../../../../../packages-content-model/roosterjs-content-model-plugins/lib/tableEdit/editors/features/TableInserter.ts"],"names":[],"mappings":"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","sourcesContent":["import createElement from '../../../pluginUtils/CreateElement/createElement';\nimport getIntersectedRect from '../../../pluginUtils/Rect/getIntersectedRect';\nimport normalizeRect from '../../../pluginUtils/Rect/normalizeRect';\nimport { isElementOfType } from 'roosterjs-content-model-dom';\nimport {\n formatTableWithContentModel,\n insertTableColumn,\n insertTableRow,\n} from 'roosterjs-content-model-api';\nimport type CreateElementData from '../../../pluginUtils/CreateElement/CreateElementData';\nimport type Disposable from '../../../pluginUtils/Disposable';\nimport type TableEditFeature from './TableEditorFeature';\nimport type { IEditor } from 'roosterjs-content-model-types';\n\nconst INSERTER_COLOR = '#4A4A4A';\nconst INSERTER_COLOR_DARK_MODE = 'white';\nconst INSERTER_SIDE_LENGTH = 12;\nconst INSERTER_BORDER_SIZE = 1;\n\n/**\n * @internal\n */\nexport default function createTableInserter(\n editor: IEditor,\n td: HTMLTableCellElement,\n table: HTMLTableElement,\n isRTL: boolean,\n isHorizontal: boolean,\n onInsert: () => void,\n getOnMouseOut: (feature: HTMLElement) => (ev: MouseEvent) => void,\n anchorContainer?: HTMLElement\n): TableEditFeature | null {\n const tdRect = normalizeRect(td.getBoundingClientRect());\n const viewPort = editor.getVisibleViewport();\n const tableRect = table && viewPort ? getIntersectedRect([table], [viewPort]) : null;\n\n // set inserter position\n if (tdRect && tableRect) {\n const document = td.ownerDocument;\n const createElementData = getInsertElementData(\n isHorizontal,\n editor.isDarkMode(),\n isRTL,\n editor.getDOMHelper().getDomStyle('backgroundColor') || 'white'\n );\n\n const div = createElement(createElementData, document) as HTMLDivElement;\n\n if (isHorizontal) {\n // tableRect.left/right is used because the Inserter is always intended to be on the side\n div.id = 'horizontalInserter';\n div.style.left = `${\n isRTL\n ? tableRect.right\n : tableRect.left - (INSERTER_SIDE_LENGTH - 1 + 2 * INSERTER_BORDER_SIZE)\n }px`;\n div.style.top = `${tdRect.bottom - 8}px`;\n (div.firstChild as HTMLElement).style.width = `${tableRect.right - tableRect.left}px`;\n } else {\n div.id = 'verticalInserter';\n div.style.left = `${isRTL ? tdRect.left - 8 : tdRect.right - 8}px`;\n // tableRect.top is used because the Inserter is always intended to be on top\n div.style.top = `${\n tableRect.top - (INSERTER_SIDE_LENGTH - 1 + 2 * INSERTER_BORDER_SIZE)\n }px`;\n (div.firstChild as HTMLElement).style.height = `${tableRect.bottom - tableRect.top}px`;\n }\n\n (anchorContainer || document.body).appendChild(div);\n\n const handler = new TableInsertHandler(\n div,\n td,\n table,\n isHorizontal,\n editor,\n onInsert,\n getOnMouseOut\n );\n\n return { div, featureHandler: handler, node: td };\n }\n\n return null;\n}\n\nclass TableInsertHandler implements Disposable {\n private onMouseOutEvent: null | ((ev: MouseEvent) => void);\n constructor(\n private div: HTMLDivElement,\n private td: HTMLTableCellElement,\n private table: HTMLTableElement,\n private isHorizontal: boolean,\n private editor: IEditor,\n private onInsert: () => void,\n getOnMouseOut: (feature: HTMLElement) => (ev: MouseEvent) => void\n ) {\n this.div.addEventListener('click', this.insertTd);\n this.onMouseOutEvent = getOnMouseOut(div);\n this.div.addEventListener('mouseout', this.onMouseOutEvent);\n }\n\n dispose() {\n this.div.removeEventListener('click', this.insertTd);\n\n if (this.onMouseOutEvent) {\n this.div.removeEventListener('mouseout', this.onMouseOutEvent);\n }\n\n this.onMouseOutEvent = null;\n }\n\n private insertTd = () => {\n // Get cell coordinates\n const columnIndex = this.td.cellIndex;\n const row =\n this.td.parentElement && isElementOfType(this.td.parentElement, 'tr')\n ? this.td.parentElement\n : undefined;\n const rowIndex = row && row.rowIndex;\n\n if (row?.cells == undefined || rowIndex == undefined) {\n return;\n }\n\n // Insert row or column\n formatTableWithContentModel(\n this.editor,\n 'editTablePlugin',\n tableModel => {\n this.isHorizontal\n ? insertTableRow(tableModel, 'insertBelow')\n : insertTableColumn(tableModel, 'insertRight');\n }, // Select cell to make insertion\n {\n type: 'table',\n firstColumn: columnIndex,\n firstRow: rowIndex,\n lastColumn: columnIndex,\n lastRow: rowIndex,\n table: this.table,\n }\n );\n\n this.onInsert();\n };\n}\n\nfunction getInsertElementData(\n isHorizontal: boolean,\n isDark: boolean,\n isRTL: boolean,\n backgroundColor: string\n): CreateElementData {\n const inserterColor = isDark ? INSERTER_COLOR_DARK_MODE : INSERTER_COLOR;\n const outerDivStyle = `position: fixed; width: ${INSERTER_SIDE_LENGTH}px; height: ${INSERTER_SIDE_LENGTH}px; font-size: 16px; color: black; line-height: 8px; vertical-align: middle; text-align: center; cursor: pointer; border: solid ${INSERTER_BORDER_SIZE}px ${inserterColor}; border-radius: 50%; background-color: ${backgroundColor}`;\n const leftOrRight = isRTL ? 'right' : 'left';\n const childBaseStyles = `position: absolute; box-sizing: border-box; background-color: ${backgroundColor};`;\n const childInfo: CreateElementData = {\n tag: 'div',\n style:\n childBaseStyles +\n (isHorizontal\n ? `${leftOrRight}: 12px; top: 5px; height: 3px; border-top: 1px solid ${inserterColor}; border-bottom: 1px solid ${inserterColor}; border-right: 1px solid ${inserterColor}; border-left: 0px;`\n : `left: 5px; top: 12px; width: 3px; border-left: 1px solid ${inserterColor}; border-right: 1px solid ${inserterColor}; border-bottom: 1px solid ${inserterColor}; border-top: 0px;`),\n };\n\n return {\n tag: 'div',\n style: outerDivStyle,\n children: [childInfo, '+'],\n };\n}\n"]}
1
+ {"version":3,"file":"TableInserter.js","sourceRoot":"","sources":["../../../../../../packages/roosterjs-content-model-plugins/lib/tableEdit/editors/features/TableInserter.ts"],"names":[],"mappings":"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","sourcesContent":["import { createElement } from '../../../pluginUtils/CreateElement/createElement';\nimport { getIntersectedRect } from '../../../pluginUtils/Rect/getIntersectedRect';\nimport { isElementOfType, normalizeRect } from 'roosterjs-content-model-dom';\nimport {\n formatTableWithContentModel,\n insertTableColumn,\n insertTableRow,\n} from 'roosterjs-content-model-api';\nimport type { CreateElementData } from '../../../pluginUtils/CreateElement/CreateElementData';\nimport type { Disposable } from '../../../pluginUtils/Disposable';\nimport type { TableEditFeature } from './TableEditFeature';\nimport type { IEditor } from 'roosterjs-content-model-types';\n\nconst INSERTER_COLOR = '#4A4A4A';\nconst INSERTER_COLOR_DARK_MODE = 'white';\nconst INSERTER_SIDE_LENGTH = 12;\nconst INSERTER_BORDER_SIZE = 1;\n\n/**\n * @internal\n */\nexport function createTableInserter(\n editor: IEditor,\n td: HTMLTableCellElement,\n table: HTMLTableElement,\n isRTL: boolean,\n isHorizontal: boolean,\n onInsert: () => void,\n getOnMouseOut: (feature: HTMLElement) => (ev: MouseEvent) => void,\n anchorContainer?: HTMLElement\n): TableEditFeature | null {\n const tdRect = normalizeRect(td.getBoundingClientRect());\n const viewPort = editor.getVisibleViewport();\n const tableRect = table && viewPort ? getIntersectedRect([table], [viewPort]) : null;\n\n // set inserter position\n if (tdRect && tableRect) {\n const document = td.ownerDocument;\n const createElementData = getInsertElementData(\n isHorizontal,\n editor.isDarkMode(),\n isRTL,\n editor.getDOMHelper().getDomStyle('backgroundColor') || 'white'\n );\n\n const div = createElement(createElementData, document) as HTMLDivElement;\n\n if (isHorizontal) {\n // tableRect.left/right is used because the Inserter is always intended to be on the side\n div.id = 'horizontalInserter';\n div.style.left = `${\n isRTL\n ? tableRect.right\n : tableRect.left - (INSERTER_SIDE_LENGTH - 1 + 2 * INSERTER_BORDER_SIZE)\n }px`;\n div.style.top = `${tdRect.bottom - 8}px`;\n (div.firstChild as HTMLElement).style.width = `${tableRect.right - tableRect.left}px`;\n } else {\n div.id = 'verticalInserter';\n div.style.left = `${isRTL ? tdRect.left - 8 : tdRect.right - 8}px`;\n // tableRect.top is used because the Inserter is always intended to be on top\n div.style.top = `${\n tableRect.top - (INSERTER_SIDE_LENGTH - 1 + 2 * INSERTER_BORDER_SIZE)\n }px`;\n (div.firstChild as HTMLElement).style.height = `${tableRect.bottom - tableRect.top}px`;\n }\n\n (anchorContainer || document.body).appendChild(div);\n\n const handler = new TableInsertHandler(\n div,\n td,\n table,\n isHorizontal,\n editor,\n onInsert,\n getOnMouseOut\n );\n\n return { div, featureHandler: handler, node: td };\n }\n\n return null;\n}\n\nclass TableInsertHandler implements Disposable {\n private onMouseOutEvent: null | ((ev: MouseEvent) => void);\n constructor(\n private div: HTMLDivElement,\n private td: HTMLTableCellElement,\n private table: HTMLTableElement,\n private isHorizontal: boolean,\n private editor: IEditor,\n private onInsert: () => void,\n getOnMouseOut: (feature: HTMLElement) => (ev: MouseEvent) => void\n ) {\n this.div.addEventListener('click', this.insertTd);\n this.onMouseOutEvent = getOnMouseOut(div);\n this.div.addEventListener('mouseout', this.onMouseOutEvent);\n }\n\n dispose() {\n this.div.removeEventListener('click', this.insertTd);\n\n if (this.onMouseOutEvent) {\n this.div.removeEventListener('mouseout', this.onMouseOutEvent);\n }\n\n this.onMouseOutEvent = null;\n }\n\n private insertTd = () => {\n // Get cell coordinates\n const columnIndex = this.td.cellIndex;\n const row =\n this.td.parentElement && isElementOfType(this.td.parentElement, 'tr')\n ? this.td.parentElement\n : undefined;\n const rowIndex = row && row.rowIndex;\n\n if (row?.cells == undefined || rowIndex == undefined) {\n return;\n }\n\n // Insert row or column\n formatTableWithContentModel(\n this.editor,\n 'editTablePlugin',\n tableModel => {\n this.isHorizontal\n ? insertTableRow(tableModel, 'insertBelow')\n : insertTableColumn(tableModel, 'insertRight');\n }, // Select cell to make insertion\n {\n type: 'table',\n firstColumn: columnIndex,\n firstRow: rowIndex,\n lastColumn: columnIndex,\n lastRow: rowIndex,\n table: this.table,\n }\n );\n\n this.onInsert();\n };\n}\n\nfunction getInsertElementData(\n isHorizontal: boolean,\n isDark: boolean,\n isRTL: boolean,\n backgroundColor: string\n): CreateElementData {\n const inserterColor = isDark ? INSERTER_COLOR_DARK_MODE : INSERTER_COLOR;\n const outerDivStyle = `position: fixed; width: ${INSERTER_SIDE_LENGTH}px; height: ${INSERTER_SIDE_LENGTH}px; font-size: 16px; color: black; line-height: 8px; vertical-align: middle; text-align: center; cursor: pointer; border: solid ${INSERTER_BORDER_SIZE}px ${inserterColor}; border-radius: 50%; background-color: ${backgroundColor}`;\n const leftOrRight = isRTL ? 'right' : 'left';\n const childBaseStyles = `position: absolute; box-sizing: border-box; background-color: ${backgroundColor};`;\n const childInfo: CreateElementData = {\n tag: 'div',\n style:\n childBaseStyles +\n (isHorizontal\n ? `${leftOrRight}: 12px; top: 5px; height: 3px; border-top: 1px solid ${inserterColor}; border-bottom: 1px solid ${inserterColor}; border-right: 1px solid ${inserterColor}; border-left: 0px;`\n : `left: 5px; top: 12px; width: 3px; border-left: 1px solid ${inserterColor}; border-right: 1px solid ${inserterColor}; border-bottom: 1px solid ${inserterColor}; border-top: 0px;`),\n };\n\n return {\n tag: 'div',\n style: outerDivStyle,\n children: [childInfo, '+'],\n };\n}\n"]}
@@ -1,8 +1,8 @@
1
1
  import type { IEditor } from 'roosterjs-content-model-types';
2
- import type TableEditorFeature from './TableEditorFeature';
2
+ import type { TableEditFeature } from './TableEditFeature';
3
3
  /**
4
4
  * @internal
5
5
  * Contains the function to select whole table
6
6
  * Moving behavior not implemented yet
7
7
  */
8
- export default function createTableMover(table: HTMLTableElement, editor: IEditor, isRTL: boolean, onFinishDragging: (table: HTMLTableElement) => void, getOnMouseOut: (feature: HTMLElement) => (ev: MouseEvent) => void, contentDiv?: EventTarget | null, anchorContainer?: HTMLElement): TableEditorFeature | null;
8
+ export declare function createTableMover(table: HTMLTableElement, editor: IEditor, isRTL: boolean, onFinishDragging: (table: HTMLTableElement) => void, getOnMouseOut: (feature: HTMLElement) => (ev: MouseEvent) => void, contentDiv?: EventTarget | null, anchorContainer?: HTMLElement): TableEditFeature | null;