@portabletext/editor 1.34.0 → 1.35.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.
Files changed (113) hide show
  1. package/lib/_chunks-cjs/behavior.core.cjs +57 -118
  2. package/lib/_chunks-cjs/behavior.core.cjs.map +1 -1
  3. package/lib/_chunks-cjs/behavior.markdown.cjs +27 -67
  4. package/lib/_chunks-cjs/behavior.markdown.cjs.map +1 -1
  5. package/lib/_chunks-cjs/plugin.event-listener.cjs +53 -71
  6. package/lib/_chunks-cjs/plugin.event-listener.cjs.map +1 -1
  7. package/lib/_chunks-cjs/selector.get-text-before.cjs +5 -7
  8. package/lib/_chunks-cjs/selector.get-text-before.cjs.map +1 -1
  9. package/lib/_chunks-cjs/selector.is-active-style.cjs +22 -36
  10. package/lib/_chunks-cjs/selector.is-active-style.cjs.map +1 -1
  11. package/lib/_chunks-cjs/selector.is-at-the-start-of-block.cjs +68 -153
  12. package/lib/_chunks-cjs/selector.is-at-the-start-of-block.cjs.map +1 -1
  13. package/lib/_chunks-cjs/util.block-offsets-to-selection.cjs.map +1 -1
  14. package/lib/_chunks-cjs/util.slice-blocks.cjs.map +1 -1
  15. package/lib/_chunks-es/behavior.core.js +57 -118
  16. package/lib/_chunks-es/behavior.core.js.map +1 -1
  17. package/lib/_chunks-es/behavior.markdown.js +27 -67
  18. package/lib/_chunks-es/behavior.markdown.js.map +1 -1
  19. package/lib/_chunks-es/plugin.event-listener.js +53 -71
  20. package/lib/_chunks-es/plugin.event-listener.js.map +1 -1
  21. package/lib/_chunks-es/selector.get-text-before.js +5 -7
  22. package/lib/_chunks-es/selector.get-text-before.js.map +1 -1
  23. package/lib/_chunks-es/selector.is-active-style.js +22 -36
  24. package/lib/_chunks-es/selector.is-active-style.js.map +1 -1
  25. package/lib/_chunks-es/selector.is-at-the-start-of-block.js +68 -153
  26. package/lib/_chunks-es/selector.is-at-the-start-of-block.js.map +1 -1
  27. package/lib/_chunks-es/util.block-offsets-to-selection.js.map +1 -1
  28. package/lib/_chunks-es/util.slice-blocks.js.map +1 -1
  29. package/lib/behaviors/index.cjs +18 -48
  30. package/lib/behaviors/index.cjs.map +1 -1
  31. package/lib/behaviors/index.d.cts +28 -16
  32. package/lib/behaviors/index.d.ts +28 -16
  33. package/lib/behaviors/index.js +18 -48
  34. package/lib/behaviors/index.js.map +1 -1
  35. package/lib/index.d.cts +132 -71
  36. package/lib/index.d.ts +132 -71
  37. package/lib/plugins/index.cjs +182 -186
  38. package/lib/plugins/index.cjs.map +1 -1
  39. package/lib/plugins/index.d.cts +147 -82
  40. package/lib/plugins/index.d.ts +147 -82
  41. package/lib/plugins/index.js +182 -186
  42. package/lib/plugins/index.js.map +1 -1
  43. package/lib/selectors/index.cjs +22 -50
  44. package/lib/selectors/index.cjs.map +1 -1
  45. package/lib/selectors/index.d.cts +9 -200
  46. package/lib/selectors/index.d.ts +9 -200
  47. package/lib/selectors/index.js +22 -50
  48. package/lib/selectors/index.js.map +1 -1
  49. package/lib/utils/index.cjs.map +1 -1
  50. package/lib/utils/index.d.cts +15 -7
  51. package/lib/utils/index.d.ts +15 -7
  52. package/lib/utils/index.js.map +1 -1
  53. package/package.json +6 -6
  54. package/src/behaviors/behavior.code-editor.ts +6 -6
  55. package/src/behaviors/behavior.core.annotations.ts +5 -4
  56. package/src/behaviors/behavior.core.block-objects.ts +17 -17
  57. package/src/behaviors/behavior.core.decorators.ts +12 -8
  58. package/src/behaviors/behavior.core.insert-break.ts +27 -29
  59. package/src/behaviors/behavior.core.lists.ts +19 -19
  60. package/src/behaviors/behavior.decorator-pair.ts +200 -0
  61. package/src/behaviors/behavior.default.ts +35 -30
  62. package/src/behaviors/behavior.emoji-picker.ts +12 -12
  63. package/src/behaviors/behavior.links.ts +7 -7
  64. package/src/behaviors/behavior.markdown.ts +41 -42
  65. package/src/behaviors/behavior.types.ts +15 -18
  66. package/src/behaviors/index.ts +0 -1
  67. package/src/converters/converter.json.ts +6 -6
  68. package/src/converters/converter.portable-text.deserialize.test.ts +28 -26
  69. package/src/converters/converter.portable-text.ts +6 -6
  70. package/src/converters/converter.text-html.deserialize.test.ts +17 -15
  71. package/src/converters/converter.text-html.serialize.test.ts +57 -53
  72. package/src/converters/converter.text-html.ts +14 -10
  73. package/src/converters/converter.text-plain.test.ts +17 -15
  74. package/src/converters/converter.text-plain.ts +15 -11
  75. package/src/converters/converter.types.ts +8 -7
  76. package/src/editor/editor-machine.ts +6 -1
  77. package/src/editor/plugins/create-with-event-listeners.ts +0 -5
  78. package/src/index.ts +3 -3
  79. package/src/internal-utils/get-text-to-emphasize.ts +29 -7
  80. package/src/plugins/plugin.decorator-shortcut.ts +235 -0
  81. package/src/plugins/plugin.markdown.tsx +56 -8
  82. package/src/plugins/plugin.one-line.tsx +17 -17
  83. package/src/selectors/selector.get-active-list-item.ts +4 -4
  84. package/src/selectors/selector.get-active-style.ts +6 -6
  85. package/src/selectors/selector.get-anchor-block.ts +5 -5
  86. package/src/selectors/selector.get-anchor-child.ts +5 -5
  87. package/src/selectors/selector.get-anchor-span.ts +2 -2
  88. package/src/selectors/selector.get-anchor-text-block.ts +2 -2
  89. package/src/selectors/selector.get-block-offsets.ts +8 -7
  90. package/src/selectors/selector.get-caret-word-selection.ts +19 -16
  91. package/src/selectors/selector.get-next-inline-object.ts +4 -4
  92. package/src/selectors/selector.get-previous-inline-object.ts +4 -4
  93. package/src/selectors/selector.get-selected-slice.ts +7 -4
  94. package/src/selectors/selector.get-selected-spans.ts +9 -9
  95. package/src/selectors/selector.get-selection-end-point.ts +5 -5
  96. package/src/selectors/selector.get-selection-start-point.ts +5 -5
  97. package/src/selectors/selector.get-selection-text.ts +2 -2
  98. package/src/selectors/selector.get-selection.ts +2 -2
  99. package/src/selectors/selector.get-text-before.ts +8 -8
  100. package/src/selectors/selector.get-trimmed-selection.ts +15 -13
  101. package/src/selectors/selector.get-value.ts +4 -4
  102. package/src/selectors/selector.is-at-the-end-of-block.ts +6 -3
  103. package/src/selectors/selector.is-at-the-start-of-block.ts +3 -3
  104. package/src/selectors/selector.is-overlapping-selection.ts +8 -6
  105. package/src/selectors/selector.is-selection-collapsed.ts +6 -5
  106. package/src/selectors/selector.is-selection-expanded.ts +2 -2
  107. package/src/selectors/selectors.ts +59 -59
  108. package/src/types/block-offset.ts +9 -0
  109. package/src/utils/index.ts +0 -1
  110. package/src/utils/util.block-offset.ts +1 -1
  111. package/src/utils/util.block-offsets-to-selection.ts +1 -1
  112. package/src/utils/util.child-selection-point-to-block-offset.ts +1 -1
  113. package/src/behaviors/behavior.markdown-emphasis.ts +0 -437
@@ -2279,13 +2279,13 @@ Synchronizer.displayName = "Synchronizer";
2279
2279
  const converterJson = {
2280
2280
  mimeType: "application/json",
2281
2281
  serialize: ({
2282
- context,
2282
+ snapshot,
2283
2283
  event
2284
2284
  }) => {
2285
- const portableTextConverter = context.converters.find((converter) => converter.mimeType === "application/x-portable-text");
2285
+ const portableTextConverter = snapshot.context.converters.find((converter) => converter.mimeType === "application/x-portable-text");
2286
2286
  return portableTextConverter ? {
2287
2287
  ...portableTextConverter.serialize({
2288
- context,
2288
+ snapshot,
2289
2289
  event
2290
2290
  }),
2291
2291
  mimeType: "application/json",
@@ -2298,13 +2298,13 @@ const converterJson = {
2298
2298
  };
2299
2299
  },
2300
2300
  deserialize: ({
2301
- context,
2301
+ snapshot,
2302
2302
  event
2303
2303
  }) => {
2304
- const portableTextConverter = context.converters.find((converter) => converter.mimeType === "application/x-portable-text");
2304
+ const portableTextConverter = snapshot.context.converters.find((converter) => converter.mimeType === "application/x-portable-text");
2305
2305
  return portableTextConverter ? {
2306
2306
  ...portableTextConverter.deserialize({
2307
- context,
2307
+ snapshot,
2308
2308
  event
2309
2309
  }),
2310
2310
  mimeType: "application/json"
@@ -2317,10 +2317,10 @@ const converterJson = {
2317
2317
  }, converterPortableText = {
2318
2318
  mimeType: "application/x-portable-text",
2319
2319
  serialize: ({
2320
- context,
2320
+ snapshot,
2321
2321
  event
2322
2322
  }) => {
2323
- if (!context.selection)
2323
+ if (!snapshot.context.selection)
2324
2324
  return {
2325
2325
  type: "serialization.failure",
2326
2326
  mimeType: "application/x-portable-text",
@@ -2328,8 +2328,8 @@ const converterJson = {
2328
2328
  reason: "No selection"
2329
2329
  };
2330
2330
  const blocks = sliceBlocks({
2331
- blocks: context.value,
2332
- selection: context.selection
2331
+ blocks: snapshot.context.value,
2332
+ selection: snapshot.context.selection
2333
2333
  });
2334
2334
  return {
2335
2335
  type: "serialization.success",
@@ -2339,7 +2339,7 @@ const converterJson = {
2339
2339
  };
2340
2340
  },
2341
2341
  deserialize: ({
2342
- context,
2342
+ snapshot,
2343
2343
  event
2344
2344
  }) => {
2345
2345
  const blocks = JSON.parse(event.data);
@@ -2351,7 +2351,7 @@ const converterJson = {
2351
2351
  };
2352
2352
  const parsedBlocks = blocks.flatMap((block) => {
2353
2353
  const parsedBlock = parseBlock({
2354
- context,
2354
+ context: snapshot.context,
2355
2355
  block,
2356
2356
  options: {
2357
2357
  refreshKeys: !0
@@ -2372,10 +2372,10 @@ const converterJson = {
2372
2372
  }, converterTextHtml = {
2373
2373
  mimeType: "text/html",
2374
2374
  serialize: ({
2375
- context,
2375
+ snapshot,
2376
2376
  event
2377
2377
  }) => {
2378
- if (!context.selection)
2378
+ if (!snapshot.context.selection)
2379
2379
  return {
2380
2380
  type: "serialization.failure",
2381
2381
  mimeType: "text/html",
@@ -2383,8 +2383,8 @@ const converterJson = {
2383
2383
  reason: "No selection"
2384
2384
  };
2385
2385
  const blocks = sliceBlocks({
2386
- blocks: context.value,
2387
- selection: context.selection
2386
+ blocks: snapshot.context.value,
2387
+ selection: snapshot.context.selection
2388
2388
  }), html = toHTML(blocks, {
2389
2389
  onMissingComponent: !1,
2390
2390
  components: {
@@ -2406,27 +2406,27 @@ const converterJson = {
2406
2406
  };
2407
2407
  },
2408
2408
  deserialize: ({
2409
- context,
2409
+ snapshot,
2410
2410
  event
2411
2411
  }) => ({
2412
2412
  type: "deserialization.success",
2413
- data: htmlToBlocks(event.data, context.schema.portableText, {
2414
- keyGenerator: context.keyGenerator,
2415
- unstable_whitespaceOnPasteMode: context.schema.block.options.unstable_whitespaceOnPasteMode
2413
+ data: htmlToBlocks(event.data, snapshot.context.schema.portableText, {
2414
+ keyGenerator: snapshot.context.keyGenerator,
2415
+ unstable_whitespaceOnPasteMode: snapshot.context.schema.block.options.unstable_whitespaceOnPasteMode
2416
2416
  }),
2417
2417
  mimeType: "text/html"
2418
2418
  })
2419
2419
  }, converterTextPlain = {
2420
2420
  mimeType: "text/plain",
2421
2421
  serialize: ({
2422
- context,
2422
+ snapshot,
2423
2423
  event
2424
- }) => context.selection ? {
2424
+ }) => snapshot.context.selection ? {
2425
2425
  type: "serialization.success",
2426
2426
  data: sliceBlocks({
2427
- blocks: context.value,
2428
- selection: context.selection
2429
- }).map((block) => isPortableTextTextBlock(block) ? block.children.map((child) => child._type === context.schema.span.name ? child.text : `[${context.schema.inlineObjects.find((inlineObjectType) => inlineObjectType.name === child._type)?.title ?? "Object"}]`).join("") : `[${context.schema.blockObjects.find((blockObjectType) => blockObjectType.name === block._type)?.title ?? "Object"}]`).join(`
2427
+ blocks: snapshot.context.value,
2428
+ selection: snapshot.context.selection
2429
+ }).map((block) => isPortableTextTextBlock(block) ? block.children.map((child) => child._type === snapshot.context.schema.span.name ? child.text : `[${snapshot.context.schema.inlineObjects.find((inlineObjectType) => inlineObjectType.name === child._type)?.title ?? "Object"}]`).join("") : `[${snapshot.context.schema.blockObjects.find((blockObjectType) => blockObjectType.name === block._type)?.title ?? "Object"}]`).join(`
2430
2430
 
2431
2431
  `),
2432
2432
  mimeType: "text/plain",
@@ -2438,14 +2438,14 @@ const converterJson = {
2438
2438
  reason: "No selection"
2439
2439
  },
2440
2440
  deserialize: ({
2441
- context,
2441
+ snapshot,
2442
2442
  event
2443
2443
  }) => {
2444
2444
  const textToHtml = `<html><body>${escapeHtml(event.data).split(/\n{2,}/).map((line) => line ? `<p>${line.replace(/(?:\r\n|\r|\n)/g, "<br/>")}</p>` : "<p></p>").join("")}</body></html>`;
2445
2445
  return {
2446
2446
  type: "deserialization.success",
2447
- data: htmlToBlocks(textToHtml, context.schema.portableText, {
2448
- keyGenerator: context.keyGenerator
2447
+ data: htmlToBlocks(textToHtml, snapshot.context.schema.portableText, {
2448
+ keyGenerator: snapshot.context.keyGenerator
2449
2449
  }),
2450
2450
  mimeType: "text/plain"
2451
2451
  };
@@ -5020,10 +5020,6 @@ function createWithEventListeners(editorActor, subscriptions) {
5020
5020
  }
5021
5021
  });
5022
5022
  }, editor.setFragmentData = (dataTransfer, originEvent) => {
5023
- if (originEvent === "drag") {
5024
- setFragmentData(dataTransfer);
5025
- return;
5026
- }
5027
5023
  if (isApplyingBehaviorActions(editor)) {
5028
5024
  setFragmentData(dataTransfer);
5029
5025
  return;
@@ -5735,11 +5731,9 @@ function createSlateEditor(config) {
5735
5731
  const toggleAnnotationOff = defineBehavior({
5736
5732
  on: "annotation.toggle",
5737
5733
  guard: ({
5738
- context,
5734
+ snapshot,
5739
5735
  event
5740
- }) => isActiveAnnotation(event.annotation.name)({
5741
- context
5742
- }),
5736
+ }) => isActiveAnnotation(event.annotation.name)(snapshot),
5743
5737
  actions: [({
5744
5738
  event
5745
5739
  }) => [raise({
@@ -5749,11 +5743,9 @@ const toggleAnnotationOff = defineBehavior({
5749
5743
  }), toggleAnnotationOn = defineBehavior({
5750
5744
  on: "annotation.toggle",
5751
5745
  guard: ({
5752
- context,
5746
+ snapshot,
5753
5747
  event
5754
- }) => !isActiveAnnotation(event.annotation.name)({
5755
- context
5756
- }),
5748
+ }) => !isActiveAnnotation(event.annotation.name)(snapshot),
5757
5749
  actions: [({
5758
5750
  event
5759
5751
  }) => [raise({
@@ -5763,11 +5755,9 @@ const toggleAnnotationOff = defineBehavior({
5763
5755
  }), toggleDecoratorOff = defineBehavior({
5764
5756
  on: "decorator.toggle",
5765
5757
  guard: ({
5766
- context,
5758
+ snapshot,
5767
5759
  event
5768
- }) => isActiveDecorator(event.decorator)({
5769
- context
5770
- }),
5760
+ }) => isActiveDecorator(event.decorator)(snapshot),
5771
5761
  actions: [({
5772
5762
  event
5773
5763
  }) => [raise({
@@ -5777,11 +5767,9 @@ const toggleAnnotationOff = defineBehavior({
5777
5767
  }), toggleDecoratorOn = defineBehavior({
5778
5768
  on: "decorator.toggle",
5779
5769
  guard: ({
5780
- context,
5770
+ snapshot,
5781
5771
  event
5782
- }) => !isActiveDecorator(event.decorator)({
5783
- context
5784
- }),
5772
+ }) => !isActiveDecorator(event.decorator)(snapshot),
5785
5773
  actions: [({
5786
5774
  event
5787
5775
  }) => [raise({
@@ -5791,11 +5779,9 @@ const toggleAnnotationOff = defineBehavior({
5791
5779
  }), toggleListItemOff = defineBehavior({
5792
5780
  on: "list item.toggle",
5793
5781
  guard: ({
5794
- context,
5782
+ snapshot,
5795
5783
  event
5796
- }) => isActiveListItem(event.listItem)({
5797
- context
5798
- }),
5784
+ }) => isActiveListItem(event.listItem)(snapshot),
5799
5785
  actions: [({
5800
5786
  event
5801
5787
  }) => [raise({
@@ -5805,11 +5791,9 @@ const toggleAnnotationOff = defineBehavior({
5805
5791
  }), toggleListItemOn = defineBehavior({
5806
5792
  on: "list item.toggle",
5807
5793
  guard: ({
5808
- context,
5794
+ snapshot,
5809
5795
  event
5810
- }) => !isActiveListItem(event.listItem)({
5811
- context
5812
- }),
5796
+ }) => !isActiveListItem(event.listItem)(snapshot),
5813
5797
  actions: [({
5814
5798
  event
5815
5799
  }) => [raise({
@@ -5819,11 +5803,9 @@ const toggleAnnotationOff = defineBehavior({
5819
5803
  }), toggleStyleOff = defineBehavior({
5820
5804
  on: "style.toggle",
5821
5805
  guard: ({
5822
- context,
5806
+ snapshot,
5823
5807
  event
5824
- }) => isActiveStyle(event.style)({
5825
- context
5826
- }),
5808
+ }) => isActiveStyle(event.style)(snapshot),
5827
5809
  actions: [({
5828
5810
  event
5829
5811
  }) => [raise({
@@ -5833,11 +5815,9 @@ const toggleAnnotationOff = defineBehavior({
5833
5815
  }), toggleStyleOn = defineBehavior({
5834
5816
  on: "style.toggle",
5835
5817
  guard: ({
5836
- context,
5818
+ snapshot,
5837
5819
  event
5838
- }) => !isActiveStyle(event.style)({
5839
- context
5840
- }),
5820
+ }) => !isActiveStyle(event.style)(snapshot),
5841
5821
  actions: [({
5842
5822
  event
5843
5823
  }) => [raise({
@@ -5847,13 +5827,13 @@ const toggleAnnotationOff = defineBehavior({
5847
5827
  }), raiseDeserializationSuccessOrFailure = defineBehavior({
5848
5828
  on: "deserialize",
5849
5829
  guard: ({
5850
- context,
5830
+ snapshot,
5851
5831
  event
5852
5832
  }) => {
5853
- const deserializeEvents = context.converters.flatMap((converter) => {
5833
+ const deserializeEvents = snapshot.context.converters.flatMap((converter) => {
5854
5834
  const data = event.dataTransfer.getData(converter.mimeType);
5855
5835
  return data ? [converter.deserialize({
5856
- context,
5836
+ snapshot,
5857
5837
  event: {
5858
5838
  type: "deserialize",
5859
5839
  data
@@ -5883,13 +5863,13 @@ const toggleAnnotationOff = defineBehavior({
5883
5863
  }), raiseSerializationSuccessOrFailure = defineBehavior({
5884
5864
  on: "serialize",
5885
5865
  guard: ({
5886
- context,
5866
+ snapshot,
5887
5867
  event
5888
5868
  }) => {
5889
- if (context.converters.length === 0)
5869
+ if (snapshot.context.converters.length === 0)
5890
5870
  return !1;
5891
- const serializeEvents = context.converters.map((converter) => converter.serialize({
5892
- context,
5871
+ const serializeEvents = snapshot.context.converters.map((converter) => converter.serialize({
5872
+ snapshot,
5893
5873
  event
5894
5874
  }));
5895
5875
  return serializeEvents.length === 0 ? !1 : serializeEvents;
@@ -6057,12 +6037,14 @@ const editorMachine = setup({
6057
6037
  for (const eventBehavior of eventBehaviors) {
6058
6038
  const shouldRun = eventBehavior.guard === void 0 || eventBehavior.guard({
6059
6039
  context: editorSnapshot.context,
6040
+ snapshot: editorSnapshot,
6060
6041
  event: event.behaviorEvent
6061
6042
  });
6062
6043
  if (!shouldRun)
6063
6044
  continue;
6064
6045
  const actionIntendSets = eventBehavior.actions.map((actionSet) => actionSet({
6065
6046
  context: editorSnapshot.context,
6047
+ snapshot: editorSnapshot,
6066
6048
  event: event.behaviorEvent
6067
6049
  }, shouldRun));
6068
6050
  for (const actionIntends of actionIntendSets)