edytor 1.0.0-rc.3 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +21 -39
- package/dist/block/block.svelte.d.ts +11 -84
- package/dist/block/block.svelte.js +30 -134
- package/dist/block/colors.d.ts +0 -9
- package/dist/block/colors.js +1 -18
- package/dist/block/contentRange.d.ts +5 -1
- package/dist/block/contentRange.js +15 -16
- package/dist/block/inlineBlock.svelte.d.ts +11 -9
- package/dist/block/inlineBlock.svelte.js +18 -21
- package/dist/clipboard/createClipboardFragment.js +22 -64
- package/dist/clipboard/fragmentData.js +17 -42
- package/dist/clipboard/htmlFlow.js +7 -7
- package/dist/clipboard/insertClipboardFragment.js +5 -4
- package/dist/clipboard/moveText.js +16 -8
- package/dist/clipboard/serializeClipboardFragment.d.ts +2 -0
- package/dist/clipboard/serializeClipboardFragment.js +32 -28
- package/dist/cloudflare/DocumentRoom.d.ts +4 -17
- package/dist/cloudflare/DocumentRoom.js +3 -5
- package/dist/cloudflare/move.d.ts +1 -18
- package/dist/cloudflare/move.js +2 -48
- package/dist/cloudflare/room/admission.d.ts +1 -60
- package/dist/cloudflare/room/admission.js +25 -29
- package/dist/cloudflare/room/comments.d.ts +1 -3
- package/dist/cloudflare/room/comments.js +6 -6
- package/dist/cloudflare/room/context.d.ts +25 -82
- package/dist/cloudflare/room/context.js +8 -8
- package/dist/cloudflare/room/forged.d.ts +1 -1
- package/dist/cloudflare/room/forged.js +2 -12
- package/dist/cloudflare/room/frames.d.ts +1 -1
- package/dist/cloudflare/room/frames.js +1 -1
- package/dist/cloudflare/room/history.d.ts +1 -25
- package/dist/cloudflare/room/history.js +39 -54
- package/dist/cloudflare/room/moves.d.ts +1 -13
- package/dist/cloudflare/room/moves.js +33 -57
- package/dist/cloudflare/room/presence.d.ts +1 -11
- package/dist/cloudflare/room/presence.js +4 -4
- package/dist/cloudflare/room/purge.d.ts +1 -2
- package/dist/cloudflare/room/purge.js +2 -2
- package/dist/cloudflare/room/replicas.d.ts +1 -7
- package/dist/cloudflare/room/replicas.js +2 -2
- package/dist/cloudflare/room/storage.d.ts +3 -32
- package/dist/cloudflare/room/storage.js +33 -108
- package/dist/cloudflare/room/updates.d.ts +4 -4
- package/dist/cloudflare/room/updates.js +17 -24
- package/dist/cloudflare/room/validation.d.ts +1 -5
- package/dist/cloudflare/room/validation.js +16 -37
- package/dist/collaboration/RemoteSelections.svelte +13 -17
- package/dist/collaboration/awarenessSelection.d.ts +22 -1
- package/dist/collaboration/awarenessSelection.js +42 -0
- package/dist/collaboration/comments/client.d.ts +2 -2
- package/dist/collaboration/comments/client.js +1 -1
- package/dist/collaboration/history/index.d.ts +5 -5
- package/dist/collaboration/history/index.js +5 -5
- package/dist/collaboration/history/panel.svelte.d.ts +91 -0
- package/dist/collaboration/history/panel.svelte.js +223 -0
- package/dist/collaboration/providers.d.ts +12 -3
- package/dist/collaboration/providers.js +5 -4
- package/dist/components/Block.svelte +42 -56
- package/dist/components/Block.svelte.d.ts +7 -5
- package/dist/components/Content.svelte +1 -5
- package/dist/components/Edytor.svelte +82 -99
- package/dist/components/Edytor.svelte.d.ts +16 -13
- package/dist/components/InlineBlock.svelte +1 -1
- package/dist/components/Ranges.svelte +96 -0
- package/dist/components/Ranges.svelte.d.ts +19 -0
- package/dist/components/Suggestion.svelte +3 -2
- package/dist/components/Text.svelte +2 -5
- package/dist/components/Text.svelte.d.ts +1 -1
- package/dist/crdt/admission.d.ts +2 -9
- package/dist/crdt/admission.js +3 -9
- package/dist/crdt/attribution/attribution.d.ts +11 -72
- package/dist/crdt/attribution/attribution.js +5 -52
- package/dist/crdt/attribution/block.d.ts +0 -78
- package/dist/crdt/attribution/block.js +1 -144
- package/dist/crdt/data.d.ts +18 -13
- package/dist/crdt/data.js +49 -71
- package/dist/crdt/doc/anchors.js +4 -4
- package/dist/crdt/doc/content.d.ts +5 -1
- package/dist/crdt/doc/content.js +3 -1
- package/dist/crdt/doc/delete.d.ts +1 -0
- package/dist/crdt/doc/funnel.d.ts +0 -23
- package/dist/crdt/doc/funnel.js +34 -85
- package/dist/crdt/doc/gate.d.ts +8 -9
- package/dist/crdt/doc/gate.js +7 -17
- package/dist/crdt/doc/history.d.ts +87 -14
- package/dist/crdt/doc/history.js +334 -149
- package/dist/crdt/doc/layout.d.ts +0 -1
- package/dist/crdt/doc/layout.js +2 -3
- package/dist/crdt/doc/meta.d.ts +4 -4
- package/dist/crdt/doc/meta.js +10 -21
- package/dist/crdt/doc/moves.d.ts +4 -4
- package/dist/crdt/doc/moves.js +5 -5
- package/dist/crdt/doc/plan.d.ts +2 -0
- package/dist/crdt/doc/plan.js +2 -0
- package/dist/crdt/doc/reads.d.ts +8 -5
- package/dist/crdt/doc/reads.js +49 -50
- package/dist/crdt/doc/seed.d.ts +15 -6
- package/dist/crdt/doc/seed.js +27 -26
- package/dist/crdt/doc/split-merge.d.ts +1 -3
- package/dist/crdt/doc/split-merge.js +4 -5
- package/dist/crdt/doc/steps.d.ts +3 -7
- package/dist/crdt/doc/steps.js +20 -9
- package/dist/crdt/doc/types.d.ts +0 -10
- package/dist/crdt/document.d.ts +32 -115
- package/dist/crdt/document.js +216 -302
- package/dist/crdt/edytor-doc.d.ts +689 -90
- package/dist/crdt/edytor-doc.js +74 -149
- package/dist/crdt/engine-api.d.ts +15 -47
- package/dist/crdt/engine.d.ts +7 -17
- package/dist/crdt/engine.js +9 -19
- package/dist/crdt/flow.d.ts +9 -37
- package/dist/crdt/flow.js +260 -238
- package/dist/crdt/index.d.ts +32 -85
- package/dist/crdt/index.js +21 -47
- package/dist/crdt/operations.d.ts +24 -33
- package/dist/crdt/operations.js +8 -17
- package/dist/crdt/placement/display.d.ts +0 -2
- package/dist/crdt/placement/display.js +0 -15
- package/dist/crdt/placement/model.d.ts +160 -12
- package/dist/crdt/placement/model.js +413 -414
- package/dist/crdt/placement/rank.d.ts +1 -5
- package/dist/crdt/placement/rank.js +28 -38
- package/dist/crdt/props.d.ts +32 -0
- package/dist/crdt/props.js +172 -0
- package/dist/crdt/protocol.d.ts +4 -5
- package/dist/crdt/protocol.js +3 -4
- package/dist/crdt/protocols/awareness.d.ts +3 -7
- package/dist/crdt/protocols/awareness.js +17 -33
- package/dist/crdt/protocols/envelope.d.ts +9 -29
- package/dist/crdt/protocols/envelope.js +8 -25
- package/dist/crdt/protocols/sync.d.ts +15 -30
- package/dist/crdt/protocols/sync.js +27 -89
- package/dist/crdt/providers/bound.d.ts +3 -1
- package/dist/crdt/providers/bound.js +3 -1
- package/dist/crdt/providers/container.d.ts +11 -17
- package/dist/crdt/providers/container.js +39 -27
- package/dist/crdt/providers/index.d.ts +34 -6
- package/dist/crdt/providers/index.js +106 -111
- package/dist/crdt/providers/indexeddb.d.ts +2 -12
- package/dist/crdt/providers/indexeddb.js +29 -90
- package/dist/crdt/providers/room.d.ts +58 -2
- package/dist/crdt/providers/room.js +38 -21
- package/dist/crdt/providers/websocket.d.ts +1 -1
- package/dist/crdt/providers/websocket.js +3 -4
- package/dist/crdt/purge.d.ts +2 -2
- package/dist/crdt/purge.js +69 -6
- package/dist/crdt/rangeDelete.d.ts +4 -42
- package/dist/crdt/rangeDelete.js +7 -6
- package/dist/crdt/restore.d.ts +21 -1
- package/dist/crdt/restore.js +54 -59
- package/dist/crdt/schema.d.ts +2 -2
- package/dist/crdt/schema.js +4 -5
- package/dist/crdt/semantics.d.ts +10 -15
- package/dist/crdt/semantics.js +22 -21
- package/dist/crdt/storage.d.ts +7 -13
- package/dist/crdt/storage.js +10 -24
- package/dist/crdt/structs.d.ts +42 -47
- package/dist/crdt/structs.js +76 -67
- package/dist/crdt/tables.d.ts +9 -0
- package/dist/crdt/tables.js +20 -0
- package/dist/crdt/text/delete-index.d.ts +0 -13
- package/dist/crdt/text/delete-index.js +7 -14
- package/dist/crdt/text/deletes.d.ts +9 -22
- package/dist/crdt/text/deletes.js +11 -74
- package/dist/crdt/text/index/cache.js +3 -3
- package/dist/crdt/text/index/fold.d.ts +1 -2
- package/dist/crdt/text/index/fold.js +15 -10
- package/dist/crdt/text/index/layout.d.ts +0 -10
- package/dist/crdt/text/index/layout.js +6 -20
- package/dist/crdt/text/index/records.js +2 -1
- package/dist/crdt/text/index/report.js +5 -6
- package/dist/crdt/text/index/shared.d.ts +11 -4
- package/dist/crdt/text/index/shared.js +8 -7
- package/dist/crdt/text/index/state.d.ts +3 -33
- package/dist/crdt/text/index/state.js +2 -4
- package/dist/crdt/text/model.d.ts +82 -2
- package/dist/crdt/text/model.js +344 -354
- package/dist/crdt/text/rows.d.ts +0 -2
- package/dist/crdt/text/rows.js +0 -11
- package/dist/crdt/text/runs.d.ts +6 -3
- package/dist/crdt/text/runs.js +132 -137
- package/dist/crdt/text/streams.d.ts +1 -1
- package/dist/crdt/text/streams.js +1 -1
- package/dist/crdt/vendor/yjs/API-NOTES.md +25 -8
- package/dist/crdt/vendor/yjs/UPSTREAM.md +288 -8
- package/dist/crdt/vendor/yjs/dts/global.d.ts +5 -26
- package/dist/crdt/vendor/yjs/dts/index.d.ts +10 -15
- package/dist/crdt/vendor/yjs/dts/structs/AbstractStruct.d.ts +2 -2
- package/dist/crdt/vendor/yjs/dts/structs/Item.d.ts +14 -219
- package/dist/crdt/vendor/yjs/dts/structs/Skip.d.ts +2 -2
- package/dist/crdt/vendor/yjs/dts/utils/BlockSet.d.ts +2 -2
- package/dist/crdt/vendor/yjs/dts/utils/Doc.d.ts +12 -123
- package/dist/crdt/vendor/yjs/dts/utils/ID.d.ts +1 -1
- package/dist/crdt/vendor/yjs/dts/utils/RangeCursor.d.ts +37 -58
- package/dist/crdt/vendor/yjs/dts/utils/Transaction.d.ts +3 -78
- package/dist/crdt/vendor/yjs/dts/utils/UpdateDecoder.d.ts +2 -81
- package/dist/crdt/vendor/yjs/dts/utils/UpdateEncoder.d.ts +2 -74
- package/dist/crdt/vendor/yjs/dts/utils/encoding-helpers.d.ts +4 -4
- package/dist/crdt/vendor/yjs/dts/utils/encoding.d.ts +6 -18
- package/dist/crdt/vendor/yjs/dts/utils/ids.d.ts +12 -237
- package/dist/crdt/vendor/yjs/dts/utils/positions.d.ts +5 -0
- package/dist/crdt/vendor/yjs/dts/utils/redo.d.ts +3 -0
- package/dist/crdt/vendor/yjs/dts/utils/transaction-helpers.d.ts +1 -3
- package/dist/crdt/vendor/yjs/dts/utils/updates.d.ts +6 -23
- package/dist/crdt/vendor/yjs/dts/ynode.d.ts +73 -498
- package/dist/crdt/vendor/yjs/global.d.ts +5 -26
- package/dist/crdt/vendor/yjs/src/index.js +11 -25
- package/dist/crdt/vendor/yjs/src/structs/AbstractStruct.js +1 -1
- package/dist/crdt/vendor/yjs/src/structs/GC.js +1 -1
- package/dist/crdt/vendor/yjs/src/structs/Item.js +10 -372
- package/dist/crdt/vendor/yjs/src/structs/Skip.js +1 -1
- package/dist/crdt/vendor/yjs/src/utils/BlockSet.js +2 -2
- package/dist/crdt/vendor/yjs/src/utils/Doc.js +14 -170
- package/dist/crdt/vendor/yjs/src/utils/ID.js +1 -1
- package/dist/crdt/vendor/yjs/src/utils/RangeCursor.js +61 -128
- package/dist/crdt/vendor/yjs/src/utils/StructStore.js +0 -22
- package/dist/crdt/vendor/yjs/src/utils/Transaction.js +17 -282
- package/dist/crdt/vendor/yjs/src/utils/UpdateDecoder.js +3 -130
- package/dist/crdt/vendor/yjs/src/utils/UpdateEncoder.js +2 -132
- package/dist/crdt/vendor/yjs/src/utils/encoding-helpers.js +4 -4
- package/dist/crdt/vendor/yjs/src/utils/encoding.js +49 -146
- package/dist/crdt/vendor/yjs/src/utils/ids.js +23 -900
- package/dist/crdt/vendor/yjs/src/utils/positions.js +115 -0
- package/dist/crdt/vendor/yjs/src/utils/redo.js +143 -0
- package/dist/crdt/vendor/yjs/src/utils/transaction-helpers.js +10 -127
- package/dist/crdt/vendor/yjs/src/utils/updates.js +7 -50
- package/dist/crdt/vendor/yjs/src/ynode.js +261 -2226
- package/dist/dnd/autoScroll.js +1 -2
- package/dist/{plugins/blockHandles → dnd}/dropIndicator.d.ts +2 -2
- package/dist/{plugins/blockHandles → dnd}/dropIndicator.js +52 -60
- package/dist/{plugins/blockHandles → dnd}/geometry.d.ts +4 -3
- package/dist/{plugins/blockHandles → dnd}/geometry.js +6 -6
- package/dist/dnd/placement.d.ts +200 -0
- package/dist/dnd/placement.js +426 -0
- package/dist/dnd/pragmatic.d.ts +4 -22
- package/dist/dnd/pragmatic.js +7 -26
- package/dist/dnd/track.d.ts +14 -0
- package/dist/dnd/track.js +55 -0
- package/dist/dnd/vendor/pragmatic/UPSTREAM.md +103 -0
- package/dist/dnd/vendor/pragmatic/bind-event-listener/LICENSE +21 -0
- package/dist/dnd/vendor/pragmatic/bind-event-listener/bind-all.js +46 -0
- package/dist/dnd/vendor/pragmatic/bind-event-listener/bind.js +7 -0
- package/dist/dnd/vendor/pragmatic/bind-event-listener/index.js +2 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/LICENSE.md +11 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/adapter/element-adapter-native-data-key.js +6 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/adapter/element-adapter.d.ts +57 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/adapter/element-adapter.js +306 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/element/adapter.d.ts +8 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/element/adapter.js +10 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/element/set-custom-native-drag-preview.d.ts +4 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/element/set-custom-native-drag-preview.js +6 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/entry-point/types.d.ts +1 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/honey-pot-fix/get-element-from-point-without-honey-pot.js +12 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/honey-pot-fix/honey-pot-data-attribute.js +3 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/honey-pot-fix/is-honey-pot-element.js +4 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/honey-pot-fix/make-honey-pot-fix.js +333 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/internal-types.d.ts +350 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/ledger/dispatch-consumer-event.js +128 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/ledger/lifecycle-manager.js +340 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/ledger/usage-ledger.js +32 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/make-adapter/make-adapter.js +59 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/make-adapter/make-drop-target.js +288 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/make-adapter/make-monitor.js +85 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/public-utils/combine.js +6 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/public-utils/element/custom-native-drag-preview/set-custom-native-drag-preview.d.ts +36 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/public-utils/element/custom-native-drag-preview/set-custom-native-drag-preview.js +153 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/public-utils/element/custom-native-drag-preview/types.d.ts +16 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/public-utils/once.js +13 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/add-attribute.js +7 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/android.js +10 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/changing-window/count-events-for-safari.js +104 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/changing-window/is-from-another-window.js +16 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/changing-window/is-leaving-window-in-safari.js +12 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/changing-window/is-leaving-window.js +55 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/detect-broken-drag.js +48 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/get-input.js +14 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/is-firefox.js +13 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/is-safari.js +19 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/max-z-index.js +3 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/media-types/text-media-type.js +6 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/media-types/url-media-type.js +6 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/popover-reset-styles.js +40 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop/util/supports-popover.js +16 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/LICENSE.md +11 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/entry-point/element.d.ts +4 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/entry-point/element.js +8 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/internal-types.d.ts +50 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/over-element/data-attributes.js +9 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/over-element/get-scroll-by.js +117 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/over-element/make-api.js +90 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/over-element/try-scroll.js +183 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/axis.js +22 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/can-scroll-on-edge.js +17 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/configuration.js +49 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/edges.js +9 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/engagement-history.js +43 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/get-over-element-hitbox.js +50 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/get-percentage-in-range.js +19 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/get-scroll-change.js +106 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/is-axis-allowed.js +3 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/is-within.js +11 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/scheduler.js +104 -0
- package/dist/dnd/vendor/pragmatic/pragmatic-drag-and-drop-auto-scroll/shared/side.js +6 -0
- package/dist/dnd/vendor/pragmatic/raf-schd/LICENSE +21 -0
- package/dist/dnd/vendor/pragmatic/raf-schd/raf-schd.esm.js +34 -0
- package/dist/edytor.svelte.d.ts +46 -63
- package/dist/edytor.svelte.js +126 -181
- package/dist/events/beforeInputCommands.d.ts +6 -11
- package/dist/events/beforeInputCommands.js +189 -181
- package/dist/events/beforeInputDeleteCommands.d.ts +20 -1
- package/dist/events/beforeInputDeleteCommands.js +153 -204
- package/dist/events/domTextOffset.d.ts +9 -9
- package/dist/events/domTextOffset.js +20 -48
- package/dist/events/events.utils.d.ts +0 -2
- package/dist/events/events.utils.js +0 -4
- package/dist/events/nativeInteractiveControl.d.ts +13 -13
- package/dist/events/nativeInteractiveControl.js +28 -56
- package/dist/events/onBeforeInput.d.ts +6 -1
- package/dist/events/onBeforeInput.js +207 -331
- package/dist/events/onCopy.js +1 -5
- package/dist/events/onDrop.d.ts +7 -1
- package/dist/events/onDrop.js +64 -78
- package/dist/events/onFocus.d.ts +9 -4
- package/dist/events/onFocus.js +45 -67
- package/dist/events/onInput.d.ts +8 -4
- package/dist/events/onInput.js +34 -147
- package/dist/events/onKeyDown.js +55 -122
- package/dist/events/onPaste.d.ts +14 -1
- package/dist/events/onPaste.js +51 -76
- package/dist/index.d.ts +11 -15
- package/dist/index.js +3 -3
- package/dist/kinds.d.ts +4 -6
- package/dist/kinds.js +28 -27
- package/dist/labels.d.ts +83 -320
- package/dist/labels.js +181 -408
- package/dist/plugins/Chrome.svelte +29 -0
- package/dist/plugins/Chrome.svelte.d.ts +32 -0
- package/dist/plugins/Control.svelte +23 -0
- package/dist/plugins/Control.svelte.d.ts +30 -0
- package/dist/plugins/anchored.svelte.d.ts +47 -0
- package/dist/plugins/anchored.svelte.js +73 -0
- package/dist/plugins/arrowMove/arrowMove.d.ts +2 -1
- package/dist/plugins/arrowMove/arrowMove.js +9 -5
- package/dist/plugins/bands.svelte.d.ts +57 -0
- package/dist/plugins/bands.svelte.js +95 -0
- package/dist/plugins/blockHandles/BlockHandle.svelte +14 -154
- package/dist/plugins/blockHandles/BlockHandle.svelte.d.ts +2 -2
- package/dist/plugins/blockHandles/BlockHandleController.svelte.d.ts +21 -196
- package/dist/plugins/blockHandles/BlockHandleController.svelte.js +158 -573
- package/dist/plugins/blockHandles/BlockHandles.svelte +15 -23
- package/dist/plugins/blockHandles/BlockHandles.svelte.d.ts +2 -2
- package/dist/plugins/blockHandles/blockHandlesPlugin.d.ts +25 -39
- package/dist/plugins/blockHandles/blockHandlesPlugin.js +130 -185
- package/dist/plugins/blockHandles/dragPreview.d.ts +8 -6
- package/dist/plugins/blockHandles/dragPreview.js +18 -16
- package/dist/plugins/blockMenu/BlockMenuController.svelte.d.ts +28 -38
- package/dist/plugins/blockMenu/BlockMenuController.svelte.js +116 -183
- package/dist/plugins/blockMenu/blockMenuPlugin.d.ts +1 -3
- package/dist/plugins/blockMenu/blockMenuPlugin.js +12 -29
- package/dist/plugins/brand.d.ts +8 -0
- package/dist/plugins/brand.js +8 -0
- package/dist/plugins/chrome.d.ts +45 -38
- package/dist/plugins/chrome.js +59 -36
- package/dist/plugins/code/CodeHeader.svelte +8 -38
- package/dist/plugins/code/CodePlugin.svelte +53 -56
- package/dist/plugins/code/CodePlugin.svelte.d.ts +0 -2
- package/dist/plugins/code/LanguageMenu.svelte +16 -125
- package/dist/plugins/code/LanguageMenu.svelte.d.ts +2 -1
- package/dist/plugins/code/code.css +5 -117
- package/dist/plugins/code/header.svelte.d.ts +2 -11
- package/dist/plugins/code/header.svelte.js +11 -38
- package/dist/plugins/code/languageMenu.svelte.d.ts +12 -32
- package/dist/plugins/code/languageMenu.svelte.js +30 -160
- package/dist/plugins/code/languages.d.ts +9 -22
- package/dist/plugins/code/languages.js +39 -128
- package/dist/plugins/columns/ColumnResize.svelte +16 -27
- package/dist/plugins/columns/ColumnResize.svelte.d.ts +1 -1
- package/dist/plugins/columns/ColumnsPlugin.svelte +46 -78
- package/dist/plugins/columns/ColumnsPlugin.svelte.d.ts +0 -12
- package/dist/plugins/columns/columns.css +7 -26
- package/dist/plugins/columns/gaps.d.ts +7 -5
- package/dist/plugins/columns/gaps.js +11 -6
- package/dist/plugins/columns/resize.svelte.d.ts +17 -54
- package/dist/plugins/columns/resize.svelte.js +80 -173
- package/dist/plugins/comments/CommentsController.svelte.d.ts +1 -4
- package/dist/plugins/comments/CommentsController.svelte.js +14 -25
- package/dist/plugins/comments/CommentsSidebar.svelte +82 -431
- package/dist/plugins/comments/CommentsSidebar.svelte.d.ts +4 -2
- package/dist/plugins/comments/commentsPlugin.d.ts +25 -9
- package/dist/plugins/comments/commentsPlugin.js +12 -10
- package/dist/plugins/equation/EquationEditor.svelte +16 -130
- package/dist/plugins/equation/EquationEditor.svelte.d.ts +1 -2
- package/dist/plugins/equation/EquationPlugin.svelte +109 -172
- package/dist/plugins/equation/EquationPlugin.svelte.d.ts +3 -2
- package/dist/plugins/equation/EquationView.svelte +20 -11
- package/dist/plugins/equation/equation.css +7 -0
- package/dist/plugins/equation/equation.svelte.d.ts +37 -24
- package/dist/plugins/equation/equation.svelte.js +20 -94
- package/dist/plugins/equation/katex.js +6 -9
- package/dist/plugins/fileDrop.d.ts +28 -0
- package/dist/plugins/fileDrop.js +116 -0
- package/dist/plugins/find/FindController.svelte.d.ts +8 -13
- package/dist/plugins/find/FindController.svelte.js +34 -55
- package/dist/plugins/find/findPlugin.d.ts +4 -8
- package/dist/plugins/find/findPlugin.js +29 -9
- package/dist/plugins/image/ImageChrome.svelte +6 -167
- package/dist/plugins/image/ImageChrome.svelte.d.ts +0 -2
- package/dist/plugins/image/ImagePlugin.svelte +71 -151
- package/dist/plugins/image/ImagePlugin.svelte.d.ts +12 -41
- package/dist/plugins/image/ImageToolbarHost.svelte +37 -0
- package/dist/plugins/image/ImageToolbarHost.svelte.d.ts +9 -0
- package/dist/plugins/image/controls.svelte.d.ts +6 -36
- package/dist/plugins/image/controls.svelte.js +43 -212
- package/dist/plugins/image/image.css +17 -0
- package/dist/plugins/image/image.d.ts +0 -5
- package/dist/plugins/image/image.js +0 -3
- package/dist/plugins/image/toolbar.svelte.d.ts +69 -0
- package/dist/plugins/image/toolbar.svelte.js +145 -0
- package/dist/plugins/index.d.ts +30 -26
- package/dist/plugins/index.js +28 -22
- package/dist/plugins/list.svelte.d.ts +128 -0
- package/dist/plugins/list.svelte.js +217 -0
- package/dist/plugins/markdownShortcuts.d.ts +1 -1
- package/dist/plugins/markdownShortcuts.js +10 -9
- package/dist/plugins/marquee/MarqueeBox.svelte +3 -20
- package/dist/plugins/marquee/MarqueeBox.svelte.d.ts +1 -1
- package/dist/plugins/marquee/MarqueeController.svelte.d.ts +0 -2
- package/dist/plugins/marquee/MarqueeController.svelte.js +20 -23
- package/dist/plugins/marquee/marquee.js +4 -21
- package/dist/plugins/marquee/marqueePlugin.d.ts +4 -3
- package/dist/plugins/marquee/marqueePlugin.js +16 -15
- package/dist/plugins/media/AudioPlugin.svelte +13 -88
- package/dist/plugins/media/AudioPlugin.svelte.d.ts +11 -4
- package/dist/plugins/media/BookmarkPlugin.svelte +113 -120
- package/dist/plugins/media/BookmarkPlugin.svelte.d.ts +10 -15
- package/dist/plugins/media/EmbedPlugin.svelte +82 -86
- package/dist/plugins/media/EmbedPlugin.svelte.d.ts +11 -17
- package/dist/plugins/media/EmptySlot.svelte +44 -0
- package/dist/plugins/media/EmptySlot.svelte.d.ts +25 -0
- package/dist/plugins/media/FilePlugin.svelte +45 -113
- package/dist/plugins/media/FilePlugin.svelte.d.ts +21 -4
- package/dist/plugins/media/MediaEmpty.svelte +51 -90
- package/dist/plugins/media/MediaEmpty.svelte.d.ts +26 -10
- package/dist/plugins/media/SourceBlock.svelte +200 -0
- package/dist/plugins/media/SourceBlock.svelte.d.ts +34 -0
- package/dist/plugins/media/UploadPreview.svelte +32 -0
- package/dist/plugins/media/UploadPreview.svelte.d.ts +11 -0
- package/dist/plugins/media/VideoPlugin.svelte +14 -97
- package/dist/plugins/media/VideoPlugin.svelte.d.ts +12 -5
- package/dist/plugins/media/empty.svelte.d.ts +47 -46
- package/dist/plugins/media/empty.svelte.js +67 -60
- package/dist/plugins/media/media.d.ts +97 -44
- package/dist/plugins/media/media.js +77 -99
- package/dist/plugins/media/upload.css +23 -0
- package/dist/plugins/media/urlPaste.svelte.d.ts +6 -37
- package/dist/plugins/media/urlPaste.svelte.js +32 -102
- package/dist/plugins/mention/MentionPlugin.svelte +84 -126
- package/dist/plugins/mention/MentionPlugin.svelte.d.ts +17 -27
- package/dist/plugins/mention/mention.css +6 -0
- package/dist/plugins/page/PageLink.svelte +54 -38
- package/dist/plugins/page/PagePlugin.svelte +20 -18
- package/dist/plugins/page/PagePlugin.svelte.d.ts +2 -4
- package/dist/plugins/page/page.d.ts +35 -9
- package/dist/plugins/page/page.js +3 -4
- package/dist/plugins/pageLink/PageLinkPlugin.svelte +154 -109
- package/dist/plugins/pageLink/PageLinkPlugin.svelte.d.ts +19 -26
- package/dist/plugins/pageLink/pageLink.css +6 -0
- package/dist/plugins/planned.d.ts +10 -0
- package/dist/plugins/planned.js +12 -0
- package/dist/plugins/richtext/CalloutIcon.svelte +13 -26
- package/dist/plugins/richtext/CalloutIconPicker.svelte +26 -0
- package/dist/plugins/richtext/CalloutIconPicker.svelte.d.ts +9 -0
- package/dist/plugins/richtext/EmptyBody.svelte +13 -20
- package/dist/plugins/richtext/RichTextControl.svelte +39 -0
- package/dist/plugins/richtext/RichTextControl.svelte.d.ts +8 -0
- package/dist/plugins/richtext/RichTextPlugin.svelte +174 -183
- package/dist/plugins/richtext/RichTextPlugin.svelte.d.ts +34 -34
- package/dist/plugins/richtext/TodoCheckbox.svelte +10 -21
- package/dist/plugins/richtext/TodoCheckbox.svelte.d.ts +0 -2
- package/dist/plugins/richtext/body.js +2 -2
- package/dist/plugins/richtext/calloutIcons.svelte.d.ts +50 -55
- package/dist/plugins/richtext/calloutIcons.svelte.js +86 -174
- package/dist/plugins/richtext/callouts.d.ts +15 -0
- package/dist/plugins/richtext/callouts.js +23 -0
- package/dist/plugins/richtext/controls.svelte.d.ts +110 -0
- package/dist/plugins/richtext/controls.svelte.js +126 -0
- package/dist/plugins/richtext/richTextOperations.js +37 -28
- package/dist/plugins/richtext/richtext.css +6 -0
- package/dist/plugins/slashMenu/SlashMenuController.svelte.d.ts +2 -14
- package/dist/plugins/slashMenu/SlashMenuController.svelte.js +34 -71
- package/dist/plugins/slashMenu/slashMenuPlugin.d.ts +9 -26
- package/dist/plugins/slashMenu/slashMenuPlugin.js +27 -68
- package/dist/plugins/suggestions/SuggestionBars.svelte +27 -84
- package/dist/plugins/suggestions/SuggestionBars.svelte.d.ts +9 -3
- package/dist/plugins/suggestions/suggestionsPlugin.d.ts +10 -18
- package/dist/plugins/suggestions/suggestionsPlugin.js +9 -24
- package/dist/plugins/table/TableChrome.svelte +40 -124
- package/dist/plugins/table/TablePlugin.svelte +106 -168
- package/dist/plugins/table/TablePlugin.svelte.d.ts +0 -4
- package/dist/plugins/table/chrome.svelte.d.ts +38 -141
- package/dist/plugins/table/chrome.svelte.js +340 -589
- package/dist/plugins/table/ops.d.ts +47 -0
- package/dist/plugins/table/ops.js +233 -0
- package/dist/plugins/table/table.css +16 -152
- package/dist/plugins/table/table.d.ts +15 -14
- package/dist/plugins/table/table.js +22 -16
- package/dist/plugins/toc/TableOfContents.svelte +32 -38
- package/dist/plugins/toc/TableOfContents.svelte.d.ts +1 -5
- package/dist/plugins/toc/TocPlugin.svelte +22 -22
- package/dist/plugins/toc/TocPlugin.svelte.d.ts +4 -6
- package/dist/plugins/toc/toc.d.ts +41 -10
- package/dist/plugins/toc/toc.js +2 -3
- package/dist/plugins/toolbar/ToolbarController.svelte.d.ts +4 -68
- package/dist/plugins/toolbar/ToolbarController.svelte.js +63 -89
- package/dist/plugins/toolbar/toolbarPlugin.d.ts +8 -18
- package/dist/plugins/toolbar/toolbarPlugin.js +28 -43
- package/dist/plugins/triggers/TriggerController.svelte.d.ts +4 -68
- package/dist/plugins/triggers/TriggerController.svelte.js +48 -129
- package/dist/plugins/triggers/place.d.ts +0 -9
- package/dist/plugins/triggers/place.js +1 -17
- package/dist/plugins/triggers/triggers.d.ts +31 -9
- package/dist/plugins/triggers/triggers.js +82 -62
- package/dist/plugins/uploads.svelte.d.ts +55 -24
- package/dist/plugins/uploads.svelte.js +123 -50
- package/dist/plugins.d.ts +187 -66
- package/dist/selection/domSelection.d.ts +13 -4
- package/dist/selection/domSelection.js +110 -183
- package/dist/selection/pointer.svelte.d.ts +8 -10
- package/dist/selection/pointer.svelte.js +32 -73
- package/dist/selection/replaceSelection.d.ts +21 -22
- package/dist/selection/replaceSelection.js +60 -69
- package/dist/selection/selection.svelte.d.ts +5 -73
- package/dist/selection/selection.svelte.js +224 -542
- package/dist/selection/selection.utils.d.ts +34 -11
- package/dist/selection/selection.utils.js +128 -247
- package/dist/selection/visibility.d.ts +3 -8
- package/dist/selection/visibility.js +7 -5
- package/dist/session/announcer.svelte.d.ts +2 -1
- package/dist/session/announcer.svelte.js +7 -3
- package/dist/session/attempt.d.ts +43 -39
- package/dist/session/attempt.js +62 -55
- package/dist/session/bindings.js +117 -145
- package/dist/session/commands.d.ts +47 -22
- package/dist/session/commands.js +208 -208
- package/dist/session/composition.svelte.d.ts +2 -4
- package/dist/session/composition.svelte.js +55 -65
- package/dist/session/editing/text.d.ts +6 -0
- package/dist/session/editing/text.js +17 -3
- package/dist/session/handles.d.ts +10 -1
- package/dist/session/handles.js +28 -0
- package/dist/session/history.d.ts +0 -4
- package/dist/session/history.js +16 -21
- package/dist/session/inputRules.d.ts +6 -3
- package/dist/session/inputRules.js +78 -83
- package/dist/session/keymap.d.ts +1 -6
- package/dist/session/keymap.js +17 -20
- package/dist/session/moves.d.ts +43 -10
- package/dist/session/moves.js +101 -59
- package/dist/session/navigation.d.ts +10 -2
- package/dist/session/navigation.js +140 -172
- package/dist/session/ports.d.ts +2 -7
- package/dist/session/props.d.ts +25 -25
- package/dist/session/props.js +62 -159
- package/dist/session/selection.d.ts +4 -3
- package/dist/session/selection.js +5 -0
- package/dist/session/suggestions.svelte.d.ts +1 -1
- package/dist/session/suggestions.svelte.js +42 -47
- package/dist/session/uploads.d.ts +29 -0
- package/dist/session/uploads.js +10 -0
- package/dist/session/virtual.d.ts +3 -3
- package/dist/session/virtual.js +18 -40
- package/dist/surface/attributes.d.ts +1 -0
- package/dist/surface/attributes.js +3 -26
- package/dist/surface/cells.d.ts +5 -0
- package/dist/surface/cells.js +5 -0
- package/dist/surface/lines.d.ts +2 -2
- package/dist/surface/lines.js +1 -1
- package/dist/surface/observer.svelte.d.ts +3 -20
- package/dist/surface/observer.svelte.js +52 -72
- package/dist/surface/overlay.d.ts +41 -3
- package/dist/surface/overlay.js +92 -37
- package/dist/surface/pin.svelte.d.ts +5 -0
- package/dist/surface/pin.svelte.js +5 -0
- package/dist/surface/projector.svelte.d.ts +4 -6
- package/dist/surface/projector.svelte.js +42 -69
- package/dist/text/text.svelte.d.ts +14 -40
- package/dist/text/text.svelte.js +35 -51
- package/dist/text/wordBoundary.d.ts +19 -0
- package/dist/text/wordBoundary.js +29 -44
- package/dist/themes/notion.css +272 -106
- package/dist/utils/json.d.ts +3 -1
- package/dist/utils/json.js +52 -51
- package/dist/utils/listen.d.ts +8 -0
- package/dist/utils/listen.js +19 -0
- package/package.json +4 -5
- package/dist/block/block.utils.d.ts +0 -340
- package/dist/block/block.utils.js +0 -356
- package/dist/collaboration/history/HistoryPanel.svelte +0 -554
- package/dist/collaboration/history/HistoryPanel.svelte.d.ts +0 -7
- package/dist/collaboration/history/panel.d.ts +0 -61
- package/dist/collaboration/history/panel.js +0 -3
- package/dist/components/SuggestionRanges.svelte +0 -58
- package/dist/components/SuggestionRanges.svelte.d.ts +0 -7
- package/dist/crdt/doc/table.d.ts +0 -21
- package/dist/crdt/doc/table.js +0 -288
- package/dist/crdt/migration/generation.d.ts +0 -58
- package/dist/crdt/migration/generation.js +0 -70
- package/dist/crdt/migration/legacy-schema.d.ts +0 -61
- package/dist/crdt/migration/legacy-schema.js +0 -151
- package/dist/crdt/migration/migrate.d.ts +0 -56
- package/dist/crdt/migration/migrate.js +0 -227
- package/dist/crdt/nodes.d.ts +0 -121
- package/dist/crdt/nodes.js +0 -56
- package/dist/crdt/text/index/checks.d.ts +0 -15
- package/dist/crdt/text/index/checks.js +0 -156
- package/dist/crdt/vendor/yjs/dts/utils/EventHandler.d.ts +0 -17
- package/dist/crdt/vendor/yjs/dts/utils/RelativePosition.d.ts +0 -80
- package/dist/crdt/vendor/yjs/dts/utils/UndoManager.d.ts +0 -205
- package/dist/crdt/vendor/yjs/dts/utils/YEvent.d.ts +0 -93
- package/dist/crdt/vendor/yjs/dts/utils/meta.d.ts +0 -25
- package/dist/crdt/vendor/yjs/dts/utils/renderer-helpers.d.ts +0 -98
- package/dist/crdt/vendor/yjs/dts/utils/schemas.d.ts +0 -2
- package/dist/crdt/vendor/yjs/src/utils/EventHandler.js +0 -75
- package/dist/crdt/vendor/yjs/src/utils/RelativePosition.js +0 -301
- package/dist/crdt/vendor/yjs/src/utils/UndoManager.js +0 -554
- package/dist/crdt/vendor/yjs/src/utils/YEvent.js +0 -158
- package/dist/crdt/vendor/yjs/src/utils/meta.js +0 -74
- package/dist/crdt/vendor/yjs/src/utils/renderer-helpers.js +0 -186
- package/dist/crdt/vendor/yjs/src/utils/schemas.js +0 -3
- package/dist/edytor.utils.d.ts +0 -50
- package/dist/edytor.utils.js +0 -67
- package/dist/plugins/blockMenu/BlockMenu.svelte +0 -335
- package/dist/plugins/blockMenu/BlockMenu.svelte.d.ts +0 -9
- package/dist/plugins/find/FindBar.svelte +0 -170
- package/dist/plugins/find/FindBar.svelte.d.ts +0 -9
- package/dist/plugins/find/FindHighlights.svelte +0 -75
- package/dist/plugins/find/FindHighlights.svelte.d.ts +0 -9
- package/dist/plugins/icons.d.ts +0 -2
- package/dist/plugins/icons.js +0 -63
- package/dist/plugins/image/ImageEmpty.svelte +0 -93
- package/dist/plugins/image/ImageEmpty.svelte.d.ts +0 -15
- package/dist/plugins/image/empty.svelte.d.ts +0 -56
- package/dist/plugins/image/empty.svelte.js +0 -83
- package/dist/plugins/keepInView.d.ts +0 -4
- package/dist/plugins/keepInView.js +0 -6
- package/dist/plugins/media/UrlPasteMenu.svelte +0 -92
- package/dist/plugins/media/UrlPasteMenu.svelte.d.ts +0 -9
- package/dist/plugins/richtext/CalloutIconMenu.svelte +0 -98
- package/dist/plugins/richtext/CalloutIconMenu.svelte.d.ts +0 -9
- package/dist/plugins/richtext/labels.d.ts +0 -9
- package/dist/plugins/richtext/labels.js +0 -7
- package/dist/plugins/slashMenu/SlashMenu.svelte +0 -276
- package/dist/plugins/slashMenu/SlashMenu.svelte.d.ts +0 -11
- package/dist/plugins/table/dragPreview.d.ts +0 -29
- package/dist/plugins/table/dragPreview.js +0 -103
- package/dist/plugins/toolbar/LinkCard.svelte +0 -122
- package/dist/plugins/toolbar/LinkCard.svelte.d.ts +0 -9
- package/dist/plugins/toolbar/Toolbar.svelte +0 -349
- package/dist/plugins/toolbar/Toolbar.svelte.d.ts +0 -9
- package/dist/plugins/triggers/TriggerMenu.svelte +0 -135
- package/dist/plugins/triggers/TriggerMenu.svelte.d.ts +0 -7
- package/dist/text/deltas.d.ts +0 -22
- package/dist/text/deltas.js +0 -46
- package/dist/text/text.utils.d.ts +0 -45
- package/dist/text/text.utils.js +0 -199
- /package/dist/{plugins/columns → dnd}/stacking.d.ts +0 -0
- /package/dist/{plugins/columns → dnd}/stacking.js +0 -0
|
@@ -1,35 +1,24 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
2
|
import { getContext } from 'svelte';
|
|
3
|
-
import type { Block } from '../../block/block.svelte.js';
|
|
4
3
|
import type { Edytor } from '../../edytor.svelte.js';
|
|
5
4
|
import type { BlockView } from '../../plugins.js';
|
|
6
|
-
import {
|
|
5
|
+
import { todoCheckbox } from './controls.svelte.js';
|
|
7
6
|
|
|
8
7
|
/**
|
|
9
8
|
* A to-do's checkbox, named in the labels of the view rendering it (a
|
|
10
|
-
* suggestion's preview included)
|
|
9
|
+
* suggestion's preview included): a native checkbox (the default; an
|
|
10
|
+
* app's `checkbox` snippet replaces it, `RichTextControl`).
|
|
11
11
|
*/
|
|
12
|
-
let {
|
|
13
|
-
|
|
14
|
-
toggle
|
|
15
|
-
}: { block: BlockView<{ checked?: boolean }>; toggle: (block: Block) => void } = $props();
|
|
16
|
-
const labels = richTextLabels.of(getContext<Edytor>('edytor'));
|
|
12
|
+
let { block }: { block: BlockView<{ checked?: boolean }> } = $props();
|
|
13
|
+
const box = todoCheckbox(getContext<Edytor>('edytor'), () => block);
|
|
17
14
|
</script>
|
|
18
15
|
|
|
16
|
+
<!-- What a server render shows (a readonly view's) is written here; the attachment acts in the browser. -->
|
|
19
17
|
<input
|
|
20
18
|
type="checkbox"
|
|
21
|
-
checked={Boolean(block.data.checked)}
|
|
22
|
-
contenteditable="false"
|
|
23
|
-
aria-label={labels.checkbox}
|
|
24
19
|
data-edytor-todo-checkbox
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
// old state here while peers show the new one. Toggle the document, then show
|
|
30
|
-
// what it holds (a refused write, readonly or vetoed, shows unchanged).
|
|
31
|
-
// A suggestion's preview (no handle) writes nothing.
|
|
32
|
-
if (block.handle) toggle(block.handle);
|
|
33
|
-
event.currentTarget.checked = Boolean(block.data.checked);
|
|
34
|
-
}}
|
|
20
|
+
contenteditable="false"
|
|
21
|
+
aria-label={box.label}
|
|
22
|
+
checked={box.checked}
|
|
23
|
+
{@attach box.control}
|
|
35
24
|
/>
|
|
@@ -1,10 +1,8 @@
|
|
|
1
|
-
import type { Block } from '../../block/block.svelte.js';
|
|
2
1
|
import type { BlockView } from '../../plugins.js';
|
|
3
2
|
type $$ComponentProps = {
|
|
4
3
|
block: BlockView<{
|
|
5
4
|
checked?: boolean;
|
|
6
5
|
}>;
|
|
7
|
-
toggle: (block: Block) => void;
|
|
8
6
|
};
|
|
9
7
|
declare const TodoCheckbox: import("svelte").Component<$$ComponentProps, {}, "">;
|
|
10
8
|
type TodoCheckbox = ReturnType<typeof TodoCheckbox>;
|
|
@@ -8,8 +8,8 @@
|
|
|
8
8
|
export const openBody = (block) => {
|
|
9
9
|
const { edytor } = block;
|
|
10
10
|
return edytor.dispatcher.run('openBody', () => {
|
|
11
|
-
const
|
|
12
|
-
|
|
11
|
+
const added = () => edytor.insertBlocks({ parent: block.id, index: 0 }, [{ type: edytor.defaultChild(block) }]);
|
|
12
|
+
const child = block.children[0] ?? edytor.idToBlock.get(added().ids[0] ?? '');
|
|
13
13
|
edytor.dispatcher.caret(child?.firstText, 0);
|
|
14
14
|
return child ?? undefined;
|
|
15
15
|
});
|
|
@@ -1,36 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The callout icon picker (`callout.icon` in the delete contract), its own
|
|
3
|
+
* plugin: a menu in the overlay, under the icon of the callout it is open
|
|
4
|
+
* on: a choice writes `data.icon` (one `patchData` command, one undo step)
|
|
5
|
+
* and gives the keys back to the editor, with the selection it held;
|
|
6
|
+
* Escape, a press outside or focus leaving closes it with nothing written.
|
|
7
|
+
* Its markup is the app's `picker` snippet, which takes the keys and
|
|
8
|
+
* publishes the popup through the controller's attachments (`keys`,
|
|
9
|
+
* `popup`) and rows (`option`). A view without the plugin shows each
|
|
10
|
+
* callout's icon, which opens nothing.
|
|
11
|
+
*/
|
|
12
|
+
import { type Snippet } from 'svelte';
|
|
1
13
|
import type { Attachment } from 'svelte/attachments';
|
|
2
14
|
import type { Block } from '../../block/block.svelte.js';
|
|
3
15
|
import type { Edytor } from '../../edytor.svelte.js';
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
/** The picker's choices unless `createRichTextPlugin({ callout: { icons } })` names others. */
|
|
16
|
+
import { ChromeList } from '../list.svelte.js';
|
|
17
|
+
import type { Plugin } from '../../plugins.js';
|
|
18
|
+
/** The picker's choices unless `createCalloutIconsPlugin({ icons })` names others. */
|
|
8
19
|
export declare const CALLOUT_ICONS: readonly string[];
|
|
9
|
-
/** The choices on a row of the
|
|
20
|
+
/** The choices on a row of the picker: the arrows up and down move by a row (`picker.columns`). */
|
|
10
21
|
export declare const ICON_COLUMNS = 8;
|
|
11
|
-
/** The callout icon picker of each view (the first rich text plugin listed claims it). */
|
|
12
|
-
export declare const calloutIconViews: WeakMap<object, CalloutIconPicker>;
|
|
13
|
-
/** What `data.icon` shows: its own (`''`: none), else `fallback`. */
|
|
14
|
-
export declare const iconOf: (data: Record<string, unknown> | undefined, fallback: string) => string;
|
|
15
|
-
/**
|
|
16
|
-
* A callout's HTML: a `div` naming its icon (`data-edytor-callout`), its
|
|
17
|
-
* title, then its content. A generic tag: only its attribute claims it back
|
|
18
|
-
* (`parse`), never a tag another kind may export.
|
|
19
|
-
*/
|
|
20
|
-
export declare const calloutHtml: (icon: string, content: string, children: string) => string;
|
|
21
|
-
/** What `picker.option(index)` spreads on a row: its id, role, state and handlers. */
|
|
22
|
-
export type CalloutIconOption = {
|
|
23
|
-
id: string;
|
|
24
|
-
role: 'menuitemradio' | 'menuitem';
|
|
25
|
-
'aria-checked'?: boolean;
|
|
26
|
-
/** The keyboard's row. */
|
|
27
|
-
'data-active'?: '';
|
|
28
|
-
'data-edytor-callout-icon-choice'?: '';
|
|
29
|
-
'data-edytor-callout-icon-remove'?: '';
|
|
30
|
-
onmousedown: (event: MouseEvent) => void;
|
|
31
|
-
onmouseenter: () => void;
|
|
32
|
-
onclick: () => void;
|
|
33
|
-
};
|
|
34
22
|
/**
|
|
35
23
|
* A view's callout icon picker: what a `callout.picker` snippet receives.
|
|
36
24
|
* The callout it is open on (`block`), the choices (`icons`) and the icon
|
|
@@ -38,40 +26,30 @@ export type CalloutIconOption = {
|
|
|
38
26
|
* close, `close()` closes with nothing written. Put `{@attach picker.keys}`
|
|
39
27
|
* and `{@attach picker.popup}` on the picker's element (it takes the focus
|
|
40
28
|
* and the keys, names the keyboard's row and is published to the view's
|
|
41
|
-
* root),
|
|
42
|
-
* `icons.length` for Remove icon.
|
|
29
|
+
* root), attach `picker.option(i)` to each row (`i` in `icons`,
|
|
30
|
+
* `icons.length` for Remove icon) and run `picker.pick(i)` on its click.
|
|
43
31
|
*/
|
|
44
|
-
export declare class CalloutIconPicker {
|
|
32
|
+
export declare class CalloutIconPicker extends ChromeList {
|
|
45
33
|
#private;
|
|
46
|
-
/** A new callout's icon, and the one a callout without `data.icon` shows. */
|
|
47
|
-
readonly icon: string;
|
|
48
34
|
/** The picker's choices. */
|
|
49
35
|
readonly icons: readonly string[];
|
|
50
36
|
/** The callout the picker is open on (its id), `null` when closed. */
|
|
51
37
|
target: string | null;
|
|
52
|
-
/** The
|
|
53
|
-
|
|
54
|
-
constructor(
|
|
55
|
-
/** @internal */
|
|
56
|
-
edytor: Edytor,
|
|
57
|
-
/** A new callout's icon, and the one a callout without `data.icon` shows. */
|
|
58
|
-
icon?: string,
|
|
38
|
+
/** The choices on a row: ArrowUp and ArrowDown move by a row, so lay the icons out in as many columns. */
|
|
39
|
+
readonly columns = 8;
|
|
40
|
+
constructor(edytor: Edytor,
|
|
59
41
|
/** The picker's choices. */
|
|
60
|
-
icons?: readonly string[]
|
|
61
|
-
/** The picker's words: Change icon, Add icon, its name, Remove icon. */
|
|
62
|
-
get labels(): RichTextLabels['calloutIcon'];
|
|
42
|
+
icons?: readonly string[]);
|
|
63
43
|
/** Whether the picker is open (reactive). */
|
|
64
44
|
get isOpen(): boolean;
|
|
65
45
|
/** The callout it is open on (reactive). */
|
|
66
46
|
get block(): Block | undefined;
|
|
67
47
|
/** The icon that callout shows (`''`: none; reactive). */
|
|
68
48
|
get current(): string | undefined;
|
|
69
|
-
/** The
|
|
70
|
-
get
|
|
49
|
+
/** The keyboard's rows: the icons, then Remove icon. */
|
|
50
|
+
protected get count(): number;
|
|
71
51
|
/** The view is readonly (reactive): the picker closes. */
|
|
72
52
|
get readonly(): boolean;
|
|
73
|
-
/** The icon a callout with `data` shows. */
|
|
74
|
-
iconOf: (data: Record<string, unknown> | undefined) => string;
|
|
75
53
|
/** Open the picker on `block`, or close it when it is open there. */
|
|
76
54
|
toggle: (block: Block) => void;
|
|
77
55
|
/** Open the picker on the callout `block`, its icon the keyboard's row (refused in a view that may not write). */
|
|
@@ -82,10 +60,14 @@ export declare class CalloutIconPicker {
|
|
|
82
60
|
set: (icon: string) => void;
|
|
83
61
|
/** Leave the callout without an icon (`data.icon` is `''`), then close. */
|
|
84
62
|
remove: () => void;
|
|
85
|
-
/**
|
|
86
|
-
|
|
87
|
-
/**
|
|
88
|
-
|
|
63
|
+
/** Pick row `index`: its icon, or Remove icon (`icons.length`). */
|
|
64
|
+
pick: (index: number) => void;
|
|
65
|
+
/**
|
|
66
|
+
* Row `index`'s attachment (`icons.length`: Remove icon), as every menu's
|
|
67
|
+
* rows: its id, `menuitemradio` role and `aria-checked` (`menuitem` for
|
|
68
|
+
* Remove icon); its highlight is the markup's (`index`).
|
|
69
|
+
*/
|
|
70
|
+
option(index: number): Attachment<HTMLElement>;
|
|
89
71
|
/**
|
|
90
72
|
* The picker's element (`{@attach picker.keys}`): it takes the focus as
|
|
91
73
|
* it opens and names the keyboard's row (`aria-activedescendant`). The
|
|
@@ -94,9 +76,22 @@ export declare class CalloutIconPicker {
|
|
|
94
76
|
* reaches the page behind it. Focus leaving it closes it.
|
|
95
77
|
*/
|
|
96
78
|
keys: Attachment<HTMLElement>;
|
|
79
|
+
}
|
|
80
|
+
export type CalloutIconsOptions = {
|
|
97
81
|
/**
|
|
98
|
-
* The picker's
|
|
99
|
-
*
|
|
82
|
+
* The icon picker's markup and its words: it renders while the picker is
|
|
83
|
+
* open, placed under the icon (without it, the icon opens nothing). Put
|
|
84
|
+
* `{@attach picker.keys}` and `{@attach picker.popup}` on its element and
|
|
85
|
+
* attach `picker.option(i)` to each row (`picker.icons.length`: Remove icon).
|
|
100
86
|
*/
|
|
101
|
-
|
|
102
|
-
|
|
87
|
+
picker?: Snippet<[CalloutIconPicker]>;
|
|
88
|
+
/** The picker's choices (`CALLOUT_ICONS` by default). */
|
|
89
|
+
icons?: readonly string[];
|
|
90
|
+
};
|
|
91
|
+
/**
|
|
92
|
+
* Callout icons (Notion's): a callout's icon opens the view's picker, and
|
|
93
|
+
* its block menu has a Change icon row (rich text's, while a picker is
|
|
94
|
+
* listed), the keyboard's way to it. The first plugin listed claims the
|
|
95
|
+
* view's picker.
|
|
96
|
+
*/
|
|
97
|
+
export declare const createCalloutIconsPlugin: ({ picker: menu, icons }?: CalloutIconsOptions) => Plugin;
|
|
@@ -1,20 +1,22 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
* `
|
|
10
|
-
*
|
|
2
|
+
* The callout icon picker (`callout.icon` in the delete contract), its own
|
|
3
|
+
* plugin: a menu in the overlay, under the icon of the callout it is open
|
|
4
|
+
* on: a choice writes `data.icon` (one `patchData` command, one undo step)
|
|
5
|
+
* and gives the keys back to the editor, with the selection it held;
|
|
6
|
+
* Escape, a press outside or focus leaving closes it with nothing written.
|
|
7
|
+
* Its markup is the app's `picker` snippet, which takes the keys and
|
|
8
|
+
* publishes the popup through the controller's attachments (`keys`,
|
|
9
|
+
* `popup`) and rows (`option`). A view without the plugin shows each
|
|
10
|
+
* callout's icon, which opens nothing.
|
|
11
11
|
*/
|
|
12
12
|
import { untrack } from 'svelte';
|
|
13
|
-
import { englishLabels } from '../../labels.js';
|
|
14
13
|
import { takeKeys } from '../../events/onFocus.js';
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
14
|
+
import { ChromeList, holdKeys, menuKey, optionAttachment } from '../list.svelte.js';
|
|
15
|
+
import { Anchored } from '../anchored.svelte.js';
|
|
16
|
+
import { calloutPickers, iconOf } from './callouts.js';
|
|
17
|
+
import CalloutIconHost from './CalloutIconPicker.svelte';
|
|
18
|
+
import { all, listen } from '../../utils/listen.js';
|
|
19
|
+
/** The picker's choices unless `createCalloutIconsPlugin({ icons })` names others. */
|
|
18
20
|
export const CALLOUT_ICONS = [
|
|
19
21
|
'💡',
|
|
20
22
|
'⚠️',
|
|
@@ -47,18 +49,8 @@ export const CALLOUT_ICONS = [
|
|
|
47
49
|
'🌱',
|
|
48
50
|
'🤔'
|
|
49
51
|
];
|
|
50
|
-
/** The choices on a row of the
|
|
52
|
+
/** The choices on a row of the picker: the arrows up and down move by a row (`picker.columns`). */
|
|
51
53
|
export const ICON_COLUMNS = 8;
|
|
52
|
-
/** The callout icon picker of each view (the first rich text plugin listed claims it). */
|
|
53
|
-
export const calloutIconViews = new WeakMap();
|
|
54
|
-
/** What `data.icon` shows: its own (`''`: none), else `fallback`. */
|
|
55
|
-
export const iconOf = (data, fallback) => typeof data?.icon === 'string' ? data.icon : fallback;
|
|
56
|
-
/**
|
|
57
|
-
* A callout's HTML: a `div` naming its icon (`data-edytor-callout`), its
|
|
58
|
-
* title, then its content. A generic tag: only its attribute claims it back
|
|
59
|
-
* (`parse`), never a tag another kind may export.
|
|
60
|
-
*/
|
|
61
|
-
export const calloutHtml = (icon, content, children) => `<div data-edytor-callout="${icon.replace(/[&<>"']/g, (c) => `&#${c.charCodeAt(0)};`)}"><p>${content}</p>${children}</div>`;
|
|
62
54
|
/**
|
|
63
55
|
* A view's callout icon picker: what a `callout.picker` snippet receives.
|
|
64
56
|
* The callout it is open on (`block`), the choices (`icons`) and the icon
|
|
@@ -66,41 +58,36 @@ export const calloutHtml = (icon, content, children) => `<div data-edytor-callou
|
|
|
66
58
|
* close, `close()` closes with nothing written. Put `{@attach picker.keys}`
|
|
67
59
|
* and `{@attach picker.popup}` on the picker's element (it takes the focus
|
|
68
60
|
* and the keys, names the keyboard's row and is published to the view's
|
|
69
|
-
* root),
|
|
70
|
-
* `icons.length` for Remove icon.
|
|
61
|
+
* root), attach `picker.option(i)` to each row (`i` in `icons`,
|
|
62
|
+
* `icons.length` for Remove icon) and run `picker.pick(i)` on its click.
|
|
71
63
|
*/
|
|
72
|
-
export class CalloutIconPicker {
|
|
73
|
-
edytor;
|
|
74
|
-
icon;
|
|
64
|
+
export class CalloutIconPicker extends ChromeList {
|
|
75
65
|
icons;
|
|
76
66
|
/** The callout the picker is open on (its id), `null` when closed. */
|
|
77
67
|
target = $state(null);
|
|
78
|
-
/** The
|
|
79
|
-
|
|
68
|
+
/** The choices on a row: ArrowUp and ArrowDown move by a row, so lay the icons out in as many columns. */
|
|
69
|
+
columns = ICON_COLUMNS;
|
|
80
70
|
/**
|
|
81
|
-
*
|
|
71
|
+
* The picker's panel under the target's icon (its block without one): its
|
|
72
|
+
* place, and what closes it (a press or focus outside, the icon gone,
|
|
73
|
+
* readonly).
|
|
82
74
|
* @internal
|
|
83
75
|
*/
|
|
84
|
-
|
|
76
|
+
panel;
|
|
85
77
|
/** The selection the picker gives back when it closes. */
|
|
86
78
|
#before = null;
|
|
87
|
-
|
|
88
|
-
#words;
|
|
89
|
-
constructor(
|
|
90
|
-
/** @internal */
|
|
91
|
-
edytor,
|
|
92
|
-
/** A new callout's icon, and the one a callout without `data.icon` shows. */
|
|
93
|
-
icon = DEFAULT_CALLOUT_ICON,
|
|
79
|
+
constructor(edytor,
|
|
94
80
|
/** The picker's choices. */
|
|
95
|
-
icons = CALLOUT_ICONS
|
|
96
|
-
|
|
97
|
-
this.icon = icon;
|
|
81
|
+
icons = CALLOUT_ICONS) {
|
|
82
|
+
super(edytor, 'callout-icons', 'menu');
|
|
98
83
|
this.icons = icons;
|
|
99
|
-
this
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
84
|
+
this.panel = new Anchored(edytor, 'edytor-callout-icons-host', () => {
|
|
85
|
+
if (this.target === null)
|
|
86
|
+
return undefined;
|
|
87
|
+
const node = this.block?.node;
|
|
88
|
+
const icon = [...(node?.querySelectorAll('[data-edytor-callout-icon]') ?? [])].find((element) => element.closest('[data-edytor-block="true"]') === node);
|
|
89
|
+
return icon ?? node ?? null;
|
|
90
|
+
}, () => this.close(false));
|
|
104
91
|
}
|
|
105
92
|
/** Whether the picker is open (reactive). */
|
|
106
93
|
get isOpen() {
|
|
@@ -114,25 +101,23 @@ export class CalloutIconPicker {
|
|
|
114
101
|
/** The icon that callout shows (`''`: none; reactive). */
|
|
115
102
|
get current() {
|
|
116
103
|
const block = this.block;
|
|
117
|
-
return block ?
|
|
104
|
+
return block ? iconOf(block.data, this.edytor) : undefined;
|
|
118
105
|
}
|
|
119
|
-
/** The
|
|
120
|
-
get
|
|
121
|
-
return this.
|
|
106
|
+
/** The keyboard's rows: the icons, then Remove icon. */
|
|
107
|
+
get count() {
|
|
108
|
+
return this.icons.length + 1;
|
|
122
109
|
}
|
|
123
110
|
/** The view is readonly (reactive): the picker closes. */
|
|
124
111
|
get readonly() {
|
|
125
112
|
return this.edytor.readonly;
|
|
126
113
|
}
|
|
127
|
-
/** The icon a callout with `data` shows. */
|
|
128
|
-
iconOf = (data) => iconOf(data, this.icon);
|
|
129
114
|
/** Open the picker on `block`, or close it when it is open there. */
|
|
130
115
|
toggle = (block) => (this.target === block.id ? this.close() : this.open(block));
|
|
131
116
|
/** Open the picker on the callout `block`, its icon the keyboard's row (refused in a view that may not write). */
|
|
132
117
|
open = (block) => {
|
|
133
118
|
if (!this.edytor.dispatcher.permits() || !block.isInTree)
|
|
134
119
|
return;
|
|
135
|
-
const at = this.icons.indexOf(
|
|
120
|
+
const at = this.icons.indexOf(iconOf(block.data, this.edytor));
|
|
136
121
|
this.index = at === -1 ? 0 : at;
|
|
137
122
|
this.#before = null;
|
|
138
123
|
this.target = block.id;
|
|
@@ -144,7 +129,7 @@ export class CalloutIconPicker {
|
|
|
144
129
|
return;
|
|
145
130
|
const before = this.#before;
|
|
146
131
|
this.target = null;
|
|
147
|
-
this.box = null;
|
|
132
|
+
this.panel.box = null;
|
|
148
133
|
this.#before = null;
|
|
149
134
|
this.edytor.overlay.invalidate();
|
|
150
135
|
if (!keys)
|
|
@@ -157,39 +142,28 @@ export class CalloutIconPicker {
|
|
|
157
142
|
set = (icon) => {
|
|
158
143
|
const block = this.block;
|
|
159
144
|
if (block && block.data.icon !== icon)
|
|
160
|
-
block.
|
|
145
|
+
block.edytor.patchData(block.id, [{ path: ['icon'], value: icon }]);
|
|
161
146
|
this.close();
|
|
162
147
|
};
|
|
163
148
|
/** Leave the callout without an icon (`data.icon` is `''`), then close. */
|
|
164
149
|
remove = () => this.set('');
|
|
165
|
-
/**
|
|
166
|
-
|
|
167
|
-
/** What row `index` spreads (`icons.length`: Remove icon): its id, role, state and handlers. */
|
|
168
|
-
option = (index) => {
|
|
150
|
+
/** Pick row `index`: its icon, or Remove icon (`icons.length`). */
|
|
151
|
+
pick = (index) => {
|
|
169
152
|
const icon = this.icons[index];
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
};
|
|
175
|
-
const active = index === this.index ? { 'data-active': '' } : {};
|
|
176
|
-
return icon === undefined
|
|
177
|
-
? {
|
|
178
|
-
id: this.optionId(index),
|
|
179
|
-
role: 'menuitem',
|
|
180
|
-
'data-edytor-callout-icon-remove': '',
|
|
181
|
-
...active,
|
|
182
|
-
...handlers
|
|
183
|
-
}
|
|
184
|
-
: {
|
|
185
|
-
id: this.optionId(index),
|
|
186
|
-
role: 'menuitemradio',
|
|
187
|
-
'aria-checked': icon === this.current,
|
|
188
|
-
'data-edytor-callout-icon-choice': '',
|
|
189
|
-
...active,
|
|
190
|
-
...handlers
|
|
191
|
-
};
|
|
153
|
+
if (icon === undefined)
|
|
154
|
+
this.remove();
|
|
155
|
+
else
|
|
156
|
+
this.set(icon);
|
|
192
157
|
};
|
|
158
|
+
/**
|
|
159
|
+
* Row `index`'s attachment (`icons.length`: Remove icon), as every menu's
|
|
160
|
+
* rows: its id, `menuitemradio` role and `aria-checked` (`menuitem` for
|
|
161
|
+
* Remove icon); its highlight is the markup's (`index`).
|
|
162
|
+
*/
|
|
163
|
+
option(index) {
|
|
164
|
+
const icon = this.icons[index];
|
|
165
|
+
return optionAttachment(this.rowId(index), icon === undefined ? 'menuitem' : 'menuitemradio', index === this.index, icon === undefined ? {} : { 'aria-checked': icon === this.current }, false);
|
|
166
|
+
}
|
|
193
167
|
/**
|
|
194
168
|
* The picker's element (`{@attach picker.keys}`): it takes the focus as
|
|
195
169
|
* it opens and names the keyboard's row (`aria-activedescendant`). The
|
|
@@ -199,104 +173,42 @@ export class CalloutIconPicker {
|
|
|
199
173
|
*/
|
|
200
174
|
keys = (node) => untrack(() => this.#keys(node));
|
|
201
175
|
#keys = (node) => {
|
|
202
|
-
const steps = {
|
|
203
|
-
ArrowRight: 1,
|
|
204
|
-
ArrowLeft: -1,
|
|
205
|
-
ArrowDown: ICON_COLUMNS,
|
|
206
|
-
ArrowUp: -ICON_COLUMNS
|
|
207
|
-
};
|
|
208
176
|
const keydown = (event) => {
|
|
209
|
-
const count = this.icons.length + 1;
|
|
210
|
-
const at = this.index;
|
|
211
|
-
const step = steps[event.key];
|
|
212
|
-
if (event.key === 'Escape' || event.key === 'Tab') {
|
|
213
|
-
event.preventDefault();
|
|
214
|
-
this.close();
|
|
215
|
-
}
|
|
216
|
-
else if (step !== undefined) {
|
|
217
|
-
event.preventDefault();
|
|
218
|
-
// Left and right wrap; up and down stop at the first and last rows.
|
|
219
|
-
this.index =
|
|
220
|
-
Math.abs(step) === 1
|
|
221
|
-
? (at + step + count) % count
|
|
222
|
-
: Math.min(count - 1, Math.max(0, at + step));
|
|
223
|
-
}
|
|
224
|
-
else if (event.key === 'Home' || event.key === 'End') {
|
|
225
|
-
event.preventDefault();
|
|
226
|
-
this.index = event.key === 'Home' ? 0 : count - 1;
|
|
227
|
-
}
|
|
228
|
-
else if (event.key === 'Enter' || event.key === ' ') {
|
|
229
|
-
event.preventDefault();
|
|
230
|
-
this.option(at).onclick();
|
|
231
|
-
}
|
|
232
177
|
event.stopPropagation();
|
|
178
|
+
const at = this.index;
|
|
179
|
+
menuKey(event, {
|
|
180
|
+
at,
|
|
181
|
+
count: this.count,
|
|
182
|
+
to: (index) => (this.index = index),
|
|
183
|
+
pick: () => this.pick(at),
|
|
184
|
+
close: this.close
|
|
185
|
+
},
|
|
186
|
+
// Left and right wrap; up and down stop at the first and last rows.
|
|
187
|
+
{ columns: ICON_COLUMNS });
|
|
233
188
|
};
|
|
234
189
|
// Focus leaving for somewhere else closes it (the window going to the background does not).
|
|
235
|
-
const focusout = (event) => {
|
|
236
|
-
const to = event.relatedTarget;
|
|
237
|
-
if (to instanceof Node && !node.contains(to))
|
|
238
|
-
this.close(false);
|
|
239
|
-
};
|
|
240
190
|
node.tabIndex = -1;
|
|
241
|
-
node
|
|
242
|
-
node.addEventListener('focusout', focusout);
|
|
191
|
+
const off2 = listen(node, 'focusout', this.panel.blurred);
|
|
243
192
|
// It gives back the editor's selection as it is now: a block menu that
|
|
244
193
|
// opened it gave its caret back first.
|
|
245
194
|
this.#before ??= this.edytor.selection.value;
|
|
246
|
-
node
|
|
247
|
-
|
|
248
|
-
return () => {
|
|
249
|
-
node.removeEventListener('keydown', keydown);
|
|
250
|
-
node.removeEventListener('focusout', focusout);
|
|
251
|
-
};
|
|
252
|
-
};
|
|
253
|
-
/**
|
|
254
|
-
* The picker's element (`{@attach picker.popup}`): its id, role and name,
|
|
255
|
-
* published to the view's root (`edytor.popups`) while it is in the page.
|
|
256
|
-
*/
|
|
257
|
-
popup = (node) => untrack(() => this.#popup(node));
|
|
258
|
-
#popup = (node) => {
|
|
259
|
-
node.id = this.id;
|
|
260
|
-
node.setAttribute('role', 'menu');
|
|
261
|
-
node.setAttribute('aria-label', this.labels.picker);
|
|
262
|
-
this.edytor.popups.set('callout-icons', { id: this.id, haspopup: 'menu' });
|
|
263
|
-
return () => this.edytor.popups.set('callout-icons', null);
|
|
264
|
-
};
|
|
265
|
-
/**
|
|
266
|
-
* A press anywhere (`onPress`): one outside the picker and the target's icon closes it.
|
|
267
|
-
* @internal
|
|
268
|
-
*/
|
|
269
|
-
pressed = (event) => {
|
|
270
|
-
if (this.target === null)
|
|
271
|
-
return;
|
|
272
|
-
const target = event.target;
|
|
273
|
-
if (target?.closest?.('[data-edytor-callout-icons-host]'))
|
|
274
|
-
return;
|
|
275
|
-
const icon = target?.closest?.('[data-edytor-callout-icon]');
|
|
276
|
-
if (icon && icon.closest('[data-edytor-block="true"]') === this.block?.node)
|
|
277
|
-
return;
|
|
278
|
-
this.close(false);
|
|
279
|
-
};
|
|
280
|
-
/**
|
|
281
|
-
* The overlay measure: under the target callout's icon (its block's start without one).
|
|
282
|
-
* @internal
|
|
283
|
-
*/
|
|
284
|
-
measure = (host, origin) => {
|
|
285
|
-
const node = this.block?.node;
|
|
286
|
-
const icon = [...(node?.querySelectorAll('[data-edytor-callout-icon]') ?? [])].find((element) => element.closest('[data-edytor-block="true"]') === node);
|
|
287
|
-
const rect = (icon ?? node)?.getBoundingClientRect();
|
|
288
|
-
const box = rect ? { x: rect.left - origin.left, y: rect.bottom - origin.top + 4 } : null;
|
|
289
|
-
return () => {
|
|
290
|
-
// Never `display: none`: the picker takes the focus before its first measure.
|
|
291
|
-
Object.assign(host.style, {
|
|
292
|
-
position: 'absolute',
|
|
293
|
-
left: `${box?.x ?? 0}px`,
|
|
294
|
-
top: `${box?.y ?? 0}px`
|
|
295
|
-
});
|
|
296
|
-
if (box?.x !== this.box?.x || box?.y !== this.box?.y)
|
|
297
|
-
this.box = box;
|
|
298
|
-
if (!box && this.target !== null)
|
|
299
|
-
this.close(false);
|
|
300
|
-
};
|
|
195
|
+
const off = holdKeys(node, keydown, () => this.rowId(this.index));
|
|
196
|
+
return all(off, off2);
|
|
301
197
|
};
|
|
302
198
|
}
|
|
199
|
+
/**
|
|
200
|
+
* Callout icons (Notion's): a callout's icon opens the view's picker, and
|
|
201
|
+
* its block menu has a Change icon row (rich text's, while a picker is
|
|
202
|
+
* listed), the keyboard's way to it. The first plugin listed claims the
|
|
203
|
+
* view's picker.
|
|
204
|
+
*/
|
|
205
|
+
export const createCalloutIconsPlugin = ({ picker: menu, icons } = {}) => (edytor) => {
|
|
206
|
+
const picker = edytor && !calloutPickers.has(edytor) && new CalloutIconPicker(edytor, icons);
|
|
207
|
+
if (!picker)
|
|
208
|
+
return {};
|
|
209
|
+
calloutPickers.set(edytor, picker);
|
|
210
|
+
return {
|
|
211
|
+
// With the menus: above the handles and the image chrome.
|
|
212
|
+
onEdytorAttached: ({ node }) => menu && picker.panel.mount(node, CalloutIconHost, { picker, menu }, 70)
|
|
213
|
+
};
|
|
214
|
+
};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { CalloutIconPicker } from './calloutIcons.svelte.js';
|
|
2
|
+
/** A new callout's icon unless `createRichTextPlugin({ callout: { icon } })` names another. */
|
|
3
|
+
export declare const DEFAULT_CALLOUT_ICON = "\uD83D\uDCA1";
|
|
4
|
+
/** Each view's default callout icon (the first rich text plugin listed sets it). */
|
|
5
|
+
export declare const calloutIcons: WeakMap<object, string>;
|
|
6
|
+
/** Each view's callout icon picker (the first callout icons plugin listed claims it). */
|
|
7
|
+
export declare const calloutPickers: WeakMap<object, CalloutIconPicker>;
|
|
8
|
+
/** The icon a callout of `view` with `data` shows: its own (`''`: none), else the view's default. */
|
|
9
|
+
export declare const iconOf: (data: Record<string, unknown> | undefined, view?: object) => string;
|
|
10
|
+
/**
|
|
11
|
+
* A callout's HTML: a `div` naming its icon (`data-edytor-callout`), its
|
|
12
|
+
* title, then its content. A generic tag: only its attribute claims it back
|
|
13
|
+
* (`parse`), never a tag another kind may export.
|
|
14
|
+
*/
|
|
15
|
+
export declare const calloutHtml: (icon: string, content: string, children: string) => string;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A callout's icon (`callout.icon` in the delete contract): its `data.icon`,
|
|
3
|
+
* the view's default when it has none of its own, no icon when it is `''`.
|
|
4
|
+
* The view's default is the first rich text plugin's; the icon picker is the
|
|
5
|
+
* callout icons plugin's (`calloutIcons.svelte.ts`), when one is listed.
|
|
6
|
+
*/
|
|
7
|
+
import { escapeHtml } from '../../clipboard/serializeClipboardFragment.js';
|
|
8
|
+
/** A new callout's icon unless `createRichTextPlugin({ callout: { icon } })` names another. */
|
|
9
|
+
export const DEFAULT_CALLOUT_ICON = '💡';
|
|
10
|
+
/** Each view's default callout icon (the first rich text plugin listed sets it). */
|
|
11
|
+
export const calloutIcons = new WeakMap();
|
|
12
|
+
/** Each view's callout icon picker (the first callout icons plugin listed claims it). */
|
|
13
|
+
export const calloutPickers = new WeakMap();
|
|
14
|
+
/** The icon a callout of `view` with `data` shows: its own (`''`: none), else the view's default. */
|
|
15
|
+
export const iconOf = (data, view) => typeof data?.icon === 'string'
|
|
16
|
+
? data.icon
|
|
17
|
+
: ((view && calloutIcons.get(view)) ?? DEFAULT_CALLOUT_ICON);
|
|
18
|
+
/**
|
|
19
|
+
* A callout's HTML: a `div` naming its icon (`data-edytor-callout`), its
|
|
20
|
+
* title, then its content. A generic tag: only its attribute claims it back
|
|
21
|
+
* (`parse`), never a tag another kind may export.
|
|
22
|
+
*/
|
|
23
|
+
export const calloutHtml = (icon, content, children) => `<div data-edytor-callout="${escapeHtml(icon)}"><p>${content}</p>${children}</div>`;
|