@portabletext/editor 1.19.0 → 1.20.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.map +1 -1
- package/lib/_chunks-cjs/selector.is-selection-collapsed.cjs.map +1 -1
- package/lib/_chunks-es/behavior.core.js.map +1 -1
- package/lib/_chunks-es/selector.is-selection-collapsed.js.map +1 -1
- package/lib/behaviors/index.cjs.map +1 -1
- package/lib/behaviors/index.d.cts +2 -2
- package/lib/behaviors/index.d.ts +2 -2
- package/lib/behaviors/index.js.map +1 -1
- package/lib/index.cjs +44 -172
- package/lib/index.cjs.map +1 -1
- package/lib/index.d.cts +245 -27
- package/lib/index.d.ts +245 -27
- package/lib/index.js +44 -173
- package/lib/index.js.map +1 -1
- package/lib/selectors/index.cjs.map +1 -1
- package/package.json +5 -7
- package/src/behaviors/behavior.types.ts +2 -2
- package/src/editor/components/Element.tsx +17 -23
- package/src/editor/create-editor.ts +17 -0
- package/src/editor/editor-machine.ts +30 -4
- package/src/editor/nodes/DefaultObject.tsx +2 -2
- package/src/editor/nodes/index.ts +0 -189
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";
|
|
@@ -377,171 +376,19 @@ function isEqualToEmptyEditor(children, schemaTypes) {
|
|
|
377
376
|
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
377
|
const $ = c(4);
|
|
379
378
|
let t0;
|
|
380
|
-
$[0]
|
|
379
|
+
$[0] === Symbol.for("react.memo_cache_sentinel") ? (t0 = {
|
|
380
|
+
userSelect: "none"
|
|
381
|
+
}, $[0] = t0) : t0 = $[0];
|
|
381
382
|
let t1;
|
|
382
|
-
return $[2] !==
|
|
383
|
+
return $[1] !== props.value._key || $[2] !== props.value._type ? (t1 = /* @__PURE__ */ jsxs("div", { style: t0, children: [
|
|
384
|
+
"[",
|
|
385
|
+
props.value._type,
|
|
386
|
+
": ",
|
|
387
|
+
props.value._key,
|
|
388
|
+
"]"
|
|
389
|
+
] }), $[1] = props.value._key, $[2] = props.value._type, $[3] = t1) : t1 = $[3], t1;
|
|
383
390
|
};
|
|
384
391
|
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
392
|
const debug$j = debugWithName("components:DraggableBlock"), DraggableBlock = (t0) => {
|
|
546
393
|
const $ = c(51), {
|
|
547
394
|
children,
|
|
@@ -747,7 +594,7 @@ const EMPTY_ANNOTATIONS = [], inlineBlockStyle = {
|
|
|
747
594
|
let level;
|
|
748
595
|
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
596
|
const listType = schemaTypes.lists.find((item_0) => item_0.value === element.listItem);
|
|
750
|
-
renderListItem && listType
|
|
597
|
+
renderListItem && listType && (renderedBlock = renderListItem({
|
|
751
598
|
block: value,
|
|
752
599
|
children: renderedBlock,
|
|
753
600
|
focused,
|
|
@@ -757,7 +604,7 @@ const EMPTY_ANNOTATIONS = [], inlineBlockStyle = {
|
|
|
757
604
|
schemaType: listType,
|
|
758
605
|
level: value.level || 1,
|
|
759
606
|
editorElementRef: blockRef
|
|
760
|
-
})
|
|
607
|
+
}));
|
|
761
608
|
}
|
|
762
609
|
const renderProps = Object.defineProperty({
|
|
763
610
|
children: renderedBlock,
|
|
@@ -803,10 +650,7 @@ const EMPTY_ANNOTATIONS = [], inlineBlockStyle = {
|
|
|
803
650
|
}
|
|
804
651
|
return /* @__PURE__ */ jsxs("div", { ...attributes, className, children: [
|
|
805
652
|
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
|
-
] })
|
|
653
|
+
/* @__PURE__ */ jsx(DraggableBlock, { element, readOnly, blockRef, children: /* @__PURE__ */ jsx("div", { ref: blockRef, contentEditable: !1, children: renderedBlockFromProps || /* @__PURE__ */ jsx(DefaultObject, { value }) }) })
|
|
810
654
|
] }, element._key);
|
|
811
655
|
};
|
|
812
656
|
Element.displayName = "Element";
|
|
@@ -5704,10 +5548,22 @@ const editorMachine = setup({
|
|
|
5704
5548
|
input: {}
|
|
5705
5549
|
},
|
|
5706
5550
|
actions: {
|
|
5551
|
+
"add behavior to context": assign({
|
|
5552
|
+
behaviors: ({
|
|
5553
|
+
context,
|
|
5554
|
+
event
|
|
5555
|
+
}) => (assertEvent(event, "add behavior"), /* @__PURE__ */ new Set([...context.behaviors, event.behavior]))
|
|
5556
|
+
}),
|
|
5557
|
+
"remove behavior from context": assign({
|
|
5558
|
+
behaviors: ({
|
|
5559
|
+
context,
|
|
5560
|
+
event
|
|
5561
|
+
}) => (assertEvent(event, "remove behavior"), context.behaviors.delete(event.behavior), /* @__PURE__ */ new Set([...context.behaviors]))
|
|
5562
|
+
}),
|
|
5707
5563
|
"assign behaviors": assign({
|
|
5708
5564
|
behaviors: ({
|
|
5709
5565
|
event
|
|
5710
|
-
}) => (assertEvent(event, "update behaviors"), event.behaviors)
|
|
5566
|
+
}) => (assertEvent(event, "update behaviors"), new Set(event.behaviors))
|
|
5711
5567
|
}),
|
|
5712
5568
|
"assign schema": assign({
|
|
5713
5569
|
schema: ({
|
|
@@ -5754,7 +5610,7 @@ const editorMachine = setup({
|
|
|
5754
5610
|
const defaultAction = event.behaviorEvent.type === "copy" || event.behaviorEvent.type === "key.down" || event.behaviorEvent.type === "key.up" || event.behaviorEvent.type === "paste" ? void 0 : {
|
|
5755
5611
|
...event.behaviorEvent,
|
|
5756
5612
|
editor: event.editor
|
|
5757
|
-
}, eventBehaviors = context.behaviors.filter((behavior) => behavior.on === event.behaviorEvent.type);
|
|
5613
|
+
}, eventBehaviors = [...context.behaviors.values()].filter((behavior) => behavior.on === event.behaviorEvent.type);
|
|
5758
5614
|
if (eventBehaviors.length === 0) {
|
|
5759
5615
|
if (!defaultAction)
|
|
5760
5616
|
return;
|
|
@@ -5837,7 +5693,7 @@ const editorMachine = setup({
|
|
|
5837
5693
|
context: ({
|
|
5838
5694
|
input
|
|
5839
5695
|
}) => ({
|
|
5840
|
-
behaviors: input.behaviors ?? coreBehaviors,
|
|
5696
|
+
behaviors: new Set(input.behaviors ?? coreBehaviors),
|
|
5841
5697
|
keyGenerator: input.keyGenerator,
|
|
5842
5698
|
pendingEvents: [],
|
|
5843
5699
|
schema: input.schema,
|
|
@@ -5847,6 +5703,12 @@ const editorMachine = setup({
|
|
|
5847
5703
|
value: input.value
|
|
5848
5704
|
}),
|
|
5849
5705
|
on: {
|
|
5706
|
+
"add behavior": {
|
|
5707
|
+
actions: "add behavior to context"
|
|
5708
|
+
},
|
|
5709
|
+
"remove behavior": {
|
|
5710
|
+
actions: "remove behavior from context"
|
|
5711
|
+
},
|
|
5850
5712
|
unset: {
|
|
5851
5713
|
actions: emit(({
|
|
5852
5714
|
event
|
|
@@ -6172,6 +6034,15 @@ function createEditorFromActor(editorActor) {
|
|
|
6172
6034
|
editorActorSnapshot: editorActor.getSnapshot(),
|
|
6173
6035
|
slateEditorInstance: slateEditor.instance
|
|
6174
6036
|
}),
|
|
6037
|
+
registerBehavior: (config) => (editorActor.send({
|
|
6038
|
+
type: "add behavior",
|
|
6039
|
+
behavior: config.behavior
|
|
6040
|
+
}), () => {
|
|
6041
|
+
editorActor.send({
|
|
6042
|
+
type: "remove behavior",
|
|
6043
|
+
behavior: config.behavior
|
|
6044
|
+
});
|
|
6045
|
+
}),
|
|
6175
6046
|
send: (event) => {
|
|
6176
6047
|
editorActor.send(event);
|
|
6177
6048
|
},
|