@portabletext/editor 1.39.0 → 1.39.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/_chunks-cjs/behavior.core.cjs +4 -1
- package/lib/_chunks-cjs/behavior.core.cjs.map +1 -1
- package/lib/_chunks-cjs/editor-provider.cjs +37 -52
- package/lib/_chunks-cjs/editor-provider.cjs.map +1 -1
- package/lib/_chunks-cjs/selector.get-text-before.cjs +0 -1
- package/lib/_chunks-cjs/selector.get-text-before.cjs.map +1 -1
- package/lib/_chunks-cjs/selector.is-at-the-start-of-block.cjs +0 -3
- package/lib/_chunks-cjs/selector.is-at-the-start-of-block.cjs.map +1 -1
- package/lib/_chunks-cjs/selector.is-overlapping-selection.cjs +0 -4
- package/lib/_chunks-cjs/selector.is-overlapping-selection.cjs.map +1 -1
- package/lib/_chunks-es/behavior.core.js +5 -2
- package/lib/_chunks-es/behavior.core.js.map +1 -1
- package/lib/_chunks-es/editor-provider.js +41 -56
- package/lib/_chunks-es/editor-provider.js.map +1 -1
- package/lib/_chunks-es/selector.get-text-before.js +1 -2
- package/lib/_chunks-es/selector.get-text-before.js.map +1 -1
- package/lib/_chunks-es/selector.is-at-the-start-of-block.js +1 -4
- package/lib/_chunks-es/selector.is-at-the-start-of-block.js.map +1 -1
- package/lib/_chunks-es/selector.is-overlapping-selection.js +1 -5
- package/lib/_chunks-es/selector.is-overlapping-selection.js.map +1 -1
- package/lib/behaviors/index.d.cts +1134 -801
- package/lib/behaviors/index.d.ts +1134 -801
- package/lib/index.cjs +0 -6
- package/lib/index.cjs.map +1 -1
- package/lib/index.d.cts +902 -627
- package/lib/index.d.ts +902 -627
- package/lib/index.js +0 -6
- package/lib/index.js.map +1 -1
- package/lib/plugins/index.cjs +0 -1
- package/lib/plugins/index.cjs.map +1 -1
- package/lib/plugins/index.d.cts +902 -627
- package/lib/plugins/index.d.ts +902 -627
- package/lib/plugins/index.js +1 -2
- package/lib/plugins/index.js.map +1 -1
- package/lib/selectors/index.d.cts +902 -627
- package/lib/selectors/index.d.ts +902 -627
- package/lib/utils/index.d.cts +902 -627
- package/lib/utils/index.d.ts +902 -627
- package/package.json +5 -5
- package/src/behaviors/behavior.default.ts +23 -4
- package/src/behaviors/behavior.types.ts +62 -26
- package/src/editor/editor-machine.ts +7 -1
- package/src/editor/plugins/create-with-event-listeners.ts +18 -3
|
@@ -118,6 +118,9 @@ function isClipboardBehaviorEvent(event) {
|
|
|
118
118
|
function isDragBehaviorEvent(event) {
|
|
119
119
|
return event.type.startsWith("drag.");
|
|
120
120
|
}
|
|
121
|
+
function isInputBehaviorEvent(event) {
|
|
122
|
+
return event.type.startsWith("input.");
|
|
123
|
+
}
|
|
121
124
|
function isKeyboardBehaviorEvent(event) {
|
|
122
125
|
return event.type.startsWith("keyboard.");
|
|
123
126
|
}
|
|
@@ -145,7 +148,6 @@ const addAnnotationOnCollapsedSelection = {
|
|
|
145
148
|
return !1;
|
|
146
149
|
const caretWordSelection = selector_isAtTheStartOfBlock.getCaretWordSelection(snapshot);
|
|
147
150
|
return !caretWordSelection || !selector_isAtTheStartOfBlock.isSelectionExpanded({
|
|
148
|
-
...snapshot,
|
|
149
151
|
context: {
|
|
150
152
|
...snapshot.context,
|
|
151
153
|
selection: caretWordSelection
|
|
@@ -543,6 +545,7 @@ exports.isClipboardBehaviorEvent = isClipboardBehaviorEvent;
|
|
|
543
545
|
exports.isCustomBehaviorEvent = isCustomBehaviorEvent;
|
|
544
546
|
exports.isDragBehaviorEvent = isDragBehaviorEvent;
|
|
545
547
|
exports.isHotkey = isHotkey;
|
|
548
|
+
exports.isInputBehaviorEvent = isInputBehaviorEvent;
|
|
546
549
|
exports.isKeyboardBehaviorEvent = isKeyboardBehaviorEvent;
|
|
547
550
|
exports.isMouseBehaviorEvent = isMouseBehaviorEvent;
|
|
548
551
|
exports.raise = raise;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"behavior.core.cjs","sources":["../../src/internal-utils/is-hotkey.ts","../../src/behaviors/behavior.types.ts","../../src/behaviors/behavior.core.annotations.ts","../../src/behaviors/behavior.core.block-objects.ts","../../src/behaviors/behavior.core.decorators.ts","../../src/behaviors/behavior.core.insert-break.ts","../../src/behaviors/behavior.core.lists.ts","../../src/behaviors/behavior.core.ts"],"sourcesContent":["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 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, EditorSnapshot} from '../editor/editor-snapshot'\nimport type {EventPosition} from '../internal-utils/event-position'\nimport type {MIMEType} from '../internal-utils/mime-type'\nimport type {OmitFromUnion, PickFromUnion} from '../type-utils'\nimport type {BlockOffset} from '../types/block-offset'\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: Record<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 offsets?: {anchor: BlockOffset; focus: BlockOffset}\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: 'history.redo'\n }\n | {\n type: 'history.undo'\n }\n | {\n type: 'insert.blocks'\n blocks: Array<PortableTextBlock>\n placement: InsertPlacement\n }\n | {\n type: 'insert.block object'\n placement: InsertPlacement\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: InsertPlacement\n select?: 'start' | 'end' | 'none'\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: InsertPlacement\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 select?: 'start' | 'end'\n }\n | {\n type: 'select.next block'\n select?: 'start' | 'end'\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 | (PickFromUnion<\n ConverterEvent,\n 'type',\n 'deserialization.failure' | 'deserialization.success'\n > & {\n originEvent: PickFromUnion<\n NativeBehaviorEvent,\n 'type',\n 'drag.drop' | 'clipboard.paste'\n >\n })\n | {\n type: 'serialization.success'\n mimeType: MIMEType\n data: string\n originEvent: PickFromUnion<\n NativeBehaviorEvent,\n 'type',\n 'clipboard.copy' | 'clipboard.cut' | 'drag.dragstart'\n >\n }\n | {\n type: 'serialization.failure'\n mimeType: MIMEType\n reason: string\n originEvent: PickFromUnion<\n NativeBehaviorEvent,\n 'type',\n 'clipboard.copy' | 'clipboard.cut' | 'drag.dragstart'\n >\n }\n\nexport type InsertPlacement = 'auto' | 'after' | 'before'\n\ntype ClipboardBehaviorEvent =\n | {\n type: 'clipboard.copy'\n originEvent: {\n dataTransfer: DataTransfer\n }\n position: EventPosition\n }\n | {\n type: 'clipboard.cut'\n originEvent: {\n dataTransfer: DataTransfer\n }\n position: EventPosition\n }\n | {\n type: 'clipboard.paste'\n originEvent: {\n dataTransfer: DataTransfer\n }\n position: EventPosition\n }\n\nexport function isClipboardBehaviorEvent(\n event: BehaviorEvent,\n): event is ClipboardBehaviorEvent {\n return event.type.startsWith('clipboard.')\n}\n\ntype DragBehaviorEvent =\n | {\n type: 'drag.dragstart'\n originEvent: {\n dataTransfer: DataTransfer\n }\n position: EventPosition\n }\n | {\n type: 'drag.drag'\n originEvent: {\n dataTransfer: DataTransfer\n }\n }\n | {\n type: 'drag.dragend'\n originEvent: {\n dataTransfer: DataTransfer\n }\n }\n | {\n type: 'drag.dragenter'\n originEvent: {\n dataTransfer: DataTransfer\n }\n position: EventPosition\n }\n | {\n type: 'drag.dragover'\n originEvent: {\n dataTransfer: DataTransfer\n }\n position: EventPosition\n }\n | {\n type: 'drag.drop'\n originEvent: {\n dataTransfer: DataTransfer\n }\n position: EventPosition\n }\n | {\n type: 'drag.dragleave'\n originEvent: {\n dataTransfer: DataTransfer\n }\n }\n\nexport function isDragBehaviorEvent(\n event: BehaviorEvent,\n): event is DragBehaviorEvent {\n return event.type.startsWith('drag.')\n}\n\nexport type KeyboardBehaviorEvent =\n | {\n type: 'keyboard.keydown'\n originEvent: Pick<\n KeyboardEvent,\n 'key' | 'code' | 'altKey' | 'ctrlKey' | 'metaKey' | 'shiftKey'\n >\n }\n | {\n type: 'keyboard.keyup'\n originEvent: Pick<\n KeyboardEvent,\n 'key' | 'code' | 'altKey' | 'ctrlKey' | 'metaKey' | 'shiftKey'\n >\n }\n\nexport function isKeyboardBehaviorEvent(\n event: BehaviorEvent,\n): event is KeyboardBehaviorEvent {\n return event.type.startsWith('keyboard.')\n}\n\nexport type DataBehaviorEvent =\n | {\n type: 'deserialize'\n originEvent: PickFromUnion<\n NativeBehaviorEvent,\n 'type',\n 'drag.drop' | 'clipboard.paste'\n >\n }\n | {\n type: 'serialize'\n originEvent: PickFromUnion<\n NativeBehaviorEvent,\n 'type',\n 'clipboard.copy' | 'clipboard.cut' | 'drag.dragstart'\n >\n }\n\nexport type MouseBehaviorEvent = {\n type: 'mouse.click'\n position: EventPosition\n}\n\nexport function isMouseBehaviorEvent(\n event: BehaviorEvent,\n): event is MouseBehaviorEvent {\n return event.type.startsWith('mouse.')\n}\n\n/**\n * @beta\n */\nexport type NativeBehaviorEvent =\n | ClipboardBehaviorEvent\n | KeyboardBehaviorEvent\n | MouseBehaviorEvent\n | DragBehaviorEvent\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 BehaviorAction =\n | SyntheticBehaviorEvent\n | {\n type: 'raise'\n event: DataBehaviorEvent | SyntheticBehaviorEvent | CustomBehaviorEvent\n }\n | {\n type: 'noop'\n }\n | {\n type: 'effect'\n effect: () => void\n }\n\nexport type InternalBehaviorAction = OmitFromUnion<\n BehaviorAction,\n 'type',\n 'raise'\n> & {\n editor: PortableTextSlateEditor\n}\n\n/**\n * @beta\n */\nexport function raise(\n event: DataBehaviorEvent | SyntheticBehaviorEvent | CustomBehaviorEvent,\n): PickFromUnion<BehaviorAction, 'type', 'raise'> {\n return {type: 'raise', event}\n}\n\n/**\n * @beta\n */\nexport type BehaviorEvent =\n | SyntheticBehaviorEvent\n | DataBehaviorEvent\n | NativeBehaviorEvent\n | CustomBehaviorEvent\n | {type: '*'}\n | {type: 'clipboard.*'}\n | {type: 'drag.*'}\n | {type: 'keyboard.*'}\n | {type: 'mouse.*'}\n\n/**\n * @beta\n */\nexport type Behavior<\n TBehaviorEventType extends BehaviorEvent['type'] = BehaviorEvent['type'],\n TGuardResponse = true,\n TBehaviorEvent extends BehaviorEvent = TBehaviorEventType extends '*'\n ? BehaviorEvent\n : TBehaviorEventType extends 'clipboard.*'\n ? ClipboardBehaviorEvent\n : TBehaviorEventType extends 'drag.*'\n ? DragBehaviorEvent\n : TBehaviorEventType extends 'keyboard.*'\n ? KeyboardBehaviorEvent\n : TBehaviorEventType extends 'mouse.*'\n ? MouseBehaviorEvent\n : PickFromUnion<BehaviorEvent, 'type', TBehaviorEventType>,\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<BehaviorActionSet<TBehaviorEvent, TGuardResponse>>\n}\n\n/**\n * @beta\n */\nexport type BehaviorGuard<TBehaviorEvent, TGuardResponse> = (payload: {\n /**\n * @deprecated\n * Use `snapshot` instead\n */\n context: EditorContext\n snapshot: EditorSnapshot\n event: TBehaviorEvent\n}) => TGuardResponse | false\n\n/**\n * @beta\n */\nexport type BehaviorActionSet<TBehaviorEvent, TGuardResponse> = (\n payload: {\n /**\n * @deprecated\n * Use `snapshot` instead\n */\n context: EditorContext\n snapshot: EditorSnapshot\n event: TBehaviorEvent\n },\n guardResponse: TGuardResponse,\n) => Array<BehaviorAction>\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 : TBehaviorEventType extends '*'\n ? OmitFromUnion<BehaviorEvent, 'type', '*'>\n : TBehaviorEventType extends `clipboard.*`\n ? ClipboardBehaviorEvent\n : TBehaviorEventType extends `drag.*`\n ? DragBehaviorEvent\n : TBehaviorEventType extends 'keyboard.*'\n ? KeyboardBehaviorEvent\n : TBehaviorEventType extends 'mouse.*'\n ? MouseBehaviorEvent\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 : TBehaviorEventType extends '*'\n ? OmitFromUnion<BehaviorEvent, 'type', '*'>\n : TBehaviorEventType extends `clipboard.*`\n ? ClipboardBehaviorEvent\n : TBehaviorEventType extends `drag.*`\n ? DragBehaviorEvent\n : TBehaviorEventType extends 'keyboard.*'\n ? KeyboardBehaviorEvent\n : TBehaviorEventType extends 'mouse.*'\n ? MouseBehaviorEvent\n : PickFromUnion<BehaviorEvent, 'type', TBehaviorEventType>,\n>(\n behavior: Behavior<TBehaviorEventType, TGuardResponse, TBehaviorEvent>,\n): Behavior {\n return behavior as unknown as Behavior\n}\n","import * as selectors from '../selectors'\nimport {defineBehavior, raise} from './behavior.types'\n\nconst addAnnotationOnCollapsedSelection = defineBehavior({\n on: 'annotation.add',\n guard: ({snapshot}) => {\n if (!selectors.isSelectionCollapsed(snapshot)) {\n return false\n }\n\n const caretWordSelection = selectors.getCaretWordSelection(snapshot)\n\n if (\n !caretWordSelection ||\n !selectors.isSelectionExpanded({\n ...snapshot,\n context: {\n ...snapshot.context,\n selection: caretWordSelection,\n },\n })\n ) {\n return false\n }\n\n return {caretWordSelection}\n },\n actions: [\n ({event}, {caretWordSelection}) => [\n raise({type: 'select', selection: caretWordSelection}),\n raise({type: 'annotation.add', annotation: event.annotation}),\n ],\n ],\n})\n\nexport const coreAnnotationBehaviors = {\n addAnnotationOnCollapsedSelection,\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: 'keyboard.keydown',\n guard: ({snapshot, event}) => {\n const isArrowDown = isHotkey('ArrowDown', event.originEvent)\n const focusBlockObject = selectors.getFocusBlockObject(snapshot)\n const nextBlock = selectors.getNextBlock(snapshot)\n\n return isArrowDown && focusBlockObject && !nextBlock\n },\n actions: [() => [raise({type: 'insert.text block', placement: 'after'})]],\n})\n\nconst arrowUpOnLonelyBlockObject = defineBehavior({\n on: 'keyboard.keydown',\n guard: ({snapshot, event}) => {\n const isArrowUp = isHotkey('ArrowUp', event.originEvent)\n const focusBlockObject = selectors.getFocusBlockObject(snapshot)\n const previousBlock = selectors.getPreviousBlock(snapshot)\n\n return isArrowUp && focusBlockObject && !previousBlock\n },\n actions: [() => [raise({type: 'insert.text block', placement: 'before'})]],\n})\n\nconst breakingBlockObject = defineBehavior({\n on: 'insert.break',\n guard: ({snapshot}) => {\n const focusBlockObject = selectors.getFocusBlockObject(snapshot)\n const collapsedSelection = selectors.isSelectionCollapsed(snapshot)\n\n return collapsedSelection && focusBlockObject !== undefined\n },\n actions: [() => [raise({type: 'insert.text block', placement: 'after'})]],\n})\n\nconst clickingAboveLonelyBlockObject = defineBehavior({\n on: 'mouse.click',\n guard: ({snapshot, event}) => {\n const focusBlockObject = selectors.getFocusBlockObject(snapshot)\n const previousBlock = selectors.getPreviousBlock(snapshot)\n\n return (\n event.position.isEditor &&\n event.position.block === 'start' &&\n focusBlockObject &&\n !previousBlock\n )\n },\n actions: [() => [raise({type: 'insert.text block', placement: 'before'})]],\n})\n\nconst clickingBelowLonelyBlockObject = defineBehavior({\n on: 'mouse.click',\n guard: ({snapshot, event}) => {\n const focusBlockObject = selectors.getFocusBlockObject(snapshot)\n const nextBlock = selectors.getNextBlock(snapshot)\n\n return (\n event.position.isEditor &&\n event.position.block === 'end' &&\n focusBlockObject &&\n !nextBlock\n )\n },\n actions: [() => [raise({type: 'insert.text block', placement: 'after'})]],\n})\n\nconst deletingEmptyTextBlockAfterBlockObject = defineBehavior({\n on: 'delete.backward',\n guard: ({snapshot}) => {\n const focusTextBlock = selectors.getFocusTextBlock(snapshot)\n const selectionCollapsed = selectors.isSelectionCollapsed(snapshot)\n const previousBlock = selectors.getPreviousBlock(snapshot)\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: ({snapshot}) => {\n const focusTextBlock = selectors.getFocusTextBlock(snapshot)\n const selectionCollapsed = selectors.isSelectionCollapsed(snapshot)\n const nextBlock = selectors.getNextBlock(snapshot)\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 clickingAboveLonelyBlockObject,\n clickingBelowLonelyBlockObject,\n deletingEmptyTextBlockAfterBlockObject,\n deletingEmptyTextBlockBeforeBlockObject,\n}\n","import {isHotkey} from '../internal-utils/is-hotkey'\nimport {defineBehavior, raise} from './behavior.types'\n\nexport const coreDecoratorBehaviors = {\n strongShortcut: defineBehavior({\n on: 'keyboard.keydown',\n guard: ({snapshot, event}) =>\n isHotkey('mod+b', event.originEvent) &&\n snapshot.context.schema.decorators.some(\n (decorator) => decorator.value === 'strong',\n ),\n actions: [() => [raise({type: 'decorator.toggle', decorator: 'strong'})]],\n }),\n emShortcut: defineBehavior({\n on: 'keyboard.keydown',\n guard: ({snapshot, event}) =>\n isHotkey('mod+i', event.originEvent) &&\n snapshot.context.schema.decorators.some(\n (decorator) => decorator.value === 'em',\n ),\n actions: [() => [raise({type: 'decorator.toggle', decorator: 'em'})]],\n }),\n underlineShortcut: defineBehavior({\n on: 'keyboard.keydown',\n guard: ({snapshot, event}) =>\n isHotkey('mod+u', event.originEvent) &&\n snapshot.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: 'keyboard.keydown',\n guard: ({snapshot, event}) =>\n isHotkey(\"mod+'\", event.originEvent) &&\n snapshot.context.schema.decorators.some(\n (decorator) => decorator.value === 'code',\n ),\n actions: [() => [raise({type: 'decorator.toggle', decorator: 'code'})]],\n }),\n}\n","import * as selectors from '../selectors'\nimport {defineBehavior, raise} from './behavior.types'\n\nconst breakingAtTheEndOfTextBlock = defineBehavior({\n on: 'insert.break',\n guard: ({snapshot}) => {\n const focusTextBlock = selectors.getFocusTextBlock(snapshot)\n const selectionCollapsed = selectors.isSelectionCollapsed(snapshot)\n\n if (!snapshot.context.selection || !focusTextBlock || !selectionCollapsed) {\n return false\n }\n\n const atTheEndOfBlock =\n selectors.isAtTheEndOfBlock(focusTextBlock)(snapshot)\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 ({snapshot}, {focusListItem, focusLevel}) => [\n raise({\n type: 'insert.block',\n block: {\n _type: snapshot.context.schema.block.name,\n _key: snapshot.context.keyGenerator(),\n children: [\n {\n _key: snapshot.context.keyGenerator(),\n _type: snapshot.context.schema.span.name,\n text: '',\n marks: [],\n },\n ],\n markDefs: [],\n listItem: focusListItem,\n level: focusLevel,\n style: snapshot.context.schema.styles[0]?.value,\n },\n placement: 'after',\n }),\n ],\n ],\n})\n\nconst breakingAtTheStartOfTextBlock = defineBehavior({\n on: 'insert.break',\n guard: ({snapshot}) => {\n const focusTextBlock = selectors.getFocusTextBlock(snapshot)\n const selectionCollapsed = selectors.isSelectionCollapsed(snapshot)\n\n if (!snapshot.context.selection || !focusTextBlock || !selectionCollapsed) {\n return false\n }\n\n const focusSpan = selectors.getFocusSpan(snapshot)\n\n const focusDecorators = focusSpan?.node.marks?.filter(\n (mark) =>\n snapshot.context.schema.decorators.some(\n (decorator) => decorator.value === mark,\n ) ?? [],\n )\n const focusAnnotations =\n focusSpan?.node.marks?.filter(\n (mark) =>\n !snapshot.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 =\n selectors.isAtTheStartOfBlock(focusTextBlock)(snapshot)\n\n if (atTheStartOfBlock) {\n return {focusAnnotations, focusDecorators, focusListItem, focusLevel}\n }\n\n return false\n },\n actions: [\n (\n {snapshot},\n {focusAnnotations, focusDecorators, focusListItem, focusLevel},\n ) => [\n raise({\n type: 'insert.block',\n block: {\n _key: snapshot.context.keyGenerator(),\n _type: snapshot.context.schema.block.name,\n children: [\n {\n _key: snapshot.context.keyGenerator(),\n _type: snapshot.context.schema.span.name,\n marks: focusAnnotations.length === 0 ? focusDecorators : [],\n text: '',\n },\n ],\n listItem: focusListItem,\n level: focusLevel,\n style: snapshot.context.schema.styles[0]?.value,\n },\n placement: 'before',\n select: 'none',\n }),\n ],\n ],\n})\n\nexport const coreInsertBreakBehaviors = {\n breakingAtTheEndOfTextBlock,\n breakingAtTheStartOfTextBlock,\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 clearListOnBackspace = defineBehavior({\n on: 'delete.backward',\n guard: ({snapshot}) => {\n const selectionCollapsed = selectors.isSelectionCollapsed(snapshot)\n const focusTextBlock = selectors.getFocusTextBlock(snapshot)\n const focusSpan = selectors.getFocusSpan(snapshot)\n\n if (!selectionCollapsed || !focusTextBlock || !focusSpan) {\n return false\n }\n\n const atTheBeginningOfBLock =\n focusTextBlock.node.children[0]._key === focusSpan.node._key &&\n snapshot.context.selection?.focus.offset === 0\n\n if (atTheBeginningOfBLock && focusTextBlock.node.level === 1) {\n return {focusTextBlock}\n }\n\n return false\n },\n actions: [\n (_, {focusTextBlock}) => [\n raise({\n type: 'block.unset',\n props: ['listItem', 'level'],\n at: focusTextBlock.path,\n }),\n ],\n ],\n})\n\nconst unindentListOnBackspace = defineBehavior({\n on: 'delete.backward',\n guard: ({snapshot}) => {\n const selectionCollapsed = selectors.isSelectionCollapsed(snapshot)\n const focusTextBlock = selectors.getFocusTextBlock(snapshot)\n const focusSpan = selectors.getFocusSpan(snapshot)\n\n if (!selectionCollapsed || !focusTextBlock || !focusSpan) {\n return false\n }\n\n const atTheBeginningOfBLock =\n focusTextBlock.node.children[0]._key === focusSpan.node._key &&\n snapshot.context.selection?.focus.offset === 0\n\n 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: 'block.set',\n props: {level},\n at: focusTextBlock.path,\n }),\n ],\n ],\n})\n\nconst clearListOnEnter = defineBehavior({\n on: 'insert.break',\n guard: ({snapshot}) => {\n const selectionCollapsed = selectors.isSelectionCollapsed(snapshot)\n const focusListBlock = selectors.getFocusListBlock(snapshot)\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: 'block.unset',\n props: ['listItem', 'level'],\n at: focusListBlock.path,\n }),\n ],\n ],\n})\n\nconst indentListOnTab = defineBehavior({\n on: 'keyboard.keydown',\n guard: ({snapshot, event}) => {\n const isTab = isHotkey('Tab', event.originEvent)\n\n if (!isTab) {\n return false\n }\n\n const selectedBlocks = selectors.getSelectedBlocks(snapshot)\n const guards = createGuards(snapshot.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: 'block.set',\n props: {\n level: Math.min(\n MAX_LIST_LEVEL,\n Math.max(1, selectedListBlock.node.level + 1),\n ),\n },\n at: selectedListBlock.path,\n }),\n ),\n ],\n})\n\nconst unindentListOnShiftTab = defineBehavior({\n on: 'keyboard.keydown',\n guard: ({snapshot, event}) => {\n const isShiftTab = isHotkey('Shift+Tab', event.originEvent)\n\n if (!isShiftTab) {\n return false\n }\n\n const selectedBlocks = selectors.getSelectedBlocks(snapshot)\n const guards = createGuards(snapshot.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: 'block.set',\n props: {\n level: Math.min(\n MAX_LIST_LEVEL,\n Math.max(1, selectedListBlock.node.level - 1),\n ),\n },\n at: selectedListBlock.path,\n }),\n ),\n ],\n})\n\nexport const coreListBehaviors = {\n clearListOnBackspace,\n unindentListOnBackspace,\n clearListOnEnter,\n indentListOnTab,\n unindentListOnShiftTab,\n}\n","import {coreAnnotationBehaviors} from './behavior.core.annotations'\nimport {coreBlockObjectBehaviors} from './behavior.core.block-objects'\nimport {coreDecoratorBehaviors} from './behavior.core.decorators'\nimport {coreInsertBreakBehaviors} from './behavior.core.insert-break'\nimport {coreListBehaviors} from './behavior.core.lists'\n\n/**\n * @beta\n */\nexport const coreBehaviors = [\n coreAnnotationBehaviors.addAnnotationOnCollapsedSelection,\n coreDecoratorBehaviors.strongShortcut,\n coreDecoratorBehaviors.emShortcut,\n coreDecoratorBehaviors.underlineShortcut,\n coreDecoratorBehaviors.codeShortcut,\n coreBlockObjectBehaviors.clickingAboveLonelyBlockObject,\n coreBlockObjectBehaviors.clickingBelowLonelyBlockObject,\n coreBlockObjectBehaviors.arrowDownOnLonelyBlockObject,\n coreBlockObjectBehaviors.arrowUpOnLonelyBlockObject,\n coreBlockObjectBehaviors.breakingBlockObject,\n coreBlockObjectBehaviors.deletingEmptyTextBlockAfterBlockObject,\n coreBlockObjectBehaviors.deletingEmptyTextBlockBeforeBlockObject,\n coreListBehaviors.clearListOnBackspace,\n coreListBehaviors.unindentListOnBackspace,\n coreListBehaviors.clearListOnEnter,\n coreListBehaviors.indentListOnTab,\n coreListBehaviors.unindentListOnShiftTab,\n coreInsertBreakBehaviors.breakingAtTheEndOfTextBlock,\n coreInsertBreakBehaviors.breakingAtTheStartOfTextBlock,\n]\n"],"names":["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","event","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","name","toUpperCase","charCodeAt","isClipboardBehaviorEvent","type","startsWith","isDragBehaviorEvent","isKeyboardBehaviorEvent","isMouseBehaviorEvent","isCustomBehaviorEvent","raise","defineBehavior","behavior","addAnnotationOnCollapsedSelection","on","guard","snapshot","selectors","isSelectionCollapsed","caretWordSelection","getCaretWordSelection","context","selection","actions","annotation","coreAnnotationBehaviors","arrowDownOnLonelyBlockObject","isArrowDown","originEvent","focusBlockObject","nextBlock","placement","arrowUpOnLonelyBlockObject","isArrowUp","previousBlock","breakingBlockObject","getFocusBlockObject","clickingAboveLonelyBlockObject","position","isEditor","block","clickingBelowLonelyBlockObject","deletingEmptyTextBlockAfterBlockObject","focusTextBlock","selectionCollapsed","isEmptyTextBlock","node","isPortableTextTextBlock","_","blockPath","path","anchor","offset","focus","deletingEmptyTextBlockBeforeBlockObject","coreBlockObjectBehaviors","coreDecoratorBehaviors","strongShortcut","schema","decorators","some","decorator","value","emShortcut","underlineShortcut","codeShortcut","breakingAtTheEndOfTextBlock","atTheEndOfBlock","focusListItem","listItem","focusLevel","level","_type","_key","keyGenerator","children","span","text","marks","markDefs","style","styles","breakingAtTheStartOfTextBlock","focusSpan","focusDecorators","filter","mark","focusAnnotations","select","coreInsertBreakBehaviors","MAX_LIST_LEVEL","clearListOnBackspace","props","at","unindentListOnBackspace","clearListOnEnter","focusListBlock","indentListOnTab","selectedBlocks","guards","createGuards","selectedListBlocks","flatMap","isListBlock","map","selectedListBlock","Math","min","max","unindentListOnShiftTab","coreListBehaviors","coreBehaviors"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"behavior.core.cjs","sources":["../../src/internal-utils/is-hotkey.ts","../../src/behaviors/behavior.types.ts","../../src/behaviors/behavior.core.annotations.ts","../../src/behaviors/behavior.core.block-objects.ts","../../src/behaviors/behavior.core.decorators.ts","../../src/behaviors/behavior.core.insert-break.ts","../../src/behaviors/behavior.core.lists.ts","../../src/behaviors/behavior.core.ts"],"sourcesContent":["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 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, EditorSnapshot} from '../editor/editor-snapshot'\nimport type {EventPosition} from '../internal-utils/event-position'\nimport type {MIMEType} from '../internal-utils/mime-type'\nimport type {OmitFromUnion, PickFromUnion} from '../type-utils'\nimport type {BlockOffset} from '../types/block-offset'\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: Record<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 offsets?: {anchor: BlockOffset; focus: BlockOffset}\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: 'history.redo'\n }\n | {\n type: 'history.undo'\n }\n | {\n type: 'insert.blocks'\n blocks: Array<PortableTextBlock>\n placement: InsertPlacement\n }\n | {\n type: 'insert.block object'\n placement: InsertPlacement\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: InsertPlacement\n select?: 'start' | 'end' | 'none'\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: InsertPlacement\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 select?: 'start' | 'end'\n }\n | {\n type: 'select.next block'\n select?: 'start' | 'end'\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 | (PickFromUnion<\n ConverterEvent,\n 'type',\n 'deserialization.failure' | 'deserialization.success'\n > & {\n originEvent:\n | PickFromUnion<\n NativeBehaviorEvent,\n 'type',\n 'drag.drop' | 'clipboard.paste'\n >\n | InputBehaviorEvent\n })\n | {\n type: 'serialization.success'\n mimeType: MIMEType\n data: string\n originEvent: PickFromUnion<\n NativeBehaviorEvent,\n 'type',\n 'clipboard.copy' | 'clipboard.cut' | 'drag.dragstart'\n >\n }\n | {\n type: 'serialization.failure'\n mimeType: MIMEType\n reason: string\n originEvent: PickFromUnion<\n NativeBehaviorEvent,\n 'type',\n 'clipboard.copy' | 'clipboard.cut' | 'drag.dragstart'\n >\n }\n\nexport type InsertPlacement = 'auto' | 'after' | 'before'\n\ntype ClipboardBehaviorEvent =\n | {\n type: 'clipboard.copy'\n originEvent: {\n dataTransfer: DataTransfer\n }\n position: EventPosition\n }\n | {\n type: 'clipboard.cut'\n originEvent: {\n dataTransfer: DataTransfer\n }\n position: EventPosition\n }\n | {\n type: 'clipboard.paste'\n originEvent: {\n dataTransfer: DataTransfer\n }\n position: EventPosition\n }\n\nexport function isClipboardBehaviorEvent(\n event: BehaviorEvent,\n): event is ClipboardBehaviorEvent {\n return event.type.startsWith('clipboard.')\n}\n\ntype DragBehaviorEvent =\n | {\n type: 'drag.dragstart'\n originEvent: {\n dataTransfer: DataTransfer\n }\n position: EventPosition\n }\n | {\n type: 'drag.drag'\n originEvent: {\n dataTransfer: DataTransfer\n }\n }\n | {\n type: 'drag.dragend'\n originEvent: {\n dataTransfer: DataTransfer\n }\n }\n | {\n type: 'drag.dragenter'\n originEvent: {\n dataTransfer: DataTransfer\n }\n position: EventPosition\n }\n | {\n type: 'drag.dragover'\n originEvent: {\n dataTransfer: DataTransfer\n }\n position: EventPosition\n }\n | {\n type: 'drag.drop'\n originEvent: {\n dataTransfer: DataTransfer\n }\n position: EventPosition\n }\n | {\n type: 'drag.dragleave'\n originEvent: {\n dataTransfer: DataTransfer\n }\n }\n\nexport function isDragBehaviorEvent(\n event: BehaviorEvent,\n): event is DragBehaviorEvent {\n return event.type.startsWith('drag.')\n}\n\n/**\n * Used to represent native InputEvents that hold a DataTransfer object.\n *\n * These can either be one of:\n *\n * - insertFromPaste\n * - insertFromPasteAsQuotation\n * - insertFromDrop\n * - insertReplacementText\n * - insertFromYank\n */\nexport type InputBehaviorEvent = {\n type: 'input.*'\n originEvent: {\n dataTransfer: DataTransfer\n }\n}\n\nexport function isInputBehaviorEvent(\n event: BehaviorEvent,\n): event is InputBehaviorEvent {\n return event.type.startsWith('input.')\n}\n\nexport type KeyboardBehaviorEvent =\n | {\n type: 'keyboard.keydown'\n originEvent: Pick<\n KeyboardEvent,\n 'key' | 'code' | 'altKey' | 'ctrlKey' | 'metaKey' | 'shiftKey'\n >\n }\n | {\n type: 'keyboard.keyup'\n originEvent: Pick<\n KeyboardEvent,\n 'key' | 'code' | 'altKey' | 'ctrlKey' | 'metaKey' | 'shiftKey'\n >\n }\n\nexport function isKeyboardBehaviorEvent(\n event: BehaviorEvent,\n): event is KeyboardBehaviorEvent {\n return event.type.startsWith('keyboard.')\n}\n\nexport type DataBehaviorEvent =\n | {\n type: 'deserialize'\n originEvent:\n | PickFromUnion<\n NativeBehaviorEvent,\n 'type',\n 'drag.drop' | 'clipboard.paste'\n >\n | InputBehaviorEvent\n }\n | {\n type: 'serialize'\n originEvent: PickFromUnion<\n NativeBehaviorEvent,\n 'type',\n 'clipboard.copy' | 'clipboard.cut' | 'drag.dragstart'\n >\n }\n\nexport type MouseBehaviorEvent = {\n type: 'mouse.click'\n position: EventPosition\n}\n\nexport function isMouseBehaviorEvent(\n event: BehaviorEvent,\n): event is MouseBehaviorEvent {\n return event.type.startsWith('mouse.')\n}\n\n/**\n * @beta\n */\nexport type NativeBehaviorEvent =\n | ClipboardBehaviorEvent\n | DragBehaviorEvent\n | InputBehaviorEvent\n | KeyboardBehaviorEvent\n | MouseBehaviorEvent\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 BehaviorAction =\n | SyntheticBehaviorEvent\n | {\n type: 'raise'\n event: DataBehaviorEvent | SyntheticBehaviorEvent | CustomBehaviorEvent\n }\n | {\n type: 'noop'\n }\n | {\n type: 'effect'\n effect: () => void\n }\n\nexport type InternalBehaviorAction = OmitFromUnion<\n BehaviorAction,\n 'type',\n 'raise'\n> & {\n editor: PortableTextSlateEditor\n}\n\n/**\n * @beta\n */\nexport function raise(\n event: DataBehaviorEvent | SyntheticBehaviorEvent | CustomBehaviorEvent,\n): PickFromUnion<BehaviorAction, 'type', 'raise'> {\n return {type: 'raise', event}\n}\n\n/**\n * @beta\n */\nexport type BehaviorEvent =\n | SyntheticBehaviorEvent\n | DataBehaviorEvent\n | NativeBehaviorEvent\n | CustomBehaviorEvent\n | {type: '*'}\n | {type: 'clipboard.*'}\n | {type: 'drag.*'}\n | {type: 'input.*'}\n | {type: 'keyboard.*'}\n | {type: 'mouse.*'}\n\n/**\n * @beta\n */\nexport type Behavior<\n TBehaviorEventType extends BehaviorEvent['type'] = BehaviorEvent['type'],\n TGuardResponse = true,\n TBehaviorEvent extends BehaviorEvent = TBehaviorEventType extends '*'\n ? BehaviorEvent\n : TBehaviorEventType extends 'clipboard.*'\n ? ClipboardBehaviorEvent\n : TBehaviorEventType extends 'drag.*'\n ? DragBehaviorEvent\n : TBehaviorEventType extends 'input.*'\n ? InputBehaviorEvent\n : TBehaviorEventType extends 'keyboard.*'\n ? KeyboardBehaviorEvent\n : TBehaviorEventType extends 'mouse.*'\n ? MouseBehaviorEvent\n : PickFromUnion<BehaviorEvent, 'type', TBehaviorEventType>,\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<BehaviorActionSet<TBehaviorEvent, TGuardResponse>>\n}\n\n/**\n * @beta\n */\nexport type BehaviorGuard<TBehaviorEvent, TGuardResponse> = (payload: {\n /**\n * @deprecated\n * Use `snapshot` instead\n */\n context: EditorContext\n snapshot: EditorSnapshot\n event: TBehaviorEvent\n}) => TGuardResponse | false\n\n/**\n * @beta\n */\nexport type BehaviorActionSet<TBehaviorEvent, TGuardResponse> = (\n payload: {\n /**\n * @deprecated\n * Use `snapshot` instead\n */\n context: EditorContext\n snapshot: EditorSnapshot\n event: TBehaviorEvent\n },\n guardResponse: TGuardResponse,\n) => Array<BehaviorAction>\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 : TBehaviorEventType extends '*'\n ? OmitFromUnion<BehaviorEvent, 'type', '*'>\n : TBehaviorEventType extends `clipboard.*`\n ? ClipboardBehaviorEvent\n : TBehaviorEventType extends `drag.*`\n ? DragBehaviorEvent\n : TBehaviorEventType extends 'input.*'\n ? InputBehaviorEvent\n : TBehaviorEventType extends 'keyboard.*'\n ? KeyboardBehaviorEvent\n : TBehaviorEventType extends 'mouse.*'\n ? MouseBehaviorEvent\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 : TBehaviorEventType extends '*'\n ? OmitFromUnion<BehaviorEvent, 'type', '*'>\n : TBehaviorEventType extends `clipboard.*`\n ? ClipboardBehaviorEvent\n : TBehaviorEventType extends `drag.*`\n ? DragBehaviorEvent\n : TBehaviorEventType extends 'input.*'\n ? InputBehaviorEvent\n : TBehaviorEventType extends 'keyboard.*'\n ? KeyboardBehaviorEvent\n : TBehaviorEventType extends 'mouse.*'\n ? MouseBehaviorEvent\n : PickFromUnion<BehaviorEvent, 'type', TBehaviorEventType>,\n>(\n behavior: Behavior<TBehaviorEventType, TGuardResponse, TBehaviorEvent>,\n): Behavior {\n return behavior as unknown as Behavior\n}\n","import * as selectors from '../selectors'\nimport {defineBehavior, raise} from './behavior.types'\n\nconst addAnnotationOnCollapsedSelection = defineBehavior({\n on: 'annotation.add',\n guard: ({snapshot}) => {\n if (!selectors.isSelectionCollapsed(snapshot)) {\n return false\n }\n\n const caretWordSelection = selectors.getCaretWordSelection(snapshot)\n\n if (\n !caretWordSelection ||\n !selectors.isSelectionExpanded({\n ...snapshot,\n context: {\n ...snapshot.context,\n selection: caretWordSelection,\n },\n })\n ) {\n return false\n }\n\n return {caretWordSelection}\n },\n actions: [\n ({event}, {caretWordSelection}) => [\n raise({type: 'select', selection: caretWordSelection}),\n raise({type: 'annotation.add', annotation: event.annotation}),\n ],\n ],\n})\n\nexport const coreAnnotationBehaviors = {\n addAnnotationOnCollapsedSelection,\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: 'keyboard.keydown',\n guard: ({snapshot, event}) => {\n const isArrowDown = isHotkey('ArrowDown', event.originEvent)\n const focusBlockObject = selectors.getFocusBlockObject(snapshot)\n const nextBlock = selectors.getNextBlock(snapshot)\n\n return isArrowDown && focusBlockObject && !nextBlock\n },\n actions: [() => [raise({type: 'insert.text block', placement: 'after'})]],\n})\n\nconst arrowUpOnLonelyBlockObject = defineBehavior({\n on: 'keyboard.keydown',\n guard: ({snapshot, event}) => {\n const isArrowUp = isHotkey('ArrowUp', event.originEvent)\n const focusBlockObject = selectors.getFocusBlockObject(snapshot)\n const previousBlock = selectors.getPreviousBlock(snapshot)\n\n return isArrowUp && focusBlockObject && !previousBlock\n },\n actions: [() => [raise({type: 'insert.text block', placement: 'before'})]],\n})\n\nconst breakingBlockObject = defineBehavior({\n on: 'insert.break',\n guard: ({snapshot}) => {\n const focusBlockObject = selectors.getFocusBlockObject(snapshot)\n const collapsedSelection = selectors.isSelectionCollapsed(snapshot)\n\n return collapsedSelection && focusBlockObject !== undefined\n },\n actions: [() => [raise({type: 'insert.text block', placement: 'after'})]],\n})\n\nconst clickingAboveLonelyBlockObject = defineBehavior({\n on: 'mouse.click',\n guard: ({snapshot, event}) => {\n const focusBlockObject = selectors.getFocusBlockObject(snapshot)\n const previousBlock = selectors.getPreviousBlock(snapshot)\n\n return (\n event.position.isEditor &&\n event.position.block === 'start' &&\n focusBlockObject &&\n !previousBlock\n )\n },\n actions: [() => [raise({type: 'insert.text block', placement: 'before'})]],\n})\n\nconst clickingBelowLonelyBlockObject = defineBehavior({\n on: 'mouse.click',\n guard: ({snapshot, event}) => {\n const focusBlockObject = selectors.getFocusBlockObject(snapshot)\n const nextBlock = selectors.getNextBlock(snapshot)\n\n return (\n event.position.isEditor &&\n event.position.block === 'end' &&\n focusBlockObject &&\n !nextBlock\n )\n },\n actions: [() => [raise({type: 'insert.text block', placement: 'after'})]],\n})\n\nconst deletingEmptyTextBlockAfterBlockObject = defineBehavior({\n on: 'delete.backward',\n guard: ({snapshot}) => {\n const focusTextBlock = selectors.getFocusTextBlock(snapshot)\n const selectionCollapsed = selectors.isSelectionCollapsed(snapshot)\n const previousBlock = selectors.getPreviousBlock(snapshot)\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: ({snapshot}) => {\n const focusTextBlock = selectors.getFocusTextBlock(snapshot)\n const selectionCollapsed = selectors.isSelectionCollapsed(snapshot)\n const nextBlock = selectors.getNextBlock(snapshot)\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 clickingAboveLonelyBlockObject,\n clickingBelowLonelyBlockObject,\n deletingEmptyTextBlockAfterBlockObject,\n deletingEmptyTextBlockBeforeBlockObject,\n}\n","import {isHotkey} from '../internal-utils/is-hotkey'\nimport {defineBehavior, raise} from './behavior.types'\n\nexport const coreDecoratorBehaviors = {\n strongShortcut: defineBehavior({\n on: 'keyboard.keydown',\n guard: ({snapshot, event}) =>\n isHotkey('mod+b', event.originEvent) &&\n snapshot.context.schema.decorators.some(\n (decorator) => decorator.value === 'strong',\n ),\n actions: [() => [raise({type: 'decorator.toggle', decorator: 'strong'})]],\n }),\n emShortcut: defineBehavior({\n on: 'keyboard.keydown',\n guard: ({snapshot, event}) =>\n isHotkey('mod+i', event.originEvent) &&\n snapshot.context.schema.decorators.some(\n (decorator) => decorator.value === 'em',\n ),\n actions: [() => [raise({type: 'decorator.toggle', decorator: 'em'})]],\n }),\n underlineShortcut: defineBehavior({\n on: 'keyboard.keydown',\n guard: ({snapshot, event}) =>\n isHotkey('mod+u', event.originEvent) &&\n snapshot.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: 'keyboard.keydown',\n guard: ({snapshot, event}) =>\n isHotkey(\"mod+'\", event.originEvent) &&\n snapshot.context.schema.decorators.some(\n (decorator) => decorator.value === 'code',\n ),\n actions: [() => [raise({type: 'decorator.toggle', decorator: 'code'})]],\n }),\n}\n","import * as selectors from '../selectors'\nimport {defineBehavior, raise} from './behavior.types'\n\nconst breakingAtTheEndOfTextBlock = defineBehavior({\n on: 'insert.break',\n guard: ({snapshot}) => {\n const focusTextBlock = selectors.getFocusTextBlock(snapshot)\n const selectionCollapsed = selectors.isSelectionCollapsed(snapshot)\n\n if (!snapshot.context.selection || !focusTextBlock || !selectionCollapsed) {\n return false\n }\n\n const atTheEndOfBlock =\n selectors.isAtTheEndOfBlock(focusTextBlock)(snapshot)\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 ({snapshot}, {focusListItem, focusLevel}) => [\n raise({\n type: 'insert.block',\n block: {\n _type: snapshot.context.schema.block.name,\n _key: snapshot.context.keyGenerator(),\n children: [\n {\n _key: snapshot.context.keyGenerator(),\n _type: snapshot.context.schema.span.name,\n text: '',\n marks: [],\n },\n ],\n markDefs: [],\n listItem: focusListItem,\n level: focusLevel,\n style: snapshot.context.schema.styles[0]?.value,\n },\n placement: 'after',\n }),\n ],\n ],\n})\n\nconst breakingAtTheStartOfTextBlock = defineBehavior({\n on: 'insert.break',\n guard: ({snapshot}) => {\n const focusTextBlock = selectors.getFocusTextBlock(snapshot)\n const selectionCollapsed = selectors.isSelectionCollapsed(snapshot)\n\n if (!snapshot.context.selection || !focusTextBlock || !selectionCollapsed) {\n return false\n }\n\n const focusSpan = selectors.getFocusSpan(snapshot)\n\n const focusDecorators = focusSpan?.node.marks?.filter(\n (mark) =>\n snapshot.context.schema.decorators.some(\n (decorator) => decorator.value === mark,\n ) ?? [],\n )\n const focusAnnotations =\n focusSpan?.node.marks?.filter(\n (mark) =>\n !snapshot.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 =\n selectors.isAtTheStartOfBlock(focusTextBlock)(snapshot)\n\n if (atTheStartOfBlock) {\n return {focusAnnotations, focusDecorators, focusListItem, focusLevel}\n }\n\n return false\n },\n actions: [\n (\n {snapshot},\n {focusAnnotations, focusDecorators, focusListItem, focusLevel},\n ) => [\n raise({\n type: 'insert.block',\n block: {\n _key: snapshot.context.keyGenerator(),\n _type: snapshot.context.schema.block.name,\n children: [\n {\n _key: snapshot.context.keyGenerator(),\n _type: snapshot.context.schema.span.name,\n marks: focusAnnotations.length === 0 ? focusDecorators : [],\n text: '',\n },\n ],\n listItem: focusListItem,\n level: focusLevel,\n style: snapshot.context.schema.styles[0]?.value,\n },\n placement: 'before',\n select: 'none',\n }),\n ],\n ],\n})\n\nexport const coreInsertBreakBehaviors = {\n breakingAtTheEndOfTextBlock,\n breakingAtTheStartOfTextBlock,\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 clearListOnBackspace = defineBehavior({\n on: 'delete.backward',\n guard: ({snapshot}) => {\n const selectionCollapsed = selectors.isSelectionCollapsed(snapshot)\n const focusTextBlock = selectors.getFocusTextBlock(snapshot)\n const focusSpan = selectors.getFocusSpan(snapshot)\n\n if (!selectionCollapsed || !focusTextBlock || !focusSpan) {\n return false\n }\n\n const atTheBeginningOfBLock =\n focusTextBlock.node.children[0]._key === focusSpan.node._key &&\n snapshot.context.selection?.focus.offset === 0\n\n if (atTheBeginningOfBLock && focusTextBlock.node.level === 1) {\n return {focusTextBlock}\n }\n\n return false\n },\n actions: [\n (_, {focusTextBlock}) => [\n raise({\n type: 'block.unset',\n props: ['listItem', 'level'],\n at: focusTextBlock.path,\n }),\n ],\n ],\n})\n\nconst unindentListOnBackspace = defineBehavior({\n on: 'delete.backward',\n guard: ({snapshot}) => {\n const selectionCollapsed = selectors.isSelectionCollapsed(snapshot)\n const focusTextBlock = selectors.getFocusTextBlock(snapshot)\n const focusSpan = selectors.getFocusSpan(snapshot)\n\n if (!selectionCollapsed || !focusTextBlock || !focusSpan) {\n return false\n }\n\n const atTheBeginningOfBLock =\n focusTextBlock.node.children[0]._key === focusSpan.node._key &&\n snapshot.context.selection?.focus.offset === 0\n\n 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: 'block.set',\n props: {level},\n at: focusTextBlock.path,\n }),\n ],\n ],\n})\n\nconst clearListOnEnter = defineBehavior({\n on: 'insert.break',\n guard: ({snapshot}) => {\n const selectionCollapsed = selectors.isSelectionCollapsed(snapshot)\n const focusListBlock = selectors.getFocusListBlock(snapshot)\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: 'block.unset',\n props: ['listItem', 'level'],\n at: focusListBlock.path,\n }),\n ],\n ],\n})\n\nconst indentListOnTab = defineBehavior({\n on: 'keyboard.keydown',\n guard: ({snapshot, event}) => {\n const isTab = isHotkey('Tab', event.originEvent)\n\n if (!isTab) {\n return false\n }\n\n const selectedBlocks = selectors.getSelectedBlocks(snapshot)\n const guards = createGuards(snapshot.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: 'block.set',\n props: {\n level: Math.min(\n MAX_LIST_LEVEL,\n Math.max(1, selectedListBlock.node.level + 1),\n ),\n },\n at: selectedListBlock.path,\n }),\n ),\n ],\n})\n\nconst unindentListOnShiftTab = defineBehavior({\n on: 'keyboard.keydown',\n guard: ({snapshot, event}) => {\n const isShiftTab = isHotkey('Shift+Tab', event.originEvent)\n\n if (!isShiftTab) {\n return false\n }\n\n const selectedBlocks = selectors.getSelectedBlocks(snapshot)\n const guards = createGuards(snapshot.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: 'block.set',\n props: {\n level: Math.min(\n MAX_LIST_LEVEL,\n Math.max(1, selectedListBlock.node.level - 1),\n ),\n },\n at: selectedListBlock.path,\n }),\n ),\n ],\n})\n\nexport const coreListBehaviors = {\n clearListOnBackspace,\n unindentListOnBackspace,\n clearListOnEnter,\n indentListOnTab,\n unindentListOnShiftTab,\n}\n","import {coreAnnotationBehaviors} from './behavior.core.annotations'\nimport {coreBlockObjectBehaviors} from './behavior.core.block-objects'\nimport {coreDecoratorBehaviors} from './behavior.core.decorators'\nimport {coreInsertBreakBehaviors} from './behavior.core.insert-break'\nimport {coreListBehaviors} from './behavior.core.lists'\n\n/**\n * @beta\n */\nexport const coreBehaviors = [\n coreAnnotationBehaviors.addAnnotationOnCollapsedSelection,\n coreDecoratorBehaviors.strongShortcut,\n coreDecoratorBehaviors.emShortcut,\n coreDecoratorBehaviors.underlineShortcut,\n coreDecoratorBehaviors.codeShortcut,\n coreBlockObjectBehaviors.clickingAboveLonelyBlockObject,\n coreBlockObjectBehaviors.clickingBelowLonelyBlockObject,\n coreBlockObjectBehaviors.arrowDownOnLonelyBlockObject,\n coreBlockObjectBehaviors.arrowUpOnLonelyBlockObject,\n coreBlockObjectBehaviors.breakingBlockObject,\n coreBlockObjectBehaviors.deletingEmptyTextBlockAfterBlockObject,\n coreBlockObjectBehaviors.deletingEmptyTextBlockBeforeBlockObject,\n coreListBehaviors.clearListOnBackspace,\n coreListBehaviors.unindentListOnBackspace,\n coreListBehaviors.clearListOnEnter,\n coreListBehaviors.indentListOnTab,\n coreListBehaviors.unindentListOnShiftTab,\n coreInsertBreakBehaviors.breakingAtTheEndOfTextBlock,\n coreInsertBreakBehaviors.breakingAtTheStartOfTextBlock,\n]\n"],"names":["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","event","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","name","toUpperCase","charCodeAt","isClipboardBehaviorEvent","type","startsWith","isDragBehaviorEvent","isInputBehaviorEvent","isKeyboardBehaviorEvent","isMouseBehaviorEvent","isCustomBehaviorEvent","raise","defineBehavior","behavior","addAnnotationOnCollapsedSelection","on","guard","snapshot","selectors","isSelectionCollapsed","caretWordSelection","getCaretWordSelection","context","selection","actions","annotation","coreAnnotationBehaviors","arrowDownOnLonelyBlockObject","isArrowDown","originEvent","focusBlockObject","nextBlock","placement","arrowUpOnLonelyBlockObject","isArrowUp","previousBlock","breakingBlockObject","getFocusBlockObject","clickingAboveLonelyBlockObject","position","isEditor","block","clickingBelowLonelyBlockObject","deletingEmptyTextBlockAfterBlockObject","focusTextBlock","selectionCollapsed","isEmptyTextBlock","node","isPortableTextTextBlock","_","blockPath","path","anchor","offset","focus","deletingEmptyTextBlockBeforeBlockObject","coreBlockObjectBehaviors","coreDecoratorBehaviors","strongShortcut","schema","decorators","some","decorator","value","emShortcut","underlineShortcut","codeShortcut","breakingAtTheEndOfTextBlock","atTheEndOfBlock","focusListItem","listItem","focusLevel","level","_type","_key","keyGenerator","children","span","text","marks","markDefs","style","styles","breakingAtTheStartOfTextBlock","focusSpan","focusDecorators","filter","mark","focusAnnotations","select","coreInsertBreakBehaviors","MAX_LIST_LEVEL","clearListOnBackspace","props","at","unindentListOnBackspace","clearListOnEnter","focusListBlock","indentListOnTab","selectedBlocks","guards","createGuards","selectedListBlocks","flatMap","isListBlock","map","selectedListBlock","Math","min","max","unindentListOnShiftTab","coreListBehaviors","coreBehaviors"],"mappings":"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"}
|
|
@@ -193,7 +193,7 @@ function toSlateRange(selection, editor) {
|
|
|
193
193
|
path: toSlatePath(selection.focus.path, editor),
|
|
194
194
|
offset: selection.focus.offset
|
|
195
195
|
};
|
|
196
|
-
return focus.path.length === 0 || anchor.path.length === 0 ? null : focus ? {
|
|
196
|
+
return focus.path.length === 0 || anchor.path.length === 0 ? null : anchor && focus ? {
|
|
197
197
|
anchor,
|
|
198
198
|
focus
|
|
199
199
|
} : null;
|
|
@@ -2922,14 +2922,12 @@ const insertBreakActionImplementation = ({
|
|
|
2922
2922
|
}) ? removeListItemActionImplementation({
|
|
2923
2923
|
context,
|
|
2924
2924
|
action: {
|
|
2925
|
-
...action
|
|
2926
|
-
type: "list item.remove"
|
|
2925
|
+
...action
|
|
2927
2926
|
}
|
|
2928
2927
|
}) : addListItemActionImplementation({
|
|
2929
2928
|
context,
|
|
2930
2929
|
action: {
|
|
2931
|
-
...action
|
|
2932
|
-
type: "list item.add"
|
|
2930
|
+
...action
|
|
2933
2931
|
}
|
|
2934
2932
|
});
|
|
2935
2933
|
}, removeListItemActionImplementation = ({
|
|
@@ -2986,14 +2984,12 @@ const toggleStyleActionImplementation = ({
|
|
|
2986
2984
|
}) ? removeStyleActionImplementation({
|
|
2987
2985
|
context,
|
|
2988
2986
|
action: {
|
|
2989
|
-
...action
|
|
2990
|
-
type: "style.remove"
|
|
2987
|
+
...action
|
|
2991
2988
|
}
|
|
2992
2989
|
}) : addStyleActionImplementation({
|
|
2993
2990
|
context,
|
|
2994
2991
|
action: {
|
|
2995
|
-
...action
|
|
2996
|
-
type: "style.add"
|
|
2992
|
+
...action
|
|
2997
2993
|
}
|
|
2998
2994
|
});
|
|
2999
2995
|
}, removeStyleActionImplementation = ({
|
|
@@ -3098,10 +3094,6 @@ const decoratorAddActionImplementation = ({
|
|
|
3098
3094
|
},
|
|
3099
3095
|
backward: editorSelection?.backward
|
|
3100
3096
|
}), trimmedSelection = selector_isOverlappingSelection.getTrimmedSelection({
|
|
3101
|
-
beta: {
|
|
3102
|
-
hasTag: () => !1,
|
|
3103
|
-
internalDrag: void 0
|
|
3104
|
-
},
|
|
3105
3097
|
context: {
|
|
3106
3098
|
activeDecorators: [],
|
|
3107
3099
|
converters: [],
|
|
@@ -3626,16 +3618,13 @@ const toggleDecoratorActionImplementation = ({
|
|
|
3626
3618
|
editor: action.editor,
|
|
3627
3619
|
decorator: action.decorator
|
|
3628
3620
|
}) ? removeDecoratorActionImplementation({
|
|
3629
|
-
context,
|
|
3630
3621
|
action: {
|
|
3631
|
-
type: "decorator.remove",
|
|
3632
3622
|
editor: action.editor,
|
|
3633
3623
|
decorator: action.decorator
|
|
3634
3624
|
}
|
|
3635
3625
|
}) : decoratorAddActionImplementation({
|
|
3636
3626
|
context,
|
|
3637
3627
|
action: {
|
|
3638
|
-
type: "decorator.add",
|
|
3639
3628
|
editor: action.editor,
|
|
3640
3629
|
decorator: action.decorator
|
|
3641
3630
|
}
|
|
@@ -3896,7 +3885,6 @@ function createEditableAPI(editor, editorActor) {
|
|
|
3896
3885
|
schema: types2
|
|
3897
3886
|
},
|
|
3898
3887
|
action: {
|
|
3899
|
-
type: "annotation.add",
|
|
3900
3888
|
annotation: {
|
|
3901
3889
|
name: type.name,
|
|
3902
3890
|
value: value ?? {}
|
|
@@ -4123,9 +4111,7 @@ const addAnnotationActionImplementation = ({
|
|
|
4123
4111
|
}
|
|
4124
4112
|
}))
|
|
4125
4113
|
removeAnnotationActionImplementation({
|
|
4126
|
-
context,
|
|
4127
4114
|
action: {
|
|
4128
|
-
type: "annotation.remove",
|
|
4129
4115
|
annotation: action.annotation,
|
|
4130
4116
|
editor: action.editor
|
|
4131
4117
|
}
|
|
@@ -4134,7 +4120,6 @@ const addAnnotationActionImplementation = ({
|
|
|
4134
4120
|
return addAnnotationActionImplementation({
|
|
4135
4121
|
context,
|
|
4136
4122
|
action: {
|
|
4137
|
-
type: "annotation.add",
|
|
4138
4123
|
annotation: action.annotation,
|
|
4139
4124
|
editor: action.editor
|
|
4140
4125
|
}
|
|
@@ -4308,10 +4293,6 @@ const addAnnotationActionImplementation = ({
|
|
|
4308
4293
|
if (!selection)
|
|
4309
4294
|
throw new Error("Unable to find selection from block offsets");
|
|
4310
4295
|
const trimmedSelection = selector_isOverlappingSelection.getTrimmedSelection({
|
|
4311
|
-
beta: {
|
|
4312
|
-
hasTag: () => !1,
|
|
4313
|
-
internalDrag: void 0
|
|
4314
|
-
},
|
|
4315
4296
|
context: {
|
|
4316
4297
|
converters: [],
|
|
4317
4298
|
schema: context.schema,
|
|
@@ -4530,9 +4511,7 @@ const selectActionImplementation = ({
|
|
|
4530
4511
|
return;
|
|
4531
4512
|
}
|
|
4532
4513
|
selectActionImplementation({
|
|
4533
|
-
context,
|
|
4534
4514
|
action: {
|
|
4535
|
-
type: "select",
|
|
4536
4515
|
selection: newSelection,
|
|
4537
4516
|
editor: action.editor
|
|
4538
4517
|
}
|
|
@@ -4559,9 +4538,7 @@ const selectActionImplementation = ({
|
|
|
4559
4538
|
return;
|
|
4560
4539
|
}
|
|
4561
4540
|
selectActionImplementation({
|
|
4562
|
-
context,
|
|
4563
4541
|
action: {
|
|
4564
|
-
type: "select",
|
|
4565
4542
|
selection: newSelection,
|
|
4566
4543
|
editor: action.editor
|
|
4567
4544
|
}
|
|
@@ -4622,13 +4599,11 @@ const selectActionImplementation = ({
|
|
|
4622
4599
|
index === 0 ? (insertBreakActionImplementation({
|
|
4623
4600
|
context,
|
|
4624
4601
|
action: {
|
|
4625
|
-
type: "insert.break",
|
|
4626
4602
|
editor: action.editor
|
|
4627
4603
|
}
|
|
4628
4604
|
}), selectPreviousBlockActionImplementation({
|
|
4629
4605
|
context,
|
|
4630
4606
|
action: {
|
|
4631
|
-
type: "select.previous block",
|
|
4632
4607
|
editor: action.editor,
|
|
4633
4608
|
select: "end"
|
|
4634
4609
|
}
|
|
@@ -4641,7 +4616,6 @@ const selectActionImplementation = ({
|
|
|
4641
4616
|
})) : index === fragment.length - 1 ? (selectNextBlockActionImplementation({
|
|
4642
4617
|
context,
|
|
4643
4618
|
action: {
|
|
4644
|
-
type: "select.next block",
|
|
4645
4619
|
editor: action.editor,
|
|
4646
4620
|
select: "start"
|
|
4647
4621
|
}
|
|
@@ -4674,7 +4648,6 @@ const selectActionImplementation = ({
|
|
|
4674
4648
|
insertBlocksActionImplementation({
|
|
4675
4649
|
context,
|
|
4676
4650
|
action: {
|
|
4677
|
-
type: "insert.blocks",
|
|
4678
4651
|
blocks: action.data,
|
|
4679
4652
|
editor: action.editor,
|
|
4680
4653
|
placement: "auto"
|
|
@@ -4760,7 +4733,6 @@ const selectActionImplementation = ({
|
|
|
4760
4733
|
insertBlockActionImplementation({
|
|
4761
4734
|
context,
|
|
4762
4735
|
action: {
|
|
4763
|
-
type: "insert.block",
|
|
4764
4736
|
block: {
|
|
4765
4737
|
_key: context.keyGenerator(),
|
|
4766
4738
|
_type: action.blockObject.name,
|
|
@@ -4781,7 +4753,6 @@ const selectActionImplementation = ({
|
|
|
4781
4753
|
insertBlockActionImplementation({
|
|
4782
4754
|
context,
|
|
4783
4755
|
action: {
|
|
4784
|
-
type: "insert.block",
|
|
4785
4756
|
block: {
|
|
4786
4757
|
_key: context.keyGenerator(),
|
|
4787
4758
|
_type: context.schema.block.name,
|
|
@@ -4830,9 +4801,7 @@ const selectActionImplementation = ({
|
|
|
4830
4801
|
return;
|
|
4831
4802
|
}
|
|
4832
4803
|
moveBlockActionImplementation({
|
|
4833
|
-
context,
|
|
4834
4804
|
action: {
|
|
4835
|
-
type: "move.block",
|
|
4836
4805
|
at: action.at,
|
|
4837
4806
|
to: [{
|
|
4838
4807
|
_key: destinationBlockKey
|
|
@@ -4862,9 +4831,7 @@ const selectActionImplementation = ({
|
|
|
4862
4831
|
return;
|
|
4863
4832
|
}
|
|
4864
4833
|
moveBlockActionImplementation({
|
|
4865
|
-
context,
|
|
4866
4834
|
action: {
|
|
4867
|
-
type: "move.block",
|
|
4868
4835
|
at: action.at,
|
|
4869
4836
|
to: [{
|
|
4870
4837
|
_key: destinationBlockKey
|
|
@@ -4882,13 +4849,10 @@ const selectActionImplementation = ({
|
|
|
4882
4849
|
action
|
|
4883
4850
|
}) => {
|
|
4884
4851
|
dataTransferSetActionImplementation({
|
|
4885
|
-
context,
|
|
4886
4852
|
action: {
|
|
4887
|
-
type: "data transfer.set",
|
|
4888
4853
|
data: action.data,
|
|
4889
4854
|
dataTransfer: action.originEvent.originEvent.dataTransfer,
|
|
4890
|
-
mimeType: action.mimeType
|
|
4891
|
-
editor: action.editor
|
|
4855
|
+
mimeType: action.mimeType
|
|
4892
4856
|
}
|
|
4893
4857
|
});
|
|
4894
4858
|
}, behaviorActionImplementations = {
|
|
@@ -5345,8 +5309,22 @@ function createWithEventListeners(editorActor, subscriptions) {
|
|
|
5345
5309
|
},
|
|
5346
5310
|
editor
|
|
5347
5311
|
});
|
|
5348
|
-
}, editor.insertData = () => {
|
|
5349
|
-
|
|
5312
|
+
}, editor.insertData = (dataTransfer) => {
|
|
5313
|
+
if (isApplyingBehaviorActions(editor))
|
|
5314
|
+
throw new Error("Unexpected call to .insertData(...)");
|
|
5315
|
+
editorActor.send({
|
|
5316
|
+
type: "behavior event",
|
|
5317
|
+
behaviorEvent: {
|
|
5318
|
+
type: "deserialize",
|
|
5319
|
+
originEvent: {
|
|
5320
|
+
type: "input.*",
|
|
5321
|
+
originEvent: {
|
|
5322
|
+
dataTransfer
|
|
5323
|
+
}
|
|
5324
|
+
}
|
|
5325
|
+
},
|
|
5326
|
+
editor
|
|
5327
|
+
});
|
|
5350
5328
|
}, editor.insertSoftBreak = () => {
|
|
5351
5329
|
if (isApplyingBehaviorActions(editor)) {
|
|
5352
5330
|
insertSoftBreakActionImplementation({
|
|
@@ -5355,7 +5333,6 @@ function createWithEventListeners(editorActor, subscriptions) {
|
|
|
5355
5333
|
schema: editorActor.getSnapshot().context.schema
|
|
5356
5334
|
},
|
|
5357
5335
|
action: {
|
|
5358
|
-
type: "insert.soft break",
|
|
5359
5336
|
editor
|
|
5360
5337
|
}
|
|
5361
5338
|
});
|
|
@@ -6387,13 +6364,11 @@ const keyIs = {
|
|
|
6387
6364
|
selection: dragOrigin.selection
|
|
6388
6365
|
}
|
|
6389
6366
|
}) : !1, draggingEntireBlocks = selector_isOverlappingSelection.isSelectingEntireBlocks({
|
|
6390
|
-
...snapshot,
|
|
6391
6367
|
context: {
|
|
6392
6368
|
...snapshot.context,
|
|
6393
6369
|
selection: dragOrigin.selection
|
|
6394
6370
|
}
|
|
6395
6371
|
}), draggedBlocks = selector_isAtTheStartOfBlock.getSelectedBlocks({
|
|
6396
|
-
...snapshot,
|
|
6397
6372
|
context: {
|
|
6398
6373
|
...snapshot.context,
|
|
6399
6374
|
selection: dragOrigin.selection
|
|
@@ -6402,7 +6377,8 @@ const keyIs = {
|
|
|
6402
6377
|
return droppingOnDragOrigin ? !1 : {
|
|
6403
6378
|
draggingEntireBlocks,
|
|
6404
6379
|
draggedBlocks,
|
|
6405
|
-
dragOrigin
|
|
6380
|
+
dragOrigin,
|
|
6381
|
+
originEvent: event.originEvent
|
|
6406
6382
|
};
|
|
6407
6383
|
},
|
|
6408
6384
|
actions: [({
|
|
@@ -6410,11 +6386,12 @@ const keyIs = {
|
|
|
6410
6386
|
}, {
|
|
6411
6387
|
draggingEntireBlocks,
|
|
6412
6388
|
draggedBlocks,
|
|
6413
|
-
dragOrigin
|
|
6389
|
+
dragOrigin,
|
|
6390
|
+
originEvent
|
|
6414
6391
|
}) => [behavior_core.raise({
|
|
6415
6392
|
type: "insert.blocks",
|
|
6416
6393
|
blocks: event.data,
|
|
6417
|
-
placement: draggingEntireBlocks ?
|
|
6394
|
+
placement: draggingEntireBlocks ? originEvent.position.block === "start" ? "before" : originEvent.position.block === "end" ? "after" : "auto" : "auto"
|
|
6418
6395
|
}), ...draggingEntireBlocks ? draggedBlocks.map((block) => behavior_core.raise({
|
|
6419
6396
|
type: "delete.block",
|
|
6420
6397
|
blockPath: block.path
|
|
@@ -6457,6 +6434,14 @@ const keyIs = {
|
|
|
6457
6434
|
type: "deserialize",
|
|
6458
6435
|
originEvent: event
|
|
6459
6436
|
})]]
|
|
6437
|
+
}), behavior_core.defineBehavior({
|
|
6438
|
+
on: "input.*",
|
|
6439
|
+
actions: [({
|
|
6440
|
+
event
|
|
6441
|
+
}) => [behavior_core.raise({
|
|
6442
|
+
type: "deserialize",
|
|
6443
|
+
originEvent: event
|
|
6444
|
+
})]]
|
|
6460
6445
|
}), toggleAnnotationOff, toggleAnnotationOn, toggleDecoratorOff, toggleDecoratorOn, toggleListItemOff, toggleListItemOn, toggleStyleOff, toggleStyleOn, raiseDeserializationSuccessOrFailure, raiseSerializationSuccessOrFailure, raiseInsertSoftBreak];
|
|
6461
6446
|
function createEditorSnapshot({
|
|
6462
6447
|
converters,
|
|
@@ -6565,10 +6550,10 @@ const editorMachine = xstate.setup({
|
|
|
6565
6550
|
self
|
|
6566
6551
|
}) => {
|
|
6567
6552
|
xstate.assertEvent(event, ["behavior event", "custom behavior event"]);
|
|
6568
|
-
const defaultAction = event.type === "custom behavior event" || behavior_core.isClipboardBehaviorEvent(event.behaviorEvent) || behavior_core.isDragBehaviorEvent(event.behaviorEvent) || behavior_core.
|
|
6553
|
+
const defaultAction = event.type === "custom behavior event" || behavior_core.isClipboardBehaviorEvent(event.behaviorEvent) || behavior_core.isDragBehaviorEvent(event.behaviorEvent) || behavior_core.isInputBehaviorEvent(event.behaviorEvent) || behavior_core.isKeyboardBehaviorEvent(event.behaviorEvent) || behavior_core.isMouseBehaviorEvent(event.behaviorEvent) || event.behaviorEvent.type === "deserialize" || event.behaviorEvent.type === "serialize" ? void 0 : {
|
|
6569
6554
|
...event.behaviorEvent,
|
|
6570
6555
|
editor: event.editor
|
|
6571
|
-
}, defaultActionCallback = event.type === "behavior event" ? event.defaultActionCallback : void 0, eventBehaviors = [...context.behaviors.values(), ...defaultBehaviors].filter((behavior) => behavior.on === "*" ? !0 : behavior_core.isClipboardBehaviorEvent(event.behaviorEvent) ? behavior.on === "clipboard.*" || behavior.on === event.behaviorEvent.type : behavior_core.isDragBehaviorEvent(event.behaviorEvent) ? behavior.on === "drag.*" || behavior.on === event.behaviorEvent.type : behavior_core.isKeyboardBehaviorEvent(event.behaviorEvent) ? behavior.on === "keyboard.*" || behavior.on === event.behaviorEvent.type : behavior_core.isMouseBehaviorEvent(event.behaviorEvent) && behavior.on === "mouse.*" || behavior.on === event.behaviorEvent.type);
|
|
6556
|
+
}, defaultActionCallback = event.type === "behavior event" ? event.defaultActionCallback : void 0, eventBehaviors = [...context.behaviors.values(), ...defaultBehaviors].filter((behavior) => behavior.on === "*" ? !0 : behavior_core.isClipboardBehaviorEvent(event.behaviorEvent) ? behavior.on === "clipboard.*" || behavior.on === event.behaviorEvent.type : behavior_core.isDragBehaviorEvent(event.behaviorEvent) ? behavior.on === "drag.*" || behavior.on === event.behaviorEvent.type : behavior_core.isInputBehaviorEvent(event.behaviorEvent) ? behavior.on === "input.*" : behavior_core.isKeyboardBehaviorEvent(event.behaviorEvent) ? behavior.on === "keyboard.*" || behavior.on === event.behaviorEvent.type : behavior_core.isMouseBehaviorEvent(event.behaviorEvent) && behavior.on === "mouse.*" || behavior.on === event.behaviorEvent.type);
|
|
6572
6557
|
if (eventBehaviors.length === 0) {
|
|
6573
6558
|
if (defaultActionCallback) {
|
|
6574
6559
|
withApplyingBehaviorActions(event.editor, () => {
|