@opentiny/fluent-editor 4.0.0-alpha.8 → 4.0.0-beta.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/es/config/editor.config.es.js +112 -0
- package/es/config/editor.config.es.js.map +1 -0
- package/es/config/editor.utils.es.js.map +1 -0
- package/es/config/i18n/en-us.es.js +131 -0
- package/es/config/i18n/en-us.es.js.map +1 -0
- package/es/config/i18n/zh-cn.es.js +131 -0
- package/es/config/i18n/zh-cn.es.js.map +1 -0
- package/es/config/index.es.js +67 -0
- package/es/config/index.es.js.map +1 -0
- package/es/core/fluent-editor.es.js.map +1 -0
- package/es/fluent-editor.es.js +88 -0
- package/es/fluent-editor.es.js.map +1 -0
- package/es/formats/soft-break.es.js.map +1 -0
- package/es/formats/video.es.js.map +1 -0
- package/es/index.es.js +137 -0
- package/es/index.es.js.map +1 -0
- package/es/modules/ai/constants.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 +92 -0
- package/es/modules/collaborative-editing/awareness/awareness.es.js.map +1 -0
- package/es/modules/collaborative-editing/awareness/y-indexeddb.es.js +16 -0
- package/es/modules/collaborative-editing/awareness/y-indexeddb.es.js.map +1 -0
- package/es/modules/collaborative-editing/collaborative-editing.es.js +110 -0
- package/es/modules/collaborative-editing/collaborative-editing.es.js.map +1 -0
- package/es/modules/collaborative-editing/module.es.js.map +1 -0
- package/es/modules/collaborative-editing/provider/providerRegistry.es.js.map +1 -0
- package/es/modules/collaborative-editing/provider/webrtc.es.js +103 -0
- package/es/modules/collaborative-editing/provider/webrtc.es.js.map +1 -0
- package/es/modules/collaborative-editing/provider/websocket.es.js +113 -0
- package/es/modules/collaborative-editing/provider/websocket.es.js.map +1 -0
- package/es/modules/counter.es.js.map +1 -0
- package/es/modules/custom-clipboard.es.js.map +1 -0
- package/es/modules/custom-image/actions/action.es.js.map +1 -0
- package/es/modules/custom-image/actions/custom-resize-action.es.js.map +1 -0
- 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/toolbar-action.es.js.map +1 -0
- package/es/modules/custom-image/actions/toolbar.es.js.map +1 -0
- package/es/modules/custom-image/blot-formatter.es.js +140 -0
- package/es/modules/custom-image/blot-formatter.es.js.map +1 -0
- package/es/modules/custom-image/image.es.js.map +1 -0
- package/es/modules/custom-image/options.es.js.map +1 -0
- package/es/modules/custom-image/specs/blot-spec.es.js.map +1 -0
- package/es/modules/custom-image/specs/custom-image-spec.es.js.map +1 -0
- package/es/modules/custom-image/specs/image-spec.es.js.map +1 -0
- package/es/modules/custom-uploader.es.js.map +1 -0
- package/es/modules/divider.es.js.map +1 -0
- 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.map +1 -0
- package/es/modules/file/modules/file-bar.es.js.map +1 -0
- package/es/modules/file/modules/file-module.es.js.map +1 -0
- package/es/modules/flow-chart/config-utils.es.js +102 -0
- package/es/modules/flow-chart/config-utils.es.js.map +1 -0
- package/es/modules/flow-chart/formats/flow-chart-blot.es.js +369 -0
- package/es/modules/flow-chart/formats/flow-chart-blot.es.js.map +1 -0
- package/es/modules/flow-chart/i18n/en-us.es.js +30 -0
- package/es/modules/flow-chart/i18n/en-us.es.js.map +1 -0
- package/es/modules/flow-chart/i18n/index.es.js +12 -0
- package/es/modules/flow-chart/i18n/index.es.js.map +1 -0
- package/es/modules/flow-chart/i18n/zh-cn.es.js +30 -0
- package/es/modules/flow-chart/i18n/zh-cn.es.js.map +1 -0
- package/es/modules/flow-chart/icons.es.js +27 -0
- package/es/modules/flow-chart/icons.es.js.map +1 -0
- package/es/modules/flow-chart/index.es.js +45 -0
- package/es/modules/flow-chart/index.es.js.map +1 -0
- package/es/modules/flow-chart/modules/context-menu.es.js +184 -0
- package/es/modules/flow-chart/modules/context-menu.es.js.map +1 -0
- package/es/modules/flow-chart/modules/control-panel.es.js +286 -0
- package/es/modules/flow-chart/modules/control-panel.es.js.map +1 -0
- package/es/modules/flow-chart/modules/custom-resize-action.es.js +150 -0
- package/es/modules/flow-chart/modules/custom-resize-action.es.js.map +1 -0
- package/es/modules/i18n.es.js.map +1 -0
- package/es/modules/index.es.js +31 -0
- package/es/modules/index.es.js.map +1 -0
- package/es/modules/link/formats/link.es.js.map +1 -0
- package/es/modules/link/modules/tooltip.es.js.map +1 -0
- package/es/modules/mathlive/formats.es.js.map +1 -0
- package/es/modules/mathlive/module.es.js.map +1 -0
- package/es/modules/mathlive/tooltip.es.js.map +1 -0
- package/es/modules/mention/mention-link.es.js.map +1 -0
- package/es/modules/mention/mention.es.js.map +1 -0
- package/es/modules/mind-map/config-utils.es.js +108 -0
- package/es/modules/mind-map/config-utils.es.js.map +1 -0
- package/es/modules/mind-map/formats/mind-map-blot.es.js +356 -0
- package/es/modules/mind-map/formats/mind-map-blot.es.js.map +1 -0
- package/es/modules/mind-map/i18n/en-us.es.js +29 -0
- package/es/modules/mind-map/i18n/en-us.es.js.map +1 -0
- package/es/modules/mind-map/i18n/index.es.js +12 -0
- package/es/modules/mind-map/i18n/index.es.js.map +1 -0
- package/es/modules/mind-map/i18n/zh-cn.es.js +29 -0
- package/es/modules/mind-map/i18n/zh-cn.es.js.map +1 -0
- package/es/modules/mind-map/icons.es.js +45 -0
- package/es/modules/mind-map/icons.es.js.map +1 -0
- package/es/modules/mind-map/index.es.js +56 -0
- package/es/modules/mind-map/index.es.js.map +1 -0
- package/es/modules/mind-map/modules/context-menu.es.js +128 -0
- package/es/modules/mind-map/modules/context-menu.es.js.map +1 -0
- package/es/modules/mind-map/modules/control-panel.es.js +425 -0
- package/es/modules/mind-map/modules/control-panel.es.js.map +1 -0
- package/es/modules/mind-map/modules/custom-resize-action.es.js +161 -0
- package/es/modules/mind-map/modules/custom-resize-action.es.js.map +1 -0
- package/es/modules/shortcut-key/index.es.js +245 -0
- package/es/modules/shortcut-key/index.es.js.map +1 -0
- package/es/modules/syntax.es.js.map +1 -0
- package/es/modules/table-up/index.es.js.map +1 -0
- package/es/modules/toolbar/better-picker.es.js.map +1 -0
- package/es/modules/toolbar/better-toolbar.es.js.map +1 -0
- package/es/modules/toolbar/toolbar-tip.es.js.map +1 -0
- package/es/themes/snow.es.js.map +1 -0
- package/es/tools/format-painter.es.js.map +1 -0
- package/es/tools/fullscreen.es.js.map +1 -0
- package/es/tools/screenshot.es.js.map +1 -0
- package/es/ui/icons.config.es.js +369 -0
- package/es/ui/icons.config.es.js.map +1 -0
- package/es/ui/icons.es.js +52 -0
- package/es/ui/icons.es.js.map +1 -0
- package/es/utils/debounce.es.js.map +1 -0
- package/es/utils/image.es.js.map +1 -0
- package/es/utils/is.es.js.map +1 -0
- package/es/utils/merge.es.js +27 -0
- package/es/utils/merge.es.js.map +1 -0
- package/es/utils/method.es.js.map +1 -0
- package/es/utils/scroll-lock.es.js.map +1 -0
- package/flow-chart.css +185 -0
- package/lib/config/editor.config.cjs.js +112 -0
- package/lib/config/editor.config.cjs.js.map +1 -0
- package/lib/config/editor.utils.cjs.js.map +1 -0
- package/lib/config/i18n/en-us.cjs.js +131 -0
- package/lib/config/i18n/en-us.cjs.js.map +1 -0
- package/lib/config/i18n/zh-cn.cjs.js +131 -0
- package/lib/config/i18n/zh-cn.cjs.js.map +1 -0
- package/lib/config/index.cjs.js +66 -0
- package/lib/config/index.cjs.js.map +1 -0
- package/lib/core/fluent-editor.cjs.js.map +1 -0
- package/lib/fluent-editor.cjs.js +88 -0
- package/lib/fluent-editor.cjs.js.map +1 -0
- package/lib/formats/soft-break.cjs.js.map +1 -0
- package/lib/formats/video.cjs.js.map +1 -0
- package/lib/index.cjs.js +158 -0
- package/lib/index.cjs.js.map +1 -0
- package/lib/modules/ai/constants.cjs.js.map +1 -0
- package/lib/modules/ai/index.cjs.js.map +1 -0
- package/lib/modules/collaborative-editing/awareness/awareness.cjs.js +92 -0
- package/lib/modules/collaborative-editing/awareness/awareness.cjs.js.map +1 -0
- package/lib/modules/collaborative-editing/awareness/y-indexeddb.cjs.js +16 -0
- package/lib/modules/collaborative-editing/awareness/y-indexeddb.cjs.js.map +1 -0
- package/lib/modules/collaborative-editing/collaborative-editing.cjs.js +110 -0
- package/lib/modules/collaborative-editing/collaborative-editing.cjs.js.map +1 -0
- package/lib/modules/collaborative-editing/module.cjs.js.map +1 -0
- package/lib/modules/collaborative-editing/provider/providerRegistry.cjs.js.map +1 -0
- package/lib/modules/collaborative-editing/provider/webrtc.cjs.js +103 -0
- package/lib/modules/collaborative-editing/provider/webrtc.cjs.js.map +1 -0
- package/lib/modules/collaborative-editing/provider/websocket.cjs.js +113 -0
- package/lib/modules/collaborative-editing/provider/websocket.cjs.js.map +1 -0
- package/lib/modules/counter.cjs.js.map +1 -0
- package/lib/modules/custom-clipboard.cjs.js.map +1 -0
- package/lib/modules/custom-image/actions/action.cjs.js.map +1 -0
- package/lib/modules/custom-image/actions/custom-resize-action.cjs.js.map +1 -0
- package/lib/modules/custom-image/actions/delete-action.cjs.js.map +1 -0
- package/lib/modules/custom-image/actions/image-toolbar-buttons.cjs.js.map +1 -0
- package/lib/modules/custom-image/actions/toolbar-action.cjs.js.map +1 -0
- package/lib/modules/custom-image/actions/toolbar.cjs.js.map +1 -0
- package/lib/modules/custom-image/blot-formatter.cjs.js +140 -0
- package/lib/modules/custom-image/blot-formatter.cjs.js.map +1 -0
- package/lib/modules/custom-image/image.cjs.js.map +1 -0
- package/lib/modules/custom-image/options.cjs.js.map +1 -0
- package/lib/modules/custom-image/specs/blot-spec.cjs.js.map +1 -0
- package/lib/modules/custom-image/specs/custom-image-spec.cjs.js.map +1 -0
- package/lib/modules/custom-image/specs/image-spec.cjs.js.map +1 -0
- package/lib/modules/custom-uploader.cjs.js.map +1 -0
- package/lib/modules/divider.cjs.js.map +1 -0
- 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.map +1 -0
- package/lib/modules/file/modules/file-bar.cjs.js.map +1 -0
- package/lib/modules/file/modules/file-module.cjs.js.map +1 -0
- package/lib/modules/flow-chart/config-utils.cjs.js +102 -0
- package/lib/modules/flow-chart/config-utils.cjs.js.map +1 -0
- package/lib/modules/flow-chart/formats/flow-chart-blot.cjs.js +369 -0
- package/lib/modules/flow-chart/formats/flow-chart-blot.cjs.js.map +1 -0
- package/lib/modules/flow-chart/i18n/en-us.cjs.js +30 -0
- package/lib/modules/flow-chart/i18n/en-us.cjs.js.map +1 -0
- package/lib/modules/flow-chart/i18n/index.cjs.js +12 -0
- package/lib/modules/flow-chart/i18n/index.cjs.js.map +1 -0
- package/lib/modules/flow-chart/i18n/zh-cn.cjs.js +30 -0
- package/lib/modules/flow-chart/i18n/zh-cn.cjs.js.map +1 -0
- package/lib/modules/flow-chart/icons.cjs.js +27 -0
- package/lib/modules/flow-chart/icons.cjs.js.map +1 -0
- package/lib/modules/flow-chart/index.cjs.js +45 -0
- package/lib/modules/flow-chart/index.cjs.js.map +1 -0
- package/lib/modules/flow-chart/modules/context-menu.cjs.js +184 -0
- package/lib/modules/flow-chart/modules/context-menu.cjs.js.map +1 -0
- package/lib/modules/flow-chart/modules/control-panel.cjs.js +286 -0
- package/lib/modules/flow-chart/modules/control-panel.cjs.js.map +1 -0
- package/lib/modules/flow-chart/modules/custom-resize-action.cjs.js +150 -0
- package/lib/modules/flow-chart/modules/custom-resize-action.cjs.js.map +1 -0
- package/lib/modules/i18n.cjs.js.map +1 -0
- package/lib/modules/index.cjs.js +31 -0
- package/lib/modules/index.cjs.js.map +1 -0
- package/lib/modules/link/formats/link.cjs.js.map +1 -0
- package/lib/modules/link/modules/tooltip.cjs.js.map +1 -0
- package/lib/modules/mathlive/formats.cjs.js.map +1 -0
- package/lib/modules/mathlive/module.cjs.js.map +1 -0
- package/lib/modules/mathlive/tooltip.cjs.js.map +1 -0
- package/lib/modules/mention/mention-link.cjs.js.map +1 -0
- package/lib/modules/mention/mention.cjs.js.map +1 -0
- package/lib/modules/mind-map/config-utils.cjs.js +108 -0
- package/lib/modules/mind-map/config-utils.cjs.js.map +1 -0
- package/lib/modules/mind-map/formats/mind-map-blot.cjs.js +356 -0
- package/lib/modules/mind-map/formats/mind-map-blot.cjs.js.map +1 -0
- package/lib/modules/mind-map/i18n/en-us.cjs.js +29 -0
- package/lib/modules/mind-map/i18n/en-us.cjs.js.map +1 -0
- package/lib/modules/mind-map/i18n/index.cjs.js +12 -0
- package/lib/modules/mind-map/i18n/index.cjs.js.map +1 -0
- package/lib/modules/mind-map/i18n/zh-cn.cjs.js +29 -0
- package/lib/modules/mind-map/i18n/zh-cn.cjs.js.map +1 -0
- package/lib/modules/mind-map/icons.cjs.js +45 -0
- package/lib/modules/mind-map/icons.cjs.js.map +1 -0
- package/lib/modules/mind-map/index.cjs.js +56 -0
- package/lib/modules/mind-map/index.cjs.js.map +1 -0
- package/lib/modules/mind-map/modules/context-menu.cjs.js +128 -0
- package/lib/modules/mind-map/modules/context-menu.cjs.js.map +1 -0
- package/lib/modules/mind-map/modules/control-panel.cjs.js +425 -0
- package/lib/modules/mind-map/modules/control-panel.cjs.js.map +1 -0
- package/lib/modules/mind-map/modules/custom-resize-action.cjs.js +161 -0
- package/lib/modules/mind-map/modules/custom-resize-action.cjs.js.map +1 -0
- package/lib/modules/shortcut-key/index.cjs.js +245 -0
- package/lib/modules/shortcut-key/index.cjs.js.map +1 -0
- package/lib/modules/syntax.cjs.js.map +1 -0
- package/lib/modules/table-up/index.cjs.js.map +1 -0
- package/lib/modules/toolbar/better-picker.cjs.js.map +1 -0
- package/lib/modules/toolbar/better-toolbar.cjs.js.map +1 -0
- package/lib/modules/toolbar/toolbar-tip.cjs.js.map +1 -0
- package/lib/themes/snow.cjs.js.map +1 -0
- package/lib/tools/format-painter.cjs.js.map +1 -0
- package/lib/tools/fullscreen.cjs.js.map +1 -0
- package/lib/tools/screenshot.cjs.js.map +1 -0
- package/lib/ui/icons.cjs.js +52 -0
- package/lib/ui/icons.cjs.js.map +1 -0
- package/lib/ui/icons.config.cjs.js +369 -0
- package/lib/ui/icons.config.cjs.js.map +1 -0
- package/lib/utils/debounce.cjs.js.map +1 -0
- package/lib/utils/image.cjs.js.map +1 -0
- package/lib/utils/is.cjs.js.map +1 -0
- package/lib/utils/merge.cjs.js +27 -0
- package/lib/utils/merge.cjs.js.map +1 -0
- package/lib/utils/method.cjs.js.map +1 -0
- package/lib/utils/scroll-lock.cjs.js.map +1 -0
- package/mind-map.css +224 -0
- package/package.json +15 -37
- package/patches/quill@2.0.3.patch +33 -0
- package/scripts/apply-patches.cjs +248 -0
- package/style.css +3465 -0
- package/types/config/editor.config.d.ts +55 -0
- package/types/config/i18n/en-us.d.ts +125 -0
- package/types/config/i18n/zh-cn.d.ts +125 -0
- package/types/config/types/editor-modules.interface.d.ts +45 -0
- package/types/index.d.ts +8 -0
- package/types/modules/collaborative-editing/awareness/awareness.d.ts +28 -0
- package/types/modules/collaborative-editing/awareness/y-indexeddb.d.ts +3 -0
- package/types/modules/collaborative-editing/collaborative-editing.d.ts +25 -0
- package/types/modules/collaborative-editing/provider/providerRegistry.d.ts +26 -0
- package/types/modules/collaborative-editing/provider/webrtc.d.ts +37 -0
- package/types/modules/collaborative-editing/provider/websocket.d.ts +41 -0
- package/types/modules/collaborative-editing/types.d.ts +53 -0
- package/types/modules/flow-chart/config-utils.d.ts +10 -0
- package/types/modules/flow-chart/formats/flow-chart-blot.d.ts +43 -0
- package/types/modules/flow-chart/i18n/en-us.d.ts +26 -0
- package/types/modules/flow-chart/i18n/index.d.ts +1 -0
- package/types/modules/flow-chart/i18n/zh-cn.d.ts +26 -0
- package/types/modules/flow-chart/icons.d.ts +12 -0
- package/types/modules/flow-chart/index.d.ts +10 -0
- package/types/modules/flow-chart/modules/context-menu.d.ts +3 -0
- package/types/modules/flow-chart/modules/control-panel.d.ts +3 -0
- package/types/modules/flow-chart/modules/custom-resize-action.d.ts +22 -0
- package/types/modules/flow-chart/options.d.ts +29 -0
- package/types/modules/index.d.ts +18 -0
- package/types/modules/mind-map/config-utils.d.ts +12 -0
- package/types/modules/mind-map/formats/mind-map-blot.d.ts +44 -0
- package/types/modules/mind-map/i18n/en-us.d.ts +25 -0
- package/types/modules/mind-map/i18n/index.d.ts +1 -0
- package/types/modules/mind-map/i18n/zh-cn.d.ts +25 -0
- package/types/modules/mind-map/icons.d.ts +21 -0
- package/types/modules/mind-map/index.d.ts +10 -0
- package/types/modules/mind-map/modules/context-menu.d.ts +3 -0
- package/types/modules/mind-map/modules/control-panel.d.ts +3 -0
- package/types/modules/mind-map/modules/custom-resize-action.d.ts +23 -0
- package/types/modules/mind-map/options.d.ts +27 -0
- package/types/ui/icons.config.d.ts +40 -0
- package/types/utils/merge.d.ts +7 -0
- package/LICENSE +0 -21
- package/dist/es/config/editor.config.es.js +0 -85
- package/dist/es/config/editor.config.es.js.map +0 -1
- package/dist/es/config/editor.utils.es.js.map +0 -1
- package/dist/es/config/i18n/en-us.es.js +0 -129
- package/dist/es/config/i18n/en-us.es.js.map +0 -1
- package/dist/es/config/i18n/zh-cn.es.js +0 -129
- package/dist/es/config/i18n/zh-cn.es.js.map +0 -1
- package/dist/es/config/index.es.js +0 -65
- package/dist/es/config/index.es.js.map +0 -1
- package/dist/es/core/fluent-editor.es.js.map +0 -1
- package/dist/es/fluent-editor.es.js +0 -84
- package/dist/es/fluent-editor.es.js.map +0 -1
- package/dist/es/formats/soft-break.es.js.map +0 -1
- package/dist/es/formats/video.es.js.map +0 -1
- package/dist/es/index.es.js +0 -104
- package/dist/es/index.es.js.map +0 -1
- package/dist/es/modules/ai/constants.es.js.map +0 -1
- package/dist/es/modules/ai/index.es.js +0 -670
- package/dist/es/modules/ai/index.es.js.map +0 -1
- package/dist/es/modules/collaborative-editing/awareness/awareness.es.js +0 -93
- package/dist/es/modules/collaborative-editing/awareness/awareness.es.js.map +0 -1
- package/dist/es/modules/collaborative-editing/awareness/y-indexeddb.es.js +0 -12
- package/dist/es/modules/collaborative-editing/awareness/y-indexeddb.es.js.map +0 -1
- package/dist/es/modules/collaborative-editing/collaborative-editing.es.js +0 -105
- package/dist/es/modules/collaborative-editing/collaborative-editing.es.js.map +0 -1
- package/dist/es/modules/collaborative-editing/module.es.js.map +0 -1
- package/dist/es/modules/collaborative-editing/provider/providerRegistry.es.js.map +0 -1
- package/dist/es/modules/collaborative-editing/provider/webrtc.es.js +0 -99
- package/dist/es/modules/collaborative-editing/provider/webrtc.es.js.map +0 -1
- package/dist/es/modules/collaborative-editing/provider/websocket.es.js +0 -111
- package/dist/es/modules/collaborative-editing/provider/websocket.es.js.map +0 -1
- package/dist/es/modules/counter.es.js.map +0 -1
- package/dist/es/modules/custom-clipboard.es.js.map +0 -1
- package/dist/es/modules/custom-image/actions/action.es.js.map +0 -1
- package/dist/es/modules/custom-image/actions/custom-resize-action.es.js.map +0 -1
- package/dist/es/modules/custom-image/actions/delete-action.es.js.map +0 -1
- package/dist/es/modules/custom-image/actions/image-toolbar-buttons.es.js +0 -137
- package/dist/es/modules/custom-image/actions/image-toolbar-buttons.es.js.map +0 -1
- package/dist/es/modules/custom-image/actions/toolbar-action.es.js.map +0 -1
- package/dist/es/modules/custom-image/actions/toolbar.es.js.map +0 -1
- package/dist/es/modules/custom-image/blot-formatter.es.js +0 -140
- package/dist/es/modules/custom-image/blot-formatter.es.js.map +0 -1
- package/dist/es/modules/custom-image/image.es.js.map +0 -1
- package/dist/es/modules/custom-image/options.es.js.map +0 -1
- package/dist/es/modules/custom-image/specs/blot-spec.es.js.map +0 -1
- package/dist/es/modules/custom-image/specs/custom-image-spec.es.js.map +0 -1
- package/dist/es/modules/custom-image/specs/image-spec.es.js.map +0 -1
- package/dist/es/modules/custom-uploader.es.js.map +0 -1
- package/dist/es/modules/divider.es.js.map +0 -1
- package/dist/es/modules/emoji.es.js +0 -167
- package/dist/es/modules/emoji.es.js.map +0 -1
- package/dist/es/modules/file/formats/file.es.js.map +0 -1
- package/dist/es/modules/file/modules/file-bar.es.js.map +0 -1
- package/dist/es/modules/file/modules/file-module.es.js.map +0 -1
- package/dist/es/modules/i18n.es.js.map +0 -1
- package/dist/es/modules/index.es.js +0 -27
- package/dist/es/modules/index.es.js.map +0 -1
- package/dist/es/modules/link/formats/link.es.js.map +0 -1
- package/dist/es/modules/link/modules/tooltip.es.js.map +0 -1
- package/dist/es/modules/mathlive/formats.es.js.map +0 -1
- package/dist/es/modules/mathlive/module.es.js.map +0 -1
- package/dist/es/modules/mathlive/tooltip.es.js.map +0 -1
- package/dist/es/modules/mention/mention-link.es.js.map +0 -1
- package/dist/es/modules/mention/mention.es.js.map +0 -1
- package/dist/es/modules/shortcut-key/index.es.js +0 -229
- package/dist/es/modules/shortcut-key/index.es.js.map +0 -1
- package/dist/es/modules/syntax.es.js.map +0 -1
- package/dist/es/modules/table-up/index.es.js.map +0 -1
- package/dist/es/modules/toolbar/better-picker.es.js.map +0 -1
- package/dist/es/modules/toolbar/better-toolbar.es.js.map +0 -1
- package/dist/es/modules/toolbar/toolbar-tip.es.js.map +0 -1
- package/dist/es/themes/snow.es.js.map +0 -1
- package/dist/es/tools/format-painter.es.js.map +0 -1
- package/dist/es/tools/fullscreen.es.js.map +0 -1
- package/dist/es/tools/screenshot.es.js.map +0 -1
- package/dist/es/ui/icons.config.es.js +0 -365
- package/dist/es/ui/icons.config.es.js.map +0 -1
- package/dist/es/ui/icons.es.js +0 -50
- package/dist/es/ui/icons.es.js.map +0 -1
- package/dist/es/utils/debounce.es.js.map +0 -1
- package/dist/es/utils/image.es.js.map +0 -1
- package/dist/es/utils/is.es.js.map +0 -1
- package/dist/es/utils/method.es.js.map +0 -1
- package/dist/es/utils/scroll-lock.es.js.map +0 -1
- package/dist/lib/config/editor.config.cjs.js +0 -85
- package/dist/lib/config/editor.config.cjs.js.map +0 -1
- package/dist/lib/config/editor.utils.cjs.js.map +0 -1
- package/dist/lib/config/i18n/en-us.cjs.js +0 -129
- package/dist/lib/config/i18n/en-us.cjs.js.map +0 -1
- package/dist/lib/config/i18n/zh-cn.cjs.js +0 -129
- package/dist/lib/config/i18n/zh-cn.cjs.js.map +0 -1
- package/dist/lib/config/index.cjs.js +0 -64
- package/dist/lib/config/index.cjs.js.map +0 -1
- package/dist/lib/core/fluent-editor.cjs.js.map +0 -1
- package/dist/lib/fluent-editor.cjs.js +0 -84
- package/dist/lib/fluent-editor.cjs.js.map +0 -1
- package/dist/lib/formats/soft-break.cjs.js.map +0 -1
- package/dist/lib/formats/video.cjs.js.map +0 -1
- package/dist/lib/index.cjs.js +0 -125
- package/dist/lib/index.cjs.js.map +0 -1
- package/dist/lib/modules/ai/constants.cjs.js.map +0 -1
- package/dist/lib/modules/ai/index.cjs.js.map +0 -1
- package/dist/lib/modules/collaborative-editing/awareness/awareness.cjs.js +0 -110
- package/dist/lib/modules/collaborative-editing/awareness/awareness.cjs.js.map +0 -1
- package/dist/lib/modules/collaborative-editing/awareness/y-indexeddb.cjs.js +0 -12
- package/dist/lib/modules/collaborative-editing/awareness/y-indexeddb.cjs.js.map +0 -1
- package/dist/lib/modules/collaborative-editing/collaborative-editing.cjs.js +0 -122
- package/dist/lib/modules/collaborative-editing/collaborative-editing.cjs.js.map +0 -1
- package/dist/lib/modules/collaborative-editing/module.cjs.js.map +0 -1
- package/dist/lib/modules/collaborative-editing/provider/providerRegistry.cjs.js.map +0 -1
- package/dist/lib/modules/collaborative-editing/provider/webrtc.cjs.js +0 -116
- package/dist/lib/modules/collaborative-editing/provider/webrtc.cjs.js.map +0 -1
- package/dist/lib/modules/collaborative-editing/provider/websocket.cjs.js +0 -128
- package/dist/lib/modules/collaborative-editing/provider/websocket.cjs.js.map +0 -1
- package/dist/lib/modules/counter.cjs.js.map +0 -1
- package/dist/lib/modules/custom-clipboard.cjs.js.map +0 -1
- package/dist/lib/modules/custom-image/actions/action.cjs.js.map +0 -1
- package/dist/lib/modules/custom-image/actions/custom-resize-action.cjs.js.map +0 -1
- package/dist/lib/modules/custom-image/actions/delete-action.cjs.js.map +0 -1
- package/dist/lib/modules/custom-image/actions/image-toolbar-buttons.cjs.js.map +0 -1
- package/dist/lib/modules/custom-image/actions/toolbar-action.cjs.js.map +0 -1
- package/dist/lib/modules/custom-image/actions/toolbar.cjs.js.map +0 -1
- package/dist/lib/modules/custom-image/blot-formatter.cjs.js +0 -140
- package/dist/lib/modules/custom-image/blot-formatter.cjs.js.map +0 -1
- package/dist/lib/modules/custom-image/image.cjs.js.map +0 -1
- package/dist/lib/modules/custom-image/options.cjs.js.map +0 -1
- package/dist/lib/modules/custom-image/specs/blot-spec.cjs.js.map +0 -1
- package/dist/lib/modules/custom-image/specs/custom-image-spec.cjs.js.map +0 -1
- package/dist/lib/modules/custom-image/specs/image-spec.cjs.js.map +0 -1
- package/dist/lib/modules/custom-uploader.cjs.js.map +0 -1
- package/dist/lib/modules/divider.cjs.js.map +0 -1
- package/dist/lib/modules/emoji.cjs.js +0 -167
- package/dist/lib/modules/emoji.cjs.js.map +0 -1
- package/dist/lib/modules/file/formats/file.cjs.js.map +0 -1
- package/dist/lib/modules/file/modules/file-bar.cjs.js.map +0 -1
- package/dist/lib/modules/file/modules/file-module.cjs.js.map +0 -1
- package/dist/lib/modules/i18n.cjs.js.map +0 -1
- package/dist/lib/modules/index.cjs.js +0 -27
- package/dist/lib/modules/index.cjs.js.map +0 -1
- package/dist/lib/modules/link/formats/link.cjs.js.map +0 -1
- package/dist/lib/modules/link/modules/tooltip.cjs.js.map +0 -1
- package/dist/lib/modules/mathlive/formats.cjs.js.map +0 -1
- package/dist/lib/modules/mathlive/module.cjs.js.map +0 -1
- package/dist/lib/modules/mathlive/tooltip.cjs.js.map +0 -1
- package/dist/lib/modules/mention/mention-link.cjs.js.map +0 -1
- package/dist/lib/modules/mention/mention.cjs.js.map +0 -1
- package/dist/lib/modules/shortcut-key/index.cjs.js +0 -229
- package/dist/lib/modules/shortcut-key/index.cjs.js.map +0 -1
- package/dist/lib/modules/syntax.cjs.js.map +0 -1
- package/dist/lib/modules/table-up/index.cjs.js.map +0 -1
- package/dist/lib/modules/toolbar/better-picker.cjs.js.map +0 -1
- package/dist/lib/modules/toolbar/better-toolbar.cjs.js.map +0 -1
- package/dist/lib/modules/toolbar/toolbar-tip.cjs.js.map +0 -1
- package/dist/lib/themes/snow.cjs.js.map +0 -1
- package/dist/lib/tools/format-painter.cjs.js.map +0 -1
- package/dist/lib/tools/fullscreen.cjs.js.map +0 -1
- package/dist/lib/tools/screenshot.cjs.js.map +0 -1
- package/dist/lib/ui/icons.cjs.js +0 -50
- package/dist/lib/ui/icons.cjs.js.map +0 -1
- package/dist/lib/ui/icons.config.cjs.js +0 -365
- package/dist/lib/ui/icons.config.cjs.js.map +0 -1
- package/dist/lib/utils/debounce.cjs.js.map +0 -1
- package/dist/lib/utils/image.cjs.js.map +0 -1
- package/dist/lib/utils/is.cjs.js.map +0 -1
- package/dist/lib/utils/method.cjs.js.map +0 -1
- package/dist/lib/utils/scroll-lock.cjs.js.map +0 -1
- package/dist/package.json +0 -67
- package/dist/style.css +0 -3463
- package/dist/types/config/editor.config.d.ts +0 -11
- package/dist/types/config/i18n/en-us.d.ts +0 -123
- package/dist/types/config/i18n/zh-cn.d.ts +0 -123
- package/dist/types/config/types/editor-modules.interface.d.ts +0 -41
- package/dist/types/index.d.ts +0 -8
- package/dist/types/modules/collaborative-editing/awareness/awareness.d.ts +0 -28
- package/dist/types/modules/collaborative-editing/awareness/y-indexeddb.d.ts +0 -2
- package/dist/types/modules/collaborative-editing/collaborative-editing.d.ts +0 -24
- package/dist/types/modules/collaborative-editing/provider/providerRegistry.d.ts +0 -25
- package/dist/types/modules/collaborative-editing/provider/webrtc.d.ts +0 -36
- package/dist/types/modules/collaborative-editing/provider/websocket.d.ts +0 -40
- package/dist/types/modules/collaborative-editing/types.d.ts +0 -37
- package/dist/types/modules/index.d.ts +0 -16
- package/dist/types/ui/icons.config.d.ts +0 -38
- package/scripts/pre-release.cjs +0 -35
- package/src/assets/ai.scss +0 -451
- package/src/assets/common/config.scss +0 -4
- package/src/assets/common.scss +0 -132
- package/src/assets/counter.scss +0 -16
- package/src/assets/custom-image.scss +0 -19
- package/src/assets/editor.scss +0 -351
- package/src/assets/fileBar.scss +0 -107
- package/src/assets/font.scss +0 -18
- package/src/assets/fullscreen.scss +0 -50
- package/src/assets/iconfont/iconfont.ttf +0 -0
- package/src/assets/iconfont/iconfont.woff +0 -0
- package/src/assets/iconfont/iconfont.woff2 +0 -0
- package/src/assets/imageBar.scss +0 -98
- package/src/assets/lineHeight.scss +0 -15
- package/src/assets/link.scss +0 -120
- package/src/assets/mathlive.scss +0 -40
- package/src/assets/mention.scss +0 -48
- package/src/assets/screenshot.scss +0 -78
- package/src/assets/size.scss +0 -11
- package/src/assets/style.scss +0 -46
- package/src/assets/svgs/align-center.svg +0 -41
- package/src/assets/svgs/align-justify.svg +0 -8
- package/src/assets/svgs/arrow-down.svg +0 -6
- package/src/assets/svgs/background-color.svg +0 -7
- package/src/assets/svgs/clean.svg +0 -8
- package/src/assets/svgs/code-block.svg +0 -5
- package/src/assets/svgs/code.svg +0 -25
- package/src/assets/svgs/color.svg +0 -7
- package/src/assets/svgs/direction-ltr.svg +0 -8
- package/src/assets/svgs/direction-rtl.svg +0 -8
- package/src/assets/svgs/divider.svg +0 -4
- package/src/assets/svgs/emoji.svg +0 -53
- package/src/assets/svgs/file.svg +0 -12
- package/src/assets/svgs/format-painter.svg +0 -10
- package/src/assets/svgs/formula.svg +0 -6
- package/src/assets/svgs/fullscreen.svg +0 -43
- package/src/assets/svgs/image.svg +0 -17
- package/src/assets/svgs/italic.svg +0 -6
- package/src/assets/svgs/link.svg +0 -9
- package/src/assets/svgs/list-bullet.svg +0 -16
- package/src/assets/svgs/list-ordered.svg +0 -18
- package/src/assets/svgs/list-task.svg +0 -5
- package/src/assets/svgs/redo.svg +0 -8
- package/src/assets/svgs/screenshot.svg +0 -17
- package/src/assets/svgs/script-sub.svg +0 -15
- package/src/assets/svgs/script-super.svg +0 -15
- package/src/assets/svgs/strike.svg +0 -6
- package/src/assets/svgs/underline.svg +0 -13
- package/src/assets/svgs/undo.svg +0 -8
- package/src/assets/svgs/video.svg +0 -10
- package/src/assets/tasklist.scss +0 -76
- package/src/assets/toolbar.scss +0 -385
- package/src/assets/variable.scss +0 -9
- package/src/assets/video.scss +0 -5
- package/src/attributors/font-size.ts +0 -6
- package/src/attributors/font-style.ts +0 -6
- package/src/attributors/index.ts +0 -4
- package/src/attributors/line-height.ts +0 -6
- package/src/attributors/text-indent.ts +0 -6
- package/src/config/base64-image.ts +0 -5
- package/src/config/editor.config.ts +0 -86
- package/src/config/editor.utils.ts +0 -193
- package/src/config/i18n/en-us.ts +0 -138
- package/src/config/i18n/zh-cn.ts +0 -137
- package/src/config/index.ts +0 -44
- package/src/config/types/editor-config.interface.ts +0 -16
- package/src/config/types/editor-modules.interface.ts +0 -47
- package/src/config/types/index.ts +0 -3
- package/src/config/types/type.ts +0 -2
- package/src/core/fluent-editor.ts +0 -31
- package/src/fluent-editor.ts +0 -72
- package/src/formats/emoji.ts +0 -10
- package/src/formats/index.ts +0 -4
- package/src/formats/soft-break.ts +0 -27
- package/src/formats/strike.ts +0 -11
- package/src/formats/video.ts +0 -53
- package/src/index.ts +0 -9
- package/src/modules/ai/constants.ts +0 -43
- package/src/modules/ai/icons.ts +0 -333
- package/src/modules/ai/index.ts +0 -850
- package/src/modules/ai/types.ts +0 -18
- package/src/modules/collaborative-editing/awareness/awareness.ts +0 -141
- package/src/modules/collaborative-editing/awareness/index.ts +0 -2
- package/src/modules/collaborative-editing/awareness/y-indexeddb.ts +0 -12
- package/src/modules/collaborative-editing/collaborative-editing.ts +0 -115
- package/src/modules/collaborative-editing/index.ts +0 -2
- package/src/modules/collaborative-editing/module.ts +0 -32
- package/src/modules/collaborative-editing/provider/index.ts +0 -3
- package/src/modules/collaborative-editing/provider/providerRegistry.ts +0 -57
- package/src/modules/collaborative-editing/provider/webrtc.ts +0 -125
- package/src/modules/collaborative-editing/provider/websocket.ts +0 -142
- package/src/modules/collaborative-editing/types.ts +0 -44
- package/src/modules/counter.ts +0 -84
- package/src/modules/custom-clipboard.ts +0 -537
- package/src/modules/custom-image/actions/action.ts +0 -15
- package/src/modules/custom-image/actions/custom-resize-action.ts +0 -207
- package/src/modules/custom-image/actions/delete-action.ts +0 -32
- package/src/modules/custom-image/actions/image-toolbar-buttons.ts +0 -135
- package/src/modules/custom-image/actions/index.ts +0 -6
- package/src/modules/custom-image/actions/toolbar-action.ts +0 -32
- package/src/modules/custom-image/actions/toolbar.ts +0 -145
- package/src/modules/custom-image/blot-formatter.ts +0 -158
- package/src/modules/custom-image/image.ts +0 -132
- package/src/modules/custom-image/index.ts +0 -4
- package/src/modules/custom-image/options.ts +0 -139
- package/src/modules/custom-image/specs/blot-spec.ts +0 -30
- package/src/modules/custom-image/specs/custom-image-spec.ts +0 -131
- package/src/modules/custom-image/specs/image-spec.ts +0 -28
- package/src/modules/custom-image/specs/index.ts +0 -3
- package/src/modules/custom-uploader.ts +0 -101
- package/src/modules/divider.ts +0 -15
- package/src/modules/emoji.ts +0 -230
- package/src/modules/file/formats/file.ts +0 -61
- package/src/modules/file/index.ts +0 -3
- package/src/modules/file/modules/file-bar.ts +0 -146
- package/src/modules/file/modules/file-module.ts +0 -33
- package/src/modules/i18n.ts +0 -66
- package/src/modules/index.ts +0 -16
- package/src/modules/link/formats/link.ts +0 -43
- package/src/modules/link/index.ts +0 -2
- package/src/modules/link/modules/tooltip.ts +0 -341
- package/src/modules/mathlive/formats.ts +0 -39
- package/src/modules/mathlive/index.ts +0 -3
- package/src/modules/mathlive/module.ts +0 -37
- package/src/modules/mathlive/tooltip.ts +0 -87
- package/src/modules/mention/constants.ts +0 -3
- package/src/modules/mention/index.ts +0 -2
- package/src/modules/mention/mention-link.ts +0 -64
- package/src/modules/mention/mention.ts +0 -404
- package/src/modules/shortcut-key/index.ts +0 -237
- package/src/modules/syntax.ts +0 -35
- package/src/modules/table-up/index.ts +0 -83
- package/src/modules/toolbar/better-picker.ts +0 -67
- package/src/modules/toolbar/better-toolbar.ts +0 -176
- package/src/modules/toolbar/index.ts +0 -3
- package/src/modules/toolbar/toolbar-tip.ts +0 -142
- package/src/themes/snow.ts +0 -309
- package/src/tools/format-painter.ts +0 -85
- package/src/tools/fullscreen.ts +0 -66
- package/src/tools/screenshot.ts +0 -231
- package/src/ui/icons.config.ts +0 -361
- package/src/ui/icons.ts +0 -89
- package/src/utils/debounce.ts +0 -150
- package/src/utils/image.ts +0 -22
- package/src/utils/is.ts +0 -9
- package/src/utils/method.ts +0 -77
- package/src/utils/scroll-lock.ts +0 -52
- package/tsconfig.json +0 -25
- package/vite.config.ts +0 -83
- /package/{dist/README.md → README.md} +0 -0
- /package/{dist/es → es}/attributors/font-size.es.js +0 -0
- /package/{dist/es → es}/attributors/font-size.es.js.map +0 -0
- /package/{dist/es → es}/attributors/font-style.es.js +0 -0
- /package/{dist/es → es}/attributors/font-style.es.js.map +0 -0
- /package/{dist/es → es}/attributors/index.es.js +0 -0
- /package/{dist/es → es}/attributors/index.es.js.map +0 -0
- /package/{dist/es → es}/attributors/line-height.es.js +0 -0
- /package/{dist/es → es}/attributors/line-height.es.js.map +0 -0
- /package/{dist/es → es}/attributors/text-indent.es.js +0 -0
- /package/{dist/es → es}/attributors/text-indent.es.js.map +0 -0
- /package/{dist/es → es}/config/base64-image.es.js +0 -0
- /package/{dist/es → es}/config/base64-image.es.js.map +0 -0
- /package/{dist/es → es}/config/editor.utils.es.js +0 -0
- /package/{dist/es → es}/config/types/editor-config.interface.es.js +0 -0
- /package/{dist/es → es}/config/types/editor-config.interface.es.js.map +0 -0
- /package/{dist/es → es}/config/types/editor-modules.interface.es.js +0 -0
- /package/{dist/es → es}/config/types/editor-modules.interface.es.js.map +0 -0
- /package/{dist/es → es}/config/types/index.es.js +0 -0
- /package/{dist/es → es}/config/types/index.es.js.map +0 -0
- /package/{dist/es → es}/config/types/type.es.js +0 -0
- /package/{dist/es → es}/config/types/type.es.js.map +0 -0
- /package/{dist/es → es}/core/fluent-editor.es.js +0 -0
- /package/{dist/es → es}/formats/emoji.es.js +0 -0
- /package/{dist/es → es}/formats/emoji.es.js.map +0 -0
- /package/{dist/es → es}/formats/index.es.js +0 -0
- /package/{dist/es → es}/formats/index.es.js.map +0 -0
- /package/{dist/es → es}/formats/soft-break.es.js +0 -0
- /package/{dist/es → es}/formats/strike.es.js +0 -0
- /package/{dist/es → es}/formats/strike.es.js.map +0 -0
- /package/{dist/es → es}/formats/video.es.js +0 -0
- /package/{dist/es → es}/modules/ai/constants.es.js +0 -0
- /package/{dist/es → es}/modules/ai/icons.es.js +0 -0
- /package/{dist/es → es}/modules/ai/icons.es.js.map +0 -0
- /package/{dist/es → es}/modules/collaborative-editing/awareness/index.es.js +0 -0
- /package/{dist/es → es}/modules/collaborative-editing/awareness/index.es.js.map +0 -0
- /package/{dist/es → es}/modules/collaborative-editing/index.es.js +0 -0
- /package/{dist/es → es}/modules/collaborative-editing/index.es.js.map +0 -0
- /package/{dist/es → es}/modules/collaborative-editing/module.es.js +0 -0
- /package/{dist/es → es}/modules/collaborative-editing/provider/providerRegistry.es.js +0 -0
- /package/{dist/es → es}/modules/collaborative-editing/types.es.js +0 -0
- /package/{dist/es → es}/modules/collaborative-editing/types.es.js.map +0 -0
- /package/{dist/es → es}/modules/counter.es.js +0 -0
- /package/{dist/es → es}/modules/custom-clipboard.es.js +0 -0
- /package/{dist/es → es}/modules/custom-image/actions/action.es.js +0 -0
- /package/{dist/es → es}/modules/custom-image/actions/custom-resize-action.es.js +0 -0
- /package/{dist/es → es}/modules/custom-image/actions/delete-action.es.js +0 -0
- /package/{dist/es → es}/modules/custom-image/actions/index.es.js +0 -0
- /package/{dist/es → es}/modules/custom-image/actions/index.es.js.map +0 -0
- /package/{dist/es → es}/modules/custom-image/actions/toolbar-action.es.js +0 -0
- /package/{dist/es → es}/modules/custom-image/actions/toolbar.es.js +0 -0
- /package/{dist/es → es}/modules/custom-image/image.es.js +0 -0
- /package/{dist/es → es}/modules/custom-image/index.es.js +0 -0
- /package/{dist/es → es}/modules/custom-image/index.es.js.map +0 -0
- /package/{dist/es → es}/modules/custom-image/options.es.js +0 -0
- /package/{dist/es → es}/modules/custom-image/specs/blot-spec.es.js +0 -0
- /package/{dist/es → es}/modules/custom-image/specs/custom-image-spec.es.js +0 -0
- /package/{dist/es → es}/modules/custom-image/specs/image-spec.es.js +0 -0
- /package/{dist/es → es}/modules/custom-image/specs/index.es.js +0 -0
- /package/{dist/es → es}/modules/custom-image/specs/index.es.js.map +0 -0
- /package/{dist/es → es}/modules/custom-uploader.es.js +0 -0
- /package/{dist/es → es}/modules/divider.es.js +0 -0
- /package/{dist/es → es}/modules/file/formats/file.es.js +0 -0
- /package/{dist/es → es}/modules/file/index.es.js +0 -0
- /package/{dist/es → es}/modules/file/index.es.js.map +0 -0
- /package/{dist/es → es}/modules/file/modules/file-bar.es.js +0 -0
- /package/{dist/es → es}/modules/file/modules/file-module.es.js +0 -0
- /package/{dist/es → es}/modules/i18n.es.js +0 -0
- /package/{dist/es → es}/modules/link/formats/link.es.js +0 -0
- /package/{dist/es → es}/modules/link/index.es.js +0 -0
- /package/{dist/es → es}/modules/link/index.es.js.map +0 -0
- /package/{dist/es → es}/modules/link/modules/tooltip.es.js +0 -0
- /package/{dist/es → es}/modules/mathlive/formats.es.js +0 -0
- /package/{dist/es → es}/modules/mathlive/index.es.js +0 -0
- /package/{dist/es → es}/modules/mathlive/index.es.js.map +0 -0
- /package/{dist/es → es}/modules/mathlive/module.es.js +0 -0
- /package/{dist/es → es}/modules/mathlive/tooltip.es.js +0 -0
- /package/{dist/es → es}/modules/mention/constants.es.js +0 -0
- /package/{dist/es → es}/modules/mention/constants.es.js.map +0 -0
- /package/{dist/es → es}/modules/mention/index.es.js +0 -0
- /package/{dist/es → es}/modules/mention/index.es.js.map +0 -0
- /package/{dist/es → es}/modules/mention/mention-link.es.js +0 -0
- /package/{dist/es → es}/modules/mention/mention.es.js +0 -0
- /package/{dist/es → es}/modules/syntax.es.js +0 -0
- /package/{dist/es → es}/modules/table-up/index.es.js +0 -0
- /package/{dist/es → es}/modules/toolbar/better-picker.es.js +0 -0
- /package/{dist/es → es}/modules/toolbar/better-toolbar.es.js +0 -0
- /package/{dist/es → es}/modules/toolbar/index.es.js +0 -0
- /package/{dist/es → es}/modules/toolbar/index.es.js.map +0 -0
- /package/{dist/es → es}/modules/toolbar/toolbar-tip.es.js +0 -0
- /package/{dist/es → es}/themes/snow.es.js +0 -0
- /package/{dist/es → es}/tools/format-painter.es.js +0 -0
- /package/{dist/es → es}/tools/fullscreen.es.js +0 -0
- /package/{dist/es → es}/tools/screenshot.es.js +0 -0
- /package/{dist/es → es}/utils/debounce.es.js +0 -0
- /package/{dist/es → es}/utils/image.es.js +0 -0
- /package/{dist/es → es}/utils/is.es.js +0 -0
- /package/{dist/es → es}/utils/method.es.js +0 -0
- /package/{dist/es → es}/utils/scroll-lock.es.js +0 -0
- /package/{dist/lib → lib}/attributors/font-size.cjs.js +0 -0
- /package/{dist/lib → lib}/attributors/font-size.cjs.js.map +0 -0
- /package/{dist/lib → lib}/attributors/font-style.cjs.js +0 -0
- /package/{dist/lib → lib}/attributors/font-style.cjs.js.map +0 -0
- /package/{dist/lib → lib}/attributors/index.cjs.js +0 -0
- /package/{dist/lib → lib}/attributors/index.cjs.js.map +0 -0
- /package/{dist/lib → lib}/attributors/line-height.cjs.js +0 -0
- /package/{dist/lib → lib}/attributors/line-height.cjs.js.map +0 -0
- /package/{dist/lib → lib}/attributors/text-indent.cjs.js +0 -0
- /package/{dist/lib → lib}/attributors/text-indent.cjs.js.map +0 -0
- /package/{dist/lib → lib}/config/base64-image.cjs.js +0 -0
- /package/{dist/lib → lib}/config/base64-image.cjs.js.map +0 -0
- /package/{dist/lib → lib}/config/editor.utils.cjs.js +0 -0
- /package/{dist/lib → lib}/config/types/editor-config.interface.cjs.js +0 -0
- /package/{dist/lib → lib}/config/types/editor-config.interface.cjs.js.map +0 -0
- /package/{dist/lib → lib}/config/types/editor-modules.interface.cjs.js +0 -0
- /package/{dist/lib → lib}/config/types/editor-modules.interface.cjs.js.map +0 -0
- /package/{dist/lib → lib}/config/types/index.cjs.js +0 -0
- /package/{dist/lib → lib}/config/types/index.cjs.js.map +0 -0
- /package/{dist/lib → lib}/config/types/type.cjs.js +0 -0
- /package/{dist/lib → lib}/config/types/type.cjs.js.map +0 -0
- /package/{dist/lib → lib}/core/fluent-editor.cjs.js +0 -0
- /package/{dist/lib → lib}/formats/emoji.cjs.js +0 -0
- /package/{dist/lib → lib}/formats/emoji.cjs.js.map +0 -0
- /package/{dist/lib → lib}/formats/index.cjs.js +0 -0
- /package/{dist/lib → lib}/formats/index.cjs.js.map +0 -0
- /package/{dist/lib → lib}/formats/soft-break.cjs.js +0 -0
- /package/{dist/lib → lib}/formats/strike.cjs.js +0 -0
- /package/{dist/lib → lib}/formats/strike.cjs.js.map +0 -0
- /package/{dist/lib → lib}/formats/video.cjs.js +0 -0
- /package/{dist/lib → lib}/modules/ai/constants.cjs.js +0 -0
- /package/{dist/lib → lib}/modules/ai/icons.cjs.js +0 -0
- /package/{dist/lib → lib}/modules/ai/icons.cjs.js.map +0 -0
- /package/{dist/lib → lib}/modules/ai/index.cjs.js +0 -0
- /package/{dist/lib → lib}/modules/collaborative-editing/awareness/index.cjs.js +0 -0
- /package/{dist/lib → lib}/modules/collaborative-editing/awareness/index.cjs.js.map +0 -0
- /package/{dist/lib → lib}/modules/collaborative-editing/index.cjs.js +0 -0
- /package/{dist/lib → lib}/modules/collaborative-editing/index.cjs.js.map +0 -0
- /package/{dist/lib → lib}/modules/collaborative-editing/module.cjs.js +0 -0
- /package/{dist/lib → lib}/modules/collaborative-editing/provider/providerRegistry.cjs.js +0 -0
- /package/{dist/lib → lib}/modules/collaborative-editing/types.cjs.js +0 -0
- /package/{dist/lib → lib}/modules/collaborative-editing/types.cjs.js.map +0 -0
- /package/{dist/lib → lib}/modules/counter.cjs.js +0 -0
- /package/{dist/lib → lib}/modules/custom-clipboard.cjs.js +0 -0
- /package/{dist/lib → lib}/modules/custom-image/actions/action.cjs.js +0 -0
- /package/{dist/lib → lib}/modules/custom-image/actions/custom-resize-action.cjs.js +0 -0
- /package/{dist/lib → lib}/modules/custom-image/actions/delete-action.cjs.js +0 -0
- /package/{dist/lib → lib}/modules/custom-image/actions/image-toolbar-buttons.cjs.js +0 -0
- /package/{dist/lib → lib}/modules/custom-image/actions/index.cjs.js +0 -0
- /package/{dist/lib → lib}/modules/custom-image/actions/index.cjs.js.map +0 -0
- /package/{dist/lib → lib}/modules/custom-image/actions/toolbar-action.cjs.js +0 -0
- /package/{dist/lib → lib}/modules/custom-image/actions/toolbar.cjs.js +0 -0
- /package/{dist/lib → lib}/modules/custom-image/image.cjs.js +0 -0
- /package/{dist/lib → lib}/modules/custom-image/index.cjs.js +0 -0
- /package/{dist/lib → lib}/modules/custom-image/index.cjs.js.map +0 -0
- /package/{dist/lib → lib}/modules/custom-image/options.cjs.js +0 -0
- /package/{dist/lib → lib}/modules/custom-image/specs/blot-spec.cjs.js +0 -0
- /package/{dist/lib → lib}/modules/custom-image/specs/custom-image-spec.cjs.js +0 -0
- /package/{dist/lib → lib}/modules/custom-image/specs/image-spec.cjs.js +0 -0
- /package/{dist/lib → lib}/modules/custom-image/specs/index.cjs.js +0 -0
- /package/{dist/lib → lib}/modules/custom-image/specs/index.cjs.js.map +0 -0
- /package/{dist/lib → lib}/modules/custom-uploader.cjs.js +0 -0
- /package/{dist/lib → lib}/modules/divider.cjs.js +0 -0
- /package/{dist/lib → lib}/modules/file/formats/file.cjs.js +0 -0
- /package/{dist/lib → lib}/modules/file/index.cjs.js +0 -0
- /package/{dist/lib → lib}/modules/file/index.cjs.js.map +0 -0
- /package/{dist/lib → lib}/modules/file/modules/file-bar.cjs.js +0 -0
- /package/{dist/lib → lib}/modules/file/modules/file-module.cjs.js +0 -0
- /package/{dist/lib → lib}/modules/i18n.cjs.js +0 -0
- /package/{dist/lib → lib}/modules/link/formats/link.cjs.js +0 -0
- /package/{dist/lib → lib}/modules/link/index.cjs.js +0 -0
- /package/{dist/lib → lib}/modules/link/index.cjs.js.map +0 -0
- /package/{dist/lib → lib}/modules/link/modules/tooltip.cjs.js +0 -0
- /package/{dist/lib → lib}/modules/mathlive/formats.cjs.js +0 -0
- /package/{dist/lib → lib}/modules/mathlive/index.cjs.js +0 -0
- /package/{dist/lib → lib}/modules/mathlive/index.cjs.js.map +0 -0
- /package/{dist/lib → lib}/modules/mathlive/module.cjs.js +0 -0
- /package/{dist/lib → lib}/modules/mathlive/tooltip.cjs.js +0 -0
- /package/{dist/lib → lib}/modules/mention/constants.cjs.js +0 -0
- /package/{dist/lib → lib}/modules/mention/constants.cjs.js.map +0 -0
- /package/{dist/lib → lib}/modules/mention/index.cjs.js +0 -0
- /package/{dist/lib → lib}/modules/mention/index.cjs.js.map +0 -0
- /package/{dist/lib → lib}/modules/mention/mention-link.cjs.js +0 -0
- /package/{dist/lib → lib}/modules/mention/mention.cjs.js +0 -0
- /package/{dist/lib → lib}/modules/syntax.cjs.js +0 -0
- /package/{dist/lib → lib}/modules/table-up/index.cjs.js +0 -0
- /package/{dist/lib → lib}/modules/toolbar/better-picker.cjs.js +0 -0
- /package/{dist/lib → lib}/modules/toolbar/better-toolbar.cjs.js +0 -0
- /package/{dist/lib → lib}/modules/toolbar/index.cjs.js +0 -0
- /package/{dist/lib → lib}/modules/toolbar/index.cjs.js.map +0 -0
- /package/{dist/lib → lib}/modules/toolbar/toolbar-tip.cjs.js +0 -0
- /package/{dist/lib → lib}/themes/snow.cjs.js +0 -0
- /package/{dist/lib → lib}/tools/format-painter.cjs.js +0 -0
- /package/{dist/lib → lib}/tools/fullscreen.cjs.js +0 -0
- /package/{dist/lib → lib}/tools/screenshot.cjs.js +0 -0
- /package/{dist/lib → lib}/utils/debounce.cjs.js +0 -0
- /package/{dist/lib → lib}/utils/image.cjs.js +0 -0
- /package/{dist/lib → lib}/utils/is.cjs.js +0 -0
- /package/{dist/lib → lib}/utils/method.cjs.js +0 -0
- /package/{dist/lib → lib}/utils/scroll-lock.cjs.js +0 -0
- /package/{dist/types → types}/attributors/font-size.d.ts +0 -0
- /package/{dist/types → types}/attributors/font-style.d.ts +0 -0
- /package/{dist/types → types}/attributors/index.d.ts +0 -0
- /package/{dist/types → types}/attributors/line-height.d.ts +0 -0
- /package/{dist/types → types}/attributors/text-indent.d.ts +0 -0
- /package/{dist/types → types}/config/base64-image.d.ts +0 -0
- /package/{dist/types → types}/config/editor.utils.d.ts +0 -0
- /package/{dist/types → types}/config/index.d.ts +0 -0
- /package/{dist/types → types}/config/types/editor-config.interface.d.ts +0 -0
- /package/{dist/types → types}/config/types/index.d.ts +0 -0
- /package/{dist/types → types}/config/types/type.d.ts +0 -0
- /package/{dist/types → types}/core/fluent-editor.d.ts +0 -0
- /package/{dist/types → types}/fluent-editor.d.ts +0 -0
- /package/{dist/types → types}/formats/emoji.d.ts +0 -0
- /package/{dist/types → types}/formats/index.d.ts +0 -0
- /package/{dist/types → types}/formats/soft-break.d.ts +0 -0
- /package/{dist/types → types}/formats/strike.d.ts +0 -0
- /package/{dist/types → types}/formats/video.d.ts +0 -0
- /package/{dist/types → types}/modules/ai/constants.d.ts +0 -0
- /package/{dist/types → types}/modules/ai/icons.d.ts +0 -0
- /package/{dist/types → types}/modules/ai/index.d.ts +0 -0
- /package/{dist/types → types}/modules/ai/types.d.ts +0 -0
- /package/{dist/types → types}/modules/collaborative-editing/awareness/index.d.ts +0 -0
- /package/{dist/types → types}/modules/collaborative-editing/index.d.ts +0 -0
- /package/{dist/types → types}/modules/collaborative-editing/module.d.ts +0 -0
- /package/{dist/types → types}/modules/collaborative-editing/provider/index.d.ts +0 -0
- /package/{dist/types → types}/modules/counter.d.ts +0 -0
- /package/{dist/types → types}/modules/custom-clipboard.d.ts +0 -0
- /package/{dist/types → types}/modules/custom-image/actions/action.d.ts +0 -0
- /package/{dist/types → types}/modules/custom-image/actions/custom-resize-action.d.ts +0 -0
- /package/{dist/types → types}/modules/custom-image/actions/delete-action.d.ts +0 -0
- /package/{dist/types → types}/modules/custom-image/actions/image-toolbar-buttons.d.ts +0 -0
- /package/{dist/types → types}/modules/custom-image/actions/index.d.ts +0 -0
- /package/{dist/types → types}/modules/custom-image/actions/toolbar-action.d.ts +0 -0
- /package/{dist/types → types}/modules/custom-image/actions/toolbar.d.ts +0 -0
- /package/{dist/types → types}/modules/custom-image/blot-formatter.d.ts +0 -0
- /package/{dist/types → types}/modules/custom-image/image.d.ts +0 -0
- /package/{dist/types → types}/modules/custom-image/index.d.ts +0 -0
- /package/{dist/types → types}/modules/custom-image/options.d.ts +0 -0
- /package/{dist/types → types}/modules/custom-image/specs/blot-spec.d.ts +0 -0
- /package/{dist/types → types}/modules/custom-image/specs/custom-image-spec.d.ts +0 -0
- /package/{dist/types → types}/modules/custom-image/specs/image-spec.d.ts +0 -0
- /package/{dist/types → types}/modules/custom-image/specs/index.d.ts +0 -0
- /package/{dist/types → types}/modules/custom-uploader.d.ts +0 -0
- /package/{dist/types → types}/modules/divider.d.ts +0 -0
- /package/{dist/types → types}/modules/emoji.d.ts +0 -0
- /package/{dist/types → types}/modules/file/formats/file.d.ts +0 -0
- /package/{dist/types → types}/modules/file/index.d.ts +0 -0
- /package/{dist/types → types}/modules/file/modules/file-bar.d.ts +0 -0
- /package/{dist/types → types}/modules/file/modules/file-module.d.ts +0 -0
- /package/{dist/types → types}/modules/i18n.d.ts +0 -0
- /package/{dist/types → types}/modules/link/formats/link.d.ts +0 -0
- /package/{dist/types → types}/modules/link/index.d.ts +0 -0
- /package/{dist/types → types}/modules/link/modules/tooltip.d.ts +0 -0
- /package/{dist/types → types}/modules/mathlive/formats.d.ts +0 -0
- /package/{dist/types → types}/modules/mathlive/index.d.ts +0 -0
- /package/{dist/types → types}/modules/mathlive/module.d.ts +0 -0
- /package/{dist/types → types}/modules/mathlive/tooltip.d.ts +0 -0
- /package/{dist/types → types}/modules/mention/constants.d.ts +0 -0
- /package/{dist/types → types}/modules/mention/index.d.ts +0 -0
- /package/{dist/types → types}/modules/mention/mention-link.d.ts +0 -0
- /package/{dist/types → types}/modules/mention/mention.d.ts +0 -0
- /package/{dist/types → types}/modules/shortcut-key/index.d.ts +0 -0
- /package/{dist/types → types}/modules/syntax.d.ts +0 -0
- /package/{dist/types → types}/modules/table-up/index.d.ts +0 -0
- /package/{dist/types → types}/modules/toolbar/better-picker.d.ts +0 -0
- /package/{dist/types → types}/modules/toolbar/better-toolbar.d.ts +0 -0
- /package/{dist/types → types}/modules/toolbar/index.d.ts +0 -0
- /package/{dist/types → types}/modules/toolbar/toolbar-tip.d.ts +0 -0
- /package/{dist/types → types}/themes/snow.d.ts +0 -0
- /package/{dist/types → types}/tools/format-painter.d.ts +0 -0
- /package/{dist/types → types}/tools/fullscreen.d.ts +0 -0
- /package/{dist/types → types}/tools/screenshot.d.ts +0 -0
- /package/{dist/types → types}/ui/icons.d.ts +0 -0
- /package/{dist/types → types}/utils/debounce.d.ts +0 -0
- /package/{dist/types → types}/utils/image.d.ts +0 -0
- /package/{dist/types → types}/utils/is.d.ts +0 -0
- /package/{dist/types → types}/utils/method.d.ts +0 -0
- /package/{dist/types → types}/utils/scroll-lock.d.ts +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.es.js","sources":["../../../../src/modules/ai/index.ts"],"sourcesContent":["import type TypeToolbar from 'quill/modules/toolbar'\nimport type FluentEditor from '../../core/fluent-editor'\nimport type { AIOptions, OperationMenuItem, ResultMenuItem } from './types'\nimport {\n CLOSE,\n INPUT_PLACEHOLDER,\n INSERT_SUB_CONTENT_TEXT,\n INSERT_TEXT,\n MENU_ID_MAP,\n MENU_TITLE_DATA,\n REGENERATE,\n REPLACE_SELECT,\n RESULT_HEADER_TEXT,\n SELECT_PLACEHOLDER,\n STOP_ANSWER,\n THINK_TEXT,\n} from './constants'\nimport {\n ADJUST_ICON,\n AI_ICON,\n CALL_ICON,\n CLOSE_ICON,\n COPY_ICON,\n EDITOR_ICON,\n INSERT_ICON,\n MENU_CLOSE_ICON,\n REBUILD_ICON,\n REFRESH_ICON,\n REPLACE_SELECT_ICON,\n RIGHT_ARROW_ICON,\n SEND_BTN_ICON,\n STOP_ICON,\n THINK_ICON,\n} from './icons'\n\nexport class AI {\n toolbar: TypeToolbar\n host: string\n apiKey: string\n model: string\n message: string\n isBreak: boolean = false // 打断标记\n textNumber: number // 文本字数限制\n private _isSelectRangeMode: boolean = false // 选择/点击模式\n private _charCount: number = 0 // 文本字数\n private _debounceTimer = null\n private _inputPlaceholder: string = ''\n private _showOperationMenu: boolean = false\n private _isThinking: boolean = false // 思考中\n private _showResultPopupEl: boolean = false // 结果弹窗\n selectedText: string = '' // 选择的文本\n inputValue: string = '' // 存储输入框的值\n resultMenuList: ResultMenuItem[] = []\n operationMenuList: OperationMenuItem[] = []\n private _operationMenuItemList: OperationMenuItem[] = []\n\n private alertEl: HTMLDivElement | null = null\n private alertTimer: number | null = null\n private selectionBubbleEl: HTMLDivElement | null = null\n private selectionRange: any = null\n private dialogContainerEl: HTMLDivElement | null = null\n private wrapContainerEl: HTMLDivElement | null = null\n private aiIconEl: HTMLSpanElement | null = null\n private inputContainerEl: HTMLDivElement | null = null\n private inputEl: HTMLInputElement | null = null\n private menuContainerEl: HTMLDivElement | null = null\n private subMenuEl: HTMLDivElement | null = null\n private subMenuEditorEl: HTMLDivElement | null = null\n private subMenuToneEl: HTMLDivElement | null = null\n private subMenuAdjustEl: HTMLDivElement | null = null\n private inputRightEl: HTMLDivElement | null = null\n private inputSendBtnEl: HTMLSpanElement | null = null\n private inputCloseBtnEl: HTMLSpanElement | null = null\n private thinkContainerEl: HTMLDivElement | null = null // 思考元素\n private thinkBtnEl: HTMLDivElement | null = null\n private resultPopupEl: HTMLDivElement | null = null\n private resultPopupHeaderEl: HTMLDivElement | null = null\n private resultPopupContentEl: HTMLDivElement | null = null\n private resultPopupFooterEl: HTMLDivElement | null = null\n private resultPopupFooterTextEl: HTMLSpanElement | null = null\n private resultRefreshBtnEl: HTMLSpanElement | null = null\n private resultCopyBtnEl: HTMLSpanElement | null = null\n // 分享和朗读功能待放开\n // private resultShareBtnEl: HTMLSpanElement | null = null\n // private resultVoiceBtnEl: HTMLSpanElement | null = null\n private actionMenuEl: HTMLDivElement | null = null\n\n constructor(\n public quill: FluentEditor,\n public options: AIOptions,\n ) {\n this.quill = quill\n this.toolbar = quill.getModule('toolbar') as TypeToolbar\n // 添加AI按钮到工具栏\n if (typeof this.toolbar !== 'undefined') {\n this.toolbar.addHandler('ai', this.showAIInput.bind(this))\n }\n\n this.quill.on('selection-change', this.handleSelectionChange.bind(this))\n\n this.host = options.host || 'https://api.deepseek.com/v1'\n this.apiKey = options.apiKey\n this.model = options.model || 'deepseek-chat'\n this.textNumber = options.contentMaxLength || 5000\n\n this.resultMenuList = [\n { text: REPLACE_SELECT, icon: REPLACE_SELECT_ICON },\n { text: INSERT_TEXT, icon: INSERT_ICON, selectText: INSERT_SUB_CONTENT_TEXT },\n { text: REGENERATE, icon: REBUILD_ICON },\n { text: CLOSE, icon: MENU_CLOSE_ICON },\n ]\n\n this.operationMenuList = [\n { id: 'editor', text: '编辑调整内容', icon: EDITOR_ICON },\n { id: 'tone', text: '改写口吻', icon: CALL_ICON },\n { id: 'adjust', text: '整理选区内容', icon: ADJUST_ICON },\n ]\n }\n\n // 工具栏启动\n showAIInput() {\n // 创建输入框和结果弹窗\n this.create()\n\n this.selectionRange = this.quill.getSelection()\n if (this.selectionRange.length) {\n this.isSelectRangeMode = true\n }\n else {\n this.isSelectRangeMode = false\n }\n // 定位到编辑器焦点位置\n this.positionElements()\n\n // 添加ESC键监听\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n this.closeAIPanel()\n this.quill.container.removeEventListener('keydown', handleKeyDown)\n }\n }\n this.quill.container.addEventListener('keydown', handleKeyDown)\n }\n\n // 气泡启动\n private selectTextEvent() {\n if (!this.selectionRange) return\n this.create()\n // 定位到编辑器焦点位置\n this.positionElements()\n\n this.isSelectRangeMode = true\n }\n\n private create() {\n this.createResultElement()\n this.createOperationMenuElements()\n this.createInputBoxElements()\n\n // 创建事件监听\n this.addInputEvent()\n this.addResultEvent()\n this.handleActionMenuDisplay()\n // 添加到编辑器\n this.quill.container.appendChild(this.dialogContainerEl)\n }\n\n // 创建结果弹窗\n private createResultElement() {\n if (!this.resultPopupEl) {\n this.resultPopupEl = document.createElement('div')\n this.resultPopupEl.className = 'ql-ai-result'\n this.resultPopupHeaderEl = document.createElement('div')\n this.resultPopupHeaderEl.className = 'ql-ai-result-header'\n this.resultPopupHeaderEl.textContent = RESULT_HEADER_TEXT\n this.resultPopupContentEl = document.createElement('div')\n this.resultPopupContentEl.className = 'ql-ai-result-content'\n this.resultPopupFooterEl = document.createElement('div')\n this.resultPopupFooterEl.className = 'ql-ai-result-footer'\n this.resultPopupFooterTextEl = document.createElement('span')\n this.resultPopupFooterTextEl.className = 'ql-ai-result-footer-text'\n this.resultPopupFooterTextEl.textContent = `0`\n this.resultRefreshBtnEl = document.createElement('span')\n this.resultRefreshBtnEl.className = 'ql-ai-result-footer-refresh'\n this.resultRefreshBtnEl.innerHTML = REFRESH_ICON\n this.resultCopyBtnEl = document.createElement('span')\n this.resultCopyBtnEl.className = 'ql-ai-result-footer-copy'\n this.resultCopyBtnEl.innerHTML = COPY_ICON\n\n // 分享和朗读功能待放开\n // this.resultShareBtnEl = document.createElement('span')\n // this.resultShareBtnEl.className = 'ql-ai-result-footer-share'\n // this.resultShareBtnEl.innerHTML = SHARE_ICON\n // this.resultVoiceBtnEl = document.createElement('span')\n // this.resultVoiceBtnEl.className = 'ql-ai-result-footer-voice'\n // this.resultVoiceBtnEl.innerHTML = VOICE_ICON\n const resultFooterRightEl: HTMLDivElement = document.createElement('div')\n resultFooterRightEl.className = 'ql-ai-result-footer-right'\n resultFooterRightEl.appendChild(this.resultRefreshBtnEl)\n resultFooterRightEl.appendChild(this.resultCopyBtnEl)\n // 分享和朗读功能待放开\n // resultFooterRightEl.appendChild(this.resultShareBtnEl)\n // resultFooterRightEl.appendChild(this.resultVoiceBtnEl)\n this.resultPopupFooterEl.appendChild(this.resultPopupFooterTextEl)\n this.resultPopupFooterEl.appendChild(resultFooterRightEl)\n this.resultPopupEl.appendChild(this.resultPopupHeaderEl)\n this.resultPopupEl.appendChild(this.resultPopupContentEl)\n this.resultPopupEl.appendChild(this.resultPopupFooterEl)\n }\n this.showResultPopupEl = false\n }\n\n private createOperationMenuElements() {\n if (!this.menuContainerEl) {\n // 创建操作菜单容器\n this.menuContainerEl = document.createElement('div')\n this.menuContainerEl.className = 'ql-ai-menu-container'\n\n // 创建主菜单\n const mainMenu = document.createElement('div')\n mainMenu.className = 'ql-ai-main-menu'\n this.operationMenuList.forEach(({ text, icon, id }) => {\n const menuItem = document.createElement('div')\n menuItem.className = 'ql-ai-menu-item'\n menuItem.innerHTML = `${icon}<span>${text}</span>${RIGHT_ARROW_ICON}`\n menuItem.addEventListener('mouseenter', (e) => {\n e.stopPropagation()\n this.subMenuEl.style.display = 'block'\n this.subMenuEl.className = `ql-ai-sub-menu ${id}`\n this.createOperationMenuItem(id)\n })\n mainMenu.appendChild(menuItem)\n })\n if (!this.subMenuEl) {\n // 创建子菜单\n this.subMenuEl = document.createElement('div')\n this.subMenuEl.className = 'ql-ai-sub-menu'\n this.subMenuEl.style.display = 'none'\n }\n\n this.menuContainerEl.appendChild(mainMenu)\n this.menuContainerEl.appendChild(this.subMenuEl)\n }\n this.showOperationMenu = false\n }\n\n private createOperationMenuItem(id: string) {\n let menuItemBox = this[MENU_ID_MAP[id]]\n if (!menuItemBox) {\n menuItemBox = document.createElement('div')\n }\n // 清除子菜单容器中的所有子元素\n while (this.subMenuEl.firstChild) {\n this.subMenuEl.removeChild(this.subMenuEl.firstChild)\n }\n\n MENU_TITLE_DATA[id].forEach(({ text, icon, id }) => {\n const menuItem = document.createElement('div')\n menuItem.className = 'ql-ai-menu-item'\n menuItem.innerHTML = `${icon || ''}<span>${text}</span>`\n menuItem.addEventListener('click', (e) => {\n e.stopPropagation()\n this.handleOperationMenuItemClick(text, id)\n })\n menuItemBox.appendChild(menuItem)\n })\n this.subMenuEl.appendChild(menuItemBox)\n }\n\n private createInputBoxElements() {\n if (!this.dialogContainerEl) {\n this.dialogContainerEl = document.createElement('div')\n this.dialogContainerEl.className = 'ql-ai-dialog'\n this.wrapContainerEl = document.createElement('div')\n this.wrapContainerEl.className = 'ql-ai-wrapper'\n this.wrapContainerEl.style.width = `${this.quill.container.clientWidth - 30}px`\n\n // 添加AI图标\n this.createAIInputIcon()\n\n // 增加输入框\n this.inputEl = document.createElement('input')\n this.inputEl.type = 'text'\n this.inputPlaceholder = this._isSelectRangeMode ? SELECT_PLACEHOLDER : INPUT_PLACEHOLDER\n // 添加发送按钮\n this.inputSendBtnEl = document.createElement('span')\n this.inputSendBtnEl.className = 'ql-ai-input-right-send'\n this.inputSendBtnEl.innerHTML = SEND_BTN_ICON\n this.inputCloseBtnEl = document.createElement('span')\n this.inputCloseBtnEl.className = 'ql-ai-input-right-close'\n this.inputCloseBtnEl.innerHTML = CLOSE_ICON\n this.inputRightEl = document.createElement('div')\n this.inputRightEl.className = 'ql-ai-input-right'\n\n // 创建输入框\n this.inputContainerEl = document.createElement('div')\n this.inputContainerEl.className = 'ql-ai-input'\n this.inputContainerEl.appendChild(this.aiIconEl)\n this.inputContainerEl.appendChild(this.inputEl)\n this.inputRightEl.appendChild(this.inputSendBtnEl)\n this.inputRightEl.appendChild(this.inputCloseBtnEl)\n this.inputContainerEl.appendChild(this.inputRightEl) // 添加发送按钮\n this.wrapContainerEl.appendChild(this.resultPopupEl)\n this.wrapContainerEl.appendChild(this.inputContainerEl)\n this.wrapContainerEl.appendChild(this.menuContainerEl) // 添加菜单容器\n this.dialogContainerEl.appendChild(this.wrapContainerEl)\n }\n else {\n this.dialogContainerEl.style.display = 'block'\n }\n this.hiddenInputSendBtnEl()\n }\n\n private hiddenInputSendBtnEl(display = 'none') {\n if (this.inputEl && this.inputSendBtnEl) {\n this.inputSendBtnEl.style.display = display\n }\n }\n\n private copyResult() {\n if (!this.resultPopupContentEl) return\n\n try {\n const textToCopy = this.resultPopupContentEl.textContent || ''\n navigator.clipboard\n .writeText(textToCopy)\n .then(() => {\n this.showAlert('内容已复制到剪贴板')\n // 可以在这里添加复制成功的提示\n })\n .catch((err) => {\n this.showAlert(`复制失败:${err}`)\n })\n }\n catch (err) {\n this.showAlert(`复制失败:${err}`)\n // 兼容不支持clipboard API的浏览器\n const textarea = document.createElement('textarea')\n textarea.value = this.resultPopupContentEl.textContent || ''\n document.body.appendChild(textarea)\n textarea.select()\n document.execCommand('copy')\n document.body.removeChild(textarea)\n }\n }\n\n // 分享和朗读功能待放开\n // private shareResult() {\n // if (!this.resultPopupContentEl) return\n\n // const textToShare = this.resultPopupContentEl.textContent || ''\n // const title = 'AI生成内容分享'\n\n // if (navigator.share) {\n // navigator.share({\n // title,\n // text: textToShare,\n // })\n // .catch((err) => {\n // this.showAlert(`分享失败:${err}`)\n // })\n // }\n // else {\n // // 兼容不支持Web Share API的浏览器\n // const shareUrl = `mailto:?subject=${encodeURIComponent(title)}&body=${encodeURIComponent(textToShare)}`\n // window.open(shareUrl, '_blank')\n // }\n // }\n // private voiceResult() {\n // if (!this.resultPopupContentEl) return\n\n // const textToSpeak = this.resultPopupContentEl.textContent || ''\n\n // if ('speechSynthesis' in window) {\n // const utterance = new SpeechSynthesisUtterance(textToSpeak)\n // utterance.lang = 'zh-CN' // 设置中文语音\n // speechSynthesis.speak(utterance)\n // }\n // else {\n // this.showAlert('当前浏览器不支持语音合成API')\n // // 可以在这里添加不支持语音的提示\n // }\n // }\n\n private addResultEvent() {\n if (this.resultRefreshBtnEl) {\n this.resultRefreshBtnEl.addEventListener('click', () => {\n this.regenerateResponse()\n })\n }\n\n if (this.resultCopyBtnEl) {\n this.resultCopyBtnEl.addEventListener('click', () => {\n this.copyResult()\n })\n }\n\n // 分享和朗读功能待放开\n // if (this.resultShareBtnEl) {\n // this.resultShareBtnEl.addEventListener('click', () => {\n // this.shareResult()\n // })\n // }\n // if (this.resultVoiceBtnEl) {\n // this.resultVoiceBtnEl.addEventListener('click', () => {\n // this.voiceResult()\n // })\n // }\n }\n\n // 显示选中文本的气泡\n private showSelectionBubble() {\n if (!this.selectionBubbleEl) {\n this.selectionBubbleEl = document.createElement('div')\n this.selectionBubbleEl.className = 'ql-ai-selection-bubble'\n const icon = AI_ICON.replaceAll('paint_linear_2', 'paint_linear_bubble')\n this.selectionBubbleEl.innerHTML = `${icon}<span>AI 智能</span>`\n this.selectionBubbleEl.addEventListener('click', () => this.selectTextEvent())\n document.body.appendChild(this.selectionBubbleEl)\n }\n\n const { left, top } = this.quill.getBounds(this.selectionRange.index)\n const { left: endLeft } = this.quill.getBounds(this.selectionRange.index + this.selectionRange.length)\n const width = (endLeft - left) / 2\n const editorRect = this.quill.container.getBoundingClientRect()\n\n this.selectionBubbleEl.style.display = 'flex'\n this.selectionBubbleEl.style.left = `${left + editorRect.left + width - 45}px`\n this.selectionBubbleEl.style.top = `${top + editorRect.top - 40}px`\n }\n\n // 隐藏选中文本的气泡\n private hideSelectionBubble() {\n if (this.selectionBubbleEl) {\n this.selectionBubbleEl.style.display = 'none'\n }\n }\n\n // 处理文本选中变化\n private handleSelectionChange(range: any) {\n if (range && range.length > 0) {\n this.selectionRange = range\n this.showSelectionBubble()\n this.selectedText = this.quill.getText(range.index, range.length)\n }\n else {\n if (range && range.index !== null) {\n this.selectedText = ''\n this.closeAIPanel()\n }\n else {\n this.hideSelectionBubble()\n }\n }\n }\n\n private addInputEvent() {\n if (this.inputContainerEl) {\n this.inputContainerEl.addEventListener('click', () => {})\n }\n\n // 监听输入事件\n if (this.inputEl) {\n this.inputEl.addEventListener('input', () => {\n this.hiddenInputSendBtnEl(this.inputEl.value.trim() ? 'flex' : 'none')\n if (this.menuContainerEl && this._isSelectRangeMode) {\n this.showOperationMenu = !this.inputEl.value.trim() && !this._showResultPopupEl\n }\n })\n }\n\n // 给发送按钮添加点击事件\n if (this.inputSendBtnEl) {\n this.inputSendBtnEl.addEventListener('click', async () => {\n await this.queryAI()\n })\n }\n // 监听发送事件\n this.inputEl.addEventListener('keydown', async (e) => {\n if (e.key === 'Enter') {\n await this.queryAI()\n }\n })\n\n // 给关闭按钮添加点击事件\n if (this.inputCloseBtnEl) {\n this.inputCloseBtnEl.addEventListener('click', () => {\n this.closeAIPanel()\n })\n }\n }\n\n private positionElements() {\n if (!this.dialogContainerEl) return\n const range = this.selectionRange\n if (range) {\n const bounds = this.quill.getBounds(range.index)\n this.dialogContainerEl.style.position = 'absolute'\n this.dialogContainerEl.style.top = `${bounds.top + bounds.height + 20}px`\n }\n }\n\n // 添加创建alert元素的方法\n private createAlertElement() {\n if (!this.alertEl) {\n this.alertEl = document.createElement('div')\n this.alertEl.className = 'ql-ai-alert'\n this.alertEl.style.display = 'none'\n document.body.appendChild(this.alertEl)\n }\n }\n\n // 添加显示alert的方法\n private showAlert(message: string, duration: number = 3000) {\n this.createAlertElement()\n if (!this.alertEl) return\n\n // 清除之前的定时器\n if (this.alertTimer) {\n clearTimeout(this.alertTimer)\n this.alertTimer = null\n }\n\n this.alertEl.textContent = message\n this.alertEl.style.display = 'block'\n\n // 自动隐藏\n this.alertTimer = setTimeout(() => {\n if (this.alertEl) {\n this.alertEl.style.display = 'none'\n }\n this.alertTimer = null\n }, duration) as unknown as number\n }\n\n private createAIInputIcon() {\n if (!this.aiIconEl) {\n this.aiIconEl = document.createElement('span')\n this.aiIconEl.className = 'ql-ai-input-pre-icon'\n const icon = AI_ICON.replaceAll('paint_linear_2', 'paint_linear_ai_input')\n this.aiIconEl.innerHTML = icon\n }\n }\n\n // 添加处理子菜单点击的方法\n private handleOperationMenuItemClick(text: string, id: string = '') {\n let quetion = ''\n if (id.startsWith('1-') || id.startsWith('3-')) {\n quetion = `将目标文字${text},目标文字为:${this.selectedText}`\n }\n else if (id.startsWith('2-')) {\n quetion = `改写目标文字的口吻,让其变得${text},目标文字为:${this.selectedText}`\n }\n this.showOperationMenu = false\n this.queryAI(quetion)\n }\n\n private createActionMenu() {\n if (!this.actionMenuEl) {\n this.actionMenuEl = document.createElement('div')\n this.actionMenuEl.className = 'ql-ai-actions'\n\n this.resultMenuList.forEach(({ text, icon }) => {\n const menuItem = document.createElement('div')\n menuItem.className = 'ql-ai-action-item'\n menuItem.innerHTML = `${icon}<span class=\"ql-ai-result-menu-text\">${text}</span>`\n menuItem.addEventListener('click', () => this.handleAction(text))\n this.actionMenuEl.appendChild(menuItem)\n })\n\n this.wrapContainerEl.appendChild(this.actionMenuEl)\n }\n const secondMenuItemText = this.actionMenuEl.children[1].querySelector('.ql-ai-result-menu-text') as HTMLDivElement\n\n const firstChild = this.actionMenuEl.firstChild\n\n if (!this._isSelectRangeMode) {\n if (firstChild instanceof Element) {\n firstChild.classList.add('hidden')\n }\n\n secondMenuItemText.textContent = INSERT_TEXT\n }\n else {\n if (firstChild instanceof Element) {\n firstChild.classList.remove('hidden')\n }\n\n secondMenuItemText.textContent = INSERT_SUB_CONTENT_TEXT\n }\n\n this.isThinking = false\n }\n\n private handleActionMenuDisplay(value: string = 'none') {\n if (this.actionMenuEl) {\n this.actionMenuEl.style.display = value\n }\n }\n\n private switchInputEl(showInput = true) {\n if (this.inputContainerEl) {\n this.inputContainerEl.style.display = showInput ? 'flex' : 'none'\n }\n\n this.handleActionMenuDisplay(showInput ? 'block' : 'none')\n\n if (this.thinkContainerEl) {\n this.thinkContainerEl.style.display = showInput ? 'none' : 'flex'\n }\n }\n\n // 创建思考元素\n private createThinkElements() {\n if (!this.thinkContainerEl) {\n this.thinkContainerEl = document.createElement('div')\n this.thinkContainerEl.className = 'ql-ai-input'\n this.thinkContainerEl.innerHTML = `<span class=\"ql-ai-input-pre-icon ql-ai-think-icon\">${THINK_ICON}</span><span class=\"ql-ai-think-text\">${THINK_TEXT}</span>`\n this.thinkBtnEl = document.createElement('div')\n this.thinkBtnEl.className = 'ql-ai-think-btn'\n this.thinkBtnEl.innerHTML = `${STOP_ICON}<span>${STOP_ANSWER}</span>`\n this.thinkContainerEl.appendChild(this.thinkBtnEl)\n this.wrapContainerEl.appendChild(this.thinkContainerEl) // 添加发送按钮\n this.thinkBtnEl.addEventListener('click', () => {\n this.isBreak = true\n this.isThinking = false\n })\n }\n\n this.isThinking = true\n }\n\n // AI查询\n private async queryAI(question?: string): Promise<string> {\n this.createThinkElements()\n this.inputValue = question || this.inputEl.value\n if (this.inputValue.trim() === '') {\n return\n }\n\n // 有信息\n this.isBreak = false // 重置打断标记,防止重复打断ai\n // 这里实现实际的AI查询逻辑\n try {\n const response = await fetch(`${this.host}`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${this.apiKey}`,\n },\n body: JSON.stringify({\n model: this.model,\n prompt: this.inputValue,\n stream: true,\n }),\n })\n\n if (!response.ok) {\n throw new Error(`HTTP error! status: ${response.status}`)\n }\n\n const reader = response.body.getReader()\n const decoder = new TextDecoder()\n let content = ''\n\n while (true) {\n if (this.isBreak) {\n this.isBreak = false\n break\n }\n\n const { done, value } = await reader.read()\n if (done) break\n\n const chunk = decoder.decode(value)\n const lines = chunk.split('\\n').filter(line => line.trim() !== '')\n\n for (const line of lines) {\n try {\n const data = JSON.parse(line)\n content += data.response || ''\n this.showAIResponse(content)\n }\n catch (e) {\n console.error('解析错误:', e)\n }\n }\n }\n\n // 创建操作菜单\n this.createActionMenu()\n this.inputEl.value = '' // 清空输入框\n this.hiddenInputSendBtnEl()\n return content\n }\n catch (error) {\n console.error('AI查询失败:', error)\n return 'AI查询失败,请重试'\n }\n }\n\n private showAIResponse(response: string) {\n if (!this.resultPopupEl) return\n\n // 显示结果\n if (this._charCount <= this.textNumber) {\n this.resultPopupContentEl.innerHTML = response\n this.charCount = this.resultPopupContentEl.textContent.replace(/\\s+/g, '').length\n }\n else {\n this.isBreak = true\n this.charCount = 0\n }\n this.showResultPopupEl = true\n }\n\n private handleAction(action: string) {\n switch (action) {\n case REPLACE_SELECT:\n this.replaceSelectText()\n break\n case INSERT_TEXT:\n this.insertAIResponse()\n break\n case REGENERATE:\n this.regenerateResponse()\n break\n case CLOSE:\n this.closeAIPanel()\n break\n }\n }\n\n private replaceSelectText() {\n if (!this.resultPopupContentEl) return\n const range = this.quill.getSelection(true)\n if (range && range.length > 0) {\n // 删除选中内容\n this.quill.deleteText(range.index, range.length)\n // 插入AI生成的内容\n this.quill.clipboard.dangerouslyPasteHTML(range.index, this.resultPopupContentEl.innerHTML)\n }\n this.closeAIPanel()\n }\n\n private insertAIResponse() {\n if (!this.resultPopupContentEl) return\n const range = this.quill.getSelection(true)\n if (range) {\n this.quill.clipboard.dangerouslyPasteHTML(range.index + range.length, this.resultPopupContentEl.innerHTML)\n }\n this.closeAIPanel()\n }\n\n private async regenerateResponse() {\n await this.queryAI(this.inputValue)\n }\n\n private closeAIPanel() {\n this.isBreak = true // 停止查询\n\n if (this.dialogContainerEl) {\n this.dialogContainerEl.style.display = 'none'\n }\n\n if (this.actionMenuEl) {\n this.actionMenuEl.style.display = 'none'\n }\n\n this.showResultPopupEl = false\n\n if (this.inputEl && this.inputEl.value.trim() !== '') {\n this.inputEl.value = '' // 清空输入框\n }\n this.hideSelectionBubble()\n }\n\n set charCount(value: number) {\n // 清除之前的定时器\n if (this._debounceTimer) {\n clearTimeout(this._debounceTimer)\n }\n\n this._debounceTimer = setTimeout(() => {\n this._charCount = value\n if (this.resultPopupFooterTextEl) {\n this.resultPopupFooterTextEl.textContent = `${this._charCount}/${this.textNumber}`\n }\n clearTimeout(this._debounceTimer)\n this._debounceTimer = null\n }, 210)\n }\n\n get charCount() {\n return this._charCount\n }\n\n set inputPlaceholder(value: string) {\n this._inputPlaceholder = value\n if (this.inputEl) {\n this.inputEl.placeholder = value\n }\n }\n\n get inputPlaceholder() {\n return this._inputPlaceholder\n }\n\n set showOperationMenu(value: boolean) {\n this._showOperationMenu = value\n if (this.menuContainerEl) {\n this.menuContainerEl.style.display = value ? 'flex' : 'none'\n }\n }\n\n get showOperationMenu() {\n return this._showOperationMenu\n }\n\n set isSelectRangeMode(value: boolean) {\n this._isSelectRangeMode = value\n this.showOperationMenu = value\n this.inputPlaceholder = value ? SELECT_PLACEHOLDER : INPUT_PLACEHOLDER\n this.hideSelectionBubble()\n }\n\n get isSelectRangeMode() {\n return this._isSelectRangeMode\n }\n\n set isThinking(value: boolean) {\n this._isThinking = value\n this.switchInputEl(!value)\n }\n\n get isThinking() {\n return this._isThinking\n }\n\n set showResultPopupEl(value: boolean) {\n this._showResultPopupEl = value\n if (this.resultPopupEl) {\n this.resultPopupEl.style.display = value ? 'block' : 'none'\n }\n }\n\n get showResultPopupEl() {\n return this._showResultPopupEl\n }\n}\n"],"names":["id"],"mappings":"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"}
|
|
@@ -1,93 +0,0 @@
|
|
|
1
|
-
import * as Y from "yjs";
|
|
2
|
-
function setupAwareness(options, defaultAwareness) {
|
|
3
|
-
if (!defaultAwareness) return null;
|
|
4
|
-
const awareness = defaultAwareness;
|
|
5
|
-
if (options == null ? void 0 : options.state) {
|
|
6
|
-
awareness.setLocalStateField("user", options.state);
|
|
7
|
-
}
|
|
8
|
-
return awareness;
|
|
9
|
-
}
|
|
10
|
-
function bindAwarenessToCursors(awareness, cursorsModule, quill, yText) {
|
|
11
|
-
if (!cursorsModule || !awareness) return;
|
|
12
|
-
const doc = yText.doc;
|
|
13
|
-
const updateCursor = (clientId, state) => {
|
|
14
|
-
try {
|
|
15
|
-
if ((state == null ? void 0 : state.cursor) && clientId !== awareness.clientID) {
|
|
16
|
-
const user = state.user || {};
|
|
17
|
-
const color = user.color || "#ff6b6b";
|
|
18
|
-
const name = user.name || `User ${clientId}`;
|
|
19
|
-
cursorsModule.createCursor(clientId.toString(), name, color);
|
|
20
|
-
const anchor = Y.createAbsolutePositionFromRelativePosition(Y.createRelativePositionFromJSON(state.cursor.anchor), doc);
|
|
21
|
-
const head = Y.createAbsolutePositionFromRelativePosition(Y.createRelativePositionFromJSON(state.cursor.head), doc);
|
|
22
|
-
if (anchor && head && anchor.type === yText && clientId) {
|
|
23
|
-
setTimeout(() => {
|
|
24
|
-
cursorsModule.moveCursor(clientId.toString(), {
|
|
25
|
-
index: anchor.index,
|
|
26
|
-
length: head.index - anchor.index
|
|
27
|
-
});
|
|
28
|
-
}, 0);
|
|
29
|
-
}
|
|
30
|
-
} else {
|
|
31
|
-
cursorsModule.removeCursor(clientId.toString());
|
|
32
|
-
}
|
|
33
|
-
} catch (err) {
|
|
34
|
-
console.error("Cursor update failed:", err);
|
|
35
|
-
}
|
|
36
|
-
};
|
|
37
|
-
const selectionChangeHandler = (range) => {
|
|
38
|
-
setTimeout(() => {
|
|
39
|
-
var _a;
|
|
40
|
-
if (range) {
|
|
41
|
-
const anchor = Y.createRelativePositionFromTypeIndex(yText, range.index);
|
|
42
|
-
const head = Y.createRelativePositionFromTypeIndex(yText, range.index + range.length);
|
|
43
|
-
const currentState = awareness.getLocalState();
|
|
44
|
-
if (!(currentState == null ? void 0 : currentState.cursor) || !Y.compareRelativePositions(anchor, currentState.cursor.anchor) || !Y.compareRelativePositions(head, currentState.cursor.head)) {
|
|
45
|
-
awareness.setLocalStateField("cursor", { anchor, head });
|
|
46
|
-
}
|
|
47
|
-
} else {
|
|
48
|
-
if (((_a = awareness.getLocalState()) == null ? void 0 : _a.cursor) !== null) {
|
|
49
|
-
awareness.setLocalStateField("cursor", null);
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
}, 0);
|
|
53
|
-
};
|
|
54
|
-
const changeHandler = ({ added, updated, removed }) => {
|
|
55
|
-
if (quill.composition.isComposing) return;
|
|
56
|
-
const states = awareness.getStates();
|
|
57
|
-
added.forEach((id) => {
|
|
58
|
-
updateCursor(id, states.get(id));
|
|
59
|
-
});
|
|
60
|
-
updated.forEach((id) => {
|
|
61
|
-
updateCursor(id, states.get(id));
|
|
62
|
-
});
|
|
63
|
-
removed.forEach((id) => {
|
|
64
|
-
cursorsModule.removeCursor(id.toString());
|
|
65
|
-
});
|
|
66
|
-
};
|
|
67
|
-
awareness.on("change", changeHandler);
|
|
68
|
-
quill.on("editor-change", (eventName, ...args) => {
|
|
69
|
-
if (quill.composition.isComposing) return;
|
|
70
|
-
if (eventName === "text-change") {
|
|
71
|
-
if (args[2] === "user") {
|
|
72
|
-
const range = quill.getSelection();
|
|
73
|
-
selectionChangeHandler(range);
|
|
74
|
-
}
|
|
75
|
-
} else if (eventName === "selection-change") {
|
|
76
|
-
if (args[2] === "user") {
|
|
77
|
-
selectionChangeHandler(args[0]);
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
});
|
|
81
|
-
awareness.getStates().forEach((state, clientId) => {
|
|
82
|
-
updateCursor(clientId, state);
|
|
83
|
-
});
|
|
84
|
-
return () => {
|
|
85
|
-
awareness.off("change", changeHandler);
|
|
86
|
-
quill.off("editor-change", selectionChangeHandler);
|
|
87
|
-
};
|
|
88
|
-
}
|
|
89
|
-
export {
|
|
90
|
-
bindAwarenessToCursors,
|
|
91
|
-
setupAwareness
|
|
92
|
-
};
|
|
93
|
-
//# sourceMappingURL=awareness.es.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"awareness.es.js","sources":["../../../../../src/modules/collaborative-editing/awareness/awareness.ts"],"sourcesContent":["import type QuillCursors from 'quill-cursors'\nimport type { Awareness } from 'y-protocols/awareness'\nimport type FluentEditor from '../../../core/fluent-editor'\nimport * as Y from 'yjs'\n\nexport interface AwarenessState {\n name?: string\n color?: string\n}\n\nexport interface AwarenessEvents {\n change?: (changes: { added: number[], updated: number[], removed: number[] }, transactionOrigin: any) => void\n update?: ({ added, updated, removed }: { added: number[], updated: number[], removed: number[] }, origin: any) => void\n destroy?: () => void\n}\n\nexport interface AwarenessOptions {\n state?: AwarenessState\n events?: AwarenessEvents\n timeout?: number | undefined\n}\n\nexport function setupAwareness(options?: AwarenessOptions, defaultAwareness?: Awareness): Awareness | null {\n if (!defaultAwareness) return null\n\n const awareness = defaultAwareness\n\n if (options?.state) {\n awareness.setLocalStateField('user', options.state)\n }\n\n return awareness\n}\n\nexport function bindAwarenessToCursors(\n awareness: Awareness,\n cursorsModule: QuillCursors,\n quill: FluentEditor,\n yText: Y.Text,\n): (() => void) | void {\n if (!cursorsModule || !awareness) return\n\n const doc = yText.doc!\n\n const updateCursor = (clientId: number, state: any) => {\n try {\n if (state?.cursor && clientId !== awareness.clientID) {\n const user = state.user || {}\n const color = user.color || '#ff6b6b'\n const name = user.name || `User ${clientId}`\n\n cursorsModule.createCursor(clientId.toString(), name, color)\n\n const anchor = Y.createAbsolutePositionFromRelativePosition(Y.createRelativePositionFromJSON(state.cursor.anchor), doc)\n const head = Y.createAbsolutePositionFromRelativePosition(Y.createRelativePositionFromJSON(state.cursor.head), doc)\n\n if (anchor && head && anchor.type === yText && clientId) {\n setTimeout(() => {\n cursorsModule.moveCursor(clientId.toString(), {\n index: anchor.index,\n length: head.index - anchor.index,\n })\n }, 0)\n }\n }\n else {\n cursorsModule.removeCursor(clientId.toString())\n }\n }\n catch (err) {\n console.error('Cursor update failed:', err)\n }\n }\n\n const selectionChangeHandler = (range: { index: number, length: number } | null) => {\n setTimeout(() => {\n if (range) {\n const anchor = Y.createRelativePositionFromTypeIndex(yText, range.index)\n const head = Y.createRelativePositionFromTypeIndex(yText, range.index + range.length)\n\n const currentState = awareness.getLocalState()\n if (!currentState?.cursor\n || !Y.compareRelativePositions(anchor, currentState.cursor.anchor)\n || !Y.compareRelativePositions(head, currentState.cursor.head)) {\n awareness.setLocalStateField('cursor', { anchor, head })\n }\n }\n else {\n if (awareness.getLocalState()?.cursor !== null) {\n awareness.setLocalStateField('cursor', null)\n }\n }\n }, 0)\n }\n\n const changeHandler = ({ added, updated, removed }: {\n added: number[]\n updated: number[]\n removed: number[]\n }) => {\n if (quill.composition.isComposing) return\n const states = awareness.getStates()\n\n added.forEach((id) => {\n updateCursor(id, states.get(id))\n })\n\n updated.forEach((id) => {\n updateCursor(id, states.get(id))\n })\n\n removed.forEach((id) => {\n cursorsModule.removeCursor(id.toString())\n })\n }\n\n awareness.on('change', changeHandler)\n quill.on('editor-change', (eventName, ...args) => {\n if (quill.composition.isComposing) return\n if (eventName === 'text-change') {\n if (args[2] === 'user') {\n const range = quill.getSelection()\n selectionChangeHandler(range)\n }\n }\n else if (eventName === 'selection-change') {\n if (args[2] === 'user') {\n selectionChangeHandler(args[0] as { index: number, length: number } | null)\n }\n }\n })\n\n awareness.getStates().forEach((state, clientId) => {\n updateCursor(clientId, state)\n })\n\n return () => {\n awareness.off('change', changeHandler)\n quill.off('editor-change', selectionChangeHandler)\n }\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { IndexeddbPersistence } from "y-indexeddb";
|
|
2
|
-
function setupIndexedDB(doc) {
|
|
3
|
-
const fullDbName = `tiny-editor-${doc.guid}`;
|
|
4
|
-
new IndexeddbPersistence(fullDbName, doc);
|
|
5
|
-
return () => {
|
|
6
|
-
indexedDB.deleteDatabase(fullDbName);
|
|
7
|
-
};
|
|
8
|
-
}
|
|
9
|
-
export {
|
|
10
|
-
setupIndexedDB
|
|
11
|
-
};
|
|
12
|
-
//# sourceMappingURL=y-indexeddb.es.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"y-indexeddb.es.js","sources":["../../../../../src/modules/collaborative-editing/awareness/y-indexeddb.ts"],"sourcesContent":["import type { Doc } from 'yjs'\nimport { IndexeddbPersistence } from 'y-indexeddb'\n\nexport function setupIndexedDB(doc: Doc): () => void {\n const fullDbName = `tiny-editor-${doc.guid}`\n\n new IndexeddbPersistence(fullDbName, doc)\n\n return (): void => {\n indexedDB.deleteDatabase(fullDbName)\n }\n}\n"],"names":[],"mappings":";AAGO,SAAS,eAAe,KAAsB;AAC7C,QAAA,aAAa,eAAe,IAAI,IAAI;AAEtC,MAAA,qBAAqB,YAAY,GAAG;AAExC,SAAO,MAAY;AACjB,cAAU,eAAe,UAAU;AAAA,EACrC;AACF;"}
|
|
@@ -1,105 +0,0 @@
|
|
|
1
|
-
var __defProp = Object.defineProperty;
|
|
2
|
-
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
3
|
-
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
4
|
-
import QuillCursors from "quill-cursors";
|
|
5
|
-
import { Awareness } from "y-protocols/awareness";
|
|
6
|
-
import { QuillBinding } from "y-quill";
|
|
7
|
-
import * as Y from "yjs";
|
|
8
|
-
import "./awareness/index.es.js";
|
|
9
|
-
import { setupIndexedDB } from "./awareness/y-indexeddb.es.js";
|
|
10
|
-
import { createProvider } from "./provider/providerRegistry.es.js";
|
|
11
|
-
import { setupAwareness, bindAwarenessToCursors } from "./awareness/awareness.es.js";
|
|
12
|
-
class CollaborativeEditor {
|
|
13
|
-
constructor(quill, options) {
|
|
14
|
-
__publicField(this, "ydoc", new Y.Doc());
|
|
15
|
-
__publicField(this, "provider");
|
|
16
|
-
__publicField(this, "awareness");
|
|
17
|
-
__publicField(this, "cursors");
|
|
18
|
-
__publicField(this, "cleanupBindings", null);
|
|
19
|
-
__publicField(this, "clearIndexedDB", null);
|
|
20
|
-
this.quill = quill;
|
|
21
|
-
this.options = options;
|
|
22
|
-
this.ydoc = this.options.ydoc || new Y.Doc();
|
|
23
|
-
if (this.options.cursors !== false) {
|
|
24
|
-
const cursorsOptions = typeof this.options.cursors === "object" ? this.options.cursors : {};
|
|
25
|
-
this.cursors = new QuillCursors(quill, cursorsOptions);
|
|
26
|
-
}
|
|
27
|
-
if (this.options.awareness) {
|
|
28
|
-
const awareness = setupAwareness(this.options.awareness, new Awareness(this.ydoc));
|
|
29
|
-
if (!awareness) {
|
|
30
|
-
throw new Error("Failed to initialize awareness");
|
|
31
|
-
}
|
|
32
|
-
this.awareness = awareness;
|
|
33
|
-
} else {
|
|
34
|
-
this.awareness = new Awareness(this.ydoc);
|
|
35
|
-
}
|
|
36
|
-
if (this.options.provider) {
|
|
37
|
-
const providerConfig = this.options.provider;
|
|
38
|
-
try {
|
|
39
|
-
const provider = createProvider({
|
|
40
|
-
doc: this.ydoc,
|
|
41
|
-
options: providerConfig.options,
|
|
42
|
-
type: providerConfig.type,
|
|
43
|
-
awareness: this.awareness,
|
|
44
|
-
onConnect: this.options.onConnect,
|
|
45
|
-
onDisconnect: this.options.onDisconnect,
|
|
46
|
-
onError: this.options.onError,
|
|
47
|
-
onSyncChange: this.options.onSyncChange
|
|
48
|
-
});
|
|
49
|
-
this.provider = provider;
|
|
50
|
-
} catch (error) {
|
|
51
|
-
console.warn(
|
|
52
|
-
`[yjs] Error creating provider of type ${providerConfig.type}:`,
|
|
53
|
-
error
|
|
54
|
-
);
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
if (this.provider) {
|
|
58
|
-
const ytext = this.ydoc.getText("tiny-editor");
|
|
59
|
-
this.cleanupBindings = bindAwarenessToCursors(this.awareness, this.cursors, quill, ytext) || null;
|
|
60
|
-
new QuillBinding(
|
|
61
|
-
ytext,
|
|
62
|
-
this.quill,
|
|
63
|
-
this.awareness
|
|
64
|
-
);
|
|
65
|
-
} else {
|
|
66
|
-
console.error("Failed to initialize collaborative editor: no valid provider configured");
|
|
67
|
-
}
|
|
68
|
-
if (this.options.offline !== false) {
|
|
69
|
-
this.clearIndexedDB = setupIndexedDB(this.ydoc);
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
getAwareness() {
|
|
73
|
-
return this.awareness;
|
|
74
|
-
}
|
|
75
|
-
getProvider() {
|
|
76
|
-
return this.provider;
|
|
77
|
-
}
|
|
78
|
-
getYDoc() {
|
|
79
|
-
return this.ydoc;
|
|
80
|
-
}
|
|
81
|
-
get isConnected() {
|
|
82
|
-
var _a;
|
|
83
|
-
return ((_a = this.provider) == null ? void 0 : _a.isConnected) ?? false;
|
|
84
|
-
}
|
|
85
|
-
get isSynced() {
|
|
86
|
-
var _a;
|
|
87
|
-
return ((_a = this.provider) == null ? void 0 : _a.isSynced) ?? false;
|
|
88
|
-
}
|
|
89
|
-
getCursors() {
|
|
90
|
-
return this.cursors;
|
|
91
|
-
}
|
|
92
|
-
async destroy() {
|
|
93
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _i;
|
|
94
|
-
(_a = this.cleanupBindings) == null ? void 0 : _a.call(this);
|
|
95
|
-
(_c = (_b = this.provider) == null ? void 0 : _b.destroy) == null ? void 0 : _c.call(_b);
|
|
96
|
-
(_d = this.cursors) == null ? void 0 : _d.clearCursors();
|
|
97
|
-
(_f = (_e = this.awareness) == null ? void 0 : _e.destroy) == null ? void 0 : _f.call(_e);
|
|
98
|
-
(_g = this.clearIndexedDB) == null ? void 0 : _g.call(this);
|
|
99
|
-
(_i = (_h = this.ydoc) == null ? void 0 : _h.destroy) == null ? void 0 : _i.call(_h);
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
export {
|
|
103
|
-
CollaborativeEditor
|
|
104
|
-
};
|
|
105
|
-
//# sourceMappingURL=collaborative-editing.es.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"collaborative-editing.es.js","sources":["../../../../src/modules/collaborative-editing/collaborative-editing.ts"],"sourcesContent":["import type FluentEditor from '../../fluent-editor'\nimport type { UnifiedProvider } from './provider/providerRegistry'\nimport type { YjsOptions } from './types'\nimport QuillCursors from 'quill-cursors'\nimport { Awareness } from 'y-protocols/awareness'\nimport { QuillBinding } from 'y-quill'\nimport * as Y from 'yjs'\nimport { bindAwarenessToCursors, setupAwareness } from './awareness'\nimport { setupIndexedDB } from './awareness/y-indexeddb'\nimport { createProvider } from './provider/providerRegistry'\n\nexport class CollaborativeEditor {\n private ydoc: Y.Doc = new Y.Doc()\n private provider: UnifiedProvider\n private awareness: Awareness\n private cursors: QuillCursors | null\n private cleanupBindings: (() => void) | null = null\n private clearIndexedDB: (() => void) | null = null\n\n constructor(\n public quill: FluentEditor,\n public options: YjsOptions,\n ) {\n this.ydoc = this.options.ydoc || new Y.Doc()\n\n if (this.options.cursors !== false) {\n const cursorsOptions = typeof this.options.cursors === 'object' ? this.options.cursors : {}\n this.cursors = new QuillCursors(quill, cursorsOptions)\n }\n\n if (this.options.awareness) {\n const awareness = setupAwareness(this.options.awareness, new Awareness(this.ydoc))\n if (!awareness) {\n throw new Error('Failed to initialize awareness')\n }\n this.awareness = awareness\n }\n else {\n this.awareness = new Awareness(this.ydoc)\n }\n\n if (this.options.provider) {\n const providerConfig = this.options.provider\n try {\n const provider = createProvider({\n doc: this.ydoc,\n options: providerConfig.options,\n type: providerConfig.type,\n awareness: this.awareness,\n onConnect: this.options.onConnect,\n onDisconnect: this.options.onDisconnect,\n onError: this.options.onError,\n onSyncChange: this.options.onSyncChange,\n })\n this.provider = provider\n }\n catch (error) {\n console.warn(\n `[yjs] Error creating provider of type ${providerConfig.type}:`,\n error,\n )\n }\n }\n\n if (this.provider) {\n const ytext = this.ydoc.getText('tiny-editor')\n this.cleanupBindings = bindAwarenessToCursors(this.awareness, this.cursors, quill, ytext) || null\n new QuillBinding(\n ytext,\n this.quill,\n this.awareness,\n )\n }\n else {\n console.error('Failed to initialize collaborative editor: no valid provider configured')\n }\n\n if (this.options.offline !== false) {\n this.clearIndexedDB = setupIndexedDB(this.ydoc)\n }\n }\n\n public getAwareness() {\n return this.awareness\n }\n\n public getProvider() {\n return this.provider\n }\n\n public getYDoc() {\n return this.ydoc\n }\n\n get isConnected() {\n return this.provider?.isConnected ?? false\n }\n\n get isSynced() {\n return this.provider?.isSynced ?? false\n }\n\n public getCursors() {\n return this.cursors\n }\n\n public async destroy() {\n this.cleanupBindings?.()\n this.provider?.destroy?.()\n this.cursors?.clearCursors()\n this.awareness?.destroy?.()\n this.clearIndexedDB?.()\n this.ydoc?.destroy?.()\n }\n}\n"],"names":[],"mappings":";;;;;;;;;;;AAWO,MAAM,oBAAoB;AAAA,EAQ/B,YACS,OACA,SACP;AAVM,gCAAc,IAAI,EAAE,IAAI;AACxB;AACA;AACA;AACA,2CAAuC;AACvC,0CAAsC;AAGrC,SAAA,QAAA;AACA,SAAA,UAAA;AAEP,SAAK,OAAO,KAAK,QAAQ,QAAQ,IAAI,EAAE,IAAI;AAEvC,QAAA,KAAK,QAAQ,YAAY,OAAO;AAC5B,YAAA,iBAAiB,OAAO,KAAK,QAAQ,YAAY,WAAW,KAAK,QAAQ,UAAU,CAAC;AAC1F,WAAK,UAAU,IAAI,aAAa,OAAO,cAAc;AAAA,IAAA;AAGnD,QAAA,KAAK,QAAQ,WAAW;AACpB,YAAA,YAAY,eAAe,KAAK,QAAQ,WAAW,IAAI,UAAU,KAAK,IAAI,CAAC;AACjF,UAAI,CAAC,WAAW;AACR,cAAA,IAAI,MAAM,gCAAgC;AAAA,MAAA;AAElD,WAAK,YAAY;AAAA,IAAA,OAEd;AACH,WAAK,YAAY,IAAI,UAAU,KAAK,IAAI;AAAA,IAAA;AAGtC,QAAA,KAAK,QAAQ,UAAU;AACnB,YAAA,iBAAiB,KAAK,QAAQ;AAChC,UAAA;AACF,cAAM,WAAW,eAAe;AAAA,UAC9B,KAAK,KAAK;AAAA,UACV,SAAS,eAAe;AAAA,UACxB,MAAM,eAAe;AAAA,UACrB,WAAW,KAAK;AAAA,UAChB,WAAW,KAAK,QAAQ;AAAA,UACxB,cAAc,KAAK,QAAQ;AAAA,UAC3B,SAAS,KAAK,QAAQ;AAAA,UACtB,cAAc,KAAK,QAAQ;AAAA,QAAA,CAC5B;AACD,aAAK,WAAW;AAAA,eAEX,OAAO;AACJ,gBAAA;AAAA,UACN,yCAAyC,eAAe,IAAI;AAAA,UAC5D;AAAA,QACF;AAAA,MAAA;AAAA,IACF;AAGF,QAAI,KAAK,UAAU;AACjB,YAAM,QAAQ,KAAK,KAAK,QAAQ,aAAa;AACxC,WAAA,kBAAkB,uBAAuB,KAAK,WAAW,KAAK,SAAS,OAAO,KAAK,KAAK;AACzF,UAAA;AAAA,QACF;AAAA,QACA,KAAK;AAAA,QACL,KAAK;AAAA,MACP;AAAA,IAAA,OAEG;AACH,cAAQ,MAAM,yEAAyE;AAAA,IAAA;AAGrF,QAAA,KAAK,QAAQ,YAAY,OAAO;AAC7B,WAAA,iBAAiB,eAAe,KAAK,IAAI;AAAA,IAAA;AAAA,EAChD;AAAA,EAGK,eAAe;AACpB,WAAO,KAAK;AAAA,EAAA;AAAA,EAGP,cAAc;AACnB,WAAO,KAAK;AAAA,EAAA;AAAA,EAGP,UAAU;AACf,WAAO,KAAK;AAAA,EAAA;AAAA,EAGd,IAAI,cAAc;;AACT,aAAA,UAAK,aAAL,mBAAe,gBAAe;AAAA,EAAA;AAAA,EAGvC,IAAI,WAAW;;AACN,aAAA,UAAK,aAAL,mBAAe,aAAY;AAAA,EAAA;AAAA,EAG7B,aAAa;AAClB,WAAO,KAAK;AAAA,EAAA;AAAA,EAGd,MAAa,UAAU;;AACrB,eAAK,oBAAL;AACA,qBAAK,aAAL,mBAAe,YAAf;AACA,eAAK,YAAL,mBAAc;AACd,qBAAK,cAAL,mBAAgB,YAAhB;AACA,eAAK,mBAAL;AACA,qBAAK,SAAL,mBAAW,YAAX;AAAA,EAAqB;AAEzB;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"module.es.js","sources":["../../../../src/modules/collaborative-editing/module.ts"],"sourcesContent":["import type FluentEditor from '../../fluent-editor'\nimport { CollaborativeEditor } from './collaborative-editing'\n\nexport class CollaborationModule {\n private collaborativeEditor: CollaborativeEditor\n\n constructor(public quill: FluentEditor, public options: any) {\n this.collaborativeEditor = new CollaborativeEditor(quill, options)\n\n window.addEventListener(\n 'beforeunload',\n () => { void this.collaborativeEditor.destroy().catch(err => console.warn('[yjs] destroy failed:', err)) },\n { once: true },\n )\n }\n\n public getCursors() {\n return this.collaborativeEditor.getCursors()\n }\n\n public getAwareness() {\n return this.collaborativeEditor.getAwareness()\n }\n\n public getProvider() {\n return this.collaborativeEditor.getProvider()\n }\n\n public async destroy() {\n await this.collaborativeEditor.destroy()\n }\n}\n"],"names":[],"mappings":";;;;AAGO,MAAM,oBAAoB;AAAA,EAG/B,YAAmB,OAA4B,SAAc;AAFrD;AAEW,SAAA,QAAA;AAA4B,SAAA,UAAA;AAC7C,SAAK,sBAAsB,IAAI,oBAAoB,OAAO,OAAO;AAE1D,WAAA;AAAA,MACL;AAAA,MACA,MAAM;AAAO,aAAA,KAAK,oBAAoB,QAAA,EAAU,MAAM,SAAO,QAAQ,KAAK,yBAAyB,GAAG,CAAC;AAAA,MAAE;AAAA,MACzG,EAAE,MAAM,KAAK;AAAA,IACf;AAAA,EAAA;AAAA,EAGK,aAAa;AACX,WAAA,KAAK,oBAAoB,WAAW;AAAA,EAAA;AAAA,EAGtC,eAAe;AACb,WAAA,KAAK,oBAAoB,aAAa;AAAA,EAAA;AAAA,EAGxC,cAAc;AACZ,WAAA,KAAK,oBAAoB,YAAY;AAAA,EAAA;AAAA,EAG9C,MAAa,UAAU;AACf,UAAA,KAAK,oBAAoB,QAAQ;AAAA,EAAA;AAE3C;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"providerRegistry.es.js","sources":["../../../../../src/modules/collaborative-editing/provider/providerRegistry.ts"],"sourcesContent":["import type { Awareness } from 'y-protocols/awareness'\nimport type * as Y from 'yjs'\nimport type { ProviderEventHandlers } from '../types'\nimport { WebRTCProviderWrapper } from './webrtc'\nimport { WebsocketProviderWrapper } from './websocket'\n\nexport type ProviderRegistry = Record<string, ProviderConstructor>\n\nexport type ProviderConstructor<T = any> = new (\n props: ProviderConstructorProps<T>\n) => UnifiedProvider\n\nexport type ProviderConstructorProps<T = any> = {\n options: T\n awareness?: Awareness\n doc?: Y.Doc\n} & ProviderEventHandlers\n\nexport interface UnifiedProvider extends ProviderEventHandlers {\n awareness: Awareness\n document: Y.Doc\n type: 'webrtc' | 'websocket' | string\n connect: () => void\n destroy: () => void\n disconnect: () => void\n isConnected: boolean\n isSynced: boolean\n}\n\nconst providerRegistry: ProviderRegistry = {\n websocket: WebsocketProviderWrapper,\n webrtc: WebRTCProviderWrapper,\n}\n\nexport function registerProviderType<T>(type: string, providerClass: ProviderConstructor<T>) {\n providerRegistry[type as string]\n = providerClass as ProviderConstructor\n}\n\nexport function getProviderClass(type: string): ProviderConstructor | undefined {\n return providerRegistry[type]\n}\n\nexport function createProvider({\n type,\n ...props\n}: ProviderConstructorProps & {\n type: string\n}) {\n const ProviderClass = getProviderClass(type)\n\n if (!ProviderClass) {\n throw new Error(`Provider type \"${type}\" not found in registry`)\n }\n\n return new ProviderClass(props)\n}\n"],"names":[],"mappings":";;AA6BA,MAAM,mBAAqC;AAAA,EACzC,WAAW;AAAA,EACX,QAAQ;AACV;AAEgB,SAAA,qBAAwB,MAAc,eAAuC;AAC3F,mBAAiB,IAAc,IAC3B;AACN;AAEO,SAAS,iBAAiB,MAA+C;AAC9E,SAAO,iBAAiB,IAAI;AAC9B;AAEO,SAAS,eAAe;AAAA,EAC7B;AAAA,EACA,GAAG;AACL,GAEG;AACK,QAAA,gBAAgB,iBAAiB,IAAI;AAE3C,MAAI,CAAC,eAAe;AAClB,UAAM,IAAI,MAAM,kBAAkB,IAAI,yBAAyB;AAAA,EAAA;AAG1D,SAAA,IAAI,cAAc,KAAK;AAChC;"}
|
|
@@ -1,99 +0,0 @@
|
|
|
1
|
-
var __defProp = Object.defineProperty;
|
|
2
|
-
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
3
|
-
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
4
|
-
import { WebrtcProvider } from "y-webrtc";
|
|
5
|
-
import * as Y from "yjs";
|
|
6
|
-
class WebRTCProviderWrapper {
|
|
7
|
-
constructor({
|
|
8
|
-
awareness,
|
|
9
|
-
doc,
|
|
10
|
-
options,
|
|
11
|
-
onConnect,
|
|
12
|
-
onDisconnect,
|
|
13
|
-
onError,
|
|
14
|
-
onSyncChange
|
|
15
|
-
}) {
|
|
16
|
-
__publicField(this, "provider");
|
|
17
|
-
__publicField(this, "_isConnected", false);
|
|
18
|
-
__publicField(this, "_isSynced", false);
|
|
19
|
-
__publicField(this, "onConnect");
|
|
20
|
-
__publicField(this, "onDisconnect");
|
|
21
|
-
__publicField(this, "onError");
|
|
22
|
-
__publicField(this, "onSyncChange");
|
|
23
|
-
__publicField(this, "document");
|
|
24
|
-
__publicField(this, "awareness");
|
|
25
|
-
__publicField(this, "type");
|
|
26
|
-
__publicField(this, "connect", () => {
|
|
27
|
-
try {
|
|
28
|
-
this.provider.connect();
|
|
29
|
-
} catch (error) {
|
|
30
|
-
console.warn("[yjs] Error connecting WebRTC provider:", error);
|
|
31
|
-
}
|
|
32
|
-
});
|
|
33
|
-
__publicField(this, "destroy", () => {
|
|
34
|
-
try {
|
|
35
|
-
this.provider.destroy();
|
|
36
|
-
} catch (error) {
|
|
37
|
-
console.warn("[yjs] Error destroying WebRTC provider:", error);
|
|
38
|
-
}
|
|
39
|
-
});
|
|
40
|
-
__publicField(this, "disconnect", () => {
|
|
41
|
-
try {
|
|
42
|
-
this.provider.disconnect();
|
|
43
|
-
this._isConnected = false;
|
|
44
|
-
this._isSynced = false;
|
|
45
|
-
} catch (error) {
|
|
46
|
-
console.warn("[yjs] Error disconnecting WebRTC provider:", error);
|
|
47
|
-
}
|
|
48
|
-
});
|
|
49
|
-
this.onConnect = onConnect;
|
|
50
|
-
this.onDisconnect = onDisconnect;
|
|
51
|
-
this.onError = onError;
|
|
52
|
-
this.onSyncChange = onSyncChange;
|
|
53
|
-
this.document = doc || new Y.Doc();
|
|
54
|
-
try {
|
|
55
|
-
this.provider = new WebrtcProvider(options.roomName, this.document, {
|
|
56
|
-
awareness,
|
|
57
|
-
...options
|
|
58
|
-
});
|
|
59
|
-
this.provider.on("status", (status) => {
|
|
60
|
-
var _a, _b, _c, _d;
|
|
61
|
-
const wasConnected = this._isConnected;
|
|
62
|
-
this._isConnected = status.connected;
|
|
63
|
-
if (status.connected) {
|
|
64
|
-
if (!wasConnected) {
|
|
65
|
-
(_a = this.onConnect) == null ? void 0 : _a.call(this);
|
|
66
|
-
}
|
|
67
|
-
if (!this._isSynced) {
|
|
68
|
-
this._isSynced = true;
|
|
69
|
-
(_b = this.onSyncChange) == null ? void 0 : _b.call(this, true);
|
|
70
|
-
}
|
|
71
|
-
} else {
|
|
72
|
-
if (wasConnected) {
|
|
73
|
-
(_c = this.onDisconnect) == null ? void 0 : _c.call(this);
|
|
74
|
-
if (this._isSynced) {
|
|
75
|
-
this._isSynced = false;
|
|
76
|
-
(_d = this.onSyncChange) == null ? void 0 : _d.call(this, false);
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
});
|
|
81
|
-
} catch (error) {
|
|
82
|
-
console.warn("[yjs] Error creating WebRTC provider:", error);
|
|
83
|
-
onError == null ? void 0 : onError(error instanceof Error ? error : new Error(String(error)));
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
get isConnected() {
|
|
87
|
-
return this._isConnected;
|
|
88
|
-
}
|
|
89
|
-
get isSynced() {
|
|
90
|
-
return this._isSynced;
|
|
91
|
-
}
|
|
92
|
-
getProvider() {
|
|
93
|
-
return this.provider;
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
export {
|
|
97
|
-
WebRTCProviderWrapper
|
|
98
|
-
};
|
|
99
|
-
//# sourceMappingURL=webrtc.es.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"webrtc.es.js","sources":["../../../../../src/modules/collaborative-editing/provider/webrtc.ts"],"sourcesContent":["import type { Awareness } from 'y-protocols/awareness'\nimport type { ProviderEventHandlers } from '../types'\nimport type { UnifiedProvider } from './providerRegistry'\nimport { WebrtcProvider } from 'y-webrtc'\nimport * as Y from 'yjs'\n\nexport interface WebRTCProviderOptions {\n roomName: string\n filterBcConns?: boolean\n maxConns?: number\n password?: string\n peerOpts?: Record<string, unknown>\n signaling?: string[]\n}\n\nexport class WebRTCProviderWrapper implements UnifiedProvider {\n private provider: WebrtcProvider\n private _isConnected = false\n private _isSynced = false\n\n onConnect?: () => void\n onDisconnect?: () => void\n onError?: (error: Error) => void\n onSyncChange?: (isSynced: boolean) => void\n\n document: Y.Doc\n awareness: Awareness\n type: 'webrtc'\n\n connect = () => {\n try {\n this.provider.connect()\n }\n catch (error) {\n console.warn('[yjs] Error connecting WebRTC provider:', error)\n }\n }\n\n destroy = () => {\n try {\n this.provider.destroy()\n }\n catch (error) {\n console.warn('[yjs] Error destroying WebRTC provider:', error)\n }\n }\n\n disconnect = () => {\n try {\n this.provider.disconnect()\n this._isConnected = false\n this._isSynced = false\n }\n catch (error) {\n console.warn('[yjs] Error disconnecting WebRTC provider:', error)\n }\n }\n\n constructor({\n awareness,\n doc,\n options,\n onConnect,\n onDisconnect,\n onError,\n onSyncChange,\n }: {\n options: WebRTCProviderOptions\n awareness?: Awareness\n doc?: Y.Doc\n } & ProviderEventHandlers) {\n this.onConnect = onConnect\n this.onDisconnect = onDisconnect\n this.onError = onError\n this.onSyncChange = onSyncChange\n\n this.document = doc || new Y.Doc()\n try {\n this.provider = new WebrtcProvider(options.roomName, this.document, {\n awareness,\n ...options,\n })\n\n this.provider.on('status', (status: { connected: boolean }) => {\n const wasConnected = this._isConnected\n this._isConnected = status.connected\n if (status.connected) {\n if (!wasConnected) {\n this.onConnect?.()\n }\n if (!this._isSynced) {\n this._isSynced = true\n this.onSyncChange?.(true)\n }\n }\n else {\n if (wasConnected) {\n this.onDisconnect?.()\n\n if (this._isSynced) {\n this._isSynced = false\n this.onSyncChange?.(false)\n }\n }\n }\n })\n }\n catch (error) {\n console.warn('[yjs] Error creating WebRTC provider:', error)\n onError?.(error instanceof Error ? error : new Error(String(error)))\n }\n }\n\n get isConnected() {\n return this._isConnected\n }\n\n get isSynced() {\n return this._isSynced\n }\n\n getProvider() {\n return this.provider\n }\n}\n"],"names":[],"mappings":";;;;;AAeO,MAAM,sBAAiD;AAAA,EA2C5D,YAAY;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,GAKyB;AAtDnB;AACA,wCAAe;AACf,qCAAY;AAEpB;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA,mCAAU,MAAM;AACV,UAAA;AACF,aAAK,SAAS,QAAQ;AAAA,eAEjB,OAAO;AACJ,gBAAA,KAAK,2CAA2C,KAAK;AAAA,MAAA;AAAA,IAEjE;AAEA,mCAAU,MAAM;AACV,UAAA;AACF,aAAK,SAAS,QAAQ;AAAA,eAEjB,OAAO;AACJ,gBAAA,KAAK,2CAA2C,KAAK;AAAA,MAAA;AAAA,IAEjE;AAEA,sCAAa,MAAM;AACb,UAAA;AACF,aAAK,SAAS,WAAW;AACzB,aAAK,eAAe;AACpB,aAAK,YAAY;AAAA,eAEZ,OAAO;AACJ,gBAAA,KAAK,8CAA8C,KAAK;AAAA,MAAA;AAAA,IAEpE;AAeE,SAAK,YAAY;AACjB,SAAK,eAAe;AACpB,SAAK,UAAU;AACf,SAAK,eAAe;AAEpB,SAAK,WAAW,OAAO,IAAI,EAAE,IAAI;AAC7B,QAAA;AACF,WAAK,WAAW,IAAI,eAAe,QAAQ,UAAU,KAAK,UAAU;AAAA,QAClE;AAAA,QACA,GAAG;AAAA,MAAA,CACJ;AAED,WAAK,SAAS,GAAG,UAAU,CAAC,WAAmC;;AAC7D,cAAM,eAAe,KAAK;AAC1B,aAAK,eAAe,OAAO;AAC3B,YAAI,OAAO,WAAW;AACpB,cAAI,CAAC,cAAc;AACjB,uBAAK,cAAL;AAAA,UAAiB;AAEf,cAAA,CAAC,KAAK,WAAW;AACnB,iBAAK,YAAY;AACjB,uBAAK,iBAAL,8BAAoB;AAAA,UAAI;AAAA,QAC1B,OAEG;AACH,cAAI,cAAc;AAChB,uBAAK,iBAAL;AAEA,gBAAI,KAAK,WAAW;AAClB,mBAAK,YAAY;AACjB,yBAAK,iBAAL,8BAAoB;AAAA,YAAK;AAAA,UAC3B;AAAA,QACF;AAAA,MACF,CACD;AAAA,aAEI,OAAO;AACJ,cAAA,KAAK,yCAAyC,KAAK;AACjD,yCAAA,iBAAiB,QAAQ,QAAQ,IAAI,MAAM,OAAO,KAAK,CAAC;AAAA,IAAC;AAAA,EACrE;AAAA,EAGF,IAAI,cAAc;AAChB,WAAO,KAAK;AAAA,EAAA;AAAA,EAGd,IAAI,WAAW;AACb,WAAO,KAAK;AAAA,EAAA;AAAA,EAGd,cAAc;AACZ,WAAO,KAAK;AAAA,EAAA;AAEhB;"}
|
|
@@ -1,111 +0,0 @@
|
|
|
1
|
-
var __defProp = Object.defineProperty;
|
|
2
|
-
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
3
|
-
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
4
|
-
import { Awareness } from "y-protocols/awareness";
|
|
5
|
-
import { WebsocketProvider } from "y-websocket";
|
|
6
|
-
import * as Y from "yjs";
|
|
7
|
-
class WebsocketProviderWrapper {
|
|
8
|
-
constructor({
|
|
9
|
-
awareness,
|
|
10
|
-
doc,
|
|
11
|
-
options,
|
|
12
|
-
onConnect,
|
|
13
|
-
onDisconnect,
|
|
14
|
-
onError,
|
|
15
|
-
onSyncChange
|
|
16
|
-
}) {
|
|
17
|
-
__publicField(this, "provider");
|
|
18
|
-
__publicField(this, "_isConnected", false);
|
|
19
|
-
__publicField(this, "_isSynced", false);
|
|
20
|
-
__publicField(this, "onConnect");
|
|
21
|
-
__publicField(this, "onDisconnect");
|
|
22
|
-
__publicField(this, "onError");
|
|
23
|
-
__publicField(this, "onSyncChange");
|
|
24
|
-
__publicField(this, "document");
|
|
25
|
-
__publicField(this, "awareness");
|
|
26
|
-
__publicField(this, "type");
|
|
27
|
-
__publicField(this, "connect", () => {
|
|
28
|
-
try {
|
|
29
|
-
this.provider.connect();
|
|
30
|
-
} catch (error) {
|
|
31
|
-
console.warn("[yjs] Error connecting WebSocket provider:", error);
|
|
32
|
-
}
|
|
33
|
-
});
|
|
34
|
-
__publicField(this, "destroy", () => {
|
|
35
|
-
try {
|
|
36
|
-
this.provider.destroy();
|
|
37
|
-
} catch (error) {
|
|
38
|
-
console.warn("[yjs] Error destroying WebSocket provider:", error);
|
|
39
|
-
}
|
|
40
|
-
});
|
|
41
|
-
__publicField(this, "disconnect", () => {
|
|
42
|
-
var _a;
|
|
43
|
-
try {
|
|
44
|
-
this.provider.disconnect();
|
|
45
|
-
const wasSynced = this._isSynced;
|
|
46
|
-
this._isConnected = false;
|
|
47
|
-
this._isSynced = false;
|
|
48
|
-
if (wasSynced) {
|
|
49
|
-
(_a = this.onSyncChange) == null ? void 0 : _a.call(this, false);
|
|
50
|
-
}
|
|
51
|
-
} catch (error) {
|
|
52
|
-
console.warn("[yjs] Error disconnecting WebSocket provider:", error);
|
|
53
|
-
}
|
|
54
|
-
});
|
|
55
|
-
this.onConnect = onConnect;
|
|
56
|
-
this.onDisconnect = onDisconnect;
|
|
57
|
-
this.onError = onError;
|
|
58
|
-
this.onSyncChange = onSyncChange;
|
|
59
|
-
this.document = doc || new Y.Doc();
|
|
60
|
-
this.awareness = awareness ?? new Awareness(this.document);
|
|
61
|
-
try {
|
|
62
|
-
this.provider = new WebsocketProvider(
|
|
63
|
-
options.serverUrl,
|
|
64
|
-
options.roomName,
|
|
65
|
-
this.document,
|
|
66
|
-
{
|
|
67
|
-
awareness: this.awareness,
|
|
68
|
-
...options
|
|
69
|
-
}
|
|
70
|
-
);
|
|
71
|
-
this.provider.on("status", (event) => {
|
|
72
|
-
var _a, _b, _c, _d;
|
|
73
|
-
const wasConnected = this._isConnected;
|
|
74
|
-
this._isConnected = event.status === "connected";
|
|
75
|
-
if (event.status === "connected") {
|
|
76
|
-
if (!wasConnected) {
|
|
77
|
-
(_a = this.onConnect) == null ? void 0 : _a.call(this);
|
|
78
|
-
}
|
|
79
|
-
if (!this._isSynced) {
|
|
80
|
-
this._isSynced = true;
|
|
81
|
-
(_b = this.onSyncChange) == null ? void 0 : _b.call(this, true);
|
|
82
|
-
}
|
|
83
|
-
} else if (event.status === "disconnected") {
|
|
84
|
-
if (wasConnected) {
|
|
85
|
-
(_c = this.onDisconnect) == null ? void 0 : _c.call(this);
|
|
86
|
-
if (this._isSynced) {
|
|
87
|
-
this._isSynced = false;
|
|
88
|
-
(_d = this.onSyncChange) == null ? void 0 : _d.call(this, false);
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
});
|
|
93
|
-
} catch (error) {
|
|
94
|
-
console.warn("[yjs] Error creating WebSocket provider:", error);
|
|
95
|
-
onError == null ? void 0 : onError(error instanceof Error ? error : new Error(String(error)));
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
get isConnected() {
|
|
99
|
-
return this._isConnected;
|
|
100
|
-
}
|
|
101
|
-
get isSynced() {
|
|
102
|
-
return this._isSynced;
|
|
103
|
-
}
|
|
104
|
-
getProvider() {
|
|
105
|
-
return this.provider;
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
export {
|
|
109
|
-
WebsocketProviderWrapper
|
|
110
|
-
};
|
|
111
|
-
//# sourceMappingURL=websocket.es.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"websocket.es.js","sources":["../../../../../src/modules/collaborative-editing/provider/websocket.ts"],"sourcesContent":["import type { ProviderEventHandlers } from '../types'\nimport type { UnifiedProvider } from './providerRegistry'\nimport { Awareness } from 'y-protocols/awareness'\nimport { WebsocketProvider } from 'y-websocket'\nimport * as Y from 'yjs'\n\nexport interface WebsocketProviderOptions {\n serverUrl: string\n roomName: string\n connect?: boolean\n awareness?: any\n params?: Record<string, string>\n protocols?: string[]\n WebSocketPolyfill?: typeof WebSocket\n resyncInterval?: number\n maxBackoffTime?: number\n disableBc?: boolean\n}\n\nexport class WebsocketProviderWrapper implements UnifiedProvider {\n private provider: WebsocketProvider\n\n private _isConnected = false\n private _isSynced = false\n\n onConnect?: () => void\n onDisconnect?: () => void\n onError?: (error: Error) => void\n onSyncChange?: (isSynced: boolean) => void\n\n document: Y.Doc\n awareness: Awareness\n type: 'websocket'\n\n connect = () => {\n try {\n this.provider.connect()\n }\n catch (error) {\n console.warn('[yjs] Error connecting WebSocket provider:', error)\n }\n }\n\n destroy = () => {\n try {\n this.provider.destroy()\n }\n catch (error) {\n console.warn('[yjs] Error destroying WebSocket provider:', error)\n }\n }\n\n disconnect = () => {\n try {\n this.provider.disconnect()\n const wasSynced = this._isSynced\n\n this._isConnected = false\n this._isSynced = false\n\n if (wasSynced) {\n this.onSyncChange?.(false)\n }\n }\n catch (error) {\n console.warn('[yjs] Error disconnecting WebSocket provider:', error)\n }\n }\n\n constructor({\n awareness,\n doc,\n options,\n onConnect,\n onDisconnect,\n onError,\n onSyncChange,\n }: {\n options: WebsocketProviderOptions\n awareness?: Awareness\n doc?: Y.Doc\n } & ProviderEventHandlers) {\n this.onConnect = onConnect\n this.onDisconnect = onDisconnect\n this.onError = onError\n this.onSyncChange = onSyncChange\n\n this.document = doc || new Y.Doc()\n this.awareness = awareness ?? new Awareness(this.document)\n try {\n this.provider = new WebsocketProvider(\n options.serverUrl,\n options.roomName,\n this.document,\n {\n awareness: this.awareness,\n ...options,\n },\n )\n\n this.provider.on('status', (event: { status: 'connected' | 'disconnected' | 'connecting' }) => {\n const wasConnected = this._isConnected\n this._isConnected = event.status === 'connected'\n\n if (event.status === 'connected') {\n if (!wasConnected) {\n this.onConnect?.()\n }\n if (!this._isSynced) {\n this._isSynced = true\n this.onSyncChange?.(true)\n }\n }\n else if (event.status === 'disconnected') {\n if (wasConnected) {\n this.onDisconnect?.()\n if (this._isSynced) {\n this._isSynced = false\n this.onSyncChange?.(false)\n }\n }\n }\n })\n }\n catch (error) {\n console.warn('[yjs] Error creating WebSocket provider:', error)\n onError?.(error instanceof Error ? error : new Error(String(error)))\n }\n }\n\n get isConnected() {\n return this._isConnected\n }\n\n get isSynced() {\n return this._isSynced\n }\n\n getProvider() {\n return this.provider\n }\n}\n"],"names":[],"mappings":";;;;;;AAmBO,MAAM,yBAAoD;AAAA,EAkD/D,YAAY;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,GAKyB;AA7DnB;AAEA,wCAAe;AACf,qCAAY;AAEpB;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA,mCAAU,MAAM;AACV,UAAA;AACF,aAAK,SAAS,QAAQ;AAAA,eAEjB,OAAO;AACJ,gBAAA,KAAK,8CAA8C,KAAK;AAAA,MAAA;AAAA,IAEpE;AAEA,mCAAU,MAAM;AACV,UAAA;AACF,aAAK,SAAS,QAAQ;AAAA,eAEjB,OAAO;AACJ,gBAAA,KAAK,8CAA8C,KAAK;AAAA,MAAA;AAAA,IAEpE;AAEA,sCAAa,MAAM;;AACb,UAAA;AACF,aAAK,SAAS,WAAW;AACzB,cAAM,YAAY,KAAK;AAEvB,aAAK,eAAe;AACpB,aAAK,YAAY;AAEjB,YAAI,WAAW;AACb,qBAAK,iBAAL,8BAAoB;AAAA,QAAK;AAAA,eAGtB,OAAO;AACJ,gBAAA,KAAK,iDAAiD,KAAK;AAAA,MAAA;AAAA,IAEvE;AAeE,SAAK,YAAY;AACjB,SAAK,eAAe;AACpB,SAAK,UAAU;AACf,SAAK,eAAe;AAEpB,SAAK,WAAW,OAAO,IAAI,EAAE,IAAI;AACjC,SAAK,YAAY,aAAa,IAAI,UAAU,KAAK,QAAQ;AACrD,QAAA;AACF,WAAK,WAAW,IAAI;AAAA,QAClB,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,KAAK;AAAA,QACL;AAAA,UACE,WAAW,KAAK;AAAA,UAChB,GAAG;AAAA,QAAA;AAAA,MAEP;AAEA,WAAK,SAAS,GAAG,UAAU,CAAC,UAAmE;;AAC7F,cAAM,eAAe,KAAK;AACrB,aAAA,eAAe,MAAM,WAAW;AAEjC,YAAA,MAAM,WAAW,aAAa;AAChC,cAAI,CAAC,cAAc;AACjB,uBAAK,cAAL;AAAA,UAAiB;AAEf,cAAA,CAAC,KAAK,WAAW;AACnB,iBAAK,YAAY;AACjB,uBAAK,iBAAL,8BAAoB;AAAA,UAAI;AAAA,QAC1B,WAEO,MAAM,WAAW,gBAAgB;AACxC,cAAI,cAAc;AAChB,uBAAK,iBAAL;AACA,gBAAI,KAAK,WAAW;AAClB,mBAAK,YAAY;AACjB,yBAAK,iBAAL,8BAAoB;AAAA,YAAK;AAAA,UAC3B;AAAA,QACF;AAAA,MACF,CACD;AAAA,aAEI,OAAO;AACJ,cAAA,KAAK,4CAA4C,KAAK;AACpD,yCAAA,iBAAiB,QAAQ,QAAQ,IAAI,MAAM,OAAO,KAAK,CAAC;AAAA,IAAC;AAAA,EACrE;AAAA,EAGF,IAAI,cAAc;AAChB,WAAO,KAAK;AAAA,EAAA;AAAA,EAGd,IAAI,WAAW;AACb,WAAO,KAAK;AAAA,EAAA;AAAA,EAGd,cAAc;AACZ,WAAO,KAAK;AAAA,EAAA;AAEhB;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"counter.es.js","sources":["../../../src/modules/counter.ts"],"sourcesContent":["import type { AnyFunction } from '../config'\nimport type FluentEditor from '../fluent-editor'\nimport Quill from 'quill'\nimport { CHANGE_LANGUAGE_EVENT } from '../config'\n\nexport interface ICounterOption {\n format?: 'text' | 'html'\n unit?: 'word' | 'char'\n count?: number\n template?: string | AnyFunction\n errorTemplate?: string | AnyFunction\n}\n\nexport default class Counter {\n container: HTMLDivElement\n options: ICounterOption\n\n constructor(public quill: FluentEditor, options: ICounterOption) {\n this.options = this.resolveOptions(options)\n this.container = quill.addContainer('ql-counter')\n quill.on(Quill.events.TEXT_CHANGE, this.renderCount)\n this.quill.emitter.on(CHANGE_LANGUAGE_EVENT, () => {\n this.options = this.resolveOptions(options)\n this.renderCount()\n })\n this.renderCount()\n }\n\n resolveOptions(options: ICounterOption) {\n return Object.assign({\n format: 'text',\n unit: 'char',\n template: this.quill.getLangText('counter-template'),\n count: 500,\n }, options)\n }\n\n renderCount = () => {\n setTimeout(() => {\n // @ts-ignore\n const { format, count: totalCount, unit, template: counterTemplate, errorTemplate } = this.options\n const count = this.getContentLength(format)\n const restCount = totalCount - count\n const countUnit = unit === 'char' ? this.quill.getLangText('char') : this.quill.getLangText('word')\n let template: any = counterTemplate\n if (typeof template === 'function') {\n template = template(count, restCount)\n }\n const desc = template.replace('{{count}}', count)\n .replace('{{totalCount}}', String(totalCount))\n .replace('{{restCount}}', String(restCount))\n .replace(/{{countUnit}}/g, countUnit)\n\n let limitTemplate: any = errorTemplate || this.quill.getLangText('counter-limit-tips')\n if (typeof limitTemplate === 'function') {\n limitTemplate = limitTemplate(count, restCount)\n }\n const limitTips = limitTemplate.replace('{{countUnit}}', countUnit)\n if (restCount < 0) {\n this.container.innerHTML = errorTemplate ? limitTips : `<span style=\"color:red\">${limitTips}</span>`\n }\n else {\n this.container.innerHTML = desc\n }\n })\n }\n\n getContentLength(format) {\n let content = this.quill.getText()\n if (format === 'html') {\n let html = this.quill.root.innerHTML\n // 编辑器初始时\n if (html === '<p><br></p>' || html === '<div><br><div>') {\n html = ''\n }\n content = html\n }\n const text = content.replace(/\\s/g, '').trim()\n if (this.options.unit === 'word') {\n return !content.trim() ? 0 : content.trim().split(/\\s+/).length\n }\n return text.length\n }\n}\n"],"names":[],"mappings":";;;;;;AAaA,MAAqB,QAAQ;AAAA,EAI3B,YAAmB,OAAqB,SAAyB;AAHjE;AACA;AAsBA,uCAAc,MAAM;AAClB,iBAAW,MAAM;AAET,cAAA,EAAE,QAAQ,OAAO,YAAY,MAAM,UAAU,iBAAiB,kBAAkB,KAAK;AACrF,cAAA,QAAQ,KAAK,iBAAiB,MAAM;AAC1C,cAAM,YAAY,aAAa;AACzB,cAAA,YAAY,SAAS,SAAS,KAAK,MAAM,YAAY,MAAM,IAAI,KAAK,MAAM,YAAY,MAAM;AAClG,YAAI,WAAgB;AAChB,YAAA,OAAO,aAAa,YAAY;AACvB,qBAAA,SAAS,OAAO,SAAS;AAAA,QAAA;AAEhC,cAAA,OAAO,SAAS,QAAQ,aAAa,KAAK,EAC7C,QAAQ,kBAAkB,OAAO,UAAU,CAAC,EAC5C,QAAQ,iBAAiB,OAAO,SAAS,CAAC,EAC1C,QAAQ,kBAAkB,SAAS;AAEtC,YAAI,gBAAqB,iBAAiB,KAAK,MAAM,YAAY,oBAAoB;AACjF,YAAA,OAAO,kBAAkB,YAAY;AACvB,0BAAA,cAAc,OAAO,SAAS;AAAA,QAAA;AAEhD,cAAM,YAAY,cAAc,QAAQ,iBAAiB,SAAS;AAClE,YAAI,YAAY,GAAG;AACjB,eAAK,UAAU,YAAY,gBAAgB,YAAY,2BAA2B,SAAS;AAAA,QAAA,OAExF;AACH,eAAK,UAAU,YAAY;AAAA,QAAA;AAAA,MAC7B,CACD;AAAA,IACH;AAhDmB,SAAA,QAAA;AACZ,SAAA,UAAU,KAAK,eAAe,OAAO;AACrC,SAAA,YAAY,MAAM,aAAa,YAAY;AAChD,UAAM,GAAG,MAAM,OAAO,aAAa,KAAK,WAAW;AACnD,SAAK,MAAM,QAAQ,GAAG,uBAAuB,MAAM;AAC5C,WAAA,UAAU,KAAK,eAAe,OAAO;AAC1C,WAAK,YAAY;AAAA,IAAA,CAClB;AACD,SAAK,YAAY;AAAA,EAAA;AAAA,EAGnB,eAAe,SAAyB;AACtC,WAAO,OAAO,OAAO;AAAA,MACnB,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,UAAU,KAAK,MAAM,YAAY,kBAAkB;AAAA,MACnD,OAAO;AAAA,OACN,OAAO;AAAA,EAAA;AAAA,EAiCZ,iBAAiB,QAAQ;AACnB,QAAA,UAAU,KAAK,MAAM,QAAQ;AACjC,QAAI,WAAW,QAAQ;AACjB,UAAA,OAAO,KAAK,MAAM,KAAK;AAEvB,UAAA,SAAS,iBAAiB,SAAS,kBAAkB;AAChD,eAAA;AAAA,MAAA;AAEC,gBAAA;AAAA,IAAA;AAEZ,UAAM,OAAO,QAAQ,QAAQ,OAAO,EAAE,EAAE,KAAK;AACzC,QAAA,KAAK,QAAQ,SAAS,QAAQ;AACzB,aAAA,CAAC,QAAQ,KAAA,IAAS,IAAI,QAAQ,OAAO,MAAM,KAAK,EAAE;AAAA,IAAA;AAE3D,WAAO,KAAK;AAAA,EAAA;AAEhB;"}
|