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
package/dist/surface/overlay.js
CHANGED
|
@@ -18,10 +18,9 @@ import { mount, unmount } from 'svelte';
|
|
|
18
18
|
* `content-visibility: auto` skips it off screen, or it is not
|
|
19
19
|
* displayed. Its geometry is not computed — reading it would force a layout
|
|
20
20
|
* of that subtree, every frame a measure asks — so measures read its nearest
|
|
21
|
-
* rendered ancestor instead (`checkVisibility
|
|
22
|
-
* node counts as rendered).
|
|
21
|
+
* rendered ancestor instead (`checkVisibility`).
|
|
23
22
|
*/
|
|
24
|
-
export const renderSkipped = (node) => node.checkVisibility
|
|
23
|
+
export const renderSkipped = (node) => !node.checkVisibility({ contentVisibilityAuto: true });
|
|
25
24
|
/** `node`, or its nearest ancestor whose rendering the browser does not skip. */
|
|
26
25
|
export const rendered = (node) => {
|
|
27
26
|
let at = node;
|
|
@@ -29,8 +28,73 @@ export const rendered = (node) => {
|
|
|
29
28
|
at = at.parentElement;
|
|
30
29
|
return at;
|
|
31
30
|
};
|
|
32
|
-
/**
|
|
33
|
-
|
|
31
|
+
/**
|
|
32
|
+
* The run of `count` items in vertical order (a parent's children, the
|
|
33
|
+
* top-level blocks) whose boxes (`boxAt`, client px) meet the band from
|
|
34
|
+
* `top` to `bottom`, edges included unless `strict`: two binary searches,
|
|
35
|
+
* O(log n) boxes read, an item without a box counted as above the band.
|
|
36
|
+
* Answers its first index and the index after its last.
|
|
37
|
+
*/
|
|
38
|
+
export const bandRun = (count, boxAt, top, bottom, strict = false) => {
|
|
39
|
+
const search = (past, lo = 0) => {
|
|
40
|
+
let hi = count;
|
|
41
|
+
while (lo < hi) {
|
|
42
|
+
const mid = (lo + hi) >> 1;
|
|
43
|
+
const box = boxAt(mid);
|
|
44
|
+
if (!box || past(box))
|
|
45
|
+
lo = mid + 1;
|
|
46
|
+
else
|
|
47
|
+
hi = mid;
|
|
48
|
+
}
|
|
49
|
+
return lo;
|
|
50
|
+
};
|
|
51
|
+
const first = search((box) => (strict ? box.bottom <= top : box.bottom < top));
|
|
52
|
+
return [first, search((box) => (strict ? box.top < bottom : box.top <= bottom), first)];
|
|
53
|
+
};
|
|
54
|
+
/** `element`'s box relative to the layer (`origin`), `null` when it is not in the page. */
|
|
55
|
+
export const layerBox = (element, origin) => {
|
|
56
|
+
const rect = element?.isConnected ? element.getBoundingClientRect() : null;
|
|
57
|
+
return (rect && {
|
|
58
|
+
x: rect.left - origin.left,
|
|
59
|
+
y: rect.top - origin.top,
|
|
60
|
+
width: rect.width,
|
|
61
|
+
height: rect.height
|
|
62
|
+
});
|
|
63
|
+
};
|
|
64
|
+
/** Whether two measures hold the same values (`a`'s): a state is written only when one moved. */
|
|
65
|
+
export const sameValues = (a, b) => a === b ||
|
|
66
|
+
(a !== null &&
|
|
67
|
+
b !== null &&
|
|
68
|
+
Object.keys(a).every((key) => a[key] === b[key]));
|
|
69
|
+
/** A mounted host whose chrome places itself layer-relative: pinned at the layer's origin. */
|
|
70
|
+
export const pin = (host) => Object.assign(host.style, { position: 'absolute', left: '0px', top: '0px' });
|
|
71
|
+
/**
|
|
72
|
+
* A popup's place near `rect` (client px), 8px inside the viewport: `gap`
|
|
73
|
+
* below it, above it when there is no room below (`above`: above first,
|
|
74
|
+
* below when there is no room above), its left edge at `rect`'s or
|
|
75
|
+
* centered on it (`center`). Measured now from `box` (the host's first
|
|
76
|
+
* element by default; `fallback` before it has a size), written by the
|
|
77
|
+
* answer (the overlay's read-then-write pass).
|
|
78
|
+
*/
|
|
79
|
+
export const placeNear = (host, rect, fallback, { gap = 8, above = false, center = false, box = host.firstElementChild } = {}) => {
|
|
80
|
+
const view = host.ownerDocument.defaultView;
|
|
81
|
+
if (!view)
|
|
82
|
+
return;
|
|
83
|
+
const size = box?.getBoundingClientRect();
|
|
84
|
+
const width = size?.width || fallback[0];
|
|
85
|
+
const height = size?.height || fallback[1];
|
|
86
|
+
const x = center ? rect.left + rect.width / 2 - width / 2 : rect.left;
|
|
87
|
+
const [below, up] = [rect.bottom + gap, rect.top - gap - height];
|
|
88
|
+
const y = above
|
|
89
|
+
? up >= 8
|
|
90
|
+
? up
|
|
91
|
+
: below
|
|
92
|
+
: Math.max(8, below + height < view.innerHeight ? below : up);
|
|
93
|
+
const left = `${Math.max(8, Math.min(x, view.innerWidth - width - 8))}px`;
|
|
94
|
+
return () => Object.assign(host.style, { left, top: `${y}px` });
|
|
95
|
+
};
|
|
96
|
+
/** The band around the viewport (`near`) whose blocks' resizes are watched, in screens above and below. */
|
|
97
|
+
const NEAR_SCREENS = 1;
|
|
34
98
|
export class Overlay {
|
|
35
99
|
/** The layer: absolutely positioned at its static place right after the host. */
|
|
36
100
|
layer = null;
|
|
@@ -48,7 +112,7 @@ export class Overlay {
|
|
|
48
112
|
* font or a stylesheet that loads, a kind's markup drawn later (KaTeX, an
|
|
49
113
|
* image), a host whose height its page fixes — moves the blocks under the
|
|
50
114
|
* chrome. Watched while it is a top-level block near the viewport
|
|
51
|
-
* (
|
|
115
|
+
* (`near`): a nested block's resize resizes its top-level block, and a
|
|
52
116
|
* block farther away moves no chrome in view (one above it scrolls the
|
|
53
117
|
* page, by scroll anchoring, or resizes the host). Answers the release.
|
|
54
118
|
*/
|
|
@@ -62,8 +126,15 @@ export class Overlay {
|
|
|
62
126
|
};
|
|
63
127
|
};
|
|
64
128
|
/**
|
|
65
|
-
*
|
|
66
|
-
*
|
|
129
|
+
* The host's children within `NEAR_SCREENS` of the viewport, above or
|
|
130
|
+
* below, as this frame measured them (before any measure runs): the
|
|
131
|
+
* chrome that lives only near the viewport reads it (the block handles).
|
|
132
|
+
* @internal
|
|
133
|
+
*/
|
|
134
|
+
near = [];
|
|
135
|
+
/**
|
|
136
|
+
* Measure the near band (`near`) and watch the observed top-level blocks
|
|
137
|
+
* in it: a binary search over the host's children (vertical order),
|
|
67
138
|
* O(log n) boxes a frame where watching every block made each frame's
|
|
68
139
|
* resize check cost the whole page.
|
|
69
140
|
*/
|
|
@@ -71,27 +142,15 @@ export class Overlay {
|
|
|
71
142
|
const host = this.#host;
|
|
72
143
|
const resize = this.#resize;
|
|
73
144
|
const view = host?.ownerDocument.defaultView;
|
|
74
|
-
if (!host || !
|
|
145
|
+
if (!host || !view)
|
|
75
146
|
return;
|
|
76
147
|
const kids = host.children;
|
|
77
148
|
const screen = view.innerHeight;
|
|
78
|
-
const
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
lo = mid + 1;
|
|
84
|
-
else
|
|
85
|
-
hi = mid;
|
|
86
|
-
}
|
|
87
|
-
return lo;
|
|
88
|
-
};
|
|
89
|
-
const first = search((rect) => rect.bottom < -WATCHED_SCREENS * screen);
|
|
90
|
-
const last = search((rect) => rect.top <= (1 + WATCHED_SCREENS) * screen);
|
|
91
|
-
const next = new Set();
|
|
92
|
-
for (let i = first; i < last; i++)
|
|
93
|
-
if (this.#observed.has(kids[i]))
|
|
94
|
-
next.add(kids[i]);
|
|
149
|
+
const [first, last] = bandRun(kids.length, (index) => kids[index].getBoundingClientRect(), -NEAR_SCREENS * screen, (1 + NEAR_SCREENS) * screen);
|
|
150
|
+
this.near = Array.from({ length: last - first }, (_, index) => kids[first + index]);
|
|
151
|
+
if (!resize)
|
|
152
|
+
return;
|
|
153
|
+
const next = new Set(this.near.filter((node) => this.#observed.has(node)));
|
|
95
154
|
for (const node of this.#watched)
|
|
96
155
|
if (!next.has(node)) {
|
|
97
156
|
this.#watched.delete(node);
|
|
@@ -114,12 +173,7 @@ export class Overlay {
|
|
|
114
173
|
const view = this.layer?.ownerDocument.defaultView;
|
|
115
174
|
if (this.#frame !== null || !view)
|
|
116
175
|
return;
|
|
117
|
-
|
|
118
|
-
this.#frame = view.requestAnimationFrame(this.#run);
|
|
119
|
-
else {
|
|
120
|
-
this.#frame = 0;
|
|
121
|
-
queueMicrotask(this.#run);
|
|
122
|
-
}
|
|
176
|
+
this.#frame = view.requestAnimationFrame(this.#run);
|
|
123
177
|
};
|
|
124
178
|
#run = () => {
|
|
125
179
|
this.#frame = null;
|
|
@@ -162,24 +216,25 @@ export class Overlay {
|
|
|
162
216
|
layer.style.cssText = 'position: absolute; width: 0; height: 0';
|
|
163
217
|
host.after(layer);
|
|
164
218
|
this.layer = layer;
|
|
165
|
-
const resize =
|
|
219
|
+
const resize = new ResizeObserver(this.invalidate);
|
|
166
220
|
this.#resize = resize;
|
|
167
221
|
this.#host = host;
|
|
168
|
-
resize
|
|
222
|
+
resize.observe(host);
|
|
169
223
|
document.addEventListener('scroll', this.invalidate, { capture: true, passive: true });
|
|
170
224
|
view?.addEventListener('resize', this.invalidate);
|
|
171
225
|
this.invalidate();
|
|
172
226
|
return () => {
|
|
173
|
-
resize
|
|
227
|
+
resize.disconnect();
|
|
174
228
|
this.#watched.clear();
|
|
229
|
+
this.near = [];
|
|
175
230
|
if (this.#resize === resize)
|
|
176
231
|
this.#resize = null;
|
|
177
232
|
if (this.#host === host)
|
|
178
233
|
this.#host = null;
|
|
179
234
|
document.removeEventListener('scroll', this.invalidate, { capture: true });
|
|
180
235
|
view?.removeEventListener('resize', this.invalidate);
|
|
181
|
-
if (this.#frame)
|
|
182
|
-
view?.cancelAnimationFrame
|
|
236
|
+
if (this.#frame !== null)
|
|
237
|
+
view?.cancelAnimationFrame(this.#frame);
|
|
183
238
|
this.#frame = null;
|
|
184
239
|
layer.remove();
|
|
185
240
|
if (this.layer === layer)
|
|
@@ -43,6 +43,11 @@ export declare class Pin {
|
|
|
43
43
|
deltas: RenderDelta[];
|
|
44
44
|
empty: boolean;
|
|
45
45
|
} | null;
|
|
46
|
+
/** The render of `segment` of `cell`: pinned while it hosts the IME, else its kind's (`segmentDeltas`). */
|
|
47
|
+
shown: (cell: Cell, segment: Segment, transform: TextTransform | undefined) => {
|
|
48
|
+
deltas: RenderDelta[];
|
|
49
|
+
empty: boolean;
|
|
50
|
+
};
|
|
46
51
|
/** What follows the pinned segment `key` of `block` in its own element (`merge`, `beside`). */
|
|
47
52
|
rest: (block: BlockId, key: string) => RenderDelta[];
|
|
48
53
|
/**
|
|
@@ -78,6 +78,11 @@ export class Pin {
|
|
|
78
78
|
const items = [...head, preview, ...tail, ...merged];
|
|
79
79
|
return { deltas: renderDeltas(items), empty: !textOf(items) };
|
|
80
80
|
};
|
|
81
|
+
/** The render of `segment` of `cell`: pinned while it hosts the IME, else its kind's (`segmentDeltas`). */
|
|
82
|
+
shown = (cell, segment, transform) => this.render(cell.id, segment.key) ?? {
|
|
83
|
+
deltas: segmentDeltas(cell, segment, transform),
|
|
84
|
+
empty: segment.text === ''
|
|
85
|
+
};
|
|
81
86
|
/** What follows the pinned segment `key` of `block` in its own element (`merge`, `beside`). */
|
|
82
87
|
rest = (block, key) => {
|
|
83
88
|
const held = this.#held;
|
|
@@ -11,8 +11,6 @@ export declare const domPointOf: (element: HTMLElement, offset: number) => Point
|
|
|
11
11
|
export declare class Projector {
|
|
12
12
|
#private;
|
|
13
13
|
private edytor;
|
|
14
|
-
/** The observer holds DOM records it has not reconciled yet (set at attach). */
|
|
15
|
-
recordsPending: () => boolean;
|
|
16
14
|
constructor(edytor: Edytor);
|
|
17
15
|
/** Root `$effect.pre`: note the focused element before the flush writes the DOM. */
|
|
18
16
|
pre: () => void;
|
|
@@ -25,16 +23,16 @@ export declare class Projector {
|
|
|
25
23
|
*/
|
|
26
24
|
mounted: (text: Text) => void;
|
|
27
25
|
/**
|
|
28
|
-
* The user-input window closed (
|
|
26
|
+
* The user-input window closed (`#withUserInput`): a pass it held back (a
|
|
29
27
|
* render under the handler that asked for no display, such as a mark
|
|
30
28
|
* removal re-rendering the text under a range) runs now. The flag is no
|
|
31
29
|
* reactive source, so no later flush is owed: without this, the range the
|
|
32
30
|
* render moved (Firefox keeps it where the removed element stood) would be
|
|
33
|
-
* adopted as the gesture's when its `selectionchange` lands.
|
|
31
|
+
* adopted as the gesture's when its `selectionchange` lands. The observer
|
|
32
|
+
* calls it too once it processed DOM records: a display that waits gets a
|
|
33
|
+
* pass.
|
|
34
34
|
*/
|
|
35
35
|
inputHandled: () => void;
|
|
36
|
-
/** The observer processed DOM records: a display that waits gets a pass. */
|
|
37
|
-
recordsChanged: () => void;
|
|
38
36
|
/**
|
|
39
37
|
* Classify a `selectionchange` by comparing the DOM selection with the
|
|
40
38
|
* last display, the render epoch and the gesture serial:
|
|
@@ -39,9 +39,9 @@
|
|
|
39
39
|
import { untrack } from 'svelte';
|
|
40
40
|
import { clearDomSelection, createDomRange, getActiveElement, getDomSelection, getDomSelectionSnapshot, scrollCaretIntoView } from '../selection/domSelection.js';
|
|
41
41
|
import { getMarkEdgeSide, getYIndex, isTextBoundSelectionPoint } from '../selection/selection.utils.js';
|
|
42
|
-
import { project } from '../session/selection.js';
|
|
42
|
+
import { project, sameEnds } from '../session/selection.js';
|
|
43
43
|
import { isAndroidChromeBrowser } from '../events/events.utils.js';
|
|
44
|
-
import { isKindControl,
|
|
44
|
+
import { isKindControl, isOwnPoint } from '../events/nativeInteractiveControl.js';
|
|
45
45
|
/**
|
|
46
46
|
* Named rule: Android Chrome mutates the DOM after a
|
|
47
47
|
* canceled `deleteContentBackward` and reports the caret one position right
|
|
@@ -74,8 +74,6 @@ export class Projector {
|
|
|
74
74
|
edytor;
|
|
75
75
|
/** What the last display left in the DOM, and the selection epoch it showed. */
|
|
76
76
|
#displayed = null;
|
|
77
|
-
/** The observer holds DOM records it has not reconciled yet (set at attach). */
|
|
78
|
-
recordsPending = () => false;
|
|
79
77
|
/** The (request, render, remount) key the last completed pass answered. */
|
|
80
78
|
#done = '';
|
|
81
79
|
#request = -1;
|
|
@@ -137,12 +135,8 @@ export class Projector {
|
|
|
137
135
|
// have mounted in this flush); otherwise an answered key displays nothing.
|
|
138
136
|
if (key === this.#done && (selection.value.kind === 'none' || selection.projection.start)) {
|
|
139
137
|
// Nothing to display; a DOM that still shows the value is observed.
|
|
140
|
-
const { startText, yStart, endText, yEnd, isReversed } = selection.state;
|
|
141
138
|
const dom = edytor.node && getDomSelection(edytor.node);
|
|
142
|
-
if (dom &&
|
|
143
|
-
startText &&
|
|
144
|
-
endText &&
|
|
145
|
-
this.#shows(dom, startText, yStart, endText, yEnd, isReversed))
|
|
139
|
+
if (dom && this.#shows(dom, selection.textRange(), selection.projection.isReversed))
|
|
146
140
|
this.#seen = this.#flushes;
|
|
147
141
|
return;
|
|
148
142
|
}
|
|
@@ -161,7 +155,7 @@ export class Projector {
|
|
|
161
155
|
*/
|
|
162
156
|
mounted = (text) => {
|
|
163
157
|
const { selection } = this.edytor;
|
|
164
|
-
const { startText, endText } = selection.
|
|
158
|
+
const { startText, endText } = selection.textRange();
|
|
165
159
|
const dead = selection.value.kind !== 'none' && !selection.projection.start;
|
|
166
160
|
if (this.#pending || dead || text === startText || text === endText)
|
|
167
161
|
this.edytor.surface.update();
|
|
@@ -184,22 +178,19 @@ export class Projector {
|
|
|
184
178
|
return true;
|
|
185
179
|
};
|
|
186
180
|
/**
|
|
187
|
-
* The user-input window closed (
|
|
181
|
+
* The user-input window closed (`#withUserInput`): a pass it held back (a
|
|
188
182
|
* render under the handler that asked for no display, such as a mark
|
|
189
183
|
* removal re-rendering the text under a range) runs now. The flag is no
|
|
190
184
|
* reactive source, so no later flush is owed: without this, the range the
|
|
191
185
|
* render moved (Firefox keeps it where the removed element stood) would be
|
|
192
|
-
* adopted as the gesture's when its `selectionchange` lands.
|
|
186
|
+
* adopted as the gesture's when its `selectionchange` lands. The observer
|
|
187
|
+
* calls it too once it processed DOM records: a display that waits gets a
|
|
188
|
+
* pass.
|
|
193
189
|
*/
|
|
194
190
|
inputHandled = () => {
|
|
195
191
|
if (this.#pending)
|
|
196
192
|
this.edytor.surface.update();
|
|
197
193
|
};
|
|
198
|
-
/** The observer processed DOM records: a display that waits gets a pass. */
|
|
199
|
-
recordsChanged = () => {
|
|
200
|
-
if (this.#pending)
|
|
201
|
-
this.edytor.surface.update();
|
|
202
|
-
};
|
|
203
194
|
/**
|
|
204
195
|
* Classify a `selectionchange` by comparing the DOM selection with the
|
|
205
196
|
* last display, the render epoch and the gesture serial:
|
|
@@ -219,8 +210,8 @@ export class Projector {
|
|
|
219
210
|
const { selection } = edytor;
|
|
220
211
|
const node = edytor.node;
|
|
221
212
|
const anchor = dom?.anchorNode;
|
|
222
|
-
// Not ours to classify: outside the editor, or in a
|
|
223
|
-
if (!dom || !
|
|
213
|
+
// Not ours to classify: outside the editor, or in a kind's own control.
|
|
214
|
+
if (!dom || !isOwnPoint(node, anchor))
|
|
224
215
|
return 'foreign';
|
|
225
216
|
if (this.#echoes(dom))
|
|
226
217
|
return 'echo';
|
|
@@ -242,7 +233,7 @@ export class Projector {
|
|
|
242
233
|
return 'drift';
|
|
243
234
|
if (edytor.intentSerial !== this.#serial || selection.dragging)
|
|
244
235
|
return this.#observed('intent');
|
|
245
|
-
return this.#seen !== this.#flushes || this.
|
|
236
|
+
return this.#seen !== this.#flushes || this.edytor.surface.pending()
|
|
246
237
|
? 'drift'
|
|
247
238
|
: this.#observed('foreign');
|
|
248
239
|
};
|
|
@@ -303,13 +294,11 @@ export class Projector {
|
|
|
303
294
|
samePoint(displayed.anchor, dom.anchorNode, dom.anchorOffset) &&
|
|
304
295
|
samePoint(displayed.focus, dom.focusNode, dom.focusOffset))
|
|
305
296
|
return true;
|
|
306
|
-
const {
|
|
307
|
-
return
|
|
308
|
-
startText &&
|
|
309
|
-
endText &&
|
|
297
|
+
const { isReversed, isCollapsed } = selection.projection;
|
|
298
|
+
return (!isCollapsed &&
|
|
310
299
|
isTextBoundSelectionPoint(dom.anchorNode) &&
|
|
311
300
|
isTextBoundSelectionPoint(dom.focusNode) &&
|
|
312
|
-
this.#shows(dom,
|
|
301
|
+
this.#shows(dom, selection.textRange(), isReversed));
|
|
313
302
|
};
|
|
314
303
|
/** Evidence for the Android snap-back: a model-owned delete ran (`events/beforeInputDeleteCommands`). */
|
|
315
304
|
deleted = (attempt) => {
|
|
@@ -335,10 +324,10 @@ export class Projector {
|
|
|
335
324
|
!dom.isCollapsed)
|
|
336
325
|
return false;
|
|
337
326
|
const { attempt } = deleted;
|
|
338
|
-
const { startText, yStart
|
|
327
|
+
const { startText, yStart } = edytor.selection.textRange();
|
|
339
328
|
return Boolean(attempt.isCollapsed &&
|
|
340
329
|
attempt.yStart === 0 &&
|
|
341
|
-
isCollapsed &&
|
|
330
|
+
edytor.selection.projection.isCollapsed &&
|
|
342
331
|
startText &&
|
|
343
332
|
startText !== attempt.startText &&
|
|
344
333
|
edytor.selection.getTextOfNode(dom.anchorNode) === startText &&
|
|
@@ -370,47 +359,32 @@ export class Projector {
|
|
|
370
359
|
if (!requested && (selection.dragging || edytor.isHandlingUserInput))
|
|
371
360
|
return false;
|
|
372
361
|
const value = selection.value;
|
|
373
|
-
if (value.kind
|
|
374
|
-
// No selection shows no DOM range: asked for (a history step giving none
|
|
375
|
-
// back, a closing menu, a drift over it), a range inside the editor is
|
|
376
|
-
// cleared, and under the host's focus a caret the browser parks later
|
|
377
|
-
// is its own (`placed`), whatever key comes before it.
|
|
378
|
-
const active = getActiveElement(node);
|
|
379
|
-
if (requested && active && node.contains(active))
|
|
380
|
-
this.#parking = true;
|
|
381
|
-
const dom = getDomSelection(node);
|
|
382
|
-
if (requested && dom?.anchorNode && node.contains(dom.anchorNode) && this.#ours(requested)) {
|
|
383
|
-
clearDomSelection(node);
|
|
384
|
-
this.#displayed = null;
|
|
385
|
-
this.#serial = edytor.intentSerial;
|
|
386
|
-
}
|
|
387
|
-
return true;
|
|
388
|
-
}
|
|
389
|
-
if (!selection.projection.start) {
|
|
362
|
+
if (value.kind !== 'none' && !selection.projection.start) {
|
|
390
363
|
// A value that no longer resolves: the repair lands it (a live
|
|
391
364
|
// destination may exist only once this flush mounted it).
|
|
392
365
|
selection.restoreDeadSelectionEndpoints();
|
|
393
366
|
return false;
|
|
394
367
|
}
|
|
395
368
|
const dom = getDomSelection(node);
|
|
396
|
-
if (!dom)
|
|
397
|
-
return true;
|
|
398
369
|
if (value.kind !== 'text') {
|
|
399
|
-
//
|
|
400
|
-
//
|
|
401
|
-
//
|
|
402
|
-
//
|
|
403
|
-
//
|
|
404
|
-
// (
|
|
405
|
-
//
|
|
406
|
-
//
|
|
407
|
-
//
|
|
408
|
-
//
|
|
370
|
+
// None, a block set or an atom shows no DOM range. No selection asked
|
|
371
|
+
// for (a history step giving none back, a closing menu, a drift over
|
|
372
|
+
// it) clears a range inside the editor; a block set or an atom is
|
|
373
|
+
// displayed even when the DOM already holds no range (the atom's own
|
|
374
|
+
// pointerdown cleared it): a caret the browser parks later without a
|
|
375
|
+
// gesture (focusing the host) is then drift, not intent; the one it
|
|
376
|
+
// parks for the atom's press is drift through its release (`parked`).
|
|
377
|
+
// Under the host's focus, none or an atom asked for (a Shift+arrow
|
|
378
|
+
// onto it: Chromium parks a caret at the host's start at the next key,
|
|
379
|
+
// whose `selectionchange` can land after that key counted as a
|
|
380
|
+
// gesture) leaves any caret the browser parks later its own
|
|
381
|
+
// (`#parking`, `placed`), whatever key comes before it.
|
|
409
382
|
const active = getActiveElement(node);
|
|
410
|
-
if (value.kind
|
|
383
|
+
if (requested && value.kind !== 'blocks' && active && node.contains(active))
|
|
411
384
|
this.#parking = true;
|
|
412
|
-
const inside =
|
|
413
|
-
|
|
385
|
+
const inside = !!dom?.anchorNode && node.contains(dom.anchorNode);
|
|
386
|
+
const clears = value.kind === 'none' ? requested && inside : inside || dom?.rangeCount === 0;
|
|
387
|
+
if (clears && this.#ours(requested)) {
|
|
414
388
|
if (inside)
|
|
415
389
|
clearDomSelection(node);
|
|
416
390
|
this.#displayed = null;
|
|
@@ -418,7 +392,11 @@ export class Projector {
|
|
|
418
392
|
}
|
|
419
393
|
return true;
|
|
420
394
|
}
|
|
421
|
-
|
|
395
|
+
if (!dom)
|
|
396
|
+
return true;
|
|
397
|
+
const range = selection.textRange();
|
|
398
|
+
const { startText, yStart, endText, yEnd } = range;
|
|
399
|
+
const { isCollapsed, isReversed } = selection.projection;
|
|
422
400
|
if (!startText?.node?.isConnected || !endText?.node?.isConnected)
|
|
423
401
|
return false;
|
|
424
402
|
const start = domPointOf(startText.node, yStart);
|
|
@@ -427,7 +405,7 @@ export class Projector {
|
|
|
427
405
|
? { anchor: end, focus: start }
|
|
428
406
|
: { anchor: start, focus: end };
|
|
429
407
|
// Already shown: an observation, whoever holds focus.
|
|
430
|
-
if (!this.#shows(dom,
|
|
408
|
+
if (!this.#shows(dom, range, isReversed)) {
|
|
431
409
|
if (!this.#ours(requested))
|
|
432
410
|
return true;
|
|
433
411
|
const active = getActiveElement(node);
|
|
@@ -470,8 +448,8 @@ export class Projector {
|
|
|
470
448
|
this.#observed('composition');
|
|
471
449
|
};
|
|
472
450
|
/** The live DOM selection already shows these endpoints (model coordinates, direction). */
|
|
473
|
-
#shows = (dom, startText, yStart, endText, yEnd, isReversed) => {
|
|
474
|
-
if (!dom.anchorNode || !dom.focusNode || dom.rangeCount > 1)
|
|
451
|
+
#shows = (dom, { startText, yStart, endText, yEnd }, isReversed) => {
|
|
452
|
+
if (!startText || !endText || !dom.anchorNode || !dom.focusNode || dom.rangeCount > 1)
|
|
475
453
|
return false;
|
|
476
454
|
const collapsed = startText === endText && yStart === yEnd;
|
|
477
455
|
const [first, last] = isReversed
|
|
@@ -571,12 +549,7 @@ export class Projector {
|
|
|
571
549
|
const value = edytor.selection.mint(snapshot);
|
|
572
550
|
if (!value)
|
|
573
551
|
return;
|
|
574
|
-
|
|
575
|
-
const current = edytor.selection.projection;
|
|
576
|
-
if (minted.start?.block === current.start?.block &&
|
|
577
|
-
minted.start?.offset === current.start?.offset &&
|
|
578
|
-
minted.end?.block === current.end?.block &&
|
|
579
|
-
minted.end?.offset === current.end?.offset)
|
|
552
|
+
if (sameEnds(project(value, edytor.facade), edytor.selection.projection))
|
|
580
553
|
return;
|
|
581
554
|
this.#minted = { value, transaction };
|
|
582
555
|
};
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import type { Edytor } from '../edytor.svelte.js';
|
|
2
2
|
import { type JSONText } from '../utils/json.js';
|
|
3
|
-
import { Block } from '../block/block.svelte.js';
|
|
3
|
+
import type { Block } from '../block/block.svelte.js';
|
|
4
4
|
/**
|
|
5
|
-
* An id-only text handle: the `ordinal`-th text segment
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
* `
|
|
9
|
-
*
|
|
10
|
-
*
|
|
5
|
+
* An id-only, read-only text handle: the `ordinal`-th text segment of block
|
|
6
|
+
* `blockId` — no identity across commits beyond that position. Getters read
|
|
7
|
+
* the document index; writes are the view's operations in block offsets
|
|
8
|
+
* (`edytor.insertText(text.parent.id, text.segStart + offset, …)`). `node`
|
|
9
|
+
* is the element that renders the segment (a Surface fact). A reactive
|
|
10
|
+
* reader of a getter depends on the block's cell, so it re-runs when a
|
|
11
|
+
* commit changes the block's content.
|
|
11
12
|
*/
|
|
12
13
|
export declare class Text {
|
|
13
14
|
#private;
|
|
@@ -39,37 +40,10 @@ export declare class Text {
|
|
|
39
40
|
* the caret is a render the projector displays after (`mounted`).
|
|
40
41
|
*/
|
|
41
42
|
refreshFromModel: () => void;
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
end?: number;
|
|
49
|
-
marks?: Record<string, import("../utils/json.js").SerializableContent | null>;
|
|
50
|
-
}) => void;
|
|
51
|
-
deleteText: (args_0: {
|
|
52
|
-
direction: "BACKWARD" | "FORWARD";
|
|
53
|
-
length: number;
|
|
54
|
-
}) => {
|
|
55
|
-
start: number;
|
|
56
|
-
end: number;
|
|
57
|
-
} | undefined;
|
|
58
|
-
splitText: (args_0: {
|
|
59
|
-
index?: number;
|
|
60
|
-
}) => JSONText[];
|
|
61
|
-
setText: (args_0: {
|
|
62
|
-
value: JSONText[];
|
|
63
|
-
}) => void;
|
|
64
|
-
markText: (args_0: {
|
|
65
|
-
mark: string;
|
|
66
|
-
start?: number;
|
|
67
|
-
end?: number;
|
|
68
|
-
value?: import("../utils/json.js").SerializableContent | null;
|
|
69
|
-
toggle?: boolean;
|
|
70
|
-
}) => void;
|
|
71
|
-
removeMarksFromText: (args_0: {
|
|
72
|
-
start?: number;
|
|
73
|
-
end?: number;
|
|
74
|
-
}) => void;
|
|
43
|
+
/**
|
|
44
|
+
* The runs of `[start, end)` (segment offsets), each with a copy of its
|
|
45
|
+
* marks: the MODEL runs (`value`), never the rendered ones — a kind's
|
|
46
|
+
* `transformText` decorations (code tokens) are no marks of the text.
|
|
47
|
+
*/
|
|
48
|
+
getMarksAtRange: (start: number, end: number) => JSONText[];
|
|
75
49
|
}
|