@portabletext/editor 1.34.1 → 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 (112) 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 -67
  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 -67
  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 +24 -13
  32. package/lib/behaviors/index.d.ts +24 -13
  33. package/lib/behaviors/index.js +18 -48
  34. package/lib/behaviors/index.js.map +1 -1
  35. package/lib/index.d.cts +16 -12
  36. package/lib/index.d.ts +16 -12
  37. package/lib/plugins/index.cjs +182 -186
  38. package/lib/plugins/index.cjs.map +1 -1
  39. package/lib/plugins/index.d.cts +31 -23
  40. package/lib/plugins/index.d.ts +31 -23
  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 +6 -198
  46. package/lib/selectors/index.d.ts +6 -198
  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 +12 -5
  51. package/lib/utils/index.d.ts +12 -5
  52. package/lib/utils/index.js.map +1 -1
  53. package/package.json +7 -7
  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 +14 -17
  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 +5 -5
  76. package/src/editor/editor-machine.ts +6 -1
  77. package/src/index.ts +3 -3
  78. package/src/internal-utils/get-text-to-emphasize.ts +29 -7
  79. package/src/plugins/plugin.decorator-shortcut.ts +235 -0
  80. package/src/plugins/plugin.markdown.tsx +56 -8
  81. package/src/plugins/plugin.one-line.tsx +17 -17
  82. package/src/selectors/selector.get-active-list-item.ts +4 -4
  83. package/src/selectors/selector.get-active-style.ts +6 -6
  84. package/src/selectors/selector.get-anchor-block.ts +5 -5
  85. package/src/selectors/selector.get-anchor-child.ts +5 -5
  86. package/src/selectors/selector.get-anchor-span.ts +2 -2
  87. package/src/selectors/selector.get-anchor-text-block.ts +2 -2
  88. package/src/selectors/selector.get-block-offsets.ts +8 -7
  89. package/src/selectors/selector.get-caret-word-selection.ts +19 -16
  90. package/src/selectors/selector.get-next-inline-object.ts +4 -4
  91. package/src/selectors/selector.get-previous-inline-object.ts +4 -4
  92. package/src/selectors/selector.get-selected-slice.ts +7 -4
  93. package/src/selectors/selector.get-selected-spans.ts +9 -9
  94. package/src/selectors/selector.get-selection-end-point.ts +5 -5
  95. package/src/selectors/selector.get-selection-start-point.ts +5 -5
  96. package/src/selectors/selector.get-selection-text.ts +2 -2
  97. package/src/selectors/selector.get-selection.ts +2 -2
  98. package/src/selectors/selector.get-text-before.ts +8 -8
  99. package/src/selectors/selector.get-trimmed-selection.ts +15 -13
  100. package/src/selectors/selector.get-value.ts +4 -4
  101. package/src/selectors/selector.is-at-the-end-of-block.ts +6 -3
  102. package/src/selectors/selector.is-at-the-start-of-block.ts +3 -3
  103. package/src/selectors/selector.is-overlapping-selection.ts +8 -6
  104. package/src/selectors/selector.is-selection-collapsed.ts +6 -5
  105. package/src/selectors/selector.is-selection-expanded.ts +2 -2
  106. package/src/selectors/selectors.ts +59 -59
  107. package/src/types/block-offset.ts +9 -0
  108. package/src/utils/index.ts +0 -1
  109. package/src/utils/util.block-offset.ts +1 -1
  110. package/src/utils/util.block-offsets-to-selection.ts +1 -1
  111. package/src/utils/util.child-selection-point-to-block-offset.ts +1 -1
  112. 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
  };
@@ -5731,11 +5731,9 @@ function createSlateEditor(config) {
5731
5731
  const toggleAnnotationOff = defineBehavior({
5732
5732
  on: "annotation.toggle",
5733
5733
  guard: ({
5734
- context,
5734
+ snapshot,
5735
5735
  event
5736
- }) => isActiveAnnotation(event.annotation.name)({
5737
- context
5738
- }),
5736
+ }) => isActiveAnnotation(event.annotation.name)(snapshot),
5739
5737
  actions: [({
5740
5738
  event
5741
5739
  }) => [raise({
@@ -5745,11 +5743,9 @@ const toggleAnnotationOff = defineBehavior({
5745
5743
  }), toggleAnnotationOn = defineBehavior({
5746
5744
  on: "annotation.toggle",
5747
5745
  guard: ({
5748
- context,
5746
+ snapshot,
5749
5747
  event
5750
- }) => !isActiveAnnotation(event.annotation.name)({
5751
- context
5752
- }),
5748
+ }) => !isActiveAnnotation(event.annotation.name)(snapshot),
5753
5749
  actions: [({
5754
5750
  event
5755
5751
  }) => [raise({
@@ -5759,11 +5755,9 @@ const toggleAnnotationOff = defineBehavior({
5759
5755
  }), toggleDecoratorOff = defineBehavior({
5760
5756
  on: "decorator.toggle",
5761
5757
  guard: ({
5762
- context,
5758
+ snapshot,
5763
5759
  event
5764
- }) => isActiveDecorator(event.decorator)({
5765
- context
5766
- }),
5760
+ }) => isActiveDecorator(event.decorator)(snapshot),
5767
5761
  actions: [({
5768
5762
  event
5769
5763
  }) => [raise({
@@ -5773,11 +5767,9 @@ const toggleAnnotationOff = defineBehavior({
5773
5767
  }), toggleDecoratorOn = defineBehavior({
5774
5768
  on: "decorator.toggle",
5775
5769
  guard: ({
5776
- context,
5770
+ snapshot,
5777
5771
  event
5778
- }) => !isActiveDecorator(event.decorator)({
5779
- context
5780
- }),
5772
+ }) => !isActiveDecorator(event.decorator)(snapshot),
5781
5773
  actions: [({
5782
5774
  event
5783
5775
  }) => [raise({
@@ -5787,11 +5779,9 @@ const toggleAnnotationOff = defineBehavior({
5787
5779
  }), toggleListItemOff = defineBehavior({
5788
5780
  on: "list item.toggle",
5789
5781
  guard: ({
5790
- context,
5782
+ snapshot,
5791
5783
  event
5792
- }) => isActiveListItem(event.listItem)({
5793
- context
5794
- }),
5784
+ }) => isActiveListItem(event.listItem)(snapshot),
5795
5785
  actions: [({
5796
5786
  event
5797
5787
  }) => [raise({
@@ -5801,11 +5791,9 @@ const toggleAnnotationOff = defineBehavior({
5801
5791
  }), toggleListItemOn = defineBehavior({
5802
5792
  on: "list item.toggle",
5803
5793
  guard: ({
5804
- context,
5794
+ snapshot,
5805
5795
  event
5806
- }) => !isActiveListItem(event.listItem)({
5807
- context
5808
- }),
5796
+ }) => !isActiveListItem(event.listItem)(snapshot),
5809
5797
  actions: [({
5810
5798
  event
5811
5799
  }) => [raise({
@@ -5815,11 +5803,9 @@ const toggleAnnotationOff = defineBehavior({
5815
5803
  }), toggleStyleOff = defineBehavior({
5816
5804
  on: "style.toggle",
5817
5805
  guard: ({
5818
- context,
5806
+ snapshot,
5819
5807
  event
5820
- }) => isActiveStyle(event.style)({
5821
- context
5822
- }),
5808
+ }) => isActiveStyle(event.style)(snapshot),
5823
5809
  actions: [({
5824
5810
  event
5825
5811
  }) => [raise({
@@ -5829,11 +5815,9 @@ const toggleAnnotationOff = defineBehavior({
5829
5815
  }), toggleStyleOn = defineBehavior({
5830
5816
  on: "style.toggle",
5831
5817
  guard: ({
5832
- context,
5818
+ snapshot,
5833
5819
  event
5834
- }) => !isActiveStyle(event.style)({
5835
- context
5836
- }),
5820
+ }) => !isActiveStyle(event.style)(snapshot),
5837
5821
  actions: [({
5838
5822
  event
5839
5823
  }) => [raise({
@@ -5843,13 +5827,13 @@ const toggleAnnotationOff = defineBehavior({
5843
5827
  }), raiseDeserializationSuccessOrFailure = defineBehavior({
5844
5828
  on: "deserialize",
5845
5829
  guard: ({
5846
- context,
5830
+ snapshot,
5847
5831
  event
5848
5832
  }) => {
5849
- const deserializeEvents = context.converters.flatMap((converter) => {
5833
+ const deserializeEvents = snapshot.context.converters.flatMap((converter) => {
5850
5834
  const data = event.dataTransfer.getData(converter.mimeType);
5851
5835
  return data ? [converter.deserialize({
5852
- context,
5836
+ snapshot,
5853
5837
  event: {
5854
5838
  type: "deserialize",
5855
5839
  data
@@ -5879,13 +5863,13 @@ const toggleAnnotationOff = defineBehavior({
5879
5863
  }), raiseSerializationSuccessOrFailure = defineBehavior({
5880
5864
  on: "serialize",
5881
5865
  guard: ({
5882
- context,
5866
+ snapshot,
5883
5867
  event
5884
5868
  }) => {
5885
- if (context.converters.length === 0)
5869
+ if (snapshot.context.converters.length === 0)
5886
5870
  return !1;
5887
- const serializeEvents = context.converters.map((converter) => converter.serialize({
5888
- context,
5871
+ const serializeEvents = snapshot.context.converters.map((converter) => converter.serialize({
5872
+ snapshot,
5889
5873
  event
5890
5874
  }));
5891
5875
  return serializeEvents.length === 0 ? !1 : serializeEvents;
@@ -6053,12 +6037,14 @@ const editorMachine = setup({
6053
6037
  for (const eventBehavior of eventBehaviors) {
6054
6038
  const shouldRun = eventBehavior.guard === void 0 || eventBehavior.guard({
6055
6039
  context: editorSnapshot.context,
6040
+ snapshot: editorSnapshot,
6056
6041
  event: event.behaviorEvent
6057
6042
  });
6058
6043
  if (!shouldRun)
6059
6044
  continue;
6060
6045
  const actionIntendSets = eventBehavior.actions.map((actionSet) => actionSet({
6061
6046
  context: editorSnapshot.context,
6047
+ snapshot: editorSnapshot,
6062
6048
  event: event.behaviorEvent
6063
6049
  }, shouldRun));
6064
6050
  for (const actionIntends of actionIntendSets)