@portabletext/editor 1.45.0 → 1.45.2

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 (37) hide show
  1. package/lib/_chunks-cjs/behavior.markdown.cjs +9 -9
  2. package/lib/_chunks-cjs/behavior.markdown.cjs.map +1 -1
  3. package/lib/_chunks-cjs/editor-provider.cjs +36 -39
  4. package/lib/_chunks-cjs/editor-provider.cjs.map +1 -1
  5. package/lib/_chunks-es/behavior.markdown.js +10 -10
  6. package/lib/_chunks-es/behavior.markdown.js.map +1 -1
  7. package/lib/_chunks-es/editor-provider.js +36 -39
  8. package/lib/_chunks-es/editor-provider.js.map +1 -1
  9. package/lib/_chunks-es/selector.is-selecting-entire-blocks.js +1 -1
  10. package/lib/behaviors/index.cjs +4 -4
  11. package/lib/behaviors/index.cjs.map +1 -1
  12. package/lib/behaviors/index.d.cts +282 -282
  13. package/lib/behaviors/index.d.ts +282 -282
  14. package/lib/behaviors/index.js +4 -4
  15. package/lib/behaviors/index.js.map +1 -1
  16. package/lib/index.d.cts +8 -8
  17. package/lib/index.d.ts +8 -8
  18. package/lib/plugins/index.cjs +4 -4
  19. package/lib/plugins/index.cjs.map +1 -1
  20. package/lib/plugins/index.d.cts +8 -8
  21. package/lib/plugins/index.d.ts +8 -8
  22. package/lib/plugins/index.js +4 -4
  23. package/lib/plugins/index.js.map +1 -1
  24. package/lib/selectors/index.d.cts +8 -8
  25. package/lib/selectors/index.d.ts +8 -8
  26. package/lib/utils/index.d.cts +8 -8
  27. package/lib/utils/index.d.ts +8 -8
  28. package/package.json +1 -1
  29. package/src/behavior-actions/behavior.action.insert.text.ts +2 -1
  30. package/src/behavior-actions/behavior.actions.ts +0 -9
  31. package/src/behaviors/behavior.abstract.delete.ts +42 -0
  32. package/src/behaviors/behavior.decorator-pair.ts +5 -4
  33. package/src/behaviors/behavior.default.ts +2 -0
  34. package/src/behaviors/behavior.emoji-picker.ts +5 -4
  35. package/src/behaviors/behavior.markdown.ts +10 -9
  36. package/src/behaviors/behavior.types.event.ts +8 -8
  37. package/src/behavior-actions/behavior.action.delete.text.ts +0 -53
@@ -2,7 +2,7 @@ import { isPortableTextTextBlock } from "@sanity/types";
2
2
  import { isSelectionCollapsed, getFocusTextBlock, getFocusSpan, getPreviousInlineObject, getFocusBlock } from "./selector.is-overlapping-selection.js";
3
3
  import { spanSelectionPointToBlockOffset, getTextBlockText } from "./util.slice-blocks.js";
4
4
  import { getBlockTextBefore } from "./selector.get-text-before.js";
5
- import { defineBehavior } from "./behavior.core.js";
5
+ import { defineBehavior, raise } from "./behavior.core.js";
6
6
  function createMarkdownBehaviors(config) {
7
7
  const automaticBlockquoteOnSpace = defineBehavior({
8
8
  on: "insert.text",
@@ -50,7 +50,7 @@ function createMarkdownBehaviors(config) {
50
50
  style
51
51
  },
52
52
  at: focusTextBlock.path
53
- }, {
53
+ }, raise({
54
54
  type: "delete.text",
55
55
  at: {
56
56
  anchor: {
@@ -62,7 +62,7 @@ function createMarkdownBehaviors(config) {
62
62
  offset: 2
63
63
  }
64
64
  }
65
- }]]
65
+ })]]
66
66
  }), automaticHr = defineBehavior({
67
67
  on: "insert.text",
68
68
  guard: ({
@@ -107,17 +107,17 @@ function createMarkdownBehaviors(config) {
107
107
  _type: hrObject.name,
108
108
  ...hrObject.value ?? {}
109
109
  }
110
- }, {
110
+ }, raise({
111
111
  type: "delete.text",
112
112
  at: hrBlockOffsets
113
- }]]
113
+ })]]
114
114
  }), automaticHrOnPaste = defineBehavior({
115
115
  on: "clipboard.paste",
116
116
  guard: ({
117
117
  snapshot,
118
118
  event
119
119
  }) => {
120
- const text = event.originEvent.dataTransfer.getData("text/plain"), hrRegExp = /^(---)$|(___)$|(\*\*\*)$/gm, hrCharacters = text.match(hrRegExp)?.[0], hrObject = config.horizontalRuleObject?.(snapshot.context), focusBlock = getFocusBlock(snapshot);
120
+ const text = event.originEvent.dataTransfer.getData("text/plain"), hrRegExp = /^(---)$|(___)$|(\*\*\*)$/, hrCharacters = text.match(hrRegExp)?.[0], hrObject = config.horizontalRuleObject?.(snapshot.context), focusBlock = getFocusBlock(snapshot);
121
121
  return !hrCharacters || !hrObject || !focusBlock ? !1 : {
122
122
  hrCharacters,
123
123
  hrObject,
@@ -212,7 +212,7 @@ function createMarkdownBehaviors(config) {
212
212
  style
213
213
  },
214
214
  at: focusTextBlock.path
215
- }, {
215
+ }, raise({
216
216
  type: "delete.text",
217
217
  at: {
218
218
  anchor: {
@@ -224,7 +224,7 @@ function createMarkdownBehaviors(config) {
224
224
  offset: level + 1
225
225
  }
226
226
  }
227
- }]]
227
+ })]]
228
228
  }), clearStyleOnBackspace = defineBehavior({
229
229
  on: "delete.backward",
230
230
  guard: ({
@@ -304,7 +304,7 @@ function createMarkdownBehaviors(config) {
304
304
  style
305
305
  },
306
306
  at: focusTextBlock.path
307
- }, {
307
+ }, raise({
308
308
  type: "delete.text",
309
309
  at: {
310
310
  anchor: {
@@ -316,7 +316,7 @@ function createMarkdownBehaviors(config) {
316
316
  offset: listItemLength + 1
317
317
  }
318
318
  }
319
- }]]
319
+ })]]
320
320
  });
321
321
  return [automaticBlockquoteOnSpace, automaticHeadingOnSpace, automaticHr, automaticHrOnPaste, clearStyleOnBackspace, automaticListOnSpace];
322
322
  }
@@ -1 +1 @@
1
- {"version":3,"file":"behavior.markdown.js","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.behavior'\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 at: {\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 })\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',\n placement: 'before',\n block: {\n _type: hrObject.name,\n ...(hrObject.value ?? {}),\n },\n },\n {\n type: 'delete.text',\n at: hrBlockOffsets,\n },\n ],\n ],\n })\n const automaticHrOnPaste = defineBehavior({\n on: 'clipboard.paste',\n guard: ({snapshot, event}) => {\n const text = event.originEvent.dataTransfer.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 ({snapshot}, {hrObject, focusBlock}) =>\n isPortableTextTextBlock(focusBlock.node)\n ? [\n {\n type: 'insert.block',\n block: {\n _type: snapshot.context.schema.block.name,\n children: focusBlock.node.children,\n },\n placement: 'after',\n },\n {\n type: 'insert.block',\n block: {\n _type: hrObject.name,\n ...(hrObject.value ?? {}),\n },\n placement: 'after',\n },\n {type: 'delete.block', at: focusBlock.path},\n ]\n : [\n {\n type: 'insert.block',\n block: {\n _type: hrObject.name,\n ...(hrObject.value ?? {}),\n },\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 at: {\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 })\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 at: {\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\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","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","block","_type","name","automaticHrOnPaste","originEvent","dataTransfer","getData","hrRegExp","hrCharacters","match","isPortableTextTextBlock","schema","children","automaticHeadingOnSpace","markdownHeadingSearch","exec","level","length","caretAtTheEndOfHeading","headingStyle","clearStyleOnBackspace","atTheBeginningOfBLock","defaultStyle","automaticListOnSpace","looksLikeUnorderedList","unorderedListStyle","caretAtTheEndOfUnorderedList","listItem","listItemLength","looksLikeOrderedList","orderedListStyle","caretAtTheEndOfOrderedList"],"mappings":"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"}
1
+ {"version":3,"file":"behavior.markdown.js","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 {raise} from './behavior.types.action'\nimport {defineBehavior} from './behavior.types.behavior'\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 raise({\n type: 'delete.text',\n at: {\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 })\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',\n placement: 'before',\n block: {\n _type: hrObject.name,\n ...(hrObject.value ?? {}),\n },\n },\n raise({\n type: 'delete.text',\n at: hrBlockOffsets,\n }),\n ],\n ],\n })\n const automaticHrOnPaste = defineBehavior({\n on: 'clipboard.paste',\n guard: ({snapshot, event}) => {\n const text = event.originEvent.dataTransfer.getData('text/plain')\n const hrRegExp = /^(---)$|(___)$|(\\*\\*\\*)$/\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 ({snapshot}, {hrObject, focusBlock}) =>\n isPortableTextTextBlock(focusBlock.node)\n ? [\n {\n type: 'insert.block',\n block: {\n _type: snapshot.context.schema.block.name,\n children: focusBlock.node.children,\n },\n placement: 'after',\n },\n {\n type: 'insert.block',\n block: {\n _type: hrObject.name,\n ...(hrObject.value ?? {}),\n },\n placement: 'after',\n },\n {type: 'delete.block', at: focusBlock.path},\n ]\n : [\n {\n type: 'insert.block',\n block: {\n _type: hrObject.name,\n ...(hrObject.value ?? {}),\n },\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 raise({\n type: 'delete.text',\n at: {\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 })\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 raise({\n type: 'delete.text',\n at: {\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\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","blockOffset","spanSelectionPointToBlockOffset","value","context","selectionPoint","path","_key","node","offset","selection","focus","blockText","getTextBlockText","caretAtTheEndOfQuote","looksLikeMarkdownQuote","test","blockquoteStyle","undefined","style","actions","type","_","props","at","raise","anchor","automaticHr","hrCharacter","hrObject","horizontalRuleObject","focusBlock","textBefore","hrBlockOffsets","placement","block","_type","name","automaticHrOnPaste","originEvent","dataTransfer","getData","hrRegExp","hrCharacters","match","isPortableTextTextBlock","schema","children","automaticHeadingOnSpace","markdownHeadingSearch","exec","level","length","caretAtTheEndOfHeading","headingStyle","clearStyleOnBackspace","atTheBeginningOfBLock","defaultStyle","automaticListOnSpace","looksLikeUnorderedList","unorderedListStyle","caretAtTheEndOfUnorderedList","listItem","listItemLength","looksLikeOrderedList","orderedListStyle","caretAtTheEndOfOrderedList"],"mappings":"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"}
@@ -2699,7 +2699,7 @@ function createOperationToPatches(types) {
2699
2699
  const insertTextActionImplementation = ({
2700
2700
  action
2701
2701
  }) => {
2702
- action.editor.insertText(action.text);
2702
+ Transforms.insertText(action.editor, action.text);
2703
2703
  };
2704
2704
  function isPortableTextSpan(node) {
2705
2705
  return node._type === "span" && "text" in node && typeof node.text == "string" && (typeof node.marks > "u" || Array.isArray(node.marks) && node.marks.every((mark) => typeof mark == "string"));
@@ -3788,35 +3788,6 @@ const decoratorAddActionImplementation = ({
3788
3788
  action
3789
3789
  }) => {
3790
3790
  action.editor.deleteForward(action.unit);
3791
- }, deleteTextActionImplementation = ({
3792
- context,
3793
- action
3794
- }) => {
3795
- const value = fromSlateValue(action.editor.children, context.schema.block.name, KEY_TO_VALUE_ELEMENT.get(action.editor)), selection = blockOffsetsToSelection({
3796
- value,
3797
- offsets: action.at
3798
- });
3799
- if (!selection)
3800
- throw new Error("Unable to find selection from block offsets");
3801
- const trimmedSelection = getTrimmedSelection({
3802
- context: {
3803
- converters: [],
3804
- schema: context.schema,
3805
- keyGenerator: context.keyGenerator,
3806
- activeDecorators: [],
3807
- readOnly: !1,
3808
- value,
3809
- selection
3810
- }
3811
- });
3812
- if (!trimmedSelection)
3813
- throw new Error("Unable to find trimmed selection");
3814
- const range = toSlateRange(trimmedSelection, action.editor);
3815
- if (!range)
3816
- throw new Error("Unable to find Slate range from trimmed selection");
3817
- Transforms.delete(action.editor, {
3818
- at: range
3819
- });
3820
3791
  }, effectActionImplementation = ({
3821
3792
  action
3822
3793
  }) => {
@@ -4130,7 +4101,6 @@ const moveBlockActionImplementation = ({
4130
4101
  "delete.backward": deleteBackwardActionImplementation,
4131
4102
  "delete.forward": deleteForwardActionImplementation,
4132
4103
  "delete.block": deleteBlockActionImplementation,
4133
- "delete.text": deleteTextActionImplementation,
4134
4104
  "history.redo": historyRedoActionImplementation,
4135
4105
  "history.undo": historyUndoActionImplementation,
4136
4106
  "insert.block": insertBlockActionImplementation,
@@ -4225,13 +4195,6 @@ function performAction({
4225
4195
  });
4226
4196
  break;
4227
4197
  }
4228
- case "delete.text": {
4229
- behaviorActionImplementations["delete.text"]({
4230
- context,
4231
- action
4232
- });
4233
- break;
4234
- }
4235
4198
  case "effect": {
4236
4199
  behaviorActionImplementations.effect({
4237
4200
  context,
@@ -5308,6 +5271,39 @@ const abstractAnnotationBehaviors = [defineBehavior({
5308
5271
  ...event,
5309
5272
  type: "decorator.add"
5310
5273
  })]]
5274
+ })], abstractDeleteBehaviors = [defineBehavior({
5275
+ on: "delete.text",
5276
+ guard: ({
5277
+ snapshot,
5278
+ event
5279
+ }) => {
5280
+ const selection = blockOffsetsToSelection({
5281
+ value: snapshot.context.value,
5282
+ offsets: event.at
5283
+ });
5284
+ if (!selection)
5285
+ return !1;
5286
+ const trimmedSelection = getTrimmedSelection({
5287
+ context: {
5288
+ converters: [],
5289
+ schema: snapshot.context.schema,
5290
+ keyGenerator: snapshot.context.keyGenerator,
5291
+ activeDecorators: [],
5292
+ readOnly: !1,
5293
+ value: snapshot.context.value,
5294
+ selection
5295
+ }
5296
+ });
5297
+ return trimmedSelection ? {
5298
+ selection: trimmedSelection
5299
+ } : !1;
5300
+ },
5301
+ actions: [(_, {
5302
+ selection
5303
+ }) => [raise({
5304
+ type: "delete",
5305
+ at: selection
5306
+ })]]
5311
5307
  })], abstractInsertBehaviors = [defineBehavior({
5312
5308
  on: "insert.blocks",
5313
5309
  guard: ({
@@ -5972,6 +5968,7 @@ const abstractAnnotationBehaviors = [defineBehavior({
5972
5968
  }),
5973
5969
  ...abstractAnnotationBehaviors,
5974
5970
  ...abstractDecoratorBehaviors,
5971
+ ...abstractDeleteBehaviors,
5975
5972
  ...abstractInsertBehaviors,
5976
5973
  ...abstractListItemBehaviors,
5977
5974
  ...abstractMoveBehaviors,
@@ -5980,7 +5977,7 @@ const abstractAnnotationBehaviors = [defineBehavior({
5980
5977
  raiseDeserializationSuccessOrFailure,
5981
5978
  raiseSerializationSuccessOrFailure,
5982
5979
  raiseInsertSoftBreak
5983
- ], abstractBehaviorEventTypes = ["annotation.toggle", "decorator.toggle", "deserialize", "deserialization.success", "deserialization.failure", "insert.blocks", "insert.break", "insert.soft break", "list item.add", "list item.remove", "list item.toggle", "move.block down", "move.block up", "select.previous block", "select.next block", "serialize", "serialization.success", "serialization.failure", "style.add", "style.remove", "style.toggle"];
5980
+ ], abstractBehaviorEventTypes = ["annotation.toggle", "decorator.toggle", "delete.text", "deserialize", "deserialization.success", "deserialization.failure", "insert.blocks", "insert.break", "insert.soft break", "list item.add", "list item.remove", "list item.toggle", "move.block down", "move.block up", "select.previous block", "select.next block", "serialize", "serialization.success", "serialization.failure", "style.add", "style.remove", "style.toggle"];
5984
5981
  function isAbstractBehaviorEvent(event) {
5985
5982
  return abstractBehaviorEventTypes.includes(event.type);
5986
5983
  }