edytor 1.0.0-rc.2 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +65 -25
- package/dist/block/block.svelte.d.ts +10 -85
- package/dist/block/block.svelte.js +47 -141
- package/dist/block/colors.d.ts +0 -9
- package/dist/block/colors.js +1 -18
- package/dist/block/contentRange.d.ts +5 -1
- package/dist/block/contentRange.js +15 -16
- package/dist/block/inlineBlock.svelte.d.ts +8 -10
- package/dist/block/inlineBlock.svelte.js +14 -22
- package/dist/clipboard/createClipboardFragment.js +22 -64
- package/dist/clipboard/fragmentData.js +17 -42
- package/dist/clipboard/htmlFlow.d.ts +6 -1
- package/dist/clipboard/htmlFlow.js +26 -13
- package/dist/clipboard/insertClipboardFragment.js +5 -4
- package/dist/clipboard/moveText.js +16 -8
- package/dist/clipboard/serializeClipboardFragment.d.ts +2 -0
- package/dist/clipboard/serializeClipboardFragment.js +32 -28
- package/dist/cloudflare/DocumentRoom.d.ts +22 -17
- package/dist/cloudflare/DocumentRoom.js +10 -5
- package/dist/cloudflare/index.d.ts +1 -1
- package/dist/cloudflare/index.js +1 -1
- package/dist/cloudflare/move.d.ts +1 -18
- package/dist/cloudflare/move.js +2 -48
- package/dist/cloudflare/room/admission.d.ts +1 -60
- package/dist/cloudflare/room/admission.js +25 -29
- package/dist/cloudflare/room/comments.d.ts +1 -3
- package/dist/cloudflare/room/comments.js +6 -6
- package/dist/cloudflare/room/context.d.ts +20 -82
- package/dist/cloudflare/room/context.js +8 -8
- package/dist/cloudflare/room/forged.d.ts +1 -1
- package/dist/cloudflare/room/forged.js +2 -12
- package/dist/cloudflare/room/frames.d.ts +1 -1
- package/dist/cloudflare/room/frames.js +1 -1
- package/dist/cloudflare/room/history.d.ts +1 -25
- package/dist/cloudflare/room/history.js +39 -54
- package/dist/cloudflare/room/moves.d.ts +1 -13
- package/dist/cloudflare/room/moves.js +33 -57
- package/dist/cloudflare/room/presence.d.ts +1 -11
- package/dist/cloudflare/room/presence.js +4 -4
- package/dist/cloudflare/room/purge.d.ts +1 -2
- package/dist/cloudflare/room/purge.js +2 -2
- package/dist/cloudflare/room/replicas.d.ts +1 -7
- package/dist/cloudflare/room/replicas.js +2 -2
- package/dist/cloudflare/room/storage.d.ts +9 -30
- package/dist/cloudflare/room/storage.js +52 -104
- package/dist/cloudflare/room/updates.d.ts +4 -4
- package/dist/cloudflare/room/updates.js +17 -24
- package/dist/cloudflare/room/validation.d.ts +1 -5
- package/dist/cloudflare/room/validation.js +16 -37
- package/dist/collaboration/RemoteSelections.svelte +13 -17
- package/dist/collaboration/comments/client.d.ts +2 -2
- package/dist/collaboration/comments/client.js +1 -1
- package/dist/collaboration/history/index.d.ts +5 -5
- package/dist/collaboration/history/index.js +5 -5
- package/dist/collaboration/history/panel.svelte.d.ts +91 -0
- package/dist/collaboration/history/panel.svelte.js +223 -0
- package/dist/collaboration/providers.d.ts +12 -3
- package/dist/collaboration/providers.js +5 -4
- package/dist/components/Block.svelte +160 -119
- package/dist/components/Block.svelte.d.ts +8 -3
- package/dist/components/Content.svelte +91 -44
- package/dist/components/CustomMark.svelte +46 -0
- package/dist/components/CustomMark.svelte.d.ts +11 -0
- package/dist/components/Edytor.svelte +80 -95
- package/dist/components/Edytor.svelte.d.ts +8 -12
- package/dist/components/InlineBlock.svelte +4 -9
- package/dist/components/Mark.svelte +46 -35
- package/dist/components/Mark.svelte.d.ts +7 -0
- package/dist/components/Ranges.svelte +96 -0
- package/dist/components/Ranges.svelte.d.ts +19 -0
- package/dist/components/Suggestion.svelte +3 -2
- package/dist/components/Text.svelte +48 -14
- package/dist/components/Text.svelte.d.ts +1 -1
- package/dist/crdt/admission.d.ts +2 -9
- package/dist/crdt/admission.js +3 -9
- package/dist/crdt/attribution/attribution.d.ts +11 -72
- package/dist/crdt/attribution/attribution.js +5 -52
- package/dist/crdt/attribution/block.d.ts +0 -78
- package/dist/crdt/attribution/block.js +1 -144
- package/dist/crdt/data.d.ts +8 -13
- package/dist/crdt/data.js +30 -70
- package/dist/crdt/doc/anchors.js +4 -4
- package/dist/crdt/doc/content.d.ts +5 -1
- package/dist/crdt/doc/content.js +3 -1
- package/dist/crdt/doc/delete.d.ts +1 -0
- package/dist/crdt/doc/funnel.d.ts +0 -23
- package/dist/crdt/doc/funnel.js +34 -85
- package/dist/crdt/doc/gate.d.ts +8 -9
- package/dist/crdt/doc/gate.js +7 -17
- package/dist/crdt/doc/history.d.ts +87 -14
- package/dist/crdt/doc/history.js +334 -149
- package/dist/crdt/doc/layout.d.ts +0 -1
- package/dist/crdt/doc/layout.js +2 -3
- package/dist/crdt/doc/meta.d.ts +4 -4
- package/dist/crdt/doc/meta.js +10 -21
- package/dist/crdt/doc/moves.d.ts +4 -4
- package/dist/crdt/doc/moves.js +5 -5
- package/dist/crdt/doc/plan.d.ts +2 -0
- package/dist/crdt/doc/plan.js +2 -0
- package/dist/crdt/doc/reads.d.ts +1 -5
- package/dist/crdt/doc/reads.js +38 -49
- package/dist/crdt/doc/seed.d.ts +15 -6
- package/dist/crdt/doc/seed.js +27 -26
- package/dist/crdt/doc/split-merge.d.ts +1 -3
- package/dist/crdt/doc/split-merge.js +4 -5
- package/dist/crdt/doc/steps.d.ts +3 -7
- package/dist/crdt/doc/steps.js +20 -9
- package/dist/crdt/doc/types.d.ts +0 -10
- package/dist/crdt/document.d.ts +24 -115
- package/dist/crdt/document.js +207 -305
- package/dist/crdt/edytor-doc.d.ts +671 -90
- package/dist/crdt/edytor-doc.js +73 -149
- package/dist/crdt/engine-api.d.ts +15 -47
- package/dist/crdt/engine.d.ts +7 -17
- package/dist/crdt/engine.js +9 -19
- package/dist/crdt/flow.d.ts +9 -37
- package/dist/crdt/flow.js +260 -238
- package/dist/crdt/index.d.ts +26 -85
- package/dist/crdt/index.js +21 -47
- package/dist/crdt/operations.d.ts +24 -33
- package/dist/crdt/operations.js +7 -17
- package/dist/crdt/placement/display.d.ts +0 -2
- package/dist/crdt/placement/display.js +0 -15
- package/dist/crdt/placement/model.d.ts +160 -12
- package/dist/crdt/placement/model.js +413 -414
- package/dist/crdt/placement/rank.d.ts +1 -5
- package/dist/crdt/placement/rank.js +28 -38
- package/dist/crdt/protocol.d.ts +4 -5
- package/dist/crdt/protocol.js +3 -4
- package/dist/crdt/protocols/awareness.d.ts +3 -7
- package/dist/crdt/protocols/awareness.js +17 -33
- package/dist/crdt/protocols/envelope.d.ts +9 -29
- package/dist/crdt/protocols/envelope.js +8 -25
- package/dist/crdt/protocols/sync.d.ts +15 -30
- package/dist/crdt/protocols/sync.js +27 -89
- package/dist/crdt/providers/bound.d.ts +3 -1
- package/dist/crdt/providers/bound.js +3 -1
- package/dist/crdt/providers/container.d.ts +11 -17
- package/dist/crdt/providers/container.js +39 -27
- package/dist/crdt/providers/index.d.ts +34 -6
- package/dist/crdt/providers/index.js +106 -111
- package/dist/crdt/providers/indexeddb.d.ts +2 -12
- package/dist/crdt/providers/indexeddb.js +29 -90
- package/dist/crdt/providers/room.d.ts +58 -2
- package/dist/crdt/providers/room.js +38 -21
- package/dist/crdt/providers/websocket.d.ts +1 -1
- package/dist/crdt/providers/websocket.js +3 -4
- package/dist/crdt/purge.d.ts +2 -2
- package/dist/crdt/purge.js +69 -6
- package/dist/crdt/rangeDelete.d.ts +4 -42
- package/dist/crdt/rangeDelete.js +7 -6
- package/dist/crdt/restore.d.ts +21 -1
- package/dist/crdt/restore.js +54 -59
- package/dist/crdt/schema.d.ts +2 -2
- package/dist/crdt/schema.js +4 -5
- package/dist/crdt/semantics.d.ts +10 -15
- package/dist/crdt/semantics.js +22 -21
- package/dist/crdt/storage.d.ts +7 -13
- package/dist/crdt/storage.js +10 -24
- package/dist/crdt/structs.d.ts +42 -47
- package/dist/crdt/structs.js +76 -67
- package/dist/crdt/tables.d.ts +9 -0
- package/dist/crdt/tables.js +20 -0
- package/dist/crdt/text/delete-index.d.ts +0 -13
- package/dist/crdt/text/delete-index.js +7 -14
- package/dist/crdt/text/deletes.d.ts +9 -22
- package/dist/crdt/text/deletes.js +11 -74
- package/dist/crdt/text/index/cache.js +3 -3
- package/dist/crdt/text/index/fold.d.ts +1 -2
- package/dist/crdt/text/index/fold.js +15 -10
- package/dist/crdt/text/index/layout.d.ts +0 -10
- package/dist/crdt/text/index/layout.js +6 -20
- package/dist/crdt/text/index/records.js +2 -1
- package/dist/crdt/text/index/report.js +5 -6
- package/dist/crdt/text/index/shared.d.ts +11 -4
- package/dist/crdt/text/index/shared.js +8 -7
- package/dist/crdt/text/index/state.d.ts +3 -33
- package/dist/crdt/text/index/state.js +2 -4
- package/dist/crdt/text/model.d.ts +82 -2
- package/dist/crdt/text/model.js +344 -354
- package/dist/crdt/text/rows.d.ts +0 -2
- package/dist/crdt/text/rows.js +0 -11
- package/dist/crdt/text/runs.d.ts +6 -3
- package/dist/crdt/text/runs.js +132 -137
- package/dist/crdt/text/streams.d.ts +1 -1
- package/dist/crdt/text/streams.js +1 -1
- package/dist/crdt/vendor/yjs/API-NOTES.md +25 -8
- package/dist/crdt/vendor/yjs/UPSTREAM.md +288 -8
- package/dist/crdt/vendor/yjs/dts/global.d.ts +5 -26
- package/dist/crdt/vendor/yjs/dts/index.d.ts +10 -15
- package/dist/crdt/vendor/yjs/dts/structs/AbstractStruct.d.ts +2 -2
- package/dist/crdt/vendor/yjs/dts/structs/Item.d.ts +14 -219
- package/dist/crdt/vendor/yjs/dts/structs/Skip.d.ts +2 -2
- package/dist/crdt/vendor/yjs/dts/utils/BlockSet.d.ts +2 -2
- package/dist/crdt/vendor/yjs/dts/utils/Doc.d.ts +12 -123
- package/dist/crdt/vendor/yjs/dts/utils/ID.d.ts +1 -1
- package/dist/crdt/vendor/yjs/dts/utils/RangeCursor.d.ts +37 -58
- package/dist/crdt/vendor/yjs/dts/utils/Transaction.d.ts +3 -78
- package/dist/crdt/vendor/yjs/dts/utils/UpdateDecoder.d.ts +2 -81
- package/dist/crdt/vendor/yjs/dts/utils/UpdateEncoder.d.ts +2 -74
- package/dist/crdt/vendor/yjs/dts/utils/encoding-helpers.d.ts +4 -4
- package/dist/crdt/vendor/yjs/dts/utils/encoding.d.ts +6 -18
- package/dist/crdt/vendor/yjs/dts/utils/ids.d.ts +12 -237
- package/dist/crdt/vendor/yjs/dts/utils/positions.d.ts +5 -0
- package/dist/crdt/vendor/yjs/dts/utils/redo.d.ts +3 -0
- package/dist/crdt/vendor/yjs/dts/utils/transaction-helpers.d.ts +1 -3
- package/dist/crdt/vendor/yjs/dts/utils/updates.d.ts +6 -23
- package/dist/crdt/vendor/yjs/dts/ynode.d.ts +73 -498
- package/dist/crdt/vendor/yjs/global.d.ts +5 -26
- package/dist/crdt/vendor/yjs/src/index.js +11 -25
- package/dist/crdt/vendor/yjs/src/structs/AbstractStruct.js +1 -1
- package/dist/crdt/vendor/yjs/src/structs/GC.js +1 -1
- package/dist/crdt/vendor/yjs/src/structs/Item.js +10 -372
- package/dist/crdt/vendor/yjs/src/structs/Skip.js +1 -1
- package/dist/crdt/vendor/yjs/src/utils/BlockSet.js +2 -2
- package/dist/crdt/vendor/yjs/src/utils/Doc.js +14 -170
- package/dist/crdt/vendor/yjs/src/utils/ID.js +1 -1
- package/dist/crdt/vendor/yjs/src/utils/RangeCursor.js +61 -128
- package/dist/crdt/vendor/yjs/src/utils/StructStore.js +0 -22
- package/dist/crdt/vendor/yjs/src/utils/Transaction.js +17 -282
- package/dist/crdt/vendor/yjs/src/utils/UpdateDecoder.js +3 -130
- package/dist/crdt/vendor/yjs/src/utils/UpdateEncoder.js +2 -132
- package/dist/crdt/vendor/yjs/src/utils/encoding-helpers.js +4 -4
- package/dist/crdt/vendor/yjs/src/utils/encoding.js +49 -146
- package/dist/crdt/vendor/yjs/src/utils/ids.js +23 -900
- package/dist/crdt/vendor/yjs/src/utils/positions.js +115 -0
- package/dist/crdt/vendor/yjs/src/utils/redo.js +143 -0
- package/dist/crdt/vendor/yjs/src/utils/transaction-helpers.js +10 -127
- package/dist/crdt/vendor/yjs/src/utils/updates.js +7 -50
- package/dist/crdt/vendor/yjs/src/ynode.js +261 -2226
- package/dist/{plugins/blockHandles → dnd}/autoScroll.d.ts +2 -1
- package/dist/{plugins/blockHandles → dnd}/autoScroll.js +3 -3
- package/dist/dnd/pragmatic.d.ts +4 -22
- package/dist/dnd/pragmatic.js +7 -26
- package/dist/dnd/track.d.ts +14 -0
- package/dist/dnd/track.js +55 -0
- package/dist/dnd/vendor/pragmatic/UPSTREAM.md +103 -0
- package/dist/dnd/vendor/pragmatic/bind-event-listener/LICENSE +21 -0
- package/dist/dnd/vendor/pragmatic/bind-event-listener/bind-all.js +46 -0
- package/dist/dnd/vendor/pragmatic/bind-event-listener/bind.js +7 -0
- package/dist/dnd/vendor/pragmatic/bind-event-listener/index.js +2 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/LICENSE.md +11 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/adapter/element-adapter-native-data-key.js +6 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/adapter/element-adapter.d.ts +57 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/adapter/element-adapter.js +306 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/element/adapter.d.ts +8 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/element/adapter.js +10 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/element/set-custom-native-drag-preview.d.ts +4 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/element/set-custom-native-drag-preview.js +6 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/types.d.ts +1 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/honey-pot-fix/get-element-from-point-without-honey-pot.js +12 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/honey-pot-fix/honey-pot-data-attribute.js +3 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/honey-pot-fix/is-honey-pot-element.js +4 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/honey-pot-fix/make-honey-pot-fix.js +333 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/internal-types.d.ts +350 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/ledger/dispatch-consumer-event.js +128 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/ledger/lifecycle-manager.js +340 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/ledger/usage-ledger.js +32 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/make-adapter/make-adapter.js +59 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/make-adapter/make-drop-target.js +288 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/make-adapter/make-monitor.js +85 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/public-utils/combine.js +6 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/public-utils/element/custom-native-drag-preview/set-custom-native-drag-preview.d.ts +36 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/public-utils/element/custom-native-drag-preview/set-custom-native-drag-preview.js +153 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/public-utils/element/custom-native-drag-preview/types.d.ts +16 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/public-utils/once.js +13 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/add-attribute.js +7 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/android.js +10 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/changing-window/count-events-for-safari.js +104 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/changing-window/is-from-another-window.js +16 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/changing-window/is-leaving-window-in-safari.js +12 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/changing-window/is-leaving-window.js +55 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/detect-broken-drag.js +48 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/get-input.js +14 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/is-firefox.js +13 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/is-safari.js +19 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/max-z-index.js +3 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/media-types/text-media-type.js +6 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/media-types/url-media-type.js +6 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/popover-reset-styles.js +40 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/supports-popover.js +16 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/LICENSE.md +11 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/entry-point/element.d.ts +4 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/entry-point/element.js +8 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/internal-types.d.ts +50 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/over-element/data-attributes.js +9 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/over-element/get-scroll-by.js +117 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/over-element/make-api.js +90 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/over-element/try-scroll.js +183 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/axis.js +22 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/can-scroll-on-edge.js +17 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/configuration.js +49 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/edges.js +9 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/engagement-history.js +43 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/get-over-element-hitbox.js +50 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/get-percentage-in-range.js +19 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/get-scroll-change.js +106 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/is-axis-allowed.js +3 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/is-within.js +11 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/scheduler.js +104 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/side.js +6 -0
- package/dist/dnd/vendor/pragmatic/raf-schd/LICENSE +21 -0
- package/dist/dnd/vendor/pragmatic/raf-schd/raf-schd.esm.js +34 -0
- package/dist/edytor.svelte.d.ts +34 -64
- package/dist/edytor.svelte.js +118 -180
- package/dist/events/beforeInputCommands.d.ts +6 -11
- package/dist/events/beforeInputCommands.js +189 -184
- package/dist/events/beforeInputDeleteCommands.d.ts +20 -1
- package/dist/events/beforeInputDeleteCommands.js +153 -204
- package/dist/events/domTextOffset.d.ts +9 -9
- package/dist/events/domTextOffset.js +20 -48
- package/dist/events/events.utils.d.ts +0 -2
- package/dist/events/events.utils.js +0 -4
- package/dist/events/nativeInteractiveControl.d.ts +13 -13
- package/dist/events/nativeInteractiveControl.js +28 -56
- package/dist/events/onBeforeInput.d.ts +6 -1
- package/dist/events/onBeforeInput.js +207 -331
- package/dist/events/onCopy.js +1 -5
- package/dist/events/onDrop.d.ts +7 -1
- package/dist/events/onDrop.js +33 -72
- package/dist/events/onFocus.d.ts +9 -4
- package/dist/events/onFocus.js +92 -72
- package/dist/events/onInput.d.ts +8 -4
- package/dist/events/onInput.js +34 -147
- package/dist/events/onKeyDown.js +55 -122
- package/dist/events/onPaste.d.ts +13 -1
- package/dist/events/onPaste.js +46 -76
- package/dist/index.d.ts +10 -13
- package/dist/index.js +3 -3
- package/dist/kinds.d.ts +4 -6
- package/dist/kinds.js +28 -27
- package/dist/labels.d.ts +91 -314
- package/dist/labels.js +180 -396
- package/dist/plugins/Chrome.svelte +29 -0
- package/dist/plugins/Chrome.svelte.d.ts +32 -0
- package/dist/plugins/Control.svelte +23 -0
- package/dist/plugins/Control.svelte.d.ts +30 -0
- package/dist/plugins/anchored.svelte.d.ts +47 -0
- package/dist/plugins/anchored.svelte.js +73 -0
- package/dist/plugins/arrowMove/arrowMove.d.ts +2 -1
- package/dist/plugins/arrowMove/arrowMove.js +9 -5
- package/dist/plugins/bands.svelte.d.ts +57 -0
- package/dist/plugins/bands.svelte.js +95 -0
- package/dist/plugins/blockHandles/BlockHandle.svelte +14 -151
- package/dist/plugins/blockHandles/BlockHandle.svelte.d.ts +2 -2
- package/dist/plugins/blockHandles/BlockHandleController.svelte.d.ts +63 -97
- package/dist/plugins/blockHandles/BlockHandleController.svelte.js +247 -268
- package/dist/plugins/blockHandles/BlockHandles.svelte +46 -29
- package/dist/plugins/blockHandles/BlockHandles.svelte.d.ts +2 -2
- package/dist/plugins/blockHandles/blockHandlesPlugin.d.ts +29 -23
- package/dist/plugins/blockHandles/blockHandlesPlugin.js +130 -162
- package/dist/plugins/blockHandles/dragPreview.d.ts +8 -6
- package/dist/plugins/blockHandles/dragPreview.js +20 -17
- package/dist/plugins/blockHandles/dropIndicator.js +52 -60
- package/dist/plugins/blockHandles/geometry.d.ts +46 -1
- package/dist/plugins/blockHandles/geometry.js +51 -4
- package/dist/plugins/blockMenu/BlockMenuController.svelte.d.ts +59 -28
- package/dist/plugins/blockMenu/BlockMenuController.svelte.js +180 -105
- package/dist/plugins/blockMenu/blockMenuPlugin.d.ts +1 -3
- package/dist/plugins/blockMenu/blockMenuPlugin.js +12 -29
- package/dist/plugins/brand.d.ts +8 -0
- package/dist/plugins/brand.js +8 -0
- package/dist/plugins/chrome.d.ts +79 -0
- package/dist/plugins/chrome.js +87 -0
- package/dist/plugins/code/CodeHeader.svelte +12 -58
- package/dist/plugins/code/CodeHeader.svelte.d.ts +1 -0
- package/dist/plugins/code/CodePlugin.svelte +75 -56
- package/dist/plugins/code/CodePlugin.svelte.d.ts +0 -2
- package/dist/plugins/code/LanguageMenu.svelte +25 -0
- package/dist/plugins/code/LanguageMenu.svelte.d.ts +9 -0
- package/dist/plugins/code/code.css +5 -100
- package/dist/plugins/code/header.svelte.d.ts +47 -0
- package/dist/plugins/code/header.svelte.js +141 -0
- package/dist/plugins/code/languageMenu.svelte.d.ts +84 -0
- package/dist/plugins/code/languageMenu.svelte.js +199 -0
- package/dist/plugins/code/languages.d.ts +21 -10
- package/dist/plugins/code/languages.js +39 -126
- package/dist/plugins/columns/ColumnResize.svelte +13 -25
- package/dist/plugins/columns/ColumnResize.svelte.d.ts +1 -1
- package/dist/plugins/columns/ColumnsPlugin.svelte +46 -78
- package/dist/plugins/columns/ColumnsPlugin.svelte.d.ts +0 -12
- package/dist/plugins/columns/columns.css +7 -26
- package/dist/plugins/columns/resize.svelte.d.ts +14 -51
- package/dist/plugins/columns/resize.svelte.js +70 -164
- package/dist/plugins/comments/CommentsController.svelte.d.ts +1 -4
- package/dist/plugins/comments/CommentsController.svelte.js +14 -25
- package/dist/plugins/comments/CommentsSidebar.svelte +82 -430
- package/dist/plugins/comments/CommentsSidebar.svelte.d.ts +6 -7
- package/dist/plugins/comments/commentsPlugin.d.ts +31 -10
- package/dist/plugins/comments/commentsPlugin.js +12 -10
- package/dist/plugins/equation/EquationEditor.svelte +18 -129
- package/dist/plugins/equation/EquationEditor.svelte.d.ts +2 -1
- package/dist/plugins/equation/EquationPlugin.svelte +123 -168
- package/dist/plugins/equation/EquationPlugin.svelte.d.ts +5 -3
- package/dist/plugins/equation/EquationView.svelte +20 -11
- package/dist/plugins/equation/equation.svelte.d.ts +74 -36
- package/dist/plugins/equation/equation.svelte.js +74 -66
- package/dist/plugins/equation/importUrl.d.ts +6 -0
- package/dist/plugins/equation/importUrl.js +6 -0
- package/dist/plugins/equation/katex.d.ts +8 -0
- package/dist/plugins/equation/katex.js +77 -0
- package/dist/plugins/find/FindController.svelte.d.ts +8 -13
- package/dist/plugins/find/FindController.svelte.js +34 -55
- package/dist/plugins/find/findPlugin.d.ts +4 -8
- package/dist/plugins/find/findPlugin.js +29 -9
- package/dist/plugins/image/ImageChrome.svelte +5 -151
- package/dist/plugins/image/ImagePlugin.svelte +49 -117
- package/dist/plugins/image/ImagePlugin.svelte.d.ts +1 -24
- package/dist/plugins/image/ImageToolbarHost.svelte +37 -0
- package/dist/plugins/image/ImageToolbarHost.svelte.d.ts +9 -0
- package/dist/plugins/image/controls.svelte.d.ts +6 -57
- package/dist/plugins/image/controls.svelte.js +51 -174
- package/dist/plugins/image/image.d.ts +0 -5
- package/dist/plugins/image/image.js +0 -3
- package/dist/plugins/image/toolbar.svelte.d.ts +69 -0
- package/dist/plugins/image/toolbar.svelte.js +145 -0
- package/dist/plugins/index.d.ts +39 -24
- package/dist/plugins/index.js +30 -22
- package/dist/plugins/list.svelte.d.ts +128 -0
- package/dist/plugins/list.svelte.js +217 -0
- package/dist/plugins/markdownShortcuts.d.ts +1 -1
- package/dist/plugins/markdownShortcuts.js +6 -5
- package/dist/plugins/marquee/MarqueeBox.svelte +15 -0
- package/dist/plugins/marquee/MarqueeBox.svelte.d.ts +9 -0
- package/dist/plugins/marquee/MarqueeController.svelte.d.ts +46 -0
- package/dist/plugins/marquee/MarqueeController.svelte.js +243 -0
- package/dist/plugins/marquee/marquee.d.ts +33 -0
- package/dist/plugins/marquee/marquee.js +89 -0
- package/dist/plugins/marquee/marqueePlugin.d.ts +32 -0
- package/dist/plugins/marquee/marqueePlugin.js +68 -0
- package/dist/plugins/media/AudioPlugin.svelte +3 -88
- package/dist/plugins/media/AudioPlugin.svelte.d.ts +1 -4
- package/dist/plugins/media/BookmarkPlugin.svelte +124 -112
- package/dist/plugins/media/BookmarkPlugin.svelte.d.ts +20 -7
- package/dist/plugins/media/EmbedPlugin.svelte +93 -77
- package/dist/plugins/media/EmbedPlugin.svelte.d.ts +21 -9
- package/dist/plugins/media/EmptySlot.svelte +44 -0
- package/dist/plugins/media/EmptySlot.svelte.d.ts +25 -0
- package/dist/plugins/media/FilePlugin.svelte +35 -111
- package/dist/plugins/media/FilePlugin.svelte.d.ts +12 -4
- package/dist/plugins/media/MediaEmpty.svelte +55 -112
- package/dist/plugins/media/MediaEmpty.svelte.d.ts +26 -10
- package/dist/plugins/media/SourceBlock.svelte +164 -0
- package/dist/plugins/media/SourceBlock.svelte.d.ts +33 -0
- package/dist/plugins/media/VideoPlugin.svelte +4 -97
- package/dist/plugins/media/VideoPlugin.svelte.d.ts +2 -5
- package/dist/plugins/media/empty.svelte.d.ts +69 -0
- package/dist/plugins/media/empty.svelte.js +111 -0
- package/dist/plugins/media/media.d.ts +93 -30
- package/dist/plugins/media/media.js +79 -86
- package/dist/plugins/media/urlPaste.svelte.d.ts +9 -32
- package/dist/plugins/media/urlPaste.svelte.js +46 -75
- package/dist/plugins/mention/MentionPlugin.svelte +47 -124
- package/dist/plugins/mention/MentionPlugin.svelte.d.ts +11 -23
- package/dist/plugins/page/PageLink.svelte +54 -38
- package/dist/plugins/page/PagePlugin.svelte +20 -18
- package/dist/plugins/page/PagePlugin.svelte.d.ts +2 -4
- package/dist/plugins/page/page.d.ts +35 -9
- package/dist/plugins/page/page.js +3 -4
- package/dist/plugins/pageLink/PageLinkPlugin.svelte +52 -108
- package/dist/plugins/pageLink/PageLinkPlugin.svelte.d.ts +11 -23
- package/dist/plugins/planned.d.ts +10 -0
- package/dist/plugins/planned.js +12 -0
- package/dist/plugins/richtext/CalloutIcon.svelte +25 -0
- package/dist/plugins/richtext/CalloutIcon.svelte.d.ts +9 -0
- package/dist/plugins/richtext/CalloutIconPicker.svelte +26 -0
- package/dist/plugins/richtext/CalloutIconPicker.svelte.d.ts +9 -0
- package/dist/plugins/richtext/EmptyBody.svelte +25 -0
- package/dist/plugins/richtext/EmptyBody.svelte.d.ts +8 -0
- package/dist/plugins/richtext/RichTextControl.svelte +39 -0
- package/dist/plugins/richtext/RichTextControl.svelte.d.ts +8 -0
- package/dist/plugins/richtext/RichTextPlugin.svelte +272 -148
- package/dist/plugins/richtext/RichTextPlugin.svelte.d.ts +37 -18
- package/dist/plugins/richtext/TodoCheckbox.svelte +10 -21
- package/dist/plugins/richtext/TodoCheckbox.svelte.d.ts +0 -2
- package/dist/plugins/richtext/body.d.ts +9 -0
- package/dist/plugins/richtext/body.js +16 -0
- package/dist/plugins/richtext/calloutIcons.svelte.d.ts +97 -0
- package/dist/plugins/richtext/calloutIcons.svelte.js +214 -0
- package/dist/plugins/richtext/callouts.d.ts +15 -0
- package/dist/plugins/richtext/callouts.js +23 -0
- package/dist/plugins/richtext/controls.svelte.d.ts +110 -0
- package/dist/plugins/richtext/controls.svelte.js +126 -0
- package/dist/plugins/richtext/richTextOperations.js +37 -28
- package/dist/plugins/slashMenu/SlashMenuController.svelte.d.ts +18 -11
- package/dist/plugins/slashMenu/SlashMenuController.svelte.js +93 -35
- package/dist/plugins/slashMenu/slashMenuPlugin.d.ts +11 -24
- package/dist/plugins/slashMenu/slashMenuPlugin.js +27 -68
- package/dist/plugins/suggestions/SuggestionBars.svelte +32 -84
- package/dist/plugins/suggestions/SuggestionBars.svelte.d.ts +9 -3
- package/dist/plugins/suggestions/suggestionsPlugin.d.ts +10 -16
- package/dist/plugins/suggestions/suggestionsPlugin.js +9 -24
- package/dist/plugins/table/TableChrome.svelte +96 -127
- package/dist/plugins/table/TableChrome.svelte.d.ts +5 -1
- package/dist/plugins/table/TablePlugin.svelte +116 -171
- package/dist/plugins/table/TablePlugin.svelte.d.ts +0 -4
- package/dist/plugins/table/chrome.svelte.d.ts +110 -117
- package/dist/plugins/table/chrome.svelte.js +643 -289
- package/dist/plugins/table/ops.d.ts +47 -0
- package/dist/plugins/table/ops.js +233 -0
- package/dist/plugins/table/table.css +55 -134
- package/dist/plugins/table/table.d.ts +26 -7
- package/dist/plugins/table/table.js +23 -49
- package/dist/plugins/toc/TableOfContents.svelte +32 -38
- package/dist/plugins/toc/TableOfContents.svelte.d.ts +1 -5
- package/dist/plugins/toc/TocPlugin.svelte +22 -22
- package/dist/plugins/toc/TocPlugin.svelte.d.ts +4 -6
- package/dist/plugins/toc/toc.d.ts +41 -10
- package/dist/plugins/toc/toc.js +2 -3
- package/dist/plugins/toolbar/ToolbarController.svelte.d.ts +29 -66
- package/dist/plugins/toolbar/ToolbarController.svelte.js +151 -76
- package/dist/plugins/toolbar/toolbarPlugin.d.ts +14 -13
- package/dist/plugins/toolbar/toolbarPlugin.js +28 -43
- package/dist/plugins/triggers/TriggerController.svelte.d.ts +6 -45
- package/dist/plugins/triggers/TriggerController.svelte.js +51 -96
- package/dist/plugins/triggers/place.d.ts +0 -9
- package/dist/plugins/triggers/place.js +1 -17
- package/dist/plugins/triggers/triggers.d.ts +31 -9
- package/dist/plugins/triggers/triggers.js +82 -62
- package/dist/plugins/uploads.svelte.d.ts +38 -20
- package/dist/plugins/uploads.svelte.js +39 -32
- package/dist/plugins.d.ts +167 -60
- package/dist/selection/domSelection.d.ts +13 -4
- package/dist/selection/domSelection.js +110 -183
- package/dist/selection/pointer.svelte.d.ts +12 -10
- package/dist/selection/pointer.svelte.js +154 -71
- package/dist/selection/replaceSelection.d.ts +21 -22
- package/dist/selection/replaceSelection.js +60 -69
- package/dist/selection/selection.svelte.d.ts +5 -73
- package/dist/selection/selection.svelte.js +263 -542
- package/dist/selection/selection.utils.d.ts +34 -11
- package/dist/selection/selection.utils.js +128 -247
- package/dist/selection/visibility.d.ts +11 -8
- package/dist/selection/visibility.js +23 -8
- package/dist/session/announcer.svelte.d.ts +2 -1
- package/dist/session/announcer.svelte.js +7 -3
- package/dist/session/attempt.d.ts +33 -39
- package/dist/session/attempt.js +61 -53
- package/dist/session/bindings.js +108 -139
- package/dist/session/commands.d.ts +47 -22
- package/dist/session/commands.js +206 -208
- package/dist/session/composition.svelte.d.ts +2 -4
- package/dist/session/composition.svelte.js +55 -65
- package/dist/session/editing/text.d.ts +6 -0
- package/dist/session/editing/text.js +17 -3
- package/dist/session/handles.d.ts +10 -1
- package/dist/session/handles.js +28 -0
- package/dist/session/history.d.ts +0 -4
- package/dist/session/history.js +15 -21
- package/dist/session/inputRules.js +75 -84
- package/dist/session/keymap.d.ts +1 -6
- package/dist/session/keymap.js +17 -20
- package/dist/session/moves.d.ts +10 -10
- package/dist/session/moves.js +31 -59
- package/dist/session/navigation.d.ts +18 -3
- package/dist/session/navigation.js +194 -153
- package/dist/session/ports.d.ts +7 -0
- package/dist/session/selection.d.ts +4 -3
- package/dist/session/selection.js +8 -0
- package/dist/session/suggestions.svelte.d.ts +1 -1
- package/dist/session/suggestions.svelte.js +64 -47
- package/dist/session/virtual.d.ts +3 -3
- package/dist/session/virtual.js +18 -40
- package/dist/surface/attributes.d.ts +1 -0
- package/dist/surface/attributes.js +3 -26
- package/dist/surface/cells.d.ts +5 -0
- package/dist/surface/cells.js +5 -0
- package/dist/surface/lines.d.ts +32 -0
- package/dist/surface/lines.js +43 -0
- package/dist/surface/observer.svelte.d.ts +3 -20
- package/dist/surface/observer.svelte.js +73 -77
- package/dist/surface/overlay.d.ts +48 -6
- package/dist/surface/overlay.js +133 -23
- package/dist/surface/pin.svelte.d.ts +5 -0
- package/dist/surface/pin.svelte.js +5 -0
- package/dist/surface/projector.svelte.d.ts +4 -6
- package/dist/surface/projector.svelte.js +42 -69
- package/dist/text/text.svelte.d.ts +14 -40
- package/dist/text/text.svelte.js +35 -51
- package/dist/text/wordBoundary.d.ts +19 -0
- package/dist/text/wordBoundary.js +29 -44
- package/dist/themes/notion.css +315 -126
- package/dist/utils/json.d.ts +3 -1
- package/dist/utils/json.js +52 -51
- package/dist/utils/listen.d.ts +8 -0
- package/dist/utils/listen.js +19 -0
- package/package.json +4 -5
- package/dist/block/block.utils.d.ts +0 -340
- package/dist/block/block.utils.js +0 -356
- package/dist/collaboration/history/HistoryPanel.svelte +0 -525
- package/dist/collaboration/history/HistoryPanel.svelte.d.ts +0 -7
- package/dist/collaboration/history/panel.d.ts +0 -43
- package/dist/collaboration/history/panel.js +0 -3
- package/dist/components/SuggestionRanges.svelte +0 -58
- package/dist/components/SuggestionRanges.svelte.d.ts +0 -7
- package/dist/crdt/doc/table.d.ts +0 -21
- package/dist/crdt/doc/table.js +0 -288
- package/dist/crdt/migration/generation.d.ts +0 -58
- package/dist/crdt/migration/generation.js +0 -70
- package/dist/crdt/migration/legacy-schema.d.ts +0 -61
- package/dist/crdt/migration/legacy-schema.js +0 -151
- package/dist/crdt/migration/migrate.d.ts +0 -56
- package/dist/crdt/migration/migrate.js +0 -227
- package/dist/crdt/nodes.d.ts +0 -121
- package/dist/crdt/nodes.js +0 -56
- package/dist/crdt/text/index/checks.d.ts +0 -15
- package/dist/crdt/text/index/checks.js +0 -156
- package/dist/crdt/vendor/yjs/dts/utils/EventHandler.d.ts +0 -17
- package/dist/crdt/vendor/yjs/dts/utils/RelativePosition.d.ts +0 -80
- package/dist/crdt/vendor/yjs/dts/utils/UndoManager.d.ts +0 -205
- package/dist/crdt/vendor/yjs/dts/utils/YEvent.d.ts +0 -93
- package/dist/crdt/vendor/yjs/dts/utils/meta.d.ts +0 -25
- package/dist/crdt/vendor/yjs/dts/utils/renderer-helpers.d.ts +0 -98
- package/dist/crdt/vendor/yjs/dts/utils/schemas.d.ts +0 -2
- package/dist/crdt/vendor/yjs/src/utils/EventHandler.js +0 -75
- package/dist/crdt/vendor/yjs/src/utils/RelativePosition.js +0 -301
- package/dist/crdt/vendor/yjs/src/utils/UndoManager.js +0 -554
- package/dist/crdt/vendor/yjs/src/utils/YEvent.js +0 -158
- package/dist/crdt/vendor/yjs/src/utils/meta.js +0 -74
- package/dist/crdt/vendor/yjs/src/utils/renderer-helpers.js +0 -186
- package/dist/crdt/vendor/yjs/src/utils/schemas.js +0 -3
- package/dist/edytor.utils.d.ts +0 -50
- package/dist/edytor.utils.js +0 -67
- package/dist/plugins/blockMenu/BlockMenu.svelte +0 -447
- package/dist/plugins/blockMenu/BlockMenu.svelte.d.ts +0 -9
- package/dist/plugins/find/FindBar.svelte +0 -170
- package/dist/plugins/find/FindBar.svelte.d.ts +0 -9
- package/dist/plugins/find/FindHighlights.svelte +0 -75
- package/dist/plugins/find/FindHighlights.svelte.d.ts +0 -9
- package/dist/plugins/icons.d.ts +0 -2
- package/dist/plugins/icons.js +0 -63
- package/dist/plugins/image/ImageEmpty.svelte +0 -116
- package/dist/plugins/image/ImageEmpty.svelte.d.ts +0 -12
- package/dist/plugins/keepInView.d.ts +0 -4
- package/dist/plugins/keepInView.js +0 -6
- package/dist/plugins/media/UrlPasteMenu.svelte +0 -83
- package/dist/plugins/media/UrlPasteMenu.svelte.d.ts +0 -7
- package/dist/plugins/richtext/labels.d.ts +0 -5
- package/dist/plugins/richtext/labels.js +0 -3
- package/dist/plugins/slashMenu/SlashMenu.svelte +0 -360
- package/dist/plugins/slashMenu/SlashMenu.svelte.d.ts +0 -11
- package/dist/plugins/toolbar/LinkCard.svelte +0 -118
- package/dist/plugins/toolbar/LinkCard.svelte.d.ts +0 -7
- package/dist/plugins/toolbar/Toolbar.svelte +0 -400
- package/dist/plugins/toolbar/Toolbar.svelte.d.ts +0 -9
- package/dist/plugins/triggers/TriggerMenu.svelte +0 -144
- package/dist/plugins/triggers/TriggerMenu.svelte.d.ts +0 -7
- package/dist/session/props.d.ts +0 -28
- package/dist/session/props.js +0 -162
- package/dist/text/deltas.d.ts +0 -22
- package/dist/text/deltas.js +0 -46
- package/dist/text/text.utils.d.ts +0 -45
- package/dist/text/text.utils.js +0 -199
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
import type { Edytor } from '../edytor.svelte.js';
|
|
4
4
|
import { UNKNOWN_KIND } from '../kinds.js';
|
|
5
5
|
import { voidChrome, type Block as BlockHandle } from '../block/block.svelte.js';
|
|
6
|
-
import type { BlockDefinition, BlockView } from '../plugins.js';
|
|
6
|
+
import type { BlockDefinition, BlockSnippetPayload, BlockView } from '../plugins.js';
|
|
7
7
|
import type { PreviewCell } from '../surface/cells.js';
|
|
8
|
-
import { replacedMark } from '../session/suggestions.svelte.js';
|
|
8
|
+
import { replacedMark, Suggestion } from '../session/suggestions.svelte.js';
|
|
9
9
|
|
|
10
10
|
const reported = new WeakMap<Edytor, Set<string>>();
|
|
11
11
|
|
|
@@ -42,6 +42,15 @@
|
|
|
42
42
|
void: voidChrome
|
|
43
43
|
});
|
|
44
44
|
|
|
45
|
+
/**
|
|
46
|
+
* A child in the flow: a block's id, a block suggestion's preview in the
|
|
47
|
+
* flow among its siblings (in place of a block), or a suggestion's own
|
|
48
|
+
* block, rendered from its preview cell, never registered (`Suggestion`).
|
|
49
|
+
*/
|
|
50
|
+
export type Kid = string | Suggestion | PreviewCell;
|
|
51
|
+
const kidKey = (kid: Kid) =>
|
|
52
|
+
typeof kid === 'string' || kid instanceof Suggestion ? kid : kid.id;
|
|
53
|
+
|
|
45
54
|
/** Tags that take no content: the kind renders the element only. */
|
|
46
55
|
const VOID_TAGS = new Set(['area', 'br', 'col', 'embed', 'hr', 'img', 'input', 'wbr']);
|
|
47
56
|
|
|
@@ -82,158 +91,190 @@
|
|
|
82
91
|
import { getContext } from 'svelte';
|
|
83
92
|
import Child from './Block.svelte';
|
|
84
93
|
import Content from './Content.svelte';
|
|
85
|
-
import
|
|
86
|
-
import { blockDir, ownText } from '../surface/attributes.js';
|
|
94
|
+
import SuggestionPreview from './Suggestion.svelte';
|
|
95
|
+
import { blockDir, ownText, type Owned } from '../surface/attributes.js';
|
|
87
96
|
import { colorAttributes } from '../block/colors.js';
|
|
88
97
|
|
|
89
|
-
let {
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
preview?: PreviewCell;
|
|
96
|
-
} = $props();
|
|
98
|
+
let { kid }: { kid: Kid } = $props();
|
|
99
|
+
const suggestion = $derived(kid instanceof Suggestion ? kid : undefined);
|
|
100
|
+
const preview = $derived(
|
|
101
|
+
typeof kid === 'string' || suggestion ? undefined : (kid as PreviewCell)
|
|
102
|
+
);
|
|
103
|
+
const id = $derived(typeof kid === 'string' ? kid : preview?.id);
|
|
97
104
|
|
|
98
105
|
const edytor = getContext<Edytor>('edytor');
|
|
99
106
|
// The structure renders from the cell; the snippet receives a view object.
|
|
100
|
-
const cell = $derived(preview ?? edytor.cells?.get(id));
|
|
101
|
-
const block = $derived(
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
/** The
|
|
107
|
+
const cell = $derived(preview ?? (id === undefined ? undefined : edytor.cells?.get(id)));
|
|
108
|
+
const block = $derived(
|
|
109
|
+
preview ? previewViewOf(preview) : id === undefined ? undefined : blockViewOf(edytor, id)
|
|
110
|
+
);
|
|
111
|
+
/** The suggestions shown at this block (none in a preview). */
|
|
112
|
+
const shown = $derived(preview || id === undefined ? null : edytor.suggestions.at(id));
|
|
113
|
+
/**
|
|
114
|
+
* The children: a preview's own, else the cell's ids with the suggestions
|
|
115
|
+
* shown around them and inside this block (`suggestions.around`).
|
|
116
|
+
*/
|
|
105
117
|
const kids = $derived(
|
|
106
118
|
preview
|
|
107
119
|
? preview.children
|
|
108
|
-
:
|
|
120
|
+
: id === undefined
|
|
121
|
+
? []
|
|
122
|
+
: edytor.suggestions.around(edytor.cells?.get(id)?.childIds ?? [], id)
|
|
109
123
|
);
|
|
110
124
|
const definition = $derived(cell && edytor.definitionOf(cell.type));
|
|
111
125
|
// The core renders the block element from the definition; the snippet renders inside it.
|
|
112
|
-
const element = $derived(
|
|
126
|
+
const element = $derived(
|
|
127
|
+
definition && id !== undefined
|
|
128
|
+
? elementOf(definition.element ?? 'div', cell?.data, id)
|
|
129
|
+
: undefined
|
|
130
|
+
);
|
|
131
|
+
/** The element's tag: none until the block has a cell and a definition. */
|
|
132
|
+
const tag = $derived((cell && element && element.tag) || undefined);
|
|
113
133
|
// The element around the block's own text (a heading's `h2`): the core's, so an override keeps it.
|
|
114
134
|
const contentElement = $derived(
|
|
115
|
-
definition &&
|
|
135
|
+
definition && id !== undefined
|
|
136
|
+
? elementOf(definition.contentElement, cell?.data, id)
|
|
137
|
+
: undefined
|
|
116
138
|
);
|
|
117
|
-
/** Its direction from its own text (`blockDir`, bidi): none in a preview. */
|
|
118
|
-
const dir = $derived(preview ? null : blockDir(ownText(cell?.runs ?? [])));
|
|
119
139
|
/**
|
|
120
|
-
*
|
|
121
|
-
*
|
|
140
|
+
* Registers the block element (one element per block, re-registered when
|
|
141
|
+
* the tag changes) with what it owns: the core's attributes below, not
|
|
142
|
+
* the kind's (`surface/attributes.ts` heals them).
|
|
122
143
|
*/
|
|
123
|
-
const
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
144
|
+
const register = (node: HTMLElement) =>
|
|
145
|
+
block?.handle?.attach(node, (): Owned => {
|
|
146
|
+
const owned: Record<string, string | null> = {};
|
|
147
|
+
for (const [name, value] of Object.entries(attributes ?? {}))
|
|
148
|
+
if (!(name in (element?.attributes ?? {}))) owned[name] = (value as string) ?? null;
|
|
149
|
+
return { strict: false, owned, style: userSelect ? { 'user-select': userSelect } : {} };
|
|
150
|
+
});
|
|
151
|
+
/**
|
|
152
|
+
* Whether the selection holds this block, and whether it touches it: one
|
|
153
|
+
* boolean each, read from the block's own membership (`isSelected`,
|
|
154
|
+
* `isFocused`), so a selection change re-runs only the blocks it enters and
|
|
155
|
+
* leaves (a set's `has` re-runs the reader of every block outside it when
|
|
156
|
+
* its members change: a caret moving to another block re-ran every block's).
|
|
157
|
+
*/
|
|
158
|
+
const selected = $derived(!!block?.handle && edytor.selection.isSelected(block.handle));
|
|
159
|
+
const focused = $derived(!!block?.handle && edytor.selection.isFocused(block.handle));
|
|
160
|
+
/**
|
|
161
|
+
* Its colour and background by palette name (`block/colors.ts`), from its
|
|
162
|
+
* data; written below as two properties (a second spread in the object
|
|
163
|
+
* literal takes the engine's slow copy, three times the attributes' cost).
|
|
164
|
+
*/
|
|
165
|
+
const colors = $derived(colorAttributes(cell?.data));
|
|
131
166
|
/** The block element's attributes: the kind's, then the core's. */
|
|
132
167
|
const attributes = $derived(
|
|
133
168
|
element && {
|
|
134
169
|
...element.attributes,
|
|
135
|
-
|
|
136
|
-
|
|
170
|
+
'data-edytor-color': colors['data-edytor-color'],
|
|
171
|
+
'data-edytor-background': colors['data-edytor-background'],
|
|
137
172
|
'data-edytor-block': 'true',
|
|
138
173
|
'data-edytor-id': preview ? undefined : id,
|
|
139
174
|
'data-edytor-type': cell?.type,
|
|
140
175
|
'data-edytor-void': definition?.void ? 'true' : undefined,
|
|
141
|
-
'data-edytor-selected':
|
|
142
|
-
|
|
143
|
-
'data-edytor-focused':
|
|
144
|
-
block.handle && edytor.selection.focusedBlocks.has(block.handle) ? 'true' : undefined,
|
|
176
|
+
'data-edytor-selected': selected ? 'true' : undefined,
|
|
177
|
+
'data-edytor-focused': focused ? 'true' : undefined,
|
|
145
178
|
'data-edytor-suggestion-replaced': shown ? (replacedMark(shown) ?? undefined) : undefined,
|
|
146
|
-
contenteditable: definition?.void ? ('false' as const) : undefined
|
|
179
|
+
contenteditable: definition?.void ? ('false' as const) : undefined,
|
|
180
|
+
// Its direction from its own text (`blockDir`, bidi), absent without one: none in a preview.
|
|
181
|
+
dir: (!preview && blockDir(ownText(cell?.runs ?? []))) || undefined
|
|
147
182
|
}
|
|
148
183
|
);
|
|
184
|
+
const userSelect = $derived(definition?.void ? 'none' : undefined);
|
|
185
|
+
/** What renders inside the element: the kind's snippet, or a kind this view does not register. */
|
|
186
|
+
const body = $derived(definition?.snippet ?? (definition === UNKNOWN_KIND ? unknown : undefined));
|
|
187
|
+
/** The kind snippet's payload: its view object, its text, its children (none: `null`). */
|
|
188
|
+
const payload = $derived({
|
|
189
|
+
block: block!,
|
|
190
|
+
content: contentElement ? wrappedContent : content,
|
|
191
|
+
children: kids.length ? children : null
|
|
192
|
+
});
|
|
149
193
|
|
|
150
194
|
// The kind `content()` last rendered under — read after each render.
|
|
151
195
|
let contentRenderedFor: string | undefined;
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
196
|
+
// Development only: production keeps no effect per block for it.
|
|
197
|
+
if (DEV)
|
|
198
|
+
$effect(() => {
|
|
199
|
+
if (block?.handle) checkRendersContent(block.handle, contentRenderedFor === cell?.type);
|
|
200
|
+
});
|
|
155
201
|
</script>
|
|
156
202
|
|
|
157
203
|
<!--
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
204
|
+
The render places as few anchors as it can (`render.markers`, counted by
|
|
205
|
+
`render-markers.test.tsx`): Svelte leaves an empty comment or text node for
|
|
206
|
+
each block, dynamic element, component or snippet it places, except a
|
|
207
|
+
static component or snippet that is the only thing its fragment renders,
|
|
208
|
+
and the browser walks them all after each keystroke. So the bundled kinds'
|
|
209
|
+
block tags are static elements (a dynamic element leaves two markers
|
|
210
|
+
more), the text is a static component of the `content` snippet, and the
|
|
211
|
+
children are one `each` of static components (a suggestion in the flow is
|
|
212
|
+
one of them). The comments between the top-level nodes keep whitespace out
|
|
213
|
+
of the markup.
|
|
214
|
+
-->
|
|
215
|
+
{#snippet content()}
|
|
216
|
+
<Content
|
|
217
|
+
id={id ?? ''}
|
|
161
218
|
preview={preview?.runs}
|
|
162
219
|
onrender={DEV ? () => (contentRenderedFor = cell?.type) : undefined}
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
-->{#
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
{
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
-->{#snippet children()}
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
-->{
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
-->{
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
>
|
|
222
|
-
{@render children()}
|
|
223
|
-
</div>{/if}<!--
|
|
224
|
-
-->{/if}<!--
|
|
225
|
-
--></svelte:element
|
|
226
|
-
><!--
|
|
227
|
-
-->{/if}<!--
|
|
228
|
-
-->{/if}<!--
|
|
229
|
-
-->{#each shown?.after ?? [] as suggestion (suggestion.id)}<!--
|
|
230
|
-
--><Suggestion
|
|
231
|
-
{suggestion}
|
|
232
|
-
/><!--
|
|
233
|
-
-->{/each}
|
|
234
|
-
|
|
235
|
-
<!--
|
|
236
|
-
-->
|
|
220
|
+
/>
|
|
221
|
+
{/snippet}<!--
|
|
222
|
+
The kind's `contentElement` (a heading's `h2`) around the text.
|
|
223
|
+
-->{#snippet wrappedContent()}
|
|
224
|
+
<svelte:element this={contentElement?.tag} {...contentElement?.attributes}>
|
|
225
|
+
<Content
|
|
226
|
+
id={id ?? ''}
|
|
227
|
+
preview={preview?.runs}
|
|
228
|
+
onrender={DEV ? () => (contentRenderedFor = cell?.type) : undefined}
|
|
229
|
+
/>
|
|
230
|
+
</svelte:element>
|
|
231
|
+
{/snippet}<!--
|
|
232
|
+
-->{#snippet children()}
|
|
233
|
+
{#each kids as kid (kidKey(kid))}
|
|
234
|
+
<Child {kid} />
|
|
235
|
+
{/each}
|
|
236
|
+
{/snippet}<!--
|
|
237
|
+
A kind this view does not register: a plain block, its text and children.
|
|
238
|
+
-->{#snippet unknown({
|
|
239
|
+
content,
|
|
240
|
+
children
|
|
241
|
+
}: BlockSnippetPayload)}
|
|
242
|
+
{@render content()}<!--
|
|
243
|
+
-->{#if children}
|
|
244
|
+
<div data-edytor-children>
|
|
245
|
+
{@render children()}
|
|
246
|
+
</div>
|
|
247
|
+
{/if}
|
|
248
|
+
{/snippet}<!--
|
|
249
|
+
The block element: the bundled kinds' tags as static elements, any other
|
|
250
|
+
through `svelte:element` (a void tag, a divider's `hr`, takes no body).
|
|
251
|
+
-->{#if suggestion}
|
|
252
|
+
<SuggestionPreview {suggestion} />
|
|
253
|
+
{:else if tag === 'div'}
|
|
254
|
+
<div {...attributes} style:user-select={userSelect} use:register>
|
|
255
|
+
{@render body?.(payload)}
|
|
256
|
+
</div>
|
|
257
|
+
{:else if tag === 'li'}
|
|
258
|
+
<li {...attributes} style:user-select={userSelect} use:register>
|
|
259
|
+
{@render body?.(payload)}
|
|
260
|
+
</li>
|
|
261
|
+
{:else if tag === 'details'}
|
|
262
|
+
<details {...attributes} style:user-select={userSelect} use:register>
|
|
263
|
+
{@render body?.(payload)}
|
|
264
|
+
</details>
|
|
265
|
+
{:else if tag === 'figure'}
|
|
266
|
+
<figure {...attributes} style:user-select={userSelect} use:register>
|
|
267
|
+
{@render body?.(payload)}
|
|
268
|
+
</figure>
|
|
269
|
+
{:else if tag === 'hr'}
|
|
270
|
+
<hr {...attributes} style:user-select={userSelect} use:register />
|
|
271
|
+
{:else if tag && VOID_TAGS.has(tag)}
|
|
272
|
+
<svelte:element this={tag} {...attributes} style:user-select={userSelect} use:register />
|
|
273
|
+
{:else if tag}
|
|
274
|
+
<svelte:element this={tag} {...attributes} style:user-select={userSelect} use:register>
|
|
275
|
+
{@render body?.(payload)}
|
|
276
|
+
</svelte:element>
|
|
277
|
+
{/if}
|
|
237
278
|
|
|
238
279
|
<style>
|
|
239
280
|
/*
|
|
@@ -1,8 +1,13 @@
|
|
|
1
1
|
import type { PreviewCell } from '../surface/cells.js';
|
|
2
|
+
import { Suggestion } from '../session/suggestions.svelte.js';
|
|
3
|
+
/**
|
|
4
|
+
* A child in the flow: a block's id, a block suggestion's preview in the
|
|
5
|
+
* flow among its siblings (in place of a block), or a suggestion's own
|
|
6
|
+
* block, rendered from its preview cell, never registered (`Suggestion`).
|
|
7
|
+
*/
|
|
8
|
+
export type Kid = string | Suggestion | PreviewCell;
|
|
2
9
|
type $$ComponentProps = {
|
|
3
|
-
|
|
4
|
-
/** A suggestion's block: rendered from its preview cell, never registered (`Suggestion`). */
|
|
5
|
-
preview?: PreviewCell;
|
|
10
|
+
kid: Kid;
|
|
6
11
|
};
|
|
7
12
|
declare const Block: import("svelte").Component<$$ComponentProps, {}, "">;
|
|
8
13
|
type Block = ReturnType<typeof Block>;
|
|
@@ -2,10 +2,13 @@
|
|
|
2
2
|
import { getContext } from 'svelte';
|
|
3
3
|
import type { Edytor } from '../edytor.svelte.js';
|
|
4
4
|
import {
|
|
5
|
+
START,
|
|
5
6
|
partsOf,
|
|
6
7
|
segmentDeltas,
|
|
8
|
+
type AtomPart,
|
|
7
9
|
type Cell,
|
|
8
10
|
type Part,
|
|
11
|
+
type RenderDelta,
|
|
9
12
|
type Segment
|
|
10
13
|
} from '../surface/cells.js';
|
|
11
14
|
import type { ContentRun } from '../crdt/index.js';
|
|
@@ -32,11 +35,6 @@
|
|
|
32
35
|
const cell = $derived(preview ? undefined : edytor.cells?.get(id));
|
|
33
36
|
/** The cell's segments and atoms — the frozen list while the IME pin holds this cell. */
|
|
34
37
|
const parts = $derived(cell ? edytor.pin.parts(cell) : []);
|
|
35
|
-
/** Each part with its text ordinal (its text handle's position). */
|
|
36
|
-
const items = $derived.by(() => {
|
|
37
|
-
let ordinal = 0;
|
|
38
|
-
return parts.map((part) => ({ part, ordinal: part.kind === 'text' ? ordinal++ : -1 }));
|
|
39
|
-
});
|
|
40
38
|
/** Bumped only by the observer's repair of foreign damage: re-creates the text elements. */
|
|
41
39
|
const epoch = $derived(edytor.cells?.epoch(id) ?? 0);
|
|
42
40
|
const type = $derived(cell?.type ?? edytor.cells?.get(id)?.type);
|
|
@@ -44,15 +42,16 @@
|
|
|
44
42
|
// The placeholder attribute: withheld in the block a composition is in.
|
|
45
43
|
const placeholder = $derived(edytor.placeholderAt(id));
|
|
46
44
|
|
|
45
|
+
/** An empty content's one text (`partsOf`: a content starts with a text). */
|
|
46
|
+
const EMPTY: Segment = { kind: 'text', key: START, text: '', runs: [] };
|
|
47
|
+
|
|
48
|
+
/** Whether this view renders an atom of `part`'s kind (its record has a snippet). */
|
|
49
|
+
const rendersAtom = (part: AtomPart) => Boolean(edytor.inlineBlocks.get(part.type)?.snippet);
|
|
50
|
+
|
|
47
51
|
/** Segments are keyed causally (the preceding atom's id, or `start`), never by ordinal. */
|
|
48
|
-
const keyOf = (
|
|
49
|
-
part.kind === 'text' ? `s:${part.key}:${epoch}` : `a:${part.id}`;
|
|
52
|
+
const keyOf = (part: Part) => (part.kind === 'text' ? `s:${part.key}:${epoch}` : `a:${part.id}`);
|
|
50
53
|
|
|
51
|
-
const view = (segment: Segment) =>
|
|
52
|
-
edytor.pin.render(id, segment.key) ?? {
|
|
53
|
-
deltas: segmentDeltas(cell!, segment, transform),
|
|
54
|
-
empty: segment.text === ''
|
|
55
|
-
};
|
|
54
|
+
const view = (segment: Segment) => edytor.pin.shown(cell!, segment, transform);
|
|
56
55
|
|
|
57
56
|
/** A suggestion's text after this block's (`end`): its first block's content. */
|
|
58
57
|
const ghosts = $derived(
|
|
@@ -73,6 +72,55 @@
|
|
|
73
72
|
),
|
|
74
73
|
empty: !segment.text
|
|
75
74
|
});
|
|
75
|
+
|
|
76
|
+
/** The parts this content renders: a preview's (session parts, no handle), else the cell's. */
|
|
77
|
+
const own = $derived(preview ? partsOf(preview) : parts);
|
|
78
|
+
/**
|
|
79
|
+
* The first text, before any atom (its key is always `start`): a static
|
|
80
|
+
* element of the content, re-created only by an epoch bump. The rest is
|
|
81
|
+
* one keyed list after it: two anchors for the whole content
|
|
82
|
+
* (`render.markers`).
|
|
83
|
+
*/
|
|
84
|
+
const first = $derived((own[0]?.kind === 'text' ? own[0] : undefined) ?? EMPTY);
|
|
85
|
+
const firstShown = $derived(preview ? ghost(first) : view(first));
|
|
86
|
+
/**
|
|
87
|
+
* Its handle, looked up again with each segment list the cell renders (a
|
|
88
|
+
* keyed entry's is, with its entry): the handle can change while the
|
|
89
|
+
* element stays (the virtual paragraph becoming a real block).
|
|
90
|
+
*/
|
|
91
|
+
const firstText = $derived.by(() => {
|
|
92
|
+
void parts;
|
|
93
|
+
return preview ? undefined : edytor.textAt(id, 0);
|
|
94
|
+
});
|
|
95
|
+
|
|
96
|
+
type Entry =
|
|
97
|
+
| { key: string; kind: 'text'; part: Segment; ordinal: number }
|
|
98
|
+
| { key: string; kind: 'rest'; deltas: readonly RenderDelta[] }
|
|
99
|
+
| { key: string; kind: 'atom'; part: AtomPart }
|
|
100
|
+
| { key: string; kind: 'ghost'; parts: readonly Part[] };
|
|
101
|
+
/**
|
|
102
|
+
* What follows the first text, in order: the atoms and texts (with their
|
|
103
|
+
* text ordinal, their handle's position), each text followed by the rest
|
|
104
|
+
* a live composition merged into it (`pin.rest`), then the suggestions'
|
|
105
|
+
* text after the block's.
|
|
106
|
+
*/
|
|
107
|
+
const entries = $derived.by(() => {
|
|
108
|
+
const list: Entry[] = [];
|
|
109
|
+
let ordinal = 0;
|
|
110
|
+
for (const part of own) {
|
|
111
|
+
if (part.kind !== 'text') {
|
|
112
|
+
// An atom whose kind renders nothing (no snippet in this view) takes no place.
|
|
113
|
+
if (rendersAtom(part)) list.push({ key: keyOf(part), kind: 'atom', part });
|
|
114
|
+
continue;
|
|
115
|
+
}
|
|
116
|
+
if (ordinal) list.push({ key: keyOf(part), kind: 'text', part, ordinal });
|
|
117
|
+
ordinal++;
|
|
118
|
+
const rest = preview ? [] : edytor.pin.rest(id, part.key);
|
|
119
|
+
if (rest.length) list.push({ key: `r:${part.key}`, kind: 'rest', deltas: rest });
|
|
120
|
+
}
|
|
121
|
+
ghosts.forEach((parts, index) => list.push({ key: `g:${index}`, kind: 'ghost', parts }));
|
|
122
|
+
return list;
|
|
123
|
+
});
|
|
76
124
|
</script>
|
|
77
125
|
|
|
78
126
|
<!--
|
|
@@ -89,7 +137,7 @@
|
|
|
89
137
|
empty={shown.empty}
|
|
90
138
|
newline={part.text.endsWith('\n')}
|
|
91
139
|
/><!--
|
|
92
|
-
-->{:else}<!--
|
|
140
|
+
-->{:else if rendersAtom(part)}<!--
|
|
93
141
|
--><RenderInlineBlock
|
|
94
142
|
block={undefined}
|
|
95
143
|
{part}
|
|
@@ -97,44 +145,43 @@
|
|
|
97
145
|
-->{/if}<!--
|
|
98
146
|
-->{/each}<!--
|
|
99
147
|
-->{/snippet}<!--
|
|
100
|
-
-->{#
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
148
|
+
-->{#key epoch}<RenderText
|
|
149
|
+
text={firstText}
|
|
150
|
+
deltas={firstShown.deltas}
|
|
151
|
+
empty={firstShown.empty}
|
|
152
|
+
newline={first.text.endsWith('\n')}
|
|
153
|
+
placeholder={preview ? null : placeholder}
|
|
154
|
+
/>{/key}<!--
|
|
155
|
+
-->{#each entries as entry (entry.key)}<!--
|
|
156
|
+
-->{#if entry.kind === 'text'}<!--
|
|
107
157
|
-->{@const shown =
|
|
108
|
-
view(
|
|
109
|
-
-->{@const rest = edytor.pin.rest(id, item.part.key)}<!--
|
|
158
|
+
preview ? ghost(entry.part) : view(entry.part)}<!--
|
|
110
159
|
--><RenderText
|
|
111
|
-
text={edytor.textAt(id,
|
|
160
|
+
text={preview ? undefined : edytor.textAt(id, entry.ordinal)}
|
|
112
161
|
deltas={shown.deltas}
|
|
113
162
|
empty={shown.empty}
|
|
114
|
-
newline={
|
|
115
|
-
{placeholder}
|
|
163
|
+
newline={entry.part.text.endsWith('\n')}
|
|
164
|
+
placeholder={preview ? null : placeholder}
|
|
116
165
|
/><!--
|
|
117
|
-
|
|
118
|
-
--><RenderText
|
|
119
|
-
text={undefined}
|
|
120
|
-
deltas={rest}
|
|
121
|
-
empty={false}
|
|
122
|
-
newline={false}
|
|
123
|
-
rest
|
|
124
|
-
/><!--
|
|
125
|
-
-->{/if}<!--
|
|
126
|
-
-->{:else}<!--
|
|
166
|
+
-->{:else if entry.kind === 'atom'}<!--
|
|
127
167
|
--><RenderInlineBlock
|
|
128
|
-
block={edytor.atomAt(id,
|
|
129
|
-
part={
|
|
168
|
+
block={preview ? undefined : edytor.atomAt(id, entry.part.id)}
|
|
169
|
+
part={entry.part}
|
|
130
170
|
/><!--
|
|
131
|
-
-->{
|
|
132
|
-
|
|
133
|
-
|
|
171
|
+
-->{:else if entry.kind === 'rest'}<!--
|
|
172
|
+
--><RenderText
|
|
173
|
+
text={undefined}
|
|
174
|
+
deltas={entry.deltas}
|
|
175
|
+
empty={false}
|
|
176
|
+
newline={false}
|
|
177
|
+
rest
|
|
178
|
+
/><!--
|
|
179
|
+
-->{:else}<!--
|
|
134
180
|
--><span
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
181
|
+
data-edytor-text-suggestion
|
|
182
|
+
contentEditable="false"
|
|
183
|
+
style="user-select: none; pointer-events: none">{@render session(entry.parts)}</span
|
|
184
|
+
><!--
|
|
185
|
+
-->{/if}<!--
|
|
139
186
|
-->{/each}<!--
|
|
140
187
|
-->
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { getContext } from 'svelte';
|
|
3
|
+
import type { Edytor } from '../edytor.svelte.js';
|
|
4
|
+
import type { Text } from '../text/text.svelte.js';
|
|
5
|
+
import type { RenderDelta } from '../surface/cells.js';
|
|
6
|
+
import Mark, { customAt, registerMark } from './Mark.svelte';
|
|
7
|
+
import CustomMark from './CustomMark.svelte';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Mark `index` of `delta` drawn by its record's snippet, inside the core's
|
|
11
|
+
* `<span data-edytor-mark>`: the snippet's `content()` is the marks after
|
|
12
|
+
* it, then the text.
|
|
13
|
+
*/
|
|
14
|
+
let {
|
|
15
|
+
delta,
|
|
16
|
+
text,
|
|
17
|
+
index
|
|
18
|
+
}: {
|
|
19
|
+
text: Text | undefined;
|
|
20
|
+
delta: RenderDelta;
|
|
21
|
+
index: number;
|
|
22
|
+
} = $props();
|
|
23
|
+
|
|
24
|
+
const edytor = getContext<Edytor>('edytor');
|
|
25
|
+
const mark = $derived(delta.marks[index]);
|
|
26
|
+
const definition = $derived(edytor.marks.get(mark?.[0] ?? ''));
|
|
27
|
+
/** Another mark inside this one. */
|
|
28
|
+
const inner = $derived(index + 1 < delta.marks.length);
|
|
29
|
+
/** The text, as `content()`'s own text node when no mark is inside. */
|
|
30
|
+
const own = $derived(inner ? '' : delta.text);
|
|
31
|
+
const register = (node: HTMLElement) => registerMark(edytor, text, node, mark?.[0]);
|
|
32
|
+
</script>
|
|
33
|
+
|
|
34
|
+
{#snippet content()}{own}{#if !inner}{:else if customAt(edytor, delta, index + 1)}<CustomMark
|
|
35
|
+
index={index + 1}
|
|
36
|
+
{delta}
|
|
37
|
+
{text}
|
|
38
|
+
/>{:else}<Mark index={index + 1} {delta} {text} />{/if}{/snippet}
|
|
39
|
+
|
|
40
|
+
<!-- The core's element around a custom snippet: a static `span` (no anchor of its own). -->
|
|
41
|
+
<span
|
|
42
|
+
data-edytor-mark={mark?.[0]}
|
|
43
|
+
data-edytor-mark-void={definition?.void ? '' : undefined}
|
|
44
|
+
contenteditable={definition?.void ? 'false' : undefined}
|
|
45
|
+
use:register>{@render definition?.snippet?.({ content, mark: mark?.[1], text: text! })}</span
|
|
46
|
+
>
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Text } from '../text/text.svelte.js';
|
|
2
|
+
import type { RenderDelta } from '../surface/cells.js';
|
|
3
|
+
import CustomMark from './CustomMark.svelte';
|
|
4
|
+
type $$ComponentProps = {
|
|
5
|
+
text: Text | undefined;
|
|
6
|
+
delta: RenderDelta;
|
|
7
|
+
index: number;
|
|
8
|
+
};
|
|
9
|
+
declare const CustomMark: import("svelte").Component<$$ComponentProps, {}, "">;
|
|
10
|
+
type CustomMark = ReturnType<typeof CustomMark>;
|
|
11
|
+
export default CustomMark;
|