edytor 1.0.0-rc.2 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +65 -25
- package/dist/block/block.svelte.d.ts +10 -85
- package/dist/block/block.svelte.js +47 -141
- package/dist/block/colors.d.ts +0 -9
- package/dist/block/colors.js +1 -18
- package/dist/block/contentRange.d.ts +5 -1
- package/dist/block/contentRange.js +15 -16
- package/dist/block/inlineBlock.svelte.d.ts +8 -10
- package/dist/block/inlineBlock.svelte.js +14 -22
- package/dist/clipboard/createClipboardFragment.js +22 -64
- package/dist/clipboard/fragmentData.js +17 -42
- package/dist/clipboard/htmlFlow.d.ts +6 -1
- package/dist/clipboard/htmlFlow.js +26 -13
- package/dist/clipboard/insertClipboardFragment.js +5 -4
- package/dist/clipboard/moveText.js +16 -8
- package/dist/clipboard/serializeClipboardFragment.d.ts +2 -0
- package/dist/clipboard/serializeClipboardFragment.js +32 -28
- package/dist/cloudflare/DocumentRoom.d.ts +22 -17
- package/dist/cloudflare/DocumentRoom.js +10 -5
- package/dist/cloudflare/index.d.ts +1 -1
- package/dist/cloudflare/index.js +1 -1
- package/dist/cloudflare/move.d.ts +1 -18
- package/dist/cloudflare/move.js +2 -48
- package/dist/cloudflare/room/admission.d.ts +1 -60
- package/dist/cloudflare/room/admission.js +25 -29
- package/dist/cloudflare/room/comments.d.ts +1 -3
- package/dist/cloudflare/room/comments.js +6 -6
- package/dist/cloudflare/room/context.d.ts +20 -82
- package/dist/cloudflare/room/context.js +8 -8
- package/dist/cloudflare/room/forged.d.ts +1 -1
- package/dist/cloudflare/room/forged.js +2 -12
- package/dist/cloudflare/room/frames.d.ts +1 -1
- package/dist/cloudflare/room/frames.js +1 -1
- package/dist/cloudflare/room/history.d.ts +1 -25
- package/dist/cloudflare/room/history.js +39 -54
- package/dist/cloudflare/room/moves.d.ts +1 -13
- package/dist/cloudflare/room/moves.js +33 -57
- package/dist/cloudflare/room/presence.d.ts +1 -11
- package/dist/cloudflare/room/presence.js +4 -4
- package/dist/cloudflare/room/purge.d.ts +1 -2
- package/dist/cloudflare/room/purge.js +2 -2
- package/dist/cloudflare/room/replicas.d.ts +1 -7
- package/dist/cloudflare/room/replicas.js +2 -2
- package/dist/cloudflare/room/storage.d.ts +9 -30
- package/dist/cloudflare/room/storage.js +52 -104
- package/dist/cloudflare/room/updates.d.ts +4 -4
- package/dist/cloudflare/room/updates.js +17 -24
- package/dist/cloudflare/room/validation.d.ts +1 -5
- package/dist/cloudflare/room/validation.js +16 -37
- package/dist/collaboration/RemoteSelections.svelte +13 -17
- package/dist/collaboration/comments/client.d.ts +2 -2
- package/dist/collaboration/comments/client.js +1 -1
- package/dist/collaboration/history/index.d.ts +5 -5
- package/dist/collaboration/history/index.js +5 -5
- package/dist/collaboration/history/panel.svelte.d.ts +91 -0
- package/dist/collaboration/history/panel.svelte.js +223 -0
- package/dist/collaboration/providers.d.ts +12 -3
- package/dist/collaboration/providers.js +5 -4
- package/dist/components/Block.svelte +160 -119
- package/dist/components/Block.svelte.d.ts +8 -3
- package/dist/components/Content.svelte +91 -44
- package/dist/components/CustomMark.svelte +46 -0
- package/dist/components/CustomMark.svelte.d.ts +11 -0
- package/dist/components/Edytor.svelte +80 -95
- package/dist/components/Edytor.svelte.d.ts +8 -12
- package/dist/components/InlineBlock.svelte +4 -9
- package/dist/components/Mark.svelte +46 -35
- package/dist/components/Mark.svelte.d.ts +7 -0
- package/dist/components/Ranges.svelte +96 -0
- package/dist/components/Ranges.svelte.d.ts +19 -0
- package/dist/components/Suggestion.svelte +3 -2
- package/dist/components/Text.svelte +48 -14
- package/dist/components/Text.svelte.d.ts +1 -1
- package/dist/crdt/admission.d.ts +2 -9
- package/dist/crdt/admission.js +3 -9
- package/dist/crdt/attribution/attribution.d.ts +11 -72
- package/dist/crdt/attribution/attribution.js +5 -52
- package/dist/crdt/attribution/block.d.ts +0 -78
- package/dist/crdt/attribution/block.js +1 -144
- package/dist/crdt/data.d.ts +8 -13
- package/dist/crdt/data.js +30 -70
- package/dist/crdt/doc/anchors.js +4 -4
- package/dist/crdt/doc/content.d.ts +5 -1
- package/dist/crdt/doc/content.js +3 -1
- package/dist/crdt/doc/delete.d.ts +1 -0
- package/dist/crdt/doc/funnel.d.ts +0 -23
- package/dist/crdt/doc/funnel.js +34 -85
- package/dist/crdt/doc/gate.d.ts +8 -9
- package/dist/crdt/doc/gate.js +7 -17
- package/dist/crdt/doc/history.d.ts +87 -14
- package/dist/crdt/doc/history.js +334 -149
- package/dist/crdt/doc/layout.d.ts +0 -1
- package/dist/crdt/doc/layout.js +2 -3
- package/dist/crdt/doc/meta.d.ts +4 -4
- package/dist/crdt/doc/meta.js +10 -21
- package/dist/crdt/doc/moves.d.ts +4 -4
- package/dist/crdt/doc/moves.js +5 -5
- package/dist/crdt/doc/plan.d.ts +2 -0
- package/dist/crdt/doc/plan.js +2 -0
- package/dist/crdt/doc/reads.d.ts +1 -5
- package/dist/crdt/doc/reads.js +38 -49
- package/dist/crdt/doc/seed.d.ts +15 -6
- package/dist/crdt/doc/seed.js +27 -26
- package/dist/crdt/doc/split-merge.d.ts +1 -3
- package/dist/crdt/doc/split-merge.js +4 -5
- package/dist/crdt/doc/steps.d.ts +3 -7
- package/dist/crdt/doc/steps.js +20 -9
- package/dist/crdt/doc/types.d.ts +0 -10
- package/dist/crdt/document.d.ts +24 -115
- package/dist/crdt/document.js +207 -305
- package/dist/crdt/edytor-doc.d.ts +671 -90
- package/dist/crdt/edytor-doc.js +73 -149
- package/dist/crdt/engine-api.d.ts +15 -47
- package/dist/crdt/engine.d.ts +7 -17
- package/dist/crdt/engine.js +9 -19
- package/dist/crdt/flow.d.ts +9 -37
- package/dist/crdt/flow.js +260 -238
- package/dist/crdt/index.d.ts +26 -85
- package/dist/crdt/index.js +21 -47
- package/dist/crdt/operations.d.ts +24 -33
- package/dist/crdt/operations.js +7 -17
- package/dist/crdt/placement/display.d.ts +0 -2
- package/dist/crdt/placement/display.js +0 -15
- package/dist/crdt/placement/model.d.ts +160 -12
- package/dist/crdt/placement/model.js +413 -414
- package/dist/crdt/placement/rank.d.ts +1 -5
- package/dist/crdt/placement/rank.js +28 -38
- package/dist/crdt/protocol.d.ts +4 -5
- package/dist/crdt/protocol.js +3 -4
- package/dist/crdt/protocols/awareness.d.ts +3 -7
- package/dist/crdt/protocols/awareness.js +17 -33
- package/dist/crdt/protocols/envelope.d.ts +9 -29
- package/dist/crdt/protocols/envelope.js +8 -25
- package/dist/crdt/protocols/sync.d.ts +15 -30
- package/dist/crdt/protocols/sync.js +27 -89
- package/dist/crdt/providers/bound.d.ts +3 -1
- package/dist/crdt/providers/bound.js +3 -1
- package/dist/crdt/providers/container.d.ts +11 -17
- package/dist/crdt/providers/container.js +39 -27
- package/dist/crdt/providers/index.d.ts +34 -6
- package/dist/crdt/providers/index.js +106 -111
- package/dist/crdt/providers/indexeddb.d.ts +2 -12
- package/dist/crdt/providers/indexeddb.js +29 -90
- package/dist/crdt/providers/room.d.ts +58 -2
- package/dist/crdt/providers/room.js +38 -21
- package/dist/crdt/providers/websocket.d.ts +1 -1
- package/dist/crdt/providers/websocket.js +3 -4
- package/dist/crdt/purge.d.ts +2 -2
- package/dist/crdt/purge.js +69 -6
- package/dist/crdt/rangeDelete.d.ts +4 -42
- package/dist/crdt/rangeDelete.js +7 -6
- package/dist/crdt/restore.d.ts +21 -1
- package/dist/crdt/restore.js +54 -59
- package/dist/crdt/schema.d.ts +2 -2
- package/dist/crdt/schema.js +4 -5
- package/dist/crdt/semantics.d.ts +10 -15
- package/dist/crdt/semantics.js +22 -21
- package/dist/crdt/storage.d.ts +7 -13
- package/dist/crdt/storage.js +10 -24
- package/dist/crdt/structs.d.ts +42 -47
- package/dist/crdt/structs.js +76 -67
- package/dist/crdt/tables.d.ts +9 -0
- package/dist/crdt/tables.js +20 -0
- package/dist/crdt/text/delete-index.d.ts +0 -13
- package/dist/crdt/text/delete-index.js +7 -14
- package/dist/crdt/text/deletes.d.ts +9 -22
- package/dist/crdt/text/deletes.js +11 -74
- package/dist/crdt/text/index/cache.js +3 -3
- package/dist/crdt/text/index/fold.d.ts +1 -2
- package/dist/crdt/text/index/fold.js +15 -10
- package/dist/crdt/text/index/layout.d.ts +0 -10
- package/dist/crdt/text/index/layout.js +6 -20
- package/dist/crdt/text/index/records.js +2 -1
- package/dist/crdt/text/index/report.js +5 -6
- package/dist/crdt/text/index/shared.d.ts +11 -4
- package/dist/crdt/text/index/shared.js +8 -7
- package/dist/crdt/text/index/state.d.ts +3 -33
- package/dist/crdt/text/index/state.js +2 -4
- package/dist/crdt/text/model.d.ts +82 -2
- package/dist/crdt/text/model.js +344 -354
- package/dist/crdt/text/rows.d.ts +0 -2
- package/dist/crdt/text/rows.js +0 -11
- package/dist/crdt/text/runs.d.ts +6 -3
- package/dist/crdt/text/runs.js +132 -137
- package/dist/crdt/text/streams.d.ts +1 -1
- package/dist/crdt/text/streams.js +1 -1
- package/dist/crdt/vendor/yjs/API-NOTES.md +25 -8
- package/dist/crdt/vendor/yjs/UPSTREAM.md +288 -8
- package/dist/crdt/vendor/yjs/dts/global.d.ts +5 -26
- package/dist/crdt/vendor/yjs/dts/index.d.ts +10 -15
- package/dist/crdt/vendor/yjs/dts/structs/AbstractStruct.d.ts +2 -2
- package/dist/crdt/vendor/yjs/dts/structs/Item.d.ts +14 -219
- package/dist/crdt/vendor/yjs/dts/structs/Skip.d.ts +2 -2
- package/dist/crdt/vendor/yjs/dts/utils/BlockSet.d.ts +2 -2
- package/dist/crdt/vendor/yjs/dts/utils/Doc.d.ts +12 -123
- package/dist/crdt/vendor/yjs/dts/utils/ID.d.ts +1 -1
- package/dist/crdt/vendor/yjs/dts/utils/RangeCursor.d.ts +37 -58
- package/dist/crdt/vendor/yjs/dts/utils/Transaction.d.ts +3 -78
- package/dist/crdt/vendor/yjs/dts/utils/UpdateDecoder.d.ts +2 -81
- package/dist/crdt/vendor/yjs/dts/utils/UpdateEncoder.d.ts +2 -74
- package/dist/crdt/vendor/yjs/dts/utils/encoding-helpers.d.ts +4 -4
- package/dist/crdt/vendor/yjs/dts/utils/encoding.d.ts +6 -18
- package/dist/crdt/vendor/yjs/dts/utils/ids.d.ts +12 -237
- package/dist/crdt/vendor/yjs/dts/utils/positions.d.ts +5 -0
- package/dist/crdt/vendor/yjs/dts/utils/redo.d.ts +3 -0
- package/dist/crdt/vendor/yjs/dts/utils/transaction-helpers.d.ts +1 -3
- package/dist/crdt/vendor/yjs/dts/utils/updates.d.ts +6 -23
- package/dist/crdt/vendor/yjs/dts/ynode.d.ts +73 -498
- package/dist/crdt/vendor/yjs/global.d.ts +5 -26
- package/dist/crdt/vendor/yjs/src/index.js +11 -25
- package/dist/crdt/vendor/yjs/src/structs/AbstractStruct.js +1 -1
- package/dist/crdt/vendor/yjs/src/structs/GC.js +1 -1
- package/dist/crdt/vendor/yjs/src/structs/Item.js +10 -372
- package/dist/crdt/vendor/yjs/src/structs/Skip.js +1 -1
- package/dist/crdt/vendor/yjs/src/utils/BlockSet.js +2 -2
- package/dist/crdt/vendor/yjs/src/utils/Doc.js +14 -170
- package/dist/crdt/vendor/yjs/src/utils/ID.js +1 -1
- package/dist/crdt/vendor/yjs/src/utils/RangeCursor.js +61 -128
- package/dist/crdt/vendor/yjs/src/utils/StructStore.js +0 -22
- package/dist/crdt/vendor/yjs/src/utils/Transaction.js +17 -282
- package/dist/crdt/vendor/yjs/src/utils/UpdateDecoder.js +3 -130
- package/dist/crdt/vendor/yjs/src/utils/UpdateEncoder.js +2 -132
- package/dist/crdt/vendor/yjs/src/utils/encoding-helpers.js +4 -4
- package/dist/crdt/vendor/yjs/src/utils/encoding.js +49 -146
- package/dist/crdt/vendor/yjs/src/utils/ids.js +23 -900
- package/dist/crdt/vendor/yjs/src/utils/positions.js +115 -0
- package/dist/crdt/vendor/yjs/src/utils/redo.js +143 -0
- package/dist/crdt/vendor/yjs/src/utils/transaction-helpers.js +10 -127
- package/dist/crdt/vendor/yjs/src/utils/updates.js +7 -50
- package/dist/crdt/vendor/yjs/src/ynode.js +261 -2226
- package/dist/{plugins/blockHandles → dnd}/autoScroll.d.ts +2 -1
- package/dist/{plugins/blockHandles → dnd}/autoScroll.js +3 -3
- package/dist/dnd/pragmatic.d.ts +4 -22
- package/dist/dnd/pragmatic.js +7 -26
- package/dist/dnd/track.d.ts +14 -0
- package/dist/dnd/track.js +55 -0
- package/dist/dnd/vendor/pragmatic/UPSTREAM.md +103 -0
- package/dist/dnd/vendor/pragmatic/bind-event-listener/LICENSE +21 -0
- package/dist/dnd/vendor/pragmatic/bind-event-listener/bind-all.js +46 -0
- package/dist/dnd/vendor/pragmatic/bind-event-listener/bind.js +7 -0
- package/dist/dnd/vendor/pragmatic/bind-event-listener/index.js +2 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/LICENSE.md +11 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/adapter/element-adapter-native-data-key.js +6 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/adapter/element-adapter.d.ts +57 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/adapter/element-adapter.js +306 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/element/adapter.d.ts +8 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/element/adapter.js +10 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/element/set-custom-native-drag-preview.d.ts +4 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/element/set-custom-native-drag-preview.js +6 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/types.d.ts +1 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/honey-pot-fix/get-element-from-point-without-honey-pot.js +12 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/honey-pot-fix/honey-pot-data-attribute.js +3 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/honey-pot-fix/is-honey-pot-element.js +4 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/honey-pot-fix/make-honey-pot-fix.js +333 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/internal-types.d.ts +350 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/ledger/dispatch-consumer-event.js +128 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/ledger/lifecycle-manager.js +340 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/ledger/usage-ledger.js +32 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/make-adapter/make-adapter.js +59 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/make-adapter/make-drop-target.js +288 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/make-adapter/make-monitor.js +85 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/public-utils/combine.js +6 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/public-utils/element/custom-native-drag-preview/set-custom-native-drag-preview.d.ts +36 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/public-utils/element/custom-native-drag-preview/set-custom-native-drag-preview.js +153 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/public-utils/element/custom-native-drag-preview/types.d.ts +16 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/public-utils/once.js +13 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/add-attribute.js +7 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/android.js +10 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/changing-window/count-events-for-safari.js +104 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/changing-window/is-from-another-window.js +16 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/changing-window/is-leaving-window-in-safari.js +12 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/changing-window/is-leaving-window.js +55 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/detect-broken-drag.js +48 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/get-input.js +14 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/is-firefox.js +13 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/is-safari.js +19 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/max-z-index.js +3 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/media-types/text-media-type.js +6 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/media-types/url-media-type.js +6 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/popover-reset-styles.js +40 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/supports-popover.js +16 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/LICENSE.md +11 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/entry-point/element.d.ts +4 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/entry-point/element.js +8 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/internal-types.d.ts +50 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/over-element/data-attributes.js +9 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/over-element/get-scroll-by.js +117 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/over-element/make-api.js +90 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/over-element/try-scroll.js +183 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/axis.js +22 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/can-scroll-on-edge.js +17 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/configuration.js +49 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/edges.js +9 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/engagement-history.js +43 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/get-over-element-hitbox.js +50 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/get-percentage-in-range.js +19 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/get-scroll-change.js +106 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/is-axis-allowed.js +3 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/is-within.js +11 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/scheduler.js +104 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/side.js +6 -0
- package/dist/dnd/vendor/pragmatic/raf-schd/LICENSE +21 -0
- package/dist/dnd/vendor/pragmatic/raf-schd/raf-schd.esm.js +34 -0
- package/dist/edytor.svelte.d.ts +34 -64
- package/dist/edytor.svelte.js +118 -180
- package/dist/events/beforeInputCommands.d.ts +6 -11
- package/dist/events/beforeInputCommands.js +189 -184
- package/dist/events/beforeInputDeleteCommands.d.ts +20 -1
- package/dist/events/beforeInputDeleteCommands.js +153 -204
- package/dist/events/domTextOffset.d.ts +9 -9
- package/dist/events/domTextOffset.js +20 -48
- package/dist/events/events.utils.d.ts +0 -2
- package/dist/events/events.utils.js +0 -4
- package/dist/events/nativeInteractiveControl.d.ts +13 -13
- package/dist/events/nativeInteractiveControl.js +28 -56
- package/dist/events/onBeforeInput.d.ts +6 -1
- package/dist/events/onBeforeInput.js +207 -331
- package/dist/events/onCopy.js +1 -5
- package/dist/events/onDrop.d.ts +7 -1
- package/dist/events/onDrop.js +33 -72
- package/dist/events/onFocus.d.ts +9 -4
- package/dist/events/onFocus.js +92 -72
- package/dist/events/onInput.d.ts +8 -4
- package/dist/events/onInput.js +34 -147
- package/dist/events/onKeyDown.js +55 -122
- package/dist/events/onPaste.d.ts +13 -1
- package/dist/events/onPaste.js +46 -76
- package/dist/index.d.ts +10 -13
- package/dist/index.js +3 -3
- package/dist/kinds.d.ts +4 -6
- package/dist/kinds.js +28 -27
- package/dist/labels.d.ts +91 -314
- package/dist/labels.js +180 -396
- package/dist/plugins/Chrome.svelte +29 -0
- package/dist/plugins/Chrome.svelte.d.ts +32 -0
- package/dist/plugins/Control.svelte +23 -0
- package/dist/plugins/Control.svelte.d.ts +30 -0
- package/dist/plugins/anchored.svelte.d.ts +47 -0
- package/dist/plugins/anchored.svelte.js +73 -0
- package/dist/plugins/arrowMove/arrowMove.d.ts +2 -1
- package/dist/plugins/arrowMove/arrowMove.js +9 -5
- package/dist/plugins/bands.svelte.d.ts +57 -0
- package/dist/plugins/bands.svelte.js +95 -0
- package/dist/plugins/blockHandles/BlockHandle.svelte +14 -151
- package/dist/plugins/blockHandles/BlockHandle.svelte.d.ts +2 -2
- package/dist/plugins/blockHandles/BlockHandleController.svelte.d.ts +63 -97
- package/dist/plugins/blockHandles/BlockHandleController.svelte.js +247 -268
- package/dist/plugins/blockHandles/BlockHandles.svelte +46 -29
- package/dist/plugins/blockHandles/BlockHandles.svelte.d.ts +2 -2
- package/dist/plugins/blockHandles/blockHandlesPlugin.d.ts +29 -23
- package/dist/plugins/blockHandles/blockHandlesPlugin.js +130 -162
- package/dist/plugins/blockHandles/dragPreview.d.ts +8 -6
- package/dist/plugins/blockHandles/dragPreview.js +20 -17
- package/dist/plugins/blockHandles/dropIndicator.js +52 -60
- package/dist/plugins/blockHandles/geometry.d.ts +46 -1
- package/dist/plugins/blockHandles/geometry.js +51 -4
- package/dist/plugins/blockMenu/BlockMenuController.svelte.d.ts +59 -28
- package/dist/plugins/blockMenu/BlockMenuController.svelte.js +180 -105
- package/dist/plugins/blockMenu/blockMenuPlugin.d.ts +1 -3
- package/dist/plugins/blockMenu/blockMenuPlugin.js +12 -29
- package/dist/plugins/brand.d.ts +8 -0
- package/dist/plugins/brand.js +8 -0
- package/dist/plugins/chrome.d.ts +79 -0
- package/dist/plugins/chrome.js +87 -0
- package/dist/plugins/code/CodeHeader.svelte +12 -58
- package/dist/plugins/code/CodeHeader.svelte.d.ts +1 -0
- package/dist/plugins/code/CodePlugin.svelte +75 -56
- package/dist/plugins/code/CodePlugin.svelte.d.ts +0 -2
- package/dist/plugins/code/LanguageMenu.svelte +25 -0
- package/dist/plugins/code/LanguageMenu.svelte.d.ts +9 -0
- package/dist/plugins/code/code.css +5 -100
- package/dist/plugins/code/header.svelte.d.ts +47 -0
- package/dist/plugins/code/header.svelte.js +141 -0
- package/dist/plugins/code/languageMenu.svelte.d.ts +84 -0
- package/dist/plugins/code/languageMenu.svelte.js +199 -0
- package/dist/plugins/code/languages.d.ts +21 -10
- package/dist/plugins/code/languages.js +39 -126
- package/dist/plugins/columns/ColumnResize.svelte +13 -25
- package/dist/plugins/columns/ColumnResize.svelte.d.ts +1 -1
- package/dist/plugins/columns/ColumnsPlugin.svelte +46 -78
- package/dist/plugins/columns/ColumnsPlugin.svelte.d.ts +0 -12
- package/dist/plugins/columns/columns.css +7 -26
- package/dist/plugins/columns/resize.svelte.d.ts +14 -51
- package/dist/plugins/columns/resize.svelte.js +70 -164
- package/dist/plugins/comments/CommentsController.svelte.d.ts +1 -4
- package/dist/plugins/comments/CommentsController.svelte.js +14 -25
- package/dist/plugins/comments/CommentsSidebar.svelte +82 -430
- package/dist/plugins/comments/CommentsSidebar.svelte.d.ts +6 -7
- package/dist/plugins/comments/commentsPlugin.d.ts +31 -10
- package/dist/plugins/comments/commentsPlugin.js +12 -10
- package/dist/plugins/equation/EquationEditor.svelte +18 -129
- package/dist/plugins/equation/EquationEditor.svelte.d.ts +2 -1
- package/dist/plugins/equation/EquationPlugin.svelte +123 -168
- package/dist/plugins/equation/EquationPlugin.svelte.d.ts +5 -3
- package/dist/plugins/equation/EquationView.svelte +20 -11
- package/dist/plugins/equation/equation.svelte.d.ts +74 -36
- package/dist/plugins/equation/equation.svelte.js +74 -66
- package/dist/plugins/equation/importUrl.d.ts +6 -0
- package/dist/plugins/equation/importUrl.js +6 -0
- package/dist/plugins/equation/katex.d.ts +8 -0
- package/dist/plugins/equation/katex.js +77 -0
- package/dist/plugins/find/FindController.svelte.d.ts +8 -13
- package/dist/plugins/find/FindController.svelte.js +34 -55
- package/dist/plugins/find/findPlugin.d.ts +4 -8
- package/dist/plugins/find/findPlugin.js +29 -9
- package/dist/plugins/image/ImageChrome.svelte +5 -151
- package/dist/plugins/image/ImagePlugin.svelte +49 -117
- package/dist/plugins/image/ImagePlugin.svelte.d.ts +1 -24
- package/dist/plugins/image/ImageToolbarHost.svelte +37 -0
- package/dist/plugins/image/ImageToolbarHost.svelte.d.ts +9 -0
- package/dist/plugins/image/controls.svelte.d.ts +6 -57
- package/dist/plugins/image/controls.svelte.js +51 -174
- package/dist/plugins/image/image.d.ts +0 -5
- package/dist/plugins/image/image.js +0 -3
- package/dist/plugins/image/toolbar.svelte.d.ts +69 -0
- package/dist/plugins/image/toolbar.svelte.js +145 -0
- package/dist/plugins/index.d.ts +39 -24
- package/dist/plugins/index.js +30 -22
- package/dist/plugins/list.svelte.d.ts +128 -0
- package/dist/plugins/list.svelte.js +217 -0
- package/dist/plugins/markdownShortcuts.d.ts +1 -1
- package/dist/plugins/markdownShortcuts.js +6 -5
- package/dist/plugins/marquee/MarqueeBox.svelte +15 -0
- package/dist/plugins/marquee/MarqueeBox.svelte.d.ts +9 -0
- package/dist/plugins/marquee/MarqueeController.svelte.d.ts +46 -0
- package/dist/plugins/marquee/MarqueeController.svelte.js +243 -0
- package/dist/plugins/marquee/marquee.d.ts +33 -0
- package/dist/plugins/marquee/marquee.js +89 -0
- package/dist/plugins/marquee/marqueePlugin.d.ts +32 -0
- package/dist/plugins/marquee/marqueePlugin.js +68 -0
- package/dist/plugins/media/AudioPlugin.svelte +3 -88
- package/dist/plugins/media/AudioPlugin.svelte.d.ts +1 -4
- package/dist/plugins/media/BookmarkPlugin.svelte +124 -112
- package/dist/plugins/media/BookmarkPlugin.svelte.d.ts +20 -7
- package/dist/plugins/media/EmbedPlugin.svelte +93 -77
- package/dist/plugins/media/EmbedPlugin.svelte.d.ts +21 -9
- package/dist/plugins/media/EmptySlot.svelte +44 -0
- package/dist/plugins/media/EmptySlot.svelte.d.ts +25 -0
- package/dist/plugins/media/FilePlugin.svelte +35 -111
- package/dist/plugins/media/FilePlugin.svelte.d.ts +12 -4
- package/dist/plugins/media/MediaEmpty.svelte +55 -112
- package/dist/plugins/media/MediaEmpty.svelte.d.ts +26 -10
- package/dist/plugins/media/SourceBlock.svelte +164 -0
- package/dist/plugins/media/SourceBlock.svelte.d.ts +33 -0
- package/dist/plugins/media/VideoPlugin.svelte +4 -97
- package/dist/plugins/media/VideoPlugin.svelte.d.ts +2 -5
- package/dist/plugins/media/empty.svelte.d.ts +69 -0
- package/dist/plugins/media/empty.svelte.js +111 -0
- package/dist/plugins/media/media.d.ts +93 -30
- package/dist/plugins/media/media.js +79 -86
- package/dist/plugins/media/urlPaste.svelte.d.ts +9 -32
- package/dist/plugins/media/urlPaste.svelte.js +46 -75
- package/dist/plugins/mention/MentionPlugin.svelte +47 -124
- package/dist/plugins/mention/MentionPlugin.svelte.d.ts +11 -23
- package/dist/plugins/page/PageLink.svelte +54 -38
- package/dist/plugins/page/PagePlugin.svelte +20 -18
- package/dist/plugins/page/PagePlugin.svelte.d.ts +2 -4
- package/dist/plugins/page/page.d.ts +35 -9
- package/dist/plugins/page/page.js +3 -4
- package/dist/plugins/pageLink/PageLinkPlugin.svelte +52 -108
- package/dist/plugins/pageLink/PageLinkPlugin.svelte.d.ts +11 -23
- package/dist/plugins/planned.d.ts +10 -0
- package/dist/plugins/planned.js +12 -0
- package/dist/plugins/richtext/CalloutIcon.svelte +25 -0
- package/dist/plugins/richtext/CalloutIcon.svelte.d.ts +9 -0
- package/dist/plugins/richtext/CalloutIconPicker.svelte +26 -0
- package/dist/plugins/richtext/CalloutIconPicker.svelte.d.ts +9 -0
- package/dist/plugins/richtext/EmptyBody.svelte +25 -0
- package/dist/plugins/richtext/EmptyBody.svelte.d.ts +8 -0
- package/dist/plugins/richtext/RichTextControl.svelte +39 -0
- package/dist/plugins/richtext/RichTextControl.svelte.d.ts +8 -0
- package/dist/plugins/richtext/RichTextPlugin.svelte +272 -148
- package/dist/plugins/richtext/RichTextPlugin.svelte.d.ts +37 -18
- package/dist/plugins/richtext/TodoCheckbox.svelte +10 -21
- package/dist/plugins/richtext/TodoCheckbox.svelte.d.ts +0 -2
- package/dist/plugins/richtext/body.d.ts +9 -0
- package/dist/plugins/richtext/body.js +16 -0
- package/dist/plugins/richtext/calloutIcons.svelte.d.ts +97 -0
- package/dist/plugins/richtext/calloutIcons.svelte.js +214 -0
- package/dist/plugins/richtext/callouts.d.ts +15 -0
- package/dist/plugins/richtext/callouts.js +23 -0
- package/dist/plugins/richtext/controls.svelte.d.ts +110 -0
- package/dist/plugins/richtext/controls.svelte.js +126 -0
- package/dist/plugins/richtext/richTextOperations.js +37 -28
- package/dist/plugins/slashMenu/SlashMenuController.svelte.d.ts +18 -11
- package/dist/plugins/slashMenu/SlashMenuController.svelte.js +93 -35
- package/dist/plugins/slashMenu/slashMenuPlugin.d.ts +11 -24
- package/dist/plugins/slashMenu/slashMenuPlugin.js +27 -68
- package/dist/plugins/suggestions/SuggestionBars.svelte +32 -84
- package/dist/plugins/suggestions/SuggestionBars.svelte.d.ts +9 -3
- package/dist/plugins/suggestions/suggestionsPlugin.d.ts +10 -16
- package/dist/plugins/suggestions/suggestionsPlugin.js +9 -24
- package/dist/plugins/table/TableChrome.svelte +96 -127
- package/dist/plugins/table/TableChrome.svelte.d.ts +5 -1
- package/dist/plugins/table/TablePlugin.svelte +116 -171
- package/dist/plugins/table/TablePlugin.svelte.d.ts +0 -4
- package/dist/plugins/table/chrome.svelte.d.ts +110 -117
- package/dist/plugins/table/chrome.svelte.js +643 -289
- package/dist/plugins/table/ops.d.ts +47 -0
- package/dist/plugins/table/ops.js +233 -0
- package/dist/plugins/table/table.css +55 -134
- package/dist/plugins/table/table.d.ts +26 -7
- package/dist/plugins/table/table.js +23 -49
- package/dist/plugins/toc/TableOfContents.svelte +32 -38
- package/dist/plugins/toc/TableOfContents.svelte.d.ts +1 -5
- package/dist/plugins/toc/TocPlugin.svelte +22 -22
- package/dist/plugins/toc/TocPlugin.svelte.d.ts +4 -6
- package/dist/plugins/toc/toc.d.ts +41 -10
- package/dist/plugins/toc/toc.js +2 -3
- package/dist/plugins/toolbar/ToolbarController.svelte.d.ts +29 -66
- package/dist/plugins/toolbar/ToolbarController.svelte.js +151 -76
- package/dist/plugins/toolbar/toolbarPlugin.d.ts +14 -13
- package/dist/plugins/toolbar/toolbarPlugin.js +28 -43
- package/dist/plugins/triggers/TriggerController.svelte.d.ts +6 -45
- package/dist/plugins/triggers/TriggerController.svelte.js +51 -96
- package/dist/plugins/triggers/place.d.ts +0 -9
- package/dist/plugins/triggers/place.js +1 -17
- package/dist/plugins/triggers/triggers.d.ts +31 -9
- package/dist/plugins/triggers/triggers.js +82 -62
- package/dist/plugins/uploads.svelte.d.ts +38 -20
- package/dist/plugins/uploads.svelte.js +39 -32
- package/dist/plugins.d.ts +167 -60
- package/dist/selection/domSelection.d.ts +13 -4
- package/dist/selection/domSelection.js +110 -183
- package/dist/selection/pointer.svelte.d.ts +12 -10
- package/dist/selection/pointer.svelte.js +154 -71
- package/dist/selection/replaceSelection.d.ts +21 -22
- package/dist/selection/replaceSelection.js +60 -69
- package/dist/selection/selection.svelte.d.ts +5 -73
- package/dist/selection/selection.svelte.js +263 -542
- package/dist/selection/selection.utils.d.ts +34 -11
- package/dist/selection/selection.utils.js +128 -247
- package/dist/selection/visibility.d.ts +11 -8
- package/dist/selection/visibility.js +23 -8
- package/dist/session/announcer.svelte.d.ts +2 -1
- package/dist/session/announcer.svelte.js +7 -3
- package/dist/session/attempt.d.ts +33 -39
- package/dist/session/attempt.js +61 -53
- package/dist/session/bindings.js +108 -139
- package/dist/session/commands.d.ts +47 -22
- package/dist/session/commands.js +206 -208
- package/dist/session/composition.svelte.d.ts +2 -4
- package/dist/session/composition.svelte.js +55 -65
- package/dist/session/editing/text.d.ts +6 -0
- package/dist/session/editing/text.js +17 -3
- package/dist/session/handles.d.ts +10 -1
- package/dist/session/handles.js +28 -0
- package/dist/session/history.d.ts +0 -4
- package/dist/session/history.js +15 -21
- package/dist/session/inputRules.js +75 -84
- package/dist/session/keymap.d.ts +1 -6
- package/dist/session/keymap.js +17 -20
- package/dist/session/moves.d.ts +10 -10
- package/dist/session/moves.js +31 -59
- package/dist/session/navigation.d.ts +18 -3
- package/dist/session/navigation.js +194 -153
- package/dist/session/ports.d.ts +7 -0
- package/dist/session/selection.d.ts +4 -3
- package/dist/session/selection.js +8 -0
- package/dist/session/suggestions.svelte.d.ts +1 -1
- package/dist/session/suggestions.svelte.js +64 -47
- package/dist/session/virtual.d.ts +3 -3
- package/dist/session/virtual.js +18 -40
- package/dist/surface/attributes.d.ts +1 -0
- package/dist/surface/attributes.js +3 -26
- package/dist/surface/cells.d.ts +5 -0
- package/dist/surface/cells.js +5 -0
- package/dist/surface/lines.d.ts +32 -0
- package/dist/surface/lines.js +43 -0
- package/dist/surface/observer.svelte.d.ts +3 -20
- package/dist/surface/observer.svelte.js +73 -77
- package/dist/surface/overlay.d.ts +48 -6
- package/dist/surface/overlay.js +133 -23
- package/dist/surface/pin.svelte.d.ts +5 -0
- package/dist/surface/pin.svelte.js +5 -0
- package/dist/surface/projector.svelte.d.ts +4 -6
- package/dist/surface/projector.svelte.js +42 -69
- package/dist/text/text.svelte.d.ts +14 -40
- package/dist/text/text.svelte.js +35 -51
- package/dist/text/wordBoundary.d.ts +19 -0
- package/dist/text/wordBoundary.js +29 -44
- package/dist/themes/notion.css +315 -126
- package/dist/utils/json.d.ts +3 -1
- package/dist/utils/json.js +52 -51
- package/dist/utils/listen.d.ts +8 -0
- package/dist/utils/listen.js +19 -0
- package/package.json +4 -5
- package/dist/block/block.utils.d.ts +0 -340
- package/dist/block/block.utils.js +0 -356
- package/dist/collaboration/history/HistoryPanel.svelte +0 -525
- package/dist/collaboration/history/HistoryPanel.svelte.d.ts +0 -7
- package/dist/collaboration/history/panel.d.ts +0 -43
- package/dist/collaboration/history/panel.js +0 -3
- package/dist/components/SuggestionRanges.svelte +0 -58
- package/dist/components/SuggestionRanges.svelte.d.ts +0 -7
- package/dist/crdt/doc/table.d.ts +0 -21
- package/dist/crdt/doc/table.js +0 -288
- package/dist/crdt/migration/generation.d.ts +0 -58
- package/dist/crdt/migration/generation.js +0 -70
- package/dist/crdt/migration/legacy-schema.d.ts +0 -61
- package/dist/crdt/migration/legacy-schema.js +0 -151
- package/dist/crdt/migration/migrate.d.ts +0 -56
- package/dist/crdt/migration/migrate.js +0 -227
- package/dist/crdt/nodes.d.ts +0 -121
- package/dist/crdt/nodes.js +0 -56
- package/dist/crdt/text/index/checks.d.ts +0 -15
- package/dist/crdt/text/index/checks.js +0 -156
- package/dist/crdt/vendor/yjs/dts/utils/EventHandler.d.ts +0 -17
- package/dist/crdt/vendor/yjs/dts/utils/RelativePosition.d.ts +0 -80
- package/dist/crdt/vendor/yjs/dts/utils/UndoManager.d.ts +0 -205
- package/dist/crdt/vendor/yjs/dts/utils/YEvent.d.ts +0 -93
- package/dist/crdt/vendor/yjs/dts/utils/meta.d.ts +0 -25
- package/dist/crdt/vendor/yjs/dts/utils/renderer-helpers.d.ts +0 -98
- package/dist/crdt/vendor/yjs/dts/utils/schemas.d.ts +0 -2
- package/dist/crdt/vendor/yjs/src/utils/EventHandler.js +0 -75
- package/dist/crdt/vendor/yjs/src/utils/RelativePosition.js +0 -301
- package/dist/crdt/vendor/yjs/src/utils/UndoManager.js +0 -554
- package/dist/crdt/vendor/yjs/src/utils/YEvent.js +0 -158
- package/dist/crdt/vendor/yjs/src/utils/meta.js +0 -74
- package/dist/crdt/vendor/yjs/src/utils/renderer-helpers.js +0 -186
- package/dist/crdt/vendor/yjs/src/utils/schemas.js +0 -3
- package/dist/edytor.utils.d.ts +0 -50
- package/dist/edytor.utils.js +0 -67
- package/dist/plugins/blockMenu/BlockMenu.svelte +0 -447
- package/dist/plugins/blockMenu/BlockMenu.svelte.d.ts +0 -9
- package/dist/plugins/find/FindBar.svelte +0 -170
- package/dist/plugins/find/FindBar.svelte.d.ts +0 -9
- package/dist/plugins/find/FindHighlights.svelte +0 -75
- package/dist/plugins/find/FindHighlights.svelte.d.ts +0 -9
- package/dist/plugins/icons.d.ts +0 -2
- package/dist/plugins/icons.js +0 -63
- package/dist/plugins/image/ImageEmpty.svelte +0 -116
- package/dist/plugins/image/ImageEmpty.svelte.d.ts +0 -12
- package/dist/plugins/keepInView.d.ts +0 -4
- package/dist/plugins/keepInView.js +0 -6
- package/dist/plugins/media/UrlPasteMenu.svelte +0 -83
- package/dist/plugins/media/UrlPasteMenu.svelte.d.ts +0 -7
- package/dist/plugins/richtext/labels.d.ts +0 -5
- package/dist/plugins/richtext/labels.js +0 -3
- package/dist/plugins/slashMenu/SlashMenu.svelte +0 -360
- package/dist/plugins/slashMenu/SlashMenu.svelte.d.ts +0 -11
- package/dist/plugins/toolbar/LinkCard.svelte +0 -118
- package/dist/plugins/toolbar/LinkCard.svelte.d.ts +0 -7
- package/dist/plugins/toolbar/Toolbar.svelte +0 -400
- package/dist/plugins/toolbar/Toolbar.svelte.d.ts +0 -9
- package/dist/plugins/triggers/TriggerMenu.svelte +0 -144
- package/dist/plugins/triggers/TriggerMenu.svelte.d.ts +0 -7
- package/dist/session/props.d.ts +0 -28
- package/dist/session/props.js +0 -162
- package/dist/text/deltas.d.ts +0 -22
- package/dist/text/deltas.js +0 -46
- package/dist/text/text.utils.d.ts +0 -45
- package/dist/text/text.utils.js +0 -199
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import
|
|
2
|
-
import {
|
|
1
|
+
import * as ops from './ops.js';
|
|
2
|
+
import { caretBox, sameLine } from '../../surface/lines.js';
|
|
3
3
|
/** The table `block` is, or whose row or cell it is. */
|
|
4
4
|
export const tableOf = (block) => {
|
|
5
5
|
if (!block?.id)
|
|
@@ -31,28 +31,31 @@ export const cellAt = (table, grid, row, column) => {
|
|
|
31
31
|
};
|
|
32
32
|
/** The cell holding the caret (or the selection's start), if it is a table's cell. */
|
|
33
33
|
export const caretCell = (edytor) => {
|
|
34
|
-
const block = edytor.selection.
|
|
34
|
+
const block = edytor.selection.textRange().startText?.parent;
|
|
35
35
|
return block?.id && edytor.facade.isTableCell(block.id) ? block : null;
|
|
36
36
|
};
|
|
37
|
-
/** `prepare` dispatched as `operation` on `table`: one plan, its own undo step; the plan or `null
|
|
38
|
-
const run = (table, operation, payload, prepare) =>
|
|
37
|
+
/** `prepare` dispatched as `operation` on `table`: one plan, its own undo step; the plan's ids, or `null` when refused. */
|
|
38
|
+
const run = (table, operation, payload, prepare) => {
|
|
39
|
+
const result = table.edytor.dispatcher.plan(operation, payload, prepare, table);
|
|
40
|
+
return result.status === 'refused' ? null : result;
|
|
41
|
+
};
|
|
39
42
|
/** Insert a row at `index` (`table.insert-row`); the caret goes to its first cell when `caret`. */
|
|
40
43
|
export const insertRow = (table, index, caret = false) => {
|
|
41
44
|
const { edytor } = table;
|
|
42
|
-
const plan = run(table, 'insertTableRow', { index }, (p) => edytor.facade
|
|
45
|
+
const plan = run(table, 'insertTableRow', { index }, (p) => ops.insertTableRow(edytor.facade, table.id, p.index));
|
|
43
46
|
const row = plan ? (edytor.idToBlock.get(plan.ids[0]) ?? null) : null;
|
|
44
47
|
if (row && caret)
|
|
45
48
|
edytor.dispatcher.caret(row.children[0]?.firstText, 0);
|
|
46
49
|
return row;
|
|
47
50
|
};
|
|
48
51
|
/** Delete `rows` with their cells (`table.delete-row`). */
|
|
49
|
-
export const deleteRows = (table, rows) => run(table, 'deleteTableRows', { rows: [...rows] }, (p) => table.edytor.facade
|
|
52
|
+
export const deleteRows = (table, rows) => run(table, 'deleteTableRows', { rows: [...rows] }, (p) => ops.deleteTableRows(table.edytor.facade, p.rows.map((row) => row.id))) !== null;
|
|
50
53
|
/**
|
|
51
54
|
* Insert a column at `index` (`table.insert-column`); with `caret` (a row's
|
|
52
55
|
* position), the caret goes to the new column's cell in that row.
|
|
53
56
|
*/
|
|
54
57
|
export const insertColumn = (table, index, width, caret) => {
|
|
55
|
-
const applied = run(table, 'insertTableColumn', { index, width }, (p) => table.edytor.facade
|
|
58
|
+
const applied = run(table, 'insertTableColumn', { index, width }, (p) => ops.insertTableColumn(table.edytor.facade, table.id, p.index, p.width)) !== null;
|
|
56
59
|
const grid = applied && caret !== undefined ? gridOf(table) : null;
|
|
57
60
|
if (grid) {
|
|
58
61
|
const at = Math.max(0, Math.min(Math.trunc(index) || 0, grid.columns.length - 1));
|
|
@@ -63,18 +66,18 @@ export const insertColumn = (table, index, width, caret) => {
|
|
|
63
66
|
return applied;
|
|
64
67
|
};
|
|
65
68
|
/** Delete a column, by id or position (`table.delete-column`). */
|
|
66
|
-
export const deleteColumn = (table, column) => run(table, 'deleteTableColumn', { column }, (p) => table.edytor.facade
|
|
69
|
+
export const deleteColumn = (table, column) => run(table, 'deleteTableColumn', { column }, (p) => ops.deleteTableColumn(table.edytor.facade, table.id, p.column)) !== null;
|
|
67
70
|
/** Move a column to position `to` (`table.move-column`). */
|
|
68
|
-
export const moveColumn = (table, column, to) => run(table, 'moveTableColumn', { column, to }, (p) => table.edytor.facade
|
|
71
|
+
export const moveColumn = (table, column, to) => run(table, 'moveTableColumn', { column, to }, (p) => ops.moveTableColumn(table.edytor.facade, table.id, p.column, p.to)) !== null;
|
|
69
72
|
/** Move rows to position `to` among their table's rows (`table.move-row`). */
|
|
70
|
-
export const moveRows = (table, rows, to) => run(table, 'moveTableRows', { rows: [...rows], to }, (p) => table.edytor.facade
|
|
73
|
+
export const moveRows = (table, rows, to) => run(table, 'moveTableRows', { rows: [...rows], to }, (p) => ops.moveTableRows(table.edytor.facade, p.rows.map((row) => row.id), p.to)) !== null;
|
|
71
74
|
/**
|
|
72
75
|
* Fill the padded cell of `row` in `column` (`table.pad`): the cell is
|
|
73
76
|
* created, the caret placed in it. Its block, or `null` when refused.
|
|
74
77
|
*/
|
|
75
78
|
export const fillCell = (table, row, column) => {
|
|
76
79
|
const { edytor } = table;
|
|
77
|
-
const plan = run(table, 'fillTableCell', { row, column }, (p) => edytor.facade
|
|
80
|
+
const plan = run(table, 'fillTableCell', { row, column }, (p) => ops.fillTableCell(edytor.facade, p.row, p.column));
|
|
78
81
|
const cell = plan ? (edytor.idToBlock.get(plan.ids[0]) ?? null) : null;
|
|
79
82
|
if (cell)
|
|
80
83
|
edytor.dispatcher.caret(cell.firstText, 0);
|
|
@@ -82,8 +85,10 @@ export const fillCell = (table, row, column) => {
|
|
|
82
85
|
};
|
|
83
86
|
/** Toggle `flag` (`headerRow` or `headerColumn`) of `table`'s data (`table.header`). */
|
|
84
87
|
export const toggleHeader = (table, flag) => {
|
|
85
|
-
table.
|
|
88
|
+
table.edytor.patchData(table.id, [{ path: [flag], value: table.data[flag] !== true }]);
|
|
86
89
|
};
|
|
90
|
+
/** A label key as a row id: `insertRowAbove` → `insert-row-above`. */
|
|
91
|
+
export const kebab = (key) => key.replace(/[A-Z]/g, (c) => `-${c.toLowerCase()}`);
|
|
87
92
|
/** A cell's width as set, else `fallback`: `data.columns[i].width`. */
|
|
88
93
|
export const widthOf = (column, fallback) => {
|
|
89
94
|
const width = column?.width;
|
|
@@ -107,7 +112,7 @@ export const tabFrom = (cell, step) => {
|
|
|
107
112
|
const next = cellAt(table, grid, Math.floor(i / width), i % width);
|
|
108
113
|
const text = next?.lastText;
|
|
109
114
|
if (text) {
|
|
110
|
-
edytor.selection.
|
|
115
|
+
edytor.selection.selectText(text, text.length);
|
|
111
116
|
return true;
|
|
112
117
|
}
|
|
113
118
|
}
|
|
@@ -115,38 +120,6 @@ export const tabFrom = (cell, step) => {
|
|
|
115
120
|
insertRow(table, grid.rows.length, true);
|
|
116
121
|
return true;
|
|
117
122
|
};
|
|
118
|
-
/**
|
|
119
|
-
* The box of the caret at `offset` in `text`, read from the character after
|
|
120
|
-
* it (`after`: its left edge) or the one before it (its right edge), the
|
|
121
|
-
* other one where there is none; `null` where nothing is laid out (no layout
|
|
122
|
-
* engine). An offset where a line wraps is on both lines: `after` reads it
|
|
123
|
-
* on the later one, `before` on the earlier one.
|
|
124
|
-
*/
|
|
125
|
-
const caretBox = (text, offset, after) => {
|
|
126
|
-
const element = text.node;
|
|
127
|
-
if (!element)
|
|
128
|
-
return null;
|
|
129
|
-
const range = element.ownerDocument.createRange();
|
|
130
|
-
const box = (from) => {
|
|
131
|
-
if (from < 0 || from >= text.stringContent.length)
|
|
132
|
-
return null;
|
|
133
|
-
const [startNode, start] = domPointOf(element, from);
|
|
134
|
-
const [endNode, end] = domPointOf(element, from + 1);
|
|
135
|
-
range.setStart(startNode, start);
|
|
136
|
-
range.setEnd(endNode, end);
|
|
137
|
-
// No layout engine (a server, jsdom) lays nothing out: no box.
|
|
138
|
-
const list = typeof range.getClientRects === 'function' ? range.getClientRects() : null;
|
|
139
|
-
return [...(list ?? [])].find((r) => r.width > 0 || r.height > 0) ?? null;
|
|
140
|
-
};
|
|
141
|
-
const next = box(offset);
|
|
142
|
-
const previous = box(offset - 1);
|
|
143
|
-
const edge = (r, right) => new DOMRect(right ? r.right : r.left, r.top, 0, r.height);
|
|
144
|
-
if (after)
|
|
145
|
-
return next ? edge(next, false) : previous && edge(previous, true);
|
|
146
|
-
return previous ? edge(previous, true) : next && edge(next, false);
|
|
147
|
-
};
|
|
148
|
-
/** `a` and `b` are on one line box: their vertical middles are within half a line of each other. */
|
|
149
|
-
const sameLine = (a, b) => Math.abs(a.top + a.height / 2 - (b.top + b.height / 2)) < Math.max(a.height, b.height) / 2;
|
|
150
123
|
/**
|
|
151
124
|
* ArrowUp (`step` -1) on a cell's first line, ArrowDown (`1`) on its last
|
|
152
125
|
* (`table.keys`): the caret goes to the nearest shown cell above (below) in
|
|
@@ -160,7 +133,8 @@ const sameLine = (a, b) => Math.abs(a.top + a.height / 2 - (b.top + b.height / 2
|
|
|
160
133
|
export const verticalFrom = (cell, step) => {
|
|
161
134
|
const at = positionOf(cell);
|
|
162
135
|
const { edytor } = cell;
|
|
163
|
-
const { startText, yStart
|
|
136
|
+
const { startText, yStart } = edytor.selection.textRange();
|
|
137
|
+
const { isCollapsed } = edytor.selection.projection;
|
|
164
138
|
if (!at || !isCollapsed || !startText)
|
|
165
139
|
return false;
|
|
166
140
|
if (step < 0 ? startText !== cell.firstText : startText !== cell.lastText)
|
|
@@ -180,7 +154,7 @@ export const verticalFrom = (cell, step) => {
|
|
|
180
154
|
const other = caretBox(startText, yStart, step > 0);
|
|
181
155
|
if (!other || !sameLine(other, edge))
|
|
182
156
|
return false;
|
|
183
|
-
edytor.selection.
|
|
157
|
+
edytor.selection.selectText(startText, landing(startText, -step, caret, column));
|
|
184
158
|
return true;
|
|
185
159
|
}
|
|
186
160
|
}
|
|
@@ -191,7 +165,7 @@ export const verticalFrom = (cell, step) => {
|
|
|
191
165
|
const text = step < 0 ? target?.lastText : target?.firstText;
|
|
192
166
|
if (!text)
|
|
193
167
|
continue;
|
|
194
|
-
edytor.selection.
|
|
168
|
+
edytor.selection.selectText(text, landing(text, step, caret, column));
|
|
195
169
|
return true;
|
|
196
170
|
}
|
|
197
171
|
return false;
|
|
@@ -3,17 +3,20 @@
|
|
|
3
3
|
import type { Edytor } from '../../edytor.svelte.js';
|
|
4
4
|
import { ownText } from '../../surface/attributes.js';
|
|
5
5
|
import { reveal } from '../../selection/replaceSelection.js';
|
|
6
|
-
import {
|
|
6
|
+
import { labelsOf, tocEnglish } from '../../labels.js';
|
|
7
|
+
import { attach, keepSelection } from '../chrome.js';
|
|
8
|
+
import { richTextHeadingLevel, tocViews, type TocEntryPayload } from './toc.js';
|
|
7
9
|
|
|
8
10
|
/**
|
|
9
11
|
* The document's headings, live, in reading order (Notion's table of
|
|
10
12
|
* contents): read from the view's cells, so an edit anywhere re-renders
|
|
11
13
|
* only the entries it changes. Each entry scrolls its heading into view,
|
|
12
|
-
* opening the closed toggles it sits in; the selection stays.
|
|
14
|
+
* opening the closed toggles it sits in; the selection stays. The app's
|
|
15
|
+
* `entry` and `empty` snippets draw them, else this markup.
|
|
13
16
|
*/
|
|
14
|
-
let { level }: { level: TocHeadingLevel } = $props();
|
|
15
17
|
const edytor = getContext<Edytor>('edytor');
|
|
16
|
-
const labels =
|
|
18
|
+
const labels = labelsOf(edytor, 'toc', tocEnglish);
|
|
19
|
+
const { headingLevel: level = richTextHeadingLevel, entry, empty } = tocViews.get(edytor) ?? {};
|
|
17
20
|
|
|
18
21
|
type Entry = { id: string; level: number; text: string };
|
|
19
22
|
const entries = $derived.by(() => {
|
|
@@ -40,44 +43,35 @@
|
|
|
40
43
|
reveal(block);
|
|
41
44
|
block.node.scrollIntoView?.({ behavior: 'smooth', block: 'start' });
|
|
42
45
|
};
|
|
46
|
+
|
|
47
|
+
const payloadOf = ({ id, level, text }: Entry): TocEntryPayload => ({
|
|
48
|
+
id,
|
|
49
|
+
level,
|
|
50
|
+
depth: level - top,
|
|
51
|
+
text,
|
|
52
|
+
label: text || labels.untitled,
|
|
53
|
+
go: () => go(id),
|
|
54
|
+
control: attach(
|
|
55
|
+
{ 'data-edytor-toc-entry': '' },
|
|
56
|
+
{ mousedown: keepSelection, click: () => go(id) }
|
|
57
|
+
)
|
|
58
|
+
});
|
|
43
59
|
</script>
|
|
44
60
|
|
|
45
61
|
{#if entries.length}
|
|
46
|
-
{#each entries as
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
62
|
+
{#each entries as found (found.id)}
|
|
63
|
+
{@const payload = payloadOf(found)}
|
|
64
|
+
{#if entry}{@render entry(payload)}{:else}<button
|
|
65
|
+
type="button"
|
|
66
|
+
data-edytor-toc-entry
|
|
67
|
+
data-level={payload.level}
|
|
68
|
+
data-untitled={payload.text ? undefined : 'true'}
|
|
69
|
+
style:--edytor-toc-depth={payload.depth}
|
|
70
|
+
{@attach payload.control}>{payload.label}</button
|
|
71
|
+
>{/if}
|
|
56
72
|
{/each}
|
|
73
|
+
{:else if empty}
|
|
74
|
+
{@render empty({ label: labels.empty })}
|
|
57
75
|
{:else}
|
|
58
76
|
<p data-edytor-toc-empty>{labels.empty}</p>
|
|
59
77
|
{/if}
|
|
60
|
-
|
|
61
|
-
<style>
|
|
62
|
-
/*
|
|
63
|
-
* The entries' structure, at zero specificity (`:where`): one line each,
|
|
64
|
-
* one nesting step in per level; a theme draws them (`themes/notion.css`).
|
|
65
|
-
*/
|
|
66
|
-
:global(:where([data-edytor-toc-entry])) {
|
|
67
|
-
display: block;
|
|
68
|
-
width: 100%;
|
|
69
|
-
margin: 0;
|
|
70
|
-
padding: 0;
|
|
71
|
-
padding-inline-start: calc(var(--edytor-toc-depth, 0) * var(--edytor-nest-indent, 24px));
|
|
72
|
-
border: 0;
|
|
73
|
-
background: none;
|
|
74
|
-
color: inherit;
|
|
75
|
-
font: inherit;
|
|
76
|
-
text-align: start;
|
|
77
|
-
cursor: pointer;
|
|
78
|
-
}
|
|
79
|
-
:global(:where([data-edytor-toc-empty])) {
|
|
80
|
-
margin: 0;
|
|
81
|
-
opacity: 0.6;
|
|
82
|
-
}
|
|
83
|
-
</style>
|
|
@@ -1,7 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
type $$ComponentProps = {
|
|
3
|
-
level: TocHeadingLevel;
|
|
4
|
-
};
|
|
5
|
-
declare const TableOfContents: import("svelte").Component<$$ComponentProps, {}, "">;
|
|
1
|
+
declare const TableOfContents: import("svelte").Component<Record<string, never>, {}, "">;
|
|
6
2
|
type TableOfContents = ReturnType<typeof TableOfContents>;
|
|
7
3
|
export default TableOfContents;
|
|
@@ -1,35 +1,38 @@
|
|
|
1
1
|
<script module lang="ts">
|
|
2
2
|
import type { Plugin, BlockSnippetPayload } from '../../plugins.js';
|
|
3
|
-
import type { Edytor } from '../../edytor.svelte.js';
|
|
4
3
|
import { tocKinds } from '../../crdt/semantics.js';
|
|
5
|
-
import { keywordsOf,
|
|
4
|
+
import { tocEnglish, keywordsOf, labelsOf } from '../../labels.js';
|
|
6
5
|
import TableOfContents from './TableOfContents.svelte';
|
|
7
6
|
import {
|
|
8
7
|
richTextHeadingLevel,
|
|
9
|
-
|
|
8
|
+
type TocEmptyPayload,
|
|
9
|
+
type TocEntryPayload,
|
|
10
10
|
type TocHeadingLevel,
|
|
11
|
-
type TocPluginOptions
|
|
11
|
+
type TocPluginOptions,
|
|
12
|
+
tocViews as views
|
|
12
13
|
} from './toc.js';
|
|
13
14
|
|
|
14
|
-
export type { TocHeadingLevel, TocPluginOptions };
|
|
15
|
-
|
|
16
|
-
const levelOf = new WeakMap<Edytor, TocHeadingLevel>();
|
|
15
|
+
export type { TocEmptyPayload, TocEntryPayload, TocHeadingLevel, TocPluginOptions };
|
|
17
16
|
|
|
18
17
|
/**
|
|
19
18
|
* Notion's table of contents: a `toc` block lists the document's
|
|
20
19
|
* headings, live, indented by level; a click scrolls to one (opening the
|
|
21
20
|
* closed toggles it sits in). Void: it holds no text, and its list is
|
|
22
21
|
* never stored, only drawn. Its preset in the slash menu turns an empty
|
|
23
|
-
* line into one, or inserts it after the line; its words are
|
|
24
|
-
* (English by default).
|
|
22
|
+
* line into one, or inserts it after the line; its words are the view's
|
|
23
|
+
* `toc` labels (English by default).
|
|
25
24
|
*/
|
|
26
25
|
export const createTocPlugin =
|
|
27
26
|
(options: TocPluginOptions = {}): Plugin =>
|
|
28
27
|
(edytor) => {
|
|
29
28
|
// First wins, as for the kind: a second listing never replaces it.
|
|
30
|
-
if (!
|
|
31
|
-
|
|
32
|
-
|
|
29
|
+
if (!views.has(edytor))
|
|
30
|
+
views.set(edytor, {
|
|
31
|
+
headingLevel: options.headingLevel ?? richTextHeadingLevel,
|
|
32
|
+
entry: options.entry,
|
|
33
|
+
empty: options.empty
|
|
34
|
+
});
|
|
35
|
+
const labels = labelsOf(edytor, 'toc', tocEnglish);
|
|
33
36
|
return {
|
|
34
37
|
blocks: {
|
|
35
38
|
toc: {
|
|
@@ -41,11 +44,12 @@
|
|
|
41
44
|
{
|
|
42
45
|
label: labels.toc,
|
|
43
46
|
icon: '☰',
|
|
44
|
-
keywords: keywordsOf(
|
|
45
|
-
'
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
47
|
+
keywords: keywordsOf(edytor, 'block.toc', [
|
|
48
|
+
'toc',
|
|
49
|
+
'outline',
|
|
50
|
+
'headings',
|
|
51
|
+
'contents'
|
|
52
|
+
]),
|
|
49
53
|
group: 'Advanced blocks'
|
|
50
54
|
}
|
|
51
55
|
],
|
|
@@ -58,14 +62,10 @@
|
|
|
58
62
|
}
|
|
59
63
|
};
|
|
60
64
|
};
|
|
61
|
-
|
|
62
|
-
/** The table of contents over the rich text headings. */
|
|
63
|
-
export const tocPlugin = createTocPlugin();
|
|
64
65
|
</script>
|
|
65
66
|
|
|
66
67
|
{#snippet toc({ block }: BlockSnippetPayload)}
|
|
67
|
-
{@const level = (block.handle && levelOf.get(block.handle.edytor)) || richTextHeadingLevel}
|
|
68
68
|
<div use:block.void data-edytor-toc>
|
|
69
|
-
<TableOfContents
|
|
69
|
+
<TableOfContents />
|
|
70
70
|
</div>
|
|
71
71
|
{/snippet}
|
|
@@ -1,17 +1,15 @@
|
|
|
1
1
|
import type { Plugin } from '../../plugins.js';
|
|
2
|
-
import { type TocHeadingLevel, type TocPluginOptions } from './toc.js';
|
|
3
|
-
export type { TocHeadingLevel, TocPluginOptions };
|
|
2
|
+
import { type TocEmptyPayload, type TocEntryPayload, type TocHeadingLevel, type TocPluginOptions } from './toc.js';
|
|
3
|
+
export type { TocEmptyPayload, TocEntryPayload, TocHeadingLevel, TocPluginOptions };
|
|
4
4
|
/**
|
|
5
5
|
* Notion's table of contents: a `toc` block lists the document's
|
|
6
6
|
* headings, live, indented by level; a click scrolls to one (opening the
|
|
7
7
|
* closed toggles it sits in). Void: it holds no text, and its list is
|
|
8
8
|
* never stored, only drawn. Its preset in the slash menu turns an empty
|
|
9
|
-
* line into one, or inserts it after the line; its words are
|
|
10
|
-
* (English by default).
|
|
9
|
+
* line into one, or inserts it after the line; its words are the view's
|
|
10
|
+
* `toc` labels (English by default).
|
|
11
11
|
*/
|
|
12
12
|
export declare const createTocPlugin: (options?: TocPluginOptions) => Plugin;
|
|
13
|
-
/** The table of contents over the rich text headings. */
|
|
14
|
-
export declare const tocPlugin: Plugin;
|
|
15
13
|
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> {
|
|
16
14
|
new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
|
|
17
15
|
$$bindings?: Bindings;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { Snippet } from 'svelte';
|
|
2
|
+
import type { Attachment } from 'svelte/attachments';
|
|
2
3
|
/**
|
|
3
4
|
* A block's level in the table of contents (1 the outermost), or `null`
|
|
4
5
|
* when it is not a heading: read from its kind and data.
|
|
@@ -7,11 +8,6 @@ export type TocHeadingLevel = (block: {
|
|
|
7
8
|
type: string;
|
|
8
9
|
data: Readonly<Record<string, unknown>>;
|
|
9
10
|
}) => number | null;
|
|
10
|
-
/** Each view's table of contents labels: the first toc plugin listed claims them, as its kind. */
|
|
11
|
-
export declare const tocLabels: {
|
|
12
|
-
claim: (view: object | undefined, labels: import("../../labels.js").TocLabels) => void;
|
|
13
|
-
of: (view: object | undefined) => import("../../labels.js").TocLabels;
|
|
14
|
-
};
|
|
15
11
|
/** The table of contents plugin's options. */
|
|
16
12
|
export type TocPluginOptions = {
|
|
17
13
|
/**
|
|
@@ -20,10 +16,45 @@ export type TocPluginOptions = {
|
|
|
20
16
|
* any other 3, as they are drawn).
|
|
21
17
|
*/
|
|
22
18
|
headingLevel?: TocHeadingLevel;
|
|
23
|
-
/**
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
19
|
+
/**
|
|
20
|
+
* One entry (default: a `button` with the heading's text, one nesting
|
|
21
|
+
* step in per level under the shallowest). Give it `{@attach
|
|
22
|
+
* entry.control}`: a click scrolls its heading into view, opening the
|
|
23
|
+
* closed toggles it sits in, and the selection stays.
|
|
24
|
+
*/
|
|
25
|
+
entry?: Snippet<[TocEntryPayload]>;
|
|
26
|
+
/** What shows while the document has no heading (default: a `p` with the view's `toc.empty`). */
|
|
27
|
+
empty?: Snippet<[TocEmptyPayload]>;
|
|
28
|
+
};
|
|
29
|
+
/** What a table of contents' `entry` snippet receives: one heading. */
|
|
30
|
+
export type TocEntryPayload = {
|
|
31
|
+
/** The heading's block id. */
|
|
32
|
+
id: string;
|
|
33
|
+
/** Its level (`headingLevel`'s answer, 1 the outermost). */
|
|
34
|
+
level: number;
|
|
35
|
+
/** How many steps in it sits: its level less the shallowest shown. */
|
|
36
|
+
depth: number;
|
|
37
|
+
/** Its text (`''` when it has none). */
|
|
38
|
+
text: string;
|
|
39
|
+
/** What it reads: its text, else the view's `toc.untitled`. */
|
|
40
|
+
label: string;
|
|
41
|
+
/** Scroll its heading into view (opening the closed toggles it sits in). */
|
|
42
|
+
go: () => void;
|
|
43
|
+
/**
|
|
44
|
+
* The entry's attachment (`{@attach entry.control}`): its marker
|
|
45
|
+
* (`data-edytor-toc-entry`), a press that keeps the editor's selection,
|
|
46
|
+
* and a click that scrolls to it.
|
|
47
|
+
*/
|
|
48
|
+
control: Attachment<HTMLElement>;
|
|
49
|
+
};
|
|
50
|
+
/** What a table of contents' `empty` snippet receives. */
|
|
51
|
+
export type TocEmptyPayload = {
|
|
52
|
+
/** The view's words for it (`toc.empty`). */
|
|
53
|
+
label: string;
|
|
27
54
|
};
|
|
55
|
+
/** A view's table of contents: the first plugin listed sets it. */
|
|
56
|
+
export type TocView = Required<Pick<TocPluginOptions, 'headingLevel'>> & Pick<TocPluginOptions, 'entry' | 'empty'>;
|
|
28
57
|
/** The rich text headings' levels (`heading`, `toggle-heading`), as they draw them. */
|
|
29
58
|
export declare const richTextHeadingLevel: TocHeadingLevel;
|
|
59
|
+
/** Each view's table of contents (the first plugin listed sets it). */
|
|
60
|
+
export declare const tocViews: WeakMap<object, TocView>;
|
package/dist/plugins/toc/toc.js
CHANGED
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
import { viewLabels } from '../../labels.js';
|
|
2
|
-
/** Each view's table of contents labels: the first toc plugin listed claims them, as its kind. */
|
|
3
|
-
export const tocLabels = viewLabels('toc');
|
|
4
1
|
/** The rich text headings' levels (`heading`, `toggle-heading`), as they draw them. */
|
|
5
2
|
export const richTextHeadingLevel = ({ type, data }) => {
|
|
6
3
|
if (type !== 'heading' && type !== 'toggle-heading')
|
|
@@ -8,3 +5,5 @@ export const richTextHeadingLevel = ({ type, data }) => {
|
|
|
8
5
|
const { level } = data;
|
|
9
6
|
return level === undefined || level === 'h1' ? 1 : level === 'h2' ? 2 : 3;
|
|
10
7
|
};
|
|
8
|
+
/** Each view's table of contents (the first plugin listed sets it). */
|
|
9
|
+
export const tocViews = new WeakMap();
|
|
@@ -1,76 +1,46 @@
|
|
|
1
|
+
import type { Attachment } from 'svelte/attachments';
|
|
1
2
|
import type { Edytor } from '../../edytor.svelte.js';
|
|
2
3
|
import type { EdytorSelection } from '../../selection/selection.svelte.js';
|
|
3
4
|
import { type KindRow } from '../../kinds.js';
|
|
4
|
-
import type { Popup } from '../../surface/popups.svelte.js';
|
|
5
|
-
import { type ToolbarLabels } from '../../labels.js';
|
|
6
|
-
/** Notion's palette: text colors and their backgrounds, by name (shown through the labels' `colors`). */
|
|
7
|
-
export declare const TOOLBAR_COLORS: readonly [{
|
|
8
|
-
readonly name: "Default";
|
|
9
|
-
readonly text: null;
|
|
10
|
-
readonly background: null;
|
|
11
|
-
}, {
|
|
12
|
-
readonly name: "Gray";
|
|
13
|
-
readonly text: "#7d7a75";
|
|
14
|
-
readonly background: "#f0efed";
|
|
15
|
-
}, {
|
|
16
|
-
readonly name: "Brown";
|
|
17
|
-
readonly text: "#9f765a";
|
|
18
|
-
readonly background: "#f5ede9";
|
|
19
|
-
}, {
|
|
20
|
-
readonly name: "Orange";
|
|
21
|
-
readonly text: "#d27b2d";
|
|
22
|
-
readonly background: "#fbebde";
|
|
23
|
-
}, {
|
|
24
|
-
readonly name: "Yellow";
|
|
25
|
-
readonly text: "#cb9434";
|
|
26
|
-
readonly background: "#f9f3dc";
|
|
27
|
-
}, {
|
|
28
|
-
readonly name: "Green";
|
|
29
|
-
readonly text: "#50946e";
|
|
30
|
-
readonly background: "#e8f1ec";
|
|
31
|
-
}, {
|
|
32
|
-
readonly name: "Blue";
|
|
33
|
-
readonly text: "#387dc9";
|
|
34
|
-
readonly background: "#e5f2fc";
|
|
35
|
-
}, {
|
|
36
|
-
readonly name: "Purple";
|
|
37
|
-
readonly text: "#9a6bb4";
|
|
38
|
-
readonly background: "#f3ebf9";
|
|
39
|
-
}, {
|
|
40
|
-
readonly name: "Pink";
|
|
41
|
-
readonly text: "#c14c8a";
|
|
42
|
-
readonly background: "#fae9f1";
|
|
43
|
-
}, {
|
|
44
|
-
readonly name: "Red";
|
|
45
|
-
readonly text: "#cf5148";
|
|
46
|
-
readonly background: "#fce9e7";
|
|
47
|
-
}];
|
|
48
5
|
export declare class ToolbarController {
|
|
6
|
+
#private;
|
|
49
7
|
private edytor;
|
|
50
|
-
/** The words the toolbar shows (the plugin's `labels`): read them in a custom `toolbar`. */
|
|
51
|
-
readonly labels: ToolbarLabels;
|
|
52
8
|
/** Shown for the current selection; hidden while the editor is readonly. */
|
|
53
9
|
private shown;
|
|
54
10
|
linkUrl: string;
|
|
55
11
|
/** The open panel: the kind menu, the link field or the colors. */
|
|
56
|
-
panel: "
|
|
57
|
-
/** The selection the toolbar acts on: a value (anchors), so peers' edits move it. */
|
|
58
|
-
private selectionSnapshot;
|
|
59
|
-
private isRestoringSelection;
|
|
60
|
-
/** The link panel's field takes the focus when it next mounts (it was opened, not re-rendered). */
|
|
61
|
-
private focusField;
|
|
12
|
+
panel: "color" | "link" | "turn" | null;
|
|
62
13
|
/** The link under the pointer, for the link card (`link.card`). */
|
|
63
14
|
hovered: HTMLAnchorElement | null;
|
|
64
|
-
constructor(edytor: Edytor
|
|
65
|
-
/** The words the toolbar shows (the plugin's `labels`): read them in a custom `toolbar`. */
|
|
66
|
-
labels?: ToolbarLabels);
|
|
67
|
-
/** A palette color's name as shown (`labels.colors`). */
|
|
68
|
-
colorName: (name: string) => string;
|
|
15
|
+
constructor(edytor: Edytor);
|
|
69
16
|
get isVisible(): boolean;
|
|
70
17
|
/** The bar's element id (page-unique), for the root's `aria-controls`. */
|
|
71
18
|
get barId(): string;
|
|
72
|
-
/**
|
|
73
|
-
|
|
19
|
+
/** The link panel's field id (page-unique): a `label`'s `for`. */
|
|
20
|
+
get linkFieldId(): string;
|
|
21
|
+
/**
|
|
22
|
+
* The bar (`{@attach controller.popup}`, named by your markup): it takes
|
|
23
|
+
* the bar's id, its `toolbar` role unless it has its own, the placement's mark
|
|
24
|
+
* (`data-edytor-toolbar-bar`, which the toolbar's shortcut also reads),
|
|
25
|
+
* and is published to the view's root (`edytor.popups`, with that
|
|
26
|
+
* shortcut as its `aria-keyshortcuts`) while it is in the page.
|
|
27
|
+
*/
|
|
28
|
+
popup: Attachment<HTMLElement>;
|
|
29
|
+
/**
|
|
30
|
+
* The bar's keys (`{@attach controller.keys}`, WAI-ARIA toolbar): one tab
|
|
31
|
+
* stop, the control it last held (`tabindex="0"`, every other `-1`); the
|
|
32
|
+
* arrows, Home and End walk its controls, Escape gives the focus back to
|
|
33
|
+
* the editor over the held selection (`release`). Every key in it is its
|
|
34
|
+
* own, never the editor's (Enter presses the button).
|
|
35
|
+
*/
|
|
36
|
+
keys: Attachment<HTMLElement>;
|
|
37
|
+
/**
|
|
38
|
+
* The link panel's field (`{@attach controller.linkField}`): its id
|
|
39
|
+
* (`linkFieldId`), the focus when the panel was just opened (Mod+K, Edit,
|
|
40
|
+
* the Link button), Enter applies the link and Escape closes the panel,
|
|
41
|
+
* both giving the editor its focus and the selection back.
|
|
42
|
+
*/
|
|
43
|
+
linkField: Attachment<HTMLInputElement>;
|
|
74
44
|
/** Give the keyboard back to the editor (Escape in the bar), over the held selection. */
|
|
75
45
|
release(): void;
|
|
76
46
|
updateFromSelection(selection?: EdytorSelection): void;
|
|
@@ -114,8 +84,6 @@ export declare class ToolbarController {
|
|
|
114
84
|
editHovered(): void;
|
|
115
85
|
/** The card's Remove: unlink the whole hovered link (one undo step); the selection stays. */
|
|
116
86
|
removeHovered(): void;
|
|
117
|
-
/** The hovered link element's text and link run, read from the model (never from the DOM). */
|
|
118
|
-
private hoveredLink;
|
|
119
87
|
/** Convert every block the selection touches (Notion), as one undo step. */
|
|
120
88
|
turnInto(kind: KindRow): void;
|
|
121
89
|
/** Set (or clear, with `null`) the text color or background of the selection. */
|
|
@@ -123,9 +91,4 @@ export declare class ToolbarController {
|
|
|
123
91
|
toggleMark(mark: string): void;
|
|
124
92
|
applyLink(): void;
|
|
125
93
|
removeLink(): void;
|
|
126
|
-
private canShowForSelection;
|
|
127
|
-
private getSelectedLinkUrl;
|
|
128
|
-
/** Act on the held selection, then select it again (the projector displays it). */
|
|
129
|
-
private runWithSelection;
|
|
130
|
-
private restoreSelection;
|
|
131
94
|
}
|