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,28 +1,24 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { Snippet } from 'svelte';
|
|
2
2
|
import type { Attachment } from 'svelte/attachments';
|
|
3
3
|
import type { EditorCommand } from '../../plugins.js';
|
|
4
4
|
import type { Block } from '../../block/block.svelte.js';
|
|
5
5
|
import type { Edytor } from '../../edytor.svelte.js';
|
|
6
6
|
import { type KindRow } from '../../kinds.js';
|
|
7
|
-
import type { Popup } from '../../surface/popups.svelte.js';
|
|
8
|
-
import { type BlockMenuLabels, type PartialLabels } from '../../labels.js';
|
|
9
7
|
import { BLOCK_COLORS, type BlockColorField } from '../../block/colors.js';
|
|
10
|
-
import { type OptionAttributes } from '../chrome.js';
|
|
11
8
|
export type BlockMenuOptions = {
|
|
12
9
|
/** A link to the block, for "Copy link to block" (the row is hidden without it). */
|
|
13
10
|
linkTo?: (block: Block) => string;
|
|
14
11
|
/**
|
|
15
|
-
*
|
|
16
|
-
* the handle (mark your panel `data-edytor-block-menu` for placement
|
|
12
|
+
* The menu's markup and its words; it renders while `controller.isOpen`, placed beside
|
|
13
|
+
* the handle (mark your panel `data-edytor-block-menu` for placement;
|
|
14
|
+
* without it, nothing shows).
|
|
17
15
|
* The controller runs every action; `close()` returns the caret. Keep
|
|
18
|
-
* the
|
|
16
|
+
* the keyboard and the ARIA with its attachments: `{@attach
|
|
19
17
|
* controller.keys}` on the field that holds the keyboard, `{@attach
|
|
20
18
|
* controller.popup}` on the menu, `{...controller.option(index)}` on each
|
|
21
19
|
* row, `{@attach controller.flyoutMenu}` on an open flyout.
|
|
22
20
|
*/
|
|
23
21
|
menu?: Snippet<[BlockMenuController]>;
|
|
24
|
-
/** The words the menu shows (its actions, search field, headings), over the English ones. */
|
|
25
|
-
labels?: PartialLabels<'blockMenu'>;
|
|
26
22
|
};
|
|
27
23
|
export type BlockMenuAction = {
|
|
28
24
|
id: string;
|
|
@@ -41,7 +37,7 @@ export type BlockMenuAction = {
|
|
|
41
37
|
export type BlockMenuColor = {
|
|
42
38
|
/** `color.<name>` or `background.<name>` (`color.default`, `background.default`). */
|
|
43
39
|
id: string;
|
|
44
|
-
/** Its words in the
|
|
40
|
+
/** Its words in the view's labels (`colorText`, `colorBackground`): "Red text", "Red background", "Default text". */
|
|
45
41
|
label: string;
|
|
46
42
|
field: BlockColorField;
|
|
47
43
|
value: (typeof BLOCK_COLORS)[number] | null;
|
|
@@ -59,7 +55,7 @@ export declare const colorQueryRow: (row: BlockMenuColor) => {
|
|
|
59
55
|
* listed once a query names them (`searchOnly`): each paints the caret's
|
|
60
56
|
* block, as the block menu's Color does (`setBlockColor`).
|
|
61
57
|
*/
|
|
62
|
-
export declare const colorCommands: (edytor: Edytor
|
|
58
|
+
export declare const colorCommands: (edytor: Edytor) => EditorCommand[];
|
|
63
59
|
export declare class BlockMenuController {
|
|
64
60
|
#private;
|
|
65
61
|
private edytor;
|
|
@@ -75,13 +71,12 @@ export declare class BlockMenuController {
|
|
|
75
71
|
blocks: Block[];
|
|
76
72
|
anchor: HTMLElement | null;
|
|
77
73
|
query: string;
|
|
78
|
-
|
|
74
|
+
/** The keyboard's row. */
|
|
75
|
+
index: number;
|
|
79
76
|
/** The open flyout: the kinds (`turn`), the colours (`color`), or none. */
|
|
80
77
|
flyout: false | "color" | "turn";
|
|
81
78
|
/** The keyboard's row in the open flyout. */
|
|
82
79
|
flyoutIndex: number;
|
|
83
|
-
/** The words the menu shows (the plugin's `labels`): read them in a custom `menu`. */
|
|
84
|
-
readonly labels: BlockMenuLabels;
|
|
85
80
|
constructor(edytor: Edytor, options?: BlockMenuOptions);
|
|
86
81
|
get isOpen(): boolean;
|
|
87
82
|
/** The editor is readonly: the menu closes. */
|
|
@@ -91,8 +86,6 @@ export declare class BlockMenuController {
|
|
|
91
86
|
get flyoutId(): string;
|
|
92
87
|
/** A row's element id (page-unique; a flyout's with `flyout`), for `aria-activedescendant`. */
|
|
93
88
|
rowId: (row: BlockMenuAction | KindRow | BlockMenuColor, flyout?: boolean) => string;
|
|
94
|
-
/** Publish the open menu to the view's root (`edytor.popups`), or withdraw it with `null`. */
|
|
95
|
-
publish: (popup: Popup | null) => void;
|
|
96
89
|
/**
|
|
97
90
|
* The menu element (`{@attach controller.popup}`, the one with the rows):
|
|
98
91
|
* it takes the menu's id, its `menu` role and name unless it has its
|
|
@@ -102,9 +95,9 @@ export declare class BlockMenuController {
|
|
|
102
95
|
*/
|
|
103
96
|
popup: Attachment<HTMLElement>;
|
|
104
97
|
/**
|
|
105
|
-
* An open flyout (`{@attach controller.flyoutMenu}
|
|
106
|
-
*
|
|
107
|
-
* that keep the focus.
|
|
98
|
+
* An open flyout (`{@attach controller.flyoutMenu}`, named by your
|
|
99
|
+
* markup): its id, `menu` role, the overlay's placement beside the menu,
|
|
100
|
+
* and presses that keep the focus.
|
|
108
101
|
*/
|
|
109
102
|
flyoutMenu: Attachment<HTMLElement>;
|
|
110
103
|
/**
|
|
@@ -118,14 +111,14 @@ export declare class BlockMenuController {
|
|
|
118
111
|
*/
|
|
119
112
|
keys: Attachment<HTMLElement>;
|
|
120
113
|
/**
|
|
121
|
-
* The
|
|
122
|
-
* `flyout`):
|
|
114
|
+
* The attachment of the row at `index` (of the open flyout's rows with
|
|
115
|
+
* `flyout`): `{@attach controller.option(index)}` on its element.
|
|
123
116
|
* Its id, its role (`menuitem`, a switch's `menuitemcheckbox`, a colour's
|
|
124
117
|
* `menuitemradio` with its ✓ as `aria-checked`, a flyout's opener with
|
|
125
|
-
* `aria-haspopup` and `aria-expanded`)
|
|
126
|
-
*
|
|
118
|
+
* `aria-haspopup` and `aria-expanded`); the keyboard's row scrolls into
|
|
119
|
+
* view. Its look is the markup's (`index`, `flyoutIndex`).
|
|
127
120
|
*/
|
|
128
|
-
option: (index: number, flyout?: boolean) =>
|
|
121
|
+
option: (index: number, flyout?: boolean) => Attachment<HTMLElement>;
|
|
129
122
|
/** The search field typed in: the rows match `query`, the first one highlighted, no flyout open. */
|
|
130
123
|
search(query: string): void;
|
|
131
124
|
/** What Delete and Turn into act on: `blocks`, a list or a code block with its subtree (`selectedMembers`). */
|
|
@@ -143,11 +136,6 @@ export declare class BlockMenuController {
|
|
|
143
136
|
/** The row naming the open block. */
|
|
144
137
|
get currentKind(): KindRow | undefined;
|
|
145
138
|
get actions(): BlockMenuAction[];
|
|
146
|
-
/**
|
|
147
|
-
* With a query, the kinds it names join the list (Notion's "Turn into"
|
|
148
|
-
* results), matched as the slash menu matches them (`matchesQuery`).
|
|
149
|
-
*/
|
|
150
|
-
get matchingKinds(): KindRow[];
|
|
151
139
|
/**
|
|
152
140
|
* With a query, the colours it names join the list after the kinds
|
|
153
141
|
* (Notion's "Color" results: `red` lists "Red text" and "Red background"),
|
|
@@ -171,13 +159,13 @@ export declare class BlockMenuController {
|
|
|
171
159
|
* closes and the blocks stay selected, as in Notion.
|
|
172
160
|
*/
|
|
173
161
|
paint(row: BlockMenuColor): void;
|
|
174
|
-
duplicate(block: Block): void;
|
|
175
162
|
/**
|
|
176
|
-
* Duplicate
|
|
177
|
-
* block inside another of them is copied with it; a vetoed one is
|
|
178
|
-
* `dispatcher.each`); the copies are selected
|
|
163
|
+
* Duplicate `blocks` as one undo step, each copy after its block (a
|
|
164
|
+
* block inside another of them is copied with it; a vetoed one is
|
|
165
|
+
* skipped, `dispatcher.each`); the copies are selected (`select`), else
|
|
166
|
+
* the first copy takes the caret (refused: its block keeps it).
|
|
179
167
|
*/
|
|
180
|
-
|
|
168
|
+
duplicate(blocks: Block[], select: boolean): void;
|
|
181
169
|
/**
|
|
182
170
|
* Delete the open blocks' `members` (a list with its items) as the
|
|
183
171
|
* keyboard's block delete does (`deleteSelectedBlocks`):
|
|
@@ -193,10 +181,12 @@ export declare class BlockMenuController {
|
|
|
193
181
|
*/
|
|
194
182
|
get linked(): Block | undefined;
|
|
195
183
|
copyLink(): Promise<void>;
|
|
196
|
-
/**
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
184
|
+
/**
|
|
185
|
+
* Run a row of the menu or of its open flyout (a click; Enter runs the
|
|
186
|
+
* keyboard's): paint a colour, convert to a kind, open an action's
|
|
187
|
+
* flyout or run it.
|
|
188
|
+
*/
|
|
189
|
+
run(row: BlockMenuAction | KindRow | BlockMenuColor | undefined): void;
|
|
200
190
|
/**
|
|
201
191
|
* Open a flyout on its first row (keyboard or mouse): the "Turn into"
|
|
202
192
|
* kinds (default) or the colours; that flyout already open stays as it
|
|
@@ -1,10 +1,13 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { blockSelection } from '../../session/selection.js';
|
|
2
2
|
import { convertBlocks, convertedBlocks, convertibleKinds, convertToKind, matchesQuery, rowOf, turnCommands } from '../../kinds.js';
|
|
3
3
|
import { deleteSelectedBlocks, getSelectedBlocksInDocumentOrder, liftLayouts, outermost, shownText } from '../../selection/replaceSelection.js';
|
|
4
4
|
import { selectedMembers } from '../../selection/visibility.js';
|
|
5
|
-
import {
|
|
5
|
+
import { blockMenuEnglish, labelsOf } from '../../labels.js';
|
|
6
6
|
import { BLOCK_COLORS, colorable, setBlockColor } from '../../block/colors.js';
|
|
7
|
-
import { attribute, identify,
|
|
7
|
+
import { attribute, identify, keepFocus } from '../chrome.js';
|
|
8
|
+
import { holdKeys, listPopup, optionAttachment, stepRow } from '../list.svelte.js';
|
|
9
|
+
import { listen } from '../../utils/listen.js';
|
|
10
|
+
import { takeKeys } from '../../events/onFocus.js';
|
|
8
11
|
/** The Color flyout's rows in `labels`: the text colours, then the backgrounds, each from the default. */
|
|
9
12
|
const colorRows = (labels) => ['color', 'background'].flatMap((field) => [null, ...BLOCK_COLORS].map((value) => {
|
|
10
13
|
const name = labels.colors[value ?? 'default'] ?? value ?? 'default';
|
|
@@ -28,18 +31,18 @@ export const colorQueryRow = (row) => ({
|
|
|
28
31
|
* listed once a query names them (`searchOnly`): each paints the caret's
|
|
29
32
|
* block, as the block menu's Color does (`setBlockColor`).
|
|
30
33
|
*/
|
|
31
|
-
export const colorCommands = (edytor
|
|
34
|
+
export const colorCommands = (edytor) => colorRows(labelsOf(edytor, 'blockMenu', blockMenuEnglish)).map((row) => ({
|
|
32
35
|
id: row.id,
|
|
33
36
|
...colorQueryRow(row),
|
|
34
37
|
icon: 'A',
|
|
35
38
|
group: 'Color',
|
|
36
39
|
searchOnly: true,
|
|
37
40
|
isEnabled: (view = edytor) => {
|
|
38
|
-
const block = view.selection.
|
|
41
|
+
const block = view.selection.textRange().startText?.parent;
|
|
39
42
|
return Boolean(block && colorable(block));
|
|
40
43
|
},
|
|
41
44
|
run: () => {
|
|
42
|
-
const block = edytor.selection.
|
|
45
|
+
const block = edytor.selection.textRange().startText?.parent;
|
|
43
46
|
if (!block || !colorable(block))
|
|
44
47
|
return false;
|
|
45
48
|
if (setBlockColor(edytor, [block], row.field, row.value))
|
|
@@ -62,20 +65,25 @@ export class BlockMenuController {
|
|
|
62
65
|
blocks = $state([]);
|
|
63
66
|
anchor = null;
|
|
64
67
|
query = $state('');
|
|
65
|
-
|
|
68
|
+
/** The keyboard's row. */
|
|
69
|
+
index = $state(0);
|
|
66
70
|
/** The open flyout: the kinds (`turn`), the colours (`color`), or none. */
|
|
67
71
|
flyout = $state(false);
|
|
68
72
|
/** The keyboard's row in the open flyout. */
|
|
69
73
|
flyoutIndex = $state(0);
|
|
70
|
-
/** The words the
|
|
71
|
-
labels;
|
|
72
|
-
/** The Color flyout's rows, in
|
|
74
|
+
/** The actions' words: the view's `blockMenu` labels. */
|
|
75
|
+
#labels;
|
|
76
|
+
/** The Color flyout's rows, in those words. */
|
|
73
77
|
#colors;
|
|
74
78
|
constructor(edytor, options = {}) {
|
|
75
79
|
this.edytor = edytor;
|
|
76
80
|
this.options = options;
|
|
77
|
-
this
|
|
78
|
-
this.#colors = colorRows(this
|
|
81
|
+
this.#labels = labelsOf(edytor, 'blockMenu', blockMenuEnglish);
|
|
82
|
+
this.#colors = colorRows(this.#labels);
|
|
83
|
+
this.popup = listPopup(edytor, 'block-menu', 'menu', () => {
|
|
84
|
+
const { block } = this;
|
|
85
|
+
return block && { opener: { block: block.id, control: 'grip' } };
|
|
86
|
+
});
|
|
79
87
|
}
|
|
80
88
|
get isOpen() {
|
|
81
89
|
return this.block !== null;
|
|
@@ -93,8 +101,6 @@ export class BlockMenuController {
|
|
|
93
101
|
}
|
|
94
102
|
/** A row's element id (page-unique; a flyout's with `flyout`), for `aria-activedescendant`. */
|
|
95
103
|
rowId = (row, flyout = false) => this.edytor.popups.idOf(`block-menu-${flyout ? 'flyout-' : ''}${'field' in row ? 'color-' : 'value' in row ? 'kind-' : ''}${row.id}`);
|
|
96
|
-
/** Publish the open menu to the view's root (`edytor.popups`), or withdraw it with `null`. */
|
|
97
|
-
publish = (popup) => this.edytor.popups.set('block-menu', popup);
|
|
98
104
|
/**
|
|
99
105
|
* The menu element (`{@attach controller.popup}`, the one with the rows):
|
|
100
106
|
* it takes the menu's id, its `menu` role and name unless it has its
|
|
@@ -102,33 +108,16 @@ export class BlockMenuController {
|
|
|
102
108
|
* and is published to the view's root (`edytor.popups`) while it is in
|
|
103
109
|
* the page, the grip that opened it told so.
|
|
104
110
|
*/
|
|
105
|
-
popup
|
|
106
|
-
identify(node, this.menuId, 'menu', this.labels.menu);
|
|
107
|
-
node.addEventListener('mousedown', keepFocus);
|
|
108
|
-
$effect(() => {
|
|
109
|
-
const { block } = this;
|
|
110
|
-
if (!block)
|
|
111
|
-
return;
|
|
112
|
-
this.publish({
|
|
113
|
-
id: this.menuId,
|
|
114
|
-
haspopup: 'menu',
|
|
115
|
-
opener: { block: block.id, control: 'grip' }
|
|
116
|
-
});
|
|
117
|
-
return () => this.publish(null);
|
|
118
|
-
});
|
|
119
|
-
return () => node.removeEventListener('mousedown', keepFocus);
|
|
120
|
-
};
|
|
111
|
+
popup;
|
|
121
112
|
/**
|
|
122
|
-
* An open flyout (`{@attach controller.flyoutMenu}
|
|
123
|
-
*
|
|
124
|
-
* that keep the focus.
|
|
113
|
+
* An open flyout (`{@attach controller.flyoutMenu}`, named by your
|
|
114
|
+
* markup): its id, `menu` role, the overlay's placement beside the menu,
|
|
115
|
+
* and presses that keep the focus.
|
|
125
116
|
*/
|
|
126
117
|
flyoutMenu = (node) => {
|
|
127
|
-
|
|
128
|
-
identify(node, this.flyoutId, 'menu', untrack(() => this.flyout) === 'color' ? color : turnInto);
|
|
118
|
+
identify(node, this.flyoutId, 'menu');
|
|
129
119
|
node.setAttribute('data-edytor-block-menu-flyout', '');
|
|
130
|
-
node
|
|
131
|
-
return () => node.removeEventListener('mousedown', keepFocus);
|
|
120
|
+
return listen(node, 'mousedown', keepFocus);
|
|
132
121
|
};
|
|
133
122
|
/**
|
|
134
123
|
* The element that holds the keyboard (`{@attach controller.keys}`: the
|
|
@@ -140,52 +129,40 @@ export class BlockMenuController {
|
|
|
140
129
|
* `aria-activedescendant`, once that row is in the page).
|
|
141
130
|
*/
|
|
142
131
|
keys = (node) => {
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
node.focus({ preventScroll: true });
|
|
146
|
-
});
|
|
147
|
-
node.addEventListener('keydown', this.#keydown);
|
|
148
|
-
$effect(() => {
|
|
132
|
+
$effect(() => attribute(node, 'aria-controls', this.flyout ? this.flyoutId : this.menuId));
|
|
133
|
+
return holdKeys(node, this.#keydown, () => {
|
|
149
134
|
const flyout = Boolean(this.flyout);
|
|
150
|
-
const row = flyout ? this.flyoutRows[this.flyoutIndex] : this.rows[this.
|
|
151
|
-
|
|
152
|
-
if (!namesRows(node))
|
|
153
|
-
return;
|
|
154
|
-
attribute(node, 'aria-activedescendant', inPage(node, row && this.rowId(row, flyout)));
|
|
135
|
+
const row = flyout ? this.flyoutRows[this.flyoutIndex] : this.rows[this.index];
|
|
136
|
+
return row && this.rowId(row, flyout);
|
|
155
137
|
});
|
|
156
|
-
return () => node.removeEventListener('keydown', this.#keydown);
|
|
157
138
|
};
|
|
158
139
|
/**
|
|
159
|
-
* The
|
|
160
|
-
* `flyout`):
|
|
140
|
+
* The attachment of the row at `index` (of the open flyout's rows with
|
|
141
|
+
* `flyout`): `{@attach controller.option(index)}` on its element.
|
|
161
142
|
* Its id, its role (`menuitem`, a switch's `menuitemcheckbox`, a colour's
|
|
162
143
|
* `menuitemradio` with its ✓ as `aria-checked`, a flyout's opener with
|
|
163
|
-
* `aria-haspopup` and `aria-expanded`)
|
|
164
|
-
*
|
|
144
|
+
* `aria-haspopup` and `aria-expanded`); the keyboard's row scrolls into
|
|
145
|
+
* view. Its look is the markup's (`index`, `flyoutIndex`).
|
|
165
146
|
*/
|
|
166
147
|
option = (index, flyout = false) => {
|
|
167
148
|
const row = (flyout ? this.flyoutRows : this.rows)[index];
|
|
168
|
-
|
|
169
|
-
const
|
|
149
|
+
// Only an action has `checked` and `submenu`, only a colour `field`.
|
|
150
|
+
const { checked, submenu } = (row ?? {});
|
|
151
|
+
const color = row && 'field' in row;
|
|
152
|
+
const on = color ? this.isCurrentColor(row) : checked;
|
|
153
|
+
return optionAttachment(row
|
|
170
154
|
? this.rowId(row, flyout)
|
|
171
|
-
: this.edytor.popups.idOf(`block-menu-${flyout ? 'flyout-' : ''}${index}`)
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
'aria-
|
|
175
|
-
});
|
|
176
|
-
if (!row || 'value' in row)
|
|
177
|
-
return optionAttributes(id, 'menuitem', selected);
|
|
178
|
-
return optionAttributes(id, row.checked === undefined ? 'menuitem' : 'menuitemcheckbox', selected, {
|
|
179
|
-
...(row.checked === undefined ? {} : { 'aria-checked': row.checked }),
|
|
180
|
-
...(row.submenu
|
|
181
|
-
? { 'aria-haspopup': 'menu', 'aria-expanded': this.flyout === row.submenu }
|
|
155
|
+
: this.edytor.popups.idOf(`block-menu-${flyout ? 'flyout-' : ''}${index}`), color ? 'menuitemradio' : on === undefined ? 'menuitem' : 'menuitemcheckbox', (flyout ? this.flyoutIndex : this.index) === index, {
|
|
156
|
+
...(on === undefined ? {} : { 'aria-checked': on }),
|
|
157
|
+
...(submenu
|
|
158
|
+
? { 'aria-haspopup': 'menu', 'aria-expanded': this.flyout === submenu }
|
|
182
159
|
: {})
|
|
183
160
|
});
|
|
184
161
|
};
|
|
185
162
|
/** The search field typed in: the rows match `query`, the first one highlighted, no flyout open. */
|
|
186
163
|
search(query) {
|
|
187
164
|
this.query = query;
|
|
188
|
-
this.
|
|
165
|
+
this.index = 0;
|
|
189
166
|
this.flyout = false;
|
|
190
167
|
}
|
|
191
168
|
/** The menu's keys, on the element that holds the keyboard (`keys`). */
|
|
@@ -193,44 +170,33 @@ export class BlockMenuController {
|
|
|
193
170
|
if (event.defaultPrevented || event.isComposing)
|
|
194
171
|
return;
|
|
195
172
|
const { key } = event;
|
|
196
|
-
const rows = this
|
|
197
|
-
const
|
|
198
|
-
const arrow = key === 'ArrowDown' || key === 'ArrowUp';
|
|
199
|
-
/** One arrow step through `length` rows, wrapping. */
|
|
200
|
-
const step = (index, length) => (index + (key === 'ArrowDown' ? 1 : length - 1)) % length;
|
|
201
|
-
const row = rows[this.selectedIndex];
|
|
173
|
+
const { flyout, rows } = this;
|
|
174
|
+
const row = rows[this.index];
|
|
202
175
|
const submenu = row && 'submenu' in row ? row.submenu : undefined;
|
|
176
|
+
const to = stepRow(key, this.index, rows.length, { ends: true });
|
|
203
177
|
if (key === 'Escape') {
|
|
204
|
-
if (
|
|
178
|
+
if (flyout)
|
|
205
179
|
this.flyout = false;
|
|
206
180
|
else
|
|
207
181
|
this.close();
|
|
208
182
|
}
|
|
209
|
-
else if (
|
|
183
|
+
else if (flyout && (key === 'ArrowDown' || key === 'ArrowUp'))
|
|
210
184
|
// In a flyout, the arrows walk its rows.
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
}
|
|
215
|
-
else if (this.flyout && key === 'Enter')
|
|
216
|
-
this.runFlyout();
|
|
185
|
+
this.flyoutIndex = stepRow(key, this.flyoutIndex, this.flyoutRows.length);
|
|
186
|
+
else if (flyout && key === 'Enter')
|
|
187
|
+
this.run(this.flyoutRows[this.flyoutIndex]);
|
|
217
188
|
else if (key === 'Delete' && !this.query)
|
|
218
189
|
this.remove();
|
|
219
|
-
else if (
|
|
220
|
-
|
|
221
|
-
this.selectedIndex = step(this.selectedIndex, count);
|
|
222
|
-
this.flyout = false;
|
|
223
|
-
}
|
|
224
|
-
else if ((key === 'Home' || key === 'End') && count) {
|
|
225
|
-
this.selectedIndex = key === 'Home' ? 0 : count - 1;
|
|
190
|
+
else if (to !== undefined) {
|
|
191
|
+
this.index = to;
|
|
226
192
|
this.flyout = false;
|
|
227
193
|
}
|
|
228
194
|
else if (key === 'ArrowRight' && submenu)
|
|
229
195
|
this.openFlyout(submenu);
|
|
230
|
-
else if (key === 'ArrowLeft' &&
|
|
196
|
+
else if (key === 'ArrowLeft' && flyout)
|
|
231
197
|
this.flyout = false;
|
|
232
198
|
else if (key === 'Enter')
|
|
233
|
-
this.
|
|
199
|
+
this.run(row);
|
|
234
200
|
else
|
|
235
201
|
return;
|
|
236
202
|
event.preventDefault();
|
|
@@ -266,38 +232,34 @@ export class BlockMenuController {
|
|
|
266
232
|
return rowOf(this.edytor, this.block);
|
|
267
233
|
}
|
|
268
234
|
get actions() {
|
|
269
|
-
const { block, blocks } = this;
|
|
235
|
+
const { block, blocks, edytor } = this;
|
|
236
|
+
const labels = this.#labels;
|
|
270
237
|
if (!block)
|
|
271
238
|
return [];
|
|
272
|
-
const
|
|
273
|
-
|
|
274
|
-
const
|
|
275
|
-
|
|
276
|
-
|
|
239
|
+
const [mod, shift] = edytor.keymap.isMac ? ['⌘', '⇧'] : [`${labels.ctrl}+`, `${labels.shift}+`];
|
|
240
|
+
/** An action row, its icon named by its id. */
|
|
241
|
+
const action = (id, label, more) => ({
|
|
242
|
+
id,
|
|
243
|
+
label,
|
|
244
|
+
icon: `action.${id}`,
|
|
245
|
+
...more
|
|
246
|
+
});
|
|
247
|
+
const move = (direction, label, arrow) => action(direction, label, {
|
|
248
|
+
hint: `${mod}${shift}${arrow}`,
|
|
249
|
+
isEnabled: () => edytor.canMove({ blocks: outermost(blocks), direction }),
|
|
250
|
+
run: () => this.move(direction)
|
|
251
|
+
});
|
|
277
252
|
const all = [
|
|
278
|
-
{
|
|
279
|
-
id: 'turn',
|
|
280
|
-
label: labels.turnInto,
|
|
281
|
-
icon: 'action.turn',
|
|
253
|
+
action('turn', labels.turnInto, {
|
|
282
254
|
submenu: 'turn',
|
|
283
255
|
isEnabled: () => convertedBlocks(this.members).length > 0
|
|
284
|
-
},
|
|
285
|
-
{
|
|
286
|
-
id: 'color',
|
|
287
|
-
label: labels.color,
|
|
288
|
-
icon: 'action.color',
|
|
256
|
+
}),
|
|
257
|
+
action('color', labels.color, {
|
|
289
258
|
submenu: 'color',
|
|
290
259
|
isEnabled: () => this.colorable.length > 0
|
|
291
|
-
},
|
|
260
|
+
}),
|
|
292
261
|
...(this.options.linkTo && this.linked
|
|
293
|
-
? [
|
|
294
|
-
{
|
|
295
|
-
id: 'link',
|
|
296
|
-
label: labels.copyLink,
|
|
297
|
-
icon: 'action.link',
|
|
298
|
-
run: () => this.copyLink()
|
|
299
|
-
}
|
|
300
|
-
]
|
|
262
|
+
? [action('link', labels.copyLink, { run: () => this.copyLink() })]
|
|
301
263
|
: []),
|
|
302
264
|
// The kind's own rows, on its block alone (a table's rows and switches). A
|
|
303
265
|
// switch keeps the menu open; any other row closes it, the caret its
|
|
@@ -315,37 +277,17 @@ export class BlockMenuController {
|
|
|
315
277
|
: row.run
|
|
316
278
|
}))
|
|
317
279
|
: []),
|
|
318
|
-
{
|
|
319
|
-
id: 'duplicate',
|
|
320
|
-
label: labels.duplicate,
|
|
321
|
-
icon: 'action.duplicate',
|
|
280
|
+
action('duplicate', labels.duplicate, {
|
|
322
281
|
hint: `${mod}D`,
|
|
323
|
-
run: () => (blocks.length > 1
|
|
324
|
-
},
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
icon: 'action.up',
|
|
329
|
-
hint: `${mod}${shift}↑`,
|
|
330
|
-
isEnabled: canMove('up'),
|
|
331
|
-
run: () => this.move('up')
|
|
332
|
-
},
|
|
333
|
-
{
|
|
334
|
-
id: 'down',
|
|
335
|
-
label: labels.moveDown,
|
|
336
|
-
icon: 'action.down',
|
|
337
|
-
hint: `${mod}${shift}↓`,
|
|
338
|
-
isEnabled: canMove('down'),
|
|
339
|
-
run: () => this.move('down')
|
|
340
|
-
},
|
|
341
|
-
{
|
|
342
|
-
id: 'delete',
|
|
343
|
-
label: labels.delete,
|
|
344
|
-
icon: 'action.delete',
|
|
282
|
+
run: () => this.duplicate(blocks, blocks.length > 1)
|
|
283
|
+
}),
|
|
284
|
+
move('up', labels.moveUp, '↑'),
|
|
285
|
+
move('down', labels.moveDown, '↓'),
|
|
286
|
+
action('delete', labels.delete, {
|
|
345
287
|
hint: labels.deleteKey,
|
|
346
288
|
danger: true,
|
|
347
289
|
run: () => this.remove()
|
|
348
|
-
}
|
|
290
|
+
})
|
|
349
291
|
];
|
|
350
292
|
return all.filter((action) => matchesQuery(action, this.query) && action.isEnabled?.() !== false);
|
|
351
293
|
}
|
|
@@ -353,12 +295,13 @@ export class BlockMenuController {
|
|
|
353
295
|
* With a query, the kinds it names join the list (Notion's "Turn into"
|
|
354
296
|
* results), matched as the slash menu matches them (`matchesQuery`).
|
|
355
297
|
*/
|
|
356
|
-
get matchingKinds() {
|
|
298
|
+
get #matchingKinds() {
|
|
357
299
|
if (!this.query.trim())
|
|
358
300
|
return [];
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
301
|
+
const kinds = convertedBlocks(this.members).length
|
|
302
|
+
? this.kinds
|
|
303
|
+
: turnCommands(this.edytor, this.blocks);
|
|
304
|
+
return kinds.filter((kind) => matchesQuery(kind, this.query));
|
|
362
305
|
}
|
|
363
306
|
/**
|
|
364
307
|
* With a query, the colours it names join the list after the kinds
|
|
@@ -372,7 +315,7 @@ export class BlockMenuController {
|
|
|
372
315
|
}
|
|
373
316
|
/** Every keyboard row: actions, then the matching kinds, then the matching colours. */
|
|
374
317
|
get rows() {
|
|
375
|
-
return [...this.actions, ...this
|
|
318
|
+
return [...this.actions, ...this.#matchingKinds, ...this.matchingColors];
|
|
376
319
|
}
|
|
377
320
|
open(block, anchor) {
|
|
378
321
|
const selected = getSelectedBlocksInDocumentOrder(this.edytor);
|
|
@@ -380,7 +323,7 @@ export class BlockMenuController {
|
|
|
380
323
|
this.block = block;
|
|
381
324
|
this.anchor = anchor;
|
|
382
325
|
this.query = '';
|
|
383
|
-
this.
|
|
326
|
+
this.index = 0;
|
|
384
327
|
this.flyout = false;
|
|
385
328
|
this.flyoutIndex = 0;
|
|
386
329
|
}
|
|
@@ -396,7 +339,7 @@ export class BlockMenuController {
|
|
|
396
339
|
move(direction) {
|
|
397
340
|
if (!this.blocks.length)
|
|
398
341
|
return;
|
|
399
|
-
this.edytor.
|
|
342
|
+
this.edytor.move({ blocks: outermost(this.blocks), direction });
|
|
400
343
|
this.close();
|
|
401
344
|
}
|
|
402
345
|
/**
|
|
@@ -432,26 +375,24 @@ export class BlockMenuController {
|
|
|
432
375
|
setBlockColor(this.edytor, painted, row.field, row.value);
|
|
433
376
|
const live = blocks.flatMap((block) => this.edytor.idToBlock.get(block.id) ?? []);
|
|
434
377
|
if (live.length)
|
|
435
|
-
this.edytor.selection.
|
|
378
|
+
this.edytor.selection.select(blockSelection(live.map((block) => block.id)));
|
|
436
379
|
this.focus();
|
|
437
380
|
}
|
|
438
|
-
duplicate(block) {
|
|
439
|
-
const copy = block.duplicateBlock();
|
|
440
|
-
this.close(false);
|
|
441
|
-
this.caret(copy ?? block);
|
|
442
|
-
}
|
|
443
381
|
/**
|
|
444
|
-
* Duplicate
|
|
445
|
-
* block inside another of them is copied with it; a vetoed one is
|
|
446
|
-
* `dispatcher.each`); the copies are selected
|
|
382
|
+
* Duplicate `blocks` as one undo step, each copy after its block (a
|
|
383
|
+
* block inside another of them is copied with it; a vetoed one is
|
|
384
|
+
* skipped, `dispatcher.each`); the copies are selected (`select`), else
|
|
385
|
+
* the first copy takes the caret (refused: its block keeps it).
|
|
447
386
|
*/
|
|
448
|
-
|
|
387
|
+
duplicate(blocks, select) {
|
|
449
388
|
const copies = this.edytor.dispatcher
|
|
450
|
-
.each('
|
|
451
|
-
.
|
|
389
|
+
.each('duplicateBlock', outermost(blocks), (block) => this.edytor.duplicateBlock(block.id))
|
|
390
|
+
.flatMap((copy) => (copy?.status === 'applied' ? copy.ids : []));
|
|
452
391
|
this.close(false);
|
|
453
|
-
if (
|
|
454
|
-
this.edytor.
|
|
392
|
+
if (!select)
|
|
393
|
+
this.caret(this.edytor.idToBlock.get(copies[0] ?? '') ?? blocks[0]);
|
|
394
|
+
else if (copies.length)
|
|
395
|
+
this.edytor.selection.select(blockSelection(copies));
|
|
455
396
|
}
|
|
456
397
|
/**
|
|
457
398
|
* Delete the open blocks' `members` (a list with its items) as the
|
|
@@ -485,30 +426,23 @@ export class BlockMenuController {
|
|
|
485
426
|
await navigator.clipboard?.writeText(options.linkTo(linked));
|
|
486
427
|
this.close();
|
|
487
428
|
}
|
|
488
|
-
/**
|
|
489
|
-
|
|
490
|
-
|
|
429
|
+
/**
|
|
430
|
+
* Run a row of the menu or of its open flyout (a click; Enter runs the
|
|
431
|
+
* keyboard's): paint a colour, convert to a kind, open an action's
|
|
432
|
+
* flyout or run it.
|
|
433
|
+
*/
|
|
434
|
+
run(row) {
|
|
491
435
|
if (!row)
|
|
492
436
|
return;
|
|
493
437
|
if ('field' in row)
|
|
494
|
-
|
|
495
|
-
if ('value' in row)
|
|
496
|
-
|
|
497
|
-
if (row.submenu)
|
|
438
|
+
this.paint(row);
|
|
439
|
+
else if ('value' in row)
|
|
440
|
+
this.turnInto(row);
|
|
441
|
+
else if (row.submenu)
|
|
498
442
|
this.openFlyout(row.submenu);
|
|
499
443
|
else
|
|
500
444
|
row.run?.();
|
|
501
445
|
}
|
|
502
|
-
/** Run the open flyout's keyboard row: convert to its kind, or paint its colour. */
|
|
503
|
-
runFlyout() {
|
|
504
|
-
const row = this.flyoutRows[this.flyoutIndex];
|
|
505
|
-
if (!row)
|
|
506
|
-
return;
|
|
507
|
-
if ('field' in row)
|
|
508
|
-
this.paint(row);
|
|
509
|
-
else
|
|
510
|
-
this.turnInto(row);
|
|
511
|
-
}
|
|
512
446
|
/**
|
|
513
447
|
* Open a flyout on its first row (keyboard or mouse): the "Turn into"
|
|
514
448
|
* kinds (default) or the colours; that flyout already open stays as it
|
|
@@ -524,7 +458,7 @@ export class BlockMenuController {
|
|
|
524
458
|
restore(blocks) {
|
|
525
459
|
const live = blocks.flatMap((block) => this.edytor.idToBlock.get(block.id) ?? []);
|
|
526
460
|
if (live.length > 1) {
|
|
527
|
-
this.edytor.selection.
|
|
461
|
+
this.edytor.selection.select(blockSelection(live.map((block) => block.id)));
|
|
528
462
|
this.focus();
|
|
529
463
|
}
|
|
530
464
|
else if (live[0]?.node?.isConnected)
|
|
@@ -541,12 +475,11 @@ export class BlockMenuController {
|
|
|
541
475
|
if (text || !block?.isInTree)
|
|
542
476
|
this.edytor.dispatcher.caret(text, 0);
|
|
543
477
|
else
|
|
544
|
-
this.edytor.selection.
|
|
478
|
+
this.edytor.selection.select(blockSelection([block.id]));
|
|
545
479
|
this.focus();
|
|
546
480
|
}
|
|
547
481
|
/** Back to the editor: its own focus, not a user gesture (as its selection writes). */
|
|
548
482
|
focus() {
|
|
549
|
-
this.edytor
|
|
550
|
-
this.edytor.node?.focus({ preventScroll: true });
|
|
483
|
+
takeKeys(this.edytor);
|
|
551
484
|
}
|
|
552
485
|
}
|