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,12 +1,12 @@
|
|
|
1
1
|
<script module lang="ts">
|
|
2
|
+
import './richtext.css';
|
|
2
3
|
import type { Plugin, BlockSnippetPayload, KindPreset, PlaceholderView } from '../../plugins.js';
|
|
3
|
-
import
|
|
4
|
+
import { branded } from '../brand.js';
|
|
4
5
|
import type { Edytor } from '../../edytor.svelte.js';
|
|
5
6
|
import { presetId } from '../../kinds.js';
|
|
6
7
|
import type { Text } from '../../text/text.svelte.js';
|
|
7
8
|
import type { SerializableContent } from '../../utils/json.js';
|
|
8
9
|
import type { HotKey } from '../../session/keymap.js';
|
|
9
|
-
import type { Snippet } from 'svelte';
|
|
10
10
|
import {
|
|
11
11
|
openLink,
|
|
12
12
|
pastedLink,
|
|
@@ -20,24 +20,34 @@
|
|
|
20
20
|
import { firstUriListEntry } from '../../events/dataTransferPayload.js';
|
|
21
21
|
import { flipToggles, shownSelectionBlocks } from '../../selection/replaceSelection.js';
|
|
22
22
|
import { mediaKinds, richTextKinds, richTextMarks } from '../../crdt/semantics.js';
|
|
23
|
-
import {
|
|
24
|
-
import { richTextLabels } from './labels.js';
|
|
25
|
-
import { onPress } from '../../events/onFocus.js';
|
|
23
|
+
import { richTextEnglish, keywordsOf, labelsOf, type RichTextLabels } from '../../labels.js';
|
|
26
24
|
import TodoCheckbox from './TodoCheckbox.svelte';
|
|
27
25
|
import EmptyBody from './EmptyBody.svelte';
|
|
28
26
|
import CalloutIcon from './CalloutIcon.svelte';
|
|
29
|
-
import
|
|
27
|
+
import RichTextControl from './RichTextControl.svelte';
|
|
30
28
|
import {
|
|
31
|
-
CALLOUT_ICONS,
|
|
32
|
-
CalloutIconPicker,
|
|
33
29
|
DEFAULT_CALLOUT_ICON,
|
|
34
30
|
calloutHtml,
|
|
35
|
-
|
|
31
|
+
calloutIcons,
|
|
32
|
+
calloutPickers,
|
|
36
33
|
iconOf
|
|
37
|
-
} from './
|
|
34
|
+
} from './callouts.js';
|
|
35
|
+
import { listen } from '../../utils/listen.js';
|
|
36
|
+
import { onLastLine } from '../../session/navigation.js';
|
|
37
|
+
import { bodyShows } from '../../selection/visibility.js';
|
|
38
|
+
import { openBody } from './body.js';
|
|
39
|
+
import type { Snippet } from 'svelte';
|
|
40
|
+
import {
|
|
41
|
+
richTextControls,
|
|
42
|
+
toggleTodo,
|
|
43
|
+
type CalloutIconPayload,
|
|
44
|
+
type EmptyBodyPayload,
|
|
45
|
+
type TodoCheckboxPayload
|
|
46
|
+
} from './controls.svelte.js';
|
|
47
|
+
|
|
48
|
+
export type { CalloutIconPayload, EmptyBodyPayload, TodoCheckboxPayload };
|
|
38
49
|
|
|
39
|
-
export { richTextOperations
|
|
40
|
-
export type { CalloutIconOption } from './calloutIcons.svelte.js';
|
|
50
|
+
export { richTextOperations };
|
|
41
51
|
|
|
42
52
|
const nativeFormatMarks = {
|
|
43
53
|
formatBold: 'bold',
|
|
@@ -57,7 +67,7 @@
|
|
|
57
67
|
/** A native disclosure: the browser owns `open` (declared view state). */
|
|
58
68
|
const disclosure = { element: 'details', viewState: ['open'] };
|
|
59
69
|
/** The kinds drawn as a disclosure: a toggle this view creates opens (`body.open`). */
|
|
60
|
-
const DISCLOSURES = new Set(['toggle', 'toggle-heading'
|
|
70
|
+
const DISCLOSURES = new Set(['toggle', 'toggle-heading']);
|
|
61
71
|
/**
|
|
62
72
|
* A list's elements without list semantics (`role="none"`): a list's items
|
|
63
73
|
* are sibling blocks, never the only children of one `ul` or `ol`, so an
|
|
@@ -106,123 +116,108 @@
|
|
|
106
116
|
undefined;
|
|
107
117
|
|
|
108
118
|
/**
|
|
109
|
-
*
|
|
110
|
-
*
|
|
111
|
-
* paragraph invites a command only while focused.
|
|
119
|
+
* The kinds whose empty text names them, by placeholder (a callout's
|
|
120
|
+
* title, as a toggle's, names itself).
|
|
112
121
|
*/
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
if (type === 'bulleted-list-item' || type === 'numbered-list-item') return placeholders.list;
|
|
121
|
-
if (type === 'todo-item') return placeholders.todo;
|
|
122
|
-
if (type === 'toggle') return placeholders.toggle;
|
|
123
|
-
if (type === 'quote') return placeholders.quote;
|
|
124
|
-
// A callout's title, as a toggle's, names itself while empty.
|
|
125
|
-
if (type === 'callout') return placeholders.callout;
|
|
126
|
-
if (type === 'image' || Object.hasOwn(mediaKinds, type))
|
|
127
|
-
return focused ? placeholders.caption : null;
|
|
128
|
-
// Code shows nothing in an empty line (Notion).
|
|
129
|
-
if (type === 'codeLine') return null;
|
|
130
|
-
return focused ? placeholders.empty : null;
|
|
131
|
-
};
|
|
122
|
+
const NAMED: Record<string, 'list' | 'todo' | 'toggle' | 'quote' | 'callout'> = {
|
|
123
|
+
'bulleted-list-item': 'list',
|
|
124
|
+
'numbered-list-item': 'list',
|
|
125
|
+
'todo-item': 'todo',
|
|
126
|
+
toggle: 'toggle',
|
|
127
|
+
quote: 'quote',
|
|
128
|
+
callout: 'callout'
|
|
132
129
|
};
|
|
133
130
|
|
|
134
|
-
/**
|
|
135
|
-
|
|
131
|
+
/**
|
|
132
|
+
* Notion's placeholders, in the view's `richText` labels (English by
|
|
133
|
+
* default): headings, lists, to-dos, toggles and quotes name their kind
|
|
134
|
+
* while empty; a paragraph invites a command only while focused.
|
|
135
|
+
*/
|
|
136
|
+
export const richTextPlaceholder = (
|
|
137
|
+
{ type, data, focused }: PlaceholderView,
|
|
138
|
+
edytor?: Edytor
|
|
139
|
+
): string | null => {
|
|
140
|
+
const { placeholders } = labelsOf(edytor, 'richText', richTextEnglish);
|
|
141
|
+
if (type === 'heading' || type === 'toggle-heading')
|
|
142
|
+
return placeholders[type === 'heading' ? 'heading' : 'toggleHeading'](
|
|
143
|
+
Number(headingLevel(data.level).slice(1)) as 1 | 2 | 3
|
|
144
|
+
);
|
|
145
|
+
if (Object.hasOwn(NAMED, type)) return placeholders[NAMED[type]!];
|
|
146
|
+
// Code shows nothing in an empty line (Notion).
|
|
147
|
+
if (type === 'codeLine' || !focused) return null;
|
|
148
|
+
return type === 'image' || Object.hasOwn(mediaKinds, type)
|
|
149
|
+
? placeholders.caption
|
|
150
|
+
: placeholders.empty;
|
|
151
|
+
};
|
|
136
152
|
|
|
137
153
|
export type RichTextPluginOptions = {
|
|
138
|
-
/**
|
|
139
|
-
labels?: PartialLabels<'richText'>;
|
|
140
|
-
/**
|
|
141
|
-
* The slash menu's keywords of a kind, by command id (`block.heading1`):
|
|
142
|
-
* they replace that preset's own (list the English ones to keep them).
|
|
143
|
-
*/
|
|
144
|
-
keywords?: Partial<Record<string, string[]>>;
|
|
145
|
-
/** Callouts' icons. */
|
|
154
|
+
/** Callouts' icons (their picker is `createCalloutIconsPlugin`'s). */
|
|
146
155
|
callout?: {
|
|
147
156
|
/**
|
|
148
157
|
* A new callout's icon, and the one a callout whose `data.icon` is
|
|
149
158
|
* unset shows (`💡` by default).
|
|
150
159
|
*/
|
|
151
160
|
icon?: string;
|
|
152
|
-
/** The icon picker's choices (`CALLOUT_ICONS` by default). */
|
|
153
|
-
icons?: readonly string[];
|
|
154
|
-
/**
|
|
155
|
-
* Replace the icon picker's markup: it renders while the picker is
|
|
156
|
-
* open, placed under the icon. Put `{@attach picker.keys}` and
|
|
157
|
-
* `{@attach picker.popup}` on its element and spread
|
|
158
|
-
* `picker.option(i)` on each row (`picker.icons.length`: Remove icon).
|
|
159
|
-
*/
|
|
160
|
-
picker?: Snippet<[CalloutIconPicker]>;
|
|
161
161
|
};
|
|
162
|
+
/**
|
|
163
|
+
* A to-do's checkbox (default: a native `input type="checkbox"`). Spread
|
|
164
|
+
* `checkbox.attributes` on the control, an `input` (with
|
|
165
|
+
* `checked={checkbox.checked}`) or a `button`: its click checks the to-do
|
|
166
|
+
* through the document.
|
|
167
|
+
*/
|
|
168
|
+
checkbox?: Snippet<[TodoCheckboxPayload]>;
|
|
169
|
+
/**
|
|
170
|
+
* A callout's icon (default: a `button` showing it, or the icon alone
|
|
171
|
+
* where it cannot be picked). Spread `icon.attributes` on its element:
|
|
172
|
+
* a click opens the view's picker (`createCalloutIconsPlugin`), which
|
|
173
|
+
* opens under it.
|
|
174
|
+
*/
|
|
175
|
+
calloutIcon?: Snippet<[CalloutIconPayload]>;
|
|
176
|
+
/**
|
|
177
|
+
* The hint an open toggle's or a callout's empty body shows (default: a
|
|
178
|
+
* `div` with the view's `richText.emptyBody` words). Spread
|
|
179
|
+
* `hint.attributes` on it: a click starts the body, a dragged block
|
|
180
|
+
* drops inside.
|
|
181
|
+
*/
|
|
182
|
+
emptyBody?: Snippet<[EmptyBodyPayload]>;
|
|
162
183
|
};
|
|
163
184
|
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
'
|
|
175
|
-
|
|
176
|
-
'mod+alt+2': 'block.heading2',
|
|
177
|
-
'mod+alt+3': 'block.heading3',
|
|
178
|
-
'mod+alt+4': 'block.todo-item',
|
|
179
|
-
'mod+alt+5': 'block.bulleted-list-item',
|
|
180
|
-
'mod+alt+6': 'block.numbered-list-item',
|
|
181
|
-
'mod+alt+7': 'block.toggle',
|
|
182
|
-
'mod+alt+8': 'block.code'
|
|
183
|
-
};
|
|
185
|
+
/** Notion's "turn into" chords: Mod+Alt+0 text … 8 code (`block.<type>` command ids, by digit). */
|
|
186
|
+
const TURN_INTO = [
|
|
187
|
+
'paragraph',
|
|
188
|
+
'heading1',
|
|
189
|
+
'heading2',
|
|
190
|
+
'heading3',
|
|
191
|
+
'todo-item',
|
|
192
|
+
'bulleted-list-item',
|
|
193
|
+
'numbered-list-item',
|
|
194
|
+
'toggle',
|
|
195
|
+
'code'
|
|
196
|
+
];
|
|
184
197
|
|
|
185
198
|
/**
|
|
186
|
-
* The rich text kinds and marks,
|
|
187
|
-
*
|
|
199
|
+
* The rich text kinds and marks, their words and slash keywords the
|
|
200
|
+
* view's (`labels`, English by default).
|
|
188
201
|
*/
|
|
189
202
|
export const createRichTextPlugin = (options: RichTextPluginOptions = {}): Plugin => {
|
|
190
|
-
const labels = labelsWith('richText', options.labels);
|
|
191
203
|
const plugin: Plugin = (edytor) => {
|
|
192
|
-
|
|
193
|
-
// The view's callout
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
labels
|
|
201
|
-
);
|
|
202
|
-
if (picker) calloutIconViews.set(edytor, picker);
|
|
203
|
-
return richText(edytor, labels, options, picker);
|
|
204
|
+
const labels = labelsOf(edytor, 'richText', richTextEnglish);
|
|
205
|
+
// The view's default callout icon and its controls' markup: the first rich text plugin listed sets them.
|
|
206
|
+
if (edytor && !calloutIcons.has(edytor)) {
|
|
207
|
+
calloutIcons.set(edytor, options.callout?.icon ?? DEFAULT_CALLOUT_ICON);
|
|
208
|
+
const { checkbox, calloutIcon, emptyBody } = options;
|
|
209
|
+
richTextControls.set(edytor, { checkbox, calloutIcon, emptyBody });
|
|
210
|
+
}
|
|
211
|
+
return richText(edytor, labels, options);
|
|
204
212
|
};
|
|
205
|
-
|
|
206
|
-
return plugin;
|
|
207
|
-
};
|
|
208
|
-
|
|
209
|
-
/** A preset whose slash keywords `keywords` may replace, by its command id. */
|
|
210
|
-
const preset = (
|
|
211
|
-
id: string,
|
|
212
|
-
row: KindPreset,
|
|
213
|
-
keywords: RichTextPluginOptions['keywords']
|
|
214
|
-
): KindPreset => {
|
|
215
|
-
const own = keywordsOf(id, row.keywords, keywords);
|
|
216
|
-
return own ? { ...row, keywords: own } : row;
|
|
213
|
+
return branded('richText', plugin);
|
|
217
214
|
};
|
|
218
215
|
|
|
219
|
-
/** The rich text records of `edytor`, in `labels`, its presets' keywords
|
|
216
|
+
/** The rich text records of `edytor`, in `labels`, its presets' keywords the view's. */
|
|
220
217
|
const richText = (
|
|
221
218
|
edytor: Edytor,
|
|
222
219
|
labels: RichTextLabels,
|
|
223
|
-
{
|
|
224
|
-
/** The view's callout icon picker, when this plugin claimed it (the first listed). */
|
|
225
|
-
picker: CalloutIconPicker | undefined
|
|
220
|
+
{ callout: calloutOptions, checkbox, calloutIcon, emptyBody }: RichTextPluginOptions
|
|
226
221
|
): ReturnType<Plugin> => {
|
|
227
222
|
const { kinds, marks: words } = labels;
|
|
228
223
|
/** A new callout's icon. */
|
|
@@ -232,7 +227,10 @@
|
|
|
232
227
|
/** The disclosures this view created, opened once drawn (`onBlockAttached`). */
|
|
233
228
|
const opening = new Set<string>();
|
|
234
229
|
const presets = (type: string, rows: KindPreset[]) =>
|
|
235
|
-
rows.map((row, index) =>
|
|
230
|
+
rows.map((row, index) => {
|
|
231
|
+
const own = keywordsOf(edytor, presetId(type, index, rows.length), row.keywords);
|
|
232
|
+
return own ? { ...row, keywords: own } : row;
|
|
233
|
+
});
|
|
236
234
|
const operations = richTextOperations(edytor);
|
|
237
235
|
/** The space an autolink types itself: its own insertion is not looked at again. */
|
|
238
236
|
let autolinking = false;
|
|
@@ -268,6 +266,16 @@
|
|
|
268
266
|
'mod+shift+s': setMarkAndSelect('strike'),
|
|
269
267
|
'mod+shift+x': setMarkAndSelect('strike'),
|
|
270
268
|
'mod+shift+h': setMarkAndSelect('color', 'red'),
|
|
269
|
+
// ArrowDown on the last line of a header whose body shows and is empty
|
|
270
|
+
// (an open toggle, a callout) goes into that body, as its hint's click
|
|
271
|
+
// does (`body.down`): one command, one undo step. Elsewhere the key
|
|
272
|
+
// moves as usual.
|
|
273
|
+
arrowdown: ({ prevent }) => {
|
|
274
|
+
const header = onLastLine(edytor);
|
|
275
|
+
if (!header || header.hasChildren || !bodyShows(header)) return;
|
|
276
|
+
if (!edytor.dispatcher.permits()) return;
|
|
277
|
+
prevent(() => void openBody(header));
|
|
278
|
+
},
|
|
271
279
|
// Mod+Enter checks or unchecks each shown to-do it is in (Notion): the
|
|
272
280
|
// selected blocks', else the caret's; the toggles among them open or
|
|
273
281
|
// close as with the built-in binding, in the same key.
|
|
@@ -281,9 +289,10 @@
|
|
|
281
289
|
});
|
|
282
290
|
},
|
|
283
291
|
...Object.fromEntries(
|
|
284
|
-
|
|
285
|
-
|
|
292
|
+
TURN_INTO.map((type, digit): [string, HotKey] => [
|
|
293
|
+
`mod+alt+${digit}`,
|
|
286
294
|
({ prevent }) => {
|
|
295
|
+
const id = `block.${type}`;
|
|
287
296
|
if (edytor.commands.has(id)) prevent(() => void edytor.runCommand(id));
|
|
288
297
|
}
|
|
289
298
|
])
|
|
@@ -297,7 +306,8 @@
|
|
|
297
306
|
if (!linkable()) return;
|
|
298
307
|
const href = pastedLink(e.clipboardData?.getData('text/plain'));
|
|
299
308
|
if (!href) return;
|
|
300
|
-
const {
|
|
309
|
+
const { startText: text, yStart } = edytor.selection.textRange();
|
|
310
|
+
const { isCollapsed } = edytor.selection.projection;
|
|
301
311
|
if (!isCollapsed)
|
|
302
312
|
return prevent(() =>
|
|
303
313
|
edytor.dispatcher.run('insertFromPaste', () => operations.setLinkAtRange({ href }))
|
|
@@ -306,7 +316,7 @@
|
|
|
306
316
|
prevent(() => {
|
|
307
317
|
const end = yStart + href.length;
|
|
308
318
|
edytor.dispatcher.run('insertFromPaste', () => {
|
|
309
|
-
|
|
319
|
+
edytor.insertText(text.parent.id, text.segStart + yStart, href);
|
|
310
320
|
edytor.dispatcher.caret(text, end);
|
|
311
321
|
});
|
|
312
322
|
if (text.stringContent.slice(yStart, end) === href)
|
|
@@ -318,10 +328,11 @@
|
|
|
318
328
|
// (`link.autolink.typed`, Notion).
|
|
319
329
|
onBeforeOperation: (change) => {
|
|
320
330
|
// A block without children retyped into a disclosure from another kind (the
|
|
321
|
-
// slash menu, a markdown shortcut, Turn into
|
|
322
|
-
// its empty body (`body.open`). One with
|
|
323
|
-
|
|
324
|
-
|
|
331
|
+
// slash menu, a markdown shortcut, Turn into: their planned `setBlockType`):
|
|
332
|
+
// the toggle it becomes opens on its empty body (`body.open`). One with
|
|
333
|
+
// children keeps them out of sight.
|
|
334
|
+
if (change.operation === 'setBlockType') {
|
|
335
|
+
const [, type] = change.payload;
|
|
325
336
|
const opens =
|
|
326
337
|
DISCLOSURES.has(type) &&
|
|
327
338
|
!DISCLOSURES.has(change.block.type) &&
|
|
@@ -330,9 +341,11 @@
|
|
|
330
341
|
}
|
|
331
342
|
if (autolinking || change.operation !== 'insertText') return;
|
|
332
343
|
const { payload, text, prevent } = change;
|
|
333
|
-
if (payload
|
|
334
|
-
const { startText, yStart
|
|
335
|
-
|
|
344
|
+
if (payload[2] !== ' ' || !linkable()) return;
|
|
345
|
+
const { startText, yStart } = edytor.selection.textRange();
|
|
346
|
+
const { isCollapsed } = edytor.selection.projection;
|
|
347
|
+
if (!isCollapsed || !text || text !== startText) return;
|
|
348
|
+
if (payload[1] !== text.segStart + yStart) return;
|
|
336
349
|
const found = typedLink(text.stringContent.slice(0, yStart));
|
|
337
350
|
const end = found && found.start + found.href.length;
|
|
338
351
|
if (!found || !end) return;
|
|
@@ -343,7 +356,7 @@
|
|
|
343
356
|
prevent(() => {
|
|
344
357
|
autolinking = true;
|
|
345
358
|
try {
|
|
346
|
-
|
|
359
|
+
edytor.insertText(...payload);
|
|
347
360
|
} finally {
|
|
348
361
|
autolinking = false;
|
|
349
362
|
}
|
|
@@ -352,7 +365,7 @@
|
|
|
352
365
|
});
|
|
353
366
|
},
|
|
354
367
|
onAfterOperation: (change) => {
|
|
355
|
-
if (
|
|
368
|
+
if (retyping !== change.block.id) return;
|
|
356
369
|
retyping = null;
|
|
357
370
|
if (DISCLOSURES.has(change.block.type)) opening.add(change.block.id);
|
|
358
371
|
},
|
|
@@ -364,7 +377,7 @@
|
|
|
364
377
|
},
|
|
365
378
|
// Mod+click on a link opens it in a new tab (`link.mod-click`): a plain
|
|
366
379
|
// click places the caret, as in Notion. Mod is read as the keymap reads
|
|
367
|
-
// it: Meta, or Ctrl off a Mac.
|
|
380
|
+
// it: Meta, or Ctrl off a Mac.
|
|
368
381
|
onEdytorAttached: ({ node }) => {
|
|
369
382
|
const click = (event: MouseEvent) => {
|
|
370
383
|
if (!event.metaKey && !(event.ctrlKey && !edytor.keymap.isMac)) return;
|
|
@@ -375,25 +388,7 @@
|
|
|
375
388
|
event.preventDefault();
|
|
376
389
|
openLink(href, node.ownerDocument.defaultView);
|
|
377
390
|
};
|
|
378
|
-
node
|
|
379
|
-
// A press outside the picker closes it (WebKit's lone `mousedown` too).
|
|
380
|
-
const offPress = picker && onPress(edytor, node.ownerDocument, picker.pressed, true);
|
|
381
|
-
const unmount =
|
|
382
|
-
picker &&
|
|
383
|
-
edytor.overlay.mount(
|
|
384
|
-
CalloutIconMenu,
|
|
385
|
-
{ picker, menu: calloutOptions?.picker },
|
|
386
|
-
'edytor-callout-icons-host',
|
|
387
|
-
// With the menus: above the handles and the image chrome.
|
|
388
|
-
70,
|
|
389
|
-
picker.measure
|
|
390
|
-
);
|
|
391
|
-
return () => {
|
|
392
|
-
node.removeEventListener('click', click);
|
|
393
|
-
offPress?.();
|
|
394
|
-
unmount?.();
|
|
395
|
-
picker?.close(false);
|
|
396
|
-
};
|
|
391
|
+
return listen(node, 'click', click);
|
|
397
392
|
},
|
|
398
393
|
onBeforeInput: ({ e, prevent }) => {
|
|
399
394
|
const { inputType, data } = e;
|
|
@@ -545,7 +540,8 @@
|
|
|
545
540
|
},
|
|
546
541
|
'todo-item': {
|
|
547
542
|
continues: true,
|
|
548
|
-
snippet:
|
|
543
|
+
// The app's control markup, if any, through its own snippet: the default costs no branch.
|
|
544
|
+
snippet: checkbox ? todoItemOwn : todoItem,
|
|
549
545
|
presets: presets('todo-item', [
|
|
550
546
|
{
|
|
551
547
|
label: kinds.todoList,
|
|
@@ -565,7 +561,7 @@
|
|
|
565
561
|
toggle: {
|
|
566
562
|
continues: true,
|
|
567
563
|
container: true,
|
|
568
|
-
snippet: details,
|
|
564
|
+
snippet: emptyBody ? detailsOwn : details,
|
|
569
565
|
...disclosure,
|
|
570
566
|
presets: presets('toggle', [
|
|
571
567
|
{
|
|
@@ -582,7 +578,7 @@
|
|
|
582
578
|
// line is a toggle heading 1.
|
|
583
579
|
'toggle-heading': {
|
|
584
580
|
container: true,
|
|
585
|
-
snippet: details,
|
|
581
|
+
snippet: emptyBody ? detailsOwn : details,
|
|
586
582
|
...disclosure,
|
|
587
583
|
contentElement: (data) => headingLevel(data.level),
|
|
588
584
|
presets: presets(
|
|
@@ -619,13 +615,14 @@
|
|
|
619
615
|
callout: {
|
|
620
616
|
container: true,
|
|
621
617
|
body: true,
|
|
622
|
-
snippet: callout,
|
|
618
|
+
snippet: calloutIcon || emptyBody ? calloutOwn : callout,
|
|
623
619
|
presets: presets('callout', [
|
|
624
620
|
{ label: kinds.callout, icon: '✦', keywords: ['note', 'tip'], data: { icon } }
|
|
625
621
|
]),
|
|
626
|
-
// The block menu's Change icon: the keyboard's way to
|
|
627
|
-
menu: (block) =>
|
|
628
|
-
picker
|
|
622
|
+
// The block menu's Change icon, while the view lists a picker: the keyboard's way to it.
|
|
623
|
+
menu: (block) => {
|
|
624
|
+
const picker = calloutPickers.get(edytor);
|
|
625
|
+
return picker
|
|
629
626
|
? [
|
|
630
627
|
{
|
|
631
628
|
id: 'callout.icon',
|
|
@@ -634,14 +631,15 @@
|
|
|
634
631
|
run: () => picker.open(block)
|
|
635
632
|
}
|
|
636
633
|
]
|
|
637
|
-
: []
|
|
634
|
+
: [];
|
|
635
|
+
},
|
|
638
636
|
// HTML import: its own export, the icon in its attribute.
|
|
639
637
|
parse: (el) => {
|
|
640
638
|
const own = el.getAttribute('data-edytor-callout');
|
|
641
639
|
return own === null ? undefined : { icon: own };
|
|
642
640
|
},
|
|
643
641
|
html: (block, content, children) =>
|
|
644
|
-
calloutHtml(iconOf(block.data,
|
|
642
|
+
calloutHtml(iconOf(block.data, edytor), content, children)
|
|
645
643
|
},
|
|
646
644
|
quote: {
|
|
647
645
|
container: true,
|
|
@@ -660,7 +658,6 @@
|
|
|
660
658
|
empty: { content: [], children: [] },
|
|
661
659
|
...rule
|
|
662
660
|
},
|
|
663
|
-
details: { snippet: details, ...disclosure },
|
|
664
661
|
'ordered-list': {
|
|
665
662
|
...richTextKinds['ordered-list'],
|
|
666
663
|
itemKind: 'numbered-list-item',
|
|
@@ -675,18 +672,10 @@
|
|
|
675
672
|
element: unlisted('ul'),
|
|
676
673
|
html: 'ul'
|
|
677
674
|
},
|
|
678
|
-
'list-item': { snippet: listItem, element: unlisted('li'), html: 'li' }
|
|
679
|
-
horizontalRule: {
|
|
680
|
-
...richTextKinds.horizontalRule,
|
|
681
|
-
element: 'hr',
|
|
682
|
-
...rule
|
|
683
|
-
}
|
|
675
|
+
'list-item': { snippet: listItem, element: unlisted('li'), html: 'li' }
|
|
684
676
|
}
|
|
685
677
|
};
|
|
686
678
|
};
|
|
687
|
-
|
|
688
|
-
/** The rich text kinds and marks, in English. */
|
|
689
|
-
export const richTextPlugin: Plugin = createRichTextPlugin();
|
|
690
679
|
</script>
|
|
691
680
|
|
|
692
681
|
<!--
|
|
@@ -740,11 +729,37 @@
|
|
|
740
729
|
|
|
741
730
|
<!-- prettier-ignore -->
|
|
742
731
|
{#snippet todoItem({ block, content, children }: BlockSnippetPayload<{ checked?: boolean }>)}<!--
|
|
743
|
-
--><TodoCheckbox {block}
|
|
732
|
+
--><TodoCheckbox {block} /><!--
|
|
733
|
+
--><div>{@render content()}</div><!--
|
|
734
|
+
-->{#if children}<div data-edytor-children>{@render children()}</div>{/if}<!--
|
|
735
|
+
-->{/snippet}
|
|
736
|
+
|
|
737
|
+
<!--
|
|
738
|
+
The same kinds, their controls drawn by the app's snippets (`checkbox`,
|
|
739
|
+
`calloutIcon`, `emptyBody`) where it passes them.
|
|
740
|
+
-->
|
|
741
|
+
<!-- prettier-ignore -->
|
|
742
|
+
{#snippet todoItemOwn({ block, content, children }: BlockSnippetPayload<{ checked?: boolean }>)}<!--
|
|
743
|
+
--><RichTextControl {block} control="checkbox" /><!--
|
|
744
744
|
--><div>{@render content()}</div><!--
|
|
745
745
|
-->{#if children}<div data-edytor-children>{@render children()}</div>{/if}<!--
|
|
746
746
|
-->{/snippet}
|
|
747
747
|
|
|
748
|
+
<!-- prettier-ignore -->
|
|
749
|
+
{#snippet detailsOwn({ block, content, children }: BlockSnippetPayload)}<!--
|
|
750
|
+
--><summary>{@render content()}</summary><!--
|
|
751
|
+
-->{#if children}<div data-edytor-children>{@render children()}</div><!--
|
|
752
|
+
-->{:else}<RichTextControl {block} control="toggle" />{/if}<!--
|
|
753
|
+
-->{/snippet}
|
|
754
|
+
|
|
755
|
+
<!-- prettier-ignore -->
|
|
756
|
+
{#snippet calloutOwn({ block, content, children }: BlockSnippetPayload<{ icon?: string }>)}<!--
|
|
757
|
+
--><RichTextControl {block} control="calloutIcon" /><!--
|
|
758
|
+
--><div data-edytor-callout-title>{@render content()}</div><!--
|
|
759
|
+
-->{#if children}<div data-edytor-children>{@render children()}</div><!--
|
|
760
|
+
-->{:else}<RichTextControl {block} control="callout" />{/if}<!--
|
|
761
|
+
-->{/snippet}
|
|
762
|
+
|
|
748
763
|
<!-- prettier-ignore -->
|
|
749
764
|
{#snippet listItem({ content, children }: BlockSnippetPayload)}<!--
|
|
750
765
|
--><div>{@render content()}</div><!--
|
|
@@ -759,27 +774,3 @@
|
|
|
759
774
|
{#snippet list({ children }: BlockSnippetPayload)}<!--
|
|
760
775
|
-->{#if children}<div>{@render children()}</div>{/if}<!--
|
|
761
776
|
-->{/snippet}
|
|
762
|
-
|
|
763
|
-
<style>
|
|
764
|
-
/* A callout's title reads as its heading (Notion); its content below it. */
|
|
765
|
-
:global([data-edytor-callout-title]) {
|
|
766
|
-
font-weight: 600;
|
|
767
|
-
}
|
|
768
|
-
/* An empty body's hint: chrome, not text (`body.hint`). */
|
|
769
|
-
:global([data-edytor-empty-body]) {
|
|
770
|
-
padding: 3px 2px;
|
|
771
|
-
color: #73726e;
|
|
772
|
-
cursor: pointer;
|
|
773
|
-
user-select: none;
|
|
774
|
-
}
|
|
775
|
-
/* The icon button reads as the icon. */
|
|
776
|
-
:global(button[data-edytor-callout-icon]) {
|
|
777
|
-
padding: 0;
|
|
778
|
-
border: 0;
|
|
779
|
-
border-radius: 4px;
|
|
780
|
-
background: transparent;
|
|
781
|
-
color: inherit;
|
|
782
|
-
font: inherit;
|
|
783
|
-
cursor: pointer;
|
|
784
|
-
}
|
|
785
|
-
</style>
|
|
@@ -1,53 +1,53 @@
|
|
|
1
|
+
import './richtext.css';
|
|
1
2
|
import type { Plugin, PlaceholderView } from '../../plugins.js';
|
|
2
|
-
import type {
|
|
3
|
+
import type { Edytor } from '../../edytor.svelte.js';
|
|
3
4
|
import { richTextOperations } from './richTextOperations.js';
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
export {
|
|
7
|
-
export
|
|
5
|
+
import type { Snippet } from 'svelte';
|
|
6
|
+
import { type CalloutIconPayload, type EmptyBodyPayload, type TodoCheckboxPayload } from './controls.svelte.js';
|
|
7
|
+
export type { CalloutIconPayload, EmptyBodyPayload, TodoCheckboxPayload };
|
|
8
|
+
export { richTextOperations };
|
|
8
9
|
/**
|
|
9
|
-
* Notion's placeholders in `
|
|
10
|
-
* lists, to-dos, toggles and quotes name their kind
|
|
11
|
-
* paragraph invites a command only while focused.
|
|
10
|
+
* Notion's placeholders, in the view's `richText` labels (English by
|
|
11
|
+
* default): headings, lists, to-dos, toggles and quotes name their kind
|
|
12
|
+
* while empty; a paragraph invites a command only while focused.
|
|
12
13
|
*/
|
|
13
|
-
export declare const
|
|
14
|
-
/** Notion's placeholders, in English. */
|
|
15
|
-
export declare const richTextPlaceholder: ({ type, data, focused }: PlaceholderView) => string | null;
|
|
14
|
+
export declare const richTextPlaceholder: ({ type, data, focused }: PlaceholderView, edytor?: Edytor) => string | null;
|
|
16
15
|
export type RichTextPluginOptions = {
|
|
17
|
-
/**
|
|
18
|
-
labels?: PartialLabels<'richText'>;
|
|
19
|
-
/**
|
|
20
|
-
* The slash menu's keywords of a kind, by command id (`block.heading1`):
|
|
21
|
-
* they replace that preset's own (list the English ones to keep them).
|
|
22
|
-
*/
|
|
23
|
-
keywords?: Partial<Record<string, string[]>>;
|
|
24
|
-
/** Callouts' icons. */
|
|
16
|
+
/** Callouts' icons (their picker is `createCalloutIconsPlugin`'s). */
|
|
25
17
|
callout?: {
|
|
26
18
|
/**
|
|
27
19
|
* A new callout's icon, and the one a callout whose `data.icon` is
|
|
28
20
|
* unset shows (`💡` by default).
|
|
29
21
|
*/
|
|
30
22
|
icon?: string;
|
|
31
|
-
/** The icon picker's choices (`CALLOUT_ICONS` by default). */
|
|
32
|
-
icons?: readonly string[];
|
|
33
|
-
/**
|
|
34
|
-
* Replace the icon picker's markup: it renders while the picker is
|
|
35
|
-
* open, placed under the icon. Put `{@attach picker.keys}` and
|
|
36
|
-
* `{@attach picker.popup}` on its element and spread
|
|
37
|
-
* `picker.option(i)` on each row (`picker.icons.length`: Remove icon).
|
|
38
|
-
*/
|
|
39
|
-
picker?: Snippet<[CalloutIconPicker]>;
|
|
40
23
|
};
|
|
24
|
+
/**
|
|
25
|
+
* A to-do's checkbox (default: a native `input type="checkbox"`). Spread
|
|
26
|
+
* `checkbox.attributes` on the control, an `input` (with
|
|
27
|
+
* `checked={checkbox.checked}`) or a `button`: its click checks the to-do
|
|
28
|
+
* through the document.
|
|
29
|
+
*/
|
|
30
|
+
checkbox?: Snippet<[TodoCheckboxPayload]>;
|
|
31
|
+
/**
|
|
32
|
+
* A callout's icon (default: a `button` showing it, or the icon alone
|
|
33
|
+
* where it cannot be picked). Spread `icon.attributes` on its element:
|
|
34
|
+
* a click opens the view's picker (`createCalloutIconsPlugin`), which
|
|
35
|
+
* opens under it.
|
|
36
|
+
*/
|
|
37
|
+
calloutIcon?: Snippet<[CalloutIconPayload]>;
|
|
38
|
+
/**
|
|
39
|
+
* The hint an open toggle's or a callout's empty body shows (default: a
|
|
40
|
+
* `div` with the view's `richText.emptyBody` words). Spread
|
|
41
|
+
* `hint.attributes` on it: a click starts the body, a dragged block
|
|
42
|
+
* drops inside.
|
|
43
|
+
*/
|
|
44
|
+
emptyBody?: Snippet<[EmptyBodyPayload]>;
|
|
41
45
|
};
|
|
42
|
-
/** Recognize any rich text plugin instance (the component's default yields to yours). */
|
|
43
|
-
export declare const isRichTextPlugin: (plugin: Plugin) => boolean;
|
|
44
46
|
/**
|
|
45
|
-
* The rich text kinds and marks,
|
|
46
|
-
*
|
|
47
|
+
* The rich text kinds and marks, their words and slash keywords the
|
|
48
|
+
* view's (`labels`, English by default).
|
|
47
49
|
*/
|
|
48
50
|
export declare const createRichTextPlugin: (options?: RichTextPluginOptions) => Plugin;
|
|
49
|
-
/** The rich text kinds and marks, in English. */
|
|
50
|
-
export declare const richTextPlugin: Plugin;
|
|
51
51
|
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
52
|
new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
|
|
53
53
|
$$bindings?: Bindings;
|