edytor 1.0.0-rc.2 → 1.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 +65 -25
- package/dist/block/block.svelte.d.ts +10 -85
- package/dist/block/block.svelte.js +47 -141
- 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 +8 -10
- package/dist/block/inlineBlock.svelte.js +14 -22
- package/dist/clipboard/createClipboardFragment.js +22 -64
- package/dist/clipboard/fragmentData.js +17 -42
- package/dist/clipboard/htmlFlow.d.ts +6 -1
- package/dist/clipboard/htmlFlow.js +26 -13
- 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 +22 -17
- package/dist/cloudflare/DocumentRoom.js +10 -5
- package/dist/cloudflare/index.d.ts +1 -1
- package/dist/cloudflare/index.js +1 -1
- 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 +20 -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 +9 -30
- package/dist/cloudflare/room/storage.js +52 -104
- 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/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 +160 -119
- package/dist/components/Block.svelte.d.ts +8 -3
- package/dist/components/Content.svelte +91 -44
- package/dist/components/CustomMark.svelte +46 -0
- package/dist/components/CustomMark.svelte.d.ts +11 -0
- package/dist/components/Edytor.svelte +80 -95
- package/dist/components/Edytor.svelte.d.ts +8 -12
- package/dist/components/InlineBlock.svelte +4 -9
- package/dist/components/Mark.svelte +46 -35
- package/dist/components/Mark.svelte.d.ts +7 -0
- 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 +48 -14
- 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 +8 -13
- package/dist/crdt/data.js +30 -70
- 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 +1 -5
- package/dist/crdt/doc/reads.js +38 -49
- 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 +24 -115
- package/dist/crdt/document.js +207 -305
- package/dist/crdt/edytor-doc.d.ts +671 -90
- package/dist/crdt/edytor-doc.js +73 -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 +26 -85
- package/dist/crdt/index.js +21 -47
- package/dist/crdt/operations.d.ts +24 -33
- package/dist/crdt/operations.js +7 -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/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/{plugins/blockHandles → dnd}/autoScroll.d.ts +2 -1
- package/dist/{plugins/blockHandles → dnd}/autoScroll.js +3 -3
- 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 +34 -64
- package/dist/edytor.svelte.js +118 -180
- package/dist/events/beforeInputCommands.d.ts +6 -11
- package/dist/events/beforeInputCommands.js +189 -184
- 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 +33 -72
- package/dist/events/onFocus.d.ts +9 -4
- package/dist/events/onFocus.js +92 -72
- 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 +13 -1
- package/dist/events/onPaste.js +46 -76
- package/dist/index.d.ts +10 -13
- package/dist/index.js +3 -3
- package/dist/kinds.d.ts +4 -6
- package/dist/kinds.js +28 -27
- package/dist/labels.d.ts +91 -314
- package/dist/labels.js +180 -396
- 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 -151
- package/dist/plugins/blockHandles/BlockHandle.svelte.d.ts +2 -2
- package/dist/plugins/blockHandles/BlockHandleController.svelte.d.ts +63 -97
- package/dist/plugins/blockHandles/BlockHandleController.svelte.js +247 -268
- package/dist/plugins/blockHandles/BlockHandles.svelte +46 -29
- package/dist/plugins/blockHandles/BlockHandles.svelte.d.ts +2 -2
- package/dist/plugins/blockHandles/blockHandlesPlugin.d.ts +29 -23
- package/dist/plugins/blockHandles/blockHandlesPlugin.js +130 -162
- package/dist/plugins/blockHandles/dragPreview.d.ts +8 -6
- package/dist/plugins/blockHandles/dragPreview.js +20 -17
- package/dist/plugins/blockHandles/dropIndicator.js +52 -60
- package/dist/plugins/blockHandles/geometry.d.ts +46 -1
- package/dist/plugins/blockHandles/geometry.js +51 -4
- package/dist/plugins/blockMenu/BlockMenuController.svelte.d.ts +59 -28
- package/dist/plugins/blockMenu/BlockMenuController.svelte.js +180 -105
- 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 +79 -0
- package/dist/plugins/chrome.js +87 -0
- package/dist/plugins/code/CodeHeader.svelte +12 -58
- package/dist/plugins/code/CodeHeader.svelte.d.ts +1 -0
- package/dist/plugins/code/CodePlugin.svelte +75 -56
- package/dist/plugins/code/CodePlugin.svelte.d.ts +0 -2
- package/dist/plugins/code/LanguageMenu.svelte +25 -0
- package/dist/plugins/code/LanguageMenu.svelte.d.ts +9 -0
- package/dist/plugins/code/code.css +5 -100
- package/dist/plugins/code/header.svelte.d.ts +47 -0
- package/dist/plugins/code/header.svelte.js +141 -0
- package/dist/plugins/code/languageMenu.svelte.d.ts +84 -0
- package/dist/plugins/code/languageMenu.svelte.js +199 -0
- package/dist/plugins/code/languages.d.ts +21 -10
- package/dist/plugins/code/languages.js +39 -126
- package/dist/plugins/columns/ColumnResize.svelte +13 -25
- 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/resize.svelte.d.ts +14 -51
- package/dist/plugins/columns/resize.svelte.js +70 -164
- 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 -430
- package/dist/plugins/comments/CommentsSidebar.svelte.d.ts +6 -7
- package/dist/plugins/comments/commentsPlugin.d.ts +31 -10
- package/dist/plugins/comments/commentsPlugin.js +12 -10
- package/dist/plugins/equation/EquationEditor.svelte +18 -129
- package/dist/plugins/equation/EquationEditor.svelte.d.ts +2 -1
- package/dist/plugins/equation/EquationPlugin.svelte +123 -168
- package/dist/plugins/equation/EquationPlugin.svelte.d.ts +5 -3
- package/dist/plugins/equation/EquationView.svelte +20 -11
- package/dist/plugins/equation/equation.svelte.d.ts +74 -36
- package/dist/plugins/equation/equation.svelte.js +74 -66
- package/dist/plugins/equation/importUrl.d.ts +6 -0
- package/dist/plugins/equation/importUrl.js +6 -0
- package/dist/plugins/equation/katex.d.ts +8 -0
- package/dist/plugins/equation/katex.js +77 -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 +5 -151
- package/dist/plugins/image/ImagePlugin.svelte +49 -117
- package/dist/plugins/image/ImagePlugin.svelte.d.ts +1 -24
- 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 -57
- package/dist/plugins/image/controls.svelte.js +51 -174
- 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 +39 -24
- package/dist/plugins/index.js +30 -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 +6 -5
- package/dist/plugins/marquee/MarqueeBox.svelte +15 -0
- package/dist/plugins/marquee/MarqueeBox.svelte.d.ts +9 -0
- package/dist/plugins/marquee/MarqueeController.svelte.d.ts +46 -0
- package/dist/plugins/marquee/MarqueeController.svelte.js +243 -0
- package/dist/plugins/marquee/marquee.d.ts +33 -0
- package/dist/plugins/marquee/marquee.js +89 -0
- package/dist/plugins/marquee/marqueePlugin.d.ts +32 -0
- package/dist/plugins/marquee/marqueePlugin.js +68 -0
- package/dist/plugins/media/AudioPlugin.svelte +3 -88
- package/dist/plugins/media/AudioPlugin.svelte.d.ts +1 -4
- package/dist/plugins/media/BookmarkPlugin.svelte +124 -112
- package/dist/plugins/media/BookmarkPlugin.svelte.d.ts +20 -7
- package/dist/plugins/media/EmbedPlugin.svelte +93 -77
- package/dist/plugins/media/EmbedPlugin.svelte.d.ts +21 -9
- package/dist/plugins/media/EmptySlot.svelte +44 -0
- package/dist/plugins/media/EmptySlot.svelte.d.ts +25 -0
- package/dist/plugins/media/FilePlugin.svelte +35 -111
- package/dist/plugins/media/FilePlugin.svelte.d.ts +12 -4
- package/dist/plugins/media/MediaEmpty.svelte +55 -112
- package/dist/plugins/media/MediaEmpty.svelte.d.ts +26 -10
- package/dist/plugins/media/SourceBlock.svelte +164 -0
- package/dist/plugins/media/SourceBlock.svelte.d.ts +33 -0
- package/dist/plugins/media/VideoPlugin.svelte +4 -97
- package/dist/plugins/media/VideoPlugin.svelte.d.ts +2 -5
- package/dist/plugins/media/empty.svelte.d.ts +69 -0
- package/dist/plugins/media/empty.svelte.js +111 -0
- package/dist/plugins/media/media.d.ts +93 -30
- package/dist/plugins/media/media.js +79 -86
- package/dist/plugins/media/urlPaste.svelte.d.ts +9 -32
- package/dist/plugins/media/urlPaste.svelte.js +46 -75
- package/dist/plugins/mention/MentionPlugin.svelte +47 -124
- package/dist/plugins/mention/MentionPlugin.svelte.d.ts +11 -23
- 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 +52 -108
- package/dist/plugins/pageLink/PageLinkPlugin.svelte.d.ts +11 -23
- package/dist/plugins/planned.d.ts +10 -0
- package/dist/plugins/planned.js +12 -0
- package/dist/plugins/richtext/CalloutIcon.svelte +25 -0
- package/dist/plugins/richtext/CalloutIcon.svelte.d.ts +9 -0
- package/dist/plugins/richtext/CalloutIconPicker.svelte +26 -0
- package/dist/plugins/richtext/CalloutIconPicker.svelte.d.ts +9 -0
- package/dist/plugins/richtext/EmptyBody.svelte +25 -0
- package/dist/plugins/richtext/EmptyBody.svelte.d.ts +8 -0
- package/dist/plugins/richtext/RichTextControl.svelte +39 -0
- package/dist/plugins/richtext/RichTextControl.svelte.d.ts +8 -0
- package/dist/plugins/richtext/RichTextPlugin.svelte +272 -148
- package/dist/plugins/richtext/RichTextPlugin.svelte.d.ts +37 -18
- package/dist/plugins/richtext/TodoCheckbox.svelte +10 -21
- package/dist/plugins/richtext/TodoCheckbox.svelte.d.ts +0 -2
- package/dist/plugins/richtext/body.d.ts +9 -0
- package/dist/plugins/richtext/body.js +16 -0
- package/dist/plugins/richtext/calloutIcons.svelte.d.ts +97 -0
- package/dist/plugins/richtext/calloutIcons.svelte.js +214 -0
- 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/slashMenu/SlashMenuController.svelte.d.ts +18 -11
- package/dist/plugins/slashMenu/SlashMenuController.svelte.js +93 -35
- package/dist/plugins/slashMenu/slashMenuPlugin.d.ts +11 -24
- package/dist/plugins/slashMenu/slashMenuPlugin.js +27 -68
- package/dist/plugins/suggestions/SuggestionBars.svelte +32 -84
- package/dist/plugins/suggestions/SuggestionBars.svelte.d.ts +9 -3
- package/dist/plugins/suggestions/suggestionsPlugin.d.ts +10 -16
- package/dist/plugins/suggestions/suggestionsPlugin.js +9 -24
- package/dist/plugins/table/TableChrome.svelte +96 -127
- package/dist/plugins/table/TableChrome.svelte.d.ts +5 -1
- package/dist/plugins/table/TablePlugin.svelte +116 -171
- package/dist/plugins/table/TablePlugin.svelte.d.ts +0 -4
- package/dist/plugins/table/chrome.svelte.d.ts +110 -117
- package/dist/plugins/table/chrome.svelte.js +643 -289
- package/dist/plugins/table/ops.d.ts +47 -0
- package/dist/plugins/table/ops.js +233 -0
- package/dist/plugins/table/table.css +55 -134
- package/dist/plugins/table/table.d.ts +26 -7
- package/dist/plugins/table/table.js +23 -49
- 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 +29 -66
- package/dist/plugins/toolbar/ToolbarController.svelte.js +151 -76
- package/dist/plugins/toolbar/toolbarPlugin.d.ts +14 -13
- package/dist/plugins/toolbar/toolbarPlugin.js +28 -43
- package/dist/plugins/triggers/TriggerController.svelte.d.ts +6 -45
- package/dist/plugins/triggers/TriggerController.svelte.js +51 -96
- 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 +38 -20
- package/dist/plugins/uploads.svelte.js +39 -32
- package/dist/plugins.d.ts +167 -60
- package/dist/selection/domSelection.d.ts +13 -4
- package/dist/selection/domSelection.js +110 -183
- package/dist/selection/pointer.svelte.d.ts +12 -10
- package/dist/selection/pointer.svelte.js +154 -71
- 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 +263 -542
- package/dist/selection/selection.utils.d.ts +34 -11
- package/dist/selection/selection.utils.js +128 -247
- package/dist/selection/visibility.d.ts +11 -8
- package/dist/selection/visibility.js +23 -8
- package/dist/session/announcer.svelte.d.ts +2 -1
- package/dist/session/announcer.svelte.js +7 -3
- package/dist/session/attempt.d.ts +33 -39
- package/dist/session/attempt.js +61 -53
- package/dist/session/bindings.js +108 -139
- package/dist/session/commands.d.ts +47 -22
- package/dist/session/commands.js +206 -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 +15 -21
- package/dist/session/inputRules.js +75 -84
- package/dist/session/keymap.d.ts +1 -6
- package/dist/session/keymap.js +17 -20
- package/dist/session/moves.d.ts +10 -10
- package/dist/session/moves.js +31 -59
- package/dist/session/navigation.d.ts +18 -3
- package/dist/session/navigation.js +194 -153
- package/dist/session/ports.d.ts +7 -0
- package/dist/session/selection.d.ts +4 -3
- package/dist/session/selection.js +8 -0
- package/dist/session/suggestions.svelte.d.ts +1 -1
- package/dist/session/suggestions.svelte.js +64 -47
- 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 +32 -0
- package/dist/surface/lines.js +43 -0
- package/dist/surface/observer.svelte.d.ts +3 -20
- package/dist/surface/observer.svelte.js +73 -77
- package/dist/surface/overlay.d.ts +48 -6
- package/dist/surface/overlay.js +133 -23
- 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 +315 -126
- 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 -525
- package/dist/collaboration/history/HistoryPanel.svelte.d.ts +0 -7
- package/dist/collaboration/history/panel.d.ts +0 -43
- 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 -447
- 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 -116
- package/dist/plugins/image/ImageEmpty.svelte.d.ts +0 -12
- package/dist/plugins/keepInView.d.ts +0 -4
- package/dist/plugins/keepInView.js +0 -6
- package/dist/plugins/media/UrlPasteMenu.svelte +0 -83
- package/dist/plugins/media/UrlPasteMenu.svelte.d.ts +0 -7
- package/dist/plugins/richtext/labels.d.ts +0 -5
- package/dist/plugins/richtext/labels.js +0 -3
- package/dist/plugins/slashMenu/SlashMenu.svelte +0 -360
- package/dist/plugins/slashMenu/SlashMenu.svelte.d.ts +0 -11
- package/dist/plugins/toolbar/LinkCard.svelte +0 -118
- package/dist/plugins/toolbar/LinkCard.svelte.d.ts +0 -7
- package/dist/plugins/toolbar/Toolbar.svelte +0 -400
- package/dist/plugins/toolbar/Toolbar.svelte.d.ts +0 -9
- package/dist/plugins/triggers/TriggerMenu.svelte +0 -144
- package/dist/plugins/triggers/TriggerMenu.svelte.d.ts +0 -7
- package/dist/session/props.d.ts +0 -28
- package/dist/session/props.js +0 -162
- 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
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { imageAlignOf,
|
|
1
|
+
import { BandDrag } from '../bands.svelte.js';
|
|
2
|
+
import { layerBox, pin, sameValues } from '../../surface/overlay.js';
|
|
3
|
+
import { imageAlignOf, imageWidthOf, MIN_IMAGE_WIDTH } from './image.js';
|
|
4
4
|
/** The image element of a shown image block (none while it uploads); an image holds no block. */
|
|
5
|
-
const imageOf = (node) => node?.querySelector('[data-edytor-image]
|
|
5
|
+
const imageOf = (node) => node?.querySelector('[data-edytor-image] > img') ?? null;
|
|
6
6
|
/**
|
|
7
7
|
* The image chrome (Notion's), in the overlay: on the image under
|
|
8
8
|
* the pointer of an editable view, a resize handle on each side and a
|
|
@@ -18,24 +18,27 @@ const imageOf = (node) => node?.querySelector('[data-edytor-image]:not([data-edy
|
|
|
18
18
|
*/
|
|
19
19
|
export class ImageControls {
|
|
20
20
|
edytor;
|
|
21
|
-
labels;
|
|
22
21
|
/** The image block under the pointer. */
|
|
23
22
|
hovered = $state(null);
|
|
24
|
-
/** The image
|
|
25
|
-
|
|
23
|
+
/** The image the toolbar holds (its alt field is open): the chrome stays on it. @internal */
|
|
24
|
+
held = $state(null);
|
|
26
25
|
/** The measured box of the image the chrome is on. */
|
|
27
26
|
box = $state(null);
|
|
28
|
-
/** The
|
|
29
|
-
drag = $state(null);
|
|
30
|
-
/** The dragged image's width at the pointer (view only). */
|
|
27
|
+
/** The dragged image's width at the pointer (view only). @internal */
|
|
31
28
|
preview = $state.raw(null);
|
|
32
|
-
/**
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
29
|
+
/** The handles' gesture (a resize band's: press, view-only preview, one write). @internal */
|
|
30
|
+
band;
|
|
31
|
+
/** The view's image toolbar, when its plugin is listed. @internal */
|
|
32
|
+
toolbar;
|
|
33
|
+
constructor(
|
|
34
|
+
/** @internal */
|
|
35
|
+
edytor) {
|
|
37
36
|
this.edytor = edytor;
|
|
38
|
-
this.
|
|
37
|
+
this.band = new BandDrag(edytor);
|
|
38
|
+
}
|
|
39
|
+
/** The handle being dragged. */
|
|
40
|
+
get drag() {
|
|
41
|
+
return this.band.drag;
|
|
39
42
|
}
|
|
40
43
|
/** The view is readonly (reactive). */
|
|
41
44
|
get readonly() {
|
|
@@ -43,7 +46,7 @@ export class ImageControls {
|
|
|
43
46
|
}
|
|
44
47
|
/** A text selection is in progress: the chrome takes no pointer. */
|
|
45
48
|
get selecting() {
|
|
46
|
-
return this.
|
|
49
|
+
return this.band.selecting;
|
|
47
50
|
}
|
|
48
51
|
/** The image block that is the whole block selection, if any (reactive): the keyboard's image. */
|
|
49
52
|
get selected() {
|
|
@@ -58,16 +61,16 @@ export class ImageControls {
|
|
|
58
61
|
* edited, the hovered one, else the selected one (no pointer needed).
|
|
59
62
|
*/
|
|
60
63
|
get target() {
|
|
61
|
-
return this.drag?.id ?? this.
|
|
64
|
+
return this.drag?.id ?? this.held ?? this.hovered ?? this.selected;
|
|
62
65
|
}
|
|
63
66
|
/** Whether the chrome shows: over an image of an editable view, or while a handle drags. */
|
|
64
67
|
get shown() {
|
|
65
68
|
return this.box !== null && (this.drag !== null || !this.edytor.readonly);
|
|
66
69
|
}
|
|
67
|
-
/** An image's width as shown, in px: the drag's preview while a handle drags it, else `data.width`. */
|
|
70
|
+
/** An image's width as shown, in px: the drag's preview while a handle drags it, else `data.width`. @internal */
|
|
68
71
|
width = (id, data) => (id !== undefined && this.preview?.id === id ? this.preview.width : undefined) ??
|
|
69
72
|
imageWidthOf(data);
|
|
70
|
-
/** The pointer is over `target`: the image block holding it, if any. */
|
|
73
|
+
/** The pointer is over `target`: the image block holding it, if any. @internal */
|
|
71
74
|
hover = (target) => {
|
|
72
75
|
const frame = target?.closest?.('[data-edytor-image]');
|
|
73
76
|
const block = frame?.closest('[data-edytor-block="true"]');
|
|
@@ -77,7 +80,7 @@ export class ImageControls {
|
|
|
77
80
|
this.hovered = id;
|
|
78
81
|
this.edytor.overlay.invalidate();
|
|
79
82
|
};
|
|
80
|
-
/** The pointer left for `to`: the chrome stays while it is over the editor's overlay. */
|
|
83
|
+
/** The pointer left for `to`: the chrome stays while it is over the editor's overlay. @internal */
|
|
81
84
|
leave = (to) => {
|
|
82
85
|
const node = to instanceof Node ? to : null;
|
|
83
86
|
if (node && this.edytor.overlay.layer?.contains(node))
|
|
@@ -87,121 +90,38 @@ export class ImageControls {
|
|
|
87
90
|
this.hovered = null;
|
|
88
91
|
this.edytor.overlay.invalidate();
|
|
89
92
|
};
|
|
90
|
-
/** The overlay measure: the target image's box. */
|
|
93
|
+
/** The overlay measure: the target image's box. @internal */
|
|
91
94
|
measure = (host, origin) => {
|
|
92
95
|
const id = this.target;
|
|
93
96
|
const block = id ? this.edytor.idToBlock.get(id) : undefined;
|
|
94
|
-
const
|
|
95
|
-
const
|
|
96
|
-
const box = id && block && rect
|
|
97
|
-
? {
|
|
98
|
-
id,
|
|
99
|
-
x: rect.left - origin.left,
|
|
100
|
-
y: rect.top - origin.top,
|
|
101
|
-
width: rect.width,
|
|
102
|
-
height: rect.height,
|
|
103
|
-
align: imageAlignOf(block.data)
|
|
104
|
-
}
|
|
105
|
-
: null;
|
|
97
|
+
const rect = layerBox(imageOf(block?.node), origin);
|
|
98
|
+
const box = id && block && rect ? { id, ...rect, align: imageAlignOf(block.data) } : null;
|
|
106
99
|
return () => {
|
|
107
100
|
// Layer-relative, as the rest of the overlay's chrome.
|
|
108
|
-
|
|
109
|
-
if (!
|
|
101
|
+
pin(host);
|
|
102
|
+
if (!sameValues(box, this.box))
|
|
110
103
|
this.box = box;
|
|
111
|
-
if (!box && this.
|
|
112
|
-
this.
|
|
104
|
+
if (!box && this.held === id)
|
|
105
|
+
this.held = null;
|
|
113
106
|
};
|
|
114
107
|
};
|
|
115
|
-
/** Measure again in the overlay's next frame. */
|
|
108
|
+
/** Measure again in the overlay's next frame. @internal */
|
|
116
109
|
invalidate = () => this.edytor.overlay.invalidate();
|
|
117
|
-
/** Set the target image's alignment: one `patchData` command. */
|
|
118
|
-
align = (align) => {
|
|
119
|
-
const block = this.#block();
|
|
120
|
-
if (block && imageAlignOf(block.data) !== align)
|
|
121
|
-
block.data.align = align;
|
|
122
|
-
};
|
|
123
|
-
/** The target image's alt text. */
|
|
124
|
-
get alt() {
|
|
125
|
-
return imageAltOf(this.#block()?.data);
|
|
126
|
-
}
|
|
127
|
-
/** Write the alt text as it is typed: the dispatcher groups the keystrokes into one step. */
|
|
128
|
-
setAlt = (alt) => {
|
|
129
|
-
const block = this.#block();
|
|
130
|
-
if (block && imageAltOf(block.data) !== alt)
|
|
131
|
-
block.data.alt = alt;
|
|
132
|
-
};
|
|
133
|
-
/** Open (or close) the alt field of the target image. */
|
|
134
|
-
toggleAlt = () => {
|
|
135
|
-
this.editing = this.editing ? null : (this.box?.id ?? null);
|
|
136
|
-
this.edytor.overlay.invalidate();
|
|
137
|
-
};
|
|
138
|
-
/**
|
|
139
|
-
* A press anywhere (`onPress`, capture): one outside the alt panel and the
|
|
140
|
-
* toolbar (whose Alt button toggles it) closes the field, so the chrome
|
|
141
|
-
* follows the pointer again.
|
|
142
|
-
*/
|
|
143
|
-
pressed = (event) => {
|
|
144
|
-
const target = event.target;
|
|
145
|
-
if (this.editing === null)
|
|
146
|
-
return;
|
|
147
|
-
if (target?.closest?.('[data-edytor-image-alt-panel], [data-edytor-image-toolbar]'))
|
|
148
|
-
return;
|
|
149
|
-
this.closeAlt();
|
|
150
|
-
};
|
|
151
|
-
/** Focus left the alt field: for somewhere outside its panel, the field closes. */
|
|
152
|
-
blurred = (event) => {
|
|
153
|
-
const to = event.relatedTarget;
|
|
154
|
-
const panel = event.currentTarget?.closest('[data-edytor-image-alt-panel]');
|
|
155
|
-
// No new focus (the window went to the background): the field stays.
|
|
156
|
-
if (!(to instanceof Node) || panel?.contains(to))
|
|
157
|
-
return;
|
|
158
|
-
this.closeAlt();
|
|
159
|
-
};
|
|
160
|
-
/** Close the alt field; with `keys`, the editor takes the keys back. */
|
|
161
|
-
closeAlt = (keys = false) => {
|
|
162
|
-
if (this.editing === null)
|
|
163
|
-
return;
|
|
164
|
-
this.editing = null;
|
|
165
|
-
this.edytor.overlay.invalidate();
|
|
166
|
-
if (keys)
|
|
167
|
-
takeKeys(this.edytor);
|
|
168
|
-
};
|
|
169
|
-
#block = () => {
|
|
170
|
-
const id = this.box?.id;
|
|
171
|
-
const block = id ? this.edytor.idToBlock.get(id) : undefined;
|
|
172
|
-
return block?.isInTree ? block : undefined;
|
|
173
|
-
};
|
|
174
110
|
/**
|
|
175
|
-
*
|
|
176
|
-
*
|
|
177
|
-
*
|
|
178
|
-
*/
|
|
179
|
-
mousedown = (event, side) => {
|
|
180
|
-
event.preventDefault();
|
|
181
|
-
if (isLonePress(this.edytor, event))
|
|
182
|
-
this.start(event, side);
|
|
183
|
-
};
|
|
184
|
-
/**
|
|
185
|
-
* Press on a handle: the drag starts, nothing is written until the
|
|
186
|
-
* release. A `pointerdown` tracks its pointer (captured, on the document);
|
|
187
|
-
* a lone `mousedown` tracks the mouse on the window.
|
|
111
|
+
* Press on a handle (`{@attach band.press(…)}`): the drag starts, nothing
|
|
112
|
+
* is written until the release.
|
|
113
|
+
* @internal
|
|
188
114
|
*/
|
|
189
115
|
start = (event, side) => {
|
|
190
116
|
const { edytor } = this;
|
|
191
117
|
const box = this.box;
|
|
192
|
-
if (
|
|
118
|
+
if (!edytor.dispatcher.permits() || !box)
|
|
193
119
|
return;
|
|
194
120
|
const img = imageOf(edytor.idToBlock.get(box.id)?.node);
|
|
195
121
|
const frame = img?.parentElement;
|
|
196
122
|
if (!img || !frame)
|
|
197
123
|
return;
|
|
198
|
-
|
|
199
|
-
event.stopPropagation();
|
|
200
|
-
const target = event.currentTarget;
|
|
201
|
-
const pointer = event.type === 'pointerdown';
|
|
202
|
-
if (pointer)
|
|
203
|
-
target?.setPointerCapture?.(event.pointerId);
|
|
204
|
-
this.drag = {
|
|
124
|
+
const drag = {
|
|
205
125
|
id: box.id,
|
|
206
126
|
side,
|
|
207
127
|
from: event.clientX,
|
|
@@ -210,57 +130,21 @@ export class ImageControls {
|
|
|
210
130
|
max: frame.getBoundingClientRect().width,
|
|
211
131
|
factor: box.align === 'center' ? 2 : 1
|
|
212
132
|
};
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
const move = (moved) => {
|
|
217
|
-
const drag = this.drag;
|
|
218
|
-
if (!drag)
|
|
219
|
-
return;
|
|
220
|
-
if (!edytor.dispatcher.permits())
|
|
221
|
-
return end(moved);
|
|
222
|
-
drag.at = moved.clientX;
|
|
223
|
-
this.preview = { id: drag.id, width: widthAt(drag) };
|
|
224
|
-
edytor.overlay.invalidate();
|
|
225
|
-
};
|
|
226
|
-
const end = (ended) => {
|
|
227
|
-
tracked?.removeEventListener(moves, move);
|
|
228
|
-
tracked?.removeEventListener(ups, end);
|
|
229
|
-
tracked?.removeEventListener('pointercancel', end);
|
|
230
|
-
document?.removeEventListener('keydown', escape, true);
|
|
231
|
-
const drag = this.drag;
|
|
232
|
-
this.drag = null;
|
|
233
|
-
this.#cancel = null;
|
|
234
|
-
edytor.overlay.invalidate();
|
|
235
|
-
if (drag && ended.type === ups) {
|
|
236
|
-
drag.at = ended.clientX;
|
|
237
|
-
this.#release(drag);
|
|
238
|
-
// The editor holds the keys after the release (Notion: Mod+Z right after).
|
|
239
|
-
takeKeys(edytor);
|
|
240
|
-
}
|
|
133
|
+
this.band.start(event, drag, (done) => {
|
|
134
|
+
if (done)
|
|
135
|
+
this.#release(done);
|
|
241
136
|
// After the release's write: the stored width replaces the preview in one flush.
|
|
242
137
|
this.preview = null;
|
|
243
|
-
}
|
|
244
|
-
|
|
245
|
-
if (
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
key.stopPropagation();
|
|
249
|
-
end(key);
|
|
250
|
-
};
|
|
251
|
-
this.#cancel = () => end(new Event('cancel'));
|
|
252
|
-
tracked?.addEventListener(moves, move);
|
|
253
|
-
tracked?.addEventListener(ups, end);
|
|
254
|
-
if (pointer)
|
|
255
|
-
tracked?.addEventListener('pointercancel', end);
|
|
256
|
-
document?.addEventListener('keydown', escape, true);
|
|
257
|
-
edytor.overlay.invalidate();
|
|
138
|
+
}, () => {
|
|
139
|
+
const moving = this.band.drag;
|
|
140
|
+
if (moving)
|
|
141
|
+
this.preview = { id: moving.id, width: widthAt(moving) };
|
|
142
|
+
});
|
|
258
143
|
};
|
|
259
|
-
/** The view turned readonly: a drag in progress ends at once, nothing written. */
|
|
144
|
+
/** The view turned readonly: a drag in progress ends at once, nothing written. @internal */
|
|
260
145
|
lock = () => {
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
this.editing = null;
|
|
146
|
+
this.band.lock();
|
|
147
|
+
this.held = null;
|
|
264
148
|
};
|
|
265
149
|
/** The release: `data.width`, rounded to the px, one undo step; nothing when nothing moved. */
|
|
266
150
|
#release(drag) {
|
|
@@ -269,7 +153,7 @@ export class ImageControls {
|
|
|
269
153
|
if (!block?.isInTree || Math.abs(widthAt(drag) - drag.width) < 1)
|
|
270
154
|
return;
|
|
271
155
|
if (imageWidthOf(block.data) !== width)
|
|
272
|
-
block.
|
|
156
|
+
block.edytor.patchData(block.id, [{ path: ['width'], value: width }]);
|
|
273
157
|
}
|
|
274
158
|
}
|
|
275
159
|
/** The image's width at the drag's pointer, held between the minimum and its frame's width. */
|
|
@@ -278,12 +162,5 @@ const widthAt = ({ side, from, at, width, max, factor }) => {
|
|
|
278
162
|
const hi = Math.max(max, width);
|
|
279
163
|
return Math.min(hi, Math.max(lo, width + (side === 'right' ? 1 : -1) * factor * (at - from)));
|
|
280
164
|
};
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
b !== null &&
|
|
284
|
-
a.id === b.id &&
|
|
285
|
-
a.x === b.x &&
|
|
286
|
-
a.y === b.y &&
|
|
287
|
-
a.width === b.width &&
|
|
288
|
-
a.height === b.height &&
|
|
289
|
-
a.align === b.align);
|
|
165
|
+
/** Each view's image chrome (the first image plugin listed claims it). */
|
|
166
|
+
export const imageControls = new WeakMap();
|
|
@@ -1,8 +1,3 @@
|
|
|
1
|
-
/** Each view's image labels: the first image plugin listed claims them, as its kind. */
|
|
2
|
-
export declare const imageLabels: {
|
|
3
|
-
claim: (view: object | undefined, labels: import("../../labels.js").ImageLabels) => void;
|
|
4
|
-
of: (view: object | undefined) => import("../../labels.js").ImageLabels;
|
|
5
|
-
};
|
|
6
1
|
/** An image source the block may render: http(s), blob, or an inline image. */
|
|
7
2
|
export declare const safeImageSrc: (value: unknown) => string | null;
|
|
8
3
|
/**
|
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
import { viewLabels } from '../../labels.js';
|
|
2
|
-
/** Each view's image labels: the first image plugin listed claims them, as its kind. */
|
|
3
|
-
export const imageLabels = viewLabels('image');
|
|
4
1
|
/** An image source the block may render: http(s), blob, or an inline image. */
|
|
5
2
|
export const safeImageSrc = (value) => {
|
|
6
3
|
if (typeof value !== 'string')
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The image toolbar (Notion's), its own plugin: the app's `toolbar` over
|
|
3
|
+
* the image the view's image chrome is on (`ImageControls`), at its top
|
|
4
|
+
* right: the alignments and the alt text field. An alignment is one
|
|
5
|
+
* `patchData` command; the alt text is written as it is typed (the
|
|
6
|
+
* dispatcher groups the keystrokes into one step). While the alt field is
|
|
7
|
+
* open the chrome stays on its image; a press outside the toolbar and the
|
|
8
|
+
* field (`onPress`) or focus leaving the field closes it.
|
|
9
|
+
*/
|
|
10
|
+
import type { Attachment } from 'svelte/attachments';
|
|
11
|
+
import type { Snippet } from 'svelte';
|
|
12
|
+
import type { Plugin } from '../../plugins.js';
|
|
13
|
+
import { type ImageAlign } from './image.js';
|
|
14
|
+
import { type ImageControls } from './controls.svelte.js';
|
|
15
|
+
/**
|
|
16
|
+
* What a `toolbar` snippet receives: the image the chrome is on (`box`),
|
|
17
|
+
* its alignment (`align`) and alt text (`alt`, `setAlt`), the alt field's
|
|
18
|
+
* state (`editing`, `toggleAlt`, `closeAlt`) and the attachments that give
|
|
19
|
+
* your markup its behavior (`bar`, `altField`).
|
|
20
|
+
*/
|
|
21
|
+
export declare class ImageToolbar {
|
|
22
|
+
#private;
|
|
23
|
+
constructor(
|
|
24
|
+
/** @internal */
|
|
25
|
+
controls: ImageControls);
|
|
26
|
+
/** The measured image the toolbar is on (`null`: none). */
|
|
27
|
+
get box(): import("./controls.svelte.js").ImageBox | null;
|
|
28
|
+
/** The view is readonly (reactive). */
|
|
29
|
+
get readonly(): boolean;
|
|
30
|
+
/** The image whose alt field is open: the chrome stays on it. */
|
|
31
|
+
get editing(): string | null;
|
|
32
|
+
set editing(id: string | null);
|
|
33
|
+
/** Set the target image's alignment: one `patchData` command. */
|
|
34
|
+
align: (align: ImageAlign) => void;
|
|
35
|
+
/** The target image's alt text. */
|
|
36
|
+
get alt(): string;
|
|
37
|
+
/** Write the alt text as it is typed: the dispatcher groups the keystrokes into one step. */
|
|
38
|
+
setAlt: (alt: string) => void;
|
|
39
|
+
/** Open (or close) the alt field of the target image. */
|
|
40
|
+
toggleAlt: () => void;
|
|
41
|
+
/**
|
|
42
|
+
* The image's toolbar (`{@attach controls.bar}`, named by your markup): its
|
|
43
|
+
* `toolbar` role unless it has its own, the mark a press outside the alt field
|
|
44
|
+
* reads (a press on the toolbar keeps the field open, so its Alt button
|
|
45
|
+
* toggles it), and presses that keep the editor's focus.
|
|
46
|
+
*/
|
|
47
|
+
bar: Attachment<HTMLElement>;
|
|
48
|
+
/**
|
|
49
|
+
* The alt text field (`{@attach controls.altField}`): focused when it
|
|
50
|
+
* opens; Enter or Escape closes it and gives the editor its keys back,
|
|
51
|
+
* focus moving out of it (or of the element marked
|
|
52
|
+
* `data-edytor-image-alt-panel` around it) closes it, and a press on it
|
|
53
|
+
* keeps it open. Write its value with `setAlt`.
|
|
54
|
+
*/
|
|
55
|
+
altField: Attachment<HTMLInputElement>;
|
|
56
|
+
/** Close the alt field; with `keys`, the editor takes the keys back. */
|
|
57
|
+
closeAlt: (keys?: boolean) => void;
|
|
58
|
+
}
|
|
59
|
+
export type ImageToolbarOptions = {
|
|
60
|
+
/**
|
|
61
|
+
* The toolbar over the hovered image (the alignments and the alt field);
|
|
62
|
+
* it renders while the image chrome shows and no handle drags, at the
|
|
63
|
+
* image's top right. Keep its behaviour with `{@attach toolbar.bar}` on
|
|
64
|
+
* the toolbar and `{@attach toolbar.altField}` on the alt field.
|
|
65
|
+
*/
|
|
66
|
+
toolbar: Snippet<[ImageToolbar]>;
|
|
67
|
+
};
|
|
68
|
+
/** The image toolbar: your `toolbar` over the image the chrome is on. The first listed claims the view. */
|
|
69
|
+
export declare const createImageToolbarPlugin: ({ toolbar }: ImageToolbarOptions) => Plugin;
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import { onPress, takeKeys } from '../../events/onFocus.js';
|
|
2
|
+
import { pin } from '../../surface/overlay.js';
|
|
3
|
+
import { imageAlignOf, imageAltOf } from './image.js';
|
|
4
|
+
import { imageControls } from './controls.svelte.js';
|
|
5
|
+
import { identify, keepFocus } from '../chrome.js';
|
|
6
|
+
import { all, listen } from '../../utils/listen.js';
|
|
7
|
+
import ImageToolbarHost from './ImageToolbarHost.svelte';
|
|
8
|
+
/** Where a press keeps the alt field open: the toolbar (its Alt button toggles it) and the field's own. */
|
|
9
|
+
const ALT_CHROME = '[data-edytor-image-alt-panel], [data-edytor-image-toolbar], [data-edytor-image-alt]';
|
|
10
|
+
/**
|
|
11
|
+
* What a `toolbar` snippet receives: the image the chrome is on (`box`),
|
|
12
|
+
* its alignment (`align`) and alt text (`alt`, `setAlt`), the alt field's
|
|
13
|
+
* state (`editing`, `toggleAlt`, `closeAlt`) and the attachments that give
|
|
14
|
+
* your markup its behavior (`bar`, `altField`).
|
|
15
|
+
*/
|
|
16
|
+
export class ImageToolbar {
|
|
17
|
+
controls;
|
|
18
|
+
constructor(
|
|
19
|
+
/** @internal */
|
|
20
|
+
controls) {
|
|
21
|
+
this.controls = controls;
|
|
22
|
+
}
|
|
23
|
+
/** The measured image the toolbar is on (`null`: none). */
|
|
24
|
+
get box() {
|
|
25
|
+
return this.controls.box;
|
|
26
|
+
}
|
|
27
|
+
/** The view is readonly (reactive). */
|
|
28
|
+
get readonly() {
|
|
29
|
+
return this.controls.readonly;
|
|
30
|
+
}
|
|
31
|
+
/** The image whose alt field is open: the chrome stays on it. */
|
|
32
|
+
get editing() {
|
|
33
|
+
return this.controls.held;
|
|
34
|
+
}
|
|
35
|
+
set editing(id) {
|
|
36
|
+
this.controls.held = id;
|
|
37
|
+
}
|
|
38
|
+
get #edytor() {
|
|
39
|
+
return this.controls.edytor;
|
|
40
|
+
}
|
|
41
|
+
/** Set the target image's alignment: one `patchData` command. */
|
|
42
|
+
align = (align) => {
|
|
43
|
+
const block = this.#block();
|
|
44
|
+
if (block && imageAlignOf(block.data) !== align)
|
|
45
|
+
block.edytor.patchData(block.id, [{ path: ['align'], value: align }]);
|
|
46
|
+
};
|
|
47
|
+
/** The target image's alt text. */
|
|
48
|
+
get alt() {
|
|
49
|
+
return imageAltOf(this.#block()?.data);
|
|
50
|
+
}
|
|
51
|
+
/** Write the alt text as it is typed: the dispatcher groups the keystrokes into one step. */
|
|
52
|
+
setAlt = (alt) => {
|
|
53
|
+
const block = this.#block();
|
|
54
|
+
if (block && imageAltOf(block.data) !== alt)
|
|
55
|
+
block.edytor.patchData(block.id, [{ path: ['alt'], value: alt }]);
|
|
56
|
+
};
|
|
57
|
+
/** Open (or close) the alt field of the target image. */
|
|
58
|
+
toggleAlt = () => {
|
|
59
|
+
this.editing = this.editing ? null : (this.box?.id ?? null);
|
|
60
|
+
this.#edytor.overlay.invalidate();
|
|
61
|
+
};
|
|
62
|
+
/**
|
|
63
|
+
* A press anywhere (`onPress`, capture): one outside the alt panel and the
|
|
64
|
+
* toolbar (whose Alt button toggles it) closes the field, so the chrome
|
|
65
|
+
* follows the pointer again.
|
|
66
|
+
* @internal
|
|
67
|
+
*/
|
|
68
|
+
pressed = (event) => {
|
|
69
|
+
const target = event.target;
|
|
70
|
+
if (this.editing === null)
|
|
71
|
+
return;
|
|
72
|
+
if (target?.closest?.(ALT_CHROME))
|
|
73
|
+
return;
|
|
74
|
+
this.closeAlt();
|
|
75
|
+
};
|
|
76
|
+
/** Focus left the alt field: for somewhere outside its panel, the field closes. @internal */
|
|
77
|
+
blurred = (event) => {
|
|
78
|
+
const to = event.relatedTarget;
|
|
79
|
+
const field = event.currentTarget;
|
|
80
|
+
const panel = field?.closest('[data-edytor-image-alt-panel]') ?? field;
|
|
81
|
+
// No new focus (the window went to the background): the field stays.
|
|
82
|
+
if (!(to instanceof Node) || panel?.contains(to))
|
|
83
|
+
return;
|
|
84
|
+
this.closeAlt();
|
|
85
|
+
};
|
|
86
|
+
/**
|
|
87
|
+
* The image's toolbar (`{@attach controls.bar}`, named by your markup): its
|
|
88
|
+
* `toolbar` role unless it has its own, the mark a press outside the alt field
|
|
89
|
+
* reads (a press on the toolbar keeps the field open, so its Alt button
|
|
90
|
+
* toggles it), and presses that keep the editor's focus.
|
|
91
|
+
*/
|
|
92
|
+
bar = (node) => {
|
|
93
|
+
if (!node.hasAttribute('role'))
|
|
94
|
+
node.setAttribute('role', 'toolbar');
|
|
95
|
+
node.setAttribute('data-edytor-image-toolbar', '');
|
|
96
|
+
return listen(node, 'mousedown', keepFocus);
|
|
97
|
+
};
|
|
98
|
+
/**
|
|
99
|
+
* The alt text field (`{@attach controls.altField}`): focused when it
|
|
100
|
+
* opens; Enter or Escape closes it and gives the editor its keys back,
|
|
101
|
+
* focus moving out of it (or of the element marked
|
|
102
|
+
* `data-edytor-image-alt-panel` around it) closes it, and a press on it
|
|
103
|
+
* keeps it open. Write its value with `setAlt`.
|
|
104
|
+
*/
|
|
105
|
+
altField = (node) => {
|
|
106
|
+
identify(node, this.#edytor.popups.idOf('image-alt'));
|
|
107
|
+
node.setAttribute('data-edytor-image-alt', '');
|
|
108
|
+
node.focus({ preventScroll: true });
|
|
109
|
+
const keydown = (event) => {
|
|
110
|
+
if (event.isComposing || (event.key !== 'Enter' && event.key !== 'Escape'))
|
|
111
|
+
return;
|
|
112
|
+
event.preventDefault();
|
|
113
|
+
this.closeAlt(true);
|
|
114
|
+
};
|
|
115
|
+
return all(listen(node, 'keydown', keydown), listen(node, 'focusout', this.blurred));
|
|
116
|
+
};
|
|
117
|
+
/** Close the alt field; with `keys`, the editor takes the keys back. */
|
|
118
|
+
closeAlt = (keys = false) => {
|
|
119
|
+
if (this.editing === null)
|
|
120
|
+
return;
|
|
121
|
+
this.editing = null;
|
|
122
|
+
this.#edytor.overlay.invalidate();
|
|
123
|
+
if (keys)
|
|
124
|
+
takeKeys(this.#edytor);
|
|
125
|
+
};
|
|
126
|
+
#block = () => {
|
|
127
|
+
const id = this.box?.id;
|
|
128
|
+
const block = id ? this.#edytor.idToBlock.get(id) : undefined;
|
|
129
|
+
return block?.isInTree ? block : undefined;
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
/** The image toolbar: your `toolbar` over the image the chrome is on. The first listed claims the view. */
|
|
133
|
+
export const createImageToolbarPlugin = ({ toolbar }) => (edytor) => ({
|
|
134
|
+
onEdytorAttached: ({ node }) => {
|
|
135
|
+
const controls = imageControls.get(edytor);
|
|
136
|
+
if (!controls || controls.toolbar)
|
|
137
|
+
return;
|
|
138
|
+
const bar = (controls.toolbar = new ImageToolbar(controls));
|
|
139
|
+
return all(
|
|
140
|
+
// A press outside the alt panel closes it (WebKit's lone `mousedown` too).
|
|
141
|
+
onPress(edytor, node.ownerDocument, bar.pressed, true), edytor.overlay.mount(ImageToolbarHost, { toolbar: bar, snippet: toolbar }, 'edytor-image-toolbar-host',
|
|
142
|
+
// With the image chrome: above the block handles and the column bands.
|
|
143
|
+
7, (host) => () => pin(host)), () => (controls.toolbar = undefined));
|
|
144
|
+
}
|
|
145
|
+
});
|
package/dist/plugins/index.d.ts
CHANGED
|
@@ -1,36 +1,51 @@
|
|
|
1
|
-
export {
|
|
2
|
-
export {
|
|
1
|
+
export { createRichTextPlugin, richTextOperations, richTextPlaceholder, type RichTextPluginOptions, type TodoCheckboxPayload, type CalloutIconPayload, type EmptyBodyPayload } from './richtext/RichTextPlugin.svelte';
|
|
2
|
+
export { CALLOUT_ICONS, createCalloutIconsPlugin, type CalloutIconPicker, type CalloutIconsOptions } from './richtext/calloutIcons.svelte.js';
|
|
3
|
+
export { createUploadsPlugin, type UploadsOptions } from './uploads.svelte.js';
|
|
4
|
+
export { createArrowMovePlugin } from './arrowMove/arrowMove.js';
|
|
5
|
+
export type { MenuItemPayload } from './chrome.js';
|
|
3
6
|
export { BLOCK_ACTIVATE_EVENT, BLOCK_ADD_EVENT, type BlockActivation, type BlockAddition } from './blockHandles/BlockHandleController.svelte.js';
|
|
4
|
-
export {
|
|
5
|
-
export {
|
|
6
|
-
export
|
|
7
|
-
export {
|
|
7
|
+
export { createBlockHandlesPlugin, type BlockHandlesOptions, type BlockHandleSnippetPayload } from './blockHandles/blockHandlesPlugin.js';
|
|
8
|
+
export { createCodePlugin, CODE_LANGUAGES, loadCodeLanguage, type CodeLanguage, type CodePluginOptions } from './code/CodePlugin.svelte';
|
|
9
|
+
export type { CodeHeader } from './code/header.svelte.js';
|
|
10
|
+
export type { LanguageMenu, LanguageMenuItem, LanguageRow } from './code/languageMenu.svelte.js';
|
|
11
|
+
export { createMarkdownShortcutsPlugin } from './markdownShortcuts.js';
|
|
8
12
|
export { createMentionPlugin, type MentionItem, type MentionData, type MentionPluginOptions } from './mention/MentionPlugin.svelte';
|
|
9
13
|
export { createPageLinkPlugin, type PageLinkItem, type PageLinkData, type PageLinkPluginOptions } from './pageLink/PageLinkPlugin.svelte';
|
|
10
14
|
export type { TriggerMenuController } from './triggers/TriggerController.svelte.js';
|
|
11
|
-
export {
|
|
15
|
+
export { withRulesAndTriggers } from './triggers/triggers.js';
|
|
16
|
+
export { createSlashMenuPlugin, type SlashMenuOptions } from './slashMenu/slashMenuPlugin.js';
|
|
12
17
|
export type { SlashMenuController } from './slashMenu/SlashMenuController.svelte.js';
|
|
13
|
-
export {
|
|
18
|
+
export { createToolbarPlugin, type ToolbarOptions } from './toolbar/toolbarPlugin.js';
|
|
14
19
|
export type { ToolbarController } from './toolbar/ToolbarController.svelte.js';
|
|
15
|
-
export {
|
|
16
|
-
export {
|
|
20
|
+
export { createBlockMenuPlugin } from './blockMenu/blockMenuPlugin.js';
|
|
21
|
+
export { createSuggestionsPlugin, type SuggestionBarOptions, type SuggestionBarPayload } from './suggestions/suggestionsPlugin.js';
|
|
22
|
+
export { createSuggestionBarPlugin } from './suggestions/SuggestionBars.svelte';
|
|
17
23
|
export type { BlockMenuOptions, BlockMenuController, BlockMenuAction, BlockMenuColor } from './blockMenu/BlockMenuController.svelte.js';
|
|
18
|
-
export {
|
|
19
|
-
export {
|
|
20
|
-
export {
|
|
21
|
-
export {
|
|
22
|
-
export {
|
|
23
|
-
export {
|
|
24
|
-
export { safeWebUrl, safeMediaSrc, type
|
|
24
|
+
export { createImagePlugin, safeImageSrc, storableImageSrc, oversizedInlineImage, MAX_INLINE_IMAGE_BYTES, MIN_IMAGE_WIDTH, type ImageData, type ImageAlign } from './image/ImagePlugin.svelte';
|
|
25
|
+
export { createEmbedPlugin, EMBED_PROVIDERS, EMBED_SANDBOX, EMBED_ALLOW, embedSourceOf, type EmbedProvider, type EmbedPluginOptions, type EmbedFallbackPayload } from './media/EmbedPlugin.svelte';
|
|
26
|
+
export { createBookmarkPlugin, type BookmarkPluginOptions, type BookmarkPreview, type BookmarkCardPayload } from './media/BookmarkPlugin.svelte';
|
|
27
|
+
export { createFilePlugin, type FilePluginOptions, type FileRowPayload } from './media/FilePlugin.svelte';
|
|
28
|
+
export { createVideoPlugin } from './media/VideoPlugin.svelte';
|
|
29
|
+
export { createAudioPlugin } from './media/AudioPlugin.svelte';
|
|
30
|
+
export { safeWebUrl, safeMediaSrc, type MediaKind } from './media/media.js';
|
|
31
|
+
export type { MediaEmptyController, MediaEmptyFailure } from './media/empty.svelte.js';
|
|
32
|
+
export { createMediaEmptyPlugin, type MediaEmptyOptions } from './media/MediaEmpty.svelte';
|
|
33
|
+
export type { UrlPasteController, UrlPasteOffer, UrlPasteOption } from './media/urlPaste.svelte.js';
|
|
34
|
+
export type { ImageControls, ImageBox } from './image/controls.svelte.js';
|
|
35
|
+
export { createImageToolbarPlugin, type ImageToolbar, type ImageToolbarOptions } from './image/toolbar.svelte.js';
|
|
25
36
|
export type { BlockHandleController } from './blockHandles/BlockHandleController.svelte.js';
|
|
26
|
-
export {
|
|
27
|
-
export {
|
|
37
|
+
export { createColumnsPlugin, type ColumnsPluginOptions } from './columns/ColumnsPlugin.svelte';
|
|
38
|
+
export { createFindPlugin, findController, type FindPluginOptions } from './find/findPlugin.js';
|
|
28
39
|
export type { FindController, ReplaceMatches } from './find/FindController.svelte.js';
|
|
40
|
+
export { createMarqueePlugin, type MarqueePluginOptions } from './marquee/marqueePlugin.js';
|
|
41
|
+
export type { MarqueeBoxPayload } from './marquee/MarqueeController.svelte.js';
|
|
29
42
|
export { findMatches, type FindMatch, type FindOptions } from './find/search.js';
|
|
30
|
-
export { createCommentsPlugin, commentsController, type CommentsPluginOptions } from './comments/commentsPlugin.js';
|
|
43
|
+
export { createCommentsPlugin, commentsController, type CommentsPluginOptions, type CommentCardPayload } from './comments/commentsPlugin.js';
|
|
31
44
|
export type { CommentsController, CommentDraft, CommentNotice, CommentUser, PlacedThread } from './comments/CommentsController.svelte.js';
|
|
32
|
-
export {
|
|
33
|
-
export {
|
|
34
|
-
export {
|
|
45
|
+
export { createPagePlugin, type PagePluginOptions, type PageBlockLinkPayload } from './page/PagePlugin.svelte';
|
|
46
|
+
export { createTocPlugin, type TocPluginOptions, type TocHeadingLevel, type TocEntryPayload, type TocEmptyPayload } from './toc/TocPlugin.svelte';
|
|
47
|
+
export { createTablePlugin, type TablePluginOptions } from './table/TablePlugin.svelte';
|
|
48
|
+
export { insertTableRow, deleteTableRows, insertTableColumn, deleteTableColumn, moveTableColumn, moveTableRows, fillTableCell } from './table/ops.js';
|
|
49
|
+
export type { TableChrome, TableMenu, TableMenuRow, TableMenuItem, TableGripPayload, TableAddPayload } from './table/chrome.svelte.js';
|
|
35
50
|
export { tableBlock, type TableBlockOptions } from '../crdt/tables.js';
|
|
36
|
-
export { createEquationPlugin, type EquationPluginOptions, type EquationData, type KatexLike, type KatexLoader } from './equation/EquationPlugin.svelte';
|
|
51
|
+
export { createEquationPlugin, KATEX_CDN, KATEX_VERSION, type EquationPluginOptions, type EquationData, type EquationEditor, type EquationErrorPayload, type EquationPlaceholderPayload, type EquationTarget, type KatexLike, type KatexLoader } from './equation/EquationPlugin.svelte';
|