@opentiny/fluent-editor 4.0.0-alpha.0 → 4.0.0-alpha.10
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 +88 -105
- package/es/attributors/line-height.es.js.map +1 -1
- package/es/config/base64-image.es.js.map +1 -1
- package/es/config/editor.config.es.js +0 -7
- package/es/config/editor.config.es.js.map +1 -1
- package/es/config/editor.utils.es.js +0 -2
- package/es/config/editor.utils.es.js.map +1 -1
- package/es/config/i18n/en-us.es.js +0 -13
- package/es/config/i18n/en-us.es.js.map +1 -1
- package/es/config/i18n/zh-cn.es.js +0 -13
- package/es/config/i18n/zh-cn.es.js.map +1 -1
- package/es/config/index.es.js +8 -13
- package/es/config/index.es.js.map +1 -1
- package/es/config/types/index.es.js +0 -20
- package/es/config/types/index.es.js.map +1 -1
- package/es/core/fluent-editor.es.js +7 -5
- package/es/core/fluent-editor.es.js.map +1 -1
- package/es/fluent-editor.es.js +38 -22
- package/es/fluent-editor.es.js.map +1 -1
- package/es/formats/emoji.es.js +14 -0
- package/es/formats/emoji.es.js.map +1 -0
- package/es/formats/index.es.js +11 -0
- package/es/formats/index.es.js.map +1 -0
- package/es/formats/soft-break.es.js +12 -5
- package/es/formats/soft-break.es.js.map +1 -1
- package/es/formats/strike.es.js +8 -5
- package/es/formats/strike.es.js.map +1 -1
- package/es/formats/video.es.js +14 -10
- package/es/formats/video.es.js.map +1 -1
- package/es/index.es.js +94 -32
- package/es/index.es.js.map +1 -1
- package/es/modules/ai/constants.es.js +50 -0
- package/es/modules/ai/constants.es.js.map +1 -0
- package/es/modules/ai/icons.es.js +319 -0
- package/es/modules/ai/icons.es.js.map +1 -0
- package/es/modules/ai/index.es.js +670 -0
- package/es/modules/ai/index.es.js.map +1 -0
- package/es/modules/collaborative-editing/awareness/awareness.es.js +93 -0
- package/es/modules/collaborative-editing/awareness/awareness.es.js.map +1 -0
- package/es/modules/collaborative-editing/awareness/index.es.js +8 -0
- package/es/modules/{emoji/emoji-list → collaborative-editing/awareness}/index.es.js.map +1 -1
- package/es/modules/collaborative-editing/awareness/y-indexeddb.es.js +12 -0
- package/es/modules/collaborative-editing/awareness/y-indexeddb.es.js.map +1 -0
- package/es/modules/collaborative-editing/collaborative-editing.es.js +105 -0
- package/es/modules/collaborative-editing/collaborative-editing.es.js.map +1 -0
- package/es/modules/collaborative-editing/index.es.js +6 -0
- package/es/modules/collaborative-editing/index.es.js.map +1 -0
- package/es/modules/collaborative-editing/module.es.js +35 -0
- package/es/modules/collaborative-editing/module.es.js.map +1 -0
- package/es/modules/collaborative-editing/provider/providerRegistry.es.js +28 -0
- package/es/modules/collaborative-editing/provider/providerRegistry.es.js.map +1 -0
- package/es/modules/collaborative-editing/provider/webrtc.es.js +99 -0
- package/es/modules/collaborative-editing/provider/webrtc.es.js.map +1 -0
- package/es/modules/collaborative-editing/provider/websocket.es.js +111 -0
- package/es/modules/collaborative-editing/provider/websocket.es.js.map +1 -0
- package/es/modules/collaborative-editing/types.es.js +2 -0
- package/es/modules/collaborative-editing/types.es.js.map +1 -0
- package/es/modules/counter.es.js +8 -3
- package/es/modules/counter.es.js.map +1 -1
- package/es/modules/custom-clipboard.es.js +23 -27
- package/es/modules/custom-clipboard.es.js.map +1 -1
- package/es/modules/custom-image/actions/action.es.js +19 -0
- package/es/modules/custom-image/actions/action.es.js.map +1 -0
- package/es/modules/custom-image/actions/{CustomResizeAction.es.js → custom-resize-action.es.js} +24 -11
- package/es/modules/custom-image/actions/custom-resize-action.es.js.map +1 -0
- package/es/modules/custom-image/actions/{DeleteAction.es.js → delete-action.es.js} +8 -5
- package/es/modules/custom-image/actions/delete-action.es.js.map +1 -0
- package/es/modules/custom-image/actions/image-toolbar-buttons.es.js +137 -0
- package/es/modules/custom-image/actions/image-toolbar-buttons.es.js.map +1 -0
- package/es/modules/custom-image/actions/index.es.js +18 -0
- package/es/modules/custom-image/actions/index.es.js.map +1 -0
- package/es/modules/custom-image/actions/toolbar-action.es.js +33 -0
- package/es/modules/custom-image/actions/toolbar-action.es.js.map +1 -0
- package/es/modules/custom-image/actions/toolbar.es.js +110 -0
- package/es/modules/custom-image/actions/toolbar.es.js.map +1 -0
- package/es/modules/custom-image/{BlotFormatter.es.js → blot-formatter.es.js} +27 -50
- package/es/modules/custom-image/blot-formatter.es.js.map +1 -0
- package/es/modules/custom-image/image.es.js +41 -21
- package/es/modules/custom-image/image.es.js.map +1 -1
- package/es/modules/custom-image/index.es.js +9 -0
- package/es/modules/custom-image/index.es.js.map +1 -0
- package/es/modules/custom-image/options.es.js +88 -0
- package/es/modules/custom-image/options.es.js.map +1 -0
- package/es/modules/custom-image/specs/blot-spec.es.js +33 -0
- package/es/modules/custom-image/specs/blot-spec.es.js.map +1 -0
- package/es/modules/custom-image/specs/{CustomImageSpec.es.js → custom-image-spec.es.js} +13 -14
- package/es/modules/custom-image/specs/custom-image-spec.es.js.map +1 -0
- package/es/modules/custom-image/specs/image-spec.es.js +32 -0
- package/es/modules/custom-image/specs/image-spec.es.js.map +1 -0
- package/es/modules/custom-image/specs/index.es.js +9 -0
- package/es/modules/custom-image/specs/index.es.js.map +1 -0
- package/es/modules/custom-uploader.es.js +63 -194
- package/es/modules/custom-uploader.es.js.map +1 -1
- package/es/modules/divider.es.js +8 -7
- package/es/modules/divider.es.js.map +1 -1
- package/es/modules/emoji.es.js +167 -0
- package/es/modules/emoji.es.js.map +1 -0
- package/es/modules/file/formats/file.es.js +13 -13
- package/es/modules/file/formats/file.es.js.map +1 -1
- package/es/modules/file/index.es.js +6 -29
- package/es/modules/file/index.es.js.map +1 -1
- package/es/modules/file/modules/file-bar.es.js +11 -3
- package/es/modules/file/modules/file-bar.es.js.map +1 -1
- package/es/modules/file/modules/file-module.es.js +35 -0
- package/es/modules/file/modules/file-module.es.js.map +1 -0
- package/es/modules/i18n.es.js +33 -11
- package/es/modules/i18n.es.js.map +1 -1
- package/es/modules/index.es.js +27 -0
- package/es/modules/index.es.js.map +1 -0
- package/es/modules/link/formats/link.es.js +14 -10
- package/es/modules/link/formats/link.es.js.map +1 -1
- package/es/modules/link/index.es.js +4 -12
- package/es/modules/link/index.es.js.map +1 -1
- package/es/modules/link/modules/tooltip.es.js +31 -21
- package/es/modules/link/modules/tooltip.es.js.map +1 -1
- package/es/modules/mathlive/formats.es.js +10 -7
- package/es/modules/mathlive/formats.es.js.map +1 -1
- package/es/modules/mathlive/index.es.js +6 -30
- package/es/modules/mathlive/index.es.js.map +1 -1
- package/es/modules/mathlive/module.es.js +40 -0
- package/es/modules/mathlive/module.es.js.map +1 -0
- package/es/modules/mathlive/tooltip.es.js +9 -5
- package/es/modules/mathlive/tooltip.es.js.map +1 -1
- package/es/modules/mention/constants.es.js.map +1 -1
- package/es/modules/mention/index.es.js +7 -0
- package/es/modules/mention/index.es.js.map +1 -0
- package/es/modules/mention/{MentionLink.es.js → mention-link.es.js} +14 -6
- package/es/modules/mention/mention-link.es.js.map +1 -0
- package/es/modules/mention/{Mention.es.js → mention.es.js} +28 -20
- package/es/modules/mention/mention.es.js.map +1 -0
- package/es/modules/shortcut-key/index.es.js +17 -1
- package/es/modules/shortcut-key/index.es.js.map +1 -1
- package/es/modules/syntax.es.js +4 -0
- package/es/modules/syntax.es.js.map +1 -1
- package/es/modules/table-up/index.es.js +21 -8
- package/es/modules/table-up/index.es.js.map +1 -1
- package/es/modules/toolbar/better-picker.es.js +5 -0
- package/es/modules/toolbar/better-picker.es.js.map +1 -1
- package/es/modules/toolbar/better-toolbar.es.js +138 -0
- package/es/modules/toolbar/better-toolbar.es.js.map +1 -0
- package/es/modules/toolbar/index.es.js +5 -135
- package/es/modules/toolbar/index.es.js.map +1 -1
- package/es/modules/toolbar/toolbar-tip.es.js +6 -1
- package/es/modules/toolbar/toolbar-tip.es.js.map +1 -1
- package/es/themes/snow.es.js +32 -15
- package/es/themes/snow.es.js.map +1 -1
- package/es/tools/format-painter.es.js +8 -2
- package/es/tools/format-painter.es.js.map +1 -1
- package/es/tools/fullscreen.es.js.map +1 -1
- package/es/tools/screenshot.es.js.map +1 -1
- package/es/ui/icons.config.es.js +53 -0
- package/es/ui/icons.config.es.js.map +1 -1
- package/es/ui/icons.es.js +2 -1
- package/es/ui/icons.es.js.map +1 -1
- package/es/utils/debounce.es.js.map +1 -1
- package/es/utils/is.es.js +4 -0
- package/es/utils/is.es.js.map +1 -1
- package/es/utils/method.es.js.map +1 -1
- package/lib/attributors/line-height.cjs.js.map +1 -1
- package/lib/config/base64-image.cjs.js.map +1 -1
- package/lib/config/editor.config.cjs.js +0 -7
- package/lib/config/editor.config.cjs.js.map +1 -1
- package/lib/config/editor.utils.cjs.js +0 -2
- package/lib/config/editor.utils.cjs.js.map +1 -1
- package/lib/config/i18n/en-us.cjs.js +0 -13
- package/lib/config/i18n/en-us.cjs.js.map +1 -1
- package/lib/config/i18n/zh-cn.cjs.js +0 -13
- package/lib/config/i18n/zh-cn.cjs.js.map +1 -1
- package/lib/config/index.cjs.js +6 -11
- package/lib/config/index.cjs.js.map +1 -1
- package/lib/config/types/index.cjs.js +0 -20
- package/lib/config/types/index.cjs.js.map +1 -1
- package/lib/core/fluent-editor.cjs.js +6 -4
- package/lib/core/fluent-editor.cjs.js.map +1 -1
- package/lib/fluent-editor.cjs.js +46 -30
- package/lib/fluent-editor.cjs.js.map +1 -1
- package/lib/formats/emoji.cjs.js +14 -0
- package/lib/formats/emoji.cjs.js.map +1 -0
- package/lib/formats/index.cjs.js +11 -0
- package/lib/formats/index.cjs.js.map +1 -0
- package/lib/formats/soft-break.cjs.js +13 -6
- package/lib/formats/soft-break.cjs.js.map +1 -1
- package/lib/formats/strike.cjs.js +9 -6
- package/lib/formats/strike.cjs.js.map +1 -1
- package/lib/formats/video.cjs.js +15 -11
- package/lib/formats/video.cjs.js.map +1 -1
- package/lib/index.cjs.js +114 -34
- package/lib/index.cjs.js.map +1 -1
- package/lib/modules/ai/constants.cjs.js +50 -0
- package/lib/modules/ai/constants.cjs.js.map +1 -0
- package/lib/modules/ai/icons.cjs.js +319 -0
- package/lib/modules/ai/icons.cjs.js.map +1 -0
- package/lib/modules/ai/index.cjs.js +670 -0
- package/lib/modules/ai/index.cjs.js.map +1 -0
- package/lib/modules/collaborative-editing/awareness/awareness.cjs.js +110 -0
- package/lib/modules/collaborative-editing/awareness/awareness.cjs.js.map +1 -0
- package/lib/modules/collaborative-editing/awareness/index.cjs.js +8 -0
- package/lib/modules/collaborative-editing/awareness/index.cjs.js.map +1 -0
- package/lib/modules/collaborative-editing/awareness/y-indexeddb.cjs.js +12 -0
- package/lib/modules/collaborative-editing/awareness/y-indexeddb.cjs.js.map +1 -0
- package/lib/modules/collaborative-editing/collaborative-editing.cjs.js +122 -0
- package/lib/modules/collaborative-editing/collaborative-editing.cjs.js.map +1 -0
- package/lib/modules/collaborative-editing/index.cjs.js +6 -0
- package/lib/modules/{emoji/emoji-list → collaborative-editing}/index.cjs.js.map +1 -1
- package/lib/modules/collaborative-editing/module.cjs.js +35 -0
- package/lib/modules/collaborative-editing/module.cjs.js.map +1 -0
- package/lib/modules/collaborative-editing/provider/providerRegistry.cjs.js +28 -0
- package/lib/modules/collaborative-editing/provider/providerRegistry.cjs.js.map +1 -0
- package/lib/modules/collaborative-editing/provider/webrtc.cjs.js +116 -0
- package/lib/modules/collaborative-editing/provider/webrtc.cjs.js.map +1 -0
- package/lib/modules/collaborative-editing/provider/websocket.cjs.js +128 -0
- package/lib/modules/collaborative-editing/provider/websocket.cjs.js.map +1 -0
- package/lib/modules/collaborative-editing/types.cjs.js +2 -0
- package/lib/modules/collaborative-editing/types.cjs.js.map +1 -0
- package/lib/modules/counter.cjs.js +8 -3
- package/lib/modules/counter.cjs.js.map +1 -1
- package/lib/modules/custom-clipboard.cjs.js +23 -27
- package/lib/modules/custom-clipboard.cjs.js.map +1 -1
- package/lib/modules/custom-image/actions/action.cjs.js +19 -0
- package/lib/modules/custom-image/actions/action.cjs.js.map +1 -0
- package/lib/modules/custom-image/actions/{CustomResizeAction.cjs.js → custom-resize-action.cjs.js} +26 -13
- package/lib/modules/custom-image/actions/custom-resize-action.cjs.js.map +1 -0
- package/lib/modules/custom-image/actions/{DeleteAction.cjs.js → delete-action.cjs.js} +10 -7
- package/lib/modules/custom-image/actions/delete-action.cjs.js.map +1 -0
- package/lib/modules/custom-image/actions/image-toolbar-buttons.cjs.js +137 -0
- package/lib/modules/custom-image/actions/image-toolbar-buttons.cjs.js.map +1 -0
- package/lib/modules/custom-image/actions/index.cjs.js +18 -0
- package/lib/modules/custom-image/actions/index.cjs.js.map +1 -0
- package/lib/modules/custom-image/actions/toolbar-action.cjs.js +33 -0
- package/lib/modules/custom-image/actions/toolbar-action.cjs.js.map +1 -0
- package/lib/modules/custom-image/actions/toolbar.cjs.js +110 -0
- package/lib/modules/custom-image/actions/toolbar.cjs.js.map +1 -0
- package/lib/modules/custom-image/{BlotFormatter.cjs.js → blot-formatter.cjs.js} +28 -51
- package/lib/modules/custom-image/blot-formatter.cjs.js.map +1 -0
- package/lib/modules/custom-image/image.cjs.js +42 -22
- package/lib/modules/custom-image/image.cjs.js.map +1 -1
- package/lib/modules/custom-image/index.cjs.js +9 -0
- package/lib/modules/custom-image/index.cjs.js.map +1 -0
- package/lib/modules/custom-image/options.cjs.js +88 -0
- package/lib/modules/custom-image/options.cjs.js.map +1 -0
- package/lib/modules/custom-image/specs/blot-spec.cjs.js +33 -0
- package/lib/modules/custom-image/specs/blot-spec.cjs.js.map +1 -0
- package/lib/modules/custom-image/specs/{CustomImageSpec.cjs.js → custom-image-spec.cjs.js} +14 -15
- package/lib/modules/custom-image/specs/custom-image-spec.cjs.js.map +1 -0
- package/lib/modules/custom-image/specs/image-spec.cjs.js +32 -0
- package/lib/modules/custom-image/specs/image-spec.cjs.js.map +1 -0
- package/lib/modules/custom-image/specs/index.cjs.js +9 -0
- package/lib/modules/custom-image/specs/index.cjs.js.map +1 -0
- package/lib/modules/custom-uploader.cjs.js +64 -195
- package/lib/modules/custom-uploader.cjs.js.map +1 -1
- package/lib/modules/divider.cjs.js +9 -8
- package/lib/modules/divider.cjs.js.map +1 -1
- package/lib/modules/emoji.cjs.js +167 -0
- package/lib/modules/emoji.cjs.js.map +1 -0
- package/lib/modules/file/formats/file.cjs.js +14 -14
- package/lib/modules/file/formats/file.cjs.js.map +1 -1
- package/lib/modules/file/index.cjs.js +5 -28
- package/lib/modules/file/index.cjs.js.map +1 -1
- package/lib/modules/file/modules/file-bar.cjs.js +12 -4
- package/lib/modules/file/modules/file-bar.cjs.js.map +1 -1
- package/lib/modules/file/modules/file-module.cjs.js +35 -0
- package/lib/modules/file/modules/file-module.cjs.js.map +1 -0
- package/lib/modules/i18n.cjs.js +32 -10
- package/lib/modules/i18n.cjs.js.map +1 -1
- package/lib/modules/index.cjs.js +27 -0
- package/lib/modules/index.cjs.js.map +1 -0
- package/lib/modules/link/formats/link.cjs.js +15 -11
- package/lib/modules/link/formats/link.cjs.js.map +1 -1
- package/lib/modules/link/index.cjs.js +4 -12
- package/lib/modules/link/index.cjs.js.map +1 -1
- package/lib/modules/link/modules/tooltip.cjs.js +30 -20
- package/lib/modules/link/modules/tooltip.cjs.js.map +1 -1
- package/lib/modules/mathlive/formats.cjs.js +11 -8
- package/lib/modules/mathlive/formats.cjs.js.map +1 -1
- package/lib/modules/mathlive/index.cjs.js +5 -29
- package/lib/modules/mathlive/index.cjs.js.map +1 -1
- package/lib/modules/mathlive/module.cjs.js +40 -0
- package/lib/modules/mathlive/module.cjs.js.map +1 -0
- package/lib/modules/mathlive/tooltip.cjs.js +10 -6
- package/lib/modules/mathlive/tooltip.cjs.js.map +1 -1
- package/lib/modules/mention/constants.cjs.js.map +1 -1
- package/lib/modules/mention/index.cjs.js +7 -0
- package/lib/modules/mention/index.cjs.js.map +1 -0
- package/lib/modules/mention/{MentionLink.cjs.js → mention-link.cjs.js} +15 -7
- package/lib/modules/mention/mention-link.cjs.js.map +1 -0
- package/lib/modules/mention/{Mention.cjs.js → mention.cjs.js} +30 -22
- package/lib/modules/mention/mention.cjs.js.map +1 -0
- package/lib/modules/shortcut-key/index.cjs.js +16 -0
- package/lib/modules/shortcut-key/index.cjs.js.map +1 -1
- package/lib/modules/syntax.cjs.js +4 -0
- package/lib/modules/syntax.cjs.js.map +1 -1
- package/lib/modules/table-up/index.cjs.js +21 -8
- package/lib/modules/table-up/index.cjs.js.map +1 -1
- package/lib/modules/toolbar/better-picker.cjs.js +5 -0
- package/lib/modules/toolbar/better-picker.cjs.js.map +1 -1
- package/lib/modules/toolbar/better-toolbar.cjs.js +138 -0
- package/lib/modules/toolbar/better-toolbar.cjs.js.map +1 -0
- package/lib/modules/toolbar/index.cjs.js +6 -136
- package/lib/modules/toolbar/index.cjs.js.map +1 -1
- package/lib/modules/toolbar/toolbar-tip.cjs.js +6 -1
- package/lib/modules/toolbar/toolbar-tip.cjs.js.map +1 -1
- package/lib/themes/snow.cjs.js +33 -16
- package/lib/themes/snow.cjs.js.map +1 -1
- package/lib/tools/format-painter.cjs.js +8 -2
- package/lib/tools/format-painter.cjs.js.map +1 -1
- package/lib/tools/fullscreen.cjs.js.map +1 -1
- package/lib/tools/screenshot.cjs.js.map +1 -1
- package/lib/ui/icons.cjs.js +1 -0
- package/lib/ui/icons.cjs.js.map +1 -1
- package/lib/ui/icons.config.cjs.js +53 -0
- package/lib/ui/icons.config.cjs.js.map +1 -1
- package/lib/utils/debounce.cjs.js.map +1 -1
- package/lib/utils/is.cjs.js +4 -0
- package/lib/utils/is.cjs.js.map +1 -1
- package/lib/utils/method.cjs.js.map +1 -1
- package/package.json +68 -59
- package/style.css +2359 -2251
- package/types/attributors/font-size.d.ts +1 -1
- package/types/attributors/font-style.d.ts +1 -1
- package/types/attributors/index.d.ts +4 -4
- package/types/attributors/line-height.d.ts +1 -1
- package/types/attributors/text-indent.d.ts +1 -1
- package/types/config/base64-image.d.ts +2 -2
- package/types/config/editor.config.d.ts +11 -285
- package/types/config/editor.utils.d.ts +40 -41
- package/types/config/i18n/en-us.d.ts +123 -136
- package/types/config/i18n/zh-cn.d.ts +123 -136
- package/types/config/index.d.ts +7 -6
- package/types/config/types/editor-config.interface.d.ts +11 -35
- package/types/config/types/editor-modules.interface.d.ts +41 -31
- package/types/config/types/index.d.ts +3 -23
- package/types/config/types/type.d.ts +2 -6
- package/types/core/fluent-editor.d.ts +11 -11
- package/types/fluent-editor.d.ts +1 -2
- package/types/formats/emoji.d.ts +8 -0
- package/types/formats/index.d.ts +4 -0
- package/types/formats/soft-break.d.ts +12 -14
- package/types/formats/strike.d.ts +8 -7
- package/types/formats/video.d.ts +13 -16
- package/types/index.d.ts +7 -6
- package/types/modules/ai/constants.d.ts +30 -0
- package/types/modules/ai/icons.d.ts +21 -0
- package/types/modules/ai/index.d.ts +96 -0
- package/types/modules/ai/types.d.ts +16 -0
- package/types/modules/collaborative-editing/awareness/awareness.d.ts +28 -0
- package/types/modules/collaborative-editing/awareness/index.d.ts +2 -0
- package/types/modules/collaborative-editing/awareness/y-indexeddb.d.ts +2 -0
- package/types/modules/collaborative-editing/collaborative-editing.d.ts +24 -0
- package/types/modules/collaborative-editing/index.d.ts +2 -0
- package/types/modules/collaborative-editing/module.d.ts +11 -0
- package/types/modules/collaborative-editing/provider/index.d.ts +3 -0
- package/types/modules/collaborative-editing/provider/providerRegistry.d.ts +25 -0
- package/types/modules/collaborative-editing/provider/webrtc.d.ts +36 -0
- package/types/modules/collaborative-editing/provider/websocket.d.ts +40 -0
- package/types/modules/collaborative-editing/types.d.ts +37 -0
- package/types/modules/counter.d.ts +22 -16
- package/types/modules/custom-clipboard.d.ts +23 -27
- package/types/modules/custom-image/actions/action.d.ts +8 -0
- package/types/modules/custom-image/actions/{CustomResizeAction.d.ts → custom-resize-action.d.ts} +23 -24
- package/types/modules/custom-image/actions/delete-action.d.ts +6 -0
- package/types/modules/custom-image/actions/image-toolbar-buttons.d.ts +16 -0
- package/types/modules/custom-image/actions/index.d.ts +6 -0
- package/types/modules/custom-image/actions/toolbar-action.d.ts +11 -0
- package/types/modules/custom-image/actions/toolbar.d.ts +19 -0
- package/types/modules/custom-image/blot-formatter.d.ts +23 -0
- package/types/modules/custom-image/image.d.ts +28 -28
- package/types/modules/custom-image/index.d.ts +4 -0
- package/types/modules/custom-image/options.d.ts +47 -0
- package/types/modules/custom-image/specs/blot-spec.d.ts +12 -0
- package/types/modules/custom-image/specs/{CustomImageSpec.d.ts → custom-image-spec.d.ts} +17 -21
- package/types/modules/custom-image/specs/image-spec.d.ts +8 -0
- package/types/modules/custom-image/specs/index.d.ts +3 -0
- package/types/modules/custom-uploader.d.ts +40 -31
- package/types/modules/divider.d.ts +8 -7
- package/types/modules/emoji.d.ts +39 -0
- package/types/modules/file/formats/file.d.ts +18 -15
- package/types/modules/file/index.d.ts +3 -11
- package/types/modules/file/modules/file-bar.d.ts +14 -14
- package/types/modules/file/modules/file-module.d.ts +9 -0
- package/types/modules/i18n.d.ts +13 -15
- package/types/modules/index.d.ts +16 -0
- package/types/modules/link/formats/link.d.ts +14 -15
- package/types/modules/link/index.d.ts +2 -6
- package/types/modules/link/modules/tooltip.d.ts +26 -32
- package/types/modules/mathlive/formats.d.ts +20 -21
- package/types/modules/mathlive/index.d.ts +3 -9
- package/types/modules/mathlive/module.d.ts +9 -0
- package/types/modules/mathlive/tooltip.d.ts +14 -15
- package/types/modules/mention/constants.d.ts +3 -3
- package/types/modules/mention/index.d.ts +2 -0
- package/types/modules/mention/{MentionLink.d.ts → mention-link.d.ts} +15 -15
- package/types/modules/mention/{Mention.d.ts → mention.d.ts} +52 -54
- package/types/modules/shortcut-key/index.d.ts +67 -93
- package/types/modules/syntax.d.ts +12 -13
- package/types/modules/table-up/index.d.ts +32 -64
- package/types/modules/toolbar/better-picker.d.ts +13 -14
- package/types/modules/toolbar/better-toolbar.d.ts +7 -0
- package/types/modules/toolbar/index.d.ts +3 -9
- package/types/modules/toolbar/toolbar-tip.d.ts +7 -8
- package/types/themes/snow.d.ts +9 -10
- package/types/tools/format-painter.d.ts +12 -14
- package/types/tools/fullscreen.d.ts +6 -3
- package/types/tools/screenshot.d.ts +17 -18
- package/types/ui/icons.config.d.ts +38 -36
- package/types/ui/icons.d.ts +6 -6
- package/types/utils/debounce.d.ts +6 -6
- package/types/utils/image.d.ts +1 -1
- package/types/utils/is.d.ts +6 -4
- package/types/utils/method.d.ts +6 -6
- package/types/utils/scroll-lock.d.ts +6 -6
- package/es/config/types/additional-toolbar-item.interface.es.js +0 -2
- package/es/config/types/additional-toolbar-item.interface.es.js.map +0 -1
- package/es/config/types/content-change.interface.es.js +0 -2
- package/es/config/types/content-change.interface.es.js.map +0 -1
- package/es/config/types/content-save.interface.es.js +0 -2
- package/es/config/types/content-save.interface.es.js.map +0 -1
- package/es/config/types/counter-option.interface.es.js +0 -2
- package/es/config/types/counter-option.interface.es.js.map +0 -1
- package/es/config/types/editor-toolbar.interface.es.js +0 -2
- package/es/config/types/editor-toolbar.interface.es.js.map +0 -1
- package/es/config/types/file-operation.interface.es.js +0 -2
- package/es/config/types/file-operation.interface.es.js.map +0 -1
- package/es/config/types/focus-change.interface.es.js +0 -2
- package/es/config/types/focus-change.interface.es.js.map +0 -1
- package/es/config/types/fullscreen-module.interface.es.js +0 -2
- package/es/config/types/fullscreen-module.interface.es.js.map +0 -1
- package/es/config/types/help-panel-item.interface.es.js +0 -2
- package/es/config/types/help-panel-item.interface.es.js.map +0 -1
- package/es/config/types/help-panel-option.interface.es.js +0 -2
- package/es/config/types/help-panel-option.interface.es.js.map +0 -1
- package/es/config/types/image-module.interface.es.js +0 -2
- package/es/config/types/image-module.interface.es.js.map +0 -1
- package/es/config/types/image-upload.interface.es.js +0 -2
- package/es/config/types/image-upload.interface.es.js.map +0 -1
- package/es/config/types/load-on-demand-module.interface.es.js +0 -2
- package/es/config/types/load-on-demand-module.interface.es.js.map +0 -1
- package/es/config/types/mention-module.interface.es.js +0 -2
- package/es/config/types/mention-module.interface.es.js.map +0 -1
- package/es/config/types/paste-change.interface.es.js +0 -2
- package/es/config/types/paste-change.interface.es.js.map +0 -1
- package/es/config/types/quick-menu-module.interface.es.js +0 -2
- package/es/config/types/quick-menu-module.interface.es.js.map +0 -1
- package/es/config/types/range.interface.es.js +0 -2
- package/es/config/types/range.interface.es.js.map +0 -1
- package/es/config/types/registry-options.interface.es.js +0 -2
- package/es/config/types/registry-options.interface.es.js.map +0 -1
- package/es/config/types/selection-change.interface.es.js +0 -2
- package/es/config/types/selection-change.interface.es.js.map +0 -1
- package/es/config/types/toolbar-item.interface.es.js +0 -2
- package/es/config/types/toolbar-item.interface.es.js.map +0 -1
- package/es/config/types/validate-error.interface.es.js +0 -2
- package/es/config/types/validate-error.interface.es.js.map +0 -1
- package/es/modules/custom-image/BlotFormatter.es.js.map +0 -1
- package/es/modules/custom-image/Options.es.js +0 -95
- package/es/modules/custom-image/Options.es.js.map +0 -1
- package/es/modules/custom-image/actions/Action.es.js +0 -15
- package/es/modules/custom-image/actions/Action.es.js.map +0 -1
- package/es/modules/custom-image/actions/CustomResizeAction.es.js.map +0 -1
- package/es/modules/custom-image/actions/DeleteAction.es.js.map +0 -1
- package/es/modules/custom-image/image-bar.es.js +0 -127
- package/es/modules/custom-image/image-bar.es.js.map +0 -1
- package/es/modules/custom-image/specs/BlotSpec.es.js +0 -27
- package/es/modules/custom-image/specs/BlotSpec.es.js.map +0 -1
- package/es/modules/custom-image/specs/CustomImageSpec.es.js.map +0 -1
- package/es/modules/custom-image/specs/ImageSpec.es.js +0 -29
- package/es/modules/custom-image/specs/ImageSpec.es.js.map +0 -1
- package/es/modules/emoji/emoji-list/index.es.js +0 -5
- package/es/modules/emoji/emoji-list/people.es.js +0 -114
- package/es/modules/emoji/emoji-list/people.es.js.map +0 -1
- package/es/modules/emoji/emoji-list.es.js +0 -9
- package/es/modules/emoji/emoji-list.es.js.map +0 -1
- package/es/modules/emoji/emoji-map.es.js +0 -9
- package/es/modules/emoji/emoji-map.es.js.map +0 -1
- package/es/modules/emoji/emoji-sprite.es.js +0 -5
- package/es/modules/emoji/emoji-sprite.es.js.map +0 -1
- package/es/modules/emoji/formats/emoji-blot.es.js +0 -41
- package/es/modules/emoji/formats/emoji-blot.es.js.map +0 -1
- package/es/modules/emoji/index.es.js +0 -8
- package/es/modules/emoji/index.es.js.map +0 -1
- package/es/modules/emoji/modules/emoji.es.js +0 -248
- package/es/modules/emoji/modules/emoji.es.js.map +0 -1
- package/es/modules/emoji/modules/toolbar-emoji.es.js +0 -153
- package/es/modules/emoji/modules/toolbar-emoji.es.js.map +0 -1
- package/es/modules/emoji/utils.es.js +0 -19
- package/es/modules/emoji/utils.es.js.map +0 -1
- package/es/modules/mention/Mention.es.js.map +0 -1
- package/es/modules/mention/MentionLink.es.js.map +0 -1
- package/lib/config/types/additional-toolbar-item.interface.cjs.js +0 -2
- package/lib/config/types/additional-toolbar-item.interface.cjs.js.map +0 -1
- package/lib/config/types/content-change.interface.cjs.js +0 -2
- package/lib/config/types/content-change.interface.cjs.js.map +0 -1
- package/lib/config/types/content-save.interface.cjs.js +0 -2
- package/lib/config/types/content-save.interface.cjs.js.map +0 -1
- package/lib/config/types/counter-option.interface.cjs.js +0 -2
- package/lib/config/types/counter-option.interface.cjs.js.map +0 -1
- package/lib/config/types/editor-toolbar.interface.cjs.js +0 -2
- package/lib/config/types/editor-toolbar.interface.cjs.js.map +0 -1
- package/lib/config/types/file-operation.interface.cjs.js +0 -2
- package/lib/config/types/file-operation.interface.cjs.js.map +0 -1
- package/lib/config/types/focus-change.interface.cjs.js +0 -2
- package/lib/config/types/focus-change.interface.cjs.js.map +0 -1
- package/lib/config/types/fullscreen-module.interface.cjs.js +0 -2
- package/lib/config/types/fullscreen-module.interface.cjs.js.map +0 -1
- package/lib/config/types/help-panel-item.interface.cjs.js +0 -2
- package/lib/config/types/help-panel-item.interface.cjs.js.map +0 -1
- package/lib/config/types/help-panel-option.interface.cjs.js +0 -2
- package/lib/config/types/help-panel-option.interface.cjs.js.map +0 -1
- package/lib/config/types/image-module.interface.cjs.js +0 -2
- package/lib/config/types/image-module.interface.cjs.js.map +0 -1
- package/lib/config/types/image-upload.interface.cjs.js +0 -2
- package/lib/config/types/image-upload.interface.cjs.js.map +0 -1
- package/lib/config/types/load-on-demand-module.interface.cjs.js +0 -2
- package/lib/config/types/load-on-demand-module.interface.cjs.js.map +0 -1
- package/lib/config/types/mention-module.interface.cjs.js +0 -2
- package/lib/config/types/mention-module.interface.cjs.js.map +0 -1
- package/lib/config/types/paste-change.interface.cjs.js +0 -2
- package/lib/config/types/paste-change.interface.cjs.js.map +0 -1
- package/lib/config/types/quick-menu-module.interface.cjs.js +0 -2
- package/lib/config/types/quick-menu-module.interface.cjs.js.map +0 -1
- package/lib/config/types/range.interface.cjs.js +0 -2
- package/lib/config/types/range.interface.cjs.js.map +0 -1
- package/lib/config/types/registry-options.interface.cjs.js +0 -2
- package/lib/config/types/registry-options.interface.cjs.js.map +0 -1
- package/lib/config/types/selection-change.interface.cjs.js +0 -2
- package/lib/config/types/selection-change.interface.cjs.js.map +0 -1
- package/lib/config/types/toolbar-item.interface.cjs.js +0 -2
- package/lib/config/types/toolbar-item.interface.cjs.js.map +0 -1
- package/lib/config/types/validate-error.interface.cjs.js +0 -2
- package/lib/config/types/validate-error.interface.cjs.js.map +0 -1
- package/lib/modules/custom-image/BlotFormatter.cjs.js.map +0 -1
- package/lib/modules/custom-image/Options.cjs.js +0 -95
- package/lib/modules/custom-image/Options.cjs.js.map +0 -1
- package/lib/modules/custom-image/actions/Action.cjs.js +0 -15
- package/lib/modules/custom-image/actions/Action.cjs.js.map +0 -1
- package/lib/modules/custom-image/actions/CustomResizeAction.cjs.js.map +0 -1
- package/lib/modules/custom-image/actions/DeleteAction.cjs.js.map +0 -1
- package/lib/modules/custom-image/image-bar.cjs.js +0 -127
- package/lib/modules/custom-image/image-bar.cjs.js.map +0 -1
- package/lib/modules/custom-image/specs/BlotSpec.cjs.js +0 -27
- package/lib/modules/custom-image/specs/BlotSpec.cjs.js.map +0 -1
- package/lib/modules/custom-image/specs/CustomImageSpec.cjs.js.map +0 -1
- package/lib/modules/custom-image/specs/ImageSpec.cjs.js +0 -29
- package/lib/modules/custom-image/specs/ImageSpec.cjs.js.map +0 -1
- package/lib/modules/emoji/emoji-list/index.cjs.js +0 -5
- package/lib/modules/emoji/emoji-list/people.cjs.js +0 -114
- package/lib/modules/emoji/emoji-list/people.cjs.js.map +0 -1
- package/lib/modules/emoji/emoji-list.cjs.js +0 -9
- package/lib/modules/emoji/emoji-list.cjs.js.map +0 -1
- package/lib/modules/emoji/emoji-map.cjs.js +0 -9
- package/lib/modules/emoji/emoji-map.cjs.js.map +0 -1
- package/lib/modules/emoji/emoji-sprite.cjs.js +0 -5
- package/lib/modules/emoji/emoji-sprite.cjs.js.map +0 -1
- package/lib/modules/emoji/formats/emoji-blot.cjs.js +0 -41
- package/lib/modules/emoji/formats/emoji-blot.cjs.js.map +0 -1
- package/lib/modules/emoji/index.cjs.js +0 -8
- package/lib/modules/emoji/index.cjs.js.map +0 -1
- package/lib/modules/emoji/modules/emoji.cjs.js +0 -248
- package/lib/modules/emoji/modules/emoji.cjs.js.map +0 -1
- package/lib/modules/emoji/modules/toolbar-emoji.cjs.js +0 -153
- package/lib/modules/emoji/modules/toolbar-emoji.cjs.js.map +0 -1
- package/lib/modules/emoji/utils.cjs.js +0 -19
- package/lib/modules/emoji/utils.cjs.js.map +0 -1
- package/lib/modules/mention/Mention.cjs.js.map +0 -1
- package/lib/modules/mention/MentionLink.cjs.js.map +0 -1
- package/types/config/types/additional-toolbar-item.interface.d.ts +0 -8
- package/types/config/types/content-change.interface.d.ts +0 -13
- package/types/config/types/content-save.interface.d.ts +0 -6
- package/types/config/types/counter-option.interface.d.ts +0 -9
- package/types/config/types/editor-toolbar.interface.d.ts +0 -6
- package/types/config/types/file-operation.interface.d.ts +0 -12
- package/types/config/types/focus-change.interface.d.ts +0 -4
- package/types/config/types/fullscreen-module.interface.d.ts +0 -4
- package/types/config/types/help-panel-item.interface.d.ts +0 -5
- package/types/config/types/help-panel-option.interface.d.ts +0 -7
- package/types/config/types/image-module.interface.d.ts +0 -3
- package/types/config/types/image-upload.interface.d.ts +0 -7
- package/types/config/types/load-on-demand-module.interface.d.ts +0 -5
- package/types/config/types/mention-module.interface.d.ts +0 -8
- package/types/config/types/paste-change.interface.d.ts +0 -6
- package/types/config/types/quick-menu-module.interface.d.ts +0 -3
- package/types/config/types/range.interface.d.ts +0 -4
- package/types/config/types/registry-options.interface.d.ts +0 -5
- package/types/config/types/selection-change.interface.d.ts +0 -8
- package/types/config/types/toolbar-item.interface.d.ts +0 -13
- package/types/config/types/validate-error.interface.d.ts +0 -13
- package/types/modules/custom-image/BlotFormatter.d.ts +0 -29
- package/types/modules/custom-image/Options.d.ts +0 -36
- package/types/modules/custom-image/actions/Action.d.ts +0 -7
- package/types/modules/custom-image/actions/DeleteAction.d.ts +0 -7
- package/types/modules/custom-image/image-bar.d.ts +0 -15
- package/types/modules/custom-image/specs/BlotSpec.d.ts +0 -13
- package/types/modules/custom-image/specs/ImageSpec.d.ts +0 -10
- package/types/modules/emoji/emoji-list/index.d.ts +0 -1
- package/types/modules/emoji/emoji-list/people.d.ts +0 -1
- package/types/modules/emoji/emoji-list.d.ts +0 -2
- package/types/modules/emoji/emoji-map.d.ts +0 -2
- package/types/modules/emoji/emoji-sprite.d.ts +0 -1
- package/types/modules/emoji/formats/emoji-blot.d.ts +0 -13
- package/types/modules/emoji/index.d.ts +0 -10
- package/types/modules/emoji/modules/emoji.d.ts +0 -38
- package/types/modules/emoji/modules/toolbar-emoji.d.ts +0 -8
- package/types/modules/emoji/utils.d.ts +0 -1
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
4
|
+
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
5
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
6
|
+
const is = require("../../../utils/is.cjs.js");
|
|
7
|
+
const options = require("../options.cjs.js");
|
|
8
|
+
const ALIGN_ATTR = "data-align";
|
|
9
|
+
function setAlignStyle(el, display, float, margin) {
|
|
10
|
+
el.style.setProperty("display", display);
|
|
11
|
+
el.style.setProperty("float", float);
|
|
12
|
+
el.style.setProperty("margin", margin);
|
|
13
|
+
}
|
|
14
|
+
const alignmentHandler = {
|
|
15
|
+
left: (el, toolbarButtons) => {
|
|
16
|
+
setAlignStyle(el, "inline", "left", "0 1em 1em 0");
|
|
17
|
+
},
|
|
18
|
+
center: (el, toolbarButtons) => {
|
|
19
|
+
setAlignStyle(el, "block", null, "auto");
|
|
20
|
+
},
|
|
21
|
+
right: (el, toolbarButtons) => {
|
|
22
|
+
setAlignStyle(el, "inline", "right", "0 0 1em 1em");
|
|
23
|
+
},
|
|
24
|
+
download: (el, toolbarButtons) => {
|
|
25
|
+
const imageName = el.dataset.title || "image";
|
|
26
|
+
const url = el.src || "";
|
|
27
|
+
if (!url) return;
|
|
28
|
+
const a = document.createElement("a");
|
|
29
|
+
a.href = url;
|
|
30
|
+
a.target = "_blank";
|
|
31
|
+
a.download = imageName;
|
|
32
|
+
a.style.display = "none";
|
|
33
|
+
document.body.appendChild(a);
|
|
34
|
+
a.click();
|
|
35
|
+
a.parentNode.removeChild(a);
|
|
36
|
+
},
|
|
37
|
+
copy: async (el, toolbarButtons) => {
|
|
38
|
+
if (!el.src) return;
|
|
39
|
+
const imageUrl = el.src;
|
|
40
|
+
try {
|
|
41
|
+
const response = await fetch(imageUrl);
|
|
42
|
+
if (!response.ok) {
|
|
43
|
+
throw new Error("Copy image failed");
|
|
44
|
+
}
|
|
45
|
+
const blob = await response.blob();
|
|
46
|
+
await navigator.clipboard.write([new ClipboardItem({ [blob.type]: blob })]);
|
|
47
|
+
} catch (e) {
|
|
48
|
+
throw new Error("Copy image failed");
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
const defaultButtons = {
|
|
53
|
+
[options.LEFT_ALIGN]: {
|
|
54
|
+
name: options.LEFT_ALIGN,
|
|
55
|
+
icon: `
|
|
56
|
+
<svg viewbox="0 0 18 18">
|
|
57
|
+
<line class="ql-stroke" x1="3" x2="15" y1="9" y2="9"></line>
|
|
58
|
+
<line class="ql-stroke" x1="3" x2="13" y1="14" y2="14"></line>
|
|
59
|
+
<line class="ql-stroke" x1="3" x2="9" y1="4" y2="4"></line>
|
|
60
|
+
</svg>
|
|
61
|
+
`,
|
|
62
|
+
isActive: (el) => el.getAttribute(ALIGN_ATTR) === "left",
|
|
63
|
+
apply: (el, toolbarButtons) => {
|
|
64
|
+
el.setAttribute(ALIGN_ATTR, "left");
|
|
65
|
+
alignmentHandler.left(el, toolbarButtons);
|
|
66
|
+
}
|
|
67
|
+
},
|
|
68
|
+
[options.CENTER_ALIGN]: {
|
|
69
|
+
name: options.CENTER_ALIGN,
|
|
70
|
+
icon: `
|
|
71
|
+
<svg viewbox="0 0 18 18">
|
|
72
|
+
<line class="ql-stroke" x1="15" x2="3" y1="9" y2="9"></line>
|
|
73
|
+
<line class="ql-stroke" x1="14" x2="4" y1="14" y2="14"></line>
|
|
74
|
+
<line class="ql-stroke" x1="12" x2="6" y1="4" y2="4"></line>
|
|
75
|
+
</svg>
|
|
76
|
+
`,
|
|
77
|
+
isActive: (el) => el.getAttribute(ALIGN_ATTR) === "center",
|
|
78
|
+
apply: (el, toolbarButtons) => {
|
|
79
|
+
el.setAttribute(ALIGN_ATTR, "center");
|
|
80
|
+
alignmentHandler.center(el, toolbarButtons);
|
|
81
|
+
}
|
|
82
|
+
},
|
|
83
|
+
[options.RIGHT_ALIGN]: {
|
|
84
|
+
name: options.RIGHT_ALIGN,
|
|
85
|
+
icon: `
|
|
86
|
+
<svg viewbox="0 0 18 18">
|
|
87
|
+
<line class="ql-stroke" x1="15" x2="3" y1="9" y2="9"></line>
|
|
88
|
+
<line class="ql-stroke" x1="15" x2="5" y1="14" y2="14"></line>
|
|
89
|
+
<line class="ql-stroke" x1="15" x2="9" y1="4" y2="4"></line>
|
|
90
|
+
</svg>
|
|
91
|
+
`,
|
|
92
|
+
isActive: (el) => el.getAttribute(ALIGN_ATTR) === "right",
|
|
93
|
+
apply: (el, toolbarButtons) => {
|
|
94
|
+
el.setAttribute(ALIGN_ATTR, "right");
|
|
95
|
+
alignmentHandler.right(el, toolbarButtons);
|
|
96
|
+
}
|
|
97
|
+
},
|
|
98
|
+
[options.DOWNLOAD]: {
|
|
99
|
+
name: options.DOWNLOAD,
|
|
100
|
+
icon: `<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32"><path class="ql-fill" d="M26 24v4H6v-4H4v4a2 2 0 0 0 2 2h20a2 2 0 0 0 2-2v-4zm0-10l-1.41-1.41L17 20.17V2h-2v18.17l-7.59-7.58L6 14l10 10z"/></svg>`,
|
|
101
|
+
apply: (el, toolbarButtons) => {
|
|
102
|
+
alignmentHandler.download(el, toolbarButtons);
|
|
103
|
+
}
|
|
104
|
+
},
|
|
105
|
+
[options.COPY]: {
|
|
106
|
+
name: options.COPY,
|
|
107
|
+
icon: `<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32"><path class="ql-fill" d="M28 10v18H10V10zm0-2H10a2 2 0 0 0-2 2v18a2 2 0 0 0 2 2h18a2 2 0 0 0 2-2V10a2 2 0 0 0-2-2"/><path class="ql-fill" d="M4 18H2V4a2 2 0 0 1 2-2h14v2H4Z"/></svg>`,
|
|
108
|
+
apply: (el, toolbarButtons) => {
|
|
109
|
+
alignmentHandler.copy(el, toolbarButtons);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
};
|
|
113
|
+
class ImageToolbarButtons {
|
|
114
|
+
constructor(options2) {
|
|
115
|
+
__publicField(this, "buttons");
|
|
116
|
+
this.buttons = Object.entries(options2.buttons).reduce((acc, [name, button]) => {
|
|
117
|
+
if (is.isBoolean(button) && button && defaultButtons[name]) {
|
|
118
|
+
acc[name] = defaultButtons[name];
|
|
119
|
+
} else if (is.isObject(button)) {
|
|
120
|
+
acc[button.name] = button;
|
|
121
|
+
}
|
|
122
|
+
return acc;
|
|
123
|
+
}, {});
|
|
124
|
+
}
|
|
125
|
+
getItems() {
|
|
126
|
+
return Object.keys(this.buttons).map((k) => this.buttons[k]);
|
|
127
|
+
}
|
|
128
|
+
clear(el) {
|
|
129
|
+
el.removeAttribute(ALIGN_ATTR);
|
|
130
|
+
setAlignStyle(el, null, null, null);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
exports.ALIGN_ATTR = ALIGN_ATTR;
|
|
134
|
+
exports.ImageToolbarButtons = ImageToolbarButtons;
|
|
135
|
+
exports.alignmentHandler = alignmentHandler;
|
|
136
|
+
exports.setAlignStyle = setAlignStyle;
|
|
137
|
+
//# sourceMappingURL=image-toolbar-buttons.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"image-toolbar-buttons.cjs.js","sources":["../../../../../src/modules/custom-image/actions/image-toolbar-buttons.ts"],"sourcesContent":["import type { ToolbarButtonOptions, ToolButtonOption } from '../options'\r\nimport { isBoolean, isObject } from '../../../utils/is'\r\nimport { CENTER_ALIGN, COPY, DOWNLOAD, LEFT_ALIGN, RIGHT_ALIGN } from '../options'\r\n\r\nexport const ALIGN_ATTR = 'data-align'\r\n\r\nexport function setAlignStyle(el: HTMLElement, display: string | null, float: string | null, margin: string | null) {\r\n el.style.setProperty('display', display)\r\n el.style.setProperty('float', float)\r\n el.style.setProperty('margin', margin)\r\n}\r\nexport const alignmentHandler = {\r\n left: (el: HTMLElement, toolbarButtons: ImageToolbarButtons) => {\r\n setAlignStyle(el, 'inline', 'left', '0 1em 1em 0')\r\n },\r\n center: (el: HTMLElement, toolbarButtons: ImageToolbarButtons) => {\r\n setAlignStyle(el, 'block', null, 'auto')\r\n },\r\n right: (el: HTMLElement, toolbarButtons: ImageToolbarButtons) => {\r\n setAlignStyle(el, 'inline', 'right', '0 0 1em 1em')\r\n },\r\n download: (el: HTMLImageElement, toolbarButtons: ImageToolbarButtons) => {\r\n const imageName = el.dataset.title || 'image'\r\n const url = el.src || ''\r\n if (!url) return\r\n const a = document.createElement('a')\r\n a.href = url\r\n a.target = '_blank'\r\n a.download = imageName\r\n a.style.display = 'none'\r\n document.body.appendChild(a)\r\n a.click()\r\n a.parentNode.removeChild(a)\r\n },\r\n copy: async (el: HTMLImageElement, toolbarButtons: ImageToolbarButtons) => {\r\n if (!el.src) return\r\n const imageUrl = el.src\r\n try {\r\n const response = await fetch(imageUrl)\r\n if (!response.ok) {\r\n throw new Error('Copy image failed')\r\n }\r\n const blob = await response.blob()\r\n await navigator.clipboard.write([new ClipboardItem({ [blob.type]: blob })])\r\n }\r\n catch (e) {\r\n throw new Error('Copy image failed')\r\n }\r\n },\r\n}\r\nconst defaultButtons: Record<string, ToolButtonOption> = {\r\n [LEFT_ALIGN]: {\r\n name: LEFT_ALIGN,\r\n icon: `\r\n <svg viewbox=\"0 0 18 18\">\r\n <line class=\"ql-stroke\" x1=\"3\" x2=\"15\" y1=\"9\" y2=\"9\"></line>\r\n <line class=\"ql-stroke\" x1=\"3\" x2=\"13\" y1=\"14\" y2=\"14\"></line>\r\n <line class=\"ql-stroke\" x1=\"3\" x2=\"9\" y1=\"4\" y2=\"4\"></line>\r\n </svg>\r\n `,\r\n isActive: el => el.getAttribute(ALIGN_ATTR) === 'left',\r\n apply: (el: HTMLImageElement, toolbarButtons: ImageToolbarButtons) => {\r\n el.setAttribute(ALIGN_ATTR, 'left')\r\n alignmentHandler.left(el, toolbarButtons)\r\n },\r\n },\r\n [CENTER_ALIGN]: {\r\n name: CENTER_ALIGN,\r\n icon: `\r\n <svg viewbox=\"0 0 18 18\">\r\n <line class=\"ql-stroke\" x1=\"15\" x2=\"3\" y1=\"9\" y2=\"9\"></line>\r\n <line class=\"ql-stroke\" x1=\"14\" x2=\"4\" y1=\"14\" y2=\"14\"></line>\r\n <line class=\"ql-stroke\" x1=\"12\" x2=\"6\" y1=\"4\" y2=\"4\"></line>\r\n </svg>\r\n `,\r\n isActive: el => el.getAttribute(ALIGN_ATTR) === 'center',\r\n apply: (el: HTMLImageElement, toolbarButtons: ImageToolbarButtons) => {\r\n el.setAttribute(ALIGN_ATTR, 'center')\r\n alignmentHandler.center(el, toolbarButtons)\r\n },\r\n },\r\n [RIGHT_ALIGN]: {\r\n name: RIGHT_ALIGN,\r\n icon: `\r\n <svg viewbox=\"0 0 18 18\">\r\n <line class=\"ql-stroke\" x1=\"15\" x2=\"3\" y1=\"9\" y2=\"9\"></line>\r\n <line class=\"ql-stroke\" x1=\"15\" x2=\"5\" y1=\"14\" y2=\"14\"></line>\r\n <line class=\"ql-stroke\" x1=\"15\" x2=\"9\" y1=\"4\" y2=\"4\"></line>\r\n </svg>\r\n `,\r\n isActive: el => el.getAttribute(ALIGN_ATTR) === 'right',\r\n apply: (el: HTMLImageElement, toolbarButtons: ImageToolbarButtons) => {\r\n el.setAttribute(ALIGN_ATTR, 'right')\r\n alignmentHandler.right(el, toolbarButtons)\r\n },\r\n },\r\n [DOWNLOAD]: {\r\n name: DOWNLOAD,\r\n icon: `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"32\" height=\"32\" viewBox=\"0 0 32 32\"><path class=\"ql-fill\" d=\"M26 24v4H6v-4H4v4a2 2 0 0 0 2 2h20a2 2 0 0 0 2-2v-4zm0-10l-1.41-1.41L17 20.17V2h-2v18.17l-7.59-7.58L6 14l10 10z\"/></svg>`,\r\n apply: (el: HTMLImageElement, toolbarButtons: ImageToolbarButtons) => {\r\n alignmentHandler.download(el, toolbarButtons)\r\n },\r\n },\r\n [COPY]: {\r\n name: COPY,\r\n icon: `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"32\" height=\"32\" viewBox=\"0 0 32 32\"><path class=\"ql-fill\" d=\"M28 10v18H10V10zm0-2H10a2 2 0 0 0-2 2v18a2 2 0 0 0 2 2h18a2 2 0 0 0 2-2V10a2 2 0 0 0-2-2\"/><path class=\"ql-fill\" d=\"M4 18H2V4a2 2 0 0 1 2-2h14v2H4Z\"/></svg>`,\r\n apply: (el: HTMLImageElement, toolbarButtons: ImageToolbarButtons) => {\r\n alignmentHandler.copy(el, toolbarButtons)\r\n },\r\n },\r\n}\r\nexport class ImageToolbarButtons {\r\n buttons: Record<string, ToolButtonOption>\r\n\r\n constructor(options: ToolbarButtonOptions) {\r\n this.buttons = Object.entries(options.buttons).reduce((acc, [name, button]) => {\r\n if (isBoolean(button) && button && defaultButtons[name]) {\r\n acc[name] = defaultButtons[name]\r\n }\r\n else if (isObject(button)) {\r\n acc[button.name] = button\r\n }\r\n return acc\r\n }, {})\r\n }\r\n\r\n getItems(): ToolButtonOption[] {\r\n return Object.keys(this.buttons).map(k => this.buttons[k])\r\n }\r\n\r\n clear(el: HTMLElement): void {\r\n el.removeAttribute(ALIGN_ATTR)\r\n setAlignStyle(el, null, null, null)\r\n }\r\n}\r\n"],"names":["LEFT_ALIGN","CENTER_ALIGN","RIGHT_ALIGN","DOWNLOAD","COPY","options","isBoolean","isObject"],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const action = require("./action.cjs.js");
|
|
4
|
+
const customResizeAction = require("./custom-resize-action.cjs.js");
|
|
5
|
+
const deleteAction = require("./delete-action.cjs.js");
|
|
6
|
+
const imageToolbarButtons = require("./image-toolbar-buttons.cjs.js");
|
|
7
|
+
const toolbar = require("./toolbar.cjs.js");
|
|
8
|
+
const toolbarAction = require("./toolbar-action.cjs.js");
|
|
9
|
+
exports.Action = action.Action;
|
|
10
|
+
exports.CustomResizeAction = customResizeAction.CustomResizeAction;
|
|
11
|
+
exports.DeleteAction = deleteAction.DeleteAction;
|
|
12
|
+
exports.ALIGN_ATTR = imageToolbarButtons.ALIGN_ATTR;
|
|
13
|
+
exports.ImageToolbarButtons = imageToolbarButtons.ImageToolbarButtons;
|
|
14
|
+
exports.alignmentHandler = imageToolbarButtons.alignmentHandler;
|
|
15
|
+
exports.setAlignStyle = imageToolbarButtons.setAlignStyle;
|
|
16
|
+
exports.ImageToolbar = toolbar.ImageToolbar;
|
|
17
|
+
exports.ImageToolbarAction = toolbarAction.ImageToolbarAction;
|
|
18
|
+
//# sourceMappingURL=index.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
4
|
+
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
5
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
6
|
+
const action = require("./action.cjs.js");
|
|
7
|
+
const imageToolbarButtons = require("./image-toolbar-buttons.cjs.js");
|
|
8
|
+
const toolbar = require("./toolbar.cjs.js");
|
|
9
|
+
class ImageToolbarAction extends action.Action {
|
|
10
|
+
constructor(formatter) {
|
|
11
|
+
super(formatter);
|
|
12
|
+
__publicField(this, "toolbar");
|
|
13
|
+
__publicField(this, "buttons");
|
|
14
|
+
this.buttons = new imageToolbarButtons.ImageToolbarButtons({
|
|
15
|
+
buttons: formatter.options.toolbar.buttons
|
|
16
|
+
});
|
|
17
|
+
this.toolbar = new toolbar.ImageToolbar();
|
|
18
|
+
}
|
|
19
|
+
onCreate() {
|
|
20
|
+
const toolbar2 = this.toolbar.create(this.formatter, this.buttons);
|
|
21
|
+
this.formatter.overlay.appendChild(toolbar2);
|
|
22
|
+
}
|
|
23
|
+
onDestroy() {
|
|
24
|
+
const toolbar2 = this.toolbar.getElement();
|
|
25
|
+
if (!toolbar2) {
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
this.formatter.overlay.removeChild(toolbar2);
|
|
29
|
+
this.toolbar.destroy();
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
exports.ImageToolbarAction = ImageToolbarAction;
|
|
33
|
+
//# sourceMappingURL=toolbar-action.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toolbar-action.cjs.js","sources":["../../../../../src/modules/custom-image/actions/toolbar-action.ts"],"sourcesContent":["import type { BlotFormatter } from '../blot-formatter'\r\nimport { Action } from './action'\r\nimport { ImageToolbarButtons } from './image-toolbar-buttons'\r\nimport { ImageToolbar } from './toolbar'\r\n\r\nexport class ImageToolbarAction extends Action {\r\n toolbar: ImageToolbar\r\n buttons: ImageToolbarButtons\r\n\r\n constructor(formatter: BlotFormatter) {\r\n super(formatter)\r\n this.buttons = new ImageToolbarButtons({\r\n buttons: formatter.options.toolbar.buttons,\r\n })\r\n this.toolbar = new ImageToolbar()\r\n }\r\n\r\n onCreate() {\r\n const toolbar = this.toolbar.create(this.formatter, this.buttons)\r\n this.formatter.overlay.appendChild(toolbar)\r\n }\r\n\r\n onDestroy() {\r\n const toolbar = this.toolbar.getElement()\r\n if (!toolbar) {\r\n return\r\n }\r\n\r\n this.formatter.overlay.removeChild(toolbar)\r\n this.toolbar.destroy()\r\n }\r\n}\r\n"],"names":["Action","ImageToolbarButtons","ImageToolbar","toolbar"],"mappings":";;;;;;;;AAKO,MAAM,2BAA2BA,OAAAA,OAAO;AAAA,EAI7C,YAAY,WAA0B;AACpC,UAAM,SAAS;AAJjB;AACA;AAIO,SAAA,UAAU,IAAIC,wCAAoB;AAAA,MACrC,SAAS,UAAU,QAAQ,QAAQ;AAAA,IAAA,CACpC;AACI,SAAA,UAAU,IAAIC,qBAAa;AAAA,EAAA;AAAA,EAGlC,WAAW;AACT,UAAMC,WAAU,KAAK,QAAQ,OAAO,KAAK,WAAW,KAAK,OAAO;AAC3D,SAAA,UAAU,QAAQ,YAAYA,QAAO;AAAA,EAAA;AAAA,EAG5C,YAAY;AACJ,UAAAA,WAAU,KAAK,QAAQ,WAAW;AACxC,QAAI,CAACA,UAAS;AACZ;AAAA,IAAA;AAGG,SAAA,UAAU,QAAQ,YAAYA,QAAO;AAC1C,SAAK,QAAQ,QAAQ;AAAA,EAAA;AAEzB;;"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
4
|
+
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
5
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
6
|
+
class ImageToolbar {
|
|
7
|
+
constructor() {
|
|
8
|
+
__publicField(this, "toolbar");
|
|
9
|
+
__publicField(this, "buttons");
|
|
10
|
+
this.toolbar = null;
|
|
11
|
+
this.buttons = [];
|
|
12
|
+
}
|
|
13
|
+
create(formatter, toolButton) {
|
|
14
|
+
const toolbar = document.createElement("div");
|
|
15
|
+
toolbar.classList.add(formatter.options.toolbar.mainClassName);
|
|
16
|
+
this.addToolbarStyle(formatter, toolbar);
|
|
17
|
+
this.addButtons(formatter, toolbar, toolButton);
|
|
18
|
+
this.toolbar = toolbar;
|
|
19
|
+
return this.toolbar;
|
|
20
|
+
}
|
|
21
|
+
destroy() {
|
|
22
|
+
this.toolbar = null;
|
|
23
|
+
this.buttons = [];
|
|
24
|
+
}
|
|
25
|
+
getElement() {
|
|
26
|
+
return this.toolbar;
|
|
27
|
+
}
|
|
28
|
+
addToolbarStyle(formatter, toolbar) {
|
|
29
|
+
if (formatter.options.toolbar.mainStyle) {
|
|
30
|
+
Object.assign(toolbar.style, formatter.options.toolbar.mainStyle);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
addButtonStyle(button, index, formatter) {
|
|
34
|
+
if (formatter.options.toolbar.buttonStyle) {
|
|
35
|
+
Object.assign(button.style, formatter.options.toolbar.buttonStyle);
|
|
36
|
+
if (index > 0) {
|
|
37
|
+
button.style.borderLeftWidth = "0";
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
if (formatter.options.toolbar.svgStyle) {
|
|
41
|
+
Object.assign(button.children[0].style, formatter.options.toolbar.svgStyle);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
addButtons(formatter, toolbar, toolButton) {
|
|
45
|
+
toolButton.getItems().forEach((tool, i) => {
|
|
46
|
+
const button = document.createElement("span");
|
|
47
|
+
button.classList.add(formatter.options.toolbar.buttonClassName);
|
|
48
|
+
button.innerHTML = tool.icon;
|
|
49
|
+
button.addEventListener("click", () => {
|
|
50
|
+
this.onButtonClick(button, formatter, tool, toolButton);
|
|
51
|
+
});
|
|
52
|
+
this.preselectButton(button, tool, formatter, toolButton);
|
|
53
|
+
this.addButtonStyle(button, i, formatter);
|
|
54
|
+
this.buttons.push(button);
|
|
55
|
+
toolbar.appendChild(button);
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
preselectButton(button, toolButtonOption, formatter, toolButton) {
|
|
59
|
+
if (!formatter.currentSpec) {
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
const target = formatter.currentSpec.getTargetElement();
|
|
63
|
+
if (!target) {
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
if (toolButtonOption.isActive && toolButtonOption.isActive(target)) {
|
|
67
|
+
this.selectButton(formatter, button);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
onButtonClick(button, formatter, toolButtonOption, toolButton) {
|
|
71
|
+
if (!formatter.currentSpec) {
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
const target = formatter.currentSpec.getTargetElement();
|
|
75
|
+
if (!target || target.tagName.toLowerCase() !== "img") {
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
this.clickButton(button, target, formatter, toolButtonOption, toolButton);
|
|
79
|
+
}
|
|
80
|
+
clickButton(button, target, formatter, toolButtonOption, toolButton) {
|
|
81
|
+
if (!toolButtonOption.isActive) {
|
|
82
|
+
toolButtonOption.apply.call(this, target, toolButton);
|
|
83
|
+
} else {
|
|
84
|
+
this.buttons.forEach((b) => {
|
|
85
|
+
this.deselectButton(formatter, b);
|
|
86
|
+
});
|
|
87
|
+
if (toolButtonOption.isActive(target)) {
|
|
88
|
+
toolButton.clear(target);
|
|
89
|
+
} else {
|
|
90
|
+
this.selectButton(formatter, button);
|
|
91
|
+
toolButtonOption.apply.call(this, target, toolButton);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
formatter.update();
|
|
95
|
+
}
|
|
96
|
+
selectButton(formatter, button) {
|
|
97
|
+
button.classList.add("is-selected");
|
|
98
|
+
if (formatter.options.toolbar.addButtonSelectStyle) {
|
|
99
|
+
button.style.setProperty("filter", "invert(20%)");
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
deselectButton(formatter, button) {
|
|
103
|
+
button.classList.remove("is-selected");
|
|
104
|
+
if (formatter.options.toolbar.addButtonSelectStyle) {
|
|
105
|
+
button.style.removeProperty("filter");
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
exports.ImageToolbar = ImageToolbar;
|
|
110
|
+
//# sourceMappingURL=toolbar.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toolbar.cjs.js","sources":["../../../../../src/modules/custom-image/actions/toolbar.ts"],"sourcesContent":["import type { BlotFormatter } from '../blot-formatter'\r\nimport type { ToolButtonOption } from '../options'\r\nimport type { ImageToolbarButtons } from './image-toolbar-buttons'\r\n\r\nexport class ImageToolbar {\r\n toolbar?: HTMLElement\r\n buttons: HTMLElement[]\r\n\r\n constructor() {\r\n this.toolbar = null\r\n this.buttons = []\r\n }\r\n\r\n create(formatter: BlotFormatter, toolButton: ImageToolbarButtons): HTMLElement {\r\n const toolbar = document.createElement('div')\r\n toolbar.classList.add(formatter.options.toolbar.mainClassName)\r\n this.addToolbarStyle(formatter, toolbar)\r\n this.addButtons(formatter, toolbar, toolButton)\r\n\r\n this.toolbar = toolbar\r\n return this.toolbar\r\n }\r\n\r\n destroy() {\r\n this.toolbar = null\r\n this.buttons = []\r\n }\r\n\r\n getElement() {\r\n return this.toolbar\r\n }\r\n\r\n addToolbarStyle(formatter: BlotFormatter, toolbar: HTMLElement) {\r\n if (formatter.options.toolbar.mainStyle) {\r\n Object.assign(toolbar.style, formatter.options.toolbar.mainStyle)\r\n }\r\n }\r\n\r\n addButtonStyle(button: HTMLElement, index: number, formatter: BlotFormatter) {\r\n if (formatter.options.toolbar.buttonStyle) {\r\n Object.assign(button.style, formatter.options.toolbar.buttonStyle)\r\n if (index > 0) {\r\n button.style.borderLeftWidth = '0'\r\n }\r\n }\r\n\r\n if (formatter.options.toolbar.svgStyle) {\r\n Object.assign((button.children[0] as HTMLElement).style, formatter.options.toolbar.svgStyle)\r\n }\r\n }\r\n\r\n addButtons(formatter: BlotFormatter, toolbar: HTMLElement, toolButton: ImageToolbarButtons) {\r\n toolButton.getItems().forEach((tool, i) => {\r\n const button = document.createElement('span')\r\n button.classList.add(formatter.options.toolbar.buttonClassName)\r\n button.innerHTML = tool.icon\r\n button.addEventListener('click', () => {\r\n this.onButtonClick(button, formatter, tool, toolButton)\r\n })\r\n this.preselectButton(button, tool, formatter, toolButton)\r\n this.addButtonStyle(button, i, formatter)\r\n this.buttons.push(button)\r\n toolbar.appendChild(button)\r\n })\r\n }\r\n\r\n preselectButton(\r\n button: HTMLElement,\r\n toolButtonOption: ToolButtonOption,\r\n formatter: BlotFormatter,\r\n toolButton: ImageToolbarButtons,\r\n ) {\r\n if (!formatter.currentSpec) {\r\n return\r\n }\r\n\r\n const target = formatter.currentSpec.getTargetElement()\r\n if (!target) {\r\n return\r\n }\r\n\r\n if (toolButtonOption.isActive && toolButtonOption.isActive(target)) {\r\n this.selectButton(formatter, button)\r\n }\r\n }\r\n\r\n onButtonClick(\r\n button: HTMLElement,\r\n formatter: BlotFormatter,\r\n toolButtonOption: ToolButtonOption,\r\n toolButton: ImageToolbarButtons,\r\n ) {\r\n if (!formatter.currentSpec) {\r\n return\r\n }\r\n\r\n const target = formatter.currentSpec.getTargetElement()\r\n if (!target || target.tagName.toLowerCase() !== 'img') {\r\n return\r\n }\r\n\r\n this.clickButton(button, target as HTMLImageElement, formatter, toolButtonOption, toolButton)\r\n }\r\n\r\n clickButton(\r\n button: HTMLElement,\r\n target: HTMLImageElement,\r\n formatter: BlotFormatter,\r\n toolButtonOption: ToolButtonOption,\r\n toolButton: ImageToolbarButtons,\r\n ) {\r\n if (!toolButtonOption.isActive) {\r\n toolButtonOption.apply.call(this, target, toolButton)\r\n }\r\n else {\r\n this.buttons.forEach((b) => {\r\n this.deselectButton(formatter, b)\r\n })\r\n\r\n if (toolButtonOption.isActive(target)) {\r\n toolButton.clear(target)\r\n }\r\n else {\r\n this.selectButton(formatter, button)\r\n toolButtonOption.apply.call(this, target, toolButton)\r\n }\r\n }\r\n\r\n formatter.update()\r\n }\r\n\r\n selectButton(formatter: BlotFormatter, button: HTMLElement) {\r\n button.classList.add('is-selected')\r\n if (formatter.options.toolbar.addButtonSelectStyle) {\r\n button.style.setProperty('filter', 'invert(20%)')\r\n }\r\n }\r\n\r\n deselectButton(formatter: BlotFormatter, button: HTMLElement) {\r\n button.classList.remove('is-selected')\r\n if (formatter.options.toolbar.addButtonSelectStyle) {\r\n button.style.removeProperty('filter')\r\n }\r\n }\r\n}\r\n"],"names":[],"mappings":"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"}
|
|
@@ -1,54 +1,32 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
4
|
+
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
5
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
6
|
const lodashEs = require("lodash-es");
|
|
4
7
|
const Quill = require("quill");
|
|
5
8
|
const image = require("./image.cjs.js");
|
|
6
|
-
const
|
|
7
|
-
|
|
8
|
-
const
|
|
9
|
+
const options = require("./options.cjs.js");
|
|
10
|
+
require("./specs/index.cjs.js");
|
|
11
|
+
const customImageSpec = require("./specs/custom-image-spec.cjs.js");
|
|
9
12
|
const dontMerge = (_destination, source) => source;
|
|
10
13
|
class BlotFormatter {
|
|
11
|
-
constructor(quill, options = {}) {
|
|
12
|
-
this
|
|
13
|
-
this
|
|
14
|
+
constructor(quill, options$1 = {}) {
|
|
15
|
+
__publicField(this, "options");
|
|
16
|
+
__publicField(this, "currentSpec");
|
|
17
|
+
__publicField(this, "specs");
|
|
18
|
+
__publicField(this, "overlay");
|
|
19
|
+
__publicField(this, "actions");
|
|
20
|
+
__publicField(this, "observer");
|
|
21
|
+
__publicField(this, "onClick", () => {
|
|
14
22
|
this.hide();
|
|
15
|
-
|
|
16
|
-
};
|
|
17
|
-
this.onMouseOver = (event) => {
|
|
18
|
-
if (this.debounceTimer) {
|
|
19
|
-
clearTimeout(this.debounceTimer);
|
|
20
|
-
}
|
|
21
|
-
this.debounceTimer = window.setTimeout(() => {
|
|
22
|
-
if (event.target.tagName === "IMG") {
|
|
23
|
-
const target = event.target;
|
|
24
|
-
if (target) {
|
|
25
|
-
if (this.imageBar) {
|
|
26
|
-
this.imageBar.destroy();
|
|
27
|
-
}
|
|
28
|
-
this.imageBar = new imageBar.default(this.quill, target);
|
|
29
|
-
}
|
|
30
|
-
} else {
|
|
31
|
-
this.hideImageBar();
|
|
32
|
-
}
|
|
33
|
-
}, 150);
|
|
34
|
-
};
|
|
35
|
-
this.hideImageBar = () => {
|
|
36
|
-
if (this.imageBar) {
|
|
37
|
-
this.imageBar.destroy();
|
|
38
|
-
this.imageBar = null;
|
|
39
|
-
}
|
|
40
|
-
};
|
|
41
|
-
this.hideImageOverlay = (event) => {
|
|
42
|
-
var _a;
|
|
43
|
-
const target = event.target;
|
|
44
|
-
const isBlotFormatter = (_a = target == null ? void 0 : target.classList) == null ? void 0 : _a.contains("blot-formatter__overlay");
|
|
45
|
-
if (!isBlotFormatter) {
|
|
46
|
-
this.hide();
|
|
47
|
-
}
|
|
48
|
-
document.body.removeEventListener("click", this.hideImageOverlay);
|
|
49
|
-
};
|
|
23
|
+
});
|
|
50
24
|
this.quill = quill;
|
|
51
|
-
this.options = lodashEs.merge(
|
|
25
|
+
this.options = lodashEs.merge({}, options.default, options$1, { arrayMerge: dontMerge });
|
|
26
|
+
if (options$1.allowInvalidUrl !== void 0) {
|
|
27
|
+
this.options.allowInvalidUrl = options$1.allowInvalidUrl;
|
|
28
|
+
}
|
|
29
|
+
image.CustomImage.setOptions(this.options.allowInvalidUrl);
|
|
52
30
|
this.currentSpec = null;
|
|
53
31
|
this.actions = [];
|
|
54
32
|
this.overlay = document.createElement("div");
|
|
@@ -58,14 +36,14 @@ class BlotFormatter {
|
|
|
58
36
|
}
|
|
59
37
|
document.execCommand("enableObjectResizing", false, "false");
|
|
60
38
|
this.quill.root.addEventListener("click", this.onClick);
|
|
61
|
-
this.quill.root.addEventListener("mouseover", (event) => this.onMouseOver(event));
|
|
62
39
|
this.specs = this.options.specs.map((SpecClass) => new SpecClass(this));
|
|
63
40
|
this.specs.forEach((spec) => spec.init());
|
|
64
41
|
}
|
|
65
42
|
static register() {
|
|
66
|
-
Quill.register(
|
|
67
|
-
|
|
68
|
-
|
|
43
|
+
Quill.register({
|
|
44
|
+
"formats/image": image.CustomImage,
|
|
45
|
+
"modules/image-spec": customImageSpec.CustomImageSpec
|
|
46
|
+
}, true);
|
|
69
47
|
}
|
|
70
48
|
show(spec) {
|
|
71
49
|
this.currentSpec = spec;
|
|
@@ -93,7 +71,6 @@ class BlotFormatter {
|
|
|
93
71
|
attributeOldValue: true,
|
|
94
72
|
subtree: true
|
|
95
73
|
});
|
|
96
|
-
document.body.addEventListener("click", this.hideImageOverlay, true);
|
|
97
74
|
}
|
|
98
75
|
hide() {
|
|
99
76
|
if (!this.currentSpec) {
|
|
@@ -133,7 +110,7 @@ class BlotFormatter {
|
|
|
133
110
|
if (!overlayTarget) {
|
|
134
111
|
return;
|
|
135
112
|
}
|
|
136
|
-
const parent = this.quill.root.
|
|
113
|
+
const parent = this.quill.root.parentElement;
|
|
137
114
|
const specRect = overlayTarget.getBoundingClientRect();
|
|
138
115
|
const parentRect = parent.getBoundingClientRect();
|
|
139
116
|
Object.assign(this.overlay.style, {
|
|
@@ -159,5 +136,5 @@ class BlotFormatter {
|
|
|
159
136
|
});
|
|
160
137
|
}
|
|
161
138
|
}
|
|
162
|
-
exports.
|
|
163
|
-
//# sourceMappingURL=
|
|
139
|
+
exports.BlotFormatter = BlotFormatter;
|
|
140
|
+
//# sourceMappingURL=blot-formatter.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"blot-formatter.cjs.js","sources":["../../../../src/modules/custom-image/blot-formatter.ts"],"sourcesContent":["import type FluentEditor from '../../core/fluent-editor'\nimport type { Action } from './actions'\nimport type { BlotFormatterOptions } from './options'\nimport type { BlotSpec } from './specs'\nimport { merge as deepmerge } from 'lodash-es'\nimport Quill from 'quill'\nimport { CustomImage } from './image'\nimport DefaultOptions from './options'\nimport { CustomImageSpec } from './specs'\n\nconst dontMerge = (_destination: Array<any>, source: Array<any>) => source\n\nexport class BlotFormatter {\n options: BlotFormatterOptions\n currentSpec: BlotSpec\n specs: BlotSpec[]\n overlay: HTMLElement\n actions: Action[]\n observer: MutationObserver\n\n static register() {\n Quill.register({\n 'formats/image': CustomImage,\n 'modules/image-spec': CustomImageSpec,\n }, true)\n }\n\n constructor(public quill: FluentEditor, options: Partial<BlotFormatterOptions> = {}) {\n this.options = deepmerge({}, DefaultOptions, options, { arrayMerge: dontMerge })\n if (options.allowInvalidUrl !== undefined) {\n this.options.allowInvalidUrl = options.allowInvalidUrl\n }\n CustomImage.setOptions(this.options.allowInvalidUrl)\n this.currentSpec = null\n this.actions = []\n this.overlay = document.createElement('div')\n this.overlay.classList.add(this.options.overlay.className)\n if (this.options.overlay.style) {\n Object.assign(this.overlay.style, this.options.overlay.style)\n }\n\n // disable native image resizing on firefox\n document.execCommand('enableObjectResizing', false, 'false') // eslint-disable-next-line-line no-undef\n this.quill.root.addEventListener('click', this.onClick)\n this.specs = this.options.specs.map((SpecClass: any) => new SpecClass(this))\n this.specs.forEach(spec => spec.init())\n }\n\n show(spec: BlotSpec) {\n this.currentSpec = spec\n this.currentSpec.setSelection()\n this.setUserSelect('none')\n this.quill.root.parentNode.appendChild(this.overlay)\n this.repositionOverlay()\n this.createActions(spec)\n\n // fix: 图片对齐之后,虚线外框应该跟随移动\n const imageDom = spec.getTargetElement()\n const win: any = window\n const MutationObserver: typeof window.MutationObserver = win.MutationObserver || win.WebKitMutationObserver || win.MozMutationObserver\n const element = imageDom.parentNode\n this.observer = new MutationObserver((mutationList) => {\n for (const mutation of mutationList) {\n const target = mutation.target as HTMLElement\n const image = target.querySelector('img')\n if (image) {\n this.repositionOverlay()\n }\n }\n })\n this.observer.observe(element, {\n attributes: true,\n attributeFilter: ['class'],\n attributeOldValue: true,\n subtree: true,\n })\n }\n\n hide() {\n if (!this.currentSpec) {\n return\n }\n\n const imgDom = this.currentSpec.getTargetElement()\n if (imgDom) {\n imgDom.classList.remove('current-select-img')\n }\n\n this.currentSpec.onHide()\n this.currentSpec = null\n this.quill.root.parentNode.removeChild(this.overlay)\n this.overlay.style.setProperty('display', 'none')\n this.setUserSelect('')\n this.destroyActions()\n }\n\n update() {\n this.repositionOverlay()\n this.actions.forEach(action => action.onUpdate())\n }\n\n createActions(spec: BlotSpec) {\n this.actions = spec.getActions().map((ActionClass: any) => {\n const action: Action = new ActionClass(this)\n action.onCreate()\n return action\n })\n }\n\n destroyActions() {\n this.actions.forEach((action: Action) => action.onDestroy())\n this.actions = []\n }\n\n repositionOverlay() {\n if (!this.currentSpec) {\n return\n }\n\n const overlayTarget = this.currentSpec.getOverlayElement()\n if (!overlayTarget) {\n return\n }\n\n const parent = this.quill.root.parentElement\n const specRect = overlayTarget.getBoundingClientRect()\n const parentRect = parent.getBoundingClientRect()\n\n Object.assign(this.overlay.style, {\n display: 'block',\n left: `${specRect.left - parentRect.left - 1 + parent.scrollLeft}px`,\n top: `${specRect.top - parentRect.top + parent.scrollTop}px`,\n width: `${specRect.width}px`,\n height: `${specRect.height}px`,\n })\n }\n\n setUserSelect(value: string) {\n const props: string[] = [\n 'userSelect',\n 'mozUserSelect',\n 'webkitUserSelect',\n 'msUserSelect',\n ]\n\n props.forEach((prop: string) => {\n // set on contenteditable element and <html>\n this.quill.root.style.setProperty(prop, value)\n if (document.documentElement) {\n document.documentElement.style.setProperty(prop, value)\n }\n })\n }\n\n onClick = () => {\n this.hide()\n }\n}\n"],"names":["options","deepmerge","DefaultOptions","CustomImage","CustomImageSpec","image"],"mappings":"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"}
|
|
@@ -1,11 +1,19 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
4
|
+
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
5
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
6
|
const Quill = require("quill");
|
|
4
7
|
const editor_utils = require("../../config/editor.utils.cjs.js");
|
|
5
|
-
const
|
|
6
|
-
|
|
8
|
+
const is = require("../../utils/is.cjs.js");
|
|
9
|
+
require("./actions/index.cjs.js");
|
|
10
|
+
const imageToolbarButtons = require("./actions/image-toolbar-buttons.cjs.js");
|
|
11
|
+
const Embed = Quill.import("blots/embed");
|
|
7
12
|
const ATTRIBUTES = ["alt", "height", "width", "image-id"];
|
|
8
13
|
const _CustomImage = class _CustomImage extends Embed {
|
|
14
|
+
static setOptions(allowInvalidUrl) {
|
|
15
|
+
this.allowInvalidUrl = allowInvalidUrl;
|
|
16
|
+
}
|
|
9
17
|
static create(value) {
|
|
10
18
|
const node = super.create(value);
|
|
11
19
|
const url = typeof value === "string" ? value : value.src;
|
|
@@ -17,8 +25,19 @@ const _CustomImage = class _CustomImage extends Embed {
|
|
|
17
25
|
node.setAttribute("src", imgURL);
|
|
18
26
|
}
|
|
19
27
|
node.setAttribute("data-image-id", `img${_CustomImage.ID_SEED++}`);
|
|
20
|
-
node.setAttribute("devui-editorx-image", true);
|
|
21
28
|
node.style.verticalAlign = "baseline";
|
|
29
|
+
if (is.isObject(value)) {
|
|
30
|
+
if (value.align && imageToolbarButtons.alignmentHandler[value.align]) {
|
|
31
|
+
node.setAttribute(imageToolbarButtons.ALIGN_ATTR, value.align);
|
|
32
|
+
imageToolbarButtons.alignmentHandler[value.align](node);
|
|
33
|
+
}
|
|
34
|
+
if (value.width) {
|
|
35
|
+
node.setAttribute("width", String(value.width));
|
|
36
|
+
}
|
|
37
|
+
if (value.height) {
|
|
38
|
+
node.setAttribute("height", String(value.height));
|
|
39
|
+
}
|
|
40
|
+
}
|
|
22
41
|
return node;
|
|
23
42
|
}
|
|
24
43
|
static formats(domNode) {
|
|
@@ -35,19 +54,30 @@ const _CustomImage = class _CustomImage extends Embed {
|
|
|
35
54
|
static register() {
|
|
36
55
|
if (/Firefox/i.test(navigator.userAgent)) {
|
|
37
56
|
setTimeout(() => {
|
|
38
|
-
document.execCommand("enableObjectResizing", false, false);
|
|
57
|
+
document.execCommand("enableObjectResizing", false, "false");
|
|
39
58
|
}, 1);
|
|
40
59
|
}
|
|
41
60
|
}
|
|
42
61
|
static sanitize(url) {
|
|
43
|
-
|
|
62
|
+
if (editor_utils.sanitize(url, ["http", "https", "blob", "data"]) || this.allowInvalidUrl) {
|
|
63
|
+
return url;
|
|
64
|
+
}
|
|
65
|
+
return "//:0";
|
|
44
66
|
}
|
|
45
67
|
static value(domNode) {
|
|
46
68
|
const formats = {};
|
|
47
69
|
const imageSrc = domNode.getAttribute("src");
|
|
48
70
|
formats.src = this.sanitize(imageSrc);
|
|
49
|
-
formats.hasExisted = domNode.getAttribute("devui-editorx-image");
|
|
50
71
|
formats.imageId = domNode.dataset.imageId;
|
|
72
|
+
if (domNode.dataset.align) {
|
|
73
|
+
formats.align = domNode.dataset.align;
|
|
74
|
+
}
|
|
75
|
+
if (domNode.hasAttribute("width")) {
|
|
76
|
+
formats.width = domNode.getAttribute("width");
|
|
77
|
+
}
|
|
78
|
+
if (domNode.hasAttribute("height")) {
|
|
79
|
+
formats.height = domNode.getAttribute("height");
|
|
80
|
+
}
|
|
51
81
|
return formats;
|
|
52
82
|
}
|
|
53
83
|
format(name, value) {
|
|
@@ -76,20 +106,10 @@ const _CustomImage = class _CustomImage extends Embed {
|
|
|
76
106
|
return wrapper;
|
|
77
107
|
}
|
|
78
108
|
};
|
|
79
|
-
_CustomImage
|
|
109
|
+
__publicField(_CustomImage, "blotName", "image");
|
|
110
|
+
__publicField(_CustomImage, "tagName", "IMG");
|
|
111
|
+
__publicField(_CustomImage, "ID_SEED", 0);
|
|
112
|
+
__publicField(_CustomImage, "allowInvalidUrl", false);
|
|
80
113
|
let CustomImage = _CustomImage;
|
|
81
|
-
CustomImage
|
|
82
|
-
CustomImage.tagName = "IMG";
|
|
83
|
-
class CustomImageContainer extends Inline {
|
|
84
|
-
constructor(scroll, domNode) {
|
|
85
|
-
super(scroll, domNode);
|
|
86
|
-
domNode.setAttribute("contenteditable", false);
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
CustomImageContainer.blotName = "image-container";
|
|
90
|
-
CustomImageContainer.className = "ql-image-container";
|
|
91
|
-
CustomImageContainer.tagName = "DIV";
|
|
92
|
-
CustomImageContainer.allowedChildren = [CustomImage];
|
|
93
|
-
exports.ImageContainerBlot = CustomImageContainer;
|
|
94
|
-
exports.default = CustomImage;
|
|
114
|
+
exports.CustomImage = CustomImage;
|
|
95
115
|
//# sourceMappingURL=image.cjs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"image.cjs.js","sources":["../../../../src/modules/custom-image/image.ts"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"file":"image.cjs.js","sources":["../../../../src/modules/custom-image/image.ts"],"sourcesContent":["import type { Parchment as TypeParchment } from 'quill'\nimport type TypeEmbed from 'quill/blots/embed'\nimport Quill from 'quill'\nimport { isNullOrUndefined, sanitize } from '../../config/editor.utils'\nimport { isObject } from '../../utils/is'\nimport { ALIGN_ATTR, alignmentHandler } from './actions'\n\nconst Embed = Quill.import('blots/embed') as typeof TypeEmbed\nconst ATTRIBUTES = ['alt', 'height', 'width', 'image-id']\n\nexport type ImageValue = string | {\n src: string\n align?: string\n height?: number\n width?: number\n}\nexport class CustomImage extends Embed {\n static blotName = 'image'\n static tagName = 'IMG'\n static ID_SEED = 0\n static allowInvalidUrl: boolean = false\n declare domNode: HTMLElement\n\n static setOptions(allowInvalidUrl: boolean) {\n this.allowInvalidUrl = allowInvalidUrl\n }\n\n static create(value: ImageValue) {\n const node = super.create(value) as HTMLElement\n const url = typeof value === 'string' ? value : value.src\n if (url) {\n const imgURL = this.sanitize(url)\n if (!imgURL?.startsWith('data:image')) {\n node.dataset.src = imgURL\n }\n node.setAttribute('src', imgURL)\n }\n node.setAttribute('data-image-id', `img${CustomImage.ID_SEED++}`)\n node.style.verticalAlign = 'baseline'\n if (isObject(value)) {\n if (value.align && alignmentHandler[value.align]) {\n node.setAttribute(ALIGN_ATTR, value.align)\n alignmentHandler[value.align](node)\n }\n if (value.width) {\n node.setAttribute('width', String(value.width))\n }\n if (value.height) {\n node.setAttribute('height', String(value.height))\n }\n }\n return node\n }\n\n static formats(domNode: HTMLElement) {\n return ATTRIBUTES.reduce((formats, attribute) => {\n if (domNode.hasAttribute(attribute)) {\n formats[attribute] = domNode.getAttribute(attribute)\n }\n return formats\n }, {})\n }\n\n static match(url: string) {\n return /\\.(jpe?g|gif|png)$/.test(url) || /^data:image\\/.+;base64/.test(url)\n }\n\n static register() {\n if (/Firefox/i.test(navigator.userAgent)) {\n setTimeout(() => {\n // Disable image resizing in Firefox\n document.execCommand('enableObjectResizing', false, 'false')\n }, 1)\n }\n }\n\n static sanitize(url: string) {\n if (sanitize(url, ['http', 'https', 'blob', 'data']) || this.allowInvalidUrl) {\n return url\n }\n return '//:0'\n }\n\n static value(domNode: HTMLElement) {\n const formats: any = {}\n const imageSrc = domNode.getAttribute('src')\n formats.src = this.sanitize(imageSrc)\n formats.imageId = domNode.dataset.imageId\n if (domNode.dataset.align) {\n formats.align = domNode.dataset.align\n }\n if (domNode.hasAttribute('width')) {\n formats.width = domNode.getAttribute('width')\n }\n if (domNode.hasAttribute('height')) {\n formats.height = domNode.getAttribute('height')\n }\n return formats\n }\n\n format(name: string, value: any) {\n if (ATTRIBUTES.includes(name)) {\n if (value) {\n this.domNode.setAttribute(name, value)\n }\n else {\n this.domNode.removeAttribute(name)\n }\n }\n else {\n super.format(name, value)\n }\n }\n\n unWrap() {\n this.parent.replaceWith(this as TypeEmbed)\n }\n\n wrap(name: string, value?: any): TypeParchment.Parent\n wrap(wrapper: TypeParchment.Parent): TypeParchment.Parent\n wrap(name: string | TypeParchment.Parent, value?: any) {\n const wrapper = (typeof name === 'string' ? this.scroll.create(name, value) : name) as TypeParchment.Parent\n if (!isNullOrUndefined(this.parent)) {\n this.parent.insertBefore(wrapper, this.next || undefined)\n }\n if (typeof wrapper.appendChild !== 'function') {\n throw new TypeError(`Cannot wrap ${name}`)\n }\n wrapper.appendChild(this)\n return wrapper\n }\n}\n"],"names":["isObject","alignmentHandler","ALIGN_ATTR","sanitize","isNullOrUndefined"],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
require("./actions/index.cjs.js");
|
|
4
|
+
const blotFormatter = require("./blot-formatter.cjs.js");
|
|
5
|
+
const image = require("./image.cjs.js");
|
|
6
|
+
require("./specs/index.cjs.js");
|
|
7
|
+
exports.BlotFormatter = blotFormatter.BlotFormatter;
|
|
8
|
+
exports.CustomImage = image.CustomImage;
|
|
9
|
+
//# sourceMappingURL=index.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;"}
|