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,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 = checkboxLabels.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>;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { Block } from '../../block/block.svelte.js';
|
|
2
|
+
/**
|
|
3
|
+
* Start the body of `block`, a container whose body shows and is empty
|
|
4
|
+
* (`body.hint`): a block of its default child kind as its first child, the
|
|
5
|
+
* caret in it. One command, one undo step (refused in a view that may not
|
|
6
|
+
* write). A body that has a child by now (a peer's) takes the caret in its
|
|
7
|
+
* first child instead. Answers the first child.
|
|
8
|
+
*/
|
|
9
|
+
export declare const openBody: (block: Block) => Block | undefined;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Start the body of `block`, a container whose body shows and is empty
|
|
3
|
+
* (`body.hint`): a block of its default child kind as its first child, the
|
|
4
|
+
* caret in it. One command, one undo step (refused in a view that may not
|
|
5
|
+
* write). A body that has a child by now (a peer's) takes the caret in its
|
|
6
|
+
* first child instead. Answers the first child.
|
|
7
|
+
*/
|
|
8
|
+
export const openBody = (block) => {
|
|
9
|
+
const { edytor } = block;
|
|
10
|
+
return edytor.dispatcher.run('openBody', () => {
|
|
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
|
+
edytor.dispatcher.caret(child?.firstText, 0);
|
|
14
|
+
return child ?? undefined;
|
|
15
|
+
});
|
|
16
|
+
};
|
|
@@ -0,0 +1,97 @@
|
|
|
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';
|
|
13
|
+
import type { Attachment } from 'svelte/attachments';
|
|
14
|
+
import type { Block } from '../../block/block.svelte.js';
|
|
15
|
+
import type { Edytor } from '../../edytor.svelte.js';
|
|
16
|
+
import { ChromeList } from '../list.svelte.js';
|
|
17
|
+
import type { Plugin } from '../../plugins.js';
|
|
18
|
+
/** The picker's choices unless `createCalloutIconsPlugin({ icons })` names others. */
|
|
19
|
+
export declare const CALLOUT_ICONS: readonly string[];
|
|
20
|
+
/** The choices on a row of the picker: the arrows up and down move by a row (`picker.columns`). */
|
|
21
|
+
export declare const ICON_COLUMNS = 8;
|
|
22
|
+
/**
|
|
23
|
+
* A view's callout icon picker: what a `callout.picker` snippet receives.
|
|
24
|
+
* The callout it is open on (`block`), the choices (`icons`) and the icon
|
|
25
|
+
* that callout shows (`current`); `set(icon)` and `remove()` write it and
|
|
26
|
+
* close, `close()` closes with nothing written. Put `{@attach picker.keys}`
|
|
27
|
+
* and `{@attach picker.popup}` on the picker's element (it takes the focus
|
|
28
|
+
* and the keys, names the keyboard's row and is published to the view's
|
|
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.
|
|
31
|
+
*/
|
|
32
|
+
export declare class CalloutIconPicker extends ChromeList {
|
|
33
|
+
#private;
|
|
34
|
+
/** The picker's choices. */
|
|
35
|
+
readonly icons: readonly string[];
|
|
36
|
+
/** The callout the picker is open on (its id), `null` when closed. */
|
|
37
|
+
target: string | null;
|
|
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,
|
|
41
|
+
/** The picker's choices. */
|
|
42
|
+
icons?: readonly string[]);
|
|
43
|
+
/** Whether the picker is open (reactive). */
|
|
44
|
+
get isOpen(): boolean;
|
|
45
|
+
/** The callout it is open on (reactive). */
|
|
46
|
+
get block(): Block | undefined;
|
|
47
|
+
/** The icon that callout shows (`''`: none; reactive). */
|
|
48
|
+
get current(): string | undefined;
|
|
49
|
+
/** The keyboard's rows: the icons, then Remove icon. */
|
|
50
|
+
protected get count(): number;
|
|
51
|
+
/** The view is readonly (reactive): the picker closes. */
|
|
52
|
+
get readonly(): boolean;
|
|
53
|
+
/** Open the picker on `block`, or close it when it is open there. */
|
|
54
|
+
toggle: (block: Block) => void;
|
|
55
|
+
/** Open the picker on the callout `block`, its icon the keyboard's row (refused in a view that may not write). */
|
|
56
|
+
open: (block: Block) => void;
|
|
57
|
+
/** Close the picker; with `keys` (by default), the editor takes the keys back, with its selection. */
|
|
58
|
+
close: (keys?: boolean) => void;
|
|
59
|
+
/** Write `icon` on the callout (one undo step), then close. */
|
|
60
|
+
set: (icon: string) => void;
|
|
61
|
+
/** Leave the callout without an icon (`data.icon` is `''`), then close. */
|
|
62
|
+
remove: () => void;
|
|
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>;
|
|
71
|
+
/**
|
|
72
|
+
* The picker's element (`{@attach picker.keys}`): it takes the focus as
|
|
73
|
+
* it opens and names the keyboard's row (`aria-activedescendant`). The
|
|
74
|
+
* arrows walk the rows (up and down by `ICON_COLUMNS`), Home and End
|
|
75
|
+
* reach the ends, Enter or Space picks, Escape and Tab close; no key
|
|
76
|
+
* reaches the page behind it. Focus leaving it closes it.
|
|
77
|
+
*/
|
|
78
|
+
keys: Attachment<HTMLElement>;
|
|
79
|
+
}
|
|
80
|
+
export type CalloutIconsOptions = {
|
|
81
|
+
/**
|
|
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).
|
|
86
|
+
*/
|
|
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;
|
|
@@ -0,0 +1,214 @@
|
|
|
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 { untrack } from 'svelte';
|
|
13
|
+
import { takeKeys } from '../../events/onFocus.js';
|
|
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. */
|
|
20
|
+
export const CALLOUT_ICONS = [
|
|
21
|
+
'💡',
|
|
22
|
+
'⚠️',
|
|
23
|
+
'❗',
|
|
24
|
+
'❓',
|
|
25
|
+
'ℹ️',
|
|
26
|
+
'✅',
|
|
27
|
+
'❌',
|
|
28
|
+
'📌',
|
|
29
|
+
'📝',
|
|
30
|
+
'📣',
|
|
31
|
+
'🔔',
|
|
32
|
+
'💬',
|
|
33
|
+
'🔥',
|
|
34
|
+
'⭐',
|
|
35
|
+
'✨',
|
|
36
|
+
'🚀',
|
|
37
|
+
'🎯',
|
|
38
|
+
'🎉',
|
|
39
|
+
'❤️',
|
|
40
|
+
'👍',
|
|
41
|
+
'👀',
|
|
42
|
+
'⏰',
|
|
43
|
+
'📅',
|
|
44
|
+
'📚',
|
|
45
|
+
'🧪',
|
|
46
|
+
'🐛',
|
|
47
|
+
'🛠️',
|
|
48
|
+
'🔒',
|
|
49
|
+
'🌱',
|
|
50
|
+
'🤔'
|
|
51
|
+
];
|
|
52
|
+
/** The choices on a row of the picker: the arrows up and down move by a row (`picker.columns`). */
|
|
53
|
+
export const ICON_COLUMNS = 8;
|
|
54
|
+
/**
|
|
55
|
+
* A view's callout icon picker: what a `callout.picker` snippet receives.
|
|
56
|
+
* The callout it is open on (`block`), the choices (`icons`) and the icon
|
|
57
|
+
* that callout shows (`current`); `set(icon)` and `remove()` write it and
|
|
58
|
+
* close, `close()` closes with nothing written. Put `{@attach picker.keys}`
|
|
59
|
+
* and `{@attach picker.popup}` on the picker's element (it takes the focus
|
|
60
|
+
* and the keys, names the keyboard's row and is published to the view's
|
|
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.
|
|
63
|
+
*/
|
|
64
|
+
export class CalloutIconPicker extends ChromeList {
|
|
65
|
+
icons;
|
|
66
|
+
/** The callout the picker is open on (its id), `null` when closed. */
|
|
67
|
+
target = $state(null);
|
|
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;
|
|
70
|
+
/**
|
|
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).
|
|
74
|
+
* @internal
|
|
75
|
+
*/
|
|
76
|
+
panel;
|
|
77
|
+
/** The selection the picker gives back when it closes. */
|
|
78
|
+
#before = null;
|
|
79
|
+
constructor(edytor,
|
|
80
|
+
/** The picker's choices. */
|
|
81
|
+
icons = CALLOUT_ICONS) {
|
|
82
|
+
super(edytor, 'callout-icons', 'menu');
|
|
83
|
+
this.icons = icons;
|
|
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));
|
|
91
|
+
}
|
|
92
|
+
/** Whether the picker is open (reactive). */
|
|
93
|
+
get isOpen() {
|
|
94
|
+
return this.target !== null;
|
|
95
|
+
}
|
|
96
|
+
/** The callout it is open on (reactive). */
|
|
97
|
+
get block() {
|
|
98
|
+
const block = this.target ? this.edytor.idToBlock.get(this.target) : undefined;
|
|
99
|
+
return block?.isInTree ? block : undefined;
|
|
100
|
+
}
|
|
101
|
+
/** The icon that callout shows (`''`: none; reactive). */
|
|
102
|
+
get current() {
|
|
103
|
+
const block = this.block;
|
|
104
|
+
return block ? iconOf(block.data, this.edytor) : undefined;
|
|
105
|
+
}
|
|
106
|
+
/** The keyboard's rows: the icons, then Remove icon. */
|
|
107
|
+
get count() {
|
|
108
|
+
return this.icons.length + 1;
|
|
109
|
+
}
|
|
110
|
+
/** The view is readonly (reactive): the picker closes. */
|
|
111
|
+
get readonly() {
|
|
112
|
+
return this.edytor.readonly;
|
|
113
|
+
}
|
|
114
|
+
/** Open the picker on `block`, or close it when it is open there. */
|
|
115
|
+
toggle = (block) => (this.target === block.id ? this.close() : this.open(block));
|
|
116
|
+
/** Open the picker on the callout `block`, its icon the keyboard's row (refused in a view that may not write). */
|
|
117
|
+
open = (block) => {
|
|
118
|
+
if (!this.edytor.dispatcher.permits() || !block.isInTree)
|
|
119
|
+
return;
|
|
120
|
+
const at = this.icons.indexOf(iconOf(block.data, this.edytor));
|
|
121
|
+
this.index = at === -1 ? 0 : at;
|
|
122
|
+
this.#before = null;
|
|
123
|
+
this.target = block.id;
|
|
124
|
+
this.edytor.overlay.invalidate();
|
|
125
|
+
};
|
|
126
|
+
/** Close the picker; with `keys` (by default), the editor takes the keys back, with its selection. */
|
|
127
|
+
close = (keys = true) => {
|
|
128
|
+
if (this.target === null)
|
|
129
|
+
return;
|
|
130
|
+
const before = this.#before;
|
|
131
|
+
this.target = null;
|
|
132
|
+
this.panel.box = null;
|
|
133
|
+
this.#before = null;
|
|
134
|
+
this.edytor.overlay.invalidate();
|
|
135
|
+
if (!keys)
|
|
136
|
+
return;
|
|
137
|
+
if (before && before.kind !== 'none')
|
|
138
|
+
this.edytor.selection.select(before);
|
|
139
|
+
takeKeys(this.edytor);
|
|
140
|
+
};
|
|
141
|
+
/** Write `icon` on the callout (one undo step), then close. */
|
|
142
|
+
set = (icon) => {
|
|
143
|
+
const block = this.block;
|
|
144
|
+
if (block && block.data.icon !== icon)
|
|
145
|
+
block.edytor.patchData(block.id, [{ path: ['icon'], value: icon }]);
|
|
146
|
+
this.close();
|
|
147
|
+
};
|
|
148
|
+
/** Leave the callout without an icon (`data.icon` is `''`), then close. */
|
|
149
|
+
remove = () => this.set('');
|
|
150
|
+
/** Pick row `index`: its icon, or Remove icon (`icons.length`). */
|
|
151
|
+
pick = (index) => {
|
|
152
|
+
const icon = this.icons[index];
|
|
153
|
+
if (icon === undefined)
|
|
154
|
+
this.remove();
|
|
155
|
+
else
|
|
156
|
+
this.set(icon);
|
|
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
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* The picker's element (`{@attach picker.keys}`): it takes the focus as
|
|
169
|
+
* it opens and names the keyboard's row (`aria-activedescendant`). The
|
|
170
|
+
* arrows walk the rows (up and down by `ICON_COLUMNS`), Home and End
|
|
171
|
+
* reach the ends, Enter or Space picks, Escape and Tab close; no key
|
|
172
|
+
* reaches the page behind it. Focus leaving it closes it.
|
|
173
|
+
*/
|
|
174
|
+
keys = (node) => untrack(() => this.#keys(node));
|
|
175
|
+
#keys = (node) => {
|
|
176
|
+
const keydown = (event) => {
|
|
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 });
|
|
188
|
+
};
|
|
189
|
+
// Focus leaving for somewhere else closes it (the window going to the background does not).
|
|
190
|
+
node.tabIndex = -1;
|
|
191
|
+
const off2 = listen(node, 'focusout', this.panel.blurred);
|
|
192
|
+
// It gives back the editor's selection as it is now: a block menu that
|
|
193
|
+
// opened it gave its caret back first.
|
|
194
|
+
this.#before ??= this.edytor.selection.value;
|
|
195
|
+
const off = holdKeys(node, keydown, () => this.rowId(this.index));
|
|
196
|
+
return all(off, off2);
|
|
197
|
+
};
|
|
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>`;
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The controls inside the rich text kinds (a to-do's checkbox, a callout's
|
|
3
|
+
* icon, an empty body's hint): the package's markup by default, the app's
|
|
4
|
+
* snippet when `createRichTextPlugin` names one. Each snippet receives a
|
|
5
|
+
* payload: the state, the action (written through the document) and the
|
|
6
|
+
* words the markup reads, and the control's attachment (its marker, its
|
|
7
|
+
* ARIA, its press and click), so custom markup keeps the keys, the
|
|
8
|
+
* accessibility and what the editor reads of it.
|
|
9
|
+
*/
|
|
10
|
+
import type { Snippet } from 'svelte';
|
|
11
|
+
import type { Attachment } from 'svelte/attachments';
|
|
12
|
+
import type { Block } from '../../block/block.svelte.js';
|
|
13
|
+
import type { Edytor } from '../../edytor.svelte.js';
|
|
14
|
+
import type { BlockView } from '../../plugins.js';
|
|
15
|
+
/** What a to-do's `checkbox` snippet receives. */
|
|
16
|
+
export type TodoCheckboxPayload = {
|
|
17
|
+
/** The to-do; `undefined` in a suggestion's preview (its box writes nothing). */
|
|
18
|
+
readonly block: Block | undefined;
|
|
19
|
+
/** It is checked: its `data.checked` (reactive). */
|
|
20
|
+
readonly checked: boolean;
|
|
21
|
+
/** The checkbox's accessible name (the view's `richText.checkbox`). */
|
|
22
|
+
readonly label: string;
|
|
23
|
+
/** Check or uncheck it: one data write, refused in a readonly view. */
|
|
24
|
+
toggle: () => void;
|
|
25
|
+
/**
|
|
26
|
+
* The control's attachment (`{@attach box.control}`), on an `input
|
|
27
|
+
* type="checkbox"` (give it `checked={box.checked}`) or a `button` (it
|
|
28
|
+
* gets `role="checkbox"` and `aria-checked`): its marker
|
|
29
|
+
* (`data-edytor-todo-checkbox`), `contenteditable="false"`, its
|
|
30
|
+
* `aria-label`, a press that keeps the editor's selection and a click
|
|
31
|
+
* that toggles the to-do.
|
|
32
|
+
*/
|
|
33
|
+
readonly control: Attachment<HTMLElement>;
|
|
34
|
+
};
|
|
35
|
+
/** What a callout's `calloutIcon` snippet receives. */
|
|
36
|
+
export type CalloutIconPayload = {
|
|
37
|
+
/** The callout; `undefined` in a suggestion's preview. */
|
|
38
|
+
readonly block: Block | undefined;
|
|
39
|
+
/** Its icon: its `data.icon`, the view's default without one, `''` for none (reactive). */
|
|
40
|
+
readonly icon: string;
|
|
41
|
+
/**
|
|
42
|
+
* The icon opens the view's picker: an editable view listing a picker,
|
|
43
|
+
* not a suggestion's preview. Draw a `button` then, else the icon alone.
|
|
44
|
+
*/
|
|
45
|
+
readonly editable: boolean;
|
|
46
|
+
/** The picker is open on this callout (reactive). */
|
|
47
|
+
readonly expanded: boolean;
|
|
48
|
+
/** The button's accessible name: Change icon, or Add icon over an empty slot. */
|
|
49
|
+
readonly label: string;
|
|
50
|
+
/** Open the view's picker on this callout, or close it. */
|
|
51
|
+
toggle: () => void;
|
|
52
|
+
/**
|
|
53
|
+
* The icon's attachment (`{@attach icon.control}`): its marker
|
|
54
|
+
* (`data-edytor-callout-icon`, which the picker opens under), `data-empty`
|
|
55
|
+
* without an icon, `contenteditable="false"`; editable, its
|
|
56
|
+
* `aria-label`, `aria-haspopup`, `aria-expanded`, `aria-controls`, a
|
|
57
|
+
* press that keeps the editor's selection and a click that toggles the
|
|
58
|
+
* picker; else `aria-hidden`.
|
|
59
|
+
*/
|
|
60
|
+
readonly control: Attachment<HTMLElement>;
|
|
61
|
+
};
|
|
62
|
+
/** What the `emptyBody` snippet of an open toggle's or a callout's empty body receives. */
|
|
63
|
+
export type EmptyBodyPayload = {
|
|
64
|
+
/** The toggle or callout. */
|
|
65
|
+
readonly block: Block;
|
|
66
|
+
/** Which kind's body. */
|
|
67
|
+
readonly kind: 'toggle' | 'callout';
|
|
68
|
+
/** The hint (the view's `richText.emptyBody`). */
|
|
69
|
+
readonly label: string;
|
|
70
|
+
/** Start the body: a first child, the caret in it (one command, one undo step). */
|
|
71
|
+
open: () => void;
|
|
72
|
+
/**
|
|
73
|
+
* The hint's attachment (`{@attach hint.control}`): its marker
|
|
74
|
+
* (`data-edytor-empty-body`, where a dragged block drops inside),
|
|
75
|
+
* `contenteditable="false"`, `aria-hidden` (Enter at the end of the
|
|
76
|
+
* header is the keyboard's way in) and a click that starts the body.
|
|
77
|
+
*/
|
|
78
|
+
readonly control: Attachment<HTMLElement>;
|
|
79
|
+
};
|
|
80
|
+
/** `createRichTextPlugin`'s control snippets. */
|
|
81
|
+
export type RichTextControls = {
|
|
82
|
+
checkbox?: Snippet<[TodoCheckboxPayload]>;
|
|
83
|
+
calloutIcon?: Snippet<[CalloutIconPayload]>;
|
|
84
|
+
emptyBody?: Snippet<[EmptyBodyPayload]>;
|
|
85
|
+
};
|
|
86
|
+
/** Each view's control snippets (the first rich text plugin listed sets them). */
|
|
87
|
+
export declare const richTextControls: WeakMap<object, RichTextControls>;
|
|
88
|
+
/** Check or uncheck a to-do: one key patched, so a peer's concurrent edit of another key is kept. */
|
|
89
|
+
export declare const toggleTodo: (block: Block) => import("../../index.js").OpResult;
|
|
90
|
+
/**
|
|
91
|
+
* A to-do's checkbox in `view` (a suggestion's preview included: no
|
|
92
|
+
* handle, no write), named in its labels.
|
|
93
|
+
*/
|
|
94
|
+
export declare const todoCheckbox: (view: Edytor, block: () => BlockView<{
|
|
95
|
+
checked?: boolean;
|
|
96
|
+
}>) => TodoCheckboxPayload;
|
|
97
|
+
/**
|
|
98
|
+
* A callout's icon in `view` (`callout.icon`): its `data.icon`, the view's
|
|
99
|
+
* default without one, none when it is `''`; a button opening the view's
|
|
100
|
+
* picker where it may be picked (an editable view listing a picker, not a
|
|
101
|
+
* suggestion's preview), else the icon alone.
|
|
102
|
+
*/
|
|
103
|
+
export declare const calloutIcon: (view: Edytor, block: () => BlockView<{
|
|
104
|
+
icon?: string;
|
|
105
|
+
}>) => CalloutIconPayload;
|
|
106
|
+
/**
|
|
107
|
+
* The hint of `block`'s empty body in `view` (`body.hint`), or `null` where
|
|
108
|
+
* none shows: a readonly view, a suggestion's preview (no handle).
|
|
109
|
+
*/
|
|
110
|
+
export declare const emptyBody: (view: Edytor, block: BlockView, kind: "toggle" | "callout") => EmptyBodyPayload | null;
|