@portabletext/editor 1.47.10 → 1.47.12
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 +61 -3
- package/lib/_chunks-cjs/behavior.core.cjs.map +1 -1
- package/lib/_chunks-cjs/editor-provider.cjs +167 -105
- package/lib/_chunks-cjs/editor-provider.cjs.map +1 -1
- package/lib/_chunks-cjs/util.get-selection-start-point.cjs +10 -0
- package/lib/_chunks-cjs/util.get-selection-start-point.cjs.map +1 -0
- package/lib/_chunks-cjs/util.is-selection-collapsed.cjs +0 -4
- package/lib/_chunks-cjs/util.is-selection-collapsed.cjs.map +1 -1
- package/lib/_chunks-es/behavior.core.js +63 -4
- package/lib/_chunks-es/behavior.core.js.map +1 -1
- package/lib/_chunks-es/editor-provider.js +168 -105
- package/lib/_chunks-es/editor-provider.js.map +1 -1
- package/lib/_chunks-es/util.get-selection-start-point.js +11 -0
- package/lib/_chunks-es/util.get-selection-start-point.js.map +1 -0
- package/lib/_chunks-es/util.is-selection-collapsed.js +0 -4
- package/lib/_chunks-es/util.is-selection-collapsed.js.map +1 -1
- package/lib/behaviors/index.d.cts +359 -339
- package/lib/behaviors/index.d.ts +359 -339
- package/lib/behaviors/index.js +1 -1
- package/lib/index.cjs +3 -3
- package/lib/index.cjs.map +1 -1
- package/lib/index.d.cts +4 -4
- package/lib/index.d.ts +4 -4
- package/lib/index.js +2 -1
- package/lib/index.js.map +1 -1
- package/lib/plugins/index.cjs +0 -9
- package/lib/plugins/index.cjs.map +1 -1
- package/lib/plugins/index.d.cts +4 -4
- package/lib/plugins/index.d.ts +4 -4
- package/lib/plugins/index.js +0 -9
- package/lib/plugins/index.js.map +1 -1
- package/lib/selectors/index.d.cts +4 -4
- package/lib/selectors/index.d.ts +4 -4
- package/lib/utils/index.cjs +3 -6
- package/lib/utils/index.cjs.map +1 -1
- package/lib/utils/index.d.cts +4 -4
- package/lib/utils/index.d.ts +4 -4
- package/lib/utils/index.js +2 -4
- package/lib/utils/index.js.map +1 -1
- package/package.json +3 -3
- package/src/behavior-actions/behavior.action.insert.block.ts +136 -45
- package/src/behavior-actions/behavior.actions.ts +0 -9
- package/src/behaviors/behavior.abstract.insert.ts +2 -2
- package/src/behaviors/behavior.abstract.split.ts +118 -0
- package/src/behaviors/behavior.core.insert-break.ts +113 -0
- package/src/behaviors/behavior.core.ts +2 -0
- package/src/behaviors/behavior.default.ts +2 -0
- package/src/behaviors/behavior.types.event.ts +4 -4
- package/src/internal-utils/slate-utils.ts +50 -1
- package/src/plugins/plugin.one-line.tsx +0 -7
- package/src/behavior-actions/behavior.action.split.block.ts +0 -146
|
@@ -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 {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 * 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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"}
|