roosterjs-content-model-plugins 9.4.1 → 9.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +10 -10
- package/lib/autoFormat/hyphen/transformHyphen.d.ts +2 -2
- package/lib/autoFormat/hyphen/transformHyphen.js.map +1 -1
- package/lib/autoFormat/link/createLinkAfterSpace.d.ts +2 -2
- package/lib/autoFormat/link/createLinkAfterSpace.js.map +1 -1
- package/lib/autoFormat/list/keyboardListTrigger.d.ts +2 -2
- package/lib/autoFormat/list/keyboardListTrigger.js.map +1 -1
- package/lib/autoFormat/numbers/transformFraction.d.ts +2 -2
- package/lib/autoFormat/numbers/transformFraction.js.map +1 -1
- package/lib/autoFormat/numbers/transformOrdinals.d.ts +2 -2
- package/lib/autoFormat/numbers/transformOrdinals.js.map +1 -1
- package/lib/customReplace/CustomReplacePlugin.d.ts +2 -2
- package/lib/customReplace/CustomReplacePlugin.js.map +1 -1
- package/lib/edit/EditPlugin.d.ts +10 -0
- package/lib/edit/EditPlugin.js +39 -0
- package/lib/edit/EditPlugin.js.map +1 -1
- package/lib/edit/deleteSteps/deleteAllSegmentBefore.js +2 -1
- package/lib/edit/deleteSteps/deleteAllSegmentBefore.js.map +1 -1
- package/lib/edit/deleteSteps/deleteCollapsedSelection.js +5 -4
- package/lib/edit/deleteSteps/deleteCollapsedSelection.js.map +1 -1
- package/lib/edit/deleteSteps/deleteEmptyQuote.js +33 -29
- package/lib/edit/deleteSteps/deleteEmptyQuote.js.map +1 -1
- package/lib/edit/deleteSteps/deleteWordSelection.js +1 -1
- package/lib/edit/deleteSteps/deleteWordSelection.js.map +1 -1
- package/lib/edit/handleKeyboardEventCommon.d.ts +2 -2
- package/lib/edit/handleKeyboardEventCommon.js.map +1 -1
- package/lib/edit/inputSteps/handleEnterOnList.js +32 -56
- package/lib/edit/inputSteps/handleEnterOnList.js.map +1 -1
- package/lib/edit/inputSteps/handleEnterOnParagraph.d.ts +5 -0
- package/lib/edit/inputSteps/handleEnterOnParagraph.js +22 -0
- package/lib/edit/inputSteps/handleEnterOnParagraph.js.map +1 -0
- package/lib/edit/keyboardDelete.js +1 -1
- package/lib/edit/keyboardDelete.js.map +1 -1
- package/lib/edit/keyboardEnter.d.ts +5 -0
- package/lib/edit/keyboardEnter.js +44 -0
- package/lib/edit/keyboardEnter.js.map +1 -0
- package/lib/edit/keyboardInput.js +4 -18
- package/lib/edit/keyboardInput.js.map +1 -1
- package/lib/edit/keyboardTab.js.map +1 -1
- package/lib/edit/tabUtils/handleTabOnList.d.ts +2 -2
- package/lib/edit/tabUtils/handleTabOnList.js.map +1 -1
- package/lib/edit/tabUtils/handleTabOnParagraph.d.ts +2 -2
- package/lib/edit/tabUtils/handleTabOnParagraph.js +9 -7
- package/lib/edit/tabUtils/handleTabOnParagraph.js.map +1 -1
- package/lib/edit/tabUtils/handleTabOnTable.d.ts +2 -2
- package/lib/edit/tabUtils/handleTabOnTable.js.map +1 -1
- package/lib/edit/tabUtils/handleTabOnTableCell.d.ts +2 -2
- package/lib/edit/tabUtils/handleTabOnTableCell.js +5 -4
- package/lib/edit/tabUtils/handleTabOnTableCell.js.map +1 -1
- package/lib/edit/utils/getLeafSiblingBlock.d.ts +5 -5
- package/lib/edit/utils/getLeafSiblingBlock.js.map +1 -1
- package/lib/edit/utils/splitParagraph.d.ts +9 -0
- package/lib/edit/utils/splitParagraph.js +29 -0
- package/lib/edit/utils/splitParagraph.js.map +1 -0
- package/lib/imageEdit/Cropper/createImageCropper.d.ts +10 -0
- package/lib/imageEdit/Cropper/createImageCropper.js +80 -0
- package/lib/imageEdit/Cropper/createImageCropper.js.map +1 -0
- package/lib/imageEdit/Cropper/cropperContext.d.ts +8 -0
- package/lib/imageEdit/Cropper/cropperContext.js +73 -0
- package/lib/imageEdit/Cropper/cropperContext.js.map +1 -0
- package/lib/imageEdit/ImageEditPlugin.d.ts +66 -0
- package/lib/imageEdit/ImageEditPlugin.js +328 -0
- package/lib/imageEdit/ImageEditPlugin.js.map +1 -0
- package/lib/imageEdit/Resizer/createImageResizer.d.ts +12 -0
- package/lib/imageEdit/Resizer/createImageResizer.js +89 -0
- package/lib/imageEdit/Resizer/createImageResizer.js.map +1 -0
- package/lib/imageEdit/Resizer/resizerContext.d.ts +8 -0
- package/lib/imageEdit/Resizer/resizerContext.js +61 -0
- package/lib/imageEdit/Resizer/resizerContext.js.map +1 -0
- package/lib/imageEdit/Resizer/updateSideHandlesVisibility.d.ts +4 -0
- package/lib/imageEdit/Resizer/updateSideHandlesVisibility.js +17 -0
- package/lib/imageEdit/Resizer/updateSideHandlesVisibility.js.map +1 -0
- package/lib/imageEdit/Rotator/createImageRotator.d.ts +6 -0
- package/lib/imageEdit/Rotator/createImageRotator.js +76 -0
- package/lib/imageEdit/Rotator/createImageRotator.js.map +1 -0
- package/lib/imageEdit/Rotator/rotatorContext.d.ts +8 -0
- package/lib/imageEdit/Rotator/rotatorContext.js +36 -0
- package/lib/imageEdit/Rotator/rotatorContext.js.map +1 -0
- package/lib/imageEdit/Rotator/updateRotateHandle.d.ts +7 -0
- package/lib/imageEdit/Rotator/updateRotateHandle.js +55 -0
- package/lib/imageEdit/Rotator/updateRotateHandle.js.map +1 -0
- package/lib/imageEdit/constants/constants.d.ts +73 -0
- package/lib/imageEdit/constants/constants.js +81 -0
- package/lib/imageEdit/constants/constants.js.map +1 -0
- package/lib/imageEdit/types/DragAndDropContext.d.ts +39 -0
- package/lib/imageEdit/types/DragAndDropContext.js +3 -0
- package/lib/imageEdit/types/DragAndDropContext.js.map +1 -0
- package/lib/imageEdit/types/GeneratedImageSize.d.ts +33 -0
- package/lib/imageEdit/types/GeneratedImageSize.js +3 -0
- package/lib/imageEdit/types/GeneratedImageSize.js.map +1 -0
- package/lib/imageEdit/types/ImageEditElementClass.d.ts +30 -0
- package/lib/imageEdit/types/ImageEditElementClass.js +35 -0
- package/lib/imageEdit/types/ImageEditElementClass.js.map +1 -0
- package/lib/imageEdit/types/ImageEditOptions.d.ts +55 -0
- package/lib/imageEdit/types/ImageEditOptions.js +3 -0
- package/lib/imageEdit/types/ImageEditOptions.js.map +1 -0
- package/lib/imageEdit/types/ImageHtmlOptions.d.ts +18 -0
- package/lib/imageEdit/types/ImageHtmlOptions.js +3 -0
- package/lib/imageEdit/types/ImageHtmlOptions.js.map +1 -0
- package/lib/imageEdit/utils/applyChange.d.ts +12 -0
- package/lib/imageEdit/utils/applyChange.js +77 -0
- package/lib/imageEdit/utils/applyChange.js.map +1 -0
- package/lib/imageEdit/utils/canRegenerateImage.d.ts +8 -0
- package/lib/imageEdit/utils/canRegenerateImage.js +32 -0
- package/lib/imageEdit/utils/canRegenerateImage.js.map +1 -0
- package/lib/imageEdit/utils/checkEditInfoState.d.ts +41 -0
- package/lib/imageEdit/utils/checkEditInfoState.js +54 -0
- package/lib/imageEdit/utils/checkEditInfoState.js.map +1 -0
- package/lib/imageEdit/utils/createImageWrapper.d.ts +18 -0
- package/lib/imageEdit/utils/createImageWrapper.js +87 -0
- package/lib/imageEdit/utils/createImageWrapper.js.map +1 -0
- package/lib/imageEdit/utils/doubleCheckResize.d.ts +12 -0
- package/lib/imageEdit/utils/doubleCheckResize.js +36 -0
- package/lib/imageEdit/utils/doubleCheckResize.js.map +1 -0
- package/lib/imageEdit/utils/generateDataURL.d.ts +13 -0
- package/lib/imageEdit/utils/generateDataURL.js +50 -0
- package/lib/imageEdit/utils/generateDataURL.js.map +1 -0
- package/lib/imageEdit/utils/generateImageSize.d.ts +15 -0
- package/lib/imageEdit/utils/generateImageSize.js +46 -0
- package/lib/imageEdit/utils/generateImageSize.js.map +1 -0
- package/lib/imageEdit/utils/getDropAndDragHelpers.d.ts +10 -0
- package/lib/imageEdit/utils/getDropAndDragHelpers.js +24 -0
- package/lib/imageEdit/utils/getDropAndDragHelpers.js.map +1 -0
- package/lib/imageEdit/utils/getHTMLImageOptions.d.ts +7 -0
- package/lib/imageEdit/utils/getHTMLImageOptions.js +22 -0
- package/lib/imageEdit/utils/getHTMLImageOptions.js.map +1 -0
- package/lib/imageEdit/utils/getSelectedContentModelImage.d.ts +5 -0
- package/lib/imageEdit/utils/getSelectedContentModelImage.js +16 -0
- package/lib/imageEdit/utils/getSelectedContentModelImage.js.map +1 -0
- package/lib/imageEdit/utils/imageEditUtils.d.ts +39 -0
- package/lib/imageEdit/utils/imageEditUtils.js +102 -0
- package/lib/imageEdit/utils/imageEditUtils.js.map +1 -0
- package/lib/imageEdit/utils/updateHandleCursor.d.ts +7 -0
- package/lib/imageEdit/utils/updateHandleCursor.js +34 -0
- package/lib/imageEdit/utils/updateHandleCursor.js.map +1 -0
- package/lib/imageEdit/utils/updateImageEditInfo.d.ts +10 -0
- package/lib/imageEdit/utils/updateImageEditInfo.js +49 -0
- package/lib/imageEdit/utils/updateImageEditInfo.js.map +1 -0
- package/lib/imageEdit/utils/updateWrapper.d.ts +6 -0
- package/lib/imageEdit/utils/updateWrapper.js +87 -0
- package/lib/imageEdit/utils/updateWrapper.js.map +1 -0
- package/lib/index.d.ts +2 -1
- package/lib/index.js +3 -3
- package/lib/index.js.map +1 -1
- package/lib/paste/DefaultSanitizers.d.ts +10 -0
- package/lib/paste/DefaultSanitizers.js +25 -0
- package/lib/paste/DefaultSanitizers.js.map +1 -0
- package/lib/paste/PastePlugin.d.ts +4 -2
- package/lib/paste/PastePlugin.js +26 -1
- package/lib/paste/PastePlugin.js.map +1 -1
- package/lib/paste/WordDesktop/processPastedContentFromWordDesktop.js +13 -0
- package/lib/paste/WordDesktop/processPastedContentFromWordDesktop.js.map +1 -1
- package/lib/paste/utils/chainSanitizerCallback.d.ts +9 -0
- package/lib/paste/utils/chainSanitizerCallback.js +36 -0
- package/lib/paste/utils/chainSanitizerCallback.js.map +1 -0
- package/lib/picker/getQueryString.d.ts +2 -2
- package/lib/picker/getQueryString.js.map +1 -1
- package/lib/pluginUtils/splitTextSegment.d.ts +2 -2
- package/lib/pluginUtils/splitTextSegment.js.map +1 -1
- package/lib/tableEdit/editors/TableEditor.d.ts +3 -0
- package/lib/tableEdit/editors/TableEditor.js +4 -0
- package/lib/tableEdit/editors/TableEditor.js.map +1 -1
- package/lib/tableEdit/editors/features/CellResizer.d.ts +39 -1
- package/lib/tableEdit/editors/features/CellResizer.js +27 -11
- package/lib/tableEdit/editors/features/CellResizer.js.map +1 -1
- package/lib/tableEdit/editors/features/TableInserter.d.ts +17 -0
- package/lib/tableEdit/editors/features/TableInserter.js +6 -1
- package/lib/tableEdit/editors/features/TableInserter.js.map +1 -1
- package/lib/tableEdit/editors/features/TableMover.d.ts +2 -2
- package/lib/tableEdit/editors/features/TableMover.js +4 -4
- package/lib/tableEdit/editors/features/TableMover.js.map +1 -1
- package/lib/tableEdit/editors/features/TableResizer.d.ts +40 -1
- package/lib/tableEdit/editors/features/TableResizer.js +25 -7
- package/lib/tableEdit/editors/features/TableResizer.js.map +1 -1
- package/lib/tableEdit/editors/utils/getTableFromContentModel.d.ts +2 -2
- package/lib/tableEdit/editors/utils/getTableFromContentModel.js.map +1 -1
- package/lib-amd/autoFormat/hyphen/transformHyphen.d.ts +2 -2
- package/lib-amd/autoFormat/hyphen/transformHyphen.js.map +1 -1
- package/lib-amd/autoFormat/link/createLinkAfterSpace.d.ts +2 -2
- package/lib-amd/autoFormat/link/createLinkAfterSpace.js.map +1 -1
- package/lib-amd/autoFormat/list/keyboardListTrigger.d.ts +2 -2
- package/lib-amd/autoFormat/list/keyboardListTrigger.js.map +1 -1
- package/lib-amd/autoFormat/numbers/transformFraction.d.ts +2 -2
- package/lib-amd/autoFormat/numbers/transformFraction.js.map +1 -1
- package/lib-amd/autoFormat/numbers/transformOrdinals.d.ts +2 -2
- package/lib-amd/autoFormat/numbers/transformOrdinals.js.map +1 -1
- package/lib-amd/customReplace/CustomReplacePlugin.d.ts +2 -2
- package/lib-amd/customReplace/CustomReplacePlugin.js.map +1 -1
- package/lib-amd/edit/EditPlugin.d.ts +10 -0
- package/lib-amd/edit/EditPlugin.js +38 -1
- package/lib-amd/edit/EditPlugin.js.map +1 -1
- package/lib-amd/edit/deleteSteps/deleteAllSegmentBefore.js +2 -1
- package/lib-amd/edit/deleteSteps/deleteAllSegmentBefore.js.map +1 -1
- package/lib-amd/edit/deleteSteps/deleteCollapsedSelection.js +5 -4
- package/lib-amd/edit/deleteSteps/deleteCollapsedSelection.js.map +1 -1
- package/lib-amd/edit/deleteSteps/deleteEmptyQuote.js +33 -30
- package/lib-amd/edit/deleteSteps/deleteEmptyQuote.js.map +1 -1
- package/lib-amd/edit/deleteSteps/deleteWordSelection.js +1 -1
- package/lib-amd/edit/deleteSteps/deleteWordSelection.js.map +1 -1
- package/lib-amd/edit/handleKeyboardEventCommon.d.ts +2 -2
- package/lib-amd/edit/handleKeyboardEventCommon.js.map +1 -1
- package/lib-amd/edit/inputSteps/handleEnterOnList.js +32 -57
- package/lib-amd/edit/inputSteps/handleEnterOnList.js.map +1 -1
- package/lib-amd/edit/inputSteps/handleEnterOnParagraph.d.ts +5 -0
- package/lib-amd/edit/inputSteps/handleEnterOnParagraph.js +22 -0
- package/lib-amd/edit/inputSteps/handleEnterOnParagraph.js.map +1 -0
- package/lib-amd/edit/keyboardDelete.js +1 -1
- package/lib-amd/edit/keyboardDelete.js.map +1 -1
- package/lib-amd/edit/keyboardEnter.d.ts +5 -0
- package/lib-amd/edit/keyboardEnter.js +42 -0
- package/lib-amd/edit/keyboardEnter.js.map +1 -0
- package/lib-amd/edit/keyboardInput.js +5 -17
- package/lib-amd/edit/keyboardInput.js.map +1 -1
- package/lib-amd/edit/keyboardTab.js.map +1 -1
- package/lib-amd/edit/tabUtils/handleTabOnList.d.ts +2 -2
- package/lib-amd/edit/tabUtils/handleTabOnList.js.map +1 -1
- package/lib-amd/edit/tabUtils/handleTabOnParagraph.d.ts +2 -2
- package/lib-amd/edit/tabUtils/handleTabOnParagraph.js +9 -7
- package/lib-amd/edit/tabUtils/handleTabOnParagraph.js.map +1 -1
- package/lib-amd/edit/tabUtils/handleTabOnTable.d.ts +2 -2
- package/lib-amd/edit/tabUtils/handleTabOnTable.js.map +1 -1
- package/lib-amd/edit/tabUtils/handleTabOnTableCell.d.ts +2 -2
- package/lib-amd/edit/tabUtils/handleTabOnTableCell.js +5 -4
- package/lib-amd/edit/tabUtils/handleTabOnTableCell.js.map +1 -1
- package/lib-amd/edit/utils/getLeafSiblingBlock.d.ts +5 -5
- package/lib-amd/edit/utils/getLeafSiblingBlock.js.map +1 -1
- package/lib-amd/edit/utils/splitParagraph.d.ts +9 -0
- package/lib-amd/edit/utils/splitParagraph.js +29 -0
- package/lib-amd/edit/utils/splitParagraph.js.map +1 -0
- package/lib-amd/imageEdit/Cropper/createImageCropper.d.ts +10 -0
- package/lib-amd/imageEdit/Cropper/createImageCropper.js +78 -0
- package/lib-amd/imageEdit/Cropper/createImageCropper.js.map +1 -0
- package/lib-amd/imageEdit/Cropper/cropperContext.d.ts +8 -0
- package/lib-amd/imageEdit/Cropper/cropperContext.js +73 -0
- package/lib-amd/imageEdit/Cropper/cropperContext.js.map +1 -0
- package/lib-amd/imageEdit/ImageEditPlugin.d.ts +66 -0
- package/lib-amd/imageEdit/ImageEditPlugin.js +315 -0
- package/lib-amd/imageEdit/ImageEditPlugin.js.map +1 -0
- package/lib-amd/imageEdit/Resizer/createImageResizer.d.ts +12 -0
- package/lib-amd/imageEdit/Resizer/createImageResizer.js +86 -0
- package/lib-amd/imageEdit/Resizer/createImageResizer.js.map +1 -0
- package/lib-amd/imageEdit/Resizer/resizerContext.d.ts +8 -0
- package/lib-amd/imageEdit/Resizer/resizerContext.js +61 -0
- package/lib-amd/imageEdit/Resizer/resizerContext.js.map +1 -0
- package/lib-amd/imageEdit/Resizer/updateSideHandlesVisibility.d.ts +4 -0
- package/lib-amd/imageEdit/Resizer/updateSideHandlesVisibility.js +19 -0
- package/lib-amd/imageEdit/Resizer/updateSideHandlesVisibility.js.map +1 -0
- package/lib-amd/imageEdit/Rotator/createImageRotator.d.ts +6 -0
- package/lib-amd/imageEdit/Rotator/createImageRotator.js +74 -0
- package/lib-amd/imageEdit/Rotator/createImageRotator.js.map +1 -0
- package/lib-amd/imageEdit/Rotator/rotatorContext.d.ts +8 -0
- package/lib-amd/imageEdit/Rotator/rotatorContext.js +36 -0
- package/lib-amd/imageEdit/Rotator/rotatorContext.js.map +1 -0
- package/lib-amd/imageEdit/Rotator/updateRotateHandle.d.ts +7 -0
- package/lib-amd/imageEdit/Rotator/updateRotateHandle.js +56 -0
- package/lib-amd/imageEdit/Rotator/updateRotateHandle.js.map +1 -0
- package/lib-amd/imageEdit/constants/constants.d.ts +73 -0
- package/lib-amd/imageEdit/constants/constants.js +83 -0
- package/lib-amd/imageEdit/constants/constants.js.map +1 -0
- package/lib-amd/imageEdit/types/DragAndDropContext.d.ts +39 -0
- package/lib-amd/imageEdit/types/DragAndDropContext.js +5 -0
- package/lib-amd/imageEdit/types/DragAndDropContext.js.map +1 -0
- package/lib-amd/imageEdit/types/GeneratedImageSize.d.ts +33 -0
- package/lib-amd/imageEdit/types/GeneratedImageSize.js +5 -0
- package/lib-amd/imageEdit/types/GeneratedImageSize.js.map +1 -0
- package/lib-amd/imageEdit/types/ImageEditElementClass.d.ts +30 -0
- package/lib-amd/imageEdit/types/ImageEditElementClass.js +37 -0
- package/lib-amd/imageEdit/types/ImageEditElementClass.js.map +1 -0
- package/lib-amd/imageEdit/types/ImageEditOptions.d.ts +55 -0
- package/lib-amd/imageEdit/types/ImageEditOptions.js +5 -0
- package/lib-amd/imageEdit/types/ImageEditOptions.js.map +1 -0
- package/lib-amd/imageEdit/types/ImageHtmlOptions.d.ts +18 -0
- package/lib-amd/imageEdit/types/ImageHtmlOptions.js +5 -0
- package/lib-amd/imageEdit/types/ImageHtmlOptions.js.map +1 -0
- package/lib-amd/imageEdit/utils/applyChange.d.ts +12 -0
- package/lib-amd/imageEdit/utils/applyChange.js +75 -0
- package/lib-amd/imageEdit/utils/applyChange.js.map +1 -0
- package/lib-amd/imageEdit/utils/canRegenerateImage.d.ts +8 -0
- package/lib-amd/imageEdit/utils/canRegenerateImage.js +34 -0
- package/lib-amd/imageEdit/utils/canRegenerateImage.js.map +1 -0
- package/lib-amd/imageEdit/utils/checkEditInfoState.d.ts +41 -0
- package/lib-amd/imageEdit/utils/checkEditInfoState.js +55 -0
- package/lib-amd/imageEdit/utils/checkEditInfoState.js.map +1 -0
- package/lib-amd/imageEdit/utils/createImageWrapper.d.ts +18 -0
- package/lib-amd/imageEdit/utils/createImageWrapper.js +86 -0
- package/lib-amd/imageEdit/utils/createImageWrapper.js.map +1 -0
- package/lib-amd/imageEdit/utils/doubleCheckResize.d.ts +12 -0
- package/lib-amd/imageEdit/utils/doubleCheckResize.js +38 -0
- package/lib-amd/imageEdit/utils/doubleCheckResize.js.map +1 -0
- package/lib-amd/imageEdit/utils/generateDataURL.d.ts +13 -0
- package/lib-amd/imageEdit/utils/generateDataURL.js +51 -0
- package/lib-amd/imageEdit/utils/generateDataURL.js.map +1 -0
- package/lib-amd/imageEdit/utils/generateImageSize.d.ts +15 -0
- package/lib-amd/imageEdit/utils/generateImageSize.js +48 -0
- package/lib-amd/imageEdit/utils/generateImageSize.js.map +1 -0
- package/lib-amd/imageEdit/utils/getDropAndDragHelpers.d.ts +10 -0
- package/lib-amd/imageEdit/utils/getDropAndDragHelpers.js +24 -0
- package/lib-amd/imageEdit/utils/getDropAndDragHelpers.js.map +1 -0
- package/lib-amd/imageEdit/utils/getHTMLImageOptions.d.ts +7 -0
- package/lib-amd/imageEdit/utils/getHTMLImageOptions.js +23 -0
- package/lib-amd/imageEdit/utils/getHTMLImageOptions.js.map +1 -0
- package/lib-amd/imageEdit/utils/getSelectedContentModelImage.d.ts +5 -0
- package/lib-amd/imageEdit/utils/getSelectedContentModelImage.js +17 -0
- package/lib-amd/imageEdit/utils/getSelectedContentModelImage.js.map +1 -0
- package/lib-amd/imageEdit/utils/imageEditUtils.d.ts +39 -0
- package/lib-amd/imageEdit/utils/imageEditUtils.js +103 -0
- package/lib-amd/imageEdit/utils/imageEditUtils.js.map +1 -0
- package/lib-amd/imageEdit/utils/updateHandleCursor.d.ts +7 -0
- package/lib-amd/imageEdit/utils/updateHandleCursor.js +36 -0
- package/lib-amd/imageEdit/utils/updateHandleCursor.js.map +1 -0
- package/lib-amd/imageEdit/utils/updateImageEditInfo.d.ts +10 -0
- package/lib-amd/imageEdit/utils/updateImageEditInfo.js +48 -0
- package/lib-amd/imageEdit/utils/updateImageEditInfo.js.map +1 -0
- package/lib-amd/imageEdit/utils/updateWrapper.d.ts +6 -0
- package/lib-amd/imageEdit/utils/updateWrapper.js +82 -0
- package/lib-amd/imageEdit/utils/updateWrapper.js.map +1 -0
- package/lib-amd/index.d.ts +2 -1
- package/lib-amd/index.js +3 -3
- package/lib-amd/index.js.map +1 -1
- package/lib-amd/paste/DefaultSanitizers.d.ts +10 -0
- package/lib-amd/paste/DefaultSanitizers.js +27 -0
- package/lib-amd/paste/DefaultSanitizers.js.map +1 -0
- package/lib-amd/paste/PastePlugin.d.ts +4 -2
- package/lib-amd/paste/PastePlugin.js +24 -2
- package/lib-amd/paste/PastePlugin.js.map +1 -1
- package/lib-amd/paste/WordDesktop/processPastedContentFromWordDesktop.js +13 -0
- package/lib-amd/paste/WordDesktop/processPastedContentFromWordDesktop.js.map +1 -1
- package/lib-amd/paste/utils/chainSanitizerCallback.d.ts +9 -0
- package/lib-amd/paste/utils/chainSanitizerCallback.js +38 -0
- package/lib-amd/paste/utils/chainSanitizerCallback.js.map +1 -0
- package/lib-amd/picker/getQueryString.d.ts +2 -2
- package/lib-amd/picker/getQueryString.js.map +1 -1
- package/lib-amd/pluginUtils/splitTextSegment.d.ts +2 -2
- package/lib-amd/pluginUtils/splitTextSegment.js.map +1 -1
- package/lib-amd/tableEdit/editors/TableEditor.d.ts +3 -0
- package/lib-amd/tableEdit/editors/TableEditor.js +4 -0
- package/lib-amd/tableEdit/editors/TableEditor.js.map +1 -1
- package/lib-amd/tableEdit/editors/features/CellResizer.d.ts +39 -1
- package/lib-amd/tableEdit/editors/features/CellResizer.js +27 -11
- package/lib-amd/tableEdit/editors/features/CellResizer.js.map +1 -1
- package/lib-amd/tableEdit/editors/features/TableInserter.d.ts +17 -0
- package/lib-amd/tableEdit/editors/features/TableInserter.js +6 -1
- package/lib-amd/tableEdit/editors/features/TableInserter.js.map +1 -1
- package/lib-amd/tableEdit/editors/features/TableMover.d.ts +2 -2
- package/lib-amd/tableEdit/editors/features/TableMover.js +4 -4
- package/lib-amd/tableEdit/editors/features/TableMover.js.map +1 -1
- package/lib-amd/tableEdit/editors/features/TableResizer.d.ts +40 -1
- package/lib-amd/tableEdit/editors/features/TableResizer.js +25 -7
- package/lib-amd/tableEdit/editors/features/TableResizer.js.map +1 -1
- package/lib-amd/tableEdit/editors/utils/getTableFromContentModel.d.ts +2 -2
- package/lib-amd/tableEdit/editors/utils/getTableFromContentModel.js.map +1 -1
- package/lib-mjs/autoFormat/hyphen/transformHyphen.d.ts +2 -2
- package/lib-mjs/autoFormat/hyphen/transformHyphen.js.map +1 -1
- package/lib-mjs/autoFormat/link/createLinkAfterSpace.d.ts +2 -2
- package/lib-mjs/autoFormat/link/createLinkAfterSpace.js.map +1 -1
- package/lib-mjs/autoFormat/list/keyboardListTrigger.d.ts +2 -2
- package/lib-mjs/autoFormat/list/keyboardListTrigger.js.map +1 -1
- package/lib-mjs/autoFormat/numbers/transformFraction.d.ts +2 -2
- package/lib-mjs/autoFormat/numbers/transformFraction.js.map +1 -1
- package/lib-mjs/autoFormat/numbers/transformOrdinals.d.ts +2 -2
- package/lib-mjs/autoFormat/numbers/transformOrdinals.js.map +1 -1
- package/lib-mjs/customReplace/CustomReplacePlugin.d.ts +2 -2
- package/lib-mjs/customReplace/CustomReplacePlugin.js.map +1 -1
- package/lib-mjs/edit/EditPlugin.d.ts +10 -0
- package/lib-mjs/edit/EditPlugin.js +39 -0
- package/lib-mjs/edit/EditPlugin.js.map +1 -1
- package/lib-mjs/edit/deleteSteps/deleteAllSegmentBefore.js +3 -2
- package/lib-mjs/edit/deleteSteps/deleteAllSegmentBefore.js.map +1 -1
- package/lib-mjs/edit/deleteSteps/deleteCollapsedSelection.js +5 -4
- package/lib-mjs/edit/deleteSteps/deleteCollapsedSelection.js.map +1 -1
- package/lib-mjs/edit/deleteSteps/deleteEmptyQuote.js +34 -30
- package/lib-mjs/edit/deleteSteps/deleteEmptyQuote.js.map +1 -1
- package/lib-mjs/edit/deleteSteps/deleteWordSelection.js +2 -2
- package/lib-mjs/edit/deleteSteps/deleteWordSelection.js.map +1 -1
- package/lib-mjs/edit/handleKeyboardEventCommon.d.ts +2 -2
- package/lib-mjs/edit/handleKeyboardEventCommon.js.map +1 -1
- package/lib-mjs/edit/inputSteps/handleEnterOnList.js +33 -57
- package/lib-mjs/edit/inputSteps/handleEnterOnList.js.map +1 -1
- package/lib-mjs/edit/inputSteps/handleEnterOnParagraph.d.ts +5 -0
- package/lib-mjs/edit/inputSteps/handleEnterOnParagraph.js +18 -0
- package/lib-mjs/edit/inputSteps/handleEnterOnParagraph.js.map +1 -0
- package/lib-mjs/edit/keyboardDelete.js +1 -1
- package/lib-mjs/edit/keyboardDelete.js.map +1 -1
- package/lib-mjs/edit/keyboardEnter.d.ts +5 -0
- package/lib-mjs/edit/keyboardEnter.js +40 -0
- package/lib-mjs/edit/keyboardEnter.js.map +1 -0
- package/lib-mjs/edit/keyboardInput.js +4 -18
- package/lib-mjs/edit/keyboardInput.js.map +1 -1
- package/lib-mjs/edit/keyboardTab.js.map +1 -1
- package/lib-mjs/edit/tabUtils/handleTabOnList.d.ts +2 -2
- package/lib-mjs/edit/tabUtils/handleTabOnList.js.map +1 -1
- package/lib-mjs/edit/tabUtils/handleTabOnParagraph.d.ts +2 -2
- package/lib-mjs/edit/tabUtils/handleTabOnParagraph.js +9 -7
- package/lib-mjs/edit/tabUtils/handleTabOnParagraph.js.map +1 -1
- package/lib-mjs/edit/tabUtils/handleTabOnTable.d.ts +2 -2
- package/lib-mjs/edit/tabUtils/handleTabOnTable.js.map +1 -1
- package/lib-mjs/edit/tabUtils/handleTabOnTableCell.d.ts +2 -2
- package/lib-mjs/edit/tabUtils/handleTabOnTableCell.js +6 -5
- package/lib-mjs/edit/tabUtils/handleTabOnTableCell.js.map +1 -1
- package/lib-mjs/edit/utils/getLeafSiblingBlock.d.ts +5 -5
- package/lib-mjs/edit/utils/getLeafSiblingBlock.js.map +1 -1
- package/lib-mjs/edit/utils/splitParagraph.d.ts +9 -0
- package/lib-mjs/edit/utils/splitParagraph.js +25 -0
- package/lib-mjs/edit/utils/splitParagraph.js.map +1 -0
- package/lib-mjs/imageEdit/Cropper/createImageCropper.d.ts +10 -0
- package/lib-mjs/imageEdit/Cropper/createImageCropper.js +75 -0
- package/lib-mjs/imageEdit/Cropper/createImageCropper.js.map +1 -0
- package/lib-mjs/imageEdit/Cropper/cropperContext.d.ts +8 -0
- package/lib-mjs/imageEdit/Cropper/cropperContext.js +70 -0
- package/lib-mjs/imageEdit/Cropper/cropperContext.js.map +1 -0
- package/lib-mjs/imageEdit/ImageEditPlugin.d.ts +66 -0
- package/lib-mjs/imageEdit/ImageEditPlugin.js +325 -0
- package/lib-mjs/imageEdit/ImageEditPlugin.js.map +1 -0
- package/lib-mjs/imageEdit/Resizer/createImageResizer.d.ts +12 -0
- package/lib-mjs/imageEdit/Resizer/createImageResizer.js +85 -0
- package/lib-mjs/imageEdit/Resizer/createImageResizer.js.map +1 -0
- package/lib-mjs/imageEdit/Resizer/resizerContext.d.ts +8 -0
- package/lib-mjs/imageEdit/Resizer/resizerContext.js +58 -0
- package/lib-mjs/imageEdit/Resizer/resizerContext.js.map +1 -0
- package/lib-mjs/imageEdit/Resizer/updateSideHandlesVisibility.d.ts +4 -0
- package/lib-mjs/imageEdit/Resizer/updateSideHandlesVisibility.js +13 -0
- package/lib-mjs/imageEdit/Resizer/updateSideHandlesVisibility.js.map +1 -0
- package/lib-mjs/imageEdit/Rotator/createImageRotator.d.ts +6 -0
- package/lib-mjs/imageEdit/Rotator/createImageRotator.js +72 -0
- package/lib-mjs/imageEdit/Rotator/createImageRotator.js.map +1 -0
- package/lib-mjs/imageEdit/Rotator/rotatorContext.d.ts +8 -0
- package/lib-mjs/imageEdit/Rotator/rotatorContext.js +33 -0
- package/lib-mjs/imageEdit/Rotator/rotatorContext.js.map +1 -0
- package/lib-mjs/imageEdit/Rotator/updateRotateHandle.d.ts +7 -0
- package/lib-mjs/imageEdit/Rotator/updateRotateHandle.js +51 -0
- package/lib-mjs/imageEdit/Rotator/updateRotateHandle.js.map +1 -0
- package/lib-mjs/imageEdit/constants/constants.d.ts +73 -0
- package/lib-mjs/imageEdit/constants/constants.js +78 -0
- package/lib-mjs/imageEdit/constants/constants.js.map +1 -0
- package/lib-mjs/imageEdit/types/DragAndDropContext.d.ts +39 -0
- package/lib-mjs/imageEdit/types/DragAndDropContext.js +2 -0
- package/lib-mjs/imageEdit/types/DragAndDropContext.js.map +1 -0
- package/lib-mjs/imageEdit/types/GeneratedImageSize.d.ts +33 -0
- package/lib-mjs/imageEdit/types/GeneratedImageSize.js +2 -0
- package/lib-mjs/imageEdit/types/GeneratedImageSize.js.map +1 -0
- package/lib-mjs/imageEdit/types/ImageEditElementClass.d.ts +30 -0
- package/lib-mjs/imageEdit/types/ImageEditElementClass.js +32 -0
- package/lib-mjs/imageEdit/types/ImageEditElementClass.js.map +1 -0
- package/lib-mjs/imageEdit/types/ImageEditOptions.d.ts +55 -0
- package/lib-mjs/imageEdit/types/ImageEditOptions.js +2 -0
- package/lib-mjs/imageEdit/types/ImageEditOptions.js.map +1 -0
- package/lib-mjs/imageEdit/types/ImageHtmlOptions.d.ts +18 -0
- package/lib-mjs/imageEdit/types/ImageHtmlOptions.js +2 -0
- package/lib-mjs/imageEdit/types/ImageHtmlOptions.js.map +1 -0
- package/lib-mjs/imageEdit/utils/applyChange.d.ts +12 -0
- package/lib-mjs/imageEdit/utils/applyChange.js +73 -0
- package/lib-mjs/imageEdit/utils/applyChange.js.map +1 -0
- package/lib-mjs/imageEdit/utils/canRegenerateImage.d.ts +8 -0
- package/lib-mjs/imageEdit/utils/canRegenerateImage.js +28 -0
- package/lib-mjs/imageEdit/utils/canRegenerateImage.js.map +1 -0
- package/lib-mjs/imageEdit/utils/checkEditInfoState.d.ts +41 -0
- package/lib-mjs/imageEdit/utils/checkEditInfoState.js +50 -0
- package/lib-mjs/imageEdit/utils/checkEditInfoState.js.map +1 -0
- package/lib-mjs/imageEdit/utils/createImageWrapper.d.ts +18 -0
- package/lib-mjs/imageEdit/utils/createImageWrapper.js +83 -0
- package/lib-mjs/imageEdit/utils/createImageWrapper.js.map +1 -0
- package/lib-mjs/imageEdit/utils/doubleCheckResize.d.ts +12 -0
- package/lib-mjs/imageEdit/utils/doubleCheckResize.js +32 -0
- package/lib-mjs/imageEdit/utils/doubleCheckResize.js.map +1 -0
- package/lib-mjs/imageEdit/utils/generateDataURL.d.ts +13 -0
- package/lib-mjs/imageEdit/utils/generateDataURL.js +46 -0
- package/lib-mjs/imageEdit/utils/generateDataURL.js.map +1 -0
- package/lib-mjs/imageEdit/utils/generateImageSize.d.ts +15 -0
- package/lib-mjs/imageEdit/utils/generateImageSize.js +42 -0
- package/lib-mjs/imageEdit/utils/generateImageSize.js.map +1 -0
- package/lib-mjs/imageEdit/utils/getDropAndDragHelpers.d.ts +10 -0
- package/lib-mjs/imageEdit/utils/getDropAndDragHelpers.js +20 -0
- package/lib-mjs/imageEdit/utils/getDropAndDragHelpers.js.map +1 -0
- package/lib-mjs/imageEdit/utils/getHTMLImageOptions.d.ts +7 -0
- package/lib-mjs/imageEdit/utils/getHTMLImageOptions.js +18 -0
- package/lib-mjs/imageEdit/utils/getHTMLImageOptions.js.map +1 -0
- package/lib-mjs/imageEdit/utils/getSelectedContentModelImage.d.ts +5 -0
- package/lib-mjs/imageEdit/utils/getSelectedContentModelImage.js +12 -0
- package/lib-mjs/imageEdit/utils/getSelectedContentModelImage.js.map +1 -0
- package/lib-mjs/imageEdit/utils/imageEditUtils.d.ts +39 -0
- package/lib-mjs/imageEdit/utils/imageEditUtils.js +91 -0
- package/lib-mjs/imageEdit/utils/imageEditUtils.js.map +1 -0
- package/lib-mjs/imageEdit/utils/updateHandleCursor.d.ts +7 -0
- package/lib-mjs/imageEdit/utils/updateHandleCursor.js +30 -0
- package/lib-mjs/imageEdit/utils/updateHandleCursor.js.map +1 -0
- package/lib-mjs/imageEdit/utils/updateImageEditInfo.d.ts +10 -0
- package/lib-mjs/imageEdit/utils/updateImageEditInfo.js +44 -0
- package/lib-mjs/imageEdit/utils/updateImageEditInfo.js.map +1 -0
- package/lib-mjs/imageEdit/utils/updateWrapper.d.ts +6 -0
- package/lib-mjs/imageEdit/utils/updateWrapper.js +83 -0
- package/lib-mjs/imageEdit/utils/updateWrapper.js.map +1 -0
- package/lib-mjs/index.d.ts +2 -1
- package/lib-mjs/index.js +1 -1
- package/lib-mjs/index.js.map +1 -1
- package/lib-mjs/paste/DefaultSanitizers.d.ts +10 -0
- package/lib-mjs/paste/DefaultSanitizers.js +21 -0
- package/lib-mjs/paste/DefaultSanitizers.js.map +1 -0
- package/lib-mjs/paste/PastePlugin.d.ts +4 -2
- package/lib-mjs/paste/PastePlugin.js +27 -2
- package/lib-mjs/paste/PastePlugin.js.map +1 -1
- package/lib-mjs/paste/WordDesktop/processPastedContentFromWordDesktop.js +13 -0
- package/lib-mjs/paste/WordDesktop/processPastedContentFromWordDesktop.js.map +1 -1
- package/lib-mjs/paste/utils/chainSanitizerCallback.d.ts +9 -0
- package/lib-mjs/paste/utils/chainSanitizerCallback.js +32 -0
- package/lib-mjs/paste/utils/chainSanitizerCallback.js.map +1 -0
- package/lib-mjs/picker/getQueryString.d.ts +2 -2
- package/lib-mjs/picker/getQueryString.js.map +1 -1
- package/lib-mjs/pluginUtils/splitTextSegment.d.ts +2 -2
- package/lib-mjs/pluginUtils/splitTextSegment.js.map +1 -1
- package/lib-mjs/tableEdit/editors/TableEditor.d.ts +3 -0
- package/lib-mjs/tableEdit/editors/TableEditor.js +4 -0
- package/lib-mjs/tableEdit/editors/TableEditor.js.map +1 -1
- package/lib-mjs/tableEdit/editors/features/CellResizer.d.ts +39 -1
- package/lib-mjs/tableEdit/editors/features/CellResizer.js +27 -14
- package/lib-mjs/tableEdit/editors/features/CellResizer.js.map +1 -1
- package/lib-mjs/tableEdit/editors/features/TableInserter.d.ts +17 -0
- package/lib-mjs/tableEdit/editors/features/TableInserter.js +5 -0
- package/lib-mjs/tableEdit/editors/features/TableInserter.js.map +1 -1
- package/lib-mjs/tableEdit/editors/features/TableMover.d.ts +2 -2
- package/lib-mjs/tableEdit/editors/features/TableMover.js +5 -5
- package/lib-mjs/tableEdit/editors/features/TableMover.js.map +1 -1
- package/lib-mjs/tableEdit/editors/features/TableResizer.d.ts +40 -1
- package/lib-mjs/tableEdit/editors/features/TableResizer.js +25 -10
- package/lib-mjs/tableEdit/editors/features/TableResizer.js.map +1 -1
- package/lib-mjs/tableEdit/editors/utils/getTableFromContentModel.d.ts +2 -2
- package/lib-mjs/tableEdit/editors/utils/getTableFromContentModel.js.map +1 -1
- package/package.json +5 -5
- package/lib/pluginUtils/Rect/getDOMInsertPointRect.d.ts +0 -7
- package/lib/pluginUtils/Rect/getDOMInsertPointRect.js +0 -57
- package/lib/pluginUtils/Rect/getDOMInsertPointRect.js.map +0 -1
- package/lib-amd/pluginUtils/Rect/getDOMInsertPointRect.d.ts +0 -7
- package/lib-amd/pluginUtils/Rect/getDOMInsertPointRect.js +0 -58
- package/lib-amd/pluginUtils/Rect/getDOMInsertPointRect.js.map +0 -1
- package/lib-mjs/pluginUtils/Rect/getDOMInsertPointRect.d.ts +0 -7
- package/lib-mjs/pluginUtils/Rect/getDOMInsertPointRect.js +0 -53
- package/lib-mjs/pluginUtils/Rect/getDOMInsertPointRect.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handleTabOnTable.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-plugins/lib/edit/tabUtils/handleTabOnTable.ts"],"names":[],"mappings":";;;;
|
|
1
|
+
{"version":3,"file":"handleTabOnTable.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-plugins/lib/edit/tabUtils/handleTabOnTable.ts"],"names":[],"mappings":";;;;IAOA;;;OAGG;IACH,SAAgB,gBAAgB,CAAC,KAAmC,EAAE,QAAuB;QACzF,IAAM,UAAU,GAAG,IAAA,mDAAqB,EAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACnD,IAAI,UAAU,IAAI,oBAAoB,CAAC,UAAU,CAAC,EAAE;YAChD,IAAA,iDAAmB,EAAC,KAAK,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;YACrE,QAAQ,CAAC,cAAc,EAAE,CAAC;YAC1B,OAAO,IAAI,CAAC;SACf;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;IARD,4CAQC;IAED,SAAS,oBAAoB,CAAC,UAAqC;;QAC/D,OAAO,CACH,CAAA,MAAA,MAAA,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,0CAAE,KAAK,CAAC,CAAC,CAAC,0CAAE,UAAU;aACxC,MAAA,MAAA,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,0CAAE,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,0CAAE,UAAU,CAAA,CAC/F,CAAC;IACN,CAAC","sourcesContent":["import { getFirstSelectedTable } from 'roosterjs-content-model-dom';\nimport { setModelIndentation } from 'roosterjs-content-model-api';\nimport type {\n ReadonlyContentModelDocument,\n ReadonlyContentModelTable,\n} from 'roosterjs-content-model-types';\n\n/**\n * When the whole table is selected, indent or outdent the whole table with setModelIndentation.\n * @internal\n */\nexport function handleTabOnTable(model: ReadonlyContentModelDocument, rawEvent: KeyboardEvent) {\n const tableModel = getFirstSelectedTable(model)[0];\n if (tableModel && isWholeTableSelected(tableModel)) {\n setModelIndentation(model, rawEvent.shiftKey ? 'outdent' : 'indent');\n rawEvent.preventDefault();\n return true;\n }\n return false;\n}\n\nfunction isWholeTableSelected(tableModel: ReadonlyContentModelTable) {\n return (\n tableModel.rows[0]?.cells[0]?.isSelected &&\n tableModel.rows[tableModel.rows.length - 1]?.cells[tableModel.widths.length - 1]?.isSelected\n );\n}\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { ReadonlyContentModelDocument, ReadonlyContentModelTableCell } from 'roosterjs-content-model-types';
|
|
2
2
|
/**
|
|
3
3
|
* When the cursor is on the last cell of a table, add new row and focus first new cell.
|
|
4
4
|
* @internal
|
|
5
5
|
*/
|
|
6
|
-
export declare function handleTabOnTableCell(model:
|
|
6
|
+
export declare function handleTabOnTableCell(model: ReadonlyContentModelDocument, cell: ReadonlyContentModelTableCell, rawEvent: KeyboardEvent): boolean;
|
|
@@ -8,11 +8,12 @@ define(["require", "exports", "roosterjs-content-model-api", "roosterjs-content-
|
|
|
8
8
|
*/
|
|
9
9
|
function handleTabOnTableCell(model, cell, rawEvent) {
|
|
10
10
|
var _a, _b, _c;
|
|
11
|
-
var
|
|
11
|
+
var readonlyTableModel = (0, roosterjs_content_model_dom_1.getFirstSelectedTable)(model)[0];
|
|
12
12
|
// Check if cursor is on last cell of the table
|
|
13
13
|
if (!rawEvent.shiftKey &&
|
|
14
|
-
|
|
15
|
-
((_a =
|
|
14
|
+
readonlyTableModel &&
|
|
15
|
+
((_a = readonlyTableModel.rows[readonlyTableModel.rows.length - 1]) === null || _a === void 0 ? void 0 : _a.cells[readonlyTableModel.widths.length - 1]) === cell) {
|
|
16
|
+
var tableModel = (0, roosterjs_content_model_dom_1.mutateBlock)(readonlyTableModel);
|
|
16
17
|
(0, roosterjs_content_model_api_1.insertTableRow)(tableModel, 'insertBelow');
|
|
17
18
|
// Clear Table selection
|
|
18
19
|
(0, roosterjs_content_model_api_1.clearSelectedCells)(tableModel, {
|
|
@@ -26,7 +27,7 @@ define(["require", "exports", "roosterjs-content-model-api", "roosterjs-content-
|
|
|
26
27
|
var markerParagraph = (_c = (_b = tableModel.rows[tableModel.rows.length - 1]) === null || _b === void 0 ? void 0 : _b.cells[0]) === null || _c === void 0 ? void 0 : _c.blocks[0];
|
|
27
28
|
if (markerParagraph.blockType == 'Paragraph') {
|
|
28
29
|
var marker = (0, roosterjs_content_model_dom_1.createSelectionMarker)(model.format);
|
|
29
|
-
markerParagraph.segments.unshift(marker);
|
|
30
|
+
(0, roosterjs_content_model_dom_1.mutateBlock)(markerParagraph).segments.unshift(marker);
|
|
30
31
|
(0, roosterjs_content_model_dom_1.setParagraphNotImplicit)(markerParagraph);
|
|
31
32
|
(0, roosterjs_content_model_dom_1.setSelection)(tableModel.rows[tableModel.rows.length - 1].cells[0], marker);
|
|
32
33
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handleTabOnTableCell.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-plugins/lib/edit/tabUtils/handleTabOnTableCell.ts"],"names":[],"mappings":";;;;
|
|
1
|
+
{"version":3,"file":"handleTabOnTableCell.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-plugins/lib/edit/tabUtils/handleTabOnTableCell.ts"],"names":[],"mappings":";;;;IAcA;;;OAGG;IACH,SAAgB,oBAAoB,CAChC,KAAmC,EACnC,IAAmC,EACnC,QAAuB;;QAEvB,IAAM,kBAAkB,GAAG,IAAA,mDAAqB,EAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAE3D,+CAA+C;QAC/C,IACI,CAAC,QAAQ,CAAC,QAAQ;YAClB,kBAAkB;YAClB,CAAA,MAAA,kBAAkB,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,0CAAE,KAAK,CAC9D,kBAAkB,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CACvC,MAAK,IAAI,EACZ;YACE,IAAM,UAAU,GAAG,IAAA,yCAAW,EAAC,kBAAkB,CAAC,CAAC;YACnD,IAAA,4CAAc,EAAC,UAAU,EAAE,aAAa,CAAC,CAAC;YAE1C,wBAAwB;YACxB,IAAA,gDAAkB,EAAC,UAAU,EAAE;gBAC3B,QAAQ,EAAE,UAAU,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC;gBACpC,WAAW,EAAE,CAAC;gBACd,OAAO,EAAE,UAAU,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC;gBACnC,UAAU,EAAE,UAAU,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;aAC3C,CAAC,CAAC;YACH,IAAA,4CAAc,EAAC,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;YAEzC,wDAAwD;YACxD,IAAM,eAAe,GAAG,MAAA,MAAA,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,0CAAE,KAAK,CAAC,CAAC,CAAC,0CAAE,MAAM,CAAC,CAAC,CAAC,CAAC;YACzF,IAAI,eAAe,CAAC,SAAS,IAAI,WAAW,EAAE;gBAC1C,IAAM,MAAM,GAAG,IAAA,mDAAqB,EAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBAEnD,IAAA,yCAAW,EAAC,eAAe,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;gBACtD,IAAA,qDAAuB,EAAC,eAAe,CAAC,CAAC;gBACzC,IAAA,0CAAY,EAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;aAC9E;YAED,QAAQ,CAAC,cAAc,EAAE,CAAC;YAC1B,OAAO,IAAI,CAAC;SACf;QAED,OAAO,KAAK,CAAC;IACjB,CAAC;IA1CD,oDA0CC","sourcesContent":["import { clearSelectedCells, insertTableRow } from 'roosterjs-content-model-api';\nimport {\n createSelectionMarker,\n getFirstSelectedTable,\n mutateBlock,\n normalizeTable,\n setParagraphNotImplicit,\n setSelection,\n} from 'roosterjs-content-model-dom';\nimport type {\n ReadonlyContentModelDocument,\n ReadonlyContentModelTableCell,\n} from 'roosterjs-content-model-types';\n\n/**\n * When the cursor is on the last cell of a table, add new row and focus first new cell.\n * @internal\n */\nexport function handleTabOnTableCell(\n model: ReadonlyContentModelDocument,\n cell: ReadonlyContentModelTableCell,\n rawEvent: KeyboardEvent\n) {\n const readonlyTableModel = getFirstSelectedTable(model)[0];\n\n // Check if cursor is on last cell of the table\n if (\n !rawEvent.shiftKey &&\n readonlyTableModel &&\n readonlyTableModel.rows[readonlyTableModel.rows.length - 1]?.cells[\n readonlyTableModel.widths.length - 1\n ] === cell\n ) {\n const tableModel = mutateBlock(readonlyTableModel);\n insertTableRow(tableModel, 'insertBelow');\n\n // Clear Table selection\n clearSelectedCells(tableModel, {\n firstRow: tableModel.rows.length - 1,\n firstColumn: 0,\n lastRow: tableModel.rows.length - 1,\n lastColumn: tableModel.widths.length - 1,\n });\n normalizeTable(tableModel, model.format);\n\n // Add selection marker to the first cell of the new row\n const markerParagraph = tableModel.rows[tableModel.rows.length - 1]?.cells[0]?.blocks[0];\n if (markerParagraph.blockType == 'Paragraph') {\n const marker = createSelectionMarker(model.format);\n\n mutateBlock(markerParagraph).segments.unshift(marker);\n setParagraphNotImplicit(markerParagraph);\n setSelection(tableModel.rows[tableModel.rows.length - 1].cells[0], marker);\n }\n\n rawEvent.preventDefault();\n return true;\n }\n\n return false;\n}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { ReadonlyContentModelBlock, ReadonlyContentModelBlockGroup, ReadonlyContentModelSegment } from 'roosterjs-content-model-types';
|
|
2
2
|
/**
|
|
3
3
|
* @internal
|
|
4
4
|
*/
|
|
@@ -6,16 +6,16 @@ export declare type BlockAndPath = {
|
|
|
6
6
|
/**
|
|
7
7
|
* The sibling block
|
|
8
8
|
*/
|
|
9
|
-
block:
|
|
9
|
+
block: ReadonlyContentModelBlock;
|
|
10
10
|
/**
|
|
11
11
|
* Path of this sibling block
|
|
12
12
|
*/
|
|
13
|
-
path:
|
|
13
|
+
path: ReadonlyContentModelBlockGroup[];
|
|
14
14
|
/**
|
|
15
15
|
* If the input block is under a general segment, it is possible there are sibling segments under the same paragraph.
|
|
16
16
|
* Use this property to return the sibling sibling under the same paragraph
|
|
17
17
|
*/
|
|
18
|
-
siblingSegment?:
|
|
18
|
+
siblingSegment?: ReadonlyContentModelSegment;
|
|
19
19
|
};
|
|
20
20
|
/**
|
|
21
21
|
* @internal
|
|
@@ -38,7 +38,7 @@ export declare type ReadonlyBlockAndPath = {
|
|
|
38
38
|
/**
|
|
39
39
|
* @internal
|
|
40
40
|
*/
|
|
41
|
-
export declare function getLeafSiblingBlock(path:
|
|
41
|
+
export declare function getLeafSiblingBlock(path: ReadonlyContentModelBlockGroup[], block: ReadonlyContentModelBlock, isNext: boolean): BlockAndPath | null;
|
|
42
42
|
/**
|
|
43
43
|
* @internal (Readonly)
|
|
44
44
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getLeafSiblingBlock.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-plugins/lib/edit/utils/getLeafSiblingBlock.ts"],"names":[],"mappings":";;;;
|
|
1
|
+
{"version":3,"file":"getLeafSiblingBlock.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-plugins/lib/edit/utils/getLeafSiblingBlock.ts"],"names":[],"mappings":";;;;IAoEA,SAAgB,mBAAmB,CAC/B,IAAsC,EACtC,KAAgC,EAChC,MAAe;;QAEf,IAAM,OAAO,sDAAO,IAAI,SAAC,CAAC;;YAGtB,IAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YACzB,IAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAE1C,IAAI,KAAK,GAAG,CAAC,EAAE;;aAEd;YAED,IAAI,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAExD,IAAI,SAAS,EAAE;gBACX,OAAO,SAAS,CAAC,SAAS,IAAI,YAAY,EAAE;oBACxC,IAAM,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;oBAEzE,IAAI,CAAC,KAAK,EAAE;wCACD,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE;qBAC7C;yBAAM,IAAI,KAAK,CAAC,SAAS,IAAI,YAAY,EAAE;wBACxC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;wCACpB,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE;qBACzC;yBAAM;wBACH,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;wBAC3B,SAAS,GAAG,KAAK,CAAC;qBACrB;iBACJ;gCAEM,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE;aAC7C;iBAAM,IAAI,IAAA,8CAAgB,EAAC,KAAK,CAAC,EAAE;gBAChC,6FAA6F;gBAC7F,wDAAwD;gBACxD,OAAO,CAAC,KAAK,EAAE,CAAC;gBAEhB,IAAI,cAAY,GAAG,CAAC,CAAC,CAAC;gBACtB,IAAM,SAAO,GAAG,KAAK,CAAC;gBACtB,IAAM,IAAI,GAAG,MAAA,OAAO,CAAC,CAAC,CAAC,0CAAE,MAAM,CAAC,IAAI,CAChC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,SAAS,IAAI,WAAW,IAAI,CAAC,cAAY,GAAG,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAO,CAAC,CAAC,IAAI,CAAC,EAA/E,CAA+E,CAC9D,CAAC;gBAE3B,IAAI,IAAI,EAAE;oBACN,qFAAqF;oBACrF,IAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,cAAY,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBAEvE,IAAI,cAAc,EAAE;wCAET,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,cAAc,gBAAA,EAAE;qBACxD;yBAAM;wBACH,gDAAgD;wBAChD,KAAK,GAAG,IAAI,CAAC;qBAChB;iBACJ;qBAAM;;iBAGN;aACJ;iBAAM,IAAI,KAAK,CAAC,cAAc,IAAI,UAAU,IAAI,KAAK,CAAC,cAAc,IAAI,WAAW,EAAE;gBAClF,OAAO,CAAC,KAAK,EAAE,CAAC;gBAChB,KAAK,GAAG,KAAK,CAAC;aACjB;iBAAM;;aAEN;;QAzDL,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC;;;;;;SA0DxB;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;IApED,kDAoEC","sourcesContent":["import { isGeneralSegment } from 'roosterjs-content-model-dom';\nimport type {\n ContentModelParagraph,\n ReadonlyContentModelBlock,\n ReadonlyContentModelBlockGroup,\n ReadonlyContentModelSegment,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n */\nexport type BlockAndPath = {\n /**\n * The sibling block\n */\n block: ReadonlyContentModelBlock;\n\n /**\n * Path of this sibling block\n */\n path: ReadonlyContentModelBlockGroup[];\n\n /**\n * If the input block is under a general segment, it is possible there are sibling segments under the same paragraph.\n * Use this property to return the sibling sibling under the same paragraph\n */\n siblingSegment?: ReadonlyContentModelSegment;\n};\n\n/**\n * @internal\n */\nexport type ReadonlyBlockAndPath = {\n /**\n * The sibling block\n */\n block: ReadonlyContentModelBlock;\n\n /**\n * Path of this sibling block\n */\n path: ReadonlyContentModelBlockGroup[];\n\n /**\n * If the input block is under a general segment, it is possible there are sibling segments under the same paragraph.\n * Use this property to return the sibling sibling under the same paragraph\n */\n siblingSegment?: ReadonlyContentModelSegment;\n};\n\n/**\n * @internal\n */\nexport function getLeafSiblingBlock(\n path: ReadonlyContentModelBlockGroup[],\n block: ReadonlyContentModelBlock,\n isNext: boolean\n): BlockAndPath | null;\n\n/**\n * @internal (Readonly)\n */\nexport function getLeafSiblingBlock(\n path: ReadonlyContentModelBlockGroup[],\n block: ReadonlyContentModelBlock,\n isNext: boolean\n): ReadonlyBlockAndPath | null;\n\nexport function getLeafSiblingBlock(\n path: ReadonlyContentModelBlockGroup[],\n block: ReadonlyContentModelBlock,\n isNext: boolean\n): ReadonlyBlockAndPath | null {\n const newPath = [...path];\n\n while (newPath.length > 0) {\n const group = newPath[0];\n const index = group.blocks.indexOf(block);\n\n if (index < 0) {\n break;\n }\n\n let nextBlock = group.blocks[index + (isNext ? 1 : -1)];\n\n if (nextBlock) {\n while (nextBlock.blockType == 'BlockGroup') {\n const child = nextBlock.blocks[isNext ? 0 : nextBlock.blocks.length - 1];\n\n if (!child) {\n return { block: nextBlock, path: newPath };\n } else if (child.blockType != 'BlockGroup') {\n newPath.unshift(nextBlock);\n return { block: child, path: newPath };\n } else {\n newPath.unshift(nextBlock);\n nextBlock = child;\n }\n }\n\n return { block: nextBlock, path: newPath };\n } else if (isGeneralSegment(group)) {\n // For general segment, we need to check if there is sibling segment under the same paragraph\n // First let's find the parent paragraph of this segment\n newPath.shift();\n\n let segmentIndex = -1;\n const segment = group;\n const para = newPath[0]?.blocks.find(\n x => x.blockType == 'Paragraph' && (segmentIndex = x.segments.indexOf(segment)) >= 0\n ) as ContentModelParagraph;\n\n if (para) {\n // Now we have found the parent paragraph, so let's check if it has a sibling segment\n const siblingSegment = para.segments[segmentIndex + (isNext ? 1 : -1)];\n\n if (siblingSegment) {\n // Return this block, path and segment since we have found it\n return { block: para, path: newPath, siblingSegment };\n } else {\n // No sibling segment, let's keep go upper level\n block = para;\n }\n } else {\n // Parent sibling is not found (in theory this should never happen), just return null\n break;\n }\n } else if (group.blockGroupType != 'Document' && group.blockGroupType != 'TableCell') {\n newPath.shift();\n block = group;\n } else {\n break;\n }\n }\n\n return null;\n}\n"]}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { InsertPoint, ShallowMutableContentModelParagraph } from 'roosterjs-content-model-types';
|
|
2
|
+
/**
|
|
3
|
+
* @internal
|
|
4
|
+
* Split the given paragraph from insert point into two paragraphs,
|
|
5
|
+
* and move the selection marker to the beginning of the second paragraph
|
|
6
|
+
* @param insertPoint The input insert point which includes the paragraph and selection marker
|
|
7
|
+
* @returns The new paragraph it created
|
|
8
|
+
*/
|
|
9
|
+
export declare function splitParagraph(insertPoint: InsertPoint): ShallowMutableContentModelParagraph;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
define(["require", "exports", "tslib", "roosterjs-content-model-dom"], function (require, exports, tslib_1, roosterjs_content_model_dom_1) {
|
|
2
|
+
"use strict";
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.splitParagraph = void 0;
|
|
5
|
+
/**
|
|
6
|
+
* @internal
|
|
7
|
+
* Split the given paragraph from insert point into two paragraphs,
|
|
8
|
+
* and move the selection marker to the beginning of the second paragraph
|
|
9
|
+
* @param insertPoint The input insert point which includes the paragraph and selection marker
|
|
10
|
+
* @returns The new paragraph it created
|
|
11
|
+
*/
|
|
12
|
+
function splitParagraph(insertPoint) {
|
|
13
|
+
var _a;
|
|
14
|
+
var paragraph = insertPoint.paragraph, marker = insertPoint.marker;
|
|
15
|
+
var newParagraph = (0, roosterjs_content_model_dom_1.createParagraph)(false /*isImplicit*/, paragraph.format, paragraph.segmentFormat);
|
|
16
|
+
var markerIndex = paragraph.segments.indexOf(marker);
|
|
17
|
+
var segments = paragraph.segments.splice(markerIndex, paragraph.segments.length - markerIndex);
|
|
18
|
+
if (paragraph.segments.length == 0) {
|
|
19
|
+
paragraph.segments.push((0, roosterjs_content_model_dom_1.createBr)(marker.format));
|
|
20
|
+
}
|
|
21
|
+
(_a = newParagraph.segments).push.apply(_a, (0, tslib_1.__spreadArray)([], (0, tslib_1.__read)(segments), false));
|
|
22
|
+
(0, roosterjs_content_model_dom_1.setParagraphNotImplicit)(paragraph);
|
|
23
|
+
insertPoint.paragraph = newParagraph;
|
|
24
|
+
(0, roosterjs_content_model_dom_1.normalizeParagraph)(paragraph);
|
|
25
|
+
return newParagraph;
|
|
26
|
+
}
|
|
27
|
+
exports.splitParagraph = splitParagraph;
|
|
28
|
+
});
|
|
29
|
+
//# sourceMappingURL=splitParagraph.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"splitParagraph.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-plugins/lib/edit/utils/splitParagraph.ts"],"names":[],"mappings":";;;;IAWA;;;;;;OAMG;IACH,SAAgB,cAAc,CAAC,WAAwB;;QAC3C,IAAA,SAAS,GAAa,WAAW,UAAxB,EAAE,MAAM,GAAK,WAAW,OAAhB,CAAiB;QAC1C,IAAM,YAAY,GAAwC,IAAA,6CAAe,EACrE,KAAK,CAAC,cAAc,EACpB,SAAS,CAAC,MAAM,EAChB,SAAS,CAAC,aAAa,CAC1B,CAAC;QAEF,IAAM,WAAW,GAAG,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACvD,IAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC,MAAM,CACtC,WAAW,EACX,SAAS,CAAC,QAAQ,CAAC,MAAM,GAAG,WAAW,CAC1C,CAAC;QAEF,IAAI,SAAS,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,EAAE;YAChC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAA,sCAAQ,EAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;SACpD;QAED,CAAA,KAAA,YAAY,CAAC,QAAQ,CAAA,CAAC,IAAI,8DAAI,QAAQ,WAAE;QAExC,IAAA,qDAAuB,EAAC,SAAS,CAAC,CAAC;QAEnC,WAAW,CAAC,SAAS,GAAG,YAAY,CAAC;QAErC,IAAA,gDAAkB,EAAC,SAAS,CAAC,CAAC;QAE9B,OAAO,YAAY,CAAC;IACxB,CAAC;IA3BD,wCA2BC","sourcesContent":["import {\n createBr,\n createParagraph,\n normalizeParagraph,\n setParagraphNotImplicit,\n} from 'roosterjs-content-model-dom';\nimport type {\n InsertPoint,\n ShallowMutableContentModelParagraph,\n} from 'roosterjs-content-model-types';\n\n/**\n * @internal\n * Split the given paragraph from insert point into two paragraphs,\n * and move the selection marker to the beginning of the second paragraph\n * @param insertPoint The input insert point which includes the paragraph and selection marker\n * @returns The new paragraph it created\n */\nexport function splitParagraph(insertPoint: InsertPoint) {\n const { paragraph, marker } = insertPoint;\n const newParagraph: ShallowMutableContentModelParagraph = createParagraph(\n false /*isImplicit*/,\n paragraph.format,\n paragraph.segmentFormat\n );\n\n const markerIndex = paragraph.segments.indexOf(marker);\n const segments = paragraph.segments.splice(\n markerIndex,\n paragraph.segments.length - markerIndex\n );\n\n if (paragraph.segments.length == 0) {\n paragraph.segments.push(createBr(marker.format));\n }\n\n newParagraph.segments.push(...segments);\n\n setParagraphNotImplicit(paragraph);\n\n insertPoint.paragraph = newParagraph;\n\n normalizeParagraph(paragraph);\n\n return newParagraph;\n}\n"]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { CreateElementData } from '../../pluginUtils/CreateElement/CreateElementData';
|
|
2
|
+
/**
|
|
3
|
+
* @internal
|
|
4
|
+
*/
|
|
5
|
+
export declare function createImageCropper(doc: Document): HTMLDivElement[];
|
|
6
|
+
/**
|
|
7
|
+
* @internal
|
|
8
|
+
* Get HTML for crop elements, including 4 overlays (to show dark shadow), 1 container and 4 crop handles
|
|
9
|
+
*/
|
|
10
|
+
export declare function getCropHTML(): CreateElementData[];
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
define(["require", "exports", "../../pluginUtils/CreateElement/createElement", "../types/ImageEditElementClass", "roosterjs-content-model-dom", "../constants/constants"], function (require, exports, createElement_1, ImageEditElementClass_1, roosterjs_content_model_dom_1, constants_1) {
|
|
2
|
+
"use strict";
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.getCropHTML = exports.createImageCropper = void 0;
|
|
5
|
+
/**
|
|
6
|
+
* @internal
|
|
7
|
+
*/
|
|
8
|
+
function createImageCropper(doc) {
|
|
9
|
+
var cropper = getCropHTML()
|
|
10
|
+
.map(function (data) {
|
|
11
|
+
var cropper = (0, createElement_1.createElement)(data, doc);
|
|
12
|
+
if (cropper &&
|
|
13
|
+
(0, roosterjs_content_model_dom_1.isNodeOfType)(cropper, 'ELEMENT_NODE') &&
|
|
14
|
+
(0, roosterjs_content_model_dom_1.isElementOfType)(cropper, 'div')) {
|
|
15
|
+
return cropper;
|
|
16
|
+
}
|
|
17
|
+
})
|
|
18
|
+
.filter(function (cropper) { return !!cropper; });
|
|
19
|
+
return cropper;
|
|
20
|
+
}
|
|
21
|
+
exports.createImageCropper = createImageCropper;
|
|
22
|
+
/**
|
|
23
|
+
* @internal
|
|
24
|
+
* Get HTML for crop elements, including 4 overlays (to show dark shadow), 1 container and 4 crop handles
|
|
25
|
+
*/
|
|
26
|
+
function getCropHTML() {
|
|
27
|
+
var overlayHTML = {
|
|
28
|
+
tag: 'div',
|
|
29
|
+
style: 'position:absolute;background-color:rgb(0,0,0,0.5);pointer-events:none',
|
|
30
|
+
className: ImageEditElementClass_1.ImageEditElementClass.CropOverlay,
|
|
31
|
+
};
|
|
32
|
+
var containerHTML = {
|
|
33
|
+
tag: 'div',
|
|
34
|
+
style: 'position:absolute;overflow:hidden;inset:0px;',
|
|
35
|
+
className: ImageEditElementClass_1.ImageEditElementClass.CropContainer,
|
|
36
|
+
children: [],
|
|
37
|
+
};
|
|
38
|
+
if (containerHTML) {
|
|
39
|
+
constants_1.XS_CROP.forEach(function (x) {
|
|
40
|
+
return constants_1.YS_CROP.forEach(function (y) { var _a; return (_a = containerHTML.children) === null || _a === void 0 ? void 0 : _a.push(getCropHTMLInternal(x, y)); });
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
return [containerHTML, overlayHTML, overlayHTML, overlayHTML, overlayHTML];
|
|
44
|
+
}
|
|
45
|
+
exports.getCropHTML = getCropHTML;
|
|
46
|
+
function getCropHTMLInternal(x, y) {
|
|
47
|
+
var leftOrRight = x == 'w' ? 'left' : 'right';
|
|
48
|
+
var topOrBottom = y == 'n' ? 'top' : 'bottom';
|
|
49
|
+
var rotation = constants_1.ROTATION[y + x];
|
|
50
|
+
return {
|
|
51
|
+
tag: 'div',
|
|
52
|
+
className: ImageEditElementClass_1.ImageEditElementClass.CropHandle,
|
|
53
|
+
style: "position:absolute;pointer-events:auto;cursor:" + y + x + "-resize;" + leftOrRight + ":0;" + topOrBottom + ":0;width:" + constants_1.CROP_HANDLE_SIZE + "px;height:" + constants_1.CROP_HANDLE_SIZE + "px;transform:rotate(" + rotation + "deg)",
|
|
54
|
+
dataset: { x: x, y: y },
|
|
55
|
+
children: getCropHandleHTML(),
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
function getCropHandleHTML() {
|
|
59
|
+
var result = [];
|
|
60
|
+
[0, 1].forEach(function (layer) {
|
|
61
|
+
return [0, 1].forEach(function (dir) {
|
|
62
|
+
result.push(getCropHandleHTMLInternal(layer, dir));
|
|
63
|
+
});
|
|
64
|
+
});
|
|
65
|
+
return result;
|
|
66
|
+
}
|
|
67
|
+
function getCropHandleHTMLInternal(layer, dir) {
|
|
68
|
+
var position = dir == 0
|
|
69
|
+
? "right:" + layer + "px;height:" + (constants_1.CROP_HANDLE_WIDTH - layer * 2) + "px;"
|
|
70
|
+
: "top:" + layer + "px;width:" + (constants_1.CROP_HANDLE_WIDTH - layer * 2) + "px;";
|
|
71
|
+
var bgColor = layer == 0 ? 'white' : 'black';
|
|
72
|
+
return {
|
|
73
|
+
tag: 'div',
|
|
74
|
+
style: "position:absolute;left:" + layer + "px;bottom:" + layer + "px;" + position + ";background-color:" + bgColor,
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
//# sourceMappingURL=createImageCropper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createImageCropper.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-plugins/lib/imageEdit/Cropper/createImageCropper.ts"],"names":[],"mappings":"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","sourcesContent":["import { createElement } from '../../pluginUtils/CreateElement/createElement';\nimport { ImageEditElementClass } from '../types/ImageEditElementClass';\nimport { isElementOfType, isNodeOfType } from 'roosterjs-content-model-dom';\nimport type { CreateElementData } from '../../pluginUtils/CreateElement/CreateElementData';\nimport type { DNDDirectionX, DnDDirectionY } from '../types/DragAndDropContext';\nimport {\n CROP_HANDLE_SIZE,\n CROP_HANDLE_WIDTH,\n ROTATION,\n XS_CROP,\n YS_CROP,\n} from '../constants/constants';\n\n/**\n * @internal\n */\nexport function createImageCropper(doc: Document) {\n const cropper = getCropHTML()\n .map(data => {\n const cropper = createElement(data, doc);\n if (\n cropper &&\n isNodeOfType(cropper, 'ELEMENT_NODE') &&\n isElementOfType(cropper, 'div')\n ) {\n return cropper;\n }\n })\n .filter(cropper => !!cropper) as HTMLDivElement[];\n return cropper;\n}\n\n/**\n * @internal\n * Get HTML for crop elements, including 4 overlays (to show dark shadow), 1 container and 4 crop handles\n */\nexport function getCropHTML(): CreateElementData[] {\n const overlayHTML: CreateElementData = {\n tag: 'div',\n style: 'position:absolute;background-color:rgb(0,0,0,0.5);pointer-events:none',\n className: ImageEditElementClass.CropOverlay,\n };\n const containerHTML: CreateElementData = {\n tag: 'div',\n style: 'position:absolute;overflow:hidden;inset:0px;',\n className: ImageEditElementClass.CropContainer,\n children: [],\n };\n\n if (containerHTML) {\n XS_CROP.forEach(x =>\n YS_CROP.forEach(y => containerHTML.children?.push(getCropHTMLInternal(x, y)))\n );\n }\n return [containerHTML, overlayHTML, overlayHTML, overlayHTML, overlayHTML];\n}\n\nfunction getCropHTMLInternal(x: DNDDirectionX, y: DnDDirectionY): CreateElementData {\n const leftOrRight = x == 'w' ? 'left' : 'right';\n const topOrBottom = y == 'n' ? 'top' : 'bottom';\n const rotation = ROTATION[y + x];\n\n return {\n tag: 'div',\n className: ImageEditElementClass.CropHandle,\n style: `position:absolute;pointer-events:auto;cursor:${y}${x}-resize;${leftOrRight}:0;${topOrBottom}:0;width:${CROP_HANDLE_SIZE}px;height:${CROP_HANDLE_SIZE}px;transform:rotate(${rotation}deg)`,\n dataset: { x, y },\n children: getCropHandleHTML(),\n };\n}\n\nfunction getCropHandleHTML(): CreateElementData[] {\n const result: CreateElementData[] = [];\n [0, 1].forEach(layer =>\n [0, 1].forEach(dir => {\n result.push(getCropHandleHTMLInternal(layer, dir));\n })\n );\n return result;\n}\n\nfunction getCropHandleHTMLInternal(layer: number, dir: number): CreateElementData {\n const position =\n dir == 0\n ? `right:${layer}px;height:${CROP_HANDLE_WIDTH - layer * 2}px;`\n : `top:${layer}px;width:${CROP_HANDLE_WIDTH - layer * 2}px;`;\n const bgColor = layer == 0 ? 'white' : 'black';\n\n return {\n tag: 'div',\n style: `position:absolute;left:${layer}px;bottom:${layer}px;${position};background-color:${bgColor}`,\n };\n}\n"]}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { DragAndDropContext } from '../types/DragAndDropContext';
|
|
2
|
+
import type { DragAndDropHandler } from '../../pluginUtils/DragAndDrop/DragAndDropHandler';
|
|
3
|
+
import type { ImageCropMetadataFormat } from 'roosterjs-content-model-types';
|
|
4
|
+
/**
|
|
5
|
+
* @internal
|
|
6
|
+
* Crop handle for DragAndDropHelper
|
|
7
|
+
*/
|
|
8
|
+
export declare const Cropper: DragAndDropHandler<DragAndDropContext, ImageCropMetadataFormat>;
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
define(["require", "exports", "tslib", "../utils/imageEditUtils"], function (require, exports, tslib_1, imageEditUtils_1) {
|
|
2
|
+
"use strict";
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.Cropper = void 0;
|
|
5
|
+
/**
|
|
6
|
+
* @internal
|
|
7
|
+
* Crop handle for DragAndDropHelper
|
|
8
|
+
*/
|
|
9
|
+
exports.Cropper = {
|
|
10
|
+
onDragStart: function (_a) {
|
|
11
|
+
var editInfo = _a.editInfo;
|
|
12
|
+
return ((0, tslib_1.__assign)({}, editInfo));
|
|
13
|
+
},
|
|
14
|
+
onDragging: function (_a, e, base, dx, dy) {
|
|
15
|
+
var _b;
|
|
16
|
+
var _c;
|
|
17
|
+
var editInfo = _a.editInfo, x = _a.x, y = _a.y, options = _a.options;
|
|
18
|
+
_b = (0, tslib_1.__read)((0, imageEditUtils_1.rotateCoordinate)(dx, dy, (_c = editInfo.angleRad) !== null && _c !== void 0 ? _c : 0), 2), dx = _b[0], dy = _b[1];
|
|
19
|
+
var widthPx = editInfo.widthPx, heightPx = editInfo.heightPx, leftPercent = editInfo.leftPercent, rightPercent = editInfo.rightPercent, topPercent = editInfo.topPercent, bottomPercent = editInfo.bottomPercent;
|
|
20
|
+
if (leftPercent === undefined ||
|
|
21
|
+
rightPercent === undefined ||
|
|
22
|
+
topPercent === undefined ||
|
|
23
|
+
bottomPercent === undefined ||
|
|
24
|
+
base.leftPercent === undefined ||
|
|
25
|
+
base.rightPercent === undefined ||
|
|
26
|
+
base.topPercent === undefined ||
|
|
27
|
+
base.bottomPercent === undefined ||
|
|
28
|
+
widthPx === undefined ||
|
|
29
|
+
heightPx === undefined) {
|
|
30
|
+
return false;
|
|
31
|
+
}
|
|
32
|
+
var minWidth = options.minWidth, minHeight = options.minHeight;
|
|
33
|
+
var widthPercent = 1 - leftPercent - rightPercent;
|
|
34
|
+
var heightPercent = 1 - topPercent - bottomPercent;
|
|
35
|
+
if (widthPercent > 0 &&
|
|
36
|
+
heightPercent > 0 &&
|
|
37
|
+
minWidth !== undefined &&
|
|
38
|
+
minHeight !== undefined) {
|
|
39
|
+
var fullWidth = widthPx / widthPercent;
|
|
40
|
+
var fullHeight = heightPx / heightPercent;
|
|
41
|
+
var newLeft = x != 'e'
|
|
42
|
+
? crop(base.leftPercent, dx, fullWidth, rightPercent, minWidth)
|
|
43
|
+
: leftPercent;
|
|
44
|
+
var newRight = x != 'w'
|
|
45
|
+
? crop(base.rightPercent, -dx, fullWidth, leftPercent, minWidth)
|
|
46
|
+
: rightPercent;
|
|
47
|
+
var newTop = y != 's'
|
|
48
|
+
? crop(base.topPercent, dy, fullHeight, bottomPercent, minHeight)
|
|
49
|
+
: topPercent;
|
|
50
|
+
var newBottom = y != 'n'
|
|
51
|
+
? crop(base.bottomPercent, -dy, fullHeight, topPercent, minHeight)
|
|
52
|
+
: bottomPercent;
|
|
53
|
+
editInfo.leftPercent = newLeft;
|
|
54
|
+
editInfo.rightPercent = newRight;
|
|
55
|
+
editInfo.topPercent = newTop;
|
|
56
|
+
editInfo.bottomPercent = newBottom;
|
|
57
|
+
editInfo.widthPx = fullWidth * (1 - newLeft - newRight);
|
|
58
|
+
editInfo.heightPx = fullHeight * (1 - newTop - newBottom);
|
|
59
|
+
return true;
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
return false;
|
|
63
|
+
}
|
|
64
|
+
},
|
|
65
|
+
};
|
|
66
|
+
function crop(basePercentage, deltaValue, fullValue, currentPercentage, minValue) {
|
|
67
|
+
var maxValue = fullValue * (1 - currentPercentage) - minValue;
|
|
68
|
+
var newValue = fullValue * basePercentage + deltaValue;
|
|
69
|
+
var validValue = Math.max(Math.min(newValue, maxValue), 0);
|
|
70
|
+
return validValue / fullValue;
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
//# sourceMappingURL=cropperContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cropperContext.js","sourceRoot":"","sources":["../../../../../packages/roosterjs-content-model-plugins/lib/imageEdit/Cropper/cropperContext.ts"],"names":[],"mappings":"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","sourcesContent":["import { rotateCoordinate } from '../utils/imageEditUtils';\nimport type { DragAndDropContext } from '../types/DragAndDropContext';\nimport type { DragAndDropHandler } from '../../pluginUtils/DragAndDrop/DragAndDropHandler';\nimport type { ImageCropMetadataFormat } from 'roosterjs-content-model-types';\n\n/**\n * @internal\n * Crop handle for DragAndDropHelper\n */\nexport const Cropper: DragAndDropHandler<DragAndDropContext, ImageCropMetadataFormat> = {\n onDragStart: ({ editInfo }) => ({ ...editInfo }),\n onDragging: ({ editInfo, x, y, options }, e, base, dx, dy) => {\n [dx, dy] = rotateCoordinate(dx, dy, editInfo.angleRad ?? 0);\n\n const {\n widthPx,\n heightPx,\n leftPercent,\n rightPercent,\n topPercent,\n bottomPercent,\n } = editInfo;\n\n if (\n leftPercent === undefined ||\n rightPercent === undefined ||\n topPercent === undefined ||\n bottomPercent === undefined ||\n base.leftPercent === undefined ||\n base.rightPercent === undefined ||\n base.topPercent === undefined ||\n base.bottomPercent === undefined ||\n widthPx === undefined ||\n heightPx === undefined\n ) {\n return false;\n }\n\n const { minWidth, minHeight } = options;\n const widthPercent = 1 - leftPercent - rightPercent;\n const heightPercent = 1 - topPercent - bottomPercent;\n\n if (\n widthPercent > 0 &&\n heightPercent > 0 &&\n minWidth !== undefined &&\n minHeight !== undefined\n ) {\n const fullWidth = widthPx / widthPercent;\n const fullHeight = heightPx / heightPercent;\n const newLeft =\n x != 'e'\n ? crop(base.leftPercent, dx, fullWidth, rightPercent, minWidth)\n : leftPercent;\n const newRight =\n x != 'w'\n ? crop(base.rightPercent, -dx, fullWidth, leftPercent, minWidth)\n : rightPercent;\n const newTop =\n y != 's'\n ? crop(base.topPercent, dy, fullHeight, bottomPercent, minHeight)\n : topPercent;\n const newBottom =\n y != 'n'\n ? crop(base.bottomPercent, -dy, fullHeight, topPercent, minHeight)\n : bottomPercent;\n\n editInfo.leftPercent = newLeft;\n editInfo.rightPercent = newRight;\n editInfo.topPercent = newTop;\n editInfo.bottomPercent = newBottom;\n editInfo.widthPx = fullWidth * (1 - newLeft - newRight);\n editInfo.heightPx = fullHeight * (1 - newTop - newBottom);\n\n return true;\n } else {\n return false;\n }\n },\n};\n\nfunction crop(\n basePercentage: number,\n deltaValue: number,\n fullValue: number,\n currentPercentage: number,\n minValue: number\n): number {\n const maxValue = fullValue * (1 - currentPercentage) - minValue;\n const newValue = fullValue * basePercentage + deltaValue;\n const validValue = Math.max(Math.min(newValue, maxValue), 0);\n return validValue / fullValue;\n}\n"]}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import type { ImageEditOptions } from './types/ImageEditOptions';
|
|
2
|
+
import type { EditorPlugin, IEditor, ImageEditOperation, ImageEditor, PluginEvent } from 'roosterjs-content-model-types';
|
|
3
|
+
/**
|
|
4
|
+
* ImageEdit plugin handles the following image editing features:
|
|
5
|
+
* - Resize image
|
|
6
|
+
* - Crop image
|
|
7
|
+
* - Rotate image
|
|
8
|
+
* - Flip image
|
|
9
|
+
*/
|
|
10
|
+
export declare class ImageEditPlugin implements ImageEditor, EditorPlugin {
|
|
11
|
+
protected options: ImageEditOptions;
|
|
12
|
+
protected editor: IEditor | null;
|
|
13
|
+
private shadowSpan;
|
|
14
|
+
private selectedImage;
|
|
15
|
+
wrapper: HTMLSpanElement | null;
|
|
16
|
+
private imageEditInfo;
|
|
17
|
+
private imageHTMLOptions;
|
|
18
|
+
private dndHelpers;
|
|
19
|
+
private clonedImage;
|
|
20
|
+
private lastSrc;
|
|
21
|
+
private wasImageResized;
|
|
22
|
+
private isCropMode;
|
|
23
|
+
private resizers;
|
|
24
|
+
private rotators;
|
|
25
|
+
private croppers;
|
|
26
|
+
private zoomScale;
|
|
27
|
+
private disposer;
|
|
28
|
+
constructor(options?: ImageEditOptions);
|
|
29
|
+
/**
|
|
30
|
+
* Get name of this plugin
|
|
31
|
+
*/
|
|
32
|
+
getName(): string;
|
|
33
|
+
/**
|
|
34
|
+
* The first method that editor will call to a plugin when editor is initializing.
|
|
35
|
+
* It will pass in the editor instance, plugin should take this chance to save the
|
|
36
|
+
* editor reference so that it can call to any editor method or format API later.
|
|
37
|
+
* @param editor The editor object
|
|
38
|
+
*/
|
|
39
|
+
initialize(editor: IEditor): void;
|
|
40
|
+
/**
|
|
41
|
+
* The last method that editor will call to a plugin before it is disposed.
|
|
42
|
+
* Plugin can take this chance to clear the reference to editor. After this method is
|
|
43
|
+
* called, plugin should not call to any editor method since it will result in error.
|
|
44
|
+
*/
|
|
45
|
+
dispose(): void;
|
|
46
|
+
/**
|
|
47
|
+
* Core method for a plugin. Once an event happens in editor, editor will call this
|
|
48
|
+
* method of each plugin to handle the event as long as the event is not handled
|
|
49
|
+
* exclusively by another plugin.
|
|
50
|
+
* @param event The event to handle:
|
|
51
|
+
*/
|
|
52
|
+
onPluginEvent(_event: PluginEvent): void;
|
|
53
|
+
private startEditing;
|
|
54
|
+
startRotateAndResize(editor: IEditor, image: HTMLImageElement, apiOperation?: 'resize' | 'rotate'): void;
|
|
55
|
+
private updateRotateHandleState;
|
|
56
|
+
isOperationAllowed(operation: ImageEditOperation): boolean;
|
|
57
|
+
canRegenerateImage(image: HTMLImageElement): boolean;
|
|
58
|
+
cropImage(): void;
|
|
59
|
+
private editImage;
|
|
60
|
+
private cleanInfo;
|
|
61
|
+
private formatImageWithContentModel;
|
|
62
|
+
private removeImageWrapper;
|
|
63
|
+
flipImage(direction: 'horizontal' | 'vertical'): void;
|
|
64
|
+
rotateImage(angleRad: number): void;
|
|
65
|
+
getWrapper(): HTMLSpanElement | null;
|
|
66
|
+
}
|