roosterjs-content-model-plugins 9.6.0 → 9.7.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 (172) hide show
  1. package/lib/autoFormat/hyphen/transformHyphen.js +3 -3
  2. package/lib/autoFormat/hyphen/transformHyphen.js.map +1 -1
  3. package/lib/autoFormat/link/createLink.js +7 -2
  4. package/lib/autoFormat/link/createLink.js.map +1 -1
  5. package/lib/autoFormat/link/createLinkAfterSpace.js +1 -2
  6. package/lib/autoFormat/link/createLinkAfterSpace.js.map +1 -1
  7. package/lib/autoFormat/numbers/transformFraction.js +2 -2
  8. package/lib/autoFormat/numbers/transformFraction.js.map +1 -1
  9. package/lib/autoFormat/numbers/transformOrdinals.js +2 -2
  10. package/lib/autoFormat/numbers/transformOrdinals.js.map +1 -1
  11. package/lib/edit/EditPlugin.d.ts +15 -0
  12. package/lib/edit/EditPlugin.js +14 -2
  13. package/lib/edit/EditPlugin.js.map +1 -1
  14. package/lib/imageEdit/ImageEditPlugin.d.ts +11 -5
  15. package/lib/imageEdit/ImageEditPlugin.js +209 -103
  16. package/lib/imageEdit/ImageEditPlugin.js.map +1 -1
  17. package/lib/imageEdit/types/ImageAndParagraph.d.ts +8 -0
  18. package/lib/imageEdit/types/ImageAndParagraph.js +3 -0
  19. package/lib/imageEdit/types/ImageAndParagraph.js.map +1 -0
  20. package/lib/imageEdit/types/ImageEditOptions.d.ts +1 -1
  21. package/lib/imageEdit/types/ImageEditOptions.js.map +1 -1
  22. package/lib/imageEdit/utils/applyChange.js +4 -8
  23. package/lib/imageEdit/utils/applyChange.js.map +1 -1
  24. package/lib/imageEdit/utils/createImageWrapper.d.ts +1 -1
  25. package/lib/imageEdit/utils/createImageWrapper.js +10 -6
  26. package/lib/imageEdit/utils/createImageWrapper.js.map +1 -1
  27. package/lib/imageEdit/utils/findEditingImage.d.ts +6 -0
  28. package/lib/imageEdit/utils/findEditingImage.js +43 -0
  29. package/lib/imageEdit/utils/findEditingImage.js.map +1 -0
  30. package/lib/imageEdit/utils/getSelectedImage.d.ts +6 -0
  31. package/lib/imageEdit/utils/getSelectedImage.js +21 -0
  32. package/lib/imageEdit/utils/getSelectedImage.js.map +1 -0
  33. package/lib/imageEdit/utils/updateImageEditInfo.d.ts +1 -1
  34. package/lib/imageEdit/utils/updateImageEditInfo.js +10 -6
  35. package/lib/imageEdit/utils/updateImageEditInfo.js.map +1 -1
  36. package/lib/imageEdit/utils/updateWrapper.js +2 -2
  37. package/lib/imageEdit/utils/updateWrapper.js.map +1 -1
  38. package/lib/index.d.ts +1 -1
  39. package/lib/index.js.map +1 -1
  40. package/lib/markdown/utils/setFormat.js +1 -2
  41. package/lib/markdown/utils/setFormat.js.map +1 -1
  42. package/lib/picker/getQueryString.js +2 -2
  43. package/lib/picker/getQueryString.js.map +1 -1
  44. package/lib/tableEdit/editors/TableEditor.js +4 -2
  45. package/lib/tableEdit/editors/TableEditor.js.map +1 -1
  46. package/lib/tableEdit/editors/features/TableMover.d.ts +2 -2
  47. package/lib/tableEdit/editors/features/TableMover.js +4 -4
  48. package/lib/tableEdit/editors/features/TableMover.js.map +1 -1
  49. package/lib/watermark/WatermarkPlugin.d.ts +2 -0
  50. package/lib/watermark/WatermarkPlugin.js +24 -4
  51. package/lib/watermark/WatermarkPlugin.js.map +1 -1
  52. package/lib-amd/autoFormat/hyphen/transformHyphen.js +3 -3
  53. package/lib-amd/autoFormat/hyphen/transformHyphen.js.map +1 -1
  54. package/lib-amd/autoFormat/link/createLink.js +7 -2
  55. package/lib-amd/autoFormat/link/createLink.js.map +1 -1
  56. package/lib-amd/autoFormat/link/createLinkAfterSpace.js +2 -2
  57. package/lib-amd/autoFormat/link/createLinkAfterSpace.js.map +1 -1
  58. package/lib-amd/autoFormat/numbers/transformFraction.js +2 -2
  59. package/lib-amd/autoFormat/numbers/transformFraction.js.map +1 -1
  60. package/lib-amd/autoFormat/numbers/transformOrdinals.js +2 -2
  61. package/lib-amd/autoFormat/numbers/transformOrdinals.js.map +1 -1
  62. package/lib-amd/edit/EditPlugin.d.ts +15 -0
  63. package/lib-amd/edit/EditPlugin.js +14 -2
  64. package/lib-amd/edit/EditPlugin.js.map +1 -1
  65. package/lib-amd/imageEdit/ImageEditPlugin.d.ts +11 -5
  66. package/lib-amd/imageEdit/ImageEditPlugin.js +208 -104
  67. package/lib-amd/imageEdit/ImageEditPlugin.js.map +1 -1
  68. package/lib-amd/imageEdit/types/ImageAndParagraph.d.ts +8 -0
  69. package/lib-amd/imageEdit/types/ImageAndParagraph.js +5 -0
  70. package/lib-amd/imageEdit/types/ImageAndParagraph.js.map +1 -0
  71. package/lib-amd/imageEdit/types/ImageEditOptions.d.ts +1 -1
  72. package/lib-amd/imageEdit/types/ImageEditOptions.js.map +1 -1
  73. package/lib-amd/imageEdit/utils/applyChange.js +4 -8
  74. package/lib-amd/imageEdit/utils/applyChange.js.map +1 -1
  75. package/lib-amd/imageEdit/utils/createImageWrapper.d.ts +1 -1
  76. package/lib-amd/imageEdit/utils/createImageWrapper.js +10 -7
  77. package/lib-amd/imageEdit/utils/createImageWrapper.js.map +1 -1
  78. package/lib-amd/imageEdit/utils/findEditingImage.d.ts +6 -0
  79. package/lib-amd/imageEdit/utils/findEditingImage.js +45 -0
  80. package/lib-amd/imageEdit/utils/findEditingImage.js.map +1 -0
  81. package/lib-amd/imageEdit/utils/getSelectedImage.d.ts +6 -0
  82. package/lib-amd/imageEdit/utils/getSelectedImage.js +22 -0
  83. package/lib-amd/imageEdit/utils/getSelectedImage.js.map +1 -0
  84. package/lib-amd/imageEdit/utils/updateImageEditInfo.d.ts +1 -1
  85. package/lib-amd/imageEdit/utils/updateImageEditInfo.js +10 -6
  86. package/lib-amd/imageEdit/utils/updateImageEditInfo.js.map +1 -1
  87. package/lib-amd/imageEdit/utils/updateWrapper.js +2 -2
  88. package/lib-amd/imageEdit/utils/updateWrapper.js.map +1 -1
  89. package/lib-amd/index.d.ts +1 -1
  90. package/lib-amd/index.js.map +1 -1
  91. package/lib-amd/markdown/utils/setFormat.js +2 -2
  92. package/lib-amd/markdown/utils/setFormat.js.map +1 -1
  93. package/lib-amd/picker/getQueryString.js +2 -2
  94. package/lib-amd/picker/getQueryString.js.map +1 -1
  95. package/lib-amd/tableEdit/editors/TableEditor.js +4 -2
  96. package/lib-amd/tableEdit/editors/TableEditor.js.map +1 -1
  97. package/lib-amd/tableEdit/editors/features/TableMover.d.ts +2 -2
  98. package/lib-amd/tableEdit/editors/features/TableMover.js +4 -4
  99. package/lib-amd/tableEdit/editors/features/TableMover.js.map +1 -1
  100. package/lib-amd/watermark/WatermarkPlugin.d.ts +2 -0
  101. package/lib-amd/watermark/WatermarkPlugin.js +24 -5
  102. package/lib-amd/watermark/WatermarkPlugin.js.map +1 -1
  103. package/lib-mjs/autoFormat/hyphen/transformHyphen.js +1 -1
  104. package/lib-mjs/autoFormat/hyphen/transformHyphen.js.map +1 -1
  105. package/lib-mjs/autoFormat/link/createLink.js +7 -2
  106. package/lib-mjs/autoFormat/link/createLink.js.map +1 -1
  107. package/lib-mjs/autoFormat/link/createLinkAfterSpace.js +1 -2
  108. package/lib-mjs/autoFormat/link/createLinkAfterSpace.js.map +1 -1
  109. package/lib-mjs/autoFormat/numbers/transformFraction.js +1 -1
  110. package/lib-mjs/autoFormat/numbers/transformFraction.js.map +1 -1
  111. package/lib-mjs/autoFormat/numbers/transformOrdinals.js +1 -1
  112. package/lib-mjs/autoFormat/numbers/transformOrdinals.js.map +1 -1
  113. package/lib-mjs/edit/EditPlugin.d.ts +15 -0
  114. package/lib-mjs/edit/EditPlugin.js +14 -2
  115. package/lib-mjs/edit/EditPlugin.js.map +1 -1
  116. package/lib-mjs/imageEdit/ImageEditPlugin.d.ts +11 -5
  117. package/lib-mjs/imageEdit/ImageEditPlugin.js +211 -105
  118. package/lib-mjs/imageEdit/ImageEditPlugin.js.map +1 -1
  119. package/lib-mjs/imageEdit/types/ImageAndParagraph.d.ts +8 -0
  120. package/lib-mjs/imageEdit/types/ImageAndParagraph.js +2 -0
  121. package/lib-mjs/imageEdit/types/ImageAndParagraph.js.map +1 -0
  122. package/lib-mjs/imageEdit/types/ImageEditOptions.d.ts +1 -1
  123. package/lib-mjs/imageEdit/types/ImageEditOptions.js.map +1 -1
  124. package/lib-mjs/imageEdit/utils/applyChange.js +5 -9
  125. package/lib-mjs/imageEdit/utils/applyChange.js.map +1 -1
  126. package/lib-mjs/imageEdit/utils/createImageWrapper.d.ts +1 -1
  127. package/lib-mjs/imageEdit/utils/createImageWrapper.js +10 -6
  128. package/lib-mjs/imageEdit/utils/createImageWrapper.js.map +1 -1
  129. package/lib-mjs/imageEdit/utils/findEditingImage.d.ts +6 -0
  130. package/lib-mjs/imageEdit/utils/findEditingImage.js +39 -0
  131. package/lib-mjs/imageEdit/utils/findEditingImage.js.map +1 -0
  132. package/lib-mjs/imageEdit/utils/getSelectedImage.d.ts +6 -0
  133. package/lib-mjs/imageEdit/utils/getSelectedImage.js +17 -0
  134. package/lib-mjs/imageEdit/utils/getSelectedImage.js.map +1 -0
  135. package/lib-mjs/imageEdit/utils/updateImageEditInfo.d.ts +1 -1
  136. package/lib-mjs/imageEdit/utils/updateImageEditInfo.js +11 -7
  137. package/lib-mjs/imageEdit/utils/updateImageEditInfo.js.map +1 -1
  138. package/lib-mjs/imageEdit/utils/updateWrapper.js +2 -2
  139. package/lib-mjs/imageEdit/utils/updateWrapper.js.map +1 -1
  140. package/lib-mjs/index.d.ts +1 -1
  141. package/lib-mjs/index.js.map +1 -1
  142. package/lib-mjs/markdown/utils/setFormat.js +1 -2
  143. package/lib-mjs/markdown/utils/setFormat.js.map +1 -1
  144. package/lib-mjs/picker/getQueryString.js +1 -1
  145. package/lib-mjs/picker/getQueryString.js.map +1 -1
  146. package/lib-mjs/tableEdit/editors/TableEditor.js +4 -2
  147. package/lib-mjs/tableEdit/editors/TableEditor.js.map +1 -1
  148. package/lib-mjs/tableEdit/editors/features/TableMover.d.ts +2 -2
  149. package/lib-mjs/tableEdit/editors/features/TableMover.js +4 -4
  150. package/lib-mjs/tableEdit/editors/features/TableMover.js.map +1 -1
  151. package/lib-mjs/watermark/WatermarkPlugin.d.ts +2 -0
  152. package/lib-mjs/watermark/WatermarkPlugin.js +25 -5
  153. package/lib-mjs/watermark/WatermarkPlugin.js.map +1 -1
  154. package/package.json +5 -5
  155. package/lib/imageEdit/utils/getSelectedContentModelImage.d.ts +0 -5
  156. package/lib/imageEdit/utils/getSelectedContentModelImage.js +0 -16
  157. package/lib/imageEdit/utils/getSelectedContentModelImage.js.map +0 -1
  158. package/lib/pluginUtils/splitTextSegment.d.ts +0 -5
  159. package/lib/pluginUtils/splitTextSegment.js +0 -26
  160. package/lib/pluginUtils/splitTextSegment.js.map +0 -1
  161. package/lib-amd/imageEdit/utils/getSelectedContentModelImage.d.ts +0 -5
  162. package/lib-amd/imageEdit/utils/getSelectedContentModelImage.js +0 -17
  163. package/lib-amd/imageEdit/utils/getSelectedContentModelImage.js.map +0 -1
  164. package/lib-amd/pluginUtils/splitTextSegment.d.ts +0 -5
  165. package/lib-amd/pluginUtils/splitTextSegment.js +0 -26
  166. package/lib-amd/pluginUtils/splitTextSegment.js.map +0 -1
  167. package/lib-mjs/imageEdit/utils/getSelectedContentModelImage.d.ts +0 -5
  168. package/lib-mjs/imageEdit/utils/getSelectedContentModelImage.js +0 -12
  169. package/lib-mjs/imageEdit/utils/getSelectedContentModelImage.js.map +0 -1
  170. package/lib-mjs/pluginUtils/splitTextSegment.d.ts +0 -5
  171. package/lib-mjs/pluginUtils/splitTextSegment.js +0 -22
  172. package/lib-mjs/pluginUtils/splitTextSegment.js.map +0 -1
@@ -18,7 +18,8 @@ var updateImageEditInfo_1 = require("./updateImageEditInfo");
18
18
  function applyChange(editor, image, contentModelImage, editInfo, previousSrc, wasResizedOrCropped, editingImage) {
19
19
  var _a;
20
20
  var newSrc = '';
21
- var initEditInfo = (_a = (0, updateImageEditInfo_1.getSelectedImageMetadata)(editor, editingImage !== null && editingImage !== void 0 ? editingImage : image)) !== null && _a !== void 0 ? _a : undefined;
21
+ var imageEditing = editingImage !== null && editingImage !== void 0 ? editingImage : image;
22
+ var initEditInfo = (_a = (0, updateImageEditInfo_1.updateImageEditInfo)(contentModelImage, imageEditing)) !== null && _a !== void 0 ? _a : undefined;
22
23
  var state = (0, checkEditInfoState_1.checkEditInfoState)(editInfo, initEditInfo);
23
24
  switch (state) {
24
25
  case 'ResizeOnly':
@@ -50,12 +51,12 @@ function applyChange(editor, image, contentModelImage, editInfo, previousSrc, wa
50
51
  if (newSrc == editInfo.src) {
51
52
  // If newSrc is the same with original one, it means there is only size change, but no rotation, no cropping,
52
53
  // so we don't need to keep edit info, we can delete it
53
- (0, updateImageEditInfo_1.updateImageEditInfo)(contentModelImage, null);
54
+ (0, updateImageEditInfo_1.updateImageEditInfo)(contentModelImage, imageEditing, null);
54
55
  }
55
56
  else {
56
57
  // Otherwise, save the new edit info to the image so that next time when we edit the same image, we know
57
58
  // the edit info
58
- (0, updateImageEditInfo_1.updateImageEditInfo)(contentModelImage, editInfo);
59
+ (0, updateImageEditInfo_1.updateImageEditInfo)(contentModelImage, imageEditing, editInfo);
59
60
  }
60
61
  // Write back the change to image, and set its new size
61
62
  var generatedImageSize = (0, generateImageSize_1.getGeneratedImageSize)(editInfo);
@@ -66,11 +67,6 @@ function applyChange(editor, image, contentModelImage, editInfo, previousSrc, wa
66
67
  if (wasResizedOrCropped || state == 'FullyChanged') {
67
68
  contentModelImage.format.width = generatedImageSize.targetWidth + 'px';
68
69
  contentModelImage.format.height = generatedImageSize.targetHeight + 'px';
69
- // Remove width/height style so that it won't affect the image size, since style width/height has higher priority
70
- image.style.removeProperty('width');
71
- image.style.removeProperty('height');
72
- image.style.removeProperty('max-width');
73
- image.style.removeProperty('max-height');
74
70
  }
75
71
  }
76
72
  exports.applyChange = applyChange;
@@ -1 +1 @@
1
- {"version":3,"file":"applyChange.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-plugins/lib/imageEdit/utils/applyChange.ts"],"names":[],"mappings":";;;AAAA,2DAA0D;AAC1D,qDAAoD;AACpD,yDAA4D;AAC5D,6DAAsF;AAOtF;;;;;;;;;GASG;AACH,SAAgB,WAAW,CACvB,MAAe,EACf,KAAuB,EACvB,iBAAoC,EACpC,QAA6B,EAC7B,WAAmB,EACnB,mBAA4B,EAC5B,YAA+B;;IAE/B,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,IAAM,YAAY,GAAG,MAAA,IAAA,8CAAwB,EAAC,MAAM,EAAE,YAAY,aAAZ,YAAY,cAAZ,YAAY,GAAI,KAAK,CAAC,mCAAI,SAAS,CAAC;IAC1F,IAAM,KAAK,GAAG,IAAA,uCAAkB,EAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IAEzD,QAAQ,KAAK,EAAE;QACX,KAAK,YAAY;YACb,qFAAqF;YACrF,MAAM,GAAG,QAAQ,CAAC,GAAG,IAAI,EAAE,CAAC;YAC5B,MAAM;QACV,KAAK,cAAc;YACf,+FAA+F;YAC/F,4DAA4D;YAC5D,MAAM,GAAG,WAAW,CAAC;YACrB,MAAM;QACV,KAAK,cAAc;YACf,8FAA8F;YAC9F,MAAM,GAAG,IAAA,iCAAe,EAAC,YAAY,aAAZ,YAAY,cAAZ,YAAY,GAAI,KAAK,EAAE,QAAQ,CAAC,CAAC;YAC1D,MAAM;KACb;IAED,IAAM,UAAU,GAAG,MAAM,IAAI,WAAW,CAAC;IAEzC,IAAI,UAAU,EAAE;QACZ,yGAAyG;QACzG,sFAAsF;QACtF,IAAM,OAAK,GAAG,MAAM,CAAC,YAAY,CAAC,WAAW,EAAE;YAC3C,KAAK,EAAE,KAAK;YACZ,WAAW,EAAE,QAAQ,CAAC,GAAG,IAAI,KAAK,CAAC,GAAG;YACtC,WAAW,aAAA;YACX,MAAM,QAAA;SACT,CAAC,CAAC;QACH,MAAM,GAAG,OAAK,CAAC,MAAM,CAAC;KACzB;IAED,IAAI,MAAM,IAAI,QAAQ,CAAC,GAAG,EAAE;QACxB,6GAA6G;QAC7G,uDAAuD;QACvD,IAAA,yCAAmB,EAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC;KAChD;SAAM;QACH,wGAAwG;QACxG,gBAAgB;QAChB,IAAA,yCAAmB,EAAC,iBAAiB,EAAE,QAAQ,CAAC,CAAC;KACpD;IAED,uDAAuD;IACvD,IAAM,kBAAkB,GAAG,IAAA,yCAAqB,EAAC,QAAQ,CAAC,CAAC;IAC3D,IAAI,CAAC,kBAAkB,EAAE;QACrB,OAAO;KACV;IAED,iBAAiB,CAAC,GAAG,GAAG,MAAM,CAAC;IAE/B,IAAI,mBAAmB,IAAI,KAAK,IAAI,cAAc,EAAE;QAChD,iBAAiB,CAAC,MAAM,CAAC,KAAK,GAAG,kBAAkB,CAAC,WAAW,GAAG,IAAI,CAAC;QACvE,iBAAiB,CAAC,MAAM,CAAC,MAAM,GAAG,kBAAkB,CAAC,YAAY,GAAG,IAAI,CAAC;QAEzE,iHAAiH;QACjH,KAAK,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QACpC,KAAK,CAAC,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QACrC,KAAK,CAAC,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;QACxC,KAAK,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;KAC5C;AACL,CAAC;AAvED,kCAuEC","sourcesContent":["import { checkEditInfoState } from './checkEditInfoState';\nimport { generateDataURL } from './generateDataURL';\nimport { getGeneratedImageSize } from './generateImageSize';\nimport { getSelectedImageMetadata, updateImageEditInfo } from './updateImageEditInfo';\nimport type {\n ContentModelImage,\n IEditor,\n ImageMetadataFormat,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n * Apply changes from the edit info of an image, write result to the image\n * @param editor The editor object that contains the image\n * @param image The image to apply the change\n * @param editInfo Edit info that contains the changed information of the image\n * @param previousSrc Last src value of the image before the change was made\n * @param wasResizedOrCropped if the image was resized or cropped apply the new image dimensions\n * @param editingImage (optional) Image in editing state\n */\nexport function applyChange(\n editor: IEditor,\n image: HTMLImageElement,\n contentModelImage: ContentModelImage,\n editInfo: ImageMetadataFormat,\n previousSrc: string,\n wasResizedOrCropped: boolean,\n editingImage?: HTMLImageElement\n) {\n let newSrc = '';\n const initEditInfo = getSelectedImageMetadata(editor, editingImage ?? image) ?? undefined;\n const state = checkEditInfoState(editInfo, initEditInfo);\n\n switch (state) {\n case 'ResizeOnly':\n // For resize only case, no need to generate a new image, just reuse the original one\n newSrc = editInfo.src || '';\n break;\n case 'SameWithLast':\n // For SameWithLast case, image may be resized but the content is still the same with last one,\n // so no need to create a new image, but just reuse last one\n newSrc = previousSrc;\n break;\n case 'FullyChanged':\n // For other cases (cropped, rotated, ...) we need to create a new image to reflect the change\n newSrc = generateDataURL(editingImage ?? image, editInfo);\n break;\n }\n\n const srcChanged = newSrc != previousSrc;\n\n if (srcChanged) {\n // If the src is changed, fire an EditImage event so that plugins knows that a new image is used, and can\n // replace the new src with some other string and it will be used and set to the image\n const event = editor.triggerEvent('editImage', {\n image: image,\n originalSrc: editInfo.src || image.src,\n previousSrc,\n newSrc,\n });\n newSrc = event.newSrc;\n }\n\n if (newSrc == editInfo.src) {\n // If newSrc is the same with original one, it means there is only size change, but no rotation, no cropping,\n // so we don't need to keep edit info, we can delete it\n updateImageEditInfo(contentModelImage, null);\n } else {\n // Otherwise, save the new edit info to the image so that next time when we edit the same image, we know\n // the edit info\n updateImageEditInfo(contentModelImage, editInfo);\n }\n\n // Write back the change to image, and set its new size\n const generatedImageSize = getGeneratedImageSize(editInfo);\n if (!generatedImageSize) {\n return;\n }\n\n contentModelImage.src = newSrc;\n\n if (wasResizedOrCropped || state == 'FullyChanged') {\n contentModelImage.format.width = generatedImageSize.targetWidth + 'px';\n contentModelImage.format.height = generatedImageSize.targetHeight + 'px';\n\n // Remove width/height style so that it won't affect the image size, since style width/height has higher priority\n image.style.removeProperty('width');\n image.style.removeProperty('height');\n image.style.removeProperty('max-width');\n image.style.removeProperty('max-height');\n }\n}\n"]}
1
+ {"version":3,"file":"applyChange.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-plugins/lib/imageEdit/utils/applyChange.ts"],"names":[],"mappings":";;;AAAA,2DAA0D;AAC1D,qDAAoD;AACpD,yDAA4D;AAC5D,6DAA4D;AAO5D;;;;;;;;;GASG;AACH,SAAgB,WAAW,CACvB,MAAe,EACf,KAAuB,EACvB,iBAAoC,EACpC,QAA6B,EAC7B,WAAmB,EACnB,mBAA4B,EAC5B,YAA+B;;IAE/B,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,IAAM,YAAY,GAAG,YAAY,aAAZ,YAAY,cAAZ,YAAY,GAAI,KAAK,CAAC;IAC3C,IAAM,YAAY,GAAG,MAAA,IAAA,yCAAmB,EAAC,iBAAiB,EAAE,YAAY,CAAC,mCAAI,SAAS,CAAC;IACvF,IAAM,KAAK,GAAG,IAAA,uCAAkB,EAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IAEzD,QAAQ,KAAK,EAAE;QACX,KAAK,YAAY;YACb,qFAAqF;YACrF,MAAM,GAAG,QAAQ,CAAC,GAAG,IAAI,EAAE,CAAC;YAC5B,MAAM;QACV,KAAK,cAAc;YACf,+FAA+F;YAC/F,4DAA4D;YAC5D,MAAM,GAAG,WAAW,CAAC;YACrB,MAAM;QACV,KAAK,cAAc;YACf,8FAA8F;YAC9F,MAAM,GAAG,IAAA,iCAAe,EAAC,YAAY,aAAZ,YAAY,cAAZ,YAAY,GAAI,KAAK,EAAE,QAAQ,CAAC,CAAC;YAC1D,MAAM;KACb;IAED,IAAM,UAAU,GAAG,MAAM,IAAI,WAAW,CAAC;IAEzC,IAAI,UAAU,EAAE;QACZ,yGAAyG;QACzG,sFAAsF;QACtF,IAAM,OAAK,GAAG,MAAM,CAAC,YAAY,CAAC,WAAW,EAAE;YAC3C,KAAK,EAAE,KAAK;YACZ,WAAW,EAAE,QAAQ,CAAC,GAAG,IAAI,KAAK,CAAC,GAAG;YACtC,WAAW,aAAA;YACX,MAAM,QAAA;SACT,CAAC,CAAC;QACH,MAAM,GAAG,OAAK,CAAC,MAAM,CAAC;KACzB;IAED,IAAI,MAAM,IAAI,QAAQ,CAAC,GAAG,EAAE;QACxB,6GAA6G;QAC7G,uDAAuD;QACvD,IAAA,yCAAmB,EAAC,iBAAiB,EAAE,YAAY,EAAE,IAAI,CAAC,CAAC;KAC9D;SAAM;QACH,wGAAwG;QACxG,gBAAgB;QAChB,IAAA,yCAAmB,EAAC,iBAAiB,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC;KAClE;IAED,uDAAuD;IACvD,IAAM,kBAAkB,GAAG,IAAA,yCAAqB,EAAC,QAAQ,CAAC,CAAC;IAC3D,IAAI,CAAC,kBAAkB,EAAE;QACrB,OAAO;KACV;IAED,iBAAiB,CAAC,GAAG,GAAG,MAAM,CAAC;IAE/B,IAAI,mBAAmB,IAAI,KAAK,IAAI,cAAc,EAAE;QAChD,iBAAiB,CAAC,MAAM,CAAC,KAAK,GAAG,kBAAkB,CAAC,WAAW,GAAG,IAAI,CAAC;QACvE,iBAAiB,CAAC,MAAM,CAAC,MAAM,GAAG,kBAAkB,CAAC,YAAY,GAAG,IAAI,CAAC;KAC5E;AACL,CAAC;AAlED,kCAkEC","sourcesContent":["import { checkEditInfoState } from './checkEditInfoState';\nimport { generateDataURL } from './generateDataURL';\nimport { getGeneratedImageSize } from './generateImageSize';\nimport { updateImageEditInfo } from './updateImageEditInfo';\nimport type {\n ContentModelImage,\n IEditor,\n ImageMetadataFormat,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n * Apply changes from the edit info of an image, write result to the image\n * @param editor The editor object that contains the image\n * @param image The image to apply the change\n * @param editInfo Edit info that contains the changed information of the image\n * @param previousSrc Last src value of the image before the change was made\n * @param wasResizedOrCropped if the image was resized or cropped apply the new image dimensions\n * @param editingImage (optional) Image in editing state\n */\nexport function applyChange(\n editor: IEditor,\n image: HTMLImageElement,\n contentModelImage: ContentModelImage,\n editInfo: ImageMetadataFormat,\n previousSrc: string,\n wasResizedOrCropped: boolean,\n editingImage?: HTMLImageElement\n) {\n let newSrc = '';\n const imageEditing = editingImage ?? image;\n const initEditInfo = updateImageEditInfo(contentModelImage, imageEditing) ?? undefined;\n const state = checkEditInfoState(editInfo, initEditInfo);\n\n switch (state) {\n case 'ResizeOnly':\n // For resize only case, no need to generate a new image, just reuse the original one\n newSrc = editInfo.src || '';\n break;\n case 'SameWithLast':\n // For SameWithLast case, image may be resized but the content is still the same with last one,\n // so no need to create a new image, but just reuse last one\n newSrc = previousSrc;\n break;\n case 'FullyChanged':\n // For other cases (cropped, rotated, ...) we need to create a new image to reflect the change\n newSrc = generateDataURL(editingImage ?? image, editInfo);\n break;\n }\n\n const srcChanged = newSrc != previousSrc;\n\n if (srcChanged) {\n // If the src is changed, fire an EditImage event so that plugins knows that a new image is used, and can\n // replace the new src with some other string and it will be used and set to the image\n const event = editor.triggerEvent('editImage', {\n image: image,\n originalSrc: editInfo.src || image.src,\n previousSrc,\n newSrc,\n });\n newSrc = event.newSrc;\n }\n\n if (newSrc == editInfo.src) {\n // If newSrc is the same with original one, it means there is only size change, but no rotation, no cropping,\n // so we don't need to keep edit info, we can delete it\n updateImageEditInfo(contentModelImage, imageEditing, null);\n } else {\n // Otherwise, save the new edit info to the image so that next time when we edit the same image, we know\n // the edit info\n updateImageEditInfo(contentModelImage, imageEditing, editInfo);\n }\n\n // Write back the change to image, and set its new size\n const generatedImageSize = getGeneratedImageSize(editInfo);\n if (!generatedImageSize) {\n return;\n }\n\n contentModelImage.src = newSrc;\n\n if (wasResizedOrCropped || state == 'FullyChanged') {\n contentModelImage.format.width = generatedImageSize.targetWidth + 'px';\n contentModelImage.format.height = generatedImageSize.targetHeight + 'px';\n }\n}\n"]}
@@ -15,4 +15,4 @@ export interface WrapperElements {
15
15
  /**
16
16
  * @internal
17
17
  */
18
- export declare function createImageWrapper(editor: IEditor, image: HTMLImageElement, imageSpan: HTMLSpanElement, options: ImageEditOptions, editInfo: ImageMetadataFormat, htmlOptions: ImageHtmlOptions, operation?: ImageEditOperation): WrapperElements;
18
+ export declare function createImageWrapper(editor: IEditor, image: HTMLImageElement, options: ImageEditOptions, editInfo: ImageMetadataFormat, htmlOptions: ImageHtmlOptions, operation: ImageEditOperation[]): WrapperElements;
@@ -4,25 +4,27 @@ exports.createImageWrapper = void 0;
4
4
  var createImageCropper_1 = require("../Cropper/createImageCropper");
5
5
  var createImageResizer_1 = require("../Resizer/createImageResizer");
6
6
  var createImageRotator_1 = require("../Rotator/createImageRotator");
7
+ var roosterjs_content_model_dom_1 = require("roosterjs-content-model-dom");
7
8
  /**
8
9
  * @internal
9
10
  */
10
- function createImageWrapper(editor, image, imageSpan, options, editInfo, htmlOptions, operation) {
11
+ function createImageWrapper(editor, image, options, editInfo, htmlOptions, operation) {
11
12
  var imageClone = cloneImage(image, editInfo);
12
13
  var doc = editor.getDocument();
13
14
  var rotators = [];
14
- if (!options.disableRotate && operation === 'rotate') {
15
+ if (!options.disableRotate && operation.indexOf('rotate') > -1) {
15
16
  rotators = (0, createImageRotator_1.createImageRotator)(doc, htmlOptions);
16
17
  }
17
18
  var resizers = [];
18
- if (operation === 'resize') {
19
+ if (operation.indexOf('resize') > -1) {
19
20
  resizers = (0, createImageResizer_1.createImageResizer)(doc);
20
21
  }
21
22
  var croppers = [];
22
- if (operation === 'crop') {
23
+ if (operation.indexOf('crop') > -1) {
23
24
  croppers = (0, createImageCropper_1.createImageCropper)(doc);
24
25
  }
25
26
  var wrapper = createWrapper(editor, imageClone, options, editInfo, resizers, rotators, croppers);
27
+ var imageSpan = (0, roosterjs_content_model_dom_1.wrap)(doc, image, 'span');
26
28
  var shadowSpan = createShadowSpan(wrapper, imageSpan);
27
29
  return { wrapper: wrapper, shadowSpan: shadowSpan, imageClone: imageClone, resizers: resizers, rotators: rotators, croppers: croppers };
28
30
  }
@@ -42,8 +44,10 @@ var createWrapper = function (editor, image, options, editInfo, resizers, rotato
42
44
  var imageBox = doc.createElement('div');
43
45
  imageBox.setAttribute("style", "position:relative;width:100%;height:100%;overflow:hidden;transform:scale(1);");
44
46
  imageBox.appendChild(image);
45
- wrapper.setAttribute('style', "max-width: 100%; position: relative; display: inline-flex; font-size: 24px; margin: 0px; transform: rotate(" + ((_a = editInfo.angleRad) !== null && _a !== void 0 ? _a : 0) + "rad); text-align: left;");
46
- wrapper.style.display = editor.getEnvironment().isSafari ? 'inline-block' : 'inline-flex';
47
+ wrapper.setAttribute('style', "font-size: 24px; margin: 0px; transform: rotate(" + ((_a = editInfo.angleRad) !== null && _a !== void 0 ? _a : 0) + "rad);");
48
+ wrapper.style.display = editor.getEnvironment().isSafari
49
+ ? '-webkit-inline-flex'
50
+ : 'inline-flex';
47
51
  var border = createBorder(editor, options.borderColor);
48
52
  wrapper.appendChild(imageBox);
49
53
  wrapper.appendChild(border);
@@ -1 +1 @@
1
- {"version":3,"file":"createImageWrapper.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-plugins/lib/imageEdit/utils/createImageWrapper.ts"],"names":[],"mappings":"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","sourcesContent":["import { createImageCropper } from '../Cropper/createImageCropper';\nimport { createImageResizer } from '../Resizer/createImageResizer';\nimport { createImageRotator } from '../Rotator/createImageRotator';\n\nimport type {\n IEditor,\n ImageEditOperation,\n ImageMetadataFormat,\n} from 'roosterjs-content-model-types';\nimport type { ImageEditOptions } from '../types/ImageEditOptions';\nimport type { ImageHtmlOptions } from '../types/ImageHtmlOptions';\n\n/**\n * @internal\n */\nexport interface WrapperElements {\n wrapper: HTMLSpanElement;\n shadowSpan: HTMLElement;\n imageClone: HTMLImageElement;\n resizers: HTMLDivElement[];\n rotators: HTMLDivElement[];\n croppers: HTMLDivElement[];\n}\n\n/**\n * @internal\n */\nexport function createImageWrapper(\n editor: IEditor,\n image: HTMLImageElement,\n imageSpan: HTMLSpanElement,\n options: ImageEditOptions,\n editInfo: ImageMetadataFormat,\n htmlOptions: ImageHtmlOptions,\n operation?: ImageEditOperation\n): WrapperElements {\n const imageClone = cloneImage(image, editInfo);\n const doc = editor.getDocument();\n\n let rotators: HTMLDivElement[] = [];\n if (!options.disableRotate && operation === 'rotate') {\n rotators = createImageRotator(doc, htmlOptions);\n }\n let resizers: HTMLDivElement[] = [];\n if (operation === 'resize') {\n resizers = createImageResizer(doc);\n }\n\n let croppers: HTMLDivElement[] = [];\n if (operation === 'crop') {\n croppers = createImageCropper(doc);\n }\n\n const wrapper = createWrapper(\n editor,\n imageClone,\n options,\n editInfo,\n resizers,\n rotators,\n croppers\n );\n const shadowSpan = createShadowSpan(wrapper, imageSpan);\n return { wrapper, shadowSpan, imageClone, resizers, rotators, croppers };\n}\n\nconst createShadowSpan = (wrapper: HTMLElement, imageSpan: HTMLSpanElement) => {\n const shadowRoot = imageSpan.attachShadow({\n mode: 'open',\n });\n imageSpan.style.verticalAlign = 'bottom';\n shadowRoot.appendChild(wrapper);\n return imageSpan;\n};\n\nconst createWrapper = (\n editor: IEditor,\n image: HTMLImageElement,\n options: ImageEditOptions,\n editInfo: ImageMetadataFormat,\n resizers?: HTMLDivElement[],\n rotators?: HTMLDivElement[],\n cropper?: HTMLDivElement[]\n) => {\n const doc = editor.getDocument();\n const wrapper = doc.createElement('span');\n const imageBox = doc.createElement('div');\n\n imageBox.setAttribute(\n `style`,\n `position:relative;width:100%;height:100%;overflow:hidden;transform:scale(1);`\n );\n imageBox.appendChild(image);\n wrapper.setAttribute(\n 'style',\n `max-width: 100%; position: relative; display: inline-flex; font-size: 24px; margin: 0px; transform: rotate(${\n editInfo.angleRad ?? 0\n }rad); text-align: left;`\n );\n wrapper.style.display = editor.getEnvironment().isSafari ? 'inline-block' : 'inline-flex';\n\n const border = createBorder(editor, options.borderColor);\n wrapper.appendChild(imageBox);\n wrapper.appendChild(border);\n wrapper.style.userSelect = 'none';\n\n if (resizers && resizers?.length > 0) {\n resizers.forEach(resizer => {\n wrapper.appendChild(resizer);\n });\n }\n if (rotators && rotators.length > 0) {\n rotators.forEach(r => {\n wrapper.appendChild(r);\n });\n }\n if (cropper && cropper.length > 0) {\n cropper.forEach(c => {\n wrapper.appendChild(c);\n });\n }\n\n return wrapper;\n};\n\nconst createBorder = (editor: IEditor, borderColor?: string) => {\n const doc = editor.getDocument();\n const resizeBorder = doc.createElement('div');\n resizeBorder.setAttribute(\n `style`,\n `position:absolute;left:0;right:0;top:0;bottom:0;border:solid 2px ${borderColor};pointer-events:none;`\n );\n return resizeBorder;\n};\n\nconst cloneImage = (image: HTMLImageElement, editInfo: ImageMetadataFormat) => {\n const imageClone = image.cloneNode(true) as HTMLImageElement;\n imageClone.style.removeProperty('transform');\n if (editInfo.src) {\n imageClone.src = editInfo.src;\n imageClone.removeAttribute('id');\n imageClone.style.removeProperty('max-width');\n imageClone.style.removeProperty('max-height');\n imageClone.style.width = editInfo.widthPx + 'px';\n imageClone.style.height = editInfo.heightPx + 'px';\n }\n return imageClone;\n};\n"]}
1
+ {"version":3,"file":"createImageWrapper.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-plugins/lib/imageEdit/utils/createImageWrapper.ts"],"names":[],"mappings":"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","sourcesContent":["import { createImageCropper } from '../Cropper/createImageCropper';\nimport { createImageResizer } from '../Resizer/createImageResizer';\nimport { createImageRotator } from '../Rotator/createImageRotator';\nimport { wrap } from 'roosterjs-content-model-dom';\n\nimport type {\n IEditor,\n ImageEditOperation,\n ImageMetadataFormat,\n} from 'roosterjs-content-model-types';\nimport type { ImageEditOptions } from '../types/ImageEditOptions';\nimport type { ImageHtmlOptions } from '../types/ImageHtmlOptions';\n\n/**\n * @internal\n */\nexport interface WrapperElements {\n wrapper: HTMLSpanElement;\n shadowSpan: HTMLElement;\n imageClone: HTMLImageElement;\n resizers: HTMLDivElement[];\n rotators: HTMLDivElement[];\n croppers: HTMLDivElement[];\n}\n\n/**\n * @internal\n */\nexport function createImageWrapper(\n editor: IEditor,\n image: HTMLImageElement,\n options: ImageEditOptions,\n editInfo: ImageMetadataFormat,\n htmlOptions: ImageHtmlOptions,\n operation: ImageEditOperation[]\n): WrapperElements {\n const imageClone = cloneImage(image, editInfo);\n const doc = editor.getDocument();\n\n let rotators: HTMLDivElement[] = [];\n if (!options.disableRotate && operation.indexOf('rotate') > -1) {\n rotators = createImageRotator(doc, htmlOptions);\n }\n let resizers: HTMLDivElement[] = [];\n if (operation.indexOf('resize') > -1) {\n resizers = createImageResizer(doc);\n }\n\n let croppers: HTMLDivElement[] = [];\n if (operation.indexOf('crop') > -1) {\n croppers = createImageCropper(doc);\n }\n\n const wrapper = createWrapper(\n editor,\n imageClone,\n options,\n editInfo,\n resizers,\n rotators,\n croppers\n );\n const imageSpan = wrap(doc, image, 'span');\n const shadowSpan = createShadowSpan(wrapper, imageSpan);\n return { wrapper, shadowSpan, imageClone, resizers, rotators, croppers };\n}\n\nconst createShadowSpan = (wrapper: HTMLElement, imageSpan: HTMLSpanElement) => {\n const shadowRoot = imageSpan.attachShadow({\n mode: 'open',\n });\n imageSpan.style.verticalAlign = 'bottom';\n shadowRoot.appendChild(wrapper);\n return imageSpan;\n};\n\nconst createWrapper = (\n editor: IEditor,\n image: HTMLImageElement,\n options: ImageEditOptions,\n editInfo: ImageMetadataFormat,\n resizers?: HTMLDivElement[],\n rotators?: HTMLDivElement[],\n cropper?: HTMLDivElement[]\n) => {\n const doc = editor.getDocument();\n const wrapper = doc.createElement('span');\n const imageBox = doc.createElement('div');\n\n imageBox.setAttribute(\n `style`,\n `position:relative;width:100%;height:100%;overflow:hidden;transform:scale(1);`\n );\n imageBox.appendChild(image);\n wrapper.setAttribute(\n 'style',\n `font-size: 24px; margin: 0px; transform: rotate(${editInfo.angleRad ?? 0}rad);`\n );\n wrapper.style.display = editor.getEnvironment().isSafari\n ? '-webkit-inline-flex'\n : 'inline-flex';\n\n const border = createBorder(editor, options.borderColor);\n wrapper.appendChild(imageBox);\n wrapper.appendChild(border);\n wrapper.style.userSelect = 'none';\n\n if (resizers && resizers?.length > 0) {\n resizers.forEach(resizer => {\n wrapper.appendChild(resizer);\n });\n }\n if (rotators && rotators.length > 0) {\n rotators.forEach(r => {\n wrapper.appendChild(r);\n });\n }\n if (cropper && cropper.length > 0) {\n cropper.forEach(c => {\n wrapper.appendChild(c);\n });\n }\n\n return wrapper;\n};\n\nconst createBorder = (editor: IEditor, borderColor?: string) => {\n const doc = editor.getDocument();\n const resizeBorder = doc.createElement('div');\n resizeBorder.setAttribute(\n `style`,\n `position:absolute;left:0;right:0;top:0;bottom:0;border:solid 2px ${borderColor};pointer-events:none;`\n );\n return resizeBorder;\n};\n\nconst cloneImage = (image: HTMLImageElement, editInfo: ImageMetadataFormat) => {\n const imageClone = image.cloneNode(true) as HTMLImageElement;\n imageClone.style.removeProperty('transform');\n if (editInfo.src) {\n imageClone.src = editInfo.src;\n imageClone.removeAttribute('id');\n imageClone.style.removeProperty('max-width');\n imageClone.style.removeProperty('max-height');\n imageClone.style.width = editInfo.widthPx + 'px';\n imageClone.style.height = editInfo.heightPx + 'px';\n }\n return imageClone;\n};\n"]}
@@ -0,0 +1,6 @@
1
+ import type { ReadonlyContentModelBlockGroup } from 'roosterjs-content-model-types';
2
+ import type { ImageAndParagraph } from '../types/ImageAndParagraph';
3
+ /**
4
+ * @internal
5
+ */
6
+ export declare function findEditingImage(group: ReadonlyContentModelBlockGroup): ImageAndParagraph | null;
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.findEditingImage = void 0;
4
+ /**
5
+ * @internal
6
+ */
7
+ function findEditingImage(group) {
8
+ for (var i = 0; i < group.blocks.length; i++) {
9
+ var block = group.blocks[i];
10
+ switch (block.blockType) {
11
+ case 'BlockGroup':
12
+ var result = findEditingImage(block);
13
+ if (result) {
14
+ return result;
15
+ }
16
+ break;
17
+ case 'Paragraph':
18
+ for (var j = 0; j < block.segments.length; j++) {
19
+ var segment = block.segments[j];
20
+ switch (segment.segmentType) {
21
+ case 'Image':
22
+ if (segment.dataset.isEditing) {
23
+ return {
24
+ paragraph: block,
25
+ image: segment,
26
+ };
27
+ }
28
+ break;
29
+ case 'General':
30
+ var result_1 = findEditingImage(segment);
31
+ if (result_1) {
32
+ return result_1;
33
+ }
34
+ break;
35
+ }
36
+ }
37
+ break;
38
+ }
39
+ }
40
+ return null;
41
+ }
42
+ exports.findEditingImage = findEditingImage;
43
+ //# sourceMappingURL=findEditingImage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"findEditingImage.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-plugins/lib/imageEdit/utils/findEditingImage.ts"],"names":[],"mappings":";;;AAGA;;GAEG;AACH,SAAgB,gBAAgB,CAAC,KAAqC;IAClE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QAC1C,IAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAE9B,QAAQ,KAAK,CAAC,SAAS,EAAE;YACrB,KAAK,YAAY;gBACb,IAAM,MAAM,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;gBAEvC,IAAI,MAAM,EAAE;oBACR,OAAO,MAAM,CAAC;iBACjB;gBACD,MAAM;YAEV,KAAK,WAAW;gBACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBAC5C,IAAM,OAAO,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;oBAClC,QAAQ,OAAO,CAAC,WAAW,EAAE;wBACzB,KAAK,OAAO;4BACR,IAAI,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE;gCAC3B,OAAO;oCACH,SAAS,EAAE,KAAK;oCAChB,KAAK,EAAE,OAAO;iCACjB,CAAC;6BACL;4BACD,MAAM;wBAEV,KAAK,SAAS;4BACV,IAAM,QAAM,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;4BAEzC,IAAI,QAAM,EAAE;gCACR,OAAO,QAAM,CAAC;6BACjB;4BACD,MAAM;qBACb;iBACJ;gBAED,MAAM;SACb;KACJ;IAED,OAAO,IAAI,CAAC;AAChB,CAAC;AAzCD,4CAyCC","sourcesContent":["import type { ReadonlyContentModelBlockGroup } from 'roosterjs-content-model-types';\nimport type { ImageAndParagraph } from '../types/ImageAndParagraph';\n\n/**\n * @internal\n */\nexport function findEditingImage(group: ReadonlyContentModelBlockGroup): ImageAndParagraph | null {\n for (let i = 0; i < group.blocks.length; i++) {\n const block = group.blocks[i];\n\n switch (block.blockType) {\n case 'BlockGroup':\n const result = findEditingImage(block);\n\n if (result) {\n return result;\n }\n break;\n\n case 'Paragraph':\n for (let j = 0; j < block.segments.length; j++) {\n const segment = block.segments[j];\n switch (segment.segmentType) {\n case 'Image':\n if (segment.dataset.isEditing) {\n return {\n paragraph: block,\n image: segment,\n };\n }\n break;\n\n case 'General':\n const result = findEditingImage(segment);\n\n if (result) {\n return result;\n }\n break;\n }\n }\n\n break;\n }\n }\n\n return null;\n}\n"]}
@@ -0,0 +1,6 @@
1
+ import type { ReadonlyContentModelDocument } from 'roosterjs-content-model-types';
2
+ import type { ImageAndParagraph } from '../types/ImageAndParagraph';
3
+ /**
4
+ * @internal
5
+ */
6
+ export declare function getSelectedImage(model: ReadonlyContentModelDocument): ImageAndParagraph | null;
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getSelectedImage = void 0;
4
+ var roosterjs_content_model_dom_1 = require("roosterjs-content-model-dom");
5
+ /**
6
+ * @internal
7
+ */
8
+ function getSelectedImage(model) {
9
+ var selections = (0, roosterjs_content_model_dom_1.getSelectedSegmentsAndParagraphs)(model, false);
10
+ if (selections.length == 1 && selections[0][0].segmentType == 'Image' && selections[0][1]) {
11
+ return {
12
+ image: selections[0][0],
13
+ paragraph: selections[0][1],
14
+ };
15
+ }
16
+ else {
17
+ return null;
18
+ }
19
+ }
20
+ exports.getSelectedImage = getSelectedImage;
21
+ //# sourceMappingURL=getSelectedImage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getSelectedImage.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-plugins/lib/imageEdit/utils/getSelectedImage.ts"],"names":[],"mappings":";;;AAAA,2EAA+E;AAI/E;;GAEG;AACH,SAAgB,gBAAgB,CAAC,KAAmC;IAChE,IAAM,UAAU,GAAG,IAAA,8DAAgC,EAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAElE,IAAI,UAAU,CAAC,MAAM,IAAI,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,IAAI,OAAO,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;QACvF,OAAO;YACH,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACvB,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SAC9B,CAAC;KACL;SAAM;QACH,OAAO,IAAI,CAAC;KACf;AACL,CAAC;AAXD,4CAWC","sourcesContent":["import { getSelectedSegmentsAndParagraphs } from 'roosterjs-content-model-dom';\nimport type { ReadonlyContentModelDocument } from 'roosterjs-content-model-types';\nimport type { ImageAndParagraph } from '../types/ImageAndParagraph';\n\n/**\n * @internal\n */\nexport function getSelectedImage(model: ReadonlyContentModelDocument): ImageAndParagraph | null {\n const selections = getSelectedSegmentsAndParagraphs(model, false);\n\n if (selections.length == 1 && selections[0][0].segmentType == 'Image' && selections[0][1]) {\n return {\n image: selections[0][0],\n paragraph: selections[0][1],\n };\n } else {\n return null;\n }\n}\n"]}
@@ -2,7 +2,7 @@ import type { ContentModelImage, IEditor, ImageMetadataFormat } from 'roosterjs-
2
2
  /**
3
3
  * @internal
4
4
  */
5
- export declare function updateImageEditInfo(contentModelImage: ContentModelImage, newImageMetadata?: ImageMetadataFormat | null): void;
5
+ export declare function updateImageEditInfo(contentModelImage: ContentModelImage, image: HTMLImageElement, newImageMetadata?: ImageMetadataFormat | null | undefined): ImageMetadataFormat;
6
6
  /**
7
7
  * @internal
8
8
  * @returns
@@ -2,18 +2,19 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getSelectedImageMetadata = exports.updateImageEditInfo = void 0;
4
4
  var tslib_1 = require("tslib");
5
- var getSelectedContentModelImage_1 = require("./getSelectedContentModelImage");
5
+ var getSelectedImage_1 = require("./getSelectedImage");
6
6
  var roosterjs_content_model_dom_1 = require("roosterjs-content-model-dom");
7
7
  /**
8
8
  * @internal
9
9
  */
10
- function updateImageEditInfo(contentModelImage, newImageMetadata) {
11
- (0, roosterjs_content_model_dom_1.updateImageMetadata)(contentModelImage, newImageMetadata !== undefined
10
+ function updateImageEditInfo(contentModelImage, image, newImageMetadata) {
11
+ var contentModelMetadata = (0, roosterjs_content_model_dom_1.updateImageMetadata)(contentModelImage, newImageMetadata !== undefined
12
12
  ? function (format) {
13
13
  format = newImageMetadata;
14
14
  return format;
15
15
  }
16
16
  : undefined);
17
+ return (0, tslib_1.__assign)((0, tslib_1.__assign)({}, getInitialEditInfo(image)), contentModelMetadata);
17
18
  }
18
19
  exports.updateImageEditInfo = updateImageEditInfo;
19
20
  function getInitialEditInfo(image) {
@@ -37,9 +38,12 @@ function getInitialEditInfo(image) {
37
38
  function getSelectedImageMetadata(editor, image) {
38
39
  var imageMetadata = getInitialEditInfo(image);
39
40
  editor.formatContentModel(function (model) {
40
- var selectedImage = (0, getSelectedContentModelImage_1.getSelectedContentModelImage)(model);
41
- if (selectedImage) {
42
- imageMetadata = (0, tslib_1.__assign)((0, tslib_1.__assign)({}, imageMetadata), selectedImage.dataset);
41
+ var selectedImage = (0, getSelectedImage_1.getSelectedImage)(model);
42
+ if (selectedImage === null || selectedImage === void 0 ? void 0 : selectedImage.image) {
43
+ (0, roosterjs_content_model_dom_1.mutateSegment)(selectedImage.paragraph, selectedImage === null || selectedImage === void 0 ? void 0 : selectedImage.image, function (modelImage) {
44
+ imageMetadata = updateImageEditInfo(modelImage, image);
45
+ });
46
+ return true;
43
47
  }
44
48
  return false;
45
49
  });
@@ -1 +1 @@
1
- {"version":3,"file":"updateImageEditInfo.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-plugins/lib/imageEdit/utils/updateImageEditInfo.ts"],"names":[],"mappings":";;;;AAAA,+EAA8E;AAC9E,2EAAkE;AAOlE;;GAEG;AACH,SAAgB,mBAAmB,CAC/B,iBAAoC,EACpC,gBAA6C;IAE7C,IAAA,iDAAmB,EACf,iBAAiB,EACjB,gBAAgB,KAAK,SAAS;QAC1B,CAAC,CAAC,UAAA,MAAM;YACF,MAAM,GAAG,gBAAgB,CAAC;YAC1B,OAAO,MAAM,CAAC;QAClB,CAAC;QACH,CAAC,CAAC,SAAS,CAClB,CAAC;AACN,CAAC;AAbD,kDAaC;AAED,SAAS,kBAAkB,CAAC,KAAuB;IAC/C,OAAO;QACH,GAAG,EAAE,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE;QACpC,OAAO,EAAE,KAAK,CAAC,WAAW;QAC1B,QAAQ,EAAE,KAAK,CAAC,YAAY;QAC5B,YAAY,EAAE,KAAK,CAAC,YAAY;QAChC,aAAa,EAAE,KAAK,CAAC,aAAa;QAClC,WAAW,EAAE,CAAC;QACd,YAAY,EAAE,CAAC;QACf,UAAU,EAAE,CAAC;QACb,aAAa,EAAE,CAAC;QAChB,QAAQ,EAAE,CAAC;KACd,CAAC;AACN,CAAC;AAED;;;GAGG;AACH,SAAgB,wBAAwB,CACpC,MAAe,EACf,KAAuB;IAEvB,IAAI,aAAa,GAAwB,kBAAkB,CAAC,KAAK,CAAC,CAAC;IACnE,MAAM,CAAC,kBAAkB,CAAC,UAAA,KAAK;QAC3B,IAAM,aAAa,GAAG,IAAA,2DAA4B,EAAC,KAAK,CAAC,CAAC;QAC1D,IAAI,aAAa,EAAE;YACf,aAAa,mDAAQ,aAAa,GAAK,aAAa,CAAC,OAAO,CAAE,CAAC;SAClE;QACD,OAAO,KAAK,CAAC;IACjB,CAAC,CAAC,CAAC;IAEH,OAAO,aAAa,CAAC;AACzB,CAAC;AAdD,4DAcC","sourcesContent":["import { getSelectedContentModelImage } from './getSelectedContentModelImage';\nimport { updateImageMetadata } from 'roosterjs-content-model-dom';\nimport type {\n ContentModelImage,\n IEditor,\n ImageMetadataFormat,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport function updateImageEditInfo(\n contentModelImage: ContentModelImage,\n newImageMetadata?: ImageMetadataFormat | null\n) {\n updateImageMetadata(\n contentModelImage,\n newImageMetadata !== undefined\n ? format => {\n format = newImageMetadata;\n return format;\n }\n : undefined\n );\n}\n\nfunction getInitialEditInfo(image: HTMLImageElement): ImageMetadataFormat {\n return {\n src: image.getAttribute('src') || '',\n widthPx: image.clientWidth,\n heightPx: image.clientHeight,\n naturalWidth: image.naturalWidth,\n naturalHeight: image.naturalHeight,\n leftPercent: 0,\n rightPercent: 0,\n topPercent: 0,\n bottomPercent: 0,\n angleRad: 0,\n };\n}\n\n/**\n * @internal\n * @returns\n */\nexport function getSelectedImageMetadata(\n editor: IEditor,\n image: HTMLImageElement\n): ImageMetadataFormat {\n let imageMetadata: ImageMetadataFormat = getInitialEditInfo(image);\n editor.formatContentModel(model => {\n const selectedImage = getSelectedContentModelImage(model);\n if (selectedImage) {\n imageMetadata = { ...imageMetadata, ...selectedImage.dataset };\n }\n return false;\n });\n\n return imageMetadata;\n}\n"]}
1
+ {"version":3,"file":"updateImageEditInfo.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-plugins/lib/imageEdit/utils/updateImageEditInfo.ts"],"names":[],"mappings":";;;;AAAA,uDAAsD;AACtD,2EAAiF;AAQjF;;GAEG;AACH,SAAgB,mBAAmB,CAC/B,iBAAoC,EACpC,KAAuB,EACvB,gBAAyD;IAEzD,IAAM,oBAAoB,GAAG,IAAA,iDAAmB,EAC5C,iBAAiB,EACjB,gBAAgB,KAAK,SAAS;QAC1B,CAAC,CAAC,UAAA,MAAM;YACF,MAAM,GAAG,gBAAgB,CAAC;YAC1B,OAAO,MAAM,CAAC;QAClB,CAAC;QACH,CAAC,CAAC,SAAS,CAClB,CAAC;IACF,uDAAY,kBAAkB,CAAC,KAAK,CAAC,GAAK,oBAAoB,EAAG;AACrE,CAAC;AAfD,kDAeC;AAED,SAAS,kBAAkB,CAAC,KAAuB;IAC/C,OAAO;QACH,GAAG,EAAE,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE;QACpC,OAAO,EAAE,KAAK,CAAC,WAAW;QAC1B,QAAQ,EAAE,KAAK,CAAC,YAAY;QAC5B,YAAY,EAAE,KAAK,CAAC,YAAY;QAChC,aAAa,EAAE,KAAK,CAAC,aAAa;QAClC,WAAW,EAAE,CAAC;QACd,YAAY,EAAE,CAAC;QACf,UAAU,EAAE,CAAC;QACb,aAAa,EAAE,CAAC;QAChB,QAAQ,EAAE,CAAC;KACd,CAAC;AACN,CAAC;AAED;;;GAGG;AACH,SAAgB,wBAAwB,CACpC,MAAe,EACf,KAAuB;IAEvB,IAAI,aAAa,GAAwB,kBAAkB,CAAC,KAAK,CAAC,CAAC;IACnE,MAAM,CAAC,kBAAkB,CAAC,UAAA,KAAK;QAC3B,IAAM,aAAa,GAAG,IAAA,mCAAgB,EAAC,KAAK,CAAC,CAAC;QAC9C,IAAI,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,KAAK,EAAE;YACtB,IAAA,2CAAa,EAAC,aAAa,CAAC,SAAS,EAAE,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,KAAK,EAAE,UAAA,UAAU;gBACnE,aAAa,GAAG,mBAAmB,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;YAC3D,CAAC,CAAC,CAAC;YAEH,OAAO,IAAI,CAAC;SACf;QACD,OAAO,KAAK,CAAC;IACjB,CAAC,CAAC,CAAC;IAEH,OAAO,aAAa,CAAC;AACzB,CAAC;AAlBD,4DAkBC","sourcesContent":["import { getSelectedImage } from './getSelectedImage';\nimport { mutateSegment, updateImageMetadata } from 'roosterjs-content-model-dom';\n\nimport type {\n ContentModelImage,\n IEditor,\n ImageMetadataFormat,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport function updateImageEditInfo(\n contentModelImage: ContentModelImage,\n image: HTMLImageElement,\n newImageMetadata?: ImageMetadataFormat | null | undefined\n): ImageMetadataFormat {\n const contentModelMetadata = updateImageMetadata(\n contentModelImage,\n newImageMetadata !== undefined\n ? format => {\n format = newImageMetadata;\n return format;\n }\n : undefined\n );\n return { ...getInitialEditInfo(image), ...contentModelMetadata };\n}\n\nfunction getInitialEditInfo(image: HTMLImageElement): ImageMetadataFormat {\n return {\n src: image.getAttribute('src') || '',\n widthPx: image.clientWidth,\n heightPx: image.clientHeight,\n naturalWidth: image.naturalWidth,\n naturalHeight: image.naturalHeight,\n leftPercent: 0,\n rightPercent: 0,\n topPercent: 0,\n bottomPercent: 0,\n angleRad: 0,\n };\n}\n\n/**\n * @internal\n * @returns\n */\nexport function getSelectedImageMetadata(\n editor: IEditor,\n image: HTMLImageElement\n): ImageMetadataFormat {\n let imageMetadata: ImageMetadataFormat = getInitialEditInfo(image);\n editor.formatContentModel(model => {\n const selectedImage = getSelectedImage(model);\n if (selectedImage?.image) {\n mutateSegment(selectedImage.paragraph, selectedImage?.image, modelImage => {\n imageMetadata = updateImageEditInfo(modelImage, image);\n });\n\n return true;\n }\n return false;\n });\n\n return imageMetadata;\n}\n"]}
@@ -60,7 +60,7 @@ function updateWrapper(editInfo, options, image, clonedImage, wrapper, resizers,
60
60
  (0, imageEditUtils_1.setSize)(cropOverlays[1], undefined, 0, 0, cropBottomPx, cropRightPx, undefined);
61
61
  (0, imageEditUtils_1.setSize)(cropOverlays[2], cropLeftPx, undefined, 0, 0, undefined, cropBottomPx);
62
62
  (0, imageEditUtils_1.setSize)(cropOverlays[3], 0, cropTopPx, undefined, 0, cropLeftPx, undefined);
63
- if (angleRad) {
63
+ if (angleRad !== undefined) {
64
64
  (0, updateHandleCursor_1.updateHandleCursor)(croppers, angleRad);
65
65
  }
66
66
  }
@@ -77,7 +77,7 @@ function updateWrapper(editInfo, options, image, clonedImage, wrapper, resizers,
77
77
  }
78
78
  })
79
79
  .filter(function (handle) { return !!handle; });
80
- if (angleRad) {
80
+ if (angleRad !== undefined) {
81
81
  (0, updateHandleCursor_1.updateHandleCursor)(resizeHandles, angleRad);
82
82
  }
83
83
  (0, updateSideHandlesVisibility_1.updateSideHandlesVisibility)(resizeHandles, smallImage);
@@ -1 +1 @@
1
- {"version":3,"file":"updateWrapper.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-plugins/lib/imageEdit/utils/updateWrapper.ts"],"names":[],"mappings":"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","sourcesContent":["import { doubleCheckResize } from './doubleCheckResize';\nimport { getGeneratedImageSize } from './generateImageSize';\nimport { ImageEditElementClass } from '../types/ImageEditElementClass';\nimport { isElementOfType, isNodeOfType } from 'roosterjs-content-model-dom';\nimport { updateHandleCursor } from './updateHandleCursor';\nimport { updateSideHandlesVisibility } from '../Resizer/updateSideHandlesVisibility';\nimport type { ImageEditOptions } from '../types/ImageEditOptions';\nimport type { ImageMetadataFormat } from 'roosterjs-content-model-types';\nimport {\n getPx,\n isASmallImage,\n isRTL,\n setFlipped,\n setSize,\n setWrapperSizeDimensions,\n} from './imageEditUtils';\n\n/**\n * @internal\n */\nexport function updateWrapper(\n editInfo: ImageMetadataFormat,\n options: ImageEditOptions,\n image: HTMLImageElement,\n clonedImage: HTMLImageElement,\n wrapper: HTMLSpanElement,\n resizers?: HTMLDivElement[],\n croppers?: HTMLDivElement[]\n) {\n const {\n angleRad,\n bottomPercent,\n leftPercent,\n rightPercent,\n topPercent,\n flippedHorizontal,\n flippedVertical,\n } = editInfo;\n\n const generateImageSize = getGeneratedImageSize(editInfo, croppers && croppers?.length > 0);\n if (!generateImageSize) {\n return;\n }\n const {\n targetWidth,\n targetHeight,\n originalWidth,\n originalHeight,\n visibleWidth,\n visibleHeight,\n } = generateImageSize;\n\n const marginHorizontal = (targetWidth - visibleWidth) / 2;\n const marginVertical = (targetHeight - visibleHeight) / 2;\n const cropLeftPx = originalWidth * (leftPercent || 0);\n const cropRightPx = originalWidth * (rightPercent || 0);\n const cropTopPx = originalHeight * (topPercent || 0);\n const cropBottomPx = originalHeight * (bottomPercent || 0);\n\n // Update size and margin of the wrapper\n wrapper.style.margin = `${marginVertical}px ${marginHorizontal}px`;\n wrapper.style.transform = `rotate(${angleRad}rad)`;\n setWrapperSizeDimensions(wrapper, image, visibleWidth, visibleHeight);\n\n // Update the text-alignment to avoid the image to overflow if the parent element have align center or right\n // or if the direction is Right To Left\n if (isRTL(clonedImage)) {\n wrapper.style.textAlign = 'right';\n if (!croppers) {\n clonedImage.style.left = getPx(cropLeftPx);\n clonedImage.style.right = getPx(-cropRightPx);\n }\n } else {\n wrapper.style.textAlign = 'left';\n }\n\n // Update size of the image\n clonedImage.style.width = getPx(originalWidth);\n clonedImage.style.height = getPx(originalHeight);\n clonedImage.style.verticalAlign = 'bottom';\n clonedImage.style.position = 'absolute';\n\n //Update flip direction\n setFlipped(clonedImage.parentElement, flippedHorizontal, flippedVertical);\n const smallImage = isASmallImage(visibleWidth, visibleWidth);\n\n if (!croppers) {\n // For rotate/resize, set the margin of the image so that cropped part won't be visible\n clonedImage.style.margin = `${-cropTopPx}px 0 0 ${-cropLeftPx}px`;\n }\n\n if (croppers && croppers.length > 0) {\n const cropContainer = croppers[0];\n const cropOverlays = croppers.filter(\n cropper => cropper.className === ImageEditElementClass.CropOverlay\n );\n\n setSize(\n cropContainer,\n cropLeftPx,\n cropTopPx,\n cropRightPx,\n cropBottomPx,\n undefined,\n undefined\n );\n setSize(cropOverlays[0], 0, 0, cropRightPx, undefined, undefined, cropTopPx);\n setSize(cropOverlays[1], undefined, 0, 0, cropBottomPx, cropRightPx, undefined);\n setSize(cropOverlays[2], cropLeftPx, undefined, 0, 0, undefined, cropBottomPx);\n setSize(cropOverlays[3], 0, cropTopPx, undefined, 0, cropLeftPx, undefined);\n\n if (angleRad) {\n updateHandleCursor(croppers, angleRad);\n }\n }\n\n if (resizers) {\n const clientWidth = wrapper.clientWidth;\n const clientHeight = wrapper.clientHeight;\n\n doubleCheckResize(editInfo, options.preserveRatio || false, clientWidth, clientHeight);\n\n const resizeHandles = resizers\n .map(resizer => {\n const resizeHandle = resizer.firstElementChild;\n if (\n isNodeOfType(resizeHandle, 'ELEMENT_NODE') &&\n isElementOfType(resizeHandle, 'div')\n ) {\n return resizeHandle;\n }\n })\n .filter(handle => !!handle) as HTMLDivElement[];\n\n if (angleRad) {\n updateHandleCursor(resizeHandles, angleRad);\n }\n\n updateSideHandlesVisibility(resizeHandles, smallImage);\n }\n}\n"]}
1
+ {"version":3,"file":"updateWrapper.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-plugins/lib/imageEdit/utils/updateWrapper.ts"],"names":[],"mappings":"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","sourcesContent":["import { doubleCheckResize } from './doubleCheckResize';\nimport { getGeneratedImageSize } from './generateImageSize';\nimport { ImageEditElementClass } from '../types/ImageEditElementClass';\nimport { isElementOfType, isNodeOfType } from 'roosterjs-content-model-dom';\nimport { updateHandleCursor } from './updateHandleCursor';\nimport { updateSideHandlesVisibility } from '../Resizer/updateSideHandlesVisibility';\nimport type { ImageEditOptions } from '../types/ImageEditOptions';\nimport type { ImageMetadataFormat } from 'roosterjs-content-model-types';\nimport {\n getPx,\n isASmallImage,\n isRTL,\n setFlipped,\n setSize,\n setWrapperSizeDimensions,\n} from './imageEditUtils';\n\n/**\n * @internal\n */\nexport function updateWrapper(\n editInfo: ImageMetadataFormat,\n options: ImageEditOptions,\n image: HTMLImageElement,\n clonedImage: HTMLImageElement,\n wrapper: HTMLSpanElement,\n resizers?: HTMLDivElement[],\n croppers?: HTMLDivElement[]\n) {\n const {\n angleRad,\n bottomPercent,\n leftPercent,\n rightPercent,\n topPercent,\n flippedHorizontal,\n flippedVertical,\n } = editInfo;\n\n const generateImageSize = getGeneratedImageSize(editInfo, croppers && croppers?.length > 0);\n if (!generateImageSize) {\n return;\n }\n const {\n targetWidth,\n targetHeight,\n originalWidth,\n originalHeight,\n visibleWidth,\n visibleHeight,\n } = generateImageSize;\n\n const marginHorizontal = (targetWidth - visibleWidth) / 2;\n const marginVertical = (targetHeight - visibleHeight) / 2;\n const cropLeftPx = originalWidth * (leftPercent || 0);\n const cropRightPx = originalWidth * (rightPercent || 0);\n const cropTopPx = originalHeight * (topPercent || 0);\n const cropBottomPx = originalHeight * (bottomPercent || 0);\n\n // Update size and margin of the wrapper\n wrapper.style.margin = `${marginVertical}px ${marginHorizontal}px`;\n wrapper.style.transform = `rotate(${angleRad}rad)`;\n setWrapperSizeDimensions(wrapper, image, visibleWidth, visibleHeight);\n\n // Update the text-alignment to avoid the image to overflow if the parent element have align center or right\n // or if the direction is Right To Left\n if (isRTL(clonedImage)) {\n wrapper.style.textAlign = 'right';\n if (!croppers) {\n clonedImage.style.left = getPx(cropLeftPx);\n clonedImage.style.right = getPx(-cropRightPx);\n }\n } else {\n wrapper.style.textAlign = 'left';\n }\n\n // Update size of the image\n clonedImage.style.width = getPx(originalWidth);\n clonedImage.style.height = getPx(originalHeight);\n clonedImage.style.verticalAlign = 'bottom';\n clonedImage.style.position = 'absolute';\n\n //Update flip direction\n setFlipped(clonedImage.parentElement, flippedHorizontal, flippedVertical);\n const smallImage = isASmallImage(visibleWidth, visibleWidth);\n\n if (!croppers) {\n // For rotate/resize, set the margin of the image so that cropped part won't be visible\n clonedImage.style.margin = `${-cropTopPx}px 0 0 ${-cropLeftPx}px`;\n }\n\n if (croppers && croppers.length > 0) {\n const cropContainer = croppers[0];\n const cropOverlays = croppers.filter(\n cropper => cropper.className === ImageEditElementClass.CropOverlay\n );\n\n setSize(\n cropContainer,\n cropLeftPx,\n cropTopPx,\n cropRightPx,\n cropBottomPx,\n undefined,\n undefined\n );\n setSize(cropOverlays[0], 0, 0, cropRightPx, undefined, undefined, cropTopPx);\n setSize(cropOverlays[1], undefined, 0, 0, cropBottomPx, cropRightPx, undefined);\n setSize(cropOverlays[2], cropLeftPx, undefined, 0, 0, undefined, cropBottomPx);\n setSize(cropOverlays[3], 0, cropTopPx, undefined, 0, cropLeftPx, undefined);\n\n if (angleRad !== undefined) {\n updateHandleCursor(croppers, angleRad);\n }\n }\n\n if (resizers) {\n const clientWidth = wrapper.clientWidth;\n const clientHeight = wrapper.clientHeight;\n\n doubleCheckResize(editInfo, options.preserveRatio || false, clientWidth, clientHeight);\n\n const resizeHandles = resizers\n .map(resizer => {\n const resizeHandle = resizer.firstElementChild;\n if (\n isNodeOfType(resizeHandle, 'ELEMENT_NODE') &&\n isElementOfType(resizeHandle, 'div')\n ) {\n return resizeHandle;\n }\n })\n .filter(handle => !!handle) as HTMLDivElement[];\n\n if (angleRad !== undefined) {\n updateHandleCursor(resizeHandles, angleRad);\n }\n\n updateSideHandlesVisibility(resizeHandles, smallImage);\n }\n}\n"]}
package/lib/index.d.ts CHANGED
@@ -2,7 +2,7 @@ export { TableEditPlugin } from './tableEdit/TableEditPlugin';
2
2
  export { OnTableEditorCreatedCallback } from './tableEdit/OnTableEditorCreatedCallback';
3
3
  export { TableEditFeatureName } from './tableEdit/editors/features/TableEditFeatureName';
4
4
  export { PastePlugin } from './paste/PastePlugin';
5
- export { EditPlugin } from './edit/EditPlugin';
5
+ export { EditPlugin, EditOptions } from './edit/EditPlugin';
6
6
  export { AutoFormatPlugin, AutoFormatOptions } from './autoFormat/AutoFormatPlugin';
7
7
  export { ShortcutBold, ShortcutItalic, ShortcutUnderline, ShortcutClearFormat, ShortcutUndo, ShortcutUndo2, ShortcutRedo, ShortcutRedoAlt, ShortcutRedoMacOS, ShortcutBullet, ShortcutNumbering, ShortcutIncreaseFont, ShortcutDecreaseFont, ShortcutIndentList, ShortcutOutdentList, } from './shortcut/shortcuts';
8
8
  export { ShortcutPlugin } from './shortcut/ShortcutPlugin';
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../packages/roosterjs-content-model-plugins/lib/index.ts"],"names":[],"mappings":";;;AAAA,+DAA8D;AAArD,kHAAA,eAAe,OAAA;AAGxB,mDAAkD;AAAzC,0GAAA,WAAW,OAAA;AACpB,gDAA+C;AAAtC,wGAAA,UAAU,OAAA;AACnB,kEAAoF;AAA3E,oHAAA,gBAAgB,OAAA;AAEzB,kDAgB8B;AAf1B,yGAAA,YAAY,OAAA;AACZ,2GAAA,cAAc,OAAA;AACd,8GAAA,iBAAiB,OAAA;AACjB,gHAAA,mBAAmB,OAAA;AACnB,yGAAA,YAAY,OAAA;AACZ,0GAAA,aAAa,OAAA;AACb,yGAAA,YAAY,OAAA;AACZ,4GAAA,eAAe,OAAA;AACf,8GAAA,iBAAiB,OAAA;AACjB,2GAAA,cAAc,OAAA;AACd,8GAAA,iBAAiB,OAAA;AACjB,iHAAA,oBAAoB,OAAA;AACpB,iHAAA,oBAAoB,OAAA;AACpB,+GAAA,kBAAkB,OAAA;AAClB,gHAAA,mBAAmB,OAAA;AAEvB,4DAA2D;AAAlD,gHAAA,cAAc,OAAA;AAEvB,iFAAoG;AAA3F,8HAAA,qBAAqB,OAAA;AAC9B,+DAA8D;AAArD,kHAAA,eAAe,OAAA;AAExB,4DAA4E;AAAnE,gHAAA,cAAc,OAAA;AACvB,+DAA8D;AAArD,kHAAA,eAAe,OAAA;AAExB,sDAAqD;AAA5C,4GAAA,YAAY,OAAA;AAGrB,2EAAyF;AAAhF,0HAAA,mBAAmB,OAAA;AAC5B,+DAA8D;AAArD,kHAAA,eAAe,OAAA","sourcesContent":["export { TableEditPlugin } from './tableEdit/TableEditPlugin';\nexport { OnTableEditorCreatedCallback } from './tableEdit/OnTableEditorCreatedCallback';\nexport { TableEditFeatureName } from './tableEdit/editors/features/TableEditFeatureName';\nexport { PastePlugin } from './paste/PastePlugin';\nexport { EditPlugin } from './edit/EditPlugin';\nexport { AutoFormatPlugin, AutoFormatOptions } from './autoFormat/AutoFormatPlugin';\n\nexport {\n ShortcutBold,\n ShortcutItalic,\n ShortcutUnderline,\n ShortcutClearFormat,\n ShortcutUndo,\n ShortcutUndo2,\n ShortcutRedo,\n ShortcutRedoAlt,\n ShortcutRedoMacOS,\n ShortcutBullet,\n ShortcutNumbering,\n ShortcutIncreaseFont,\n ShortcutDecreaseFont,\n ShortcutIndentList,\n ShortcutOutdentList,\n} from './shortcut/shortcuts';\nexport { ShortcutPlugin } from './shortcut/ShortcutPlugin';\nexport { ShortcutKeyDefinition, ShortcutCommand } from './shortcut/ShortcutCommand';\nexport { ContextMenuPluginBase, ContextMenuOptions } from './contextMenuBase/ContextMenuPluginBase';\nexport { WatermarkPlugin } from './watermark/WatermarkPlugin';\nexport { WatermarkFormat } from './watermark/WatermarkFormat';\nexport { MarkdownPlugin, MarkdownOptions } from './markdown/MarkdownPlugin';\nexport { HyperlinkPlugin } from './hyperlink/HyperlinkPlugin';\nexport { HyperlinkToolTip } from './hyperlink/HyperlinkToolTip';\nexport { PickerPlugin } from './picker/PickerPlugin';\nexport { PickerHelper } from './picker/PickerHelper';\nexport { PickerSelectionChangMode, PickerDirection, PickerHandler } from './picker/PickerHandler';\nexport { CustomReplacePlugin, CustomReplace } from './customReplace/CustomReplacePlugin';\nexport { ImageEditPlugin } from './imageEdit/ImageEditPlugin';\nexport { ImageEditOptions } from './imageEdit/types/ImageEditOptions';\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../packages/roosterjs-content-model-plugins/lib/index.ts"],"names":[],"mappings":";;;AAAA,+DAA8D;AAArD,kHAAA,eAAe,OAAA;AAGxB,mDAAkD;AAAzC,0GAAA,WAAW,OAAA;AACpB,gDAA4D;AAAnD,wGAAA,UAAU,OAAA;AACnB,kEAAoF;AAA3E,oHAAA,gBAAgB,OAAA;AAEzB,kDAgB8B;AAf1B,yGAAA,YAAY,OAAA;AACZ,2GAAA,cAAc,OAAA;AACd,8GAAA,iBAAiB,OAAA;AACjB,gHAAA,mBAAmB,OAAA;AACnB,yGAAA,YAAY,OAAA;AACZ,0GAAA,aAAa,OAAA;AACb,yGAAA,YAAY,OAAA;AACZ,4GAAA,eAAe,OAAA;AACf,8GAAA,iBAAiB,OAAA;AACjB,2GAAA,cAAc,OAAA;AACd,8GAAA,iBAAiB,OAAA;AACjB,iHAAA,oBAAoB,OAAA;AACpB,iHAAA,oBAAoB,OAAA;AACpB,+GAAA,kBAAkB,OAAA;AAClB,gHAAA,mBAAmB,OAAA;AAEvB,4DAA2D;AAAlD,gHAAA,cAAc,OAAA;AAEvB,iFAAoG;AAA3F,8HAAA,qBAAqB,OAAA;AAC9B,+DAA8D;AAArD,kHAAA,eAAe,OAAA;AAExB,4DAA4E;AAAnE,gHAAA,cAAc,OAAA;AACvB,+DAA8D;AAArD,kHAAA,eAAe,OAAA;AAExB,sDAAqD;AAA5C,4GAAA,YAAY,OAAA;AAGrB,2EAAyF;AAAhF,0HAAA,mBAAmB,OAAA;AAC5B,+DAA8D;AAArD,kHAAA,eAAe,OAAA","sourcesContent":["export { TableEditPlugin } from './tableEdit/TableEditPlugin';\nexport { OnTableEditorCreatedCallback } from './tableEdit/OnTableEditorCreatedCallback';\nexport { TableEditFeatureName } from './tableEdit/editors/features/TableEditFeatureName';\nexport { PastePlugin } from './paste/PastePlugin';\nexport { EditPlugin, EditOptions } from './edit/EditPlugin';\nexport { AutoFormatPlugin, AutoFormatOptions } from './autoFormat/AutoFormatPlugin';\n\nexport {\n ShortcutBold,\n ShortcutItalic,\n ShortcutUnderline,\n ShortcutClearFormat,\n ShortcutUndo,\n ShortcutUndo2,\n ShortcutRedo,\n ShortcutRedoAlt,\n ShortcutRedoMacOS,\n ShortcutBullet,\n ShortcutNumbering,\n ShortcutIncreaseFont,\n ShortcutDecreaseFont,\n ShortcutIndentList,\n ShortcutOutdentList,\n} from './shortcut/shortcuts';\nexport { ShortcutPlugin } from './shortcut/ShortcutPlugin';\nexport { ShortcutKeyDefinition, ShortcutCommand } from './shortcut/ShortcutCommand';\nexport { ContextMenuPluginBase, ContextMenuOptions } from './contextMenuBase/ContextMenuPluginBase';\nexport { WatermarkPlugin } from './watermark/WatermarkPlugin';\nexport { WatermarkFormat } from './watermark/WatermarkFormat';\nexport { MarkdownPlugin, MarkdownOptions } from './markdown/MarkdownPlugin';\nexport { HyperlinkPlugin } from './hyperlink/HyperlinkPlugin';\nexport { HyperlinkToolTip } from './hyperlink/HyperlinkToolTip';\nexport { PickerPlugin } from './picker/PickerPlugin';\nexport { PickerHelper } from './picker/PickerHelper';\nexport { PickerSelectionChangMode, PickerDirection, PickerHandler } from './picker/PickerHandler';\nexport { CustomReplacePlugin, CustomReplace } from './customReplace/CustomReplacePlugin';\nexport { ImageEditPlugin } from './imageEdit/ImageEditPlugin';\nexport { ImageEditOptions } from './imageEdit/types/ImageEditOptions';\n"]}
@@ -3,7 +3,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.setFormat = void 0;
4
4
  var tslib_1 = require("tslib");
5
5
  var roosterjs_content_model_api_1 = require("roosterjs-content-model-api");
6
- var splitTextSegment_1 = require("../../pluginUtils/splitTextSegment");
7
6
  /**
8
7
  * @internal
9
8
  */
@@ -18,7 +17,7 @@ function setFormat(editor, character, format, codeFormat) {
18
17
  .substring(0, lastCharIndex - 1)
19
18
  .lastIndexOf(character);
20
19
  if (lastCharIndex - firstCharIndex > 2) {
21
- var formattedText = (0, splitTextSegment_1.splitTextSegment)(previousSegment, paragraph, firstCharIndex, lastCharIndex);
20
+ var formattedText = (0, roosterjs_content_model_api_1.splitTextSegment)(previousSegment, paragraph, firstCharIndex, lastCharIndex);
22
21
  formattedText.text = formattedText.text.replace(character, '').slice(0, -1);
23
22
  formattedText.format = (0, tslib_1.__assign)((0, tslib_1.__assign)({}, formattedText.format), format);
24
23
  if (codeFormat) {
@@ -1 +1 @@
1
- {"version":3,"file":"setFormat.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-plugins/lib/markdown/utils/setFormat.ts"],"names":[],"mappings":";;;;AAAA,2EAAqF;AACrF,uEAAsE;AAQtE;;GAEG;AACH,SAAgB,SAAS,CACrB,MAAe,EACf,SAAiB,EACjB,MAAiC,EACjC,UAAmC;IAEnC,IAAA,oEAAsC,EAClC,MAAM,EACN,UAAC,MAAM,EAAE,eAAe,EAAE,SAAS,EAAE,YAAY,EAAE,OAAO;QACtD,IAAI,eAAe,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,SAAS,EAAE;YACpE,IAAM,gBAAgB,GAAG,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAC3D,OAAO,CAAC,gBAAgB,mDACjB,YAAY,KACf,aAAa,EAAE,CAAC,CAAC,YAAY,CAAC,aAAa,EAC3C,MAAM,EAAE,CAAC,CAAC,YAAY,CAAC,MAAM,EAC7B,UAAU,EAAE,CAAA,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,UAAU,EAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,GAC5D,CAAC;YACF,IAAI,gBAAgB,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE;gBAC1C,IAAM,aAAa,GAAG,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC;gBAClD,IAAM,cAAc,GAAG,eAAe,CAAC,IAAI;qBACtC,SAAS,CAAC,CAAC,EAAE,aAAa,GAAG,CAAC,CAAC;qBAC/B,WAAW,CAAC,SAAS,CAAC,CAAC;gBAC5B,IAAI,aAAa,GAAG,cAAc,GAAG,CAAC,EAAE;oBACpC,IAAM,aAAa,GAAG,IAAA,mCAAgB,EAClC,eAAe,EACf,SAAS,EACT,cAAc,EACd,aAAa,CAChB,CAAC;oBAEF,aAAa,CAAC,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;oBAC5E,aAAa,CAAC,MAAM,mDACb,aAAa,CAAC,MAAM,GACpB,MAAM,CACZ,CAAC;oBACF,IAAI,UAAU,EAAE;wBACZ,aAAa,CAAC,IAAI,GAAG;4BACjB,MAAM,EAAE,UAAU;yBACrB,CAAC;qBACL;oBAED,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC;oBAClC,OAAO,IAAI,CAAC;iBACf;aACJ;SACJ;QACD,OAAO,KAAK,CAAC;IACjB,CAAC,CACJ,CAAC;AACN,CAAC;AAjDD,8BAiDC","sourcesContent":["import { formatTextSegmentBeforeSelectionMarker } from 'roosterjs-content-model-api';\nimport { splitTextSegment } from '../../pluginUtils/splitTextSegment';\n\nimport type {\n ContentModelCodeFormat,\n ContentModelSegmentFormat,\n IEditor,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport function setFormat(\n editor: IEditor,\n character: string,\n format: ContentModelSegmentFormat,\n codeFormat?: ContentModelCodeFormat\n) {\n formatTextSegmentBeforeSelectionMarker(\n editor,\n (_model, previousSegment, paragraph, markerFormat, context) => {\n if (previousSegment.text[previousSegment.text.length - 1] == character) {\n const textBeforeMarker = previousSegment.text.slice(0, -1);\n context.newPendingFormat = {\n ...markerFormat,\n strikethrough: !!markerFormat.strikethrough,\n italic: !!markerFormat.italic,\n fontWeight: markerFormat?.fontWeight ? 'bold' : undefined,\n };\n if (textBeforeMarker.indexOf(character) > -1) {\n const lastCharIndex = previousSegment.text.length;\n const firstCharIndex = previousSegment.text\n .substring(0, lastCharIndex - 1)\n .lastIndexOf(character);\n if (lastCharIndex - firstCharIndex > 2) {\n const formattedText = splitTextSegment(\n previousSegment,\n paragraph,\n firstCharIndex,\n lastCharIndex\n );\n\n formattedText.text = formattedText.text.replace(character, '').slice(0, -1);\n formattedText.format = {\n ...formattedText.format,\n ...format,\n };\n if (codeFormat) {\n formattedText.code = {\n format: codeFormat,\n };\n }\n\n context.canUndoByBackspace = true;\n return true;\n }\n }\n }\n return false;\n }\n );\n}\n"]}
1
+ {"version":3,"file":"setFormat.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-plugins/lib/markdown/utils/setFormat.ts"],"names":[],"mappings":";;;;AAAA,2EAGqC;AAOrC;;GAEG;AACH,SAAgB,SAAS,CACrB,MAAe,EACf,SAAiB,EACjB,MAAiC,EACjC,UAAmC;IAEnC,IAAA,oEAAsC,EAClC,MAAM,EACN,UAAC,MAAM,EAAE,eAAe,EAAE,SAAS,EAAE,YAAY,EAAE,OAAO;QACtD,IAAI,eAAe,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,SAAS,EAAE;YACpE,IAAM,gBAAgB,GAAG,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAC3D,OAAO,CAAC,gBAAgB,mDACjB,YAAY,KACf,aAAa,EAAE,CAAC,CAAC,YAAY,CAAC,aAAa,EAC3C,MAAM,EAAE,CAAC,CAAC,YAAY,CAAC,MAAM,EAC7B,UAAU,EAAE,CAAA,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,UAAU,EAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,GAC5D,CAAC;YACF,IAAI,gBAAgB,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE;gBAC1C,IAAM,aAAa,GAAG,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC;gBAClD,IAAM,cAAc,GAAG,eAAe,CAAC,IAAI;qBACtC,SAAS,CAAC,CAAC,EAAE,aAAa,GAAG,CAAC,CAAC;qBAC/B,WAAW,CAAC,SAAS,CAAC,CAAC;gBAC5B,IAAI,aAAa,GAAG,cAAc,GAAG,CAAC,EAAE;oBACpC,IAAM,aAAa,GAAG,IAAA,8CAAgB,EAClC,eAAe,EACf,SAAS,EACT,cAAc,EACd,aAAa,CAChB,CAAC;oBAEF,aAAa,CAAC,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;oBAC5E,aAAa,CAAC,MAAM,mDACb,aAAa,CAAC,MAAM,GACpB,MAAM,CACZ,CAAC;oBACF,IAAI,UAAU,EAAE;wBACZ,aAAa,CAAC,IAAI,GAAG;4BACjB,MAAM,EAAE,UAAU;yBACrB,CAAC;qBACL;oBAED,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC;oBAClC,OAAO,IAAI,CAAC;iBACf;aACJ;SACJ;QACD,OAAO,KAAK,CAAC;IACjB,CAAC,CACJ,CAAC;AACN,CAAC;AAjDD,8BAiDC","sourcesContent":["import {\n formatTextSegmentBeforeSelectionMarker,\n splitTextSegment,\n} from 'roosterjs-content-model-api';\nimport type {\n ContentModelCodeFormat,\n ContentModelSegmentFormat,\n IEditor,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport function setFormat(\n editor: IEditor,\n character: string,\n format: ContentModelSegmentFormat,\n codeFormat?: ContentModelCodeFormat\n) {\n formatTextSegmentBeforeSelectionMarker(\n editor,\n (_model, previousSegment, paragraph, markerFormat, context) => {\n if (previousSegment.text[previousSegment.text.length - 1] == character) {\n const textBeforeMarker = previousSegment.text.slice(0, -1);\n context.newPendingFormat = {\n ...markerFormat,\n strikethrough: !!markerFormat.strikethrough,\n italic: !!markerFormat.italic,\n fontWeight: markerFormat?.fontWeight ? 'bold' : undefined,\n };\n if (textBeforeMarker.indexOf(character) > -1) {\n const lastCharIndex = previousSegment.text.length;\n const firstCharIndex = previousSegment.text\n .substring(0, lastCharIndex - 1)\n .lastIndexOf(character);\n if (lastCharIndex - firstCharIndex > 2) {\n const formattedText = splitTextSegment(\n previousSegment,\n paragraph,\n firstCharIndex,\n lastCharIndex\n );\n\n formattedText.text = formattedText.text.replace(character, '').slice(0, -1);\n formattedText.format = {\n ...formattedText.format,\n ...format,\n };\n if (codeFormat) {\n formattedText.code = {\n format: codeFormat,\n };\n }\n\n context.canUndoByBackspace = true;\n return true;\n }\n }\n }\n return false;\n }\n );\n}\n"]}
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getQueryString = void 0;
4
- var splitTextSegment_1 = require("../pluginUtils/splitTextSegment");
4
+ var roosterjs_content_model_api_1 = require("roosterjs-content-model-api");
5
5
  /**
6
6
  * @internal
7
7
  */
@@ -18,7 +18,7 @@ function getQueryString(triggerCharacter, paragraph, previousSegment, splittedSe
18
18
  if (index >= 0) {
19
19
  result = segment.text.substring(index) + result;
20
20
  splittedSegmentResult === null || splittedSegmentResult === void 0 ? void 0 : splittedSegmentResult.unshift(index > 0
21
- ? (0, splitTextSegment_1.splitTextSegment)(segment, paragraph, index, segment.text.length)
21
+ ? (0, roosterjs_content_model_api_1.splitTextSegment)(segment, paragraph, index, segment.text.length)
22
22
  : segment);
23
23
  break;
24
24
  }
@@ -1 +1 @@
1
- {"version":3,"file":"getQueryString.js","sourceRoot":"","sources":["../../../../packages/roosterjs-content-model-plugins/lib/picker/getQueryString.ts"],"names":[],"mappings":";;;AAAA,oEAAmE;AAMnE;;GAEG;AACH,SAAgB,cAAc,CAC1B,gBAAwB,EACxB,SAA8C,EAC9C,eAAiC,EACjC,qBAA0C;IAE1C,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,IAAI,CAAC,GAAG,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;IAEpD,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;QAChB,IAAM,OAAO,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAEtC,IAAI,OAAO,CAAC,WAAW,IAAI,MAAM,EAAE;YAC/B,MAAM,GAAG,EAAE,CAAC;YACZ,MAAM;SACT;QAED,IAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC;QAEzD,IAAI,KAAK,IAAI,CAAC,EAAE;YACZ,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC;YAEhD,qBAAqB,aAArB,qBAAqB,uBAArB,qBAAqB,CAAE,OAAO,CAC1B,KAAK,GAAG,CAAC;gBACL,CAAC,CAAC,IAAA,mCAAgB,EAAC,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;gBAClE,CAAC,CAAC,OAAO,CAChB,CAAC;YAEF,MAAM;SACT;aAAM;YACH,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,MAAM,CAAC;YAE/B,qBAAqB,aAArB,qBAAqB,uBAArB,qBAAqB,CAAE,OAAO,CAAC,OAAO,CAAC,CAAC;SAC3C;KACJ;IAED,IAAI,CAAC,GAAG,CAAC,EAAE;QACP,MAAM,GAAG,EAAE,CAAC;KACf;IAED,OAAO,MAAM,CAAC;AAClB,CAAC;AAzCD,wCAyCC","sourcesContent":["import { splitTextSegment } from '../pluginUtils/splitTextSegment';\nimport type {\n ContentModelText,\n ShallowMutableContentModelParagraph,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport function getQueryString(\n triggerCharacter: string,\n paragraph: ShallowMutableContentModelParagraph,\n previousSegment: ContentModelText,\n splittedSegmentResult?: ContentModelText[]\n): string {\n let result = '';\n let i = paragraph.segments.indexOf(previousSegment);\n\n for (; i >= 0; i--) {\n const segment = paragraph.segments[i];\n\n if (segment.segmentType != 'Text') {\n result = '';\n break;\n }\n\n const index = segment.text.lastIndexOf(triggerCharacter);\n\n if (index >= 0) {\n result = segment.text.substring(index) + result;\n\n splittedSegmentResult?.unshift(\n index > 0\n ? splitTextSegment(segment, paragraph, index, segment.text.length)\n : segment\n );\n\n break;\n } else {\n result = segment.text + result;\n\n splittedSegmentResult?.unshift(segment);\n }\n }\n\n if (i < 0) {\n result = '';\n }\n\n return result;\n}\n"]}
1
+ {"version":3,"file":"getQueryString.js","sourceRoot":"","sources":["../../../../packages/roosterjs-content-model-plugins/lib/picker/getQueryString.ts"],"names":[],"mappings":";;;AAAA,2EAA+D;AAM/D;;GAEG;AACH,SAAgB,cAAc,CAC1B,gBAAwB,EACxB,SAA8C,EAC9C,eAAiC,EACjC,qBAA0C;IAE1C,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,IAAI,CAAC,GAAG,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;IAEpD,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;QAChB,IAAM,OAAO,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAEtC,IAAI,OAAO,CAAC,WAAW,IAAI,MAAM,EAAE;YAC/B,MAAM,GAAG,EAAE,CAAC;YACZ,MAAM;SACT;QAED,IAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC;QAEzD,IAAI,KAAK,IAAI,CAAC,EAAE;YACZ,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC;YAEhD,qBAAqB,aAArB,qBAAqB,uBAArB,qBAAqB,CAAE,OAAO,CAC1B,KAAK,GAAG,CAAC;gBACL,CAAC,CAAC,IAAA,8CAAgB,EAAC,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;gBAClE,CAAC,CAAC,OAAO,CAChB,CAAC;YAEF,MAAM;SACT;aAAM;YACH,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,MAAM,CAAC;YAE/B,qBAAqB,aAArB,qBAAqB,uBAArB,qBAAqB,CAAE,OAAO,CAAC,OAAO,CAAC,CAAC;SAC3C;KACJ;IAED,IAAI,CAAC,GAAG,CAAC,EAAE;QACP,MAAM,GAAG,EAAE,CAAC;KACf;IAED,OAAO,MAAM,CAAC;AAClB,CAAC;AAzCD,wCAyCC","sourcesContent":["import { splitTextSegment } from 'roosterjs-content-model-api';\nimport type {\n ContentModelText,\n ShallowMutableContentModelParagraph,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport function getQueryString(\n triggerCharacter: string,\n paragraph: ShallowMutableContentModelParagraph,\n previousSegment: ContentModelText,\n splittedSegmentResult?: ContentModelText[]\n): string {\n let result = '';\n let i = paragraph.segments.indexOf(previousSegment);\n\n for (; i >= 0; i--) {\n const segment = paragraph.segments[i];\n\n if (segment.segmentType != 'Text') {\n result = '';\n break;\n }\n\n const index = segment.text.lastIndexOf(triggerCharacter);\n\n if (index >= 0) {\n result = segment.text.substring(index) + result;\n\n splittedSegmentResult?.unshift(\n index > 0\n ? splitTextSegment(segment, paragraph, index, segment.text.length)\n : segment\n );\n\n break;\n } else {\n result = segment.text + result;\n\n splittedSegmentResult?.unshift(segment);\n }\n }\n\n if (i < 0) {\n result = '';\n }\n\n return result;\n}\n"]}
@@ -104,8 +104,10 @@ var TableEditor = /** @class */ (function () {
104
104
  _this.disposeTableInserter();
105
105
  _this.disposeCellResizers();
106
106
  };
107
- this.onEndTableMove = function () {
108
- _this.disposeTableMover();
107
+ this.onEndTableMove = function (disposeHandler) {
108
+ if (disposeHandler) {
109
+ _this.disposeTableMover();
110
+ }
109
111
  return _this.onFinishEditing();
110
112
  };
111
113
  this.onInserted = function () {