@opentiny/fluent-editor 4.0.0-alpha.7 → 4.0.0-alpha.9
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/modules/collaborative-editing/awareness/awareness.es.js +6 -6
- package/es/modules/collaborative-editing/awareness/awareness.es.js.map +1 -1
- package/es/modules/collaborative-editing/awareness/y-indexeddb.es.js +1 -1
- package/es/modules/collaborative-editing/collaborative-editing.es.js +6 -6
- package/es/modules/collaborative-editing/collaborative-editing.es.js.map +1 -1
- package/es/modules/collaborative-editing/provider/webrtc.es.js +3 -3
- package/es/modules/collaborative-editing/provider/webrtc.es.js.map +1 -1
- package/es/modules/collaborative-editing/provider/websocket.es.js +4 -4
- package/es/modules/collaborative-editing/provider/websocket.es.js.map +1 -1
- package/es/modules/emoji.es.js +13 -9
- package/es/modules/emoji.es.js.map +1 -1
- package/lib/modules/collaborative-editing/awareness/awareness.cjs.js +23 -6
- package/lib/modules/collaborative-editing/awareness/awareness.cjs.js.map +1 -1
- package/lib/modules/collaborative-editing/awareness/y-indexeddb.cjs.js +1 -1
- package/lib/modules/collaborative-editing/collaborative-editing.cjs.js +24 -7
- package/lib/modules/collaborative-editing/collaborative-editing.cjs.js.map +1 -1
- package/lib/modules/collaborative-editing/provider/webrtc.cjs.js +20 -3
- package/lib/modules/collaborative-editing/provider/webrtc.cjs.js.map +1 -1
- package/lib/modules/collaborative-editing/provider/websocket.cjs.js +21 -4
- package/lib/modules/collaborative-editing/provider/websocket.cjs.js.map +1 -1
- package/lib/modules/emoji.cjs.js +13 -9
- package/lib/modules/emoji.cjs.js.map +1 -1
- package/package.json +1 -1
- package/types/modules/emoji.d.ts +6 -0
- package/es/_virtual/_commonjs-dynamic-modules.es.js +0 -7
- package/es/_virtual/_commonjs-dynamic-modules.es.js.map +0 -1
- package/es/_virtual/_commonjsHelpers.es.js +0 -42
- package/es/_virtual/_commonjsHelpers.es.js.map +0 -1
- package/es/_virtual/quill-cursors.es.js +0 -5
- package/es/_virtual/quill-cursors.es.js.map +0 -1
- package/es/_virtual/simplepeer.min.es.js +0 -5
- package/es/_virtual/simplepeer.min.es.js.map +0 -1
- package/es/node_modules/.pnpm/@emoji-mart_data@1.2.1/node_modules/@emoji-mart/data/sets/15/native.json.es.js +0 -40145
- package/es/node_modules/.pnpm/@emoji-mart_data@1.2.1/node_modules/@emoji-mart/data/sets/15/native.json.es.js.map +0 -1
- package/es/node_modules/.pnpm/@floating-ui_core@1.7.2/node_modules/@floating-ui/core/dist/floating-ui.core.es.js +0 -938
- package/es/node_modules/.pnpm/@floating-ui_core@1.7.2/node_modules/@floating-ui/core/dist/floating-ui.core.es.js.map +0 -1
- package/es/node_modules/.pnpm/@floating-ui_dom@1.7.2/node_modules/@floating-ui/dom/dist/floating-ui.dom.es.js +0 -624
- package/es/node_modules/.pnpm/@floating-ui_dom@1.7.2/node_modules/@floating-ui/dom/dist/floating-ui.dom.es.js.map +0 -1
- package/es/node_modules/.pnpm/@floating-ui_utils@0.2.10/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.es.js +0 -174
- package/es/node_modules/.pnpm/@floating-ui_utils@0.2.10/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.es.js.map +0 -1
- package/es/node_modules/.pnpm/@floating-ui_utils@0.2.10/node_modules/@floating-ui/utils/dist/floating-ui.utils.es.js +0 -159
- package/es/node_modules/.pnpm/@floating-ui_utils@0.2.10/node_modules/@floating-ui/utils/dist/floating-ui.utils.es.js.map +0 -1
- package/es/node_modules/.pnpm/emoji-mart@5.6.0/node_modules/emoji-mart/dist/module.es.js +0 -2849
- package/es/node_modules/.pnpm/emoji-mart@5.6.0/node_modules/emoji-mart/dist/module.es.js.map +0 -1
- package/es/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/array.es.js +0 -112
- package/es/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/array.es.js.map +0 -1
- package/es/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/binary.es.js +0 -133
- package/es/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/binary.es.js.map +0 -1
- package/es/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/broadcastchannel.es.js +0 -59
- package/es/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/broadcastchannel.es.js.map +0 -1
- package/es/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/buffer.es.js +0 -75
- package/es/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/buffer.es.js.map +0 -1
- package/es/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/conditions.es.js +0 -5
- package/es/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/conditions.es.js.map +0 -1
- package/es/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/decoding.es.js +0 -422
- package/es/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/decoding.es.js.map +0 -1
- package/es/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/dom.es.js +0 -142
- package/es/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/dom.es.js.map +0 -1
- package/es/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/encoding.es.js +0 -484
- package/es/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/encoding.es.js.map +0 -1
- package/es/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/environment.es.js +0 -79
- package/es/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/environment.es.js.map +0 -1
- package/es/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/error.es.js +0 -13
- package/es/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/error.es.js.map +0 -1
- package/es/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/eventloop.es.js +0 -69
- package/es/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/eventloop.es.js.map +0 -1
- package/es/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/function.es.js +0 -124
- package/es/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/function.es.js.map +0 -1
- package/es/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/indexeddb.es.js +0 -92
- package/es/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/indexeddb.es.js.map +0 -1
- package/es/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/iterator.es.js +0 -38
- package/es/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/iterator.es.js.map +0 -1
- package/es/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/json.es.js +0 -7
- package/es/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/json.es.js.map +0 -1
- package/es/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/logging.common.es.js +0 -99
- package/es/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/logging.common.es.js.map +0 -1
- package/es/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/logging.es.js +0 -288
- package/es/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/logging.es.js.map +0 -1
- package/es/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/map.es.js +0 -47
- package/es/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/map.es.js.map +0 -1
- package/es/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/math.es.js +0 -37
- package/es/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/math.es.js.map +0 -1
- package/es/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/metric.es.js +0 -64
- package/es/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/metric.es.js.map +0 -1
- package/es/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/mutex.es.js +0 -19
- package/es/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/mutex.es.js.map +0 -1
- package/es/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/number.es.js +0 -31
- package/es/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/number.es.js.map +0 -1
- package/es/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/object.es.js +0 -72
- package/es/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/object.es.js.map +0 -1
- package/es/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/observable.es.js +0 -128
- package/es/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/observable.es.js.map +0 -1
- package/es/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/pair.es.js +0 -22
- package/es/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/pair.es.js.map +0 -1
- package/es/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/promise.es.js +0 -50
- package/es/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/promise.es.js.map +0 -1
- package/es/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/random.es.js +0 -24
- package/es/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/random.es.js.map +0 -1
- package/es/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/set.es.js +0 -11
- package/es/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/set.es.js.map +0 -1
- package/es/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/storage.es.js +0 -44
- package/es/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/storage.es.js.map +0 -1
- package/es/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/string.es.js +0 -95
- package/es/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/string.es.js.map +0 -1
- package/es/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/symbol.es.js +0 -7
- package/es/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/symbol.es.js.map +0 -1
- package/es/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/time.es.js +0 -28
- package/es/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/time.es.js.map +0 -1
- package/es/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/traits.es.js +0 -5
- package/es/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/traits.es.js.map +0 -1
- package/es/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/url.es.js +0 -20
- package/es/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/url.es.js.map +0 -1
- package/es/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/webcrypto.es.js +0 -7
- package/es/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/webcrypto.es.js.map +0 -1
- package/es/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/websocket.es.js +0 -113
- package/es/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/websocket.es.js.map +0 -1
- package/es/node_modules/.pnpm/quill-cursors@4.0.4/node_modules/quill-cursors/dist/quill-cursors.es.js +0 -1796
- package/es/node_modules/.pnpm/quill-cursors@4.0.4/node_modules/quill-cursors/dist/quill-cursors.es.js.map +0 -1
- package/es/node_modules/.pnpm/simple-peer@9.11.1/node_modules/simple-peer/simplepeer.min.es.js +0 -2620
- package/es/node_modules/.pnpm/simple-peer@9.11.1/node_modules/simple-peer/simplepeer.min.es.js.map +0 -1
- package/es/node_modules/.pnpm/y-indexeddb@9.0.12_yjs@13.6.27/node_modules/y-indexeddb/src/y-indexeddb.es.js +0 -155
- package/es/node_modules/.pnpm/y-indexeddb@9.0.12_yjs@13.6.27/node_modules/y-indexeddb/src/y-indexeddb.es.js.map +0 -1
- package/es/node_modules/.pnpm/y-protocols@1.0.6_yjs@13.6.27/node_modules/y-protocols/auth.es.js +0 -20
- package/es/node_modules/.pnpm/y-protocols@1.0.6_yjs@13.6.27/node_modules/y-protocols/auth.es.js.map +0 -1
- package/es/node_modules/.pnpm/y-protocols@1.0.6_yjs@13.6.27/node_modules/y-protocols/awareness.es.js +0 -232
- package/es/node_modules/.pnpm/y-protocols@1.0.6_yjs@13.6.27/node_modules/y-protocols/awareness.es.js.map +0 -1
- package/es/node_modules/.pnpm/y-protocols@1.0.6_yjs@13.6.27/node_modules/y-protocols/sync.es.js +0 -58
- package/es/node_modules/.pnpm/y-protocols@1.0.6_yjs@13.6.27/node_modules/y-protocols/sync.es.js.map +0 -1
- package/es/node_modules/.pnpm/y-quill@1.0.0_quill-cursors@4.0.4_quill@2.0.3_patch_hash_dnirvjhpzdmsvdidsclwslxxji__yjs@13.6.27/node_modules/y-quill/src/y-quill.es.js +0 -157
- package/es/node_modules/.pnpm/y-quill@1.0.0_quill-cursors@4.0.4_quill@2.0.3_patch_hash_dnirvjhpzdmsvdidsclwslxxji__yjs@13.6.27/node_modules/y-quill/src/y-quill.es.js.map +0 -1
- package/es/node_modules/.pnpm/y-webrtc@10.3.0_yjs@13.6.27/node_modules/y-webrtc/src/crypto.es.js +0 -94
- package/es/node_modules/.pnpm/y-webrtc@10.3.0_yjs@13.6.27/node_modules/y-webrtc/src/crypto.es.js.map +0 -1
- package/es/node_modules/.pnpm/y-webrtc@10.3.0_yjs@13.6.27/node_modules/y-webrtc/src/y-webrtc.es.js +0 -537
- package/es/node_modules/.pnpm/y-webrtc@10.3.0_yjs@13.6.27/node_modules/y-webrtc/src/y-webrtc.es.js.map +0 -1
- package/es/node_modules/.pnpm/y-websocket@3.0.0_yjs@13.6.27/node_modules/y-websocket/src/y-websocket.es.js +0 -380
- package/es/node_modules/.pnpm/y-websocket@3.0.0_yjs@13.6.27/node_modules/y-websocket/src/y-websocket.es.js.map +0 -1
- package/es/node_modules/.pnpm/yjs@13.6.27/node_modules/yjs/dist/yjs.es.js +0 -7653
- package/es/node_modules/.pnpm/yjs@13.6.27/node_modules/yjs/dist/yjs.es.js.map +0 -1
- package/lib/_virtual/_commonjs-dynamic-modules.cjs.js +0 -7
- package/lib/_virtual/_commonjs-dynamic-modules.cjs.js.map +0 -1
- package/lib/_virtual/_commonjsHelpers.cjs.js +0 -42
- package/lib/_virtual/_commonjsHelpers.cjs.js.map +0 -1
- package/lib/_virtual/quill-cursors.cjs.js +0 -5
- package/lib/_virtual/quill-cursors.cjs.js.map +0 -1
- package/lib/_virtual/simplepeer.min.cjs.js +0 -5
- package/lib/_virtual/simplepeer.min.cjs.js.map +0 -1
- package/lib/node_modules/.pnpm/@emoji-mart_data@1.2.1/node_modules/@emoji-mart/data/sets/15/native.json.cjs.js +0 -40145
- package/lib/node_modules/.pnpm/@emoji-mart_data@1.2.1/node_modules/@emoji-mart/data/sets/15/native.json.cjs.js.map +0 -1
- package/lib/node_modules/.pnpm/@floating-ui_core@1.7.2/node_modules/@floating-ui/core/dist/floating-ui.core.cjs.js +0 -938
- package/lib/node_modules/.pnpm/@floating-ui_core@1.7.2/node_modules/@floating-ui/core/dist/floating-ui.core.cjs.js.map +0 -1
- package/lib/node_modules/.pnpm/@floating-ui_dom@1.7.2/node_modules/@floating-ui/dom/dist/floating-ui.dom.cjs.js +0 -624
- package/lib/node_modules/.pnpm/@floating-ui_dom@1.7.2/node_modules/@floating-ui/dom/dist/floating-ui.dom.cjs.js.map +0 -1
- package/lib/node_modules/.pnpm/@floating-ui_utils@0.2.10/node_modules/@floating-ui/utils/dist/floating-ui.utils.cjs.js +0 -159
- package/lib/node_modules/.pnpm/@floating-ui_utils@0.2.10/node_modules/@floating-ui/utils/dist/floating-ui.utils.cjs.js.map +0 -1
- package/lib/node_modules/.pnpm/@floating-ui_utils@0.2.10/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.cjs.js +0 -174
- package/lib/node_modules/.pnpm/@floating-ui_utils@0.2.10/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.cjs.js.map +0 -1
- package/lib/node_modules/.pnpm/emoji-mart@5.6.0/node_modules/emoji-mart/dist/module.cjs.js +0 -2847
- package/lib/node_modules/.pnpm/emoji-mart@5.6.0/node_modules/emoji-mart/dist/module.cjs.js.map +0 -1
- package/lib/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/array.cjs.js +0 -112
- package/lib/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/array.cjs.js.map +0 -1
- package/lib/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/binary.cjs.js +0 -133
- package/lib/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/binary.cjs.js.map +0 -1
- package/lib/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/broadcastchannel.cjs.js +0 -59
- package/lib/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/broadcastchannel.cjs.js.map +0 -1
- package/lib/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/buffer.cjs.js +0 -75
- package/lib/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/buffer.cjs.js.map +0 -1
- package/lib/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/conditions.cjs.js +0 -5
- package/lib/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/conditions.cjs.js.map +0 -1
- package/lib/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/decoding.cjs.js +0 -422
- package/lib/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/decoding.cjs.js.map +0 -1
- package/lib/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/dom.cjs.js +0 -142
- package/lib/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/dom.cjs.js.map +0 -1
- package/lib/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/encoding.cjs.js +0 -484
- package/lib/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/encoding.cjs.js.map +0 -1
- package/lib/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/environment.cjs.js +0 -79
- package/lib/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/environment.cjs.js.map +0 -1
- package/lib/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/error.cjs.js +0 -13
- package/lib/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/error.cjs.js.map +0 -1
- package/lib/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/eventloop.cjs.js +0 -69
- package/lib/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/eventloop.cjs.js.map +0 -1
- package/lib/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/function.cjs.js +0 -124
- package/lib/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/function.cjs.js.map +0 -1
- package/lib/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/indexeddb.cjs.js +0 -92
- package/lib/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/indexeddb.cjs.js.map +0 -1
- package/lib/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/iterator.cjs.js +0 -38
- package/lib/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/iterator.cjs.js.map +0 -1
- package/lib/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/json.cjs.js +0 -7
- package/lib/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/json.cjs.js.map +0 -1
- package/lib/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/logging.cjs.js +0 -288
- package/lib/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/logging.cjs.js.map +0 -1
- package/lib/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/logging.common.cjs.js +0 -99
- package/lib/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/logging.common.cjs.js.map +0 -1
- package/lib/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/map.cjs.js +0 -47
- package/lib/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/map.cjs.js.map +0 -1
- package/lib/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/math.cjs.js +0 -37
- package/lib/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/math.cjs.js.map +0 -1
- package/lib/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/metric.cjs.js +0 -64
- package/lib/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/metric.cjs.js.map +0 -1
- package/lib/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/mutex.cjs.js +0 -19
- package/lib/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/mutex.cjs.js.map +0 -1
- package/lib/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/number.cjs.js +0 -31
- package/lib/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/number.cjs.js.map +0 -1
- package/lib/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/object.cjs.js +0 -72
- package/lib/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/object.cjs.js.map +0 -1
- package/lib/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/observable.cjs.js +0 -128
- package/lib/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/observable.cjs.js.map +0 -1
- package/lib/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/pair.cjs.js +0 -22
- package/lib/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/pair.cjs.js.map +0 -1
- package/lib/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/promise.cjs.js +0 -50
- package/lib/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/promise.cjs.js.map +0 -1
- package/lib/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/random.cjs.js +0 -24
- package/lib/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/random.cjs.js.map +0 -1
- package/lib/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/set.cjs.js +0 -11
- package/lib/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/set.cjs.js.map +0 -1
- package/lib/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/storage.cjs.js +0 -44
- package/lib/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/storage.cjs.js.map +0 -1
- package/lib/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/string.cjs.js +0 -94
- package/lib/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/string.cjs.js.map +0 -1
- package/lib/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/symbol.cjs.js +0 -7
- package/lib/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/symbol.cjs.js.map +0 -1
- package/lib/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/time.cjs.js +0 -28
- package/lib/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/time.cjs.js.map +0 -1
- package/lib/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/traits.cjs.js +0 -5
- package/lib/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/traits.cjs.js.map +0 -1
- package/lib/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/url.cjs.js +0 -20
- package/lib/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/url.cjs.js.map +0 -1
- package/lib/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/webcrypto.cjs.js +0 -7
- package/lib/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/webcrypto.cjs.js.map +0 -1
- package/lib/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/websocket.cjs.js +0 -113
- package/lib/node_modules/.pnpm/lib0@0.2.114/node_modules/lib0/websocket.cjs.js.map +0 -1
- package/lib/node_modules/.pnpm/quill-cursors@4.0.4/node_modules/quill-cursors/dist/quill-cursors.cjs.js +0 -1796
- package/lib/node_modules/.pnpm/quill-cursors@4.0.4/node_modules/quill-cursors/dist/quill-cursors.cjs.js.map +0 -1
- package/lib/node_modules/.pnpm/simple-peer@9.11.1/node_modules/simple-peer/simplepeer.min.cjs.js +0 -2620
- package/lib/node_modules/.pnpm/simple-peer@9.11.1/node_modules/simple-peer/simplepeer.min.cjs.js.map +0 -1
- package/lib/node_modules/.pnpm/y-indexeddb@9.0.12_yjs@13.6.27/node_modules/y-indexeddb/src/y-indexeddb.cjs.js +0 -155
- package/lib/node_modules/.pnpm/y-indexeddb@9.0.12_yjs@13.6.27/node_modules/y-indexeddb/src/y-indexeddb.cjs.js.map +0 -1
- package/lib/node_modules/.pnpm/y-protocols@1.0.6_yjs@13.6.27/node_modules/y-protocols/auth.cjs.js +0 -20
- package/lib/node_modules/.pnpm/y-protocols@1.0.6_yjs@13.6.27/node_modules/y-protocols/auth.cjs.js.map +0 -1
- package/lib/node_modules/.pnpm/y-protocols@1.0.6_yjs@13.6.27/node_modules/y-protocols/awareness.cjs.js +0 -232
- package/lib/node_modules/.pnpm/y-protocols@1.0.6_yjs@13.6.27/node_modules/y-protocols/awareness.cjs.js.map +0 -1
- package/lib/node_modules/.pnpm/y-protocols@1.0.6_yjs@13.6.27/node_modules/y-protocols/sync.cjs.js +0 -58
- package/lib/node_modules/.pnpm/y-protocols@1.0.6_yjs@13.6.27/node_modules/y-protocols/sync.cjs.js.map +0 -1
- package/lib/node_modules/.pnpm/y-quill@1.0.0_quill-cursors@4.0.4_quill@2.0.3_patch_hash_dnirvjhpzdmsvdidsclwslxxji__yjs@13.6.27/node_modules/y-quill/src/y-quill.cjs.js +0 -157
- package/lib/node_modules/.pnpm/y-quill@1.0.0_quill-cursors@4.0.4_quill@2.0.3_patch_hash_dnirvjhpzdmsvdidsclwslxxji__yjs@13.6.27/node_modules/y-quill/src/y-quill.cjs.js.map +0 -1
- package/lib/node_modules/.pnpm/y-webrtc@10.3.0_yjs@13.6.27/node_modules/y-webrtc/src/crypto.cjs.js +0 -94
- package/lib/node_modules/.pnpm/y-webrtc@10.3.0_yjs@13.6.27/node_modules/y-webrtc/src/crypto.cjs.js.map +0 -1
- package/lib/node_modules/.pnpm/y-webrtc@10.3.0_yjs@13.6.27/node_modules/y-webrtc/src/y-webrtc.cjs.js +0 -537
- package/lib/node_modules/.pnpm/y-webrtc@10.3.0_yjs@13.6.27/node_modules/y-webrtc/src/y-webrtc.cjs.js.map +0 -1
- package/lib/node_modules/.pnpm/y-websocket@3.0.0_yjs@13.6.27/node_modules/y-websocket/src/y-websocket.cjs.js +0 -380
- package/lib/node_modules/.pnpm/y-websocket@3.0.0_yjs@13.6.27/node_modules/y-websocket/src/y-websocket.cjs.js.map +0 -1
- package/lib/node_modules/.pnpm/yjs@13.6.27/node_modules/yjs/dist/yjs.cjs.js +0 -7653
- package/lib/node_modules/.pnpm/yjs@13.6.27/node_modules/yjs/dist/yjs.cjs.js.map +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import * as Y from "yjs";
|
|
2
2
|
function setupAwareness(options, defaultAwareness) {
|
|
3
3
|
if (!defaultAwareness) return null;
|
|
4
4
|
const awareness = defaultAwareness;
|
|
@@ -17,8 +17,8 @@ function bindAwarenessToCursors(awareness, cursorsModule, quill, yText) {
|
|
|
17
17
|
const color = user.color || "#ff6b6b";
|
|
18
18
|
const name = user.name || `User ${clientId}`;
|
|
19
19
|
cursorsModule.createCursor(clientId.toString(), name, color);
|
|
20
|
-
const anchor = createAbsolutePositionFromRelativePosition(createRelativePositionFromJSON(state.cursor.anchor), doc);
|
|
21
|
-
const head = createAbsolutePositionFromRelativePosition(createRelativePositionFromJSON(state.cursor.head), doc);
|
|
20
|
+
const anchor = Y.createAbsolutePositionFromRelativePosition(Y.createRelativePositionFromJSON(state.cursor.anchor), doc);
|
|
21
|
+
const head = Y.createAbsolutePositionFromRelativePosition(Y.createRelativePositionFromJSON(state.cursor.head), doc);
|
|
22
22
|
if (anchor && head && anchor.type === yText && clientId) {
|
|
23
23
|
setTimeout(() => {
|
|
24
24
|
cursorsModule.moveCursor(clientId.toString(), {
|
|
@@ -38,10 +38,10 @@ function bindAwarenessToCursors(awareness, cursorsModule, quill, yText) {
|
|
|
38
38
|
setTimeout(() => {
|
|
39
39
|
var _a;
|
|
40
40
|
if (range) {
|
|
41
|
-
const anchor = createRelativePositionFromTypeIndex(yText, range.index);
|
|
42
|
-
const head = createRelativePositionFromTypeIndex(yText, range.index + range.length);
|
|
41
|
+
const anchor = Y.createRelativePositionFromTypeIndex(yText, range.index);
|
|
42
|
+
const head = Y.createRelativePositionFromTypeIndex(yText, range.index + range.length);
|
|
43
43
|
const currentState = awareness.getLocalState();
|
|
44
|
-
if (!(currentState == null ? void 0 : currentState.cursor) || !compareRelativePositions(anchor, currentState.cursor.anchor) || !compareRelativePositions(head, currentState.cursor.head)) {
|
|
44
|
+
if (!(currentState == null ? void 0 : currentState.cursor) || !Y.compareRelativePositions(anchor, currentState.cursor.anchor) || !Y.compareRelativePositions(head, currentState.cursor.head)) {
|
|
45
45
|
awareness.setLocalStateField("cursor", { anchor, head });
|
|
46
46
|
}
|
|
47
47
|
} else {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"awareness.es.js","sources":["../../../../../src/modules/collaborative-editing/awareness/awareness.ts"],"sourcesContent":["import type QuillCursors from 'quill-cursors'\r\nimport type { Awareness } from 'y-protocols/awareness'\r\nimport type FluentEditor from '../../../core/fluent-editor'\r\nimport * as Y from 'yjs'\r\n\r\nexport interface AwarenessState {\r\n name?: string\r\n color?: string\r\n}\r\n\r\nexport interface AwarenessEvents {\r\n change?: (changes: { added: number[], updated: number[], removed: number[] }, transactionOrigin: any) => void\r\n update?: ({ added, updated, removed }: { added: number[], updated: number[], removed: number[] }, origin: any) => void\r\n destroy?: () => void\r\n}\r\n\r\nexport interface AwarenessOptions {\r\n state?: AwarenessState\r\n events?: AwarenessEvents\r\n timeout?: number | undefined\r\n}\r\n\r\nexport function setupAwareness(options?: AwarenessOptions, defaultAwareness?: Awareness): Awareness | null {\r\n if (!defaultAwareness) return null\r\n\r\n const awareness = defaultAwareness\r\n\r\n if (options?.state) {\r\n awareness.setLocalStateField('user', options.state)\r\n }\r\n\r\n return awareness\r\n}\r\n\r\nexport function bindAwarenessToCursors(\r\n awareness: Awareness,\r\n cursorsModule: QuillCursors,\r\n quill: FluentEditor,\r\n yText: Y.Text,\r\n): (() => void) | void {\r\n if (!cursorsModule || !awareness) return\r\n\r\n const doc = yText.doc!\r\n\r\n const updateCursor = (clientId: number, state: any) => {\r\n try {\r\n if (state?.cursor && clientId !== awareness.clientID) {\r\n const user = state.user || {}\r\n const color = user.color || '#ff6b6b'\r\n const name = user.name || `User ${clientId}`\r\n\r\n cursorsModule.createCursor(clientId.toString(), name, color)\r\n\r\n const anchor = Y.createAbsolutePositionFromRelativePosition(Y.createRelativePositionFromJSON(state.cursor.anchor), doc)\r\n const head = Y.createAbsolutePositionFromRelativePosition(Y.createRelativePositionFromJSON(state.cursor.head), doc)\r\n\r\n if (anchor && head && anchor.type === yText && clientId) {\r\n setTimeout(() => {\r\n cursorsModule.moveCursor(clientId.toString(), {\r\n index: anchor.index,\r\n length: head.index - anchor.index,\r\n })\r\n }, 0)\r\n }\r\n }\r\n else {\r\n cursorsModule.removeCursor(clientId.toString())\r\n }\r\n }\r\n catch (err) {\r\n console.error('Cursor update failed:', err)\r\n }\r\n }\r\n\r\n const selectionChangeHandler = (range: { index: number, length: number } | null) => {\r\n setTimeout(() => {\r\n if (range) {\r\n const anchor = Y.createRelativePositionFromTypeIndex(yText, range.index)\r\n const head = Y.createRelativePositionFromTypeIndex(yText, range.index + range.length)\r\n\r\n const currentState = awareness.getLocalState()\r\n if (!currentState?.cursor\r\n || !Y.compareRelativePositions(anchor, currentState.cursor.anchor)\r\n || !Y.compareRelativePositions(head, currentState.cursor.head)) {\r\n awareness.setLocalStateField('cursor', { anchor, head })\r\n }\r\n }\r\n else {\r\n if (awareness.getLocalState()?.cursor !== null) {\r\n awareness.setLocalStateField('cursor', null)\r\n }\r\n }\r\n }, 0)\r\n }\r\n\r\n const changeHandler = ({ added, updated, removed }: {\r\n added: number[]\r\n updated: number[]\r\n removed: number[]\r\n }) => {\r\n if (quill.composition.isComposing) return\r\n const states = awareness.getStates()\r\n\r\n added.forEach((id) => {\r\n updateCursor(id, states.get(id))\r\n })\r\n\r\n updated.forEach((id) => {\r\n updateCursor(id, states.get(id))\r\n })\r\n\r\n removed.forEach((id) => {\r\n cursorsModule.removeCursor(id.toString())\r\n })\r\n }\r\n\r\n awareness.on('change', changeHandler)\r\n quill.on('editor-change', (eventName, ...args) => {\r\n if (quill.composition.isComposing) return\r\n if (eventName === 'text-change') {\r\n if (args[2] === 'user') {\r\n const range = quill.getSelection()\r\n selectionChangeHandler(range)\r\n }\r\n }\r\n else if (eventName === 'selection-change') {\r\n if (args[2] === 'user') {\r\n selectionChangeHandler(args[0] as { index: number, length: number } | null)\r\n }\r\n }\r\n })\r\n\r\n awareness.getStates().forEach((state, clientId) => {\r\n updateCursor(clientId, state)\r\n })\r\n\r\n return () => {\r\n awareness.off('change', changeHandler)\r\n quill.off('editor-change', selectionChangeHandler)\r\n }\r\n}\r\n"],"names":[
|
|
1
|
+
{"version":3,"file":"awareness.es.js","sources":["../../../../../src/modules/collaborative-editing/awareness/awareness.ts"],"sourcesContent":["import type QuillCursors from 'quill-cursors'\r\nimport type { Awareness } from 'y-protocols/awareness'\r\nimport type FluentEditor from '../../../core/fluent-editor'\r\nimport * as Y from 'yjs'\r\n\r\nexport interface AwarenessState {\r\n name?: string\r\n color?: string\r\n}\r\n\r\nexport interface AwarenessEvents {\r\n change?: (changes: { added: number[], updated: number[], removed: number[] }, transactionOrigin: any) => void\r\n update?: ({ added, updated, removed }: { added: number[], updated: number[], removed: number[] }, origin: any) => void\r\n destroy?: () => void\r\n}\r\n\r\nexport interface AwarenessOptions {\r\n state?: AwarenessState\r\n events?: AwarenessEvents\r\n timeout?: number | undefined\r\n}\r\n\r\nexport function setupAwareness(options?: AwarenessOptions, defaultAwareness?: Awareness): Awareness | null {\r\n if (!defaultAwareness) return null\r\n\r\n const awareness = defaultAwareness\r\n\r\n if (options?.state) {\r\n awareness.setLocalStateField('user', options.state)\r\n }\r\n\r\n return awareness\r\n}\r\n\r\nexport function bindAwarenessToCursors(\r\n awareness: Awareness,\r\n cursorsModule: QuillCursors,\r\n quill: FluentEditor,\r\n yText: Y.Text,\r\n): (() => void) | void {\r\n if (!cursorsModule || !awareness) return\r\n\r\n const doc = yText.doc!\r\n\r\n const updateCursor = (clientId: number, state: any) => {\r\n try {\r\n if (state?.cursor && clientId !== awareness.clientID) {\r\n const user = state.user || {}\r\n const color = user.color || '#ff6b6b'\r\n const name = user.name || `User ${clientId}`\r\n\r\n cursorsModule.createCursor(clientId.toString(), name, color)\r\n\r\n const anchor = Y.createAbsolutePositionFromRelativePosition(Y.createRelativePositionFromJSON(state.cursor.anchor), doc)\r\n const head = Y.createAbsolutePositionFromRelativePosition(Y.createRelativePositionFromJSON(state.cursor.head), doc)\r\n\r\n if (anchor && head && anchor.type === yText && clientId) {\r\n setTimeout(() => {\r\n cursorsModule.moveCursor(clientId.toString(), {\r\n index: anchor.index,\r\n length: head.index - anchor.index,\r\n })\r\n }, 0)\r\n }\r\n }\r\n else {\r\n cursorsModule.removeCursor(clientId.toString())\r\n }\r\n }\r\n catch (err) {\r\n console.error('Cursor update failed:', err)\r\n }\r\n }\r\n\r\n const selectionChangeHandler = (range: { index: number, length: number } | null) => {\r\n setTimeout(() => {\r\n if (range) {\r\n const anchor = Y.createRelativePositionFromTypeIndex(yText, range.index)\r\n const head = Y.createRelativePositionFromTypeIndex(yText, range.index + range.length)\r\n\r\n const currentState = awareness.getLocalState()\r\n if (!currentState?.cursor\r\n || !Y.compareRelativePositions(anchor, currentState.cursor.anchor)\r\n || !Y.compareRelativePositions(head, currentState.cursor.head)) {\r\n awareness.setLocalStateField('cursor', { anchor, head })\r\n }\r\n }\r\n else {\r\n if (awareness.getLocalState()?.cursor !== null) {\r\n awareness.setLocalStateField('cursor', null)\r\n }\r\n }\r\n }, 0)\r\n }\r\n\r\n const changeHandler = ({ added, updated, removed }: {\r\n added: number[]\r\n updated: number[]\r\n removed: number[]\r\n }) => {\r\n if (quill.composition.isComposing) return\r\n const states = awareness.getStates()\r\n\r\n added.forEach((id) => {\r\n updateCursor(id, states.get(id))\r\n })\r\n\r\n updated.forEach((id) => {\r\n updateCursor(id, states.get(id))\r\n })\r\n\r\n removed.forEach((id) => {\r\n cursorsModule.removeCursor(id.toString())\r\n })\r\n }\r\n\r\n awareness.on('change', changeHandler)\r\n quill.on('editor-change', (eventName, ...args) => {\r\n if (quill.composition.isComposing) return\r\n if (eventName === 'text-change') {\r\n if (args[2] === 'user') {\r\n const range = quill.getSelection()\r\n selectionChangeHandler(range)\r\n }\r\n }\r\n else if (eventName === 'selection-change') {\r\n if (args[2] === 'user') {\r\n selectionChangeHandler(args[0] as { index: number, length: number } | null)\r\n }\r\n }\r\n })\r\n\r\n awareness.getStates().forEach((state, clientId) => {\r\n updateCursor(clientId, state)\r\n })\r\n\r\n return () => {\r\n awareness.off('change', changeHandler)\r\n quill.off('editor-change', selectionChangeHandler)\r\n }\r\n}\r\n"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { IndexeddbPersistence } from "
|
|
1
|
+
import { IndexeddbPersistence } from "y-indexeddb";
|
|
2
2
|
function setupIndexedDB(doc) {
|
|
3
3
|
const fullDbName = `tiny-editor-${doc.guid}`;
|
|
4
4
|
new IndexeddbPersistence(fullDbName, doc);
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
var __defProp = Object.defineProperty;
|
|
2
2
|
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
3
3
|
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
4
|
-
import QuillCursors from "
|
|
5
|
-
import { Awareness } from "
|
|
6
|
-
import { QuillBinding } from "
|
|
7
|
-
import
|
|
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
8
|
import "./awareness/index.es.js";
|
|
9
9
|
import { setupIndexedDB } from "./awareness/y-indexeddb.es.js";
|
|
10
10
|
import { createProvider } from "./provider/providerRegistry.es.js";
|
|
11
11
|
import { setupAwareness, bindAwarenessToCursors } from "./awareness/awareness.es.js";
|
|
12
12
|
class CollaborativeEditor {
|
|
13
13
|
constructor(quill, options) {
|
|
14
|
-
__publicField(this, "ydoc", new Doc());
|
|
14
|
+
__publicField(this, "ydoc", new Y.Doc());
|
|
15
15
|
__publicField(this, "provider");
|
|
16
16
|
__publicField(this, "awareness");
|
|
17
17
|
__publicField(this, "cursors");
|
|
@@ -19,7 +19,7 @@ class CollaborativeEditor {
|
|
|
19
19
|
__publicField(this, "clearIndexedDB", null);
|
|
20
20
|
this.quill = quill;
|
|
21
21
|
this.options = options;
|
|
22
|
-
this.ydoc = this.options.ydoc || new Doc();
|
|
22
|
+
this.ydoc = this.options.ydoc || new Y.Doc();
|
|
23
23
|
if (this.options.cursors !== false) {
|
|
24
24
|
const cursorsOptions = typeof this.options.cursors === "object" ? this.options.cursors : {};
|
|
25
25
|
this.cursors = new QuillCursors(quill, cursorsOptions);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"collaborative-editing.es.js","sources":["../../../../src/modules/collaborative-editing/collaborative-editing.ts"],"sourcesContent":["import type FluentEditor from '../../fluent-editor'\r\nimport type { UnifiedProvider } from './provider/providerRegistry'\r\nimport type { YjsOptions } from './types'\r\nimport QuillCursors from 'quill-cursors'\r\nimport { Awareness } from 'y-protocols/awareness'\r\nimport { QuillBinding } from 'y-quill'\r\nimport * as Y from 'yjs'\r\nimport { bindAwarenessToCursors, setupAwareness } from './awareness'\r\nimport { setupIndexedDB } from './awareness/y-indexeddb'\r\nimport { createProvider } from './provider/providerRegistry'\r\n\r\nexport class CollaborativeEditor {\r\n private ydoc: Y.Doc = new Y.Doc()\r\n private provider: UnifiedProvider\r\n private awareness: Awareness\r\n private cursors: QuillCursors | null\r\n private cleanupBindings: (() => void) | null = null\r\n private clearIndexedDB: (() => void) | null = null\r\n\r\n constructor(\r\n public quill: FluentEditor,\r\n public options: YjsOptions,\r\n ) {\r\n this.ydoc = this.options.ydoc || new Y.Doc()\r\n\r\n if (this.options.cursors !== false) {\r\n const cursorsOptions = typeof this.options.cursors === 'object' ? this.options.cursors : {}\r\n this.cursors = new QuillCursors(quill, cursorsOptions)\r\n }\r\n\r\n if (this.options.awareness) {\r\n const awareness = setupAwareness(this.options.awareness, new Awareness(this.ydoc))\r\n if (!awareness) {\r\n throw new Error('Failed to initialize awareness')\r\n }\r\n this.awareness = awareness\r\n }\r\n else {\r\n this.awareness = new Awareness(this.ydoc)\r\n }\r\n\r\n if (this.options.provider) {\r\n const providerConfig = this.options.provider\r\n try {\r\n const provider = createProvider({\r\n doc: this.ydoc,\r\n options: providerConfig.options,\r\n type: providerConfig.type,\r\n awareness: this.awareness,\r\n onConnect: this.options.onConnect,\r\n onDisconnect: this.options.onDisconnect,\r\n onError: this.options.onError,\r\n onSyncChange: this.options.onSyncChange,\r\n })\r\n this.provider = provider\r\n }\r\n catch (error) {\r\n console.warn(\r\n `[yjs] Error creating provider of type ${providerConfig.type}:`,\r\n error,\r\n )\r\n }\r\n }\r\n\r\n if (this.provider) {\r\n const ytext = this.ydoc.getText('tiny-editor')\r\n this.cleanupBindings = bindAwarenessToCursors(this.awareness, this.cursors, quill, ytext) || null\r\n new QuillBinding(\r\n ytext,\r\n this.quill,\r\n this.awareness,\r\n )\r\n }\r\n else {\r\n console.error('Failed to initialize collaborative editor: no valid provider configured')\r\n }\r\n\r\n if (this.options.offline !== false) {\r\n this.clearIndexedDB = setupIndexedDB(this.ydoc)\r\n }\r\n }\r\n\r\n public getAwareness() {\r\n return this.awareness\r\n }\r\n\r\n public getProvider() {\r\n return this.provider\r\n }\r\n\r\n public getYDoc() {\r\n return this.ydoc\r\n }\r\n\r\n get isConnected() {\r\n return this.provider?.isConnected ?? false\r\n }\r\n\r\n get isSynced() {\r\n return this.provider?.isSynced ?? false\r\n }\r\n\r\n public getCursors() {\r\n return this.cursors\r\n }\r\n\r\n public async destroy() {\r\n this.cleanupBindings?.()\r\n this.provider?.destroy?.()\r\n this.cursors?.clearCursors()\r\n this.awareness?.destroy?.()\r\n this.clearIndexedDB?.()\r\n this.ydoc?.destroy?.()\r\n }\r\n}\r\n"],"names":[
|
|
1
|
+
{"version":3,"file":"collaborative-editing.es.js","sources":["../../../../src/modules/collaborative-editing/collaborative-editing.ts"],"sourcesContent":["import type FluentEditor from '../../fluent-editor'\r\nimport type { UnifiedProvider } from './provider/providerRegistry'\r\nimport type { YjsOptions } from './types'\r\nimport QuillCursors from 'quill-cursors'\r\nimport { Awareness } from 'y-protocols/awareness'\r\nimport { QuillBinding } from 'y-quill'\r\nimport * as Y from 'yjs'\r\nimport { bindAwarenessToCursors, setupAwareness } from './awareness'\r\nimport { setupIndexedDB } from './awareness/y-indexeddb'\r\nimport { createProvider } from './provider/providerRegistry'\r\n\r\nexport class CollaborativeEditor {\r\n private ydoc: Y.Doc = new Y.Doc()\r\n private provider: UnifiedProvider\r\n private awareness: Awareness\r\n private cursors: QuillCursors | null\r\n private cleanupBindings: (() => void) | null = null\r\n private clearIndexedDB: (() => void) | null = null\r\n\r\n constructor(\r\n public quill: FluentEditor,\r\n public options: YjsOptions,\r\n ) {\r\n this.ydoc = this.options.ydoc || new Y.Doc()\r\n\r\n if (this.options.cursors !== false) {\r\n const cursorsOptions = typeof this.options.cursors === 'object' ? this.options.cursors : {}\r\n this.cursors = new QuillCursors(quill, cursorsOptions)\r\n }\r\n\r\n if (this.options.awareness) {\r\n const awareness = setupAwareness(this.options.awareness, new Awareness(this.ydoc))\r\n if (!awareness) {\r\n throw new Error('Failed to initialize awareness')\r\n }\r\n this.awareness = awareness\r\n }\r\n else {\r\n this.awareness = new Awareness(this.ydoc)\r\n }\r\n\r\n if (this.options.provider) {\r\n const providerConfig = this.options.provider\r\n try {\r\n const provider = createProvider({\r\n doc: this.ydoc,\r\n options: providerConfig.options,\r\n type: providerConfig.type,\r\n awareness: this.awareness,\r\n onConnect: this.options.onConnect,\r\n onDisconnect: this.options.onDisconnect,\r\n onError: this.options.onError,\r\n onSyncChange: this.options.onSyncChange,\r\n })\r\n this.provider = provider\r\n }\r\n catch (error) {\r\n console.warn(\r\n `[yjs] Error creating provider of type ${providerConfig.type}:`,\r\n error,\r\n )\r\n }\r\n }\r\n\r\n if (this.provider) {\r\n const ytext = this.ydoc.getText('tiny-editor')\r\n this.cleanupBindings = bindAwarenessToCursors(this.awareness, this.cursors, quill, ytext) || null\r\n new QuillBinding(\r\n ytext,\r\n this.quill,\r\n this.awareness,\r\n )\r\n }\r\n else {\r\n console.error('Failed to initialize collaborative editor: no valid provider configured')\r\n }\r\n\r\n if (this.options.offline !== false) {\r\n this.clearIndexedDB = setupIndexedDB(this.ydoc)\r\n }\r\n }\r\n\r\n public getAwareness() {\r\n return this.awareness\r\n }\r\n\r\n public getProvider() {\r\n return this.provider\r\n }\r\n\r\n public getYDoc() {\r\n return this.ydoc\r\n }\r\n\r\n get isConnected() {\r\n return this.provider?.isConnected ?? false\r\n }\r\n\r\n get isSynced() {\r\n return this.provider?.isSynced ?? false\r\n }\r\n\r\n public getCursors() {\r\n return this.cursors\r\n }\r\n\r\n public async destroy() {\r\n this.cleanupBindings?.()\r\n this.provider?.destroy?.()\r\n this.cursors?.clearCursors()\r\n this.awareness?.destroy?.()\r\n this.clearIndexedDB?.()\r\n this.ydoc?.destroy?.()\r\n }\r\n}\r\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,8 +1,8 @@
|
|
|
1
1
|
var __defProp = Object.defineProperty;
|
|
2
2
|
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
3
3
|
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
4
|
-
import { WebrtcProvider } from "
|
|
5
|
-
import
|
|
4
|
+
import { WebrtcProvider } from "y-webrtc";
|
|
5
|
+
import * as Y from "yjs";
|
|
6
6
|
class WebRTCProviderWrapper {
|
|
7
7
|
constructor({
|
|
8
8
|
awareness,
|
|
@@ -50,7 +50,7 @@ class WebRTCProviderWrapper {
|
|
|
50
50
|
this.onDisconnect = onDisconnect;
|
|
51
51
|
this.onError = onError;
|
|
52
52
|
this.onSyncChange = onSyncChange;
|
|
53
|
-
this.document = doc || new Doc();
|
|
53
|
+
this.document = doc || new Y.Doc();
|
|
54
54
|
try {
|
|
55
55
|
this.provider = new WebrtcProvider(options.roomName, this.document, {
|
|
56
56
|
awareness,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webrtc.es.js","sources":["../../../../../src/modules/collaborative-editing/provider/webrtc.ts"],"sourcesContent":["import type { Awareness } from 'y-protocols/awareness'\r\nimport type { ProviderEventHandlers } from '../types'\r\nimport type { UnifiedProvider } from './providerRegistry'\r\nimport { WebrtcProvider } from 'y-webrtc'\r\nimport * as Y from 'yjs'\r\n\r\nexport interface WebRTCProviderOptions {\r\n roomName: string\r\n filterBcConns?: boolean\r\n maxConns?: number\r\n password?: string\r\n peerOpts?: Record<string, unknown>\r\n signaling?: string[]\r\n}\r\n\r\nexport class WebRTCProviderWrapper implements UnifiedProvider {\r\n private provider: WebrtcProvider\r\n private _isConnected = false\r\n private _isSynced = false\r\n\r\n onConnect?: () => void\r\n onDisconnect?: () => void\r\n onError?: (error: Error) => void\r\n onSyncChange?: (isSynced: boolean) => void\r\n\r\n document: Y.Doc\r\n awareness: Awareness\r\n type: 'webrtc'\r\n\r\n connect = () => {\r\n try {\r\n this.provider.connect()\r\n }\r\n catch (error) {\r\n console.warn('[yjs] Error connecting WebRTC provider:', error)\r\n }\r\n }\r\n\r\n destroy = () => {\r\n try {\r\n this.provider.destroy()\r\n }\r\n catch (error) {\r\n console.warn('[yjs] Error destroying WebRTC provider:', error)\r\n }\r\n }\r\n\r\n disconnect = () => {\r\n try {\r\n this.provider.disconnect()\r\n this._isConnected = false\r\n this._isSynced = false\r\n }\r\n catch (error) {\r\n console.warn('[yjs] Error disconnecting WebRTC provider:', error)\r\n }\r\n }\r\n\r\n constructor({\r\n awareness,\r\n doc,\r\n options,\r\n onConnect,\r\n onDisconnect,\r\n onError,\r\n onSyncChange,\r\n }: {\r\n options: WebRTCProviderOptions\r\n awareness?: Awareness\r\n doc?: Y.Doc\r\n } & ProviderEventHandlers) {\r\n this.onConnect = onConnect\r\n this.onDisconnect = onDisconnect\r\n this.onError = onError\r\n this.onSyncChange = onSyncChange\r\n\r\n this.document = doc || new Y.Doc()\r\n try {\r\n this.provider = new WebrtcProvider(options.roomName, this.document, {\r\n awareness,\r\n ...options,\r\n })\r\n\r\n this.provider.on('status', (status: { connected: boolean }) => {\r\n const wasConnected = this._isConnected\r\n this._isConnected = status.connected\r\n if (status.connected) {\r\n if (!wasConnected) {\r\n this.onConnect?.()\r\n }\r\n if (!this._isSynced) {\r\n this._isSynced = true\r\n this.onSyncChange?.(true)\r\n }\r\n }\r\n else {\r\n if (wasConnected) {\r\n this.onDisconnect?.()\r\n\r\n if (this._isSynced) {\r\n this._isSynced = false\r\n this.onSyncChange?.(false)\r\n }\r\n }\r\n }\r\n })\r\n }\r\n catch (error) {\r\n console.warn('[yjs] Error creating WebRTC provider:', error)\r\n onError?.(error instanceof Error ? error : new Error(String(error)))\r\n }\r\n }\r\n\r\n get isConnected() {\r\n return this._isConnected\r\n }\r\n\r\n get isSynced() {\r\n return this._isSynced\r\n }\r\n\r\n getProvider() {\r\n return this.provider\r\n }\r\n}\r\n"],"names":[
|
|
1
|
+
{"version":3,"file":"webrtc.es.js","sources":["../../../../../src/modules/collaborative-editing/provider/webrtc.ts"],"sourcesContent":["import type { Awareness } from 'y-protocols/awareness'\r\nimport type { ProviderEventHandlers } from '../types'\r\nimport type { UnifiedProvider } from './providerRegistry'\r\nimport { WebrtcProvider } from 'y-webrtc'\r\nimport * as Y from 'yjs'\r\n\r\nexport interface WebRTCProviderOptions {\r\n roomName: string\r\n filterBcConns?: boolean\r\n maxConns?: number\r\n password?: string\r\n peerOpts?: Record<string, unknown>\r\n signaling?: string[]\r\n}\r\n\r\nexport class WebRTCProviderWrapper implements UnifiedProvider {\r\n private provider: WebrtcProvider\r\n private _isConnected = false\r\n private _isSynced = false\r\n\r\n onConnect?: () => void\r\n onDisconnect?: () => void\r\n onError?: (error: Error) => void\r\n onSyncChange?: (isSynced: boolean) => void\r\n\r\n document: Y.Doc\r\n awareness: Awareness\r\n type: 'webrtc'\r\n\r\n connect = () => {\r\n try {\r\n this.provider.connect()\r\n }\r\n catch (error) {\r\n console.warn('[yjs] Error connecting WebRTC provider:', error)\r\n }\r\n }\r\n\r\n destroy = () => {\r\n try {\r\n this.provider.destroy()\r\n }\r\n catch (error) {\r\n console.warn('[yjs] Error destroying WebRTC provider:', error)\r\n }\r\n }\r\n\r\n disconnect = () => {\r\n try {\r\n this.provider.disconnect()\r\n this._isConnected = false\r\n this._isSynced = false\r\n }\r\n catch (error) {\r\n console.warn('[yjs] Error disconnecting WebRTC provider:', error)\r\n }\r\n }\r\n\r\n constructor({\r\n awareness,\r\n doc,\r\n options,\r\n onConnect,\r\n onDisconnect,\r\n onError,\r\n onSyncChange,\r\n }: {\r\n options: WebRTCProviderOptions\r\n awareness?: Awareness\r\n doc?: Y.Doc\r\n } & ProviderEventHandlers) {\r\n this.onConnect = onConnect\r\n this.onDisconnect = onDisconnect\r\n this.onError = onError\r\n this.onSyncChange = onSyncChange\r\n\r\n this.document = doc || new Y.Doc()\r\n try {\r\n this.provider = new WebrtcProvider(options.roomName, this.document, {\r\n awareness,\r\n ...options,\r\n })\r\n\r\n this.provider.on('status', (status: { connected: boolean }) => {\r\n const wasConnected = this._isConnected\r\n this._isConnected = status.connected\r\n if (status.connected) {\r\n if (!wasConnected) {\r\n this.onConnect?.()\r\n }\r\n if (!this._isSynced) {\r\n this._isSynced = true\r\n this.onSyncChange?.(true)\r\n }\r\n }\r\n else {\r\n if (wasConnected) {\r\n this.onDisconnect?.()\r\n\r\n if (this._isSynced) {\r\n this._isSynced = false\r\n this.onSyncChange?.(false)\r\n }\r\n }\r\n }\r\n })\r\n }\r\n catch (error) {\r\n console.warn('[yjs] Error creating WebRTC provider:', error)\r\n onError?.(error instanceof Error ? error : new Error(String(error)))\r\n }\r\n }\r\n\r\n get isConnected() {\r\n return this._isConnected\r\n }\r\n\r\n get isSynced() {\r\n return this._isSynced\r\n }\r\n\r\n getProvider() {\r\n return this.provider\r\n }\r\n}\r\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,9 +1,9 @@
|
|
|
1
1
|
var __defProp = Object.defineProperty;
|
|
2
2
|
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
3
3
|
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
4
|
-
import { Awareness } from "
|
|
5
|
-
import { WebsocketProvider } from "
|
|
6
|
-
import
|
|
4
|
+
import { Awareness } from "y-protocols/awareness";
|
|
5
|
+
import { WebsocketProvider } from "y-websocket";
|
|
6
|
+
import * as Y from "yjs";
|
|
7
7
|
class WebsocketProviderWrapper {
|
|
8
8
|
constructor({
|
|
9
9
|
awareness,
|
|
@@ -56,7 +56,7 @@ class WebsocketProviderWrapper {
|
|
|
56
56
|
this.onDisconnect = onDisconnect;
|
|
57
57
|
this.onError = onError;
|
|
58
58
|
this.onSyncChange = onSyncChange;
|
|
59
|
-
this.document = doc || new Doc();
|
|
59
|
+
this.document = doc || new Y.Doc();
|
|
60
60
|
this.awareness = awareness ?? new Awareness(this.document);
|
|
61
61
|
try {
|
|
62
62
|
this.provider = new WebsocketProvider(
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"websocket.es.js","sources":["../../../../../src/modules/collaborative-editing/provider/websocket.ts"],"sourcesContent":["import type { ProviderEventHandlers } from '../types'\r\nimport type { UnifiedProvider } from './providerRegistry'\r\nimport { Awareness } from 'y-protocols/awareness'\r\nimport { WebsocketProvider } from 'y-websocket'\r\nimport * as Y from 'yjs'\r\n\r\nexport interface WebsocketProviderOptions {\r\n serverUrl: string\r\n roomName: string\r\n connect?: boolean\r\n awareness?: any\r\n params?: Record<string, string>\r\n protocols?: string[]\r\n WebSocketPolyfill?: typeof WebSocket\r\n resyncInterval?: number\r\n maxBackoffTime?: number\r\n disableBc?: boolean\r\n}\r\n\r\nexport class WebsocketProviderWrapper implements UnifiedProvider {\r\n private provider: WebsocketProvider\r\n\r\n private _isConnected = false\r\n private _isSynced = false\r\n\r\n onConnect?: () => void\r\n onDisconnect?: () => void\r\n onError?: (error: Error) => void\r\n onSyncChange?: (isSynced: boolean) => void\r\n\r\n document: Y.Doc\r\n awareness: Awareness\r\n type: 'websocket'\r\n\r\n connect = () => {\r\n try {\r\n this.provider.connect()\r\n }\r\n catch (error) {\r\n console.warn('[yjs] Error connecting WebSocket provider:', error)\r\n }\r\n }\r\n\r\n destroy = () => {\r\n try {\r\n this.provider.destroy()\r\n }\r\n catch (error) {\r\n console.warn('[yjs] Error destroying WebSocket provider:', error)\r\n }\r\n }\r\n\r\n disconnect = () => {\r\n try {\r\n this.provider.disconnect()\r\n const wasSynced = this._isSynced\r\n\r\n this._isConnected = false\r\n this._isSynced = false\r\n\r\n if (wasSynced) {\r\n this.onSyncChange?.(false)\r\n }\r\n }\r\n catch (error) {\r\n console.warn('[yjs] Error disconnecting WebSocket provider:', error)\r\n }\r\n }\r\n\r\n constructor({\r\n awareness,\r\n doc,\r\n options,\r\n onConnect,\r\n onDisconnect,\r\n onError,\r\n onSyncChange,\r\n }: {\r\n options: WebsocketProviderOptions\r\n awareness?: Awareness\r\n doc?: Y.Doc\r\n } & ProviderEventHandlers) {\r\n this.onConnect = onConnect\r\n this.onDisconnect = onDisconnect\r\n this.onError = onError\r\n this.onSyncChange = onSyncChange\r\n\r\n this.document = doc || new Y.Doc()\r\n this.awareness = awareness ?? new Awareness(this.document)\r\n try {\r\n this.provider = new WebsocketProvider(\r\n options.serverUrl,\r\n options.roomName,\r\n this.document,\r\n {\r\n awareness: this.awareness,\r\n ...options,\r\n },\r\n )\r\n\r\n this.provider.on('status', (event: { status: 'connected' | 'disconnected' | 'connecting' }) => {\r\n const wasConnected = this._isConnected\r\n this._isConnected = event.status === 'connected'\r\n\r\n if (event.status === 'connected') {\r\n if (!wasConnected) {\r\n this.onConnect?.()\r\n }\r\n if (!this._isSynced) {\r\n this._isSynced = true\r\n this.onSyncChange?.(true)\r\n }\r\n }\r\n else if (event.status === 'disconnected') {\r\n if (wasConnected) {\r\n this.onDisconnect?.()\r\n if (this._isSynced) {\r\n this._isSynced = false\r\n this.onSyncChange?.(false)\r\n }\r\n }\r\n }\r\n })\r\n }\r\n catch (error) {\r\n console.warn('[yjs] Error creating WebSocket provider:', error)\r\n onError?.(error instanceof Error ? error : new Error(String(error)))\r\n }\r\n }\r\n\r\n get isConnected() {\r\n return this._isConnected\r\n }\r\n\r\n get isSynced() {\r\n return this._isSynced\r\n }\r\n\r\n getProvider() {\r\n return this.provider\r\n }\r\n}\r\n"],"names":[
|
|
1
|
+
{"version":3,"file":"websocket.es.js","sources":["../../../../../src/modules/collaborative-editing/provider/websocket.ts"],"sourcesContent":["import type { ProviderEventHandlers } from '../types'\r\nimport type { UnifiedProvider } from './providerRegistry'\r\nimport { Awareness } from 'y-protocols/awareness'\r\nimport { WebsocketProvider } from 'y-websocket'\r\nimport * as Y from 'yjs'\r\n\r\nexport interface WebsocketProviderOptions {\r\n serverUrl: string\r\n roomName: string\r\n connect?: boolean\r\n awareness?: any\r\n params?: Record<string, string>\r\n protocols?: string[]\r\n WebSocketPolyfill?: typeof WebSocket\r\n resyncInterval?: number\r\n maxBackoffTime?: number\r\n disableBc?: boolean\r\n}\r\n\r\nexport class WebsocketProviderWrapper implements UnifiedProvider {\r\n private provider: WebsocketProvider\r\n\r\n private _isConnected = false\r\n private _isSynced = false\r\n\r\n onConnect?: () => void\r\n onDisconnect?: () => void\r\n onError?: (error: Error) => void\r\n onSyncChange?: (isSynced: boolean) => void\r\n\r\n document: Y.Doc\r\n awareness: Awareness\r\n type: 'websocket'\r\n\r\n connect = () => {\r\n try {\r\n this.provider.connect()\r\n }\r\n catch (error) {\r\n console.warn('[yjs] Error connecting WebSocket provider:', error)\r\n }\r\n }\r\n\r\n destroy = () => {\r\n try {\r\n this.provider.destroy()\r\n }\r\n catch (error) {\r\n console.warn('[yjs] Error destroying WebSocket provider:', error)\r\n }\r\n }\r\n\r\n disconnect = () => {\r\n try {\r\n this.provider.disconnect()\r\n const wasSynced = this._isSynced\r\n\r\n this._isConnected = false\r\n this._isSynced = false\r\n\r\n if (wasSynced) {\r\n this.onSyncChange?.(false)\r\n }\r\n }\r\n catch (error) {\r\n console.warn('[yjs] Error disconnecting WebSocket provider:', error)\r\n }\r\n }\r\n\r\n constructor({\r\n awareness,\r\n doc,\r\n options,\r\n onConnect,\r\n onDisconnect,\r\n onError,\r\n onSyncChange,\r\n }: {\r\n options: WebsocketProviderOptions\r\n awareness?: Awareness\r\n doc?: Y.Doc\r\n } & ProviderEventHandlers) {\r\n this.onConnect = onConnect\r\n this.onDisconnect = onDisconnect\r\n this.onError = onError\r\n this.onSyncChange = onSyncChange\r\n\r\n this.document = doc || new Y.Doc()\r\n this.awareness = awareness ?? new Awareness(this.document)\r\n try {\r\n this.provider = new WebsocketProvider(\r\n options.serverUrl,\r\n options.roomName,\r\n this.document,\r\n {\r\n awareness: this.awareness,\r\n ...options,\r\n },\r\n )\r\n\r\n this.provider.on('status', (event: { status: 'connected' | 'disconnected' | 'connecting' }) => {\r\n const wasConnected = this._isConnected\r\n this._isConnected = event.status === 'connected'\r\n\r\n if (event.status === 'connected') {\r\n if (!wasConnected) {\r\n this.onConnect?.()\r\n }\r\n if (!this._isSynced) {\r\n this._isSynced = true\r\n this.onSyncChange?.(true)\r\n }\r\n }\r\n else if (event.status === 'disconnected') {\r\n if (wasConnected) {\r\n this.onDisconnect?.()\r\n if (this._isSynced) {\r\n this._isSynced = false\r\n this.onSyncChange?.(false)\r\n }\r\n }\r\n }\r\n })\r\n }\r\n catch (error) {\r\n console.warn('[yjs] Error creating WebSocket provider:', error)\r\n onError?.(error instanceof Error ? error : new Error(String(error)))\r\n }\r\n }\r\n\r\n get isConnected() {\r\n return this._isConnected\r\n }\r\n\r\n get isSynced() {\r\n return this._isSynced\r\n }\r\n\r\n getProvider() {\r\n return this.provider\r\n }\r\n}\r\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;"}
|
package/es/modules/emoji.es.js
CHANGED
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
var __defProp = Object.defineProperty;
|
|
2
2
|
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
3
3
|
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
4
|
-
import data from "../node_modules/.pnpm/@emoji-mart_data@1.2.1/node_modules/@emoji-mart/data/sets/15/native.json.es.js";
|
|
5
|
-
import { computePosition } from "../node_modules/.pnpm/@floating-ui_dom@1.7.2/node_modules/@floating-ui/dom/dist/floating-ui.dom.es.js";
|
|
6
|
-
import { Picker as $efa000751917694d$export$2e2bcd8739ae039 } from "../node_modules/.pnpm/emoji-mart@5.6.0/node_modules/emoji-mart/dist/module.es.js";
|
|
7
4
|
import { debounce } from "lodash-es";
|
|
8
5
|
const DEFAULT_OPTIONS = {
|
|
6
|
+
// @ts-ignore
|
|
7
|
+
emojiData: window.emojiData,
|
|
8
|
+
// @ts-ignore
|
|
9
|
+
EmojiPicker: window.EmojiPicker,
|
|
10
|
+
// @ts-ignore
|
|
11
|
+
emojiPickerPosition: window.emojiPickerPosition,
|
|
9
12
|
theme: "light",
|
|
10
13
|
set: "native",
|
|
11
14
|
skinTonePosition: "none",
|
|
@@ -31,7 +34,7 @@ class EmojiModule {
|
|
|
31
34
|
__publicField(this, "isPickerVisible", false);
|
|
32
35
|
__publicField(this, "cleanupResizeObserver", null);
|
|
33
36
|
this.quill = quill;
|
|
34
|
-
this.options = options;
|
|
37
|
+
this.options = { ...DEFAULT_OPTIONS, ...options };
|
|
35
38
|
const toolbar = this.quill.getModule("toolbar");
|
|
36
39
|
if (toolbar) {
|
|
37
40
|
toolbar.addHandler("emoji", () => {
|
|
@@ -52,8 +55,9 @@ class EmojiModule {
|
|
|
52
55
|
if (!button || !this.picker || !pickerElement) {
|
|
53
56
|
return;
|
|
54
57
|
}
|
|
58
|
+
const { emojiPickerPosition } = this.options;
|
|
55
59
|
try {
|
|
56
|
-
const { x, y } = await
|
|
60
|
+
const { x, y } = await emojiPickerPosition(button, pickerElement);
|
|
57
61
|
this.picker.style.top = `${y}px`;
|
|
58
62
|
this.picker.style.left = `${x}px`;
|
|
59
63
|
} catch (error) {
|
|
@@ -80,16 +84,16 @@ class EmojiModule {
|
|
|
80
84
|
}
|
|
81
85
|
// 创建表情选择弹窗
|
|
82
86
|
createPicker() {
|
|
87
|
+
const { EmojiPicker, emojiData, ...options } = this.options;
|
|
83
88
|
const pickerConfig = {
|
|
84
|
-
...DEFAULT_OPTIONS,
|
|
85
89
|
// emoji-mart 与 tiny-editor 国际化的的 locale 不一致使用 LOCALE_MAP 转换
|
|
86
90
|
locale: LOCALE_MAP[this.quill.lang] ?? "en",
|
|
87
|
-
|
|
88
|
-
|
|
91
|
+
data: emojiData,
|
|
92
|
+
...options,
|
|
89
93
|
onEmojiSelect: this.handleEmojiSelect.bind(this),
|
|
90
94
|
onClickOutside: this.handleClickOutside.bind(this)
|
|
91
95
|
};
|
|
92
|
-
const picker = new
|
|
96
|
+
const picker = new EmojiPicker(pickerConfig);
|
|
93
97
|
picker.id = PICKER_DOM_ID;
|
|
94
98
|
picker.style.position = "absolute";
|
|
95
99
|
picker.style.zIndex = "1000";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"emoji.es.js","sources":["../../../src/modules/emoji.ts"],"sourcesContent":["import type
|
|
1
|
+
{"version":3,"file":"emoji.es.js","sources":["../../../src/modules/emoji.ts"],"sourcesContent":["import type { EmojiMartData } from '@emoji-mart/data'\r\nimport type { computePosition } from '@floating-ui/dom'\r\nimport type { Picker } from 'emoji-mart'\r\nimport type TypeToolbar from 'quill/modules/toolbar'\r\nimport type FluentEditor from '../fluent-editor'\r\nimport { debounce } from 'lodash-es'\r\n\r\nexport interface EmojiModuleOptions {\r\n emojiData?: EmojiMartData\r\n EmojiPicker?: new (props: any) => Picker\r\n emojiPickerPosition?: typeof computePosition\r\n theme?: string\r\n locale?: string\r\n set?: string\r\n skinTonePosition?: string\r\n previewPosition?: string\r\n searchPosition?: string\r\n categories?: string[]\r\n maxFrequentRows?: number\r\n perLine?: number\r\n navPosition?: string\r\n noCountryFlags?: boolean\r\n dynamicWidth?: boolean\r\n}\r\n\r\nconst DEFAULT_OPTIONS: EmojiModuleOptions = {\r\n // @ts-ignore\r\n emojiData: window.emojiData,\r\n // @ts-ignore\r\n EmojiPicker: window.EmojiPicker,\r\n // @ts-ignore\r\n emojiPickerPosition: window.emojiPickerPosition,\r\n theme: 'light',\r\n set: 'native',\r\n skinTonePosition: 'none',\r\n previewPosition: 'bottom',\r\n searchPosition: 'sticky',\r\n categories: ['frequent', 'people', 'nature', 'foods', 'activity', 'places', 'objects', 'symbols', 'flags'],\r\n maxFrequentRows: 2,\r\n perLine: 8,\r\n navPosition: 'top',\r\n noCountryFlags: false,\r\n dynamicWidth: false,\r\n}\r\n\r\nconst PICKER_DOM_ID = 'emoji-picker'\r\n\r\nconst LOCALE_MAP = {\r\n 'zh-CN': 'zh',\r\n 'en-US': 'en',\r\n} as const\r\n\r\nclass EmojiModule {\r\n private readonly quill: FluentEditor\r\n private readonly options: EmojiModuleOptions\r\n private picker: HTMLElement | null = null\r\n private isPickerVisible = false\r\n private cleanupResizeObserver: (() => void) | null = null\r\n\r\n constructor(quill: FluentEditor, options: EmojiModuleOptions = {}) {\r\n this.quill = quill\r\n\r\n this.options = { ...DEFAULT_OPTIONS, ...options }\r\n\r\n const toolbar = this.quill.getModule('toolbar') as TypeToolbar\r\n\r\n if (toolbar) {\r\n toolbar.addHandler('emoji', () => {\r\n if (this.isPickerVisible) {\r\n this.closeDialog()\r\n }\r\n else {\r\n this.openDialog()\r\n }\r\n })\r\n }\r\n }\r\n\r\n private getEmojiButton() {\r\n return document.querySelector('.ql-emoji') as HTMLElement | null\r\n }\r\n\r\n private async updatePickerPosition() {\r\n const button = this.getEmojiButton()\r\n const pickerElement = document.getElementById(PICKER_DOM_ID)\r\n\r\n if (!button || !this.picker || !pickerElement) {\r\n return\r\n }\r\n\r\n const { emojiPickerPosition } = this.options\r\n\r\n try {\r\n const { x, y } = await emojiPickerPosition(button, pickerElement)\r\n this.picker.style.top = `${y}px`\r\n this.picker.style.left = `${x}px`\r\n }\r\n catch (error) {\r\n console.warn('Failed to compute picker position:', error)\r\n }\r\n }\r\n\r\n // 监听容器大小变化,更新表情选择弹窗位置\r\n private setupContainerResizeObserver() {\r\n const container = this.quill.root.parentElement\r\n if (!container) {\r\n return null\r\n }\r\n\r\n const debouncedUpdate = debounce(() => {\r\n this.updatePickerPosition()\r\n }, 100)\r\n\r\n const resizeObserver = new ResizeObserver(() => {\r\n debouncedUpdate()\r\n })\r\n\r\n resizeObserver.observe(container)\r\n\r\n return () => {\r\n resizeObserver.disconnect()\r\n debouncedUpdate.cancel()\r\n }\r\n }\r\n\r\n // 创建表情选择弹窗\r\n private createPicker() {\r\n const { EmojiPicker, emojiData, ...options } = this.options\r\n\r\n const pickerConfig = {\r\n // emoji-mart 与 tiny-editor 国际化的的 locale 不一致使用 LOCALE_MAP 转换\r\n locale: LOCALE_MAP[this.quill.lang] ?? 'en',\r\n data: emojiData,\r\n ...options,\r\n onEmojiSelect: this.handleEmojiSelect.bind(this),\r\n onClickOutside: this.handleClickOutside.bind(this),\r\n }\r\n\r\n const picker = new EmojiPicker(pickerConfig) as unknown as HTMLElement\r\n\r\n // 设置样式和属性\r\n picker.id = PICKER_DOM_ID\r\n picker.style.position = 'absolute'\r\n picker.style.zIndex = '1000'\r\n\r\n return picker\r\n }\r\n\r\n // 打开表情弹窗\r\n public openDialog() {\r\n if (this.picker) {\r\n return\r\n }\r\n\r\n try {\r\n this.picker = this.createPicker()\r\n document.body.appendChild(this.picker)\r\n\r\n this.updatePickerPosition()\r\n this.cleanupResizeObserver = this.setupContainerResizeObserver()\r\n this.isPickerVisible = true\r\n }\r\n catch (error) {\r\n console.error('Failed to open emoji picker:', error)\r\n this.closeDialog()\r\n }\r\n }\r\n\r\n // 关闭表情弹窗\r\n public closeDialog() {\r\n if (!this.picker) {\r\n return\r\n }\r\n\r\n this.isPickerVisible = false\r\n this.picker.remove()\r\n this.picker = null\r\n\r\n this.cleanupResizeObserver?.()\r\n this.cleanupResizeObserver = null\r\n }\r\n\r\n // 处理表情选择事件\r\n private handleEmojiSelect(emoji: { native: string }) {\r\n const selection = this.quill.getSelection(true)\r\n if (!selection) {\r\n console.warn('No selection available for emoji insertion')\r\n return\r\n }\r\n\r\n try {\r\n // 记录插入位置\r\n const insertIndex = selection.index\r\n this.quill.insertText(insertIndex, emoji.native, 'user')\r\n\r\n this.closeDialog()\r\n\r\n // 设置光标到表情符号后面\r\n this.quill.setSelection(insertIndex + emoji.native.length)\r\n }\r\n catch (error) {\r\n console.error('Failed to insert emoji:', error)\r\n }\r\n }\r\n\r\n // 处理外部点击事件\r\n private handleClickOutside(event: MouseEvent) {\r\n const button = this.getEmojiButton()\r\n\r\n const target = event.target\r\n\r\n const isClickOnButton = target === button || (target instanceof Element && button?.contains(target))\r\n\r\n // 如果点击的是表情符号按钮或其子元素,则不关闭选择器\r\n if (isClickOnButton) {\r\n return\r\n }\r\n\r\n this.closeDialog()\r\n }\r\n\r\n // 销毁模块,清理资源\r\n public destroy() {\r\n this.cleanupResizeObserver?.()\r\n this.cleanupResizeObserver = null\r\n this.closeDialog()\r\n }\r\n}\r\n\r\nexport { EmojiModule }\r\n"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,23 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
-
const
|
|
3
|
+
const Y = require("yjs");
|
|
4
|
+
function _interopNamespaceDefault(e) {
|
|
5
|
+
const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
|
|
6
|
+
if (e) {
|
|
7
|
+
for (const k in e) {
|
|
8
|
+
if (k !== "default") {
|
|
9
|
+
const d = Object.getOwnPropertyDescriptor(e, k);
|
|
10
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
11
|
+
enumerable: true,
|
|
12
|
+
get: () => e[k]
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
n.default = e;
|
|
18
|
+
return Object.freeze(n);
|
|
19
|
+
}
|
|
20
|
+
const Y__namespace = /* @__PURE__ */ _interopNamespaceDefault(Y);
|
|
4
21
|
function setupAwareness(options, defaultAwareness) {
|
|
5
22
|
if (!defaultAwareness) return null;
|
|
6
23
|
const awareness = defaultAwareness;
|
|
@@ -19,8 +36,8 @@ function bindAwarenessToCursors(awareness, cursorsModule, quill, yText) {
|
|
|
19
36
|
const color = user.color || "#ff6b6b";
|
|
20
37
|
const name = user.name || `User ${clientId}`;
|
|
21
38
|
cursorsModule.createCursor(clientId.toString(), name, color);
|
|
22
|
-
const anchor =
|
|
23
|
-
const head =
|
|
39
|
+
const anchor = Y__namespace.createAbsolutePositionFromRelativePosition(Y__namespace.createRelativePositionFromJSON(state.cursor.anchor), doc);
|
|
40
|
+
const head = Y__namespace.createAbsolutePositionFromRelativePosition(Y__namespace.createRelativePositionFromJSON(state.cursor.head), doc);
|
|
24
41
|
if (anchor && head && anchor.type === yText && clientId) {
|
|
25
42
|
setTimeout(() => {
|
|
26
43
|
cursorsModule.moveCursor(clientId.toString(), {
|
|
@@ -40,10 +57,10 @@ function bindAwarenessToCursors(awareness, cursorsModule, quill, yText) {
|
|
|
40
57
|
setTimeout(() => {
|
|
41
58
|
var _a;
|
|
42
59
|
if (range) {
|
|
43
|
-
const anchor =
|
|
44
|
-
const head =
|
|
60
|
+
const anchor = Y__namespace.createRelativePositionFromTypeIndex(yText, range.index);
|
|
61
|
+
const head = Y__namespace.createRelativePositionFromTypeIndex(yText, range.index + range.length);
|
|
45
62
|
const currentState = awareness.getLocalState();
|
|
46
|
-
if (!(currentState == null ? void 0 : currentState.cursor) || !
|
|
63
|
+
if (!(currentState == null ? void 0 : currentState.cursor) || !Y__namespace.compareRelativePositions(anchor, currentState.cursor.anchor) || !Y__namespace.compareRelativePositions(head, currentState.cursor.head)) {
|
|
47
64
|
awareness.setLocalStateField("cursor", { anchor, head });
|
|
48
65
|
}
|
|
49
66
|
} else {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"awareness.cjs.js","sources":["../../../../../src/modules/collaborative-editing/awareness/awareness.ts"],"sourcesContent":["import type QuillCursors from 'quill-cursors'\r\nimport type { Awareness } from 'y-protocols/awareness'\r\nimport type FluentEditor from '../../../core/fluent-editor'\r\nimport * as Y from 'yjs'\r\n\r\nexport interface AwarenessState {\r\n name?: string\r\n color?: string\r\n}\r\n\r\nexport interface AwarenessEvents {\r\n change?: (changes: { added: number[], updated: number[], removed: number[] }, transactionOrigin: any) => void\r\n update?: ({ added, updated, removed }: { added: number[], updated: number[], removed: number[] }, origin: any) => void\r\n destroy?: () => void\r\n}\r\n\r\nexport interface AwarenessOptions {\r\n state?: AwarenessState\r\n events?: AwarenessEvents\r\n timeout?: number | undefined\r\n}\r\n\r\nexport function setupAwareness(options?: AwarenessOptions, defaultAwareness?: Awareness): Awareness | null {\r\n if (!defaultAwareness) return null\r\n\r\n const awareness = defaultAwareness\r\n\r\n if (options?.state) {\r\n awareness.setLocalStateField('user', options.state)\r\n }\r\n\r\n return awareness\r\n}\r\n\r\nexport function bindAwarenessToCursors(\r\n awareness: Awareness,\r\n cursorsModule: QuillCursors,\r\n quill: FluentEditor,\r\n yText: Y.Text,\r\n): (() => void) | void {\r\n if (!cursorsModule || !awareness) return\r\n\r\n const doc = yText.doc!\r\n\r\n const updateCursor = (clientId: number, state: any) => {\r\n try {\r\n if (state?.cursor && clientId !== awareness.clientID) {\r\n const user = state.user || {}\r\n const color = user.color || '#ff6b6b'\r\n const name = user.name || `User ${clientId}`\r\n\r\n cursorsModule.createCursor(clientId.toString(), name, color)\r\n\r\n const anchor = Y.createAbsolutePositionFromRelativePosition(Y.createRelativePositionFromJSON(state.cursor.anchor), doc)\r\n const head = Y.createAbsolutePositionFromRelativePosition(Y.createRelativePositionFromJSON(state.cursor.head), doc)\r\n\r\n if (anchor && head && anchor.type === yText && clientId) {\r\n setTimeout(() => {\r\n cursorsModule.moveCursor(clientId.toString(), {\r\n index: anchor.index,\r\n length: head.index - anchor.index,\r\n })\r\n }, 0)\r\n }\r\n }\r\n else {\r\n cursorsModule.removeCursor(clientId.toString())\r\n }\r\n }\r\n catch (err) {\r\n console.error('Cursor update failed:', err)\r\n }\r\n }\r\n\r\n const selectionChangeHandler = (range: { index: number, length: number } | null) => {\r\n setTimeout(() => {\r\n if (range) {\r\n const anchor = Y.createRelativePositionFromTypeIndex(yText, range.index)\r\n const head = Y.createRelativePositionFromTypeIndex(yText, range.index + range.length)\r\n\r\n const currentState = awareness.getLocalState()\r\n if (!currentState?.cursor\r\n || !Y.compareRelativePositions(anchor, currentState.cursor.anchor)\r\n || !Y.compareRelativePositions(head, currentState.cursor.head)) {\r\n awareness.setLocalStateField('cursor', { anchor, head })\r\n }\r\n }\r\n else {\r\n if (awareness.getLocalState()?.cursor !== null) {\r\n awareness.setLocalStateField('cursor', null)\r\n }\r\n }\r\n }, 0)\r\n }\r\n\r\n const changeHandler = ({ added, updated, removed }: {\r\n added: number[]\r\n updated: number[]\r\n removed: number[]\r\n }) => {\r\n if (quill.composition.isComposing) return\r\n const states = awareness.getStates()\r\n\r\n added.forEach((id) => {\r\n updateCursor(id, states.get(id))\r\n })\r\n\r\n updated.forEach((id) => {\r\n updateCursor(id, states.get(id))\r\n })\r\n\r\n removed.forEach((id) => {\r\n cursorsModule.removeCursor(id.toString())\r\n })\r\n }\r\n\r\n awareness.on('change', changeHandler)\r\n quill.on('editor-change', (eventName, ...args) => {\r\n if (quill.composition.isComposing) return\r\n if (eventName === 'text-change') {\r\n if (args[2] === 'user') {\r\n const range = quill.getSelection()\r\n selectionChangeHandler(range)\r\n }\r\n }\r\n else if (eventName === 'selection-change') {\r\n if (args[2] === 'user') {\r\n selectionChangeHandler(args[0] as { index: number, length: number } | null)\r\n }\r\n }\r\n })\r\n\r\n awareness.getStates().forEach((state, clientId) => {\r\n updateCursor(clientId, state)\r\n })\r\n\r\n return () => {\r\n awareness.off('change', changeHandler)\r\n quill.off('editor-change', selectionChangeHandler)\r\n }\r\n}\r\n"],"names":["Y
|
|
1
|
+
{"version":3,"file":"awareness.cjs.js","sources":["../../../../../src/modules/collaborative-editing/awareness/awareness.ts"],"sourcesContent":["import type QuillCursors from 'quill-cursors'\r\nimport type { Awareness } from 'y-protocols/awareness'\r\nimport type FluentEditor from '../../../core/fluent-editor'\r\nimport * as Y from 'yjs'\r\n\r\nexport interface AwarenessState {\r\n name?: string\r\n color?: string\r\n}\r\n\r\nexport interface AwarenessEvents {\r\n change?: (changes: { added: number[], updated: number[], removed: number[] }, transactionOrigin: any) => void\r\n update?: ({ added, updated, removed }: { added: number[], updated: number[], removed: number[] }, origin: any) => void\r\n destroy?: () => void\r\n}\r\n\r\nexport interface AwarenessOptions {\r\n state?: AwarenessState\r\n events?: AwarenessEvents\r\n timeout?: number | undefined\r\n}\r\n\r\nexport function setupAwareness(options?: AwarenessOptions, defaultAwareness?: Awareness): Awareness | null {\r\n if (!defaultAwareness) return null\r\n\r\n const awareness = defaultAwareness\r\n\r\n if (options?.state) {\r\n awareness.setLocalStateField('user', options.state)\r\n }\r\n\r\n return awareness\r\n}\r\n\r\nexport function bindAwarenessToCursors(\r\n awareness: Awareness,\r\n cursorsModule: QuillCursors,\r\n quill: FluentEditor,\r\n yText: Y.Text,\r\n): (() => void) | void {\r\n if (!cursorsModule || !awareness) return\r\n\r\n const doc = yText.doc!\r\n\r\n const updateCursor = (clientId: number, state: any) => {\r\n try {\r\n if (state?.cursor && clientId !== awareness.clientID) {\r\n const user = state.user || {}\r\n const color = user.color || '#ff6b6b'\r\n const name = user.name || `User ${clientId}`\r\n\r\n cursorsModule.createCursor(clientId.toString(), name, color)\r\n\r\n const anchor = Y.createAbsolutePositionFromRelativePosition(Y.createRelativePositionFromJSON(state.cursor.anchor), doc)\r\n const head = Y.createAbsolutePositionFromRelativePosition(Y.createRelativePositionFromJSON(state.cursor.head), doc)\r\n\r\n if (anchor && head && anchor.type === yText && clientId) {\r\n setTimeout(() => {\r\n cursorsModule.moveCursor(clientId.toString(), {\r\n index: anchor.index,\r\n length: head.index - anchor.index,\r\n })\r\n }, 0)\r\n }\r\n }\r\n else {\r\n cursorsModule.removeCursor(clientId.toString())\r\n }\r\n }\r\n catch (err) {\r\n console.error('Cursor update failed:', err)\r\n }\r\n }\r\n\r\n const selectionChangeHandler = (range: { index: number, length: number } | null) => {\r\n setTimeout(() => {\r\n if (range) {\r\n const anchor = Y.createRelativePositionFromTypeIndex(yText, range.index)\r\n const head = Y.createRelativePositionFromTypeIndex(yText, range.index + range.length)\r\n\r\n const currentState = awareness.getLocalState()\r\n if (!currentState?.cursor\r\n || !Y.compareRelativePositions(anchor, currentState.cursor.anchor)\r\n || !Y.compareRelativePositions(head, currentState.cursor.head)) {\r\n awareness.setLocalStateField('cursor', { anchor, head })\r\n }\r\n }\r\n else {\r\n if (awareness.getLocalState()?.cursor !== null) {\r\n awareness.setLocalStateField('cursor', null)\r\n }\r\n }\r\n }, 0)\r\n }\r\n\r\n const changeHandler = ({ added, updated, removed }: {\r\n added: number[]\r\n updated: number[]\r\n removed: number[]\r\n }) => {\r\n if (quill.composition.isComposing) return\r\n const states = awareness.getStates()\r\n\r\n added.forEach((id) => {\r\n updateCursor(id, states.get(id))\r\n })\r\n\r\n updated.forEach((id) => {\r\n updateCursor(id, states.get(id))\r\n })\r\n\r\n removed.forEach((id) => {\r\n cursorsModule.removeCursor(id.toString())\r\n })\r\n }\r\n\r\n awareness.on('change', changeHandler)\r\n quill.on('editor-change', (eventName, ...args) => {\r\n if (quill.composition.isComposing) return\r\n if (eventName === 'text-change') {\r\n if (args[2] === 'user') {\r\n const range = quill.getSelection()\r\n selectionChangeHandler(range)\r\n }\r\n }\r\n else if (eventName === 'selection-change') {\r\n if (args[2] === 'user') {\r\n selectionChangeHandler(args[0] as { index: number, length: number } | null)\r\n }\r\n }\r\n })\r\n\r\n awareness.getStates().forEach((state, clientId) => {\r\n updateCursor(clientId, state)\r\n })\r\n\r\n return () => {\r\n awareness.off('change', changeHandler)\r\n quill.off('editor-change', selectionChangeHandler)\r\n }\r\n}\r\n"],"names":["Y"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
-
const yIndexeddb = require("
|
|
3
|
+
const yIndexeddb = require("y-indexeddb");
|
|
4
4
|
function setupIndexedDB(doc) {
|
|
5
5
|
const fullDbName = `tiny-editor-${doc.guid}`;
|
|
6
6
|
new yIndexeddb.IndexeddbPersistence(fullDbName, doc);
|
|
@@ -3,17 +3,34 @@ var __defProp = Object.defineProperty;
|
|
|
3
3
|
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
4
4
|
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
5
5
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
6
|
-
const
|
|
7
|
-
const awareness$1 = require("
|
|
8
|
-
const yQuill = require("
|
|
9
|
-
const
|
|
6
|
+
const QuillCursors = require("quill-cursors");
|
|
7
|
+
const awareness$1 = require("y-protocols/awareness");
|
|
8
|
+
const yQuill = require("y-quill");
|
|
9
|
+
const Y = require("yjs");
|
|
10
10
|
require("./awareness/index.cjs.js");
|
|
11
11
|
const yIndexeddb = require("./awareness/y-indexeddb.cjs.js");
|
|
12
12
|
const providerRegistry = require("./provider/providerRegistry.cjs.js");
|
|
13
13
|
const awareness = require("./awareness/awareness.cjs.js");
|
|
14
|
+
function _interopNamespaceDefault(e) {
|
|
15
|
+
const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
|
|
16
|
+
if (e) {
|
|
17
|
+
for (const k in e) {
|
|
18
|
+
if (k !== "default") {
|
|
19
|
+
const d = Object.getOwnPropertyDescriptor(e, k);
|
|
20
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
21
|
+
enumerable: true,
|
|
22
|
+
get: () => e[k]
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
n.default = e;
|
|
28
|
+
return Object.freeze(n);
|
|
29
|
+
}
|
|
30
|
+
const Y__namespace = /* @__PURE__ */ _interopNamespaceDefault(Y);
|
|
14
31
|
class CollaborativeEditor {
|
|
15
32
|
constructor(quill, options) {
|
|
16
|
-
__publicField(this, "ydoc", new
|
|
33
|
+
__publicField(this, "ydoc", new Y__namespace.Doc());
|
|
17
34
|
__publicField(this, "provider");
|
|
18
35
|
__publicField(this, "awareness");
|
|
19
36
|
__publicField(this, "cursors");
|
|
@@ -21,10 +38,10 @@ class CollaborativeEditor {
|
|
|
21
38
|
__publicField(this, "clearIndexedDB", null);
|
|
22
39
|
this.quill = quill;
|
|
23
40
|
this.options = options;
|
|
24
|
-
this.ydoc = this.options.ydoc || new
|
|
41
|
+
this.ydoc = this.options.ydoc || new Y__namespace.Doc();
|
|
25
42
|
if (this.options.cursors !== false) {
|
|
26
43
|
const cursorsOptions = typeof this.options.cursors === "object" ? this.options.cursors : {};
|
|
27
|
-
this.cursors = new
|
|
44
|
+
this.cursors = new QuillCursors(quill, cursorsOptions);
|
|
28
45
|
}
|
|
29
46
|
if (this.options.awareness) {
|
|
30
47
|
const awareness$2 = awareness.setupAwareness(this.options.awareness, new awareness$1.Awareness(this.ydoc));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"collaborative-editing.cjs.js","sources":["../../../../src/modules/collaborative-editing/collaborative-editing.ts"],"sourcesContent":["import type FluentEditor from '../../fluent-editor'\r\nimport type { UnifiedProvider } from './provider/providerRegistry'\r\nimport type { YjsOptions } from './types'\r\nimport QuillCursors from 'quill-cursors'\r\nimport { Awareness } from 'y-protocols/awareness'\r\nimport { QuillBinding } from 'y-quill'\r\nimport * as Y from 'yjs'\r\nimport { bindAwarenessToCursors, setupAwareness } from './awareness'\r\nimport { setupIndexedDB } from './awareness/y-indexeddb'\r\nimport { createProvider } from './provider/providerRegistry'\r\n\r\nexport class CollaborativeEditor {\r\n private ydoc: Y.Doc = new Y.Doc()\r\n private provider: UnifiedProvider\r\n private awareness: Awareness\r\n private cursors: QuillCursors | null\r\n private cleanupBindings: (() => void) | null = null\r\n private clearIndexedDB: (() => void) | null = null\r\n\r\n constructor(\r\n public quill: FluentEditor,\r\n public options: YjsOptions,\r\n ) {\r\n this.ydoc = this.options.ydoc || new Y.Doc()\r\n\r\n if (this.options.cursors !== false) {\r\n const cursorsOptions = typeof this.options.cursors === 'object' ? this.options.cursors : {}\r\n this.cursors = new QuillCursors(quill, cursorsOptions)\r\n }\r\n\r\n if (this.options.awareness) {\r\n const awareness = setupAwareness(this.options.awareness, new Awareness(this.ydoc))\r\n if (!awareness) {\r\n throw new Error('Failed to initialize awareness')\r\n }\r\n this.awareness = awareness\r\n }\r\n else {\r\n this.awareness = new Awareness(this.ydoc)\r\n }\r\n\r\n if (this.options.provider) {\r\n const providerConfig = this.options.provider\r\n try {\r\n const provider = createProvider({\r\n doc: this.ydoc,\r\n options: providerConfig.options,\r\n type: providerConfig.type,\r\n awareness: this.awareness,\r\n onConnect: this.options.onConnect,\r\n onDisconnect: this.options.onDisconnect,\r\n onError: this.options.onError,\r\n onSyncChange: this.options.onSyncChange,\r\n })\r\n this.provider = provider\r\n }\r\n catch (error) {\r\n console.warn(\r\n `[yjs] Error creating provider of type ${providerConfig.type}:`,\r\n error,\r\n )\r\n }\r\n }\r\n\r\n if (this.provider) {\r\n const ytext = this.ydoc.getText('tiny-editor')\r\n this.cleanupBindings = bindAwarenessToCursors(this.awareness, this.cursors, quill, ytext) || null\r\n new QuillBinding(\r\n ytext,\r\n this.quill,\r\n this.awareness,\r\n )\r\n }\r\n else {\r\n console.error('Failed to initialize collaborative editor: no valid provider configured')\r\n }\r\n\r\n if (this.options.offline !== false) {\r\n this.clearIndexedDB = setupIndexedDB(this.ydoc)\r\n }\r\n }\r\n\r\n public getAwareness() {\r\n return this.awareness\r\n }\r\n\r\n public getProvider() {\r\n return this.provider\r\n }\r\n\r\n public getYDoc() {\r\n return this.ydoc\r\n }\r\n\r\n get isConnected() {\r\n return this.provider?.isConnected ?? false\r\n }\r\n\r\n get isSynced() {\r\n return this.provider?.isSynced ?? false\r\n }\r\n\r\n public getCursors() {\r\n return this.cursors\r\n }\r\n\r\n public async destroy() {\r\n this.cleanupBindings?.()\r\n this.provider?.destroy?.()\r\n this.cursors?.clearCursors()\r\n this.awareness?.destroy?.()\r\n this.clearIndexedDB?.()\r\n this.ydoc?.destroy?.()\r\n }\r\n}\r\n"],"names":["Y
|
|
1
|
+
{"version":3,"file":"collaborative-editing.cjs.js","sources":["../../../../src/modules/collaborative-editing/collaborative-editing.ts"],"sourcesContent":["import type FluentEditor from '../../fluent-editor'\r\nimport type { UnifiedProvider } from './provider/providerRegistry'\r\nimport type { YjsOptions } from './types'\r\nimport QuillCursors from 'quill-cursors'\r\nimport { Awareness } from 'y-protocols/awareness'\r\nimport { QuillBinding } from 'y-quill'\r\nimport * as Y from 'yjs'\r\nimport { bindAwarenessToCursors, setupAwareness } from './awareness'\r\nimport { setupIndexedDB } from './awareness/y-indexeddb'\r\nimport { createProvider } from './provider/providerRegistry'\r\n\r\nexport class CollaborativeEditor {\r\n private ydoc: Y.Doc = new Y.Doc()\r\n private provider: UnifiedProvider\r\n private awareness: Awareness\r\n private cursors: QuillCursors | null\r\n private cleanupBindings: (() => void) | null = null\r\n private clearIndexedDB: (() => void) | null = null\r\n\r\n constructor(\r\n public quill: FluentEditor,\r\n public options: YjsOptions,\r\n ) {\r\n this.ydoc = this.options.ydoc || new Y.Doc()\r\n\r\n if (this.options.cursors !== false) {\r\n const cursorsOptions = typeof this.options.cursors === 'object' ? this.options.cursors : {}\r\n this.cursors = new QuillCursors(quill, cursorsOptions)\r\n }\r\n\r\n if (this.options.awareness) {\r\n const awareness = setupAwareness(this.options.awareness, new Awareness(this.ydoc))\r\n if (!awareness) {\r\n throw new Error('Failed to initialize awareness')\r\n }\r\n this.awareness = awareness\r\n }\r\n else {\r\n this.awareness = new Awareness(this.ydoc)\r\n }\r\n\r\n if (this.options.provider) {\r\n const providerConfig = this.options.provider\r\n try {\r\n const provider = createProvider({\r\n doc: this.ydoc,\r\n options: providerConfig.options,\r\n type: providerConfig.type,\r\n awareness: this.awareness,\r\n onConnect: this.options.onConnect,\r\n onDisconnect: this.options.onDisconnect,\r\n onError: this.options.onError,\r\n onSyncChange: this.options.onSyncChange,\r\n })\r\n this.provider = provider\r\n }\r\n catch (error) {\r\n console.warn(\r\n `[yjs] Error creating provider of type ${providerConfig.type}:`,\r\n error,\r\n )\r\n }\r\n }\r\n\r\n if (this.provider) {\r\n const ytext = this.ydoc.getText('tiny-editor')\r\n this.cleanupBindings = bindAwarenessToCursors(this.awareness, this.cursors, quill, ytext) || null\r\n new QuillBinding(\r\n ytext,\r\n this.quill,\r\n this.awareness,\r\n )\r\n }\r\n else {\r\n console.error('Failed to initialize collaborative editor: no valid provider configured')\r\n }\r\n\r\n if (this.options.offline !== false) {\r\n this.clearIndexedDB = setupIndexedDB(this.ydoc)\r\n }\r\n }\r\n\r\n public getAwareness() {\r\n return this.awareness\r\n }\r\n\r\n public getProvider() {\r\n return this.provider\r\n }\r\n\r\n public getYDoc() {\r\n return this.ydoc\r\n }\r\n\r\n get isConnected() {\r\n return this.provider?.isConnected ?? false\r\n }\r\n\r\n get isSynced() {\r\n return this.provider?.isSynced ?? false\r\n }\r\n\r\n public getCursors() {\r\n return this.cursors\r\n }\r\n\r\n public async destroy() {\r\n this.cleanupBindings?.()\r\n this.provider?.destroy?.()\r\n this.cursors?.clearCursors()\r\n this.awareness?.destroy?.()\r\n this.clearIndexedDB?.()\r\n this.ydoc?.destroy?.()\r\n }\r\n}\r\n"],"names":["Y","awareness","setupAwareness","Awareness","createProvider","bindAwarenessToCursors","QuillBinding","setupIndexedDB"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAWO,MAAM,oBAAoB;AAAA,EAQ/B,YACS,OACA,SACP;AAVM,gCAAc,IAAIA,aAAE,IAAI;AACxB;AACA;AACA;AACA,2CAAuC;AACvC,0CAAsC;AAGrC,SAAA,QAAA;AACA,SAAA,UAAA;AAEP,SAAK,OAAO,KAAK,QAAQ,QAAQ,IAAIA,aAAE,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,YAAAC,cAAYC,yBAAe,KAAK,QAAQ,WAAW,IAAIC,YAAA,UAAU,KAAK,IAAI,CAAC;AACjF,UAAI,CAACF,aAAW;AACR,cAAA,IAAI,MAAM,gCAAgC;AAAA,MAAA;AAElD,WAAK,YAAYA;AAAAA,IAAA,OAEd;AACH,WAAK,YAAY,IAAIE,sBAAU,KAAK,IAAI;AAAA,IAAA;AAGtC,QAAA,KAAK,QAAQ,UAAU;AACnB,YAAA,iBAAiB,KAAK,QAAQ;AAChC,UAAA;AACF,cAAM,WAAWC,iBAAAA,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,kBAAkBC,iCAAuB,KAAK,WAAW,KAAK,SAAS,OAAO,KAAK,KAAK;AACzF,UAAAC,OAAA;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,iBAAiBC,0BAAe,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;;"}
|
|
@@ -3,8 +3,25 @@ var __defProp = Object.defineProperty;
|
|
|
3
3
|
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
4
4
|
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
5
5
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
6
|
-
const yWebrtc = require("
|
|
7
|
-
const
|
|
6
|
+
const yWebrtc = require("y-webrtc");
|
|
7
|
+
const Y = require("yjs");
|
|
8
|
+
function _interopNamespaceDefault(e) {
|
|
9
|
+
const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
|
|
10
|
+
if (e) {
|
|
11
|
+
for (const k in e) {
|
|
12
|
+
if (k !== "default") {
|
|
13
|
+
const d = Object.getOwnPropertyDescriptor(e, k);
|
|
14
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
15
|
+
enumerable: true,
|
|
16
|
+
get: () => e[k]
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
n.default = e;
|
|
22
|
+
return Object.freeze(n);
|
|
23
|
+
}
|
|
24
|
+
const Y__namespace = /* @__PURE__ */ _interopNamespaceDefault(Y);
|
|
8
25
|
class WebRTCProviderWrapper {
|
|
9
26
|
constructor({
|
|
10
27
|
awareness,
|
|
@@ -52,7 +69,7 @@ class WebRTCProviderWrapper {
|
|
|
52
69
|
this.onDisconnect = onDisconnect;
|
|
53
70
|
this.onError = onError;
|
|
54
71
|
this.onSyncChange = onSyncChange;
|
|
55
|
-
this.document = doc || new
|
|
72
|
+
this.document = doc || new Y__namespace.Doc();
|
|
56
73
|
try {
|
|
57
74
|
this.provider = new yWebrtc.WebrtcProvider(options.roomName, this.document, {
|
|
58
75
|
awareness,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webrtc.cjs.js","sources":["../../../../../src/modules/collaborative-editing/provider/webrtc.ts"],"sourcesContent":["import type { Awareness } from 'y-protocols/awareness'\r\nimport type { ProviderEventHandlers } from '../types'\r\nimport type { UnifiedProvider } from './providerRegistry'\r\nimport { WebrtcProvider } from 'y-webrtc'\r\nimport * as Y from 'yjs'\r\n\r\nexport interface WebRTCProviderOptions {\r\n roomName: string\r\n filterBcConns?: boolean\r\n maxConns?: number\r\n password?: string\r\n peerOpts?: Record<string, unknown>\r\n signaling?: string[]\r\n}\r\n\r\nexport class WebRTCProviderWrapper implements UnifiedProvider {\r\n private provider: WebrtcProvider\r\n private _isConnected = false\r\n private _isSynced = false\r\n\r\n onConnect?: () => void\r\n onDisconnect?: () => void\r\n onError?: (error: Error) => void\r\n onSyncChange?: (isSynced: boolean) => void\r\n\r\n document: Y.Doc\r\n awareness: Awareness\r\n type: 'webrtc'\r\n\r\n connect = () => {\r\n try {\r\n this.provider.connect()\r\n }\r\n catch (error) {\r\n console.warn('[yjs] Error connecting WebRTC provider:', error)\r\n }\r\n }\r\n\r\n destroy = () => {\r\n try {\r\n this.provider.destroy()\r\n }\r\n catch (error) {\r\n console.warn('[yjs] Error destroying WebRTC provider:', error)\r\n }\r\n }\r\n\r\n disconnect = () => {\r\n try {\r\n this.provider.disconnect()\r\n this._isConnected = false\r\n this._isSynced = false\r\n }\r\n catch (error) {\r\n console.warn('[yjs] Error disconnecting WebRTC provider:', error)\r\n }\r\n }\r\n\r\n constructor({\r\n awareness,\r\n doc,\r\n options,\r\n onConnect,\r\n onDisconnect,\r\n onError,\r\n onSyncChange,\r\n }: {\r\n options: WebRTCProviderOptions\r\n awareness?: Awareness\r\n doc?: Y.Doc\r\n } & ProviderEventHandlers) {\r\n this.onConnect = onConnect\r\n this.onDisconnect = onDisconnect\r\n this.onError = onError\r\n this.onSyncChange = onSyncChange\r\n\r\n this.document = doc || new Y.Doc()\r\n try {\r\n this.provider = new WebrtcProvider(options.roomName, this.document, {\r\n awareness,\r\n ...options,\r\n })\r\n\r\n this.provider.on('status', (status: { connected: boolean }) => {\r\n const wasConnected = this._isConnected\r\n this._isConnected = status.connected\r\n if (status.connected) {\r\n if (!wasConnected) {\r\n this.onConnect?.()\r\n }\r\n if (!this._isSynced) {\r\n this._isSynced = true\r\n this.onSyncChange?.(true)\r\n }\r\n }\r\n else {\r\n if (wasConnected) {\r\n this.onDisconnect?.()\r\n\r\n if (this._isSynced) {\r\n this._isSynced = false\r\n this.onSyncChange?.(false)\r\n }\r\n }\r\n }\r\n })\r\n }\r\n catch (error) {\r\n console.warn('[yjs] Error creating WebRTC provider:', error)\r\n onError?.(error instanceof Error ? error : new Error(String(error)))\r\n }\r\n }\r\n\r\n get isConnected() {\r\n return this._isConnected\r\n }\r\n\r\n get isSynced() {\r\n return this._isSynced\r\n }\r\n\r\n getProvider() {\r\n return this.provider\r\n }\r\n}\r\n"],"names":["Y
|
|
1
|
+
{"version":3,"file":"webrtc.cjs.js","sources":["../../../../../src/modules/collaborative-editing/provider/webrtc.ts"],"sourcesContent":["import type { Awareness } from 'y-protocols/awareness'\r\nimport type { ProviderEventHandlers } from '../types'\r\nimport type { UnifiedProvider } from './providerRegistry'\r\nimport { WebrtcProvider } from 'y-webrtc'\r\nimport * as Y from 'yjs'\r\n\r\nexport interface WebRTCProviderOptions {\r\n roomName: string\r\n filterBcConns?: boolean\r\n maxConns?: number\r\n password?: string\r\n peerOpts?: Record<string, unknown>\r\n signaling?: string[]\r\n}\r\n\r\nexport class WebRTCProviderWrapper implements UnifiedProvider {\r\n private provider: WebrtcProvider\r\n private _isConnected = false\r\n private _isSynced = false\r\n\r\n onConnect?: () => void\r\n onDisconnect?: () => void\r\n onError?: (error: Error) => void\r\n onSyncChange?: (isSynced: boolean) => void\r\n\r\n document: Y.Doc\r\n awareness: Awareness\r\n type: 'webrtc'\r\n\r\n connect = () => {\r\n try {\r\n this.provider.connect()\r\n }\r\n catch (error) {\r\n console.warn('[yjs] Error connecting WebRTC provider:', error)\r\n }\r\n }\r\n\r\n destroy = () => {\r\n try {\r\n this.provider.destroy()\r\n }\r\n catch (error) {\r\n console.warn('[yjs] Error destroying WebRTC provider:', error)\r\n }\r\n }\r\n\r\n disconnect = () => {\r\n try {\r\n this.provider.disconnect()\r\n this._isConnected = false\r\n this._isSynced = false\r\n }\r\n catch (error) {\r\n console.warn('[yjs] Error disconnecting WebRTC provider:', error)\r\n }\r\n }\r\n\r\n constructor({\r\n awareness,\r\n doc,\r\n options,\r\n onConnect,\r\n onDisconnect,\r\n onError,\r\n onSyncChange,\r\n }: {\r\n options: WebRTCProviderOptions\r\n awareness?: Awareness\r\n doc?: Y.Doc\r\n } & ProviderEventHandlers) {\r\n this.onConnect = onConnect\r\n this.onDisconnect = onDisconnect\r\n this.onError = onError\r\n this.onSyncChange = onSyncChange\r\n\r\n this.document = doc || new Y.Doc()\r\n try {\r\n this.provider = new WebrtcProvider(options.roomName, this.document, {\r\n awareness,\r\n ...options,\r\n })\r\n\r\n this.provider.on('status', (status: { connected: boolean }) => {\r\n const wasConnected = this._isConnected\r\n this._isConnected = status.connected\r\n if (status.connected) {\r\n if (!wasConnected) {\r\n this.onConnect?.()\r\n }\r\n if (!this._isSynced) {\r\n this._isSynced = true\r\n this.onSyncChange?.(true)\r\n }\r\n }\r\n else {\r\n if (wasConnected) {\r\n this.onDisconnect?.()\r\n\r\n if (this._isSynced) {\r\n this._isSynced = false\r\n this.onSyncChange?.(false)\r\n }\r\n }\r\n }\r\n })\r\n }\r\n catch (error) {\r\n console.warn('[yjs] Error creating WebRTC provider:', error)\r\n onError?.(error instanceof Error ? error : new Error(String(error)))\r\n }\r\n }\r\n\r\n get isConnected() {\r\n return this._isConnected\r\n }\r\n\r\n get isSynced() {\r\n return this._isSynced\r\n }\r\n\r\n getProvider() {\r\n return this.provider\r\n }\r\n}\r\n"],"names":["Y","WebrtcProvider"],"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,IAAIA,aAAE,IAAI;AAC7B,QAAA;AACF,WAAK,WAAW,IAAIC,QAAA,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;;"}
|