@portabletext/editor 1.19.0 → 1.21.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/lib/_chunks-cjs/behavior.core.cjs +8 -68
- package/lib/_chunks-cjs/behavior.core.cjs.map +1 -1
- package/lib/_chunks-cjs/selector.get-text-before.cjs +11 -39
- package/lib/_chunks-cjs/selector.get-text-before.cjs.map +1 -1
- package/lib/_chunks-cjs/selector.is-selection-collapsed.cjs.map +1 -1
- package/lib/_chunks-cjs/util.get-block-start-point.cjs +30 -0
- package/lib/_chunks-cjs/util.get-block-start-point.cjs.map +1 -0
- package/lib/_chunks-cjs/util.is-empty-text-block.cjs +71 -0
- package/lib/_chunks-cjs/util.is-empty-text-block.cjs.map +1 -0
- package/lib/_chunks-cjs/util.is-keyed-segment.cjs +6 -0
- package/lib/_chunks-cjs/util.is-keyed-segment.cjs.map +1 -0
- package/lib/_chunks-es/behavior.core.js +7 -66
- package/lib/_chunks-es/behavior.core.js.map +1 -1
- package/lib/_chunks-es/selector.get-text-before.js +5 -31
- package/lib/_chunks-es/selector.get-text-before.js.map +1 -1
- package/lib/_chunks-es/selector.is-selection-collapsed.js.map +1 -1
- package/lib/_chunks-es/util.get-block-start-point.js +31 -0
- package/lib/_chunks-es/util.get-block-start-point.js.map +1 -0
- package/lib/_chunks-es/util.is-empty-text-block.js +73 -0
- package/lib/_chunks-es/util.is-empty-text-block.js.map +1 -0
- package/lib/_chunks-es/util.is-keyed-segment.js +7 -0
- package/lib/_chunks-es/util.is-keyed-segment.js.map +1 -0
- package/lib/behaviors/index.cjs +7 -7
- package/lib/behaviors/index.cjs.map +1 -1
- package/lib/behaviors/index.d.cts +179 -119
- package/lib/behaviors/index.d.ts +179 -119
- package/lib/behaviors/index.js +3 -2
- package/lib/behaviors/index.js.map +1 -1
- package/lib/index.cjs +72 -177
- package/lib/index.cjs.map +1 -1
- package/lib/index.d.cts +1061 -140
- package/lib/index.d.ts +1061 -140
- package/lib/index.js +72 -177
- package/lib/index.js.map +1 -1
- package/lib/selectors/index.cjs +73 -1
- package/lib/selectors/index.cjs.map +1 -1
- package/lib/selectors/index.d.cts +14 -0
- package/lib/selectors/index.d.ts +14 -0
- package/lib/selectors/index.js +73 -0
- package/lib/selectors/index.js.map +1 -1
- package/lib/utils/index.cjs +11 -0
- package/lib/utils/index.cjs.map +1 -0
- package/lib/utils/index.d.cts +87 -0
- package/lib/utils/index.d.ts +87 -0
- package/lib/utils/index.js +13 -0
- package/lib/utils/index.js.map +1 -0
- package/package.json +18 -14
- package/src/behavior-actions/behavior.action-utils.insert-block.ts +1 -1
- package/src/behavior-actions/behavior.action.insert-block-object.ts +1 -1
- package/src/behavior-actions/behavior.action.insert-inline-object.ts +1 -1
- package/src/behavior-actions/behavior.action.text-block.set.ts +1 -1
- package/src/behavior-actions/behavior.action.text-block.unset.ts +1 -1
- package/src/behavior-actions/behavior.actions.ts +5 -5
- package/src/behaviors/behavior.code-editor.ts +1 -1
- package/src/behaviors/behavior.core.block-objects.ts +2 -2
- package/src/behaviors/behavior.core.decorators.ts +1 -1
- package/src/behaviors/behavior.core.lists.ts +2 -2
- package/src/behaviors/behavior.emoji-picker.ts +1 -1
- package/src/behaviors/behavior.links.ts +1 -1
- package/src/behaviors/behavior.markdown.ts +2 -2
- package/src/behaviors/behavior.types.ts +52 -19
- package/src/behaviors/index.ts +1 -0
- package/src/editor/Editable.tsx +12 -12
- package/src/editor/PortableTextEditor.tsx +2 -2
- package/src/editor/components/DraggableBlock.tsx +2 -2
- package/src/editor/components/Element.tsx +20 -26
- package/src/editor/components/Leaf.tsx +1 -1
- package/src/editor/components/Synchronizer.tsx +1 -1
- package/src/editor/create-editor.ts +39 -20
- package/src/editor/create-slate-editor.tsx +5 -2
- package/src/editor/editor-machine.ts +72 -18
- package/src/editor/get-value.ts +2 -2
- package/src/editor/hooks/usePortableTextEditorSelection.tsx +1 -1
- package/src/editor/mutation-machine.ts +2 -2
- package/src/editor/nodes/DefaultObject.tsx +2 -2
- package/src/editor/plugins/create-with-event-listeners.ts +11 -3
- package/src/editor/plugins/createWithEditableAPI.ts +7 -7
- package/src/editor/plugins/createWithHotKeys.ts +2 -2
- package/src/editor/plugins/createWithInsertData.ts +7 -7
- package/src/editor/plugins/createWithMaxBlocks.ts +2 -2
- package/src/editor/plugins/createWithObjectKeys.ts +2 -2
- package/src/editor/plugins/createWithPatches.ts +10 -10
- package/src/editor/plugins/createWithPlaceholderBlock.ts +3 -3
- package/src/editor/plugins/createWithPortableTextBlockStyle.ts +1 -1
- package/src/editor/plugins/createWithPortableTextMarkModel.ts +4 -4
- package/src/editor/plugins/createWithPortableTextSelections.ts +6 -6
- package/src/editor/plugins/createWithSchemaTypes.ts +1 -1
- package/src/editor/plugins/createWithUndoRedo.ts +5 -5
- package/src/editor/plugins/createWithUtils.ts +2 -2
- package/src/editor/plugins/with-plugins.ts +1 -1
- package/src/editor/sync-machine.ts +8 -5
- package/src/index.ts +5 -1
- package/src/selectors/index.ts +2 -0
- package/src/selectors/selector.get-selection-text.test.ts +75 -0
- package/src/selectors/selector.get-selection-text.ts +3 -3
- package/src/selectors/selector.get-text-before.ts +7 -4
- package/src/selectors/selector.is-point-after-selection.ts +82 -0
- package/src/selectors/selector.is-point-before-selection.ts +82 -0
- package/src/utils/_exports/index.ts +1 -0
- package/src/utils/index.ts +11 -0
- package/src/{editor/utils/utils.block-offset.test.ts → utils/util.block-offset.test.ts} +1 -1
- package/src/{editor/utils/utils.block-offset.ts → utils/util.block-offset.ts} +23 -7
- package/src/{editor/utils/utils.get-start-point.ts → utils/util.get-block-start-point.ts} +5 -2
- package/src/utils/util.get-text-block-text.ts +8 -0
- package/src/{editor/utils/utils.ts → utils/util.is-empty-text-block.ts} +4 -5
- package/src/{editor/utils/utils.is-keyed-segment.ts → utils/util.is-keyed-segment.ts} +3 -0
- package/src/{editor/utils/utils.reverse-selection.ts → utils/util.reverse-selection.ts} +4 -1
- package/src/editor/nodes/index.ts +0 -189
- /package/src/{utils → internal-utils}/__tests__/dmpToOperations.test.ts +0 -0
- /package/src/{utils → internal-utils}/__tests__/operationToPatches.test.ts +0 -0
- /package/src/{utils → internal-utils}/__tests__/patchToOperations.test.ts +0 -0
- /package/src/{utils → internal-utils}/__tests__/ranges.test.ts +0 -0
- /package/src/{utils → internal-utils}/__tests__/valueNormalization.test.tsx +0 -0
- /package/src/{utils → internal-utils}/__tests__/values.test.ts +0 -0
- /package/src/{utils → internal-utils}/applyPatch.ts +0 -0
- /package/src/{utils → internal-utils}/debug.ts +0 -0
- /package/src/{utils → internal-utils}/is-hotkey.test.ts +0 -0
- /package/src/{utils → internal-utils}/is-hotkey.ts +0 -0
- /package/src/{utils → internal-utils}/looks-like-url.test.ts +0 -0
- /package/src/{utils → internal-utils}/looks-like-url.ts +0 -0
- /package/src/{utils → internal-utils}/operationToPatches.ts +0 -0
- /package/src/{utils → internal-utils}/paths.ts +0 -0
- /package/src/{utils → internal-utils}/ranges.ts +0 -0
- /package/src/{utils → internal-utils}/schema.ts +0 -0
- /package/src/{utils → internal-utils}/selection.ts +0 -0
- /package/src/{utils → internal-utils}/sibling-utils.ts +0 -0
- /package/src/{utils → internal-utils}/validateValue.ts +0 -0
- /package/src/{utils → internal-utils}/values.ts +0 -0
- /package/src/{utils → internal-utils}/weakMaps.ts +0 -0
- /package/src/{utils → internal-utils}/withChanges.ts +0 -0
- /package/src/{utils → internal-utils}/withUndoRedo.ts +0 -0
- /package/src/{utils → internal-utils}/withoutPatching.ts +0 -0
package/lib/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Schema } from "@sanity/schema";
|
|
2
2
|
import { defineType, defineField, isKeySegment, isPortableTextTextBlock, isPortableTextSpan as isPortableTextSpan$1, isPortableTextListBlock } from "@sanity/types";
|
|
3
3
|
import startCase from "lodash.startcase";
|
|
4
|
-
import { jsx, Fragment
|
|
4
|
+
import { jsxs, jsx, Fragment } from "react/jsx-runtime";
|
|
5
5
|
import { useSelector, useActorRef } from "@xstate/react";
|
|
6
6
|
import isEqual from "lodash/isEqual.js";
|
|
7
7
|
import noop from "lodash/noop.js";
|
|
@@ -10,7 +10,6 @@ import { Editor, Element as Element$1, Range, Point, Text, Path, Transforms, Ope
|
|
|
10
10
|
import { useSlateStatic, ReactEditor, useSelected, withReact, Slate, useSlate, Editable } from "slate-react";
|
|
11
11
|
import debug$k from "debug";
|
|
12
12
|
import { c } from "react-compiler-runtime";
|
|
13
|
-
import { styled } from "styled-components";
|
|
14
13
|
import uniq from "lodash/uniq.js";
|
|
15
14
|
import { Subject } from "rxjs";
|
|
16
15
|
import { useEffectEvent } from "use-effect-event";
|
|
@@ -22,7 +21,8 @@ import get from "lodash/get.js";
|
|
|
22
21
|
import isUndefined from "lodash/isUndefined.js";
|
|
23
22
|
import omitBy from "lodash/omitBy.js";
|
|
24
23
|
import { createGuards } from "./_chunks-es/selector.is-selection-collapsed.js";
|
|
25
|
-
import { blockOffsetToSpanSelectionPoint
|
|
24
|
+
import { blockOffsetToSpanSelectionPoint } from "./_chunks-es/util.is-empty-text-block.js";
|
|
25
|
+
import { coreBehaviors, isCustomBehaviorEvent, isHotkey } from "./_chunks-es/behavior.core.js";
|
|
26
26
|
import getRandomValues from "get-random-values-esm";
|
|
27
27
|
import { htmlToBlocks, normalizeBlock } from "@sanity/block-tools";
|
|
28
28
|
function createEditorSchema(portableTextType) {
|
|
@@ -377,171 +377,19 @@ function isEqualToEmptyEditor(children, schemaTypes) {
|
|
|
377
377
|
const IS_PROCESSING_REMOTE_CHANGES = /* @__PURE__ */ new WeakMap(), IS_DRAGGING = /* @__PURE__ */ new WeakMap(), IS_DRAGGING_BLOCK_ELEMENT = /* @__PURE__ */ new WeakMap(), IS_DRAGGING_ELEMENT_TARGET = /* @__PURE__ */ new WeakMap(), IS_DRAGGING_BLOCK_TARGET_POSITION = /* @__PURE__ */ new WeakMap(), KEY_TO_SLATE_ELEMENT = /* @__PURE__ */ new WeakMap(), KEY_TO_VALUE_ELEMENT = /* @__PURE__ */ new WeakMap(), SLATE_TO_PORTABLE_TEXT_RANGE = /* @__PURE__ */ new WeakMap(), DefaultObject = (props) => {
|
|
378
378
|
const $ = c(4);
|
|
379
379
|
let t0;
|
|
380
|
-
$[0]
|
|
380
|
+
$[0] === Symbol.for("react.memo_cache_sentinel") ? (t0 = {
|
|
381
|
+
userSelect: "none"
|
|
382
|
+
}, $[0] = t0) : t0 = $[0];
|
|
381
383
|
let t1;
|
|
382
|
-
return $[2] !==
|
|
384
|
+
return $[1] !== props.value._key || $[2] !== props.value._type ? (t1 = /* @__PURE__ */ jsxs("div", { style: t0, children: [
|
|
385
|
+
"[",
|
|
386
|
+
props.value._type,
|
|
387
|
+
": ",
|
|
388
|
+
props.value._key,
|
|
389
|
+
"]"
|
|
390
|
+
] }), $[1] = props.value._key, $[2] = props.value._type, $[3] = t1) : t1 = $[3], t1;
|
|
383
391
|
};
|
|
384
392
|
DefaultObject.displayName = "DefaultObject";
|
|
385
|
-
const DefaultBlockObject = styled.div`
|
|
386
|
-
user-select: none;
|
|
387
|
-
border: ${(props) => props.selected ? "1px solid blue" : "1px solid transparent"};
|
|
388
|
-
`;
|
|
389
|
-
styled.span`
|
|
390
|
-
background: #999;
|
|
391
|
-
border: ${(props) => props.selected ? "1px solid blue" : "1px solid transparent"};
|
|
392
|
-
`;
|
|
393
|
-
const DefaultListItem = styled.div`
|
|
394
|
-
&.pt-list-item {
|
|
395
|
-
width: fit-content;
|
|
396
|
-
position: relative;
|
|
397
|
-
display: block;
|
|
398
|
-
|
|
399
|
-
/* Important 'transform' in order to force refresh the ::before and ::after rules
|
|
400
|
-
in Webkit: https://stackoverflow.com/a/21947628/831480
|
|
401
|
-
*/
|
|
402
|
-
transform: translateZ(0);
|
|
403
|
-
margin-left: ${(props) => getLeftPositionForListLevel(props.listLevel)};
|
|
404
|
-
}
|
|
405
|
-
&.pt-list-item > .pt-list-item-inner {
|
|
406
|
-
display: flex;
|
|
407
|
-
margin: 0;
|
|
408
|
-
padding: 0;
|
|
409
|
-
&:before {
|
|
410
|
-
justify-content: flex-start;
|
|
411
|
-
vertical-align: top;
|
|
412
|
-
}
|
|
413
|
-
}
|
|
414
|
-
&.pt-list-item-bullet > .pt-list-item-inner:before {
|
|
415
|
-
content: '${(props) => getContentForListLevelAndStyle(props.listLevel, props.listStyle)}';
|
|
416
|
-
font-size: 0.4375rem; /* 7px */
|
|
417
|
-
line-height: 1.5rem; /* Same as body text */
|
|
418
|
-
/* Optical alignment */
|
|
419
|
-
position: relative;
|
|
420
|
-
}
|
|
421
|
-
}
|
|
422
|
-
&.pt-list-item-bullet > .pt-list-item-inner {
|
|
423
|
-
&:before {
|
|
424
|
-
min-width: 1.5rem; /* Make sure space between bullet and text never shrinks */
|
|
425
|
-
}
|
|
426
|
-
}
|
|
427
|
-
&.pt-list-item-number {
|
|
428
|
-
counter-increment: ${(props) => getCounterIncrementForListLevel(props.listLevel)};
|
|
429
|
-
counter-reset: ${(props) => getCounterResetForListLevel(props.listLevel)};
|
|
430
|
-
}
|
|
431
|
-
& + :not(.pt-list-item-number) {
|
|
432
|
-
counter-reset: listItemNumber;
|
|
433
|
-
}
|
|
434
|
-
&.pt-list-item-number > .pt-list-item-inner:before {
|
|
435
|
-
content: ${(props) => getCounterContentForListLevel(props.listLevel)};
|
|
436
|
-
min-width: 1.5rem; /* Make sure space between number and text never shrinks */
|
|
437
|
-
/* Optical alignment */
|
|
438
|
-
position: relative;
|
|
439
|
-
top: 1px;
|
|
440
|
-
}
|
|
441
|
-
`, DefaultListItemInner = styled.div``;
|
|
442
|
-
function getLeftPositionForListLevel(level) {
|
|
443
|
-
switch (Number(level)) {
|
|
444
|
-
case 1:
|
|
445
|
-
return "1.5em";
|
|
446
|
-
case 2:
|
|
447
|
-
return "3em";
|
|
448
|
-
case 3:
|
|
449
|
-
return "4.5em";
|
|
450
|
-
case 4:
|
|
451
|
-
return "6em";
|
|
452
|
-
case 5:
|
|
453
|
-
return "7.5em";
|
|
454
|
-
case 6:
|
|
455
|
-
return "9em";
|
|
456
|
-
case 7:
|
|
457
|
-
return "10.5em";
|
|
458
|
-
case 8:
|
|
459
|
-
return "12em";
|
|
460
|
-
case 9:
|
|
461
|
-
return "13.5em";
|
|
462
|
-
case 10:
|
|
463
|
-
return "15em";
|
|
464
|
-
default:
|
|
465
|
-
return "0em";
|
|
466
|
-
}
|
|
467
|
-
}
|
|
468
|
-
const bullets = ["\u25CF", "\u25CB", "\u25A0"];
|
|
469
|
-
function getContentForListLevelAndStyle(level, style) {
|
|
470
|
-
const normalizedLevel = (level - 1) % 3;
|
|
471
|
-
return style === "bullet" ? bullets[normalizedLevel] : "*";
|
|
472
|
-
}
|
|
473
|
-
function getCounterIncrementForListLevel(level) {
|
|
474
|
-
switch (level) {
|
|
475
|
-
case 1:
|
|
476
|
-
return "listItemNumber";
|
|
477
|
-
case 2:
|
|
478
|
-
return "listItemAlpha";
|
|
479
|
-
case 3:
|
|
480
|
-
return "listItemRoman";
|
|
481
|
-
case 4:
|
|
482
|
-
return "listItemNumberNext";
|
|
483
|
-
case 5:
|
|
484
|
-
return "listItemLetterNext";
|
|
485
|
-
case 6:
|
|
486
|
-
return "listItemRomanNext";
|
|
487
|
-
case 7:
|
|
488
|
-
return "listItemNumberNextNext";
|
|
489
|
-
case 8:
|
|
490
|
-
return "listItemAlphaNextNext";
|
|
491
|
-
case 9:
|
|
492
|
-
return "listItemRomanNextNext";
|
|
493
|
-
default:
|
|
494
|
-
return "listItemNumberNextNextNext";
|
|
495
|
-
}
|
|
496
|
-
}
|
|
497
|
-
function getCounterResetForListLevel(level) {
|
|
498
|
-
switch (level) {
|
|
499
|
-
case 1:
|
|
500
|
-
return "listItemAlpha";
|
|
501
|
-
case 2:
|
|
502
|
-
return "listItemRoman";
|
|
503
|
-
case 3:
|
|
504
|
-
return "listItemNumberNext";
|
|
505
|
-
case 4:
|
|
506
|
-
return "listItemLetterNext";
|
|
507
|
-
case 5:
|
|
508
|
-
return "listItemRomanNext";
|
|
509
|
-
case 6:
|
|
510
|
-
return "listItemNumberNextNext";
|
|
511
|
-
case 7:
|
|
512
|
-
return "listItemAlphaNextNext";
|
|
513
|
-
case 8:
|
|
514
|
-
return "listItemRomanNextNext";
|
|
515
|
-
case 9:
|
|
516
|
-
return "listItemNumberNextNextNext";
|
|
517
|
-
default:
|
|
518
|
-
return "listItemNumberNextNextNext";
|
|
519
|
-
}
|
|
520
|
-
}
|
|
521
|
-
function getCounterContentForListLevel(level) {
|
|
522
|
-
switch (level) {
|
|
523
|
-
case 1:
|
|
524
|
-
return "counter(listItemNumber) '. '";
|
|
525
|
-
case 2:
|
|
526
|
-
return "counter(listItemAlpha, lower-alpha) '. '";
|
|
527
|
-
case 3:
|
|
528
|
-
return "counter(listItemRoman, lower-roman) '. '";
|
|
529
|
-
case 4:
|
|
530
|
-
return "counter(listItemNumberNext) '. '";
|
|
531
|
-
case 5:
|
|
532
|
-
return "counter(listItemLetterNext, lower-alpha) '. '";
|
|
533
|
-
case 6:
|
|
534
|
-
return "counter(listItemRomanNext, lower-roman) '. '";
|
|
535
|
-
case 7:
|
|
536
|
-
return "counter(listItemNumberNextNext) '. '";
|
|
537
|
-
case 8:
|
|
538
|
-
return "counter(listItemAlphaNextNext, lower-alpha) '. '";
|
|
539
|
-
case 9:
|
|
540
|
-
return "counter(listItemRomanNextNext, lower-roman) '. '";
|
|
541
|
-
default:
|
|
542
|
-
return "counter(listItemNumberNextNextNext) '. '";
|
|
543
|
-
}
|
|
544
|
-
}
|
|
545
393
|
const debug$j = debugWithName("components:DraggableBlock"), DraggableBlock = (t0) => {
|
|
546
394
|
const $ = c(51), {
|
|
547
395
|
children,
|
|
@@ -747,7 +595,7 @@ const EMPTY_ANNOTATIONS = [], inlineBlockStyle = {
|
|
|
747
595
|
let level;
|
|
748
596
|
if (isListItem && (typeof element.level == "number" && (level = element.level), className += ` pt-list-item pt-list-item-${element.listItem} pt-list-item-level-${level || 1}`), editor.isListBlock(value) && isListItem && element.listItem) {
|
|
749
597
|
const listType = schemaTypes.lists.find((item_0) => item_0.value === element.listItem);
|
|
750
|
-
renderListItem && listType
|
|
598
|
+
renderListItem && listType && (renderedBlock = renderListItem({
|
|
751
599
|
block: value,
|
|
752
600
|
children: renderedBlock,
|
|
753
601
|
focused,
|
|
@@ -757,7 +605,7 @@ const EMPTY_ANNOTATIONS = [], inlineBlockStyle = {
|
|
|
757
605
|
schemaType: listType,
|
|
758
606
|
level: value.level || 1,
|
|
759
607
|
editorElementRef: blockRef
|
|
760
|
-
})
|
|
608
|
+
}));
|
|
761
609
|
}
|
|
762
610
|
const renderProps = Object.defineProperty({
|
|
763
611
|
children: renderedBlock,
|
|
@@ -803,10 +651,7 @@ const EMPTY_ANNOTATIONS = [], inlineBlockStyle = {
|
|
|
803
651
|
}
|
|
804
652
|
return /* @__PURE__ */ jsxs("div", { ...attributes, className, children: [
|
|
805
653
|
children,
|
|
806
|
-
/* @__PURE__ */
|
|
807
|
-
renderedBlockFromProps && /* @__PURE__ */ jsx("div", { ref: blockRef, contentEditable: !1, children: renderedBlockFromProps }),
|
|
808
|
-
!renderedBlockFromProps && /* @__PURE__ */ jsx(DefaultBlockObject, { selected, children: /* @__PURE__ */ jsx(DefaultObject, { value }) })
|
|
809
|
-
] })
|
|
654
|
+
/* @__PURE__ */ jsx(DraggableBlock, { element, readOnly, blockRef, children: /* @__PURE__ */ jsx("div", { ref: blockRef, contentEditable: !1, children: renderedBlockFromProps || /* @__PURE__ */ jsx(DefaultObject, { value }) }) })
|
|
810
655
|
] }, element._key);
|
|
811
656
|
};
|
|
812
657
|
Element.displayName = "Element";
|
|
@@ -2944,6 +2789,14 @@ function createWithEventListeners(editorActor, subscriptions) {
|
|
|
2944
2789
|
});
|
|
2945
2790
|
break;
|
|
2946
2791
|
}
|
|
2792
|
+
case "custom.*": {
|
|
2793
|
+
editorActor.send({
|
|
2794
|
+
type: "custom behavior event",
|
|
2795
|
+
behaviorEvent: event.event,
|
|
2796
|
+
editor
|
|
2797
|
+
});
|
|
2798
|
+
break;
|
|
2799
|
+
}
|
|
2947
2800
|
case "decorator.toggle": {
|
|
2948
2801
|
editorActor.send({
|
|
2949
2802
|
type: "behavior event",
|
|
@@ -5704,10 +5557,22 @@ const editorMachine = setup({
|
|
|
5704
5557
|
input: {}
|
|
5705
5558
|
},
|
|
5706
5559
|
actions: {
|
|
5560
|
+
"add behavior to context": assign({
|
|
5561
|
+
behaviors: ({
|
|
5562
|
+
context,
|
|
5563
|
+
event
|
|
5564
|
+
}) => (assertEvent(event, "add behavior"), /* @__PURE__ */ new Set([...context.behaviors, event.behavior]))
|
|
5565
|
+
}),
|
|
5566
|
+
"remove behavior from context": assign({
|
|
5567
|
+
behaviors: ({
|
|
5568
|
+
context,
|
|
5569
|
+
event
|
|
5570
|
+
}) => (assertEvent(event, "remove behavior"), context.behaviors.delete(event.behavior), /* @__PURE__ */ new Set([...context.behaviors]))
|
|
5571
|
+
}),
|
|
5707
5572
|
"assign behaviors": assign({
|
|
5708
5573
|
behaviors: ({
|
|
5709
5574
|
event
|
|
5710
|
-
}) => (assertEvent(event, "update behaviors"), event.behaviors)
|
|
5575
|
+
}) => (assertEvent(event, "update behaviors"), new Set(event.behaviors))
|
|
5711
5576
|
}),
|
|
5712
5577
|
"assign schema": assign({
|
|
5713
5578
|
schema: ({
|
|
@@ -5750,11 +5615,11 @@ const editorMachine = setup({
|
|
|
5750
5615
|
event,
|
|
5751
5616
|
enqueue
|
|
5752
5617
|
}) => {
|
|
5753
|
-
assertEvent(event, ["behavior event"]);
|
|
5754
|
-
const defaultAction = event.behaviorEvent.type === "copy" || event.behaviorEvent.type === "key.down" || event.behaviorEvent.type === "key.up" || event.behaviorEvent.type === "paste" ? void 0 : {
|
|
5618
|
+
assertEvent(event, ["behavior event", "custom behavior event"]);
|
|
5619
|
+
const defaultAction = event.type === "custom behavior event" || event.behaviorEvent.type === "copy" || event.behaviorEvent.type === "key.down" || event.behaviorEvent.type === "key.up" || event.behaviorEvent.type === "paste" ? void 0 : {
|
|
5755
5620
|
...event.behaviorEvent,
|
|
5756
5621
|
editor: event.editor
|
|
5757
|
-
}, eventBehaviors = context.behaviors.filter((behavior) => behavior.on === event.behaviorEvent.type);
|
|
5622
|
+
}, eventBehaviors = [...context.behaviors.values()].filter((behavior) => behavior.on === event.behaviorEvent.type);
|
|
5758
5623
|
if (eventBehaviors.length === 0) {
|
|
5759
5624
|
if (!defaultAction)
|
|
5760
5625
|
return;
|
|
@@ -5795,7 +5660,11 @@ const editorMachine = setup({
|
|
|
5795
5660
|
Editor.withoutNormalizing(event.editor, () => {
|
|
5796
5661
|
for (const actionIntend of actionIntends) {
|
|
5797
5662
|
if (actionIntend.type === "raise") {
|
|
5798
|
-
enqueue.raise({
|
|
5663
|
+
isCustomBehaviorEvent(actionIntend.event) ? enqueue.raise({
|
|
5664
|
+
type: "custom behavior event",
|
|
5665
|
+
behaviorEvent: actionIntend.event,
|
|
5666
|
+
editor: event.editor
|
|
5667
|
+
}) : enqueue.raise({
|
|
5799
5668
|
type: "behavior event",
|
|
5800
5669
|
behaviorEvent: actionIntend.event,
|
|
5801
5670
|
editor: event.editor
|
|
@@ -5837,7 +5706,7 @@ const editorMachine = setup({
|
|
|
5837
5706
|
context: ({
|
|
5838
5707
|
input
|
|
5839
5708
|
}) => ({
|
|
5840
|
-
behaviors: input.behaviors ?? coreBehaviors,
|
|
5709
|
+
behaviors: new Set(input.behaviors ?? coreBehaviors),
|
|
5841
5710
|
keyGenerator: input.keyGenerator,
|
|
5842
5711
|
pendingEvents: [],
|
|
5843
5712
|
schema: input.schema,
|
|
@@ -5847,6 +5716,12 @@ const editorMachine = setup({
|
|
|
5847
5716
|
value: input.value
|
|
5848
5717
|
}),
|
|
5849
5718
|
on: {
|
|
5719
|
+
"add behavior": {
|
|
5720
|
+
actions: "add behavior to context"
|
|
5721
|
+
},
|
|
5722
|
+
"remove behavior": {
|
|
5723
|
+
actions: "remove behavior from context"
|
|
5724
|
+
},
|
|
5850
5725
|
unset: {
|
|
5851
5726
|
actions: emit(({
|
|
5852
5727
|
event
|
|
@@ -5967,6 +5842,9 @@ const editorMachine = setup({
|
|
|
5967
5842
|
"behavior event": {
|
|
5968
5843
|
actions: "handle behavior event"
|
|
5969
5844
|
},
|
|
5845
|
+
"custom behavior event": {
|
|
5846
|
+
actions: "handle behavior event"
|
|
5847
|
+
},
|
|
5970
5848
|
"annotation.*": {
|
|
5971
5849
|
actions: emit(({
|
|
5972
5850
|
event
|
|
@@ -5977,6 +5855,14 @@ const editorMachine = setup({
|
|
|
5977
5855
|
event
|
|
5978
5856
|
}) => event)
|
|
5979
5857
|
},
|
|
5858
|
+
"custom.*": {
|
|
5859
|
+
actions: emit(({
|
|
5860
|
+
event
|
|
5861
|
+
}) => ({
|
|
5862
|
+
type: "custom.*",
|
|
5863
|
+
event
|
|
5864
|
+
}))
|
|
5865
|
+
},
|
|
5980
5866
|
"decorator.*": {
|
|
5981
5867
|
actions: emit(({
|
|
5982
5868
|
event
|
|
@@ -6172,6 +6058,15 @@ function createEditorFromActor(editorActor) {
|
|
|
6172
6058
|
editorActorSnapshot: editorActor.getSnapshot(),
|
|
6173
6059
|
slateEditorInstance: slateEditor.instance
|
|
6174
6060
|
}),
|
|
6061
|
+
registerBehavior: (config) => (editorActor.send({
|
|
6062
|
+
type: "add behavior",
|
|
6063
|
+
behavior: config.behavior
|
|
6064
|
+
}), () => {
|
|
6065
|
+
editorActor.send({
|
|
6066
|
+
type: "remove behavior",
|
|
6067
|
+
behavior: config.behavior
|
|
6068
|
+
});
|
|
6069
|
+
}),
|
|
6175
6070
|
send: (event) => {
|
|
6176
6071
|
editorActor.send(event);
|
|
6177
6072
|
},
|