roosterjs-content-model-plugins 9.4.1 → 9.5.0

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 (536) hide show
  1. package/README.md +10 -10
  2. package/lib/autoFormat/hyphen/transformHyphen.d.ts +2 -2
  3. package/lib/autoFormat/hyphen/transformHyphen.js.map +1 -1
  4. package/lib/autoFormat/link/createLinkAfterSpace.d.ts +2 -2
  5. package/lib/autoFormat/link/createLinkAfterSpace.js.map +1 -1
  6. package/lib/autoFormat/list/keyboardListTrigger.d.ts +2 -2
  7. package/lib/autoFormat/list/keyboardListTrigger.js.map +1 -1
  8. package/lib/autoFormat/numbers/transformFraction.d.ts +2 -2
  9. package/lib/autoFormat/numbers/transformFraction.js.map +1 -1
  10. package/lib/autoFormat/numbers/transformOrdinals.d.ts +2 -2
  11. package/lib/autoFormat/numbers/transformOrdinals.js.map +1 -1
  12. package/lib/customReplace/CustomReplacePlugin.d.ts +2 -2
  13. package/lib/customReplace/CustomReplacePlugin.js.map +1 -1
  14. package/lib/edit/EditPlugin.d.ts +10 -0
  15. package/lib/edit/EditPlugin.js +39 -0
  16. package/lib/edit/EditPlugin.js.map +1 -1
  17. package/lib/edit/deleteSteps/deleteAllSegmentBefore.js +2 -1
  18. package/lib/edit/deleteSteps/deleteAllSegmentBefore.js.map +1 -1
  19. package/lib/edit/deleteSteps/deleteCollapsedSelection.js +5 -4
  20. package/lib/edit/deleteSteps/deleteCollapsedSelection.js.map +1 -1
  21. package/lib/edit/deleteSteps/deleteEmptyQuote.js +33 -29
  22. package/lib/edit/deleteSteps/deleteEmptyQuote.js.map +1 -1
  23. package/lib/edit/deleteSteps/deleteWordSelection.js +1 -1
  24. package/lib/edit/deleteSteps/deleteWordSelection.js.map +1 -1
  25. package/lib/edit/handleKeyboardEventCommon.d.ts +2 -2
  26. package/lib/edit/handleKeyboardEventCommon.js.map +1 -1
  27. package/lib/edit/inputSteps/handleEnterOnList.js +32 -56
  28. package/lib/edit/inputSteps/handleEnterOnList.js.map +1 -1
  29. package/lib/edit/inputSteps/handleEnterOnParagraph.d.ts +5 -0
  30. package/lib/edit/inputSteps/handleEnterOnParagraph.js +22 -0
  31. package/lib/edit/inputSteps/handleEnterOnParagraph.js.map +1 -0
  32. package/lib/edit/keyboardDelete.js +1 -1
  33. package/lib/edit/keyboardDelete.js.map +1 -1
  34. package/lib/edit/keyboardEnter.d.ts +5 -0
  35. package/lib/edit/keyboardEnter.js +44 -0
  36. package/lib/edit/keyboardEnter.js.map +1 -0
  37. package/lib/edit/keyboardInput.js +4 -18
  38. package/lib/edit/keyboardInput.js.map +1 -1
  39. package/lib/edit/keyboardTab.js.map +1 -1
  40. package/lib/edit/tabUtils/handleTabOnList.d.ts +2 -2
  41. package/lib/edit/tabUtils/handleTabOnList.js.map +1 -1
  42. package/lib/edit/tabUtils/handleTabOnParagraph.d.ts +2 -2
  43. package/lib/edit/tabUtils/handleTabOnParagraph.js +9 -7
  44. package/lib/edit/tabUtils/handleTabOnParagraph.js.map +1 -1
  45. package/lib/edit/tabUtils/handleTabOnTable.d.ts +2 -2
  46. package/lib/edit/tabUtils/handleTabOnTable.js.map +1 -1
  47. package/lib/edit/tabUtils/handleTabOnTableCell.d.ts +2 -2
  48. package/lib/edit/tabUtils/handleTabOnTableCell.js +5 -4
  49. package/lib/edit/tabUtils/handleTabOnTableCell.js.map +1 -1
  50. package/lib/edit/utils/getLeafSiblingBlock.d.ts +5 -5
  51. package/lib/edit/utils/getLeafSiblingBlock.js.map +1 -1
  52. package/lib/edit/utils/splitParagraph.d.ts +9 -0
  53. package/lib/edit/utils/splitParagraph.js +29 -0
  54. package/lib/edit/utils/splitParagraph.js.map +1 -0
  55. package/lib/imageEdit/Cropper/createImageCropper.d.ts +10 -0
  56. package/lib/imageEdit/Cropper/createImageCropper.js +80 -0
  57. package/lib/imageEdit/Cropper/createImageCropper.js.map +1 -0
  58. package/lib/imageEdit/Cropper/cropperContext.d.ts +8 -0
  59. package/lib/imageEdit/Cropper/cropperContext.js +73 -0
  60. package/lib/imageEdit/Cropper/cropperContext.js.map +1 -0
  61. package/lib/imageEdit/ImageEditPlugin.d.ts +66 -0
  62. package/lib/imageEdit/ImageEditPlugin.js +328 -0
  63. package/lib/imageEdit/ImageEditPlugin.js.map +1 -0
  64. package/lib/imageEdit/Resizer/createImageResizer.d.ts +12 -0
  65. package/lib/imageEdit/Resizer/createImageResizer.js +89 -0
  66. package/lib/imageEdit/Resizer/createImageResizer.js.map +1 -0
  67. package/lib/imageEdit/Resizer/resizerContext.d.ts +8 -0
  68. package/lib/imageEdit/Resizer/resizerContext.js +61 -0
  69. package/lib/imageEdit/Resizer/resizerContext.js.map +1 -0
  70. package/lib/imageEdit/Resizer/updateSideHandlesVisibility.d.ts +4 -0
  71. package/lib/imageEdit/Resizer/updateSideHandlesVisibility.js +17 -0
  72. package/lib/imageEdit/Resizer/updateSideHandlesVisibility.js.map +1 -0
  73. package/lib/imageEdit/Rotator/createImageRotator.d.ts +6 -0
  74. package/lib/imageEdit/Rotator/createImageRotator.js +76 -0
  75. package/lib/imageEdit/Rotator/createImageRotator.js.map +1 -0
  76. package/lib/imageEdit/Rotator/rotatorContext.d.ts +8 -0
  77. package/lib/imageEdit/Rotator/rotatorContext.js +36 -0
  78. package/lib/imageEdit/Rotator/rotatorContext.js.map +1 -0
  79. package/lib/imageEdit/Rotator/updateRotateHandle.d.ts +7 -0
  80. package/lib/imageEdit/Rotator/updateRotateHandle.js +55 -0
  81. package/lib/imageEdit/Rotator/updateRotateHandle.js.map +1 -0
  82. package/lib/imageEdit/constants/constants.d.ts +73 -0
  83. package/lib/imageEdit/constants/constants.js +81 -0
  84. package/lib/imageEdit/constants/constants.js.map +1 -0
  85. package/lib/imageEdit/types/DragAndDropContext.d.ts +39 -0
  86. package/lib/imageEdit/types/DragAndDropContext.js +3 -0
  87. package/lib/imageEdit/types/DragAndDropContext.js.map +1 -0
  88. package/lib/imageEdit/types/GeneratedImageSize.d.ts +33 -0
  89. package/lib/imageEdit/types/GeneratedImageSize.js +3 -0
  90. package/lib/imageEdit/types/GeneratedImageSize.js.map +1 -0
  91. package/lib/imageEdit/types/ImageEditElementClass.d.ts +30 -0
  92. package/lib/imageEdit/types/ImageEditElementClass.js +35 -0
  93. package/lib/imageEdit/types/ImageEditElementClass.js.map +1 -0
  94. package/lib/imageEdit/types/ImageEditOptions.d.ts +55 -0
  95. package/lib/imageEdit/types/ImageEditOptions.js +3 -0
  96. package/lib/imageEdit/types/ImageEditOptions.js.map +1 -0
  97. package/lib/imageEdit/types/ImageHtmlOptions.d.ts +18 -0
  98. package/lib/imageEdit/types/ImageHtmlOptions.js +3 -0
  99. package/lib/imageEdit/types/ImageHtmlOptions.js.map +1 -0
  100. package/lib/imageEdit/utils/applyChange.d.ts +12 -0
  101. package/lib/imageEdit/utils/applyChange.js +77 -0
  102. package/lib/imageEdit/utils/applyChange.js.map +1 -0
  103. package/lib/imageEdit/utils/canRegenerateImage.d.ts +8 -0
  104. package/lib/imageEdit/utils/canRegenerateImage.js +32 -0
  105. package/lib/imageEdit/utils/canRegenerateImage.js.map +1 -0
  106. package/lib/imageEdit/utils/checkEditInfoState.d.ts +41 -0
  107. package/lib/imageEdit/utils/checkEditInfoState.js +54 -0
  108. package/lib/imageEdit/utils/checkEditInfoState.js.map +1 -0
  109. package/lib/imageEdit/utils/createImageWrapper.d.ts +18 -0
  110. package/lib/imageEdit/utils/createImageWrapper.js +87 -0
  111. package/lib/imageEdit/utils/createImageWrapper.js.map +1 -0
  112. package/lib/imageEdit/utils/doubleCheckResize.d.ts +12 -0
  113. package/lib/imageEdit/utils/doubleCheckResize.js +36 -0
  114. package/lib/imageEdit/utils/doubleCheckResize.js.map +1 -0
  115. package/lib/imageEdit/utils/generateDataURL.d.ts +13 -0
  116. package/lib/imageEdit/utils/generateDataURL.js +50 -0
  117. package/lib/imageEdit/utils/generateDataURL.js.map +1 -0
  118. package/lib/imageEdit/utils/generateImageSize.d.ts +15 -0
  119. package/lib/imageEdit/utils/generateImageSize.js +46 -0
  120. package/lib/imageEdit/utils/generateImageSize.js.map +1 -0
  121. package/lib/imageEdit/utils/getDropAndDragHelpers.d.ts +10 -0
  122. package/lib/imageEdit/utils/getDropAndDragHelpers.js +24 -0
  123. package/lib/imageEdit/utils/getDropAndDragHelpers.js.map +1 -0
  124. package/lib/imageEdit/utils/getHTMLImageOptions.d.ts +7 -0
  125. package/lib/imageEdit/utils/getHTMLImageOptions.js +22 -0
  126. package/lib/imageEdit/utils/getHTMLImageOptions.js.map +1 -0
  127. package/lib/imageEdit/utils/getSelectedContentModelImage.d.ts +5 -0
  128. package/lib/imageEdit/utils/getSelectedContentModelImage.js +16 -0
  129. package/lib/imageEdit/utils/getSelectedContentModelImage.js.map +1 -0
  130. package/lib/imageEdit/utils/imageEditUtils.d.ts +39 -0
  131. package/lib/imageEdit/utils/imageEditUtils.js +102 -0
  132. package/lib/imageEdit/utils/imageEditUtils.js.map +1 -0
  133. package/lib/imageEdit/utils/updateHandleCursor.d.ts +7 -0
  134. package/lib/imageEdit/utils/updateHandleCursor.js +34 -0
  135. package/lib/imageEdit/utils/updateHandleCursor.js.map +1 -0
  136. package/lib/imageEdit/utils/updateImageEditInfo.d.ts +10 -0
  137. package/lib/imageEdit/utils/updateImageEditInfo.js +49 -0
  138. package/lib/imageEdit/utils/updateImageEditInfo.js.map +1 -0
  139. package/lib/imageEdit/utils/updateWrapper.d.ts +6 -0
  140. package/lib/imageEdit/utils/updateWrapper.js +87 -0
  141. package/lib/imageEdit/utils/updateWrapper.js.map +1 -0
  142. package/lib/index.d.ts +2 -1
  143. package/lib/index.js +3 -3
  144. package/lib/index.js.map +1 -1
  145. package/lib/paste/DefaultSanitizers.d.ts +10 -0
  146. package/lib/paste/DefaultSanitizers.js +25 -0
  147. package/lib/paste/DefaultSanitizers.js.map +1 -0
  148. package/lib/paste/PastePlugin.d.ts +4 -2
  149. package/lib/paste/PastePlugin.js +26 -1
  150. package/lib/paste/PastePlugin.js.map +1 -1
  151. package/lib/paste/WordDesktop/processPastedContentFromWordDesktop.js +13 -0
  152. package/lib/paste/WordDesktop/processPastedContentFromWordDesktop.js.map +1 -1
  153. package/lib/paste/utils/chainSanitizerCallback.d.ts +9 -0
  154. package/lib/paste/utils/chainSanitizerCallback.js +36 -0
  155. package/lib/paste/utils/chainSanitizerCallback.js.map +1 -0
  156. package/lib/picker/getQueryString.d.ts +2 -2
  157. package/lib/picker/getQueryString.js.map +1 -1
  158. package/lib/pluginUtils/splitTextSegment.d.ts +2 -2
  159. package/lib/pluginUtils/splitTextSegment.js.map +1 -1
  160. package/lib/tableEdit/editors/TableEditor.d.ts +3 -0
  161. package/lib/tableEdit/editors/TableEditor.js +4 -0
  162. package/lib/tableEdit/editors/TableEditor.js.map +1 -1
  163. package/lib/tableEdit/editors/features/CellResizer.d.ts +39 -1
  164. package/lib/tableEdit/editors/features/CellResizer.js +27 -11
  165. package/lib/tableEdit/editors/features/CellResizer.js.map +1 -1
  166. package/lib/tableEdit/editors/features/TableInserter.d.ts +17 -0
  167. package/lib/tableEdit/editors/features/TableInserter.js +6 -1
  168. package/lib/tableEdit/editors/features/TableInserter.js.map +1 -1
  169. package/lib/tableEdit/editors/features/TableMover.d.ts +2 -2
  170. package/lib/tableEdit/editors/features/TableMover.js +4 -4
  171. package/lib/tableEdit/editors/features/TableMover.js.map +1 -1
  172. package/lib/tableEdit/editors/features/TableResizer.d.ts +40 -1
  173. package/lib/tableEdit/editors/features/TableResizer.js +25 -7
  174. package/lib/tableEdit/editors/features/TableResizer.js.map +1 -1
  175. package/lib/tableEdit/editors/utils/getTableFromContentModel.d.ts +2 -2
  176. package/lib/tableEdit/editors/utils/getTableFromContentModel.js.map +1 -1
  177. package/lib-amd/autoFormat/hyphen/transformHyphen.d.ts +2 -2
  178. package/lib-amd/autoFormat/hyphen/transformHyphen.js.map +1 -1
  179. package/lib-amd/autoFormat/link/createLinkAfterSpace.d.ts +2 -2
  180. package/lib-amd/autoFormat/link/createLinkAfterSpace.js.map +1 -1
  181. package/lib-amd/autoFormat/list/keyboardListTrigger.d.ts +2 -2
  182. package/lib-amd/autoFormat/list/keyboardListTrigger.js.map +1 -1
  183. package/lib-amd/autoFormat/numbers/transformFraction.d.ts +2 -2
  184. package/lib-amd/autoFormat/numbers/transformFraction.js.map +1 -1
  185. package/lib-amd/autoFormat/numbers/transformOrdinals.d.ts +2 -2
  186. package/lib-amd/autoFormat/numbers/transformOrdinals.js.map +1 -1
  187. package/lib-amd/customReplace/CustomReplacePlugin.d.ts +2 -2
  188. package/lib-amd/customReplace/CustomReplacePlugin.js.map +1 -1
  189. package/lib-amd/edit/EditPlugin.d.ts +10 -0
  190. package/lib-amd/edit/EditPlugin.js +38 -1
  191. package/lib-amd/edit/EditPlugin.js.map +1 -1
  192. package/lib-amd/edit/deleteSteps/deleteAllSegmentBefore.js +2 -1
  193. package/lib-amd/edit/deleteSteps/deleteAllSegmentBefore.js.map +1 -1
  194. package/lib-amd/edit/deleteSteps/deleteCollapsedSelection.js +5 -4
  195. package/lib-amd/edit/deleteSteps/deleteCollapsedSelection.js.map +1 -1
  196. package/lib-amd/edit/deleteSteps/deleteEmptyQuote.js +33 -30
  197. package/lib-amd/edit/deleteSteps/deleteEmptyQuote.js.map +1 -1
  198. package/lib-amd/edit/deleteSteps/deleteWordSelection.js +1 -1
  199. package/lib-amd/edit/deleteSteps/deleteWordSelection.js.map +1 -1
  200. package/lib-amd/edit/handleKeyboardEventCommon.d.ts +2 -2
  201. package/lib-amd/edit/handleKeyboardEventCommon.js.map +1 -1
  202. package/lib-amd/edit/inputSteps/handleEnterOnList.js +32 -57
  203. package/lib-amd/edit/inputSteps/handleEnterOnList.js.map +1 -1
  204. package/lib-amd/edit/inputSteps/handleEnterOnParagraph.d.ts +5 -0
  205. package/lib-amd/edit/inputSteps/handleEnterOnParagraph.js +22 -0
  206. package/lib-amd/edit/inputSteps/handleEnterOnParagraph.js.map +1 -0
  207. package/lib-amd/edit/keyboardDelete.js +1 -1
  208. package/lib-amd/edit/keyboardDelete.js.map +1 -1
  209. package/lib-amd/edit/keyboardEnter.d.ts +5 -0
  210. package/lib-amd/edit/keyboardEnter.js +42 -0
  211. package/lib-amd/edit/keyboardEnter.js.map +1 -0
  212. package/lib-amd/edit/keyboardInput.js +5 -17
  213. package/lib-amd/edit/keyboardInput.js.map +1 -1
  214. package/lib-amd/edit/keyboardTab.js.map +1 -1
  215. package/lib-amd/edit/tabUtils/handleTabOnList.d.ts +2 -2
  216. package/lib-amd/edit/tabUtils/handleTabOnList.js.map +1 -1
  217. package/lib-amd/edit/tabUtils/handleTabOnParagraph.d.ts +2 -2
  218. package/lib-amd/edit/tabUtils/handleTabOnParagraph.js +9 -7
  219. package/lib-amd/edit/tabUtils/handleTabOnParagraph.js.map +1 -1
  220. package/lib-amd/edit/tabUtils/handleTabOnTable.d.ts +2 -2
  221. package/lib-amd/edit/tabUtils/handleTabOnTable.js.map +1 -1
  222. package/lib-amd/edit/tabUtils/handleTabOnTableCell.d.ts +2 -2
  223. package/lib-amd/edit/tabUtils/handleTabOnTableCell.js +5 -4
  224. package/lib-amd/edit/tabUtils/handleTabOnTableCell.js.map +1 -1
  225. package/lib-amd/edit/utils/getLeafSiblingBlock.d.ts +5 -5
  226. package/lib-amd/edit/utils/getLeafSiblingBlock.js.map +1 -1
  227. package/lib-amd/edit/utils/splitParagraph.d.ts +9 -0
  228. package/lib-amd/edit/utils/splitParagraph.js +29 -0
  229. package/lib-amd/edit/utils/splitParagraph.js.map +1 -0
  230. package/lib-amd/imageEdit/Cropper/createImageCropper.d.ts +10 -0
  231. package/lib-amd/imageEdit/Cropper/createImageCropper.js +78 -0
  232. package/lib-amd/imageEdit/Cropper/createImageCropper.js.map +1 -0
  233. package/lib-amd/imageEdit/Cropper/cropperContext.d.ts +8 -0
  234. package/lib-amd/imageEdit/Cropper/cropperContext.js +73 -0
  235. package/lib-amd/imageEdit/Cropper/cropperContext.js.map +1 -0
  236. package/lib-amd/imageEdit/ImageEditPlugin.d.ts +66 -0
  237. package/lib-amd/imageEdit/ImageEditPlugin.js +315 -0
  238. package/lib-amd/imageEdit/ImageEditPlugin.js.map +1 -0
  239. package/lib-amd/imageEdit/Resizer/createImageResizer.d.ts +12 -0
  240. package/lib-amd/imageEdit/Resizer/createImageResizer.js +86 -0
  241. package/lib-amd/imageEdit/Resizer/createImageResizer.js.map +1 -0
  242. package/lib-amd/imageEdit/Resizer/resizerContext.d.ts +8 -0
  243. package/lib-amd/imageEdit/Resizer/resizerContext.js +61 -0
  244. package/lib-amd/imageEdit/Resizer/resizerContext.js.map +1 -0
  245. package/lib-amd/imageEdit/Resizer/updateSideHandlesVisibility.d.ts +4 -0
  246. package/lib-amd/imageEdit/Resizer/updateSideHandlesVisibility.js +19 -0
  247. package/lib-amd/imageEdit/Resizer/updateSideHandlesVisibility.js.map +1 -0
  248. package/lib-amd/imageEdit/Rotator/createImageRotator.d.ts +6 -0
  249. package/lib-amd/imageEdit/Rotator/createImageRotator.js +74 -0
  250. package/lib-amd/imageEdit/Rotator/createImageRotator.js.map +1 -0
  251. package/lib-amd/imageEdit/Rotator/rotatorContext.d.ts +8 -0
  252. package/lib-amd/imageEdit/Rotator/rotatorContext.js +36 -0
  253. package/lib-amd/imageEdit/Rotator/rotatorContext.js.map +1 -0
  254. package/lib-amd/imageEdit/Rotator/updateRotateHandle.d.ts +7 -0
  255. package/lib-amd/imageEdit/Rotator/updateRotateHandle.js +56 -0
  256. package/lib-amd/imageEdit/Rotator/updateRotateHandle.js.map +1 -0
  257. package/lib-amd/imageEdit/constants/constants.d.ts +73 -0
  258. package/lib-amd/imageEdit/constants/constants.js +83 -0
  259. package/lib-amd/imageEdit/constants/constants.js.map +1 -0
  260. package/lib-amd/imageEdit/types/DragAndDropContext.d.ts +39 -0
  261. package/lib-amd/imageEdit/types/DragAndDropContext.js +5 -0
  262. package/lib-amd/imageEdit/types/DragAndDropContext.js.map +1 -0
  263. package/lib-amd/imageEdit/types/GeneratedImageSize.d.ts +33 -0
  264. package/lib-amd/imageEdit/types/GeneratedImageSize.js +5 -0
  265. package/lib-amd/imageEdit/types/GeneratedImageSize.js.map +1 -0
  266. package/lib-amd/imageEdit/types/ImageEditElementClass.d.ts +30 -0
  267. package/lib-amd/imageEdit/types/ImageEditElementClass.js +37 -0
  268. package/lib-amd/imageEdit/types/ImageEditElementClass.js.map +1 -0
  269. package/lib-amd/imageEdit/types/ImageEditOptions.d.ts +55 -0
  270. package/lib-amd/imageEdit/types/ImageEditOptions.js +5 -0
  271. package/lib-amd/imageEdit/types/ImageEditOptions.js.map +1 -0
  272. package/lib-amd/imageEdit/types/ImageHtmlOptions.d.ts +18 -0
  273. package/lib-amd/imageEdit/types/ImageHtmlOptions.js +5 -0
  274. package/lib-amd/imageEdit/types/ImageHtmlOptions.js.map +1 -0
  275. package/lib-amd/imageEdit/utils/applyChange.d.ts +12 -0
  276. package/lib-amd/imageEdit/utils/applyChange.js +75 -0
  277. package/lib-amd/imageEdit/utils/applyChange.js.map +1 -0
  278. package/lib-amd/imageEdit/utils/canRegenerateImage.d.ts +8 -0
  279. package/lib-amd/imageEdit/utils/canRegenerateImage.js +34 -0
  280. package/lib-amd/imageEdit/utils/canRegenerateImage.js.map +1 -0
  281. package/lib-amd/imageEdit/utils/checkEditInfoState.d.ts +41 -0
  282. package/lib-amd/imageEdit/utils/checkEditInfoState.js +55 -0
  283. package/lib-amd/imageEdit/utils/checkEditInfoState.js.map +1 -0
  284. package/lib-amd/imageEdit/utils/createImageWrapper.d.ts +18 -0
  285. package/lib-amd/imageEdit/utils/createImageWrapper.js +86 -0
  286. package/lib-amd/imageEdit/utils/createImageWrapper.js.map +1 -0
  287. package/lib-amd/imageEdit/utils/doubleCheckResize.d.ts +12 -0
  288. package/lib-amd/imageEdit/utils/doubleCheckResize.js +38 -0
  289. package/lib-amd/imageEdit/utils/doubleCheckResize.js.map +1 -0
  290. package/lib-amd/imageEdit/utils/generateDataURL.d.ts +13 -0
  291. package/lib-amd/imageEdit/utils/generateDataURL.js +51 -0
  292. package/lib-amd/imageEdit/utils/generateDataURL.js.map +1 -0
  293. package/lib-amd/imageEdit/utils/generateImageSize.d.ts +15 -0
  294. package/lib-amd/imageEdit/utils/generateImageSize.js +48 -0
  295. package/lib-amd/imageEdit/utils/generateImageSize.js.map +1 -0
  296. package/lib-amd/imageEdit/utils/getDropAndDragHelpers.d.ts +10 -0
  297. package/lib-amd/imageEdit/utils/getDropAndDragHelpers.js +24 -0
  298. package/lib-amd/imageEdit/utils/getDropAndDragHelpers.js.map +1 -0
  299. package/lib-amd/imageEdit/utils/getHTMLImageOptions.d.ts +7 -0
  300. package/lib-amd/imageEdit/utils/getHTMLImageOptions.js +23 -0
  301. package/lib-amd/imageEdit/utils/getHTMLImageOptions.js.map +1 -0
  302. package/lib-amd/imageEdit/utils/getSelectedContentModelImage.d.ts +5 -0
  303. package/lib-amd/imageEdit/utils/getSelectedContentModelImage.js +17 -0
  304. package/lib-amd/imageEdit/utils/getSelectedContentModelImage.js.map +1 -0
  305. package/lib-amd/imageEdit/utils/imageEditUtils.d.ts +39 -0
  306. package/lib-amd/imageEdit/utils/imageEditUtils.js +103 -0
  307. package/lib-amd/imageEdit/utils/imageEditUtils.js.map +1 -0
  308. package/lib-amd/imageEdit/utils/updateHandleCursor.d.ts +7 -0
  309. package/lib-amd/imageEdit/utils/updateHandleCursor.js +36 -0
  310. package/lib-amd/imageEdit/utils/updateHandleCursor.js.map +1 -0
  311. package/lib-amd/imageEdit/utils/updateImageEditInfo.d.ts +10 -0
  312. package/lib-amd/imageEdit/utils/updateImageEditInfo.js +48 -0
  313. package/lib-amd/imageEdit/utils/updateImageEditInfo.js.map +1 -0
  314. package/lib-amd/imageEdit/utils/updateWrapper.d.ts +6 -0
  315. package/lib-amd/imageEdit/utils/updateWrapper.js +82 -0
  316. package/lib-amd/imageEdit/utils/updateWrapper.js.map +1 -0
  317. package/lib-amd/index.d.ts +2 -1
  318. package/lib-amd/index.js +3 -3
  319. package/lib-amd/index.js.map +1 -1
  320. package/lib-amd/paste/DefaultSanitizers.d.ts +10 -0
  321. package/lib-amd/paste/DefaultSanitizers.js +27 -0
  322. package/lib-amd/paste/DefaultSanitizers.js.map +1 -0
  323. package/lib-amd/paste/PastePlugin.d.ts +4 -2
  324. package/lib-amd/paste/PastePlugin.js +24 -2
  325. package/lib-amd/paste/PastePlugin.js.map +1 -1
  326. package/lib-amd/paste/WordDesktop/processPastedContentFromWordDesktop.js +13 -0
  327. package/lib-amd/paste/WordDesktop/processPastedContentFromWordDesktop.js.map +1 -1
  328. package/lib-amd/paste/utils/chainSanitizerCallback.d.ts +9 -0
  329. package/lib-amd/paste/utils/chainSanitizerCallback.js +38 -0
  330. package/lib-amd/paste/utils/chainSanitizerCallback.js.map +1 -0
  331. package/lib-amd/picker/getQueryString.d.ts +2 -2
  332. package/lib-amd/picker/getQueryString.js.map +1 -1
  333. package/lib-amd/pluginUtils/splitTextSegment.d.ts +2 -2
  334. package/lib-amd/pluginUtils/splitTextSegment.js.map +1 -1
  335. package/lib-amd/tableEdit/editors/TableEditor.d.ts +3 -0
  336. package/lib-amd/tableEdit/editors/TableEditor.js +4 -0
  337. package/lib-amd/tableEdit/editors/TableEditor.js.map +1 -1
  338. package/lib-amd/tableEdit/editors/features/CellResizer.d.ts +39 -1
  339. package/lib-amd/tableEdit/editors/features/CellResizer.js +27 -11
  340. package/lib-amd/tableEdit/editors/features/CellResizer.js.map +1 -1
  341. package/lib-amd/tableEdit/editors/features/TableInserter.d.ts +17 -0
  342. package/lib-amd/tableEdit/editors/features/TableInserter.js +6 -1
  343. package/lib-amd/tableEdit/editors/features/TableInserter.js.map +1 -1
  344. package/lib-amd/tableEdit/editors/features/TableMover.d.ts +2 -2
  345. package/lib-amd/tableEdit/editors/features/TableMover.js +4 -4
  346. package/lib-amd/tableEdit/editors/features/TableMover.js.map +1 -1
  347. package/lib-amd/tableEdit/editors/features/TableResizer.d.ts +40 -1
  348. package/lib-amd/tableEdit/editors/features/TableResizer.js +25 -7
  349. package/lib-amd/tableEdit/editors/features/TableResizer.js.map +1 -1
  350. package/lib-amd/tableEdit/editors/utils/getTableFromContentModel.d.ts +2 -2
  351. package/lib-amd/tableEdit/editors/utils/getTableFromContentModel.js.map +1 -1
  352. package/lib-mjs/autoFormat/hyphen/transformHyphen.d.ts +2 -2
  353. package/lib-mjs/autoFormat/hyphen/transformHyphen.js.map +1 -1
  354. package/lib-mjs/autoFormat/link/createLinkAfterSpace.d.ts +2 -2
  355. package/lib-mjs/autoFormat/link/createLinkAfterSpace.js.map +1 -1
  356. package/lib-mjs/autoFormat/list/keyboardListTrigger.d.ts +2 -2
  357. package/lib-mjs/autoFormat/list/keyboardListTrigger.js.map +1 -1
  358. package/lib-mjs/autoFormat/numbers/transformFraction.d.ts +2 -2
  359. package/lib-mjs/autoFormat/numbers/transformFraction.js.map +1 -1
  360. package/lib-mjs/autoFormat/numbers/transformOrdinals.d.ts +2 -2
  361. package/lib-mjs/autoFormat/numbers/transformOrdinals.js.map +1 -1
  362. package/lib-mjs/customReplace/CustomReplacePlugin.d.ts +2 -2
  363. package/lib-mjs/customReplace/CustomReplacePlugin.js.map +1 -1
  364. package/lib-mjs/edit/EditPlugin.d.ts +10 -0
  365. package/lib-mjs/edit/EditPlugin.js +39 -0
  366. package/lib-mjs/edit/EditPlugin.js.map +1 -1
  367. package/lib-mjs/edit/deleteSteps/deleteAllSegmentBefore.js +3 -2
  368. package/lib-mjs/edit/deleteSteps/deleteAllSegmentBefore.js.map +1 -1
  369. package/lib-mjs/edit/deleteSteps/deleteCollapsedSelection.js +5 -4
  370. package/lib-mjs/edit/deleteSteps/deleteCollapsedSelection.js.map +1 -1
  371. package/lib-mjs/edit/deleteSteps/deleteEmptyQuote.js +34 -30
  372. package/lib-mjs/edit/deleteSteps/deleteEmptyQuote.js.map +1 -1
  373. package/lib-mjs/edit/deleteSteps/deleteWordSelection.js +2 -2
  374. package/lib-mjs/edit/deleteSteps/deleteWordSelection.js.map +1 -1
  375. package/lib-mjs/edit/handleKeyboardEventCommon.d.ts +2 -2
  376. package/lib-mjs/edit/handleKeyboardEventCommon.js.map +1 -1
  377. package/lib-mjs/edit/inputSteps/handleEnterOnList.js +33 -57
  378. package/lib-mjs/edit/inputSteps/handleEnterOnList.js.map +1 -1
  379. package/lib-mjs/edit/inputSteps/handleEnterOnParagraph.d.ts +5 -0
  380. package/lib-mjs/edit/inputSteps/handleEnterOnParagraph.js +18 -0
  381. package/lib-mjs/edit/inputSteps/handleEnterOnParagraph.js.map +1 -0
  382. package/lib-mjs/edit/keyboardDelete.js +1 -1
  383. package/lib-mjs/edit/keyboardDelete.js.map +1 -1
  384. package/lib-mjs/edit/keyboardEnter.d.ts +5 -0
  385. package/lib-mjs/edit/keyboardEnter.js +40 -0
  386. package/lib-mjs/edit/keyboardEnter.js.map +1 -0
  387. package/lib-mjs/edit/keyboardInput.js +4 -18
  388. package/lib-mjs/edit/keyboardInput.js.map +1 -1
  389. package/lib-mjs/edit/keyboardTab.js.map +1 -1
  390. package/lib-mjs/edit/tabUtils/handleTabOnList.d.ts +2 -2
  391. package/lib-mjs/edit/tabUtils/handleTabOnList.js.map +1 -1
  392. package/lib-mjs/edit/tabUtils/handleTabOnParagraph.d.ts +2 -2
  393. package/lib-mjs/edit/tabUtils/handleTabOnParagraph.js +9 -7
  394. package/lib-mjs/edit/tabUtils/handleTabOnParagraph.js.map +1 -1
  395. package/lib-mjs/edit/tabUtils/handleTabOnTable.d.ts +2 -2
  396. package/lib-mjs/edit/tabUtils/handleTabOnTable.js.map +1 -1
  397. package/lib-mjs/edit/tabUtils/handleTabOnTableCell.d.ts +2 -2
  398. package/lib-mjs/edit/tabUtils/handleTabOnTableCell.js +6 -5
  399. package/lib-mjs/edit/tabUtils/handleTabOnTableCell.js.map +1 -1
  400. package/lib-mjs/edit/utils/getLeafSiblingBlock.d.ts +5 -5
  401. package/lib-mjs/edit/utils/getLeafSiblingBlock.js.map +1 -1
  402. package/lib-mjs/edit/utils/splitParagraph.d.ts +9 -0
  403. package/lib-mjs/edit/utils/splitParagraph.js +25 -0
  404. package/lib-mjs/edit/utils/splitParagraph.js.map +1 -0
  405. package/lib-mjs/imageEdit/Cropper/createImageCropper.d.ts +10 -0
  406. package/lib-mjs/imageEdit/Cropper/createImageCropper.js +75 -0
  407. package/lib-mjs/imageEdit/Cropper/createImageCropper.js.map +1 -0
  408. package/lib-mjs/imageEdit/Cropper/cropperContext.d.ts +8 -0
  409. package/lib-mjs/imageEdit/Cropper/cropperContext.js +70 -0
  410. package/lib-mjs/imageEdit/Cropper/cropperContext.js.map +1 -0
  411. package/lib-mjs/imageEdit/ImageEditPlugin.d.ts +66 -0
  412. package/lib-mjs/imageEdit/ImageEditPlugin.js +325 -0
  413. package/lib-mjs/imageEdit/ImageEditPlugin.js.map +1 -0
  414. package/lib-mjs/imageEdit/Resizer/createImageResizer.d.ts +12 -0
  415. package/lib-mjs/imageEdit/Resizer/createImageResizer.js +85 -0
  416. package/lib-mjs/imageEdit/Resizer/createImageResizer.js.map +1 -0
  417. package/lib-mjs/imageEdit/Resizer/resizerContext.d.ts +8 -0
  418. package/lib-mjs/imageEdit/Resizer/resizerContext.js +58 -0
  419. package/lib-mjs/imageEdit/Resizer/resizerContext.js.map +1 -0
  420. package/lib-mjs/imageEdit/Resizer/updateSideHandlesVisibility.d.ts +4 -0
  421. package/lib-mjs/imageEdit/Resizer/updateSideHandlesVisibility.js +13 -0
  422. package/lib-mjs/imageEdit/Resizer/updateSideHandlesVisibility.js.map +1 -0
  423. package/lib-mjs/imageEdit/Rotator/createImageRotator.d.ts +6 -0
  424. package/lib-mjs/imageEdit/Rotator/createImageRotator.js +72 -0
  425. package/lib-mjs/imageEdit/Rotator/createImageRotator.js.map +1 -0
  426. package/lib-mjs/imageEdit/Rotator/rotatorContext.d.ts +8 -0
  427. package/lib-mjs/imageEdit/Rotator/rotatorContext.js +33 -0
  428. package/lib-mjs/imageEdit/Rotator/rotatorContext.js.map +1 -0
  429. package/lib-mjs/imageEdit/Rotator/updateRotateHandle.d.ts +7 -0
  430. package/lib-mjs/imageEdit/Rotator/updateRotateHandle.js +51 -0
  431. package/lib-mjs/imageEdit/Rotator/updateRotateHandle.js.map +1 -0
  432. package/lib-mjs/imageEdit/constants/constants.d.ts +73 -0
  433. package/lib-mjs/imageEdit/constants/constants.js +78 -0
  434. package/lib-mjs/imageEdit/constants/constants.js.map +1 -0
  435. package/lib-mjs/imageEdit/types/DragAndDropContext.d.ts +39 -0
  436. package/lib-mjs/imageEdit/types/DragAndDropContext.js +2 -0
  437. package/lib-mjs/imageEdit/types/DragAndDropContext.js.map +1 -0
  438. package/lib-mjs/imageEdit/types/GeneratedImageSize.d.ts +33 -0
  439. package/lib-mjs/imageEdit/types/GeneratedImageSize.js +2 -0
  440. package/lib-mjs/imageEdit/types/GeneratedImageSize.js.map +1 -0
  441. package/lib-mjs/imageEdit/types/ImageEditElementClass.d.ts +30 -0
  442. package/lib-mjs/imageEdit/types/ImageEditElementClass.js +32 -0
  443. package/lib-mjs/imageEdit/types/ImageEditElementClass.js.map +1 -0
  444. package/lib-mjs/imageEdit/types/ImageEditOptions.d.ts +55 -0
  445. package/lib-mjs/imageEdit/types/ImageEditOptions.js +2 -0
  446. package/lib-mjs/imageEdit/types/ImageEditOptions.js.map +1 -0
  447. package/lib-mjs/imageEdit/types/ImageHtmlOptions.d.ts +18 -0
  448. package/lib-mjs/imageEdit/types/ImageHtmlOptions.js +2 -0
  449. package/lib-mjs/imageEdit/types/ImageHtmlOptions.js.map +1 -0
  450. package/lib-mjs/imageEdit/utils/applyChange.d.ts +12 -0
  451. package/lib-mjs/imageEdit/utils/applyChange.js +73 -0
  452. package/lib-mjs/imageEdit/utils/applyChange.js.map +1 -0
  453. package/lib-mjs/imageEdit/utils/canRegenerateImage.d.ts +8 -0
  454. package/lib-mjs/imageEdit/utils/canRegenerateImage.js +28 -0
  455. package/lib-mjs/imageEdit/utils/canRegenerateImage.js.map +1 -0
  456. package/lib-mjs/imageEdit/utils/checkEditInfoState.d.ts +41 -0
  457. package/lib-mjs/imageEdit/utils/checkEditInfoState.js +50 -0
  458. package/lib-mjs/imageEdit/utils/checkEditInfoState.js.map +1 -0
  459. package/lib-mjs/imageEdit/utils/createImageWrapper.d.ts +18 -0
  460. package/lib-mjs/imageEdit/utils/createImageWrapper.js +83 -0
  461. package/lib-mjs/imageEdit/utils/createImageWrapper.js.map +1 -0
  462. package/lib-mjs/imageEdit/utils/doubleCheckResize.d.ts +12 -0
  463. package/lib-mjs/imageEdit/utils/doubleCheckResize.js +32 -0
  464. package/lib-mjs/imageEdit/utils/doubleCheckResize.js.map +1 -0
  465. package/lib-mjs/imageEdit/utils/generateDataURL.d.ts +13 -0
  466. package/lib-mjs/imageEdit/utils/generateDataURL.js +46 -0
  467. package/lib-mjs/imageEdit/utils/generateDataURL.js.map +1 -0
  468. package/lib-mjs/imageEdit/utils/generateImageSize.d.ts +15 -0
  469. package/lib-mjs/imageEdit/utils/generateImageSize.js +42 -0
  470. package/lib-mjs/imageEdit/utils/generateImageSize.js.map +1 -0
  471. package/lib-mjs/imageEdit/utils/getDropAndDragHelpers.d.ts +10 -0
  472. package/lib-mjs/imageEdit/utils/getDropAndDragHelpers.js +20 -0
  473. package/lib-mjs/imageEdit/utils/getDropAndDragHelpers.js.map +1 -0
  474. package/lib-mjs/imageEdit/utils/getHTMLImageOptions.d.ts +7 -0
  475. package/lib-mjs/imageEdit/utils/getHTMLImageOptions.js +18 -0
  476. package/lib-mjs/imageEdit/utils/getHTMLImageOptions.js.map +1 -0
  477. package/lib-mjs/imageEdit/utils/getSelectedContentModelImage.d.ts +5 -0
  478. package/lib-mjs/imageEdit/utils/getSelectedContentModelImage.js +12 -0
  479. package/lib-mjs/imageEdit/utils/getSelectedContentModelImage.js.map +1 -0
  480. package/lib-mjs/imageEdit/utils/imageEditUtils.d.ts +39 -0
  481. package/lib-mjs/imageEdit/utils/imageEditUtils.js +91 -0
  482. package/lib-mjs/imageEdit/utils/imageEditUtils.js.map +1 -0
  483. package/lib-mjs/imageEdit/utils/updateHandleCursor.d.ts +7 -0
  484. package/lib-mjs/imageEdit/utils/updateHandleCursor.js +30 -0
  485. package/lib-mjs/imageEdit/utils/updateHandleCursor.js.map +1 -0
  486. package/lib-mjs/imageEdit/utils/updateImageEditInfo.d.ts +10 -0
  487. package/lib-mjs/imageEdit/utils/updateImageEditInfo.js +44 -0
  488. package/lib-mjs/imageEdit/utils/updateImageEditInfo.js.map +1 -0
  489. package/lib-mjs/imageEdit/utils/updateWrapper.d.ts +6 -0
  490. package/lib-mjs/imageEdit/utils/updateWrapper.js +83 -0
  491. package/lib-mjs/imageEdit/utils/updateWrapper.js.map +1 -0
  492. package/lib-mjs/index.d.ts +2 -1
  493. package/lib-mjs/index.js +1 -1
  494. package/lib-mjs/index.js.map +1 -1
  495. package/lib-mjs/paste/DefaultSanitizers.d.ts +10 -0
  496. package/lib-mjs/paste/DefaultSanitizers.js +21 -0
  497. package/lib-mjs/paste/DefaultSanitizers.js.map +1 -0
  498. package/lib-mjs/paste/PastePlugin.d.ts +4 -2
  499. package/lib-mjs/paste/PastePlugin.js +27 -2
  500. package/lib-mjs/paste/PastePlugin.js.map +1 -1
  501. package/lib-mjs/paste/WordDesktop/processPastedContentFromWordDesktop.js +13 -0
  502. package/lib-mjs/paste/WordDesktop/processPastedContentFromWordDesktop.js.map +1 -1
  503. package/lib-mjs/paste/utils/chainSanitizerCallback.d.ts +9 -0
  504. package/lib-mjs/paste/utils/chainSanitizerCallback.js +32 -0
  505. package/lib-mjs/paste/utils/chainSanitizerCallback.js.map +1 -0
  506. package/lib-mjs/picker/getQueryString.d.ts +2 -2
  507. package/lib-mjs/picker/getQueryString.js.map +1 -1
  508. package/lib-mjs/pluginUtils/splitTextSegment.d.ts +2 -2
  509. package/lib-mjs/pluginUtils/splitTextSegment.js.map +1 -1
  510. package/lib-mjs/tableEdit/editors/TableEditor.d.ts +3 -0
  511. package/lib-mjs/tableEdit/editors/TableEditor.js +4 -0
  512. package/lib-mjs/tableEdit/editors/TableEditor.js.map +1 -1
  513. package/lib-mjs/tableEdit/editors/features/CellResizer.d.ts +39 -1
  514. package/lib-mjs/tableEdit/editors/features/CellResizer.js +27 -14
  515. package/lib-mjs/tableEdit/editors/features/CellResizer.js.map +1 -1
  516. package/lib-mjs/tableEdit/editors/features/TableInserter.d.ts +17 -0
  517. package/lib-mjs/tableEdit/editors/features/TableInserter.js +5 -0
  518. package/lib-mjs/tableEdit/editors/features/TableInserter.js.map +1 -1
  519. package/lib-mjs/tableEdit/editors/features/TableMover.d.ts +2 -2
  520. package/lib-mjs/tableEdit/editors/features/TableMover.js +5 -5
  521. package/lib-mjs/tableEdit/editors/features/TableMover.js.map +1 -1
  522. package/lib-mjs/tableEdit/editors/features/TableResizer.d.ts +40 -1
  523. package/lib-mjs/tableEdit/editors/features/TableResizer.js +25 -10
  524. package/lib-mjs/tableEdit/editors/features/TableResizer.js.map +1 -1
  525. package/lib-mjs/tableEdit/editors/utils/getTableFromContentModel.d.ts +2 -2
  526. package/lib-mjs/tableEdit/editors/utils/getTableFromContentModel.js.map +1 -1
  527. package/package.json +5 -5
  528. package/lib/pluginUtils/Rect/getDOMInsertPointRect.d.ts +0 -7
  529. package/lib/pluginUtils/Rect/getDOMInsertPointRect.js +0 -57
  530. package/lib/pluginUtils/Rect/getDOMInsertPointRect.js.map +0 -1
  531. package/lib-amd/pluginUtils/Rect/getDOMInsertPointRect.d.ts +0 -7
  532. package/lib-amd/pluginUtils/Rect/getDOMInsertPointRect.js +0 -58
  533. package/lib-amd/pluginUtils/Rect/getDOMInsertPointRect.js.map +0 -1
  534. package/lib-mjs/pluginUtils/Rect/getDOMInsertPointRect.d.ts +0 -7
  535. package/lib-mjs/pluginUtils/Rect/getDOMInsertPointRect.js +0 -53
  536. package/lib-mjs/pluginUtils/Rect/getDOMInsertPointRect.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"handleTabOnTable.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-plugins/lib/edit/tabUtils/handleTabOnTable.ts"],"names":[],"mappings":";;;;IAIA;;;OAGG;IACH,SAAgB,gBAAgB,CAAC,KAA2B,EAAE,QAAuB;QACjF,IAAM,UAAU,GAAG,IAAA,mDAAqB,EAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACnD,IAAI,UAAU,IAAI,oBAAoB,CAAC,UAAU,CAAC,EAAE;YAChD,IAAA,iDAAmB,EAAC,KAAK,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;YACrE,QAAQ,CAAC,cAAc,EAAE,CAAC;YAC1B,OAAO,IAAI,CAAC;SACf;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;IARD,4CAQC;IAED,SAAS,oBAAoB,CAAC,UAA6B;;QACvD,OAAO,CACH,CAAA,MAAA,MAAA,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,0CAAE,KAAK,CAAC,CAAC,CAAC,0CAAE,UAAU;aACxC,MAAA,MAAA,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,0CAAE,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,0CAAE,UAAU,CAAA,CAC/F,CAAC;IACN,CAAC","sourcesContent":["import { getFirstSelectedTable } from 'roosterjs-content-model-dom';\nimport { setModelIndentation } from 'roosterjs-content-model-api';\nimport type { ContentModelDocument, ContentModelTable } from 'roosterjs-content-model-types';\n\n/**\n * When the whole table is selected, indent or outdent the whole table with setModelIndentation.\n * @internal\n */\nexport function handleTabOnTable(model: ContentModelDocument, rawEvent: KeyboardEvent) {\n const tableModel = getFirstSelectedTable(model)[0];\n if (tableModel && isWholeTableSelected(tableModel)) {\n setModelIndentation(model, rawEvent.shiftKey ? 'outdent' : 'indent');\n rawEvent.preventDefault();\n return true;\n }\n return false;\n}\n\nfunction isWholeTableSelected(tableModel: ContentModelTable) {\n return (\n tableModel.rows[0]?.cells[0]?.isSelected &&\n tableModel.rows[tableModel.rows.length - 1]?.cells[tableModel.widths.length - 1]?.isSelected\n );\n}\n"]}
1
+ {"version":3,"file":"handleTabOnTable.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-plugins/lib/edit/tabUtils/handleTabOnTable.ts"],"names":[],"mappings":";;;;IAOA;;;OAGG;IACH,SAAgB,gBAAgB,CAAC,KAAmC,EAAE,QAAuB;QACzF,IAAM,UAAU,GAAG,IAAA,mDAAqB,EAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACnD,IAAI,UAAU,IAAI,oBAAoB,CAAC,UAAU,CAAC,EAAE;YAChD,IAAA,iDAAmB,EAAC,KAAK,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;YACrE,QAAQ,CAAC,cAAc,EAAE,CAAC;YAC1B,OAAO,IAAI,CAAC;SACf;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;IARD,4CAQC;IAED,SAAS,oBAAoB,CAAC,UAAqC;;QAC/D,OAAO,CACH,CAAA,MAAA,MAAA,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,0CAAE,KAAK,CAAC,CAAC,CAAC,0CAAE,UAAU;aACxC,MAAA,MAAA,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,0CAAE,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,0CAAE,UAAU,CAAA,CAC/F,CAAC;IACN,CAAC","sourcesContent":["import { getFirstSelectedTable } from 'roosterjs-content-model-dom';\nimport { setModelIndentation } from 'roosterjs-content-model-api';\nimport type {\n ReadonlyContentModelDocument,\n ReadonlyContentModelTable,\n} from 'roosterjs-content-model-types';\n\n/**\n * When the whole table is selected, indent or outdent the whole table with setModelIndentation.\n * @internal\n */\nexport function handleTabOnTable(model: ReadonlyContentModelDocument, rawEvent: KeyboardEvent) {\n const tableModel = getFirstSelectedTable(model)[0];\n if (tableModel && isWholeTableSelected(tableModel)) {\n setModelIndentation(model, rawEvent.shiftKey ? 'outdent' : 'indent');\n rawEvent.preventDefault();\n return true;\n }\n return false;\n}\n\nfunction isWholeTableSelected(tableModel: ReadonlyContentModelTable) {\n return (\n tableModel.rows[0]?.cells[0]?.isSelected &&\n tableModel.rows[tableModel.rows.length - 1]?.cells[tableModel.widths.length - 1]?.isSelected\n );\n}\n"]}
@@ -1,6 +1,6 @@
1
- import type { ContentModelDocument, ContentModelTableCell } from 'roosterjs-content-model-types';
1
+ import type { ReadonlyContentModelDocument, ReadonlyContentModelTableCell } from 'roosterjs-content-model-types';
2
2
  /**
3
3
  * When the cursor is on the last cell of a table, add new row and focus first new cell.
4
4
  * @internal
5
5
  */
6
- export declare function handleTabOnTableCell(model: ContentModelDocument, cell: ContentModelTableCell, rawEvent: KeyboardEvent): boolean;
6
+ export declare function handleTabOnTableCell(model: ReadonlyContentModelDocument, cell: ReadonlyContentModelTableCell, rawEvent: KeyboardEvent): boolean;
@@ -8,11 +8,12 @@ define(["require", "exports", "roosterjs-content-model-api", "roosterjs-content-
8
8
  */
9
9
  function handleTabOnTableCell(model, cell, rawEvent) {
10
10
  var _a, _b, _c;
11
- var tableModel = (0, roosterjs_content_model_dom_1.getFirstSelectedTable)(model)[0];
11
+ var readonlyTableModel = (0, roosterjs_content_model_dom_1.getFirstSelectedTable)(model)[0];
12
12
  // Check if cursor is on last cell of the table
13
13
  if (!rawEvent.shiftKey &&
14
- tableModel &&
15
- ((_a = tableModel.rows[tableModel.rows.length - 1]) === null || _a === void 0 ? void 0 : _a.cells[tableModel.widths.length - 1]) === cell) {
14
+ readonlyTableModel &&
15
+ ((_a = readonlyTableModel.rows[readonlyTableModel.rows.length - 1]) === null || _a === void 0 ? void 0 : _a.cells[readonlyTableModel.widths.length - 1]) === cell) {
16
+ var tableModel = (0, roosterjs_content_model_dom_1.mutateBlock)(readonlyTableModel);
16
17
  (0, roosterjs_content_model_api_1.insertTableRow)(tableModel, 'insertBelow');
17
18
  // Clear Table selection
18
19
  (0, roosterjs_content_model_api_1.clearSelectedCells)(tableModel, {
@@ -26,7 +27,7 @@ define(["require", "exports", "roosterjs-content-model-api", "roosterjs-content-
26
27
  var markerParagraph = (_c = (_b = tableModel.rows[tableModel.rows.length - 1]) === null || _b === void 0 ? void 0 : _b.cells[0]) === null || _c === void 0 ? void 0 : _c.blocks[0];
27
28
  if (markerParagraph.blockType == 'Paragraph') {
28
29
  var marker = (0, roosterjs_content_model_dom_1.createSelectionMarker)(model.format);
29
- markerParagraph.segments.unshift(marker);
30
+ (0, roosterjs_content_model_dom_1.mutateBlock)(markerParagraph).segments.unshift(marker);
30
31
  (0, roosterjs_content_model_dom_1.setParagraphNotImplicit)(markerParagraph);
31
32
  (0, roosterjs_content_model_dom_1.setSelection)(tableModel.rows[tableModel.rows.length - 1].cells[0], marker);
32
33
  }
@@ -1 +1 @@
1
- {"version":3,"file":"handleTabOnTableCell.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-plugins/lib/edit/tabUtils/handleTabOnTableCell.ts"],"names":[],"mappings":";;;;IAUA;;;OAGG;IACH,SAAgB,oBAAoB,CAChC,KAA2B,EAC3B,IAA2B,EAC3B,QAAuB;;QAEvB,IAAM,UAAU,GAAG,IAAA,mDAAqB,EAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACnD,+CAA+C;QAC/C,IACI,CAAC,QAAQ,CAAC,QAAQ;YAClB,UAAU;YACV,CAAA,MAAA,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,0CAAE,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,MAAK,IAAI,EAC3F;YACE,IAAA,4CAAc,EAAC,UAAU,EAAE,aAAa,CAAC,CAAC;YAE1C,wBAAwB;YACxB,IAAA,gDAAkB,EAAC,UAAU,EAAE;gBAC3B,QAAQ,EAAE,UAAU,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC;gBACpC,WAAW,EAAE,CAAC;gBACd,OAAO,EAAE,UAAU,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC;gBACnC,UAAU,EAAE,UAAU,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;aAC3C,CAAC,CAAC;YACH,IAAA,4CAAc,EAAC,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;YAEzC,wDAAwD;YACxD,IAAM,eAAe,GAAG,MAAA,MAAA,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,0CAAE,KAAK,CAAC,CAAC,CAAC,0CAAE,MAAM,CAAC,CAAC,CAAC,CAAC;YACzF,IAAI,eAAe,CAAC,SAAS,IAAI,WAAW,EAAE;gBAC1C,IAAM,MAAM,GAAG,IAAA,mDAAqB,EAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBAEnD,eAAe,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;gBACzC,IAAA,qDAAuB,EAAC,eAAe,CAAC,CAAC;gBACzC,IAAA,0CAAY,EAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;aAC9E;YAED,QAAQ,CAAC,cAAc,EAAE,CAAC;YAC1B,OAAO,IAAI,CAAC;SACf;QAED,OAAO,KAAK,CAAC;IACjB,CAAC;IAtCD,oDAsCC","sourcesContent":["import { clearSelectedCells, insertTableRow } from 'roosterjs-content-model-api';\nimport {\n createSelectionMarker,\n getFirstSelectedTable,\n normalizeTable,\n setParagraphNotImplicit,\n setSelection,\n} from 'roosterjs-content-model-dom';\nimport type { ContentModelDocument, ContentModelTableCell } from 'roosterjs-content-model-types';\n\n/**\n * When the cursor is on the last cell of a table, add new row and focus first new cell.\n * @internal\n */\nexport function handleTabOnTableCell(\n model: ContentModelDocument,\n cell: ContentModelTableCell,\n rawEvent: KeyboardEvent\n) {\n const tableModel = getFirstSelectedTable(model)[0];\n // Check if cursor is on last cell of the table\n if (\n !rawEvent.shiftKey &&\n tableModel &&\n tableModel.rows[tableModel.rows.length - 1]?.cells[tableModel.widths.length - 1] === cell\n ) {\n insertTableRow(tableModel, 'insertBelow');\n\n // Clear Table selection\n clearSelectedCells(tableModel, {\n firstRow: tableModel.rows.length - 1,\n firstColumn: 0,\n lastRow: tableModel.rows.length - 1,\n lastColumn: tableModel.widths.length - 1,\n });\n normalizeTable(tableModel, model.format);\n\n // Add selection marker to the first cell of the new row\n const markerParagraph = tableModel.rows[tableModel.rows.length - 1]?.cells[0]?.blocks[0];\n if (markerParagraph.blockType == 'Paragraph') {\n const marker = createSelectionMarker(model.format);\n\n markerParagraph.segments.unshift(marker);\n setParagraphNotImplicit(markerParagraph);\n setSelection(tableModel.rows[tableModel.rows.length - 1].cells[0], marker);\n }\n\n rawEvent.preventDefault();\n return true;\n }\n\n return false;\n}\n"]}
1
+ {"version":3,"file":"handleTabOnTableCell.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-plugins/lib/edit/tabUtils/handleTabOnTableCell.ts"],"names":[],"mappings":";;;;IAcA;;;OAGG;IACH,SAAgB,oBAAoB,CAChC,KAAmC,EACnC,IAAmC,EACnC,QAAuB;;QAEvB,IAAM,kBAAkB,GAAG,IAAA,mDAAqB,EAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAE3D,+CAA+C;QAC/C,IACI,CAAC,QAAQ,CAAC,QAAQ;YAClB,kBAAkB;YAClB,CAAA,MAAA,kBAAkB,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,0CAAE,KAAK,CAC9D,kBAAkB,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CACvC,MAAK,IAAI,EACZ;YACE,IAAM,UAAU,GAAG,IAAA,yCAAW,EAAC,kBAAkB,CAAC,CAAC;YACnD,IAAA,4CAAc,EAAC,UAAU,EAAE,aAAa,CAAC,CAAC;YAE1C,wBAAwB;YACxB,IAAA,gDAAkB,EAAC,UAAU,EAAE;gBAC3B,QAAQ,EAAE,UAAU,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC;gBACpC,WAAW,EAAE,CAAC;gBACd,OAAO,EAAE,UAAU,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC;gBACnC,UAAU,EAAE,UAAU,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;aAC3C,CAAC,CAAC;YACH,IAAA,4CAAc,EAAC,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;YAEzC,wDAAwD;YACxD,IAAM,eAAe,GAAG,MAAA,MAAA,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,0CAAE,KAAK,CAAC,CAAC,CAAC,0CAAE,MAAM,CAAC,CAAC,CAAC,CAAC;YACzF,IAAI,eAAe,CAAC,SAAS,IAAI,WAAW,EAAE;gBAC1C,IAAM,MAAM,GAAG,IAAA,mDAAqB,EAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBAEnD,IAAA,yCAAW,EAAC,eAAe,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;gBACtD,IAAA,qDAAuB,EAAC,eAAe,CAAC,CAAC;gBACzC,IAAA,0CAAY,EAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;aAC9E;YAED,QAAQ,CAAC,cAAc,EAAE,CAAC;YAC1B,OAAO,IAAI,CAAC;SACf;QAED,OAAO,KAAK,CAAC;IACjB,CAAC;IA1CD,oDA0CC","sourcesContent":["import { clearSelectedCells, insertTableRow } from 'roosterjs-content-model-api';\nimport {\n createSelectionMarker,\n getFirstSelectedTable,\n mutateBlock,\n normalizeTable,\n setParagraphNotImplicit,\n setSelection,\n} from 'roosterjs-content-model-dom';\nimport type {\n ReadonlyContentModelDocument,\n ReadonlyContentModelTableCell,\n} from 'roosterjs-content-model-types';\n\n/**\n * When the cursor is on the last cell of a table, add new row and focus first new cell.\n * @internal\n */\nexport function handleTabOnTableCell(\n model: ReadonlyContentModelDocument,\n cell: ReadonlyContentModelTableCell,\n rawEvent: KeyboardEvent\n) {\n const readonlyTableModel = getFirstSelectedTable(model)[0];\n\n // Check if cursor is on last cell of the table\n if (\n !rawEvent.shiftKey &&\n readonlyTableModel &&\n readonlyTableModel.rows[readonlyTableModel.rows.length - 1]?.cells[\n readonlyTableModel.widths.length - 1\n ] === cell\n ) {\n const tableModel = mutateBlock(readonlyTableModel);\n insertTableRow(tableModel, 'insertBelow');\n\n // Clear Table selection\n clearSelectedCells(tableModel, {\n firstRow: tableModel.rows.length - 1,\n firstColumn: 0,\n lastRow: tableModel.rows.length - 1,\n lastColumn: tableModel.widths.length - 1,\n });\n normalizeTable(tableModel, model.format);\n\n // Add selection marker to the first cell of the new row\n const markerParagraph = tableModel.rows[tableModel.rows.length - 1]?.cells[0]?.blocks[0];\n if (markerParagraph.blockType == 'Paragraph') {\n const marker = createSelectionMarker(model.format);\n\n mutateBlock(markerParagraph).segments.unshift(marker);\n setParagraphNotImplicit(markerParagraph);\n setSelection(tableModel.rows[tableModel.rows.length - 1].cells[0], marker);\n }\n\n rawEvent.preventDefault();\n return true;\n }\n\n return false;\n}\n"]}
@@ -1,4 +1,4 @@
1
- import type { ContentModelBlock, ContentModelBlockGroup, ContentModelSegment, ReadonlyContentModelBlock, ReadonlyContentModelBlockGroup, ReadonlyContentModelSegment } from 'roosterjs-content-model-types';
1
+ import type { ReadonlyContentModelBlock, ReadonlyContentModelBlockGroup, ReadonlyContentModelSegment } from 'roosterjs-content-model-types';
2
2
  /**
3
3
  * @internal
4
4
  */
@@ -6,16 +6,16 @@ export declare type BlockAndPath = {
6
6
  /**
7
7
  * The sibling block
8
8
  */
9
- block: ContentModelBlock;
9
+ block: ReadonlyContentModelBlock;
10
10
  /**
11
11
  * Path of this sibling block
12
12
  */
13
- path: ContentModelBlockGroup[];
13
+ path: ReadonlyContentModelBlockGroup[];
14
14
  /**
15
15
  * If the input block is under a general segment, it is possible there are sibling segments under the same paragraph.
16
16
  * Use this property to return the sibling sibling under the same paragraph
17
17
  */
18
- siblingSegment?: ContentModelSegment;
18
+ siblingSegment?: ReadonlyContentModelSegment;
19
19
  };
20
20
  /**
21
21
  * @internal
@@ -38,7 +38,7 @@ export declare type ReadonlyBlockAndPath = {
38
38
  /**
39
39
  * @internal
40
40
  */
41
- export declare function getLeafSiblingBlock(path: ContentModelBlockGroup[], block: ContentModelBlock, isNext: boolean): BlockAndPath | null;
41
+ export declare function getLeafSiblingBlock(path: ReadonlyContentModelBlockGroup[], block: ReadonlyContentModelBlock, isNext: boolean): BlockAndPath | null;
42
42
  /**
43
43
  * @internal (Readonly)
44
44
  */
@@ -1 +1 @@
1
- {"version":3,"file":"getLeafSiblingBlock.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-plugins/lib/edit/utils/getLeafSiblingBlock.ts"],"names":[],"mappings":";;;;IAuEA,SAAgB,mBAAmB,CAC/B,IAAsC,EACtC,KAAgC,EAChC,MAAe;;QAEf,IAAM,OAAO,sDAAO,IAAI,SAAC,CAAC;;YAGtB,IAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YACzB,IAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAE1C,IAAI,KAAK,GAAG,CAAC,EAAE;;aAEd;YAED,IAAI,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAExD,IAAI,SAAS,EAAE;gBACX,OAAO,SAAS,CAAC,SAAS,IAAI,YAAY,EAAE;oBACxC,IAAM,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;oBAEzE,IAAI,CAAC,KAAK,EAAE;wCACD,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE;qBAC7C;yBAAM,IAAI,KAAK,CAAC,SAAS,IAAI,YAAY,EAAE;wBACxC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;wCACpB,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE;qBACzC;yBAAM;wBACH,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;wBAC3B,SAAS,GAAG,KAAK,CAAC;qBACrB;iBACJ;gCAEM,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE;aAC7C;iBAAM,IAAI,IAAA,8CAAgB,EAAC,KAAK,CAAC,EAAE;gBAChC,6FAA6F;gBAC7F,wDAAwD;gBACxD,OAAO,CAAC,KAAK,EAAE,CAAC;gBAEhB,IAAI,cAAY,GAAG,CAAC,CAAC,CAAC;gBACtB,IAAM,SAAO,GAAG,KAAK,CAAC;gBACtB,IAAM,IAAI,GAAG,MAAA,OAAO,CAAC,CAAC,CAAC,0CAAE,MAAM,CAAC,IAAI,CAChC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,SAAS,IAAI,WAAW,IAAI,CAAC,cAAY,GAAG,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAO,CAAC,CAAC,IAAI,CAAC,EAA/E,CAA+E,CAC9D,CAAC;gBAE3B,IAAI,IAAI,EAAE;oBACN,qFAAqF;oBACrF,IAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,cAAY,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBAEvE,IAAI,cAAc,EAAE;wCAET,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,cAAc,gBAAA,EAAE;qBACxD;yBAAM;wBACH,gDAAgD;wBAChD,KAAK,GAAG,IAAI,CAAC;qBAChB;iBACJ;qBAAM;;iBAGN;aACJ;iBAAM,IAAI,KAAK,CAAC,cAAc,IAAI,UAAU,IAAI,KAAK,CAAC,cAAc,IAAI,WAAW,EAAE;gBAClF,OAAO,CAAC,KAAK,EAAE,CAAC;gBAChB,KAAK,GAAG,KAAK,CAAC;aACjB;iBAAM;;aAEN;;QAzDL,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC;;;;;;SA0DxB;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;IApED,kDAoEC","sourcesContent":["import { isGeneralSegment } from 'roosterjs-content-model-dom';\nimport type {\n ContentModelBlock,\n ContentModelBlockGroup,\n ContentModelParagraph,\n ContentModelSegment,\n ReadonlyContentModelBlock,\n ReadonlyContentModelBlockGroup,\n ReadonlyContentModelSegment,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport type BlockAndPath = {\n /**\n * The sibling block\n */\n block: ContentModelBlock;\n\n /**\n * Path of this sibling block\n */\n path: ContentModelBlockGroup[];\n\n /**\n * If the input block is under a general segment, it is possible there are sibling segments under the same paragraph.\n * Use this property to return the sibling sibling under the same paragraph\n */\n siblingSegment?: ContentModelSegment;\n};\n\n/**\n * @internal\n */\nexport type ReadonlyBlockAndPath = {\n /**\n * The sibling block\n */\n block: ReadonlyContentModelBlock;\n\n /**\n * Path of this sibling block\n */\n path: ReadonlyContentModelBlockGroup[];\n\n /**\n * If the input block is under a general segment, it is possible there are sibling segments under the same paragraph.\n * Use this property to return the sibling sibling under the same paragraph\n */\n siblingSegment?: ReadonlyContentModelSegment;\n};\n\n/**\n * @internal\n */\nexport function getLeafSiblingBlock(\n path: ContentModelBlockGroup[],\n block: ContentModelBlock,\n isNext: boolean\n): BlockAndPath | null;\n\n/**\n * @internal (Readonly)\n */\nexport function getLeafSiblingBlock(\n path: ReadonlyContentModelBlockGroup[],\n block: ReadonlyContentModelBlock,\n isNext: boolean\n): ReadonlyBlockAndPath | null;\n\nexport function getLeafSiblingBlock(\n path: ReadonlyContentModelBlockGroup[],\n block: ReadonlyContentModelBlock,\n isNext: boolean\n): ReadonlyBlockAndPath | null {\n const newPath = [...path];\n\n while (newPath.length > 0) {\n const group = newPath[0];\n const index = group.blocks.indexOf(block);\n\n if (index < 0) {\n break;\n }\n\n let nextBlock = group.blocks[index + (isNext ? 1 : -1)];\n\n if (nextBlock) {\n while (nextBlock.blockType == 'BlockGroup') {\n const child = nextBlock.blocks[isNext ? 0 : nextBlock.blocks.length - 1];\n\n if (!child) {\n return { block: nextBlock, path: newPath };\n } else if (child.blockType != 'BlockGroup') {\n newPath.unshift(nextBlock);\n return { block: child, path: newPath };\n } else {\n newPath.unshift(nextBlock);\n nextBlock = child;\n }\n }\n\n return { block: nextBlock, path: newPath };\n } else if (isGeneralSegment(group)) {\n // For general segment, we need to check if there is sibling segment under the same paragraph\n // First let's find the parent paragraph of this segment\n newPath.shift();\n\n let segmentIndex = -1;\n const segment = group;\n const para = newPath[0]?.blocks.find(\n x => x.blockType == 'Paragraph' && (segmentIndex = x.segments.indexOf(segment)) >= 0\n ) as ContentModelParagraph;\n\n if (para) {\n // Now we have found the parent paragraph, so let's check if it has a sibling segment\n const siblingSegment = para.segments[segmentIndex + (isNext ? 1 : -1)];\n\n if (siblingSegment) {\n // Return this block, path and segment since we have found it\n return { block: para, path: newPath, siblingSegment };\n } else {\n // No sibling segment, let's keep go upper level\n block = para;\n }\n } else {\n // Parent sibling is not found (in theory this should never happen), just return null\n break;\n }\n } else if (group.blockGroupType != 'Document' && group.blockGroupType != 'TableCell') {\n newPath.shift();\n block = group;\n } else {\n break;\n }\n }\n\n return null;\n}\n"]}
1
+ {"version":3,"file":"getLeafSiblingBlock.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-plugins/lib/edit/utils/getLeafSiblingBlock.ts"],"names":[],"mappings":";;;;IAoEA,SAAgB,mBAAmB,CAC/B,IAAsC,EACtC,KAAgC,EAChC,MAAe;;QAEf,IAAM,OAAO,sDAAO,IAAI,SAAC,CAAC;;YAGtB,IAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YACzB,IAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAE1C,IAAI,KAAK,GAAG,CAAC,EAAE;;aAEd;YAED,IAAI,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAExD,IAAI,SAAS,EAAE;gBACX,OAAO,SAAS,CAAC,SAAS,IAAI,YAAY,EAAE;oBACxC,IAAM,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;oBAEzE,IAAI,CAAC,KAAK,EAAE;wCACD,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE;qBAC7C;yBAAM,IAAI,KAAK,CAAC,SAAS,IAAI,YAAY,EAAE;wBACxC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;wCACpB,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE;qBACzC;yBAAM;wBACH,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;wBAC3B,SAAS,GAAG,KAAK,CAAC;qBACrB;iBACJ;gCAEM,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE;aAC7C;iBAAM,IAAI,IAAA,8CAAgB,EAAC,KAAK,CAAC,EAAE;gBAChC,6FAA6F;gBAC7F,wDAAwD;gBACxD,OAAO,CAAC,KAAK,EAAE,CAAC;gBAEhB,IAAI,cAAY,GAAG,CAAC,CAAC,CAAC;gBACtB,IAAM,SAAO,GAAG,KAAK,CAAC;gBACtB,IAAM,IAAI,GAAG,MAAA,OAAO,CAAC,CAAC,CAAC,0CAAE,MAAM,CAAC,IAAI,CAChC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,SAAS,IAAI,WAAW,IAAI,CAAC,cAAY,GAAG,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAO,CAAC,CAAC,IAAI,CAAC,EAA/E,CAA+E,CAC9D,CAAC;gBAE3B,IAAI,IAAI,EAAE;oBACN,qFAAqF;oBACrF,IAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,cAAY,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBAEvE,IAAI,cAAc,EAAE;wCAET,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,cAAc,gBAAA,EAAE;qBACxD;yBAAM;wBACH,gDAAgD;wBAChD,KAAK,GAAG,IAAI,CAAC;qBAChB;iBACJ;qBAAM;;iBAGN;aACJ;iBAAM,IAAI,KAAK,CAAC,cAAc,IAAI,UAAU,IAAI,KAAK,CAAC,cAAc,IAAI,WAAW,EAAE;gBAClF,OAAO,CAAC,KAAK,EAAE,CAAC;gBAChB,KAAK,GAAG,KAAK,CAAC;aACjB;iBAAM;;aAEN;;QAzDL,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC;;;;;;SA0DxB;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;IApED,kDAoEC","sourcesContent":["import { isGeneralSegment } from 'roosterjs-content-model-dom';\nimport type {\n ContentModelParagraph,\n ReadonlyContentModelBlock,\n ReadonlyContentModelBlockGroup,\n ReadonlyContentModelSegment,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport type BlockAndPath = {\n /**\n * The sibling block\n */\n block: ReadonlyContentModelBlock;\n\n /**\n * Path of this sibling block\n */\n path: ReadonlyContentModelBlockGroup[];\n\n /**\n * If the input block is under a general segment, it is possible there are sibling segments under the same paragraph.\n * Use this property to return the sibling sibling under the same paragraph\n */\n siblingSegment?: ReadonlyContentModelSegment;\n};\n\n/**\n * @internal\n */\nexport type ReadonlyBlockAndPath = {\n /**\n * The sibling block\n */\n block: ReadonlyContentModelBlock;\n\n /**\n * Path of this sibling block\n */\n path: ReadonlyContentModelBlockGroup[];\n\n /**\n * If the input block is under a general segment, it is possible there are sibling segments under the same paragraph.\n * Use this property to return the sibling sibling under the same paragraph\n */\n siblingSegment?: ReadonlyContentModelSegment;\n};\n\n/**\n * @internal\n */\nexport function getLeafSiblingBlock(\n path: ReadonlyContentModelBlockGroup[],\n block: ReadonlyContentModelBlock,\n isNext: boolean\n): BlockAndPath | null;\n\n/**\n * @internal (Readonly)\n */\nexport function getLeafSiblingBlock(\n path: ReadonlyContentModelBlockGroup[],\n block: ReadonlyContentModelBlock,\n isNext: boolean\n): ReadonlyBlockAndPath | null;\n\nexport function getLeafSiblingBlock(\n path: ReadonlyContentModelBlockGroup[],\n block: ReadonlyContentModelBlock,\n isNext: boolean\n): ReadonlyBlockAndPath | null {\n const newPath = [...path];\n\n while (newPath.length > 0) {\n const group = newPath[0];\n const index = group.blocks.indexOf(block);\n\n if (index < 0) {\n break;\n }\n\n let nextBlock = group.blocks[index + (isNext ? 1 : -1)];\n\n if (nextBlock) {\n while (nextBlock.blockType == 'BlockGroup') {\n const child = nextBlock.blocks[isNext ? 0 : nextBlock.blocks.length - 1];\n\n if (!child) {\n return { block: nextBlock, path: newPath };\n } else if (child.blockType != 'BlockGroup') {\n newPath.unshift(nextBlock);\n return { block: child, path: newPath };\n } else {\n newPath.unshift(nextBlock);\n nextBlock = child;\n }\n }\n\n return { block: nextBlock, path: newPath };\n } else if (isGeneralSegment(group)) {\n // For general segment, we need to check if there is sibling segment under the same paragraph\n // First let's find the parent paragraph of this segment\n newPath.shift();\n\n let segmentIndex = -1;\n const segment = group;\n const para = newPath[0]?.blocks.find(\n x => x.blockType == 'Paragraph' && (segmentIndex = x.segments.indexOf(segment)) >= 0\n ) as ContentModelParagraph;\n\n if (para) {\n // Now we have found the parent paragraph, so let's check if it has a sibling segment\n const siblingSegment = para.segments[segmentIndex + (isNext ? 1 : -1)];\n\n if (siblingSegment) {\n // Return this block, path and segment since we have found it\n return { block: para, path: newPath, siblingSegment };\n } else {\n // No sibling segment, let's keep go upper level\n block = para;\n }\n } else {\n // Parent sibling is not found (in theory this should never happen), just return null\n break;\n }\n } else if (group.blockGroupType != 'Document' && group.blockGroupType != 'TableCell') {\n newPath.shift();\n block = group;\n } else {\n break;\n }\n }\n\n return null;\n}\n"]}
@@ -0,0 +1,9 @@
1
+ import type { InsertPoint, ShallowMutableContentModelParagraph } from 'roosterjs-content-model-types';
2
+ /**
3
+ * @internal
4
+ * Split the given paragraph from insert point into two paragraphs,
5
+ * and move the selection marker to the beginning of the second paragraph
6
+ * @param insertPoint The input insert point which includes the paragraph and selection marker
7
+ * @returns The new paragraph it created
8
+ */
9
+ export declare function splitParagraph(insertPoint: InsertPoint): ShallowMutableContentModelParagraph;
@@ -0,0 +1,29 @@
1
+ define(["require", "exports", "tslib", "roosterjs-content-model-dom"], function (require, exports, tslib_1, roosterjs_content_model_dom_1) {
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.splitParagraph = void 0;
5
+ /**
6
+ * @internal
7
+ * Split the given paragraph from insert point into two paragraphs,
8
+ * and move the selection marker to the beginning of the second paragraph
9
+ * @param insertPoint The input insert point which includes the paragraph and selection marker
10
+ * @returns The new paragraph it created
11
+ */
12
+ function splitParagraph(insertPoint) {
13
+ var _a;
14
+ var paragraph = insertPoint.paragraph, marker = insertPoint.marker;
15
+ var newParagraph = (0, roosterjs_content_model_dom_1.createParagraph)(false /*isImplicit*/, paragraph.format, paragraph.segmentFormat);
16
+ var markerIndex = paragraph.segments.indexOf(marker);
17
+ var segments = paragraph.segments.splice(markerIndex, paragraph.segments.length - markerIndex);
18
+ if (paragraph.segments.length == 0) {
19
+ paragraph.segments.push((0, roosterjs_content_model_dom_1.createBr)(marker.format));
20
+ }
21
+ (_a = newParagraph.segments).push.apply(_a, (0, tslib_1.__spreadArray)([], (0, tslib_1.__read)(segments), false));
22
+ (0, roosterjs_content_model_dom_1.setParagraphNotImplicit)(paragraph);
23
+ insertPoint.paragraph = newParagraph;
24
+ (0, roosterjs_content_model_dom_1.normalizeParagraph)(paragraph);
25
+ return newParagraph;
26
+ }
27
+ exports.splitParagraph = splitParagraph;
28
+ });
29
+ //# sourceMappingURL=splitParagraph.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"splitParagraph.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-plugins/lib/edit/utils/splitParagraph.ts"],"names":[],"mappings":";;;;IAWA;;;;;;OAMG;IACH,SAAgB,cAAc,CAAC,WAAwB;;QAC3C,IAAA,SAAS,GAAa,WAAW,UAAxB,EAAE,MAAM,GAAK,WAAW,OAAhB,CAAiB;QAC1C,IAAM,YAAY,GAAwC,IAAA,6CAAe,EACrE,KAAK,CAAC,cAAc,EACpB,SAAS,CAAC,MAAM,EAChB,SAAS,CAAC,aAAa,CAC1B,CAAC;QAEF,IAAM,WAAW,GAAG,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACvD,IAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC,MAAM,CACtC,WAAW,EACX,SAAS,CAAC,QAAQ,CAAC,MAAM,GAAG,WAAW,CAC1C,CAAC;QAEF,IAAI,SAAS,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,EAAE;YAChC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAA,sCAAQ,EAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;SACpD;QAED,CAAA,KAAA,YAAY,CAAC,QAAQ,CAAA,CAAC,IAAI,8DAAI,QAAQ,WAAE;QAExC,IAAA,qDAAuB,EAAC,SAAS,CAAC,CAAC;QAEnC,WAAW,CAAC,SAAS,GAAG,YAAY,CAAC;QAErC,IAAA,gDAAkB,EAAC,SAAS,CAAC,CAAC;QAE9B,OAAO,YAAY,CAAC;IACxB,CAAC;IA3BD,wCA2BC","sourcesContent":["import {\n createBr,\n createParagraph,\n normalizeParagraph,\n setParagraphNotImplicit,\n} from 'roosterjs-content-model-dom';\nimport type {\n InsertPoint,\n ShallowMutableContentModelParagraph,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n * Split the given paragraph from insert point into two paragraphs,\n * and move the selection marker to the beginning of the second paragraph\n * @param insertPoint The input insert point which includes the paragraph and selection marker\n * @returns The new paragraph it created\n */\nexport function splitParagraph(insertPoint: InsertPoint) {\n const { paragraph, marker } = insertPoint;\n const newParagraph: ShallowMutableContentModelParagraph = createParagraph(\n false /*isImplicit*/,\n paragraph.format,\n paragraph.segmentFormat\n );\n\n const markerIndex = paragraph.segments.indexOf(marker);\n const segments = paragraph.segments.splice(\n markerIndex,\n paragraph.segments.length - markerIndex\n );\n\n if (paragraph.segments.length == 0) {\n paragraph.segments.push(createBr(marker.format));\n }\n\n newParagraph.segments.push(...segments);\n\n setParagraphNotImplicit(paragraph);\n\n insertPoint.paragraph = newParagraph;\n\n normalizeParagraph(paragraph);\n\n return newParagraph;\n}\n"]}
@@ -0,0 +1,10 @@
1
+ import type { CreateElementData } from '../../pluginUtils/CreateElement/CreateElementData';
2
+ /**
3
+ * @internal
4
+ */
5
+ export declare function createImageCropper(doc: Document): HTMLDivElement[];
6
+ /**
7
+ * @internal
8
+ * Get HTML for crop elements, including 4 overlays (to show dark shadow), 1 container and 4 crop handles
9
+ */
10
+ export declare function getCropHTML(): CreateElementData[];
@@ -0,0 +1,78 @@
1
+ define(["require", "exports", "../../pluginUtils/CreateElement/createElement", "../types/ImageEditElementClass", "roosterjs-content-model-dom", "../constants/constants"], function (require, exports, createElement_1, ImageEditElementClass_1, roosterjs_content_model_dom_1, constants_1) {
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.getCropHTML = exports.createImageCropper = void 0;
5
+ /**
6
+ * @internal
7
+ */
8
+ function createImageCropper(doc) {
9
+ var cropper = getCropHTML()
10
+ .map(function (data) {
11
+ var cropper = (0, createElement_1.createElement)(data, doc);
12
+ if (cropper &&
13
+ (0, roosterjs_content_model_dom_1.isNodeOfType)(cropper, 'ELEMENT_NODE') &&
14
+ (0, roosterjs_content_model_dom_1.isElementOfType)(cropper, 'div')) {
15
+ return cropper;
16
+ }
17
+ })
18
+ .filter(function (cropper) { return !!cropper; });
19
+ return cropper;
20
+ }
21
+ exports.createImageCropper = createImageCropper;
22
+ /**
23
+ * @internal
24
+ * Get HTML for crop elements, including 4 overlays (to show dark shadow), 1 container and 4 crop handles
25
+ */
26
+ function getCropHTML() {
27
+ var overlayHTML = {
28
+ tag: 'div',
29
+ style: 'position:absolute;background-color:rgb(0,0,0,0.5);pointer-events:none',
30
+ className: ImageEditElementClass_1.ImageEditElementClass.CropOverlay,
31
+ };
32
+ var containerHTML = {
33
+ tag: 'div',
34
+ style: 'position:absolute;overflow:hidden;inset:0px;',
35
+ className: ImageEditElementClass_1.ImageEditElementClass.CropContainer,
36
+ children: [],
37
+ };
38
+ if (containerHTML) {
39
+ constants_1.XS_CROP.forEach(function (x) {
40
+ return constants_1.YS_CROP.forEach(function (y) { var _a; return (_a = containerHTML.children) === null || _a === void 0 ? void 0 : _a.push(getCropHTMLInternal(x, y)); });
41
+ });
42
+ }
43
+ return [containerHTML, overlayHTML, overlayHTML, overlayHTML, overlayHTML];
44
+ }
45
+ exports.getCropHTML = getCropHTML;
46
+ function getCropHTMLInternal(x, y) {
47
+ var leftOrRight = x == 'w' ? 'left' : 'right';
48
+ var topOrBottom = y == 'n' ? 'top' : 'bottom';
49
+ var rotation = constants_1.ROTATION[y + x];
50
+ return {
51
+ tag: 'div',
52
+ className: ImageEditElementClass_1.ImageEditElementClass.CropHandle,
53
+ style: "position:absolute;pointer-events:auto;cursor:" + y + x + "-resize;" + leftOrRight + ":0;" + topOrBottom + ":0;width:" + constants_1.CROP_HANDLE_SIZE + "px;height:" + constants_1.CROP_HANDLE_SIZE + "px;transform:rotate(" + rotation + "deg)",
54
+ dataset: { x: x, y: y },
55
+ children: getCropHandleHTML(),
56
+ };
57
+ }
58
+ function getCropHandleHTML() {
59
+ var result = [];
60
+ [0, 1].forEach(function (layer) {
61
+ return [0, 1].forEach(function (dir) {
62
+ result.push(getCropHandleHTMLInternal(layer, dir));
63
+ });
64
+ });
65
+ return result;
66
+ }
67
+ function getCropHandleHTMLInternal(layer, dir) {
68
+ var position = dir == 0
69
+ ? "right:" + layer + "px;height:" + (constants_1.CROP_HANDLE_WIDTH - layer * 2) + "px;"
70
+ : "top:" + layer + "px;width:" + (constants_1.CROP_HANDLE_WIDTH - layer * 2) + "px;";
71
+ var bgColor = layer == 0 ? 'white' : 'black';
72
+ return {
73
+ tag: 'div',
74
+ style: "position:absolute;left:" + layer + "px;bottom:" + layer + "px;" + position + ";background-color:" + bgColor,
75
+ };
76
+ }
77
+ });
78
+ //# sourceMappingURL=createImageCropper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createImageCropper.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-plugins/lib/imageEdit/Cropper/createImageCropper.ts"],"names":[],"mappings":"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","sourcesContent":["import { createElement } from '../../pluginUtils/CreateElement/createElement';\nimport { ImageEditElementClass } from '../types/ImageEditElementClass';\nimport { isElementOfType, isNodeOfType } from 'roosterjs-content-model-dom';\nimport type { CreateElementData } from '../../pluginUtils/CreateElement/CreateElementData';\nimport type { DNDDirectionX, DnDDirectionY } from '../types/DragAndDropContext';\nimport {\n CROP_HANDLE_SIZE,\n CROP_HANDLE_WIDTH,\n ROTATION,\n XS_CROP,\n YS_CROP,\n} from '../constants/constants';\n\n/**\n * @internal\n */\nexport function createImageCropper(doc: Document) {\n const cropper = getCropHTML()\n .map(data => {\n const cropper = createElement(data, doc);\n if (\n cropper &&\n isNodeOfType(cropper, 'ELEMENT_NODE') &&\n isElementOfType(cropper, 'div')\n ) {\n return cropper;\n }\n })\n .filter(cropper => !!cropper) as HTMLDivElement[];\n return cropper;\n}\n\n/**\n * @internal\n * Get HTML for crop elements, including 4 overlays (to show dark shadow), 1 container and 4 crop handles\n */\nexport function getCropHTML(): CreateElementData[] {\n const overlayHTML: CreateElementData = {\n tag: 'div',\n style: 'position:absolute;background-color:rgb(0,0,0,0.5);pointer-events:none',\n className: ImageEditElementClass.CropOverlay,\n };\n const containerHTML: CreateElementData = {\n tag: 'div',\n style: 'position:absolute;overflow:hidden;inset:0px;',\n className: ImageEditElementClass.CropContainer,\n children: [],\n };\n\n if (containerHTML) {\n XS_CROP.forEach(x =>\n YS_CROP.forEach(y => containerHTML.children?.push(getCropHTMLInternal(x, y)))\n );\n }\n return [containerHTML, overlayHTML, overlayHTML, overlayHTML, overlayHTML];\n}\n\nfunction getCropHTMLInternal(x: DNDDirectionX, y: DnDDirectionY): CreateElementData {\n const leftOrRight = x == 'w' ? 'left' : 'right';\n const topOrBottom = y == 'n' ? 'top' : 'bottom';\n const rotation = ROTATION[y + x];\n\n return {\n tag: 'div',\n className: ImageEditElementClass.CropHandle,\n style: `position:absolute;pointer-events:auto;cursor:${y}${x}-resize;${leftOrRight}:0;${topOrBottom}:0;width:${CROP_HANDLE_SIZE}px;height:${CROP_HANDLE_SIZE}px;transform:rotate(${rotation}deg)`,\n dataset: { x, y },\n children: getCropHandleHTML(),\n };\n}\n\nfunction getCropHandleHTML(): CreateElementData[] {\n const result: CreateElementData[] = [];\n [0, 1].forEach(layer =>\n [0, 1].forEach(dir => {\n result.push(getCropHandleHTMLInternal(layer, dir));\n })\n );\n return result;\n}\n\nfunction getCropHandleHTMLInternal(layer: number, dir: number): CreateElementData {\n const position =\n dir == 0\n ? `right:${layer}px;height:${CROP_HANDLE_WIDTH - layer * 2}px;`\n : `top:${layer}px;width:${CROP_HANDLE_WIDTH - layer * 2}px;`;\n const bgColor = layer == 0 ? 'white' : 'black';\n\n return {\n tag: 'div',\n style: `position:absolute;left:${layer}px;bottom:${layer}px;${position};background-color:${bgColor}`,\n };\n}\n"]}
@@ -0,0 +1,8 @@
1
+ import type { DragAndDropContext } from '../types/DragAndDropContext';
2
+ import type { DragAndDropHandler } from '../../pluginUtils/DragAndDrop/DragAndDropHandler';
3
+ import type { ImageCropMetadataFormat } from 'roosterjs-content-model-types';
4
+ /**
5
+ * @internal
6
+ * Crop handle for DragAndDropHelper
7
+ */
8
+ export declare const Cropper: DragAndDropHandler<DragAndDropContext, ImageCropMetadataFormat>;
@@ -0,0 +1,73 @@
1
+ define(["require", "exports", "tslib", "../utils/imageEditUtils"], function (require, exports, tslib_1, imageEditUtils_1) {
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.Cropper = void 0;
5
+ /**
6
+ * @internal
7
+ * Crop handle for DragAndDropHelper
8
+ */
9
+ exports.Cropper = {
10
+ onDragStart: function (_a) {
11
+ var editInfo = _a.editInfo;
12
+ return ((0, tslib_1.__assign)({}, editInfo));
13
+ },
14
+ onDragging: function (_a, e, base, dx, dy) {
15
+ var _b;
16
+ var _c;
17
+ var editInfo = _a.editInfo, x = _a.x, y = _a.y, options = _a.options;
18
+ _b = (0, tslib_1.__read)((0, imageEditUtils_1.rotateCoordinate)(dx, dy, (_c = editInfo.angleRad) !== null && _c !== void 0 ? _c : 0), 2), dx = _b[0], dy = _b[1];
19
+ var widthPx = editInfo.widthPx, heightPx = editInfo.heightPx, leftPercent = editInfo.leftPercent, rightPercent = editInfo.rightPercent, topPercent = editInfo.topPercent, bottomPercent = editInfo.bottomPercent;
20
+ if (leftPercent === undefined ||
21
+ rightPercent === undefined ||
22
+ topPercent === undefined ||
23
+ bottomPercent === undefined ||
24
+ base.leftPercent === undefined ||
25
+ base.rightPercent === undefined ||
26
+ base.topPercent === undefined ||
27
+ base.bottomPercent === undefined ||
28
+ widthPx === undefined ||
29
+ heightPx === undefined) {
30
+ return false;
31
+ }
32
+ var minWidth = options.minWidth, minHeight = options.minHeight;
33
+ var widthPercent = 1 - leftPercent - rightPercent;
34
+ var heightPercent = 1 - topPercent - bottomPercent;
35
+ if (widthPercent > 0 &&
36
+ heightPercent > 0 &&
37
+ minWidth !== undefined &&
38
+ minHeight !== undefined) {
39
+ var fullWidth = widthPx / widthPercent;
40
+ var fullHeight = heightPx / heightPercent;
41
+ var newLeft = x != 'e'
42
+ ? crop(base.leftPercent, dx, fullWidth, rightPercent, minWidth)
43
+ : leftPercent;
44
+ var newRight = x != 'w'
45
+ ? crop(base.rightPercent, -dx, fullWidth, leftPercent, minWidth)
46
+ : rightPercent;
47
+ var newTop = y != 's'
48
+ ? crop(base.topPercent, dy, fullHeight, bottomPercent, minHeight)
49
+ : topPercent;
50
+ var newBottom = y != 'n'
51
+ ? crop(base.bottomPercent, -dy, fullHeight, topPercent, minHeight)
52
+ : bottomPercent;
53
+ editInfo.leftPercent = newLeft;
54
+ editInfo.rightPercent = newRight;
55
+ editInfo.topPercent = newTop;
56
+ editInfo.bottomPercent = newBottom;
57
+ editInfo.widthPx = fullWidth * (1 - newLeft - newRight);
58
+ editInfo.heightPx = fullHeight * (1 - newTop - newBottom);
59
+ return true;
60
+ }
61
+ else {
62
+ return false;
63
+ }
64
+ },
65
+ };
66
+ function crop(basePercentage, deltaValue, fullValue, currentPercentage, minValue) {
67
+ var maxValue = fullValue * (1 - currentPercentage) - minValue;
68
+ var newValue = fullValue * basePercentage + deltaValue;
69
+ var validValue = Math.max(Math.min(newValue, maxValue), 0);
70
+ return validValue / fullValue;
71
+ }
72
+ });
73
+ //# sourceMappingURL=cropperContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cropperContext.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-plugins/lib/imageEdit/Cropper/cropperContext.ts"],"names":[],"mappings":"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","sourcesContent":["import { rotateCoordinate } from '../utils/imageEditUtils';\nimport type { DragAndDropContext } from '../types/DragAndDropContext';\nimport type { DragAndDropHandler } from '../../pluginUtils/DragAndDrop/DragAndDropHandler';\nimport type { ImageCropMetadataFormat } from 'roosterjs-content-model-types';\n\n/**\n * @internal\n * Crop handle for DragAndDropHelper\n */\nexport const Cropper: DragAndDropHandler<DragAndDropContext, ImageCropMetadataFormat> = {\n onDragStart: ({ editInfo }) => ({ ...editInfo }),\n onDragging: ({ editInfo, x, y, options }, e, base, dx, dy) => {\n [dx, dy] = rotateCoordinate(dx, dy, editInfo.angleRad ?? 0);\n\n const {\n widthPx,\n heightPx,\n leftPercent,\n rightPercent,\n topPercent,\n bottomPercent,\n } = editInfo;\n\n if (\n leftPercent === undefined ||\n rightPercent === undefined ||\n topPercent === undefined ||\n bottomPercent === undefined ||\n base.leftPercent === undefined ||\n base.rightPercent === undefined ||\n base.topPercent === undefined ||\n base.bottomPercent === undefined ||\n widthPx === undefined ||\n heightPx === undefined\n ) {\n return false;\n }\n\n const { minWidth, minHeight } = options;\n const widthPercent = 1 - leftPercent - rightPercent;\n const heightPercent = 1 - topPercent - bottomPercent;\n\n if (\n widthPercent > 0 &&\n heightPercent > 0 &&\n minWidth !== undefined &&\n minHeight !== undefined\n ) {\n const fullWidth = widthPx / widthPercent;\n const fullHeight = heightPx / heightPercent;\n const newLeft =\n x != 'e'\n ? crop(base.leftPercent, dx, fullWidth, rightPercent, minWidth)\n : leftPercent;\n const newRight =\n x != 'w'\n ? crop(base.rightPercent, -dx, fullWidth, leftPercent, minWidth)\n : rightPercent;\n const newTop =\n y != 's'\n ? crop(base.topPercent, dy, fullHeight, bottomPercent, minHeight)\n : topPercent;\n const newBottom =\n y != 'n'\n ? crop(base.bottomPercent, -dy, fullHeight, topPercent, minHeight)\n : bottomPercent;\n\n editInfo.leftPercent = newLeft;\n editInfo.rightPercent = newRight;\n editInfo.topPercent = newTop;\n editInfo.bottomPercent = newBottom;\n editInfo.widthPx = fullWidth * (1 - newLeft - newRight);\n editInfo.heightPx = fullHeight * (1 - newTop - newBottom);\n\n return true;\n } else {\n return false;\n }\n },\n};\n\nfunction crop(\n basePercentage: number,\n deltaValue: number,\n fullValue: number,\n currentPercentage: number,\n minValue: number\n): number {\n const maxValue = fullValue * (1 - currentPercentage) - minValue;\n const newValue = fullValue * basePercentage + deltaValue;\n const validValue = Math.max(Math.min(newValue, maxValue), 0);\n return validValue / fullValue;\n}\n"]}
@@ -0,0 +1,66 @@
1
+ import type { ImageEditOptions } from './types/ImageEditOptions';
2
+ import type { EditorPlugin, IEditor, ImageEditOperation, ImageEditor, PluginEvent } from 'roosterjs-content-model-types';
3
+ /**
4
+ * ImageEdit plugin handles the following image editing features:
5
+ * - Resize image
6
+ * - Crop image
7
+ * - Rotate image
8
+ * - Flip image
9
+ */
10
+ export declare class ImageEditPlugin implements ImageEditor, EditorPlugin {
11
+ protected options: ImageEditOptions;
12
+ protected editor: IEditor | null;
13
+ private shadowSpan;
14
+ private selectedImage;
15
+ wrapper: HTMLSpanElement | null;
16
+ private imageEditInfo;
17
+ private imageHTMLOptions;
18
+ private dndHelpers;
19
+ private clonedImage;
20
+ private lastSrc;
21
+ private wasImageResized;
22
+ private isCropMode;
23
+ private resizers;
24
+ private rotators;
25
+ private croppers;
26
+ private zoomScale;
27
+ private disposer;
28
+ constructor(options?: ImageEditOptions);
29
+ /**
30
+ * Get name of this plugin
31
+ */
32
+ getName(): string;
33
+ /**
34
+ * The first method that editor will call to a plugin when editor is initializing.
35
+ * It will pass in the editor instance, plugin should take this chance to save the
36
+ * editor reference so that it can call to any editor method or format API later.
37
+ * @param editor The editor object
38
+ */
39
+ initialize(editor: IEditor): void;
40
+ /**
41
+ * The last method that editor will call to a plugin before it is disposed.
42
+ * Plugin can take this chance to clear the reference to editor. After this method is
43
+ * called, plugin should not call to any editor method since it will result in error.
44
+ */
45
+ dispose(): void;
46
+ /**
47
+ * Core method for a plugin. Once an event happens in editor, editor will call this
48
+ * method of each plugin to handle the event as long as the event is not handled
49
+ * exclusively by another plugin.
50
+ * @param event The event to handle:
51
+ */
52
+ onPluginEvent(_event: PluginEvent): void;
53
+ private startEditing;
54
+ startRotateAndResize(editor: IEditor, image: HTMLImageElement, apiOperation?: 'resize' | 'rotate'): void;
55
+ private updateRotateHandleState;
56
+ isOperationAllowed(operation: ImageEditOperation): boolean;
57
+ canRegenerateImage(image: HTMLImageElement): boolean;
58
+ cropImage(): void;
59
+ private editImage;
60
+ private cleanInfo;
61
+ private formatImageWithContentModel;
62
+ private removeImageWrapper;
63
+ flipImage(direction: 'horizontal' | 'vertical'): void;
64
+ rotateImage(angleRad: number): void;
65
+ getWrapper(): HTMLSpanElement | null;
66
+ }