@portabletext/editor 1.34.1 → 1.35.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/_chunks-cjs/behavior.core.cjs +57 -118
- package/lib/_chunks-cjs/behavior.core.cjs.map +1 -1
- package/lib/_chunks-cjs/behavior.markdown.cjs +27 -67
- package/lib/_chunks-cjs/behavior.markdown.cjs.map +1 -1
- package/lib/_chunks-cjs/plugin.event-listener.cjs +53 -67
- package/lib/_chunks-cjs/plugin.event-listener.cjs.map +1 -1
- package/lib/_chunks-cjs/selector.get-text-before.cjs +5 -7
- package/lib/_chunks-cjs/selector.get-text-before.cjs.map +1 -1
- package/lib/_chunks-cjs/selector.is-active-style.cjs +22 -36
- package/lib/_chunks-cjs/selector.is-active-style.cjs.map +1 -1
- package/lib/_chunks-cjs/selector.is-at-the-start-of-block.cjs +68 -153
- package/lib/_chunks-cjs/selector.is-at-the-start-of-block.cjs.map +1 -1
- package/lib/_chunks-cjs/util.block-offsets-to-selection.cjs.map +1 -1
- package/lib/_chunks-cjs/util.slice-blocks.cjs.map +1 -1
- package/lib/_chunks-es/behavior.core.js +57 -118
- package/lib/_chunks-es/behavior.core.js.map +1 -1
- package/lib/_chunks-es/behavior.markdown.js +27 -67
- package/lib/_chunks-es/behavior.markdown.js.map +1 -1
- package/lib/_chunks-es/plugin.event-listener.js +53 -67
- package/lib/_chunks-es/plugin.event-listener.js.map +1 -1
- package/lib/_chunks-es/selector.get-text-before.js +5 -7
- package/lib/_chunks-es/selector.get-text-before.js.map +1 -1
- package/lib/_chunks-es/selector.is-active-style.js +22 -36
- package/lib/_chunks-es/selector.is-active-style.js.map +1 -1
- package/lib/_chunks-es/selector.is-at-the-start-of-block.js +68 -153
- package/lib/_chunks-es/selector.is-at-the-start-of-block.js.map +1 -1
- package/lib/_chunks-es/util.block-offsets-to-selection.js.map +1 -1
- package/lib/_chunks-es/util.slice-blocks.js.map +1 -1
- package/lib/behaviors/index.cjs +18 -48
- package/lib/behaviors/index.cjs.map +1 -1
- package/lib/behaviors/index.d.cts +24 -13
- package/lib/behaviors/index.d.ts +24 -13
- package/lib/behaviors/index.js +18 -48
- package/lib/behaviors/index.js.map +1 -1
- package/lib/index.d.cts +16 -12
- package/lib/index.d.ts +16 -12
- package/lib/plugins/index.cjs +182 -186
- package/lib/plugins/index.cjs.map +1 -1
- package/lib/plugins/index.d.cts +31 -23
- package/lib/plugins/index.d.ts +31 -23
- package/lib/plugins/index.js +182 -186
- package/lib/plugins/index.js.map +1 -1
- package/lib/selectors/index.cjs +22 -50
- package/lib/selectors/index.cjs.map +1 -1
- package/lib/selectors/index.d.cts +6 -198
- package/lib/selectors/index.d.ts +6 -198
- package/lib/selectors/index.js +22 -50
- package/lib/selectors/index.js.map +1 -1
- package/lib/utils/index.cjs.map +1 -1
- package/lib/utils/index.d.cts +12 -5
- package/lib/utils/index.d.ts +12 -5
- package/lib/utils/index.js.map +1 -1
- package/package.json +7 -7
- package/src/behaviors/behavior.code-editor.ts +6 -6
- package/src/behaviors/behavior.core.annotations.ts +5 -4
- package/src/behaviors/behavior.core.block-objects.ts +17 -17
- package/src/behaviors/behavior.core.decorators.ts +12 -8
- package/src/behaviors/behavior.core.insert-break.ts +27 -29
- package/src/behaviors/behavior.core.lists.ts +19 -19
- package/src/behaviors/behavior.decorator-pair.ts +200 -0
- package/src/behaviors/behavior.default.ts +35 -30
- package/src/behaviors/behavior.emoji-picker.ts +12 -12
- package/src/behaviors/behavior.links.ts +7 -7
- package/src/behaviors/behavior.markdown.ts +41 -42
- package/src/behaviors/behavior.types.ts +14 -17
- package/src/behaviors/index.ts +0 -1
- package/src/converters/converter.json.ts +6 -6
- package/src/converters/converter.portable-text.deserialize.test.ts +28 -26
- package/src/converters/converter.portable-text.ts +6 -6
- package/src/converters/converter.text-html.deserialize.test.ts +17 -15
- package/src/converters/converter.text-html.serialize.test.ts +57 -53
- package/src/converters/converter.text-html.ts +14 -10
- package/src/converters/converter.text-plain.test.ts +17 -15
- package/src/converters/converter.text-plain.ts +15 -11
- package/src/converters/converter.types.ts +5 -5
- package/src/editor/editor-machine.ts +6 -1
- package/src/index.ts +3 -3
- package/src/internal-utils/get-text-to-emphasize.ts +29 -7
- package/src/plugins/plugin.decorator-shortcut.ts +235 -0
- package/src/plugins/plugin.markdown.tsx +56 -8
- package/src/plugins/plugin.one-line.tsx +17 -17
- package/src/selectors/selector.get-active-list-item.ts +4 -4
- package/src/selectors/selector.get-active-style.ts +6 -6
- package/src/selectors/selector.get-anchor-block.ts +5 -5
- package/src/selectors/selector.get-anchor-child.ts +5 -5
- package/src/selectors/selector.get-anchor-span.ts +2 -2
- package/src/selectors/selector.get-anchor-text-block.ts +2 -2
- package/src/selectors/selector.get-block-offsets.ts +8 -7
- package/src/selectors/selector.get-caret-word-selection.ts +19 -16
- package/src/selectors/selector.get-next-inline-object.ts +4 -4
- package/src/selectors/selector.get-previous-inline-object.ts +4 -4
- package/src/selectors/selector.get-selected-slice.ts +7 -4
- package/src/selectors/selector.get-selected-spans.ts +9 -9
- package/src/selectors/selector.get-selection-end-point.ts +5 -5
- package/src/selectors/selector.get-selection-start-point.ts +5 -5
- package/src/selectors/selector.get-selection-text.ts +2 -2
- package/src/selectors/selector.get-selection.ts +2 -2
- package/src/selectors/selector.get-text-before.ts +8 -8
- package/src/selectors/selector.get-trimmed-selection.ts +15 -13
- package/src/selectors/selector.get-value.ts +4 -4
- package/src/selectors/selector.is-at-the-end-of-block.ts +6 -3
- package/src/selectors/selector.is-at-the-start-of-block.ts +3 -3
- package/src/selectors/selector.is-overlapping-selection.ts +8 -6
- package/src/selectors/selector.is-selection-collapsed.ts +6 -5
- package/src/selectors/selector.is-selection-expanded.ts +2 -2
- package/src/selectors/selectors.ts +59 -59
- package/src/types/block-offset.ts +9 -0
- package/src/utils/index.ts +0 -1
- package/src/utils/util.block-offset.ts +1 -1
- package/src/utils/util.block-offsets-to-selection.ts +1 -1
- package/src/utils/util.child-selection-point-to-block-offset.ts +1 -1
- package/src/behaviors/behavior.markdown-emphasis.ts +0 -437
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../../src/plugins/plugin.behavior.tsx","../../src/plugins/plugin.editor-ref.tsx","../../src/internal-utils/get-text-to-emphasize.ts","../../src/behaviors/behavior.markdown-emphasis.ts","../../src/plugins/plugin.markdown.tsx","../../src/plugins/plugin.one-line.tsx"],"sourcesContent":["import {useEffect} from 'react'\nimport type {Behavior} from '../behaviors'\nimport {useEditor} from '../editor/editor-provider'\n\n/**\n * @beta\n */\nexport function BehaviorPlugin(props: {behaviors: Array<Behavior>}) {\n const editor = useEditor()\n\n useEffect(() => {\n const unregisterBehaviors = props.behaviors.map((behavior) =>\n editor.registerBehavior({behavior}),\n )\n\n return () => {\n unregisterBehaviors.forEach((unregister) => unregister())\n }\n }, [editor, props.behaviors])\n\n return null\n}\n","import React from 'react'\nimport type {Editor} from '../editor/create-editor'\nimport {useEditor} from '../editor/editor-provider'\n\n/**\n * @beta\n */\nexport const EditorRefPlugin = React.forwardRef<Editor | null>((_, ref) => {\n const editor = useEditor()\n\n const portableTextEditorRef = React.useRef(editor)\n\n React.useImperativeHandle(ref, () => portableTextEditorRef.current, [])\n\n return null\n})\nEditorRefPlugin.displayName = 'EditorRefPlugin'\n","const asteriskPairRegex = '(?<!\\\\*)\\\\*(?!\\\\s)([^*\\\\n]+?)(?<!\\\\s)\\\\*(?!\\\\*)'\nconst underscorePairRegex = '(?<!_)_(?!\\\\s)([^_\\\\n]+?)(?<!\\\\s)_(?!_)'\nconst italicRegex = new RegExp(`(${asteriskPairRegex}|${underscorePairRegex})$`)\n\nconst doubleAsteriskPairRegex =\n '(?<!\\\\*)\\\\*\\\\*(?!\\\\s)([^*\\\\n]+?)(?<!\\\\s)\\\\*\\\\*(?!\\\\*)'\nconst doubleUnderscorePairRegex = '(?<!_)__(?!\\\\s)([^_\\\\n]+?)(?<!\\\\s)__(?!_)'\nconst boldRegex = new RegExp(\n `(${doubleAsteriskPairRegex}|${doubleUnderscorePairRegex})$`,\n)\n\nexport function getTextToItalic(text: string) {\n return text.match(italicRegex)?.at(0)\n}\n\nexport function getTextToBold(text: string) {\n return text.match(boldRegex)?.at(0)\n}\n","import {useActorRef} from '@xstate/react'\nimport {isEqual} from 'lodash'\nimport {\n assign,\n fromCallback,\n setup,\n type AnyEventObject,\n type CallbackLogicFunction,\n} from 'xstate'\nimport type {Editor} from '../editor/create-editor'\nimport {useEditor} from '../editor/editor-provider'\nimport {\n getTextToBold,\n getTextToItalic,\n} from '../internal-utils/get-text-to-emphasize'\nimport type {EditorSchema} from '../selectors'\nimport * as selectors from '../selectors'\nimport * as utils from '../utils'\nimport {defineBehavior} from './behavior.types'\n\n/**\n * @beta\n */\nexport type MarkdownEmphasisBehaviorsConfig = {\n boldDecorator?: ({schema}: {schema: EditorSchema}) => string | undefined\n italicDecorator?: ({schema}: {schema: EditorSchema}) => string | undefined\n}\n\n/**\n * @beta\n */\nexport function useMarkdownEmphasisBehaviors(props: {\n config: MarkdownEmphasisBehaviorsConfig\n}) {\n const editor = useEditor()\n\n useActorRef(emphasisMachine, {\n input: {\n editor,\n boldDecorator: props.config.boldDecorator?.({\n schema: editor.getSnapshot().context.schema,\n }),\n italicDecorator: props.config.italicDecorator?.({\n schema: editor.getSnapshot().context.schema,\n }),\n },\n })\n}\n\ntype MarkdownEmphasisEvent =\n | {\n type: 'emphasis.add'\n blockOffset: utils.BlockOffset\n }\n | {\n type: 'selection'\n blockOffsets?: {\n anchor: utils.BlockOffset\n focus: utils.BlockOffset\n }\n }\n | {\n type: 'delete.backward'\n }\n\nconst emphasisListener: CallbackLogicFunction<\n AnyEventObject,\n MarkdownEmphasisEvent,\n {editor: Editor; boldDecorator?: string; italicDecorator?: string}\n> = ({sendBack, input}) => {\n const unregister = input.editor.registerBehavior({\n behavior: defineBehavior({\n on: 'insert.text',\n guard: ({context, event}) => {\n const boldDecorator = input.boldDecorator\n const italicDecorator = input.italicDecorator\n\n if (boldDecorator === undefined && italicDecorator === undefined) {\n return false\n }\n\n const focusTextBlock = selectors.getFocusTextBlock({context})\n const selectionStartPoint = selectors.getSelectionStartPoint({context})\n const selectionStartOffset = selectionStartPoint\n ? utils.spanSelectionPointToBlockOffset({\n value: context.value,\n selectionPoint: selectionStartPoint,\n })\n : undefined\n\n if (!focusTextBlock || !selectionStartOffset) {\n return false\n }\n\n const textBefore = selectors.getBlockTextBefore({context})\n\n const textToItalic = getTextToItalic(`${textBefore}${event.text}`)\n\n if (textToItalic !== undefined && italicDecorator !== undefined) {\n const prefixOffsets = {\n anchor: {\n path: focusTextBlock.path,\n // Example: \"foo *bar*\".length - \"*bar*\".length = 4\n offset: `${textBefore}${event.text}`.length - textToItalic.length,\n },\n focus: {\n path: focusTextBlock.path,\n // Example: \"foo *bar*\".length - \"*bar*\".length + 1 = 5\n offset:\n `${textBefore}${event.text}`.length - textToItalic.length + 1,\n },\n }\n const suffixOffsets = {\n anchor: {\n path: focusTextBlock.path,\n // Example: \"foo *bar|\" (8) + \"*\".length - 1 = 8\n offset: selectionStartOffset.offset + event.text.length - 1,\n },\n focus: {\n path: focusTextBlock.path,\n // Example: \"foo *bar|\" (8) + \"*\".length = 9\n offset: selectionStartOffset.offset + event.text.length,\n },\n }\n\n return {\n prefixOffsets,\n suffixOffsets,\n decorator: italicDecorator,\n }\n }\n\n const textToBold = getTextToBold(`${textBefore}${event.text}`)\n\n if (textToBold !== undefined && boldDecorator !== undefined) {\n const prefixOffsets = {\n anchor: {\n path: focusTextBlock.path,\n // Example: \"foo **bar**\".length - \"**bar**\".length = 4\n offset: `${textBefore}${event.text}`.length - textToBold.length,\n },\n focus: {\n path: focusTextBlock.path,\n // Example: \"foo **bar**\".length - \"**bar**\".length + 2 = 6\n offset:\n `${textBefore}${event.text}`.length - textToBold.length + 2,\n },\n }\n\n const prefixSelection = utils.blockOffsetsToSelection({\n value: context.value,\n offsets: prefixOffsets,\n })\n const inlineObjectBeforePrefixFocus =\n selectors.getPreviousInlineObject({\n context: {\n ...context,\n selection: prefixSelection\n ? {\n anchor: prefixSelection.focus,\n focus: prefixSelection.focus,\n }\n : null,\n },\n })\n const inlineObjectBeforePrefixFocusOffset =\n inlineObjectBeforePrefixFocus\n ? utils.childSelectionPointToBlockOffset({\n value: context.value,\n selectionPoint: {\n path: inlineObjectBeforePrefixFocus.path,\n offset: 0,\n },\n })\n : undefined\n\n if (\n inlineObjectBeforePrefixFocusOffset &&\n inlineObjectBeforePrefixFocusOffset.offset >\n prefixOffsets.anchor.offset &&\n inlineObjectBeforePrefixFocusOffset.offset <\n prefixOffsets.focus.offset\n ) {\n return false\n }\n\n const suffixOffsets = {\n anchor: {\n path: focusTextBlock.path,\n // Example: \"foo **bar*|\" (10) + \"*\".length - 2 = 9\n offset: selectionStartOffset.offset + event.text.length - 2,\n },\n focus: {\n path: focusTextBlock.path,\n // Example: \"foo **bar*|\" (10) + \"*\".length = 11\n offset: selectionStartOffset.offset + event.text.length,\n },\n }\n\n const previousInlineObject = selectors.getPreviousInlineObject({\n context,\n })\n const previousInlineObjectOffset = previousInlineObject\n ? utils.childSelectionPointToBlockOffset({\n value: context.value,\n selectionPoint: {\n path: previousInlineObject.path,\n offset: 0,\n },\n })\n : undefined\n\n if (\n previousInlineObjectOffset &&\n previousInlineObjectOffset.offset > suffixOffsets.anchor.offset &&\n previousInlineObjectOffset.offset < suffixOffsets.focus.offset\n ) {\n return false\n }\n\n return {\n prefixOffsets,\n suffixOffsets,\n decorator: boldDecorator,\n }\n }\n\n return false\n },\n actions: [\n ({event}) => [event],\n (_, {prefixOffsets, suffixOffsets, decorator}) => [\n {\n type: 'decorator.add',\n decorator,\n offsets: {\n anchor: prefixOffsets.focus,\n focus: suffixOffsets.anchor,\n },\n },\n {\n type: 'delete.text',\n ...suffixOffsets,\n },\n {\n type: 'delete.text',\n ...prefixOffsets,\n },\n {\n type: 'decorator.remove',\n decorator,\n },\n {\n type: 'effect',\n effect: () => {\n sendBack({\n type: 'emphasis.add',\n blockOffset: {\n ...suffixOffsets.anchor,\n offset:\n suffixOffsets.anchor.offset -\n (prefixOffsets.focus.offset - prefixOffsets.anchor.offset),\n },\n })\n },\n },\n ],\n ],\n }),\n })\n\n return unregister\n}\n\nconst selectionListenerCallback: CallbackLogicFunction<\n AnyEventObject,\n MarkdownEmphasisEvent,\n {editor: Editor}\n> = ({sendBack, input}) => {\n const unregister = input.editor.registerBehavior({\n behavior: defineBehavior({\n on: 'select',\n guard: ({context, event}) => {\n if (!event.selection) {\n return {blockOffsets: undefined}\n }\n\n const anchor = utils.spanSelectionPointToBlockOffset({\n value: context.value,\n selectionPoint: event.selection.anchor,\n })\n const focus = utils.spanSelectionPointToBlockOffset({\n value: context.value,\n selectionPoint: event.selection.focus,\n })\n\n if (!anchor || !focus) {\n return {blockOffsets: undefined}\n }\n\n return {\n blockOffsets: {\n anchor,\n focus,\n },\n }\n },\n actions: [\n (_, {blockOffsets}) => [\n {\n type: 'effect',\n effect: () => {\n sendBack({type: 'selection', blockOffsets})\n },\n },\n ],\n ],\n }),\n })\n\n return unregister\n}\n\nconst deleteBackwardListenerCallback: CallbackLogicFunction<\n AnyEventObject,\n MarkdownEmphasisEvent,\n {editor: Editor}\n> = ({sendBack, input}) => {\n const unregister = input.editor.registerBehavior({\n behavior: defineBehavior({\n on: 'delete.backward',\n actions: [\n () => [\n {\n type: 'history.undo',\n },\n {\n type: 'effect',\n effect: () => {\n sendBack({type: 'delete.backward'})\n },\n },\n ],\n ],\n }),\n })\n\n return unregister\n}\n\nconst emphasisMachine = setup({\n types: {\n context: {} as {\n boldDecorator?: string\n italicDecorator?: string\n offsetAfterEmphasis?: utils.BlockOffset\n editor: Editor\n },\n input: {} as {\n boldDecorator?: string\n italicDecorator?: string\n editor: Editor\n },\n events: {} as MarkdownEmphasisEvent,\n },\n actors: {\n 'emphasis listener': fromCallback(emphasisListener),\n 'delete.backward listener': fromCallback(deleteBackwardListenerCallback),\n 'selection listener': fromCallback(selectionListenerCallback),\n },\n}).createMachine({\n id: 'emphasis',\n context: ({input}) => ({\n boldDecorator: input.boldDecorator,\n italicDecorator: input.italicDecorator,\n editor: input.editor,\n }),\n initial: 'idle',\n states: {\n 'idle': {\n invoke: [\n {\n src: 'emphasis listener',\n input: ({context}) => ({\n editor: context.editor,\n boldDecorator: context.boldDecorator,\n italicDecorator: context.italicDecorator,\n }),\n },\n ],\n on: {\n 'emphasis.add': {\n target: 'emphasis added',\n actions: assign({\n offsetAfterEmphasis: ({event}) => event.blockOffset,\n }),\n },\n },\n },\n 'emphasis added': {\n exit: [\n assign({\n offsetAfterEmphasis: undefined,\n }),\n ],\n invoke: [\n {\n src: 'selection listener',\n input: ({context}) => ({editor: context.editor}),\n },\n {\n src: 'delete.backward listener',\n input: ({context}) => ({editor: context.editor}),\n },\n ],\n on: {\n 'selection': {\n target: 'idle',\n guard: ({context, event}) => {\n const selectionChanged = !isEqual(\n {\n anchor: context.offsetAfterEmphasis,\n focus: context.offsetAfterEmphasis,\n },\n event.blockOffsets,\n )\n\n return selectionChanged\n },\n },\n 'delete.backward': {\n target: 'idle',\n },\n },\n },\n },\n})\n","import {useEffect} from 'react'\nimport {\n createMarkdownBehaviors,\n type MarkdownBehaviorsConfig,\n} from '../behaviors/behavior.markdown'\nimport {\n useMarkdownEmphasisBehaviors,\n type MarkdownEmphasisBehaviorsConfig,\n} from '../behaviors/behavior.markdown-emphasis'\nimport {useEditor} from '../editor/editor-provider'\n\n/**\n * @beta\n */\nexport type MarkdownPluginConfig = MarkdownBehaviorsConfig &\n MarkdownEmphasisBehaviorsConfig\n\n/**\n * @beta\n * Add 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 {MarkdownPlugin} from '@portabletext/editor/plugins'\n *\n * function App() {\n * return (\n * <EditorProvider>\n * <MarkdownPlugin\n * config={{\n * boldDecorator: ({schema}) =>\n * schema.decorators.find((decorator) => decorator.value === 'strong')?.value,\n * italicDecorator: ({schema}) =>\n * schema.decorators.find((decorator) => decorator.value === 'em')?.value,\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 * </EditorProvider>\n * )\n * }\n */\nexport function MarkdownPlugin(props: {config: MarkdownPluginConfig}) {\n const editor = useEditor()\n useMarkdownEmphasisBehaviors({config: props.config})\n\n useEffect(() => {\n const behaviors = createMarkdownBehaviors(props.config)\n\n const unregisterBehaviors = behaviors.map((behavior) =>\n editor.registerBehavior({behavior}),\n )\n\n return () => {\n for (const unregisterBehavior of unregisterBehaviors) {\n unregisterBehavior()\n }\n }\n }, [editor, props.config])\n\n return null\n}\n","import {defineBehavior, raise} from '../behaviors'\nimport * as selectors from '../selectors'\nimport * as utils from '../utils'\nimport {BehaviorPlugin} from './plugin.behavior'\n\nconst oneLineBehaviors = [\n /**\n * Hitting Enter on an expanded selection should just delete that selection\n * without causing a line break.\n */\n defineBehavior({\n on: 'insert.break',\n guard: ({context}) =>\n context.selection && selectors.isSelectionExpanded({context})\n ? {selection: context.selection}\n : false,\n actions: [(_, {selection}) => [{type: 'delete', selection}]],\n }),\n /**\n * All other cases of `insert.break` should be aborted.\n */\n defineBehavior({\n on: 'insert.break',\n actions: [() => [{type: 'noop'}]],\n }),\n /**\n * `insert.block` `before` or `after` is not allowed in a one-line editor.\n */\n defineBehavior({\n on: 'insert.block',\n guard: ({event}) =>\n event.placement === 'before' || event.placement === 'after',\n actions: [() => [{type: 'noop'}]],\n }),\n /**\n * Other cases of `insert.block` are allowed.\n *\n * If a text block is inserted and the focus block is fully selected, then\n * the focus block can be replaced with the inserted block.\n */\n defineBehavior({\n on: 'insert.block',\n guard: ({context, event}) => {\n const focusTextBlock = selectors.getFocusTextBlock({context})\n const selectionStartPoint = selectors.getSelectionStartPoint({context})\n const selectionEndPoint = selectors.getSelectionEndPoint({context})\n\n if (\n !focusTextBlock ||\n !utils.isTextBlock(context, event.block) ||\n !selectionStartPoint ||\n !selectionEndPoint\n ) {\n return false\n }\n\n const blockStartPoint = utils.getBlockStartPoint(focusTextBlock)\n const blockEndPoint = utils.getBlockEndPoint(focusTextBlock)\n const newFocus = utils.getBlockEndPoint({\n node: event.block,\n path: [{_key: event.block._key}],\n })\n\n if (\n utils.isEqualSelectionPoints(blockStartPoint, selectionStartPoint) &&\n utils.isEqualSelectionPoints(blockEndPoint, selectionEndPoint)\n ) {\n return {focusTextBlock, newFocus}\n }\n\n return false\n },\n actions: [\n ({event}, {focusTextBlock, newFocus}) => [\n {type: 'delete.block', blockPath: focusTextBlock.path},\n {type: 'insert.block', block: event.block, placement: 'auto'},\n {\n type: 'select',\n selection: {\n anchor: newFocus,\n focus: newFocus,\n },\n },\n ],\n ],\n }),\n /**\n * An ordinary `insert.block` is acceptable if it's a text block. In that\n * case it will get merged into the existing text block.\n */\n defineBehavior({\n on: 'insert.block',\n guard: ({context, event}) => {\n const focusTextBlock = selectors.getFocusTextBlock({context})\n const selectionStartPoint = selectors.getSelectionStartPoint({context})\n const selectionEndPoint = selectors.getSelectionEndPoint({context})\n\n if (\n !focusTextBlock ||\n !utils.isTextBlock(context, event.block) ||\n !selectionStartPoint ||\n !selectionEndPoint\n ) {\n return false\n }\n\n const blockBeforeStartPoint = utils.splitTextBlock({\n context,\n block: focusTextBlock.node,\n point: selectionStartPoint,\n })?.before\n const blockAfterEndPoint = utils.splitTextBlock({\n context,\n block: focusTextBlock.node,\n point: selectionEndPoint,\n })?.after\n\n if (!blockBeforeStartPoint || !blockAfterEndPoint) {\n return false\n }\n\n const targetBlock = utils.mergeTextBlocks({\n context,\n targetBlock: blockBeforeStartPoint,\n incomingBlock: event.block,\n })\n\n const newFocus = utils.getBlockEndPoint({\n node: targetBlock,\n path: [{_key: targetBlock._key}],\n })\n\n const mergedBlock = utils.mergeTextBlocks({\n context,\n targetBlock,\n incomingBlock: blockAfterEndPoint,\n })\n\n return {focusTextBlock, mergedBlock, newFocus}\n },\n actions: [\n (_, {focusTextBlock, mergedBlock, newFocus}) => [\n {type: 'delete.block', blockPath: focusTextBlock.path},\n {type: 'insert.block', block: mergedBlock, placement: 'auto'},\n {\n type: 'select',\n selection: {\n anchor: newFocus,\n focus: newFocus,\n },\n },\n ],\n ],\n }),\n /**\n * Fallback Behavior to avoid `insert.block` in case the Behaviors above all\n * end up with a falsy guard.\n */\n defineBehavior({\n on: 'insert.block',\n actions: [() => [{type: 'noop'}]],\n }),\n /**\n * If multiple blocks are inserted, then the non-text blocks are filtered out\n * and the text blocks are merged into one block\n */\n defineBehavior({\n on: 'insert.blocks',\n guard: ({context, event}) => {\n return event.blocks\n .filter((block) => utils.isTextBlock(context, block))\n .reduce((targetBlock, incomingBlock) => {\n return utils.mergeTextBlocks({\n context,\n targetBlock,\n incomingBlock,\n })\n })\n },\n actions: [\n // `insert.block` is raised so the Behavior above can handle the\n // insertion\n (_, block) => [raise({type: 'insert.block', block, placement: 'auto'})],\n ],\n }),\n /**\n * Block objects do not fit in a one-line editor\n */\n defineBehavior({\n on: 'insert.block object',\n actions: [() => [{type: 'noop'}]],\n }),\n /**\n * `insert.text block` is raised as an `insert.block` so it can be handled\n * by the Behaviors above.\n */\n defineBehavior({\n on: 'insert.text block',\n actions: [\n ({context, event}) => [\n raise({\n type: 'insert.block',\n block: {\n _key: context.keyGenerator(),\n _type: context.schema.block.name,\n children: event.textBlock?.children ?? [],\n },\n placement: event.placement,\n }),\n ],\n ],\n }),\n]\n\n/**\n * @beta\n * Restrict the editor to one line. The plugin takes care of blocking\n * `insert.break` events and smart handling of other `insert.*` events.\n *\n * Place it with as high priority as possible to make sure other plugins don't\n * overwrite `insert.*` events before this plugin gets a chance to do so.\n */\nexport function OneLinePlugin() {\n return <BehaviorPlugin behaviors={oneLineBehaviors} />\n}\n"],"names":["BehaviorPlugin","props","$","_c","editor","useEditor","t0","t1","behaviors","unregisterBehaviors","map","behavior","registerBehavior","forEach","_temp","useEffect","unregister","EditorRefPlugin","React","forwardRef","_","ref","portableTextEditorRef","useRef","Symbol","for","current","useImperativeHandle","displayName","asteriskPairRegex","underscorePairRegex","italicRegex","RegExp","doubleAsteriskPairRegex","doubleUnderscorePairRegex","boldRegex","getTextToItalic","text","match","at","getTextToBold","useMarkdownEmphasisBehaviors","config","boldDecorator","schema","getSnapshot","context","italicDecorator","t2","input","useActorRef","emphasisMachine","emphasisListener","sendBack","defineBehavior","on","guard","event","undefined","focusTextBlock","selectors","selectionStartPoint","selectionStartOffset","utils","value","selectionPoint","textBefore","textToItalic","prefixOffsets","anchor","path","offset","length","focus","suffixOffsets","decorator","textToBold","prefixSelection","offsets","inlineObjectBeforePrefixFocus","selection","inlineObjectBeforePrefixFocusOffset","previousInlineObject","previousInlineObjectOffset","actions","type","effect","blockOffset","selectionListenerCallback","blockOffsets","deleteBackwardListenerCallback","setup","types","events","actors","fromCallback","createMachine","id","initial","states","invoke","src","target","assign","offsetAfterEmphasis","exit","isEqual","MarkdownPlugin","createMarkdownBehaviors","unregisterBehavior","oneLineBehaviors","placement","selectionEndPoint","block","blockStartPoint","blockEndPoint","newFocus","node","_key","blockPath","blockBeforeStartPoint","point","before","blockAfterEndPoint","after","targetBlock","incomingBlock","mergedBlock","blocks","filter","reduce","raise","keyGenerator","_type","name","children","textBlock","OneLinePlugin","jsx"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../src/plugins/plugin.behavior.tsx","../../src/plugins/plugin.editor-ref.tsx","../../src/internal-utils/get-text-to-emphasize.ts","../../src/behaviors/behavior.decorator-pair.ts","../../src/plugins/plugin.decorator-shortcut.ts","../../src/plugins/plugin.markdown.tsx","../../src/plugins/plugin.one-line.tsx"],"sourcesContent":["import {useEffect} from 'react'\nimport type {Behavior} from '../behaviors'\nimport {useEditor} from '../editor/editor-provider'\n\n/**\n * @beta\n */\nexport function BehaviorPlugin(props: {behaviors: Array<Behavior>}) {\n const editor = useEditor()\n\n useEffect(() => {\n const unregisterBehaviors = props.behaviors.map((behavior) =>\n editor.registerBehavior({behavior}),\n )\n\n return () => {\n unregisterBehaviors.forEach((unregister) => unregister())\n }\n }, [editor, props.behaviors])\n\n return null\n}\n","import React from 'react'\nimport type {Editor} from '../editor/create-editor'\nimport {useEditor} from '../editor/editor-provider'\n\n/**\n * @beta\n */\nexport const EditorRefPlugin = React.forwardRef<Editor | null>((_, ref) => {\n const editor = useEditor()\n\n const portableTextEditorRef = React.useRef(editor)\n\n React.useImperativeHandle(ref, () => portableTextEditorRef.current, [])\n\n return null\n})\nEditorRefPlugin.displayName = 'EditorRefPlugin'\n","export function createPairRegex(char: string, amount: number) {\n // Negative lookbehind: Ensures that the matched sequence is not preceded by the same character\n const prePrefix = `(?<!\\\\${char})`\n\n // Repeats the character `amount` times\n const prefix = `\\\\${char}`.repeat(Math.max(amount, 1))\n\n // Negative lookahead: Ensures that the opening pair (**, *, etc.) is not followed by a space\n const postPrefix = `(?!\\\\s)`\n\n // Captures the content inside the pair\n const content = `([^${char}\\\\n]+?)`\n\n // Negative lookbehind: Ensures that the content is not followed by a space\n const preSuffix = `(?<!\\\\s)`\n\n // Repeats the character `amount` times\n const suffix = `\\\\${char}`.repeat(Math.max(amount, 1))\n\n // Negative lookahead: Ensures that the matched sequence is not followed by the same character\n const postSuffix = `(?!\\\\${char})`\n\n return `${prePrefix}${prefix}${postPrefix}${content}${preSuffix}${suffix}${postSuffix}`\n}\n\nconst italicRegex = new RegExp(\n `(${createPairRegex('*', 1)}|${createPairRegex('_', 1)})$`,\n)\n\nconst boldRegex = new RegExp(\n `(${createPairRegex('*', 2)}|${createPairRegex('_', 2)})$`,\n)\n\nexport function getTextToItalic(text: string) {\n return text.match(italicRegex)?.at(0)\n}\n\nexport function getTextToBold(text: string) {\n return text.match(boldRegex)?.at(0)\n}\n","import {createPairRegex} from '../internal-utils/get-text-to-emphasize'\nimport * as selectors from '../selectors'\nimport type {BlockOffset} from '../types/block-offset'\nimport * as utils from '../utils'\nimport {defineBehavior} from './behavior.types'\n\nexport function createDecoratorPairBehavior(config: {\n decorator: ({schema}: {schema: selectors.EditorSchema}) => string | undefined\n pair: {char: string; amount: number}\n onDecorate: (offset: BlockOffset) => void\n}) {\n if (config.pair.amount < 1) {\n console.warn(\n `The amount of characters in the pair should be greater than 0`,\n )\n }\n\n const pairRegex = createPairRegex(config.pair.char, config.pair.amount)\n const regEx = new RegExp(`(${pairRegex})$`)\n\n return defineBehavior({\n on: 'insert.text',\n guard: ({snapshot, event}) => {\n if (config.pair.amount < 1) {\n return false\n }\n\n const decorator = config.decorator({schema: snapshot.context.schema})\n\n if (decorator === undefined) {\n return false\n }\n\n const focusTextBlock = selectors.getFocusTextBlock(snapshot)\n const selectionStartPoint = selectors.getSelectionStartPoint(snapshot)\n const selectionStartOffset = selectionStartPoint\n ? utils.spanSelectionPointToBlockOffset({\n value: snapshot.context.value,\n selectionPoint: selectionStartPoint,\n })\n : undefined\n\n if (!focusTextBlock || !selectionStartOffset) {\n return false\n }\n\n const textBefore = selectors.getBlockTextBefore(snapshot)\n const newText = `${textBefore}${event.text}`\n const textToDecorate = newText.match(regEx)?.at(0)\n\n if (textToDecorate === undefined) {\n return false\n }\n\n const prefixOffsets = {\n anchor: {\n path: focusTextBlock.path,\n // Example: \"foo **bar**\".length - \"**bar**\".length = 4\n offset: newText.length - textToDecorate.length,\n },\n focus: {\n path: focusTextBlock.path,\n // Example: \"foo **bar**\".length - \"**bar**\".length + \"*\".length * 2 = 6\n offset:\n newText.length -\n textToDecorate.length +\n config.pair.char.length * config.pair.amount,\n },\n }\n\n const suffixOffsets = {\n anchor: {\n path: focusTextBlock.path,\n // Example: \"foo **bar*|\" (10) + \"*\".length - 2 = 9\n offset:\n selectionStartOffset.offset +\n event.text.length -\n config.pair.char.length * config.pair.amount,\n },\n focus: {\n path: focusTextBlock.path,\n // Example: \"foo **bar*|\" (10) + \"*\".length = 11\n offset: selectionStartOffset.offset + event.text.length,\n },\n }\n\n // If the prefix is more than one character, then we need to check if\n // there is an inline object inside it\n if (prefixOffsets.focus.offset - prefixOffsets.anchor.offset > 1) {\n const prefixSelection = utils.blockOffsetsToSelection({\n value: snapshot.context.value,\n offsets: prefixOffsets,\n })\n const inlineObjectBeforePrefixFocus = selectors.getPreviousInlineObject(\n {\n context: {\n ...snapshot.context,\n selection: prefixSelection\n ? {\n anchor: prefixSelection.focus,\n focus: prefixSelection.focus,\n }\n : null,\n },\n },\n )\n const inlineObjectBeforePrefixFocusOffset =\n inlineObjectBeforePrefixFocus\n ? utils.childSelectionPointToBlockOffset({\n value: snapshot.context.value,\n selectionPoint: {\n path: inlineObjectBeforePrefixFocus.path,\n offset: 0,\n },\n })\n : undefined\n\n if (\n inlineObjectBeforePrefixFocusOffset &&\n inlineObjectBeforePrefixFocusOffset.offset >\n prefixOffsets.anchor.offset &&\n inlineObjectBeforePrefixFocusOffset.offset <\n prefixOffsets.focus.offset\n ) {\n return false\n }\n }\n\n // If the suffix is more than one character, then we need to check if\n // there is an inline object inside it\n if (suffixOffsets.focus.offset - suffixOffsets.anchor.offset > 1) {\n const previousInlineObject = selectors.getPreviousInlineObject(snapshot)\n const previousInlineObjectOffset = previousInlineObject\n ? utils.childSelectionPointToBlockOffset({\n value: snapshot.context.value,\n selectionPoint: {\n path: previousInlineObject.path,\n offset: 0,\n },\n })\n : undefined\n\n if (\n previousInlineObjectOffset &&\n previousInlineObjectOffset.offset > suffixOffsets.anchor.offset &&\n previousInlineObjectOffset.offset < suffixOffsets.focus.offset\n ) {\n return false\n }\n }\n\n return {\n prefixOffsets,\n suffixOffsets,\n decorator,\n }\n },\n actions: [\n // Insert the text as usual in its own undo step\n ({event}) => [event],\n (_, {prefixOffsets, suffixOffsets, decorator}) => [\n // Decorate the text between the prefix and suffix\n {\n type: 'decorator.add',\n decorator,\n offsets: {\n anchor: prefixOffsets.focus,\n focus: suffixOffsets.anchor,\n },\n },\n // Delete the suffix\n {\n type: 'delete.text',\n ...suffixOffsets,\n },\n // Delete the prefix\n {\n type: 'delete.text',\n ...prefixOffsets,\n },\n // Toggle the decorator off so the next inserted text isn't emphasized\n {\n type: 'decorator.remove',\n decorator,\n },\n {\n type: 'effect',\n effect: () => {\n config.onDecorate({\n ...suffixOffsets.anchor,\n offset:\n suffixOffsets.anchor.offset -\n (prefixOffsets.focus.offset - prefixOffsets.anchor.offset),\n })\n },\n },\n ],\n ],\n })\n}\n","import {useActorRef} from '@xstate/react'\nimport {isEqual} from 'lodash'\nimport {\n assign,\n fromCallback,\n setup,\n type AnyEventObject,\n type CallbackLogicFunction,\n} from 'xstate'\nimport {createDecoratorPairBehavior} from '../behaviors/behavior.decorator-pair'\nimport {defineBehavior} from '../behaviors/behavior.types'\nimport type {Editor} from '../editor/create-editor'\nimport {useEditor} from '../editor/editor-provider'\nimport type {EditorSchema} from '../selectors'\nimport type {BlockOffset} from '../types/block-offset'\nimport * as utils from '../utils'\n\nexport function DecoratorShortcutPlugin(config: {\n decorator: ({schema}: {schema: EditorSchema}) => string | undefined\n pair: {char: string; amount: number}\n}) {\n const editor = useEditor()\n\n useActorRef(decoratorPairMachine, {\n input: {\n editor,\n decorator: config.decorator,\n pair: config.pair,\n },\n })\n\n return null\n}\n\ntype MarkdownEmphasisEvent =\n | {\n type: 'emphasis.add'\n blockOffset: BlockOffset\n }\n | {\n type: 'selection'\n blockOffsets?: {\n anchor: BlockOffset\n focus: BlockOffset\n }\n }\n | {\n type: 'delete.backward'\n }\n\nconst emphasisListener: CallbackLogicFunction<\n AnyEventObject,\n MarkdownEmphasisEvent,\n {\n decorator: ({schema}: {schema: EditorSchema}) => string | undefined\n editor: Editor\n pair: {char: string; amount: number}\n }\n> = ({sendBack, input}) => {\n const unregister = input.editor.registerBehavior({\n behavior: createDecoratorPairBehavior({\n decorator: input.decorator,\n pair: input.pair,\n onDecorate: (offset) => {\n sendBack({type: 'emphasis.add', blockOffset: offset})\n },\n }),\n })\n\n return unregister\n}\n\nconst selectionListenerCallback: CallbackLogicFunction<\n AnyEventObject,\n MarkdownEmphasisEvent,\n {editor: Editor}\n> = ({sendBack, input}) => {\n const unregister = input.editor.registerBehavior({\n behavior: defineBehavior({\n on: 'select',\n guard: ({snapshot, event}) => {\n if (!event.selection) {\n return {blockOffsets: undefined}\n }\n\n const anchor = utils.spanSelectionPointToBlockOffset({\n value: snapshot.context.value,\n selectionPoint: event.selection.anchor,\n })\n const focus = utils.spanSelectionPointToBlockOffset({\n value: snapshot.context.value,\n selectionPoint: event.selection.focus,\n })\n\n if (!anchor || !focus) {\n return {blockOffsets: undefined}\n }\n\n return {\n blockOffsets: {\n anchor,\n focus,\n },\n }\n },\n actions: [\n (_, {blockOffsets}) => [\n {\n type: 'effect',\n effect: () => {\n sendBack({type: 'selection', blockOffsets})\n },\n },\n ],\n ],\n }),\n })\n\n return unregister\n}\n\nconst deleteBackwardListenerCallback: CallbackLogicFunction<\n AnyEventObject,\n MarkdownEmphasisEvent,\n {editor: Editor}\n> = ({sendBack, input}) => {\n const unregister = input.editor.registerBehavior({\n behavior: defineBehavior({\n on: 'delete.backward',\n actions: [\n () => [\n {\n type: 'history.undo',\n },\n {\n type: 'effect',\n effect: () => {\n sendBack({type: 'delete.backward'})\n },\n },\n ],\n ],\n }),\n })\n\n return unregister\n}\n\nconst decoratorPairMachine = setup({\n types: {\n context: {} as {\n decorator: ({schema}: {schema: EditorSchema}) => string | undefined\n editor: Editor\n offsetAfterEmphasis?: BlockOffset\n pair: {char: string; amount: number}\n },\n input: {} as {\n decorator: ({schema}: {schema: EditorSchema}) => string | undefined\n editor: Editor\n pair: {char: string; amount: number}\n },\n events: {} as MarkdownEmphasisEvent,\n },\n actors: {\n 'emphasis listener': fromCallback(emphasisListener),\n 'delete.backward listener': fromCallback(deleteBackwardListenerCallback),\n 'selection listener': fromCallback(selectionListenerCallback),\n },\n}).createMachine({\n id: 'decorator pair',\n context: ({input}) => ({\n decorator: input.decorator,\n editor: input.editor,\n pair: input.pair,\n }),\n initial: 'idle',\n states: {\n 'idle': {\n invoke: [\n {\n src: 'emphasis listener',\n input: ({context}) => ({\n decorator: context.decorator,\n editor: context.editor,\n pair: context.pair,\n }),\n },\n ],\n on: {\n 'emphasis.add': {\n target: 'emphasis added',\n actions: assign({\n offsetAfterEmphasis: ({event}) => event.blockOffset,\n }),\n },\n },\n },\n 'emphasis added': {\n exit: [\n assign({\n offsetAfterEmphasis: undefined,\n }),\n ],\n invoke: [\n {\n src: 'selection listener',\n input: ({context}) => ({editor: context.editor}),\n },\n {\n src: 'delete.backward listener',\n input: ({context}) => ({editor: context.editor}),\n },\n ],\n on: {\n 'selection': {\n target: 'idle',\n guard: ({context, event}) => {\n const selectionChanged = !isEqual(\n {\n anchor: context.offsetAfterEmphasis,\n focus: context.offsetAfterEmphasis,\n },\n event.blockOffsets,\n )\n\n return selectionChanged\n },\n },\n 'delete.backward': {\n target: 'idle',\n },\n },\n },\n },\n})\n","import {useEffect} from 'react'\nimport {\n createMarkdownBehaviors,\n type MarkdownBehaviorsConfig,\n} from '../behaviors/behavior.markdown'\nimport type {EditorSchema} from '../editor/define-schema'\nimport {useEditor} from '../editor/editor-provider'\nimport {DecoratorShortcutPlugin} from './plugin.decorator-shortcut'\n\n/**\n * @beta\n */\nexport type MarkdownPluginConfig = MarkdownBehaviorsConfig & {\n boldDecorator?: ({schema}: {schema: EditorSchema}) => string | undefined\n codeDecorator?: ({schema}: {schema: EditorSchema}) => string | undefined\n italicDecorator?: ({schema}: {schema: EditorSchema}) => string | undefined\n strikeThroughDecorator?: ({\n schema,\n }: {\n schema: EditorSchema\n }) => string | undefined\n}\n\n/**\n * @beta\n * Add 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 {MarkdownPlugin} from '@portabletext/editor/plugins'\n *\n * function App() {\n * return (\n * <EditorProvider>\n * <MarkdownPlugin\n * config={{\n * boldDecorator: ({schema}) =>\n * schema.decorators.find((decorator) => decorator.value === 'strong')?.value,\n * codeDecorator: ({schema}) =>\n * schema.decorators.find((decorator) => decorator.value === 'code')?.value,\n * italicDecorator: ({schema}) =>\n * schema.decorators.find((decorator) => decorator.value === 'em')?.value,\n * strikeThroughDecorator: ({schema}) =>\n * schema.decorators.find((decorator) => decorator.value === 'strike-through')?.value,\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 * </EditorProvider>\n * )\n * }\n */\nexport function MarkdownPlugin(props: {config: MarkdownPluginConfig}) {\n const editor = useEditor()\n\n useEffect(() => {\n const behaviors = createMarkdownBehaviors(props.config)\n\n const unregisterBehaviors = behaviors.map((behavior) =>\n editor.registerBehavior({behavior}),\n )\n\n return () => {\n for (const unregisterBehavior of unregisterBehaviors) {\n unregisterBehavior()\n }\n }\n }, [editor, props.config])\n\n return (\n <>\n {props.config.boldDecorator ? (\n <>\n <DecoratorShortcutPlugin\n decorator={props.config.boldDecorator}\n pair={{char: '*', amount: 2}}\n />\n <DecoratorShortcutPlugin\n decorator={props.config.boldDecorator}\n pair={{char: '_', amount: 2}}\n />\n </>\n ) : null}\n {props.config.codeDecorator ? (\n <DecoratorShortcutPlugin\n decorator={props.config.codeDecorator}\n pair={{char: '`', amount: 1}}\n />\n ) : null}\n {props.config.italicDecorator ? (\n <>\n <DecoratorShortcutPlugin\n decorator={props.config.italicDecorator}\n pair={{char: '*', amount: 1}}\n />\n <DecoratorShortcutPlugin\n decorator={props.config.italicDecorator}\n pair={{char: '_', amount: 1}}\n />\n </>\n ) : null}\n {props.config.strikeThroughDecorator ? (\n <DecoratorShortcutPlugin\n decorator={props.config.strikeThroughDecorator}\n pair={{char: '~', amount: 2}}\n />\n ) : null}\n </>\n )\n}\n","import {defineBehavior, raise} from '../behaviors'\nimport * as selectors from '../selectors'\nimport * as utils from '../utils'\nimport {BehaviorPlugin} from './plugin.behavior'\n\nconst oneLineBehaviors = [\n /**\n * Hitting Enter on an expanded selection should just delete that selection\n * without causing a line break.\n */\n defineBehavior({\n on: 'insert.break',\n guard: (snapshot) =>\n snapshot.context.selection && selectors.isSelectionExpanded(snapshot)\n ? {selection: snapshot.context.selection}\n : false,\n actions: [(_, {selection}) => [{type: 'delete', selection}]],\n }),\n /**\n * All other cases of `insert.break` should be aborted.\n */\n defineBehavior({\n on: 'insert.break',\n actions: [() => [{type: 'noop'}]],\n }),\n /**\n * `insert.block` `before` or `after` is not allowed in a one-line editor.\n */\n defineBehavior({\n on: 'insert.block',\n guard: ({event}) =>\n event.placement === 'before' || event.placement === 'after',\n actions: [() => [{type: 'noop'}]],\n }),\n /**\n * Other cases of `insert.block` are allowed.\n *\n * If a text block is inserted and the focus block is fully selected, then\n * the focus block can be replaced with the inserted block.\n */\n defineBehavior({\n on: 'insert.block',\n guard: ({snapshot, event}) => {\n const focusTextBlock = selectors.getFocusTextBlock(snapshot)\n const selectionStartPoint = selectors.getSelectionStartPoint(snapshot)\n const selectionEndPoint = selectors.getSelectionEndPoint(snapshot)\n\n if (\n !focusTextBlock ||\n !utils.isTextBlock(snapshot.context, event.block) ||\n !selectionStartPoint ||\n !selectionEndPoint\n ) {\n return false\n }\n\n const blockStartPoint = utils.getBlockStartPoint(focusTextBlock)\n const blockEndPoint = utils.getBlockEndPoint(focusTextBlock)\n const newFocus = utils.getBlockEndPoint({\n node: event.block,\n path: [{_key: event.block._key}],\n })\n\n if (\n utils.isEqualSelectionPoints(blockStartPoint, selectionStartPoint) &&\n utils.isEqualSelectionPoints(blockEndPoint, selectionEndPoint)\n ) {\n return {focusTextBlock, newFocus}\n }\n\n return false\n },\n actions: [\n ({event}, {focusTextBlock, newFocus}) => [\n {type: 'delete.block', blockPath: focusTextBlock.path},\n {type: 'insert.block', block: event.block, placement: 'auto'},\n {\n type: 'select',\n selection: {\n anchor: newFocus,\n focus: newFocus,\n },\n },\n ],\n ],\n }),\n /**\n * An ordinary `insert.block` is acceptable if it's a text block. In that\n * case it will get merged into the existing text block.\n */\n defineBehavior({\n on: 'insert.block',\n guard: ({snapshot, event}) => {\n const focusTextBlock = selectors.getFocusTextBlock(snapshot)\n const selectionStartPoint = selectors.getSelectionStartPoint(snapshot)\n const selectionEndPoint = selectors.getSelectionEndPoint(snapshot)\n\n if (\n !focusTextBlock ||\n !utils.isTextBlock(snapshot.context, event.block) ||\n !selectionStartPoint ||\n !selectionEndPoint\n ) {\n return false\n }\n\n const blockBeforeStartPoint = utils.splitTextBlock({\n context: snapshot.context,\n block: focusTextBlock.node,\n point: selectionStartPoint,\n })?.before\n const blockAfterEndPoint = utils.splitTextBlock({\n context: snapshot.context,\n block: focusTextBlock.node,\n point: selectionEndPoint,\n })?.after\n\n if (!blockBeforeStartPoint || !blockAfterEndPoint) {\n return false\n }\n\n const targetBlock = utils.mergeTextBlocks({\n context: snapshot.context,\n targetBlock: blockBeforeStartPoint,\n incomingBlock: event.block,\n })\n\n const newFocus = utils.getBlockEndPoint({\n node: targetBlock,\n path: [{_key: targetBlock._key}],\n })\n\n const mergedBlock = utils.mergeTextBlocks({\n context: snapshot.context,\n targetBlock,\n incomingBlock: blockAfterEndPoint,\n })\n\n return {focusTextBlock, mergedBlock, newFocus}\n },\n actions: [\n (_, {focusTextBlock, mergedBlock, newFocus}) => [\n {type: 'delete.block', blockPath: focusTextBlock.path},\n {type: 'insert.block', block: mergedBlock, placement: 'auto'},\n {\n type: 'select',\n selection: {\n anchor: newFocus,\n focus: newFocus,\n },\n },\n ],\n ],\n }),\n /**\n * Fallback Behavior to avoid `insert.block` in case the Behaviors above all\n * end up with a falsy guard.\n */\n defineBehavior({\n on: 'insert.block',\n actions: [() => [{type: 'noop'}]],\n }),\n /**\n * If multiple blocks are inserted, then the non-text blocks are filtered out\n * and the text blocks are merged into one block\n */\n defineBehavior({\n on: 'insert.blocks',\n guard: ({context, event}) => {\n return event.blocks\n .filter((block) => utils.isTextBlock(context, block))\n .reduce((targetBlock, incomingBlock) => {\n return utils.mergeTextBlocks({\n context,\n targetBlock,\n incomingBlock,\n })\n })\n },\n actions: [\n // `insert.block` is raised so the Behavior above can handle the\n // insertion\n (_, block) => [raise({type: 'insert.block', block, placement: 'auto'})],\n ],\n }),\n /**\n * Block objects do not fit in a one-line editor\n */\n defineBehavior({\n on: 'insert.block object',\n actions: [() => [{type: 'noop'}]],\n }),\n /**\n * `insert.text block` is raised as an `insert.block` so it can be handled\n * by the Behaviors above.\n */\n defineBehavior({\n on: 'insert.text block',\n actions: [\n ({context, event}) => [\n raise({\n type: 'insert.block',\n block: {\n _key: context.keyGenerator(),\n _type: context.schema.block.name,\n children: event.textBlock?.children ?? [],\n },\n placement: event.placement,\n }),\n ],\n ],\n }),\n]\n\n/**\n * @beta\n * Restrict the editor to one line. The plugin takes care of blocking\n * `insert.break` events and smart handling of other `insert.*` events.\n *\n * Place it with as high priority as possible to make sure other plugins don't\n * overwrite `insert.*` events before this plugin gets a chance to do so.\n */\nexport function OneLinePlugin() {\n return <BehaviorPlugin behaviors={oneLineBehaviors} />\n}\n"],"names":["BehaviorPlugin","props","$","_c","editor","useEditor","t0","t1","behaviors","unregisterBehaviors","map","behavior","registerBehavior","forEach","_temp","useEffect","unregister","EditorRefPlugin","React","forwardRef","_","ref","portableTextEditorRef","useRef","Symbol","for","current","useImperativeHandle","displayName","createPairRegex","char","amount","prePrefix","prefix","repeat","Math","max","postPrefix","content","preSuffix","suffix","postSuffix","createDecoratorPairBehavior","config","pair","console","warn","pairRegex","regEx","RegExp","defineBehavior","on","guard","snapshot","event","decorator","schema","context","undefined","focusTextBlock","selectors","selectionStartPoint","selectionStartOffset","utils","value","selectionPoint","newText","text","textToDecorate","match","at","prefixOffsets","anchor","path","offset","length","focus","suffixOffsets","prefixSelection","offsets","inlineObjectBeforePrefixFocus","selection","inlineObjectBeforePrefixFocusOffset","previousInlineObject","previousInlineObjectOffset","actions","type","effect","onDecorate","DecoratorShortcutPlugin","input","useActorRef","decoratorPairMachine","emphasisListener","sendBack","blockOffset","selectionListenerCallback","blockOffsets","deleteBackwardListenerCallback","setup","types","events","actors","fromCallback","createMachine","id","initial","states","invoke","src","target","assign","offsetAfterEmphasis","exit","isEqual","MarkdownPlugin","createMarkdownBehaviors","unregisterBehavior","boldDecorator","jsxs","Fragment","jsx","codeDecorator","italicDecorator","strikeThroughDecorator","oneLineBehaviors","placement","selectionEndPoint","block","blockStartPoint","blockEndPoint","newFocus","node","_key","blockPath","blockBeforeStartPoint","point","before","blockAfterEndPoint","after","targetBlock","incomingBlock","mergedBlock","blocks","filter","reduce","raise","keyGenerator","_type","name","children","textBlock","OneLinePlugin"],"mappings":"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"}
|
package/lib/plugins/index.d.cts
CHANGED
|
@@ -101,11 +101,13 @@ declare type BehaviorActionIntend =
|
|
|
101
101
|
* @beta
|
|
102
102
|
*/
|
|
103
103
|
declare type BehaviorActionIntendSet<TBehaviorEvent, TGuardResponse> = (
|
|
104
|
-
{
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
104
|
+
payload: {
|
|
105
|
+
/**
|
|
106
|
+
* @deprecated
|
|
107
|
+
* Use `snapshot` instead
|
|
108
|
+
*/
|
|
108
109
|
context: EditorContext
|
|
110
|
+
snapshot: EditorSnapshot
|
|
109
111
|
event: TBehaviorEvent
|
|
110
112
|
},
|
|
111
113
|
guardResponse: TGuardResponse,
|
|
@@ -122,11 +124,13 @@ declare type BehaviorEvent =
|
|
|
122
124
|
/**
|
|
123
125
|
* @beta
|
|
124
126
|
*/
|
|
125
|
-
declare type BehaviorGuard<TBehaviorEvent, TGuardResponse> = ({
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
127
|
+
declare type BehaviorGuard<TBehaviorEvent, TGuardResponse> = (payload: {
|
|
128
|
+
/**
|
|
129
|
+
* @deprecated
|
|
130
|
+
* Use `snapshot` instead
|
|
131
|
+
*/
|
|
129
132
|
context: EditorContext
|
|
133
|
+
snapshot: EditorSnapshot
|
|
130
134
|
event: TBehaviorEvent
|
|
131
135
|
}) => TGuardResponse | false
|
|
132
136
|
|
|
@@ -195,10 +199,10 @@ declare type CustomBehaviorEvent<
|
|
|
195
199
|
} & TPayload
|
|
196
200
|
|
|
197
201
|
declare type Deserializer<TMIMEType extends MIMEType> = ({
|
|
198
|
-
|
|
202
|
+
snapshot,
|
|
199
203
|
event,
|
|
200
204
|
}: {
|
|
201
|
-
|
|
205
|
+
snapshot: EditorSnapshot
|
|
202
206
|
event: PickFromUnion<ConverterEvent<TMIMEType>, 'type', 'deserialize'>
|
|
203
207
|
}) => PickFromUnion<
|
|
204
208
|
ConverterEvent<TMIMEType>,
|
|
@@ -19190,14 +19194,6 @@ declare type MarkdownBehaviorsConfig = {
|
|
|
19190
19194
|
orderedListStyle?: (context: {schema: EditorSchema}) => string | undefined
|
|
19191
19195
|
}
|
|
19192
19196
|
|
|
19193
|
-
/**
|
|
19194
|
-
* @beta
|
|
19195
|
-
*/
|
|
19196
|
-
declare type MarkdownEmphasisBehaviorsConfig = {
|
|
19197
|
-
boldDecorator?: ({schema}: {schema: EditorSchema}) => string | undefined
|
|
19198
|
-
italicDecorator?: ({schema}: {schema: EditorSchema}) => string | undefined
|
|
19199
|
-
}
|
|
19200
|
-
|
|
19201
19197
|
/**
|
|
19202
19198
|
* @beta
|
|
19203
19199
|
* Add markdown behaviors for common markdown actions such as converting ### to headings, --- to HRs, and more.
|
|
@@ -19215,8 +19211,12 @@ declare type MarkdownEmphasisBehaviorsConfig = {
|
|
|
19215
19211
|
* config={{
|
|
19216
19212
|
* boldDecorator: ({schema}) =>
|
|
19217
19213
|
* schema.decorators.find((decorator) => decorator.value === 'strong')?.value,
|
|
19214
|
+
* codeDecorator: ({schema}) =>
|
|
19215
|
+
* schema.decorators.find((decorator) => decorator.value === 'code')?.value,
|
|
19218
19216
|
* italicDecorator: ({schema}) =>
|
|
19219
19217
|
* schema.decorators.find((decorator) => decorator.value === 'em')?.value,
|
|
19218
|
+
* strikeThroughDecorator: ({schema}) =>
|
|
19219
|
+
* schema.decorators.find((decorator) => decorator.value === 'strike-through')?.value,
|
|
19220
19220
|
* horizontalRuleObject: ({schema}) => {
|
|
19221
19221
|
* const name = schema.blockObjects.find(
|
|
19222
19222
|
* (object) => object.name === 'break',
|
|
@@ -19243,13 +19243,21 @@ declare type MarkdownEmphasisBehaviorsConfig = {
|
|
|
19243
19243
|
*/
|
|
19244
19244
|
export declare function MarkdownPlugin(props: {
|
|
19245
19245
|
config: MarkdownPluginConfig
|
|
19246
|
-
}):
|
|
19246
|
+
}): JSX.Element
|
|
19247
19247
|
|
|
19248
19248
|
/**
|
|
19249
19249
|
* @beta
|
|
19250
19250
|
*/
|
|
19251
|
-
export declare type MarkdownPluginConfig = MarkdownBehaviorsConfig &
|
|
19252
|
-
|
|
19251
|
+
export declare type MarkdownPluginConfig = MarkdownBehaviorsConfig & {
|
|
19252
|
+
boldDecorator?: ({schema}: {schema: EditorSchema}) => string | undefined
|
|
19253
|
+
codeDecorator?: ({schema}: {schema: EditorSchema}) => string | undefined
|
|
19254
|
+
italicDecorator?: ({schema}: {schema: EditorSchema}) => string | undefined
|
|
19255
|
+
strikeThroughDecorator?: ({
|
|
19256
|
+
schema,
|
|
19257
|
+
}: {
|
|
19258
|
+
schema: EditorSchema
|
|
19259
|
+
}) => string | undefined
|
|
19260
|
+
}
|
|
19253
19261
|
|
|
19254
19262
|
declare type MIMEType = `${string}/${string}`
|
|
19255
19263
|
|
|
@@ -19385,10 +19393,10 @@ declare interface PortableTextSlateEditor extends ReactEditor {
|
|
|
19385
19393
|
}
|
|
19386
19394
|
|
|
19387
19395
|
declare type Serializer<TMIMEType extends MIMEType> = ({
|
|
19388
|
-
|
|
19396
|
+
snapshot,
|
|
19389
19397
|
event,
|
|
19390
19398
|
}: {
|
|
19391
|
-
|
|
19399
|
+
snapshot: EditorSnapshot
|
|
19392
19400
|
event: PickFromUnion<ConverterEvent<TMIMEType>, 'type', 'serialize'>
|
|
19393
19401
|
}) => PickFromUnion<
|
|
19394
19402
|
ConverterEvent<TMIMEType>,
|
package/lib/plugins/index.d.ts
CHANGED
|
@@ -101,11 +101,13 @@ declare type BehaviorActionIntend =
|
|
|
101
101
|
* @beta
|
|
102
102
|
*/
|
|
103
103
|
declare type BehaviorActionIntendSet<TBehaviorEvent, TGuardResponse> = (
|
|
104
|
-
{
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
104
|
+
payload: {
|
|
105
|
+
/**
|
|
106
|
+
* @deprecated
|
|
107
|
+
* Use `snapshot` instead
|
|
108
|
+
*/
|
|
108
109
|
context: EditorContext
|
|
110
|
+
snapshot: EditorSnapshot
|
|
109
111
|
event: TBehaviorEvent
|
|
110
112
|
},
|
|
111
113
|
guardResponse: TGuardResponse,
|
|
@@ -122,11 +124,13 @@ declare type BehaviorEvent =
|
|
|
122
124
|
/**
|
|
123
125
|
* @beta
|
|
124
126
|
*/
|
|
125
|
-
declare type BehaviorGuard<TBehaviorEvent, TGuardResponse> = ({
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
127
|
+
declare type BehaviorGuard<TBehaviorEvent, TGuardResponse> = (payload: {
|
|
128
|
+
/**
|
|
129
|
+
* @deprecated
|
|
130
|
+
* Use `snapshot` instead
|
|
131
|
+
*/
|
|
129
132
|
context: EditorContext
|
|
133
|
+
snapshot: EditorSnapshot
|
|
130
134
|
event: TBehaviorEvent
|
|
131
135
|
}) => TGuardResponse | false
|
|
132
136
|
|
|
@@ -195,10 +199,10 @@ declare type CustomBehaviorEvent<
|
|
|
195
199
|
} & TPayload
|
|
196
200
|
|
|
197
201
|
declare type Deserializer<TMIMEType extends MIMEType> = ({
|
|
198
|
-
|
|
202
|
+
snapshot,
|
|
199
203
|
event,
|
|
200
204
|
}: {
|
|
201
|
-
|
|
205
|
+
snapshot: EditorSnapshot
|
|
202
206
|
event: PickFromUnion<ConverterEvent<TMIMEType>, 'type', 'deserialize'>
|
|
203
207
|
}) => PickFromUnion<
|
|
204
208
|
ConverterEvent<TMIMEType>,
|
|
@@ -19190,14 +19194,6 @@ declare type MarkdownBehaviorsConfig = {
|
|
|
19190
19194
|
orderedListStyle?: (context: {schema: EditorSchema}) => string | undefined
|
|
19191
19195
|
}
|
|
19192
19196
|
|
|
19193
|
-
/**
|
|
19194
|
-
* @beta
|
|
19195
|
-
*/
|
|
19196
|
-
declare type MarkdownEmphasisBehaviorsConfig = {
|
|
19197
|
-
boldDecorator?: ({schema}: {schema: EditorSchema}) => string | undefined
|
|
19198
|
-
italicDecorator?: ({schema}: {schema: EditorSchema}) => string | undefined
|
|
19199
|
-
}
|
|
19200
|
-
|
|
19201
19197
|
/**
|
|
19202
19198
|
* @beta
|
|
19203
19199
|
* Add markdown behaviors for common markdown actions such as converting ### to headings, --- to HRs, and more.
|
|
@@ -19215,8 +19211,12 @@ declare type MarkdownEmphasisBehaviorsConfig = {
|
|
|
19215
19211
|
* config={{
|
|
19216
19212
|
* boldDecorator: ({schema}) =>
|
|
19217
19213
|
* schema.decorators.find((decorator) => decorator.value === 'strong')?.value,
|
|
19214
|
+
* codeDecorator: ({schema}) =>
|
|
19215
|
+
* schema.decorators.find((decorator) => decorator.value === 'code')?.value,
|
|
19218
19216
|
* italicDecorator: ({schema}) =>
|
|
19219
19217
|
* schema.decorators.find((decorator) => decorator.value === 'em')?.value,
|
|
19218
|
+
* strikeThroughDecorator: ({schema}) =>
|
|
19219
|
+
* schema.decorators.find((decorator) => decorator.value === 'strike-through')?.value,
|
|
19220
19220
|
* horizontalRuleObject: ({schema}) => {
|
|
19221
19221
|
* const name = schema.blockObjects.find(
|
|
19222
19222
|
* (object) => object.name === 'break',
|
|
@@ -19243,13 +19243,21 @@ declare type MarkdownEmphasisBehaviorsConfig = {
|
|
|
19243
19243
|
*/
|
|
19244
19244
|
export declare function MarkdownPlugin(props: {
|
|
19245
19245
|
config: MarkdownPluginConfig
|
|
19246
|
-
}):
|
|
19246
|
+
}): JSX.Element
|
|
19247
19247
|
|
|
19248
19248
|
/**
|
|
19249
19249
|
* @beta
|
|
19250
19250
|
*/
|
|
19251
|
-
export declare type MarkdownPluginConfig = MarkdownBehaviorsConfig &
|
|
19252
|
-
|
|
19251
|
+
export declare type MarkdownPluginConfig = MarkdownBehaviorsConfig & {
|
|
19252
|
+
boldDecorator?: ({schema}: {schema: EditorSchema}) => string | undefined
|
|
19253
|
+
codeDecorator?: ({schema}: {schema: EditorSchema}) => string | undefined
|
|
19254
|
+
italicDecorator?: ({schema}: {schema: EditorSchema}) => string | undefined
|
|
19255
|
+
strikeThroughDecorator?: ({
|
|
19256
|
+
schema,
|
|
19257
|
+
}: {
|
|
19258
|
+
schema: EditorSchema
|
|
19259
|
+
}) => string | undefined
|
|
19260
|
+
}
|
|
19253
19261
|
|
|
19254
19262
|
declare type MIMEType = `${string}/${string}`
|
|
19255
19263
|
|
|
@@ -19385,10 +19393,10 @@ declare interface PortableTextSlateEditor extends ReactEditor {
|
|
|
19385
19393
|
}
|
|
19386
19394
|
|
|
19387
19395
|
declare type Serializer<TMIMEType extends MIMEType> = ({
|
|
19388
|
-
|
|
19396
|
+
snapshot,
|
|
19389
19397
|
event,
|
|
19390
19398
|
}: {
|
|
19391
|
-
|
|
19399
|
+
snapshot: EditorSnapshot
|
|
19392
19400
|
event: PickFromUnion<ConverterEvent<TMIMEType>, 'type', 'serialize'>
|
|
19393
19401
|
}) => PickFromUnion<
|
|
19394
19402
|
ConverterEvent<TMIMEType>,
|