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,8 +1,8 @@
|
|
|
1
1
|
import type { Plugin } from '../../plugins.js';
|
|
2
2
|
import type { Snippet } from 'svelte';
|
|
3
3
|
import { type UrlPasteController } from './urlPaste.svelte.js';
|
|
4
|
-
import type
|
|
5
|
-
|
|
4
|
+
import { type BookmarkCardPayload } from './media.js';
|
|
5
|
+
export type { BookmarkCardPayload };
|
|
6
6
|
/** What an `unfurl` answers about a page; every field optional. */
|
|
7
7
|
export type BookmarkPreview = {
|
|
8
8
|
title?: string;
|
|
@@ -19,25 +19,22 @@ export type BookmarkPluginOptions = {
|
|
|
19
19
|
* set from the panel or the paste menu; without it the card shows the URL.
|
|
20
20
|
*/
|
|
21
21
|
unfurl?: (url: string) => Promise<BookmarkPreview | null | undefined>;
|
|
22
|
-
/** The words the block shows (its empty panel, its menu row), over the English ones. */
|
|
23
|
-
labels?: PartialLabels<'media'>;
|
|
24
|
-
/** The slash menu's keywords of its command (`block.<kind>`), which replace its own. */
|
|
25
|
-
keywords?: Partial<Record<string, string[]>>;
|
|
26
22
|
/**
|
|
27
|
-
*
|
|
28
|
-
*
|
|
23
|
+
* The menu a URL pasted on an empty line opens (Link, Embed, Bookmark);
|
|
24
|
+
* it renders while `controller.open`, under the line (without it, the
|
|
25
|
+
* link is kept and nothing shows). The
|
|
29
26
|
* view's one menu takes the first `menu` its embed and bookmark
|
|
30
27
|
* plugins pass. Its keys stay the editor's; keep its ARIA with
|
|
31
28
|
* `{@attach controller.popup}` on the list and
|
|
32
|
-
* `{
|
|
29
|
+
* `{@attach controller.option(index)}` on each row.
|
|
33
30
|
*/
|
|
34
31
|
menu?: Snippet<[UrlPasteController]>;
|
|
35
32
|
/**
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
-
*
|
|
33
|
+
* The card of a bookmark with a link (default: Notion's, the title,
|
|
34
|
+
* description and URL beside the cover): `<a href={card.url}
|
|
35
|
+
* {@attach card.link}>`. The first bookmark plugin listed in a view gives its card.
|
|
39
36
|
*/
|
|
40
|
-
|
|
37
|
+
card?: Snippet<[BookmarkCardPayload]>;
|
|
41
38
|
};
|
|
42
39
|
/**
|
|
43
40
|
* Notion's web bookmark: a card linking to a page, with its title,
|
|
@@ -46,8 +43,6 @@ export type BookmarkPluginOptions = {
|
|
|
46
43
|
* `http(s)` link on an empty line offers "Bookmark".
|
|
47
44
|
*/
|
|
48
45
|
export declare const createBookmarkPlugin: (options?: BookmarkPluginOptions) => Plugin;
|
|
49
|
-
/** The bookmark block, without unfurling: the card shows the URL. */
|
|
50
|
-
export declare const bookmarkPlugin: Plugin;
|
|
51
46
|
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> {
|
|
52
47
|
new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
|
|
53
48
|
$$bindings?: Bindings;
|
|
@@ -1,66 +1,68 @@
|
|
|
1
1
|
<script module lang="ts">
|
|
2
2
|
import type { Plugin, BlockSnippetPayload } from '../../plugins.js';
|
|
3
3
|
import type { Block } from '../../block/block.svelte.js';
|
|
4
|
-
import
|
|
5
|
-
import
|
|
6
|
-
import { mediaKinds } from '../../crdt/semantics.js';
|
|
4
|
+
import EmptySlot from './EmptySlot.svelte';
|
|
5
|
+
import Control from '../Control.svelte';
|
|
7
6
|
import type { Snippet } from 'svelte';
|
|
8
7
|
import { urlPaste, type UrlPasteController } from './urlPaste.svelte.js';
|
|
9
|
-
import type { MediaEmptyController } from './empty.svelte.js';
|
|
10
|
-
import { keywordsOf, labelsWith, type PartialLabels } from '../../labels.js';
|
|
11
8
|
import {
|
|
12
9
|
EMBED_ALLOW,
|
|
13
10
|
EMBED_PROVIDERS,
|
|
14
11
|
EMBED_SANDBOX,
|
|
12
|
+
MEDIA_ICONS,
|
|
15
13
|
claimed,
|
|
16
14
|
embedSourceOf,
|
|
17
|
-
mediaLabels,
|
|
18
|
-
mediaEmpty,
|
|
19
15
|
escapeHtml,
|
|
16
|
+
mediaControl,
|
|
17
|
+
mediaLink,
|
|
18
|
+
LINK_REL,
|
|
19
|
+
mediaPlugin,
|
|
20
|
+
mediaView,
|
|
20
21
|
safeWebUrl,
|
|
22
|
+
type EmbedFallbackPayload,
|
|
21
23
|
type EmbedProvider
|
|
22
24
|
} from './media.js';
|
|
23
25
|
|
|
24
|
-
export {
|
|
26
|
+
export {
|
|
27
|
+
EMBED_ALLOW,
|
|
28
|
+
EMBED_PROVIDERS,
|
|
29
|
+
EMBED_SANDBOX,
|
|
30
|
+
embedSourceOf,
|
|
31
|
+
type EmbedFallbackPayload,
|
|
32
|
+
type EmbedProvider
|
|
33
|
+
};
|
|
25
34
|
|
|
26
35
|
export type EmbedPluginOptions = {
|
|
27
36
|
/** The allowlist (default {@link EMBED_PROVIDERS}); a link none of them plays shows no frame. */
|
|
28
37
|
providers?: readonly EmbedProvider[];
|
|
29
|
-
/** The words the block shows (its empty panel, its menu row), over the English ones. */
|
|
30
|
-
labels?: PartialLabels<'media'>;
|
|
31
|
-
/** The slash menu's keywords of its command (`block.<kind>`), which replace its own. */
|
|
32
|
-
keywords?: Partial<Record<string, string[]>>;
|
|
33
38
|
/**
|
|
34
|
-
*
|
|
35
|
-
*
|
|
39
|
+
* The menu a URL pasted on an empty line opens (Link, Embed, Bookmark);
|
|
40
|
+
* it renders while `controller.open`, under the line (without it, the
|
|
41
|
+
* link is kept and nothing shows). The
|
|
36
42
|
* view's one menu takes the first `menu` its embed and bookmark
|
|
37
43
|
* plugins pass. Its keys stay the editor's; keep its ARIA with
|
|
38
44
|
* `{@attach controller.popup}` on the list and
|
|
39
|
-
* `{
|
|
45
|
+
* `{@attach controller.option(index)}` on each row.
|
|
40
46
|
*/
|
|
41
47
|
menu?: Snippet<[UrlPasteController]>;
|
|
42
48
|
/**
|
|
43
|
-
*
|
|
44
|
-
* or a
|
|
45
|
-
*
|
|
49
|
+
* An embed whose link no allowed provider plays (a peer may store any),
|
|
50
|
+
* or a suggestion's preview: a plain link, never a frame (default: the
|
|
51
|
+
* URL as a link): `<a href={fallback.url} {@attach fallback.link}>`. The first embed
|
|
52
|
+
* plugin listed in a view gives it.
|
|
46
53
|
*/
|
|
47
|
-
|
|
54
|
+
fallback?: Snippet<[EmbedFallbackPayload]>;
|
|
48
55
|
};
|
|
49
56
|
|
|
50
|
-
|
|
57
|
+
/** The view's fallback markup, if the app gave one. */
|
|
58
|
+
const fallbackOf = mediaControl('embed', 'fallback');
|
|
59
|
+
|
|
51
60
|
/**
|
|
52
61
|
* The view's allowlist: the first embed plugin listed in it (first wins,
|
|
53
62
|
* as for the kind). Never a broader list: no entry plays nothing.
|
|
54
63
|
*/
|
|
55
|
-
const providers = (block: Block | undefined) =>
|
|
56
|
-
|
|
57
|
-
/** Store `value` as the block's link when a provider plays it; answers whether it did. */
|
|
58
|
-
const embedLink = (block: Block | undefined, value: string) => {
|
|
59
|
-
const url = safeWebUrl(value);
|
|
60
|
-
if (!block || !url || !embedSourceOf(url, providers(block))) return false;
|
|
61
|
-
block.data.url = url;
|
|
62
|
-
return true;
|
|
63
|
-
};
|
|
64
|
+
const providers = (block: Block | undefined) =>
|
|
65
|
+
mediaView(block?.edytor, 'embed')?.providers ?? [];
|
|
64
66
|
|
|
65
67
|
/**
|
|
66
68
|
* Notion's embed block: an "Embed a link" panel until it has a link, then
|
|
@@ -71,68 +73,54 @@
|
|
|
71
73
|
* text is the caption. Pasting a link a provider plays on an empty line
|
|
72
74
|
* offers "Embed".
|
|
73
75
|
*/
|
|
74
|
-
export const createEmbedPlugin =
|
|
75
|
-
|
|
76
|
-
(
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
76
|
+
export const createEmbedPlugin = (options: EmbedPluginOptions = {}): Plugin => {
|
|
77
|
+
const allowed = options.providers ?? EMBED_PROVIDERS;
|
|
78
|
+
return mediaPlugin(
|
|
79
|
+
'embed',
|
|
80
|
+
['iframe', 'youtube', 'vimeo', 'loom', 'figma', 'codepen', 'spotify'],
|
|
81
|
+
(edytor) => ({
|
|
82
|
+
providers: allowed,
|
|
83
|
+
fallback: options.fallback,
|
|
84
|
+
// The block's link, when a provider plays it.
|
|
85
|
+
store: (block, value) => {
|
|
86
|
+
const url = safeWebUrl(value);
|
|
87
|
+
if (!url || !embedSourceOf(url, allowed)) return 'invalid';
|
|
88
|
+
block.edytor.patchData(block.id, [{ path: ['url'], value: url }]);
|
|
89
|
+
return null;
|
|
90
|
+
},
|
|
91
|
+
hooks: urlPaste(
|
|
84
92
|
edytor,
|
|
85
93
|
{
|
|
86
94
|
type: 'embed',
|
|
87
|
-
|
|
88
|
-
icon: '⧉',
|
|
95
|
+
icon: MEDIA_ICONS.embed,
|
|
89
96
|
data: (url) => (embedSourceOf(url, allowed) ? { url } : null)
|
|
90
97
|
},
|
|
91
|
-
labels,
|
|
92
98
|
options.menu
|
|
93
99
|
),
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
{
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
const url = safeWebUrl(block.data?.url);
|
|
114
|
-
const media = player
|
|
115
|
-
? `<iframe src="${escapeHtml(player.src)}" title="${escapeHtml(player.provider.name)}" sandbox="${EMBED_SANDBOX}" allowfullscreen></iframe>`
|
|
116
|
-
: url
|
|
117
|
-
? `<a href="${escapeHtml(url)}">${escapeHtml(url)}</a>`
|
|
118
|
-
: '';
|
|
119
|
-
return `<figure>${media}<figcaption>${caption}</figcaption></figure>`;
|
|
120
|
-
},
|
|
121
|
-
plain: (block, caption) =>
|
|
122
|
-
[safeWebUrl(block.data?.url), caption].filter(Boolean).join('\n'),
|
|
123
|
-
// An allowlisted `iframe` (bare, or in a `figure`): its `src` is the link.
|
|
124
|
-
parse: (el) => {
|
|
125
|
-
const src = claimed(el, 'iframe')?.getAttribute('src');
|
|
126
|
-
const url = embedSourceOf(src, allowed) && safeWebUrl(src);
|
|
127
|
-
return url ? { url } : undefined;
|
|
128
|
-
}
|
|
100
|
+
record: {
|
|
101
|
+
snippet: embed,
|
|
102
|
+
html: (block, caption) => {
|
|
103
|
+
const player = embedSourceOf(block.data?.url, allowed);
|
|
104
|
+
const url = safeWebUrl(block.data?.url);
|
|
105
|
+
const media = player
|
|
106
|
+
? `<iframe src="${escapeHtml(player.src)}" title="${escapeHtml(player.provider.name)}" sandbox="${EMBED_SANDBOX}" allowfullscreen></iframe>`
|
|
107
|
+
: url
|
|
108
|
+
? `<a href="${escapeHtml(url)}">${escapeHtml(url)}</a>`
|
|
109
|
+
: '';
|
|
110
|
+
return `<figure>${media}<figcaption>${caption}</figcaption></figure>`;
|
|
111
|
+
},
|
|
112
|
+
plain: (block, caption) =>
|
|
113
|
+
[safeWebUrl(block.data?.url), caption].filter(Boolean).join('\n'),
|
|
114
|
+
// An allowlisted `iframe` (bare, or in a `figure`): its `src` is the link.
|
|
115
|
+
parse: (el) => {
|
|
116
|
+
const src = claimed(el, 'iframe')?.getAttribute('src');
|
|
117
|
+
const url = embedSourceOf(src, allowed) && safeWebUrl(src);
|
|
118
|
+
return url ? { url } : undefined;
|
|
129
119
|
}
|
|
130
120
|
}
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
/** The embed block with the default providers. */
|
|
135
|
-
export const embedPlugin = createEmbedPlugin();
|
|
121
|
+
})
|
|
122
|
+
);
|
|
123
|
+
};
|
|
136
124
|
</script>
|
|
137
125
|
|
|
138
126
|
{#snippet embed({ block, content }: BlockSnippetPayload<{ url?: string }>)}
|
|
@@ -161,15 +149,18 @@
|
|
|
161
149
|
<!-- A link no provider plays (a peer may store any), or a suggestion's preview (no handle, so no
|
|
162
150
|
view's allowlist): a plain link, never a frame. -->
|
|
163
151
|
<div use:block.void data-edytor-embed-unsupported>
|
|
164
|
-
<
|
|
152
|
+
<Control
|
|
153
|
+
own={fallbackOf}
|
|
154
|
+
{initial}
|
|
155
|
+
payload={{ block: block.handle, url, link: mediaLink() }}
|
|
156
|
+
/>
|
|
165
157
|
</div>
|
|
166
158
|
{:else}
|
|
167
159
|
<div use:block.void data-edytor-media-empty>
|
|
168
|
-
<
|
|
160
|
+
<EmptySlot
|
|
169
161
|
block={block.handle}
|
|
170
162
|
kind="embed"
|
|
171
|
-
|
|
172
|
-
link={(value) => embedLink(block.handle, value)}
|
|
163
|
+
viewOf={(edytor) => mediaView(edytor, 'embed')}
|
|
173
164
|
/>
|
|
174
165
|
</div>
|
|
175
166
|
{/if}
|
|
@@ -177,3 +168,8 @@
|
|
|
177
168
|
<!-- svelte-ignore a11y_figcaption_parent -->
|
|
178
169
|
<figcaption>{@render content()}</figcaption>
|
|
179
170
|
{/snippet}
|
|
171
|
+
|
|
172
|
+
<!-- The link itself. -->
|
|
173
|
+
{#snippet initial({ url, link }: EmbedFallbackPayload)}
|
|
174
|
+
<a href={url} target="_blank" rel={LINK_REL} {@attach link}>{url}</a>
|
|
175
|
+
{/snippet}
|
|
@@ -1,32 +1,28 @@
|
|
|
1
1
|
import type { Plugin } from '../../plugins.js';
|
|
2
2
|
import type { Snippet } from 'svelte';
|
|
3
3
|
import { type UrlPasteController } from './urlPaste.svelte.js';
|
|
4
|
-
import type
|
|
5
|
-
|
|
6
|
-
import { EMBED_ALLOW, EMBED_PROVIDERS, EMBED_SANDBOX, embedSourceOf, type EmbedProvider } from './media.js';
|
|
7
|
-
export { EMBED_ALLOW, EMBED_PROVIDERS, EMBED_SANDBOX, embedSourceOf, type EmbedProvider };
|
|
4
|
+
import { EMBED_ALLOW, EMBED_PROVIDERS, EMBED_SANDBOX, embedSourceOf, type EmbedFallbackPayload, type EmbedProvider } from './media.js';
|
|
5
|
+
export { EMBED_ALLOW, EMBED_PROVIDERS, EMBED_SANDBOX, embedSourceOf, type EmbedFallbackPayload, type EmbedProvider };
|
|
8
6
|
export type EmbedPluginOptions = {
|
|
9
7
|
/** The allowlist (default {@link EMBED_PROVIDERS}); a link none of them plays shows no frame. */
|
|
10
8
|
providers?: readonly EmbedProvider[];
|
|
11
|
-
/** The words the block shows (its empty panel, its menu row), over the English ones. */
|
|
12
|
-
labels?: PartialLabels<'media'>;
|
|
13
|
-
/** The slash menu's keywords of its command (`block.<kind>`), which replace its own. */
|
|
14
|
-
keywords?: Partial<Record<string, string[]>>;
|
|
15
9
|
/**
|
|
16
|
-
*
|
|
17
|
-
*
|
|
10
|
+
* The menu a URL pasted on an empty line opens (Link, Embed, Bookmark);
|
|
11
|
+
* it renders while `controller.open`, under the line (without it, the
|
|
12
|
+
* link is kept and nothing shows). The
|
|
18
13
|
* view's one menu takes the first `menu` its embed and bookmark
|
|
19
14
|
* plugins pass. Its keys stay the editor's; keep its ARIA with
|
|
20
15
|
* `{@attach controller.popup}` on the list and
|
|
21
|
-
* `{
|
|
16
|
+
* `{@attach controller.option(index)}` on each row.
|
|
22
17
|
*/
|
|
23
18
|
menu?: Snippet<[UrlPasteController]>;
|
|
24
19
|
/**
|
|
25
|
-
*
|
|
26
|
-
* or a
|
|
27
|
-
*
|
|
20
|
+
* An embed whose link no allowed provider plays (a peer may store any),
|
|
21
|
+
* or a suggestion's preview: a plain link, never a frame (default: the
|
|
22
|
+
* URL as a link): `<a href={fallback.url} {@attach fallback.link}>`. The first embed
|
|
23
|
+
* plugin listed in a view gives it.
|
|
28
24
|
*/
|
|
29
|
-
|
|
25
|
+
fallback?: Snippet<[EmbedFallbackPayload]>;
|
|
30
26
|
};
|
|
31
27
|
/**
|
|
32
28
|
* Notion's embed block: an "Embed a link" panel until it has a link, then
|
|
@@ -38,8 +34,6 @@ export type EmbedPluginOptions = {
|
|
|
38
34
|
* offers "Embed".
|
|
39
35
|
*/
|
|
40
36
|
export declare const createEmbedPlugin: (options?: EmbedPluginOptions) => Plugin;
|
|
41
|
-
/** The embed block with the default providers. */
|
|
42
|
-
export declare const embedPlugin: Plugin;
|
|
43
37
|
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> {
|
|
44
38
|
new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
|
|
45
39
|
$$bindings?: Bindings;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
<script lang="ts" module>
|
|
2
|
+
import type { Component, Snippet } from 'svelte';
|
|
3
|
+
import type { Block } from '../../block/block.svelte.js';
|
|
4
|
+
import type { Edytor } from '../../edytor.svelte.js';
|
|
5
|
+
import type { MediaKind } from './media.js';
|
|
6
|
+
import type { EmptyView, MediaEmptyController } from './empty.svelte.js';
|
|
7
|
+
|
|
8
|
+
/** What an empty image or media block renders in its view: the media empty plugin's host and snippet. */
|
|
9
|
+
type EmptyHost = {
|
|
10
|
+
Host: Component<{
|
|
11
|
+
block: Block | undefined;
|
|
12
|
+
kind: MediaKind | 'image';
|
|
13
|
+
viewOf: (edytor: Edytor | undefined) => EmptyView | undefined;
|
|
14
|
+
empty: Snippet<[MediaEmptyController]>;
|
|
15
|
+
}>;
|
|
16
|
+
empty: Snippet<[MediaEmptyController]>;
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
/** Each view's empty-block chrome (the first media empty plugin listed claims it). */
|
|
20
|
+
export const emptyHosts = new WeakMap<object, EmptyHost>();
|
|
21
|
+
</script>
|
|
22
|
+
|
|
23
|
+
<script lang="ts">
|
|
24
|
+
import { getContext, untrack } from 'svelte';
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Where an empty image or media block shows its empty state: the view's
|
|
28
|
+
* media empty plugin's host, when one is listed (else nothing). The view
|
|
29
|
+
* rendering it is the block's, or a suggestion preview's.
|
|
30
|
+
*/
|
|
31
|
+
let {
|
|
32
|
+
block,
|
|
33
|
+
kind,
|
|
34
|
+
viewOf
|
|
35
|
+
}: {
|
|
36
|
+
block: Block | undefined;
|
|
37
|
+
kind: MediaKind | 'image';
|
|
38
|
+
viewOf: (edytor: Edytor | undefined) => EmptyView | undefined;
|
|
39
|
+
} = $props();
|
|
40
|
+
const view = getContext<Edytor>('edytor');
|
|
41
|
+
const host = untrack(() => emptyHosts.get(block?.edytor ?? view));
|
|
42
|
+
</script>
|
|
43
|
+
|
|
44
|
+
{#if host}<host.Host {block} {kind} {viewOf} empty={host.empty} />{/if}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { Component, Snippet } from 'svelte';
|
|
2
|
+
import type { Block } from '../../block/block.svelte.js';
|
|
3
|
+
import type { Edytor } from '../../edytor.svelte.js';
|
|
4
|
+
import type { MediaKind } from './media.js';
|
|
5
|
+
import type { EmptyView, MediaEmptyController } from './empty.svelte.js';
|
|
6
|
+
/** What an empty image or media block renders in its view: the media empty plugin's host and snippet. */
|
|
7
|
+
type EmptyHost = {
|
|
8
|
+
Host: Component<{
|
|
9
|
+
block: Block | undefined;
|
|
10
|
+
kind: MediaKind | 'image';
|
|
11
|
+
viewOf: (edytor: Edytor | undefined) => EmptyView | undefined;
|
|
12
|
+
empty: Snippet<[MediaEmptyController]>;
|
|
13
|
+
}>;
|
|
14
|
+
empty: Snippet<[MediaEmptyController]>;
|
|
15
|
+
};
|
|
16
|
+
/** Each view's empty-block chrome (the first media empty plugin listed claims it). */
|
|
17
|
+
export declare const emptyHosts: WeakMap<object, EmptyHost>;
|
|
18
|
+
type $$ComponentProps = {
|
|
19
|
+
block: Block | undefined;
|
|
20
|
+
kind: MediaKind | 'image';
|
|
21
|
+
viewOf: (edytor: Edytor | undefined) => EmptyView | undefined;
|
|
22
|
+
};
|
|
23
|
+
declare const EmptySlot: Component<$$ComponentProps, {}, "">;
|
|
24
|
+
type EmptySlot = ReturnType<typeof EmptySlot>;
|
|
25
|
+
export default EmptySlot;
|
|
@@ -1,28 +1,27 @@
|
|
|
1
1
|
<script module lang="ts">
|
|
2
|
-
import type {
|
|
3
|
-
import type {
|
|
4
|
-
import type
|
|
5
|
-
import
|
|
6
|
-
import {
|
|
7
|
-
import { keywordsOf, labelsWith } from '../../labels.js';
|
|
8
|
-
import {
|
|
9
|
-
escapeHtml,
|
|
10
|
-
fileNameOf,
|
|
11
|
-
mediaLabels,
|
|
12
|
-
mediaEmpty,
|
|
13
|
-
safeMediaSrc,
|
|
14
|
-
mediaUploads,
|
|
15
|
-
type MediaPluginOptions
|
|
16
|
-
} from './media.js';
|
|
2
|
+
import type { Snippet } from 'svelte';
|
|
3
|
+
import type { Plugin } from '../../plugins.js';
|
|
4
|
+
import { escapeHtml, fileNameOf, safeMediaSrc, type FileRowPayload } from './media.js';
|
|
5
|
+
import { sourcePlugin } from './SourceBlock.svelte';
|
|
6
|
+
import type { Uploader } from '../uploads.svelte.js';
|
|
17
7
|
|
|
18
|
-
|
|
8
|
+
export type { FileRowPayload };
|
|
19
9
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
10
|
+
export type FilePluginOptions = {
|
|
11
|
+
/**
|
|
12
|
+
* A file's row once it has a source (default: Notion's, a paperclip,
|
|
13
|
+
* its name and size): `<a href={row.src} {@attach row.link}>`, which
|
|
14
|
+
* downloads the file. The first file plugin listed in a view gives its row.
|
|
15
|
+
*/
|
|
16
|
+
row?: Snippet<[FileRowPayload]>;
|
|
17
|
+
/**
|
|
18
|
+
* Upload a file and answer its URL: an empty file block's Upload, and
|
|
19
|
+
* the pasted and dropped files no other kind takes, each placed as a
|
|
20
|
+
* file block at once (one undo step), its row showing the file's name,
|
|
21
|
+
* size and progress, then filled with the URL this answers. Without
|
|
22
|
+
* it, files are only linked.
|
|
23
|
+
*/
|
|
24
|
+
upload?: Uploader;
|
|
26
25
|
};
|
|
27
26
|
|
|
28
27
|
/**
|
|
@@ -30,96 +29,29 @@
|
|
|
30
29
|
* linked), shown as its name and size, linking to the file, with an
|
|
31
30
|
* editable caption. Void: its only text is the caption.
|
|
32
31
|
*/
|
|
33
|
-
export const createFilePlugin =
|
|
34
|
-
(
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
icon: '📎',
|
|
54
|
-
keywords: keywordsOf(
|
|
55
|
-
'block.file',
|
|
56
|
-
['attachment', 'upload', 'pdf', 'document'],
|
|
57
|
-
options.keywords
|
|
58
|
-
),
|
|
59
|
-
group: 'Media'
|
|
60
|
-
}
|
|
61
|
-
],
|
|
62
|
-
html: (block, caption) => {
|
|
63
|
-
const src = safeMediaSrc(block.data?.src);
|
|
64
|
-
const name = String(block.data?.name || (src && fileNameOf(src)) || '');
|
|
65
|
-
const link = src ? `<a href="${escapeHtml(src)}">${escapeHtml(name)}</a>` : '';
|
|
66
|
-
return `<figure data-edytor-file>${link}<figcaption>${caption}</figcaption></figure>`;
|
|
67
|
-
},
|
|
68
|
-
plain: (block, caption) =>
|
|
69
|
-
[safeMediaSrc(block.data?.src), caption].filter(Boolean).join('\n'),
|
|
70
|
-
// Its own export: a `figure[data-edytor-file]` holding the link.
|
|
71
|
-
parse: (el) => {
|
|
72
|
-
if (el.localName !== 'figure' || !el.hasAttribute('data-edytor-file')) return;
|
|
73
|
-
const anchor = el.querySelector('a[href]');
|
|
74
|
-
const src = safeMediaSrc(anchor?.getAttribute('href'));
|
|
75
|
-
const name = anchor?.textContent?.trim().slice(0, 300);
|
|
76
|
-
return src ? { src, name: name || fileNameOf(src) } : undefined;
|
|
77
|
-
}
|
|
78
|
-
}
|
|
32
|
+
export const createFilePlugin = (options: FilePluginOptions = {}): Plugin =>
|
|
33
|
+
sourcePlugin(
|
|
34
|
+
'file',
|
|
35
|
+
['attachment', 'upload', 'pdf', 'document'],
|
|
36
|
+
{
|
|
37
|
+
html: (block, caption) => {
|
|
38
|
+
const src = safeMediaSrc(block.data?.src);
|
|
39
|
+
const name = String(block.data?.name || (src && fileNameOf(src)) || '');
|
|
40
|
+
const link = src ? `<a href="${escapeHtml(src)}">${escapeHtml(name)}</a>` : '';
|
|
41
|
+
return `<figure data-edytor-file>${link}<figcaption>${caption}</figcaption></figure>`;
|
|
42
|
+
},
|
|
43
|
+
plain: (block, caption) =>
|
|
44
|
+
[safeMediaSrc(block.data?.src), caption].filter(Boolean).join('\n'),
|
|
45
|
+
// Its own export: a `figure[data-edytor-file]` holding the link.
|
|
46
|
+
parse: (el) => {
|
|
47
|
+
if (el.localName !== 'figure' || !el.hasAttribute('data-edytor-file')) return;
|
|
48
|
+
const anchor = el.querySelector('a[href]');
|
|
49
|
+
const src = safeMediaSrc(anchor?.getAttribute('href'));
|
|
50
|
+
const name = anchor?.textContent?.trim().slice(0, 300);
|
|
51
|
+
return src ? { src, name: name || fileNameOf(src) } : undefined;
|
|
79
52
|
}
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
export const filePlugin = createFilePlugin();
|
|
53
|
+
},
|
|
54
|
+
{ row: options.row },
|
|
55
|
+
options.upload
|
|
56
|
+
);
|
|
85
57
|
</script>
|
|
86
|
-
|
|
87
|
-
{#snippet file({ block, content }: BlockSnippetPayload<Record<string, unknown>>)}
|
|
88
|
-
{@const src = safeMediaSrc(block.data.src)}
|
|
89
|
-
{#if src}
|
|
90
|
-
{@const name =
|
|
91
|
-
typeof block.data.name === 'string' && block.data.name ? block.data.name : fileNameOf(src)}
|
|
92
|
-
{@const size =
|
|
93
|
-
typeof block.data.size === 'number'
|
|
94
|
-
? mediaLabels.file.of(block.handle?.edytor).fileSize(block.data.size)
|
|
95
|
-
: ''}
|
|
96
|
-
<div use:block.void data-edytor-file>
|
|
97
|
-
<a
|
|
98
|
-
href={src}
|
|
99
|
-
target="_blank"
|
|
100
|
-
rel="noopener noreferrer nofollow"
|
|
101
|
-
download={name}
|
|
102
|
-
draggable="false"
|
|
103
|
-
>
|
|
104
|
-
<span aria-hidden="true">📎</span>
|
|
105
|
-
<span data-edytor-file-name>{name}</span>
|
|
106
|
-
{#if size}<span data-edytor-file-size>{size}</span>{/if}
|
|
107
|
-
</a>
|
|
108
|
-
</div>
|
|
109
|
-
{:else}
|
|
110
|
-
{@const upload = block.handle && uploadOf.get(block.handle.edytor)}
|
|
111
|
-
<div use:block.void data-edytor-media-empty>
|
|
112
|
-
<MediaEmpty
|
|
113
|
-
block={block.handle}
|
|
114
|
-
kind="file"
|
|
115
|
-
icon="📎"
|
|
116
|
-
{upload}
|
|
117
|
-
link={(value) => attach(block.handle, value)}
|
|
118
|
-
file={(picked, src) => attach(block.handle, src, picked.name, picked.size)}
|
|
119
|
-
/>
|
|
120
|
-
</div>
|
|
121
|
-
{/if}
|
|
122
|
-
<!-- The core renders the kind's <figure> around this markup. -->
|
|
123
|
-
<!-- svelte-ignore a11y_figcaption_parent -->
|
|
124
|
-
<figcaption>{@render content()}</figcaption>
|
|
125
|
-
{/snippet}
|
|
@@ -1,13 +1,30 @@
|
|
|
1
|
+
import type { Snippet } from 'svelte';
|
|
1
2
|
import type { Plugin } from '../../plugins.js';
|
|
2
|
-
import { type
|
|
3
|
+
import { type FileRowPayload } from './media.js';
|
|
4
|
+
import type { Uploader } from '../uploads.svelte.js';
|
|
5
|
+
export type { FileRowPayload };
|
|
6
|
+
export type FilePluginOptions = {
|
|
7
|
+
/**
|
|
8
|
+
* A file's row once it has a source (default: Notion's, a paperclip,
|
|
9
|
+
* its name and size): `<a href={row.src} {@attach row.link}>`, which
|
|
10
|
+
* downloads the file. The first file plugin listed in a view gives its row.
|
|
11
|
+
*/
|
|
12
|
+
row?: Snippet<[FileRowPayload]>;
|
|
13
|
+
/**
|
|
14
|
+
* Upload a file and answer its URL: an empty file block's Upload, and
|
|
15
|
+
* the pasted and dropped files no other kind takes, each placed as a
|
|
16
|
+
* file block at once (one undo step), its row showing the file's name,
|
|
17
|
+
* size and progress, then filled with the URL this answers. Without
|
|
18
|
+
* it, files are only linked.
|
|
19
|
+
*/
|
|
20
|
+
upload?: Uploader;
|
|
21
|
+
};
|
|
3
22
|
/**
|
|
4
23
|
* Notion's file block: an attachment, uploaded through `upload` (or
|
|
5
24
|
* linked), shown as its name and size, linking to the file, with an
|
|
6
25
|
* editable caption. Void: its only text is the caption.
|
|
7
26
|
*/
|
|
8
|
-
export declare const createFilePlugin: (options?:
|
|
9
|
-
/** The file block, links only. */
|
|
10
|
-
export declare const filePlugin: Plugin;
|
|
27
|
+
export declare const createFilePlugin: (options?: FilePluginOptions) => Plugin;
|
|
11
28
|
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> {
|
|
12
29
|
new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
|
|
13
30
|
$$bindings?: Bindings;
|