@portabletext/editor 1.41.3 → 1.42.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/_chunks-cjs/behavior.core.cjs +54 -54
- package/lib/_chunks-cjs/behavior.core.cjs.map +1 -1
- package/lib/_chunks-cjs/behavior.markdown.cjs +11 -11
- package/lib/_chunks-cjs/behavior.markdown.cjs.map +1 -1
- package/lib/_chunks-cjs/editor-provider.cjs +45 -25
- package/lib/_chunks-cjs/editor-provider.cjs.map +1 -1
- package/lib/_chunks-cjs/selector.get-focus-inline-object.cjs +2 -2
- package/lib/_chunks-cjs/selector.get-focus-inline-object.cjs.map +1 -1
- package/lib/_chunks-cjs/selector.get-text-before.cjs +2 -2
- package/lib/_chunks-cjs/selector.get-text-before.cjs.map +1 -1
- package/lib/_chunks-cjs/selector.is-active-style.cjs +240 -0
- package/lib/_chunks-cjs/selector.is-active-style.cjs.map +1 -0
- package/lib/_chunks-cjs/selector.is-overlapping-selection.cjs +300 -218
- package/lib/_chunks-cjs/selector.is-overlapping-selection.cjs.map +1 -1
- package/lib/_chunks-es/behavior.core.js +29 -29
- package/lib/_chunks-es/behavior.core.js.map +1 -1
- package/lib/_chunks-es/behavior.markdown.js +1 -1
- package/lib/_chunks-es/behavior.markdown.js.map +1 -1
- package/lib/_chunks-es/editor-provider.js +25 -5
- package/lib/_chunks-es/editor-provider.js.map +1 -1
- package/lib/_chunks-es/selector.get-focus-inline-object.js +1 -1
- package/lib/_chunks-es/selector.get-text-before.js +1 -1
- package/lib/_chunks-es/selector.is-active-style.js +243 -0
- package/lib/_chunks-es/selector.is-active-style.js.map +1 -0
- package/lib/_chunks-es/selector.is-overlapping-selection.js +298 -217
- package/lib/_chunks-es/selector.is-overlapping-selection.js.map +1 -1
- package/lib/behaviors/index.cjs +9 -9
- package/lib/behaviors/index.cjs.map +1 -1
- package/lib/behaviors/index.d.cts +16 -86
- package/lib/behaviors/index.d.ts +16 -86
- package/lib/behaviors/index.js +1 -1
- package/lib/behaviors/index.js.map +1 -1
- package/lib/index.cjs +75 -102
- package/lib/index.cjs.map +1 -1
- package/lib/index.d.cts +7 -68
- package/lib/index.d.ts +7 -68
- package/lib/index.js +66 -93
- package/lib/index.js.map +1 -1
- package/lib/plugins/index.cjs +12 -6
- package/lib/plugins/index.cjs.map +1 -1
- package/lib/plugins/index.d.cts +12 -68
- package/lib/plugins/index.d.ts +12 -68
- package/lib/plugins/index.js +9 -3
- package/lib/plugins/index.js.map +1 -1
- package/lib/selectors/index.cjs +36 -36
- package/lib/selectors/index.cjs.map +1 -1
- package/lib/selectors/index.d.cts +7 -68
- package/lib/selectors/index.d.ts +7 -68
- package/lib/selectors/index.js +4 -4
- package/lib/utils/index.d.cts +7 -68
- package/lib/utils/index.d.ts +7 -68
- package/package.json +4 -4
- package/src/behavior-actions/behavior.actions.ts +1 -1
- package/src/behaviors/behavior.code-editor.ts +1 -1
- package/src/behaviors/behavior.core.annotations.ts +2 -1
- package/src/behaviors/behavior.core.block-objects.ts +2 -1
- package/src/behaviors/behavior.core.decorators.ts +2 -1
- package/src/behaviors/behavior.core.dnd.ts +27 -0
- package/src/behaviors/behavior.core.insert-break.ts +2 -1
- package/src/behaviors/behavior.core.lists.ts +2 -1
- package/src/behaviors/behavior.core.ts +2 -0
- package/src/behaviors/behavior.decorator-pair.ts +1 -1
- package/src/behaviors/behavior.default.raise-soft-break.ts +2 -1
- package/src/behaviors/behavior.default.ts +6 -1
- package/src/behaviors/behavior.emoji-picker.ts +1 -1
- package/src/behaviors/behavior.links.ts +1 -1
- package/src/behaviors/behavior.markdown.ts +1 -1
- package/src/behaviors/behavior.types.action.ts +61 -0
- package/src/behaviors/behavior.types.behavior.ts +84 -0
- package/src/behaviors/{behavior.types.ts → behavior.types.event.ts} +58 -203
- package/src/behaviors/behavior.types.guard.ts +14 -0
- package/src/behaviors/index.ts +11 -9
- package/src/editor/Editable.tsx +22 -40
- package/src/editor/create-editor.ts +2 -2
- package/src/editor/editor-machine.ts +3 -3
- package/src/editor/plugins/create-with-event-listeners.ts +0 -1
- package/src/plugins/index.ts +1 -0
- package/src/plugins/plugin.core.tsx +9 -0
- package/src/plugins/plugin.decorator-shortcut.ts +1 -1
- package/lib/_chunks-cjs/selector.is-at-the-start-of-block.cjs +0 -322
- package/lib/_chunks-cjs/selector.is-at-the-start-of-block.cjs.map +0 -1
- package/lib/_chunks-es/selector.is-at-the-start-of-block.js +0 -324
- package/lib/_chunks-es/selector.is-at-the-start-of-block.js.map +0 -1
- package/src/internal-utils/dragging-on-drag-origin.ts +0 -22
|
@@ -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 {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',\n placement: 'before',\n block: {\n _type: hrObject.name,\n ...(hrObject.value ?? {}),\n },\n },\n {\n type: 'delete.text',\n ...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 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","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.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.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 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',\n placement: 'before',\n block: {\n _type: hrObject.name,\n ...(hrObject.value ?? {}),\n },\n },\n {\n type: 'delete.text',\n ...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 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","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,5 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var jsxRuntime = require("react/jsx-runtime"), reactCompilerRuntime = require("react-compiler-runtime"), React = require("react"), slateReact = require("slate-react"), react = require("@xstate/react"), debug$e = require("debug"), isEqual = require("lodash/isEqual.js"), slate = require("slate"), xstate = require("xstate"), patches = require("@portabletext/patches"), types = require("@sanity/types"), flatten = require("lodash/flatten.js"), isPlainObject = require("lodash/isPlainObject.js"), uniq = require("lodash/uniq.js"), getRandomValues = require("get-random-values-esm"), util_selectionPointToBlockOffset = require("./util.selection-point-to-block-offset.cjs"), util_sliceBlocks = require("./util.slice-blocks.cjs"), blockTools = require("@portabletext/block-tools"), toHtml = require("@portabletext/to-html"), schema = require("@sanity/schema"), get = require("lodash/get.js"), isUndefined = require("lodash/isUndefined.js"), omitBy = require("lodash/omitBy.js"),
|
|
2
|
+
var jsxRuntime = require("react/jsx-runtime"), reactCompilerRuntime = require("react-compiler-runtime"), React = require("react"), slateReact = require("slate-react"), react = require("@xstate/react"), debug$e = require("debug"), isEqual = require("lodash/isEqual.js"), slate = require("slate"), xstate = require("xstate"), patches = require("@portabletext/patches"), types = require("@sanity/types"), flatten = require("lodash/flatten.js"), isPlainObject = require("lodash/isPlainObject.js"), uniq = require("lodash/uniq.js"), getRandomValues = require("get-random-values-esm"), util_selectionPointToBlockOffset = require("./util.selection-point-to-block-offset.cjs"), util_sliceBlocks = require("./util.slice-blocks.cjs"), blockTools = require("@portabletext/block-tools"), toHtml = require("@portabletext/to-html"), schema = require("@sanity/schema"), get = require("lodash/get.js"), isUndefined = require("lodash/isUndefined.js"), omitBy = require("lodash/omitBy.js"), selector_isOverlappingSelection = require("./selector.is-overlapping-selection.cjs"), selector_isActiveStyle = require("./selector.is-active-style.cjs"), omit = require("lodash/omit.js"), slateDom = require("slate-dom"), startCase = require("lodash.startcase"), behavior_core = require("./behavior.core.cjs"), rxjs = require("rxjs"), useEffectEvent = require("use-effect-event");
|
|
3
3
|
function _interopDefaultCompat(e) {
|
|
4
4
|
return e && typeof e == "object" && "default" in e ? e : { default: e };
|
|
5
5
|
}
|
|
@@ -2959,7 +2959,7 @@ const insertBreakActionImplementation = ({
|
|
|
2959
2959
|
}) => {
|
|
2960
2960
|
if (!action.editor.selection)
|
|
2961
2961
|
return;
|
|
2962
|
-
const guards =
|
|
2962
|
+
const guards = selector_isOverlappingSelection.createGuards(context), selectedBlocks = [...slate.Editor.nodes(action.editor, {
|
|
2963
2963
|
at: action.editor.selection,
|
|
2964
2964
|
match: (node) => guards.isListBlock(node)
|
|
2965
2965
|
})];
|
|
@@ -2973,7 +2973,7 @@ const insertBreakActionImplementation = ({
|
|
|
2973
2973
|
}) => {
|
|
2974
2974
|
if (!action.editor.selection)
|
|
2975
2975
|
return;
|
|
2976
|
-
const guards =
|
|
2976
|
+
const guards = selector_isOverlappingSelection.createGuards(context), selectedBlocks = [...slate.Editor.nodes(action.editor, {
|
|
2977
2977
|
at: action.editor.selection,
|
|
2978
2978
|
match: (node) => guards.isTextBlock(node)
|
|
2979
2979
|
})];
|
|
@@ -3021,7 +3021,7 @@ const toggleStyleActionImplementation = ({
|
|
|
3021
3021
|
}) => {
|
|
3022
3022
|
if (!action.editor.selection)
|
|
3023
3023
|
return;
|
|
3024
|
-
const defaultStyle = context.schema.styles[0].value, guards =
|
|
3024
|
+
const defaultStyle = context.schema.styles[0].value, guards = selector_isOverlappingSelection.createGuards(context), selectedBlocks = [...slate.Editor.nodes(action.editor, {
|
|
3025
3025
|
at: action.editor.selection,
|
|
3026
3026
|
match: (node) => guards.isTextBlock(node)
|
|
3027
3027
|
})];
|
|
@@ -3037,7 +3037,7 @@ const toggleStyleActionImplementation = ({
|
|
|
3037
3037
|
}) => {
|
|
3038
3038
|
if (!action.editor.selection)
|
|
3039
3039
|
return;
|
|
3040
|
-
const guards =
|
|
3040
|
+
const guards = selector_isOverlappingSelection.createGuards(context), selectedBlocks = [...slate.Editor.nodes(action.editor, {
|
|
3041
3041
|
at: action.editor.selection,
|
|
3042
3042
|
match: (node) => guards.isTextBlock(node)
|
|
3043
3043
|
})];
|
|
@@ -3116,7 +3116,7 @@ const decoratorAddActionImplementation = ({
|
|
|
3116
3116
|
focus: focusOffset
|
|
3117
3117
|
},
|
|
3118
3118
|
backward: editorSelection?.backward
|
|
3119
|
-
}), trimmedSelection =
|
|
3119
|
+
}), trimmedSelection = selector_isActiveStyle.getTrimmedSelection({
|
|
3120
3120
|
context: {
|
|
3121
3121
|
activeDecorators: [],
|
|
3122
3122
|
converters: [],
|
|
@@ -4319,7 +4319,7 @@ const addAnnotationActionImplementation = ({
|
|
|
4319
4319
|
});
|
|
4320
4320
|
if (!selection)
|
|
4321
4321
|
throw new Error("Unable to find selection from block offsets");
|
|
4322
|
-
const trimmedSelection =
|
|
4322
|
+
const trimmedSelection = selector_isActiveStyle.getTrimmedSelection({
|
|
4323
4323
|
context: {
|
|
4324
4324
|
converters: [],
|
|
4325
4325
|
schema: context.schema,
|
|
@@ -5306,8 +5306,7 @@ function createWithEventListeners(editorActor, subscriptions) {
|
|
|
5306
5306
|
type: "behavior event",
|
|
5307
5307
|
behaviorEvent: {
|
|
5308
5308
|
type: "insert.text",
|
|
5309
|
-
text
|
|
5310
|
-
options
|
|
5309
|
+
text
|
|
5311
5310
|
},
|
|
5312
5311
|
editor,
|
|
5313
5312
|
defaultActionCallback: () => {
|
|
@@ -6067,7 +6066,7 @@ const keyIs = {
|
|
|
6067
6066
|
guard: ({
|
|
6068
6067
|
snapshot,
|
|
6069
6068
|
event
|
|
6070
|
-
}) =>
|
|
6069
|
+
}) => selector_isActiveStyle.isActiveAnnotation(event.annotation.name)(snapshot),
|
|
6071
6070
|
actions: [({
|
|
6072
6071
|
event
|
|
6073
6072
|
}) => [behavior_core.raise({
|
|
@@ -6079,7 +6078,7 @@ const keyIs = {
|
|
|
6079
6078
|
guard: ({
|
|
6080
6079
|
snapshot,
|
|
6081
6080
|
event
|
|
6082
|
-
}) => !
|
|
6081
|
+
}) => !selector_isActiveStyle.isActiveAnnotation(event.annotation.name)(snapshot),
|
|
6083
6082
|
actions: [({
|
|
6084
6083
|
event
|
|
6085
6084
|
}) => [behavior_core.raise({
|
|
@@ -6091,7 +6090,7 @@ const keyIs = {
|
|
|
6091
6090
|
guard: ({
|
|
6092
6091
|
snapshot,
|
|
6093
6092
|
event
|
|
6094
|
-
}) =>
|
|
6093
|
+
}) => selector_isActiveStyle.isActiveDecorator(event.decorator)(snapshot),
|
|
6095
6094
|
actions: [({
|
|
6096
6095
|
event
|
|
6097
6096
|
}) => [behavior_core.raise({
|
|
@@ -6108,13 +6107,13 @@ const keyIs = {
|
|
|
6108
6107
|
value: snapshot.context.value,
|
|
6109
6108
|
offsets: event.offsets
|
|
6110
6109
|
}) : null;
|
|
6111
|
-
return manualSelection ? !
|
|
6110
|
+
return manualSelection ? !selector_isActiveStyle.isActiveDecorator(event.decorator)({
|
|
6112
6111
|
...snapshot,
|
|
6113
6112
|
context: {
|
|
6114
6113
|
...snapshot.context,
|
|
6115
6114
|
selection: manualSelection
|
|
6116
6115
|
}
|
|
6117
|
-
}) : !
|
|
6116
|
+
}) : !selector_isActiveStyle.isActiveDecorator(event.decorator)(snapshot);
|
|
6118
6117
|
},
|
|
6119
6118
|
actions: [({
|
|
6120
6119
|
event
|
|
@@ -6127,7 +6126,7 @@ const keyIs = {
|
|
|
6127
6126
|
guard: ({
|
|
6128
6127
|
snapshot,
|
|
6129
6128
|
event
|
|
6130
|
-
}) =>
|
|
6129
|
+
}) => selector_isActiveStyle.isActiveListItem(event.listItem)(snapshot),
|
|
6131
6130
|
actions: [({
|
|
6132
6131
|
event
|
|
6133
6132
|
}) => [behavior_core.raise({
|
|
@@ -6139,7 +6138,7 @@ const keyIs = {
|
|
|
6139
6138
|
guard: ({
|
|
6140
6139
|
snapshot,
|
|
6141
6140
|
event
|
|
6142
|
-
}) => !
|
|
6141
|
+
}) => !selector_isActiveStyle.isActiveListItem(event.listItem)(snapshot),
|
|
6143
6142
|
actions: [({
|
|
6144
6143
|
event
|
|
6145
6144
|
}) => [behavior_core.raise({
|
|
@@ -6151,7 +6150,7 @@ const keyIs = {
|
|
|
6151
6150
|
guard: ({
|
|
6152
6151
|
snapshot,
|
|
6153
6152
|
event
|
|
6154
|
-
}) =>
|
|
6153
|
+
}) => selector_isActiveStyle.isActiveStyle(event.style)(snapshot),
|
|
6155
6154
|
actions: [({
|
|
6156
6155
|
event
|
|
6157
6156
|
}) => [behavior_core.raise({
|
|
@@ -6163,7 +6162,7 @@ const keyIs = {
|
|
|
6163
6162
|
guard: ({
|
|
6164
6163
|
snapshot,
|
|
6165
6164
|
event
|
|
6166
|
-
}) => !
|
|
6165
|
+
}) => !selector_isActiveStyle.isActiveStyle(event.style)(snapshot),
|
|
6167
6166
|
actions: [({
|
|
6168
6167
|
event
|
|
6169
6168
|
}) => [behavior_core.raise({
|
|
@@ -6226,7 +6225,7 @@ const keyIs = {
|
|
|
6226
6225
|
guard: ({
|
|
6227
6226
|
snapshot
|
|
6228
6227
|
}) => {
|
|
6229
|
-
const focusSpan =
|
|
6228
|
+
const focusSpan = selector_isOverlappingSelection.getFocusSpan(snapshot), selectionCollapsed = selector_isOverlappingSelection.isSelectionCollapsed(snapshot);
|
|
6230
6229
|
return focusSpan && selectionCollapsed;
|
|
6231
6230
|
},
|
|
6232
6231
|
actions: [() => [{
|
|
@@ -6245,7 +6244,7 @@ const keyIs = {
|
|
|
6245
6244
|
guard: ({
|
|
6246
6245
|
snapshot
|
|
6247
6246
|
}) => {
|
|
6248
|
-
const focusSpan =
|
|
6247
|
+
const focusSpan = selector_isOverlappingSelection.getFocusSpan(snapshot), selectionCollapsed = selector_isOverlappingSelection.isSelectionCollapsed(snapshot);
|
|
6249
6248
|
return focusSpan && selectionCollapsed;
|
|
6250
6249
|
},
|
|
6251
6250
|
actions: [() => [{
|
|
@@ -6310,6 +6309,9 @@ const keyIs = {
|
|
|
6310
6309
|
actions: [({
|
|
6311
6310
|
event
|
|
6312
6311
|
}) => [behavior_core.raise({
|
|
6312
|
+
type: "select",
|
|
6313
|
+
selection: event.position.selection
|
|
6314
|
+
}), behavior_core.raise({
|
|
6313
6315
|
type: "deserialize",
|
|
6314
6316
|
originEvent: event
|
|
6315
6317
|
})]]
|
|
@@ -6327,12 +6329,12 @@ const keyIs = {
|
|
|
6327
6329
|
...snapshot.context,
|
|
6328
6330
|
selection: dragOrigin.selection
|
|
6329
6331
|
}
|
|
6330
|
-
}) : !1, draggingEntireBlocks =
|
|
6332
|
+
}) : !1, draggingEntireBlocks = selector_isActiveStyle.isSelectingEntireBlocks({
|
|
6331
6333
|
context: {
|
|
6332
6334
|
...snapshot.context,
|
|
6333
6335
|
selection: dragOrigin.selection
|
|
6334
6336
|
}
|
|
6335
|
-
}), draggedBlocks =
|
|
6337
|
+
}), draggedBlocks = selector_isOverlappingSelection.getSelectedBlocks({
|
|
6336
6338
|
context: {
|
|
6337
6339
|
...snapshot.context,
|
|
6338
6340
|
selection: dragOrigin.selection
|
|
@@ -6376,7 +6378,7 @@ const keyIs = {
|
|
|
6376
6378
|
on: "clipboard.paste",
|
|
6377
6379
|
guard: ({
|
|
6378
6380
|
snapshot
|
|
6379
|
-
}) => snapshot.context.selection &&
|
|
6381
|
+
}) => snapshot.context.selection && selector_isOverlappingSelection.isSelectionExpanded(snapshot) ? {
|
|
6380
6382
|
selection: snapshot.context.selection
|
|
6381
6383
|
} : !1,
|
|
6382
6384
|
actions: [({
|
|
@@ -6407,6 +6409,24 @@ const keyIs = {
|
|
|
6407
6409
|
originEvent: event
|
|
6408
6410
|
})]]
|
|
6409
6411
|
}), toggleAnnotationOff, toggleAnnotationOn, toggleDecoratorOff, toggleDecoratorOn, toggleListItemOff, toggleListItemOn, toggleStyleOff, toggleStyleOn, raiseDeserializationSuccessOrFailure, raiseSerializationSuccessOrFailure, raiseInsertSoftBreak];
|
|
6412
|
+
function isKeyboardBehaviorEvent(event) {
|
|
6413
|
+
return event.type.startsWith("keyboard.");
|
|
6414
|
+
}
|
|
6415
|
+
function isClipboardBehaviorEvent(event) {
|
|
6416
|
+
return event.type.startsWith("clipboard.");
|
|
6417
|
+
}
|
|
6418
|
+
function isDragBehaviorEvent(event) {
|
|
6419
|
+
return event.type.startsWith("drag.");
|
|
6420
|
+
}
|
|
6421
|
+
function isInputBehaviorEvent(event) {
|
|
6422
|
+
return event.type.startsWith("input.");
|
|
6423
|
+
}
|
|
6424
|
+
function isMouseBehaviorEvent(event) {
|
|
6425
|
+
return event.type.startsWith("mouse.");
|
|
6426
|
+
}
|
|
6427
|
+
function isCustomBehaviorEvent(event) {
|
|
6428
|
+
return event.type.startsWith("custom.");
|
|
6429
|
+
}
|
|
6410
6430
|
function getActiveDecorators({
|
|
6411
6431
|
schema: schema2,
|
|
6412
6432
|
slateEditorInstance
|
|
@@ -6523,7 +6543,7 @@ const editorMachine = xstate.setup({
|
|
|
6523
6543
|
self
|
|
6524
6544
|
}) => {
|
|
6525
6545
|
xstate.assertEvent(event, ["behavior event", "custom behavior event"]);
|
|
6526
|
-
const defaultAction = event.type === "custom behavior event" ||
|
|
6546
|
+
const defaultAction = event.type === "custom behavior event" || isClipboardBehaviorEvent(event.behaviorEvent) || isDragBehaviorEvent(event.behaviorEvent) || isInputBehaviorEvent(event.behaviorEvent) || isKeyboardBehaviorEvent(event.behaviorEvent) || isMouseBehaviorEvent(event.behaviorEvent) || event.behaviorEvent.type === "deserialize" || event.behaviorEvent.type === "serialize" ? void 0 : {
|
|
6527
6547
|
...event.behaviorEvent,
|
|
6528
6548
|
editor: event.editor
|
|
6529
6549
|
}, defaultActionCallback = event.type === "behavior event" ? event.defaultActionCallback : void 0, eventBehaviors = [...context.behaviors.values(), ...defaultBehaviors].filter((behavior) => {
|
|
@@ -6589,7 +6609,7 @@ const editorMachine = xstate.setup({
|
|
|
6589
6609
|
behaviorOverwritten = behaviorOverwritten || actionSet.length > 0 && actionSet.some((action) => action.type !== "effect"), withApplyingBehaviorActionSet(event.editor, () => {
|
|
6590
6610
|
for (const action of actionSet) {
|
|
6591
6611
|
if (action.type === "raise") {
|
|
6592
|
-
|
|
6612
|
+
isCustomBehaviorEvent(action.event) ? enqueue.raise({
|
|
6593
6613
|
type: "custom behavior event",
|
|
6594
6614
|
behaviorEvent: action.event,
|
|
6595
6615
|
editor: event.editor
|