edytor 1.0.0-rc.3 → 2.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 +21 -39
- package/dist/block/block.svelte.d.ts +11 -84
- package/dist/block/block.svelte.js +30 -134
- 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 +11 -9
- package/dist/block/inlineBlock.svelte.js +18 -21
- package/dist/clipboard/createClipboardFragment.js +22 -64
- package/dist/clipboard/fragmentData.js +17 -42
- package/dist/clipboard/htmlFlow.js +7 -7
- 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 +4 -17
- package/dist/cloudflare/DocumentRoom.js +3 -5
- 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 +25 -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 +3 -32
- package/dist/cloudflare/room/storage.js +33 -108
- 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/awarenessSelection.d.ts +22 -1
- package/dist/collaboration/awarenessSelection.js +42 -0
- 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 +42 -56
- package/dist/components/Block.svelte.d.ts +7 -5
- package/dist/components/Content.svelte +1 -5
- package/dist/components/Edytor.svelte +82 -99
- package/dist/components/Edytor.svelte.d.ts +16 -13
- package/dist/components/InlineBlock.svelte +1 -1
- 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 +2 -5
- 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 +18 -13
- package/dist/crdt/data.js +49 -71
- 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 +8 -5
- package/dist/crdt/doc/reads.js +49 -50
- 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 +32 -115
- package/dist/crdt/document.js +216 -302
- package/dist/crdt/edytor-doc.d.ts +689 -90
- package/dist/crdt/edytor-doc.js +74 -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 +32 -85
- package/dist/crdt/index.js +21 -47
- package/dist/crdt/operations.d.ts +24 -33
- package/dist/crdt/operations.js +8 -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/props.d.ts +32 -0
- package/dist/crdt/props.js +172 -0
- 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/dnd/autoScroll.js +1 -2
- package/dist/{plugins/blockHandles → dnd}/dropIndicator.d.ts +2 -2
- package/dist/{plugins/blockHandles → dnd}/dropIndicator.js +52 -60
- package/dist/{plugins/blockHandles → dnd}/geometry.d.ts +4 -3
- package/dist/{plugins/blockHandles → dnd}/geometry.js +6 -6
- package/dist/dnd/placement.d.ts +200 -0
- package/dist/dnd/placement.js +426 -0
- 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 +46 -63
- package/dist/edytor.svelte.js +126 -181
- package/dist/events/beforeInputCommands.d.ts +6 -11
- package/dist/events/beforeInputCommands.js +189 -181
- 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 +64 -78
- package/dist/events/onFocus.d.ts +9 -4
- package/dist/events/onFocus.js +45 -67
- 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 +14 -1
- package/dist/events/onPaste.js +51 -76
- package/dist/index.d.ts +11 -15
- package/dist/index.js +3 -3
- package/dist/kinds.d.ts +4 -6
- package/dist/kinds.js +28 -27
- package/dist/labels.d.ts +83 -320
- package/dist/labels.js +181 -408
- 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 -154
- package/dist/plugins/blockHandles/BlockHandle.svelte.d.ts +2 -2
- package/dist/plugins/blockHandles/BlockHandleController.svelte.d.ts +21 -196
- package/dist/plugins/blockHandles/BlockHandleController.svelte.js +158 -573
- package/dist/plugins/blockHandles/BlockHandles.svelte +15 -23
- package/dist/plugins/blockHandles/BlockHandles.svelte.d.ts +2 -2
- package/dist/plugins/blockHandles/blockHandlesPlugin.d.ts +25 -39
- package/dist/plugins/blockHandles/blockHandlesPlugin.js +130 -185
- package/dist/plugins/blockHandles/dragPreview.d.ts +8 -6
- package/dist/plugins/blockHandles/dragPreview.js +18 -16
- package/dist/plugins/blockMenu/BlockMenuController.svelte.d.ts +28 -38
- package/dist/plugins/blockMenu/BlockMenuController.svelte.js +116 -183
- 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 +45 -38
- package/dist/plugins/chrome.js +59 -36
- package/dist/plugins/code/CodeHeader.svelte +8 -38
- package/dist/plugins/code/CodePlugin.svelte +53 -56
- package/dist/plugins/code/CodePlugin.svelte.d.ts +0 -2
- package/dist/plugins/code/LanguageMenu.svelte +16 -125
- package/dist/plugins/code/LanguageMenu.svelte.d.ts +2 -1
- package/dist/plugins/code/code.css +5 -117
- package/dist/plugins/code/header.svelte.d.ts +2 -11
- package/dist/plugins/code/header.svelte.js +11 -38
- package/dist/plugins/code/languageMenu.svelte.d.ts +12 -32
- package/dist/plugins/code/languageMenu.svelte.js +30 -160
- package/dist/plugins/code/languages.d.ts +9 -22
- package/dist/plugins/code/languages.js +39 -128
- package/dist/plugins/columns/ColumnResize.svelte +16 -27
- 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/gaps.d.ts +7 -5
- package/dist/plugins/columns/gaps.js +11 -6
- package/dist/plugins/columns/resize.svelte.d.ts +17 -54
- package/dist/plugins/columns/resize.svelte.js +80 -173
- 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 -431
- package/dist/plugins/comments/CommentsSidebar.svelte.d.ts +4 -2
- package/dist/plugins/comments/commentsPlugin.d.ts +25 -9
- package/dist/plugins/comments/commentsPlugin.js +12 -10
- package/dist/plugins/equation/EquationEditor.svelte +16 -130
- package/dist/plugins/equation/EquationEditor.svelte.d.ts +1 -2
- package/dist/plugins/equation/EquationPlugin.svelte +109 -172
- package/dist/plugins/equation/EquationPlugin.svelte.d.ts +3 -2
- package/dist/plugins/equation/EquationView.svelte +20 -11
- package/dist/plugins/equation/equation.css +7 -0
- package/dist/plugins/equation/equation.svelte.d.ts +37 -24
- package/dist/plugins/equation/equation.svelte.js +20 -94
- package/dist/plugins/equation/katex.js +6 -9
- package/dist/plugins/fileDrop.d.ts +28 -0
- package/dist/plugins/fileDrop.js +116 -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 +6 -167
- package/dist/plugins/image/ImageChrome.svelte.d.ts +0 -2
- package/dist/plugins/image/ImagePlugin.svelte +71 -151
- package/dist/plugins/image/ImagePlugin.svelte.d.ts +12 -41
- 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 -36
- package/dist/plugins/image/controls.svelte.js +43 -212
- package/dist/plugins/image/image.css +17 -0
- 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 +30 -26
- package/dist/plugins/index.js +28 -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 +10 -9
- package/dist/plugins/marquee/MarqueeBox.svelte +3 -20
- package/dist/plugins/marquee/MarqueeBox.svelte.d.ts +1 -1
- package/dist/plugins/marquee/MarqueeController.svelte.d.ts +0 -2
- package/dist/plugins/marquee/MarqueeController.svelte.js +20 -23
- package/dist/plugins/marquee/marquee.js +4 -21
- package/dist/plugins/marquee/marqueePlugin.d.ts +4 -3
- package/dist/plugins/marquee/marqueePlugin.js +16 -15
- package/dist/plugins/media/AudioPlugin.svelte +13 -88
- package/dist/plugins/media/AudioPlugin.svelte.d.ts +11 -4
- package/dist/plugins/media/BookmarkPlugin.svelte +113 -120
- package/dist/plugins/media/BookmarkPlugin.svelte.d.ts +10 -15
- package/dist/plugins/media/EmbedPlugin.svelte +82 -86
- package/dist/plugins/media/EmbedPlugin.svelte.d.ts +11 -17
- package/dist/plugins/media/EmptySlot.svelte +44 -0
- package/dist/plugins/media/EmptySlot.svelte.d.ts +25 -0
- package/dist/plugins/media/FilePlugin.svelte +45 -113
- package/dist/plugins/media/FilePlugin.svelte.d.ts +21 -4
- package/dist/plugins/media/MediaEmpty.svelte +51 -90
- package/dist/plugins/media/MediaEmpty.svelte.d.ts +26 -10
- package/dist/plugins/media/SourceBlock.svelte +200 -0
- package/dist/plugins/media/SourceBlock.svelte.d.ts +34 -0
- package/dist/plugins/media/UploadPreview.svelte +32 -0
- package/dist/plugins/media/UploadPreview.svelte.d.ts +11 -0
- package/dist/plugins/media/VideoPlugin.svelte +14 -97
- package/dist/plugins/media/VideoPlugin.svelte.d.ts +12 -5
- package/dist/plugins/media/empty.svelte.d.ts +47 -46
- package/dist/plugins/media/empty.svelte.js +67 -60
- package/dist/plugins/media/media.d.ts +97 -44
- package/dist/plugins/media/media.js +77 -99
- package/dist/plugins/media/upload.css +23 -0
- package/dist/plugins/media/urlPaste.svelte.d.ts +6 -37
- package/dist/plugins/media/urlPaste.svelte.js +32 -102
- package/dist/plugins/mention/MentionPlugin.svelte +84 -126
- package/dist/plugins/mention/MentionPlugin.svelte.d.ts +17 -27
- package/dist/plugins/mention/mention.css +6 -0
- 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 +154 -109
- package/dist/plugins/pageLink/PageLinkPlugin.svelte.d.ts +19 -26
- package/dist/plugins/pageLink/pageLink.css +6 -0
- package/dist/plugins/planned.d.ts +10 -0
- package/dist/plugins/planned.js +12 -0
- package/dist/plugins/richtext/CalloutIcon.svelte +13 -26
- package/dist/plugins/richtext/CalloutIconPicker.svelte +26 -0
- package/dist/plugins/richtext/CalloutIconPicker.svelte.d.ts +9 -0
- package/dist/plugins/richtext/EmptyBody.svelte +13 -20
- package/dist/plugins/richtext/RichTextControl.svelte +39 -0
- package/dist/plugins/richtext/RichTextControl.svelte.d.ts +8 -0
- package/dist/plugins/richtext/RichTextPlugin.svelte +174 -183
- package/dist/plugins/richtext/RichTextPlugin.svelte.d.ts +34 -34
- package/dist/plugins/richtext/TodoCheckbox.svelte +10 -21
- package/dist/plugins/richtext/TodoCheckbox.svelte.d.ts +0 -2
- package/dist/plugins/richtext/body.js +2 -2
- package/dist/plugins/richtext/calloutIcons.svelte.d.ts +50 -55
- package/dist/plugins/richtext/calloutIcons.svelte.js +86 -174
- 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/richtext/richtext.css +6 -0
- package/dist/plugins/slashMenu/SlashMenuController.svelte.d.ts +2 -14
- package/dist/plugins/slashMenu/SlashMenuController.svelte.js +34 -71
- package/dist/plugins/slashMenu/slashMenuPlugin.d.ts +9 -26
- package/dist/plugins/slashMenu/slashMenuPlugin.js +27 -68
- package/dist/plugins/suggestions/SuggestionBars.svelte +27 -84
- package/dist/plugins/suggestions/SuggestionBars.svelte.d.ts +9 -3
- package/dist/plugins/suggestions/suggestionsPlugin.d.ts +10 -18
- package/dist/plugins/suggestions/suggestionsPlugin.js +9 -24
- package/dist/plugins/table/TableChrome.svelte +40 -124
- package/dist/plugins/table/TablePlugin.svelte +106 -168
- package/dist/plugins/table/TablePlugin.svelte.d.ts +0 -4
- package/dist/plugins/table/chrome.svelte.d.ts +38 -141
- package/dist/plugins/table/chrome.svelte.js +340 -589
- package/dist/plugins/table/ops.d.ts +47 -0
- package/dist/plugins/table/ops.js +233 -0
- package/dist/plugins/table/table.css +16 -152
- package/dist/plugins/table/table.d.ts +15 -14
- package/dist/plugins/table/table.js +22 -16
- 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 +4 -68
- package/dist/plugins/toolbar/ToolbarController.svelte.js +63 -89
- package/dist/plugins/toolbar/toolbarPlugin.d.ts +8 -18
- package/dist/plugins/toolbar/toolbarPlugin.js +28 -43
- package/dist/plugins/triggers/TriggerController.svelte.d.ts +4 -68
- package/dist/plugins/triggers/TriggerController.svelte.js +48 -129
- 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 +55 -24
- package/dist/plugins/uploads.svelte.js +123 -50
- package/dist/plugins.d.ts +187 -66
- package/dist/selection/domSelection.d.ts +13 -4
- package/dist/selection/domSelection.js +110 -183
- package/dist/selection/pointer.svelte.d.ts +8 -10
- package/dist/selection/pointer.svelte.js +32 -73
- 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 +224 -542
- package/dist/selection/selection.utils.d.ts +34 -11
- package/dist/selection/selection.utils.js +128 -247
- package/dist/selection/visibility.d.ts +3 -8
- package/dist/selection/visibility.js +7 -5
- package/dist/session/announcer.svelte.d.ts +2 -1
- package/dist/session/announcer.svelte.js +7 -3
- package/dist/session/attempt.d.ts +43 -39
- package/dist/session/attempt.js +62 -55
- package/dist/session/bindings.js +117 -145
- package/dist/session/commands.d.ts +47 -22
- package/dist/session/commands.js +208 -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 +16 -21
- package/dist/session/inputRules.d.ts +6 -3
- package/dist/session/inputRules.js +78 -83
- package/dist/session/keymap.d.ts +1 -6
- package/dist/session/keymap.js +17 -20
- package/dist/session/moves.d.ts +43 -10
- package/dist/session/moves.js +101 -59
- package/dist/session/navigation.d.ts +10 -2
- package/dist/session/navigation.js +140 -172
- package/dist/session/ports.d.ts +2 -7
- package/dist/session/props.d.ts +25 -25
- package/dist/session/props.js +62 -159
- package/dist/session/selection.d.ts +4 -3
- package/dist/session/selection.js +5 -0
- package/dist/session/suggestions.svelte.d.ts +1 -1
- package/dist/session/suggestions.svelte.js +42 -47
- package/dist/session/uploads.d.ts +29 -0
- package/dist/session/uploads.js +10 -0
- 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 +2 -2
- package/dist/surface/lines.js +1 -1
- package/dist/surface/observer.svelte.d.ts +3 -20
- package/dist/surface/observer.svelte.js +52 -72
- package/dist/surface/overlay.d.ts +41 -3
- package/dist/surface/overlay.js +92 -37
- 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 +272 -106
- 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 -554
- package/dist/collaboration/history/HistoryPanel.svelte.d.ts +0 -7
- package/dist/collaboration/history/panel.d.ts +0 -61
- 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 -335
- 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 -93
- package/dist/plugins/image/ImageEmpty.svelte.d.ts +0 -15
- package/dist/plugins/image/empty.svelte.d.ts +0 -56
- package/dist/plugins/image/empty.svelte.js +0 -83
- package/dist/plugins/keepInView.d.ts +0 -4
- package/dist/plugins/keepInView.js +0 -6
- package/dist/plugins/media/UrlPasteMenu.svelte +0 -92
- package/dist/plugins/media/UrlPasteMenu.svelte.d.ts +0 -9
- package/dist/plugins/richtext/CalloutIconMenu.svelte +0 -98
- package/dist/plugins/richtext/CalloutIconMenu.svelte.d.ts +0 -9
- package/dist/plugins/richtext/labels.d.ts +0 -9
- package/dist/plugins/richtext/labels.js +0 -7
- package/dist/plugins/slashMenu/SlashMenu.svelte +0 -276
- package/dist/plugins/slashMenu/SlashMenu.svelte.d.ts +0 -11
- package/dist/plugins/table/dragPreview.d.ts +0 -29
- package/dist/plugins/table/dragPreview.js +0 -103
- package/dist/plugins/toolbar/LinkCard.svelte +0 -122
- package/dist/plugins/toolbar/LinkCard.svelte.d.ts +0 -9
- package/dist/plugins/toolbar/Toolbar.svelte +0 -349
- package/dist/plugins/toolbar/Toolbar.svelte.d.ts +0 -9
- package/dist/plugins/triggers/TriggerMenu.svelte +0 -135
- package/dist/plugins/triggers/TriggerMenu.svelte.d.ts +0 -7
- 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
- /package/dist/{plugins/columns → dnd}/stacking.d.ts +0 -0
- /package/dist/{plugins/columns → dnd}/stacking.js +0 -0
|
@@ -1,19 +1,14 @@
|
|
|
1
1
|
import type { Edytor } from '../edytor.svelte.js';
|
|
2
|
+
import type { Text } from '../text/text.svelte.js';
|
|
2
3
|
import { type Attempt } from '../session/attempt.js';
|
|
3
|
-
/**
|
|
4
|
-
* Offer an intent's key to the bindings once per occurrence (the key it stands
|
|
5
|
-
* for when no keydown offered it: Android, virtual keyboards): not when its
|
|
6
|
-
* keydown already offered it (`offered`). A non-cancelable intent is offered
|
|
7
|
-
* too — its attempt owns the browser's drift either way.
|
|
8
|
-
*/
|
|
9
|
-
export declare const runBeforeInputHotkeyBridge: (edytor: Edytor, snapshot: Attempt, offered: string | null) => boolean;
|
|
10
4
|
/**
|
|
11
5
|
* A soft break; the caret lands after it, or before it (Emacs open-line).
|
|
12
|
-
* When normalization splits the block on the break (code lines
|
|
13
|
-
* the new block's start and "before" the
|
|
6
|
+
* When normalization splits the block on the break (code lines: the break is
|
|
7
|
+
* gone from its text), "after" is the new block's start and "before" the
|
|
8
|
+
* source block's trailing edge.
|
|
14
9
|
*/
|
|
15
10
|
export declare const insertLineBreak: (edytor: Edytor, snapshot: Attempt, caret?: "after" | "before") => void;
|
|
16
11
|
/** The model command for a `beforeinput`, run as one user command (undo policy, prevention scope). */
|
|
17
|
-
export declare const runBeforeInputCommand: (edytor: Edytor, snapshot: Attempt) => boolean | void | Promise<
|
|
12
|
+
export declare const runBeforeInputCommand: (edytor: Edytor, snapshot: Attempt) => boolean | void | Text | Promise<undefined> | null | undefined;
|
|
18
13
|
/** An editing intent at the current selection (a key binding's command): no event to fabricate. */
|
|
19
|
-
export declare const runIntent: (edytor: Edytor, inputType: string) => boolean | void | Promise<
|
|
14
|
+
export declare const runIntent: (edytor: Edytor, inputType: string) => boolean | void | Text | Promise<undefined> | null | undefined;
|
|
@@ -6,52 +6,54 @@ import { dropText, textDragOf } from '../clipboard/moveText.js';
|
|
|
6
6
|
import { cloneJson } from '../utils/json.js';
|
|
7
7
|
import { insertionMarks } from '../session/editing/text.js';
|
|
8
8
|
import { id, vetoable } from '../utils.js';
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
9
|
+
import { siblingSlot } from '../session/handles.js';
|
|
10
|
+
import { REFUSED } from '../crdt/doc/plan.js';
|
|
11
|
+
import { offsetIn } from '../selection/selection.utils.js';
|
|
11
12
|
import { bodyShows } from '../selection/visibility.js';
|
|
12
13
|
import { runBeforeInputDeleteCommand } from './beforeInputDeleteCommands.js';
|
|
13
14
|
import { firstUriListEntry } from './dataTransferPayload.js';
|
|
14
|
-
import {
|
|
15
|
+
import { caretAt, intentSnapshot, kindOf } from '../session/attempt.js';
|
|
16
|
+
/** A kind's fresh data: its first preset's (a new to-do is unchecked). */
|
|
17
|
+
const freshData = (block) => ({
|
|
18
|
+
...(block.definition.presets?.[0]?.data ?? {})
|
|
19
|
+
});
|
|
15
20
|
/**
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
* too — its attempt owns the browser's drift either way.
|
|
21
|
+
* The line Enter starts after `block` (a split's tail, a new sibling): a
|
|
22
|
+
* list-like kind (`continues`) itself, with fresh data; any other, its
|
|
23
|
+
* parent's default child.
|
|
20
24
|
*/
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
25
|
+
const nextLine = (block) => block.definition.continues
|
|
26
|
+
? { type: block.type, data: freshData(block) }
|
|
27
|
+
: { type: block.edytor.defaultChild(block.parent) };
|
|
28
|
+
/** The block an operation answered first (inserted, split off), once written. */
|
|
29
|
+
const blockOf = (edytor, result) => edytor.idToBlock.get(result.ids[0] ?? '');
|
|
30
|
+
/**
|
|
31
|
+
* Type `value` at the insertion target (the selection it replaces removed
|
|
32
|
+
* first) with the insertion's marks; `. ` after a space or a dot replaces
|
|
33
|
+
* it (the auto-dot: autocorrect replaces the character before). Answers
|
|
34
|
+
* where it went.
|
|
35
|
+
*/
|
|
36
|
+
const type = (edytor, snapshot, value) => {
|
|
37
|
+
const marks = insertionMarks(edytor, snapshot);
|
|
38
|
+
const target = replaceSelectionForInsertion(edytor, snapshot);
|
|
39
|
+
if (!target)
|
|
40
|
+
return null;
|
|
41
|
+
const { text, offset } = target;
|
|
42
|
+
const isAutoDot = value === '. ' && offset > 0 && ' .'.includes(text.stringContent[offset - 1]);
|
|
43
|
+
const at = text.segStart + offset - (isAutoDot ? 1 : 0);
|
|
44
|
+
if (isAutoDot)
|
|
45
|
+
edytor.deleteText(text.parent.id, at, 1);
|
|
46
|
+
edytor.insertText(text.parent.id, at, value, marks);
|
|
47
|
+
return { text, offset, end: offset + (isAutoDot ? 1 : value.length) };
|
|
26
48
|
};
|
|
27
49
|
const insertText = (edytor, snapshot) => {
|
|
28
50
|
const { data } = snapshot;
|
|
29
51
|
// A text insertion while composing is the session's commit.
|
|
30
52
|
if (snapshot.inputType === 'insertText' && edytor.composition.commit(data ?? ''))
|
|
31
53
|
return;
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
const marks = insertionMarks(edytor, snapshot);
|
|
36
|
-
const target = replaceSelectionForInsertion(edytor, snapshot);
|
|
37
|
-
if (!target) {
|
|
38
|
-
return;
|
|
39
|
-
}
|
|
40
|
-
const autoDotPreviousCharacter = target.text.stringContent.slice(target.offset - 1, target.offset);
|
|
41
|
-
const shouldApplyAutoDot = data === '. ' && target.offset > 0 && [' ', '.'].includes(autoDotPreviousCharacter);
|
|
42
|
-
if (shouldApplyAutoDot) {
|
|
43
|
-
target.text.insertText({
|
|
44
|
-
value: data,
|
|
45
|
-
start: target.offset,
|
|
46
|
-
end: target.offset,
|
|
47
|
-
marks,
|
|
48
|
-
isAutoDot: true
|
|
49
|
-
});
|
|
50
|
-
caretAt(edytor, target.text, target.offset + 1);
|
|
51
|
-
return;
|
|
52
|
-
}
|
|
53
|
-
target.text.insertText({ value: data, start: target.offset, end: target.offset, marks });
|
|
54
|
-
caretAt(edytor, target.text, target.offset + data.length);
|
|
54
|
+
const at = snapshot.startText && data && type(edytor, snapshot, data);
|
|
55
|
+
if (at)
|
|
56
|
+
caretAt(edytor, at.text, at.end);
|
|
55
57
|
};
|
|
56
58
|
/**
|
|
57
59
|
* Enter or Shift+Enter over a block selection edits the text (Notion): the
|
|
@@ -68,134 +70,119 @@ const editSelectedBlocks = (edytor) => {
|
|
|
68
70
|
if (line)
|
|
69
71
|
caretAt(edytor, line, line.length);
|
|
70
72
|
else {
|
|
71
|
-
const
|
|
72
|
-
caretAt(edytor,
|
|
73
|
+
const line = { type: edytor.defaultChild(last.parent) };
|
|
74
|
+
caretAt(edytor, blockOf(edytor, edytor.insertBlocks(siblingSlot(last), [line]))?.firstText, 0);
|
|
73
75
|
}
|
|
74
76
|
return true;
|
|
75
77
|
};
|
|
76
78
|
/**
|
|
77
79
|
* A soft break; the caret lands after it, or before it (Emacs open-line).
|
|
78
|
-
* When normalization splits the block on the break (code lines
|
|
79
|
-
* the new block's start and "before" the
|
|
80
|
+
* When normalization splits the block on the break (code lines: the break is
|
|
81
|
+
* gone from its text), "after" is the new block's start and "before" the
|
|
82
|
+
* source block's trailing edge.
|
|
80
83
|
*/
|
|
81
84
|
export const insertLineBreak = (edytor, snapshot, caret = 'after') => {
|
|
82
85
|
if (editSelectedBlocks(edytor))
|
|
83
86
|
return;
|
|
84
|
-
const
|
|
85
|
-
|
|
86
|
-
if (!target) {
|
|
87
|
+
const at = type(edytor, snapshot, '\n');
|
|
88
|
+
if (!at)
|
|
87
89
|
return;
|
|
88
|
-
}
|
|
89
|
-
const
|
|
90
|
-
const sourceParent = sourceBlock.parent;
|
|
91
|
-
const sourceIndex = sourceBlock.index;
|
|
92
|
-
const sourceSiblingCount = sourceParent?.children.length ?? 0;
|
|
93
|
-
target.text.insertText({ value: '\n', start: target.offset, end: target.offset, marks });
|
|
94
|
-
sourceBlock.normalizeContent();
|
|
95
|
-
const normalizedNextBlock = sourceParent?.children[sourceIndex + 1];
|
|
96
|
-
const split = sourceParent &&
|
|
97
|
-
sourceParent.children.length > sourceSiblingCount &&
|
|
98
|
-
normalizedNextBlock?.type === sourceBlock.type;
|
|
90
|
+
const { text, offset } = at;
|
|
91
|
+
const block = text.parent;
|
|
99
92
|
const before = caret === 'before';
|
|
100
|
-
|
|
101
|
-
?
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
caretAt(edytor, text, offset);
|
|
107
|
-
};
|
|
108
|
-
const getLinkMarksForUri = (edytor, uri) => edytor.marks.has('link') ? { link: { href: uri } } : undefined;
|
|
109
|
-
/** Plain text with `marks` (or a URI, as a link) as a flow (`flow.shape`). */
|
|
110
|
-
const textFlow = (edytor, dataTransfer, fallback = '', marks) => {
|
|
111
|
-
const uri = firstUriListEntry(dataTransfer?.getData('text/uri-list'));
|
|
112
|
-
const plain = dataTransfer?.getData('text/plain') || '';
|
|
113
|
-
const value = plain || uri || fallback;
|
|
114
|
-
return value ? flowOfText(value, !plain && uri ? getLinkMarksForUri(edytor, uri) : marks) : null;
|
|
115
|
-
};
|
|
116
|
-
const insertFromPaste = async (edytor, snapshot) => {
|
|
117
|
-
const flow = textFlow(edytor, snapshot.dataTransfer, '', insertionMarks(edytor, snapshot));
|
|
118
|
-
if (!flow)
|
|
119
|
-
return;
|
|
120
|
-
// The paste consumes the caret's pending marks, as typing does.
|
|
121
|
-
if (edytor.selection.pending)
|
|
122
|
-
edytor.selection.stage(undefined);
|
|
123
|
-
await pasteFlow(edytor, flow, { selection: snapshot });
|
|
93
|
+
if (text.stringContent[offset] === '\n')
|
|
94
|
+
return caretAt(edytor, text, offset + (before ? 0 : 1));
|
|
95
|
+
const line = before
|
|
96
|
+
? (block.lastText ?? text)
|
|
97
|
+
: block.parent?.children[block.index + 1]?.firstText;
|
|
98
|
+
caretAt(edytor, line, before ? (line?.length ?? 0) : 0);
|
|
124
99
|
};
|
|
125
|
-
const
|
|
100
|
+
const runPastePlugins = (edytor, dataTransfer, at) => {
|
|
126
101
|
const event = { clipboardData: dataTransfer };
|
|
127
|
-
for (const plugin of edytor.plugins)
|
|
128
|
-
vetoable((prevent) => plugin.onPaste?.({ prevent, e: event }));
|
|
129
|
-
}
|
|
102
|
+
for (const plugin of edytor.plugins)
|
|
103
|
+
vetoable((prevent) => plugin.onPaste?.({ prevent, e: event, ...(at && { at }) }));
|
|
130
104
|
};
|
|
131
|
-
/** The drop point the browser reported
|
|
132
|
-
const dropPoint = (edytor,
|
|
133
|
-
const range = snapshot.declared;
|
|
105
|
+
/** The drop point the browser reported: its text and offset (`null`: not in a text). */
|
|
106
|
+
const dropPoint = (edytor, { declared: range }) => {
|
|
134
107
|
const text = range && edytor.node?.contains(range.startContainer)
|
|
135
108
|
? edytor.selection.getTextOfNode(range.startContainer, range.startOffset)
|
|
136
109
|
: null;
|
|
137
|
-
|
|
138
|
-
return null;
|
|
139
|
-
const offset = Math.max(0, Math.min(getYIndex(text, range.startContainer, range.startOffset), text.length));
|
|
140
|
-
return { block: text.parent.id, offset: text.segStart + offset };
|
|
141
|
-
};
|
|
142
|
-
// A drop reported while whole blocks are selected must insert at the drop
|
|
143
|
-
// point — not replace the block selection. The earlier target-range sync is
|
|
144
|
-
// skipped for block selections (the DOM caret sits inside a selected block),
|
|
145
|
-
// so resolve the reported range directly. `undefined`: no such selection.
|
|
146
|
-
const resolveDropPoint = (edytor, snapshot) => {
|
|
147
|
-
const { selection, node } = edytor;
|
|
148
|
-
if (selection.selectedBlocks.size === 0 && selection.selectedInlineBlock.size === 0)
|
|
149
|
-
return;
|
|
150
|
-
const range = snapshot.declared;
|
|
151
|
-
const text = range && node?.contains(range.startContainer)
|
|
152
|
-
? selection.getTextOfNode(range.startContainer, range.startOffset)
|
|
153
|
-
: null;
|
|
154
|
-
if (!text)
|
|
155
|
-
return null;
|
|
156
|
-
const offset = Math.max(0, Math.min(getYIndex(text, range.startContainer, range.startOffset), text.length));
|
|
157
|
-
selection.setAtTextOffset(text, offset);
|
|
158
|
-
return { text, offset };
|
|
110
|
+
return text && { text, offset: offsetIn(text, range.startContainer, range.startOffset) };
|
|
159
111
|
};
|
|
160
112
|
/**
|
|
161
|
-
*
|
|
113
|
+
* A paste occurrence inserts the plain text (or the URI, as a link) the
|
|
114
|
+
* paste handler left to it. A drop replays the paste pipeline: an embedded Edytor
|
|
162
115
|
* fragment round-trips (cross-editor drags), files and html route through the
|
|
163
116
|
* plugin `onPaste` hook (claimed via `prevent`: the recorded veto aborts
|
|
164
|
-
* this function and is caught by the beforeinput caller),
|
|
165
|
-
*
|
|
166
|
-
*
|
|
167
|
-
*
|
|
117
|
+
* this function and is caught by the beforeinput caller), unclaimed
|
|
118
|
+
* `text/html` is imported, `text/plain` inserts as text and `text/uri-list`
|
|
119
|
+
* as a link when a `link` mark is registered. Unclaimed files insert nothing
|
|
120
|
+
* rather than degrading to file-name text. A paste's text takes the caret's
|
|
121
|
+
* insertion marks and consumes its pending ones, as typing does. A drop over
|
|
122
|
+
* selected blocks or an atom lands at its point (the declared-range sync
|
|
123
|
+
* skips a block selection: the DOM caret sits in a selected block), never
|
|
124
|
+
* over them; the view's own text drag dropped is a move (a copy with Alt) of
|
|
125
|
+
* its range.
|
|
168
126
|
*/
|
|
169
|
-
const
|
|
170
|
-
|
|
127
|
+
const insertPayload = async (edytor, snapshot) => {
|
|
128
|
+
const { selection } = edytor;
|
|
129
|
+
const paste = snapshot.inputType === 'insertFromPaste';
|
|
130
|
+
const point = dropPoint(edytor, snapshot);
|
|
171
131
|
const drag = textDragOf(edytor);
|
|
172
132
|
if (drag?.dropping && snapshot.inputType === 'insertFromDrop') {
|
|
173
133
|
drag.dropping = false;
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
134
|
+
if (point)
|
|
135
|
+
dropText(edytor, drag, {
|
|
136
|
+
block: point.text.parent.id,
|
|
137
|
+
offset: point.text.segStart + point.offset
|
|
138
|
+
});
|
|
177
139
|
return;
|
|
178
140
|
}
|
|
179
|
-
|
|
180
|
-
const
|
|
181
|
-
|
|
182
|
-
if ((dataTransfer.files?.length ?? 0) > 0) {
|
|
183
|
-
// A plugin places the files at the selection: the drop point, never over selected blocks.
|
|
184
|
-
if (resolveDropPoint(edytor, snapshot) !== null)
|
|
185
|
-
runDataTransferPastePlugins(edytor, dataTransfer);
|
|
141
|
+
// `undefined`: no block or atom selection for the drop to land beside.
|
|
142
|
+
const land = () => {
|
|
143
|
+
if (paste || !(selection.selectedBlocks.size || selection.selectedInlineBlock.size))
|
|
186
144
|
return;
|
|
145
|
+
if (point)
|
|
146
|
+
selection.selectText(point.text, point.offset);
|
|
147
|
+
return point;
|
|
148
|
+
};
|
|
149
|
+
const dataTransfer = snapshot.dataTransfer ?? null;
|
|
150
|
+
// A paste occurrence is the plain text its handler left to it (Shift-paste too).
|
|
151
|
+
const fragment = !paste && readEdytorClipboardFragment(dataTransfer);
|
|
152
|
+
if (!paste && !fragment && dataTransfer) {
|
|
153
|
+
// A plugin places the files at the drop indicator's placement, else at the
|
|
154
|
+
// selection: the drop point, never over selected blocks.
|
|
155
|
+
if (dataTransfer.files?.length) {
|
|
156
|
+
if (snapshot.placement)
|
|
157
|
+
return void runPastePlugins(edytor, dataTransfer, snapshot.placement);
|
|
158
|
+
return void (land() !== null && runPastePlugins(edytor, dataTransfer));
|
|
187
159
|
}
|
|
188
|
-
if (dataTransfer.getData('text/html'))
|
|
189
|
-
|
|
190
|
-
}
|
|
160
|
+
if (dataTransfer.getData('text/html'))
|
|
161
|
+
runPastePlugins(edytor, dataTransfer);
|
|
191
162
|
}
|
|
163
|
+
const uri = firstUriListEntry(dataTransfer?.getData('text/uri-list'));
|
|
164
|
+
const plain = dataTransfer?.getData('text/plain') || '';
|
|
165
|
+
const text = plain || uri || snapshot.data || '';
|
|
192
166
|
const flow = fragment
|
|
193
167
|
? flowOfFragment(fragment)
|
|
194
|
-
: (flowOfHtml(edytor, dataTransfer?.getData('text/html'))
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
168
|
+
: (!paste && flowOfHtml(edytor, dataTransfer?.getData('text/html'))) ||
|
|
169
|
+
(text
|
|
170
|
+
? flowOfText(text, !plain && uri
|
|
171
|
+
? edytor.marks.has('link')
|
|
172
|
+
? { link: { href: uri } }
|
|
173
|
+
: undefined
|
|
174
|
+
: paste
|
|
175
|
+
? insertionMarks(edytor, snapshot)
|
|
176
|
+
: undefined)
|
|
177
|
+
: null);
|
|
178
|
+
if (!flow)
|
|
179
|
+
return;
|
|
180
|
+
const at = land();
|
|
181
|
+
if (at === null)
|
|
182
|
+
return;
|
|
183
|
+
if (paste && selection.pending)
|
|
184
|
+
selection.stage(undefined);
|
|
185
|
+
await pasteFlow(edytor, flow, { at, selection: snapshot });
|
|
199
186
|
};
|
|
200
187
|
/**
|
|
201
188
|
* Enter at the end of a block with content and children: a split whose tail
|
|
@@ -203,28 +190,55 @@ const insertFromDataTransfer = async (edytor, snapshot) => {
|
|
|
203
190
|
* to-do is unchecked), any other's with the block's (a heading's level).
|
|
204
191
|
*/
|
|
205
192
|
const liftContent = (block, text) => {
|
|
206
|
-
const {
|
|
207
|
-
const data = continues ?
|
|
208
|
-
const
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
193
|
+
const { edytor } = block;
|
|
194
|
+
const data = block.definition.continues ? freshData(block) : cloneJson(block.data);
|
|
195
|
+
const tail = { type: block.type, data };
|
|
196
|
+
return blockOf(edytor, edytor.splitBlock(block.id, text.segStart + text.length, id('b'), tail));
|
|
197
|
+
};
|
|
198
|
+
/**
|
|
199
|
+
* A split whose children stay with the block (a container's header): the
|
|
200
|
+
* tail becomes the block's first child (`child`) or its next sibling. One
|
|
201
|
+
* plan: the document's split step, placed there, without the move that
|
|
202
|
+
* gives the tail the children.
|
|
203
|
+
*/
|
|
204
|
+
const splitKeepingChildren = (edytor, [id, offset, born, tail], child) => {
|
|
205
|
+
const { facade } = edytor;
|
|
206
|
+
const split = facade.prepare.splitBlock(id, offset, born, tail);
|
|
207
|
+
const step = 'writes' in split ? split.writes[0] : undefined;
|
|
208
|
+
if (step?.op !== 'splitBlock')
|
|
209
|
+
return REFUSED;
|
|
210
|
+
if (!child)
|
|
211
|
+
return facade.compose({ ...split, writes: [step] });
|
|
212
|
+
// The rank of a first child, and the document's answer on placing the kind there.
|
|
213
|
+
const slot = facade.prepare.insertBlocks({ parent: id, index: 0 }, [
|
|
214
|
+
{ id: born, type: tail?.type ?? facade.defaultChild(id) }
|
|
215
|
+
]);
|
|
216
|
+
const first = 'writes' in slot ? slot.writes[0] : undefined;
|
|
217
|
+
if (first?.op !== 'insertBlocks')
|
|
218
|
+
return REFUSED;
|
|
219
|
+
const placed = { ...step, parent: id, rank: first.ranks[0] };
|
|
220
|
+
return facade.compose({ ...split, writes: [placed] });
|
|
213
221
|
};
|
|
214
222
|
/**
|
|
215
223
|
* Enter in the middle of a container's header: the children stay with it.
|
|
216
224
|
* The tail becomes its first child (its default child kind); a closed
|
|
217
|
-
* toggle's goes to a toggle after it instead. One plan
|
|
225
|
+
* toggle's goes to a toggle after it instead. One plan, dispatched as the
|
|
226
|
+
* `splitBlock` it is.
|
|
218
227
|
*/
|
|
219
228
|
const splitHeader = (block, text, index, open) => {
|
|
220
|
-
const edytor = block
|
|
221
|
-
const { presets } = block.definition;
|
|
229
|
+
const { edytor } = block;
|
|
222
230
|
const inside = open !== false;
|
|
223
231
|
const tail = inside
|
|
224
232
|
? { type: edytor.defaultChild(block), data: {} }
|
|
225
|
-
: { type: block.type, data:
|
|
226
|
-
const
|
|
227
|
-
|
|
233
|
+
: { type: block.type, data: freshData(block) };
|
|
234
|
+
const args = [
|
|
235
|
+
block.id,
|
|
236
|
+
text.segStart + index,
|
|
237
|
+
id('b'),
|
|
238
|
+
tail
|
|
239
|
+
];
|
|
240
|
+
const split = (a) => splitKeepingChildren(edytor, a, inside);
|
|
241
|
+
return blockOf(edytor, edytor.dispatcher.plan('splitBlock', args, split, block));
|
|
228
242
|
};
|
|
229
243
|
const insertParagraph = (edytor, snapshot) => {
|
|
230
244
|
if (editSelectedBlocks(edytor))
|
|
@@ -234,23 +248,16 @@ const insertParagraph = (edytor, snapshot) => {
|
|
|
234
248
|
if (cell && edytor.facade.isTableCell(cell.id))
|
|
235
249
|
return insertLineBreak(edytor, snapshot);
|
|
236
250
|
const target = replaceSelectionWithCollapsedTarget(edytor, snapshot);
|
|
237
|
-
if (!target)
|
|
251
|
+
if (!target?.text.parent.parent)
|
|
238
252
|
return;
|
|
239
|
-
}
|
|
240
|
-
edytor.selection.
|
|
241
|
-
const { startText, isCollapsed, yStart } = edytor.selection.state;
|
|
253
|
+
const { text: startText, offset: yStart } = target;
|
|
254
|
+
edytor.selection.selectText(startText, yStart);
|
|
242
255
|
const { isAtEndOfBlock, isAtStartOfBlock } = edytor.selection.projection;
|
|
243
|
-
if (!isCollapsed || !startText?.parent.parent) {
|
|
244
|
-
return;
|
|
245
|
-
}
|
|
246
256
|
// The new sibling's actual parent decides its type.
|
|
247
257
|
const defaultBlock = edytor.defaultChild(startText.parent.parent);
|
|
248
258
|
const current = startText.parent;
|
|
249
|
-
const { continues
|
|
250
|
-
|
|
251
|
-
const sibling = continues
|
|
252
|
-
? { type: current.type, data: { ...(presets?.[0]?.data ?? {}) } }
|
|
253
|
-
: { type: defaultBlock };
|
|
259
|
+
const { continues } = current.definition;
|
|
260
|
+
const sibling = nextLine(current);
|
|
254
261
|
// Enter in the empty last line of a lines island (a code block) holding
|
|
255
262
|
// other lines leaves it: the line goes, and the parent's default kind
|
|
256
263
|
// after the island takes the caret (one step). An empty line elsewhere,
|
|
@@ -263,8 +270,9 @@ const insertParagraph = (edytor, snapshot) => {
|
|
|
263
270
|
current.isEmpty &&
|
|
264
271
|
current.index > 0 &&
|
|
265
272
|
current.index === island.children.length - 1) {
|
|
266
|
-
current.
|
|
267
|
-
const
|
|
273
|
+
edytor.deleteBlock(current.id);
|
|
274
|
+
const line = { type: edytor.defaultChild(island.parent) };
|
|
275
|
+
const after = blockOf(edytor, edytor.insertBlocks(siblingSlot(island), [line]));
|
|
268
276
|
return caretAt(edytor, after?.firstText, 0);
|
|
269
277
|
}
|
|
270
278
|
// Enter in an empty list-like block ends the run (Notion): out one level
|
|
@@ -275,11 +283,12 @@ const insertParagraph = (edytor, snapshot) => {
|
|
|
275
283
|
// then out of the list.
|
|
276
284
|
const item = Boolean(current.list);
|
|
277
285
|
if ((continues || item) && isAtEndOfBlock && isAtStartOfBlock && !current.hasChildren) {
|
|
278
|
-
|
|
286
|
+
const outdents = item || current.parent?.definition.continues;
|
|
287
|
+
if (outdents && edytor.unNestBlock(current.id).status === 'applied')
|
|
279
288
|
return caretAt(edytor, current.firstText, 0);
|
|
280
289
|
if (item)
|
|
281
290
|
return;
|
|
282
|
-
|
|
291
|
+
edytor.setBlock(current.id, { type: defaultBlock, data: {} });
|
|
283
292
|
return caretAt(edytor, current.firstText, 0);
|
|
284
293
|
}
|
|
285
294
|
// A container's header whose body shows (`body.enter`: one with children, an
|
|
@@ -290,9 +299,11 @@ const insertParagraph = (edytor, snapshot) => {
|
|
|
290
299
|
if (isAtEndOfBlock) {
|
|
291
300
|
if (header) {
|
|
292
301
|
const opened = open === false
|
|
293
|
-
?
|
|
294
|
-
:
|
|
295
|
-
|
|
302
|
+
? edytor.insertBlocks(siblingSlot(current), [sibling])
|
|
303
|
+
: edytor.insertBlocks({ parent: current.id, index: 0 }, [
|
|
304
|
+
{ type: edytor.defaultChild(current) }
|
|
305
|
+
]);
|
|
306
|
+
return caretAt(edytor, blockOf(edytor, opened)?.firstText, 0);
|
|
296
307
|
}
|
|
297
308
|
const currentBlock = startText.parent;
|
|
298
309
|
if (currentBlock.hasChildren && currentBlock.hasContent) {
|
|
@@ -300,43 +311,40 @@ const insertParagraph = (edytor, snapshot) => {
|
|
|
300
311
|
// tail keeps the kind and takes the children.
|
|
301
312
|
return caretAt(edytor, liftContent(currentBlock, startText)?.firstText, 0);
|
|
302
313
|
}
|
|
303
|
-
const newBlock =
|
|
314
|
+
const newBlock = blockOf(edytor, edytor.insertBlocks(siblingSlot(currentBlock), [sibling]));
|
|
304
315
|
const text = newBlock?.firstText;
|
|
305
316
|
return caretAt(edytor, text, text?.length ?? 0);
|
|
306
317
|
}
|
|
307
318
|
if (isAtStartOfBlock) {
|
|
308
|
-
startText.parent
|
|
319
|
+
edytor.insertBlocks(siblingSlot(startText.parent, false), [sibling]);
|
|
309
320
|
caretAt(edytor, startText, 0);
|
|
310
321
|
return;
|
|
311
322
|
}
|
|
312
323
|
const newBlock = header
|
|
313
324
|
? splitHeader(current, startText, yStart, open)
|
|
314
|
-
:
|
|
325
|
+
: blockOf(edytor, edytor.splitBlock(current.id, startText.segStart + yStart, id('b'), sibling));
|
|
315
326
|
caretAt(edytor, newBlock?.firstText, 0);
|
|
316
327
|
};
|
|
317
328
|
/** The model command for a `beforeinput`, run as one user command (undo policy, prevention scope). */
|
|
318
|
-
export const runBeforeInputCommand = (edytor, snapshot) => edytor.dispatcher.run(snapshot.inputType, () =>
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
const beforeInputCommand = (edytor, snapshot) => {
|
|
322
|
-
const type = snapshot.inputType;
|
|
323
|
-
switch (kindOf(type)) {
|
|
329
|
+
export const runBeforeInputCommand = (edytor, snapshot) => edytor.dispatcher.run(snapshot.inputType, () => {
|
|
330
|
+
const { inputType, data } = snapshot;
|
|
331
|
+
switch (kindOf(inputType)) {
|
|
324
332
|
case 'text':
|
|
325
333
|
return insertText(edytor, snapshot);
|
|
326
334
|
case 'delete':
|
|
327
335
|
return runBeforeInputDeleteCommand(edytor, snapshot);
|
|
328
336
|
case 'break':
|
|
329
|
-
return
|
|
337
|
+
return inputType === 'insertParagraph'
|
|
330
338
|
? insertParagraph(edytor, snapshot)
|
|
331
339
|
: insertLineBreak(edytor, snapshot);
|
|
332
340
|
case 'payload':
|
|
333
|
-
return
|
|
334
|
-
? insertFromPaste(edytor, snapshot)
|
|
335
|
-
: insertFromDataTransfer(edytor, snapshot);
|
|
341
|
+
return insertPayload(edytor, snapshot);
|
|
336
342
|
case 'composition':
|
|
337
|
-
if (
|
|
338
|
-
return edytor.composition.update(
|
|
339
|
-
if (
|
|
340
|
-
return edytor.composition.commit(
|
|
343
|
+
if (inputType === 'insertCompositionText')
|
|
344
|
+
return edytor.composition.update(data ?? '', snapshot);
|
|
345
|
+
if (inputType === 'insertFromComposition')
|
|
346
|
+
return edytor.composition.commit(data ?? '');
|
|
341
347
|
}
|
|
342
|
-
};
|
|
348
|
+
});
|
|
349
|
+
/** An editing intent at the current selection (a key binding's command): no event to fabricate. */
|
|
350
|
+
export const runIntent = (edytor, inputType) => runBeforeInputCommand(edytor, intentSnapshot(edytor, inputType));
|
|
@@ -1,3 +1,22 @@
|
|
|
1
1
|
import type { Edytor } from '../edytor.svelte.js';
|
|
2
|
+
import { Text } from '../text/text.svelte.js';
|
|
2
3
|
import { type Attempt } from '../session/attempt.js';
|
|
3
|
-
|
|
4
|
+
/**
|
|
5
|
+
* Delete at the caret's text edge, one character inside it: the inline
|
|
6
|
+
* atom beside the edge, else the character, the caret staying at its side.
|
|
7
|
+
*/
|
|
8
|
+
export declare const deleteInText: (edytor: Edytor, text: Text, yStart: number, back: boolean, atEdge: boolean) => void;
|
|
9
|
+
/**
|
|
10
|
+
* The model command of a delete intent. A block selection: every delete key
|
|
11
|
+
* (a word or line chord too) deletes the blocks as Backspace does —
|
|
12
|
+
* `onDeleteSelectedBlocks` first, children promoted (a drag or composition
|
|
13
|
+
* fragment is not a key). A range: the document's range deletion (a forward
|
|
14
|
+
* one needs its text). A collapsed caret: the intent's unit (`del.unit.*`),
|
|
15
|
+
* whose extent the model owns — a character; a word run from the caret's own
|
|
16
|
+
* text, the caret's line to either side, or the whole block, deleted as one
|
|
17
|
+
* range, the caret at its start; a cut, drag or composition fragment deletes
|
|
18
|
+
* nothing. A unit with nothing of the caret's own text in its direction
|
|
19
|
+
* (next to an inline atom, at the block's edge) is the neighbour, deleted
|
|
20
|
+
* like a character (atom, merge, unnest).
|
|
21
|
+
*/
|
|
22
|
+
export declare const runBeforeInputDeleteCommand: (edytor: Edytor, snapshot: Attempt) => void | Text | null;
|