@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
@@ -4,36 +4,28 @@ function createMarkdownBehaviors(config) {
4
4
  const automaticBlockquoteOnSpace = behavior_core.defineBehavior({
5
5
  on: "insert.text",
6
6
  guard: ({
7
- context,
7
+ snapshot,
8
8
  event
9
9
  }) => {
10
10
  if (event.text !== " ")
11
11
  return !1;
12
- const selectionCollapsed = selector_isAtTheStartOfBlock.isSelectionCollapsed({
13
- context
14
- }), focusTextBlock = selector_isAtTheStartOfBlock.getFocusTextBlock({
15
- context
16
- }), focusSpan = selector_isAtTheStartOfBlock.getFocusSpan({
17
- context
18
- });
12
+ const selectionCollapsed = selector_isAtTheStartOfBlock.isSelectionCollapsed(snapshot), focusTextBlock = selector_isAtTheStartOfBlock.getFocusTextBlock(snapshot), focusSpan = selector_isAtTheStartOfBlock.getFocusSpan(snapshot);
19
13
  if (!selectionCollapsed || !focusTextBlock || !focusSpan)
20
14
  return !1;
21
- const previousInlineObject = selector_isAtTheStartOfBlock.getPreviousInlineObject({
22
- context
23
- }), blockOffset = util_sliceBlocks.spanSelectionPointToBlockOffset({
24
- value: context.value,
15
+ const previousInlineObject = selector_isAtTheStartOfBlock.getPreviousInlineObject(snapshot), blockOffset = util_sliceBlocks.spanSelectionPointToBlockOffset({
16
+ value: snapshot.context.value,
25
17
  selectionPoint: {
26
18
  path: [{
27
19
  _key: focusTextBlock.node._key
28
20
  }, "children", {
29
21
  _key: focusSpan.node._key
30
22
  }],
31
- offset: context.selection?.focus.offset ?? 0
23
+ offset: snapshot.context.selection?.focus.offset ?? 0
32
24
  }
33
25
  });
34
26
  if (previousInlineObject || !blockOffset)
35
27
  return !1;
36
- const blockText = util_sliceBlocks.getTextBlockText(focusTextBlock.node), caretAtTheEndOfQuote = blockOffset.offset === 1, looksLikeMarkdownQuote = /^>/.test(blockText), blockquoteStyle = config.blockquoteStyle?.(context);
28
+ const blockText = util_sliceBlocks.getTextBlockText(focusTextBlock.node), caretAtTheEndOfQuote = blockOffset.offset === 1, looksLikeMarkdownQuote = /^>/.test(blockText), blockquoteStyle = config.blockquoteStyle?.(snapshot.context);
37
29
  return caretAtTheEndOfQuote && looksLikeMarkdownQuote && blockquoteStyle !== void 0 ? {
38
30
  focusTextBlock,
39
31
  style: blockquoteStyle
@@ -69,24 +61,16 @@ function createMarkdownBehaviors(config) {
69
61
  }), automaticHr = behavior_core.defineBehavior({
70
62
  on: "insert.text",
71
63
  guard: ({
72
- context,
64
+ snapshot,
73
65
  event
74
66
  }) => {
75
67
  const hrCharacter = event.text === "-" ? "-" : event.text === "*" ? "*" : event.text === "_" ? "_" : void 0;
76
68
  if (hrCharacter === void 0)
77
69
  return !1;
78
- const hrObject = config.horizontalRuleObject?.(context), focusBlock = selector_isAtTheStartOfBlock.getFocusTextBlock({
79
- context
80
- }), selectionCollapsed = selector_isAtTheStartOfBlock.isSelectionCollapsed({
81
- context
82
- });
70
+ const hrObject = config.horizontalRuleObject?.(snapshot.context), focusBlock = selector_isAtTheStartOfBlock.getFocusTextBlock(snapshot), selectionCollapsed = selector_isAtTheStartOfBlock.isSelectionCollapsed(snapshot);
83
71
  if (!hrObject || !focusBlock || !selectionCollapsed)
84
72
  return !1;
85
- const previousInlineObject = selector_isAtTheStartOfBlock.getPreviousInlineObject({
86
- context
87
- }), textBefore = selector_getTextBefore.getBlockTextBefore({
88
- context
89
- }), hrBlockOffsets = {
73
+ const previousInlineObject = selector_isAtTheStartOfBlock.getPreviousInlineObject(snapshot), textBefore = selector_getTextBefore.getBlockTextBefore(snapshot), hrBlockOffsets = {
90
74
  anchor: {
91
75
  path: focusBlock.path,
92
76
  offset: 0
@@ -122,12 +106,10 @@ function createMarkdownBehaviors(config) {
122
106
  }), automaticHrOnPaste = behavior_core.defineBehavior({
123
107
  on: "paste",
124
108
  guard: ({
125
- context,
109
+ snapshot,
126
110
  event
127
111
  }) => {
128
- const text = event.data.getData("text/plain"), hrRegExp = /^(---)$|(___)$|(\*\*\*)$/gm, hrCharacters = text.match(hrRegExp)?.[0], hrObject = config.horizontalRuleObject?.(context), focusBlock = selector_isAtTheStartOfBlock.getFocusBlock({
129
- context
130
- });
112
+ const text = event.data.getData("text/plain"), hrRegExp = /^(---)$|(___)$|(\*\*\*)$/gm, hrCharacters = text.match(hrRegExp)?.[0], hrObject = config.horizontalRuleObject?.(snapshot.context), focusBlock = selector_isAtTheStartOfBlock.getFocusBlock(snapshot);
131
113
  return !hrCharacters || !hrObject || !focusBlock ? !1 : {
132
114
  hrCharacters,
133
115
  hrObject,
@@ -163,40 +145,32 @@ function createMarkdownBehaviors(config) {
163
145
  }), automaticHeadingOnSpace = behavior_core.defineBehavior({
164
146
  on: "insert.text",
165
147
  guard: ({
166
- context,
148
+ snapshot,
167
149
  event
168
150
  }) => {
169
151
  if (event.text !== " ")
170
152
  return !1;
171
- const selectionCollapsed = selector_isAtTheStartOfBlock.isSelectionCollapsed({
172
- context
173
- }), focusTextBlock = selector_isAtTheStartOfBlock.getFocusTextBlock({
174
- context
175
- }), focusSpan = selector_isAtTheStartOfBlock.getFocusSpan({
176
- context
177
- });
153
+ const selectionCollapsed = selector_isAtTheStartOfBlock.isSelectionCollapsed(snapshot), focusTextBlock = selector_isAtTheStartOfBlock.getFocusTextBlock(snapshot), focusSpan = selector_isAtTheStartOfBlock.getFocusSpan(snapshot);
178
154
  if (!selectionCollapsed || !focusTextBlock || !focusSpan)
179
155
  return !1;
180
156
  const blockOffset = util_sliceBlocks.spanSelectionPointToBlockOffset({
181
- value: context.value,
157
+ value: snapshot.context.value,
182
158
  selectionPoint: {
183
159
  path: [{
184
160
  _key: focusTextBlock.node._key
185
161
  }, "children", {
186
162
  _key: focusSpan.node._key
187
163
  }],
188
- offset: context.selection?.focus.offset ?? 0
164
+ offset: snapshot.context.selection?.focus.offset ?? 0
189
165
  }
190
166
  });
191
167
  if (!blockOffset)
192
168
  return !1;
193
- const previousInlineObject = selector_isAtTheStartOfBlock.getPreviousInlineObject({
194
- context
195
- }), blockText = util_sliceBlocks.getTextBlockText(focusTextBlock.node), markdownHeadingSearch = /^#+/.exec(blockText), level = markdownHeadingSearch ? markdownHeadingSearch[0].length : void 0, caretAtTheEndOfHeading = blockOffset.offset === level;
169
+ const previousInlineObject = selector_isAtTheStartOfBlock.getPreviousInlineObject(snapshot), blockText = util_sliceBlocks.getTextBlockText(focusTextBlock.node), markdownHeadingSearch = /^#+/.exec(blockText), level = markdownHeadingSearch ? markdownHeadingSearch[0].length : void 0, caretAtTheEndOfHeading = blockOffset.offset === level;
196
170
  if (previousInlineObject || !caretAtTheEndOfHeading)
197
171
  return !1;
198
172
  const style = level !== void 0 ? config.headingStyle?.({
199
- schema: context.schema,
173
+ schema: snapshot.context.schema,
200
174
  level
201
175
  }) : void 0;
202
176
  return level !== void 0 && style !== void 0 ? {
@@ -235,18 +209,12 @@ function createMarkdownBehaviors(config) {
235
209
  }), clearStyleOnBackspace = behavior_core.defineBehavior({
236
210
  on: "delete.backward",
237
211
  guard: ({
238
- context
212
+ snapshot
239
213
  }) => {
240
- const selectionCollapsed = selector_isAtTheStartOfBlock.isSelectionCollapsed({
241
- context
242
- }), focusTextBlock = selector_isAtTheStartOfBlock.getFocusTextBlock({
243
- context
244
- }), focusSpan = selector_isAtTheStartOfBlock.getFocusSpan({
245
- context
246
- });
214
+ const selectionCollapsed = selector_isAtTheStartOfBlock.isSelectionCollapsed(snapshot), focusTextBlock = selector_isAtTheStartOfBlock.getFocusTextBlock(snapshot), focusSpan = selector_isAtTheStartOfBlock.getFocusSpan(snapshot);
247
215
  if (!selectionCollapsed || !focusTextBlock || !focusSpan)
248
216
  return !1;
249
- const atTheBeginningOfBLock = focusTextBlock.node.children[0]._key === focusSpan.node._key && context.selection?.focus.offset === 0, defaultStyle = config.defaultStyle?.(context);
217
+ const atTheBeginningOfBLock = focusTextBlock.node.children[0]._key === focusSpan.node._key && snapshot.context.selection?.focus.offset === 0, defaultStyle = config.defaultStyle?.(snapshot.context);
250
218
  return atTheBeginningOfBLock && defaultStyle && focusTextBlock.node.style !== defaultStyle ? {
251
219
  defaultStyle,
252
220
  focusTextBlock
@@ -265,36 +233,28 @@ function createMarkdownBehaviors(config) {
265
233
  }), automaticListOnSpace = behavior_core.defineBehavior({
266
234
  on: "insert.text",
267
235
  guard: ({
268
- context,
236
+ snapshot,
269
237
  event
270
238
  }) => {
271
239
  if (event.text !== " ")
272
240
  return !1;
273
- const selectionCollapsed = selector_isAtTheStartOfBlock.isSelectionCollapsed({
274
- context
275
- }), focusTextBlock = selector_isAtTheStartOfBlock.getFocusTextBlock({
276
- context
277
- }), focusSpan = selector_isAtTheStartOfBlock.getFocusSpan({
278
- context
279
- });
241
+ const selectionCollapsed = selector_isAtTheStartOfBlock.isSelectionCollapsed(snapshot), focusTextBlock = selector_isAtTheStartOfBlock.getFocusTextBlock(snapshot), focusSpan = selector_isAtTheStartOfBlock.getFocusSpan(snapshot);
280
242
  if (!selectionCollapsed || !focusTextBlock || !focusSpan)
281
243
  return !1;
282
- const previousInlineObject = selector_isAtTheStartOfBlock.getPreviousInlineObject({
283
- context
284
- }), blockOffset = util_sliceBlocks.spanSelectionPointToBlockOffset({
285
- value: context.value,
244
+ const previousInlineObject = selector_isAtTheStartOfBlock.getPreviousInlineObject(snapshot), blockOffset = util_sliceBlocks.spanSelectionPointToBlockOffset({
245
+ value: snapshot.context.value,
286
246
  selectionPoint: {
287
247
  path: [{
288
248
  _key: focusTextBlock.node._key
289
249
  }, "children", {
290
250
  _key: focusSpan.node._key
291
251
  }],
292
- offset: context.selection?.focus.offset ?? 0
252
+ offset: snapshot.context.selection?.focus.offset ?? 0
293
253
  }
294
254
  });
295
255
  if (previousInlineObject || !blockOffset)
296
256
  return !1;
297
- const blockText = util_sliceBlocks.getTextBlockText(focusTextBlock.node), defaultStyle = config.defaultStyle?.(context), looksLikeUnorderedList = /^(-|\*)/.test(blockText), unorderedListStyle = config.unorderedListStyle?.(context), caretAtTheEndOfUnorderedList = blockOffset.offset === 1;
257
+ const blockText = util_sliceBlocks.getTextBlockText(focusTextBlock.node), defaultStyle = config.defaultStyle?.(snapshot.context), looksLikeUnorderedList = /^(-|\*)/.test(blockText), unorderedListStyle = config.unorderedListStyle?.(snapshot.context), caretAtTheEndOfUnorderedList = blockOffset.offset === 1;
298
258
  if (defaultStyle && caretAtTheEndOfUnorderedList && looksLikeUnorderedList && unorderedListStyle !== void 0)
299
259
  return {
300
260
  focusTextBlock,
@@ -302,7 +262,7 @@ function createMarkdownBehaviors(config) {
302
262
  listItemLength: 1,
303
263
  style: defaultStyle
304
264
  };
305
- const looksLikeOrderedList = /^1\./.test(blockText), orderedListStyle = config.orderedListStyle?.(context), caretAtTheEndOfOrderedList = blockOffset.offset === 2;
265
+ const looksLikeOrderedList = /^1\./.test(blockText), orderedListStyle = config.orderedListStyle?.(snapshot.context), caretAtTheEndOfOrderedList = blockOffset.offset === 2;
306
266
  return defaultStyle && caretAtTheEndOfOrderedList && looksLikeOrderedList && orderedListStyle !== void 0 ? {
307
267
  focusTextBlock,
308
268
  listItem: orderedListStyle,
@@ -1 +1 @@
1
- {"version":3,"file":"behavior.markdown.cjs","sources":["../../src/behaviors/behavior.markdown.ts"],"sourcesContent":["import {isPortableTextTextBlock} from '@sanity/types'\nimport type {EditorSchema} from '../editor/define-schema'\nimport * as selectors from '../selectors'\nimport {getBlockTextBefore} from '../selectors/selector.get-text-before'\nimport {spanSelectionPointToBlockOffset} from '../utils/util.block-offset'\nimport {getTextBlockText} from '../utils/util.get-text-block-text'\nimport {defineBehavior} from './behavior.types'\n\n/**\n * @beta\n */\nexport type MarkdownBehaviorsConfig = {\n horizontalRuleObject?: (context: {\n schema: EditorSchema\n }) => {name: string; value?: {[prop: string]: unknown}} | undefined\n defaultStyle?: (context: {schema: EditorSchema}) => string | undefined\n headingStyle?: (context: {\n schema: EditorSchema\n level: number\n }) => string | undefined\n blockquoteStyle?: (context: {schema: EditorSchema}) => string | undefined\n unorderedListStyle?: (context: {schema: EditorSchema}) => string | undefined\n orderedListStyle?: (context: {schema: EditorSchema}) => string | undefined\n}\n\n/**\n * @beta\n * Create markdown behaviors for common markdown actions such as converting ### to headings, --- to HRs, and more.\n *\n * @example\n * Configure the bundled markdown behaviors\n * ```ts\n * import {EditorProvider} from '@portabletext/editor'\n * import {createMarkdownBehaviors, coreBehaviors} from '@portabletext/editor/behaviors'\n *\n * function App() {\n * return (\n * <EditorProvider\n * initialConfig={{\n * behaviors: [\n * ...coreBehaviors,\n * ...createMarkdownBehaviors({\n * horizontalRuleObject: ({schema}) => {\n * const name = schema.blockObjects.find(\n * (object) => object.name === 'break',\n * )?.name\n * return name ? {name} : undefined\n * },\n * defaultStyle: ({schema}) => schema.styles[0].value,\n * headingStyle: ({schema, level}) =>\n * schema.styles.find((style) => style.value === `h${level}`)\n * ?.value,\n * blockquoteStyle: ({schema}) =>\n * schema.styles.find((style) => style.value === 'blockquote')\n * ?.value,\n * unorderedListStyle: ({schema}) =>\n * schema.lists.find((list) => list.value === 'bullet')?.value,\n * orderedListStyle: ({schema}) =>\n * schema.lists.find((list) => list.value === 'number')?.value,\n * }),\n * ]\n * }}\n * >\n * {...}\n * </EditorProvider>\n * )\n * }\n * ```\n *\n */\nexport function createMarkdownBehaviors(config: MarkdownBehaviorsConfig) {\n const automaticBlockquoteOnSpace = defineBehavior({\n on: 'insert.text',\n guard: ({context, event}) => {\n const isSpace = event.text === ' '\n\n if (!isSpace) {\n return false\n }\n\n const selectionCollapsed = selectors.isSelectionCollapsed({context})\n const focusTextBlock = selectors.getFocusTextBlock({context})\n const focusSpan = selectors.getFocusSpan({context})\n\n if (!selectionCollapsed || !focusTextBlock || !focusSpan) {\n return false\n }\n\n const previousInlineObject = selectors.getPreviousInlineObject({context})\n const blockOffset = spanSelectionPointToBlockOffset({\n value: context.value,\n selectionPoint: {\n path: [\n {_key: focusTextBlock.node._key},\n 'children',\n {_key: focusSpan.node._key},\n ],\n offset: context.selection?.focus.offset ?? 0,\n },\n })\n\n if (previousInlineObject || !blockOffset) {\n return false\n }\n\n const blockText = getTextBlockText(focusTextBlock.node)\n const caretAtTheEndOfQuote = blockOffset.offset === 1\n const looksLikeMarkdownQuote = /^>/.test(blockText)\n const blockquoteStyle = config.blockquoteStyle?.(context)\n\n if (\n caretAtTheEndOfQuote &&\n looksLikeMarkdownQuote &&\n blockquoteStyle !== undefined\n ) {\n return {focusTextBlock, style: blockquoteStyle}\n }\n\n return false\n },\n actions: [\n () => [\n {\n type: 'insert.text',\n text: ' ',\n },\n ],\n (_, {focusTextBlock, style}) => [\n {\n type: 'block.unset',\n props: ['listItem', 'level'],\n at: focusTextBlock.path,\n },\n {\n type: 'block.set',\n props: {style},\n at: focusTextBlock.path,\n },\n {\n type: 'delete.text',\n anchor: {\n path: focusTextBlock.path,\n offset: 0,\n },\n focus: {\n path: focusTextBlock.path,\n offset: 2,\n },\n },\n ],\n ],\n })\n const automaticHr = defineBehavior({\n on: 'insert.text',\n guard: ({context, event}) => {\n const hrCharacter =\n event.text === '-'\n ? '-'\n : event.text === '*'\n ? '*'\n : event.text === '_'\n ? '_'\n : undefined\n\n if (hrCharacter === undefined) {\n return false\n }\n\n const hrObject = config.horizontalRuleObject?.(context)\n const focusBlock = selectors.getFocusTextBlock({context})\n const selectionCollapsed = selectors.isSelectionCollapsed({context})\n\n if (!hrObject || !focusBlock || !selectionCollapsed) {\n return false\n }\n\n const previousInlineObject = selectors.getPreviousInlineObject({context})\n const textBefore = getBlockTextBefore({context})\n const hrBlockOffsets = {\n anchor: {\n path: focusBlock.path,\n offset: 0,\n },\n focus: {\n path: focusBlock.path,\n offset: 3,\n },\n }\n\n if (\n !previousInlineObject &&\n textBefore === `${hrCharacter}${hrCharacter}`\n ) {\n return {hrObject, focusBlock, hrCharacter, hrBlockOffsets}\n }\n\n return false\n },\n actions: [\n (_, {hrCharacter}) => [\n {\n type: 'insert.text',\n text: hrCharacter,\n },\n ],\n (_, {hrObject, hrBlockOffsets}) => [\n {\n type: 'insert.block object',\n placement: 'before',\n blockObject: hrObject,\n },\n {\n type: 'delete.text',\n ...hrBlockOffsets,\n },\n ],\n ],\n })\n const automaticHrOnPaste = defineBehavior({\n on: 'paste',\n guard: ({context, event}) => {\n const text = event.data.getData('text/plain')\n const hrRegExp = /^(---)$|(___)$|(\\*\\*\\*)$/gm\n const hrCharacters = text.match(hrRegExp)?.[0]\n const hrObject = config.horizontalRuleObject?.(context)\n const focusBlock = selectors.getFocusBlock({context})\n\n if (!hrCharacters || !hrObject || !focusBlock) {\n return false\n }\n\n return {hrCharacters, hrObject, focusBlock}\n },\n actions: [\n (_, {hrCharacters}) => [\n {\n type: 'insert.text',\n text: hrCharacters,\n },\n ],\n (_, {hrObject, focusBlock}) =>\n isPortableTextTextBlock(focusBlock.node)\n ? [\n {\n type: 'insert.text block',\n textBlock: {children: focusBlock.node.children},\n placement: 'after',\n },\n {\n type: 'insert.block object',\n blockObject: hrObject,\n placement: 'after',\n },\n {type: 'delete.block', blockPath: focusBlock.path},\n ]\n : [\n {\n type: 'insert.block object',\n blockObject: hrObject,\n placement: 'after',\n },\n ],\n ],\n })\n const automaticHeadingOnSpace = defineBehavior({\n on: 'insert.text',\n guard: ({context, event}) => {\n const isSpace = event.text === ' '\n\n if (!isSpace) {\n return false\n }\n\n const selectionCollapsed = selectors.isSelectionCollapsed({context})\n const focusTextBlock = selectors.getFocusTextBlock({context})\n const focusSpan = selectors.getFocusSpan({context})\n\n if (!selectionCollapsed || !focusTextBlock || !focusSpan) {\n return false\n }\n\n const blockOffset = spanSelectionPointToBlockOffset({\n value: context.value,\n selectionPoint: {\n path: [\n {_key: focusTextBlock.node._key},\n 'children',\n {_key: focusSpan.node._key},\n ],\n offset: context.selection?.focus.offset ?? 0,\n },\n })\n\n if (!blockOffset) {\n return false\n }\n\n const previousInlineObject = selectors.getPreviousInlineObject({context})\n const blockText = getTextBlockText(focusTextBlock.node)\n const markdownHeadingSearch = /^#+/.exec(blockText)\n const level = markdownHeadingSearch\n ? markdownHeadingSearch[0].length\n : undefined\n const caretAtTheEndOfHeading = blockOffset.offset === level\n\n if (previousInlineObject || !caretAtTheEndOfHeading) {\n return false\n }\n\n const style =\n level !== undefined\n ? config.headingStyle?.({schema: context.schema, level})\n : undefined\n\n if (level !== undefined && style !== undefined) {\n return {\n focusTextBlock,\n style: style,\n level,\n }\n }\n\n return false\n },\n actions: [\n ({event}) => [event],\n (_, {focusTextBlock, style, level}) => [\n {\n type: 'block.unset',\n props: ['listItem', 'level'],\n at: focusTextBlock.path,\n },\n {\n type: 'block.set',\n props: {style},\n at: focusTextBlock.path,\n },\n {\n type: 'delete.text',\n anchor: {\n path: focusTextBlock.path,\n offset: 0,\n },\n focus: {\n path: focusTextBlock.path,\n offset: level + 1,\n },\n },\n ],\n ],\n })\n const clearStyleOnBackspace = defineBehavior({\n on: 'delete.backward',\n guard: ({context}) => {\n const selectionCollapsed = selectors.isSelectionCollapsed({context})\n const focusTextBlock = selectors.getFocusTextBlock({context})\n const focusSpan = selectors.getFocusSpan({context})\n\n if (!selectionCollapsed || !focusTextBlock || !focusSpan) {\n return false\n }\n\n const atTheBeginningOfBLock =\n focusTextBlock.node.children[0]._key === focusSpan.node._key &&\n context.selection?.focus.offset === 0\n\n const defaultStyle = config.defaultStyle?.(context)\n\n if (\n atTheBeginningOfBLock &&\n defaultStyle &&\n focusTextBlock.node.style !== defaultStyle\n ) {\n return {defaultStyle, focusTextBlock}\n }\n\n return false\n },\n actions: [\n (_, {defaultStyle, focusTextBlock}) => [\n {\n type: 'block.set',\n props: {style: defaultStyle},\n at: focusTextBlock.path,\n },\n ],\n ],\n })\n const automaticListOnSpace = defineBehavior({\n on: 'insert.text',\n guard: ({context, event}) => {\n const isSpace = event.text === ' '\n\n if (!isSpace) {\n return false\n }\n\n const selectionCollapsed = selectors.isSelectionCollapsed({context})\n const focusTextBlock = selectors.getFocusTextBlock({context})\n const focusSpan = selectors.getFocusSpan({context})\n\n if (!selectionCollapsed || !focusTextBlock || !focusSpan) {\n return false\n }\n\n const previousInlineObject = selectors.getPreviousInlineObject({context})\n const blockOffset = spanSelectionPointToBlockOffset({\n value: context.value,\n selectionPoint: {\n path: [\n {_key: focusTextBlock.node._key},\n 'children',\n {_key: focusSpan.node._key},\n ],\n offset: context.selection?.focus.offset ?? 0,\n },\n })\n\n if (previousInlineObject || !blockOffset) {\n return false\n }\n\n const blockText = getTextBlockText(focusTextBlock.node)\n const defaultStyle = config.defaultStyle?.(context)\n const looksLikeUnorderedList = /^(-|\\*)/.test(blockText)\n const unorderedListStyle = config.unorderedListStyle?.(context)\n const caretAtTheEndOfUnorderedList = blockOffset.offset === 1\n\n if (\n defaultStyle &&\n caretAtTheEndOfUnorderedList &&\n looksLikeUnorderedList &&\n unorderedListStyle !== undefined\n ) {\n return {\n focusTextBlock,\n listItem: unorderedListStyle,\n listItemLength: 1,\n style: defaultStyle,\n }\n }\n\n const looksLikeOrderedList = /^1\\./.test(blockText)\n const orderedListStyle = config.orderedListStyle?.(context)\n const caretAtTheEndOfOrderedList = blockOffset.offset === 2\n\n if (\n defaultStyle &&\n caretAtTheEndOfOrderedList &&\n looksLikeOrderedList &&\n orderedListStyle !== undefined\n ) {\n return {\n focusTextBlock,\n listItem: orderedListStyle,\n listItemLength: 2,\n style: defaultStyle,\n }\n }\n\n return false\n },\n actions: [\n ({event}) => [event],\n (_, {focusTextBlock, style, listItem, listItemLength}) => [\n {\n type: 'block.set',\n props: {\n listItem,\n level: 1,\n style,\n },\n at: focusTextBlock.path,\n },\n {\n type: 'delete.text',\n anchor: {\n path: focusTextBlock.path,\n offset: 0,\n },\n focus: {\n path: focusTextBlock.path,\n offset: listItemLength + 1,\n },\n },\n ],\n ],\n })\n\n const markdownBehaviors = [\n automaticBlockquoteOnSpace,\n automaticHeadingOnSpace,\n automaticHr,\n automaticHrOnPaste,\n clearStyleOnBackspace,\n automaticListOnSpace,\n ]\n\n return markdownBehaviors\n}\n"],"names":["createMarkdownBehaviors","config","automaticBlockquoteOnSpace","defineBehavior","on","guard","context","event","text","selectionCollapsed","selectors","focusTextBlock","focusSpan","previousInlineObject","blockOffset","spanSelectionPointToBlockOffset","value","selectionPoint","path","_key","node","offset","selection","focus","blockText","getTextBlockText","caretAtTheEndOfQuote","looksLikeMarkdownQuote","test","blockquoteStyle","undefined","style","actions","type","_","props","at","anchor","automaticHr","hrCharacter","hrObject","horizontalRuleObject","focusBlock","textBefore","getBlockTextBefore","hrBlockOffsets","placement","blockObject","automaticHrOnPaste","data","getData","hrRegExp","hrCharacters","match","isPortableTextTextBlock","textBlock","children","blockPath","automaticHeadingOnSpace","markdownHeadingSearch","exec","level","length","caretAtTheEndOfHeading","headingStyle","schema","clearStyleOnBackspace","atTheBeginningOfBLock","defaultStyle","automaticListOnSpace","looksLikeUnorderedList","unorderedListStyle","caretAtTheEndOfUnorderedList","listItem","listItemLength","looksLikeOrderedList","orderedListStyle","caretAtTheEndOfOrderedList"],"mappings":"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"}
1
+ {"version":3,"file":"behavior.markdown.cjs","sources":["../../src/behaviors/behavior.markdown.ts"],"sourcesContent":["import {isPortableTextTextBlock} from '@sanity/types'\nimport type {EditorSchema} from '../editor/define-schema'\nimport * as selectors from '../selectors'\nimport {spanSelectionPointToBlockOffset} from '../utils/util.block-offset'\nimport {getTextBlockText} from '../utils/util.get-text-block-text'\nimport {defineBehavior} from './behavior.types'\n\n/**\n * @beta\n */\nexport type MarkdownBehaviorsConfig = {\n horizontalRuleObject?: (context: {\n schema: EditorSchema\n }) => {name: string; value?: {[prop: string]: unknown}} | undefined\n defaultStyle?: (context: {schema: EditorSchema}) => string | undefined\n headingStyle?: (context: {\n schema: EditorSchema\n level: number\n }) => string | undefined\n blockquoteStyle?: (context: {schema: EditorSchema}) => string | undefined\n unorderedListStyle?: (context: {schema: EditorSchema}) => string | undefined\n orderedListStyle?: (context: {schema: EditorSchema}) => string | undefined\n}\n\n/**\n * @beta\n * Create markdown behaviors for common markdown actions such as converting ### to headings, --- to HRs, and more.\n *\n * @example\n * Configure the bundled markdown behaviors\n * ```ts\n * import {EditorProvider} from '@portabletext/editor'\n * import {createMarkdownBehaviors, coreBehaviors} from '@portabletext/editor/behaviors'\n *\n * function App() {\n * return (\n * <EditorProvider\n * initialConfig={{\n * behaviors: [\n * ...coreBehaviors,\n * ...createMarkdownBehaviors({\n * horizontalRuleObject: ({schema}) => {\n * const name = schema.blockObjects.find(\n * (object) => object.name === 'break',\n * )?.name\n * return name ? {name} : undefined\n * },\n * defaultStyle: ({schema}) => schema.styles[0].value,\n * headingStyle: ({schema, level}) =>\n * schema.styles.find((style) => style.value === `h${level}`)\n * ?.value,\n * blockquoteStyle: ({schema}) =>\n * schema.styles.find((style) => style.value === 'blockquote')\n * ?.value,\n * unorderedListStyle: ({schema}) =>\n * schema.lists.find((list) => list.value === 'bullet')?.value,\n * orderedListStyle: ({schema}) =>\n * schema.lists.find((list) => list.value === 'number')?.value,\n * }),\n * ]\n * }}\n * >\n * {...}\n * </EditorProvider>\n * )\n * }\n * ```\n *\n */\nexport function createMarkdownBehaviors(config: MarkdownBehaviorsConfig) {\n const automaticBlockquoteOnSpace = defineBehavior({\n on: 'insert.text',\n guard: ({snapshot, event}) => {\n const isSpace = event.text === ' '\n\n if (!isSpace) {\n return false\n }\n\n const selectionCollapsed = selectors.isSelectionCollapsed(snapshot)\n const focusTextBlock = selectors.getFocusTextBlock(snapshot)\n const focusSpan = selectors.getFocusSpan(snapshot)\n\n if (!selectionCollapsed || !focusTextBlock || !focusSpan) {\n return false\n }\n\n const previousInlineObject = selectors.getPreviousInlineObject(snapshot)\n const blockOffset = spanSelectionPointToBlockOffset({\n value: snapshot.context.value,\n selectionPoint: {\n path: [\n {_key: focusTextBlock.node._key},\n 'children',\n {_key: focusSpan.node._key},\n ],\n offset: snapshot.context.selection?.focus.offset ?? 0,\n },\n })\n\n if (previousInlineObject || !blockOffset) {\n return false\n }\n\n const blockText = getTextBlockText(focusTextBlock.node)\n const caretAtTheEndOfQuote = blockOffset.offset === 1\n const looksLikeMarkdownQuote = /^>/.test(blockText)\n const blockquoteStyle = config.blockquoteStyle?.(snapshot.context)\n\n if (\n caretAtTheEndOfQuote &&\n looksLikeMarkdownQuote &&\n blockquoteStyle !== undefined\n ) {\n return {focusTextBlock, style: blockquoteStyle}\n }\n\n return false\n },\n actions: [\n () => [\n {\n type: 'insert.text',\n text: ' ',\n },\n ],\n (_, {focusTextBlock, style}) => [\n {\n type: 'block.unset',\n props: ['listItem', 'level'],\n at: focusTextBlock.path,\n },\n {\n type: 'block.set',\n props: {style},\n at: focusTextBlock.path,\n },\n {\n type: 'delete.text',\n anchor: {\n path: focusTextBlock.path,\n offset: 0,\n },\n focus: {\n path: focusTextBlock.path,\n offset: 2,\n },\n },\n ],\n ],\n })\n const automaticHr = defineBehavior({\n on: 'insert.text',\n guard: ({snapshot, event}) => {\n const hrCharacter =\n event.text === '-'\n ? '-'\n : event.text === '*'\n ? '*'\n : event.text === '_'\n ? '_'\n : undefined\n\n if (hrCharacter === undefined) {\n return false\n }\n\n const hrObject = config.horizontalRuleObject?.(snapshot.context)\n const focusBlock = selectors.getFocusTextBlock(snapshot)\n const selectionCollapsed = selectors.isSelectionCollapsed(snapshot)\n\n if (!hrObject || !focusBlock || !selectionCollapsed) {\n return false\n }\n\n const previousInlineObject = selectors.getPreviousInlineObject(snapshot)\n const textBefore = selectors.getBlockTextBefore(snapshot)\n const hrBlockOffsets = {\n anchor: {\n path: focusBlock.path,\n offset: 0,\n },\n focus: {\n path: focusBlock.path,\n offset: 3,\n },\n }\n\n if (\n !previousInlineObject &&\n textBefore === `${hrCharacter}${hrCharacter}`\n ) {\n return {hrObject, focusBlock, hrCharacter, hrBlockOffsets}\n }\n\n return false\n },\n actions: [\n (_, {hrCharacter}) => [\n {\n type: 'insert.text',\n text: hrCharacter,\n },\n ],\n (_, {hrObject, hrBlockOffsets}) => [\n {\n type: 'insert.block object',\n placement: 'before',\n blockObject: hrObject,\n },\n {\n type: 'delete.text',\n ...hrBlockOffsets,\n },\n ],\n ],\n })\n const automaticHrOnPaste = defineBehavior({\n on: 'paste',\n guard: ({snapshot, event}) => {\n const text = event.data.getData('text/plain')\n const hrRegExp = /^(---)$|(___)$|(\\*\\*\\*)$/gm\n const hrCharacters = text.match(hrRegExp)?.[0]\n const hrObject = config.horizontalRuleObject?.(snapshot.context)\n const focusBlock = selectors.getFocusBlock(snapshot)\n\n if (!hrCharacters || !hrObject || !focusBlock) {\n return false\n }\n\n return {hrCharacters, hrObject, focusBlock}\n },\n actions: [\n (_, {hrCharacters}) => [\n {\n type: 'insert.text',\n text: hrCharacters,\n },\n ],\n (_, {hrObject, focusBlock}) =>\n isPortableTextTextBlock(focusBlock.node)\n ? [\n {\n type: 'insert.text block',\n textBlock: {children: focusBlock.node.children},\n placement: 'after',\n },\n {\n type: 'insert.block object',\n blockObject: hrObject,\n placement: 'after',\n },\n {type: 'delete.block', blockPath: focusBlock.path},\n ]\n : [\n {\n type: 'insert.block object',\n blockObject: hrObject,\n placement: 'after',\n },\n ],\n ],\n })\n const automaticHeadingOnSpace = defineBehavior({\n on: 'insert.text',\n guard: ({snapshot, event}) => {\n const isSpace = event.text === ' '\n\n if (!isSpace) {\n return false\n }\n\n const selectionCollapsed = selectors.isSelectionCollapsed(snapshot)\n const focusTextBlock = selectors.getFocusTextBlock(snapshot)\n const focusSpan = selectors.getFocusSpan(snapshot)\n\n if (!selectionCollapsed || !focusTextBlock || !focusSpan) {\n return false\n }\n\n const blockOffset = spanSelectionPointToBlockOffset({\n value: snapshot.context.value,\n selectionPoint: {\n path: [\n {_key: focusTextBlock.node._key},\n 'children',\n {_key: focusSpan.node._key},\n ],\n offset: snapshot.context.selection?.focus.offset ?? 0,\n },\n })\n\n if (!blockOffset) {\n return false\n }\n\n const previousInlineObject = selectors.getPreviousInlineObject(snapshot)\n const blockText = getTextBlockText(focusTextBlock.node)\n const markdownHeadingSearch = /^#+/.exec(blockText)\n const level = markdownHeadingSearch\n ? markdownHeadingSearch[0].length\n : undefined\n const caretAtTheEndOfHeading = blockOffset.offset === level\n\n if (previousInlineObject || !caretAtTheEndOfHeading) {\n return false\n }\n\n const style =\n level !== undefined\n ? config.headingStyle?.({schema: snapshot.context.schema, level})\n : undefined\n\n if (level !== undefined && style !== undefined) {\n return {\n focusTextBlock,\n style: style,\n level,\n }\n }\n\n return false\n },\n actions: [\n ({event}) => [event],\n (_, {focusTextBlock, style, level}) => [\n {\n type: 'block.unset',\n props: ['listItem', 'level'],\n at: focusTextBlock.path,\n },\n {\n type: 'block.set',\n props: {style},\n at: focusTextBlock.path,\n },\n {\n type: 'delete.text',\n anchor: {\n path: focusTextBlock.path,\n offset: 0,\n },\n focus: {\n path: focusTextBlock.path,\n offset: level + 1,\n },\n },\n ],\n ],\n })\n const clearStyleOnBackspace = defineBehavior({\n on: 'delete.backward',\n guard: ({snapshot}) => {\n const selectionCollapsed = selectors.isSelectionCollapsed(snapshot)\n const focusTextBlock = selectors.getFocusTextBlock(snapshot)\n const focusSpan = selectors.getFocusSpan(snapshot)\n\n if (!selectionCollapsed || !focusTextBlock || !focusSpan) {\n return false\n }\n\n const atTheBeginningOfBLock =\n focusTextBlock.node.children[0]._key === focusSpan.node._key &&\n snapshot.context.selection?.focus.offset === 0\n\n const defaultStyle = config.defaultStyle?.(snapshot.context)\n\n if (\n atTheBeginningOfBLock &&\n defaultStyle &&\n focusTextBlock.node.style !== defaultStyle\n ) {\n return {defaultStyle, focusTextBlock}\n }\n\n return false\n },\n actions: [\n (_, {defaultStyle, focusTextBlock}) => [\n {\n type: 'block.set',\n props: {style: defaultStyle},\n at: focusTextBlock.path,\n },\n ],\n ],\n })\n const automaticListOnSpace = defineBehavior({\n on: 'insert.text',\n guard: ({snapshot, event}) => {\n const isSpace = event.text === ' '\n\n if (!isSpace) {\n return false\n }\n\n const selectionCollapsed = selectors.isSelectionCollapsed(snapshot)\n const focusTextBlock = selectors.getFocusTextBlock(snapshot)\n const focusSpan = selectors.getFocusSpan(snapshot)\n\n if (!selectionCollapsed || !focusTextBlock || !focusSpan) {\n return false\n }\n\n const previousInlineObject = selectors.getPreviousInlineObject(snapshot)\n const blockOffset = spanSelectionPointToBlockOffset({\n value: snapshot.context.value,\n selectionPoint: {\n path: [\n {_key: focusTextBlock.node._key},\n 'children',\n {_key: focusSpan.node._key},\n ],\n offset: snapshot.context.selection?.focus.offset ?? 0,\n },\n })\n\n if (previousInlineObject || !blockOffset) {\n return false\n }\n\n const blockText = getTextBlockText(focusTextBlock.node)\n const defaultStyle = config.defaultStyle?.(snapshot.context)\n const looksLikeUnorderedList = /^(-|\\*)/.test(blockText)\n const unorderedListStyle = config.unorderedListStyle?.(snapshot.context)\n const caretAtTheEndOfUnorderedList = blockOffset.offset === 1\n\n if (\n defaultStyle &&\n caretAtTheEndOfUnorderedList &&\n looksLikeUnorderedList &&\n unorderedListStyle !== undefined\n ) {\n return {\n focusTextBlock,\n listItem: unorderedListStyle,\n listItemLength: 1,\n style: defaultStyle,\n }\n }\n\n const looksLikeOrderedList = /^1\\./.test(blockText)\n const orderedListStyle = config.orderedListStyle?.(snapshot.context)\n const caretAtTheEndOfOrderedList = blockOffset.offset === 2\n\n if (\n defaultStyle &&\n caretAtTheEndOfOrderedList &&\n looksLikeOrderedList &&\n orderedListStyle !== undefined\n ) {\n return {\n focusTextBlock,\n listItem: orderedListStyle,\n listItemLength: 2,\n style: defaultStyle,\n }\n }\n\n return false\n },\n actions: [\n ({event}) => [event],\n (_, {focusTextBlock, style, listItem, listItemLength}) => [\n {\n type: 'block.set',\n props: {\n listItem,\n level: 1,\n style,\n },\n at: focusTextBlock.path,\n },\n {\n type: 'delete.text',\n anchor: {\n path: focusTextBlock.path,\n offset: 0,\n },\n focus: {\n path: focusTextBlock.path,\n offset: listItemLength + 1,\n },\n },\n ],\n ],\n })\n\n const markdownBehaviors = [\n automaticBlockquoteOnSpace,\n automaticHeadingOnSpace,\n automaticHr,\n automaticHrOnPaste,\n clearStyleOnBackspace,\n automaticListOnSpace,\n ]\n\n return markdownBehaviors\n}\n"],"names":["createMarkdownBehaviors","config","automaticBlockquoteOnSpace","defineBehavior","on","guard","snapshot","event","text","selectionCollapsed","selectors","focusTextBlock","focusSpan","previousInlineObject","getPreviousInlineObject","blockOffset","spanSelectionPointToBlockOffset","value","context","selectionPoint","path","_key","node","offset","selection","focus","blockText","getTextBlockText","caretAtTheEndOfQuote","looksLikeMarkdownQuote","test","blockquoteStyle","undefined","style","actions","type","_","props","at","anchor","automaticHr","hrCharacter","hrObject","horizontalRuleObject","focusBlock","textBefore","hrBlockOffsets","placement","blockObject","automaticHrOnPaste","data","getData","hrRegExp","hrCharacters","match","getFocusBlock","isPortableTextTextBlock","textBlock","children","blockPath","automaticHeadingOnSpace","markdownHeadingSearch","exec","level","length","caretAtTheEndOfHeading","headingStyle","schema","clearStyleOnBackspace","atTheBeginningOfBLock","defaultStyle","automaticListOnSpace","looksLikeUnorderedList","unorderedListStyle","caretAtTheEndOfUnorderedList","listItem","listItemLength","looksLikeOrderedList","orderedListStyle","caretAtTheEndOfOrderedList"],"mappings":";;AAqEO,SAASA,wBAAwBC,QAAiC;AACvE,QAAMC,6BAA6BC,cAAAA,eAAe;AAAA,IAChDC,IAAI;AAAA,IACJC,OAAOA,CAAC;AAAA,MAACC;AAAAA,MAAUC;AAAAA,IAAAA,MAAW;AAGxB,UAFYA,MAAMC,SAAS;AAGtB,eAAA;AAGT,YAAMC,qBAAqBC,6BAAAA,qBAA+BJ,QAAQ,GAC5DK,iBAAiBD,+CAA4BJ,QAAQ,GACrDM,YAAYF,0CAAuBJ,QAAQ;AAEjD,UAAI,CAACG,sBAAsB,CAACE,kBAAkB,CAACC;AACtC,eAAA;AAGT,YAAMC,uBAAuBH,6BAAUI,wBAAwBR,QAAQ,GACjES,cAAcC,iBAAAA,gCAAgC;AAAA,QAClDC,OAAOX,SAASY,QAAQD;AAAAA,QACxBE,gBAAgB;AAAA,UACdC,MAAM,CACJ;AAAA,YAACC,MAAMV,eAAeW,KAAKD;AAAAA,aAC3B,YACA;AAAA,YAACA,MAAMT,UAAUU,KAAKD;AAAAA,UAAAA,CAAK;AAAA,UAE7BE,QAAQjB,SAASY,QAAQM,WAAWC,MAAMF,UAAU;AAAA,QAAA;AAAA,MACtD,CACD;AAED,UAAIV,wBAAwB,CAACE;AACpB,eAAA;AAGT,YAAMW,YAAYC,iBAAiBhB,iBAAAA,eAAeW,IAAI,GAChDM,uBAAuBb,YAAYQ,WAAW,GAC9CM,yBAAyB,KAAKC,KAAKJ,SAAS,GAC5CK,kBAAkB9B,OAAO8B,kBAAkBzB,SAASY,OAAO;AAG/DU,aAAAA,wBACAC,0BACAE,oBAAoBC,SAEb;AAAA,QAACrB;AAAAA,QAAgBsB,OAAOF;AAAAA,MAAAA,IAG1B;AAAA,IACT;AAAA,IACAG,SAAS,CACP,MAAM,CACJ;AAAA,MACEC,MAAM;AAAA,MACN3B,MAAM;AAAA,IAAA,CACP,GAEH,CAAC4B,GAAG;AAAA,MAACzB;AAAAA,MAAgBsB;AAAAA,IAAAA,MAAW,CAC9B;AAAA,MACEE,MAAM;AAAA,MACNE,OAAO,CAAC,YAAY,OAAO;AAAA,MAC3BC,IAAI3B,eAAeS;AAAAA,IAAAA,GAErB;AAAA,MACEe,MAAM;AAAA,MACNE,OAAO;AAAA,QAACJ;AAAAA,MAAK;AAAA,MACbK,IAAI3B,eAAeS;AAAAA,IAAAA,GAErB;AAAA,MACEe,MAAM;AAAA,MACNI,QAAQ;AAAA,QACNnB,MAAMT,eAAeS;AAAAA,QACrBG,QAAQ;AAAA,MACV;AAAA,MACAE,OAAO;AAAA,QACLL,MAAMT,eAAeS;AAAAA,QACrBG,QAAQ;AAAA,MAAA;AAAA,IACV,CACD,CACF;AAAA,EAAA,CAEJ,GACKiB,cAAcrC,6BAAe;AAAA,IACjCC,IAAI;AAAA,IACJC,OAAOA,CAAC;AAAA,MAACC;AAAAA,MAAUC;AAAAA,IAAAA,MAAW;AAC5B,YAAMkC,cACJlC,MAAMC,SAAS,MACX,MACAD,MAAMC,SAAS,MACb,MACAD,MAAMC,SAAS,MACb,MACAwB;AAEV,UAAIS,gBAAgBT;AACX,eAAA;AAGT,YAAMU,WAAWzC,OAAO0C,uBAAuBrC,SAASY,OAAO,GACzD0B,aAAalC,6BAAAA,kBAA4BJ,QAAQ,GACjDG,qBAAqBC,6BAAAA,qBAA+BJ,QAAQ;AAElE,UAAI,CAACoC,YAAY,CAACE,cAAc,CAACnC;AACxB,eAAA;AAGHI,YAAAA,uBAAuBH,6BAAUI,wBAAwBR,QAAQ,GACjEuC,aAAanC,0CAA6BJ,QAAQ,GAClDwC,iBAAiB;AAAA,QACrBP,QAAQ;AAAA,UACNnB,MAAMwB,WAAWxB;AAAAA,UACjBG,QAAQ;AAAA,QACV;AAAA,QACAE,OAAO;AAAA,UACLL,MAAMwB,WAAWxB;AAAAA,UACjBG,QAAQ;AAAA,QAAA;AAAA,MAEZ;AAEA,aACE,CAACV,wBACDgC,eAAe,GAAGJ,WAAW,GAAGA,WAAW,KAEpC;AAAA,QAACC;AAAAA,QAAUE;AAAAA,QAAYH;AAAAA,QAAaK;AAAAA,MAAAA,IAGtC;AAAA,IACT;AAAA,IACAZ,SAAS,CACP,CAACE,GAAG;AAAA,MAACK;AAAAA,IAAAA,MAAiB,CACpB;AAAA,MACEN,MAAM;AAAA,MACN3B,MAAMiC;AAAAA,IAAAA,CACP,GAEH,CAACL,GAAG;AAAA,MAACM;AAAAA,MAAUI;AAAAA,IAAAA,MAAoB,CACjC;AAAA,MACEX,MAAM;AAAA,MACNY,WAAW;AAAA,MACXC,aAAaN;AAAAA,IAAAA,GAEf;AAAA,MACEP,MAAM;AAAA,MACN,GAAGW;AAAAA,IAAAA,CACJ,CACF;AAAA,EAAA,CAEJ,GACKG,qBAAqB9C,6BAAe;AAAA,IACxCC,IAAI;AAAA,IACJC,OAAOA,CAAC;AAAA,MAACC;AAAAA,MAAUC;AAAAA,IAAAA,MAAW;AACtBC,YAAAA,OAAOD,MAAM2C,KAAKC,QAAQ,YAAY,GACtCC,WAAW,8BACXC,eAAe7C,KAAK8C,MAAMF,QAAQ,IAAI,CAAC,GACvCV,WAAWzC,OAAO0C,uBAAuBrC,SAASY,OAAO,GACzD0B,aAAalC,6BAAU6C,cAAcjD,QAAQ;AAEnD,aAAI,CAAC+C,gBAAgB,CAACX,YAAY,CAACE,aAC1B,KAGF;AAAA,QAACS;AAAAA,QAAcX;AAAAA,QAAUE;AAAAA,MAAU;AAAA,IAC5C;AAAA,IACAV,SAAS,CACP,CAACE,GAAG;AAAA,MAACiB;AAAAA,IAAAA,MAAkB,CACrB;AAAA,MACElB,MAAM;AAAA,MACN3B,MAAM6C;AAAAA,IAAAA,CACP,GAEH,CAACjB,GAAG;AAAA,MAACM;AAAAA,MAAUE;AAAAA,IACbY,MAAAA,8BAAwBZ,WAAWtB,IAAI,IACnC,CACE;AAAA,MACEa,MAAM;AAAA,MACNsB,WAAW;AAAA,QAACC,UAAUd,WAAWtB,KAAKoC;AAAAA,MAAQ;AAAA,MAC9CX,WAAW;AAAA,IAAA,GAEb;AAAA,MACEZ,MAAM;AAAA,MACNa,aAAaN;AAAAA,MACbK,WAAW;AAAA,IAAA,GAEb;AAAA,MAACZ,MAAM;AAAA,MAAgBwB,WAAWf,WAAWxB;AAAAA,IAAK,CAAA,IAEpD,CACE;AAAA,MACEe,MAAM;AAAA,MACNa,aAAaN;AAAAA,MACbK,WAAW;AAAA,IAAA,CACZ,CACF;AAAA,EAAA,CAEV,GACKa,0BAA0BzD,6BAAe;AAAA,IAC7CC,IAAI;AAAA,IACJC,OAAOA,CAAC;AAAA,MAACC;AAAAA,MAAUC;AAAAA,IAAAA,MAAW;AAGxB,UAFYA,MAAMC,SAAS;AAGtB,eAAA;AAGT,YAAMC,qBAAqBC,6BAAAA,qBAA+BJ,QAAQ,GAC5DK,iBAAiBD,+CAA4BJ,QAAQ,GACrDM,YAAYF,0CAAuBJ,QAAQ;AAEjD,UAAI,CAACG,sBAAsB,CAACE,kBAAkB,CAACC;AACtC,eAAA;AAGT,YAAMG,cAAcC,iBAAAA,gCAAgC;AAAA,QAClDC,OAAOX,SAASY,QAAQD;AAAAA,QACxBE,gBAAgB;AAAA,UACdC,MAAM,CACJ;AAAA,YAACC,MAAMV,eAAeW,KAAKD;AAAAA,aAC3B,YACA;AAAA,YAACA,MAAMT,UAAUU,KAAKD;AAAAA,UAAAA,CAAK;AAAA,UAE7BE,QAAQjB,SAASY,QAAQM,WAAWC,MAAMF,UAAU;AAAA,QAAA;AAAA,MACtD,CACD;AAED,UAAI,CAACR;AACI,eAAA;AAGHF,YAAAA,uBAAuBH,6BAAAA,wBAAkCJ,QAAQ,GACjEoB,YAAYC,kCAAiBhB,eAAeW,IAAI,GAChDuC,wBAAwB,MAAMC,KAAKpC,SAAS,GAC5CqC,QAAQF,wBACVA,sBAAsB,CAAC,EAAEG,SACzBhC,QACEiC,yBAAyBlD,YAAYQ,WAAWwC;AAEtD,UAAIlD,wBAAwB,CAACoD;AACpB,eAAA;AAGT,YAAMhC,QACJ8B,UAAU/B,SACN/B,OAAOiE,eAAe;AAAA,QAACC,QAAQ7D,SAASY,QAAQiD;AAAAA,QAAQJ;AAAAA,MAAM,CAAA,IAC9D/B;AAEF+B,aAAAA,UAAU/B,UAAaC,UAAUD,SAC5B;AAAA,QACLrB;AAAAA,QACAsB;AAAAA,QACA8B;AAAAA,MAAAA,IAIG;AAAA,IACT;AAAA,IACA7B,SAAS,CACP,CAAC;AAAA,MAAC3B;AAAAA,IAAAA,MAAW,CAACA,KAAK,GACnB,CAAC6B,GAAG;AAAA,MAACzB;AAAAA,MAAgBsB;AAAAA,MAAO8B;AAAAA,IAAAA,MAAW,CACrC;AAAA,MACE5B,MAAM;AAAA,MACNE,OAAO,CAAC,YAAY,OAAO;AAAA,MAC3BC,IAAI3B,eAAeS;AAAAA,IAAAA,GAErB;AAAA,MACEe,MAAM;AAAA,MACNE,OAAO;AAAA,QAACJ;AAAAA,MAAK;AAAA,MACbK,IAAI3B,eAAeS;AAAAA,IAAAA,GAErB;AAAA,MACEe,MAAM;AAAA,MACNI,QAAQ;AAAA,QACNnB,MAAMT,eAAeS;AAAAA,QACrBG,QAAQ;AAAA,MACV;AAAA,MACAE,OAAO;AAAA,QACLL,MAAMT,eAAeS;AAAAA,QACrBG,QAAQwC,QAAQ;AAAA,MAAA;AAAA,IAClB,CACD,CACF;AAAA,EAAA,CAEJ,GACKK,wBAAwBjE,6BAAe;AAAA,IAC3CC,IAAI;AAAA,IACJC,OAAOA,CAAC;AAAA,MAACC;AAAAA,IAAAA,MAAc;AACrB,YAAMG,qBAAqBC,6BAAAA,qBAA+BJ,QAAQ,GAC5DK,iBAAiBD,+CAA4BJ,QAAQ,GACrDM,YAAYF,0CAAuBJ,QAAQ;AAEjD,UAAI,CAACG,sBAAsB,CAACE,kBAAkB,CAACC;AACtC,eAAA;AAGHyD,YAAAA,wBACJ1D,eAAeW,KAAKoC,SAAS,CAAC,EAAErC,SAAST,UAAUU,KAAKD,QACxDf,SAASY,QAAQM,WAAWC,MAAMF,WAAW,GAEzC+C,eAAerE,OAAOqE,eAAehE,SAASY,OAAO;AAE3D,aACEmD,yBACAC,gBACA3D,eAAeW,KAAKW,UAAUqC,eAEvB;AAAA,QAACA;AAAAA,QAAc3D;AAAAA,MAAAA,IAGjB;AAAA,IACT;AAAA,IACAuB,SAAS,CACP,CAACE,GAAG;AAAA,MAACkC;AAAAA,MAAc3D;AAAAA,IAAAA,MAAoB,CACrC;AAAA,MACEwB,MAAM;AAAA,MACNE,OAAO;AAAA,QAACJ,OAAOqC;AAAAA,MAAY;AAAA,MAC3BhC,IAAI3B,eAAeS;AAAAA,IAAAA,CACpB,CACF;AAAA,EAAA,CAEJ,GACKmD,uBAAuBpE,6BAAe;AAAA,IAC1CC,IAAI;AAAA,IACJC,OAAOA,CAAC;AAAA,MAACC;AAAAA,MAAUC;AAAAA,IAAAA,MAAW;AAGxB,UAFYA,MAAMC,SAAS;AAGtB,eAAA;AAGT,YAAMC,qBAAqBC,6BAAAA,qBAA+BJ,QAAQ,GAC5DK,iBAAiBD,+CAA4BJ,QAAQ,GACrDM,YAAYF,0CAAuBJ,QAAQ;AAEjD,UAAI,CAACG,sBAAsB,CAACE,kBAAkB,CAACC;AACtC,eAAA;AAGT,YAAMC,uBAAuBH,6BAAUI,wBAAwBR,QAAQ,GACjES,cAAcC,iBAAAA,gCAAgC;AAAA,QAClDC,OAAOX,SAASY,QAAQD;AAAAA,QACxBE,gBAAgB;AAAA,UACdC,MAAM,CACJ;AAAA,YAACC,MAAMV,eAAeW,KAAKD;AAAAA,aAC3B,YACA;AAAA,YAACA,MAAMT,UAAUU,KAAKD;AAAAA,UAAAA,CAAK;AAAA,UAE7BE,QAAQjB,SAASY,QAAQM,WAAWC,MAAMF,UAAU;AAAA,QAAA;AAAA,MACtD,CACD;AAED,UAAIV,wBAAwB,CAACE;AACpB,eAAA;AAGHW,YAAAA,YAAYC,iBAAAA,iBAAiBhB,eAAeW,IAAI,GAChDgD,eAAerE,OAAOqE,eAAehE,SAASY,OAAO,GACrDsD,yBAAyB,UAAU1C,KAAKJ,SAAS,GACjD+C,qBAAqBxE,OAAOwE,qBAAqBnE,SAASY,OAAO,GACjEwD,+BAA+B3D,YAAYQ,WAAW;AAG1D+C,UAAAA,gBACAI,gCACAF,0BACAC,uBAAuBzC;AAEhB,eAAA;AAAA,UACLrB;AAAAA,UACAgE,UAAUF;AAAAA,UACVG,gBAAgB;AAAA,UAChB3C,OAAOqC;AAAAA,QACT;AAGF,YAAMO,uBAAuB,OAAO/C,KAAKJ,SAAS,GAC5CoD,mBAAmB7E,OAAO6E,mBAAmBxE,SAASY,OAAO,GAC7D6D,6BAA6BhE,YAAYQ,WAAW;AAE1D,aACE+C,gBACAS,8BACAF,wBACAC,qBAAqB9C,SAEd;AAAA,QACLrB;AAAAA,QACAgE,UAAUG;AAAAA,QACVF,gBAAgB;AAAA,QAChB3C,OAAOqC;AAAAA,MAAAA,IAIJ;AAAA,IACT;AAAA,IACApC,SAAS,CACP,CAAC;AAAA,MAAC3B;AAAAA,IAAAA,MAAW,CAACA,KAAK,GACnB,CAAC6B,GAAG;AAAA,MAACzB;AAAAA,MAAgBsB;AAAAA,MAAO0C;AAAAA,MAAUC;AAAAA,IAAAA,MAAoB,CACxD;AAAA,MACEzC,MAAM;AAAA,MACNE,OAAO;AAAA,QACLsC;AAAAA,QACAZ,OAAO;AAAA,QACP9B;AAAAA,MACF;AAAA,MACAK,IAAI3B,eAAeS;AAAAA,IAAAA,GAErB;AAAA,MACEe,MAAM;AAAA,MACNI,QAAQ;AAAA,QACNnB,MAAMT,eAAeS;AAAAA,QACrBG,QAAQ;AAAA,MACV;AAAA,MACAE,OAAO;AAAA,QACLL,MAAMT,eAAeS;AAAAA,QACrBG,QAAQqD,iBAAiB;AAAA,MAAA;AAAA,IAC3B,CACD,CACF;AAAA,EAAA,CAEJ;AAWD,SAT0B,CACxB1E,4BACA0D,yBACApB,aACAS,oBACAmB,uBACAG,oBAAoB;AAIxB;;"}
@@ -2255,13 +2255,13 @@ Synchronizer.displayName = "Synchronizer";
2255
2255
  const converterJson = {
2256
2256
  mimeType: "application/json",
2257
2257
  serialize: ({
2258
- context,
2258
+ snapshot,
2259
2259
  event
2260
2260
  }) => {
2261
- const portableTextConverter = context.converters.find((converter) => converter.mimeType === "application/x-portable-text");
2261
+ const portableTextConverter = snapshot.context.converters.find((converter) => converter.mimeType === "application/x-portable-text");
2262
2262
  return portableTextConverter ? {
2263
2263
  ...portableTextConverter.serialize({
2264
- context,
2264
+ snapshot,
2265
2265
  event
2266
2266
  }),
2267
2267
  mimeType: "application/json",
@@ -2274,13 +2274,13 @@ const converterJson = {
2274
2274
  };
2275
2275
  },
2276
2276
  deserialize: ({
2277
- context,
2277
+ snapshot,
2278
2278
  event
2279
2279
  }) => {
2280
- const portableTextConverter = context.converters.find((converter) => converter.mimeType === "application/x-portable-text");
2280
+ const portableTextConverter = snapshot.context.converters.find((converter) => converter.mimeType === "application/x-portable-text");
2281
2281
  return portableTextConverter ? {
2282
2282
  ...portableTextConverter.deserialize({
2283
- context,
2283
+ snapshot,
2284
2284
  event
2285
2285
  }),
2286
2286
  mimeType: "application/json"
@@ -2293,10 +2293,10 @@ const converterJson = {
2293
2293
  }, converterPortableText = {
2294
2294
  mimeType: "application/x-portable-text",
2295
2295
  serialize: ({
2296
- context,
2296
+ snapshot,
2297
2297
  event
2298
2298
  }) => {
2299
- if (!context.selection)
2299
+ if (!snapshot.context.selection)
2300
2300
  return {
2301
2301
  type: "serialization.failure",
2302
2302
  mimeType: "application/x-portable-text",
@@ -2304,8 +2304,8 @@ const converterJson = {
2304
2304
  reason: "No selection"
2305
2305
  };
2306
2306
  const blocks = util_sliceBlocks.sliceBlocks({
2307
- blocks: context.value,
2308
- selection: context.selection
2307
+ blocks: snapshot.context.value,
2308
+ selection: snapshot.context.selection
2309
2309
  });
2310
2310
  return {
2311
2311
  type: "serialization.success",
@@ -2315,7 +2315,7 @@ const converterJson = {
2315
2315
  };
2316
2316
  },
2317
2317
  deserialize: ({
2318
- context,
2318
+ snapshot,
2319
2319
  event
2320
2320
  }) => {
2321
2321
  const blocks = JSON.parse(event.data);
@@ -2327,7 +2327,7 @@ const converterJson = {
2327
2327
  };
2328
2328
  const parsedBlocks = blocks.flatMap((block) => {
2329
2329
  const parsedBlock = util_blockOffsetsToSelection.parseBlock({
2330
- context,
2330
+ context: snapshot.context,
2331
2331
  block,
2332
2332
  options: {
2333
2333
  refreshKeys: !0
@@ -2348,10 +2348,10 @@ const converterJson = {
2348
2348
  }, converterTextHtml = {
2349
2349
  mimeType: "text/html",
2350
2350
  serialize: ({
2351
- context,
2351
+ snapshot,
2352
2352
  event
2353
2353
  }) => {
2354
- if (!context.selection)
2354
+ if (!snapshot.context.selection)
2355
2355
  return {
2356
2356
  type: "serialization.failure",
2357
2357
  mimeType: "text/html",
@@ -2359,8 +2359,8 @@ const converterJson = {
2359
2359
  reason: "No selection"
2360
2360
  };
2361
2361
  const blocks = util_sliceBlocks.sliceBlocks({
2362
- blocks: context.value,
2363
- selection: context.selection
2362
+ blocks: snapshot.context.value,
2363
+ selection: snapshot.context.selection
2364
2364
  }), html = toHtml.toHTML(blocks, {
2365
2365
  onMissingComponent: !1,
2366
2366
  components: {
@@ -2382,27 +2382,27 @@ const converterJson = {
2382
2382
  };
2383
2383
  },
2384
2384
  deserialize: ({
2385
- context,
2385
+ snapshot,
2386
2386
  event
2387
2387
  }) => ({
2388
2388
  type: "deserialization.success",
2389
- data: blockTools.htmlToBlocks(event.data, context.schema.portableText, {
2390
- keyGenerator: context.keyGenerator,
2391
- unstable_whitespaceOnPasteMode: context.schema.block.options.unstable_whitespaceOnPasteMode
2389
+ data: blockTools.htmlToBlocks(event.data, snapshot.context.schema.portableText, {
2390
+ keyGenerator: snapshot.context.keyGenerator,
2391
+ unstable_whitespaceOnPasteMode: snapshot.context.schema.block.options.unstable_whitespaceOnPasteMode
2392
2392
  }),
2393
2393
  mimeType: "text/html"
2394
2394
  })
2395
2395
  }, converterTextPlain = {
2396
2396
  mimeType: "text/plain",
2397
2397
  serialize: ({
2398
- context,
2398
+ snapshot,
2399
2399
  event
2400
- }) => context.selection ? {
2400
+ }) => snapshot.context.selection ? {
2401
2401
  type: "serialization.success",
2402
2402
  data: util_sliceBlocks.sliceBlocks({
2403
- blocks: context.value,
2404
- selection: context.selection
2405
- }).map((block) => types.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(`
2403
+ blocks: snapshot.context.value,
2404
+ selection: snapshot.context.selection
2405
+ }).map((block) => types.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(`
2406
2406
 
2407
2407
  `),
2408
2408
  mimeType: "text/plain",
@@ -2414,14 +2414,14 @@ const converterJson = {
2414
2414
  reason: "No selection"
2415
2415
  },
2416
2416
  deserialize: ({
2417
- context,
2417
+ snapshot,
2418
2418
  event
2419
2419
  }) => {
2420
2420
  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>`;
2421
2421
  return {
2422
2422
  type: "deserialization.success",
2423
- data: blockTools.htmlToBlocks(textToHtml, context.schema.portableText, {
2424
- keyGenerator: context.keyGenerator
2423
+ data: blockTools.htmlToBlocks(textToHtml, snapshot.context.schema.portableText, {
2424
+ keyGenerator: snapshot.context.keyGenerator
2425
2425
  }),
2426
2426
  mimeType: "text/plain"
2427
2427
  };
@@ -4996,10 +4996,6 @@ function createWithEventListeners(editorActor, subscriptions) {
4996
4996
  }
4997
4997
  });
4998
4998
  }, editor.setFragmentData = (dataTransfer, originEvent) => {
4999
- if (originEvent === "drag") {
5000
- setFragmentData(dataTransfer);
5001
- return;
5002
- }
5003
4999
  if (isApplyingBehaviorActions(editor)) {
5004
5000
  setFragmentData(dataTransfer);
5005
5001
  return;
@@ -5711,11 +5707,9 @@ function createSlateEditor(config) {
5711
5707
  const toggleAnnotationOff = behavior_core.defineBehavior({
5712
5708
  on: "annotation.toggle",
5713
5709
  guard: ({
5714
- context,
5710
+ snapshot,
5715
5711
  event
5716
- }) => selector_isActiveStyle.isActiveAnnotation(event.annotation.name)({
5717
- context
5718
- }),
5712
+ }) => selector_isActiveStyle.isActiveAnnotation(event.annotation.name)(snapshot),
5719
5713
  actions: [({
5720
5714
  event
5721
5715
  }) => [behavior_core.raise({
@@ -5725,11 +5719,9 @@ const toggleAnnotationOff = behavior_core.defineBehavior({
5725
5719
  }), toggleAnnotationOn = behavior_core.defineBehavior({
5726
5720
  on: "annotation.toggle",
5727
5721
  guard: ({
5728
- context,
5722
+ snapshot,
5729
5723
  event
5730
- }) => !selector_isActiveStyle.isActiveAnnotation(event.annotation.name)({
5731
- context
5732
- }),
5724
+ }) => !selector_isActiveStyle.isActiveAnnotation(event.annotation.name)(snapshot),
5733
5725
  actions: [({
5734
5726
  event
5735
5727
  }) => [behavior_core.raise({
@@ -5739,11 +5731,9 @@ const toggleAnnotationOff = behavior_core.defineBehavior({
5739
5731
  }), toggleDecoratorOff = behavior_core.defineBehavior({
5740
5732
  on: "decorator.toggle",
5741
5733
  guard: ({
5742
- context,
5734
+ snapshot,
5743
5735
  event
5744
- }) => selector_isActiveStyle.isActiveDecorator(event.decorator)({
5745
- context
5746
- }),
5736
+ }) => selector_isActiveStyle.isActiveDecorator(event.decorator)(snapshot),
5747
5737
  actions: [({
5748
5738
  event
5749
5739
  }) => [behavior_core.raise({
@@ -5753,11 +5743,9 @@ const toggleAnnotationOff = behavior_core.defineBehavior({
5753
5743
  }), toggleDecoratorOn = behavior_core.defineBehavior({
5754
5744
  on: "decorator.toggle",
5755
5745
  guard: ({
5756
- context,
5746
+ snapshot,
5757
5747
  event
5758
- }) => !selector_isActiveStyle.isActiveDecorator(event.decorator)({
5759
- context
5760
- }),
5748
+ }) => !selector_isActiveStyle.isActiveDecorator(event.decorator)(snapshot),
5761
5749
  actions: [({
5762
5750
  event
5763
5751
  }) => [behavior_core.raise({
@@ -5767,11 +5755,9 @@ const toggleAnnotationOff = behavior_core.defineBehavior({
5767
5755
  }), toggleListItemOff = behavior_core.defineBehavior({
5768
5756
  on: "list item.toggle",
5769
5757
  guard: ({
5770
- context,
5758
+ snapshot,
5771
5759
  event
5772
- }) => selector_isActiveStyle.isActiveListItem(event.listItem)({
5773
- context
5774
- }),
5760
+ }) => selector_isActiveStyle.isActiveListItem(event.listItem)(snapshot),
5775
5761
  actions: [({
5776
5762
  event
5777
5763
  }) => [behavior_core.raise({
@@ -5781,11 +5767,9 @@ const toggleAnnotationOff = behavior_core.defineBehavior({
5781
5767
  }), toggleListItemOn = behavior_core.defineBehavior({
5782
5768
  on: "list item.toggle",
5783
5769
  guard: ({
5784
- context,
5770
+ snapshot,
5785
5771
  event
5786
- }) => !selector_isActiveStyle.isActiveListItem(event.listItem)({
5787
- context
5788
- }),
5772
+ }) => !selector_isActiveStyle.isActiveListItem(event.listItem)(snapshot),
5789
5773
  actions: [({
5790
5774
  event
5791
5775
  }) => [behavior_core.raise({
@@ -5795,11 +5779,9 @@ const toggleAnnotationOff = behavior_core.defineBehavior({
5795
5779
  }), toggleStyleOff = behavior_core.defineBehavior({
5796
5780
  on: "style.toggle",
5797
5781
  guard: ({
5798
- context,
5782
+ snapshot,
5799
5783
  event
5800
- }) => selector_isActiveStyle.isActiveStyle(event.style)({
5801
- context
5802
- }),
5784
+ }) => selector_isActiveStyle.isActiveStyle(event.style)(snapshot),
5803
5785
  actions: [({
5804
5786
  event
5805
5787
  }) => [behavior_core.raise({
@@ -5809,11 +5791,9 @@ const toggleAnnotationOff = behavior_core.defineBehavior({
5809
5791
  }), toggleStyleOn = behavior_core.defineBehavior({
5810
5792
  on: "style.toggle",
5811
5793
  guard: ({
5812
- context,
5794
+ snapshot,
5813
5795
  event
5814
- }) => !selector_isActiveStyle.isActiveStyle(event.style)({
5815
- context
5816
- }),
5796
+ }) => !selector_isActiveStyle.isActiveStyle(event.style)(snapshot),
5817
5797
  actions: [({
5818
5798
  event
5819
5799
  }) => [behavior_core.raise({
@@ -5823,13 +5803,13 @@ const toggleAnnotationOff = behavior_core.defineBehavior({
5823
5803
  }), raiseDeserializationSuccessOrFailure = behavior_core.defineBehavior({
5824
5804
  on: "deserialize",
5825
5805
  guard: ({
5826
- context,
5806
+ snapshot,
5827
5807
  event
5828
5808
  }) => {
5829
- const deserializeEvents = context.converters.flatMap((converter) => {
5809
+ const deserializeEvents = snapshot.context.converters.flatMap((converter) => {
5830
5810
  const data = event.dataTransfer.getData(converter.mimeType);
5831
5811
  return data ? [converter.deserialize({
5832
- context,
5812
+ snapshot,
5833
5813
  event: {
5834
5814
  type: "deserialize",
5835
5815
  data
@@ -5859,13 +5839,13 @@ const toggleAnnotationOff = behavior_core.defineBehavior({
5859
5839
  }), raiseSerializationSuccessOrFailure = behavior_core.defineBehavior({
5860
5840
  on: "serialize",
5861
5841
  guard: ({
5862
- context,
5842
+ snapshot,
5863
5843
  event
5864
5844
  }) => {
5865
- if (context.converters.length === 0)
5845
+ if (snapshot.context.converters.length === 0)
5866
5846
  return !1;
5867
- const serializeEvents = context.converters.map((converter) => converter.serialize({
5868
- context,
5847
+ const serializeEvents = snapshot.context.converters.map((converter) => converter.serialize({
5848
+ snapshot,
5869
5849
  event
5870
5850
  }));
5871
5851
  return serializeEvents.length === 0 ? !1 : serializeEvents;
@@ -6033,12 +6013,14 @@ const editorMachine = xstate.setup({
6033
6013
  for (const eventBehavior of eventBehaviors) {
6034
6014
  const shouldRun = eventBehavior.guard === void 0 || eventBehavior.guard({
6035
6015
  context: editorSnapshot.context,
6016
+ snapshot: editorSnapshot,
6036
6017
  event: event.behaviorEvent
6037
6018
  });
6038
6019
  if (!shouldRun)
6039
6020
  continue;
6040
6021
  const actionIntendSets = eventBehavior.actions.map((actionSet) => actionSet({
6041
6022
  context: editorSnapshot.context,
6023
+ snapshot: editorSnapshot,
6042
6024
  event: event.behaviorEvent
6043
6025
  }, shouldRun));
6044
6026
  for (const actionIntends of actionIntendSets)