roosterjs-content-model-plugins 9.4.1 → 9.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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,325 @@
1
+ import { __read, __spreadArray } from "tslib";
2
+ import { applyChange } from './utils/applyChange';
3
+ import { canRegenerateImage } from './utils/canRegenerateImage';
4
+ import { checkIfImageWasResized, isASmallImage } from './utils/imageEditUtils';
5
+ import { createImageWrapper } from './utils/createImageWrapper';
6
+ import { Cropper } from './Cropper/cropperContext';
7
+ import { getDropAndDragHelpers } from './utils/getDropAndDragHelpers';
8
+ import { getHTMLImageOptions } from './utils/getHTMLImageOptions';
9
+ import { getSelectedImageMetadata } from './utils/updateImageEditInfo';
10
+ import { ImageEditElementClass } from './types/ImageEditElementClass';
11
+ import { Resizer } from './Resizer/resizerContext';
12
+ import { Rotator } from './Rotator/rotatorContext';
13
+ import { updateRotateHandle } from './Rotator/updateRotateHandle';
14
+ import { updateWrapper } from './utils/updateWrapper';
15
+ import { getSelectedSegmentsAndParagraphs, isElementOfType, isNodeOfType, mutateSegment, unwrap, } from 'roosterjs-content-model-dom';
16
+ var DefaultOptions = {
17
+ borderColor: '#DB626C',
18
+ minWidth: 10,
19
+ minHeight: 10,
20
+ preserveRatio: true,
21
+ disableRotate: false,
22
+ disableSideResize: false,
23
+ onSelectState: 'resize',
24
+ };
25
+ var IMAGE_EDIT_CHANGE_SOURCE = 'ImageEdit';
26
+ /**
27
+ * ImageEdit plugin handles the following image editing features:
28
+ * - Resize image
29
+ * - Crop image
30
+ * - Rotate image
31
+ * - Flip image
32
+ */
33
+ var ImageEditPlugin = /** @class */ (function () {
34
+ function ImageEditPlugin(options) {
35
+ if (options === void 0) { options = DefaultOptions; }
36
+ this.options = options;
37
+ this.editor = null;
38
+ this.shadowSpan = null;
39
+ this.selectedImage = null;
40
+ this.wrapper = null;
41
+ this.imageEditInfo = null;
42
+ this.imageHTMLOptions = null;
43
+ this.dndHelpers = [];
44
+ this.clonedImage = null;
45
+ this.lastSrc = null;
46
+ this.wasImageResized = false;
47
+ this.isCropMode = false;
48
+ this.resizers = [];
49
+ this.rotators = [];
50
+ this.croppers = [];
51
+ this.zoomScale = 1;
52
+ this.disposer = null;
53
+ }
54
+ /**
55
+ * Get name of this plugin
56
+ */
57
+ ImageEditPlugin.prototype.getName = function () {
58
+ return 'ImageEdit';
59
+ };
60
+ /**
61
+ * The first method that editor will call to a plugin when editor is initializing.
62
+ * It will pass in the editor instance, plugin should take this chance to save the
63
+ * editor reference so that it can call to any editor method or format API later.
64
+ * @param editor The editor object
65
+ */
66
+ ImageEditPlugin.prototype.initialize = function (editor) {
67
+ var _this = this;
68
+ this.editor = editor;
69
+ this.disposer = editor.attachDomEvent({
70
+ blur: {
71
+ beforeDispatch: function () {
72
+ _this.formatImageWithContentModel(editor, true /* shouldSelectImage */, true /* shouldSelectAsImageSelection*/);
73
+ },
74
+ },
75
+ });
76
+ };
77
+ /**
78
+ * The last method that editor will call to a plugin before it is disposed.
79
+ * Plugin can take this chance to clear the reference to editor. After this method is
80
+ * called, plugin should not call to any editor method since it will result in error.
81
+ */
82
+ ImageEditPlugin.prototype.dispose = function () {
83
+ this.editor = null;
84
+ this.cleanInfo();
85
+ if (this.disposer) {
86
+ this.disposer();
87
+ this.disposer = null;
88
+ }
89
+ };
90
+ /**
91
+ * Core method for a plugin. Once an event happens in editor, editor will call this
92
+ * method of each plugin to handle the event as long as the event is not handled
93
+ * exclusively by another plugin.
94
+ * @param event The event to handle:
95
+ */
96
+ ImageEditPlugin.prototype.onPluginEvent = function (_event) { };
97
+ ImageEditPlugin.prototype.startEditing = function (editor, image, apiOperation) {
98
+ var imageSpan = image.parentElement;
99
+ if (!imageSpan || (imageSpan && !isElementOfType(imageSpan, 'span'))) {
100
+ return;
101
+ }
102
+ this.imageEditInfo = getSelectedImageMetadata(editor, image);
103
+ this.lastSrc = image.getAttribute('src');
104
+ this.imageHTMLOptions = getHTMLImageOptions(editor, this.options, this.imageEditInfo);
105
+ var _a = 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;
106
+ this.shadowSpan = shadowSpan;
107
+ this.selectedImage = image;
108
+ this.wrapper = wrapper;
109
+ this.clonedImage = imageClone;
110
+ this.wasImageResized = checkIfImageWasResized(image);
111
+ this.resizers = resizers;
112
+ this.rotators = rotators;
113
+ this.croppers = croppers;
114
+ this.zoomScale = editor.getDOMHelper().calculateZoomScale();
115
+ editor.setEditorStyle('imageEdit', "outline-style:none!important;", [
116
+ "span:has(>img#" + this.selectedImage.id + ")",
117
+ ]);
118
+ };
119
+ ImageEditPlugin.prototype.startRotateAndResize = function (editor, image, apiOperation) {
120
+ var _this = this;
121
+ var _a;
122
+ if (this.wrapper && this.selectedImage && this.shadowSpan) {
123
+ this.removeImageWrapper();
124
+ }
125
+ this.startEditing(editor, image, apiOperation);
126
+ if (this.selectedImage && this.imageEditInfo && this.wrapper && this.clonedImage) {
127
+ this.dndHelpers = __spreadArray(__spreadArray([], __read(getDropAndDragHelpers(this.wrapper, this.imageEditInfo, this.options, ImageEditElementClass.ResizeHandle, Resizer, function () {
128
+ if (_this.imageEditInfo &&
129
+ _this.selectedImage &&
130
+ _this.wrapper &&
131
+ _this.clonedImage) {
132
+ updateWrapper(_this.imageEditInfo, _this.options, _this.selectedImage, _this.clonedImage, _this.wrapper, _this.resizers);
133
+ _this.wasImageResized = true;
134
+ }
135
+ }, this.zoomScale)), false), __read(getDropAndDragHelpers(this.wrapper, this.imageEditInfo, this.options, ImageEditElementClass.RotateHandle, Rotator, function () {
136
+ var _a;
137
+ if (_this.imageEditInfo &&
138
+ _this.selectedImage &&
139
+ _this.wrapper &&
140
+ _this.clonedImage) {
141
+ updateWrapper(_this.imageEditInfo, _this.options, _this.selectedImage, _this.clonedImage, _this.wrapper, _this.rotators);
142
+ _this.updateRotateHandleState(editor, _this.selectedImage, _this.wrapper, _this.rotators, (_a = _this.imageEditInfo) === null || _a === void 0 ? void 0 : _a.angleRad);
143
+ }
144
+ }, this.zoomScale)), false);
145
+ updateWrapper(this.imageEditInfo, this.options, this.selectedImage, this.clonedImage, this.wrapper, this.resizers);
146
+ this.updateRotateHandleState(editor, this.selectedImage, this.wrapper, this.rotators, (_a = this.imageEditInfo) === null || _a === void 0 ? void 0 : _a.angleRad);
147
+ }
148
+ };
149
+ ImageEditPlugin.prototype.updateRotateHandleState = function (editor, image, wrapper, rotators, angleRad) {
150
+ var viewport = editor.getVisibleViewport();
151
+ var smallImage = isASmallImage(image.width, image.height);
152
+ if (viewport && rotators && rotators.length > 0) {
153
+ var rotator = rotators[0];
154
+ var rotatorHandle = rotator.firstElementChild;
155
+ if (isNodeOfType(rotatorHandle, 'ELEMENT_NODE') &&
156
+ isElementOfType(rotatorHandle, 'div')) {
157
+ updateRotateHandle(viewport, angleRad !== null && angleRad !== void 0 ? angleRad : 0, wrapper, rotator, rotatorHandle, smallImage);
158
+ }
159
+ }
160
+ };
161
+ ImageEditPlugin.prototype.isOperationAllowed = function (operation) {
162
+ return operation === 'resize' || operation === 'rotate' || operation === 'flip';
163
+ };
164
+ ImageEditPlugin.prototype.canRegenerateImage = function (image) {
165
+ return canRegenerateImage(image);
166
+ };
167
+ ImageEditPlugin.prototype.cropImage = function () {
168
+ var _this = this;
169
+ var _a, _b;
170
+ var selection = (_a = this.editor) === null || _a === void 0 ? void 0 : _a.getDOMSelection();
171
+ if (!this.editor || !selection || selection.type !== 'image') {
172
+ return;
173
+ }
174
+ var image = selection.image;
175
+ if (this.wrapper && this.selectedImage && this.shadowSpan) {
176
+ image = (_b = this.removeImageWrapper()) !== null && _b !== void 0 ? _b : image;
177
+ }
178
+ this.startEditing(this.editor, image, 'crop');
179
+ if (!this.selectedImage || !this.imageEditInfo || !this.wrapper || !this.clonedImage) {
180
+ return;
181
+ }
182
+ this.dndHelpers = __spreadArray([], __read(getDropAndDragHelpers(this.wrapper, this.imageEditInfo, this.options, ImageEditElementClass.CropHandle, Cropper, function () {
183
+ if (_this.imageEditInfo &&
184
+ _this.selectedImage &&
185
+ _this.wrapper &&
186
+ _this.clonedImage) {
187
+ updateWrapper(_this.imageEditInfo, _this.options, _this.selectedImage, _this.clonedImage, _this.wrapper, undefined, _this.croppers);
188
+ _this.isCropMode = true;
189
+ }
190
+ }, this.zoomScale)), false);
191
+ updateWrapper(this.imageEditInfo, this.options, this.selectedImage, this.clonedImage, this.wrapper, undefined, this.croppers);
192
+ };
193
+ ImageEditPlugin.prototype.editImage = function (editor, image, apiOperation, operation) {
194
+ var _a;
195
+ if (this.wrapper && this.selectedImage && this.shadowSpan) {
196
+ image = (_a = this.removeImageWrapper()) !== null && _a !== void 0 ? _a : image;
197
+ }
198
+ this.startEditing(editor, image, apiOperation);
199
+ if (!this.selectedImage || !this.imageEditInfo || !this.wrapper || !this.clonedImage) {
200
+ return;
201
+ }
202
+ operation(this.imageEditInfo);
203
+ updateWrapper(this.imageEditInfo, this.options, this.selectedImage, this.clonedImage, this.wrapper);
204
+ this.formatImageWithContentModel(editor, true /* shouldSelect*/, true /* shouldSelectAsImageSelection*/);
205
+ };
206
+ ImageEditPlugin.prototype.cleanInfo = function () {
207
+ var _a;
208
+ (_a = this.editor) === null || _a === void 0 ? void 0 : _a.setEditorStyle('imageEdit', null);
209
+ this.selectedImage = null;
210
+ this.shadowSpan = null;
211
+ this.wrapper = null;
212
+ this.imageEditInfo = null;
213
+ this.imageHTMLOptions = null;
214
+ this.dndHelpers.forEach(function (helper) { return helper.dispose(); });
215
+ this.dndHelpers = [];
216
+ this.clonedImage = null;
217
+ this.lastSrc = null;
218
+ this.wasImageResized = false;
219
+ this.isCropMode = false;
220
+ this.resizers = [];
221
+ this.rotators = [];
222
+ this.croppers = [];
223
+ };
224
+ ImageEditPlugin.prototype.formatImageWithContentModel = function (editor, shouldSelectImage, shouldSelectAsImageSelection) {
225
+ var _this = this;
226
+ if (this.lastSrc &&
227
+ this.selectedImage &&
228
+ this.imageEditInfo &&
229
+ this.clonedImage &&
230
+ this.shadowSpan) {
231
+ editor.formatContentModel(function (model) {
232
+ var selectedSegmentsAndParagraphs = getSelectedSegmentsAndParagraphs(model, false);
233
+ if (!selectedSegmentsAndParagraphs[0]) {
234
+ return false;
235
+ }
236
+ var segment = selectedSegmentsAndParagraphs[0][0];
237
+ var paragraph = selectedSegmentsAndParagraphs[0][1];
238
+ if (paragraph && segment.segmentType == 'Image') {
239
+ mutateSegment(paragraph, segment, function (image) {
240
+ if (_this.lastSrc &&
241
+ _this.selectedImage &&
242
+ _this.imageEditInfo &&
243
+ _this.clonedImage) {
244
+ applyChange(editor, _this.selectedImage, image, _this.imageEditInfo, _this.lastSrc, _this.wasImageResized || _this.isCropMode, _this.clonedImage);
245
+ image.isSelected = shouldSelectImage;
246
+ image.isSelectedAsImageSelection = shouldSelectAsImageSelection;
247
+ }
248
+ });
249
+ return true;
250
+ }
251
+ return false;
252
+ }, {
253
+ changeSource: IMAGE_EDIT_CHANGE_SOURCE,
254
+ onNodeCreated: function () {
255
+ _this.cleanInfo();
256
+ },
257
+ });
258
+ }
259
+ };
260
+ ImageEditPlugin.prototype.removeImageWrapper = function () {
261
+ var image = null;
262
+ if (this.shadowSpan && this.shadowSpan.parentElement) {
263
+ if (this.shadowSpan.firstElementChild &&
264
+ isNodeOfType(this.shadowSpan.firstElementChild, 'ELEMENT_NODE') &&
265
+ isElementOfType(this.shadowSpan.firstElementChild, 'img')) {
266
+ image = this.shadowSpan.firstElementChild;
267
+ }
268
+ unwrap(this.shadowSpan);
269
+ this.shadowSpan = null;
270
+ this.wrapper = null;
271
+ }
272
+ return image;
273
+ };
274
+ ImageEditPlugin.prototype.flipImage = function (direction) {
275
+ var _a;
276
+ var selection = (_a = this.editor) === null || _a === void 0 ? void 0 : _a.getDOMSelection();
277
+ if (!this.editor || !selection || selection.type !== 'image') {
278
+ return;
279
+ }
280
+ var image = selection.image;
281
+ if (this.editor) {
282
+ this.editImage(this.editor, image, 'flip', function (imageEditInfo) {
283
+ var angleRad = imageEditInfo.angleRad || 0;
284
+ var isInVerticalPostion = (angleRad >= Math.PI / 2 && angleRad < (3 * Math.PI) / 4) ||
285
+ (angleRad <= -Math.PI / 2 && angleRad > (-3 * Math.PI) / 4);
286
+ if (isInVerticalPostion) {
287
+ if (direction === 'horizontal') {
288
+ imageEditInfo.flippedVertical = !imageEditInfo.flippedVertical;
289
+ }
290
+ else {
291
+ imageEditInfo.flippedHorizontal = !imageEditInfo.flippedHorizontal;
292
+ }
293
+ }
294
+ else {
295
+ if (direction === 'vertical') {
296
+ imageEditInfo.flippedVertical = !imageEditInfo.flippedVertical;
297
+ }
298
+ else {
299
+ imageEditInfo.flippedHorizontal = !imageEditInfo.flippedHorizontal;
300
+ }
301
+ }
302
+ });
303
+ }
304
+ };
305
+ ImageEditPlugin.prototype.rotateImage = function (angleRad) {
306
+ var _a;
307
+ var selection = (_a = this.editor) === null || _a === void 0 ? void 0 : _a.getDOMSelection();
308
+ if (!this.editor || !selection || selection.type !== 'image') {
309
+ return;
310
+ }
311
+ var image = selection.image;
312
+ if (this.editor) {
313
+ this.editImage(this.editor, image, 'rotate', function (imageEditInfo) {
314
+ imageEditInfo.angleRad = (imageEditInfo.angleRad || 0) + angleRad;
315
+ });
316
+ }
317
+ };
318
+ //EXPOSED FOR TEST ONLY
319
+ ImageEditPlugin.prototype.getWrapper = function () {
320
+ return this.wrapper;
321
+ };
322
+ return ImageEditPlugin;
323
+ }());
324
+ export { ImageEditPlugin };
325
+ //# 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,85 @@
1
+ import { __read, __spreadArray } from "tslib";
2
+ import { createElement } from '../../pluginUtils/CreateElement/createElement';
3
+ import { ImageEditElementClass } from '../types/ImageEditElementClass';
4
+ import { isElementOfType, isNodeOfType } from 'roosterjs-content-model-dom';
5
+ import { Xs, Ys } from '../constants/constants';
6
+ var RESIZE_HANDLE_MARGIN = 6;
7
+ var RESIZE_HANDLE_SIZE = 10;
8
+ /**
9
+ * @internal
10
+ */
11
+ export function createImageResizer(doc, onShowResizeHandle) {
12
+ var cornerElements = getCornerResizeHTML(onShowResizeHandle);
13
+ var sideElements = getSideResizeHTML(onShowResizeHandle);
14
+ var handles = __spreadArray(__spreadArray([], __read(cornerElements), false), __read(sideElements), false).map(function (element) {
15
+ var handle = createElement(element, doc);
16
+ if (isNodeOfType(handle, 'ELEMENT_NODE') && isElementOfType(handle, 'div')) {
17
+ return handle;
18
+ }
19
+ })
20
+ .filter(function (element) { return !!element; });
21
+ return handles;
22
+ }
23
+ /**
24
+ * @internal
25
+ * Get HTML for resize handles at the corners
26
+ */
27
+ function getCornerResizeHTML(onShowResizeHandle) {
28
+ var result = [];
29
+ Xs.forEach(function (x) {
30
+ return 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
+ Xs.forEach(function (x) {
49
+ return 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.ResizeHandle,
80
+ dataset: { x: x, y: y },
81
+ },
82
+ ],
83
+ };
84
+ }
85
+ //# 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,58 @@
1
+ import { __assign, __read } from "tslib";
2
+ import { rotateCoordinate } from '../utils/imageEditUtils';
3
+ /**
4
+ * @internal
5
+ * The resize drag and drop handler
6
+ */
7
+ export var Resizer = {
8
+ onDragStart: function (_a) {
9
+ var editInfo = _a.editInfo;
10
+ return (__assign({}, editInfo));
11
+ },
12
+ onDragging: function (_a, e, base, deltaX, deltaY) {
13
+ var _b;
14
+ var _c;
15
+ var x = _a.x, y = _a.y, editInfo = _a.editInfo, options = _a.options;
16
+ if (base.heightPx &&
17
+ base.widthPx &&
18
+ options.minWidth !== undefined &&
19
+ options.minHeight !== undefined) {
20
+ var ratio = base.widthPx > 0 && base.heightPx > 0 ? (base.widthPx * 1.0) / base.heightPx : 0;
21
+ _b = __read(rotateCoordinate(deltaX, deltaY, (_c = editInfo.angleRad) !== null && _c !== void 0 ? _c : 0), 2), deltaX = _b[0], deltaY = _b[1];
22
+ var horizontalOnly = x == '';
23
+ var verticalOnly = y == '';
24
+ var shouldPreserveRatio = !(horizontalOnly || verticalOnly) && (options.preserveRatio || e.shiftKey);
25
+ var newWidth = horizontalOnly
26
+ ? base.widthPx
27
+ : Math.max(base.widthPx + deltaX * (x == 'w' ? -1 : 1), options.minWidth);
28
+ var newHeight = verticalOnly
29
+ ? base.heightPx
30
+ : Math.max(base.heightPx + deltaY * (y == 'n' ? -1 : 1), options.minHeight);
31
+ if (shouldPreserveRatio && ratio > 0) {
32
+ if (ratio > 1) {
33
+ // first sure newHeight is right,calculate newWidth
34
+ newWidth = newHeight * ratio;
35
+ if (newWidth < options.minWidth) {
36
+ newWidth = options.minWidth;
37
+ newHeight = newWidth / ratio;
38
+ }
39
+ }
40
+ else {
41
+ // first sure newWidth is right,calculate newHeight
42
+ newHeight = newWidth / ratio;
43
+ if (newHeight < options.minHeight) {
44
+ newHeight = options.minHeight;
45
+ newWidth = newHeight * ratio;
46
+ }
47
+ }
48
+ }
49
+ editInfo.widthPx = newWidth;
50
+ editInfo.heightPx = newHeight;
51
+ return true;
52
+ }
53
+ else {
54
+ return false;
55
+ }
56
+ },
57
+ };
58
+ //# 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":";AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAK3D;;;GAGG;AACH,MAAM,CAAC,IAAM,OAAO,GAAsE;IACtF,WAAW,EAAE,UAAC,EAAY;YAAV,QAAQ,cAAA;QAAO,OAAA,cAAM,QAAQ,EAAG;IAAjB,CAAiB;IAChD,UAAU,EAAE,UAAC,EAA2B,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM;;;YAAlD,CAAC,OAAA,EAAE,CAAC,OAAA,EAAE,QAAQ,cAAA,EAAE,OAAO,aAAA;QAClC,IACI,IAAI,CAAC,QAAQ;YACb,IAAI,CAAC,OAAO;YACZ,OAAO,CAAC,QAAQ,KAAK,SAAS;YAC9B,OAAO,CAAC,SAAS,KAAK,SAAS,EACjC;YACE,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;YACrF,KAAA,OAAmB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAA,QAAQ,CAAC,QAAQ,mCAAI,CAAC,CAAC,IAAA,EAA1E,MAAM,QAAA,EAAE,MAAM,QAAA,CAA6D;YAC5E,IAAM,cAAc,GAAG,CAAC,IAAI,EAAE,CAAC;YAC/B,IAAM,YAAY,GAAG,CAAC,IAAI,EAAE,CAAC;YAC7B,IAAM,mBAAmB,GACrB,CAAC,CAAC,cAAc,IAAI,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC;YAC/E,IAAI,QAAQ,GAAG,cAAc;gBACzB,CAAC,CAAC,IAAI,CAAC,OAAO;gBACd,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;YAC9E,IAAI,SAAS,GAAG,YAAY;gBACxB,CAAC,CAAC,IAAI,CAAC,QAAQ;gBACf,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;YAEhF,IAAI,mBAAmB,IAAI,KAAK,GAAG,CAAC,EAAE;gBAClC,IAAI,KAAK,GAAG,CAAC,EAAE;oBACX,mDAAmD;oBACnD,QAAQ,GAAG,SAAS,GAAG,KAAK,CAAC;oBAC7B,IAAI,QAAQ,GAAG,OAAO,CAAC,QAAQ,EAAE;wBAC7B,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;wBAC5B,SAAS,GAAG,QAAQ,GAAG,KAAK,CAAC;qBAChC;iBACJ;qBAAM;oBACH,mDAAmD;oBACnD,SAAS,GAAG,QAAQ,GAAG,KAAK,CAAC;oBAC7B,IAAI,SAAS,GAAG,OAAO,CAAC,SAAS,EAAE;wBAC/B,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;wBAC9B,QAAQ,GAAG,SAAS,GAAG,KAAK,CAAC;qBAChC;iBACJ;aACJ;YAED,QAAQ,CAAC,OAAO,GAAG,QAAQ,CAAC;YAC5B,QAAQ,CAAC,QAAQ,GAAG,SAAS,CAAC;YAC9B,OAAO,IAAI,CAAC;SACf;aAAM;YACH,OAAO,KAAK,CAAC;SAChB;IACL,CAAC;CACJ,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,13 @@
1
+ /**
2
+ * @internal
3
+ */
4
+ export function updateSideHandlesVisibility(handles, isSmall) {
5
+ handles.forEach(function (handle) {
6
+ var _a = handle.dataset, y = _a.y, x = _a.x;
7
+ var coordinate = (y !== null && y !== void 0 ? y : '') + (x !== null && x !== void 0 ? x : '');
8
+ var directions = ['n', 's', 'e', 'w'];
9
+ var isSideHandle = directions.indexOf(coordinate) > -1;
10
+ handle.style.display = isSideHandle && isSmall ? 'none' : '';
11
+ });
12
+ }
13
+ //# 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":"AAAA;;GAEG;AACH,MAAM,UAAU,2BAA2B,CAAC,OAAyB,EAAE,OAAgB;IACnF,OAAO,CAAC,OAAO,CAAC,UAAA,MAAM;QACZ,IAAA,KAAW,MAAM,CAAC,OAAO,EAAvB,CAAC,OAAA,EAAE,CAAC,OAAmB,CAAC;QAChC,IAAM,UAAU,GAAG,CAAC,CAAC,aAAD,CAAC,cAAD,CAAC,GAAI,EAAE,CAAC,GAAG,CAAC,CAAC,aAAD,CAAC,cAAD,CAAC,GAAI,EAAE,CAAC,CAAC;QACzC,IAAM,UAAU,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QACxC,IAAM,YAAY,GAAG,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;QACzD,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,YAAY,IAAI,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IACjE,CAAC,CAAC,CAAC;AACP,CAAC","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[];