@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.cjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: !0 });
|
|
3
|
-
var schema = require("@sanity/schema"), types = require("@sanity/types"), startCase = require("lodash.startcase"), jsxRuntime = require("react/jsx-runtime"), react = require("@xstate/react"), isEqual = require("lodash/isEqual.js"), noop = require("lodash/noop.js"), React = require("react"), slate = require("slate"), slateReact = require("slate-react"), debug$k = require("debug"), reactCompilerRuntime = require("react-compiler-runtime"),
|
|
3
|
+
var schema = require("@sanity/schema"), types = require("@sanity/types"), startCase = require("lodash.startcase"), jsxRuntime = require("react/jsx-runtime"), react = require("@xstate/react"), isEqual = require("lodash/isEqual.js"), noop = require("lodash/noop.js"), React = require("react"), slate = require("slate"), slateReact = require("slate-react"), debug$k = require("debug"), reactCompilerRuntime = require("react-compiler-runtime"), uniq = require("lodash/uniq.js"), rxjs = require("rxjs"), useEffectEvent = require("use-effect-event"), xstate = require("xstate"), patches = require("@portabletext/patches"), flatten = require("lodash/flatten.js"), isPlainObject = require("lodash/isPlainObject.js"), get = require("lodash/get.js"), isUndefined = require("lodash/isUndefined.js"), omitBy = require("lodash/omitBy.js"), selector_isSelectionCollapsed = require("./_chunks-cjs/selector.is-selection-collapsed.cjs"), behavior_core = require("./_chunks-cjs/behavior.core.cjs"), getRandomValues = require("get-random-values-esm"), blockTools = require("@sanity/block-tools");
|
|
4
4
|
function _interopDefaultCompat(e) {
|
|
5
5
|
return e && typeof e == "object" && "default" in e ? e : { default: e };
|
|
6
6
|
}
|
|
@@ -357,171 +357,19 @@ function isEqualToEmptyEditor(children, schemaTypes) {
|
|
|
357
357
|
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) => {
|
|
358
358
|
const $ = reactCompilerRuntime.c(4);
|
|
359
359
|
let t0;
|
|
360
|
-
$[0]
|
|
360
|
+
$[0] === Symbol.for("react.memo_cache_sentinel") ? (t0 = {
|
|
361
|
+
userSelect: "none"
|
|
362
|
+
}, $[0] = t0) : t0 = $[0];
|
|
361
363
|
let t1;
|
|
362
|
-
return $[2] !==
|
|
364
|
+
return $[1] !== props.value._key || $[2] !== props.value._type ? (t1 = /* @__PURE__ */ jsxRuntime.jsxs("div", { style: t0, children: [
|
|
365
|
+
"[",
|
|
366
|
+
props.value._type,
|
|
367
|
+
": ",
|
|
368
|
+
props.value._key,
|
|
369
|
+
"]"
|
|
370
|
+
] }), $[1] = props.value._key, $[2] = props.value._type, $[3] = t1) : t1 = $[3], t1;
|
|
363
371
|
};
|
|
364
372
|
DefaultObject.displayName = "DefaultObject";
|
|
365
|
-
const DefaultBlockObject = styledComponents.styled.div`
|
|
366
|
-
user-select: none;
|
|
367
|
-
border: ${(props) => props.selected ? "1px solid blue" : "1px solid transparent"};
|
|
368
|
-
`;
|
|
369
|
-
styledComponents.styled.span`
|
|
370
|
-
background: #999;
|
|
371
|
-
border: ${(props) => props.selected ? "1px solid blue" : "1px solid transparent"};
|
|
372
|
-
`;
|
|
373
|
-
const DefaultListItem = styledComponents.styled.div`
|
|
374
|
-
&.pt-list-item {
|
|
375
|
-
width: fit-content;
|
|
376
|
-
position: relative;
|
|
377
|
-
display: block;
|
|
378
|
-
|
|
379
|
-
/* Important 'transform' in order to force refresh the ::before and ::after rules
|
|
380
|
-
in Webkit: https://stackoverflow.com/a/21947628/831480
|
|
381
|
-
*/
|
|
382
|
-
transform: translateZ(0);
|
|
383
|
-
margin-left: ${(props) => getLeftPositionForListLevel(props.listLevel)};
|
|
384
|
-
}
|
|
385
|
-
&.pt-list-item > .pt-list-item-inner {
|
|
386
|
-
display: flex;
|
|
387
|
-
margin: 0;
|
|
388
|
-
padding: 0;
|
|
389
|
-
&:before {
|
|
390
|
-
justify-content: flex-start;
|
|
391
|
-
vertical-align: top;
|
|
392
|
-
}
|
|
393
|
-
}
|
|
394
|
-
&.pt-list-item-bullet > .pt-list-item-inner:before {
|
|
395
|
-
content: '${(props) => getContentForListLevelAndStyle(props.listLevel, props.listStyle)}';
|
|
396
|
-
font-size: 0.4375rem; /* 7px */
|
|
397
|
-
line-height: 1.5rem; /* Same as body text */
|
|
398
|
-
/* Optical alignment */
|
|
399
|
-
position: relative;
|
|
400
|
-
}
|
|
401
|
-
}
|
|
402
|
-
&.pt-list-item-bullet > .pt-list-item-inner {
|
|
403
|
-
&:before {
|
|
404
|
-
min-width: 1.5rem; /* Make sure space between bullet and text never shrinks */
|
|
405
|
-
}
|
|
406
|
-
}
|
|
407
|
-
&.pt-list-item-number {
|
|
408
|
-
counter-increment: ${(props) => getCounterIncrementForListLevel(props.listLevel)};
|
|
409
|
-
counter-reset: ${(props) => getCounterResetForListLevel(props.listLevel)};
|
|
410
|
-
}
|
|
411
|
-
& + :not(.pt-list-item-number) {
|
|
412
|
-
counter-reset: listItemNumber;
|
|
413
|
-
}
|
|
414
|
-
&.pt-list-item-number > .pt-list-item-inner:before {
|
|
415
|
-
content: ${(props) => getCounterContentForListLevel(props.listLevel)};
|
|
416
|
-
min-width: 1.5rem; /* Make sure space between number and text never shrinks */
|
|
417
|
-
/* Optical alignment */
|
|
418
|
-
position: relative;
|
|
419
|
-
top: 1px;
|
|
420
|
-
}
|
|
421
|
-
`, DefaultListItemInner = styledComponents.styled.div``;
|
|
422
|
-
function getLeftPositionForListLevel(level) {
|
|
423
|
-
switch (Number(level)) {
|
|
424
|
-
case 1:
|
|
425
|
-
return "1.5em";
|
|
426
|
-
case 2:
|
|
427
|
-
return "3em";
|
|
428
|
-
case 3:
|
|
429
|
-
return "4.5em";
|
|
430
|
-
case 4:
|
|
431
|
-
return "6em";
|
|
432
|
-
case 5:
|
|
433
|
-
return "7.5em";
|
|
434
|
-
case 6:
|
|
435
|
-
return "9em";
|
|
436
|
-
case 7:
|
|
437
|
-
return "10.5em";
|
|
438
|
-
case 8:
|
|
439
|
-
return "12em";
|
|
440
|
-
case 9:
|
|
441
|
-
return "13.5em";
|
|
442
|
-
case 10:
|
|
443
|
-
return "15em";
|
|
444
|
-
default:
|
|
445
|
-
return "0em";
|
|
446
|
-
}
|
|
447
|
-
}
|
|
448
|
-
const bullets = ["\u25CF", "\u25CB", "\u25A0"];
|
|
449
|
-
function getContentForListLevelAndStyle(level, style) {
|
|
450
|
-
const normalizedLevel = (level - 1) % 3;
|
|
451
|
-
return style === "bullet" ? bullets[normalizedLevel] : "*";
|
|
452
|
-
}
|
|
453
|
-
function getCounterIncrementForListLevel(level) {
|
|
454
|
-
switch (level) {
|
|
455
|
-
case 1:
|
|
456
|
-
return "listItemNumber";
|
|
457
|
-
case 2:
|
|
458
|
-
return "listItemAlpha";
|
|
459
|
-
case 3:
|
|
460
|
-
return "listItemRoman";
|
|
461
|
-
case 4:
|
|
462
|
-
return "listItemNumberNext";
|
|
463
|
-
case 5:
|
|
464
|
-
return "listItemLetterNext";
|
|
465
|
-
case 6:
|
|
466
|
-
return "listItemRomanNext";
|
|
467
|
-
case 7:
|
|
468
|
-
return "listItemNumberNextNext";
|
|
469
|
-
case 8:
|
|
470
|
-
return "listItemAlphaNextNext";
|
|
471
|
-
case 9:
|
|
472
|
-
return "listItemRomanNextNext";
|
|
473
|
-
default:
|
|
474
|
-
return "listItemNumberNextNextNext";
|
|
475
|
-
}
|
|
476
|
-
}
|
|
477
|
-
function getCounterResetForListLevel(level) {
|
|
478
|
-
switch (level) {
|
|
479
|
-
case 1:
|
|
480
|
-
return "listItemAlpha";
|
|
481
|
-
case 2:
|
|
482
|
-
return "listItemRoman";
|
|
483
|
-
case 3:
|
|
484
|
-
return "listItemNumberNext";
|
|
485
|
-
case 4:
|
|
486
|
-
return "listItemLetterNext";
|
|
487
|
-
case 5:
|
|
488
|
-
return "listItemRomanNext";
|
|
489
|
-
case 6:
|
|
490
|
-
return "listItemNumberNextNext";
|
|
491
|
-
case 7:
|
|
492
|
-
return "listItemAlphaNextNext";
|
|
493
|
-
case 8:
|
|
494
|
-
return "listItemRomanNextNext";
|
|
495
|
-
case 9:
|
|
496
|
-
return "listItemNumberNextNextNext";
|
|
497
|
-
default:
|
|
498
|
-
return "listItemNumberNextNextNext";
|
|
499
|
-
}
|
|
500
|
-
}
|
|
501
|
-
function getCounterContentForListLevel(level) {
|
|
502
|
-
switch (level) {
|
|
503
|
-
case 1:
|
|
504
|
-
return "counter(listItemNumber) '. '";
|
|
505
|
-
case 2:
|
|
506
|
-
return "counter(listItemAlpha, lower-alpha) '. '";
|
|
507
|
-
case 3:
|
|
508
|
-
return "counter(listItemRoman, lower-roman) '. '";
|
|
509
|
-
case 4:
|
|
510
|
-
return "counter(listItemNumberNext) '. '";
|
|
511
|
-
case 5:
|
|
512
|
-
return "counter(listItemLetterNext, lower-alpha) '. '";
|
|
513
|
-
case 6:
|
|
514
|
-
return "counter(listItemRomanNext, lower-roman) '. '";
|
|
515
|
-
case 7:
|
|
516
|
-
return "counter(listItemNumberNextNext) '. '";
|
|
517
|
-
case 8:
|
|
518
|
-
return "counter(listItemAlphaNextNext, lower-alpha) '. '";
|
|
519
|
-
case 9:
|
|
520
|
-
return "counter(listItemRomanNextNext, lower-roman) '. '";
|
|
521
|
-
default:
|
|
522
|
-
return "counter(listItemNumberNextNextNext) '. '";
|
|
523
|
-
}
|
|
524
|
-
}
|
|
525
373
|
const debug$j = debugWithName("components:DraggableBlock"), DraggableBlock = (t0) => {
|
|
526
374
|
const $ = reactCompilerRuntime.c(51), {
|
|
527
375
|
children,
|
|
@@ -727,7 +575,7 @@ const EMPTY_ANNOTATIONS = [], inlineBlockStyle = {
|
|
|
727
575
|
let level;
|
|
728
576
|
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) {
|
|
729
577
|
const listType = schemaTypes.lists.find((item_0) => item_0.value === element.listItem);
|
|
730
|
-
renderListItem && listType
|
|
578
|
+
renderListItem && listType && (renderedBlock = renderListItem({
|
|
731
579
|
block: value,
|
|
732
580
|
children: renderedBlock,
|
|
733
581
|
focused,
|
|
@@ -737,7 +585,7 @@ const EMPTY_ANNOTATIONS = [], inlineBlockStyle = {
|
|
|
737
585
|
schemaType: listType,
|
|
738
586
|
level: value.level || 1,
|
|
739
587
|
editorElementRef: blockRef
|
|
740
|
-
})
|
|
588
|
+
}));
|
|
741
589
|
}
|
|
742
590
|
const renderProps = Object.defineProperty({
|
|
743
591
|
children: renderedBlock,
|
|
@@ -783,10 +631,7 @@ const EMPTY_ANNOTATIONS = [], inlineBlockStyle = {
|
|
|
783
631
|
}
|
|
784
632
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { ...attributes, className, children: [
|
|
785
633
|
children,
|
|
786
|
-
/* @__PURE__ */ jsxRuntime.
|
|
787
|
-
renderedBlockFromProps && /* @__PURE__ */ jsxRuntime.jsx("div", { ref: blockRef, contentEditable: !1, children: renderedBlockFromProps }),
|
|
788
|
-
!renderedBlockFromProps && /* @__PURE__ */ jsxRuntime.jsx(DefaultBlockObject, { selected, children: /* @__PURE__ */ jsxRuntime.jsx(DefaultObject, { value }) })
|
|
789
|
-
] })
|
|
634
|
+
/* @__PURE__ */ jsxRuntime.jsx(DraggableBlock, { element, readOnly, blockRef, children: /* @__PURE__ */ jsxRuntime.jsx("div", { ref: blockRef, contentEditable: !1, children: renderedBlockFromProps || /* @__PURE__ */ jsxRuntime.jsx(DefaultObject, { value }) }) })
|
|
790
635
|
] }, element._key);
|
|
791
636
|
};
|
|
792
637
|
Element.displayName = "Element";
|
|
@@ -5684,10 +5529,22 @@ const editorMachine = xstate.setup({
|
|
|
5684
5529
|
input: {}
|
|
5685
5530
|
},
|
|
5686
5531
|
actions: {
|
|
5532
|
+
"add behavior to context": xstate.assign({
|
|
5533
|
+
behaviors: ({
|
|
5534
|
+
context,
|
|
5535
|
+
event
|
|
5536
|
+
}) => (xstate.assertEvent(event, "add behavior"), /* @__PURE__ */ new Set([...context.behaviors, event.behavior]))
|
|
5537
|
+
}),
|
|
5538
|
+
"remove behavior from context": xstate.assign({
|
|
5539
|
+
behaviors: ({
|
|
5540
|
+
context,
|
|
5541
|
+
event
|
|
5542
|
+
}) => (xstate.assertEvent(event, "remove behavior"), context.behaviors.delete(event.behavior), /* @__PURE__ */ new Set([...context.behaviors]))
|
|
5543
|
+
}),
|
|
5687
5544
|
"assign behaviors": xstate.assign({
|
|
5688
5545
|
behaviors: ({
|
|
5689
5546
|
event
|
|
5690
|
-
}) => (xstate.assertEvent(event, "update behaviors"), event.behaviors)
|
|
5547
|
+
}) => (xstate.assertEvent(event, "update behaviors"), new Set(event.behaviors))
|
|
5691
5548
|
}),
|
|
5692
5549
|
"assign schema": xstate.assign({
|
|
5693
5550
|
schema: ({
|
|
@@ -5734,7 +5591,7 @@ const editorMachine = xstate.setup({
|
|
|
5734
5591
|
const defaultAction = event.behaviorEvent.type === "copy" || event.behaviorEvent.type === "key.down" || event.behaviorEvent.type === "key.up" || event.behaviorEvent.type === "paste" ? void 0 : {
|
|
5735
5592
|
...event.behaviorEvent,
|
|
5736
5593
|
editor: event.editor
|
|
5737
|
-
}, eventBehaviors = context.behaviors.filter((behavior) => behavior.on === event.behaviorEvent.type);
|
|
5594
|
+
}, eventBehaviors = [...context.behaviors.values()].filter((behavior) => behavior.on === event.behaviorEvent.type);
|
|
5738
5595
|
if (eventBehaviors.length === 0) {
|
|
5739
5596
|
if (!defaultAction)
|
|
5740
5597
|
return;
|
|
@@ -5817,7 +5674,7 @@ const editorMachine = xstate.setup({
|
|
|
5817
5674
|
context: ({
|
|
5818
5675
|
input
|
|
5819
5676
|
}) => ({
|
|
5820
|
-
behaviors: input.behaviors ?? behavior_core.coreBehaviors,
|
|
5677
|
+
behaviors: new Set(input.behaviors ?? behavior_core.coreBehaviors),
|
|
5821
5678
|
keyGenerator: input.keyGenerator,
|
|
5822
5679
|
pendingEvents: [],
|
|
5823
5680
|
schema: input.schema,
|
|
@@ -5827,6 +5684,12 @@ const editorMachine = xstate.setup({
|
|
|
5827
5684
|
value: input.value
|
|
5828
5685
|
}),
|
|
5829
5686
|
on: {
|
|
5687
|
+
"add behavior": {
|
|
5688
|
+
actions: "add behavior to context"
|
|
5689
|
+
},
|
|
5690
|
+
"remove behavior": {
|
|
5691
|
+
actions: "remove behavior from context"
|
|
5692
|
+
},
|
|
5830
5693
|
unset: {
|
|
5831
5694
|
actions: xstate.emit(({
|
|
5832
5695
|
event
|
|
@@ -6152,6 +6015,15 @@ function createEditorFromActor(editorActor) {
|
|
|
6152
6015
|
editorActorSnapshot: editorActor.getSnapshot(),
|
|
6153
6016
|
slateEditorInstance: slateEditor.instance
|
|
6154
6017
|
}),
|
|
6018
|
+
registerBehavior: (config) => (editorActor.send({
|
|
6019
|
+
type: "add behavior",
|
|
6020
|
+
behavior: config.behavior
|
|
6021
|
+
}), () => {
|
|
6022
|
+
editorActor.send({
|
|
6023
|
+
type: "remove behavior",
|
|
6024
|
+
behavior: config.behavior
|
|
6025
|
+
});
|
|
6026
|
+
}),
|
|
6155
6027
|
send: (event) => {
|
|
6156
6028
|
editorActor.send(event);
|
|
6157
6029
|
},
|