@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.
- package/lib/_chunks-cjs/behavior.markdown.cjs +9 -9
- package/lib/_chunks-cjs/behavior.markdown.cjs.map +1 -1
- package/lib/_chunks-cjs/editor-provider.cjs +36 -39
- package/lib/_chunks-cjs/editor-provider.cjs.map +1 -1
- package/lib/_chunks-es/behavior.markdown.js +10 -10
- package/lib/_chunks-es/behavior.markdown.js.map +1 -1
- package/lib/_chunks-es/editor-provider.js +36 -39
- package/lib/_chunks-es/editor-provider.js.map +1 -1
- package/lib/_chunks-es/selector.is-selecting-entire-blocks.js +1 -1
- package/lib/behaviors/index.cjs +4 -4
- package/lib/behaviors/index.cjs.map +1 -1
- package/lib/behaviors/index.d.cts +282 -282
- package/lib/behaviors/index.d.ts +282 -282
- package/lib/behaviors/index.js +4 -4
- package/lib/behaviors/index.js.map +1 -1
- package/lib/index.d.cts +8 -8
- package/lib/index.d.ts +8 -8
- package/lib/plugins/index.cjs +4 -4
- package/lib/plugins/index.cjs.map +1 -1
- package/lib/plugins/index.d.cts +8 -8
- package/lib/plugins/index.d.ts +8 -8
- package/lib/plugins/index.js +4 -4
- package/lib/plugins/index.js.map +1 -1
- package/lib/selectors/index.d.cts +8 -8
- package/lib/selectors/index.d.ts +8 -8
- package/lib/utils/index.d.cts +8 -8
- package/lib/utils/index.d.ts +8 -8
- package/package.json +1 -1
- package/src/behavior-actions/behavior.action.insert.text.ts +2 -1
- package/src/behavior-actions/behavior.actions.ts +0 -9
- package/src/behaviors/behavior.abstract.delete.ts +42 -0
- package/src/behaviors/behavior.decorator-pair.ts +5 -4
- package/src/behaviors/behavior.default.ts +2 -0
- package/src/behaviors/behavior.emoji-picker.ts +5 -4
- package/src/behaviors/behavior.markdown.ts +10 -9
- package/src/behaviors/behavior.types.event.ts +8 -8
- package/src/behavior-actions/behavior.action.delete.text.ts +0 -53
|
@@ -47,7 +47,7 @@ function createMarkdownBehaviors(config) {
|
|
|
47
47
|
style
|
|
48
48
|
},
|
|
49
49
|
at: focusTextBlock.path
|
|
50
|
-
}, {
|
|
50
|
+
}, behavior_core.raise({
|
|
51
51
|
type: "delete.text",
|
|
52
52
|
at: {
|
|
53
53
|
anchor: {
|
|
@@ -59,7 +59,7 @@ function createMarkdownBehaviors(config) {
|
|
|
59
59
|
offset: 2
|
|
60
60
|
}
|
|
61
61
|
}
|
|
62
|
-
}]]
|
|
62
|
+
})]]
|
|
63
63
|
}), automaticHr = behavior_core.defineBehavior({
|
|
64
64
|
on: "insert.text",
|
|
65
65
|
guard: ({
|
|
@@ -104,17 +104,17 @@ function createMarkdownBehaviors(config) {
|
|
|
104
104
|
_type: hrObject.name,
|
|
105
105
|
...hrObject.value ?? {}
|
|
106
106
|
}
|
|
107
|
-
}, {
|
|
107
|
+
}, behavior_core.raise({
|
|
108
108
|
type: "delete.text",
|
|
109
109
|
at: hrBlockOffsets
|
|
110
|
-
}]]
|
|
110
|
+
})]]
|
|
111
111
|
}), automaticHrOnPaste = behavior_core.defineBehavior({
|
|
112
112
|
on: "clipboard.paste",
|
|
113
113
|
guard: ({
|
|
114
114
|
snapshot,
|
|
115
115
|
event
|
|
116
116
|
}) => {
|
|
117
|
-
const text = event.originEvent.dataTransfer.getData("text/plain"), hrRegExp = /^(---)$|(___)$|(\*\*\*)
|
|
117
|
+
const text = event.originEvent.dataTransfer.getData("text/plain"), hrRegExp = /^(---)$|(___)$|(\*\*\*)$/, hrCharacters = text.match(hrRegExp)?.[0], hrObject = config.horizontalRuleObject?.(snapshot.context), focusBlock = selector_isOverlappingSelection.getFocusBlock(snapshot);
|
|
118
118
|
return !hrCharacters || !hrObject || !focusBlock ? !1 : {
|
|
119
119
|
hrCharacters,
|
|
120
120
|
hrObject,
|
|
@@ -209,7 +209,7 @@ function createMarkdownBehaviors(config) {
|
|
|
209
209
|
style
|
|
210
210
|
},
|
|
211
211
|
at: focusTextBlock.path
|
|
212
|
-
}, {
|
|
212
|
+
}, behavior_core.raise({
|
|
213
213
|
type: "delete.text",
|
|
214
214
|
at: {
|
|
215
215
|
anchor: {
|
|
@@ -221,7 +221,7 @@ function createMarkdownBehaviors(config) {
|
|
|
221
221
|
offset: level + 1
|
|
222
222
|
}
|
|
223
223
|
}
|
|
224
|
-
}]]
|
|
224
|
+
})]]
|
|
225
225
|
}), clearStyleOnBackspace = behavior_core.defineBehavior({
|
|
226
226
|
on: "delete.backward",
|
|
227
227
|
guard: ({
|
|
@@ -301,7 +301,7 @@ function createMarkdownBehaviors(config) {
|
|
|
301
301
|
style
|
|
302
302
|
},
|
|
303
303
|
at: focusTextBlock.path
|
|
304
|
-
}, {
|
|
304
|
+
}, behavior_core.raise({
|
|
305
305
|
type: "delete.text",
|
|
306
306
|
at: {
|
|
307
307
|
anchor: {
|
|
@@ -313,7 +313,7 @@ function createMarkdownBehaviors(config) {
|
|
|
313
313
|
offset: listItemLength + 1
|
|
314
314
|
}
|
|
315
315
|
}
|
|
316
|
-
}]]
|
|
316
|
+
})]]
|
|
317
317
|
});
|
|
318
318
|
return [automaticBlockquoteOnSpace, automaticHeadingOnSpace, automaticHr, automaticHrOnPaste, clearStyleOnBackspace, automaticListOnSpace];
|
|
319
319
|
}
|
|
@@ -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.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","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 {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","getPreviousInlineObject","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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"}
|
|
@@ -2673,7 +2673,7 @@ function createOperationToPatches(types2) {
|
|
|
2673
2673
|
const insertTextActionImplementation = ({
|
|
2674
2674
|
action
|
|
2675
2675
|
}) => {
|
|
2676
|
-
|
|
2676
|
+
slate.Transforms.insertText(action.editor, action.text);
|
|
2677
2677
|
};
|
|
2678
2678
|
function isPortableTextSpan(node) {
|
|
2679
2679
|
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"));
|
|
@@ -3762,35 +3762,6 @@ const decoratorAddActionImplementation = ({
|
|
|
3762
3762
|
action
|
|
3763
3763
|
}) => {
|
|
3764
3764
|
action.editor.deleteForward(action.unit);
|
|
3765
|
-
}, deleteTextActionImplementation = ({
|
|
3766
|
-
context,
|
|
3767
|
-
action
|
|
3768
|
-
}) => {
|
|
3769
|
-
const value = fromSlateValue(action.editor.children, context.schema.block.name, KEY_TO_VALUE_ELEMENT.get(action.editor)), selection = util_selectionPointToBlockOffset.blockOffsetsToSelection({
|
|
3770
|
-
value,
|
|
3771
|
-
offsets: action.at
|
|
3772
|
-
});
|
|
3773
|
-
if (!selection)
|
|
3774
|
-
throw new Error("Unable to find selection from block offsets");
|
|
3775
|
-
const trimmedSelection = selector_isSelectingEntireBlocks.getTrimmedSelection({
|
|
3776
|
-
context: {
|
|
3777
|
-
converters: [],
|
|
3778
|
-
schema: context.schema,
|
|
3779
|
-
keyGenerator: context.keyGenerator,
|
|
3780
|
-
activeDecorators: [],
|
|
3781
|
-
readOnly: !1,
|
|
3782
|
-
value,
|
|
3783
|
-
selection
|
|
3784
|
-
}
|
|
3785
|
-
});
|
|
3786
|
-
if (!trimmedSelection)
|
|
3787
|
-
throw new Error("Unable to find trimmed selection");
|
|
3788
|
-
const range = toSlateRange(trimmedSelection, action.editor);
|
|
3789
|
-
if (!range)
|
|
3790
|
-
throw new Error("Unable to find Slate range from trimmed selection");
|
|
3791
|
-
slate.Transforms.delete(action.editor, {
|
|
3792
|
-
at: range
|
|
3793
|
-
});
|
|
3794
3765
|
}, effectActionImplementation = ({
|
|
3795
3766
|
action
|
|
3796
3767
|
}) => {
|
|
@@ -4104,7 +4075,6 @@ const moveBlockActionImplementation = ({
|
|
|
4104
4075
|
"delete.backward": deleteBackwardActionImplementation,
|
|
4105
4076
|
"delete.forward": deleteForwardActionImplementation,
|
|
4106
4077
|
"delete.block": deleteBlockActionImplementation,
|
|
4107
|
-
"delete.text": deleteTextActionImplementation,
|
|
4108
4078
|
"history.redo": historyRedoActionImplementation,
|
|
4109
4079
|
"history.undo": historyUndoActionImplementation,
|
|
4110
4080
|
"insert.block": insertBlockActionImplementation,
|
|
@@ -4199,13 +4169,6 @@ function performAction({
|
|
|
4199
4169
|
});
|
|
4200
4170
|
break;
|
|
4201
4171
|
}
|
|
4202
|
-
case "delete.text": {
|
|
4203
|
-
behaviorActionImplementations["delete.text"]({
|
|
4204
|
-
context,
|
|
4205
|
-
action
|
|
4206
|
-
});
|
|
4207
|
-
break;
|
|
4208
|
-
}
|
|
4209
4172
|
case "effect": {
|
|
4210
4173
|
behaviorActionImplementations.effect({
|
|
4211
4174
|
context,
|
|
@@ -5282,6 +5245,39 @@ const abstractAnnotationBehaviors = [behavior_core.defineBehavior({
|
|
|
5282
5245
|
...event,
|
|
5283
5246
|
type: "decorator.add"
|
|
5284
5247
|
})]]
|
|
5248
|
+
})], abstractDeleteBehaviors = [behavior_core.defineBehavior({
|
|
5249
|
+
on: "delete.text",
|
|
5250
|
+
guard: ({
|
|
5251
|
+
snapshot,
|
|
5252
|
+
event
|
|
5253
|
+
}) => {
|
|
5254
|
+
const selection = util_selectionPointToBlockOffset.blockOffsetsToSelection({
|
|
5255
|
+
value: snapshot.context.value,
|
|
5256
|
+
offsets: event.at
|
|
5257
|
+
});
|
|
5258
|
+
if (!selection)
|
|
5259
|
+
return !1;
|
|
5260
|
+
const trimmedSelection = selector_isSelectingEntireBlocks.getTrimmedSelection({
|
|
5261
|
+
context: {
|
|
5262
|
+
converters: [],
|
|
5263
|
+
schema: snapshot.context.schema,
|
|
5264
|
+
keyGenerator: snapshot.context.keyGenerator,
|
|
5265
|
+
activeDecorators: [],
|
|
5266
|
+
readOnly: !1,
|
|
5267
|
+
value: snapshot.context.value,
|
|
5268
|
+
selection
|
|
5269
|
+
}
|
|
5270
|
+
});
|
|
5271
|
+
return trimmedSelection ? {
|
|
5272
|
+
selection: trimmedSelection
|
|
5273
|
+
} : !1;
|
|
5274
|
+
},
|
|
5275
|
+
actions: [(_, {
|
|
5276
|
+
selection
|
|
5277
|
+
}) => [behavior_core.raise({
|
|
5278
|
+
type: "delete",
|
|
5279
|
+
at: selection
|
|
5280
|
+
})]]
|
|
5285
5281
|
})], abstractInsertBehaviors = [behavior_core.defineBehavior({
|
|
5286
5282
|
on: "insert.blocks",
|
|
5287
5283
|
guard: ({
|
|
@@ -5946,6 +5942,7 @@ const abstractAnnotationBehaviors = [behavior_core.defineBehavior({
|
|
|
5946
5942
|
}),
|
|
5947
5943
|
...abstractAnnotationBehaviors,
|
|
5948
5944
|
...abstractDecoratorBehaviors,
|
|
5945
|
+
...abstractDeleteBehaviors,
|
|
5949
5946
|
...abstractInsertBehaviors,
|
|
5950
5947
|
...abstractListItemBehaviors,
|
|
5951
5948
|
...abstractMoveBehaviors,
|
|
@@ -5954,7 +5951,7 @@ const abstractAnnotationBehaviors = [behavior_core.defineBehavior({
|
|
|
5954
5951
|
raiseDeserializationSuccessOrFailure,
|
|
5955
5952
|
raiseSerializationSuccessOrFailure,
|
|
5956
5953
|
raiseInsertSoftBreak
|
|
5957
|
-
], 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"];
|
|
5954
|
+
], 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"];
|
|
5958
5955
|
function isAbstractBehaviorEvent(event) {
|
|
5959
5956
|
return abstractBehaviorEventTypes.includes(event.type);
|
|
5960
5957
|
}
|