@portabletext/editor 1.47.11 → 1.47.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/lib/_chunks-cjs/behavior.core.cjs +61 -3
  2. package/lib/_chunks-cjs/behavior.core.cjs.map +1 -1
  3. package/lib/_chunks-cjs/editor-provider.cjs +88 -58
  4. package/lib/_chunks-cjs/editor-provider.cjs.map +1 -1
  5. package/lib/_chunks-cjs/util.get-selection-start-point.cjs +10 -0
  6. package/lib/_chunks-cjs/util.get-selection-start-point.cjs.map +1 -0
  7. package/lib/_chunks-cjs/util.selection-point-to-block-offset.cjs +0 -8
  8. package/lib/_chunks-cjs/util.selection-point-to-block-offset.cjs.map +1 -1
  9. package/lib/_chunks-es/behavior.core.js +63 -4
  10. package/lib/_chunks-es/behavior.core.js.map +1 -1
  11. package/lib/_chunks-es/editor-provider.js +90 -59
  12. package/lib/_chunks-es/editor-provider.js.map +1 -1
  13. package/lib/_chunks-es/util.get-selection-start-point.js +11 -0
  14. package/lib/_chunks-es/util.get-selection-start-point.js.map +1 -0
  15. package/lib/_chunks-es/util.selection-point-to-block-offset.js +0 -8
  16. package/lib/_chunks-es/util.selection-point-to-block-offset.js.map +1 -1
  17. package/lib/behaviors/index.d.cts +4876 -288
  18. package/lib/behaviors/index.d.ts +4876 -288
  19. package/lib/index.cjs +3 -3
  20. package/lib/index.cjs.map +1 -1
  21. package/lib/index.d.cts +29 -42
  22. package/lib/index.d.ts +29 -42
  23. package/lib/index.js +1 -1
  24. package/lib/plugins/index.cjs +0 -9
  25. package/lib/plugins/index.cjs.map +1 -1
  26. package/lib/plugins/index.d.cts +29 -42
  27. package/lib/plugins/index.d.ts +29 -42
  28. package/lib/plugins/index.js +0 -9
  29. package/lib/plugins/index.js.map +1 -1
  30. package/lib/selectors/index.d.cts +29 -41
  31. package/lib/selectors/index.d.ts +29 -41
  32. package/lib/utils/index.cjs +3 -3
  33. package/lib/utils/index.d.cts +29 -41
  34. package/lib/utils/index.d.ts +29 -41
  35. package/lib/utils/index.js +2 -1
  36. package/lib/utils/index.js.map +1 -1
  37. package/package.json +6 -6
  38. package/src/behavior-actions/behavior.action.insert.block.ts +136 -45
  39. package/src/behaviors/behavior.abstract.insert.ts +2 -2
  40. package/src/behaviors/behavior.abstract.split.ts +2 -46
  41. package/src/behaviors/behavior.core.insert-break.ts +113 -0
  42. package/src/behaviors/behavior.core.ts +2 -0
  43. package/src/behaviors/behavior.perform-event.ts +2 -7
  44. package/src/behaviors/behavior.types.action.ts +7 -13
  45. package/src/behaviors/behavior.types.event.ts +31 -33
  46. package/src/internal-utils/slate-utils.ts +50 -1
  47. package/src/plugins/plugin.one-line.tsx +0 -7
@@ -427,15 +427,6 @@ const oneLineBehaviors = [
427
427
  type: "noop"
428
428
  }]]
429
429
  }),
430
- /**
431
- * `split.block`s as well.
432
- */
433
- defineBehavior({
434
- on: "split.block",
435
- actions: [() => [{
436
- type: "noop"
437
- }]]
438
- }),
439
430
  /**
440
431
  * `insert.block` `before` or `after` is not allowed in a one-line editor.
441
432
  */
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../src/plugins/plugin.behavior.tsx","../../src/plugins/plugin.core.tsx","../../src/internal-utils/get-text-to-emphasize.ts","../../src/behaviors/behavior.decorator-pair.ts","../../src/plugins/plugin.decorator-shortcut.ts","../../src/plugins/plugin.editor-ref.tsx","../../src/plugins/plugin.event-listener.tsx","../../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 {coreBehaviors} from '../behaviors'\nimport {BehaviorPlugin} from './plugin.behavior'\n\n/**\n * @beta\n */\nexport function CoreBehaviorsPlugin() {\n return <BehaviorPlugin behaviors={coreBehaviors} />\n}\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 type {EditorSchema} from '../editor/editor-schema'\nimport {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 {effect, execute} from './behavior.types.action'\nimport {defineBehavior} from './behavior.types.behavior'\n\nexport function createDecoratorPairBehavior(config: {\n decorator: ({schema}: {schema: 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 ...snapshot,\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}) => [execute(event)],\n (_, {prefixOffsets, suffixOffsets, decorator}) => [\n // Decorate the text between the prefix and suffix\n execute({\n type: 'decorator.add',\n decorator,\n at: {\n anchor: prefixOffsets.focus,\n focus: suffixOffsets.anchor,\n },\n }),\n // Delete the suffix\n execute({\n type: 'delete.text',\n at: suffixOffsets,\n }),\n // Delete the prefix\n execute({\n type: 'delete.text',\n at: prefixOffsets,\n }),\n // Toggle the decorator off so the next inserted text isn't emphasized\n execute({\n type: 'decorator.remove',\n decorator,\n }),\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","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 {effect, execute} from '../behaviors/behavior.types.action'\nimport {defineBehavior} from '../behaviors/behavior.types.behavior'\nimport type {Editor} from '../editor/create-editor'\nimport {useEditor} from '../editor/editor-provider'\nimport type {EditorSchema} from '../editor/editor-schema'\nimport type {BlockOffset} from '../types/block-offset'\nimport * as utils from '../utils'\n\n/**\n * @beta\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.at) {\n return {blockOffsets: undefined}\n }\n\n const anchor = utils.spanSelectionPointToBlockOffset({\n value: snapshot.context.value,\n selectionPoint: event.at.anchor,\n })\n const focus = utils.spanSelectionPointToBlockOffset({\n value: snapshot.context.value,\n selectionPoint: event.at.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 execute({\n type: 'history.undo',\n }),\n effect(() => {\n sendBack({type: 'delete.backward'})\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 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","import {useEffect} from 'react'\nimport {useEffectEvent} from 'use-effect-event'\nimport type {EditorEmittedEvent} from '../editor/editor-machine'\nimport {useEditor} from '../editor/editor-provider'\n\n/**\n * @public\n * Listen for events emitted by the editor. Must be used inside `EditorProvider`. Events available include:\n * - 'blurred'\n * - 'done loading'\n * - 'editable'\n * - 'error'\n * - 'focused'\n * - 'invalid value'\n * - 'loading'\n * - 'mutation'\n * - 'patch'\n * - 'read only'\n * - 'ready'\n * - 'selection'\n * - 'value changed'\n *\n * @example\n * Listen and log events.\n * ```tsx\n * import {EditorProvider} from '@portabletext/editor'\n * import {EventListenerPlugin} from '@portabletext/editor/plugins'\n *\n * function MyComponent() {\n * return (\n * <EditorProvider>\n * <EventListenerPlugin\n * on={(event) => {\n * console.log(event)\n * }\n * } />\n * { ... }\n * </EditorProvider>\n * )\n * }\n * ```\n * @example\n * Handle events when there is a mutation.\n * ```tsx\n * <EventListenerPlugin\n * on={(event) => {\n * if (event.type === 'mutation') {\n * console.log('Value changed:', event.snapshot)\n * }\n * }}\n * />\n * ```\n * @group Components\n */\nexport function EventListenerPlugin(props: {\n on: (event: EditorEmittedEvent) => void\n}) {\n const editor = useEditor()\n const on = useEffectEvent(props.on)\n\n useEffect(() => {\n const subscription = editor.on('*', on)\n\n return () => {\n subscription.unsubscribe()\n }\n }, [editor])\n\n return null\n}\n","import {useEffect} from 'react'\nimport {\n createMarkdownBehaviors,\n type MarkdownBehaviorsConfig,\n} from '../behaviors/behavior.markdown'\nimport {useEditor} from '../editor/editor-provider'\nimport type {EditorSchema} from '../editor/editor-schema'\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 * ```\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, execute, 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}) => [execute({type: 'delete', at: 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 * `split.block`s as well.\n */\n defineBehavior({\n on: 'split.block',\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 * 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\n if (\n !focusTextBlock ||\n !utils.isTextBlock(snapshot.context, event.block)\n ) {\n return false\n }\n\n return true\n },\n actions: [\n ({event}) => [\n execute({\n type: 'insert.block',\n block: event.block,\n placement: 'auto',\n select: 'end',\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: ({snapshot, event}) => {\n return event.blocks\n .filter((block) => utils.isTextBlock(snapshot.context, block))\n .reduce((targetBlock, incomingBlock) => {\n return utils.mergeTextBlocks({\n context: snapshot.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\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","CoreBehaviorsPlugin","Symbol","for","coreBehaviors","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","execute","_","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","EditorRefPlugin","React","forwardRef","ref","portableTextEditorRef","useRef","current","useImperativeHandle","displayName","EventListenerPlugin","useEffectEvent","subscription","unsubscribe","MarkdownPlugin","createMarkdownBehaviors","unregisterBehavior","t2","boldDecorator","t3","codeDecorator","t4","italicDecorator","t5","strikeThroughDecorator","t6","oneLineBehaviors","placement","block","select","blocks","filter","reduce","targetBlock","incomingBlock","raise","OneLinePlugin"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../src/plugins/plugin.behavior.tsx","../../src/plugins/plugin.core.tsx","../../src/internal-utils/get-text-to-emphasize.ts","../../src/behaviors/behavior.decorator-pair.ts","../../src/plugins/plugin.decorator-shortcut.ts","../../src/plugins/plugin.editor-ref.tsx","../../src/plugins/plugin.event-listener.tsx","../../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 {coreBehaviors} from '../behaviors'\nimport {BehaviorPlugin} from './plugin.behavior'\n\n/**\n * @beta\n */\nexport function CoreBehaviorsPlugin() {\n return <BehaviorPlugin behaviors={coreBehaviors} />\n}\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 type {EditorSchema} from '../editor/editor-schema'\nimport {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 {effect, execute} from './behavior.types.action'\nimport {defineBehavior} from './behavior.types.behavior'\n\nexport function createDecoratorPairBehavior(config: {\n decorator: ({schema}: {schema: 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 ...snapshot,\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}) => [execute(event)],\n (_, {prefixOffsets, suffixOffsets, decorator}) => [\n // Decorate the text between the prefix and suffix\n execute({\n type: 'decorator.add',\n decorator,\n at: {\n anchor: prefixOffsets.focus,\n focus: suffixOffsets.anchor,\n },\n }),\n // Delete the suffix\n execute({\n type: 'delete.text',\n at: suffixOffsets,\n }),\n // Delete the prefix\n execute({\n type: 'delete.text',\n at: prefixOffsets,\n }),\n // Toggle the decorator off so the next inserted text isn't emphasized\n execute({\n type: 'decorator.remove',\n decorator,\n }),\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","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 {effect, execute} from '../behaviors/behavior.types.action'\nimport {defineBehavior} from '../behaviors/behavior.types.behavior'\nimport type {Editor} from '../editor/create-editor'\nimport {useEditor} from '../editor/editor-provider'\nimport type {EditorSchema} from '../editor/editor-schema'\nimport type {BlockOffset} from '../types/block-offset'\nimport * as utils from '../utils'\n\n/**\n * @beta\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.at) {\n return {blockOffsets: undefined}\n }\n\n const anchor = utils.spanSelectionPointToBlockOffset({\n value: snapshot.context.value,\n selectionPoint: event.at.anchor,\n })\n const focus = utils.spanSelectionPointToBlockOffset({\n value: snapshot.context.value,\n selectionPoint: event.at.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 execute({\n type: 'history.undo',\n }),\n effect(() => {\n sendBack({type: 'delete.backward'})\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 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","import {useEffect} from 'react'\nimport {useEffectEvent} from 'use-effect-event'\nimport type {EditorEmittedEvent} from '../editor/editor-machine'\nimport {useEditor} from '../editor/editor-provider'\n\n/**\n * @public\n * Listen for events emitted by the editor. Must be used inside `EditorProvider`. Events available include:\n * - 'blurred'\n * - 'done loading'\n * - 'editable'\n * - 'error'\n * - 'focused'\n * - 'invalid value'\n * - 'loading'\n * - 'mutation'\n * - 'patch'\n * - 'read only'\n * - 'ready'\n * - 'selection'\n * - 'value changed'\n *\n * @example\n * Listen and log events.\n * ```tsx\n * import {EditorProvider} from '@portabletext/editor'\n * import {EventListenerPlugin} from '@portabletext/editor/plugins'\n *\n * function MyComponent() {\n * return (\n * <EditorProvider>\n * <EventListenerPlugin\n * on={(event) => {\n * console.log(event)\n * }\n * } />\n * { ... }\n * </EditorProvider>\n * )\n * }\n * ```\n * @example\n * Handle events when there is a mutation.\n * ```tsx\n * <EventListenerPlugin\n * on={(event) => {\n * if (event.type === 'mutation') {\n * console.log('Value changed:', event.snapshot)\n * }\n * }}\n * />\n * ```\n * @group Components\n */\nexport function EventListenerPlugin(props: {\n on: (event: EditorEmittedEvent) => void\n}) {\n const editor = useEditor()\n const on = useEffectEvent(props.on)\n\n useEffect(() => {\n const subscription = editor.on('*', on)\n\n return () => {\n subscription.unsubscribe()\n }\n }, [editor])\n\n return null\n}\n","import {useEffect} from 'react'\nimport {\n createMarkdownBehaviors,\n type MarkdownBehaviorsConfig,\n} from '../behaviors/behavior.markdown'\nimport {useEditor} from '../editor/editor-provider'\nimport type {EditorSchema} from '../editor/editor-schema'\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 * ```\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, execute, 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}) => [execute({type: 'delete', at: 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 * 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\n if (\n !focusTextBlock ||\n !utils.isTextBlock(snapshot.context, event.block)\n ) {\n return false\n }\n\n return true\n },\n actions: [\n ({event}) => [\n execute({\n type: 'insert.block',\n block: event.block,\n placement: 'auto',\n select: 'end',\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: ({snapshot, event}) => {\n return event.blocks\n .filter((block) => utils.isTextBlock(snapshot.context, block))\n .reduce((targetBlock, incomingBlock) => {\n return utils.mergeTextBlocks({\n context: snapshot.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\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","CoreBehaviorsPlugin","Symbol","for","coreBehaviors","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","execute","_","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","EditorRefPlugin","React","forwardRef","ref","portableTextEditorRef","useRef","current","useImperativeHandle","displayName","EventListenerPlugin","useEffectEvent","subscription","unsubscribe","MarkdownPlugin","createMarkdownBehaviors","unregisterBehavior","t2","boldDecorator","t3","codeDecorator","t4","italicDecorator","t5","strikeThroughDecorator","t6","oneLineBehaviors","placement","block","select","blocks","filter","reduce","targetBlock","incomingBlock","raise","OneLinePlugin"],"mappings":"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"}
@@ -47,7 +47,7 @@ import {GuardArgs} from 'xstate/guards'
47
47
 
48
48
  declare type AbstractBehaviorEvent =
49
49
  | {
50
- type: StrictExtract<AbstractBehaviorEventType, 'annotation.toggle'>
50
+ type: StrictExtract<SyntheticBehaviorEventType, 'annotation.toggle'>
51
51
  annotation: {
52
52
  name: string
53
53
  value: {
@@ -56,7 +56,7 @@ declare type AbstractBehaviorEvent =
56
56
  }
57
57
  }
58
58
  | {
59
- type: StrictExtract<AbstractBehaviorEventType, 'decorator.toggle'>
59
+ type: StrictExtract<SyntheticBehaviorEventType, 'decorator.toggle'>
60
60
  decorator: string
61
61
  at?: {
62
62
  anchor: BlockOffset
@@ -64,14 +64,14 @@ declare type AbstractBehaviorEvent =
64
64
  }
65
65
  }
66
66
  | {
67
- type: StrictExtract<AbstractBehaviorEventType, 'delete.text'>
67
+ type: StrictExtract<SyntheticBehaviorEventType, 'delete.text'>
68
68
  at: {
69
69
  anchor: BlockOffset
70
70
  focus: BlockOffset
71
71
  }
72
72
  }
73
73
  | {
74
- type: StrictExtract<AbstractBehaviorEventType, 'deserialize'>
74
+ type: StrictExtract<SyntheticBehaviorEventType, 'deserialize'>
75
75
  originEvent:
76
76
  | PickFromUnion<
77
77
  NativeBehaviorEvent,
@@ -81,7 +81,7 @@ declare type AbstractBehaviorEvent =
81
81
  | InputBehaviorEvent
82
82
  }
83
83
  | {
84
- type: StrictExtract<AbstractBehaviorEventType, 'serialize'>
84
+ type: StrictExtract<SyntheticBehaviorEventType, 'serialize'>
85
85
  originEvent: PickFromUnion<
86
86
  NativeBehaviorEvent,
87
87
  'type',
@@ -89,7 +89,7 @@ declare type AbstractBehaviorEvent =
89
89
  >
90
90
  }
91
91
  | {
92
- type: StrictExtract<AbstractBehaviorEventType, 'deserialization.success'>
92
+ type: StrictExtract<SyntheticBehaviorEventType, 'deserialization.success'>
93
93
  mimeType: MIMEType
94
94
  data: Array<PortableTextBlock>
95
95
  originEvent:
@@ -101,7 +101,7 @@ declare type AbstractBehaviorEvent =
101
101
  | InputBehaviorEvent
102
102
  }
103
103
  | {
104
- type: StrictExtract<AbstractBehaviorEventType, 'deserialization.failure'>
104
+ type: StrictExtract<SyntheticBehaviorEventType, 'deserialization.failure'>
105
105
  mimeType: MIMEType
106
106
  reason: string
107
107
  originEvent:
@@ -113,7 +113,7 @@ declare type AbstractBehaviorEvent =
113
113
  | InputBehaviorEvent
114
114
  }
115
115
  | {
116
- type: StrictExtract<AbstractBehaviorEventType, 'serialization.success'>
116
+ type: StrictExtract<SyntheticBehaviorEventType, 'serialization.success'>
117
117
  mimeType: MIMEType
118
118
  data: string
119
119
  originEvent: PickFromUnion<
@@ -123,7 +123,7 @@ declare type AbstractBehaviorEvent =
123
123
  >
124
124
  }
125
125
  | {
126
- type: StrictExtract<AbstractBehaviorEventType, 'serialization.failure'>
126
+ type: StrictExtract<SyntheticBehaviorEventType, 'serialization.failure'>
127
127
  mimeType: MIMEType
128
128
  reason: string
129
129
  originEvent: PickFromUnion<
@@ -133,66 +133,60 @@ declare type AbstractBehaviorEvent =
133
133
  >
134
134
  }
135
135
  | {
136
- type: StrictExtract<AbstractBehaviorEventType, 'insert.blocks'>
136
+ type: StrictExtract<SyntheticBehaviorEventType, 'insert.blocks'>
137
137
  blocks: Array<PortableTextBlock>
138
138
  placement: InsertPlacement
139
139
  }
140
140
  | {
141
- type: StrictExtract<AbstractBehaviorEventType, 'insert.break'>
141
+ type: StrictExtract<SyntheticBehaviorEventType, 'insert.break'>
142
142
  }
143
143
  | {
144
- type: StrictExtract<AbstractBehaviorEventType, 'insert.soft break'>
144
+ type: StrictExtract<SyntheticBehaviorEventType, 'insert.soft break'>
145
145
  }
146
146
  | {
147
- type: StrictExtract<AbstractBehaviorEventType, 'list item.add'>
147
+ type: StrictExtract<SyntheticBehaviorEventType, 'list item.add'>
148
148
  listItem: string
149
149
  }
150
150
  | {
151
- type: StrictExtract<AbstractBehaviorEventType, 'list item.remove'>
151
+ type: StrictExtract<SyntheticBehaviorEventType, 'list item.remove'>
152
152
  listItem: string
153
153
  }
154
154
  | {
155
- type: StrictExtract<AbstractBehaviorEventType, 'list item.toggle'>
155
+ type: StrictExtract<SyntheticBehaviorEventType, 'list item.toggle'>
156
156
  listItem: string
157
157
  }
158
158
  | {
159
- type: StrictExtract<AbstractBehaviorEventType, 'move.block down'>
159
+ type: StrictExtract<SyntheticBehaviorEventType, 'move.block down'>
160
160
  at: [KeyedSegment]
161
161
  }
162
162
  | {
163
- type: StrictExtract<AbstractBehaviorEventType, 'move.block up'>
163
+ type: StrictExtract<SyntheticBehaviorEventType, 'move.block up'>
164
164
  at: [KeyedSegment]
165
165
  }
166
166
  | {
167
- type: StrictExtract<AbstractBehaviorEventType, 'select.previous block'>
167
+ type: StrictExtract<SyntheticBehaviorEventType, 'select.previous block'>
168
168
  select?: 'start' | 'end'
169
169
  }
170
170
  | {
171
- type: StrictExtract<AbstractBehaviorEventType, 'select.next block'>
171
+ type: StrictExtract<SyntheticBehaviorEventType, 'select.next block'>
172
172
  select?: 'start' | 'end'
173
173
  }
174
174
  | {
175
- type: StrictExtract<AbstractBehaviorEventType, 'split.block'>
175
+ type: StrictExtract<SyntheticBehaviorEventType, 'split'>
176
176
  }
177
177
  | {
178
- type: StrictExtract<AbstractBehaviorEventType, 'style.add'>
178
+ type: StrictExtract<SyntheticBehaviorEventType, 'style.add'>
179
179
  style: string
180
180
  }
181
181
  | {
182
- type: StrictExtract<AbstractBehaviorEventType, 'style.remove'>
182
+ type: StrictExtract<SyntheticBehaviorEventType, 'style.remove'>
183
183
  style: string
184
184
  }
185
185
  | {
186
- type: StrictExtract<AbstractBehaviorEventType, 'style.toggle'>
186
+ type: StrictExtract<SyntheticBehaviorEventType, 'style.toggle'>
187
187
  style: string
188
188
  }
189
189
 
190
- declare type AbstractBehaviorEventNamespace =
191
- ExtractNamespace<AbstractBehaviorEventType>
192
-
193
- declare type AbstractBehaviorEventType =
194
- (typeof abstractBehaviorEventTypes)[number]
195
-
196
190
  /**************************************
197
191
  * Abstract events
198
192
  **************************************/
@@ -216,7 +210,7 @@ declare const abstractBehaviorEventTypes: readonly [
216
210
  'serialize',
217
211
  'serialization.success',
218
212
  'serialization.failure',
219
- 'split.block',
213
+ 'split',
220
214
  'style.add',
221
215
  'style.remove',
222
216
  'style.toggle',
@@ -268,17 +262,11 @@ declare type Behavior<
268
262
  declare type BehaviorAction =
269
263
  | {
270
264
  type: 'execute'
271
- event:
272
- | AbstractBehaviorEvent
273
- | SyntheticBehaviorEvent
274
- | CustomBehaviorEvent
265
+ event: SyntheticBehaviorEvent
275
266
  }
276
267
  | {
277
268
  type: 'raise'
278
- event:
279
- | AbstractBehaviorEvent
280
- | SyntheticBehaviorEvent
281
- | CustomBehaviorEvent
269
+ event: SyntheticBehaviorEvent | CustomBehaviorEvent
282
270
  }
283
271
  | {
284
272
  type: 'noop'
@@ -304,13 +292,11 @@ declare type BehaviorActionSet<TBehaviorEvent, TGuardResponse> = (
304
292
  */
305
293
  declare type BehaviorEvent =
306
294
  | SyntheticBehaviorEvent
307
- | AbstractBehaviorEvent
308
295
  | NativeBehaviorEvent
309
296
  | CustomBehaviorEvent
310
297
 
311
298
  declare type BehaviorEventTypeNamespace =
312
299
  | SyntheticBehaviorEventNamespace
313
- | AbstractBehaviorEventNamespace
314
300
  | NativeBehaviorEventNamespace
315
301
  | CustomBehaviorEventNamespace
316
302
 
@@ -5934,12 +5920,14 @@ declare type SyntheticBehaviorEvent =
5934
5920
  type: StrictExtract<SyntheticBehaviorEventType, 'select'>
5935
5921
  at: EditorSelection
5936
5922
  }
5923
+ | AbstractBehaviorEvent
5937
5924
 
5938
5925
  declare type SyntheticBehaviorEventNamespace =
5939
5926
  ExtractNamespace<SyntheticBehaviorEventType>
5940
5927
 
5941
5928
  declare type SyntheticBehaviorEventType =
5942
- (typeof syntheticBehaviorEventTypes)[number]
5929
+ | (typeof syntheticBehaviorEventTypes)[number]
5930
+ | (typeof abstractBehaviorEventTypes)[number]
5943
5931
 
5944
5932
  /**************************************
5945
5933
  * Synthetic events
@@ -47,7 +47,7 @@ import {GuardArgs} from 'xstate/guards'
47
47
 
48
48
  declare type AbstractBehaviorEvent =
49
49
  | {
50
- type: StrictExtract<AbstractBehaviorEventType, 'annotation.toggle'>
50
+ type: StrictExtract<SyntheticBehaviorEventType, 'annotation.toggle'>
51
51
  annotation: {
52
52
  name: string
53
53
  value: {
@@ -56,7 +56,7 @@ declare type AbstractBehaviorEvent =
56
56
  }
57
57
  }
58
58
  | {
59
- type: StrictExtract<AbstractBehaviorEventType, 'decorator.toggle'>
59
+ type: StrictExtract<SyntheticBehaviorEventType, 'decorator.toggle'>
60
60
  decorator: string
61
61
  at?: {
62
62
  anchor: BlockOffset
@@ -64,14 +64,14 @@ declare type AbstractBehaviorEvent =
64
64
  }
65
65
  }
66
66
  | {
67
- type: StrictExtract<AbstractBehaviorEventType, 'delete.text'>
67
+ type: StrictExtract<SyntheticBehaviorEventType, 'delete.text'>
68
68
  at: {
69
69
  anchor: BlockOffset
70
70
  focus: BlockOffset
71
71
  }
72
72
  }
73
73
  | {
74
- type: StrictExtract<AbstractBehaviorEventType, 'deserialize'>
74
+ type: StrictExtract<SyntheticBehaviorEventType, 'deserialize'>
75
75
  originEvent:
76
76
  | PickFromUnion<
77
77
  NativeBehaviorEvent,
@@ -81,7 +81,7 @@ declare type AbstractBehaviorEvent =
81
81
  | InputBehaviorEvent
82
82
  }
83
83
  | {
84
- type: StrictExtract<AbstractBehaviorEventType, 'serialize'>
84
+ type: StrictExtract<SyntheticBehaviorEventType, 'serialize'>
85
85
  originEvent: PickFromUnion<
86
86
  NativeBehaviorEvent,
87
87
  'type',
@@ -89,7 +89,7 @@ declare type AbstractBehaviorEvent =
89
89
  >
90
90
  }
91
91
  | {
92
- type: StrictExtract<AbstractBehaviorEventType, 'deserialization.success'>
92
+ type: StrictExtract<SyntheticBehaviorEventType, 'deserialization.success'>
93
93
  mimeType: MIMEType
94
94
  data: Array<PortableTextBlock>
95
95
  originEvent:
@@ -101,7 +101,7 @@ declare type AbstractBehaviorEvent =
101
101
  | InputBehaviorEvent
102
102
  }
103
103
  | {
104
- type: StrictExtract<AbstractBehaviorEventType, 'deserialization.failure'>
104
+ type: StrictExtract<SyntheticBehaviorEventType, 'deserialization.failure'>
105
105
  mimeType: MIMEType
106
106
  reason: string
107
107
  originEvent:
@@ -113,7 +113,7 @@ declare type AbstractBehaviorEvent =
113
113
  | InputBehaviorEvent
114
114
  }
115
115
  | {
116
- type: StrictExtract<AbstractBehaviorEventType, 'serialization.success'>
116
+ type: StrictExtract<SyntheticBehaviorEventType, 'serialization.success'>
117
117
  mimeType: MIMEType
118
118
  data: string
119
119
  originEvent: PickFromUnion<
@@ -123,7 +123,7 @@ declare type AbstractBehaviorEvent =
123
123
  >
124
124
  }
125
125
  | {
126
- type: StrictExtract<AbstractBehaviorEventType, 'serialization.failure'>
126
+ type: StrictExtract<SyntheticBehaviorEventType, 'serialization.failure'>
127
127
  mimeType: MIMEType
128
128
  reason: string
129
129
  originEvent: PickFromUnion<
@@ -133,66 +133,60 @@ declare type AbstractBehaviorEvent =
133
133
  >
134
134
  }
135
135
  | {
136
- type: StrictExtract<AbstractBehaviorEventType, 'insert.blocks'>
136
+ type: StrictExtract<SyntheticBehaviorEventType, 'insert.blocks'>
137
137
  blocks: Array<PortableTextBlock>
138
138
  placement: InsertPlacement
139
139
  }
140
140
  | {
141
- type: StrictExtract<AbstractBehaviorEventType, 'insert.break'>
141
+ type: StrictExtract<SyntheticBehaviorEventType, 'insert.break'>
142
142
  }
143
143
  | {
144
- type: StrictExtract<AbstractBehaviorEventType, 'insert.soft break'>
144
+ type: StrictExtract<SyntheticBehaviorEventType, 'insert.soft break'>
145
145
  }
146
146
  | {
147
- type: StrictExtract<AbstractBehaviorEventType, 'list item.add'>
147
+ type: StrictExtract<SyntheticBehaviorEventType, 'list item.add'>
148
148
  listItem: string
149
149
  }
150
150
  | {
151
- type: StrictExtract<AbstractBehaviorEventType, 'list item.remove'>
151
+ type: StrictExtract<SyntheticBehaviorEventType, 'list item.remove'>
152
152
  listItem: string
153
153
  }
154
154
  | {
155
- type: StrictExtract<AbstractBehaviorEventType, 'list item.toggle'>
155
+ type: StrictExtract<SyntheticBehaviorEventType, 'list item.toggle'>
156
156
  listItem: string
157
157
  }
158
158
  | {
159
- type: StrictExtract<AbstractBehaviorEventType, 'move.block down'>
159
+ type: StrictExtract<SyntheticBehaviorEventType, 'move.block down'>
160
160
  at: [KeyedSegment]
161
161
  }
162
162
  | {
163
- type: StrictExtract<AbstractBehaviorEventType, 'move.block up'>
163
+ type: StrictExtract<SyntheticBehaviorEventType, 'move.block up'>
164
164
  at: [KeyedSegment]
165
165
  }
166
166
  | {
167
- type: StrictExtract<AbstractBehaviorEventType, 'select.previous block'>
167
+ type: StrictExtract<SyntheticBehaviorEventType, 'select.previous block'>
168
168
  select?: 'start' | 'end'
169
169
  }
170
170
  | {
171
- type: StrictExtract<AbstractBehaviorEventType, 'select.next block'>
171
+ type: StrictExtract<SyntheticBehaviorEventType, 'select.next block'>
172
172
  select?: 'start' | 'end'
173
173
  }
174
174
  | {
175
- type: StrictExtract<AbstractBehaviorEventType, 'split.block'>
175
+ type: StrictExtract<SyntheticBehaviorEventType, 'split'>
176
176
  }
177
177
  | {
178
- type: StrictExtract<AbstractBehaviorEventType, 'style.add'>
178
+ type: StrictExtract<SyntheticBehaviorEventType, 'style.add'>
179
179
  style: string
180
180
  }
181
181
  | {
182
- type: StrictExtract<AbstractBehaviorEventType, 'style.remove'>
182
+ type: StrictExtract<SyntheticBehaviorEventType, 'style.remove'>
183
183
  style: string
184
184
  }
185
185
  | {
186
- type: StrictExtract<AbstractBehaviorEventType, 'style.toggle'>
186
+ type: StrictExtract<SyntheticBehaviorEventType, 'style.toggle'>
187
187
  style: string
188
188
  }
189
189
 
190
- declare type AbstractBehaviorEventNamespace =
191
- ExtractNamespace<AbstractBehaviorEventType>
192
-
193
- declare type AbstractBehaviorEventType =
194
- (typeof abstractBehaviorEventTypes)[number]
195
-
196
190
  /**************************************
197
191
  * Abstract events
198
192
  **************************************/
@@ -216,7 +210,7 @@ declare const abstractBehaviorEventTypes: readonly [
216
210
  'serialize',
217
211
  'serialization.success',
218
212
  'serialization.failure',
219
- 'split.block',
213
+ 'split',
220
214
  'style.add',
221
215
  'style.remove',
222
216
  'style.toggle',
@@ -268,17 +262,11 @@ declare type Behavior<
268
262
  declare type BehaviorAction =
269
263
  | {
270
264
  type: 'execute'
271
- event:
272
- | AbstractBehaviorEvent
273
- | SyntheticBehaviorEvent
274
- | CustomBehaviorEvent
265
+ event: SyntheticBehaviorEvent
275
266
  }
276
267
  | {
277
268
  type: 'raise'
278
- event:
279
- | AbstractBehaviorEvent
280
- | SyntheticBehaviorEvent
281
- | CustomBehaviorEvent
269
+ event: SyntheticBehaviorEvent | CustomBehaviorEvent
282
270
  }
283
271
  | {
284
272
  type: 'noop'
@@ -304,13 +292,11 @@ declare type BehaviorActionSet<TBehaviorEvent, TGuardResponse> = (
304
292
  */
305
293
  declare type BehaviorEvent =
306
294
  | SyntheticBehaviorEvent
307
- | AbstractBehaviorEvent
308
295
  | NativeBehaviorEvent
309
296
  | CustomBehaviorEvent
310
297
 
311
298
  declare type BehaviorEventTypeNamespace =
312
299
  | SyntheticBehaviorEventNamespace
313
- | AbstractBehaviorEventNamespace
314
300
  | NativeBehaviorEventNamespace
315
301
  | CustomBehaviorEventNamespace
316
302
 
@@ -5934,12 +5920,14 @@ declare type SyntheticBehaviorEvent =
5934
5920
  type: StrictExtract<SyntheticBehaviorEventType, 'select'>
5935
5921
  at: EditorSelection
5936
5922
  }
5923
+ | AbstractBehaviorEvent
5937
5924
 
5938
5925
  declare type SyntheticBehaviorEventNamespace =
5939
5926
  ExtractNamespace<SyntheticBehaviorEventType>
5940
5927
 
5941
5928
  declare type SyntheticBehaviorEventType =
5942
- (typeof syntheticBehaviorEventTypes)[number]
5929
+ | (typeof syntheticBehaviorEventTypes)[number]
5930
+ | (typeof abstractBehaviorEventTypes)[number]
5943
5931
 
5944
5932
  /**************************************
5945
5933
  * Synthetic events