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
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
import type { BlockHandleController } from './BlockHandleController.svelte.js';
|
|
11
11
|
import { gapBefore, handleSpan } from '../columns/gaps.js';
|
|
12
12
|
import { renderSkipped, rendered } from '../../surface/overlay.js';
|
|
13
|
+
import { getOwnRowBottom } from '../../dnd/geometry.js';
|
|
13
14
|
|
|
14
15
|
/**
|
|
15
16
|
* The handles, in the overlay: one per registered movable block that
|
|
@@ -33,8 +34,8 @@
|
|
|
33
34
|
near: ReadonlySet<string>;
|
|
34
35
|
/** Blocks under the pointer; reactive. */
|
|
35
36
|
hovered: ReadonlySet<string>;
|
|
36
|
-
/**
|
|
37
|
-
handle
|
|
37
|
+
/** The app's handle (`BlockHandlesOptions.handle`). */
|
|
38
|
+
handle: Snippet<[BlockHandleSnippetPayload]>;
|
|
38
39
|
} = $props();
|
|
39
40
|
|
|
40
41
|
/** The block whose handle holds focus: its handle stays while focused. */
|
|
@@ -85,16 +86,6 @@
|
|
|
85
86
|
return gapBefore(column);
|
|
86
87
|
};
|
|
87
88
|
|
|
88
|
-
/** Where a block's own row ends: where its first shown child begins, else its box's bottom. */
|
|
89
|
-
const ownRowBottom = (node: HTMLElement, rect: DOMRect) => {
|
|
90
|
-
const child = node
|
|
91
|
-
.querySelector<HTMLElement>('[data-edytor-block="true"]')
|
|
92
|
-
?.getBoundingClientRect();
|
|
93
|
-
return child && child.height > 0 && child.top >= rect.top && child.top < rect.bottom
|
|
94
|
-
? child.top
|
|
95
|
-
: rect.bottom;
|
|
96
|
-
};
|
|
97
|
-
|
|
98
89
|
const firstRowCenter = (node: HTMLElement, block: Block): number => {
|
|
99
90
|
if (block.definition.island) {
|
|
100
91
|
const header = node.querySelector<HTMLElement>(':scope > [data-edytor-void="true"]');
|
|
@@ -138,7 +129,7 @@
|
|
|
138
129
|
// the host's top, which is centered on the first line.
|
|
139
130
|
const span = gap ? `${handleSpan(gap, rect.left)}px` : '';
|
|
140
131
|
const row = gap
|
|
141
|
-
? `${rect.top - (center - host.offsetHeight / 2)}px ${
|
|
132
|
+
? `${rect.top - (center - host.offsetHeight / 2)}px ${getOwnRowBottom(node, rect) - rect.top}px`
|
|
142
133
|
: '';
|
|
143
134
|
const next = shown ? `${left} ${top} ${row} ${span}` : 'none';
|
|
144
135
|
if (next === at) return;
|
|
@@ -210,14 +201,15 @@
|
|
|
210
201
|
pointer-events: none;
|
|
211
202
|
}
|
|
212
203
|
|
|
213
|
-
/* Over a gap between two columns (one hit rule, the handles'): the handle
|
|
214
|
-
* spans the gap right of the column resize band,
|
|
215
|
-
*
|
|
216
|
-
*
|
|
217
|
-
*
|
|
218
|
-
*
|
|
219
|
-
*
|
|
220
|
-
* shows
|
|
204
|
+
/* Over a gap between two columns (one hit rule, the handles'): the handle's
|
|
205
|
+
* box spans the gap right of the column resize band, centered in the gap
|
|
206
|
+
* (`columns/gaps.ts`, one measurement), and takes the pointer at its
|
|
207
|
+
* block's whole row, shown or not — a pointer there hovers the block, so
|
|
208
|
+
* its grip is reached from any side. Its `+` (compact) and grip stand
|
|
209
|
+
* together flush with its block (Notion's "+ ⋮⋮"), never shrunk: wider
|
|
210
|
+
* than the box, the `+` reaches left under the band (the resizers' layer
|
|
211
|
+
* is above the handles'): where the band's guide shows, at every height,
|
|
212
|
+
* a press resizes; the `+`'s part left of the band takes its own. */
|
|
221
213
|
[data-edytor-block-handle-host][data-over-gap='true'] {
|
|
222
214
|
box-sizing: border-box;
|
|
223
215
|
width: var(--edytor-handle-gap-width, auto);
|
|
@@ -225,8 +217,8 @@
|
|
|
225
217
|
padding-inline-end: 0;
|
|
226
218
|
}
|
|
227
219
|
|
|
228
|
-
[data-edytor-block-handle-host][data-over-gap='true'] :global(
|
|
229
|
-
|
|
220
|
+
[data-edytor-block-handle-host][data-over-gap='true'] > :global(*) {
|
|
221
|
+
flex-shrink: 0;
|
|
230
222
|
}
|
|
231
223
|
|
|
232
224
|
[data-edytor-block-handle-host][data-over-gap='true']::before {
|
|
@@ -12,8 +12,8 @@ type $$ComponentProps = {
|
|
|
12
12
|
near: ReadonlySet<string>;
|
|
13
13
|
/** Blocks under the pointer; reactive. */
|
|
14
14
|
hovered: ReadonlySet<string>;
|
|
15
|
-
/**
|
|
16
|
-
handle
|
|
15
|
+
/** The app's handle (`BlockHandlesOptions.handle`). */
|
|
16
|
+
handle: Snippet<[BlockHandleSnippetPayload]>;
|
|
17
17
|
};
|
|
18
18
|
declare const BlockHandles: import("svelte").Component<$$ComponentProps, {}, "">;
|
|
19
19
|
type BlockHandles = ReturnType<typeof BlockHandles>;
|
|
@@ -1,20 +1,25 @@
|
|
|
1
1
|
import type { Snippet } from 'svelte';
|
|
2
2
|
import type { Plugin } from '../../plugins.js';
|
|
3
3
|
import type { Block } from '../../block/block.svelte.js';
|
|
4
|
-
import
|
|
5
|
-
export type BlockHandleActivation = {
|
|
6
|
-
block: Block;
|
|
7
|
-
anchor: HTMLElement;
|
|
8
|
-
};
|
|
4
|
+
import type { Attachment } from 'svelte/attachments';
|
|
9
5
|
/** What a `handle` snippet receives. */
|
|
10
6
|
export type BlockHandleSnippetPayload = {
|
|
11
7
|
block: Block;
|
|
12
8
|
/** The block's kind as people read it ("Heading 1", its preset's label): name your controls with it. */
|
|
13
9
|
label: string;
|
|
14
|
-
/**
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
10
|
+
/**
|
|
11
|
+
* The grip's attachment (`{@attach handle.grip}`): the drag source, a
|
|
12
|
+
* click that opens the block's menu, the Alt+arrow moves
|
|
13
|
+
* (`aria-keyshortcuts`), and the ARIA of the menu it opened
|
|
14
|
+
* (`aria-expanded`, `aria-controls`, `aria-haspopup`).
|
|
15
|
+
*/
|
|
16
|
+
grip: Attachment<HTMLElement>;
|
|
17
|
+
/**
|
|
18
|
+
* The `+`'s attachment (`{@attach handle.plus}`): a click calls `add`
|
|
19
|
+
* (Alt+click with `true`) with the `+` as the anchor, a press keeps the
|
|
20
|
+
* editor's focus, and the ARIA of the menu it opened.
|
|
21
|
+
*/
|
|
22
|
+
plus: Attachment<HTMLElement>;
|
|
18
23
|
/**
|
|
19
24
|
* The `+`: the slash menu offers what to add below; with `true` (Alt+click)
|
|
20
25
|
* above, or, for a block directly in a layout's column, in a new column
|
|
@@ -23,48 +28,29 @@ export type BlockHandleSnippetPayload = {
|
|
|
23
28
|
* block.
|
|
24
29
|
*/
|
|
25
30
|
add: (alt?: boolean, anchor?: HTMLElement | null) => void;
|
|
26
|
-
/** Whether the block takes a `+`: always `true` (a block in a column too, as Notion). */
|
|
27
|
-
addable: boolean;
|
|
28
|
-
readonly: boolean;
|
|
29
|
-
draggable: boolean;
|
|
30
|
-
/**
|
|
31
|
-
* Whether the menu the `+` (`add`) or the grip (`grip`) opened is open
|
|
32
|
-
* (reactive): their `aria-expanded`.
|
|
33
|
-
*/
|
|
34
|
-
expanded: {
|
|
35
|
-
add: boolean;
|
|
36
|
-
grip: boolean;
|
|
37
|
-
};
|
|
38
31
|
/**
|
|
39
|
-
*
|
|
40
|
-
*
|
|
32
|
+
* Alt+click on the `+` adds a column right of the block's (a block
|
|
33
|
+
* directly in a layout's column): name your `+` with it.
|
|
41
34
|
*/
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
};
|
|
46
|
-
/** The handles' words (`add(label)`, `grip(label)`, their hints). */
|
|
47
|
-
labels: BlockHandlesLabels;
|
|
35
|
+
beside: boolean;
|
|
36
|
+
readonly: boolean;
|
|
37
|
+
draggable: boolean;
|
|
48
38
|
};
|
|
49
39
|
export type BlockHandlesOptions = {
|
|
50
40
|
/** Keep the handle and its keyboard actions, but omit pointer dragging and drop targets. */
|
|
51
41
|
draggable?: boolean;
|
|
52
|
-
|
|
53
|
-
|
|
42
|
+
/**
|
|
43
|
+
* The `+` and ⋮⋮ beside each block, and their words (without it, no
|
|
44
|
+
* handle shows and no block drags); placement and hover are the plugin's.
|
|
45
|
+
*/
|
|
54
46
|
handle?: Snippet<[BlockHandleSnippetPayload]>;
|
|
55
|
-
/** The handles' accessible names and tooltips, over the English ones. */
|
|
56
|
-
labels?: PartialLabels<'blockHandles'>;
|
|
57
47
|
};
|
|
58
|
-
/** Recognize both the default and configured handle plugins during component composition. */
|
|
59
|
-
export declare const isBlockHandlesPlugin: (plugin: Plugin) => boolean;
|
|
60
48
|
/**
|
|
61
49
|
* Block handles in the overlay, created lazily: a handle mounts
|
|
62
|
-
* for a block near the viewport (`
|
|
63
|
-
* hidden; every block without layout),
|
|
50
|
+
* for a block near the viewport (the overlay's `near` top-level blocks and
|
|
51
|
+
* the blocks inside them, not hidden; every block without layout),
|
|
64
52
|
* under the pointer, selected, focused or dragged; drop targets exist only
|
|
65
53
|
* during our own drag. Hover is one delegated listener on the editor and
|
|
66
54
|
* one on the overlay (a block's handle keeps it hovered).
|
|
67
55
|
*/
|
|
68
56
|
export declare const createBlockHandlesPlugin: (options?: BlockHandlesOptions) => Plugin;
|
|
69
|
-
/** Default handles for consumers that add the plugin directly. */
|
|
70
|
-
export declare const blockHandlesPlugin: Plugin;
|
|
@@ -2,204 +2,149 @@ import { mount, unmount } from 'svelte';
|
|
|
2
2
|
import { SvelteMap, SvelteSet } from 'svelte/reactivity';
|
|
3
3
|
import BlockHandles from './BlockHandles.svelte';
|
|
4
4
|
import { BlockHandleController } from './BlockHandleController.svelte.js';
|
|
5
|
-
import { labelsWith } from '../../labels.js';
|
|
6
5
|
import { hidden } from '../../selection/visibility.js';
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
export const isBlockHandlesPlugin = (plugin) => handlePlugins.has(plugin);
|
|
10
|
-
/**
|
|
11
|
-
* Where a handle mounts: a block within one screen of the viewport, above or
|
|
12
|
-
* below. Without layout (no `IntersectionObserver`: a DOM without a
|
|
13
|
-
* renderer), every block is near.
|
|
14
|
-
*/
|
|
15
|
-
const NEAR_SCREENS = 1;
|
|
16
|
-
/**
|
|
17
|
-
* The top-level blocks near the viewport, by a binary search over their
|
|
18
|
-
* boxes (document order is vertical order at the top level): reads
|
|
19
|
-
* O(log n) boxes a frame, where an observer of every block computed them all
|
|
20
|
-
* after each layout change.
|
|
21
|
-
*/
|
|
22
|
-
const nearTop = (blocks, handle, screen) => {
|
|
23
|
-
const top = -NEAR_SCREENS * screen;
|
|
24
|
-
const bottom = (1 + NEAR_SCREENS) * screen;
|
|
25
|
-
// Ids, a handle only for each box read: no handle for every top-level block.
|
|
26
|
-
const box = (id) => handle(id).node?.getBoundingClientRect();
|
|
27
|
-
let lo = 0;
|
|
28
|
-
let hi = blocks.length;
|
|
29
|
-
while (lo < hi) {
|
|
30
|
-
const mid = (lo + hi) >> 1;
|
|
31
|
-
const at = box(blocks[mid]);
|
|
32
|
-
if (!at || at.bottom < top)
|
|
33
|
-
lo = mid + 1;
|
|
34
|
-
else
|
|
35
|
-
hi = mid;
|
|
36
|
-
}
|
|
37
|
-
const first = lo;
|
|
38
|
-
hi = blocks.length;
|
|
39
|
-
while (lo < hi) {
|
|
40
|
-
const mid = (lo + hi) >> 1;
|
|
41
|
-
const at = box(blocks[mid]);
|
|
42
|
-
if (!at || at.top <= bottom)
|
|
43
|
-
lo = mid + 1;
|
|
44
|
-
else
|
|
45
|
-
hi = mid;
|
|
46
|
-
}
|
|
47
|
-
return blocks.slice(first, lo).map(handle);
|
|
48
|
-
};
|
|
6
|
+
import { isDropTarget } from '../../dnd/placement.js';
|
|
7
|
+
import { all, listen } from '../../utils/listen.js';
|
|
49
8
|
/**
|
|
50
9
|
* Block handles in the overlay, created lazily: a handle mounts
|
|
51
|
-
* for a block near the viewport (`
|
|
52
|
-
* hidden; every block without layout),
|
|
10
|
+
* for a block near the viewport (the overlay's `near` top-level blocks and
|
|
11
|
+
* the blocks inside them, not hidden; every block without layout),
|
|
53
12
|
* under the pointer, selected, focused or dragged; drop targets exist only
|
|
54
13
|
* during our own drag. Hover is one delegated listener on the editor and
|
|
55
14
|
* one on the overlay (a block's handle keeps it hovered).
|
|
56
15
|
*/
|
|
57
|
-
export const createBlockHandlesPlugin = (options = {}) => {
|
|
58
|
-
const
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
16
|
+
export const createBlockHandlesPlugin = (options = {}) => (edytor) => {
|
|
17
|
+
const controller = new BlockHandleController(edytor, {
|
|
18
|
+
draggable: options.draggable !== false
|
|
19
|
+
});
|
|
20
|
+
const blocks = new SvelteMap();
|
|
21
|
+
const near = new SvelteSet();
|
|
22
|
+
const hovered = new SvelteSet();
|
|
23
|
+
/** Layout is computed (a browser): the near band is measured, else every block is near. */
|
|
24
|
+
const measured = typeof IntersectionObserver !== 'undefined';
|
|
25
|
+
/** The blocks the band gained, mounted after the frame's paint (`afterPaint`). */
|
|
26
|
+
let gained = null;
|
|
27
|
+
let afterPaint;
|
|
28
|
+
/**
|
|
29
|
+
* Browser rule `handles.after-paint` (one named timer): a handle the band
|
|
30
|
+
* gains mounts in a task queued from the overlay's frame, so after that
|
|
31
|
+
* frame's paint: a key that adds a block (Enter, a paste) paints its text
|
|
32
|
+
* first, the new blocks' handles a frame later. A handle the band loses
|
|
33
|
+
* goes at once; hovered, selected and focused handles do not wait.
|
|
34
|
+
*/
|
|
35
|
+
const mountGained = () => {
|
|
36
|
+
afterPaint = undefined;
|
|
37
|
+
const ids = gained;
|
|
38
|
+
gained = null;
|
|
39
|
+
if (ids)
|
|
40
|
+
for (const id of ids)
|
|
41
|
+
if (blocks.has(id) && !near.has(id))
|
|
42
|
+
near.add(id);
|
|
43
|
+
};
|
|
44
|
+
/** The near band, measured on the overlay's frames (a scroll, a resize, a commit). */
|
|
45
|
+
const measureNear = () => {
|
|
46
|
+
const next = new Set();
|
|
47
|
+
const visit = (block) => {
|
|
48
|
+
if (blocks.has(block.id) && !hidden(block))
|
|
49
|
+
next.add(block.id);
|
|
50
|
+
for (const child of block.children)
|
|
51
|
+
visit(child);
|
|
88
52
|
};
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
if (!view || !edytor.root)
|
|
93
|
-
return;
|
|
94
|
-
const tops = edytor.facade.childrenIds(null);
|
|
95
|
-
const next = new Set();
|
|
96
|
-
const visit = (block) => {
|
|
97
|
-
if (blocks.has(block.id) && !hidden(block))
|
|
98
|
-
next.add(block.id);
|
|
99
|
-
for (const child of block.children)
|
|
100
|
-
visit(child);
|
|
101
|
-
};
|
|
102
|
-
for (const block of nearTop(tops, edytor.idToBlock.block, view.innerHeight))
|
|
53
|
+
for (const node of edytor.overlay.near) {
|
|
54
|
+
const block = edytor.idToBlock.get(node.dataset.edytorId ?? '');
|
|
55
|
+
if (block?.node === node)
|
|
103
56
|
visit(block);
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
near.delete(id);
|
|
108
|
-
const add = [...next].filter((id) => !near.has(id));
|
|
109
|
-
gained = add.length ? new Set(add) : null;
|
|
110
|
-
if (gained)
|
|
111
|
-
afterPaint ??= setTimeout(mountGained);
|
|
112
|
-
};
|
|
113
|
-
};
|
|
114
|
-
/**
|
|
115
|
-
* The blocks under the pointer that have a handle: the hovered block and
|
|
116
|
-
* its handled ancestors (a layout and its columns have none). Over a
|
|
117
|
-
* block's handle (in the overlay), that block: a block stays hovered
|
|
118
|
-
* while the pointer goes from its text to its handle and stays there.
|
|
119
|
-
*/
|
|
120
|
-
const hover = (event) => {
|
|
121
|
-
const target = event.target;
|
|
122
|
-
const handle = target?.closest?.('[data-edytor-block-handle-host]');
|
|
123
|
-
const start = handle
|
|
124
|
-
? blocks.get(handle.dataset.blockId ?? '')?.node
|
|
125
|
-
: target?.closest?.('[data-edytor-block="true"]');
|
|
126
|
-
const next = new Set();
|
|
127
|
-
for (let node = start; node; node = node.parentElement?.closest('[data-edytor-block="true"]')) {
|
|
128
|
-
const id = ids.get(node);
|
|
129
|
-
if (id)
|
|
130
|
-
next.add(id);
|
|
131
|
-
}
|
|
132
|
-
for (const id of hovered)
|
|
57
|
+
}
|
|
58
|
+
return () => {
|
|
59
|
+
for (const id of near)
|
|
133
60
|
if (!next.has(id))
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
const hoverOverlay = (event) => {
|
|
140
|
-
if (event.target?.closest?.('[data-edytor-block-handle-host]'))
|
|
141
|
-
hover(event);
|
|
61
|
+
near.delete(id);
|
|
62
|
+
const add = [...next].filter((id) => !near.has(id));
|
|
63
|
+
gained = add.length ? new Set(add) : null;
|
|
64
|
+
if (gained)
|
|
65
|
+
afterPaint ??= setTimeout(mountGained);
|
|
142
66
|
};
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
67
|
+
};
|
|
68
|
+
/**
|
|
69
|
+
* The blocks under the pointer that have a handle: the hovered block and
|
|
70
|
+
* its handled ancestors (a layout and its columns have none). Over a
|
|
71
|
+
* block's handle (in the overlay), that block: a block stays hovered
|
|
72
|
+
* while the pointer goes from its text to its handle and stays there.
|
|
73
|
+
*/
|
|
74
|
+
const hover = (event) => {
|
|
75
|
+
const target = event.target;
|
|
76
|
+
const handle = target?.closest?.('[data-edytor-block-handle-host]');
|
|
77
|
+
const start = handle
|
|
78
|
+
? blocks.get(handle.dataset.blockId ?? '')?.node
|
|
79
|
+
: target?.closest?.('[data-edytor-block="true"]');
|
|
80
|
+
const next = new Set();
|
|
81
|
+
for (let node = start; node; node = node.parentElement?.closest('[data-edytor-block="true"]')) {
|
|
82
|
+
const id = node.dataset.edytorId ?? '';
|
|
83
|
+
if (blocks.get(id)?.node === node)
|
|
84
|
+
next.add(id);
|
|
85
|
+
}
|
|
86
|
+
for (const id of hovered)
|
|
87
|
+
if (!next.has(id))
|
|
88
|
+
hovered.delete(id);
|
|
89
|
+
for (const id of next)
|
|
90
|
+
hovered.add(id);
|
|
91
|
+
};
|
|
92
|
+
/** In the overlay, only a handle names a block; other chrome (a resize strip, a menu) keeps the hover. */
|
|
93
|
+
const hoverOverlay = (event) => {
|
|
94
|
+
if (event.target?.closest?.('[data-edytor-block-handle-host]'))
|
|
95
|
+
hover(event);
|
|
96
|
+
};
|
|
97
|
+
/** The pointer left the editor and its overlay (not one for the other): nothing is hovered. */
|
|
98
|
+
const unhover = (event) => {
|
|
99
|
+
const to = event.relatedTarget;
|
|
100
|
+
if (to && (edytor.node?.contains(to) || edytor.overlay.layer?.contains(to)))
|
|
101
|
+
return;
|
|
102
|
+
hovered.clear();
|
|
103
|
+
};
|
|
104
|
+
return {
|
|
105
|
+
onEdytorAttached: ({ node }) => {
|
|
106
|
+
const layer = edytor.overlay.layer;
|
|
107
|
+
const offPointer = all(listen(node, 'pointerover', hover), listen(node, 'pointerleave', unhover), listen(layer, 'pointerover', hoverOverlay), listen(layer, 'pointerleave', unhover));
|
|
108
|
+
const offNear = measured ? edytor.overlay.add(measureNear) : undefined;
|
|
109
|
+
const { handle } = options;
|
|
110
|
+
const component = handle &&
|
|
111
|
+
mount(BlockHandles, {
|
|
159
112
|
target: layer,
|
|
160
|
-
props: { edytor, controller, blocks, near, hovered, handle
|
|
113
|
+
props: { edytor, controller, blocks, near, hovered, handle }
|
|
161
114
|
});
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
afterPaint = undefined;
|
|
170
|
-
gained = null;
|
|
115
|
+
return () => {
|
|
116
|
+
offPointer();
|
|
117
|
+
offNear?.();
|
|
118
|
+
clearTimeout(afterPaint);
|
|
119
|
+
afterPaint = undefined;
|
|
120
|
+
gained = null;
|
|
121
|
+
if (component)
|
|
171
122
|
void unmount(component);
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
}
|
|
199
|
-
};
|
|
123
|
+
};
|
|
124
|
+
},
|
|
125
|
+
onBlockAttached: ({ node, block }) => {
|
|
126
|
+
// A table's rows move by its own row menus, its cells never (`table.fits`).
|
|
127
|
+
if (!isDropTarget(edytor, block))
|
|
128
|
+
return;
|
|
129
|
+
const offDropTarget = controller.addDropTarget(node, block);
|
|
130
|
+
// A layout and its columns are drop targets but have no handle (as
|
|
131
|
+
// Notion): a block selection covering a layout stands for it.
|
|
132
|
+
const { facade } = edytor;
|
|
133
|
+
if (facade.isLayout(block.id) || facade.isLayoutItem(block.id))
|
|
134
|
+
return offDropTarget;
|
|
135
|
+
blocks.set(block.id, block);
|
|
136
|
+
if (measured)
|
|
137
|
+
edytor.overlay.invalidate();
|
|
138
|
+
else
|
|
139
|
+
near.add(block.id);
|
|
140
|
+
return () => {
|
|
141
|
+
offDropTarget();
|
|
142
|
+
if (block.node === node || block.node === undefined) {
|
|
143
|
+
blocks.delete(block.id);
|
|
144
|
+
near.delete(block.id);
|
|
145
|
+
hovered.delete(block.id);
|
|
146
|
+
}
|
|
147
|
+
};
|
|
148
|
+
}
|
|
200
149
|
};
|
|
201
|
-
handlePlugins.add(plugin);
|
|
202
|
-
return plugin;
|
|
203
150
|
};
|
|
204
|
-
/** Default handles for consumers that add the plugin directly. */
|
|
205
|
-
export const blockHandlesPlugin = createBlockHandlesPlugin();
|
|
@@ -21,13 +21,15 @@ export type DragPreview = {
|
|
|
21
21
|
/**
|
|
22
22
|
* The ghost of `nodes` (the dragged blocks' elements, in document order),
|
|
23
23
|
* grabbed at `pointer`: a copy of each block laid out at its own width (the
|
|
24
|
-
* widest of them;
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
24
|
+
* widest of them; `MAX_WIDTH` when none is laid out), scaled by `SCALE` from its top left, cut at `MAX_HEIGHT`.
|
|
25
|
+
* With `columns` (a table row's or column's cells, `table.drag`), the copies
|
|
26
|
+
* are laid out in a grid of columns that wide, row after row. Nothing is
|
|
27
|
+
* added (no card, background, shadow, opacity, fade or count badge): the
|
|
28
|
+
* blocks' own look. The pointer keeps its place on the first block (a
|
|
29
|
+
* handle is left of it: a transparent gutter keeps the offset positive,
|
|
30
|
+
* which every browser supports).
|
|
29
31
|
*/
|
|
30
32
|
export declare const dragPreview: (root: HTMLElement, nodes: HTMLElement[], pointer: {
|
|
31
33
|
clientX: number;
|
|
32
34
|
clientY: number;
|
|
33
|
-
}) => DragPreview;
|
|
35
|
+
}, columns?: number[]) => DragPreview;
|
|
@@ -149,31 +149,33 @@ const themed = (root, content) => {
|
|
|
149
149
|
scope.append(shell);
|
|
150
150
|
return scope;
|
|
151
151
|
};
|
|
152
|
-
/** The root's content width, capped (`MAX_WIDTH`). */
|
|
153
|
-
const contentWidth = (root) => {
|
|
154
|
-
const style = root.ownerDocument.defaultView?.getComputedStyle(root);
|
|
155
|
-
const padding = style ? parseFloat(style.paddingLeft) + parseFloat(style.paddingRight) : 0;
|
|
156
|
-
const width = root.clientWidth - (padding || 0);
|
|
157
|
-
return width > 0 ? Math.min(width, MAX_WIDTH) : MAX_WIDTH;
|
|
158
|
-
};
|
|
159
152
|
/**
|
|
160
153
|
* The ghost of `nodes` (the dragged blocks' elements, in document order),
|
|
161
154
|
* grabbed at `pointer`: a copy of each block laid out at its own width (the
|
|
162
|
-
* widest of them;
|
|
163
|
-
*
|
|
164
|
-
*
|
|
165
|
-
*
|
|
166
|
-
*
|
|
155
|
+
* widest of them; `MAX_WIDTH` when none is laid out), scaled by `SCALE` from its top left, cut at `MAX_HEIGHT`.
|
|
156
|
+
* With `columns` (a table row's or column's cells, `table.drag`), the copies
|
|
157
|
+
* are laid out in a grid of columns that wide, row after row. Nothing is
|
|
158
|
+
* added (no card, background, shadow, opacity, fade or count badge): the
|
|
159
|
+
* blocks' own look. The pointer keeps its place on the first block (a
|
|
160
|
+
* handle is left of it: a transparent gutter keeps the offset positive,
|
|
161
|
+
* which every browser supports).
|
|
167
162
|
*/
|
|
168
|
-
export const dragPreview = (root, nodes, pointer) => {
|
|
163
|
+
export const dragPreview = (root, nodes, pointer, columns) => {
|
|
169
164
|
const { ownerDocument: document } = root;
|
|
170
165
|
const first = nodes[0]?.getBoundingClientRect();
|
|
171
166
|
const dx = first ? pointer.clientX - first.left : 0;
|
|
172
167
|
const dy = first ? pointer.clientY - first.top : 0;
|
|
173
|
-
// Each block at its own width (a column's block at its column's), capped.
|
|
174
|
-
const own =
|
|
175
|
-
|
|
168
|
+
// Each block at its own width (a column's block at its column's), capped (the cap where none is laid out).
|
|
169
|
+
const own = columns
|
|
170
|
+
? columns.reduce((sum, w) => sum + w, 0)
|
|
171
|
+
: Math.max(0, ...nodes.map((node) => node.getBoundingClientRect().width));
|
|
172
|
+
const width = Math.min(own || MAX_WIDTH, MAX_WIDTH);
|
|
176
173
|
const list = document.createElement('div');
|
|
174
|
+
if (columns)
|
|
175
|
+
Object.assign(list.style, {
|
|
176
|
+
display: 'grid',
|
|
177
|
+
gridTemplateColumns: columns.map((w) => `${w}px`).join(' ')
|
|
178
|
+
});
|
|
177
179
|
let shown = 0;
|
|
178
180
|
for (const node of nodes) {
|
|
179
181
|
// Past the cap nothing more shows: the rest is not cloned.
|