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,13 +1,17 @@
|
|
|
1
|
+
<svelte:options runes />
|
|
2
|
+
|
|
1
3
|
<script module lang="ts">
|
|
4
|
+
import './mention.css';
|
|
2
5
|
import type { Snippet } from 'svelte';
|
|
3
6
|
import type {
|
|
7
|
+
InlineBlockDefinition,
|
|
4
8
|
InlineBlockSnippetPayload,
|
|
9
|
+
InlineBlockView,
|
|
5
10
|
Plugin,
|
|
6
|
-
TriggerContext
|
|
7
|
-
TriggerItemPayload
|
|
11
|
+
TriggerContext
|
|
8
12
|
} from '../../plugins.js';
|
|
9
13
|
import type { TriggerMenuController } from '../triggers/TriggerController.svelte.js';
|
|
10
|
-
import {
|
|
14
|
+
import { withRulesAndTriggers } from '../triggers/triggers.js';
|
|
11
15
|
|
|
12
16
|
/** A person the mention menu offers: what your app's directory answers. */
|
|
13
17
|
export type MentionItem = {
|
|
@@ -21,7 +25,7 @@
|
|
|
21
25
|
avatar?: string;
|
|
22
26
|
};
|
|
23
27
|
|
|
24
|
-
/** What a
|
|
28
|
+
/** What a mention atom stores (whatever its kind). */
|
|
25
29
|
export type MentionData = { id: string; label: string };
|
|
26
30
|
|
|
27
31
|
export type MentionPluginOptions = {
|
|
@@ -30,150 +34,104 @@
|
|
|
30
34
|
query: string,
|
|
31
35
|
ctx: TriggerContext
|
|
32
36
|
) => readonly MentionItem[] | Promise<readonly MentionItem[]>;
|
|
33
|
-
/** The character that opens the menu (default `@`). */
|
|
37
|
+
/** The character that opens the menu, and that the atom shows before its label (default `@`). */
|
|
34
38
|
char?: string;
|
|
35
|
-
/** Replace each row of the menu. */
|
|
36
|
-
item?: Snippet<[TriggerItemPayload<MentionItem>]>;
|
|
37
39
|
/**
|
|
38
|
-
*
|
|
39
|
-
*
|
|
40
|
+
* The inline kind the atoms are (default `mention`), and the name of the
|
|
41
|
+
* trigger menu (`controller.trigger.name`). List the plugin once per kind
|
|
42
|
+
* to mention several things (`@` people, `$` tickers as `ticker`); two
|
|
43
|
+
* instances of one kind: the first listed defines it.
|
|
44
|
+
*/
|
|
45
|
+
kind?: string;
|
|
46
|
+
/**
|
|
47
|
+
* The menu's markup and its words; it renders while `controller.isOpen`,
|
|
48
|
+
* at the caret (without it, nothing shows). Keep its ARIA with `{@attach
|
|
49
|
+
* controller.popup}` on the list (name it) and
|
|
40
50
|
* `{...controller.option(index)}` on each row.
|
|
41
51
|
*/
|
|
42
52
|
menu?: Snippet<[TriggerMenuController<MentionItem>]>;
|
|
43
|
-
/** The words the menu shows and says, over the English ones. */
|
|
44
|
-
labels?: PartialLabels<'mention'>;
|
|
45
53
|
};
|
|
46
54
|
|
|
47
|
-
/**
|
|
48
|
-
|
|
49
|
-
|
|
55
|
+
/** A mention kind's record: its `char` read by the atom's markup. */
|
|
56
|
+
type MentionKind = InlineBlockDefinition & { char: string };
|
|
57
|
+
|
|
58
|
+
/** The char of the atom's kind (the first listed instance's); `@` with no view (a suggestion). */
|
|
59
|
+
const charOf = (atom: InlineBlockView) =>
|
|
60
|
+
(atom.handle?.edytor.inlineBlocks.get(atom.type) as Partial<MentionKind> | undefined)?.char ??
|
|
61
|
+
'@';
|
|
62
|
+
|
|
63
|
+
const escape = (value: string) =>
|
|
64
|
+
value.replace(
|
|
65
|
+
/[&<>"]/g,
|
|
66
|
+
(c) => ({ '&': '&', '<': '<', '>': '>', '"': '"' })[c]!
|
|
67
|
+
);
|
|
50
68
|
|
|
51
69
|
/**
|
|
52
70
|
* People mentions, as in Notion: `@` opens a menu of the people your app's
|
|
53
71
|
* `items(query)` answers; picking one replaces `@query` with a `mention`
|
|
54
72
|
* atom (`{ id, label }`) and puts the caret after it, in one undo step.
|
|
73
|
+
* `char` and `kind` make another one (`$` tickers as `ticker` atoms).
|
|
55
74
|
*/
|
|
56
75
|
export const createMentionPlugin = (options: MentionPluginOptions): Plugin => {
|
|
57
|
-
const
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
76
|
+
const char = options.char ?? '@';
|
|
77
|
+
const kind = options.kind ?? 'mention';
|
|
78
|
+
const labelOf = (data: unknown) => {
|
|
79
|
+
const label = (data as Partial<MentionData> | undefined)?.label;
|
|
80
|
+
return typeof label === 'string' ? label : '';
|
|
81
|
+
};
|
|
82
|
+
const atom: MentionKind = {
|
|
83
|
+
snippet: mention,
|
|
84
|
+
char,
|
|
85
|
+
plain: (data) => char + labelOf(data),
|
|
86
|
+
html: (data) => {
|
|
87
|
+
const id = (data as Partial<MentionData> | undefined)?.id;
|
|
88
|
+
return (
|
|
89
|
+
`<span data-edytor-mention="${escape(kind)}"` +
|
|
90
|
+
(typeof id === 'string' ? ` data-mention-id="${escape(id)}"` : '') +
|
|
91
|
+
`>${escape(char + labelOf(data))}</span>`
|
|
92
|
+
);
|
|
67
93
|
},
|
|
68
|
-
|
|
94
|
+
parse: (element) => {
|
|
95
|
+
// A bare `data-edytor-mention` (an older export) is a `mention`.
|
|
96
|
+
const own = element.dataset.edytorMention;
|
|
97
|
+
if (own === undefined || (own || 'mention') !== kind) return undefined;
|
|
98
|
+
const text = element.textContent ?? '';
|
|
99
|
+
const label = text.startsWith(char) ? text.slice(char.length) : text;
|
|
100
|
+
return { id: element.dataset.mentionId ?? '', label };
|
|
101
|
+
}
|
|
102
|
+
};
|
|
103
|
+
return (edytor) =>
|
|
104
|
+
withRulesAndTriggers(
|
|
105
|
+
edytor,
|
|
106
|
+
{ inlineBlocks: { [kind]: atom } },
|
|
69
107
|
{
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
108
|
+
triggers: [
|
|
109
|
+
{
|
|
110
|
+
char,
|
|
111
|
+
name: kind,
|
|
112
|
+
items: (query, ctx) => options.items(query, ctx),
|
|
113
|
+
label: (item: MentionItem) => item.label,
|
|
114
|
+
key: (item: MentionItem) => item.id,
|
|
115
|
+
menu: options.menu,
|
|
116
|
+
onPick: (item: MentionItem, { edytor, block, from, caret }) => {
|
|
117
|
+
const data: MentionData = { id: item.id, label: item.label };
|
|
118
|
+
const written =
|
|
119
|
+
edytor.insertInline(block.id, from, { type: kind, data }).status === 'applied';
|
|
120
|
+
if (written) caret(from + 1);
|
|
121
|
+
return written;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
]
|
|
85
125
|
}
|
|
86
|
-
|
|
87
|
-
});
|
|
126
|
+
);
|
|
88
127
|
};
|
|
89
128
|
</script>
|
|
90
129
|
|
|
91
130
|
{#snippet mention({ block }: InlineBlockSnippetPayload<Partial<MentionData>>)}
|
|
92
131
|
<span
|
|
93
132
|
class="edytor-mention"
|
|
94
|
-
|
|
95
|
-
data-edytor-mention
|
|
96
|
-
data-mention-id={block.data.id}
|
|
133
|
+
data-selected={block.selected ? 'true' : undefined}
|
|
134
|
+
data-edytor-mention={block.type}
|
|
135
|
+
data-mention-id={block.data.id}>{charOf(block)}{block.data.label ?? ''}</span
|
|
97
136
|
>
|
|
98
137
|
{/snippet}
|
|
99
|
-
|
|
100
|
-
{#snippet row({ item, option, run, select }: TriggerItemPayload<MentionItem>)}
|
|
101
|
-
<button
|
|
102
|
-
type="button"
|
|
103
|
-
class="edytor-mention-row"
|
|
104
|
-
{...option}
|
|
105
|
-
data-testid="trigger-menu-item"
|
|
106
|
-
onmousemove={select}
|
|
107
|
-
onclick={run}
|
|
108
|
-
>
|
|
109
|
-
<span class="avatar" aria-hidden="true">
|
|
110
|
-
{#if avatarOf(item.avatar)}
|
|
111
|
-
<img src={avatarOf(item.avatar)} alt="" />
|
|
112
|
-
{:else}
|
|
113
|
-
{item.label.trim().charAt(0).toUpperCase()}
|
|
114
|
-
{/if}
|
|
115
|
-
</span>
|
|
116
|
-
<span class="name">{item.label}</span>
|
|
117
|
-
{#if item.description}<span class="description">{item.description}</span>{/if}
|
|
118
|
-
</button>
|
|
119
|
-
{/snippet}
|
|
120
|
-
|
|
121
|
-
<style>
|
|
122
|
-
.edytor-mention {
|
|
123
|
-
color: rgba(55, 53, 47, 0.65);
|
|
124
|
-
font-weight: 500;
|
|
125
|
-
white-space: nowrap;
|
|
126
|
-
}
|
|
127
|
-
.edytor-mention.selected {
|
|
128
|
-
border-radius: 3px;
|
|
129
|
-
background: rgba(35, 131, 226, 0.14);
|
|
130
|
-
}
|
|
131
|
-
.edytor-mention-row {
|
|
132
|
-
display: flex;
|
|
133
|
-
align-items: center;
|
|
134
|
-
gap: 8px;
|
|
135
|
-
width: 100%;
|
|
136
|
-
min-height: 32px;
|
|
137
|
-
padding: 4px 8px;
|
|
138
|
-
border: 0;
|
|
139
|
-
border-radius: 6px;
|
|
140
|
-
background: none;
|
|
141
|
-
color: inherit;
|
|
142
|
-
font: inherit;
|
|
143
|
-
text-align: left;
|
|
144
|
-
cursor: pointer;
|
|
145
|
-
}
|
|
146
|
-
.edytor-mention-row[data-selected='true'] {
|
|
147
|
-
background: rgba(33, 27, 23, 0.06);
|
|
148
|
-
}
|
|
149
|
-
.avatar {
|
|
150
|
-
display: grid;
|
|
151
|
-
flex: none;
|
|
152
|
-
place-items: center;
|
|
153
|
-
width: 20px;
|
|
154
|
-
height: 20px;
|
|
155
|
-
overflow: hidden;
|
|
156
|
-
border-radius: 50%;
|
|
157
|
-
background: rgba(84, 72, 49, 0.12);
|
|
158
|
-
font-size: 11px;
|
|
159
|
-
font-weight: 600;
|
|
160
|
-
}
|
|
161
|
-
.avatar img {
|
|
162
|
-
width: 100%;
|
|
163
|
-
height: 100%;
|
|
164
|
-
object-fit: cover;
|
|
165
|
-
}
|
|
166
|
-
.name {
|
|
167
|
-
overflow: hidden;
|
|
168
|
-
text-overflow: ellipsis;
|
|
169
|
-
white-space: nowrap;
|
|
170
|
-
}
|
|
171
|
-
.description {
|
|
172
|
-
margin-left: auto;
|
|
173
|
-
overflow: hidden;
|
|
174
|
-
color: #73726e;
|
|
175
|
-
font-size: 12px;
|
|
176
|
-
text-overflow: ellipsis;
|
|
177
|
-
white-space: nowrap;
|
|
178
|
-
}
|
|
179
|
-
</style>
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
+
import './mention.css';
|
|
1
2
|
import type { Snippet } from 'svelte';
|
|
2
|
-
import type { Plugin, TriggerContext
|
|
3
|
+
import type { Plugin, TriggerContext } from '../../plugins.js';
|
|
3
4
|
import type { TriggerMenuController } from '../triggers/TriggerController.svelte.js';
|
|
4
|
-
import { type PartialLabels } from '../../labels.js';
|
|
5
5
|
/** A person the mention menu offers: what your app's directory answers. */
|
|
6
6
|
export type MentionItem = {
|
|
7
7
|
/** The person's id in your app: stored in the atom. */
|
|
@@ -13,7 +13,7 @@ export type MentionItem = {
|
|
|
13
13
|
/** An avatar image URL (http, https or data). */
|
|
14
14
|
avatar?: string;
|
|
15
15
|
};
|
|
16
|
-
/** What a
|
|
16
|
+
/** What a mention atom stores (whatever its kind). */
|
|
17
17
|
export type MentionData = {
|
|
18
18
|
id: string;
|
|
19
19
|
label: string;
|
|
@@ -21,40 +21,30 @@ export type MentionData = {
|
|
|
21
21
|
export type MentionPluginOptions = {
|
|
22
22
|
/** The people matching `query` (the text typed after `@`), at once or as a promise. */
|
|
23
23
|
items: (query: string, ctx: TriggerContext) => readonly MentionItem[] | Promise<readonly MentionItem[]>;
|
|
24
|
-
/** The character that opens the menu (default `@`). */
|
|
24
|
+
/** The character that opens the menu, and that the atom shows before its label (default `@`). */
|
|
25
25
|
char?: string;
|
|
26
|
-
/** Replace each row of the menu. */
|
|
27
|
-
item?: Snippet<[TriggerItemPayload<MentionItem>]>;
|
|
28
26
|
/**
|
|
29
|
-
*
|
|
30
|
-
*
|
|
27
|
+
* The inline kind the atoms are (default `mention`), and the name of the
|
|
28
|
+
* trigger menu (`controller.trigger.name`). List the plugin once per kind
|
|
29
|
+
* to mention several things (`@` people, `$` tickers as `ticker`); two
|
|
30
|
+
* instances of one kind: the first listed defines it.
|
|
31
|
+
*/
|
|
32
|
+
kind?: string;
|
|
33
|
+
/**
|
|
34
|
+
* The menu's markup and its words; it renders while `controller.isOpen`,
|
|
35
|
+
* at the caret (without it, nothing shows). Keep its ARIA with `{@attach
|
|
36
|
+
* controller.popup}` on the list (name it) and
|
|
31
37
|
* `{...controller.option(index)}` on each row.
|
|
32
38
|
*/
|
|
33
39
|
menu?: Snippet<[TriggerMenuController<MentionItem>]>;
|
|
34
|
-
/** The words the menu shows and says, over the English ones. */
|
|
35
|
-
labels?: PartialLabels<'mention'>;
|
|
36
40
|
};
|
|
37
41
|
/**
|
|
38
42
|
* People mentions, as in Notion: `@` opens a menu of the people your app's
|
|
39
43
|
* `items(query)` answers; picking one replaces `@query` with a `mention`
|
|
40
44
|
* atom (`{ id, label }`) and puts the caret after it, in one undo step.
|
|
45
|
+
* `char` and `kind` make another one (`$` tickers as `ticker` atoms).
|
|
41
46
|
*/
|
|
42
47
|
export declare const createMentionPlugin: (options: MentionPluginOptions) => Plugin;
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
$$bindings?: Bindings;
|
|
46
|
-
} & Exports;
|
|
47
|
-
(internal: unknown, props: {
|
|
48
|
-
$$events?: Events;
|
|
49
|
-
$$slots?: Slots;
|
|
50
|
-
}): Exports & {
|
|
51
|
-
$set?: any;
|
|
52
|
-
$on?: any;
|
|
53
|
-
};
|
|
54
|
-
z_$$bindings?: Bindings;
|
|
55
|
-
}
|
|
56
|
-
declare const MentionPlugin: $$__sveltets_2_IsomorphicComponent<Record<string, never>, {
|
|
57
|
-
[evt: string]: CustomEvent<any>;
|
|
58
|
-
}, {}, {}, string>;
|
|
59
|
-
type MentionPlugin = InstanceType<typeof MentionPlugin>;
|
|
48
|
+
declare const MentionPlugin: import("svelte").Component<Record<string, never>, {}, "">;
|
|
49
|
+
type MentionPlugin = ReturnType<typeof MentionPlugin>;
|
|
60
50
|
export default MentionPlugin;
|
|
@@ -2,12 +2,15 @@
|
|
|
2
2
|
import { getContext, untrack } from 'svelte';
|
|
3
3
|
import type { Block } from '../../block/block.svelte.js';
|
|
4
4
|
import type { Edytor } from '../../edytor.svelte.js';
|
|
5
|
+
import { labelsOf, pageEnglish } from '../../labels.js';
|
|
6
|
+
import { attach, keepSelection } from '../chrome.js';
|
|
5
7
|
import {
|
|
6
8
|
pageHref,
|
|
7
9
|
pageIdOf,
|
|
8
|
-
|
|
10
|
+
pageOptions,
|
|
9
11
|
pageTitleOf,
|
|
10
12
|
storePageTitle,
|
|
13
|
+
type PageBlockLinkPayload,
|
|
11
14
|
type PagePluginOptions
|
|
12
15
|
} from './page.js';
|
|
13
16
|
|
|
@@ -16,7 +19,7 @@
|
|
|
16
19
|
* which open the page. The title is your `title(pageId)`'s answer while it
|
|
17
20
|
* gives one (a reactive read follows renames), else the one the block
|
|
18
21
|
* stores; a different answer is stored, outside the history, by a view
|
|
19
|
-
* that may write.
|
|
22
|
+
* that may write. The app's `link` snippet draws it, else this markup.
|
|
20
23
|
*/
|
|
21
24
|
let {
|
|
22
25
|
data,
|
|
@@ -28,8 +31,10 @@
|
|
|
28
31
|
handle: Block | undefined;
|
|
29
32
|
options: PagePluginOptions;
|
|
30
33
|
} = $props();
|
|
31
|
-
/** The view's words (a suggestion's preview, with no handle,
|
|
32
|
-
const
|
|
34
|
+
/** The view's words and markup (a suggestion's preview, with no handle, has them too). */
|
|
35
|
+
const view = getContext<Edytor>('edytor');
|
|
36
|
+
const labels = labelsOf(view, 'page', pageEnglish);
|
|
37
|
+
const snippet = pageOptions.get(view)?.link;
|
|
33
38
|
|
|
34
39
|
const pageId = $derived(pageIdOf(data.pageId));
|
|
35
40
|
const stored = $derived(pageTitleOf(data.title));
|
|
@@ -86,44 +91,55 @@
|
|
|
86
91
|
const aux = (event: MouseEvent) => {
|
|
87
92
|
if (event.button === 1) open(event);
|
|
88
93
|
};
|
|
94
|
+
const openable = $derived(Boolean(pageId && options.open));
|
|
95
|
+
|
|
96
|
+
const payload: PageBlockLinkPayload = {
|
|
97
|
+
get block() {
|
|
98
|
+
return handle;
|
|
99
|
+
},
|
|
100
|
+
get pageId() {
|
|
101
|
+
return pageId;
|
|
102
|
+
},
|
|
103
|
+
get title() {
|
|
104
|
+
return title;
|
|
105
|
+
},
|
|
106
|
+
get label() {
|
|
107
|
+
return title ?? labels.untitled;
|
|
108
|
+
},
|
|
109
|
+
get href() {
|
|
110
|
+
return href;
|
|
111
|
+
},
|
|
112
|
+
get openable() {
|
|
113
|
+
return openable;
|
|
114
|
+
},
|
|
115
|
+
open: (newTab = false) => {
|
|
116
|
+
if (pageId && options.open) options.open(pageId, { newTab });
|
|
117
|
+
},
|
|
118
|
+
get control() {
|
|
119
|
+
const on = { click: open, auxclick: aux };
|
|
120
|
+
return href
|
|
121
|
+
? attach({ 'data-edytor-page-link': '', draggable: 'false' }, on)
|
|
122
|
+
: attach(
|
|
123
|
+
{ 'data-edytor-page-link': '', disabled: !openable },
|
|
124
|
+
{ ...on, mousedown: keepSelection }
|
|
125
|
+
);
|
|
126
|
+
}
|
|
127
|
+
};
|
|
89
128
|
</script>
|
|
90
129
|
|
|
130
|
+
{#if snippet}
|
|
131
|
+
{@render snippet(payload)}
|
|
132
|
+
{:else if href}
|
|
133
|
+
<a {href} data-edytor-page-link draggable="false" {@attach payload.control}>{@render label()}</a>
|
|
134
|
+
{:else}
|
|
135
|
+
<button type="button" data-edytor-page-link disabled={!openable} {@attach payload.control}
|
|
136
|
+
>{@render label()}</button
|
|
137
|
+
>
|
|
138
|
+
{/if}
|
|
139
|
+
|
|
91
140
|
{#snippet label()}
|
|
92
141
|
<span data-edytor-page-icon aria-hidden="true"></span><span
|
|
93
142
|
data-edytor-page-title
|
|
94
|
-
data-untitled={title ? undefined : 'true'}>{
|
|
143
|
+
data-untitled={title ? undefined : 'true'}>{payload.label}</span
|
|
95
144
|
>
|
|
96
145
|
{/snippet}
|
|
97
|
-
|
|
98
|
-
{#if href}
|
|
99
|
-
<a data-edytor-page-link {href} draggable="false" onclick={open} onauxclick={aux}
|
|
100
|
-
>{@render label()}</a
|
|
101
|
-
>
|
|
102
|
-
{:else}
|
|
103
|
-
<button
|
|
104
|
-
type="button"
|
|
105
|
-
data-edytor-page-link
|
|
106
|
-
disabled={!pageId || !options.open}
|
|
107
|
-
onmousedown={(event) => event.preventDefault()}
|
|
108
|
-
onclick={open}
|
|
109
|
-
onauxclick={aux}>{@render label()}</button
|
|
110
|
-
>
|
|
111
|
-
{/if}
|
|
112
|
-
|
|
113
|
-
<style>
|
|
114
|
-
/* The link's structure, at zero specificity (`:where`); a theme draws it (`themes/notion.css`). */
|
|
115
|
-
:global(:where([data-edytor-page-link])) {
|
|
116
|
-
display: flex;
|
|
117
|
-
align-items: center;
|
|
118
|
-
gap: 6px;
|
|
119
|
-
margin: 0;
|
|
120
|
-
padding: 0;
|
|
121
|
-
border: 0;
|
|
122
|
-
background: none;
|
|
123
|
-
color: inherit;
|
|
124
|
-
font: inherit;
|
|
125
|
-
text-align: start;
|
|
126
|
-
text-decoration: none;
|
|
127
|
-
cursor: pointer;
|
|
128
|
-
}
|
|
129
|
-
</style>
|
|
@@ -1,16 +1,20 @@
|
|
|
1
1
|
<script module lang="ts">
|
|
2
2
|
import type { Plugin, BlockSnippetPayload } from '../../plugins.js';
|
|
3
|
-
import type { Edytor } from '../../edytor.svelte.js';
|
|
4
3
|
import { pageKinds } from '../../crdt/semantics.js';
|
|
5
4
|
import { convertToKind, type KindRow } from '../../kinds.js';
|
|
6
|
-
import { keywordsOf,
|
|
5
|
+
import { pageEnglish, keywordsOf, labelsOf } from '../../labels.js';
|
|
7
6
|
import { getSelectedBlocksInDocumentOrder } from '../../selection/replaceSelection.js';
|
|
8
7
|
import PageLink from './PageLink.svelte';
|
|
9
|
-
import {
|
|
8
|
+
import {
|
|
9
|
+
pageHtml,
|
|
10
|
+
pageIdOf,
|
|
11
|
+
pageTitleOf,
|
|
12
|
+
pageOptions as optionsOf,
|
|
13
|
+
type PageBlockLinkPayload,
|
|
14
|
+
type PagePluginOptions
|
|
15
|
+
} from './page.js';
|
|
10
16
|
|
|
11
|
-
export type { PagePluginOptions };
|
|
12
|
-
|
|
13
|
-
const optionsOf = new WeakMap<Edytor, PagePluginOptions>();
|
|
17
|
+
export type { PageBlockLinkPayload, PagePluginOptions };
|
|
14
18
|
|
|
15
19
|
/**
|
|
16
20
|
* Notion's subpage block: a `page` block links to another document by
|
|
@@ -37,9 +41,8 @@
|
|
|
37
41
|
(edytor) => {
|
|
38
42
|
// First wins, as for the kind: a second listing never replaces it.
|
|
39
43
|
if (!optionsOf.has(edytor)) optionsOf.set(edytor, options);
|
|
40
|
-
pageLabels.claim(edytor, labelsWith('page', options.labels));
|
|
41
44
|
const own = optionsOf.get(edytor)!;
|
|
42
|
-
const labels =
|
|
45
|
+
const labels = labelsOf(edytor, 'page', pageEnglish);
|
|
43
46
|
const { create } = own;
|
|
44
47
|
return {
|
|
45
48
|
hotkeys: {
|
|
@@ -77,16 +80,18 @@
|
|
|
77
80
|
id: 'page.new',
|
|
78
81
|
label: labels.page,
|
|
79
82
|
icon: '📄',
|
|
80
|
-
keywords: keywordsOf(
|
|
81
|
-
'
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
83
|
+
keywords: keywordsOf(edytor, 'page.new', [
|
|
84
|
+
'subpage',
|
|
85
|
+
'new page',
|
|
86
|
+
'document',
|
|
87
|
+
'link'
|
|
88
|
+
]),
|
|
85
89
|
group: 'Basic blocks',
|
|
86
90
|
// Asked of the view given (a `+`'s menu asks it of the block it adds).
|
|
87
|
-
isEnabled: (view = edytor) =>
|
|
91
|
+
isEnabled: (view = edytor) =>
|
|
92
|
+
Boolean(view.selection.textRange().startText?.parent.convertible),
|
|
88
93
|
run: () => {
|
|
89
|
-
const block = edytor.selection.
|
|
94
|
+
const block = edytor.selection.textRange().startText?.parent;
|
|
90
95
|
if (!block?.convertible || !edytor.dispatcher.permits()) return false;
|
|
91
96
|
const made = create();
|
|
92
97
|
const { pageId: raw, title: named } =
|
|
@@ -114,9 +119,6 @@
|
|
|
114
119
|
: []
|
|
115
120
|
};
|
|
116
121
|
};
|
|
117
|
-
|
|
118
|
-
/** The page block without a way to open, name or create pages: a block showing its stored title. */
|
|
119
|
-
export const pagePlugin = createPagePlugin();
|
|
120
122
|
</script>
|
|
121
123
|
|
|
122
124
|
{#snippet page({ block }: BlockSnippetPayload<Record<string, unknown>>)}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { Plugin } from '../../plugins.js';
|
|
2
|
-
import { type PagePluginOptions } from './page.js';
|
|
3
|
-
export type { PagePluginOptions };
|
|
2
|
+
import { type PageBlockLinkPayload, type PagePluginOptions } from './page.js';
|
|
3
|
+
export type { PageBlockLinkPayload, PagePluginOptions };
|
|
4
4
|
/**
|
|
5
5
|
* Notion's subpage block: a `page` block links to another document by
|
|
6
6
|
* id (`data.pageId`), and shows its title (`data.title`, the cache your
|
|
@@ -22,8 +22,6 @@ export type { PagePluginOptions };
|
|
|
22
22
|
* ```
|
|
23
23
|
*/
|
|
24
24
|
export declare const createPagePlugin: (options?: PagePluginOptions) => Plugin;
|
|
25
|
-
/** The page block without a way to open, name or create pages: a block showing its stored title. */
|
|
26
|
-
export declare const pagePlugin: Plugin;
|
|
27
25
|
interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
|
|
28
26
|
new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
|
|
29
27
|
$$bindings?: Bindings;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
import type { Snippet } from 'svelte';
|
|
1
2
|
import type { Block } from '../../block/block.svelte.js';
|
|
2
|
-
import {
|
|
3
|
+
import type { Attachment } from 'svelte/attachments';
|
|
3
4
|
/** The page plugin's options: how your app opens, names, links and creates pages. */
|
|
4
5
|
export type PagePluginOptions = {
|
|
5
6
|
/**
|
|
@@ -30,16 +31,41 @@ export type PagePluginOptions = {
|
|
|
30
31
|
pageId: string;
|
|
31
32
|
title?: string;
|
|
32
33
|
} | null | undefined;
|
|
33
|
-
/**
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
34
|
+
/**
|
|
35
|
+
* The block's link to its page (default: Notion's row, a page icon and
|
|
36
|
+
* the title). Give an `a` (`href={link.href}`) when `link.href` is set,
|
|
37
|
+
* else a `button`, `{@attach link.control}`: a click opens the page
|
|
38
|
+
* (`open`), a modified or middle click in a new tab. The first page plugin listed in a view
|
|
39
|
+
* gives it.
|
|
40
|
+
*/
|
|
41
|
+
link?: Snippet<[PageBlockLinkPayload]>;
|
|
37
42
|
};
|
|
38
|
-
/**
|
|
39
|
-
export
|
|
40
|
-
|
|
41
|
-
|
|
43
|
+
/** What a page block's `link` snippet receives: the page it links to. */
|
|
44
|
+
export type PageBlockLinkPayload = {
|
|
45
|
+
/** The page block; `undefined` in a suggestion's preview (it opens nothing). */
|
|
46
|
+
block: Block | undefined;
|
|
47
|
+
/** The page's id (`null`: the block names none). */
|
|
48
|
+
pageId: string | null;
|
|
49
|
+
/** Its title: your `title` lookup's answer, else the one the block stores. */
|
|
50
|
+
title: string | undefined;
|
|
51
|
+
/** What it reads: its title, else the view's `page.untitled`. */
|
|
52
|
+
label: string;
|
|
53
|
+
/** The page's URL (`href`), if any: draw an `a`. */
|
|
54
|
+
href: string | undefined;
|
|
55
|
+
/** A click may open it: it names a page and the plugin has `open`. */
|
|
56
|
+
openable: boolean;
|
|
57
|
+
/** Open the page (`open`), in a new tab when `newTab`. */
|
|
58
|
+
open: (newTab?: boolean) => void;
|
|
59
|
+
/**
|
|
60
|
+
* The link's attachment (`{@attach link.control}`): its marker
|
|
61
|
+
* (`data-edytor-page-link`), the click and middle click that open it; on
|
|
62
|
+
* an `a`, `draggable="false"`; on a `button`, `disabled` when it cannot
|
|
63
|
+
* open and a press that keeps the editor's selection.
|
|
64
|
+
*/
|
|
65
|
+
control: Attachment<HTMLElement>;
|
|
42
66
|
};
|
|
67
|
+
/** Each view's page options (the first page plugin listed sets them). */
|
|
68
|
+
export declare const pageOptions: WeakMap<object, PagePluginOptions>;
|
|
43
69
|
/** A stored page id: a non-empty string of at most 256 characters (a room id's bounds), else `null`. */
|
|
44
70
|
export declare const pageIdOf: (value: unknown) => string | null;
|
|
45
71
|
/** A title as a page block stores and shows it: trimmed, at most 300 characters, never empty. */
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { viewLabels } from '../../labels.js';
|
|
2
1
|
import { sanitizeLinkHref } from '../richtext/richTextOperations.js';
|
|
3
|
-
|
|
4
|
-
|
|
2
|
+
import { escapeHtml } from '../../clipboard/serializeClipboardFragment.js';
|
|
3
|
+
/** Each view's page options (the first page plugin listed sets them). */
|
|
4
|
+
export const pageOptions = new WeakMap();
|
|
5
5
|
/** A stored page id: a non-empty string of at most 256 characters (a room id's bounds), else `null`. */
|
|
6
6
|
export const pageIdOf = (value) => typeof value === 'string' && value.length > 0 && value.length <= 256 ? value : null;
|
|
7
7
|
/** A title as a page block stores and shows it: trimmed, at most 300 characters, never empty. */
|
|
@@ -24,7 +24,6 @@ export const storePageTitle = (block, pageId, title) => {
|
|
|
24
24
|
return;
|
|
25
25
|
edytor.doc.transact(() => edytor.facade.apply(edytor.facade.prepare.patchData(id, [{ path: ['title'], value: title }])), TITLE_ORIGIN);
|
|
26
26
|
};
|
|
27
|
-
const escapeHtml = (value) => value.replace(/[&<>"']/g, (c) => ({ '&': '&', '<': '<', '>': '>', '"': '"', "'": ''' })[c]);
|
|
28
27
|
/** `options.href`'s URL for `pageId`, through the link sanitizer (no script URL), else `undefined`. */
|
|
29
28
|
export const pageHref = (options, pageId) => (pageId && options.href && sanitizeLinkHref(options.href(pageId))) || undefined;
|
|
30
29
|
/**
|