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,14 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* A code block's header (`code.language`): the block's language, a button
|
|
3
3
|
* that opens the view's language list (`LanguageMenu`) and Copy. One per
|
|
4
|
-
* rendered code block
|
|
5
|
-
*
|
|
6
|
-
* attachment (`button`), so a custom header keeps the keys and the ARIA.
|
|
4
|
+
* rendered code block with the app's `header` snippet, whose attachment
|
|
5
|
+
* (`button`) gives its markup the keys and the ARIA.
|
|
7
6
|
*/
|
|
8
7
|
import { untrack } from 'svelte';
|
|
9
8
|
import { Text } from '../../text/text.svelte.js';
|
|
10
9
|
import { attribute } from '../chrome.js';
|
|
11
|
-
import {
|
|
10
|
+
import { languageOf } from './languages.js';
|
|
11
|
+
import { all, listen } from '../../utils/listen.js';
|
|
12
12
|
/** How long Copy reads Copied after a copy, in milliseconds. */
|
|
13
13
|
const COPIED_FOR = 1200;
|
|
14
14
|
/** A code block's text: its lines, joined by newlines. */
|
|
@@ -17,10 +17,9 @@ const codeText = (code) => code.children
|
|
|
17
17
|
.join('\n');
|
|
18
18
|
/**
|
|
19
19
|
* What a code plugin's `header` snippet receives: the code block's
|
|
20
|
-
* language (`language`, its id; `label`, as shown), the
|
|
21
|
-
* plugin lists (`languages`), whether the language may be changed here
|
|
20
|
+
* language (`language`, its id; `label`, as shown), whether the language may be changed here
|
|
22
21
|
* (`editable`: an editable view, not a suggestion's preview), the list's
|
|
23
|
-
* state (`expanded`), the actions (`
|
|
22
|
+
* state (`expanded`), the actions (`toggle`, the list's own `pick`, `copy`, and
|
|
24
23
|
* `copied` for a moment after a copy) and the plugin's `labels`. Put
|
|
25
24
|
* `{@attach header.button}` on the element that opens the language list:
|
|
26
25
|
* it opens it on a click, ArrowDown or ArrowUp, Escape gives the keys back
|
|
@@ -63,19 +62,7 @@ export class CodeHeader {
|
|
|
63
62
|
/** The language's label; a language the plugin does not list shows its id (reactive). */
|
|
64
63
|
get label() {
|
|
65
64
|
const language = this.language;
|
|
66
|
-
|
|
67
|
-
return row ? languageLabel(row, this.settings) : language;
|
|
68
|
-
}
|
|
69
|
-
/** The languages the plugin lists, labeled, in order. */
|
|
70
|
-
get languages() {
|
|
71
|
-
return this.settings.languages.map((row) => ({
|
|
72
|
-
id: row.id,
|
|
73
|
-
label: languageLabel(row, this.settings)
|
|
74
|
-
}));
|
|
75
|
-
}
|
|
76
|
-
/** The plugin's words (`language`, `copy`, `copied`, …). */
|
|
77
|
-
get labels() {
|
|
78
|
-
return this.settings.labels;
|
|
65
|
+
return this.settings.languages.find((row) => row.id === language)?.label ?? language;
|
|
79
66
|
}
|
|
80
67
|
/** The view is readonly (reactive). */
|
|
81
68
|
get readonly() {
|
|
@@ -90,13 +77,6 @@ export class CodeHeader {
|
|
|
90
77
|
const block = this.view().handle;
|
|
91
78
|
return Boolean(block && this.menu?.isOpenFor(block.id));
|
|
92
79
|
}
|
|
93
|
-
/** Set the block's language (one undo step); nothing where it is not `editable`. */
|
|
94
|
-
setLanguage = (id) => {
|
|
95
|
-
const block = this.view().handle;
|
|
96
|
-
if (!this.editable || !block?.isInTree || id === this.language)
|
|
97
|
-
return;
|
|
98
|
-
block.data.language = id;
|
|
99
|
-
};
|
|
100
80
|
/**
|
|
101
81
|
* Open the language list under the header's button, or close it (`keys`:
|
|
102
82
|
* the keyboard opened it, so the keys go back to the button after).
|
|
@@ -129,7 +109,6 @@ export class CodeHeader {
|
|
|
129
109
|
button = (node) => untrack(() => {
|
|
130
110
|
node.setAttribute('data-edytor-code-language-button', '');
|
|
131
111
|
node.setAttribute('aria-haspopup', 'listbox');
|
|
132
|
-
const named = node.hasAttribute('aria-label') || node.hasAttribute('aria-labelledby');
|
|
133
112
|
const mousedown = (event) => event.preventDefault();
|
|
134
113
|
// A click from Enter or Space has no pointer (`detail` 0): the keys opened it.
|
|
135
114
|
const click = (event) => this.toggle(event.detail === 0);
|
|
@@ -144,21 +123,15 @@ export class CodeHeader {
|
|
|
144
123
|
return;
|
|
145
124
|
event.preventDefault();
|
|
146
125
|
};
|
|
147
|
-
node
|
|
148
|
-
node
|
|
149
|
-
node
|
|
126
|
+
const off = listen(node, 'mousedown', mousedown);
|
|
127
|
+
const off2 = listen(node, 'click', click);
|
|
128
|
+
const off3 = listen(node, 'keydown', keydown);
|
|
150
129
|
$effect(() => {
|
|
151
130
|
const expanded = this.expanded;
|
|
152
131
|
attribute(node, 'aria-expanded', String(expanded));
|
|
153
132
|
attribute(node, 'aria-controls', expanded ? this.menu?.listId : undefined);
|
|
154
|
-
if (!named)
|
|
155
|
-
attribute(node, 'aria-label', `${this.labels.language}: ${this.label}`);
|
|
156
133
|
});
|
|
157
|
-
return (
|
|
158
|
-
node.removeEventListener('mousedown', mousedown);
|
|
159
|
-
node.removeEventListener('click', click);
|
|
160
|
-
node.removeEventListener('keydown', keydown);
|
|
161
|
-
};
|
|
134
|
+
return all(off, off2, off3);
|
|
162
135
|
});
|
|
163
136
|
/**
|
|
164
137
|
* The header is gone: Copied's timer goes with it.
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import type { Attachment } from 'svelte/attachments';
|
|
2
2
|
import type { Edytor } from '../../edytor.svelte.js';
|
|
3
|
-
import type
|
|
4
|
-
import {
|
|
3
|
+
import { type MenuItemPayload } from '../chrome.js';
|
|
4
|
+
import { ChromeList } from '../list.svelte.js';
|
|
5
5
|
/** A row of the language list: a language id and its label as shown. */
|
|
6
6
|
export type LanguageRow = {
|
|
7
7
|
id: string;
|
|
8
8
|
label: string;
|
|
9
9
|
};
|
|
10
10
|
/**
|
|
11
|
-
* One row of the language list, for
|
|
11
|
+
* One row of the language list, for your `menu`: the row shape every
|
|
12
12
|
* menu shares (`item` is the language, `run` picks it), and whether it is
|
|
13
|
-
* the block's own language (`current`, the
|
|
13
|
+
* the block's own language (`current`, the demo's ✓).
|
|
14
14
|
*/
|
|
15
15
|
export type LanguageMenuItem = MenuItemPayload<LanguageRow> & {
|
|
16
16
|
/** It is the block's language. */
|
|
@@ -26,13 +26,13 @@ export type LanguageMenuItem = MenuItemPayload<LanguageRow> & {
|
|
|
26
26
|
* its button; opened by a press, to the editor. A press or a focus outside
|
|
27
27
|
* closes it, as readonly does.
|
|
28
28
|
*
|
|
29
|
-
* What a
|
|
29
|
+
* What a `menu` snippet receives: the open list (`open`), the query
|
|
30
30
|
* and its rows (`query`, `items`, each a `MenuItemPayload`), the keyboard's
|
|
31
|
-
* row (`index`), `search`, `pick` and `close`,
|
|
32
|
-
* the attachments that
|
|
33
|
-
* search field, `popup` on the list, `option(index)`
|
|
31
|
+
* row (`index`), `search`, `pick` and `close`, and
|
|
32
|
+
* the attachments that give it the keys and the ARIA: `keys` on the
|
|
33
|
+
* search field, `popup` on the list, `option(index)` on each row.
|
|
34
34
|
*/
|
|
35
|
-
export declare class LanguageMenu {
|
|
35
|
+
export declare class LanguageMenu extends ChromeList {
|
|
36
36
|
#private;
|
|
37
37
|
/** The code block whose list is open, and whether the keys opened it (reactive). */
|
|
38
38
|
open: {
|
|
@@ -41,33 +41,25 @@ export declare class LanguageMenu {
|
|
|
41
41
|
} | null;
|
|
42
42
|
/** The search field's text. */
|
|
43
43
|
query: string;
|
|
44
|
-
/** The highlighted row, in `rows`. */
|
|
45
|
-
index: number;
|
|
46
|
-
/** The plugin's words (`language`, `search`, `noResults`, …). */
|
|
47
|
-
get labels(): CodeLabels;
|
|
48
44
|
/** The view is readonly (reactive): the list closes. */
|
|
49
45
|
get readonly(): boolean;
|
|
50
46
|
/** The open block's language id. */
|
|
51
47
|
get current(): string | null;
|
|
52
48
|
/** The rows the query keeps: a language the plugin does not list first (the block's own), then the list. */
|
|
53
|
-
get rows(): LanguageRow[];
|
|
49
|
+
get rows(): readonly LanguageRow[];
|
|
54
50
|
/**
|
|
55
|
-
* The rows for
|
|
51
|
+
* The rows for your `menu`: each the row shape every menu shares
|
|
56
52
|
* (`run` picks it, `select` highlights it, `option` its attributes), and
|
|
57
53
|
* whether it is the block's language (`current`).
|
|
58
54
|
*/
|
|
59
55
|
get items(): LanguageMenuItem[];
|
|
56
|
+
protected get count(): number;
|
|
60
57
|
/** Whether `block`'s list is open. */
|
|
61
58
|
isOpenFor: (block: string) => boolean;
|
|
62
|
-
/** The list's and its rows' element ids (page-unique). */
|
|
63
|
-
get listId(): string;
|
|
64
|
-
rowId: (row: LanguageRow) => string;
|
|
65
59
|
/** Open `block`'s list (`keys`: the keyboard opened it), or close it when it is open. */
|
|
66
60
|
toggle: (block: string, keys: boolean) => void;
|
|
67
61
|
/** A new query: the first row it keeps is highlighted. */
|
|
68
62
|
search: (query: string) => void;
|
|
69
|
-
/** Move the highlighted row by `step`, around the ends. */
|
|
70
|
-
move: (step: number) => void;
|
|
71
63
|
/** Pick `row` (the highlighted one): the block's language, one undo step; the list closes. */
|
|
72
64
|
pick: (row?: LanguageRow | undefined) => void;
|
|
73
65
|
/**
|
|
@@ -76,12 +68,6 @@ export declare class LanguageMenu {
|
|
|
76
68
|
* focus put them (`null`).
|
|
77
69
|
*/
|
|
78
70
|
close: (keys?: "button" | "editor" | null) => void;
|
|
79
|
-
/**
|
|
80
|
-
* The attributes of the row at `index`: spread them on its element
|
|
81
|
-
* (`{...menu.option(index)}`). Its id, `option` role, `aria-selected` and
|
|
82
|
-
* `data-selected` for the highlighted row, which scrolls into view.
|
|
83
|
-
*/
|
|
84
|
-
option: (index: number) => OptionAttributes;
|
|
85
71
|
/**
|
|
86
72
|
* The search field (`{@attach menu.keys}`): it takes the focus as the
|
|
87
73
|
* list opens and is its `combobox` (unless it has a role), naming the
|
|
@@ -93,12 +79,6 @@ export declare class LanguageMenu {
|
|
|
93
79
|
* it.
|
|
94
80
|
*/
|
|
95
81
|
keys: Attachment<HTMLElement>;
|
|
96
|
-
/**
|
|
97
|
-
* The list (`{@attach menu.popup}`): its id, `listbox` role and name
|
|
98
|
-
* unless it has its own, presses that keep the field's focus, and its
|
|
99
|
-
* publication to the view's root (`edytor.popups`) while it is in the page.
|
|
100
|
-
*/
|
|
101
|
-
popup: Attachment<HTMLElement>;
|
|
102
82
|
}
|
|
103
83
|
/** Each view's language list (the first code plugin listed owns it). */
|
|
104
84
|
export declare const languageMenus: WeakMap<Edytor, LanguageMenu>;
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { untrack } from 'svelte';
|
|
2
2
|
import { takeKeys } from '../../events/onFocus.js';
|
|
3
|
-
import { attribute
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
|
|
3
|
+
import { attribute } from '../chrome.js';
|
|
4
|
+
import { ChromeList, holdKeys } from '../list.svelte.js';
|
|
5
|
+
import { Anchored } from '../anchored.svelte.js';
|
|
6
|
+
import { languageOf } from './languages.js';
|
|
7
|
+
import { all, listen } from '../../utils/listen.js';
|
|
7
8
|
/**
|
|
8
9
|
* One view's code language list (Notion's): the header's language button
|
|
9
10
|
* opens it in the overlay under the button, a search field over the
|
|
@@ -14,38 +15,30 @@ const HOST = '[data-edytor-code-language-host]';
|
|
|
14
15
|
* its button; opened by a press, to the editor. A press or a focus outside
|
|
15
16
|
* closes it, as readonly does.
|
|
16
17
|
*
|
|
17
|
-
* What a
|
|
18
|
+
* What a `menu` snippet receives: the open list (`open`), the query
|
|
18
19
|
* and its rows (`query`, `items`, each a `MenuItemPayload`), the keyboard's
|
|
19
|
-
* row (`index`), `search`, `pick` and `close`,
|
|
20
|
-
* the attachments that
|
|
21
|
-
* search field, `popup` on the list, `option(index)`
|
|
20
|
+
* row (`index`), `search`, `pick` and `close`, and
|
|
21
|
+
* the attachments that give it the keys and the ARIA: `keys` on the
|
|
22
|
+
* search field, `popup` on the list, `option(index)` on each row.
|
|
22
23
|
*/
|
|
23
|
-
export class LanguageMenu {
|
|
24
|
-
edytor;
|
|
24
|
+
export class LanguageMenu extends ChromeList {
|
|
25
25
|
settings;
|
|
26
26
|
/** The code block whose list is open, and whether the keys opened it (reactive). */
|
|
27
27
|
open = $state.raw(null);
|
|
28
28
|
/** The search field's text. */
|
|
29
29
|
query = $state('');
|
|
30
|
-
/** The highlighted row, in `rows`. */
|
|
31
|
-
index = $state(0);
|
|
32
30
|
/**
|
|
33
|
-
* The
|
|
31
|
+
* The list's panel under its button: its place, and what closes it.
|
|
34
32
|
* @internal
|
|
35
33
|
*/
|
|
36
|
-
|
|
34
|
+
panel;
|
|
37
35
|
/** @internal */
|
|
38
|
-
constructor(
|
|
39
|
-
/** @internal */
|
|
40
|
-
edytor,
|
|
36
|
+
constructor(edytor,
|
|
41
37
|
/** @internal */
|
|
42
38
|
settings) {
|
|
43
|
-
|
|
39
|
+
super(edytor, 'code-languages', 'listbox');
|
|
44
40
|
this.settings = settings;
|
|
45
|
-
|
|
46
|
-
/** The plugin's words (`language`, `search`, `noResults`, …). */
|
|
47
|
-
get labels() {
|
|
48
|
-
return this.settings.labels;
|
|
41
|
+
this.panel = new Anchored(edytor, 'edytor-code-language-host', () => (this.open ? this.#button(this.open.block) : undefined), () => this.close());
|
|
49
42
|
}
|
|
50
43
|
/** The view is readonly (reactive): the list closes. */
|
|
51
44
|
get readonly() {
|
|
@@ -61,10 +54,7 @@ export class LanguageMenu {
|
|
|
61
54
|
/** The rows the query keeps: a language the plugin does not list first (the block's own), then the list. */
|
|
62
55
|
get rows() {
|
|
63
56
|
const current = this.current;
|
|
64
|
-
const listed = this.settings.languages
|
|
65
|
-
id: row.id,
|
|
66
|
-
label: languageLabel(row, this.settings)
|
|
67
|
-
}));
|
|
57
|
+
const listed = this.settings.languages;
|
|
68
58
|
const all = current && !listed.some((row) => row.id === current)
|
|
69
59
|
? [{ id: current, label: current }, ...listed]
|
|
70
60
|
: listed;
|
|
@@ -74,7 +64,7 @@ export class LanguageMenu {
|
|
|
74
64
|
return all.filter((row) => row.label.toLowerCase().includes(query) || row.id.toLowerCase().includes(query));
|
|
75
65
|
}
|
|
76
66
|
/**
|
|
77
|
-
* The rows for
|
|
67
|
+
* The rows for your `menu`: each the row shape every menu shares
|
|
78
68
|
* (`run` picks it, `select` highlights it, `option` its attributes), and
|
|
79
69
|
* whether it is the block's language (`current`).
|
|
80
70
|
*/
|
|
@@ -82,8 +72,7 @@ export class LanguageMenu {
|
|
|
82
72
|
const current = this.current;
|
|
83
73
|
return this.rows.map((row, index) => ({
|
|
84
74
|
item: row,
|
|
85
|
-
id: this.rowId(
|
|
86
|
-
label: row.label,
|
|
75
|
+
id: this.rowId(index),
|
|
87
76
|
selected: index === this.index,
|
|
88
77
|
current: row.id === current,
|
|
89
78
|
run: () => this.pick(row),
|
|
@@ -91,21 +80,11 @@ export class LanguageMenu {
|
|
|
91
80
|
option: this.option(index)
|
|
92
81
|
}));
|
|
93
82
|
}
|
|
83
|
+
get count() {
|
|
84
|
+
return this.rows.length;
|
|
85
|
+
}
|
|
94
86
|
/** Whether `block`'s list is open. */
|
|
95
87
|
isOpenFor = (block) => this.open?.block === block;
|
|
96
|
-
/** The list's and its rows' element ids (page-unique). */
|
|
97
|
-
get listId() {
|
|
98
|
-
return this.edytor.popups.idOf('code-languages');
|
|
99
|
-
}
|
|
100
|
-
rowId = (row) => this.edytor.popups.idOf(`code-language-${row.id}`);
|
|
101
|
-
/**
|
|
102
|
-
* Where the list stands: under its button, layer-relative.
|
|
103
|
-
* @internal
|
|
104
|
-
*/
|
|
105
|
-
get place() {
|
|
106
|
-
const box = this.box;
|
|
107
|
-
return this.open && box ? { left: box.x, top: box.y + box.height + 4 } : null;
|
|
108
|
-
}
|
|
109
88
|
/** Open `block`'s list (`keys`: the keyboard opened it), or close it when it is open. */
|
|
110
89
|
toggle = (block, keys) => {
|
|
111
90
|
if (this.isOpenFor(block))
|
|
@@ -122,12 +101,6 @@ export class LanguageMenu {
|
|
|
122
101
|
this.query = query;
|
|
123
102
|
this.index = 0;
|
|
124
103
|
};
|
|
125
|
-
/** Move the highlighted row by `step`, around the ends. */
|
|
126
|
-
move = (step) => {
|
|
127
|
-
const count = this.rows.length;
|
|
128
|
-
if (count)
|
|
129
|
-
this.index = (this.index + step + count) % count;
|
|
130
|
-
};
|
|
131
104
|
/** Pick `row` (the highlighted one): the block's language, one undo step; the list closes. */
|
|
132
105
|
pick = (row = this.rows[this.index]) => {
|
|
133
106
|
const open = this.open;
|
|
@@ -135,7 +108,7 @@ export class LanguageMenu {
|
|
|
135
108
|
return;
|
|
136
109
|
const block = this.edytor.idToBlock.get(open.block);
|
|
137
110
|
if (block?.isInTree && row.id !== this.current)
|
|
138
|
-
block.
|
|
111
|
+
block.edytor.patchData(block.id, [{ path: ['language'], value: row.id }]);
|
|
139
112
|
this.close(open.keys ? 'button' : 'editor');
|
|
140
113
|
};
|
|
141
114
|
/**
|
|
@@ -148,7 +121,7 @@ export class LanguageMenu {
|
|
|
148
121
|
if (!open)
|
|
149
122
|
return;
|
|
150
123
|
this.open = null;
|
|
151
|
-
this.box = null;
|
|
124
|
+
this.panel.box = null;
|
|
152
125
|
this.query = '';
|
|
153
126
|
this.edytor.overlay.invalidate();
|
|
154
127
|
if (keys === 'button')
|
|
@@ -158,16 +131,6 @@ export class LanguageMenu {
|
|
|
158
131
|
this.edytor.selection.display();
|
|
159
132
|
}
|
|
160
133
|
};
|
|
161
|
-
/**
|
|
162
|
-
* The attributes of the row at `index`: spread them on its element
|
|
163
|
-
* (`{...menu.option(index)}`). Its id, `option` role, `aria-selected` and
|
|
164
|
-
* `data-selected` for the highlighted row, which scrolls into view.
|
|
165
|
-
*/
|
|
166
|
-
option = (index) => {
|
|
167
|
-
const row = this.rows[index];
|
|
168
|
-
const id = row ? this.rowId(row) : this.edytor.popups.idOf(`code-language-${index}`);
|
|
169
|
-
return optionAttributes(id, 'option', index === this.index);
|
|
170
|
-
};
|
|
171
134
|
/**
|
|
172
135
|
* The search field (`{@attach menu.keys}`): it takes the focus as the
|
|
173
136
|
* list opens and is its `combobox` (unless it has a role), naming the
|
|
@@ -184,19 +147,9 @@ export class LanguageMenu {
|
|
|
184
147
|
node.setAttribute('aria-expanded', 'true');
|
|
185
148
|
node.setAttribute('aria-autocomplete', 'list');
|
|
186
149
|
attribute(node, 'aria-controls', this.listId);
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
node.addEventListener('focusout', this.#blurred);
|
|
191
|
-
node.focus({ preventScroll: true });
|
|
192
|
-
$effect(() => {
|
|
193
|
-
const row = this.rows[this.index];
|
|
194
|
-
attribute(node, 'aria-activedescendant', inPage(node, row && this.rowId(row)));
|
|
195
|
-
});
|
|
196
|
-
return () => {
|
|
197
|
-
node.removeEventListener('keydown', this.#keydown);
|
|
198
|
-
node.removeEventListener('focusout', this.#blurred);
|
|
199
|
-
};
|
|
150
|
+
const off2 = listen(node, 'focusout', this.panel.blurred);
|
|
151
|
+
const off = holdKeys(node, this.#keydown, () => this.rows.length ? this.rowId(this.index) : undefined);
|
|
152
|
+
return all(off, off2);
|
|
200
153
|
});
|
|
201
154
|
/** The search field's keys (`keys`). */
|
|
202
155
|
#keydown = (event) => {
|
|
@@ -214,24 +167,6 @@ export class LanguageMenu {
|
|
|
214
167
|
event.preventDefault();
|
|
215
168
|
event.stopPropagation();
|
|
216
169
|
};
|
|
217
|
-
/**
|
|
218
|
-
* The list (`{@attach menu.popup}`): its id, `listbox` role and name
|
|
219
|
-
* unless it has its own, presses that keep the field's focus, and its
|
|
220
|
-
* publication to the view's root (`edytor.popups`) while it is in the page.
|
|
221
|
-
*/
|
|
222
|
-
popup = (node) => untrack(() => {
|
|
223
|
-
node.id = this.listId;
|
|
224
|
-
if (!node.hasAttribute('role'))
|
|
225
|
-
node.setAttribute('role', 'listbox');
|
|
226
|
-
if (!node.hasAttribute('aria-label') && !node.hasAttribute('aria-labelledby'))
|
|
227
|
-
node.setAttribute('aria-label', this.labels.language);
|
|
228
|
-
node.addEventListener('mousedown', keepFocus);
|
|
229
|
-
this.edytor.popups.set('code-languages', { id: this.listId, haspopup: 'listbox' });
|
|
230
|
-
return () => {
|
|
231
|
-
node.removeEventListener('mousedown', keepFocus);
|
|
232
|
-
this.edytor.popups.set('code-languages', null);
|
|
233
|
-
};
|
|
234
|
-
});
|
|
235
170
|
/**
|
|
236
171
|
* The keys back to the editor from a language button (its Escape): the
|
|
237
172
|
* host takes the focus, the caret shown where the selection is.
|
|
@@ -239,44 +174,7 @@ export class LanguageMenu {
|
|
|
239
174
|
*/
|
|
240
175
|
release = () => {
|
|
241
176
|
this.close();
|
|
242
|
-
|
|
243
|
-
if (!node?.isConnected || this.edytor.destroyed)
|
|
244
|
-
return;
|
|
245
|
-
this.edytor.expectInternalFocus();
|
|
246
|
-
node.focus({ preventScroll: true });
|
|
247
|
-
this.edytor.selection.display();
|
|
248
|
-
};
|
|
249
|
-
/**
|
|
250
|
-
* The view turned readonly: the list closes.
|
|
251
|
-
* @internal
|
|
252
|
-
*/
|
|
253
|
-
lock = () => this.close();
|
|
254
|
-
/**
|
|
255
|
-
* A press anywhere (capture): one outside the list and its button closes it.
|
|
256
|
-
* @internal
|
|
257
|
-
*/
|
|
258
|
-
pressed = (event) => {
|
|
259
|
-
const open = this.open;
|
|
260
|
-
if (!open)
|
|
261
|
-
return;
|
|
262
|
-
const at = event.target;
|
|
263
|
-
if (at?.closest?.(HOST))
|
|
264
|
-
return;
|
|
265
|
-
if (at instanceof Node && this.#button(open.block)?.contains(at))
|
|
266
|
-
return;
|
|
267
|
-
this.close();
|
|
268
|
-
};
|
|
269
|
-
/** Focus left the field for somewhere outside the list and its button: it closes. */
|
|
270
|
-
#blurred = (event) => {
|
|
271
|
-
const open = this.open;
|
|
272
|
-
const to = event.relatedTarget;
|
|
273
|
-
// No new focus (the window went to the background): it stays.
|
|
274
|
-
if (!open || !(to instanceof Node))
|
|
275
|
-
return;
|
|
276
|
-
const host = event.currentTarget?.closest(HOST);
|
|
277
|
-
if (host?.contains(to) || this.#button(open.block)?.contains(to))
|
|
278
|
-
return;
|
|
279
|
-
this.close();
|
|
177
|
+
takeKeys(this.edytor);
|
|
280
178
|
};
|
|
281
179
|
/**
|
|
282
180
|
* The language button of the code block holding a caret (where Alt+F10
|
|
@@ -284,42 +182,14 @@ export class LanguageMenu {
|
|
|
284
182
|
* @internal
|
|
285
183
|
*/
|
|
286
184
|
buttonAtCaret = () => {
|
|
287
|
-
const {
|
|
185
|
+
const { startText } = this.edytor.selection.textRange();
|
|
186
|
+
const { isCollapsed } = this.edytor.selection.projection;
|
|
187
|
+
const startBlock = startText?.parent;
|
|
288
188
|
const code = startBlock?.type === 'codeLine' ? startBlock.parent : null;
|
|
289
189
|
if (!isCollapsed || !code || this.edytor.readonly)
|
|
290
190
|
return null;
|
|
291
191
|
return this.#button(code.id);
|
|
292
192
|
};
|
|
293
|
-
/**
|
|
294
|
-
* The overlay measure: the button's box; gone, the list closes.
|
|
295
|
-
* @internal
|
|
296
|
-
*/
|
|
297
|
-
measure = (host, origin) => {
|
|
298
|
-
const open = this.open;
|
|
299
|
-
const button = open ? this.#button(open.block) : null;
|
|
300
|
-
const rect = button?.isConnected ? button.getBoundingClientRect() : null;
|
|
301
|
-
const box = rect
|
|
302
|
-
? {
|
|
303
|
-
x: rect.left - origin.left,
|
|
304
|
-
y: rect.top - origin.top,
|
|
305
|
-
width: rect.width,
|
|
306
|
-
height: rect.height
|
|
307
|
-
}
|
|
308
|
-
: null;
|
|
309
|
-
return () => {
|
|
310
|
-
Object.assign(host.style, { position: 'absolute', left: '0px', top: '0px' });
|
|
311
|
-
if (open && !button)
|
|
312
|
-
return this.close();
|
|
313
|
-
const known = this.box;
|
|
314
|
-
if (!known ||
|
|
315
|
-
!box ||
|
|
316
|
-
known.x !== box.x ||
|
|
317
|
-
known.y !== box.y ||
|
|
318
|
-
known.width !== box.width ||
|
|
319
|
-
known.height !== box.height)
|
|
320
|
-
this.box = box;
|
|
321
|
-
};
|
|
322
|
-
};
|
|
323
193
|
/** The language button of code block `block`, in this view (the header's `button` attachment marks it). */
|
|
324
194
|
#button = (block) => this.edytor.idToBlock
|
|
325
195
|
.get(block)
|
|
@@ -7,8 +7,6 @@
|
|
|
7
7
|
*/
|
|
8
8
|
import { type LanguageDefinition } from '@tanstack/highlight/core';
|
|
9
9
|
import type { JSONText } from '../../utils/json.js';
|
|
10
|
-
import type { Edytor } from '../../edytor.svelte.js';
|
|
11
|
-
import { type CodeLabels, type PartialLabels } from '../../labels.js';
|
|
12
10
|
import type { Snippet } from 'svelte';
|
|
13
11
|
import type { CodeHeader } from './header.svelte.js';
|
|
14
12
|
import type { LanguageMenu } from './languageMenu.svelte.js';
|
|
@@ -40,28 +38,22 @@ export declare const loadCodeLanguage: (language: CodeLanguage) => Promise<void>
|
|
|
40
38
|
*/
|
|
41
39
|
export declare const tokenizeCode: (code: string, language: CodeLanguage | undefined) => JSONText[];
|
|
42
40
|
export type CodePluginOptions = {
|
|
43
|
-
/** The languages a code block may be in, in the header's order. Default `CODE_LANGUAGES`. */
|
|
41
|
+
/** The languages a code block may be in, in the header's order, with their names. Default `CODE_LANGUAGES`. */
|
|
44
42
|
languages?: readonly CodeLanguage[];
|
|
45
43
|
/** The language of a code block whose `data.language` is unset. Default `'javascript'`. */
|
|
46
44
|
defaultLanguage?: string;
|
|
47
45
|
/**
|
|
48
|
-
*
|
|
49
|
-
*
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
/** The slash menu's keywords of the code command (`block.code`), which replace its own. */
|
|
53
|
-
keywords?: Partial<Record<string, string[]>>;
|
|
54
|
-
/**
|
|
55
|
-
* Replace a code block's header (the language's button and Copy): it
|
|
56
|
-
* renders above the code, in the block's non-editable part. Put
|
|
57
|
-
* `{@attach header.button}` on the element that opens the language list.
|
|
46
|
+
* A code block's header (the language's button and Copy) and its words: it renders
|
|
47
|
+
* above the code, in the block's non-editable part (without it, no
|
|
48
|
+
* header). Put `{@attach header.button}` on the element that opens the
|
|
49
|
+
* language list.
|
|
58
50
|
*/
|
|
59
51
|
header?: Snippet<[CodeHeader]>;
|
|
60
52
|
/**
|
|
61
|
-
*
|
|
62
|
-
* `menu.open` is set. Put `{@attach menu.keys}` on its search field,
|
|
63
|
-
* `{@attach menu.popup}` on the list, and
|
|
64
|
-
* `menu.
|
|
53
|
+
* The language list: it renders under the header's button while
|
|
54
|
+
* `menu.open` is set (without it, nothing shows). Put `{@attach menu.keys}` on its search field,
|
|
55
|
+
* `{@attach menu.popup}` on the list, and `{@attach item.option}` on each
|
|
56
|
+
* row of `menu.items` (its highlight from `item.selected`). The first code
|
|
65
57
|
* plugin listed in a view owns its list.
|
|
66
58
|
*/
|
|
67
59
|
menu?: Snippet<[LanguageMenu]>;
|
|
@@ -69,17 +61,12 @@ export type CodePluginOptions = {
|
|
|
69
61
|
export type CodeSettings = {
|
|
70
62
|
languages: readonly CodeLanguage[];
|
|
71
63
|
defaultLanguage: string;
|
|
72
|
-
labels: CodeLabels;
|
|
73
64
|
/** The app's header markup, if any. */
|
|
74
65
|
header?: Snippet<[CodeHeader]>;
|
|
75
66
|
/** The app's language list markup, if any. */
|
|
76
67
|
menu?: Snippet<[LanguageMenu]>;
|
|
77
68
|
};
|
|
78
69
|
export declare const DEFAULT_CODE_SETTINGS: CodeSettings;
|
|
79
|
-
/** A language's label as shown: the labels' `languages` entry for its id, else its own. */
|
|
80
|
-
export declare const languageLabel: (language: CodeLanguage, { labels }: CodeSettings) => string;
|
|
81
|
-
/** Each view's code options, for its code blocks' header (which reads them through its view). */
|
|
82
|
-
export declare const codeSettings: WeakMap<Edytor, CodeSettings>;
|
|
83
70
|
/** A code block's language id: its `data.language`, else the default. */
|
|
84
71
|
export declare const languageOf: (data: {
|
|
85
72
|
language?: unknown;
|