@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/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"), styledComponents = require("styled-components"), 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");
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] !== props.value ? (t0 = JSON.stringify(props.value, null, 2), $[0] = props.value, $[1] = t0) : t0 = $[1];
360
+ $[0] === Symbol.for("react.memo_cache_sentinel") ? (t0 = {
361
+ userSelect: "none"
362
+ }, $[0] = t0) : t0 = $[0];
361
363
  let t1;
362
- return $[2] !== t0 ? (t1 = /* @__PURE__ */ jsxRuntime.jsx("div", { children: /* @__PURE__ */ jsxRuntime.jsx("pre", { children: t0 }) }), $[2] = t0, $[3] = t1) : t1 = $[3], t1;
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 ? renderedBlock = renderListItem({
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
- }) : renderedBlock = /* @__PURE__ */ jsxRuntime.jsx(DefaultListItem, { listStyle: value.listItem || schemaTypes.lists[0].value, listLevel: value.level || 1, children: /* @__PURE__ */ jsxRuntime.jsx(DefaultListItemInner, { children: renderedBlock }) });
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.jsxs(DraggableBlock, { element, readOnly, blockRef, children: [
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
  },