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
@@ -0,0 +1,315 @@
1
+ define(["require", "exports", "tslib", "./utils/applyChange", "./utils/canRegenerateImage", "./utils/imageEditUtils", "./utils/createImageWrapper", "./Cropper/cropperContext", "./utils/getDropAndDragHelpers", "./utils/getHTMLImageOptions", "./utils/updateImageEditInfo", "./types/ImageEditElementClass", "./Resizer/resizerContext", "./Rotator/rotatorContext", "./Rotator/updateRotateHandle", "./utils/updateWrapper", "roosterjs-content-model-dom"], function (require, exports, tslib_1, applyChange_1, canRegenerateImage_1, imageEditUtils_1, createImageWrapper_1, cropperContext_1, getDropAndDragHelpers_1, getHTMLImageOptions_1, updateImageEditInfo_1, ImageEditElementClass_1, resizerContext_1, rotatorContext_1, updateRotateHandle_1, updateWrapper_1, roosterjs_content_model_dom_1) {
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.ImageEditPlugin = void 0;
5
+ var DefaultOptions = {
6
+ borderColor: '#DB626C',
7
+ minWidth: 10,
8
+ minHeight: 10,
9
+ preserveRatio: true,
10
+ disableRotate: false,
11
+ disableSideResize: false,
12
+ onSelectState: 'resize',
13
+ };
14
+ var IMAGE_EDIT_CHANGE_SOURCE = 'ImageEdit';
15
+ /**
16
+ * ImageEdit plugin handles the following image editing features:
17
+ * - Resize image
18
+ * - Crop image
19
+ * - Rotate image
20
+ * - Flip image
21
+ */
22
+ var ImageEditPlugin = /** @class */ (function () {
23
+ function ImageEditPlugin(options) {
24
+ if (options === void 0) { options = DefaultOptions; }
25
+ this.options = options;
26
+ this.editor = null;
27
+ this.shadowSpan = null;
28
+ this.selectedImage = null;
29
+ this.wrapper = null;
30
+ this.imageEditInfo = null;
31
+ this.imageHTMLOptions = null;
32
+ this.dndHelpers = [];
33
+ this.clonedImage = null;
34
+ this.lastSrc = null;
35
+ this.wasImageResized = false;
36
+ this.isCropMode = false;
37
+ this.resizers = [];
38
+ this.rotators = [];
39
+ this.croppers = [];
40
+ this.zoomScale = 1;
41
+ this.disposer = null;
42
+ }
43
+ /**
44
+ * Get name of this plugin
45
+ */
46
+ ImageEditPlugin.prototype.getName = function () {
47
+ return 'ImageEdit';
48
+ };
49
+ /**
50
+ * The first method that editor will call to a plugin when editor is initializing.
51
+ * It will pass in the editor instance, plugin should take this chance to save the
52
+ * editor reference so that it can call to any editor method or format API later.
53
+ * @param editor The editor object
54
+ */
55
+ ImageEditPlugin.prototype.initialize = function (editor) {
56
+ var _this = this;
57
+ this.editor = editor;
58
+ this.disposer = editor.attachDomEvent({
59
+ blur: {
60
+ beforeDispatch: function () {
61
+ _this.formatImageWithContentModel(editor, true /* shouldSelectImage */, true /* shouldSelectAsImageSelection*/);
62
+ },
63
+ },
64
+ });
65
+ };
66
+ /**
67
+ * The last method that editor will call to a plugin before it is disposed.
68
+ * Plugin can take this chance to clear the reference to editor. After this method is
69
+ * called, plugin should not call to any editor method since it will result in error.
70
+ */
71
+ ImageEditPlugin.prototype.dispose = function () {
72
+ this.editor = null;
73
+ this.cleanInfo();
74
+ if (this.disposer) {
75
+ this.disposer();
76
+ this.disposer = null;
77
+ }
78
+ };
79
+ /**
80
+ * Core method for a plugin. Once an event happens in editor, editor will call this
81
+ * method of each plugin to handle the event as long as the event is not handled
82
+ * exclusively by another plugin.
83
+ * @param event The event to handle:
84
+ */
85
+ ImageEditPlugin.prototype.onPluginEvent = function (_event) { };
86
+ ImageEditPlugin.prototype.startEditing = function (editor, image, apiOperation) {
87
+ var imageSpan = image.parentElement;
88
+ if (!imageSpan || (imageSpan && !(0, roosterjs_content_model_dom_1.isElementOfType)(imageSpan, 'span'))) {
89
+ return;
90
+ }
91
+ this.imageEditInfo = (0, updateImageEditInfo_1.getSelectedImageMetadata)(editor, image);
92
+ this.lastSrc = image.getAttribute('src');
93
+ this.imageHTMLOptions = (0, getHTMLImageOptions_1.getHTMLImageOptions)(editor, this.options, this.imageEditInfo);
94
+ var _a = (0, createImageWrapper_1.createImageWrapper)(editor, image, imageSpan, this.options, this.imageEditInfo, this.imageHTMLOptions, apiOperation || this.options.onSelectState), resizers = _a.resizers, rotators = _a.rotators, wrapper = _a.wrapper, shadowSpan = _a.shadowSpan, imageClone = _a.imageClone, croppers = _a.croppers;
95
+ this.shadowSpan = shadowSpan;
96
+ this.selectedImage = image;
97
+ this.wrapper = wrapper;
98
+ this.clonedImage = imageClone;
99
+ this.wasImageResized = (0, imageEditUtils_1.checkIfImageWasResized)(image);
100
+ this.resizers = resizers;
101
+ this.rotators = rotators;
102
+ this.croppers = croppers;
103
+ this.zoomScale = editor.getDOMHelper().calculateZoomScale();
104
+ editor.setEditorStyle('imageEdit', "outline-style:none!important;", [
105
+ "span:has(>img#" + this.selectedImage.id + ")",
106
+ ]);
107
+ };
108
+ ImageEditPlugin.prototype.startRotateAndResize = function (editor, image, apiOperation) {
109
+ var _this = this;
110
+ var _a;
111
+ if (this.wrapper && this.selectedImage && this.shadowSpan) {
112
+ this.removeImageWrapper();
113
+ }
114
+ this.startEditing(editor, image, apiOperation);
115
+ if (this.selectedImage && this.imageEditInfo && this.wrapper && this.clonedImage) {
116
+ this.dndHelpers = (0, tslib_1.__spreadArray)((0, tslib_1.__spreadArray)([], (0, tslib_1.__read)((0, getDropAndDragHelpers_1.getDropAndDragHelpers)(this.wrapper, this.imageEditInfo, this.options, ImageEditElementClass_1.ImageEditElementClass.ResizeHandle, resizerContext_1.Resizer, function () {
117
+ if (_this.imageEditInfo &&
118
+ _this.selectedImage &&
119
+ _this.wrapper &&
120
+ _this.clonedImage) {
121
+ (0, updateWrapper_1.updateWrapper)(_this.imageEditInfo, _this.options, _this.selectedImage, _this.clonedImage, _this.wrapper, _this.resizers);
122
+ _this.wasImageResized = true;
123
+ }
124
+ }, this.zoomScale)), false), (0, tslib_1.__read)((0, getDropAndDragHelpers_1.getDropAndDragHelpers)(this.wrapper, this.imageEditInfo, this.options, ImageEditElementClass_1.ImageEditElementClass.RotateHandle, rotatorContext_1.Rotator, function () {
125
+ var _a;
126
+ if (_this.imageEditInfo &&
127
+ _this.selectedImage &&
128
+ _this.wrapper &&
129
+ _this.clonedImage) {
130
+ (0, updateWrapper_1.updateWrapper)(_this.imageEditInfo, _this.options, _this.selectedImage, _this.clonedImage, _this.wrapper, _this.rotators);
131
+ _this.updateRotateHandleState(editor, _this.selectedImage, _this.wrapper, _this.rotators, (_a = _this.imageEditInfo) === null || _a === void 0 ? void 0 : _a.angleRad);
132
+ }
133
+ }, this.zoomScale)), false);
134
+ (0, updateWrapper_1.updateWrapper)(this.imageEditInfo, this.options, this.selectedImage, this.clonedImage, this.wrapper, this.resizers);
135
+ this.updateRotateHandleState(editor, this.selectedImage, this.wrapper, this.rotators, (_a = this.imageEditInfo) === null || _a === void 0 ? void 0 : _a.angleRad);
136
+ }
137
+ };
138
+ ImageEditPlugin.prototype.updateRotateHandleState = function (editor, image, wrapper, rotators, angleRad) {
139
+ var viewport = editor.getVisibleViewport();
140
+ var smallImage = (0, imageEditUtils_1.isASmallImage)(image.width, image.height);
141
+ if (viewport && rotators && rotators.length > 0) {
142
+ var rotator = rotators[0];
143
+ var rotatorHandle = rotator.firstElementChild;
144
+ if ((0, roosterjs_content_model_dom_1.isNodeOfType)(rotatorHandle, 'ELEMENT_NODE') &&
145
+ (0, roosterjs_content_model_dom_1.isElementOfType)(rotatorHandle, 'div')) {
146
+ (0, updateRotateHandle_1.updateRotateHandle)(viewport, angleRad !== null && angleRad !== void 0 ? angleRad : 0, wrapper, rotator, rotatorHandle, smallImage);
147
+ }
148
+ }
149
+ };
150
+ ImageEditPlugin.prototype.isOperationAllowed = function (operation) {
151
+ return operation === 'resize' || operation === 'rotate' || operation === 'flip';
152
+ };
153
+ ImageEditPlugin.prototype.canRegenerateImage = function (image) {
154
+ return (0, canRegenerateImage_1.canRegenerateImage)(image);
155
+ };
156
+ ImageEditPlugin.prototype.cropImage = function () {
157
+ var _this = this;
158
+ var _a, _b;
159
+ var selection = (_a = this.editor) === null || _a === void 0 ? void 0 : _a.getDOMSelection();
160
+ if (!this.editor || !selection || selection.type !== 'image') {
161
+ return;
162
+ }
163
+ var image = selection.image;
164
+ if (this.wrapper && this.selectedImage && this.shadowSpan) {
165
+ image = (_b = this.removeImageWrapper()) !== null && _b !== void 0 ? _b : image;
166
+ }
167
+ this.startEditing(this.editor, image, 'crop');
168
+ if (!this.selectedImage || !this.imageEditInfo || !this.wrapper || !this.clonedImage) {
169
+ return;
170
+ }
171
+ this.dndHelpers = (0, tslib_1.__spreadArray)([], (0, tslib_1.__read)((0, getDropAndDragHelpers_1.getDropAndDragHelpers)(this.wrapper, this.imageEditInfo, this.options, ImageEditElementClass_1.ImageEditElementClass.CropHandle, cropperContext_1.Cropper, function () {
172
+ if (_this.imageEditInfo &&
173
+ _this.selectedImage &&
174
+ _this.wrapper &&
175
+ _this.clonedImage) {
176
+ (0, updateWrapper_1.updateWrapper)(_this.imageEditInfo, _this.options, _this.selectedImage, _this.clonedImage, _this.wrapper, undefined, _this.croppers);
177
+ _this.isCropMode = true;
178
+ }
179
+ }, this.zoomScale)), false);
180
+ (0, updateWrapper_1.updateWrapper)(this.imageEditInfo, this.options, this.selectedImage, this.clonedImage, this.wrapper, undefined, this.croppers);
181
+ };
182
+ ImageEditPlugin.prototype.editImage = function (editor, image, apiOperation, operation) {
183
+ var _a;
184
+ if (this.wrapper && this.selectedImage && this.shadowSpan) {
185
+ image = (_a = this.removeImageWrapper()) !== null && _a !== void 0 ? _a : image;
186
+ }
187
+ this.startEditing(editor, image, apiOperation);
188
+ if (!this.selectedImage || !this.imageEditInfo || !this.wrapper || !this.clonedImage) {
189
+ return;
190
+ }
191
+ operation(this.imageEditInfo);
192
+ (0, updateWrapper_1.updateWrapper)(this.imageEditInfo, this.options, this.selectedImage, this.clonedImage, this.wrapper);
193
+ this.formatImageWithContentModel(editor, true /* shouldSelect*/, true /* shouldSelectAsImageSelection*/);
194
+ };
195
+ ImageEditPlugin.prototype.cleanInfo = function () {
196
+ var _a;
197
+ (_a = this.editor) === null || _a === void 0 ? void 0 : _a.setEditorStyle('imageEdit', null);
198
+ this.selectedImage = null;
199
+ this.shadowSpan = null;
200
+ this.wrapper = null;
201
+ this.imageEditInfo = null;
202
+ this.imageHTMLOptions = null;
203
+ this.dndHelpers.forEach(function (helper) { return helper.dispose(); });
204
+ this.dndHelpers = [];
205
+ this.clonedImage = null;
206
+ this.lastSrc = null;
207
+ this.wasImageResized = false;
208
+ this.isCropMode = false;
209
+ this.resizers = [];
210
+ this.rotators = [];
211
+ this.croppers = [];
212
+ };
213
+ ImageEditPlugin.prototype.formatImageWithContentModel = function (editor, shouldSelectImage, shouldSelectAsImageSelection) {
214
+ var _this = this;
215
+ if (this.lastSrc &&
216
+ this.selectedImage &&
217
+ this.imageEditInfo &&
218
+ this.clonedImage &&
219
+ this.shadowSpan) {
220
+ editor.formatContentModel(function (model) {
221
+ var selectedSegmentsAndParagraphs = (0, roosterjs_content_model_dom_1.getSelectedSegmentsAndParagraphs)(model, false);
222
+ if (!selectedSegmentsAndParagraphs[0]) {
223
+ return false;
224
+ }
225
+ var segment = selectedSegmentsAndParagraphs[0][0];
226
+ var paragraph = selectedSegmentsAndParagraphs[0][1];
227
+ if (paragraph && segment.segmentType == 'Image') {
228
+ (0, roosterjs_content_model_dom_1.mutateSegment)(paragraph, segment, function (image) {
229
+ if (_this.lastSrc &&
230
+ _this.selectedImage &&
231
+ _this.imageEditInfo &&
232
+ _this.clonedImage) {
233
+ (0, applyChange_1.applyChange)(editor, _this.selectedImage, image, _this.imageEditInfo, _this.lastSrc, _this.wasImageResized || _this.isCropMode, _this.clonedImage);
234
+ image.isSelected = shouldSelectImage;
235
+ image.isSelectedAsImageSelection = shouldSelectAsImageSelection;
236
+ }
237
+ });
238
+ return true;
239
+ }
240
+ return false;
241
+ }, {
242
+ changeSource: IMAGE_EDIT_CHANGE_SOURCE,
243
+ onNodeCreated: function () {
244
+ _this.cleanInfo();
245
+ },
246
+ });
247
+ }
248
+ };
249
+ ImageEditPlugin.prototype.removeImageWrapper = function () {
250
+ var image = null;
251
+ if (this.shadowSpan && this.shadowSpan.parentElement) {
252
+ if (this.shadowSpan.firstElementChild &&
253
+ (0, roosterjs_content_model_dom_1.isNodeOfType)(this.shadowSpan.firstElementChild, 'ELEMENT_NODE') &&
254
+ (0, roosterjs_content_model_dom_1.isElementOfType)(this.shadowSpan.firstElementChild, 'img')) {
255
+ image = this.shadowSpan.firstElementChild;
256
+ }
257
+ (0, roosterjs_content_model_dom_1.unwrap)(this.shadowSpan);
258
+ this.shadowSpan = null;
259
+ this.wrapper = null;
260
+ }
261
+ return image;
262
+ };
263
+ ImageEditPlugin.prototype.flipImage = function (direction) {
264
+ var _a;
265
+ var selection = (_a = this.editor) === null || _a === void 0 ? void 0 : _a.getDOMSelection();
266
+ if (!this.editor || !selection || selection.type !== 'image') {
267
+ return;
268
+ }
269
+ var image = selection.image;
270
+ if (this.editor) {
271
+ this.editImage(this.editor, image, 'flip', function (imageEditInfo) {
272
+ var angleRad = imageEditInfo.angleRad || 0;
273
+ var isInVerticalPostion = (angleRad >= Math.PI / 2 && angleRad < (3 * Math.PI) / 4) ||
274
+ (angleRad <= -Math.PI / 2 && angleRad > (-3 * Math.PI) / 4);
275
+ if (isInVerticalPostion) {
276
+ if (direction === 'horizontal') {
277
+ imageEditInfo.flippedVertical = !imageEditInfo.flippedVertical;
278
+ }
279
+ else {
280
+ imageEditInfo.flippedHorizontal = !imageEditInfo.flippedHorizontal;
281
+ }
282
+ }
283
+ else {
284
+ if (direction === 'vertical') {
285
+ imageEditInfo.flippedVertical = !imageEditInfo.flippedVertical;
286
+ }
287
+ else {
288
+ imageEditInfo.flippedHorizontal = !imageEditInfo.flippedHorizontal;
289
+ }
290
+ }
291
+ });
292
+ }
293
+ };
294
+ ImageEditPlugin.prototype.rotateImage = function (angleRad) {
295
+ var _a;
296
+ var selection = (_a = this.editor) === null || _a === void 0 ? void 0 : _a.getDOMSelection();
297
+ if (!this.editor || !selection || selection.type !== 'image') {
298
+ return;
299
+ }
300
+ var image = selection.image;
301
+ if (this.editor) {
302
+ this.editImage(this.editor, image, 'rotate', function (imageEditInfo) {
303
+ imageEditInfo.angleRad = (imageEditInfo.angleRad || 0) + angleRad;
304
+ });
305
+ }
306
+ };
307
+ //EXPOSED FOR TEST ONLY
308
+ ImageEditPlugin.prototype.getWrapper = function () {
309
+ return this.wrapper;
310
+ };
311
+ return ImageEditPlugin;
312
+ }());
313
+ exports.ImageEditPlugin = ImageEditPlugin;
314
+ });
315
+ //# sourceMappingURL=ImageEditPlugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ImageEditPlugin.js","sourceRoot":"","sources":["../../../../packages/roosterjs-content-model-plugins/lib/imageEdit/ImageEditPlugin.ts"],"names":[],"mappings":"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","sourcesContent":["import { applyChange } from './utils/applyChange';\nimport { canRegenerateImage } from './utils/canRegenerateImage';\nimport { checkIfImageWasResized, isASmallImage } from './utils/imageEditUtils';\nimport { createImageWrapper } from './utils/createImageWrapper';\nimport { Cropper } from './Cropper/cropperContext';\nimport { getDropAndDragHelpers } from './utils/getDropAndDragHelpers';\nimport { getHTMLImageOptions } from './utils/getHTMLImageOptions';\nimport { getSelectedImageMetadata } from './utils/updateImageEditInfo';\nimport { ImageEditElementClass } from './types/ImageEditElementClass';\nimport { Resizer } from './Resizer/resizerContext';\nimport { Rotator } from './Rotator/rotatorContext';\nimport { updateRotateHandle } from './Rotator/updateRotateHandle';\nimport { updateWrapper } from './utils/updateWrapper';\nimport {\n getSelectedSegmentsAndParagraphs,\n isElementOfType,\n isNodeOfType,\n mutateSegment,\n unwrap,\n} from 'roosterjs-content-model-dom';\nimport type { DragAndDropHelper } from '../pluginUtils/DragAndDrop/DragAndDropHelper';\nimport type { DragAndDropContext } from './types/DragAndDropContext';\nimport type { ImageHtmlOptions } from './types/ImageHtmlOptions';\nimport type { ImageEditOptions } from './types/ImageEditOptions';\nimport type {\n EditorPlugin,\n IEditor,\n ImageEditOperation,\n ImageEditor,\n ImageMetadataFormat,\n PluginEvent,\n} from 'roosterjs-content-model-types';\n\nconst DefaultOptions: Partial<ImageEditOptions> = {\n borderColor: '#DB626C',\n minWidth: 10,\n minHeight: 10,\n preserveRatio: true,\n disableRotate: false,\n disableSideResize: false,\n onSelectState: 'resize',\n};\n\nconst IMAGE_EDIT_CHANGE_SOURCE = 'ImageEdit';\n\n/**\n * ImageEdit plugin handles the following image editing features:\n * - Resize image\n * - Crop image\n * - Rotate image\n * - Flip image\n */\nexport class ImageEditPlugin implements ImageEditor, EditorPlugin {\n protected editor: IEditor | null = null;\n private shadowSpan: HTMLSpanElement | null = null;\n private selectedImage: HTMLImageElement | null = null;\n public wrapper: HTMLSpanElement | null = null;\n private imageEditInfo: ImageMetadataFormat | null = null;\n private imageHTMLOptions: ImageHtmlOptions | null = null;\n private dndHelpers: DragAndDropHelper<DragAndDropContext, any>[] = [];\n private clonedImage: HTMLImageElement | null = null;\n private lastSrc: string | null = null;\n private wasImageResized: boolean = false;\n private isCropMode: boolean = false;\n private resizers: HTMLDivElement[] = [];\n private rotators: HTMLDivElement[] = [];\n private croppers: HTMLDivElement[] = [];\n private zoomScale: number = 1;\n private disposer: (() => void) | null = null;\n\n constructor(protected options: ImageEditOptions = DefaultOptions) {}\n\n /**\n * Get name of this plugin\n */\n getName() {\n return 'ImageEdit';\n }\n\n /**\n * The first method that editor will call to a plugin when editor is initializing.\n * It will pass in the editor instance, plugin should take this chance to save the\n * editor reference so that it can call to any editor method or format API later.\n * @param editor The editor object\n */\n initialize(editor: IEditor) {\n this.editor = editor;\n this.disposer = editor.attachDomEvent({\n blur: {\n beforeDispatch: () => {\n this.formatImageWithContentModel(\n editor,\n true /* shouldSelectImage */,\n true /* shouldSelectAsImageSelection*/\n );\n },\n },\n });\n }\n\n /**\n * The last method that editor will call to a plugin before it is disposed.\n * Plugin can take this chance to clear the reference to editor. After this method is\n * called, plugin should not call to any editor method since it will result in error.\n */\n dispose() {\n this.editor = null;\n this.cleanInfo();\n if (this.disposer) {\n this.disposer();\n this.disposer = null;\n }\n }\n\n /**\n * Core method for a plugin. Once an event happens in editor, editor will call this\n * method of each plugin to handle the event as long as the event is not handled\n * exclusively by another plugin.\n * @param event The event to handle:\n */\n onPluginEvent(_event: PluginEvent) {}\n\n private startEditing(\n editor: IEditor,\n image: HTMLImageElement,\n apiOperation?: ImageEditOperation\n ) {\n const imageSpan = image.parentElement;\n if (!imageSpan || (imageSpan && !isElementOfType(imageSpan, 'span'))) {\n return;\n }\n this.imageEditInfo = getSelectedImageMetadata(editor, image);\n this.lastSrc = image.getAttribute('src');\n this.imageHTMLOptions = getHTMLImageOptions(editor, this.options, this.imageEditInfo);\n const {\n resizers,\n rotators,\n wrapper,\n shadowSpan,\n imageClone,\n croppers,\n } = createImageWrapper(\n editor,\n image,\n imageSpan,\n this.options,\n this.imageEditInfo,\n this.imageHTMLOptions,\n apiOperation || this.options.onSelectState\n );\n this.shadowSpan = shadowSpan;\n this.selectedImage = image;\n this.wrapper = wrapper;\n this.clonedImage = imageClone;\n this.wasImageResized = checkIfImageWasResized(image);\n this.resizers = resizers;\n this.rotators = rotators;\n this.croppers = croppers;\n this.zoomScale = editor.getDOMHelper().calculateZoomScale();\n\n editor.setEditorStyle('imageEdit', `outline-style:none!important;`, [\n `span:has(>img#${this.selectedImage.id})`,\n ]);\n }\n\n public startRotateAndResize(\n editor: IEditor,\n image: HTMLImageElement,\n apiOperation?: 'resize' | 'rotate'\n ) {\n if (this.wrapper && this.selectedImage && this.shadowSpan) {\n this.removeImageWrapper();\n }\n this.startEditing(editor, image, apiOperation);\n if (this.selectedImage && this.imageEditInfo && this.wrapper && this.clonedImage) {\n this.dndHelpers = [\n ...getDropAndDragHelpers(\n this.wrapper,\n this.imageEditInfo,\n this.options,\n ImageEditElementClass.ResizeHandle,\n Resizer,\n () => {\n if (\n this.imageEditInfo &&\n this.selectedImage &&\n this.wrapper &&\n this.clonedImage\n ) {\n updateWrapper(\n this.imageEditInfo,\n this.options,\n this.selectedImage,\n this.clonedImage,\n this.wrapper,\n this.resizers\n );\n this.wasImageResized = true;\n }\n },\n this.zoomScale\n ),\n ...getDropAndDragHelpers(\n this.wrapper,\n this.imageEditInfo,\n this.options,\n ImageEditElementClass.RotateHandle,\n Rotator,\n () => {\n if (\n this.imageEditInfo &&\n this.selectedImage &&\n this.wrapper &&\n this.clonedImage\n ) {\n updateWrapper(\n this.imageEditInfo,\n this.options,\n this.selectedImage,\n this.clonedImage,\n this.wrapper,\n this.rotators\n );\n this.updateRotateHandleState(\n editor,\n this.selectedImage,\n this.wrapper,\n this.rotators,\n this.imageEditInfo?.angleRad\n );\n }\n },\n this.zoomScale\n ),\n ];\n\n updateWrapper(\n this.imageEditInfo,\n this.options,\n this.selectedImage,\n this.clonedImage,\n this.wrapper,\n this.resizers\n );\n\n this.updateRotateHandleState(\n editor,\n this.selectedImage,\n this.wrapper,\n this.rotators,\n this.imageEditInfo?.angleRad\n );\n }\n }\n\n private updateRotateHandleState(\n editor: IEditor,\n image: HTMLImageElement,\n wrapper: HTMLSpanElement,\n rotators: HTMLDivElement[],\n angleRad: number | undefined\n ) {\n const viewport = editor.getVisibleViewport();\n const smallImage = isASmallImage(image.width, image.height);\n if (viewport && rotators && rotators.length > 0) {\n const rotator = rotators[0];\n const rotatorHandle = rotator.firstElementChild;\n if (\n isNodeOfType(rotatorHandle, 'ELEMENT_NODE') &&\n isElementOfType(rotatorHandle, 'div')\n ) {\n updateRotateHandle(\n viewport,\n angleRad ?? 0,\n wrapper,\n rotator,\n rotatorHandle,\n smallImage\n );\n }\n }\n }\n\n public isOperationAllowed(operation: ImageEditOperation): boolean {\n return operation === 'resize' || operation === 'rotate' || operation === 'flip';\n }\n\n public canRegenerateImage(image: HTMLImageElement): boolean {\n return canRegenerateImage(image);\n }\n\n public cropImage() {\n const selection = this.editor?.getDOMSelection();\n if (!this.editor || !selection || selection.type !== 'image') {\n return;\n }\n let image = selection.image;\n if (this.wrapper && this.selectedImage && this.shadowSpan) {\n image = this.removeImageWrapper() ?? image;\n }\n\n this.startEditing(this.editor, image, 'crop');\n if (!this.selectedImage || !this.imageEditInfo || !this.wrapper || !this.clonedImage) {\n return;\n }\n this.dndHelpers = [\n ...getDropAndDragHelpers(\n this.wrapper,\n this.imageEditInfo,\n this.options,\n ImageEditElementClass.CropHandle,\n Cropper,\n () => {\n if (\n this.imageEditInfo &&\n this.selectedImage &&\n this.wrapper &&\n this.clonedImage\n ) {\n updateWrapper(\n this.imageEditInfo,\n this.options,\n this.selectedImage,\n this.clonedImage,\n this.wrapper,\n undefined,\n this.croppers\n );\n this.isCropMode = true;\n }\n },\n this.zoomScale\n ),\n ];\n\n updateWrapper(\n this.imageEditInfo,\n this.options,\n this.selectedImage,\n this.clonedImage,\n this.wrapper,\n undefined,\n this.croppers\n );\n }\n\n private editImage(\n editor: IEditor,\n image: HTMLImageElement,\n apiOperation: ImageEditOperation,\n operation: (imageEditInfo: ImageMetadataFormat) => void\n ) {\n if (this.wrapper && this.selectedImage && this.shadowSpan) {\n image = this.removeImageWrapper() ?? image;\n }\n this.startEditing(editor, image, apiOperation);\n if (!this.selectedImage || !this.imageEditInfo || !this.wrapper || !this.clonedImage) {\n return;\n }\n\n operation(this.imageEditInfo);\n\n updateWrapper(\n this.imageEditInfo,\n this.options,\n this.selectedImage,\n this.clonedImage,\n this.wrapper\n );\n\n this.formatImageWithContentModel(\n editor,\n true /* shouldSelect*/,\n true /* shouldSelectAsImageSelection*/\n );\n }\n\n private cleanInfo() {\n this.editor?.setEditorStyle('imageEdit', null);\n this.selectedImage = null;\n this.shadowSpan = null;\n this.wrapper = null;\n this.imageEditInfo = null;\n this.imageHTMLOptions = null;\n this.dndHelpers.forEach(helper => helper.dispose());\n this.dndHelpers = [];\n this.clonedImage = null;\n this.lastSrc = null;\n this.wasImageResized = false;\n this.isCropMode = false;\n this.resizers = [];\n this.rotators = [];\n this.croppers = [];\n }\n\n private formatImageWithContentModel(\n editor: IEditor,\n shouldSelectImage: boolean,\n shouldSelectAsImageSelection: boolean\n ) {\n if (\n this.lastSrc &&\n this.selectedImage &&\n this.imageEditInfo &&\n this.clonedImage &&\n this.shadowSpan\n ) {\n editor.formatContentModel(\n model => {\n const selectedSegmentsAndParagraphs = getSelectedSegmentsAndParagraphs(\n model,\n false\n );\n if (!selectedSegmentsAndParagraphs[0]) {\n return false;\n }\n\n const segment = selectedSegmentsAndParagraphs[0][0];\n const paragraph = selectedSegmentsAndParagraphs[0][1];\n\n if (paragraph && segment.segmentType == 'Image') {\n mutateSegment(paragraph, segment, image => {\n if (\n this.lastSrc &&\n this.selectedImage &&\n this.imageEditInfo &&\n this.clonedImage\n ) {\n applyChange(\n editor,\n this.selectedImage,\n image,\n this.imageEditInfo,\n this.lastSrc,\n this.wasImageResized || this.isCropMode,\n this.clonedImage\n );\n image.isSelected = shouldSelectImage;\n image.isSelectedAsImageSelection = shouldSelectAsImageSelection;\n }\n });\n return true;\n }\n\n return false;\n },\n {\n changeSource: IMAGE_EDIT_CHANGE_SOURCE,\n onNodeCreated: () => {\n this.cleanInfo();\n },\n }\n );\n }\n }\n\n private removeImageWrapper() {\n let image: HTMLImageElement | null = null;\n if (this.shadowSpan && this.shadowSpan.parentElement) {\n if (\n this.shadowSpan.firstElementChild &&\n isNodeOfType(this.shadowSpan.firstElementChild, 'ELEMENT_NODE') &&\n isElementOfType(this.shadowSpan.firstElementChild, 'img')\n ) {\n image = this.shadowSpan.firstElementChild;\n }\n unwrap(this.shadowSpan);\n this.shadowSpan = null;\n this.wrapper = null;\n }\n\n return image;\n }\n\n public flipImage(direction: 'horizontal' | 'vertical') {\n const selection = this.editor?.getDOMSelection();\n if (!this.editor || !selection || selection.type !== 'image') {\n return;\n }\n const image = selection.image;\n if (this.editor) {\n this.editImage(this.editor, image, 'flip', imageEditInfo => {\n const angleRad = imageEditInfo.angleRad || 0;\n const isInVerticalPostion =\n (angleRad >= Math.PI / 2 && angleRad < (3 * Math.PI) / 4) ||\n (angleRad <= -Math.PI / 2 && angleRad > (-3 * Math.PI) / 4);\n if (isInVerticalPostion) {\n if (direction === 'horizontal') {\n imageEditInfo.flippedVertical = !imageEditInfo.flippedVertical;\n } else {\n imageEditInfo.flippedHorizontal = !imageEditInfo.flippedHorizontal;\n }\n } else {\n if (direction === 'vertical') {\n imageEditInfo.flippedVertical = !imageEditInfo.flippedVertical;\n } else {\n imageEditInfo.flippedHorizontal = !imageEditInfo.flippedHorizontal;\n }\n }\n });\n }\n }\n\n public rotateImage(angleRad: number) {\n const selection = this.editor?.getDOMSelection();\n if (!this.editor || !selection || selection.type !== 'image') {\n return;\n }\n const image = selection.image;\n if (this.editor) {\n this.editImage(this.editor, image, 'rotate', imageEditInfo => {\n imageEditInfo.angleRad = (imageEditInfo.angleRad || 0) + angleRad;\n });\n }\n }\n\n //EXPOSED FOR TEST ONLY\n public getWrapper() {\n return this.wrapper;\n }\n}\n"]}
@@ -0,0 +1,12 @@
1
+ import type { CreateElementData } from '../../pluginUtils/CreateElement/CreateElementData';
2
+ import type { DNDDirectionX, DnDDirectionY } from '../types/DragAndDropContext';
3
+ /**
4
+ * @internal
5
+ */
6
+ export interface OnShowResizeHandle {
7
+ (elementData: CreateElementData, x: DNDDirectionX, y: DnDDirectionY): void;
8
+ }
9
+ /**
10
+ * @internal
11
+ */
12
+ export declare function createImageResizer(doc: Document, onShowResizeHandle?: OnShowResizeHandle): HTMLDivElement[];
@@ -0,0 +1,86 @@
1
+ define(["require", "exports", "tslib", "../../pluginUtils/CreateElement/createElement", "../types/ImageEditElementClass", "roosterjs-content-model-dom", "../constants/constants"], function (require, exports, tslib_1, createElement_1, ImageEditElementClass_1, roosterjs_content_model_dom_1, constants_1) {
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.createImageResizer = void 0;
5
+ var RESIZE_HANDLE_MARGIN = 6;
6
+ var RESIZE_HANDLE_SIZE = 10;
7
+ /**
8
+ * @internal
9
+ */
10
+ function createImageResizer(doc, onShowResizeHandle) {
11
+ var cornerElements = getCornerResizeHTML(onShowResizeHandle);
12
+ var sideElements = getSideResizeHTML(onShowResizeHandle);
13
+ var handles = (0, tslib_1.__spreadArray)((0, tslib_1.__spreadArray)([], (0, tslib_1.__read)(cornerElements), false), (0, tslib_1.__read)(sideElements), false).map(function (element) {
14
+ var handle = (0, createElement_1.createElement)(element, doc);
15
+ if ((0, roosterjs_content_model_dom_1.isNodeOfType)(handle, 'ELEMENT_NODE') && (0, roosterjs_content_model_dom_1.isElementOfType)(handle, 'div')) {
16
+ return handle;
17
+ }
18
+ })
19
+ .filter(function (element) { return !!element; });
20
+ return handles;
21
+ }
22
+ exports.createImageResizer = createImageResizer;
23
+ /**
24
+ * @internal
25
+ * Get HTML for resize handles at the corners
26
+ */
27
+ function getCornerResizeHTML(onShowResizeHandle) {
28
+ var result = [];
29
+ constants_1.Xs.forEach(function (x) {
30
+ return constants_1.Ys.forEach(function (y) {
31
+ var elementData = (x == '') == (y == '') ? getResizeHandleHTML(x, y) : null;
32
+ if (onShowResizeHandle && elementData) {
33
+ onShowResizeHandle(elementData, x, y);
34
+ }
35
+ if (elementData) {
36
+ result.push(elementData);
37
+ }
38
+ });
39
+ });
40
+ return result;
41
+ }
42
+ /**
43
+ * @internal
44
+ * Get HTML for resize handles on the sides
45
+ */
46
+ function getSideResizeHTML(onShowResizeHandle) {
47
+ var result = [];
48
+ constants_1.Xs.forEach(function (x) {
49
+ return constants_1.Ys.forEach(function (y) {
50
+ var elementData = (x == '') != (y == '') ? getResizeHandleHTML(x, y) : null;
51
+ if (onShowResizeHandle && elementData) {
52
+ onShowResizeHandle(elementData, x, y);
53
+ }
54
+ if (elementData) {
55
+ result.push(elementData);
56
+ }
57
+ });
58
+ });
59
+ return result;
60
+ }
61
+ var createHandleStyle = function (direction, topOrBottom, leftOrRight) {
62
+ return "position:relative;width:" + RESIZE_HANDLE_SIZE + "px;height:" + RESIZE_HANDLE_SIZE + "px;background-color: #FFFFFF;cursor:" + direction + "-resize;" + topOrBottom + ":-" + RESIZE_HANDLE_MARGIN + "px;" + leftOrRight + ":-" + RESIZE_HANDLE_MARGIN + "px;border-radius:100%;border: 2px solid #bfbfbf;box-shadow: 0px 0.36316px 1.36185px rgba(100, 100, 100, 0.25);";
63
+ };
64
+ function getResizeHandleHTML(x, y) {
65
+ var leftOrRight = x == 'w' ? 'left' : 'right';
66
+ var topOrBottom = y == 'n' ? 'top' : 'bottom';
67
+ var leftOrRightValue = x == '' ? '50%' : '0px';
68
+ var topOrBottomValue = y == '' ? '50%' : '0px';
69
+ var direction = y + x;
70
+ return x == '' && y == ''
71
+ ? null
72
+ : {
73
+ tag: 'div',
74
+ style: "position:absolute;" + leftOrRight + ":" + leftOrRightValue + ";" + topOrBottom + ":" + topOrBottomValue,
75
+ children: [
76
+ {
77
+ tag: 'div',
78
+ style: createHandleStyle(direction, topOrBottom, leftOrRight),
79
+ className: ImageEditElementClass_1.ImageEditElementClass.ResizeHandle,
80
+ dataset: { x: x, y: y },
81
+ },
82
+ ],
83
+ };
84
+ }
85
+ });
86
+ //# sourceMappingURL=createImageResizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createImageResizer.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-plugins/lib/imageEdit/Resizer/createImageResizer.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 { Xs, Ys } from '../constants/constants';\nimport type { CreateElementData } from '../../pluginUtils/CreateElement/CreateElementData';\nimport type { DNDDirectionX, DnDDirectionY } from '../types/DragAndDropContext';\n/**\n * @internal\n */\nexport interface OnShowResizeHandle {\n (elementData: CreateElementData, x: DNDDirectionX, y: DnDDirectionY): void;\n}\n\nconst RESIZE_HANDLE_MARGIN = 6;\nconst RESIZE_HANDLE_SIZE = 10;\n\n/**\n * @internal\n */\nexport function createImageResizer(\n doc: Document,\n onShowResizeHandle?: OnShowResizeHandle\n): HTMLDivElement[] {\n const cornerElements = getCornerResizeHTML(onShowResizeHandle);\n const sideElements = getSideResizeHTML(onShowResizeHandle);\n const handles = [...cornerElements, ...sideElements]\n .map(element => {\n const handle = createElement(element, doc);\n if (isNodeOfType(handle, 'ELEMENT_NODE') && isElementOfType(handle, 'div')) {\n return handle;\n }\n })\n .filter(element => !!element) as HTMLDivElement[];\n return handles;\n}\n\n/**\n * @internal\n * Get HTML for resize handles at the corners\n */\nfunction getCornerResizeHTML(onShowResizeHandle?: OnShowResizeHandle): CreateElementData[] {\n const result: CreateElementData[] = [];\n\n Xs.forEach(x =>\n Ys.forEach(y => {\n const elementData = (x == '') == (y == '') ? getResizeHandleHTML(x, y) : null;\n if (onShowResizeHandle && elementData) {\n onShowResizeHandle(elementData, x, y);\n }\n if (elementData) {\n result.push(elementData);\n }\n })\n );\n return result;\n}\n\n/**\n * @internal\n * Get HTML for resize handles on the sides\n */\nfunction getSideResizeHTML(onShowResizeHandle?: OnShowResizeHandle): CreateElementData[] {\n const result: CreateElementData[] = [];\n Xs.forEach(x =>\n Ys.forEach(y => {\n const elementData = (x == '') != (y == '') ? getResizeHandleHTML(x, y) : null;\n if (onShowResizeHandle && elementData) {\n onShowResizeHandle(elementData, x, y);\n }\n if (elementData) {\n result.push(elementData);\n }\n })\n );\n return result;\n}\n\nconst createHandleStyle = (direction: string, topOrBottom: string, leftOrRight: string) => {\n return `position:relative;width:${RESIZE_HANDLE_SIZE}px;height:${RESIZE_HANDLE_SIZE}px;background-color: #FFFFFF;cursor:${direction}-resize;${topOrBottom}:-${RESIZE_HANDLE_MARGIN}px;${leftOrRight}:-${RESIZE_HANDLE_MARGIN}px;border-radius:100%;border: 2px solid #bfbfbf;box-shadow: 0px 0.36316px 1.36185px rgba(100, 100, 100, 0.25);`;\n};\n\nfunction getResizeHandleHTML(x: DNDDirectionX, y: DnDDirectionY): CreateElementData | null {\n const leftOrRight = x == 'w' ? 'left' : 'right';\n const topOrBottom = y == 'n' ? 'top' : 'bottom';\n const leftOrRightValue = x == '' ? '50%' : '0px';\n const topOrBottomValue = y == '' ? '50%' : '0px';\n const direction = y + x;\n return x == '' && y == ''\n ? null\n : {\n tag: 'div',\n style: `position:absolute;${leftOrRight}:${leftOrRightValue};${topOrBottom}:${topOrBottomValue}`,\n children: [\n {\n tag: 'div',\n style: createHandleStyle(direction, topOrBottom, leftOrRight),\n className: ImageEditElementClass.ResizeHandle,\n dataset: { x, y },\n },\n ],\n };\n}\n"]}
@@ -0,0 +1,8 @@
1
+ import type { DragAndDropHandler } from '../../pluginUtils/DragAndDrop/DragAndDropHandler';
2
+ import type { ImageResizeMetadataFormat } from 'roosterjs-content-model-types';
3
+ import type { DragAndDropContext } from '../types/DragAndDropContext';
4
+ /**
5
+ * @internal
6
+ * The resize drag and drop handler
7
+ */
8
+ export declare const Resizer: DragAndDropHandler<DragAndDropContext, ImageResizeMetadataFormat>;
@@ -0,0 +1,61 @@
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.Resizer = void 0;
5
+ /**
6
+ * @internal
7
+ * The resize drag and drop handler
8
+ */
9
+ exports.Resizer = {
10
+ onDragStart: function (_a) {
11
+ var editInfo = _a.editInfo;
12
+ return ((0, tslib_1.__assign)({}, editInfo));
13
+ },
14
+ onDragging: function (_a, e, base, deltaX, deltaY) {
15
+ var _b;
16
+ var _c;
17
+ var x = _a.x, y = _a.y, editInfo = _a.editInfo, options = _a.options;
18
+ if (base.heightPx &&
19
+ base.widthPx &&
20
+ options.minWidth !== undefined &&
21
+ options.minHeight !== undefined) {
22
+ var ratio = base.widthPx > 0 && base.heightPx > 0 ? (base.widthPx * 1.0) / base.heightPx : 0;
23
+ _b = (0, tslib_1.__read)((0, imageEditUtils_1.rotateCoordinate)(deltaX, deltaY, (_c = editInfo.angleRad) !== null && _c !== void 0 ? _c : 0), 2), deltaX = _b[0], deltaY = _b[1];
24
+ var horizontalOnly = x == '';
25
+ var verticalOnly = y == '';
26
+ var shouldPreserveRatio = !(horizontalOnly || verticalOnly) && (options.preserveRatio || e.shiftKey);
27
+ var newWidth = horizontalOnly
28
+ ? base.widthPx
29
+ : Math.max(base.widthPx + deltaX * (x == 'w' ? -1 : 1), options.minWidth);
30
+ var newHeight = verticalOnly
31
+ ? base.heightPx
32
+ : Math.max(base.heightPx + deltaY * (y == 'n' ? -1 : 1), options.minHeight);
33
+ if (shouldPreserveRatio && ratio > 0) {
34
+ if (ratio > 1) {
35
+ // first sure newHeight is right,calculate newWidth
36
+ newWidth = newHeight * ratio;
37
+ if (newWidth < options.minWidth) {
38
+ newWidth = options.minWidth;
39
+ newHeight = newWidth / ratio;
40
+ }
41
+ }
42
+ else {
43
+ // first sure newWidth is right,calculate newHeight
44
+ newHeight = newWidth / ratio;
45
+ if (newHeight < options.minHeight) {
46
+ newHeight = options.minHeight;
47
+ newWidth = newHeight * ratio;
48
+ }
49
+ }
50
+ }
51
+ editInfo.widthPx = newWidth;
52
+ editInfo.heightPx = newHeight;
53
+ return true;
54
+ }
55
+ else {
56
+ return false;
57
+ }
58
+ },
59
+ };
60
+ });
61
+ //# sourceMappingURL=resizerContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resizerContext.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-plugins/lib/imageEdit/Resizer/resizerContext.ts"],"names":[],"mappings":";;;;IAKA;;;OAGG;IACU,QAAA,OAAO,GAAsE;QACtF,WAAW,EAAE,UAAC,EAAY;gBAAV,QAAQ,cAAA;YAAO,OAAA,2BAAM,QAAQ,EAAG;QAAjB,CAAiB;QAChD,UAAU,EAAE,UAAC,EAA2B,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM;;;gBAAlD,CAAC,OAAA,EAAE,CAAC,OAAA,EAAE,QAAQ,cAAA,EAAE,OAAO,aAAA;YAClC,IACI,IAAI,CAAC,QAAQ;gBACb,IAAI,CAAC,OAAO;gBACZ,OAAO,CAAC,QAAQ,KAAK,SAAS;gBAC9B,OAAO,CAAC,SAAS,KAAK,SAAS,EACjC;gBACE,IAAM,KAAK,GACP,IAAI,CAAC,OAAO,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;gBACrF,KAAA,oBAAmB,IAAA,iCAAgB,EAAC,MAAM,EAAE,MAAM,EAAE,MAAA,QAAQ,CAAC,QAAQ,mCAAI,CAAC,CAAC,IAAA,EAA1E,MAAM,QAAA,EAAE,MAAM,QAAA,CAA6D;gBAC5E,IAAM,cAAc,GAAG,CAAC,IAAI,EAAE,CAAC;gBAC/B,IAAM,YAAY,GAAG,CAAC,IAAI,EAAE,CAAC;gBAC7B,IAAM,mBAAmB,GACrB,CAAC,CAAC,cAAc,IAAI,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC;gBAC/E,IAAI,QAAQ,GAAG,cAAc;oBACzB,CAAC,CAAC,IAAI,CAAC,OAAO;oBACd,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,GAAG,MAAM,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;gBAC9E,IAAI,SAAS,GAAG,YAAY;oBACxB,CAAC,CAAC,IAAI,CAAC,QAAQ;oBACf,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,GAAG,MAAM,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;gBAEhF,IAAI,mBAAmB,IAAI,KAAK,GAAG,CAAC,EAAE;oBAClC,IAAI,KAAK,GAAG,CAAC,EAAE;wBACX,mDAAmD;wBACnD,QAAQ,GAAG,SAAS,GAAG,KAAK,CAAC;wBAC7B,IAAI,QAAQ,GAAG,OAAO,CAAC,QAAQ,EAAE;4BAC7B,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;4BAC5B,SAAS,GAAG,QAAQ,GAAG,KAAK,CAAC;yBAChC;qBACJ;yBAAM;wBACH,mDAAmD;wBACnD,SAAS,GAAG,QAAQ,GAAG,KAAK,CAAC;wBAC7B,IAAI,SAAS,GAAG,OAAO,CAAC,SAAS,EAAE;4BAC/B,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;4BAC9B,QAAQ,GAAG,SAAS,GAAG,KAAK,CAAC;yBAChC;qBACJ;iBACJ;gBAED,QAAQ,CAAC,OAAO,GAAG,QAAQ,CAAC;gBAC5B,QAAQ,CAAC,QAAQ,GAAG,SAAS,CAAC;gBAC9B,OAAO,IAAI,CAAC;aACf;iBAAM;gBACH,OAAO,KAAK,CAAC;aAChB;QACL,CAAC;KACJ,CAAC","sourcesContent":["import { rotateCoordinate } from '../utils/imageEditUtils';\nimport type { DragAndDropHandler } from '../../pluginUtils/DragAndDrop/DragAndDropHandler';\nimport type { ImageResizeMetadataFormat } from 'roosterjs-content-model-types';\nimport type { DragAndDropContext } from '../types/DragAndDropContext';\n\n/**\n * @internal\n * The resize drag and drop handler\n */\nexport const Resizer: DragAndDropHandler<DragAndDropContext, ImageResizeMetadataFormat> = {\n onDragStart: ({ editInfo }) => ({ ...editInfo }),\n onDragging: ({ x, y, editInfo, options }, e, base, deltaX, deltaY) => {\n if (\n base.heightPx &&\n base.widthPx &&\n options.minWidth !== undefined &&\n options.minHeight !== undefined\n ) {\n const ratio =\n base.widthPx > 0 && base.heightPx > 0 ? (base.widthPx * 1.0) / base.heightPx : 0;\n [deltaX, deltaY] = rotateCoordinate(deltaX, deltaY, editInfo.angleRad ?? 0);\n const horizontalOnly = x == '';\n const verticalOnly = y == '';\n const shouldPreserveRatio =\n !(horizontalOnly || verticalOnly) && (options.preserveRatio || e.shiftKey);\n let newWidth = horizontalOnly\n ? base.widthPx\n : Math.max(base.widthPx + deltaX * (x == 'w' ? -1 : 1), options.minWidth);\n let newHeight = verticalOnly\n ? base.heightPx\n : Math.max(base.heightPx + deltaY * (y == 'n' ? -1 : 1), options.minHeight);\n\n if (shouldPreserveRatio && ratio > 0) {\n if (ratio > 1) {\n // first sure newHeight is right,calculate newWidth\n newWidth = newHeight * ratio;\n if (newWidth < options.minWidth) {\n newWidth = options.minWidth;\n newHeight = newWidth / ratio;\n }\n } else {\n // first sure newWidth is right,calculate newHeight\n newHeight = newWidth / ratio;\n if (newHeight < options.minHeight) {\n newHeight = options.minHeight;\n newWidth = newHeight * ratio;\n }\n }\n }\n\n editInfo.widthPx = newWidth;\n editInfo.heightPx = newHeight;\n return true;\n } else {\n return false;\n }\n },\n};\n"]}
@@ -0,0 +1,4 @@
1
+ /**
2
+ * @internal
3
+ */
4
+ export declare function updateSideHandlesVisibility(handles: HTMLDivElement[], isSmall: boolean): void;
@@ -0,0 +1,19 @@
1
+ define(["require", "exports"], function (require, exports) {
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.updateSideHandlesVisibility = void 0;
5
+ /**
6
+ * @internal
7
+ */
8
+ function updateSideHandlesVisibility(handles, isSmall) {
9
+ handles.forEach(function (handle) {
10
+ var _a = handle.dataset, y = _a.y, x = _a.x;
11
+ var coordinate = (y !== null && y !== void 0 ? y : '') + (x !== null && x !== void 0 ? x : '');
12
+ var directions = ['n', 's', 'e', 'w'];
13
+ var isSideHandle = directions.indexOf(coordinate) > -1;
14
+ handle.style.display = isSideHandle && isSmall ? 'none' : '';
15
+ });
16
+ }
17
+ exports.updateSideHandlesVisibility = updateSideHandlesVisibility;
18
+ });
19
+ //# sourceMappingURL=updateSideHandlesVisibility.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"updateSideHandlesVisibility.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-plugins/lib/imageEdit/Resizer/updateSideHandlesVisibility.ts"],"names":[],"mappings":";;;;IAAA;;OAEG;IACH,SAAgB,2BAA2B,CAAC,OAAyB,EAAE,OAAgB;QACnF,OAAO,CAAC,OAAO,CAAC,UAAA,MAAM;YACZ,IAAA,KAAW,MAAM,CAAC,OAAO,EAAvB,CAAC,OAAA,EAAE,CAAC,OAAmB,CAAC;YAChC,IAAM,UAAU,GAAG,CAAC,CAAC,aAAD,CAAC,cAAD,CAAC,GAAI,EAAE,CAAC,GAAG,CAAC,CAAC,aAAD,CAAC,cAAD,CAAC,GAAI,EAAE,CAAC,CAAC;YACzC,IAAM,UAAU,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;YACxC,IAAM,YAAY,GAAG,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;YACzD,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,YAAY,IAAI,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;QACjE,CAAC,CAAC,CAAC;IACP,CAAC;IARD,kEAQC","sourcesContent":["/**\n * @internal\n */\nexport function updateSideHandlesVisibility(handles: HTMLDivElement[], isSmall: boolean) {\n handles.forEach(handle => {\n const { y, x } = handle.dataset;\n const coordinate = (y ?? '') + (x ?? '');\n const directions = ['n', 's', 'e', 'w'];\n const isSideHandle = directions.indexOf(coordinate) > -1;\n handle.style.display = isSideHandle && isSmall ? 'none' : '';\n });\n}\n"]}
@@ -0,0 +1,6 @@
1
+ import type { ImageHtmlOptions } from '../types/ImageHtmlOptions';
2
+ /**
3
+ * @internal
4
+ * Get HTML for rotate elements, including the rotate handle with icon, and a line between the handle and the image
5
+ */
6
+ export declare function createImageRotator(doc: Document, htmlOptions: ImageHtmlOptions): HTMLDivElement[];