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,6 +1,6 @@
|
|
|
1
1
|
import type { EdytorSelection } from './selection.svelte.js';
|
|
2
2
|
import type { Text } from '../text/text.svelte.js';
|
|
3
|
-
import type {
|
|
3
|
+
import type { Edytor } from '../edytor.svelte.js';
|
|
4
4
|
import type { DomSelectionSnapshot } from './domSelection.js';
|
|
5
5
|
import type { EdgeSide } from '../session/editing/text.js';
|
|
6
6
|
export declare const SYNTHETIC_TEXT_OVERLAY_SELECTOR = "[data-edytor-text-suggestion]";
|
|
@@ -17,31 +17,54 @@ export declare const isInsideTrailingNewlineMarker: (node: Node) => boolean;
|
|
|
17
17
|
* extending horizontally.
|
|
18
18
|
*/
|
|
19
19
|
export declare const isTextBoundSelectionPoint: (node: Node | null) => boolean;
|
|
20
|
+
/**
|
|
21
|
+
* The text a DOM point is in: its text element; in a text suggestion's
|
|
22
|
+
* overlay, its block's last text; at an element boundary (with `offset`),
|
|
23
|
+
* the text beside it; on a stray node or in a block suggestion's preview,
|
|
24
|
+
* the nearest text at that boundary.
|
|
25
|
+
*/
|
|
20
26
|
export declare function getTextOfNode(this: EdytorSelection, node: Node | null, offset?: number): Text | null;
|
|
21
|
-
|
|
22
|
-
export declare
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
endText: Text | null;
|
|
26
|
-
inlineBlock: InlineBlock | null;
|
|
27
|
-
};
|
|
27
|
+
/** The inline atom at `node`: around it, or the first one inside it. */
|
|
28
|
+
export declare const getInlineBlockOfNode: (edytor: Edytor, node: Node | null) => import("../index.js").InlineBlock | null;
|
|
29
|
+
/** The one inline atom a non-collapsed range covers, touching no text. */
|
|
30
|
+
export declare const getInlineBlockInSelectedRange: (edytor: Edytor, range: Range | undefined) => import("../index.js").InlineBlock | null;
|
|
28
31
|
/**
|
|
29
32
|
* The edge side of a collapsed DOM point at `offset` of `text`: inside
|
|
30
33
|
* when every mark element rendering the character before it contains the
|
|
31
34
|
* point, outside when one does not; `undefined` when that character has none.
|
|
32
35
|
*/
|
|
33
36
|
export declare const getMarkEdgeSide: (text: Text, node: Node | null, offset: number) => EdgeSide | undefined;
|
|
34
|
-
|
|
37
|
+
/**
|
|
38
|
+
* The offset the DOM point `(node, offset)` stands for in the rendered text
|
|
39
|
+
* `text` as the DOM holds it: its trailing newline's marker reads the end;
|
|
40
|
+
* no model rule (the DOM may be ahead of the model: a native insertion read
|
|
41
|
+
* before its adoption).
|
|
42
|
+
*/
|
|
43
|
+
export declare const domOffsetIn: (text: Text, node: Node, offset: number) => number;
|
|
44
|
+
/**
|
|
45
|
+
* The one DOM point → text offset mapper ({@link domOffsetIn} with the
|
|
46
|
+
* model's rules; `domPointOf` is its inverse): a point outside the text
|
|
47
|
+
* element beside it (an element boundary, past an inline atom) reads its
|
|
48
|
+
* edge, and an empty text's filler reads 0.
|
|
49
|
+
*/
|
|
50
|
+
export declare const getYIndex: (text: Text | null, node: Node | null, offset: number) => number;
|
|
51
|
+
/** {@link getYIndex} within the text's length (a caret the model can hold). */
|
|
52
|
+
export declare const offsetIn: (text: Text, node: Node | null, offset: number) => number;
|
|
35
53
|
/** The mounted text and display offset a DOM point stands in, or `null` (`edytor.ports.surface.pointAt`). */
|
|
36
54
|
export declare function textPointAt(this: EdytorSelection, node: Node, offset: number): {
|
|
37
55
|
text: Text;
|
|
38
56
|
offset: number;
|
|
39
57
|
} | null;
|
|
58
|
+
/** A DOM selection's endpoints in document order, and whether it runs backward. */
|
|
59
|
+
export declare const ordered: (selection: Pick<DomSelectionSnapshot, "anchorNode" | "anchorOffset" | "focusNode" | "focusOffset">, reversed: boolean) => {
|
|
60
|
+
startNode: Node | null;
|
|
61
|
+
start: number;
|
|
62
|
+
endNode: Node | null;
|
|
63
|
+
end: number;
|
|
64
|
+
};
|
|
40
65
|
/**
|
|
41
66
|
* DOM Range offsets use UTF-16 code units and programmatic ranges can land
|
|
42
67
|
* between the two units of a surrogate pair. Browser target ranges disagree
|
|
43
68
|
* about that invalid boundary, so normalize it before it reaches editor state.
|
|
44
69
|
*/
|
|
45
70
|
export declare const normalizeUtf16Boundary: (value: string, offset: number, direction: "backward" | "forward") => number;
|
|
46
|
-
export declare const getRangesFromSelection: (selection: Pick<Selection, "getRangeAt" | "rangeCount"> | DomSelectionSnapshot) => Range[];
|
|
47
|
-
export declare const climbDom: (node: Node | undefined | null, cb: (node: Node) => void | true) => void;
|
|
@@ -3,29 +3,21 @@ const TRAILING_NEWLINE_SELECTOR = '[data-edytor-trailing-newline]';
|
|
|
3
3
|
export const SYNTHETIC_TEXT_OVERLAY_SELECTOR = '[data-edytor-text-suggestion]';
|
|
4
4
|
/** A block suggestion's preview group: view-only, never a selection endpoint (`session/suggestions`). */
|
|
5
5
|
export const SUGGESTION = '[data-edytor-suggestion]';
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
const
|
|
20
|
-
|
|
21
|
-
const textElement = element?.closest('[data-edytor-text]');
|
|
22
|
-
return textElement instanceof HTMLElement ? textElement : null;
|
|
23
|
-
};
|
|
24
|
-
const findSyntheticTextOverlayElement = (node) => {
|
|
25
|
-
const element = getElementFromNode(node);
|
|
26
|
-
const overlay = element?.closest(SYNTHETIC_TEXT_OVERLAY_SELECTOR);
|
|
27
|
-
return overlay instanceof HTMLElement ? overlay : null;
|
|
28
|
-
};
|
|
6
|
+
const TEXT = '[data-edytor-text]';
|
|
7
|
+
const INLINE = '[data-edytor-inline-block]';
|
|
8
|
+
const BLOCK = '[data-edytor-block]';
|
|
9
|
+
export const getElementFromNode = (node) => !node || typeof Element === 'undefined'
|
|
10
|
+
? null
|
|
11
|
+
: node instanceof Element
|
|
12
|
+
? node
|
|
13
|
+
: node.nodeType === Node.TEXT_NODE
|
|
14
|
+
? node.parentElement
|
|
15
|
+
: null;
|
|
16
|
+
/** The element around `node` (itself included) matching `selector`. */
|
|
17
|
+
const closestTo = (node, selector) => getElementFromNode(node)?.closest(selector) ?? null;
|
|
18
|
+
/** `node` is an element matching `selector` or holding one. */
|
|
19
|
+
const holds = (node, selector) => node instanceof Element && (node.matches(selector) || !!node.querySelector(selector));
|
|
20
|
+
export const isInsideTrailingNewlineMarker = (node) => !!closestTo(node, TRAILING_NEWLINE_SELECTOR);
|
|
29
21
|
/**
|
|
30
22
|
* A selection endpoint counts as text-bound when it lives inside a
|
|
31
23
|
* `data-edytor-text` element — either a text node inside it or an
|
|
@@ -34,93 +26,52 @@ const findSyntheticTextOverlayElement = (node) => {
|
|
|
34
26
|
* native selection "node-bound" — the shape engines disagree on when
|
|
35
27
|
* extending horizontally.
|
|
36
28
|
*/
|
|
37
|
-
export const isTextBoundSelectionPoint = (node) =>
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
}
|
|
50
|
-
if (node.nodeType !== Node.TEXT_NODE) {
|
|
51
|
-
return false;
|
|
52
|
-
}
|
|
53
|
-
return (node.textContent ?? '').replace(/[\u200B-\u200D\uFEFF]/g, '').trim() === '';
|
|
54
|
-
};
|
|
55
|
-
const getBoundaryChild = (element, offset, direction) => {
|
|
56
|
-
const step = direction === 'previous' ? -1 : 1;
|
|
57
|
-
let index = direction === 'previous' ? offset - 1 : offset;
|
|
58
|
-
while (index >= 0 && index < element.childNodes.length) {
|
|
59
|
-
const child = element.childNodes[index];
|
|
60
|
-
if (!isIgnoredBoundaryNode(child)) {
|
|
61
|
-
return child;
|
|
62
|
-
}
|
|
63
|
-
index += step;
|
|
64
|
-
}
|
|
29
|
+
export const isTextBoundSelectionPoint = (node) => !!closestTo(node, TEXT);
|
|
30
|
+
/** A node a boundary looks past: a comment, blank text, a suggestion, an element with no editor content. */
|
|
31
|
+
const isIgnoredBoundaryNode = (node) => node.nodeType === Node.COMMENT_NODE ||
|
|
32
|
+
(node instanceof Element
|
|
33
|
+
? node.matches(SUGGESTION) || !holds(node, `${TEXT}, ${INLINE}, ${BLOCK}`)
|
|
34
|
+
: node.nodeType === Node.TEXT_NODE &&
|
|
35
|
+
!(node.textContent ?? '').replace(/[\u200B-\u200D\uFEFF]/g, '').trim());
|
|
36
|
+
/** The first child of `element` from `offset` in `step`'s direction a boundary does not look past. */
|
|
37
|
+
const boundaryChild = (element, offset, step) => {
|
|
38
|
+
for (let i = step < 0 ? offset - 1 : offset; i >= 0 && i < element.childNodes.length; i += step)
|
|
39
|
+
if (!isIgnoredBoundaryNode(element.childNodes[i]))
|
|
40
|
+
return element.childNodes[i];
|
|
65
41
|
return null;
|
|
66
42
|
};
|
|
67
43
|
/** The first or last text element at `node`: itself, or one nested in it. */
|
|
68
|
-
const
|
|
44
|
+
const edgeText = (edge, node) => {
|
|
69
45
|
const element = getElementFromNode(node);
|
|
70
46
|
if (!(element instanceof HTMLElement))
|
|
71
47
|
return null;
|
|
72
48
|
if (element.hasAttribute('data-edytor-text'))
|
|
73
49
|
return element;
|
|
74
|
-
const nested = element.querySelectorAll(
|
|
75
|
-
|
|
76
|
-
return found instanceof HTMLElement ? found : null;
|
|
77
|
-
};
|
|
78
|
-
const containsInlineBlock = (node) => {
|
|
79
|
-
if (!(node instanceof Element)) {
|
|
80
|
-
return false;
|
|
81
|
-
}
|
|
82
|
-
return (node.matches('[data-edytor-inline-block]') ||
|
|
83
|
-
Boolean(node.querySelector('[data-edytor-inline-block]')));
|
|
50
|
+
const nested = element.querySelectorAll(TEXT);
|
|
51
|
+
return nested[edge === 'first' ? 0 : nested.length - 1] ?? null;
|
|
84
52
|
};
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
}
|
|
89
|
-
return node.matches('[data-edytor-block]') || Boolean(node.querySelector('[data-edytor-block]'));
|
|
90
|
-
};
|
|
91
|
-
const getElementBoundary = (node, offset) => {
|
|
92
|
-
if (!(node instanceof Element)) {
|
|
53
|
+
/** The children on either side of an element boundary, and the text elements they end and start with. */
|
|
54
|
+
const boundaryOf = (node, offset) => {
|
|
55
|
+
if (!(node instanceof Element))
|
|
93
56
|
return null;
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
const next = getBoundaryChild(node, offset, 'next');
|
|
97
|
-
return {
|
|
98
|
-
previousText: getEdgeTextElement('last', previous),
|
|
99
|
-
nextText: getEdgeTextElement('first', next),
|
|
100
|
-
previousInline: containsInlineBlock(previous),
|
|
101
|
-
nextInline: containsInlineBlock(next),
|
|
102
|
-
previousBlock: containsBlock(previous),
|
|
103
|
-
nextBlock: containsBlock(next)
|
|
104
|
-
};
|
|
57
|
+
const [previous, next] = [boundaryChild(node, offset, -1), boundaryChild(node, offset, 1)];
|
|
58
|
+
return { previous, next, before: edgeText('last', previous), after: edgeText('first', next) };
|
|
105
59
|
};
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
60
|
+
/** The text element an element boundary stands in: past an atom or a block, the text beside it. */
|
|
61
|
+
const textAtBoundary = (node, offset) => {
|
|
62
|
+
const at = boundaryOf(node, offset);
|
|
63
|
+
if (!at)
|
|
109
64
|
return null;
|
|
110
|
-
}
|
|
111
|
-
if (
|
|
112
|
-
return
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
if (
|
|
118
|
-
return
|
|
119
|
-
|
|
120
|
-
if (boundary.previousBlock && boundary.previousText) {
|
|
121
|
-
return boundary.previousText;
|
|
122
|
-
}
|
|
123
|
-
return boundary.previousText ?? boundary.nextText;
|
|
65
|
+
const { previous, next, before, after } = at;
|
|
66
|
+
if (holds(previous, INLINE) && after)
|
|
67
|
+
return after;
|
|
68
|
+
if (holds(next, INLINE) && before)
|
|
69
|
+
return before;
|
|
70
|
+
if (holds(next, BLOCK) && after)
|
|
71
|
+
return after;
|
|
72
|
+
if (holds(previous, BLOCK) && before)
|
|
73
|
+
return before;
|
|
74
|
+
return before ?? after;
|
|
124
75
|
};
|
|
125
76
|
/**
|
|
126
77
|
* Resolve an endpoint that sits on a stray DOM node — a text node or
|
|
@@ -133,146 +84,71 @@ const getTextElementAtBoundary = (node, offset) => {
|
|
|
133
84
|
* as element boundaries apply (comments, whitespace/zero-width text
|
|
134
85
|
* nodes, and elements without editor content are skipped).
|
|
135
86
|
*/
|
|
136
|
-
const
|
|
137
|
-
// The first non-ignored ELEMENT sibling of `current` in `direction
|
|
87
|
+
const strayText = (node, container) => {
|
|
88
|
+
// The first non-ignored ELEMENT sibling of `current` in `step`'s direction.
|
|
138
89
|
// A non-empty stray text node stops the scan: the gap is ambiguous and
|
|
139
90
|
// the caller should look at the enclosing level instead.
|
|
140
|
-
const
|
|
91
|
+
const sibling = (parent, index, step) => {
|
|
141
92
|
for (let i = index + step; i >= 0 && i < parent.childNodes.length; i += step) {
|
|
142
93
|
const child = parent.childNodes[i];
|
|
143
|
-
if (child instanceof Element) {
|
|
144
|
-
if (isIgnoredBoundaryNode(child))
|
|
145
|
-
continue;
|
|
146
|
-
return child;
|
|
147
|
-
}
|
|
148
94
|
if (!isIgnoredBoundaryNode(child))
|
|
149
|
-
|
|
95
|
+
return child instanceof Element ? child : null;
|
|
150
96
|
}
|
|
151
97
|
return null;
|
|
152
98
|
};
|
|
153
|
-
let current = node;
|
|
154
|
-
let parent = current.parentNode;
|
|
155
|
-
while (parent instanceof Element) {
|
|
99
|
+
for (let current = node, parent = node.parentNode; parent instanceof Element;) {
|
|
156
100
|
const index = Array.prototype.indexOf.call(parent.childNodes, current);
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
}
|
|
164
|
-
if (parent === container) {
|
|
101
|
+
const element = index !== -1 &&
|
|
102
|
+
(edgeText('last', sibling(parent, index, -1)) ??
|
|
103
|
+
edgeText('first', sibling(parent, index, 1)));
|
|
104
|
+
if (element)
|
|
105
|
+
return element;
|
|
106
|
+
if (parent === container)
|
|
165
107
|
break;
|
|
166
|
-
}
|
|
167
108
|
current = parent;
|
|
168
109
|
parent = current.parentNode;
|
|
169
110
|
}
|
|
170
111
|
return null;
|
|
171
112
|
};
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
if (boundary.previousInline && boundary.nextText === textNode) {
|
|
179
|
-
return 0;
|
|
180
|
-
}
|
|
181
|
-
if (boundary.nextInline && boundary.previousText === textNode) {
|
|
182
|
-
return text.length;
|
|
183
|
-
}
|
|
184
|
-
if (boundary.previousText === textNode) {
|
|
185
|
-
return text.length;
|
|
186
|
-
}
|
|
187
|
-
if (boundary.nextText === textNode) {
|
|
188
|
-
return 0;
|
|
189
|
-
}
|
|
190
|
-
return null;
|
|
191
|
-
};
|
|
113
|
+
/**
|
|
114
|
+
* The text a DOM point is in: its text element; in a text suggestion's
|
|
115
|
+
* overlay, its block's last text; at an element boundary (with `offset`),
|
|
116
|
+
* the text beside it; on a stray node or in a block suggestion's preview,
|
|
117
|
+
* the nearest text at that boundary.
|
|
118
|
+
*/
|
|
192
119
|
export function getTextOfNode(node, offset) {
|
|
193
120
|
if (!node)
|
|
194
121
|
return null;
|
|
195
|
-
const
|
|
122
|
+
const { edytor } = this;
|
|
123
|
+
const textOf = (element) => (element && edytor.nodeToText.get(element)) || null;
|
|
196
124
|
// A point in a suggestion's preview is the stray boundary the preview sits at.
|
|
197
|
-
const preview =
|
|
125
|
+
const preview = closestTo(node, SUGGESTION);
|
|
198
126
|
if (preview)
|
|
199
|
-
return textOf(
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
const blockElement = syntheticOverlay.closest('[data-edytor-block]');
|
|
208
|
-
const blockId = blockElement instanceof HTMLElement ? blockElement.dataset.edytorId : undefined;
|
|
209
|
-
const block = blockId ? this.edytor.idToBlock.get(blockId) : null;
|
|
210
|
-
return block?.lastText ?? null;
|
|
211
|
-
}
|
|
212
|
-
text =
|
|
213
|
-
textOf(findClosestTextElement(node)) ??
|
|
214
|
-
(typeof offset === 'number' ? textOf(getTextElementAtBoundary(node, offset)) : null);
|
|
215
|
-
}
|
|
216
|
-
else {
|
|
217
|
-
for (let current = node; current.parentElement && !text; current = current.parentElement)
|
|
218
|
-
text = textOf(current);
|
|
219
|
-
}
|
|
220
|
-
// The endpoint lives on a stray node (whitespace/empty text between
|
|
221
|
-
// blocks, the render anchor, a non-editable gap) — resolve it to the
|
|
222
|
-
// nearest text element at that boundary so open-ended selections
|
|
223
|
-
// still map to a model text position.
|
|
224
|
-
return text ?? textOf(getStrayBoundaryTextElement(node, this.edytor.node));
|
|
127
|
+
return textOf(strayText(preview, edytor.node));
|
|
128
|
+
const element = node.nodeType !== Node.TEXT_NODE;
|
|
129
|
+
const overlay = element && !textOf(node) && closestTo(node, SYNTHETIC_TEXT_OVERLAY_SELECTOR);
|
|
130
|
+
if (overlay)
|
|
131
|
+
return this.getBlockOfNode(overlay)?.lastText ?? null;
|
|
132
|
+
return (textOf(closestTo(node, TEXT)) ??
|
|
133
|
+
(element && typeof offset === 'number' ? textOf(textAtBoundary(node, offset)) : null) ??
|
|
134
|
+
textOf(strayText(node, edytor.node)));
|
|
225
135
|
}
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
return null;
|
|
136
|
+
/** The inline atom at `node`: around it, or the first one inside it. */
|
|
137
|
+
export const getInlineBlockOfNode = (edytor, node) => {
|
|
229
138
|
const element = getElementFromNode(node);
|
|
230
|
-
const
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
}
|
|
239
|
-
}
|
|
240
|
-
return null;
|
|
241
|
-
}
|
|
242
|
-
export function getInlineBlockInSelectedRange(range) {
|
|
243
|
-
if (!range || range.collapsed) {
|
|
139
|
+
const around = element?.closest(INLINE);
|
|
140
|
+
const inline = around && edytor.node?.contains(around) ? around : element?.querySelector(INLINE);
|
|
141
|
+
return (inline && edytor.nodeToInlineBlock.get(inline)) || null;
|
|
142
|
+
};
|
|
143
|
+
/** The one inline atom a non-collapsed range covers, touching no text. */
|
|
144
|
+
export const getInlineBlockInSelectedRange = (edytor, range) => {
|
|
145
|
+
const root = range && !range.collapsed ? getElementFromNode(range.commonAncestorContainer) : null;
|
|
146
|
+
if (!root)
|
|
244
147
|
return null;
|
|
245
|
-
|
|
246
|
-
const
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
if (!root) {
|
|
250
|
-
return null;
|
|
251
|
-
}
|
|
252
|
-
const inlineElements = [
|
|
253
|
-
...(root.matches('[data-edytor-inline-block]') ? [root] : []),
|
|
254
|
-
...Array.from(root.querySelectorAll('[data-edytor-inline-block]'))
|
|
255
|
-
].filter((element) => range.intersectsNode(element));
|
|
256
|
-
const inlineBlocks = new Set(inlineElements
|
|
257
|
-
.map((element) => this.edytor.nodeToInlineBlock.get(element))
|
|
258
|
-
.filter((inlineBlock) => Boolean(inlineBlock)));
|
|
259
|
-
if (inlineBlocks.size !== 1) {
|
|
260
|
-
return null;
|
|
261
|
-
}
|
|
262
|
-
const intersectsText = Array.from(root.querySelectorAll('[data-edytor-text]')).some((element) => range.intersectsNode(element));
|
|
263
|
-
if (intersectsText) {
|
|
264
|
-
return null;
|
|
265
|
-
}
|
|
266
|
-
return inlineBlocks.values().next().value ?? null;
|
|
267
|
-
}
|
|
268
|
-
export function getTextsInSelection(startNode, endNode, startOffset = 0, endOffset = startOffset) {
|
|
269
|
-
const startText = this.getTextOfNode(startNode, startOffset);
|
|
270
|
-
return {
|
|
271
|
-
startText,
|
|
272
|
-
endText: startText ? this.getTextOfNode(endNode, endOffset) : null,
|
|
273
|
-
inlineBlock: this.getInlineBlockOfNode(startNode)
|
|
274
|
-
};
|
|
275
|
-
}
|
|
148
|
+
const inside = (selector) => [...(root.matches(selector) ? [root] : []), ...root.querySelectorAll(selector)].filter((element) => range.intersectsNode(element));
|
|
149
|
+
const atoms = new Set(inside(INLINE).flatMap((element) => edytor.nodeToInlineBlock.get(element) ?? []));
|
|
150
|
+
return atoms.size === 1 && !inside(TEXT).length ? [...atoms][0] : null;
|
|
151
|
+
};
|
|
276
152
|
/**
|
|
277
153
|
* The edge side of a collapsed DOM point at `offset` of `text`: inside
|
|
278
154
|
* when every mark element rendering the character before it contains the
|
|
@@ -294,33 +170,51 @@ export const getMarkEdgeSide = (text, node, offset) => {
|
|
|
294
170
|
}
|
|
295
171
|
return side;
|
|
296
172
|
};
|
|
297
|
-
|
|
173
|
+
/**
|
|
174
|
+
* The offset the DOM point `(node, offset)` stands for in the rendered text
|
|
175
|
+
* `text` as the DOM holds it: its trailing newline's marker reads the end;
|
|
176
|
+
* no model rule (the DOM may be ahead of the model: a native insertion read
|
|
177
|
+
* before its adoption).
|
|
178
|
+
*/
|
|
179
|
+
export const domOffsetIn = (text, node, offset) => text.endsWithNewline && isInsideTrailingNewlineMarker(node)
|
|
180
|
+
? text.length
|
|
181
|
+
: getTextContentOffsetAtPoint(text.node, node, offset);
|
|
182
|
+
/**
|
|
183
|
+
* The one DOM point → text offset mapper ({@link domOffsetIn} with the
|
|
184
|
+
* model's rules; `domPointOf` is its inverse): a point outside the text
|
|
185
|
+
* element beside it (an element boundary, past an inline atom) reads its
|
|
186
|
+
* edge, and an empty text's filler reads 0.
|
|
187
|
+
*/
|
|
188
|
+
export const getYIndex = (text, node, offset) => {
|
|
298
189
|
if (!text || !node)
|
|
299
|
-
return
|
|
300
|
-
const
|
|
301
|
-
const { isEmpty } = text;
|
|
302
|
-
if (text.endsWithNewline && isInsideTrailingNewlineMarker(node)) {
|
|
303
|
-
return text.length;
|
|
304
|
-
}
|
|
190
|
+
return offset;
|
|
191
|
+
const element = text.node;
|
|
305
192
|
// A point inside the text element reads the text before it; the
|
|
306
193
|
// element-boundary rule is for points outside it.
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
194
|
+
if (!element.contains(node)) {
|
|
195
|
+
const boundary = boundaryOf(node, offset);
|
|
196
|
+
if (boundary?.before === element)
|
|
197
|
+
return text.length;
|
|
198
|
+
if (boundary?.after === element)
|
|
199
|
+
return 0;
|
|
200
|
+
}
|
|
201
|
+
const at = domOffsetIn(text, node, offset);
|
|
202
|
+
return (at === 0 || at === 1) && text.isEmpty ? 0 : at;
|
|
203
|
+
};
|
|
204
|
+
/** {@link getYIndex} within the text's length (a caret the model can hold). */
|
|
205
|
+
export const offsetIn = (text, node, offset) => Math.min(Math.max(getYIndex(text, node, offset), 0), text.length);
|
|
319
206
|
/** The mounted text and display offset a DOM point stands in, or `null` (`edytor.ports.surface.pointAt`). */
|
|
320
207
|
export function textPointAt(node, offset) {
|
|
321
208
|
const text = getTextOfNode.call(this, node);
|
|
322
209
|
return text?.node ? { text, offset: getYIndex(text, node, offset) } : null;
|
|
323
210
|
}
|
|
211
|
+
/** A DOM selection's endpoints in document order, and whether it runs backward. */
|
|
212
|
+
export const ordered = (selection, reversed) => {
|
|
213
|
+
const { anchorNode, anchorOffset, focusNode, focusOffset } = selection;
|
|
214
|
+
return reversed
|
|
215
|
+
? { startNode: focusNode, start: focusOffset, endNode: anchorNode, end: anchorOffset }
|
|
216
|
+
: { startNode: anchorNode, start: anchorOffset, endNode: focusNode, end: focusOffset };
|
|
217
|
+
};
|
|
324
218
|
const isHighSurrogate = (code) => code >= 0xd800 && code <= 0xdbff;
|
|
325
219
|
const isLowSurrogate = (code) => code >= 0xdc00 && code <= 0xdfff;
|
|
326
220
|
/**
|
|
@@ -338,16 +232,3 @@ export const normalizeUtf16Boundary = (value, offset, direction) => {
|
|
|
338
232
|
}
|
|
339
233
|
return direction === 'backward' ? clamped - 1 : clamped + 1;
|
|
340
234
|
};
|
|
341
|
-
export const getRangesFromSelection = (selection) => {
|
|
342
|
-
return Array.from({ length: selection.rangeCount }, (_, i) => selection.getRangeAt(i));
|
|
343
|
-
};
|
|
344
|
-
export const climbDom = (node, cb) => {
|
|
345
|
-
if (!node)
|
|
346
|
-
return;
|
|
347
|
-
let parent = node;
|
|
348
|
-
while (parent) {
|
|
349
|
-
if (cb(parent))
|
|
350
|
-
break;
|
|
351
|
-
parent = parent.parentElement;
|
|
352
|
-
}
|
|
353
|
-
};
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
*/
|
|
10
10
|
import type { Block } from '../block/block.svelte.js';
|
|
11
11
|
import type { Edytor } from '../edytor.svelte.js';
|
|
12
|
-
import type {
|
|
12
|
+
import type { TextRange } from './selection.svelte.js';
|
|
13
13
|
import { Text } from '../text/text.svelte.js';
|
|
14
14
|
/** Content hidden by view state: a collapsed toggle's body, a `hidden` subtree. */
|
|
15
15
|
export declare const HIDDEN = "[hidden], details:not([open]) > :not(summary)";
|
|
@@ -62,10 +62,6 @@ export declare const viewOf: (edytor: Edytor) => {
|
|
|
62
62
|
* `selection.selectedBlocks`: a grip-selected list is one block to a menu.
|
|
63
63
|
*/
|
|
64
64
|
export declare const selectedMembers: (edytor: Edytor, blocks?: Iterable<Block>) => Block[];
|
|
65
|
-
/** A text range's endpoints and texts, as the selection (or an attempt's snapshot) holds them. */
|
|
66
|
-
type TextRange = RangeEndpoints & {
|
|
67
|
-
texts: Text[];
|
|
68
|
-
};
|
|
69
65
|
/**
|
|
70
66
|
* Whether a text range covers `block` (`del.range.hidden-body`): a block the
|
|
71
67
|
* view shows does; a hidden one exactly when deleting the range deletes it —
|
|
@@ -78,7 +74,7 @@ type TextRange = RangeEndpoints & {
|
|
|
78
74
|
* selected list leave it as it is. Copy, cut, delete, marks and the
|
|
79
75
|
* toolbar share this one answer.
|
|
80
76
|
*/
|
|
81
|
-
export declare const rangeCovers: (edytor: Edytor,
|
|
77
|
+
export declare const rangeCovers: (edytor: Edytor, snapshot?: TextRange, { replace }?: {
|
|
82
78
|
replace?: boolean | undefined;
|
|
83
79
|
}) => (block: Block) => boolean;
|
|
84
80
|
/**
|
|
@@ -86,11 +82,10 @@ export declare const rangeCovers: (edytor: Edytor, range?: TextRange, { replace
|
|
|
86
82
|
* document order, so marks, the toolbar's state and the marks typing over a
|
|
87
83
|
* range inherits (`replace`) reach what the range's delete would.
|
|
88
84
|
*/
|
|
89
|
-
export declare const selectedTextSpans: (edytor: Edytor,
|
|
85
|
+
export declare const selectedTextSpans: (edytor: Edytor, snapshot?: TextRange, options?: {
|
|
90
86
|
replace?: boolean;
|
|
91
87
|
}) => {
|
|
92
88
|
text: Text;
|
|
93
89
|
start: number;
|
|
94
90
|
end: number;
|
|
95
91
|
}[];
|
|
96
|
-
export {};
|
|
@@ -112,12 +112,13 @@ export const selectedMembers = (edytor, blocks = edytor.selection.selectedBlocks
|
|
|
112
112
|
* selected list leave it as it is. Copy, cut, delete, marks and the
|
|
113
113
|
* toolbar share this one answer.
|
|
114
114
|
*/
|
|
115
|
-
export const rangeCovers = (edytor,
|
|
115
|
+
export const rangeCovers = (edytor, snapshot, { replace = false } = {}) => {
|
|
116
116
|
const { selection } = edytor;
|
|
117
|
-
if (
|
|
117
|
+
if (!snapshot && selection.value.kind === 'blocks') {
|
|
118
118
|
const members = new Set(selectedMembers(edytor));
|
|
119
119
|
return (block) => members.has(block) && (selection.selectedBlocks.has(block) || !hidden(block));
|
|
120
120
|
}
|
|
121
|
+
const range = snapshot ?? selection.textRange();
|
|
121
122
|
const members = new Set(range.texts.map((text) => text.parent));
|
|
122
123
|
const head = range.startText?.parent;
|
|
123
124
|
const headDies = !replace && range.startText?.segStart === 0 && range.yStart === 0;
|
|
@@ -135,10 +136,11 @@ export const rangeCovers = (edytor, range = edytor.selection.state, { replace =
|
|
|
135
136
|
* document order, so marks, the toolbar's state and the marks typing over a
|
|
136
137
|
* range inherits (`replace`) reach what the range's delete would.
|
|
137
138
|
*/
|
|
138
|
-
export const selectedTextSpans = (edytor,
|
|
139
|
-
const covers = rangeCovers(edytor,
|
|
139
|
+
export const selectedTextSpans = (edytor, snapshot, options = {}) => {
|
|
140
|
+
const covers = rangeCovers(edytor, snapshot, options);
|
|
141
|
+
const range = snapshot ?? edytor.selection.textRange();
|
|
140
142
|
// A block selection's texts are its members' own lines (a list's items too).
|
|
141
|
-
const texts =
|
|
143
|
+
const texts = !snapshot && edytor.selection.value.kind === 'blocks'
|
|
142
144
|
? selectedMembers(edytor).flatMap((block) => block.rendersContent ? block.content.filter((part) => part instanceof Text) : [])
|
|
143
145
|
: range.texts;
|
|
144
146
|
return texts.flatMap((text) => covers(text.parent)
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* What a view tells assistive technology about a change a screen does not
|
|
3
3
|
* say by itself: a block move or a block delete this view made, in the
|
|
4
|
-
* view's labels (`
|
|
4
|
+
* view's `editor` labels (`labelsOf`).
|
|
5
5
|
* DOM-free: the surface renders `message` in a polite live region beside
|
|
6
6
|
* the host (`components/Announcer.svelte`), a new node per announcement
|
|
7
7
|
* (`serial`), so the same words twice are read twice. Only this view's own
|
|
@@ -11,6 +11,7 @@ import type { Block } from '../block/block.svelte.js';
|
|
|
11
11
|
import type { Edytor } from '../edytor.svelte.js';
|
|
12
12
|
import type { BlockMoveRequest } from './moves.js';
|
|
13
13
|
export declare class Announcer {
|
|
14
|
+
#private;
|
|
14
15
|
private edytor;
|
|
15
16
|
/** The last announcement. */
|
|
16
17
|
message: string;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { kindLabel } from '../kinds.js';
|
|
2
|
+
import { editorEnglish, labelsOf } from '../labels.js';
|
|
2
3
|
/** The label saying a move, by direction (`to`: a placement, a drop). */
|
|
3
4
|
const MOVED = {
|
|
4
5
|
up: 'movedUp',
|
|
@@ -16,6 +17,9 @@ export class Announcer {
|
|
|
16
17
|
constructor(edytor) {
|
|
17
18
|
this.edytor = edytor;
|
|
18
19
|
}
|
|
20
|
+
get #labels() {
|
|
21
|
+
return labelsOf(this.edytor, 'editor', editorEnglish);
|
|
22
|
+
}
|
|
19
23
|
/** Announce `message` (politely: after what the screen reader is saying). */
|
|
20
24
|
say = (message) => {
|
|
21
25
|
this.message = message;
|
|
@@ -23,7 +27,7 @@ export class Announcer {
|
|
|
23
27
|
};
|
|
24
28
|
/** `blocks` (one or several) as words: a kind's label for one, a count for several. */
|
|
25
29
|
what = (blocks) => {
|
|
26
|
-
const
|
|
30
|
+
const labels = this.#labels;
|
|
27
31
|
return blocks.length === 1
|
|
28
32
|
? labels.block(kindLabel(this.edytor, blocks[0]))
|
|
29
33
|
: labels.blocks(blocks.length);
|
|
@@ -33,8 +37,8 @@ export class Announcer {
|
|
|
33
37
|
if (!moved.length)
|
|
34
38
|
return;
|
|
35
39
|
const said = MOVED['direction' in request ? request.direction : 'to'];
|
|
36
|
-
this.say(this
|
|
40
|
+
this.say(this.#labels[said](this.what(moved)));
|
|
37
41
|
};
|
|
38
42
|
/** Blocks were deleted: `what` names them, read before they went. */
|
|
39
|
-
deleted = (what) => this.say(this
|
|
43
|
+
deleted = (what) => this.say(this.#labels.deleted(what));
|
|
40
44
|
}
|