@portabletext/editor 1.47.11 → 1.47.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/lib/_chunks-cjs/behavior.core.cjs +61 -3
  2. package/lib/_chunks-cjs/behavior.core.cjs.map +1 -1
  3. package/lib/_chunks-cjs/editor-provider.cjs +88 -58
  4. package/lib/_chunks-cjs/editor-provider.cjs.map +1 -1
  5. package/lib/_chunks-cjs/util.get-selection-start-point.cjs +10 -0
  6. package/lib/_chunks-cjs/util.get-selection-start-point.cjs.map +1 -0
  7. package/lib/_chunks-cjs/util.selection-point-to-block-offset.cjs +0 -8
  8. package/lib/_chunks-cjs/util.selection-point-to-block-offset.cjs.map +1 -1
  9. package/lib/_chunks-es/behavior.core.js +63 -4
  10. package/lib/_chunks-es/behavior.core.js.map +1 -1
  11. package/lib/_chunks-es/editor-provider.js +90 -59
  12. package/lib/_chunks-es/editor-provider.js.map +1 -1
  13. package/lib/_chunks-es/util.get-selection-start-point.js +11 -0
  14. package/lib/_chunks-es/util.get-selection-start-point.js.map +1 -0
  15. package/lib/_chunks-es/util.selection-point-to-block-offset.js +0 -8
  16. package/lib/_chunks-es/util.selection-point-to-block-offset.js.map +1 -1
  17. package/lib/behaviors/index.d.cts +4876 -288
  18. package/lib/behaviors/index.d.ts +4876 -288
  19. package/lib/index.cjs +3 -3
  20. package/lib/index.cjs.map +1 -1
  21. package/lib/index.d.cts +29 -42
  22. package/lib/index.d.ts +29 -42
  23. package/lib/index.js +1 -1
  24. package/lib/plugins/index.cjs +0 -9
  25. package/lib/plugins/index.cjs.map +1 -1
  26. package/lib/plugins/index.d.cts +29 -42
  27. package/lib/plugins/index.d.ts +29 -42
  28. package/lib/plugins/index.js +0 -9
  29. package/lib/plugins/index.js.map +1 -1
  30. package/lib/selectors/index.d.cts +29 -41
  31. package/lib/selectors/index.d.ts +29 -41
  32. package/lib/utils/index.cjs +3 -3
  33. package/lib/utils/index.d.cts +29 -41
  34. package/lib/utils/index.d.ts +29 -41
  35. package/lib/utils/index.js +2 -1
  36. package/lib/utils/index.js.map +1 -1
  37. package/package.json +6 -6
  38. package/src/behavior-actions/behavior.action.insert.block.ts +136 -45
  39. package/src/behaviors/behavior.abstract.insert.ts +2 -2
  40. package/src/behaviors/behavior.abstract.split.ts +2 -46
  41. package/src/behaviors/behavior.core.insert-break.ts +113 -0
  42. package/src/behaviors/behavior.core.ts +2 -0
  43. package/src/behaviors/behavior.perform-event.ts +2 -7
  44. package/src/behaviors/behavior.types.action.ts +7 -13
  45. package/src/behaviors/behavior.types.event.ts +31 -33
  46. package/src/internal-utils/slate-utils.ts +50 -1
  47. package/src/plugins/plugin.one-line.tsx +0 -7
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
- var selector_isOverlappingSelection = require("./selector.is-overlapping-selection.cjs"), types = require("@sanity/types"), util_sliceBlocks = require("./util.slice-blocks.cjs");
2
+ var selector_isOverlappingSelection = require("./selector.is-overlapping-selection.cjs"), types = require("@sanity/types"), util_sliceBlocks = require("./util.slice-blocks.cjs"), util_getSelectionStartPoint = require("./util.get-selection-start-point.cjs");
3
3
  function execute(event) {
4
4
  return {
5
5
  type: "execute",
@@ -506,9 +506,67 @@ const arrowDownOnLonelyBlockObject = {
506
506
  placement: "before",
507
507
  select: "none"
508
508
  })]]
509
+ }, breakingEntireDocument = {
510
+ on: "insert.break",
511
+ guard: ({
512
+ snapshot
513
+ }) => {
514
+ if (!snapshot.context.selection || !selector_isOverlappingSelection.isSelectionExpanded(snapshot))
515
+ return !1;
516
+ const firstBlock = selector_isOverlappingSelection.getFirstBlock(snapshot), lastBlock = selector_isOverlappingSelection.getLastBlock(snapshot);
517
+ if (!firstBlock || !lastBlock)
518
+ return !1;
519
+ const firstBlockStartPoint = util_sliceBlocks.getBlockStartPoint(firstBlock), selectionStartPoint = util_getSelectionStartPoint.getSelectionStartPoint(snapshot.context.selection), lastBlockEndPoint = util_sliceBlocks.getBlockEndPoint(lastBlock), selectionEndPoint = util_getSelectionStartPoint.getSelectionEndPoint(snapshot.context.selection);
520
+ return util_sliceBlocks.isEqualSelectionPoints(firstBlockStartPoint, selectionStartPoint) && util_sliceBlocks.isEqualSelectionPoints(lastBlockEndPoint, selectionEndPoint) ? {
521
+ selection: snapshot.context.selection
522
+ } : !1;
523
+ },
524
+ actions: [(_, {
525
+ selection
526
+ }) => [raise({
527
+ type: "delete",
528
+ at: selection
529
+ })]]
530
+ }, breakingEntireBlocks = {
531
+ on: "insert.break",
532
+ guard: ({
533
+ snapshot
534
+ }) => {
535
+ if (!snapshot.context.selection || !selector_isOverlappingSelection.isSelectionExpanded(snapshot))
536
+ return !1;
537
+ const selectedBlocks = selector_isOverlappingSelection.getSelectedBlocks(snapshot), selectionStartBlock = selector_isOverlappingSelection.getSelectionStartBlock(snapshot), selectionEndBlock = selector_isOverlappingSelection.getSelectionEndBlock(snapshot);
538
+ if (!selectionStartBlock || !selectionEndBlock)
539
+ return !1;
540
+ const startBlockStartPoint = util_sliceBlocks.getBlockStartPoint(selectionStartBlock), selectionStartPoint = util_getSelectionStartPoint.getSelectionStartPoint(snapshot.context.selection), endBlockEndPoint = util_sliceBlocks.getBlockEndPoint(selectionEndBlock), selectionEndPoint = util_getSelectionStartPoint.getSelectionEndPoint(snapshot.context.selection);
541
+ return util_sliceBlocks.isEqualSelectionPoints(selectionStartPoint, startBlockStartPoint) && util_sliceBlocks.isEqualSelectionPoints(selectionEndPoint, endBlockEndPoint) ? {
542
+ selectedBlocks
543
+ } : !1;
544
+ },
545
+ actions: [({
546
+ snapshot
547
+ }, {
548
+ selectedBlocks
549
+ }) => [raise({
550
+ type: "insert.block",
551
+ block: {
552
+ _type: snapshot.context.schema.block.name,
553
+ children: [{
554
+ _type: snapshot.context.schema.span.name,
555
+ text: "",
556
+ marks: []
557
+ }]
558
+ },
559
+ placement: "before",
560
+ select: "start"
561
+ }), ...selectedBlocks.map((block) => raise({
562
+ type: "delete.block",
563
+ at: block.path
564
+ }))]]
509
565
  }, coreInsertBreakBehaviors = {
510
566
  breakingAtTheEndOfTextBlock,
511
- breakingAtTheStartOfTextBlock
567
+ breakingAtTheStartOfTextBlock,
568
+ breakingEntireDocument,
569
+ breakingEntireBlocks
512
570
  }, MAX_LIST_LEVEL = 10, clearListOnBackspace = {
513
571
  on: "delete.backward",
514
572
  guard: ({
@@ -620,7 +678,7 @@ const arrowDownOnLonelyBlockObject = {
620
678
  clearListOnEnter,
621
679
  indentListOnTab,
622
680
  unindentListOnShiftTab
623
- }, coreBehaviors = [coreAnnotationBehaviors.addAnnotationOnCollapsedSelection, coreDecoratorBehaviors.strongShortcut, coreDecoratorBehaviors.emShortcut, coreDecoratorBehaviors.underlineShortcut, coreDecoratorBehaviors.codeShortcut, ...coreDndBehaviors, coreBlockObjectBehaviors.clickingAboveLonelyBlockObject, coreBlockObjectBehaviors.clickingBelowLonelyBlockObject, coreBlockObjectBehaviors.arrowDownOnLonelyBlockObject, coreBlockObjectBehaviors.arrowUpOnLonelyBlockObject, coreBlockObjectBehaviors.breakingBlockObject, coreBlockObjectBehaviors.deletingEmptyTextBlockAfterBlockObject, coreBlockObjectBehaviors.deletingEmptyTextBlockBeforeBlockObject, coreListBehaviors.clearListOnBackspace, coreListBehaviors.unindentListOnBackspace, coreListBehaviors.clearListOnEnter, coreListBehaviors.indentListOnTab, coreListBehaviors.unindentListOnShiftTab, coreInsertBreakBehaviors.breakingAtTheEndOfTextBlock, coreInsertBreakBehaviors.breakingAtTheStartOfTextBlock];
681
+ }, coreBehaviors = [coreAnnotationBehaviors.addAnnotationOnCollapsedSelection, coreDecoratorBehaviors.strongShortcut, coreDecoratorBehaviors.emShortcut, coreDecoratorBehaviors.underlineShortcut, coreDecoratorBehaviors.codeShortcut, ...coreDndBehaviors, coreBlockObjectBehaviors.clickingAboveLonelyBlockObject, coreBlockObjectBehaviors.clickingBelowLonelyBlockObject, coreBlockObjectBehaviors.arrowDownOnLonelyBlockObject, coreBlockObjectBehaviors.arrowUpOnLonelyBlockObject, coreBlockObjectBehaviors.breakingBlockObject, coreBlockObjectBehaviors.deletingEmptyTextBlockAfterBlockObject, coreBlockObjectBehaviors.deletingEmptyTextBlockBeforeBlockObject, coreListBehaviors.clearListOnBackspace, coreListBehaviors.unindentListOnBackspace, coreListBehaviors.clearListOnEnter, coreListBehaviors.indentListOnTab, coreListBehaviors.unindentListOnShiftTab, coreInsertBreakBehaviors.breakingAtTheEndOfTextBlock, coreInsertBreakBehaviors.breakingAtTheStartOfTextBlock, coreInsertBreakBehaviors.breakingEntireDocument, coreInsertBreakBehaviors.breakingEntireBlocks];
624
682
  exports.coreBehaviors = coreBehaviors;
625
683
  exports.defineBehavior = defineBehavior;
626
684
  exports.effect = effect;
@@ -1 +1 @@
1
- {"version":3,"file":"behavior.core.cjs","sources":["../../src/behaviors/behavior.types.action.ts","../../src/behaviors/behavior.types.behavior.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.dnd.ts","../../src/behaviors/behavior.core.insert-break.ts","../../src/behaviors/behavior.core.lists.ts","../../src/behaviors/behavior.core.ts"],"sourcesContent":["import type {EditorSnapshot} from '../editor/editor-snapshot'\nimport type {PickFromUnion} from '../type-utils'\nimport type {PortableTextSlateEditor} from '../types/editor'\nimport type {\n AbstractBehaviorEvent,\n CustomBehaviorEvent,\n SyntheticBehaviorEvent,\n} from './behavior.types.event'\n\n/**\n * @beta\n */\nexport type BehaviorAction =\n | {\n type: 'execute'\n event:\n | AbstractBehaviorEvent\n | SyntheticBehaviorEvent\n | CustomBehaviorEvent\n }\n | {\n type: 'raise'\n event:\n | AbstractBehaviorEvent\n | SyntheticBehaviorEvent\n | CustomBehaviorEvent\n }\n | {\n type: 'noop'\n }\n | {\n type: 'effect'\n effect: () => void\n }\n\n/**\n * @beta\n */\nexport function execute(\n event: AbstractBehaviorEvent | SyntheticBehaviorEvent | CustomBehaviorEvent,\n): PickFromUnion<BehaviorAction, 'type', 'execute'> {\n return {type: 'execute', event}\n}\n\n/**\n * @beta\n */\nexport function raise(\n event: AbstractBehaviorEvent | SyntheticBehaviorEvent | CustomBehaviorEvent,\n): PickFromUnion<BehaviorAction, 'type', 'raise'> {\n return {type: 'raise', event}\n}\n\n/**\n * @beta\n */\nexport function effect(\n effect: () => void,\n): PickFromUnion<BehaviorAction, 'type', 'effect'> {\n return {type: 'effect', effect}\n}\n\n/**\n * @beta\n */\nexport function noop(): PickFromUnion<BehaviorAction, 'type', 'noop'> {\n return {type: 'noop'}\n}\n\n/**\n * @beta\n */\nexport type BehaviorActionSet<TBehaviorEvent, TGuardResponse> = (\n payload: {\n snapshot: EditorSnapshot\n event: TBehaviorEvent\n },\n guardResponse: TGuardResponse,\n) => Array<BehaviorAction>\n\nexport type InternalBehaviorAction = (\n | SyntheticBehaviorEvent\n | {type: 'noop'}\n | {type: 'effect'; effect: () => void}\n) & {\n editor: PortableTextSlateEditor\n}\n","import type {BehaviorActionSet} from './behavior.types.action'\nimport type {\n BehaviorEvent,\n BehaviorEventTypeNamespace,\n CustomBehaviorEvent,\n ResolveBehaviorEvent,\n} from './behavior.types.event'\nimport type {BehaviorGuard} from './behavior.types.guard'\n\n/**\n * @beta\n */\nexport type Behavior<\n TBehaviorEventType extends\n | '*'\n | `${BehaviorEventTypeNamespace}.*`\n | BehaviorEvent['type'] =\n | '*'\n | `${BehaviorEventTypeNamespace}.*`\n | BehaviorEvent['type'],\n TGuardResponse = true,\n TBehaviorEvent extends\n ResolveBehaviorEvent<TBehaviorEventType> = ResolveBehaviorEvent<TBehaviorEventType>,\n> = {\n /**\n * 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 * Each set represents a step in the history stack.\n */\n actions: Array<BehaviorActionSet<TBehaviorEvent, TGuardResponse>>\n}\n\n/**\n * @beta\n *\n * @example\n *\n * ```tsx\n * const noLowerCaseA = defineBehavior({\n * on: 'insert.text',\n * guard: ({event, snapshot}) => event.text === 'a',\n * actions: [({event, snapshot}) => [{type: 'insert.text', text: 'A'}]],\n * })\n * ```\n *\n */\nexport function defineBehavior<\n TPayload extends Record<string, unknown>,\n TBehaviorEventType extends\n | '*'\n | `${BehaviorEventTypeNamespace}.*`\n | BehaviorEvent['type'] = CustomBehaviorEvent['type'],\n TGuardResponse = true,\n>(\n behavior: Behavior<\n TBehaviorEventType,\n TGuardResponse,\n ResolveBehaviorEvent<TBehaviorEventType, TPayload>\n >,\n): Behavior\nexport function defineBehavior<\n TPayload extends never = never,\n TBehaviorEventType extends\n | '*'\n | `${BehaviorEventTypeNamespace}.*`\n | BehaviorEvent['type'] = BehaviorEvent['type'],\n TGuardResponse = true,\n TBehaviorEvent extends ResolveBehaviorEvent<\n TBehaviorEventType,\n TPayload\n > = ResolveBehaviorEvent<TBehaviorEventType, TPayload>,\n>(\n behavior: Behavior<TBehaviorEventType, TGuardResponse, TBehaviorEvent>,\n): Behavior {\n return behavior as unknown as Behavior\n}\n","import * as selectors from '../selectors'\nimport {raise} from './behavior.types.action'\nimport {defineBehavior} from './behavior.types.behavior'\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', at: caretWordSelection}),\n raise({type: 'annotation.add', annotation: event.annotation}),\n ],\n ],\n})\n\nexport const coreAnnotationBehaviors = {\n addAnnotationOnCollapsedSelection,\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 {raise} from './behavior.types.action'\nimport {defineBehavior} from './behavior.types.behavior'\n\nconst arrowDownOnLonelyBlockObject = defineBehavior({\n on: 'keyboard.keydown',\n guard: ({snapshot, event}) => {\n const isArrowDown = isHotkey('ArrowDown', event.originEvent)\n\n if (!isArrowDown) {\n return false\n }\n\n const collapsedSelection = selectors.isSelectionCollapsed(snapshot)\n\n if (!collapsedSelection) {\n return false\n }\n\n const focusBlockObject = selectors.getFocusBlockObject(snapshot)\n const nextBlock = selectors.getNextBlock(snapshot)\n\n return focusBlockObject && !nextBlock\n },\n actions: [\n ({snapshot}) => [\n raise({\n type: 'insert.block',\n block: {\n _type: snapshot.context.schema.block.name,\n },\n placement: 'after',\n }),\n ],\n ],\n})\n\nconst arrowUpOnLonelyBlockObject = defineBehavior({\n on: 'keyboard.keydown',\n guard: ({snapshot, event}) => {\n const isArrowUp = isHotkey('ArrowUp', event.originEvent)\n\n if (!isArrowUp) {\n return false\n }\n\n const collapsedSelection = selectors.isSelectionCollapsed(snapshot)\n\n if (!collapsedSelection) {\n return false\n }\n\n const focusBlockObject = selectors.getFocusBlockObject(snapshot)\n const previousBlock = selectors.getPreviousBlock(snapshot)\n\n return focusBlockObject && !previousBlock\n },\n actions: [\n ({snapshot}) => [\n raise({\n type: 'insert.block',\n block: {\n _type: snapshot.context.schema.block.name,\n },\n placement: 'before',\n }),\n ],\n ],\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: [\n ({snapshot}) => [\n raise({\n type: 'insert.block',\n block: {\n _type: snapshot.context.schema.block.name,\n },\n placement: 'after',\n }),\n ],\n ],\n})\n\nconst clickingAboveLonelyBlockObject = defineBehavior({\n on: 'mouse.click',\n guard: ({snapshot, event}) => {\n if (snapshot.context.readOnly) {\n return false\n }\n\n if (\n snapshot.context.selection &&\n !selectors.isSelectionCollapsed(snapshot)\n ) {\n return false\n }\n\n const focusBlockObject = selectors.getFocusBlockObject({\n ...snapshot,\n context: {\n ...snapshot.context,\n selection: event.position.selection,\n },\n })\n const previousBlock = selectors.getPreviousBlock({\n ...snapshot,\n context: {\n ...snapshot.context,\n selection: event.position.selection,\n },\n })\n\n return (\n event.position.isEditor &&\n event.position.block === 'start' &&\n focusBlockObject &&\n !previousBlock\n )\n },\n actions: [\n ({snapshot, event}) => [\n raise({\n type: 'select',\n at: event.position.selection,\n }),\n raise({\n type: 'insert.block',\n block: {\n _type: snapshot.context.schema.block.name,\n },\n placement: 'before',\n select: 'start',\n }),\n ],\n ],\n})\n\nconst clickingBelowLonelyBlockObject = defineBehavior({\n on: 'mouse.click',\n guard: ({snapshot, event}) => {\n if (snapshot.context.readOnly) {\n return false\n }\n\n if (\n snapshot.context.selection &&\n !selectors.isSelectionCollapsed(snapshot)\n ) {\n return false\n }\n\n const focusBlockObject = selectors.getFocusBlockObject({\n ...snapshot,\n context: {\n ...snapshot.context,\n selection: event.position.selection,\n },\n })\n const nextBlock = selectors.getNextBlock({\n ...snapshot,\n context: {\n ...snapshot.context,\n selection: event.position.selection,\n },\n })\n\n return (\n event.position.isEditor &&\n event.position.block === 'end' &&\n focusBlockObject &&\n !nextBlock\n )\n },\n actions: [\n ({snapshot, event}) => [\n raise({\n type: 'select',\n at: event.position.selection,\n }),\n raise({\n type: 'insert.block',\n block: {\n _type: snapshot.context.schema.block.name,\n },\n placement: 'after',\n select: 'start',\n }),\n ],\n ],\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 at: focusTextBlock.path,\n }),\n raise({\n type: 'select',\n at: {\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 at: focusTextBlock.path,\n }),\n raise({\n type: 'select',\n at: {\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 {raise} from './behavior.types.action'\nimport {defineBehavior} from './behavior.types.behavior'\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.name === '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.name === '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.name === '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.name === 'code',\n ),\n actions: [() => [raise({type: 'decorator.toggle', decorator: 'code'})]],\n }),\n}\n","import * as selectors from '../selectors'\nimport {defineBehavior} from './behavior.types.behavior'\n\nexport const coreDndBehaviors = [\n /**\n * When dragging over the drag origin, we don't want to show the caret in the\n * text.\n */\n defineBehavior({\n on: 'drag.dragover',\n guard: ({snapshot, event}) => {\n const dragOrigin = snapshot.beta.internalDrag?.origin\n const draggingOverDragOrigin = dragOrigin\n ? selectors.isOverlappingSelection(event.position.selection)({\n ...snapshot,\n context: {\n ...snapshot.context,\n selection: dragOrigin.selection,\n },\n })\n : false\n\n return draggingOverDragOrigin\n },\n actions: [() => [{type: 'noop'}]],\n }),\n]\n","import * as selectors from '../selectors'\nimport {raise} from './behavior.types.action'\nimport {defineBehavior} from './behavior.types.behavior'\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 children: [\n {\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]?.name,\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.name === mark,\n ) ?? [],\n )\n const focusAnnotations =\n focusSpan?.node.marks?.filter(\n (mark) =>\n !snapshot.context.schema.decorators.some(\n (decorator) => decorator.name === 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 _type: snapshot.context.schema.block.name,\n children: [\n {\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]?.name,\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 {raise} from './behavior.types.action'\nimport {defineBehavior} from './behavior.types.behavior'\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 {coreDndBehaviors} from './behavior.core.dnd'\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 ...coreDndBehaviors,\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":["execute","event","type","raise","effect","noop","defineBehavior","behavior","addAnnotationOnCollapsedSelection","on","guard","snapshot","selectors","isSelectionCollapsed","caretWordSelection","getCaretWordSelection","context","selection","actions","at","annotation","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","name","toUpperCase","charCodeAt","arrowDownOnLonelyBlockObject","originEvent","focusBlockObject","nextBlock","block","_type","schema","placement","arrowUpOnLonelyBlockObject","previousBlock","breakingBlockObject","getFocusBlockObject","clickingAboveLonelyBlockObject","readOnly","position","isEditor","select","clickingBelowLonelyBlockObject","deletingEmptyTextBlockAfterBlockObject","focusTextBlock","selectionCollapsed","isEmptyTextBlock","node","isPortableTextTextBlock","_","path","anchor","offset","focus","deletingEmptyTextBlockBeforeBlockObject","coreBlockObjectBehaviors","coreDecoratorBehaviors","strongShortcut","decorators","some","decorator","emShortcut","underlineShortcut","codeShortcut","coreDndBehaviors","dragOrigin","beta","internalDrag","origin","isOverlappingSelection","breakingAtTheEndOfTextBlock","atTheEndOfBlock","focusListItem","listItem","focusLevel","level","children","span","text","marks","markDefs","style","styles","breakingAtTheStartOfTextBlock","focusSpan","focusDecorators","filter","mark","focusAnnotations","coreInsertBreakBehaviors","MAX_LIST_LEVEL","clearListOnBackspace","_key","props","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/behaviors/behavior.types.action.ts","../../src/behaviors/behavior.types.behavior.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.dnd.ts","../../src/behaviors/behavior.core.insert-break.ts","../../src/behaviors/behavior.core.lists.ts","../../src/behaviors/behavior.core.ts"],"sourcesContent":["import type {EditorSnapshot} from '../editor/editor-snapshot'\nimport type {OmitFromUnion, PickFromUnion} from '../type-utils'\nimport type {PortableTextSlateEditor} from '../types/editor'\nimport type {\n AbstractBehaviorEventType,\n CustomBehaviorEvent,\n SyntheticBehaviorEvent,\n} from './behavior.types.event'\n\n/**\n * @beta\n */\nexport type BehaviorAction =\n | {\n type: 'execute'\n event: SyntheticBehaviorEvent\n }\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 function execute(\n event: SyntheticBehaviorEvent,\n): PickFromUnion<BehaviorAction, 'type', 'execute'> {\n return {type: 'execute', event}\n}\n\n/**\n * @beta\n */\nexport function raise(\n event: SyntheticBehaviorEvent | CustomBehaviorEvent,\n): PickFromUnion<BehaviorAction, 'type', 'raise'> {\n return {type: 'raise', event}\n}\n\n/**\n * @beta\n */\nexport function effect(\n effect: () => void,\n): PickFromUnion<BehaviorAction, 'type', 'effect'> {\n return {type: 'effect', effect}\n}\n\n/**\n * @beta\n */\nexport function noop(): PickFromUnion<BehaviorAction, 'type', 'noop'> {\n return {type: 'noop'}\n}\n\n/**\n * @beta\n */\nexport type BehaviorActionSet<TBehaviorEvent, TGuardResponse> = (\n payload: {\n snapshot: EditorSnapshot\n event: TBehaviorEvent\n },\n guardResponse: TGuardResponse,\n) => Array<BehaviorAction>\n\nexport type InternalBehaviorAction = (\n | OmitFromUnion<SyntheticBehaviorEvent, 'type', AbstractBehaviorEventType>\n | {type: 'noop'}\n | {type: 'effect'; effect: () => void}\n) & {\n editor: PortableTextSlateEditor\n}\n","import type {BehaviorActionSet} from './behavior.types.action'\nimport type {\n BehaviorEvent,\n BehaviorEventTypeNamespace,\n CustomBehaviorEvent,\n ResolveBehaviorEvent,\n} from './behavior.types.event'\nimport type {BehaviorGuard} from './behavior.types.guard'\n\n/**\n * @beta\n */\nexport type Behavior<\n TBehaviorEventType extends\n | '*'\n | `${BehaviorEventTypeNamespace}.*`\n | BehaviorEvent['type'] =\n | '*'\n | `${BehaviorEventTypeNamespace}.*`\n | BehaviorEvent['type'],\n TGuardResponse = true,\n TBehaviorEvent extends\n ResolveBehaviorEvent<TBehaviorEventType> = ResolveBehaviorEvent<TBehaviorEventType>,\n> = {\n /**\n * 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 * Each set represents a step in the history stack.\n */\n actions: Array<BehaviorActionSet<TBehaviorEvent, TGuardResponse>>\n}\n\n/**\n * @beta\n *\n * @example\n *\n * ```tsx\n * const noLowerCaseA = defineBehavior({\n * on: 'insert.text',\n * guard: ({event, snapshot}) => event.text === 'a',\n * actions: [({event, snapshot}) => [{type: 'insert.text', text: 'A'}]],\n * })\n * ```\n *\n */\nexport function defineBehavior<\n TPayload extends Record<string, unknown>,\n TBehaviorEventType extends\n | '*'\n | `${BehaviorEventTypeNamespace}.*`\n | BehaviorEvent['type'] = CustomBehaviorEvent['type'],\n TGuardResponse = true,\n>(\n behavior: Behavior<\n TBehaviorEventType,\n TGuardResponse,\n ResolveBehaviorEvent<TBehaviorEventType, TPayload>\n >,\n): Behavior\nexport function defineBehavior<\n TPayload extends never = never,\n TBehaviorEventType extends\n | '*'\n | `${BehaviorEventTypeNamespace}.*`\n | BehaviorEvent['type'] = BehaviorEvent['type'],\n TGuardResponse = true,\n TBehaviorEvent extends ResolveBehaviorEvent<\n TBehaviorEventType,\n TPayload\n > = ResolveBehaviorEvent<TBehaviorEventType, TPayload>,\n>(\n behavior: Behavior<TBehaviorEventType, TGuardResponse, TBehaviorEvent>,\n): Behavior {\n return behavior as unknown as Behavior\n}\n","import * as selectors from '../selectors'\nimport {raise} from './behavior.types.action'\nimport {defineBehavior} from './behavior.types.behavior'\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', at: caretWordSelection}),\n raise({type: 'annotation.add', annotation: event.annotation}),\n ],\n ],\n})\n\nexport const coreAnnotationBehaviors = {\n addAnnotationOnCollapsedSelection,\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 {raise} from './behavior.types.action'\nimport {defineBehavior} from './behavior.types.behavior'\n\nconst arrowDownOnLonelyBlockObject = defineBehavior({\n on: 'keyboard.keydown',\n guard: ({snapshot, event}) => {\n const isArrowDown = isHotkey('ArrowDown', event.originEvent)\n\n if (!isArrowDown) {\n return false\n }\n\n const collapsedSelection = selectors.isSelectionCollapsed(snapshot)\n\n if (!collapsedSelection) {\n return false\n }\n\n const focusBlockObject = selectors.getFocusBlockObject(snapshot)\n const nextBlock = selectors.getNextBlock(snapshot)\n\n return focusBlockObject && !nextBlock\n },\n actions: [\n ({snapshot}) => [\n raise({\n type: 'insert.block',\n block: {\n _type: snapshot.context.schema.block.name,\n },\n placement: 'after',\n }),\n ],\n ],\n})\n\nconst arrowUpOnLonelyBlockObject = defineBehavior({\n on: 'keyboard.keydown',\n guard: ({snapshot, event}) => {\n const isArrowUp = isHotkey('ArrowUp', event.originEvent)\n\n if (!isArrowUp) {\n return false\n }\n\n const collapsedSelection = selectors.isSelectionCollapsed(snapshot)\n\n if (!collapsedSelection) {\n return false\n }\n\n const focusBlockObject = selectors.getFocusBlockObject(snapshot)\n const previousBlock = selectors.getPreviousBlock(snapshot)\n\n return focusBlockObject && !previousBlock\n },\n actions: [\n ({snapshot}) => [\n raise({\n type: 'insert.block',\n block: {\n _type: snapshot.context.schema.block.name,\n },\n placement: 'before',\n }),\n ],\n ],\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: [\n ({snapshot}) => [\n raise({\n type: 'insert.block',\n block: {\n _type: snapshot.context.schema.block.name,\n },\n placement: 'after',\n }),\n ],\n ],\n})\n\nconst clickingAboveLonelyBlockObject = defineBehavior({\n on: 'mouse.click',\n guard: ({snapshot, event}) => {\n if (snapshot.context.readOnly) {\n return false\n }\n\n if (\n snapshot.context.selection &&\n !selectors.isSelectionCollapsed(snapshot)\n ) {\n return false\n }\n\n const focusBlockObject = selectors.getFocusBlockObject({\n ...snapshot,\n context: {\n ...snapshot.context,\n selection: event.position.selection,\n },\n })\n const previousBlock = selectors.getPreviousBlock({\n ...snapshot,\n context: {\n ...snapshot.context,\n selection: event.position.selection,\n },\n })\n\n return (\n event.position.isEditor &&\n event.position.block === 'start' &&\n focusBlockObject &&\n !previousBlock\n )\n },\n actions: [\n ({snapshot, event}) => [\n raise({\n type: 'select',\n at: event.position.selection,\n }),\n raise({\n type: 'insert.block',\n block: {\n _type: snapshot.context.schema.block.name,\n },\n placement: 'before',\n select: 'start',\n }),\n ],\n ],\n})\n\nconst clickingBelowLonelyBlockObject = defineBehavior({\n on: 'mouse.click',\n guard: ({snapshot, event}) => {\n if (snapshot.context.readOnly) {\n return false\n }\n\n if (\n snapshot.context.selection &&\n !selectors.isSelectionCollapsed(snapshot)\n ) {\n return false\n }\n\n const focusBlockObject = selectors.getFocusBlockObject({\n ...snapshot,\n context: {\n ...snapshot.context,\n selection: event.position.selection,\n },\n })\n const nextBlock = selectors.getNextBlock({\n ...snapshot,\n context: {\n ...snapshot.context,\n selection: event.position.selection,\n },\n })\n\n return (\n event.position.isEditor &&\n event.position.block === 'end' &&\n focusBlockObject &&\n !nextBlock\n )\n },\n actions: [\n ({snapshot, event}) => [\n raise({\n type: 'select',\n at: event.position.selection,\n }),\n raise({\n type: 'insert.block',\n block: {\n _type: snapshot.context.schema.block.name,\n },\n placement: 'after',\n select: 'start',\n }),\n ],\n ],\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 at: focusTextBlock.path,\n }),\n raise({\n type: 'select',\n at: {\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 at: focusTextBlock.path,\n }),\n raise({\n type: 'select',\n at: {\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 {raise} from './behavior.types.action'\nimport {defineBehavior} from './behavior.types.behavior'\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.name === '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.name === '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.name === '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.name === 'code',\n ),\n actions: [() => [raise({type: 'decorator.toggle', decorator: 'code'})]],\n }),\n}\n","import * as selectors from '../selectors'\nimport {defineBehavior} from './behavior.types.behavior'\n\nexport const coreDndBehaviors = [\n /**\n * When dragging over the drag origin, we don't want to show the caret in the\n * text.\n */\n defineBehavior({\n on: 'drag.dragover',\n guard: ({snapshot, event}) => {\n const dragOrigin = snapshot.beta.internalDrag?.origin\n const draggingOverDragOrigin = dragOrigin\n ? selectors.isOverlappingSelection(event.position.selection)({\n ...snapshot,\n context: {\n ...snapshot.context,\n selection: dragOrigin.selection,\n },\n })\n : false\n\n return draggingOverDragOrigin\n },\n actions: [() => [{type: 'noop'}]],\n }),\n]\n","import * as selectors from '../selectors'\nimport * as utils from '../utils'\nimport {raise} from './behavior.types.action'\nimport {defineBehavior} from './behavior.types.behavior'\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 children: [\n {\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]?.name,\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.name === mark,\n ) ?? [],\n )\n const focusAnnotations =\n focusSpan?.node.marks?.filter(\n (mark) =>\n !snapshot.context.schema.decorators.some(\n (decorator) => decorator.name === 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 _type: snapshot.context.schema.block.name,\n children: [\n {\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]?.name,\n },\n placement: 'before',\n select: 'none',\n }),\n ],\n ],\n})\n\nconst breakingEntireDocument = defineBehavior({\n on: 'insert.break',\n guard: ({snapshot}) => {\n if (!snapshot.context.selection) {\n return false\n }\n\n if (!selectors.isSelectionExpanded(snapshot)) {\n return false\n }\n\n const firstBlock = selectors.getFirstBlock(snapshot)\n const lastBlock = selectors.getLastBlock(snapshot)\n\n if (!firstBlock || !lastBlock) {\n return false\n }\n\n const firstBlockStartPoint = utils.getBlockStartPoint(firstBlock)\n const selectionStartPoint = utils.getSelectionStartPoint(\n snapshot.context.selection,\n )\n const lastBlockEndPoint = utils.getBlockEndPoint(lastBlock)\n const selectionEndPoint = utils.getSelectionEndPoint(\n snapshot.context.selection,\n )\n\n if (\n utils.isEqualSelectionPoints(firstBlockStartPoint, selectionStartPoint) &&\n utils.isEqualSelectionPoints(lastBlockEndPoint, selectionEndPoint)\n ) {\n return {selection: snapshot.context.selection}\n }\n\n return false\n },\n actions: [\n (_, {selection}) => [\n raise({\n type: 'delete',\n at: selection,\n }),\n ],\n ],\n})\n\nconst breakingEntireBlocks = defineBehavior({\n on: 'insert.break',\n guard: ({snapshot}) => {\n if (!snapshot.context.selection) {\n return false\n }\n\n if (!selectors.isSelectionExpanded(snapshot)) {\n return false\n }\n\n const selectedBlocks = selectors.getSelectedBlocks(snapshot)\n const selectionStartBlock = selectors.getSelectionStartBlock(snapshot)\n const selectionEndBlock = selectors.getSelectionEndBlock(snapshot)\n\n if (!selectionStartBlock || !selectionEndBlock) {\n return false\n }\n\n const startBlockStartPoint = utils.getBlockStartPoint(selectionStartBlock)\n const selectionStartPoint = utils.getSelectionStartPoint(\n snapshot.context.selection,\n )\n const endBlockEndPoint = utils.getBlockEndPoint(selectionEndBlock)\n const selectionEndPoint = utils.getSelectionEndPoint(\n snapshot.context.selection,\n )\n\n if (\n utils.isEqualSelectionPoints(selectionStartPoint, startBlockStartPoint) &&\n utils.isEqualSelectionPoints(selectionEndPoint, endBlockEndPoint)\n ) {\n return {selectedBlocks}\n }\n\n return false\n },\n actions: [\n ({snapshot}, {selectedBlocks}) => [\n raise({\n type: 'insert.block',\n block: {\n _type: snapshot.context.schema.block.name,\n children: [\n {\n _type: snapshot.context.schema.span.name,\n text: '',\n marks: [],\n },\n ],\n },\n placement: 'before',\n select: 'start',\n }),\n ...selectedBlocks.map((block) =>\n raise({\n type: 'delete.block',\n at: block.path,\n }),\n ),\n ],\n ],\n})\n\nexport const coreInsertBreakBehaviors = {\n breakingAtTheEndOfTextBlock,\n breakingAtTheStartOfTextBlock,\n breakingEntireDocument,\n breakingEntireBlocks,\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 {raise} from './behavior.types.action'\nimport {defineBehavior} from './behavior.types.behavior'\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 {coreDndBehaviors} from './behavior.core.dnd'\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 ...coreDndBehaviors,\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 coreInsertBreakBehaviors.breakingEntireDocument,\n coreInsertBreakBehaviors.breakingEntireBlocks,\n]\n"],"names":["execute","event","type","raise","effect","noop","defineBehavior","behavior","addAnnotationOnCollapsedSelection","on","guard","snapshot","selectors","isSelectionCollapsed","caretWordSelection","getCaretWordSelection","context","selection","actions","at","annotation","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","name","toUpperCase","charCodeAt","arrowDownOnLonelyBlockObject","originEvent","focusBlockObject","nextBlock","block","_type","schema","placement","arrowUpOnLonelyBlockObject","previousBlock","breakingBlockObject","getFocusBlockObject","clickingAboveLonelyBlockObject","readOnly","position","isEditor","select","clickingBelowLonelyBlockObject","deletingEmptyTextBlockAfterBlockObject","focusTextBlock","selectionCollapsed","isEmptyTextBlock","node","isPortableTextTextBlock","_","path","anchor","offset","focus","deletingEmptyTextBlockBeforeBlockObject","coreBlockObjectBehaviors","coreDecoratorBehaviors","strongShortcut","decorators","some","decorator","emShortcut","underlineShortcut","codeShortcut","coreDndBehaviors","dragOrigin","beta","internalDrag","origin","isOverlappingSelection","breakingAtTheEndOfTextBlock","atTheEndOfBlock","focusListItem","listItem","focusLevel","level","children","span","text","marks","markDefs","style","styles","breakingAtTheStartOfTextBlock","focusSpan","focusDecorators","filter","mark","focusAnnotations","breakingEntireDocument","firstBlock","lastBlock","firstBlockStartPoint","utils","selectionStartPoint","lastBlockEndPoint","selectionEndPoint","breakingEntireBlocks","selectedBlocks","selectionStartBlock","selectionEndBlock","startBlockStartPoint","endBlockEndPoint","map","coreInsertBreakBehaviors","MAX_LIST_LEVEL","clearListOnBackspace","_key","props","unindentListOnBackspace","clearListOnEnter","focusListBlock","indentListOnTab","guards","createGuards","selectedListBlocks","flatMap","isListBlock","selectedListBlock","Math","min","max","unindentListOnShiftTab","coreListBehaviors","coreBehaviors"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
- var jsxRuntime = require("react/jsx-runtime"), react = require("@xstate/react"), React = require("react"), slateReact = require("slate-react"), reactCompilerRuntime = require("react-compiler-runtime"), debug$g = require("debug"), isEqual = require("lodash/isEqual.js"), slate = require("slate"), xstate = require("xstate"), patches = require("@portabletext/patches"), types = require("@sanity/types"), flatten = require("lodash/flatten.js"), isPlainObject = require("lodash/isPlainObject.js"), uniq = require("lodash/uniq.js"), getRandomValues = require("get-random-values-esm"), parseBlocks = require("./parse-blocks.cjs"), util_sliceBlocks = require("./util.slice-blocks.cjs"), blockTools = require("@portabletext/block-tools"), toHtml = require("@portabletext/to-html"), schema = require("@sanity/schema"), get = require("lodash/get.js"), isUndefined = require("lodash/isUndefined.js"), omitBy = require("lodash/omitBy.js"), omit = require("lodash/omit.js"), util_selectionPointToBlockOffset = require("./util.selection-point-to-block-offset.cjs"), selector_isSelectingEntireBlocks = require("./selector.is-selecting-entire-blocks.cjs"), slateDom = require("slate-dom"), startCase = require("lodash.startcase"), behavior_core = require("./behavior.core.cjs"), selector_isOverlappingSelection = require("./selector.is-overlapping-selection.cjs"), rxjs = require("rxjs"), useEffectEvent = require("use-effect-event");
2
+ var jsxRuntime = require("react/jsx-runtime"), react = require("@xstate/react"), React = require("react"), slateReact = require("slate-react"), reactCompilerRuntime = require("react-compiler-runtime"), debug$g = require("debug"), isEqual = require("lodash/isEqual.js"), slate = require("slate"), xstate = require("xstate"), patches = require("@portabletext/patches"), types = require("@sanity/types"), flatten = require("lodash/flatten.js"), isPlainObject = require("lodash/isPlainObject.js"), uniq = require("lodash/uniq.js"), getRandomValues = require("get-random-values-esm"), parseBlocks = require("./parse-blocks.cjs"), util_sliceBlocks = require("./util.slice-blocks.cjs"), blockTools = require("@portabletext/block-tools"), toHtml = require("@portabletext/to-html"), schema = require("@sanity/schema"), get = require("lodash/get.js"), isUndefined = require("lodash/isUndefined.js"), omitBy = require("lodash/omitBy.js"), omit = require("lodash/omit.js"), util_selectionPointToBlockOffset = require("./util.selection-point-to-block-offset.cjs"), selector_isSelectingEntireBlocks = require("./selector.is-selecting-entire-blocks.cjs"), slateDom = require("slate-dom"), startCase = require("lodash.startcase"), behavior_core = require("./behavior.core.cjs"), selector_isOverlappingSelection = require("./selector.is-overlapping-selection.cjs"), util_getSelectionStartPoint = require("./util.get-selection-start-point.cjs"), rxjs = require("rxjs"), useEffectEvent = require("use-effect-event");
3
3
  function _interopDefaultCompat(e) {
4
4
  return e && typeof e == "object" && "default" in e ? e : { default: e };
5
5
  }
@@ -3403,13 +3403,35 @@ function getFocusBlock({
3403
3403
  return [void 0, void 0];
3404
3404
  }
3405
3405
  }
3406
+ function getSelectionStartBlock({
3407
+ editor
3408
+ }) {
3409
+ if (!editor.selection)
3410
+ return [void 0, void 0];
3411
+ const selectionStartPoint = slate.Range.start(editor.selection);
3412
+ return getPointBlock({
3413
+ editor,
3414
+ point: selectionStartPoint
3415
+ });
3416
+ }
3417
+ function getSelectionEndBlock({
3418
+ editor
3419
+ }) {
3420
+ if (!editor.selection)
3421
+ return [void 0, void 0];
3422
+ const selectionEndPoint = slate.Range.end(editor.selection);
3423
+ return getPointBlock({
3424
+ editor,
3425
+ point: selectionEndPoint
3426
+ });
3427
+ }
3406
3428
  function getPointBlock({
3407
3429
  editor,
3408
3430
  point
3409
3431
  }) {
3410
3432
  try {
3411
3433
  const [block] = slate.Editor.node(editor, point.path.slice(0, 1)) ?? [void 0, void 0];
3412
- return block ? [block, point.path] : [void 0, void 0];
3434
+ return block ? [block, point.path.slice(0, 1)] : [void 0, void 0];
3413
3435
  } catch {
3414
3436
  return [void 0, void 0];
3415
3437
  }
@@ -3823,10 +3845,12 @@ function insertBlock({
3823
3845
  editor,
3824
3846
  schema: schema2
3825
3847
  }) {
3826
- const [focusBlock, focusBlockPath] = getFocusBlock({
3848
+ const [startBlock, startBlockPath] = getSelectionStartBlock({
3849
+ editor
3850
+ }), [endBlock, endBlockPath] = getSelectionEndBlock({
3827
3851
  editor
3828
3852
  });
3829
- if (!editor.selection || !focusBlock || !focusBlockPath) {
3853
+ if (!editor.selection || !startBlock || !startBlockPath || !endBlock || !endBlockPath) {
3830
3854
  select !== "none" && slateDom.DOMEditor.focus(editor);
3831
3855
  const [lastBlock, lastBlockPath] = getLastBlock({
3832
3856
  editor
@@ -3865,26 +3889,41 @@ function insertBlock({
3865
3889
  }), select === "start" ? slate.Transforms.select(editor, slate.Editor.start(editor, nextPath)) : select === "end" && slate.Transforms.select(editor, slate.Editor.end(editor, nextPath));
3866
3890
  }
3867
3891
  } else if (placement === "before") {
3868
- const currentSelection = editor.selection;
3892
+ const currentSelection = editor.selection, selectionStartPoint = slate.Range.start(currentSelection);
3869
3893
  slate.Transforms.insertNodes(editor, [block], {
3870
- at: focusBlockPath,
3894
+ at: [selectionStartPoint.path[0]],
3871
3895
  select: !1
3872
- });
3873
- const adjustedSelection = slate.Range.transform(currentSelection, {
3874
- type: "move_node",
3875
- path: focusBlockPath,
3876
- newPath: [focusBlockPath[0] + 1]
3877
- });
3878
- adjustedSelection ? slate.Transforms.select(editor, adjustedSelection) : slate.Transforms.select(editor, currentSelection), select === "start" ? slate.Transforms.select(editor, slate.Editor.start(editor, focusBlockPath)) : select === "end" && slate.Transforms.select(editor, slate.Editor.end(editor, focusBlockPath));
3896
+ }), select === "start" ? slate.Transforms.select(editor, slate.Editor.start(editor, [selectionStartPoint.path[0]])) : select === "end" && slate.Transforms.select(editor, slate.Editor.end(editor, [selectionStartPoint.path[0]]));
3879
3897
  } else if (placement === "after") {
3880
- const nextPath = [focusBlockPath[0] + 1], currentSelection = editor.selection;
3898
+ const currentSelection = editor.selection, nextPath = [slate.Range.end(currentSelection).path[0] + 1];
3881
3899
  slate.Transforms.insertNodes(editor, [block], {
3882
3900
  at: nextPath,
3883
3901
  select: !1
3884
- }), slate.Transforms.select(editor, currentSelection), select === "start" ? slate.Transforms.select(editor, slate.Editor.start(editor, nextPath)) : select === "end" && slate.Transforms.select(editor, slate.Editor.end(editor, nextPath));
3902
+ }), select === "start" ? slate.Transforms.select(editor, slate.Editor.start(editor, nextPath)) : select === "end" && slate.Transforms.select(editor, slate.Editor.end(editor, nextPath));
3885
3903
  } else {
3886
- const currentSelection = editor.selection, focusBlockStartPoint = slate.Editor.start(editor, focusBlockPath);
3887
- if (editor.isTextBlock(focusBlock) && editor.isTextBlock(block)) {
3904
+ const currentSelection = editor.selection, endBlockEndPoint = slate.Editor.start(editor, endBlockPath);
3905
+ if (slate.Range.isExpanded(currentSelection) && !editor.isTextBlock(block)) {
3906
+ slate.Transforms.delete(editor, {
3907
+ at: currentSelection
3908
+ });
3909
+ const newSelection = editor.selection, [focusBlock, focusBlockPath] = getFocusBlock({
3910
+ editor
3911
+ });
3912
+ slate.Transforms.insertNodes(editor, [block], {
3913
+ voids: !0
3914
+ });
3915
+ const adjustedSelection = newSelection.anchor.offset === 0 ? slate.Range.transform(newSelection, {
3916
+ type: "insert_node",
3917
+ node: block,
3918
+ path: [newSelection.anchor.path[0]]
3919
+ }) : newSelection;
3920
+ select === "none" && adjustedSelection && slate.Transforms.select(editor, adjustedSelection), focusBlock && isEqualToEmptyEditor([focusBlock], schema2) && slate.Transforms.removeNodes(editor, {
3921
+ at: focusBlockPath
3922
+ });
3923
+ return;
3924
+ }
3925
+ if (editor.isTextBlock(endBlock) && editor.isTextBlock(block)) {
3926
+ const selectionStartPoint = slate.Range.start(currentSelection);
3888
3927
  if (select === "end") {
3889
3928
  slate.Transforms.insertFragment(editor, [block], {
3890
3929
  voids: !0
@@ -3894,32 +3933,44 @@ function insertBlock({
3894
3933
  slate.Transforms.insertFragment(editor, [block], {
3895
3934
  at: currentSelection,
3896
3935
  voids: !0
3897
- }), select === "start" ? slate.Point.equals(currentSelection.anchor, focusBlockStartPoint) ? slate.Transforms.select(editor, slate.Editor.start(editor, focusBlockPath)) : slate.Transforms.select(editor, currentSelection) : slate.Point.equals(currentSelection.anchor, focusBlockStartPoint) || slate.Transforms.select(editor, currentSelection);
3898
- } else if (editor.isTextBlock(focusBlock)) {
3899
- const focusBlockStartPoint2 = slate.Editor.start(editor, focusBlockPath), focusBlockEndPoint = slate.Editor.end(editor, focusBlockPath);
3900
- if (slate.Point.equals(currentSelection.anchor, focusBlockStartPoint2))
3936
+ }), select === "start" ? slate.Transforms.select(editor, selectionStartPoint) : slate.Point.equals(selectionStartPoint, endBlockEndPoint) || slate.Transforms.select(editor, selectionStartPoint);
3937
+ } else if (editor.isTextBlock(endBlock)) {
3938
+ const endBlockStartPoint = slate.Editor.start(editor, endBlockPath), endBlockEndPoint2 = slate.Editor.end(editor, endBlockPath), selectionStartPoint = slate.Range.start(currentSelection), selectionEndPoint = slate.Range.end(currentSelection);
3939
+ if (slate.Range.isCollapsed(currentSelection) && slate.Point.equals(selectionStartPoint, endBlockStartPoint))
3901
3940
  slate.Transforms.insertNodes(editor, [block], {
3902
- at: focusBlockPath,
3941
+ at: endBlockPath,
3903
3942
  select: !1
3904
- }), (select === "start" || select === "end") && slate.Transforms.select(editor, slate.Editor.start(editor, focusBlockPath)), isEqualToEmptyEditor([focusBlock], schema2) && slate.Transforms.removeNodes(editor, {
3905
- at: slate.Path.next(focusBlockPath)
3943
+ }), (select === "start" || select === "end") && slate.Transforms.select(editor, slate.Editor.start(editor, endBlockPath)), isEqualToEmptyEditor([endBlock], schema2) && slate.Transforms.removeNodes(editor, {
3944
+ at: slate.Path.next(endBlockPath)
3906
3945
  });
3907
- else if (slate.Point.equals(currentSelection.focus, focusBlockEndPoint)) {
3908
- const nextPath = [focusBlockPath[0] + 1];
3946
+ else if (slate.Range.isCollapsed(currentSelection) && slate.Point.equals(selectionEndPoint, endBlockEndPoint2)) {
3947
+ const nextPath = [endBlockPath[0] + 1];
3909
3948
  slate.Transforms.insertNodes(editor, [block], {
3910
3949
  at: nextPath,
3911
3950
  select: !1
3912
3951
  }), (select === "start" || select === "end") && slate.Transforms.select(editor, slate.Editor.start(editor, nextPath));
3913
- } else {
3952
+ } else if (slate.Range.isExpanded(currentSelection) && slate.Point.equals(selectionStartPoint, endBlockStartPoint) && slate.Point.equals(selectionEndPoint, endBlockEndPoint2))
3953
+ slate.Transforms.insertFragment(editor, [block], {
3954
+ at: currentSelection
3955
+ }), select === "start" ? slate.Transforms.select(editor, slate.Editor.start(editor, endBlockPath)) : select === "end" && slate.Transforms.select(editor, slate.Editor.end(editor, endBlockPath));
3956
+ else if (slate.Range.isExpanded(currentSelection) && slate.Point.equals(selectionStartPoint, endBlockStartPoint))
3957
+ slate.Transforms.insertFragment(editor, [block], {
3958
+ at: currentSelection
3959
+ }), select === "start" ? slate.Transforms.select(editor, slate.Editor.start(editor, endBlockPath)) : select === "end" && slate.Transforms.select(editor, slate.Editor.end(editor, endBlockPath));
3960
+ else if (slate.Range.isExpanded(currentSelection) && slate.Point.equals(selectionEndPoint, endBlockEndPoint2))
3961
+ slate.Transforms.insertFragment(editor, [block], {
3962
+ at: currentSelection
3963
+ }), select === "start" ? slate.Transforms.select(editor, slate.Editor.start(editor, slate.Path.next(endBlockPath))) : select === "end" && slate.Transforms.select(editor, slate.Editor.end(editor, slate.Path.next(endBlockPath)));
3964
+ else {
3914
3965
  const currentSelection2 = editor.selection, [focusChild] = getFocusChild({
3915
3966
  editor
3916
3967
  });
3917
3968
  if (focusChild && editor.isTextSpan(focusChild))
3918
3969
  slate.Transforms.insertFragment(editor, [block], {
3919
3970
  at: currentSelection2
3920
- }), select === "start" || select === "end" ? slate.Transforms.select(editor, [focusBlockPath[0] + 1]) : slate.Transforms.select(editor, currentSelection2);
3971
+ }), select === "start" || select === "end" ? slate.Transforms.select(editor, [endBlockPath[0] + 1]) : slate.Transforms.select(editor, currentSelection2);
3921
3972
  else {
3922
- const nextPath = [focusBlockPath[0] + 1];
3973
+ const nextPath = [endBlockPath[0] + 1];
3923
3974
  slate.Transforms.insertNodes(editor, [block], {
3924
3975
  at: nextPath,
3925
3976
  select: !1
@@ -3930,7 +3981,7 @@ function insertBlock({
3930
3981
  slate.Transforms.insertNodes(editor, [block], {
3931
3982
  select: !1
3932
3983
  });
3933
- const nextPath = [focusBlockPath[0] + 1];
3984
+ const nextPath = [endBlockPath[0] + 1];
3934
3985
  select === "start" ? slate.Transforms.select(editor, slate.Editor.start(editor, nextPath)) : select === "end" && slate.Transforms.select(editor, slate.Editor.end(editor, nextPath));
3935
3986
  }
3936
3987
  }
@@ -5867,7 +5918,7 @@ const EditorActorContext = React.createContext({}), abstractAnnotationBehaviors
5867
5918
  placement: index === 0 ? "auto" : "after",
5868
5919
  select: "end"
5869
5920
  })) : event.blocks.flatMap((block, index) => index === 0 ? [behavior_core.raise({
5870
- type: "split.block"
5921
+ type: "split"
5871
5922
  }), behavior_core.raise({
5872
5923
  type: "select.previous block",
5873
5924
  select: "end"
@@ -5906,7 +5957,7 @@ const EditorActorContext = React.createContext({}), abstractAnnotationBehaviors
5906
5957
  }), behavior_core.defineBehavior({
5907
5958
  on: "insert.break",
5908
5959
  actions: [() => [behavior_core.raise({
5909
- type: "split.block"
5960
+ type: "split"
5910
5961
  })]]
5911
5962
  }), behavior_core.defineBehavior({
5912
5963
  on: "insert.soft break",
@@ -6087,34 +6138,13 @@ const EditorActorContext = React.createContext({}), abstractAnnotationBehaviors
6087
6138
  at: selection
6088
6139
  })]]
6089
6140
  })], abstractSplitBehaviors = [behavior_core.defineBehavior({
6090
- on: "split.block",
6091
- guard: ({
6092
- snapshot
6093
- }) => {
6094
- if (!snapshot.context.selection || !selector_isOverlappingSelection.isSelectionExpanded(snapshot))
6095
- return !1;
6096
- const firstBlock = selector_isOverlappingSelection.getFirstBlock(snapshot), lastBlock = selector_isOverlappingSelection.getLastBlock(snapshot);
6097
- if (!firstBlock || !lastBlock)
6098
- return !1;
6099
- const firstBlockStartPoint = util_sliceBlocks.getBlockStartPoint(firstBlock), selectionStartPoint = util_selectionPointToBlockOffset.getSelectionStartPoint(snapshot.context.selection), lastBlockEndPoint = util_sliceBlocks.getBlockEndPoint(lastBlock), selectionEndPoint = util_selectionPointToBlockOffset.getSelectionEndPoint(snapshot.context.selection);
6100
- return util_sliceBlocks.isEqualSelectionPoints(firstBlockStartPoint, selectionStartPoint) && util_sliceBlocks.isEqualSelectionPoints(lastBlockEndPoint, selectionEndPoint) ? {
6101
- selection: snapshot.context.selection
6102
- } : !1;
6103
- },
6104
- actions: [(_, {
6105
- selection
6106
- }) => [behavior_core.raise({
6107
- type: "delete",
6108
- at: selection
6109
- })]]
6110
- }), behavior_core.defineBehavior({
6111
- on: "split.block",
6141
+ on: "split",
6112
6142
  guard: ({
6113
6143
  snapshot
6114
6144
  }) => {
6115
6145
  if (!snapshot.context.selection)
6116
6146
  return !1;
6117
- const selectionStartPoint = util_selectionPointToBlockOffset.getSelectionStartPoint(snapshot.context.selection), selectionEndPoint = util_selectionPointToBlockOffset.getSelectionEndPoint(snapshot.context.selection), focusTextBlock = selector_isOverlappingSelection.getFocusTextBlock({
6147
+ const selectionStartPoint = util_getSelectionStartPoint.getSelectionStartPoint(snapshot.context.selection), selectionEndPoint = util_getSelectionStartPoint.getSelectionEndPoint(snapshot.context.selection), focusTextBlock = selector_isOverlappingSelection.getFocusTextBlock({
6118
6148
  context: {
6119
6149
  ...snapshot.context,
6120
6150
  selection: {
@@ -6603,7 +6633,7 @@ const EditorActorContext = React.createContext({}), abstractAnnotationBehaviors
6603
6633
  raiseDeserializationSuccessOrFailure,
6604
6634
  raiseSerializationSuccessOrFailure,
6605
6635
  raiseInsertSoftBreak
6606
- ], abstractBehaviorEventTypes = ["annotation.toggle", "decorator.toggle", "delete.text", "deserialize", "deserialization.success", "deserialization.failure", "insert.blocks", "insert.break", "insert.soft break", "list item.add", "list item.remove", "list item.toggle", "move.block down", "move.block up", "select.previous block", "select.next block", "serialize", "serialization.success", "serialization.failure", "split.block", "style.add", "style.remove", "style.toggle"];
6636
+ ], abstractBehaviorEventTypes = ["annotation.toggle", "decorator.toggle", "delete.text", "deserialize", "deserialization.success", "deserialization.failure", "insert.blocks", "insert.break", "insert.soft break", "list item.add", "list item.remove", "list item.toggle", "move.block down", "move.block up", "select.previous block", "select.next block", "serialize", "serialization.success", "serialization.failure", "split", "style.add", "style.remove", "style.toggle"];
6607
6637
  function isAbstractBehaviorEvent(event) {
6608
6638
  return abstractBehaviorEventTypes.includes(event.type);
6609
6639
  }
@@ -6685,10 +6715,10 @@ function performEvent({
6685
6715
  continue;
6686
6716
  }
6687
6717
  if (action.type === "execute") {
6688
- if (isAbstractBehaviorEvent(action.event) || isCustomBehaviorEvent(action.event))
6718
+ if (isAbstractBehaviorEvent(action.event))
6689
6719
  performEvent({
6690
6720
  mode: "execute",
6691
- behaviors: isCustomBehaviorEvent(action.event) ? [...behaviors, ...defaultBehaviors] : defaultBehaviors,
6721
+ behaviors: defaultBehaviors,
6692
6722
  event: action.event,
6693
6723
  editor,
6694
6724
  keyGenerator,