@portabletext/editor 1.30.1 → 1.30.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -712,17 +712,7 @@ const arrowDownOnLonelyBlockObject = {
712
712
  }, coreStyleBehaviors = {
713
713
  toggleStyleOff,
714
714
  toggleStyleOn
715
- }, coreBehaviors = [coreAnnotationBehaviors.toggleAnnotationOff, coreAnnotationBehaviors.toggleAnnotationOn, coreDecoratorBehaviors.toggleDecoratorOff, coreDecoratorBehaviors.toggleDecoratorOn, coreDecoratorBehaviors.strongShortcut, coreDecoratorBehaviors.emShortcut, coreDecoratorBehaviors.underlineShortcut, coreDecoratorBehaviors.codeShortcut, coreDeserializeBehaviors.deserialize, coreDeserializeBehaviors["deserialization.success"], coreBlockObjectBehaviors.arrowDownOnLonelyBlockObject, coreBlockObjectBehaviors.arrowUpOnLonelyBlockObject, coreBlockObjectBehaviors.breakingBlockObject, coreBlockObjectBehaviors.deletingEmptyTextBlockAfterBlockObject, coreBlockObjectBehaviors.deletingEmptyTextBlockBeforeBlockObject, coreListBehaviors.toggleListItemOff, coreListBehaviors.toggleListItemOn, coreListBehaviors.clearListOnBackspace, coreListBehaviors.unindentListOnBackspace, coreListBehaviors.clearListOnEnter, coreListBehaviors.indentListOnTab, coreListBehaviors.unindentListOnShiftTab, coreInsertBreakBehaviors.atTheEndOfTextBlock, coreInsertBreakBehaviors.atTheStartOfTextBlock, coreSerializeBehaviors.serialize, coreSerializeBehaviors["serialization.success"], coreStyleBehaviors.toggleStyleOff, coreStyleBehaviors.toggleStyleOn], coreBehavior = {
716
- annotation: coreAnnotationBehaviors,
717
- decorators: coreDecoratorBehaviors,
718
- deserialize: coreDeserializeBehaviors,
719
- blockObjects: coreBlockObjectBehaviors,
720
- insertBreak: coreInsertBreakBehaviors,
721
- lists: coreListBehaviors,
722
- ...coreSerializeBehaviors,
723
- style: coreSerializeBehaviors
724
- };
725
- exports.coreBehavior = coreBehavior;
715
+ }, coreBehaviors = [coreAnnotationBehaviors.toggleAnnotationOff, coreAnnotationBehaviors.toggleAnnotationOn, coreDecoratorBehaviors.toggleDecoratorOff, coreDecoratorBehaviors.toggleDecoratorOn, coreDecoratorBehaviors.strongShortcut, coreDecoratorBehaviors.emShortcut, coreDecoratorBehaviors.underlineShortcut, coreDecoratorBehaviors.codeShortcut, coreDeserializeBehaviors.deserialize, coreDeserializeBehaviors["deserialization.success"], coreBlockObjectBehaviors.arrowDownOnLonelyBlockObject, coreBlockObjectBehaviors.arrowUpOnLonelyBlockObject, coreBlockObjectBehaviors.breakingBlockObject, coreBlockObjectBehaviors.deletingEmptyTextBlockAfterBlockObject, coreBlockObjectBehaviors.deletingEmptyTextBlockBeforeBlockObject, coreListBehaviors.toggleListItemOff, coreListBehaviors.toggleListItemOn, coreListBehaviors.clearListOnBackspace, coreListBehaviors.unindentListOnBackspace, coreListBehaviors.clearListOnEnter, coreListBehaviors.indentListOnTab, coreListBehaviors.unindentListOnShiftTab, coreInsertBreakBehaviors.atTheEndOfTextBlock, coreInsertBreakBehaviors.atTheStartOfTextBlock, coreSerializeBehaviors.serialize, coreSerializeBehaviors["serialization.success"], coreStyleBehaviors.toggleStyleOff, coreStyleBehaviors.toggleStyleOn];
726
716
  exports.coreBehaviors = coreBehaviors;
727
717
  exports.defineBehavior = defineBehavior;
728
718
  exports.isCustomBehaviorEvent = isCustomBehaviorEvent;
@@ -1 +1 @@
1
- {"version":3,"file":"behavior.core.cjs","sources":["../../src/behaviors/behavior.types.ts","../../src/behaviors/behavior.core.annotations.ts","../../src/internal-utils/is-hotkey.ts","../../src/behaviors/behavior.core.block-objects.ts","../../src/behaviors/behavior.core.decorators.ts","../../src/behaviors/behavior.core.deserialize.ts","../../src/behaviors/behavior.core.insert-break.ts","../../src/behaviors/behavior.core.lists.ts","../../src/behaviors/behavior.core.serialize.ts","../../src/behaviors/behavior.core.style.ts","../../src/behaviors/behavior.core.ts"],"sourcesContent":["import type {\n KeyedSegment,\n PortableTextBlock,\n PortableTextTextBlock,\n} from '@sanity/types'\nimport type {TextUnit} from 'slate'\nimport type {TextInsertTextOptions} from 'slate/dist/interfaces/transforms/text'\nimport type {ConverterEvent} from '../converters/converter.types'\nimport type {EditorContext} from '../editor/editor-snapshot'\nimport type {MIMEType} from '../internal-utils/mime-type'\nimport type {OmitFromUnion, PickFromUnion} from '../type-utils'\nimport type {EditorSelection, PortableTextSlateEditor} from '../types/editor'\n\n/**\n * @beta\n */\nexport type SyntheticBehaviorEvent =\n | {\n type: 'annotation.add'\n annotation: {\n name: string\n value: {[prop: string]: unknown}\n }\n }\n | {\n type: 'annotation.remove'\n annotation: {\n name: string\n }\n }\n | {\n type: 'annotation.toggle'\n annotation: {\n name: string\n value: {[prop: string]: unknown}\n }\n }\n | {\n type: 'block.set'\n at: [KeyedSegment]\n [props: string]: unknown\n }\n | {\n type: 'block.unset'\n at: [KeyedSegment]\n props: Array<string>\n }\n | {\n type: 'blur'\n }\n | {\n type: 'data transfer.set'\n data: string\n dataTransfer: DataTransfer\n mimeType: MIMEType\n }\n | {\n type: 'decorator.add'\n decorator: string\n }\n | {\n type: 'decorator.remove'\n decorator: string\n }\n | {\n type: 'decorator.toggle'\n decorator: string\n }\n | {\n type: 'delete'\n selection: NonNullable<EditorSelection>\n }\n | {\n type: 'delete.backward'\n unit: TextUnit\n }\n | {\n type: 'delete.block'\n blockPath: [KeyedSegment]\n }\n | {\n type: 'delete.forward'\n unit: TextUnit\n }\n | {\n type: 'delete.text'\n anchor: BlockOffset\n focus: BlockOffset\n }\n | {\n type: 'focus'\n }\n | {\n type: 'insert.blocks'\n blocks: Array<PortableTextBlock>\n }\n | {\n type: 'insert.block object'\n placement: 'auto' | 'after' | 'before'\n blockObject: {\n name: string\n value?: {[prop: string]: unknown}\n }\n }\n | {\n type: 'insert.inline object'\n inlineObject: {\n name: string\n value?: {[prop: string]: unknown}\n }\n }\n | {\n type: 'insert.break'\n }\n | {\n type: 'insert.soft break'\n }\n | {\n type: 'insert.block'\n block: PortableTextBlock\n placement: 'auto' | 'after' | 'before'\n }\n | {\n type: 'insert.span'\n text: string\n annotations?: Array<{\n name: string\n value: {[prop: string]: unknown}\n }>\n decorators?: Array<string>\n }\n | {\n type: 'insert.text'\n text: string\n options?: TextInsertTextOptions\n }\n | {\n type: 'insert.text block'\n placement: 'auto' | 'after' | 'before'\n textBlock?: {\n children?: PortableTextTextBlock['children']\n }\n }\n | {\n type: 'list item.add'\n listItem: string\n }\n | {\n type: 'list item.remove'\n listItem: string\n }\n | {\n type: 'list item.toggle'\n listItem: string\n }\n | {\n type: 'move.block'\n at: [KeyedSegment]\n to: [KeyedSegment]\n }\n | {\n type: 'move.block down'\n at: [KeyedSegment]\n }\n | {\n type: 'move.block up'\n at: [KeyedSegment]\n }\n | {\n type: 'select'\n selection: EditorSelection\n }\n | {\n type: 'select.previous block'\n }\n | {\n type: 'select.next block'\n }\n | {\n type: 'style.add'\n style: string\n }\n | {\n type: 'style.remove'\n style: string\n }\n | {\n type: 'style.toggle'\n style: string\n }\n | {\n type: 'text block.set'\n at: [KeyedSegment]\n level?: number\n listItem?: string\n style?: string\n }\n | {\n type: 'text block.unset'\n at: [KeyedSegment]\n props: Array<'level' | 'listItem' | 'style'>\n }\n | (PickFromUnion<\n ConverterEvent,\n 'type',\n | 'deserialization.failure'\n | 'deserialization.success'\n | 'serialization.failure'\n | 'serialization.success'\n > & {dataTransfer: DataTransfer})\n\n/**\n * @beta\n */\nexport type NativeBehaviorEvent =\n | {\n type: 'copy'\n data: DataTransfer\n }\n | {\n type: 'deserialize'\n dataTransfer: DataTransfer\n }\n | {\n type: 'key.down'\n keyboardEvent: Pick<\n KeyboardEvent,\n 'key' | 'code' | 'altKey' | 'ctrlKey' | 'metaKey' | 'shiftKey'\n >\n }\n | {\n type: 'key.up'\n keyboardEvent: Pick<\n KeyboardEvent,\n 'key' | 'code' | 'altKey' | 'ctrlKey' | 'metaKey' | 'shiftKey'\n >\n }\n | {\n type: 'paste'\n data: DataTransfer\n }\n | {\n type: 'serialize'\n originEvent: 'copy' | 'cut' | 'unknown'\n dataTransfer: DataTransfer\n }\n\n/**\n * @beta\n */\nexport type CustomBehaviorEvent<\n TPayload extends Record<string, unknown> = Record<string, unknown>,\n TType extends string = string,\n TInternalType extends `custom.${TType}` = `custom.${TType}`,\n> = {\n type: TInternalType\n} & TPayload\n\nexport function isCustomBehaviorEvent(\n event: BehaviorEvent,\n): event is CustomBehaviorEvent {\n return event.type.startsWith('custom.')\n}\n\n/**\n * @beta\n */\nexport type BehaviorActionIntend =\n | SyntheticBehaviorEvent\n | {\n type: 'raise'\n event: SyntheticBehaviorEvent | CustomBehaviorEvent\n }\n | {\n type: 'noop'\n }\n | {\n type: 'effect'\n effect: () => void\n }\n\n/**\n * @beta\n */\nexport type BehaviorAction = OmitFromUnion<\n BehaviorActionIntend,\n 'type',\n 'raise'\n> & {\n editor: PortableTextSlateEditor\n}\n\n/**\n * @beta\n */\nexport function raise(\n event: SyntheticBehaviorEvent | CustomBehaviorEvent,\n): PickFromUnion<BehaviorActionIntend, 'type', 'raise'> {\n return {type: 'raise', event}\n}\n\n/**\n * @beta\n */\nexport type BehaviorEvent =\n | SyntheticBehaviorEvent\n | NativeBehaviorEvent\n | CustomBehaviorEvent\n\n/**\n * @beta\n */\nexport type Behavior<\n TBehaviorEventType extends BehaviorEvent['type'] = BehaviorEvent['type'],\n TGuardResponse = true,\n TBehaviorEvent extends BehaviorEvent = PickFromUnion<\n BehaviorEvent,\n 'type',\n TBehaviorEventType\n >,\n> = {\n /**\n * The internal editor event that triggers this behavior.\n */\n on: TBehaviorEventType\n /**\n * Predicate function that determines if the behavior should be executed.\n * Returning a non-nullable value from the guard will pass the value to the\n * actions and execute them.\n */\n guard?: BehaviorGuard<TBehaviorEvent, TGuardResponse>\n /**\n * Array of behavior action sets.\n */\n actions: Array<BehaviorActionIntendSet<TBehaviorEvent, TGuardResponse>>\n}\n\n/**\n * @beta\n */\nexport type BehaviorGuard<TBehaviorEvent, TGuardResponse> = ({\n context,\n event,\n}: {\n context: EditorContext\n event: TBehaviorEvent\n}) => TGuardResponse | false\n\n/**\n * @beta\n */\nexport type BehaviorActionIntendSet<TBehaviorEvent, TGuardResponse> = (\n {\n context,\n event,\n }: {\n context: EditorContext\n event: TBehaviorEvent\n },\n guardResponse: TGuardResponse,\n) => Array<BehaviorActionIntend>\n\n/**\n * @beta\n *\n * @example\n *\n * ```tsx\n * const noLowerCaseA = defineBehavior({\n * on: 'insert.text',\n * guard: ({event, context}) => event.text === 'a',\n * actions: [({event, context}) => [{type: 'insert.text', text: 'A'}]],\n * })\n * ```\n *\n *\n *\n *\n *\n */\nexport function defineBehavior<\n TPayload extends Record<string, unknown>,\n TBehaviorEventType extends\n BehaviorEvent['type'] = CustomBehaviorEvent['type'],\n TGuardResponse = true,\n>(\n behavior: Behavior<\n TBehaviorEventType,\n TGuardResponse,\n TBehaviorEventType extends `custom.${infer TType}`\n ? CustomBehaviorEvent<TPayload, TType>\n : PickFromUnion<BehaviorEvent, 'type', TBehaviorEventType>\n >,\n): Behavior\nexport function defineBehavior<\n TPayload extends never = never,\n TBehaviorEventType extends BehaviorEvent['type'] = BehaviorEvent['type'],\n TGuardResponse = true,\n TBehaviorEvent extends\n BehaviorEvent = TBehaviorEventType extends `custom.${infer TType}`\n ? CustomBehaviorEvent<TPayload, TType>\n : PickFromUnion<BehaviorEvent, 'type', TBehaviorEventType>,\n>(\n behavior: Behavior<TBehaviorEventType, TGuardResponse, TBehaviorEvent>,\n): Behavior {\n return behavior as unknown as Behavior\n}\n\n/**\n * @beta\n */\nexport type BlockOffset = {\n path: [KeyedSegment]\n offset: number\n}\n","import * as selectors from '../selectors'\nimport {defineBehavior, raise} from './behavior.types'\n\nconst toggleAnnotationOff = defineBehavior({\n on: 'annotation.toggle',\n guard: ({context, event}) =>\n selectors.isActiveAnnotation(event.annotation.name)({context}),\n actions: [\n ({event}) => [\n raise({type: 'annotation.remove', annotation: event.annotation}),\n ],\n ],\n})\n\nconst toggleAnnotationOn = defineBehavior({\n on: 'annotation.toggle',\n guard: ({context, event}) =>\n !selectors.isActiveAnnotation(event.annotation.name)({context}),\n actions: [\n ({event}) => [\n raise({type: 'annotation.add', annotation: event.annotation}),\n ],\n ],\n})\n\nexport const coreAnnotationBehaviors = {\n toggleAnnotationOff,\n toggleAnnotationOn,\n}\n","export interface KeyboardEventLike {\n key: string\n keyCode?: number\n altKey: boolean\n ctrlKey: boolean\n metaKey: boolean\n shiftKey: boolean\n}\n\ninterface HotKey {\n keyCode?: number | undefined\n key?: string | undefined\n altKey: boolean | null\n ctrlKey: boolean | null\n metaKey: boolean | null\n shiftKey: boolean | null\n}\n\nconst IS_MAC =\n typeof window !== 'undefined' &&\n /Mac|iPod|iPhone|iPad/.test(window.navigator.userAgent)\n\ntype Modifier = 'altKey' | 'ctrlKey' | 'metaKey' | 'shiftKey'\n\nconst modifiers: Record<string, Modifier | undefined> = {\n alt: 'altKey',\n control: 'ctrlKey',\n meta: 'metaKey',\n shift: 'shiftKey',\n}\n\nconst aliases: Record<string, string | undefined> = {\n add: '+',\n break: 'pause',\n cmd: 'meta',\n command: 'meta',\n ctl: 'control',\n ctrl: 'control',\n del: 'delete',\n down: 'arrowdown',\n esc: 'escape',\n ins: 'insert',\n left: 'arrowleft',\n mod: IS_MAC ? 'meta' : 'control',\n opt: 'alt',\n option: 'alt',\n return: 'enter',\n right: 'arrowright',\n space: ' ',\n spacebar: ' ',\n up: 'arrowup',\n win: 'meta',\n windows: 'meta',\n}\n\nconst keyCodes: Record<string, number | undefined> = {\n 'backspace': 8,\n 'tab': 9,\n 'enter': 13,\n 'shift': 16,\n 'control': 17,\n 'alt': 18,\n 'pause': 19,\n 'capslock': 20,\n 'escape': 27,\n ' ': 32,\n 'pageup': 33,\n 'pagedown': 34,\n 'end': 35,\n 'home': 36,\n 'arrowleft': 37,\n 'arrowup': 38,\n 'arrowright': 39,\n 'arrowdown': 40,\n 'insert': 45,\n 'delete': 46,\n 'meta': 91,\n 'numlock': 144,\n 'scrolllock': 145,\n ';': 186,\n '=': 187,\n ',': 188,\n '-': 189,\n '.': 190,\n '/': 191,\n '`': 192,\n '[': 219,\n '\\\\': 220,\n ']': 221,\n \"'\": 222,\n 'f1': 112,\n 'f2': 113,\n 'f3': 114,\n 'f4': 115,\n 'f5': 116,\n 'f6': 117,\n 'f7': 118,\n 'f8': 119,\n 'f9': 120,\n 'f10': 121,\n 'f11': 122,\n 'f12': 123,\n 'f13': 124,\n 'f14': 125,\n 'f15': 126,\n 'f16': 127,\n 'f17': 128,\n 'f18': 129,\n 'f19': 130,\n 'f20': 131,\n}\n\nexport function isHotkey(hotkey: string, event: KeyboardEventLike): boolean {\n return compareHotkey(parseHotkey(hotkey), event)\n}\n\nfunction parseHotkey(hotkey: string): HotKey {\n // Ensure that all the modifiers are set to false unless the hotkey has them.\n const parsedHotkey: HotKey = {\n altKey: false,\n ctrlKey: false,\n metaKey: false,\n shiftKey: false,\n }\n\n // Special case to handle the `+` key since we use it as a separator.\n const hotkeySegments = hotkey.replace('++', '+add').split('+')\n\n for (const rawHotkeySegment of hotkeySegments) {\n const optional =\n rawHotkeySegment.endsWith('?') && rawHotkeySegment.length > 1\n const hotkeySegment = optional\n ? rawHotkeySegment.slice(0, -1)\n : rawHotkeySegment\n const keyName = toKeyName(hotkeySegment)\n const modifier = modifiers[keyName]\n const alias = aliases[hotkeySegment]\n const code = keyCodes[keyName]\n\n if (\n hotkeySegment.length > 1 &&\n modifier === undefined &&\n alias === undefined &&\n code === undefined\n ) {\n throw new TypeError(`Unknown modifier: \"${hotkeySegment}\"`)\n }\n\n if (hotkeySegments.length === 1 || modifier === undefined) {\n parsedHotkey.key = keyName\n parsedHotkey.keyCode = toKeyCode(hotkeySegment)\n }\n\n if (modifier !== undefined) {\n parsedHotkey[modifier] = optional ? null : true\n }\n }\n\n return parsedHotkey\n}\n\nfunction compareHotkey(\n parsedHotkey: HotKey,\n event: KeyboardEventLike,\n): boolean {\n const matchingModifiers =\n (parsedHotkey.altKey != null\n ? parsedHotkey.altKey === event.altKey\n : true) &&\n (parsedHotkey.ctrlKey != null\n ? parsedHotkey.ctrlKey === event.ctrlKey\n : true) &&\n (parsedHotkey.metaKey != null\n ? parsedHotkey.metaKey === event.metaKey\n : true) &&\n (parsedHotkey.shiftKey != null\n ? parsedHotkey.shiftKey === event.shiftKey\n : true)\n\n if (!matchingModifiers) {\n return false\n }\n\n if (parsedHotkey.keyCode !== undefined && event.keyCode !== undefined) {\n if (parsedHotkey.keyCode === 91 && event.keyCode === 93) {\n return true\n }\n\n return parsedHotkey.keyCode === event.keyCode\n }\n\n return (\n parsedHotkey.keyCode === event.keyCode ||\n parsedHotkey.key === event.key.toLowerCase()\n )\n}\n\nfunction toKeyCode(name: string): number {\n const keyName = toKeyName(name)\n const keyCode = keyCodes[keyName] ?? keyName.toUpperCase().charCodeAt(0)\n\n return keyCode\n}\n\nfunction toKeyName(name: string): string {\n const keyName = name.toLowerCase()\n\n return aliases[keyName] ?? keyName\n}\n","import {isPortableTextTextBlock} from '@sanity/types'\nimport {isHotkey} from '../internal-utils/is-hotkey'\nimport * as selectors from '../selectors'\nimport {isEmptyTextBlock} from '../utils/util.is-empty-text-block'\nimport {defineBehavior, raise} from './behavior.types'\n\nconst arrowDownOnLonelyBlockObject = defineBehavior({\n on: 'key.down',\n guard: ({context, event}) => {\n const isArrowDown = isHotkey('ArrowDown', event.keyboardEvent)\n const focusBlockObject = selectors.getFocusBlockObject({context})\n const nextBlock = selectors.getNextBlock({context})\n\n return isArrowDown && focusBlockObject && !nextBlock\n },\n actions: [() => [raise({type: 'insert.text block', placement: 'after'})]],\n})\n\nconst arrowUpOnLonelyBlockObject = defineBehavior({\n on: 'key.down',\n guard: ({context, event}) => {\n const isArrowUp = isHotkey('ArrowUp', event.keyboardEvent)\n const focusBlockObject = selectors.getFocusBlockObject({context})\n const previousBlock = selectors.getPreviousBlock({context})\n\n return isArrowUp && focusBlockObject && !previousBlock\n },\n actions: [\n () => [\n raise({type: 'insert.text block', placement: 'before'}),\n raise({type: 'select.previous block'}),\n ],\n ],\n})\n\nconst breakingBlockObject = defineBehavior({\n on: 'insert.break',\n guard: ({context}) => {\n const focusBlockObject = selectors.getFocusBlockObject({context})\n const collapsedSelection = selectors.isSelectionCollapsed({context})\n\n return collapsedSelection && focusBlockObject !== undefined\n },\n actions: [() => [raise({type: 'insert.text block', placement: 'after'})]],\n})\n\nconst deletingEmptyTextBlockAfterBlockObject = defineBehavior({\n on: 'delete.backward',\n guard: ({context}) => {\n const focusTextBlock = selectors.getFocusTextBlock({context})\n const selectionCollapsed = selectors.isSelectionCollapsed({context})\n const previousBlock = selectors.getPreviousBlock({context})\n\n if (!focusTextBlock || !selectionCollapsed || !previousBlock) {\n return false\n }\n\n if (\n isEmptyTextBlock(focusTextBlock.node) &&\n !isPortableTextTextBlock(previousBlock.node)\n ) {\n return {focusTextBlock, previousBlock}\n }\n\n return false\n },\n actions: [\n (_, {focusTextBlock, previousBlock}) => [\n raise({\n type: 'delete.block',\n blockPath: focusTextBlock.path,\n }),\n raise({\n type: 'select',\n selection: {\n anchor: {path: previousBlock.path, offset: 0},\n focus: {path: previousBlock.path, offset: 0},\n },\n }),\n ],\n ],\n})\n\nconst deletingEmptyTextBlockBeforeBlockObject = defineBehavior({\n on: 'delete.forward',\n guard: ({context}) => {\n const focusTextBlock = selectors.getFocusTextBlock({context})\n const selectionCollapsed = selectors.isSelectionCollapsed({context})\n const nextBlock = selectors.getNextBlock({context})\n\n if (!focusTextBlock || !selectionCollapsed || !nextBlock) {\n return false\n }\n\n if (\n isEmptyTextBlock(focusTextBlock.node) &&\n !isPortableTextTextBlock(nextBlock.node)\n ) {\n return {focusTextBlock, nextBlock}\n }\n\n return false\n },\n actions: [\n (_, {focusTextBlock, nextBlock}) => [\n raise({\n type: 'delete.block',\n blockPath: focusTextBlock.path,\n }),\n raise({\n type: 'select',\n selection: {\n anchor: {path: nextBlock.path, offset: 0},\n focus: {path: nextBlock.path, offset: 0},\n },\n }),\n ],\n ],\n})\n\nexport const coreBlockObjectBehaviors = {\n arrowDownOnLonelyBlockObject,\n arrowUpOnLonelyBlockObject,\n breakingBlockObject,\n deletingEmptyTextBlockAfterBlockObject,\n deletingEmptyTextBlockBeforeBlockObject,\n}\n","import {isHotkey} from '../internal-utils/is-hotkey'\nimport * as selectors from '../selectors'\nimport {defineBehavior, raise} from './behavior.types'\n\nexport const coreDecoratorBehaviors = {\n toggleDecoratorOff: defineBehavior({\n on: 'decorator.toggle',\n guard: ({context, event}) =>\n selectors.isActiveDecorator(event.decorator)({context}),\n actions: [\n ({event}) => [\n raise({type: 'decorator.remove', decorator: event.decorator}),\n ],\n ],\n }),\n toggleDecoratorOn: defineBehavior({\n on: 'decorator.toggle',\n guard: ({context, event}) =>\n !selectors.isActiveDecorator(event.decorator)({context}),\n actions: [\n ({event}) => [raise({type: 'decorator.add', decorator: event.decorator})],\n ],\n }),\n strongShortcut: defineBehavior({\n on: 'key.down',\n guard: ({context, event}) =>\n isHotkey('mod+b', event.keyboardEvent) &&\n context.schema.decorators.some(\n (decorator) => decorator.value === 'strong',\n ),\n actions: [() => [raise({type: 'decorator.toggle', decorator: 'strong'})]],\n }),\n emShortcut: defineBehavior({\n on: 'key.down',\n guard: ({context, event}) =>\n isHotkey('mod+i', event.keyboardEvent) &&\n context.schema.decorators.some((decorator) => decorator.value === 'em'),\n actions: [() => [raise({type: 'decorator.toggle', decorator: 'em'})]],\n }),\n underlineShortcut: defineBehavior({\n on: 'key.down',\n guard: ({context, event}) =>\n isHotkey('mod+u', event.keyboardEvent) &&\n context.schema.decorators.some(\n (decorator) => decorator.value === 'underline',\n ),\n actions: [\n () => [raise({type: 'decorator.toggle', decorator: 'underline'})],\n ],\n }),\n codeShortcut: defineBehavior({\n on: 'key.down',\n guard: ({context, event}) =>\n isHotkey(\"mod+'\", event.keyboardEvent) &&\n context.schema.decorators.some((decorator) => decorator.value === 'code'),\n actions: [() => [raise({type: 'decorator.toggle', decorator: 'code'})]],\n }),\n}\n","import {defineBehavior, raise} from './behavior.types'\n\nexport const coreDeserializeBehaviors = {\n 'deserialize': defineBehavior({\n on: 'deserialize',\n guard: ({context, event}) => {\n const deserializeEvents = context.converters.flatMap((converter) => {\n const data = event.dataTransfer.getData(converter.mimeType)\n\n if (!data) {\n return []\n }\n\n return [\n converter.deserialize({context, event: {type: 'deserialize', data}}),\n ]\n })\n\n const firstSuccess = deserializeEvents.find(\n (deserializeEvent) =>\n deserializeEvent.type === 'deserialization.success',\n )\n\n if (!firstSuccess) {\n return {\n type: 'deserialization.failure',\n mimeType: '*/*',\n reason: deserializeEvents\n .map((deserializeEvent) =>\n deserializeEvent.type === 'deserialization.failure'\n ? deserializeEvent.reason\n : '',\n )\n .join(', '),\n } as const\n }\n\n return firstSuccess\n },\n actions: [\n ({event}, deserializeEvent) => [\n raise({\n ...deserializeEvent,\n dataTransfer: event.dataTransfer,\n }),\n ],\n ],\n }),\n 'deserialization.success': defineBehavior({\n on: 'deserialization.success',\n actions: [\n ({event}) => [\n raise({\n type: 'insert.blocks',\n blocks: event.data,\n }),\n ],\n ],\n }),\n}\n","import * as selectors from '../selectors'\nimport {defineBehavior, raise} from './behavior.types'\n\nconst atTheEndOfTextBlock = defineBehavior({\n on: 'insert.break',\n guard: ({context}) => {\n const focusTextBlock = selectors.getFocusTextBlock({context})\n const selectionCollapsed = selectors.isSelectionCollapsed({context})\n\n if (!context.selection || !focusTextBlock || !selectionCollapsed) {\n return false\n }\n\n const atTheEndOfBlock = selectors.isAtTheEndOfBlock(focusTextBlock)({\n context,\n })\n\n const focusListItem = focusTextBlock.node.listItem\n const focusLevel = focusTextBlock.node.level\n\n if (atTheEndOfBlock) {\n return {focusListItem, focusLevel}\n }\n\n return false\n },\n actions: [\n ({context}, {focusListItem, focusLevel}) => [\n raise({\n type: 'insert.block',\n block: {\n _type: context.schema.block.name,\n _key: context.keyGenerator(),\n children: [\n {\n _key: context.keyGenerator(),\n _type: context.schema.span.name,\n text: '',\n marks: [],\n },\n ],\n markDefs: [],\n listItem: focusListItem,\n level: focusLevel,\n style: context.schema.styles[0]?.value,\n },\n placement: 'after',\n }),\n ],\n ],\n})\n\nconst atTheStartOfTextBlock = defineBehavior({\n on: 'insert.break',\n guard: ({context}) => {\n const focusTextBlock = selectors.getFocusTextBlock({context})\n const selectionCollapsed = selectors.isSelectionCollapsed({context})\n\n if (!context.selection || !focusTextBlock || !selectionCollapsed) {\n return false\n }\n\n const focusSpan = selectors.getFocusSpan({context})\n\n const focusDecorators = focusSpan?.node.marks?.filter(\n (mark) =>\n context.schema.decorators.some(\n (decorator) => decorator.value === mark,\n ) ?? [],\n )\n const focusAnnotations =\n focusSpan?.node.marks?.filter(\n (mark) =>\n !context.schema.decorators.some(\n (decorator) => decorator.value === mark,\n ),\n ) ?? []\n const focusListItem = focusTextBlock.node.listItem\n const focusLevel = focusTextBlock.node.level\n\n const atTheStartOfBlock = selectors.isAtTheStartOfBlock(focusTextBlock)({\n context,\n })\n\n if (atTheStartOfBlock) {\n return {focusAnnotations, focusDecorators, focusListItem, focusLevel}\n }\n\n return false\n },\n actions: [\n (\n {context},\n {focusAnnotations, focusDecorators, focusListItem, focusLevel},\n ) => [\n raise({\n type: 'insert.block',\n block: {\n _key: context.keyGenerator(),\n _type: context.schema.block.name,\n children: [\n {\n _key: context.keyGenerator(),\n _type: context.schema.span.name,\n marks: focusAnnotations.length === 0 ? focusDecorators : [],\n text: '',\n },\n ],\n listItem: focusListItem,\n level: focusLevel,\n style: context.schema.styles[0]?.value,\n },\n placement: 'before',\n }),\n ],\n ],\n})\n\nexport const coreInsertBreakBehaviors = {\n atTheEndOfTextBlock,\n atTheStartOfTextBlock,\n}\n","import {createGuards} from '../behavior-actions/behavior.guards'\nimport {isHotkey} from '../internal-utils/is-hotkey'\nimport * as selectors from '../selectors'\nimport {isEmptyTextBlock} from '../utils/util.is-empty-text-block'\nimport {defineBehavior, raise} from './behavior.types'\n\nconst MAX_LIST_LEVEL = 10\n\nconst toggleListItemOff = defineBehavior({\n on: 'list item.toggle',\n guard: ({context, event}) =>\n selectors.isActiveListItem(event.listItem)({context}),\n actions: [\n ({event}) => [\n raise({\n type: 'list item.remove',\n listItem: event.listItem,\n }),\n ],\n ],\n})\n\nconst toggleListItemOn = defineBehavior({\n on: 'list item.toggle',\n guard: ({context, event}) =>\n !selectors.isActiveListItem(event.listItem)({context}),\n actions: [\n ({event}) => [\n raise({\n type: 'list item.add',\n listItem: event.listItem,\n }),\n ],\n ],\n})\n\nconst clearListOnBackspace = defineBehavior({\n on: 'delete.backward',\n guard: ({context}) => {\n const selectionCollapsed = selectors.isSelectionCollapsed({context})\n const focusTextBlock = selectors.getFocusTextBlock({context})\n const focusSpan = selectors.getFocusSpan({context})\n\n if (!selectionCollapsed || !focusTextBlock || !focusSpan) {\n return false\n }\n\n const atTheBeginningOfBLock =\n focusTextBlock.node.children[0]._key === focusSpan.node._key &&\n context.selection?.focus.offset === 0\n\n if (atTheBeginningOfBLock && focusTextBlock.node.level === 1) {\n return {focusTextBlock}\n }\n\n return false\n },\n actions: [\n (_, {focusTextBlock}) => [\n raise({\n type: 'text block.unset',\n props: ['listItem', 'level'],\n at: focusTextBlock.path,\n }),\n ],\n ],\n})\n\nconst unindentListOnBackspace = defineBehavior({\n on: 'delete.backward',\n guard: ({context}) => {\n const selectionCollapsed = selectors.isSelectionCollapsed({context})\n const focusTextBlock = selectors.getFocusTextBlock({context})\n const focusSpan = selectors.getFocusSpan({context})\n\n if (!selectionCollapsed || !focusTextBlock || !focusSpan) {\n return false\n }\n\n const atTheBeginningOfBLock =\n focusTextBlock.node.children[0]._key === focusSpan.node._key &&\n context.selection?.focus.offset === 0\n\n if (\n atTheBeginningOfBLock &&\n focusTextBlock.node.level !== undefined &&\n focusTextBlock.node.level > 1\n ) {\n return {focusTextBlock, level: focusTextBlock.node.level - 1}\n }\n\n return false\n },\n actions: [\n (_, {focusTextBlock, level}) => [\n raise({\n type: 'text block.set',\n level,\n at: focusTextBlock.path,\n }),\n ],\n ],\n})\n\nconst clearListOnEnter = defineBehavior({\n on: 'insert.break',\n guard: ({context}) => {\n const selectionCollapsed = selectors.isSelectionCollapsed({context})\n const focusListBlock = selectors.getFocusListBlock({context})\n\n if (\n !selectionCollapsed ||\n !focusListBlock ||\n !isEmptyTextBlock(focusListBlock.node)\n ) {\n return false\n }\n\n return {focusListBlock}\n },\n actions: [\n (_, {focusListBlock}) => [\n raise({\n type: 'text block.unset',\n props: ['listItem', 'level'],\n at: focusListBlock.path,\n }),\n ],\n ],\n})\n\nconst indentListOnTab = defineBehavior({\n on: 'key.down',\n guard: ({context, event}) => {\n const isTab = isHotkey('Tab', event.keyboardEvent)\n\n if (!isTab) {\n return false\n }\n\n const selectedBlocks = selectors.getSelectedBlocks({context})\n const guards = createGuards(context)\n const selectedListBlocks = selectedBlocks.flatMap((block) =>\n guards.isListBlock(block.node)\n ? [\n {\n node: block.node,\n path: block.path,\n },\n ]\n : [],\n )\n\n if (selectedListBlocks.length === selectedBlocks.length) {\n return {selectedListBlocks}\n }\n\n return false\n },\n actions: [\n (_, {selectedListBlocks}) =>\n selectedListBlocks.map((selectedListBlock) =>\n raise({\n type: 'text block.set',\n level: Math.min(\n MAX_LIST_LEVEL,\n Math.max(1, selectedListBlock.node.level + 1),\n ),\n at: selectedListBlock.path,\n }),\n ),\n ],\n})\n\nconst unindentListOnShiftTab = defineBehavior({\n on: 'key.down',\n guard: ({context, event}) => {\n const isShiftTab = isHotkey('Shift+Tab', event.keyboardEvent)\n\n if (!isShiftTab) {\n return false\n }\n\n const selectedBlocks = selectors.getSelectedBlocks({context})\n const guards = createGuards(context)\n const selectedListBlocks = selectedBlocks.flatMap((block) =>\n guards.isListBlock(block.node)\n ? [\n {\n node: block.node,\n path: block.path,\n },\n ]\n : [],\n )\n\n if (selectedListBlocks.length === selectedBlocks.length) {\n return {selectedListBlocks}\n }\n\n return false\n },\n actions: [\n (_, {selectedListBlocks}) =>\n selectedListBlocks.map((selectedListBlock) =>\n raise({\n type: 'text block.set',\n level: Math.min(\n MAX_LIST_LEVEL,\n Math.max(1, selectedListBlock.node.level - 1),\n ),\n at: selectedListBlock.path,\n }),\n ),\n ],\n})\n\nexport const coreListBehaviors = {\n toggleListItemOff,\n toggleListItemOn,\n clearListOnBackspace,\n unindentListOnBackspace,\n clearListOnEnter,\n indentListOnTab,\n unindentListOnShiftTab,\n}\n","import {defineBehavior, raise} from './behavior.types'\n\nexport const coreSerializeBehaviors = {\n 'serialize': defineBehavior({\n on: 'serialize',\n guard: ({context, event}) => {\n if (context.converters.length === 0) {\n return false\n }\n\n const serializeEvents = context.converters.map((converter) =>\n converter.serialize({context, event}),\n )\n\n if (serializeEvents.length === 0) {\n return false\n }\n\n return serializeEvents\n },\n actions: [\n ({event}, serializeEvents) =>\n serializeEvents.map((serializeEvent) =>\n raise({\n ...serializeEvent,\n dataTransfer: event.dataTransfer,\n }),\n ),\n ],\n }),\n 'serialization.success': defineBehavior({\n on: 'serialization.success',\n actions: [\n ({event}) => [\n raise({\n type: 'data transfer.set',\n data: event.data,\n dataTransfer: event.dataTransfer,\n mimeType: event.mimeType,\n }),\n ],\n ],\n }),\n}\n","import * as selectors from '../selectors'\nimport {defineBehavior, raise} from './behavior.types'\n\nconst toggleStyleOff = defineBehavior({\n on: 'style.toggle',\n guard: ({context, event}) => selectors.isActiveStyle(event.style)({context}),\n actions: [({event}) => [raise({type: 'style.remove', style: event.style})]],\n})\n\nconst toggleStyleOn = defineBehavior({\n on: 'style.toggle',\n guard: ({context, event}) => !selectors.isActiveStyle(event.style)({context}),\n actions: [({event}) => [raise({type: 'style.add', style: event.style})]],\n})\n\nexport const coreStyleBehaviors = {\n toggleStyleOff,\n toggleStyleOn,\n}\n","import {coreAnnotationBehaviors} from './behavior.core.annotations'\nimport {coreBlockObjectBehaviors} from './behavior.core.block-objects'\nimport {coreDecoratorBehaviors} from './behavior.core.decorators'\nimport {coreDeserializeBehaviors} from './behavior.core.deserialize'\nimport {coreInsertBreakBehaviors} from './behavior.core.insert-break'\nimport {coreListBehaviors} from './behavior.core.lists'\nimport {coreSerializeBehaviors} from './behavior.core.serialize'\nimport {coreStyleBehaviors} from './behavior.core.style'\n\n/**\n * @beta\n */\nexport const coreBehaviors = [\n coreAnnotationBehaviors.toggleAnnotationOff,\n coreAnnotationBehaviors.toggleAnnotationOn,\n coreDecoratorBehaviors.toggleDecoratorOff,\n coreDecoratorBehaviors.toggleDecoratorOn,\n coreDecoratorBehaviors.strongShortcut,\n coreDecoratorBehaviors.emShortcut,\n coreDecoratorBehaviors.underlineShortcut,\n coreDecoratorBehaviors.codeShortcut,\n coreDeserializeBehaviors.deserialize,\n coreDeserializeBehaviors['deserialization.success'],\n coreBlockObjectBehaviors.arrowDownOnLonelyBlockObject,\n coreBlockObjectBehaviors.arrowUpOnLonelyBlockObject,\n coreBlockObjectBehaviors.breakingBlockObject,\n coreBlockObjectBehaviors.deletingEmptyTextBlockAfterBlockObject,\n coreBlockObjectBehaviors.deletingEmptyTextBlockBeforeBlockObject,\n coreListBehaviors.toggleListItemOff,\n coreListBehaviors.toggleListItemOn,\n coreListBehaviors.clearListOnBackspace,\n coreListBehaviors.unindentListOnBackspace,\n coreListBehaviors.clearListOnEnter,\n coreListBehaviors.indentListOnTab,\n coreListBehaviors.unindentListOnShiftTab,\n coreInsertBreakBehaviors.atTheEndOfTextBlock,\n coreInsertBreakBehaviors.atTheStartOfTextBlock,\n coreSerializeBehaviors.serialize,\n coreSerializeBehaviors['serialization.success'],\n coreStyleBehaviors.toggleStyleOff,\n coreStyleBehaviors.toggleStyleOn,\n]\n\n/**\n * @beta\n */\nexport const coreBehavior = {\n annotation: coreAnnotationBehaviors,\n decorators: coreDecoratorBehaviors,\n deserialize: coreDeserializeBehaviors,\n blockObjects: coreBlockObjectBehaviors,\n insertBreak: coreInsertBreakBehaviors,\n lists: coreListBehaviors,\n ...coreSerializeBehaviors,\n style: coreSerializeBehaviors,\n}\n"],"names":["isCustomBehaviorEvent","event","type","startsWith","raise","defineBehavior","behavior","toggleAnnotationOff","on","guard","context","selectors","annotation","name","actions","toggleAnnotationOn","coreAnnotationBehaviors","IS_MAC","window","test","navigator","userAgent","modifiers","alt","control","meta","shift","aliases","add","break","cmd","command","ctl","ctrl","del","down","esc","ins","left","mod","opt","option","return","right","space","spacebar","up","win","windows","keyCodes","isHotkey","hotkey","compareHotkey","parseHotkey","parsedHotkey","altKey","ctrlKey","metaKey","shiftKey","hotkeySegments","replace","split","rawHotkeySegment","optional","endsWith","length","hotkeySegment","slice","keyName","toKeyName","modifier","alias","code","undefined","TypeError","key","keyCode","toKeyCode","toLowerCase","toUpperCase","charCodeAt","arrowDownOnLonelyBlockObject","isArrowDown","keyboardEvent","focusBlockObject","nextBlock","placement","arrowUpOnLonelyBlockObject","isArrowUp","previousBlock","breakingBlockObject","deletingEmptyTextBlockAfterBlockObject","focusTextBlock","selectionCollapsed","isEmptyTextBlock","node","isPortableTextTextBlock","_","blockPath","path","selection","anchor","offset","focus","deletingEmptyTextBlockBeforeBlockObject","coreBlockObjectBehaviors","coreDecoratorBehaviors","toggleDecoratorOff","decorator","toggleDecoratorOn","strongShortcut","schema","decorators","some","value","emShortcut","underlineShortcut","codeShortcut","coreDeserializeBehaviors","deserializeEvents","converters","flatMap","converter","data","dataTransfer","getData","mimeType","deserialize","find","deserializeEvent","reason","map","join","blocks","atTheEndOfTextBlock","atTheEndOfBlock","focusListItem","listItem","focusLevel","level","block","_type","_key","keyGenerator","children","span","text","marks","markDefs","style","styles","atTheStartOfTextBlock","focusSpan","focusDecorators","filter","mark","focusAnnotations","coreInsertBreakBehaviors","MAX_LIST_LEVEL","toggleListItemOff","toggleListItemOn","clearListOnBackspace","props","at","unindentListOnBackspace","clearListOnEnter","focusListBlock","indentListOnTab","selectedBlocks","guards","createGuards","selectedListBlocks","isListBlock","selectedListBlock","Math","min","max","unindentListOnShiftTab","coreListBehaviors","coreSerializeBehaviors","serializeEvents","serialize","serializeEvent","toggleStyleOff","toggleStyleOn","coreStyleBehaviors","coreBehaviors","coreBehavior","blockObjects","insertBreak","lists"],"mappings":"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"}
1
+ {"version":3,"file":"behavior.core.cjs","sources":["../../src/behaviors/behavior.types.ts","../../src/behaviors/behavior.core.annotations.ts","../../src/internal-utils/is-hotkey.ts","../../src/behaviors/behavior.core.block-objects.ts","../../src/behaviors/behavior.core.decorators.ts","../../src/behaviors/behavior.core.deserialize.ts","../../src/behaviors/behavior.core.insert-break.ts","../../src/behaviors/behavior.core.lists.ts","../../src/behaviors/behavior.core.serialize.ts","../../src/behaviors/behavior.core.style.ts","../../src/behaviors/behavior.core.ts"],"sourcesContent":["import type {\n KeyedSegment,\n PortableTextBlock,\n PortableTextTextBlock,\n} from '@sanity/types'\nimport type {TextUnit} from 'slate'\nimport type {TextInsertTextOptions} from 'slate/dist/interfaces/transforms/text'\nimport type {ConverterEvent} from '../converters/converter.types'\nimport type {EditorContext} from '../editor/editor-snapshot'\nimport type {MIMEType} from '../internal-utils/mime-type'\nimport type {OmitFromUnion, PickFromUnion} from '../type-utils'\nimport type {EditorSelection, PortableTextSlateEditor} from '../types/editor'\n\n/**\n * @beta\n */\nexport type SyntheticBehaviorEvent =\n | {\n type: 'annotation.add'\n annotation: {\n name: string\n value: {[prop: string]: unknown}\n }\n }\n | {\n type: 'annotation.remove'\n annotation: {\n name: string\n }\n }\n | {\n type: 'annotation.toggle'\n annotation: {\n name: string\n value: {[prop: string]: unknown}\n }\n }\n | {\n type: 'block.set'\n at: [KeyedSegment]\n [props: string]: unknown\n }\n | {\n type: 'block.unset'\n at: [KeyedSegment]\n props: Array<string>\n }\n | {\n type: 'blur'\n }\n | {\n type: 'data transfer.set'\n data: string\n dataTransfer: DataTransfer\n mimeType: MIMEType\n }\n | {\n type: 'decorator.add'\n decorator: string\n }\n | {\n type: 'decorator.remove'\n decorator: string\n }\n | {\n type: 'decorator.toggle'\n decorator: string\n }\n | {\n type: 'delete'\n selection: NonNullable<EditorSelection>\n }\n | {\n type: 'delete.backward'\n unit: TextUnit\n }\n | {\n type: 'delete.block'\n blockPath: [KeyedSegment]\n }\n | {\n type: 'delete.forward'\n unit: TextUnit\n }\n | {\n type: 'delete.text'\n anchor: BlockOffset\n focus: BlockOffset\n }\n | {\n type: 'focus'\n }\n | {\n type: 'insert.blocks'\n blocks: Array<PortableTextBlock>\n }\n | {\n type: 'insert.block object'\n placement: 'auto' | 'after' | 'before'\n blockObject: {\n name: string\n value?: {[prop: string]: unknown}\n }\n }\n | {\n type: 'insert.inline object'\n inlineObject: {\n name: string\n value?: {[prop: string]: unknown}\n }\n }\n | {\n type: 'insert.break'\n }\n | {\n type: 'insert.soft break'\n }\n | {\n type: 'insert.block'\n block: PortableTextBlock\n placement: 'auto' | 'after' | 'before'\n }\n | {\n type: 'insert.span'\n text: string\n annotations?: Array<{\n name: string\n value: {[prop: string]: unknown}\n }>\n decorators?: Array<string>\n }\n | {\n type: 'insert.text'\n text: string\n options?: TextInsertTextOptions\n }\n | {\n type: 'insert.text block'\n placement: 'auto' | 'after' | 'before'\n textBlock?: {\n children?: PortableTextTextBlock['children']\n }\n }\n | {\n type: 'list item.add'\n listItem: string\n }\n | {\n type: 'list item.remove'\n listItem: string\n }\n | {\n type: 'list item.toggle'\n listItem: string\n }\n | {\n type: 'move.block'\n at: [KeyedSegment]\n to: [KeyedSegment]\n }\n | {\n type: 'move.block down'\n at: [KeyedSegment]\n }\n | {\n type: 'move.block up'\n at: [KeyedSegment]\n }\n | {\n type: 'select'\n selection: EditorSelection\n }\n | {\n type: 'select.previous block'\n }\n | {\n type: 'select.next block'\n }\n | {\n type: 'style.add'\n style: string\n }\n | {\n type: 'style.remove'\n style: string\n }\n | {\n type: 'style.toggle'\n style: string\n }\n | {\n type: 'text block.set'\n at: [KeyedSegment]\n level?: number\n listItem?: string\n style?: string\n }\n | {\n type: 'text block.unset'\n at: [KeyedSegment]\n props: Array<'level' | 'listItem' | 'style'>\n }\n | (PickFromUnion<\n ConverterEvent,\n 'type',\n | 'deserialization.failure'\n | 'deserialization.success'\n | 'serialization.failure'\n | 'serialization.success'\n > & {dataTransfer: DataTransfer})\n\n/**\n * @beta\n */\nexport type NativeBehaviorEvent =\n | {\n type: 'copy'\n data: DataTransfer\n }\n | {\n type: 'deserialize'\n dataTransfer: DataTransfer\n }\n | {\n type: 'key.down'\n keyboardEvent: Pick<\n KeyboardEvent,\n 'key' | 'code' | 'altKey' | 'ctrlKey' | 'metaKey' | 'shiftKey'\n >\n }\n | {\n type: 'key.up'\n keyboardEvent: Pick<\n KeyboardEvent,\n 'key' | 'code' | 'altKey' | 'ctrlKey' | 'metaKey' | 'shiftKey'\n >\n }\n | {\n type: 'paste'\n data: DataTransfer\n }\n | {\n type: 'serialize'\n originEvent: 'copy' | 'cut' | 'unknown'\n dataTransfer: DataTransfer\n }\n\n/**\n * @beta\n */\nexport type CustomBehaviorEvent<\n TPayload extends Record<string, unknown> = Record<string, unknown>,\n TType extends string = string,\n TInternalType extends `custom.${TType}` = `custom.${TType}`,\n> = {\n type: TInternalType\n} & TPayload\n\nexport function isCustomBehaviorEvent(\n event: BehaviorEvent,\n): event is CustomBehaviorEvent {\n return event.type.startsWith('custom.')\n}\n\n/**\n * @beta\n */\nexport type BehaviorActionIntend =\n | SyntheticBehaviorEvent\n | {\n type: 'raise'\n event: SyntheticBehaviorEvent | CustomBehaviorEvent\n }\n | {\n type: 'noop'\n }\n | {\n type: 'effect'\n effect: () => void\n }\n\n/**\n * @beta\n */\nexport type BehaviorAction = OmitFromUnion<\n BehaviorActionIntend,\n 'type',\n 'raise'\n> & {\n editor: PortableTextSlateEditor\n}\n\n/**\n * @beta\n */\nexport function raise(\n event: SyntheticBehaviorEvent | CustomBehaviorEvent,\n): PickFromUnion<BehaviorActionIntend, 'type', 'raise'> {\n return {type: 'raise', event}\n}\n\n/**\n * @beta\n */\nexport type BehaviorEvent =\n | SyntheticBehaviorEvent\n | NativeBehaviorEvent\n | CustomBehaviorEvent\n\n/**\n * @beta\n */\nexport type Behavior<\n TBehaviorEventType extends BehaviorEvent['type'] = BehaviorEvent['type'],\n TGuardResponse = true,\n TBehaviorEvent extends BehaviorEvent = PickFromUnion<\n BehaviorEvent,\n 'type',\n TBehaviorEventType\n >,\n> = {\n /**\n * The internal editor event that triggers this behavior.\n */\n on: TBehaviorEventType\n /**\n * Predicate function that determines if the behavior should be executed.\n * Returning a non-nullable value from the guard will pass the value to the\n * actions and execute them.\n */\n guard?: BehaviorGuard<TBehaviorEvent, TGuardResponse>\n /**\n * Array of behavior action sets.\n */\n actions: Array<BehaviorActionIntendSet<TBehaviorEvent, TGuardResponse>>\n}\n\n/**\n * @beta\n */\nexport type BehaviorGuard<TBehaviorEvent, TGuardResponse> = ({\n context,\n event,\n}: {\n context: EditorContext\n event: TBehaviorEvent\n}) => TGuardResponse | false\n\n/**\n * @beta\n */\nexport type BehaviorActionIntendSet<TBehaviorEvent, TGuardResponse> = (\n {\n context,\n event,\n }: {\n context: EditorContext\n event: TBehaviorEvent\n },\n guardResponse: TGuardResponse,\n) => Array<BehaviorActionIntend>\n\n/**\n * @beta\n *\n * @example\n *\n * ```tsx\n * const noLowerCaseA = defineBehavior({\n * on: 'insert.text',\n * guard: ({event, context}) => event.text === 'a',\n * actions: [({event, context}) => [{type: 'insert.text', text: 'A'}]],\n * })\n * ```\n *\n *\n *\n *\n *\n */\nexport function defineBehavior<\n TPayload extends Record<string, unknown>,\n TBehaviorEventType extends\n BehaviorEvent['type'] = CustomBehaviorEvent['type'],\n TGuardResponse = true,\n>(\n behavior: Behavior<\n TBehaviorEventType,\n TGuardResponse,\n TBehaviorEventType extends `custom.${infer TType}`\n ? CustomBehaviorEvent<TPayload, TType>\n : PickFromUnion<BehaviorEvent, 'type', TBehaviorEventType>\n >,\n): Behavior\nexport function defineBehavior<\n TPayload extends never = never,\n TBehaviorEventType extends BehaviorEvent['type'] = BehaviorEvent['type'],\n TGuardResponse = true,\n TBehaviorEvent extends\n BehaviorEvent = TBehaviorEventType extends `custom.${infer TType}`\n ? CustomBehaviorEvent<TPayload, TType>\n : PickFromUnion<BehaviorEvent, 'type', TBehaviorEventType>,\n>(\n behavior: Behavior<TBehaviorEventType, TGuardResponse, TBehaviorEvent>,\n): Behavior {\n return behavior as unknown as Behavior\n}\n\n/**\n * @beta\n */\nexport type BlockOffset = {\n path: [KeyedSegment]\n offset: number\n}\n","import * as selectors from '../selectors'\nimport {defineBehavior, raise} from './behavior.types'\n\nconst toggleAnnotationOff = defineBehavior({\n on: 'annotation.toggle',\n guard: ({context, event}) =>\n selectors.isActiveAnnotation(event.annotation.name)({context}),\n actions: [\n ({event}) => [\n raise({type: 'annotation.remove', annotation: event.annotation}),\n ],\n ],\n})\n\nconst toggleAnnotationOn = defineBehavior({\n on: 'annotation.toggle',\n guard: ({context, event}) =>\n !selectors.isActiveAnnotation(event.annotation.name)({context}),\n actions: [\n ({event}) => [\n raise({type: 'annotation.add', annotation: event.annotation}),\n ],\n ],\n})\n\nexport const coreAnnotationBehaviors = {\n toggleAnnotationOff,\n toggleAnnotationOn,\n}\n","export interface KeyboardEventLike {\n key: string\n keyCode?: number\n altKey: boolean\n ctrlKey: boolean\n metaKey: boolean\n shiftKey: boolean\n}\n\ninterface HotKey {\n keyCode?: number | undefined\n key?: string | undefined\n altKey: boolean | null\n ctrlKey: boolean | null\n metaKey: boolean | null\n shiftKey: boolean | null\n}\n\nconst IS_MAC =\n typeof window !== 'undefined' &&\n /Mac|iPod|iPhone|iPad/.test(window.navigator.userAgent)\n\ntype Modifier = 'altKey' | 'ctrlKey' | 'metaKey' | 'shiftKey'\n\nconst modifiers: Record<string, Modifier | undefined> = {\n alt: 'altKey',\n control: 'ctrlKey',\n meta: 'metaKey',\n shift: 'shiftKey',\n}\n\nconst aliases: Record<string, string | undefined> = {\n add: '+',\n break: 'pause',\n cmd: 'meta',\n command: 'meta',\n ctl: 'control',\n ctrl: 'control',\n del: 'delete',\n down: 'arrowdown',\n esc: 'escape',\n ins: 'insert',\n left: 'arrowleft',\n mod: IS_MAC ? 'meta' : 'control',\n opt: 'alt',\n option: 'alt',\n return: 'enter',\n right: 'arrowright',\n space: ' ',\n spacebar: ' ',\n up: 'arrowup',\n win: 'meta',\n windows: 'meta',\n}\n\nconst keyCodes: Record<string, number | undefined> = {\n 'backspace': 8,\n 'tab': 9,\n 'enter': 13,\n 'shift': 16,\n 'control': 17,\n 'alt': 18,\n 'pause': 19,\n 'capslock': 20,\n 'escape': 27,\n ' ': 32,\n 'pageup': 33,\n 'pagedown': 34,\n 'end': 35,\n 'home': 36,\n 'arrowleft': 37,\n 'arrowup': 38,\n 'arrowright': 39,\n 'arrowdown': 40,\n 'insert': 45,\n 'delete': 46,\n 'meta': 91,\n 'numlock': 144,\n 'scrolllock': 145,\n ';': 186,\n '=': 187,\n ',': 188,\n '-': 189,\n '.': 190,\n '/': 191,\n '`': 192,\n '[': 219,\n '\\\\': 220,\n ']': 221,\n \"'\": 222,\n 'f1': 112,\n 'f2': 113,\n 'f3': 114,\n 'f4': 115,\n 'f5': 116,\n 'f6': 117,\n 'f7': 118,\n 'f8': 119,\n 'f9': 120,\n 'f10': 121,\n 'f11': 122,\n 'f12': 123,\n 'f13': 124,\n 'f14': 125,\n 'f15': 126,\n 'f16': 127,\n 'f17': 128,\n 'f18': 129,\n 'f19': 130,\n 'f20': 131,\n}\n\nexport function isHotkey(hotkey: string, event: KeyboardEventLike): boolean {\n return compareHotkey(parseHotkey(hotkey), event)\n}\n\nfunction parseHotkey(hotkey: string): HotKey {\n // Ensure that all the modifiers are set to false unless the hotkey has them.\n const parsedHotkey: HotKey = {\n altKey: false,\n ctrlKey: false,\n metaKey: false,\n shiftKey: false,\n }\n\n // Special case to handle the `+` key since we use it as a separator.\n const hotkeySegments = hotkey.replace('++', '+add').split('+')\n\n for (const rawHotkeySegment of hotkeySegments) {\n const optional =\n rawHotkeySegment.endsWith('?') && rawHotkeySegment.length > 1\n const hotkeySegment = optional\n ? rawHotkeySegment.slice(0, -1)\n : rawHotkeySegment\n const keyName = toKeyName(hotkeySegment)\n const modifier = modifiers[keyName]\n const alias = aliases[hotkeySegment]\n const code = keyCodes[keyName]\n\n if (\n hotkeySegment.length > 1 &&\n modifier === undefined &&\n alias === undefined &&\n code === undefined\n ) {\n throw new TypeError(`Unknown modifier: \"${hotkeySegment}\"`)\n }\n\n if (hotkeySegments.length === 1 || modifier === undefined) {\n parsedHotkey.key = keyName\n parsedHotkey.keyCode = toKeyCode(hotkeySegment)\n }\n\n if (modifier !== undefined) {\n parsedHotkey[modifier] = optional ? null : true\n }\n }\n\n return parsedHotkey\n}\n\nfunction compareHotkey(\n parsedHotkey: HotKey,\n event: KeyboardEventLike,\n): boolean {\n const matchingModifiers =\n (parsedHotkey.altKey != null\n ? parsedHotkey.altKey === event.altKey\n : true) &&\n (parsedHotkey.ctrlKey != null\n ? parsedHotkey.ctrlKey === event.ctrlKey\n : true) &&\n (parsedHotkey.metaKey != null\n ? parsedHotkey.metaKey === event.metaKey\n : true) &&\n (parsedHotkey.shiftKey != null\n ? parsedHotkey.shiftKey === event.shiftKey\n : true)\n\n if (!matchingModifiers) {\n return false\n }\n\n if (parsedHotkey.keyCode !== undefined && event.keyCode !== undefined) {\n if (parsedHotkey.keyCode === 91 && event.keyCode === 93) {\n return true\n }\n\n return parsedHotkey.keyCode === event.keyCode\n }\n\n return (\n parsedHotkey.keyCode === event.keyCode ||\n parsedHotkey.key === event.key.toLowerCase()\n )\n}\n\nfunction toKeyCode(name: string): number {\n const keyName = toKeyName(name)\n const keyCode = keyCodes[keyName] ?? keyName.toUpperCase().charCodeAt(0)\n\n return keyCode\n}\n\nfunction toKeyName(name: string): string {\n const keyName = name.toLowerCase()\n\n return aliases[keyName] ?? keyName\n}\n","import {isPortableTextTextBlock} from '@sanity/types'\nimport {isHotkey} from '../internal-utils/is-hotkey'\nimport * as selectors from '../selectors'\nimport {isEmptyTextBlock} from '../utils/util.is-empty-text-block'\nimport {defineBehavior, raise} from './behavior.types'\n\nconst arrowDownOnLonelyBlockObject = defineBehavior({\n on: 'key.down',\n guard: ({context, event}) => {\n const isArrowDown = isHotkey('ArrowDown', event.keyboardEvent)\n const focusBlockObject = selectors.getFocusBlockObject({context})\n const nextBlock = selectors.getNextBlock({context})\n\n return isArrowDown && focusBlockObject && !nextBlock\n },\n actions: [() => [raise({type: 'insert.text block', placement: 'after'})]],\n})\n\nconst arrowUpOnLonelyBlockObject = defineBehavior({\n on: 'key.down',\n guard: ({context, event}) => {\n const isArrowUp = isHotkey('ArrowUp', event.keyboardEvent)\n const focusBlockObject = selectors.getFocusBlockObject({context})\n const previousBlock = selectors.getPreviousBlock({context})\n\n return isArrowUp && focusBlockObject && !previousBlock\n },\n actions: [\n () => [\n raise({type: 'insert.text block', placement: 'before'}),\n raise({type: 'select.previous block'}),\n ],\n ],\n})\n\nconst breakingBlockObject = defineBehavior({\n on: 'insert.break',\n guard: ({context}) => {\n const focusBlockObject = selectors.getFocusBlockObject({context})\n const collapsedSelection = selectors.isSelectionCollapsed({context})\n\n return collapsedSelection && focusBlockObject !== undefined\n },\n actions: [() => [raise({type: 'insert.text block', placement: 'after'})]],\n})\n\nconst deletingEmptyTextBlockAfterBlockObject = defineBehavior({\n on: 'delete.backward',\n guard: ({context}) => {\n const focusTextBlock = selectors.getFocusTextBlock({context})\n const selectionCollapsed = selectors.isSelectionCollapsed({context})\n const previousBlock = selectors.getPreviousBlock({context})\n\n if (!focusTextBlock || !selectionCollapsed || !previousBlock) {\n return false\n }\n\n if (\n isEmptyTextBlock(focusTextBlock.node) &&\n !isPortableTextTextBlock(previousBlock.node)\n ) {\n return {focusTextBlock, previousBlock}\n }\n\n return false\n },\n actions: [\n (_, {focusTextBlock, previousBlock}) => [\n raise({\n type: 'delete.block',\n blockPath: focusTextBlock.path,\n }),\n raise({\n type: 'select',\n selection: {\n anchor: {path: previousBlock.path, offset: 0},\n focus: {path: previousBlock.path, offset: 0},\n },\n }),\n ],\n ],\n})\n\nconst deletingEmptyTextBlockBeforeBlockObject = defineBehavior({\n on: 'delete.forward',\n guard: ({context}) => {\n const focusTextBlock = selectors.getFocusTextBlock({context})\n const selectionCollapsed = selectors.isSelectionCollapsed({context})\n const nextBlock = selectors.getNextBlock({context})\n\n if (!focusTextBlock || !selectionCollapsed || !nextBlock) {\n return false\n }\n\n if (\n isEmptyTextBlock(focusTextBlock.node) &&\n !isPortableTextTextBlock(nextBlock.node)\n ) {\n return {focusTextBlock, nextBlock}\n }\n\n return false\n },\n actions: [\n (_, {focusTextBlock, nextBlock}) => [\n raise({\n type: 'delete.block',\n blockPath: focusTextBlock.path,\n }),\n raise({\n type: 'select',\n selection: {\n anchor: {path: nextBlock.path, offset: 0},\n focus: {path: nextBlock.path, offset: 0},\n },\n }),\n ],\n ],\n})\n\nexport const coreBlockObjectBehaviors = {\n arrowDownOnLonelyBlockObject,\n arrowUpOnLonelyBlockObject,\n breakingBlockObject,\n deletingEmptyTextBlockAfterBlockObject,\n deletingEmptyTextBlockBeforeBlockObject,\n}\n","import {isHotkey} from '../internal-utils/is-hotkey'\nimport * as selectors from '../selectors'\nimport {defineBehavior, raise} from './behavior.types'\n\nexport const coreDecoratorBehaviors = {\n toggleDecoratorOff: defineBehavior({\n on: 'decorator.toggle',\n guard: ({context, event}) =>\n selectors.isActiveDecorator(event.decorator)({context}),\n actions: [\n ({event}) => [\n raise({type: 'decorator.remove', decorator: event.decorator}),\n ],\n ],\n }),\n toggleDecoratorOn: defineBehavior({\n on: 'decorator.toggle',\n guard: ({context, event}) =>\n !selectors.isActiveDecorator(event.decorator)({context}),\n actions: [\n ({event}) => [raise({type: 'decorator.add', decorator: event.decorator})],\n ],\n }),\n strongShortcut: defineBehavior({\n on: 'key.down',\n guard: ({context, event}) =>\n isHotkey('mod+b', event.keyboardEvent) &&\n context.schema.decorators.some(\n (decorator) => decorator.value === 'strong',\n ),\n actions: [() => [raise({type: 'decorator.toggle', decorator: 'strong'})]],\n }),\n emShortcut: defineBehavior({\n on: 'key.down',\n guard: ({context, event}) =>\n isHotkey('mod+i', event.keyboardEvent) &&\n context.schema.decorators.some((decorator) => decorator.value === 'em'),\n actions: [() => [raise({type: 'decorator.toggle', decorator: 'em'})]],\n }),\n underlineShortcut: defineBehavior({\n on: 'key.down',\n guard: ({context, event}) =>\n isHotkey('mod+u', event.keyboardEvent) &&\n context.schema.decorators.some(\n (decorator) => decorator.value === 'underline',\n ),\n actions: [\n () => [raise({type: 'decorator.toggle', decorator: 'underline'})],\n ],\n }),\n codeShortcut: defineBehavior({\n on: 'key.down',\n guard: ({context, event}) =>\n isHotkey(\"mod+'\", event.keyboardEvent) &&\n context.schema.decorators.some((decorator) => decorator.value === 'code'),\n actions: [() => [raise({type: 'decorator.toggle', decorator: 'code'})]],\n }),\n}\n","import {defineBehavior, raise} from './behavior.types'\n\nexport const coreDeserializeBehaviors = {\n 'deserialize': defineBehavior({\n on: 'deserialize',\n guard: ({context, event}) => {\n const deserializeEvents = context.converters.flatMap((converter) => {\n const data = event.dataTransfer.getData(converter.mimeType)\n\n if (!data) {\n return []\n }\n\n return [\n converter.deserialize({context, event: {type: 'deserialize', data}}),\n ]\n })\n\n const firstSuccess = deserializeEvents.find(\n (deserializeEvent) =>\n deserializeEvent.type === 'deserialization.success',\n )\n\n if (!firstSuccess) {\n return {\n type: 'deserialization.failure',\n mimeType: '*/*',\n reason: deserializeEvents\n .map((deserializeEvent) =>\n deserializeEvent.type === 'deserialization.failure'\n ? deserializeEvent.reason\n : '',\n )\n .join(', '),\n } as const\n }\n\n return firstSuccess\n },\n actions: [\n ({event}, deserializeEvent) => [\n raise({\n ...deserializeEvent,\n dataTransfer: event.dataTransfer,\n }),\n ],\n ],\n }),\n 'deserialization.success': defineBehavior({\n on: 'deserialization.success',\n actions: [\n ({event}) => [\n raise({\n type: 'insert.blocks',\n blocks: event.data,\n }),\n ],\n ],\n }),\n}\n","import * as selectors from '../selectors'\nimport {defineBehavior, raise} from './behavior.types'\n\nconst atTheEndOfTextBlock = defineBehavior({\n on: 'insert.break',\n guard: ({context}) => {\n const focusTextBlock = selectors.getFocusTextBlock({context})\n const selectionCollapsed = selectors.isSelectionCollapsed({context})\n\n if (!context.selection || !focusTextBlock || !selectionCollapsed) {\n return false\n }\n\n const atTheEndOfBlock = selectors.isAtTheEndOfBlock(focusTextBlock)({\n context,\n })\n\n const focusListItem = focusTextBlock.node.listItem\n const focusLevel = focusTextBlock.node.level\n\n if (atTheEndOfBlock) {\n return {focusListItem, focusLevel}\n }\n\n return false\n },\n actions: [\n ({context}, {focusListItem, focusLevel}) => [\n raise({\n type: 'insert.block',\n block: {\n _type: context.schema.block.name,\n _key: context.keyGenerator(),\n children: [\n {\n _key: context.keyGenerator(),\n _type: context.schema.span.name,\n text: '',\n marks: [],\n },\n ],\n markDefs: [],\n listItem: focusListItem,\n level: focusLevel,\n style: context.schema.styles[0]?.value,\n },\n placement: 'after',\n }),\n ],\n ],\n})\n\nconst atTheStartOfTextBlock = defineBehavior({\n on: 'insert.break',\n guard: ({context}) => {\n const focusTextBlock = selectors.getFocusTextBlock({context})\n const selectionCollapsed = selectors.isSelectionCollapsed({context})\n\n if (!context.selection || !focusTextBlock || !selectionCollapsed) {\n return false\n }\n\n const focusSpan = selectors.getFocusSpan({context})\n\n const focusDecorators = focusSpan?.node.marks?.filter(\n (mark) =>\n context.schema.decorators.some(\n (decorator) => decorator.value === mark,\n ) ?? [],\n )\n const focusAnnotations =\n focusSpan?.node.marks?.filter(\n (mark) =>\n !context.schema.decorators.some(\n (decorator) => decorator.value === mark,\n ),\n ) ?? []\n const focusListItem = focusTextBlock.node.listItem\n const focusLevel = focusTextBlock.node.level\n\n const atTheStartOfBlock = selectors.isAtTheStartOfBlock(focusTextBlock)({\n context,\n })\n\n if (atTheStartOfBlock) {\n return {focusAnnotations, focusDecorators, focusListItem, focusLevel}\n }\n\n return false\n },\n actions: [\n (\n {context},\n {focusAnnotations, focusDecorators, focusListItem, focusLevel},\n ) => [\n raise({\n type: 'insert.block',\n block: {\n _key: context.keyGenerator(),\n _type: context.schema.block.name,\n children: [\n {\n _key: context.keyGenerator(),\n _type: context.schema.span.name,\n marks: focusAnnotations.length === 0 ? focusDecorators : [],\n text: '',\n },\n ],\n listItem: focusListItem,\n level: focusLevel,\n style: context.schema.styles[0]?.value,\n },\n placement: 'before',\n }),\n ],\n ],\n})\n\nexport const coreInsertBreakBehaviors = {\n atTheEndOfTextBlock,\n atTheStartOfTextBlock,\n}\n","import {createGuards} from '../behavior-actions/behavior.guards'\nimport {isHotkey} from '../internal-utils/is-hotkey'\nimport * as selectors from '../selectors'\nimport {isEmptyTextBlock} from '../utils/util.is-empty-text-block'\nimport {defineBehavior, raise} from './behavior.types'\n\nconst MAX_LIST_LEVEL = 10\n\nconst toggleListItemOff = defineBehavior({\n on: 'list item.toggle',\n guard: ({context, event}) =>\n selectors.isActiveListItem(event.listItem)({context}),\n actions: [\n ({event}) => [\n raise({\n type: 'list item.remove',\n listItem: event.listItem,\n }),\n ],\n ],\n})\n\nconst toggleListItemOn = defineBehavior({\n on: 'list item.toggle',\n guard: ({context, event}) =>\n !selectors.isActiveListItem(event.listItem)({context}),\n actions: [\n ({event}) => [\n raise({\n type: 'list item.add',\n listItem: event.listItem,\n }),\n ],\n ],\n})\n\nconst clearListOnBackspace = defineBehavior({\n on: 'delete.backward',\n guard: ({context}) => {\n const selectionCollapsed = selectors.isSelectionCollapsed({context})\n const focusTextBlock = selectors.getFocusTextBlock({context})\n const focusSpan = selectors.getFocusSpan({context})\n\n if (!selectionCollapsed || !focusTextBlock || !focusSpan) {\n return false\n }\n\n const atTheBeginningOfBLock =\n focusTextBlock.node.children[0]._key === focusSpan.node._key &&\n context.selection?.focus.offset === 0\n\n if (atTheBeginningOfBLock && focusTextBlock.node.level === 1) {\n return {focusTextBlock}\n }\n\n return false\n },\n actions: [\n (_, {focusTextBlock}) => [\n raise({\n type: 'text block.unset',\n props: ['listItem', 'level'],\n at: focusTextBlock.path,\n }),\n ],\n ],\n})\n\nconst unindentListOnBackspace = defineBehavior({\n on: 'delete.backward',\n guard: ({context}) => {\n const selectionCollapsed = selectors.isSelectionCollapsed({context})\n const focusTextBlock = selectors.getFocusTextBlock({context})\n const focusSpan = selectors.getFocusSpan({context})\n\n if (!selectionCollapsed || !focusTextBlock || !focusSpan) {\n return false\n }\n\n const atTheBeginningOfBLock =\n focusTextBlock.node.children[0]._key === focusSpan.node._key &&\n context.selection?.focus.offset === 0\n\n if (\n atTheBeginningOfBLock &&\n focusTextBlock.node.level !== undefined &&\n focusTextBlock.node.level > 1\n ) {\n return {focusTextBlock, level: focusTextBlock.node.level - 1}\n }\n\n return false\n },\n actions: [\n (_, {focusTextBlock, level}) => [\n raise({\n type: 'text block.set',\n level,\n at: focusTextBlock.path,\n }),\n ],\n ],\n})\n\nconst clearListOnEnter = defineBehavior({\n on: 'insert.break',\n guard: ({context}) => {\n const selectionCollapsed = selectors.isSelectionCollapsed({context})\n const focusListBlock = selectors.getFocusListBlock({context})\n\n if (\n !selectionCollapsed ||\n !focusListBlock ||\n !isEmptyTextBlock(focusListBlock.node)\n ) {\n return false\n }\n\n return {focusListBlock}\n },\n actions: [\n (_, {focusListBlock}) => [\n raise({\n type: 'text block.unset',\n props: ['listItem', 'level'],\n at: focusListBlock.path,\n }),\n ],\n ],\n})\n\nconst indentListOnTab = defineBehavior({\n on: 'key.down',\n guard: ({context, event}) => {\n const isTab = isHotkey('Tab', event.keyboardEvent)\n\n if (!isTab) {\n return false\n }\n\n const selectedBlocks = selectors.getSelectedBlocks({context})\n const guards = createGuards(context)\n const selectedListBlocks = selectedBlocks.flatMap((block) =>\n guards.isListBlock(block.node)\n ? [\n {\n node: block.node,\n path: block.path,\n },\n ]\n : [],\n )\n\n if (selectedListBlocks.length === selectedBlocks.length) {\n return {selectedListBlocks}\n }\n\n return false\n },\n actions: [\n (_, {selectedListBlocks}) =>\n selectedListBlocks.map((selectedListBlock) =>\n raise({\n type: 'text block.set',\n level: Math.min(\n MAX_LIST_LEVEL,\n Math.max(1, selectedListBlock.node.level + 1),\n ),\n at: selectedListBlock.path,\n }),\n ),\n ],\n})\n\nconst unindentListOnShiftTab = defineBehavior({\n on: 'key.down',\n guard: ({context, event}) => {\n const isShiftTab = isHotkey('Shift+Tab', event.keyboardEvent)\n\n if (!isShiftTab) {\n return false\n }\n\n const selectedBlocks = selectors.getSelectedBlocks({context})\n const guards = createGuards(context)\n const selectedListBlocks = selectedBlocks.flatMap((block) =>\n guards.isListBlock(block.node)\n ? [\n {\n node: block.node,\n path: block.path,\n },\n ]\n : [],\n )\n\n if (selectedListBlocks.length === selectedBlocks.length) {\n return {selectedListBlocks}\n }\n\n return false\n },\n actions: [\n (_, {selectedListBlocks}) =>\n selectedListBlocks.map((selectedListBlock) =>\n raise({\n type: 'text block.set',\n level: Math.min(\n MAX_LIST_LEVEL,\n Math.max(1, selectedListBlock.node.level - 1),\n ),\n at: selectedListBlock.path,\n }),\n ),\n ],\n})\n\nexport const coreListBehaviors = {\n toggleListItemOff,\n toggleListItemOn,\n clearListOnBackspace,\n unindentListOnBackspace,\n clearListOnEnter,\n indentListOnTab,\n unindentListOnShiftTab,\n}\n","import {defineBehavior, raise} from './behavior.types'\n\nexport const coreSerializeBehaviors = {\n 'serialize': defineBehavior({\n on: 'serialize',\n guard: ({context, event}) => {\n if (context.converters.length === 0) {\n return false\n }\n\n const serializeEvents = context.converters.map((converter) =>\n converter.serialize({context, event}),\n )\n\n if (serializeEvents.length === 0) {\n return false\n }\n\n return serializeEvents\n },\n actions: [\n ({event}, serializeEvents) =>\n serializeEvents.map((serializeEvent) =>\n raise({\n ...serializeEvent,\n dataTransfer: event.dataTransfer,\n }),\n ),\n ],\n }),\n 'serialization.success': defineBehavior({\n on: 'serialization.success',\n actions: [\n ({event}) => [\n raise({\n type: 'data transfer.set',\n data: event.data,\n dataTransfer: event.dataTransfer,\n mimeType: event.mimeType,\n }),\n ],\n ],\n }),\n}\n","import * as selectors from '../selectors'\nimport {defineBehavior, raise} from './behavior.types'\n\nconst toggleStyleOff = defineBehavior({\n on: 'style.toggle',\n guard: ({context, event}) => selectors.isActiveStyle(event.style)({context}),\n actions: [({event}) => [raise({type: 'style.remove', style: event.style})]],\n})\n\nconst toggleStyleOn = defineBehavior({\n on: 'style.toggle',\n guard: ({context, event}) => !selectors.isActiveStyle(event.style)({context}),\n actions: [({event}) => [raise({type: 'style.add', style: event.style})]],\n})\n\nexport const coreStyleBehaviors = {\n toggleStyleOff,\n toggleStyleOn,\n}\n","import {coreAnnotationBehaviors} from './behavior.core.annotations'\nimport {coreBlockObjectBehaviors} from './behavior.core.block-objects'\nimport {coreDecoratorBehaviors} from './behavior.core.decorators'\nimport {coreDeserializeBehaviors} from './behavior.core.deserialize'\nimport {coreInsertBreakBehaviors} from './behavior.core.insert-break'\nimport {coreListBehaviors} from './behavior.core.lists'\nimport {coreSerializeBehaviors} from './behavior.core.serialize'\nimport {coreStyleBehaviors} from './behavior.core.style'\n\n/**\n * @beta\n */\nexport const coreBehaviors = [\n coreAnnotationBehaviors.toggleAnnotationOff,\n coreAnnotationBehaviors.toggleAnnotationOn,\n coreDecoratorBehaviors.toggleDecoratorOff,\n coreDecoratorBehaviors.toggleDecoratorOn,\n coreDecoratorBehaviors.strongShortcut,\n coreDecoratorBehaviors.emShortcut,\n coreDecoratorBehaviors.underlineShortcut,\n coreDecoratorBehaviors.codeShortcut,\n coreDeserializeBehaviors.deserialize,\n coreDeserializeBehaviors['deserialization.success'],\n coreBlockObjectBehaviors.arrowDownOnLonelyBlockObject,\n coreBlockObjectBehaviors.arrowUpOnLonelyBlockObject,\n coreBlockObjectBehaviors.breakingBlockObject,\n coreBlockObjectBehaviors.deletingEmptyTextBlockAfterBlockObject,\n coreBlockObjectBehaviors.deletingEmptyTextBlockBeforeBlockObject,\n coreListBehaviors.toggleListItemOff,\n coreListBehaviors.toggleListItemOn,\n coreListBehaviors.clearListOnBackspace,\n coreListBehaviors.unindentListOnBackspace,\n coreListBehaviors.clearListOnEnter,\n coreListBehaviors.indentListOnTab,\n coreListBehaviors.unindentListOnShiftTab,\n coreInsertBreakBehaviors.atTheEndOfTextBlock,\n coreInsertBreakBehaviors.atTheStartOfTextBlock,\n coreSerializeBehaviors.serialize,\n coreSerializeBehaviors['serialization.success'],\n coreStyleBehaviors.toggleStyleOff,\n coreStyleBehaviors.toggleStyleOn,\n]\n"],"names":["isCustomBehaviorEvent","event","type","startsWith","raise","defineBehavior","behavior","toggleAnnotationOff","on","guard","context","selectors","annotation","name","actions","toggleAnnotationOn","coreAnnotationBehaviors","IS_MAC","window","test","navigator","userAgent","modifiers","alt","control","meta","shift","aliases","add","break","cmd","command","ctl","ctrl","del","down","esc","ins","left","mod","opt","option","return","right","space","spacebar","up","win","windows","keyCodes","isHotkey","hotkey","compareHotkey","parseHotkey","parsedHotkey","altKey","ctrlKey","metaKey","shiftKey","hotkeySegments","replace","split","rawHotkeySegment","optional","endsWith","length","hotkeySegment","slice","keyName","toKeyName","modifier","alias","code","undefined","TypeError","key","keyCode","toKeyCode","toLowerCase","toUpperCase","charCodeAt","arrowDownOnLonelyBlockObject","isArrowDown","keyboardEvent","focusBlockObject","nextBlock","placement","arrowUpOnLonelyBlockObject","isArrowUp","previousBlock","breakingBlockObject","deletingEmptyTextBlockAfterBlockObject","focusTextBlock","selectionCollapsed","isEmptyTextBlock","node","isPortableTextTextBlock","_","blockPath","path","selection","anchor","offset","focus","deletingEmptyTextBlockBeforeBlockObject","coreBlockObjectBehaviors","coreDecoratorBehaviors","toggleDecoratorOff","decorator","toggleDecoratorOn","strongShortcut","schema","decorators","some","value","emShortcut","underlineShortcut","codeShortcut","coreDeserializeBehaviors","deserializeEvents","converters","flatMap","converter","data","dataTransfer","getData","mimeType","deserialize","find","deserializeEvent","reason","map","join","blocks","atTheEndOfTextBlock","atTheEndOfBlock","focusListItem","listItem","focusLevel","level","block","_type","_key","keyGenerator","children","span","text","marks","markDefs","style","styles","atTheStartOfTextBlock","focusSpan","focusDecorators","filter","mark","focusAnnotations","coreInsertBreakBehaviors","MAX_LIST_LEVEL","toggleListItemOff","toggleListItemOn","clearListOnBackspace","props","at","unindentListOnBackspace","clearListOnEnter","focusListBlock","indentListOnTab","selectedBlocks","guards","createGuards","selectedListBlocks","isListBlock","selectedListBlock","Math","min","max","unindentListOnShiftTab","coreListBehaviors","coreSerializeBehaviors","serializeEvents","serialize","serializeEvent","toggleStyleOff","toggleStyleOn","coreStyleBehaviors","coreBehaviors"],"mappings":"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"}
@@ -2585,7 +2585,74 @@ function createOperationToPatches(types2) {
2585
2585
  splitNodePatch
2586
2586
  };
2587
2587
  }
2588
- const IS_APPLYING_BEHAVIOR_ACTIONS = /* @__PURE__ */ new WeakMap();
2588
+ const insertBreakActionImplementation = ({
2589
+ context,
2590
+ action
2591
+ }) => {
2592
+ const keyGenerator = context.keyGenerator, schema2 = context.schema, editor = action.editor;
2593
+ if (!editor.selection)
2594
+ return;
2595
+ const anchorBlockPath = editor.selection.anchor.path.slice(0, 1), focusBlockPath = editor.selection.focus.path.slice(0, 1), focusBlock = slate.Node.descendant(editor, focusBlockPath);
2596
+ if (editor.isTextBlock(focusBlock) && anchorBlockPath[0] === focusBlockPath[0]) {
2597
+ slate.Transforms.splitNodes(editor, {
2598
+ at: editor.selection
2599
+ });
2600
+ const [nextBlock, nextBlockPath] = slate.Editor.node(editor, slate.Path.next(focusBlockPath), {
2601
+ depth: 1
2602
+ }), nextChild = slate.Node.child(nextBlock, 0);
2603
+ if (!editor.isTextSpan(nextChild) && slate.Transforms.insertNodes(editor, {
2604
+ _key: context.keyGenerator(),
2605
+ _type: "span",
2606
+ text: "",
2607
+ marks: []
2608
+ }, {
2609
+ at: [nextBlockPath[0], 0]
2610
+ }), slate.Transforms.setSelection(editor, {
2611
+ anchor: {
2612
+ path: [...nextBlockPath, 0],
2613
+ offset: 0
2614
+ },
2615
+ focus: {
2616
+ path: [...nextBlockPath, 0],
2617
+ offset: 0
2618
+ }
2619
+ }), editor.isTextBlock(nextBlock) && nextBlock.markDefs && nextBlock.markDefs.length > 0) {
2620
+ const newMarkDefKeys = /* @__PURE__ */ new Map(), prevNodeSpans = Array.from(slate.Node.children(editor, focusBlockPath)).map((entry) => entry[0]).filter((node) => editor.isTextSpan(node)), children = slate.Node.children(editor, nextBlockPath);
2621
+ for (const [child, childPath] of children) {
2622
+ if (!editor.isTextSpan(child))
2623
+ continue;
2624
+ const marks = child.marks ?? [];
2625
+ for (const mark of marks)
2626
+ schema2.decorators.some((decorator) => decorator.value === mark) || prevNodeSpans.some((prevNodeSpan) => prevNodeSpan.marks?.includes(mark)) && !newMarkDefKeys.has(mark) && newMarkDefKeys.set(mark, keyGenerator());
2627
+ const newMarks = marks.map((mark) => newMarkDefKeys.get(mark) ?? mark);
2628
+ isEqual__default.default(marks, newMarks) || slate.Transforms.setNodes(editor, {
2629
+ marks: newMarks
2630
+ }, {
2631
+ at: childPath
2632
+ });
2633
+ }
2634
+ const newMarkDefs = nextBlock.markDefs.map((markDef) => ({
2635
+ ...markDef,
2636
+ _key: newMarkDefKeys.get(markDef._key) ?? markDef._key
2637
+ }));
2638
+ isEqual__default.default(nextBlock.markDefs, newMarkDefs) || slate.Transforms.setNodes(editor, {
2639
+ markDefs: newMarkDefs
2640
+ }, {
2641
+ at: nextBlockPath,
2642
+ match: (node) => editor.isTextBlock(node)
2643
+ });
2644
+ }
2645
+ return;
2646
+ }
2647
+ slate.Transforms.splitNodes(editor, {
2648
+ always: !0
2649
+ });
2650
+ }, insertSoftBreakActionImplementation = ({
2651
+ action
2652
+ }) => {
2653
+ slate.insertText(action.editor, `
2654
+ `);
2655
+ }, IS_APPLYING_BEHAVIOR_ACTIONS = /* @__PURE__ */ new WeakMap();
2589
2656
  function withApplyingBehaviorActions(editor, fn) {
2590
2657
  const prev = isApplyingBehaviorActions(editor);
2591
2658
  IS_APPLYING_BEHAVIOR_ACTIONS.set(editor, !0), fn(), IS_APPLYING_BEHAVIOR_ACTIONS.set(editor, prev);
@@ -2642,7 +2709,6 @@ function createWithEventListeners(editorActor, subscriptions) {
2642
2709
  deleteForward,
2643
2710
  insertBreak,
2644
2711
  insertData,
2645
- insertSoftBreak,
2646
2712
  insertText,
2647
2713
  select,
2648
2714
  setFragmentData
@@ -2700,7 +2766,16 @@ function createWithEventListeners(editorActor, subscriptions) {
2700
2766
  });
2701
2767
  }, editor.insertSoftBreak = () => {
2702
2768
  if (isApplyingBehaviorActions(editor)) {
2703
- insertSoftBreak();
2769
+ insertSoftBreakActionImplementation({
2770
+ context: {
2771
+ keyGenerator: editorActor.getSnapshot().context.keyGenerator,
2772
+ schema: editorActor.getSnapshot().context.schema
2773
+ },
2774
+ action: {
2775
+ type: "insert.soft break",
2776
+ editor
2777
+ }
2778
+ });
2704
2779
  return;
2705
2780
  }
2706
2781
  editorActor.send({
@@ -4775,73 +4850,6 @@ const blockSetBehaviorActionImplementation = ({
4775
4850
  }), action.editor.insertFragment(fragment), slate.Transforms.removeNodes(action.editor, {
4776
4851
  at: [0]
4777
4852
  })) : action.editor.insertFragment(fragment);
4778
- }, insertBreakActionImplementation = ({
4779
- context,
4780
- action
4781
- }) => {
4782
- const keyGenerator = context.keyGenerator, schema2 = context.schema, editor = action.editor;
4783
- if (!editor.selection)
4784
- return;
4785
- const anchorBlockPath = editor.selection.anchor.path.slice(0, 1), focusBlockPath = editor.selection.focus.path.slice(0, 1), focusBlock = slate.Node.descendant(editor, focusBlockPath);
4786
- if (editor.isTextBlock(focusBlock) && anchorBlockPath[0] === focusBlockPath[0]) {
4787
- slate.Transforms.splitNodes(editor, {
4788
- at: editor.selection
4789
- });
4790
- const [nextBlock, nextBlockPath] = slate.Editor.node(editor, slate.Path.next(focusBlockPath), {
4791
- depth: 1
4792
- }), nextChild = slate.Node.child(nextBlock, 0);
4793
- if (!editor.isTextSpan(nextChild) && slate.Transforms.insertNodes(editor, {
4794
- _key: context.keyGenerator(),
4795
- _type: "span",
4796
- text: "",
4797
- marks: []
4798
- }, {
4799
- at: [nextBlockPath[0], 0]
4800
- }), slate.Transforms.setSelection(editor, {
4801
- anchor: {
4802
- path: [...nextBlockPath, 0],
4803
- offset: 0
4804
- },
4805
- focus: {
4806
- path: [...nextBlockPath, 0],
4807
- offset: 0
4808
- }
4809
- }), editor.isTextBlock(nextBlock) && nextBlock.markDefs && nextBlock.markDefs.length > 0) {
4810
- const newMarkDefKeys = /* @__PURE__ */ new Map(), prevNodeSpans = Array.from(slate.Node.children(editor, focusBlockPath)).map((entry) => entry[0]).filter((node) => editor.isTextSpan(node)), children = slate.Node.children(editor, nextBlockPath);
4811
- for (const [child, childPath] of children) {
4812
- if (!editor.isTextSpan(child))
4813
- continue;
4814
- const marks = child.marks ?? [];
4815
- for (const mark of marks)
4816
- schema2.decorators.some((decorator) => decorator.value === mark) || prevNodeSpans.some((prevNodeSpan) => prevNodeSpan.marks?.includes(mark)) && !newMarkDefKeys.has(mark) && newMarkDefKeys.set(mark, keyGenerator());
4817
- const newMarks = marks.map((mark) => newMarkDefKeys.get(mark) ?? mark);
4818
- isEqual__default.default(marks, newMarks) || slate.Transforms.setNodes(editor, {
4819
- marks: newMarks
4820
- }, {
4821
- at: childPath
4822
- });
4823
- }
4824
- const newMarkDefs = nextBlock.markDefs.map((markDef) => ({
4825
- ...markDef,
4826
- _key: newMarkDefKeys.get(markDef._key) ?? markDef._key
4827
- }));
4828
- isEqual__default.default(nextBlock.markDefs, newMarkDefs) || slate.Transforms.setNodes(editor, {
4829
- markDefs: newMarkDefs
4830
- }, {
4831
- at: nextBlockPath,
4832
- match: (node) => editor.isTextBlock(node)
4833
- });
4834
- }
4835
- return;
4836
- }
4837
- slate.Transforms.splitNodes(editor, {
4838
- always: !0
4839
- });
4840
- }, insertSoftBreakActionImplementation = ({
4841
- action
4842
- }) => {
4843
- slate.insertText(action.editor, `
4844
- `);
4845
4853
  }, insertInlineObjectActionImplementation = ({
4846
4854
  context,
4847
4855
  action
@@ -5533,6 +5541,24 @@ function performDefaultAction({
5533
5541
  });
5534
5542
  }
5535
5543
  }
5544
+ const keyIs = {
5545
+ lineBreak: (event) => event.key === "Enter" && event.shiftKey
5546
+ }, foundationalBehaviors = [
5547
+ /**
5548
+ * On WebKit, Shift+Enter results in an `insertParagraph` input event rather
5549
+ * than an `insertLineBreak` input event. This Behavior makes sure we catch
5550
+ * that `key.down` event beforehand and raise an `insert.soft break` manually.
5551
+ */
5552
+ behavior_core.defineBehavior({
5553
+ on: "key.down",
5554
+ guard: ({
5555
+ event
5556
+ }) => keyIs.lineBreak(event.keyboardEvent),
5557
+ actions: [() => [behavior_core.raise({
5558
+ type: "insert.soft break"
5559
+ })]]
5560
+ })
5561
+ ];
5536
5562
  function getActiveDecorators({
5537
5563
  schema: schema2,
5538
5564
  slateEditorInstance
@@ -5586,7 +5612,7 @@ const editorMachine = xstate.setup({
5586
5612
  "assign behaviors": xstate.assign({
5587
5613
  behaviors: ({
5588
5614
  event
5589
- }) => (xstate.assertEvent(event, "update behaviors"), new Set(event.behaviors))
5615
+ }) => (xstate.assertEvent(event, "update behaviors"), /* @__PURE__ */ new Set([...foundationalBehaviors, ...event.behaviors]))
5590
5616
  }),
5591
5617
  "assign schema": xstate.assign({
5592
5618
  schema: ({
@@ -5753,7 +5779,7 @@ const editorMachine = xstate.setup({
5753
5779
  context: ({
5754
5780
  input
5755
5781
  }) => ({
5756
- behaviors: new Set(input.behaviors ?? behavior_core.coreBehaviors),
5782
+ behaviors: /* @__PURE__ */ new Set([...foundationalBehaviors, ...input.behaviors ?? behavior_core.coreBehaviors]),
5757
5783
  converters: new Set(input.converters ?? []),
5758
5784
  keyGenerator: input.keyGenerator,
5759
5785
  pendingEvents: [],