edytor 1.0.0-rc.2 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +65 -25
- package/dist/block/block.svelte.d.ts +10 -85
- package/dist/block/block.svelte.js +47 -141
- package/dist/block/colors.d.ts +0 -9
- package/dist/block/colors.js +1 -18
- package/dist/block/contentRange.d.ts +5 -1
- package/dist/block/contentRange.js +15 -16
- package/dist/block/inlineBlock.svelte.d.ts +8 -10
- package/dist/block/inlineBlock.svelte.js +14 -22
- package/dist/clipboard/createClipboardFragment.js +22 -64
- package/dist/clipboard/fragmentData.js +17 -42
- package/dist/clipboard/htmlFlow.d.ts +6 -1
- package/dist/clipboard/htmlFlow.js +26 -13
- package/dist/clipboard/insertClipboardFragment.js +5 -4
- package/dist/clipboard/moveText.js +16 -8
- package/dist/clipboard/serializeClipboardFragment.d.ts +2 -0
- package/dist/clipboard/serializeClipboardFragment.js +32 -28
- package/dist/cloudflare/DocumentRoom.d.ts +22 -17
- package/dist/cloudflare/DocumentRoom.js +10 -5
- package/dist/cloudflare/index.d.ts +1 -1
- package/dist/cloudflare/index.js +1 -1
- package/dist/cloudflare/move.d.ts +1 -18
- package/dist/cloudflare/move.js +2 -48
- package/dist/cloudflare/room/admission.d.ts +1 -60
- package/dist/cloudflare/room/admission.js +25 -29
- package/dist/cloudflare/room/comments.d.ts +1 -3
- package/dist/cloudflare/room/comments.js +6 -6
- package/dist/cloudflare/room/context.d.ts +20 -82
- package/dist/cloudflare/room/context.js +8 -8
- package/dist/cloudflare/room/forged.d.ts +1 -1
- package/dist/cloudflare/room/forged.js +2 -12
- package/dist/cloudflare/room/frames.d.ts +1 -1
- package/dist/cloudflare/room/frames.js +1 -1
- package/dist/cloudflare/room/history.d.ts +1 -25
- package/dist/cloudflare/room/history.js +39 -54
- package/dist/cloudflare/room/moves.d.ts +1 -13
- package/dist/cloudflare/room/moves.js +33 -57
- package/dist/cloudflare/room/presence.d.ts +1 -11
- package/dist/cloudflare/room/presence.js +4 -4
- package/dist/cloudflare/room/purge.d.ts +1 -2
- package/dist/cloudflare/room/purge.js +2 -2
- package/dist/cloudflare/room/replicas.d.ts +1 -7
- package/dist/cloudflare/room/replicas.js +2 -2
- package/dist/cloudflare/room/storage.d.ts +9 -30
- package/dist/cloudflare/room/storage.js +52 -104
- package/dist/cloudflare/room/updates.d.ts +4 -4
- package/dist/cloudflare/room/updates.js +17 -24
- package/dist/cloudflare/room/validation.d.ts +1 -5
- package/dist/cloudflare/room/validation.js +16 -37
- package/dist/collaboration/RemoteSelections.svelte +13 -17
- package/dist/collaboration/comments/client.d.ts +2 -2
- package/dist/collaboration/comments/client.js +1 -1
- package/dist/collaboration/history/index.d.ts +5 -5
- package/dist/collaboration/history/index.js +5 -5
- package/dist/collaboration/history/panel.svelte.d.ts +91 -0
- package/dist/collaboration/history/panel.svelte.js +223 -0
- package/dist/collaboration/providers.d.ts +12 -3
- package/dist/collaboration/providers.js +5 -4
- package/dist/components/Block.svelte +160 -119
- package/dist/components/Block.svelte.d.ts +8 -3
- package/dist/components/Content.svelte +91 -44
- package/dist/components/CustomMark.svelte +46 -0
- package/dist/components/CustomMark.svelte.d.ts +11 -0
- package/dist/components/Edytor.svelte +80 -95
- package/dist/components/Edytor.svelte.d.ts +8 -12
- package/dist/components/InlineBlock.svelte +4 -9
- package/dist/components/Mark.svelte +46 -35
- package/dist/components/Mark.svelte.d.ts +7 -0
- package/dist/components/Ranges.svelte +96 -0
- package/dist/components/Ranges.svelte.d.ts +19 -0
- package/dist/components/Suggestion.svelte +3 -2
- package/dist/components/Text.svelte +48 -14
- package/dist/components/Text.svelte.d.ts +1 -1
- package/dist/crdt/admission.d.ts +2 -9
- package/dist/crdt/admission.js +3 -9
- package/dist/crdt/attribution/attribution.d.ts +11 -72
- package/dist/crdt/attribution/attribution.js +5 -52
- package/dist/crdt/attribution/block.d.ts +0 -78
- package/dist/crdt/attribution/block.js +1 -144
- package/dist/crdt/data.d.ts +8 -13
- package/dist/crdt/data.js +30 -70
- package/dist/crdt/doc/anchors.js +4 -4
- package/dist/crdt/doc/content.d.ts +5 -1
- package/dist/crdt/doc/content.js +3 -1
- package/dist/crdt/doc/delete.d.ts +1 -0
- package/dist/crdt/doc/funnel.d.ts +0 -23
- package/dist/crdt/doc/funnel.js +34 -85
- package/dist/crdt/doc/gate.d.ts +8 -9
- package/dist/crdt/doc/gate.js +7 -17
- package/dist/crdt/doc/history.d.ts +87 -14
- package/dist/crdt/doc/history.js +334 -149
- package/dist/crdt/doc/layout.d.ts +0 -1
- package/dist/crdt/doc/layout.js +2 -3
- package/dist/crdt/doc/meta.d.ts +4 -4
- package/dist/crdt/doc/meta.js +10 -21
- package/dist/crdt/doc/moves.d.ts +4 -4
- package/dist/crdt/doc/moves.js +5 -5
- package/dist/crdt/doc/plan.d.ts +2 -0
- package/dist/crdt/doc/plan.js +2 -0
- package/dist/crdt/doc/reads.d.ts +1 -5
- package/dist/crdt/doc/reads.js +38 -49
- package/dist/crdt/doc/seed.d.ts +15 -6
- package/dist/crdt/doc/seed.js +27 -26
- package/dist/crdt/doc/split-merge.d.ts +1 -3
- package/dist/crdt/doc/split-merge.js +4 -5
- package/dist/crdt/doc/steps.d.ts +3 -7
- package/dist/crdt/doc/steps.js +20 -9
- package/dist/crdt/doc/types.d.ts +0 -10
- package/dist/crdt/document.d.ts +24 -115
- package/dist/crdt/document.js +207 -305
- package/dist/crdt/edytor-doc.d.ts +671 -90
- package/dist/crdt/edytor-doc.js +73 -149
- package/dist/crdt/engine-api.d.ts +15 -47
- package/dist/crdt/engine.d.ts +7 -17
- package/dist/crdt/engine.js +9 -19
- package/dist/crdt/flow.d.ts +9 -37
- package/dist/crdt/flow.js +260 -238
- package/dist/crdt/index.d.ts +26 -85
- package/dist/crdt/index.js +21 -47
- package/dist/crdt/operations.d.ts +24 -33
- package/dist/crdt/operations.js +7 -17
- package/dist/crdt/placement/display.d.ts +0 -2
- package/dist/crdt/placement/display.js +0 -15
- package/dist/crdt/placement/model.d.ts +160 -12
- package/dist/crdt/placement/model.js +413 -414
- package/dist/crdt/placement/rank.d.ts +1 -5
- package/dist/crdt/placement/rank.js +28 -38
- package/dist/crdt/protocol.d.ts +4 -5
- package/dist/crdt/protocol.js +3 -4
- package/dist/crdt/protocols/awareness.d.ts +3 -7
- package/dist/crdt/protocols/awareness.js +17 -33
- package/dist/crdt/protocols/envelope.d.ts +9 -29
- package/dist/crdt/protocols/envelope.js +8 -25
- package/dist/crdt/protocols/sync.d.ts +15 -30
- package/dist/crdt/protocols/sync.js +27 -89
- package/dist/crdt/providers/bound.d.ts +3 -1
- package/dist/crdt/providers/bound.js +3 -1
- package/dist/crdt/providers/container.d.ts +11 -17
- package/dist/crdt/providers/container.js +39 -27
- package/dist/crdt/providers/index.d.ts +34 -6
- package/dist/crdt/providers/index.js +106 -111
- package/dist/crdt/providers/indexeddb.d.ts +2 -12
- package/dist/crdt/providers/indexeddb.js +29 -90
- package/dist/crdt/providers/room.d.ts +58 -2
- package/dist/crdt/providers/room.js +38 -21
- package/dist/crdt/providers/websocket.d.ts +1 -1
- package/dist/crdt/providers/websocket.js +3 -4
- package/dist/crdt/purge.d.ts +2 -2
- package/dist/crdt/purge.js +69 -6
- package/dist/crdt/rangeDelete.d.ts +4 -42
- package/dist/crdt/rangeDelete.js +7 -6
- package/dist/crdt/restore.d.ts +21 -1
- package/dist/crdt/restore.js +54 -59
- package/dist/crdt/schema.d.ts +2 -2
- package/dist/crdt/schema.js +4 -5
- package/dist/crdt/semantics.d.ts +10 -15
- package/dist/crdt/semantics.js +22 -21
- package/dist/crdt/storage.d.ts +7 -13
- package/dist/crdt/storage.js +10 -24
- package/dist/crdt/structs.d.ts +42 -47
- package/dist/crdt/structs.js +76 -67
- package/dist/crdt/tables.d.ts +9 -0
- package/dist/crdt/tables.js +20 -0
- package/dist/crdt/text/delete-index.d.ts +0 -13
- package/dist/crdt/text/delete-index.js +7 -14
- package/dist/crdt/text/deletes.d.ts +9 -22
- package/dist/crdt/text/deletes.js +11 -74
- package/dist/crdt/text/index/cache.js +3 -3
- package/dist/crdt/text/index/fold.d.ts +1 -2
- package/dist/crdt/text/index/fold.js +15 -10
- package/dist/crdt/text/index/layout.d.ts +0 -10
- package/dist/crdt/text/index/layout.js +6 -20
- package/dist/crdt/text/index/records.js +2 -1
- package/dist/crdt/text/index/report.js +5 -6
- package/dist/crdt/text/index/shared.d.ts +11 -4
- package/dist/crdt/text/index/shared.js +8 -7
- package/dist/crdt/text/index/state.d.ts +3 -33
- package/dist/crdt/text/index/state.js +2 -4
- package/dist/crdt/text/model.d.ts +82 -2
- package/dist/crdt/text/model.js +344 -354
- package/dist/crdt/text/rows.d.ts +0 -2
- package/dist/crdt/text/rows.js +0 -11
- package/dist/crdt/text/runs.d.ts +6 -3
- package/dist/crdt/text/runs.js +132 -137
- package/dist/crdt/text/streams.d.ts +1 -1
- package/dist/crdt/text/streams.js +1 -1
- package/dist/crdt/vendor/yjs/API-NOTES.md +25 -8
- package/dist/crdt/vendor/yjs/UPSTREAM.md +288 -8
- package/dist/crdt/vendor/yjs/dts/global.d.ts +5 -26
- package/dist/crdt/vendor/yjs/dts/index.d.ts +10 -15
- package/dist/crdt/vendor/yjs/dts/structs/AbstractStruct.d.ts +2 -2
- package/dist/crdt/vendor/yjs/dts/structs/Item.d.ts +14 -219
- package/dist/crdt/vendor/yjs/dts/structs/Skip.d.ts +2 -2
- package/dist/crdt/vendor/yjs/dts/utils/BlockSet.d.ts +2 -2
- package/dist/crdt/vendor/yjs/dts/utils/Doc.d.ts +12 -123
- package/dist/crdt/vendor/yjs/dts/utils/ID.d.ts +1 -1
- package/dist/crdt/vendor/yjs/dts/utils/RangeCursor.d.ts +37 -58
- package/dist/crdt/vendor/yjs/dts/utils/Transaction.d.ts +3 -78
- package/dist/crdt/vendor/yjs/dts/utils/UpdateDecoder.d.ts +2 -81
- package/dist/crdt/vendor/yjs/dts/utils/UpdateEncoder.d.ts +2 -74
- package/dist/crdt/vendor/yjs/dts/utils/encoding-helpers.d.ts +4 -4
- package/dist/crdt/vendor/yjs/dts/utils/encoding.d.ts +6 -18
- package/dist/crdt/vendor/yjs/dts/utils/ids.d.ts +12 -237
- package/dist/crdt/vendor/yjs/dts/utils/positions.d.ts +5 -0
- package/dist/crdt/vendor/yjs/dts/utils/redo.d.ts +3 -0
- package/dist/crdt/vendor/yjs/dts/utils/transaction-helpers.d.ts +1 -3
- package/dist/crdt/vendor/yjs/dts/utils/updates.d.ts +6 -23
- package/dist/crdt/vendor/yjs/dts/ynode.d.ts +73 -498
- package/dist/crdt/vendor/yjs/global.d.ts +5 -26
- package/dist/crdt/vendor/yjs/src/index.js +11 -25
- package/dist/crdt/vendor/yjs/src/structs/AbstractStruct.js +1 -1
- package/dist/crdt/vendor/yjs/src/structs/GC.js +1 -1
- package/dist/crdt/vendor/yjs/src/structs/Item.js +10 -372
- package/dist/crdt/vendor/yjs/src/structs/Skip.js +1 -1
- package/dist/crdt/vendor/yjs/src/utils/BlockSet.js +2 -2
- package/dist/crdt/vendor/yjs/src/utils/Doc.js +14 -170
- package/dist/crdt/vendor/yjs/src/utils/ID.js +1 -1
- package/dist/crdt/vendor/yjs/src/utils/RangeCursor.js +61 -128
- package/dist/crdt/vendor/yjs/src/utils/StructStore.js +0 -22
- package/dist/crdt/vendor/yjs/src/utils/Transaction.js +17 -282
- package/dist/crdt/vendor/yjs/src/utils/UpdateDecoder.js +3 -130
- package/dist/crdt/vendor/yjs/src/utils/UpdateEncoder.js +2 -132
- package/dist/crdt/vendor/yjs/src/utils/encoding-helpers.js +4 -4
- package/dist/crdt/vendor/yjs/src/utils/encoding.js +49 -146
- package/dist/crdt/vendor/yjs/src/utils/ids.js +23 -900
- package/dist/crdt/vendor/yjs/src/utils/positions.js +115 -0
- package/dist/crdt/vendor/yjs/src/utils/redo.js +143 -0
- package/dist/crdt/vendor/yjs/src/utils/transaction-helpers.js +10 -127
- package/dist/crdt/vendor/yjs/src/utils/updates.js +7 -50
- package/dist/crdt/vendor/yjs/src/ynode.js +261 -2226
- package/dist/{plugins/blockHandles → dnd}/autoScroll.d.ts +2 -1
- package/dist/{plugins/blockHandles → dnd}/autoScroll.js +3 -3
- package/dist/dnd/pragmatic.d.ts +4 -22
- package/dist/dnd/pragmatic.js +7 -26
- package/dist/dnd/track.d.ts +14 -0
- package/dist/dnd/track.js +55 -0
- package/dist/dnd/vendor/pragmatic/UPSTREAM.md +103 -0
- package/dist/dnd/vendor/pragmatic/bind-event-listener/LICENSE +21 -0
- package/dist/dnd/vendor/pragmatic/bind-event-listener/bind-all.js +46 -0
- package/dist/dnd/vendor/pragmatic/bind-event-listener/bind.js +7 -0
- package/dist/dnd/vendor/pragmatic/bind-event-listener/index.js +2 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/LICENSE.md +11 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/adapter/element-adapter-native-data-key.js +6 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/adapter/element-adapter.d.ts +57 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/adapter/element-adapter.js +306 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/element/adapter.d.ts +8 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/element/adapter.js +10 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/element/set-custom-native-drag-preview.d.ts +4 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/element/set-custom-native-drag-preview.js +6 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/types.d.ts +1 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/honey-pot-fix/get-element-from-point-without-honey-pot.js +12 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/honey-pot-fix/honey-pot-data-attribute.js +3 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/honey-pot-fix/is-honey-pot-element.js +4 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/honey-pot-fix/make-honey-pot-fix.js +333 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/internal-types.d.ts +350 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/ledger/dispatch-consumer-event.js +128 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/ledger/lifecycle-manager.js +340 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/ledger/usage-ledger.js +32 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/make-adapter/make-adapter.js +59 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/make-adapter/make-drop-target.js +288 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/make-adapter/make-monitor.js +85 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/public-utils/combine.js +6 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/public-utils/element/custom-native-drag-preview/set-custom-native-drag-preview.d.ts +36 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/public-utils/element/custom-native-drag-preview/set-custom-native-drag-preview.js +153 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/public-utils/element/custom-native-drag-preview/types.d.ts +16 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/public-utils/once.js +13 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/add-attribute.js +7 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/android.js +10 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/changing-window/count-events-for-safari.js +104 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/changing-window/is-from-another-window.js +16 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/changing-window/is-leaving-window-in-safari.js +12 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/changing-window/is-leaving-window.js +55 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/detect-broken-drag.js +48 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/get-input.js +14 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/is-firefox.js +13 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/is-safari.js +19 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/max-z-index.js +3 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/media-types/text-media-type.js +6 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/media-types/url-media-type.js +6 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/popover-reset-styles.js +40 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/supports-popover.js +16 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/LICENSE.md +11 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/entry-point/element.d.ts +4 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/entry-point/element.js +8 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/internal-types.d.ts +50 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/over-element/data-attributes.js +9 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/over-element/get-scroll-by.js +117 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/over-element/make-api.js +90 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/over-element/try-scroll.js +183 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/axis.js +22 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/can-scroll-on-edge.js +17 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/configuration.js +49 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/edges.js +9 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/engagement-history.js +43 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/get-over-element-hitbox.js +50 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/get-percentage-in-range.js +19 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/get-scroll-change.js +106 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/is-axis-allowed.js +3 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/is-within.js +11 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/scheduler.js +104 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/side.js +6 -0
- package/dist/dnd/vendor/pragmatic/raf-schd/LICENSE +21 -0
- package/dist/dnd/vendor/pragmatic/raf-schd/raf-schd.esm.js +34 -0
- package/dist/edytor.svelte.d.ts +34 -64
- package/dist/edytor.svelte.js +118 -180
- package/dist/events/beforeInputCommands.d.ts +6 -11
- package/dist/events/beforeInputCommands.js +189 -184
- package/dist/events/beforeInputDeleteCommands.d.ts +20 -1
- package/dist/events/beforeInputDeleteCommands.js +153 -204
- package/dist/events/domTextOffset.d.ts +9 -9
- package/dist/events/domTextOffset.js +20 -48
- package/dist/events/events.utils.d.ts +0 -2
- package/dist/events/events.utils.js +0 -4
- package/dist/events/nativeInteractiveControl.d.ts +13 -13
- package/dist/events/nativeInteractiveControl.js +28 -56
- package/dist/events/onBeforeInput.d.ts +6 -1
- package/dist/events/onBeforeInput.js +207 -331
- package/dist/events/onCopy.js +1 -5
- package/dist/events/onDrop.d.ts +7 -1
- package/dist/events/onDrop.js +33 -72
- package/dist/events/onFocus.d.ts +9 -4
- package/dist/events/onFocus.js +92 -72
- package/dist/events/onInput.d.ts +8 -4
- package/dist/events/onInput.js +34 -147
- package/dist/events/onKeyDown.js +55 -122
- package/dist/events/onPaste.d.ts +13 -1
- package/dist/events/onPaste.js +46 -76
- package/dist/index.d.ts +10 -13
- package/dist/index.js +3 -3
- package/dist/kinds.d.ts +4 -6
- package/dist/kinds.js +28 -27
- package/dist/labels.d.ts +91 -314
- package/dist/labels.js +180 -396
- package/dist/plugins/Chrome.svelte +29 -0
- package/dist/plugins/Chrome.svelte.d.ts +32 -0
- package/dist/plugins/Control.svelte +23 -0
- package/dist/plugins/Control.svelte.d.ts +30 -0
- package/dist/plugins/anchored.svelte.d.ts +47 -0
- package/dist/plugins/anchored.svelte.js +73 -0
- package/dist/plugins/arrowMove/arrowMove.d.ts +2 -1
- package/dist/plugins/arrowMove/arrowMove.js +9 -5
- package/dist/plugins/bands.svelte.d.ts +57 -0
- package/dist/plugins/bands.svelte.js +95 -0
- package/dist/plugins/blockHandles/BlockHandle.svelte +14 -151
- package/dist/plugins/blockHandles/BlockHandle.svelte.d.ts +2 -2
- package/dist/plugins/blockHandles/BlockHandleController.svelte.d.ts +63 -97
- package/dist/plugins/blockHandles/BlockHandleController.svelte.js +247 -268
- package/dist/plugins/blockHandles/BlockHandles.svelte +46 -29
- package/dist/plugins/blockHandles/BlockHandles.svelte.d.ts +2 -2
- package/dist/plugins/blockHandles/blockHandlesPlugin.d.ts +29 -23
- package/dist/plugins/blockHandles/blockHandlesPlugin.js +130 -162
- package/dist/plugins/blockHandles/dragPreview.d.ts +8 -6
- package/dist/plugins/blockHandles/dragPreview.js +20 -17
- package/dist/plugins/blockHandles/dropIndicator.js +52 -60
- package/dist/plugins/blockHandles/geometry.d.ts +46 -1
- package/dist/plugins/blockHandles/geometry.js +51 -4
- package/dist/plugins/blockMenu/BlockMenuController.svelte.d.ts +59 -28
- package/dist/plugins/blockMenu/BlockMenuController.svelte.js +180 -105
- package/dist/plugins/blockMenu/blockMenuPlugin.d.ts +1 -3
- package/dist/plugins/blockMenu/blockMenuPlugin.js +12 -29
- package/dist/plugins/brand.d.ts +8 -0
- package/dist/plugins/brand.js +8 -0
- package/dist/plugins/chrome.d.ts +79 -0
- package/dist/plugins/chrome.js +87 -0
- package/dist/plugins/code/CodeHeader.svelte +12 -58
- package/dist/plugins/code/CodeHeader.svelte.d.ts +1 -0
- package/dist/plugins/code/CodePlugin.svelte +75 -56
- package/dist/plugins/code/CodePlugin.svelte.d.ts +0 -2
- package/dist/plugins/code/LanguageMenu.svelte +25 -0
- package/dist/plugins/code/LanguageMenu.svelte.d.ts +9 -0
- package/dist/plugins/code/code.css +5 -100
- package/dist/plugins/code/header.svelte.d.ts +47 -0
- package/dist/plugins/code/header.svelte.js +141 -0
- package/dist/plugins/code/languageMenu.svelte.d.ts +84 -0
- package/dist/plugins/code/languageMenu.svelte.js +199 -0
- package/dist/plugins/code/languages.d.ts +21 -10
- package/dist/plugins/code/languages.js +39 -126
- package/dist/plugins/columns/ColumnResize.svelte +13 -25
- package/dist/plugins/columns/ColumnResize.svelte.d.ts +1 -1
- package/dist/plugins/columns/ColumnsPlugin.svelte +46 -78
- package/dist/plugins/columns/ColumnsPlugin.svelte.d.ts +0 -12
- package/dist/plugins/columns/columns.css +7 -26
- package/dist/plugins/columns/resize.svelte.d.ts +14 -51
- package/dist/plugins/columns/resize.svelte.js +70 -164
- package/dist/plugins/comments/CommentsController.svelte.d.ts +1 -4
- package/dist/plugins/comments/CommentsController.svelte.js +14 -25
- package/dist/plugins/comments/CommentsSidebar.svelte +82 -430
- package/dist/plugins/comments/CommentsSidebar.svelte.d.ts +6 -7
- package/dist/plugins/comments/commentsPlugin.d.ts +31 -10
- package/dist/plugins/comments/commentsPlugin.js +12 -10
- package/dist/plugins/equation/EquationEditor.svelte +18 -129
- package/dist/plugins/equation/EquationEditor.svelte.d.ts +2 -1
- package/dist/plugins/equation/EquationPlugin.svelte +123 -168
- package/dist/plugins/equation/EquationPlugin.svelte.d.ts +5 -3
- package/dist/plugins/equation/EquationView.svelte +20 -11
- package/dist/plugins/equation/equation.svelte.d.ts +74 -36
- package/dist/plugins/equation/equation.svelte.js +74 -66
- package/dist/plugins/equation/importUrl.d.ts +6 -0
- package/dist/plugins/equation/importUrl.js +6 -0
- package/dist/plugins/equation/katex.d.ts +8 -0
- package/dist/plugins/equation/katex.js +77 -0
- package/dist/plugins/find/FindController.svelte.d.ts +8 -13
- package/dist/plugins/find/FindController.svelte.js +34 -55
- package/dist/plugins/find/findPlugin.d.ts +4 -8
- package/dist/plugins/find/findPlugin.js +29 -9
- package/dist/plugins/image/ImageChrome.svelte +5 -151
- package/dist/plugins/image/ImagePlugin.svelte +49 -117
- package/dist/plugins/image/ImagePlugin.svelte.d.ts +1 -24
- package/dist/plugins/image/ImageToolbarHost.svelte +37 -0
- package/dist/plugins/image/ImageToolbarHost.svelte.d.ts +9 -0
- package/dist/plugins/image/controls.svelte.d.ts +6 -57
- package/dist/plugins/image/controls.svelte.js +51 -174
- package/dist/plugins/image/image.d.ts +0 -5
- package/dist/plugins/image/image.js +0 -3
- package/dist/plugins/image/toolbar.svelte.d.ts +69 -0
- package/dist/plugins/image/toolbar.svelte.js +145 -0
- package/dist/plugins/index.d.ts +39 -24
- package/dist/plugins/index.js +30 -22
- package/dist/plugins/list.svelte.d.ts +128 -0
- package/dist/plugins/list.svelte.js +217 -0
- package/dist/plugins/markdownShortcuts.d.ts +1 -1
- package/dist/plugins/markdownShortcuts.js +6 -5
- package/dist/plugins/marquee/MarqueeBox.svelte +15 -0
- package/dist/plugins/marquee/MarqueeBox.svelte.d.ts +9 -0
- package/dist/plugins/marquee/MarqueeController.svelte.d.ts +46 -0
- package/dist/plugins/marquee/MarqueeController.svelte.js +243 -0
- package/dist/plugins/marquee/marquee.d.ts +33 -0
- package/dist/plugins/marquee/marquee.js +89 -0
- package/dist/plugins/marquee/marqueePlugin.d.ts +32 -0
- package/dist/plugins/marquee/marqueePlugin.js +68 -0
- package/dist/plugins/media/AudioPlugin.svelte +3 -88
- package/dist/plugins/media/AudioPlugin.svelte.d.ts +1 -4
- package/dist/plugins/media/BookmarkPlugin.svelte +124 -112
- package/dist/plugins/media/BookmarkPlugin.svelte.d.ts +20 -7
- package/dist/plugins/media/EmbedPlugin.svelte +93 -77
- package/dist/plugins/media/EmbedPlugin.svelte.d.ts +21 -9
- package/dist/plugins/media/EmptySlot.svelte +44 -0
- package/dist/plugins/media/EmptySlot.svelte.d.ts +25 -0
- package/dist/plugins/media/FilePlugin.svelte +35 -111
- package/dist/plugins/media/FilePlugin.svelte.d.ts +12 -4
- package/dist/plugins/media/MediaEmpty.svelte +55 -112
- package/dist/plugins/media/MediaEmpty.svelte.d.ts +26 -10
- package/dist/plugins/media/SourceBlock.svelte +164 -0
- package/dist/plugins/media/SourceBlock.svelte.d.ts +33 -0
- package/dist/plugins/media/VideoPlugin.svelte +4 -97
- package/dist/plugins/media/VideoPlugin.svelte.d.ts +2 -5
- package/dist/plugins/media/empty.svelte.d.ts +69 -0
- package/dist/plugins/media/empty.svelte.js +111 -0
- package/dist/plugins/media/media.d.ts +93 -30
- package/dist/plugins/media/media.js +79 -86
- package/dist/plugins/media/urlPaste.svelte.d.ts +9 -32
- package/dist/plugins/media/urlPaste.svelte.js +46 -75
- package/dist/plugins/mention/MentionPlugin.svelte +47 -124
- package/dist/plugins/mention/MentionPlugin.svelte.d.ts +11 -23
- package/dist/plugins/page/PageLink.svelte +54 -38
- package/dist/plugins/page/PagePlugin.svelte +20 -18
- package/dist/plugins/page/PagePlugin.svelte.d.ts +2 -4
- package/dist/plugins/page/page.d.ts +35 -9
- package/dist/plugins/page/page.js +3 -4
- package/dist/plugins/pageLink/PageLinkPlugin.svelte +52 -108
- package/dist/plugins/pageLink/PageLinkPlugin.svelte.d.ts +11 -23
- package/dist/plugins/planned.d.ts +10 -0
- package/dist/plugins/planned.js +12 -0
- package/dist/plugins/richtext/CalloutIcon.svelte +25 -0
- package/dist/plugins/richtext/CalloutIcon.svelte.d.ts +9 -0
- package/dist/plugins/richtext/CalloutIconPicker.svelte +26 -0
- package/dist/plugins/richtext/CalloutIconPicker.svelte.d.ts +9 -0
- package/dist/plugins/richtext/EmptyBody.svelte +25 -0
- package/dist/plugins/richtext/EmptyBody.svelte.d.ts +8 -0
- package/dist/plugins/richtext/RichTextControl.svelte +39 -0
- package/dist/plugins/richtext/RichTextControl.svelte.d.ts +8 -0
- package/dist/plugins/richtext/RichTextPlugin.svelte +272 -148
- package/dist/plugins/richtext/RichTextPlugin.svelte.d.ts +37 -18
- package/dist/plugins/richtext/TodoCheckbox.svelte +10 -21
- package/dist/plugins/richtext/TodoCheckbox.svelte.d.ts +0 -2
- package/dist/plugins/richtext/body.d.ts +9 -0
- package/dist/plugins/richtext/body.js +16 -0
- package/dist/plugins/richtext/calloutIcons.svelte.d.ts +97 -0
- package/dist/plugins/richtext/calloutIcons.svelte.js +214 -0
- package/dist/plugins/richtext/callouts.d.ts +15 -0
- package/dist/plugins/richtext/callouts.js +23 -0
- package/dist/plugins/richtext/controls.svelte.d.ts +110 -0
- package/dist/plugins/richtext/controls.svelte.js +126 -0
- package/dist/plugins/richtext/richTextOperations.js +37 -28
- package/dist/plugins/slashMenu/SlashMenuController.svelte.d.ts +18 -11
- package/dist/plugins/slashMenu/SlashMenuController.svelte.js +93 -35
- package/dist/plugins/slashMenu/slashMenuPlugin.d.ts +11 -24
- package/dist/plugins/slashMenu/slashMenuPlugin.js +27 -68
- package/dist/plugins/suggestions/SuggestionBars.svelte +32 -84
- package/dist/plugins/suggestions/SuggestionBars.svelte.d.ts +9 -3
- package/dist/plugins/suggestions/suggestionsPlugin.d.ts +10 -16
- package/dist/plugins/suggestions/suggestionsPlugin.js +9 -24
- package/dist/plugins/table/TableChrome.svelte +96 -127
- package/dist/plugins/table/TableChrome.svelte.d.ts +5 -1
- package/dist/plugins/table/TablePlugin.svelte +116 -171
- package/dist/plugins/table/TablePlugin.svelte.d.ts +0 -4
- package/dist/plugins/table/chrome.svelte.d.ts +110 -117
- package/dist/plugins/table/chrome.svelte.js +643 -289
- package/dist/plugins/table/ops.d.ts +47 -0
- package/dist/plugins/table/ops.js +233 -0
- package/dist/plugins/table/table.css +55 -134
- package/dist/plugins/table/table.d.ts +26 -7
- package/dist/plugins/table/table.js +23 -49
- package/dist/plugins/toc/TableOfContents.svelte +32 -38
- package/dist/plugins/toc/TableOfContents.svelte.d.ts +1 -5
- package/dist/plugins/toc/TocPlugin.svelte +22 -22
- package/dist/plugins/toc/TocPlugin.svelte.d.ts +4 -6
- package/dist/plugins/toc/toc.d.ts +41 -10
- package/dist/plugins/toc/toc.js +2 -3
- package/dist/plugins/toolbar/ToolbarController.svelte.d.ts +29 -66
- package/dist/plugins/toolbar/ToolbarController.svelte.js +151 -76
- package/dist/plugins/toolbar/toolbarPlugin.d.ts +14 -13
- package/dist/plugins/toolbar/toolbarPlugin.js +28 -43
- package/dist/plugins/triggers/TriggerController.svelte.d.ts +6 -45
- package/dist/plugins/triggers/TriggerController.svelte.js +51 -96
- package/dist/plugins/triggers/place.d.ts +0 -9
- package/dist/plugins/triggers/place.js +1 -17
- package/dist/plugins/triggers/triggers.d.ts +31 -9
- package/dist/plugins/triggers/triggers.js +82 -62
- package/dist/plugins/uploads.svelte.d.ts +38 -20
- package/dist/plugins/uploads.svelte.js +39 -32
- package/dist/plugins.d.ts +167 -60
- package/dist/selection/domSelection.d.ts +13 -4
- package/dist/selection/domSelection.js +110 -183
- package/dist/selection/pointer.svelte.d.ts +12 -10
- package/dist/selection/pointer.svelte.js +154 -71
- package/dist/selection/replaceSelection.d.ts +21 -22
- package/dist/selection/replaceSelection.js +60 -69
- package/dist/selection/selection.svelte.d.ts +5 -73
- package/dist/selection/selection.svelte.js +263 -542
- package/dist/selection/selection.utils.d.ts +34 -11
- package/dist/selection/selection.utils.js +128 -247
- package/dist/selection/visibility.d.ts +11 -8
- package/dist/selection/visibility.js +23 -8
- package/dist/session/announcer.svelte.d.ts +2 -1
- package/dist/session/announcer.svelte.js +7 -3
- package/dist/session/attempt.d.ts +33 -39
- package/dist/session/attempt.js +61 -53
- package/dist/session/bindings.js +108 -139
- package/dist/session/commands.d.ts +47 -22
- package/dist/session/commands.js +206 -208
- package/dist/session/composition.svelte.d.ts +2 -4
- package/dist/session/composition.svelte.js +55 -65
- package/dist/session/editing/text.d.ts +6 -0
- package/dist/session/editing/text.js +17 -3
- package/dist/session/handles.d.ts +10 -1
- package/dist/session/handles.js +28 -0
- package/dist/session/history.d.ts +0 -4
- package/dist/session/history.js +15 -21
- package/dist/session/inputRules.js +75 -84
- package/dist/session/keymap.d.ts +1 -6
- package/dist/session/keymap.js +17 -20
- package/dist/session/moves.d.ts +10 -10
- package/dist/session/moves.js +31 -59
- package/dist/session/navigation.d.ts +18 -3
- package/dist/session/navigation.js +194 -153
- package/dist/session/ports.d.ts +7 -0
- package/dist/session/selection.d.ts +4 -3
- package/dist/session/selection.js +8 -0
- package/dist/session/suggestions.svelte.d.ts +1 -1
- package/dist/session/suggestions.svelte.js +64 -47
- package/dist/session/virtual.d.ts +3 -3
- package/dist/session/virtual.js +18 -40
- package/dist/surface/attributes.d.ts +1 -0
- package/dist/surface/attributes.js +3 -26
- package/dist/surface/cells.d.ts +5 -0
- package/dist/surface/cells.js +5 -0
- package/dist/surface/lines.d.ts +32 -0
- package/dist/surface/lines.js +43 -0
- package/dist/surface/observer.svelte.d.ts +3 -20
- package/dist/surface/observer.svelte.js +73 -77
- package/dist/surface/overlay.d.ts +48 -6
- package/dist/surface/overlay.js +133 -23
- package/dist/surface/pin.svelte.d.ts +5 -0
- package/dist/surface/pin.svelte.js +5 -0
- package/dist/surface/projector.svelte.d.ts +4 -6
- package/dist/surface/projector.svelte.js +42 -69
- package/dist/text/text.svelte.d.ts +14 -40
- package/dist/text/text.svelte.js +35 -51
- package/dist/text/wordBoundary.d.ts +19 -0
- package/dist/text/wordBoundary.js +29 -44
- package/dist/themes/notion.css +315 -126
- package/dist/utils/json.d.ts +3 -1
- package/dist/utils/json.js +52 -51
- package/dist/utils/listen.d.ts +8 -0
- package/dist/utils/listen.js +19 -0
- package/package.json +4 -5
- package/dist/block/block.utils.d.ts +0 -340
- package/dist/block/block.utils.js +0 -356
- package/dist/collaboration/history/HistoryPanel.svelte +0 -525
- package/dist/collaboration/history/HistoryPanel.svelte.d.ts +0 -7
- package/dist/collaboration/history/panel.d.ts +0 -43
- package/dist/collaboration/history/panel.js +0 -3
- package/dist/components/SuggestionRanges.svelte +0 -58
- package/dist/components/SuggestionRanges.svelte.d.ts +0 -7
- package/dist/crdt/doc/table.d.ts +0 -21
- package/dist/crdt/doc/table.js +0 -288
- package/dist/crdt/migration/generation.d.ts +0 -58
- package/dist/crdt/migration/generation.js +0 -70
- package/dist/crdt/migration/legacy-schema.d.ts +0 -61
- package/dist/crdt/migration/legacy-schema.js +0 -151
- package/dist/crdt/migration/migrate.d.ts +0 -56
- package/dist/crdt/migration/migrate.js +0 -227
- package/dist/crdt/nodes.d.ts +0 -121
- package/dist/crdt/nodes.js +0 -56
- package/dist/crdt/text/index/checks.d.ts +0 -15
- package/dist/crdt/text/index/checks.js +0 -156
- package/dist/crdt/vendor/yjs/dts/utils/EventHandler.d.ts +0 -17
- package/dist/crdt/vendor/yjs/dts/utils/RelativePosition.d.ts +0 -80
- package/dist/crdt/vendor/yjs/dts/utils/UndoManager.d.ts +0 -205
- package/dist/crdt/vendor/yjs/dts/utils/YEvent.d.ts +0 -93
- package/dist/crdt/vendor/yjs/dts/utils/meta.d.ts +0 -25
- package/dist/crdt/vendor/yjs/dts/utils/renderer-helpers.d.ts +0 -98
- package/dist/crdt/vendor/yjs/dts/utils/schemas.d.ts +0 -2
- package/dist/crdt/vendor/yjs/src/utils/EventHandler.js +0 -75
- package/dist/crdt/vendor/yjs/src/utils/RelativePosition.js +0 -301
- package/dist/crdt/vendor/yjs/src/utils/UndoManager.js +0 -554
- package/dist/crdt/vendor/yjs/src/utils/YEvent.js +0 -158
- package/dist/crdt/vendor/yjs/src/utils/meta.js +0 -74
- package/dist/crdt/vendor/yjs/src/utils/renderer-helpers.js +0 -186
- package/dist/crdt/vendor/yjs/src/utils/schemas.js +0 -3
- package/dist/edytor.utils.d.ts +0 -50
- package/dist/edytor.utils.js +0 -67
- package/dist/plugins/blockMenu/BlockMenu.svelte +0 -447
- package/dist/plugins/blockMenu/BlockMenu.svelte.d.ts +0 -9
- package/dist/plugins/find/FindBar.svelte +0 -170
- package/dist/plugins/find/FindBar.svelte.d.ts +0 -9
- package/dist/plugins/find/FindHighlights.svelte +0 -75
- package/dist/plugins/find/FindHighlights.svelte.d.ts +0 -9
- package/dist/plugins/icons.d.ts +0 -2
- package/dist/plugins/icons.js +0 -63
- package/dist/plugins/image/ImageEmpty.svelte +0 -116
- package/dist/plugins/image/ImageEmpty.svelte.d.ts +0 -12
- package/dist/plugins/keepInView.d.ts +0 -4
- package/dist/plugins/keepInView.js +0 -6
- package/dist/plugins/media/UrlPasteMenu.svelte +0 -83
- package/dist/plugins/media/UrlPasteMenu.svelte.d.ts +0 -7
- package/dist/plugins/richtext/labels.d.ts +0 -5
- package/dist/plugins/richtext/labels.js +0 -3
- package/dist/plugins/slashMenu/SlashMenu.svelte +0 -360
- package/dist/plugins/slashMenu/SlashMenu.svelte.d.ts +0 -11
- package/dist/plugins/toolbar/LinkCard.svelte +0 -118
- package/dist/plugins/toolbar/LinkCard.svelte.d.ts +0 -7
- package/dist/plugins/toolbar/Toolbar.svelte +0 -400
- package/dist/plugins/toolbar/Toolbar.svelte.d.ts +0 -9
- package/dist/plugins/triggers/TriggerMenu.svelte +0 -144
- package/dist/plugins/triggers/TriggerMenu.svelte.d.ts +0 -7
- package/dist/session/props.d.ts +0 -28
- package/dist/session/props.js +0 -162
- package/dist/text/deltas.d.ts +0 -22
- package/dist/text/deltas.js +0 -46
- package/dist/text/text.utils.d.ts +0 -45
- package/dist/text/text.utils.js +0 -199
|
@@ -1,14 +1,10 @@
|
|
|
1
1
|
import { Text } from '../text/text.svelte.js';
|
|
2
|
-
import {
|
|
3
|
-
import { prepareDeleteContent } from '../edytor.utils.js';
|
|
2
|
+
import { InlineBlock } from '../block/inlineBlock.svelte.js';
|
|
4
3
|
import { deleteSelectedBlocks, deleteSelectedRange } from '../selection/replaceSelection.js';
|
|
5
|
-
import { shown } from '../selection/visibility.js';
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
|
|
9
|
-
const isForwardDeleteInsideActiveComposition = (edytor, snapshot) => snapshot.inputType === 'deleteContentForward' &&
|
|
10
|
-
snapshot.isCollapsed &&
|
|
11
|
-
Boolean(snapshot.startText && edytor.composition.covers(snapshot.startText, snapshot.yStart));
|
|
4
|
+
import { shown, viewOf } from '../selection/visibility.js';
|
|
5
|
+
import { blockSelection } from '../session/selection.js';
|
|
6
|
+
import { INTENTS, caretAt } from '../session/attempt.js';
|
|
7
|
+
import { getNextGraphemeEnd, getNextWordEndOffset, getPreviousGraphemeStart, getPreviousWordStartOffset } from '../text/wordBoundary.js';
|
|
12
8
|
/**
|
|
13
9
|
* Merge `from` into a collapsed toggle's header `into`, as the key's merge:
|
|
14
10
|
* one plan that deletes the seam from the header's end to `from`'s start,
|
|
@@ -17,165 +13,134 @@ const isForwardDeleteInsideActiveComposition = (edytor, snapshot) => snapshot.in
|
|
|
17
13
|
* refuses all of it. Nothing when the document refuses the merge (an island).
|
|
18
14
|
*/
|
|
19
15
|
const mergeIntoHeader = (edytor, from, into, backward) => {
|
|
16
|
+
const { facade, dispatcher } = edytor;
|
|
20
17
|
const [end, start] = [into.lastText, from.firstText];
|
|
21
|
-
if (!end || !start || !('writes' in
|
|
18
|
+
if (!end || !start || !('writes' in facade.prepare.mergeBlocks(from.id, into.id)))
|
|
22
19
|
return;
|
|
23
|
-
const seam = {
|
|
24
|
-
const plan = () => prepareDeleteContent.call(edytor, { replace: true, selection: seam });
|
|
20
|
+
const seam = () => facade.prepare.replaceRange({ block: into.id, offset: end.segStart + end.length }, { block: from.id, offset: start.segStart }, viewOf(edytor));
|
|
25
21
|
if (backward)
|
|
26
|
-
|
|
22
|
+
dispatcher.plan('mergeBackward', [from.id], seam, from);
|
|
27
23
|
else
|
|
28
|
-
|
|
24
|
+
dispatcher.plan('mergeForward', [into.id], seam, into);
|
|
29
25
|
};
|
|
30
26
|
/**
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
* document's `mergeForward` does; the seam range then removes a container
|
|
34
|
-
* left with no item.
|
|
27
|
+
* Delete at the caret's text edge, one character inside it: the inline
|
|
28
|
+
* atom beside the edge, else the character, the caret staying at its side.
|
|
35
29
|
*/
|
|
36
|
-
const
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
30
|
+
export const deleteInText = (edytor, text, yStart, back, atEdge) => {
|
|
31
|
+
const { content } = text.parent;
|
|
32
|
+
if (!atEdge) {
|
|
33
|
+
// One character is one grapheme, at the caret as it is now (anchored: a
|
|
34
|
+
// peer's edit since the occurrence moved it).
|
|
35
|
+
const value = text.stringContent;
|
|
36
|
+
const at = edytor.selection.textRange().yStart;
|
|
37
|
+
const [start, end] = back
|
|
38
|
+
? [getPreviousGraphemeStart(value, at), at]
|
|
39
|
+
: [at, getNextGraphemeEnd(value, at)];
|
|
40
|
+
if (end > start)
|
|
41
|
+
edytor.deleteText(text.parent.id, text.segStart + start, end - start);
|
|
42
|
+
return edytor.selection.selectText(text, back ? start : yStart);
|
|
43
|
+
}
|
|
44
|
+
const index = content.indexOf(text) + (back ? -1 : 1);
|
|
45
|
+
const before = back ? content.at(index - 1) : text;
|
|
46
|
+
// Read before the removal joins the texts beside the atom.
|
|
47
|
+
const offset = back && before instanceof Text ? before.length : yStart;
|
|
48
|
+
const atom = content.at(index);
|
|
49
|
+
if (atom instanceof InlineBlock)
|
|
50
|
+
edytor.removeInline(text.parent.id, atom.id);
|
|
51
|
+
if (before instanceof Text)
|
|
52
|
+
edytor.selection.selectText(before, offset);
|
|
40
53
|
};
|
|
41
54
|
const deleteContentForward = (edytor, snapshot) => {
|
|
42
55
|
const { startText, yStart } = snapshot;
|
|
43
|
-
if (!startText)
|
|
44
|
-
return;
|
|
45
|
-
}
|
|
46
|
-
if (isForwardDeleteInsideActiveComposition(edytor, snapshot)) {
|
|
47
|
-
edytor.selection.setAtTextOffset(startText, yStart);
|
|
48
|
-
return;
|
|
49
|
-
}
|
|
50
|
-
if (snapshot.isAtEndOfBlock) {
|
|
51
|
-
const currentBlock = startText.parent;
|
|
52
|
-
if (currentBlock.definition.void) {
|
|
53
|
-
edytor.selection.setAtTextOffset(startText, yStart);
|
|
54
|
-
return;
|
|
55
|
-
}
|
|
56
|
-
const nextBlock = shown(currentBlock, 'blockAfter');
|
|
57
|
-
if (nextBlock?.definition.void) {
|
|
58
|
-
edytor.selection.selectBlocks(nextBlock);
|
|
59
|
-
return;
|
|
60
|
-
}
|
|
61
|
-
if (nextBlock === currentBlock.closestNextBlock)
|
|
62
|
-
currentBlock.mergeBlockForward();
|
|
63
|
-
else if (nextBlock)
|
|
64
|
-
mergeIntoHeader(edytor, firstLine(nextBlock), currentBlock, false);
|
|
65
|
-
caretAt(edytor, startText, yStart);
|
|
66
|
-
return;
|
|
67
|
-
}
|
|
68
|
-
if (snapshot.isAtEndOfText) {
|
|
69
|
-
const index = startText.parent.content.indexOf(startText) + 1;
|
|
70
|
-
startText.parent.removeInlineBlock({ index });
|
|
71
|
-
edytor.selection.setAtTextOffset(startText, yStart);
|
|
56
|
+
if (!startText)
|
|
72
57
|
return;
|
|
58
|
+
const current = startText.parent;
|
|
59
|
+
// At a live composition's region the preview stays (the IME owns it).
|
|
60
|
+
const keep = edytor.composition.covers(startText, yStart) ||
|
|
61
|
+
(snapshot.projection.isAtEndOfBlock && current.definition.void);
|
|
62
|
+
if (keep || !snapshot.projection.isAtEndOfBlock)
|
|
63
|
+
return keep
|
|
64
|
+
? edytor.selection.selectText(startText, yStart)
|
|
65
|
+
: deleteInText(edytor, startText, yStart, false, snapshot.projection.isAtEndOfText);
|
|
66
|
+
const next = shown(current, 'blockAfter');
|
|
67
|
+
if (next?.definition.void)
|
|
68
|
+
return edytor.selection.select(blockSelection([next.id]));
|
|
69
|
+
if (next === current.closestNextBlock)
|
|
70
|
+
edytor.mergeForward(current.id);
|
|
71
|
+
else if (next) {
|
|
72
|
+
// A forward merge into a collapsed toggle's header joins its first line:
|
|
73
|
+
// a container's (a list's) first item, as the document's `mergeForward`.
|
|
74
|
+
let line = next;
|
|
75
|
+
while (line.isContainer && line.children[0])
|
|
76
|
+
line = line.children[0];
|
|
77
|
+
mergeIntoHeader(edytor, line, current, false);
|
|
73
78
|
}
|
|
74
|
-
|
|
75
|
-
edytor.selection.setAtTextOffset(startText, yStart);
|
|
76
|
-
};
|
|
77
|
-
/**
|
|
78
|
-
* Backspace at the start of a catalogue kind other than its parent's default
|
|
79
|
-
* (a bullet, a to-do, a heading) turns it into that default first, keeping
|
|
80
|
-
* its content and children (`del.start.kind`, Notion); the next Backspace
|
|
81
|
-
* merges or unnests. Structural kinds outside the catalogue (a `list-item`,
|
|
82
|
-
* a `codeLine`) keep the structural path.
|
|
83
|
-
*/
|
|
84
|
-
const resetKindAtStart = (edytor, snapshot) => {
|
|
85
|
-
const block = snapshot.startText?.parent;
|
|
86
|
-
if (!snapshot.isAtStartOfBlock || !block?.convertible || !block.parent)
|
|
87
|
-
return false;
|
|
88
|
-
const type = edytor.defaultChild(block.parent);
|
|
89
|
-
if (block.type === type || !edytor.kinds.some((row) => row.value.type === block.type)) {
|
|
90
|
-
return false;
|
|
91
|
-
}
|
|
92
|
-
block.setBlock({ value: { type, data: {} } });
|
|
93
|
-
caretAt(edytor, block.firstText, 0);
|
|
94
|
-
return true;
|
|
79
|
+
caretAt(edytor, startText, yStart);
|
|
95
80
|
};
|
|
96
81
|
const deleteContentBackward = (edytor, snapshot) => {
|
|
97
82
|
const { startText, yStart } = snapshot;
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
// A table's cell keeps its caret at its start: nothing merges into or out of
|
|
101
|
-
// a cell, and it never outdents (`table.merge`).
|
|
102
|
-
const cell = startText?.parent;
|
|
103
|
-
if (snapshot.isAtStartOfBlock && cell && edytor.facade.isTableCell(cell.id)) {
|
|
104
|
-
edytor.selection.setAtTextOffset(startText, 0);
|
|
83
|
+
const block = startText?.parent;
|
|
84
|
+
if (!block)
|
|
105
85
|
return;
|
|
86
|
+
if (!snapshot.projection.isAtStartOfBlock)
|
|
87
|
+
return deleteInText(edytor, startText, yStart, true, snapshot.projection.isAtStartOfText);
|
|
88
|
+
const { facade, root } = edytor;
|
|
89
|
+
const parent = block.parent;
|
|
90
|
+
// At the start of a catalogue kind other than its parent's default (a
|
|
91
|
+
// bullet, a to-do, a heading), it turns into that default first, keeping
|
|
92
|
+
// its content and children (`del.start.kind`, Notion); structural kinds
|
|
93
|
+
// outside the catalogue (a `list-item`, a `codeLine`) keep the structural path.
|
|
94
|
+
const type = parent && edytor.defaultChild(parent);
|
|
95
|
+
if (block.convertible &&
|
|
96
|
+
type &&
|
|
97
|
+
block.type !== type &&
|
|
98
|
+
edytor.kinds.some((row) => row.value.type === block.type)) {
|
|
99
|
+
edytor.setBlock(block.id, { type, data: {} });
|
|
100
|
+
return caretAt(edytor, block.firstText, 0);
|
|
106
101
|
}
|
|
107
|
-
|
|
108
|
-
|
|
102
|
+
const at = facade.positionOf(block.id);
|
|
103
|
+
// A table's cell keeps its caret at its start: nothing merges into or out
|
|
104
|
+
// of a cell, and it never outdents (`table.merge`); nor does the
|
|
105
|
+
// document's first block, empty.
|
|
106
|
+
if (facade.isTableCell(block.id) || (block.isEmpty && at?.parent === null && at.index === 0))
|
|
107
|
+
return edytor.selection.selectText(startText, 0);
|
|
108
|
+
const island = edytor.idToBlock.get(edytor.selection.projection.islandRoot ?? '');
|
|
109
|
+
// A column's block never outdents (nothing but a column sits in a layout):
|
|
110
|
+
// it merges, across columns in reading order (`layout.merge`).
|
|
111
|
+
const inColumn = !!parent && !parent.isRoot && facade.isLayoutItem(parent.id);
|
|
112
|
+
const last = !!at && at.index === facade.childrenIds(at.parent).length - 1;
|
|
113
|
+
if (parent !== root && last && !island && !inColumn) {
|
|
114
|
+
if (edytor.unNestBlock(block.id).status === 'applied')
|
|
115
|
+
edytor.selection.selectText(block.firstText, 0);
|
|
109
116
|
return;
|
|
110
117
|
}
|
|
111
|
-
if (
|
|
118
|
+
if (island && island.children.length === 1)
|
|
119
|
+
return edytor.selection.select(blockSelection([island.id]));
|
|
120
|
+
if (island && block.index === 0)
|
|
112
121
|
return;
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
}
|
|
136
|
-
const block = startText.parent;
|
|
137
|
-
// A column's first block joins the line before its column (and, in the first,
|
|
138
|
-
// before its layout), as the document's merge does (`layout.merge`).
|
|
139
|
-
const structure = (at) => inColumn &&
|
|
140
|
-
block.index === 0 &&
|
|
141
|
-
!!at &&
|
|
142
|
-
(facade.isLayout(at.id) || facade.isLayoutItem(at.id));
|
|
143
|
-
let previousBlock = shown(block, 'blockBefore');
|
|
144
|
-
let closest = block.closestPreviousBlock;
|
|
145
|
-
while (structure(previousBlock))
|
|
146
|
-
previousBlock = shown(previousBlock, 'blockBefore');
|
|
147
|
-
while (structure(closest))
|
|
148
|
-
closest = closest.closestPreviousBlock;
|
|
149
|
-
if (previousBlock?.definition.void) {
|
|
150
|
-
edytor.selection.selectBlocks(previousBlock);
|
|
151
|
-
return;
|
|
152
|
-
}
|
|
153
|
-
const previousText = previousBlock?.lastText;
|
|
154
|
-
const offset = previousText?.length;
|
|
155
|
-
if (previousBlock === closest)
|
|
156
|
-
block.mergeBlockBackward();
|
|
157
|
-
else if (previousBlock)
|
|
158
|
-
mergeIntoHeader(edytor, block, previousBlock, true);
|
|
159
|
-
if (typeof offset === 'number')
|
|
160
|
-
caretAt(edytor, previousText, offset);
|
|
161
|
-
// A list's first item lifts out of it: the caret stays at its start.
|
|
162
|
-
else if (previousBlock === block.parent)
|
|
163
|
-
caretAt(edytor, block.firstText, 0);
|
|
164
|
-
return;
|
|
165
|
-
}
|
|
166
|
-
if (snapshot.isAtStartOfText) {
|
|
167
|
-
const index = startText.parent.content.indexOf(startText) - 1;
|
|
168
|
-
const previousText = startText.parent.content.at(index - 1);
|
|
169
|
-
const hasPreviousText = previousText && previousText instanceof Text;
|
|
170
|
-
const offset = hasPreviousText ? previousText.length : 0;
|
|
171
|
-
startText.parent.removeInlineBlock({ index });
|
|
172
|
-
if (hasPreviousText) {
|
|
173
|
-
edytor.selection.setAtTextOffset(previousText, offset);
|
|
174
|
-
}
|
|
175
|
-
return;
|
|
176
|
-
}
|
|
177
|
-
const deletion = startText.deleteText({ direction: 'BACKWARD', length: 1 });
|
|
178
|
-
edytor.selection.setAtTextOffset(startText, deletion?.start ?? yStart - 1);
|
|
122
|
+
// A column's first block joins the line before its column (and, in the first,
|
|
123
|
+
// before its layout), as the document's merge does (`layout.merge`).
|
|
124
|
+
const structure = (b) => inColumn && block.index === 0 && !!b && (facade.isLayout(b.id) || facade.isLayoutItem(b.id));
|
|
125
|
+
let previous = shown(block, 'blockBefore');
|
|
126
|
+
let closest = block.closestPreviousBlock;
|
|
127
|
+
while (structure(previous))
|
|
128
|
+
previous = shown(previous, 'blockBefore');
|
|
129
|
+
while (structure(closest))
|
|
130
|
+
closest = closest.closestPreviousBlock;
|
|
131
|
+
if (previous?.definition.void)
|
|
132
|
+
return edytor.selection.select(blockSelection([previous.id]));
|
|
133
|
+
const previousText = previous?.lastText;
|
|
134
|
+
const offset = previousText?.length;
|
|
135
|
+
if (previous === closest)
|
|
136
|
+
edytor.mergeBackward(block.id);
|
|
137
|
+
else if (previous)
|
|
138
|
+
mergeIntoHeader(edytor, block, previous, true);
|
|
139
|
+
if (offset !== undefined)
|
|
140
|
+
caretAt(edytor, previousText, offset);
|
|
141
|
+
// A list's first item lifts out of it: the caret stays at its start.
|
|
142
|
+
else if (previous === parent)
|
|
143
|
+
caretAt(edytor, block.firstText, 0);
|
|
179
144
|
};
|
|
180
145
|
/**
|
|
181
146
|
* The caret's line edge in one direction (`del.unit.soft-line`): a soft line
|
|
@@ -200,69 +165,53 @@ const lineEdge = (text, at, backward, soft) => {
|
|
|
200
165
|
}
|
|
201
166
|
};
|
|
202
167
|
/**
|
|
203
|
-
*
|
|
204
|
-
*
|
|
205
|
-
*
|
|
168
|
+
* The model command of a delete intent. A block selection: every delete key
|
|
169
|
+
* (a word or line chord too) deletes the blocks as Backspace does —
|
|
170
|
+
* `onDeleteSelectedBlocks` first, children promoted (a drag or composition
|
|
171
|
+
* fragment is not a key). A range: the document's range deletion (a forward
|
|
172
|
+
* one needs its text). A collapsed caret: the intent's unit (`del.unit.*`),
|
|
173
|
+
* whose extent the model owns — a character; a word run from the caret's own
|
|
174
|
+
* text, the caret's line to either side, or the whole block, deleted as one
|
|
175
|
+
* range, the caret at its start; a cut, drag or composition fragment deletes
|
|
176
|
+
* nothing. A unit with nothing of the caret's own text in its direction
|
|
177
|
+
* (next to an inline atom, at the block's edge) is the neighbour, deleted
|
|
178
|
+
* like a character (atom, merge, unnest).
|
|
206
179
|
*/
|
|
207
|
-
const deleteCollapsedUnit = (edytor, snapshot) => {
|
|
208
|
-
const { startText: text, yStart, inputType } = snapshot;
|
|
209
|
-
if (!text)
|
|
210
|
-
return;
|
|
211
|
-
const [first, last] = [text.parent.firstText, text.parent.lastText];
|
|
212
|
-
const soft = inputType.startsWith('deleteSoftLine');
|
|
213
|
-
const [from, to] = inputType === 'deleteWordBackward'
|
|
214
|
-
? [
|
|
215
|
-
[text, getPreviousWordStartOffset(text.stringContent, yStart)],
|
|
216
|
-
[text, yStart]
|
|
217
|
-
]
|
|
218
|
-
: inputType === 'deleteWordForward'
|
|
219
|
-
? [
|
|
220
|
-
[text, yStart],
|
|
221
|
-
[text, getNextWordEndOffset(text.stringContent, yStart)]
|
|
222
|
-
]
|
|
223
|
-
: inputType === 'deleteEntireSoftLine'
|
|
224
|
-
? [
|
|
225
|
-
[first, 0],
|
|
226
|
-
[last, last.length]
|
|
227
|
-
]
|
|
228
|
-
: inputType.endsWith('Backward')
|
|
229
|
-
? [lineEdge(text, yStart, true, soft), [text, yStart]]
|
|
230
|
-
: [[text, yStart], lineEdge(text, yStart, false, soft)];
|
|
231
|
-
// Nothing of the caret's own text lies in the delete direction (the caret
|
|
232
|
-
// is at the text's edge: next to an inline atom, or at the block's edge):
|
|
233
|
-
// the unit is the neighbour, deleted like a character (atom, merge, unnest).
|
|
234
|
-
if (from[0] === to[0] && from[1] === to[1] && inputType !== 'deleteEntireSoftLine') {
|
|
235
|
-
return inputType.endsWith('Backward')
|
|
236
|
-
? deleteContentBackward(edytor, snapshot)
|
|
237
|
-
: deleteContentForward(edytor, snapshot);
|
|
238
|
-
}
|
|
239
|
-
text.parent.deleteContentAtRange({ start: [from[0].index, from[1]], end: [to[0].index, to[1]] });
|
|
240
|
-
edytor.selection.setAtTextOffset(...from);
|
|
241
|
-
};
|
|
242
180
|
export const runBeforeInputDeleteCommand = (edytor, snapshot) => {
|
|
243
181
|
// The Android post-delete snap-back's evidence (a named projector rule):
|
|
244
182
|
// only an actual delete arms it, never a navigational jump.
|
|
245
183
|
edytor.projector.deleted(snapshot);
|
|
246
|
-
const { inputType } = snapshot;
|
|
247
|
-
const
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
if (edytor.selection.selectedBlocks.size && !/^delete(ByDrag|ByComposition)$/.test(inputType)) {
|
|
252
|
-
deleteSelectedBlocks(edytor);
|
|
253
|
-
return;
|
|
254
|
-
}
|
|
255
|
-
// A selection: the document's range deletion (a forward one needs its text).
|
|
184
|
+
const { inputType, startText: text, yStart } = snapshot;
|
|
185
|
+
const { dir, unit } = INTENTS[inputType] ?? {};
|
|
186
|
+
const back = !unit || dir === 'back';
|
|
187
|
+
if (edytor.selection.selectedBlocks.size && !/^delete(ByDrag|ByComposition)$/.test(inputType))
|
|
188
|
+
return deleteSelectedBlocks(edytor);
|
|
256
189
|
if (!snapshot.isCollapsed) {
|
|
257
|
-
if (
|
|
190
|
+
if (back || text)
|
|
258
191
|
deleteSelectedRange(edytor, { selection: snapshot });
|
|
259
192
|
return;
|
|
260
193
|
}
|
|
261
|
-
if (
|
|
262
|
-
return
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
194
|
+
if (!unit || !text)
|
|
195
|
+
return;
|
|
196
|
+
const byChar = () => back ? deleteContentBackward(edytor, snapshot) : deleteContentForward(edytor, snapshot);
|
|
197
|
+
if (unit === 'char')
|
|
198
|
+
return byChar();
|
|
199
|
+
const [first, last] = [text.parent.firstText, text.parent.lastText];
|
|
200
|
+
const word = back
|
|
201
|
+
? getPreviousWordStartOffset(text.stringContent, yStart)
|
|
202
|
+
: getNextWordEndOffset(text.stringContent, yStart);
|
|
203
|
+
const edge = unit === 'word' ? [text, word] : lineEdge(text, yStart, back, unit === 'soft');
|
|
204
|
+
const [from, to] = unit === 'line'
|
|
205
|
+
? [
|
|
206
|
+
[first, 0],
|
|
207
|
+
[last, last.length]
|
|
208
|
+
]
|
|
209
|
+
: back
|
|
210
|
+
? [edge, [text, yStart]]
|
|
211
|
+
: [[text, yStart], edge];
|
|
212
|
+
if (unit !== 'line' && from[0] === to[0] && from[1] === to[1])
|
|
213
|
+
return byChar();
|
|
214
|
+
const at = from[0].segStart + from[1];
|
|
215
|
+
edytor.deleteText(text.parent.id, at, to[0].segStart + to[1] - at);
|
|
216
|
+
edytor.selection.selectText(...from);
|
|
268
217
|
};
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Character offset of the DOM point `(node, offset)` inside `textNode
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* text-node
|
|
7
|
-
* (Firefox's node-bound caret
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
2
|
+
* Character offset of the DOM point `(node, offset)` inside `textNode`: the
|
|
3
|
+
* text of the text nodes before it, in document order (Svelte's anchors
|
|
4
|
+
* are comments and carry none) — the one DOM→model point mapper
|
|
5
|
+
* (`getYIndex` adds the editor's marker, boundary and filler rules on top;
|
|
6
|
+
* `domPointOf` is its inverse). A text-node point carries a character
|
|
7
|
+
* offset, an element point (Firefox's node-bound caret) a child index;
|
|
8
|
+
* either past its node's end clamps to it. A point outside `textNode` clamps
|
|
9
|
+
* to the nearest edge by document position (an ancestor's point resolves
|
|
10
|
+
* through its child index); a disconnected one keeps its offset.
|
|
11
11
|
*/
|
|
12
12
|
export declare const getTextContentOffsetAtPoint: (textNode: Node, node: Node, offset: number) => number;
|
|
@@ -1,52 +1,24 @@
|
|
|
1
|
-
const getChildTextLengthBeforeOffset = (element, offset) => {
|
|
2
|
-
let length = 0;
|
|
3
|
-
const end = Math.min(offset, element.childNodes.length);
|
|
4
|
-
for (let index = 0; index < end; index++) {
|
|
5
|
-
// Svelte's hydration comments carry data, never text.
|
|
6
|
-
const child = element.childNodes[index];
|
|
7
|
-
if (child.nodeType !== Node.COMMENT_NODE)
|
|
8
|
-
length += child.textContent?.length ?? 0;
|
|
9
|
-
}
|
|
10
|
-
return length;
|
|
11
|
-
};
|
|
12
1
|
/**
|
|
13
|
-
* Character offset of the DOM point `(node, offset)` inside `textNode
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
* text-node
|
|
18
|
-
* (Firefox's node-bound caret
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
2
|
+
* Character offset of the DOM point `(node, offset)` inside `textNode`: the
|
|
3
|
+
* text of the text nodes before it, in document order (Svelte's anchors
|
|
4
|
+
* are comments and carry none) — the one DOM→model point mapper
|
|
5
|
+
* (`getYIndex` adds the editor's marker, boundary and filler rules on top;
|
|
6
|
+
* `domPointOf` is its inverse). A text-node point carries a character
|
|
7
|
+
* offset, an element point (Firefox's node-bound caret) a child index;
|
|
8
|
+
* either past its node's end clamps to it. A point outside `textNode` clamps
|
|
9
|
+
* to the nearest edge by document position (an ancestor's point resolves
|
|
10
|
+
* through its child index); a disconnected one keeps its offset.
|
|
22
11
|
*/
|
|
23
12
|
export const getTextContentOffsetAtPoint = (textNode, node, offset) => {
|
|
24
|
-
if (textNode
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
}
|
|
36
|
-
const index = child.parentNode === node ? Array.prototype.indexOf.call(node.childNodes, child) : -1;
|
|
37
|
-
return index !== -1 && index < offset ? (textNode.textContent?.length ?? 0) : 0;
|
|
38
|
-
}
|
|
39
|
-
return position & Node.DOCUMENT_POSITION_FOLLOWING ? (textNode.textContent?.length ?? 0) : 0;
|
|
40
|
-
}
|
|
41
|
-
const pointOffset = node.nodeType === Node.TEXT_NODE
|
|
42
|
-
? Math.min(offset, node.textContent?.length ?? 0)
|
|
43
|
-
: getChildTextLengthBeforeOffset(node, offset);
|
|
44
|
-
let total = pointOffset;
|
|
45
|
-
const treeWalker = (textNode.ownerDocument ?? document).createTreeWalker(textNode, NodeFilter.SHOW_TEXT, (child) => child.compareDocumentPosition(node) === Node.DOCUMENT_POSITION_FOLLOWING
|
|
46
|
-
? NodeFilter.FILTER_ACCEPT
|
|
47
|
-
: NodeFilter.FILTER_SKIP);
|
|
48
|
-
while (treeWalker.nextNode()) {
|
|
49
|
-
total += treeWalker.currentNode.textContent?.length ?? 0;
|
|
50
|
-
}
|
|
51
|
-
return total;
|
|
13
|
+
if (textNode.compareDocumentPosition(node) & Node.DOCUMENT_POSITION_DISCONNECTED)
|
|
14
|
+
return offset;
|
|
15
|
+
const range = (textNode.ownerDocument ?? document).createRange();
|
|
16
|
+
range.selectNodeContents(textNode);
|
|
17
|
+
const at = Math.min(offset, node.nodeType === Node.TEXT_NODE ? node.length : node.childNodes.length);
|
|
18
|
+
const side = range.comparePoint(node, at);
|
|
19
|
+
if (side < 0)
|
|
20
|
+
return 0;
|
|
21
|
+
if (side === 0)
|
|
22
|
+
range.setEnd(node, at);
|
|
23
|
+
return range.toString().length;
|
|
52
24
|
};
|
|
@@ -7,7 +7,3 @@ export const isAndroidChromeBrowser = () => {
|
|
|
7
7
|
/\bChrome\//i.test(userAgent) &&
|
|
8
8
|
!/(Edg|OPR|SamsungBrowser)/i.test(userAgent));
|
|
9
9
|
};
|
|
10
|
-
export const getTextPath = (text) => {
|
|
11
|
-
const index = text.parent.content.findIndex((part) => part === text);
|
|
12
|
-
return [...text.parent.path, index === -1 ? text.index : index];
|
|
13
|
-
};
|
|
@@ -1,22 +1,15 @@
|
|
|
1
1
|
export declare const isNativeInteractiveControl: (target: EventTarget | null) => boolean;
|
|
2
|
-
export declare const isNativeFormControl: (target: EventTarget | null) => boolean;
|
|
3
2
|
export declare const isNativeInteractiveEvent: (event: Event) => boolean;
|
|
4
3
|
export declare const isNativeTextControl: (target: EventTarget | null) => boolean;
|
|
5
4
|
export declare const isNativeTextControlEvent: (event: Event) => boolean;
|
|
6
|
-
/**
|
|
7
|
-
* The event target sits inside a nested `contenteditable` island that is
|
|
8
|
-
* neither the editor root nor a managed text element (text elements
|
|
9
|
-
* carry their own `contentEditable="true"`). Such islands — a plugin
|
|
10
|
-
* chrome editor, an embedded code field — own their input/composition
|
|
11
|
-
* lifecycle; the outer editor must not snapshot them against the model
|
|
12
|
-
* selection or commit their composition text.
|
|
13
|
-
*/
|
|
14
|
-
export declare const isNestedForeignEditableTarget: (editorRoot: Element | null | undefined, target: EventTarget | null) => boolean;
|
|
15
5
|
/**
|
|
16
6
|
* A kind's own control: a form control (`input` of any type, `textarea`,
|
|
17
|
-
* `select`, `button`) or a nested editable island inside the host
|
|
18
|
-
*
|
|
19
|
-
*
|
|
7
|
+
* `select`, `button`) or a nested editable island inside the host (a plugin
|
|
8
|
+
* chrome editor, an embedded code field: it owns its input and composition
|
|
9
|
+
* lifecycle), never the root nor the editor's own text elements (they carry
|
|
10
|
+
* their own `contentEditable="true"`). It owns its focus, selection and
|
|
11
|
+
* events; the projector never writes the editor's caret over it, and the
|
|
12
|
+
* editor never snapshots it nor commits its composition text.
|
|
20
13
|
*/
|
|
21
14
|
export declare const isKindControl: (editorRoot: Element | null | undefined, target: EventTarget | null) => boolean;
|
|
22
15
|
/**
|
|
@@ -29,3 +22,10 @@ export declare const isKindControl: (editorRoot: Element | null | undefined, tar
|
|
|
29
22
|
* `onDrop` all ask this.
|
|
30
23
|
*/
|
|
31
24
|
export declare const ownsEvent: (editorRoot: Element | null | undefined, event: Event) => boolean;
|
|
25
|
+
/**
|
|
26
|
+
* An event of a native control anywhere (a link, the chrome's buttons beside
|
|
27
|
+
* the host) or of a kind's own: never the view's own composition or input.
|
|
28
|
+
*/
|
|
29
|
+
export declare const isControlEvent: (editorRoot: Element | null | undefined, event: Event) => boolean;
|
|
30
|
+
/** A DOM point of the view's own: inside the host and in no kind's own control. */
|
|
31
|
+
export declare const isOwnPoint: (editorRoot: Element | null | undefined, node: Node | null | undefined) => boolean;
|