@portabletext/editor 1.44.11 → 1.44.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.
@@ -215,19 +215,34 @@ const addAnnotationOnCollapsedSelection = {
215
215
  snapshot,
216
216
  event
217
217
  }) => {
218
- if (!isSelectionCollapsed(snapshot))
218
+ if (snapshot.context.readOnly || snapshot.context.selection && !isSelectionCollapsed(snapshot))
219
219
  return !1;
220
- const focusBlockObject = getFocusBlockObject(snapshot), previousBlock = getPreviousBlock(snapshot);
220
+ const focusBlockObject = getFocusBlockObject({
221
+ context: {
222
+ ...snapshot.context,
223
+ selection: event.position.selection
224
+ }
225
+ }), previousBlock = getPreviousBlock({
226
+ context: {
227
+ ...snapshot.context,
228
+ selection: event.position.selection
229
+ }
230
+ });
221
231
  return event.position.isEditor && event.position.block === "start" && focusBlockObject && !previousBlock;
222
232
  },
223
233
  actions: [({
224
- snapshot
234
+ snapshot,
235
+ event
225
236
  }) => [raise({
237
+ type: "select",
238
+ selection: event.position.selection
239
+ }), raise({
226
240
  type: "insert.block",
227
241
  block: {
228
242
  _type: snapshot.context.schema.block.name
229
243
  },
230
- placement: "before"
244
+ placement: "before",
245
+ select: "start"
231
246
  })]]
232
247
  }, clickingBelowLonelyBlockObject = {
233
248
  on: "mouse.click",
@@ -235,19 +250,34 @@ const addAnnotationOnCollapsedSelection = {
235
250
  snapshot,
236
251
  event
237
252
  }) => {
238
- if (!isSelectionCollapsed(snapshot))
253
+ if (snapshot.context.readOnly || snapshot.context.selection && !isSelectionCollapsed(snapshot))
239
254
  return !1;
240
- const focusBlockObject = getFocusBlockObject(snapshot), nextBlock = getNextBlock(snapshot);
255
+ const focusBlockObject = getFocusBlockObject({
256
+ context: {
257
+ ...snapshot.context,
258
+ selection: event.position.selection
259
+ }
260
+ }), nextBlock = getNextBlock({
261
+ context: {
262
+ ...snapshot.context,
263
+ selection: event.position.selection
264
+ }
265
+ });
241
266
  return event.position.isEditor && event.position.block === "end" && focusBlockObject && !nextBlock;
242
267
  },
243
268
  actions: [({
244
- snapshot
269
+ snapshot,
270
+ event
245
271
  }) => [raise({
272
+ type: "select",
273
+ selection: event.position.selection
274
+ }), raise({
246
275
  type: "insert.block",
247
276
  block: {
248
277
  _type: snapshot.context.schema.block.name
249
278
  },
250
- placement: "after"
279
+ placement: "after",
280
+ select: "start"
251
281
  })]]
252
282
  }, deletingEmptyTextBlockAfterBlockObject = {
253
283
  on: "delete.backward",
@@ -1 +1 @@
1
- {"version":3,"file":"behavior.core.js","sources":["../../src/internal-utils/is-hotkey.ts","../../src/behaviors/behavior.types.action.ts","../../src/behaviors/behavior.types.behavior.ts","../../src/behaviors/behavior.core.annotations.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":["export interface KeyboardEventLike {\n key: string\n keyCode?: number\n altKey: boolean\n ctrlKey: boolean\n metaKey: boolean\n shiftKey: boolean\n}\n\ninterface HotKey {\n keyCode?: number | undefined\n key?: string | undefined\n altKey: boolean | null\n ctrlKey: boolean | null\n metaKey: boolean | null\n shiftKey: boolean | null\n}\n\nconst IS_MAC =\n typeof window !== 'undefined' &&\n /Mac|iPod|iPhone|iPad/.test(window.navigator.userAgent)\n\ntype Modifier = 'altKey' | 'ctrlKey' | 'metaKey' | 'shiftKey'\n\nconst modifiers: Record<string, Modifier | undefined> = {\n alt: 'altKey',\n control: 'ctrlKey',\n meta: 'metaKey',\n shift: 'shiftKey',\n}\n\nconst aliases: Record<string, string | undefined> = {\n add: '+',\n break: 'pause',\n cmd: 'meta',\n command: 'meta',\n ctl: 'control',\n ctrl: 'control',\n del: 'delete',\n down: 'arrowdown',\n esc: 'escape',\n ins: 'insert',\n left: 'arrowleft',\n mod: IS_MAC ? 'meta' : 'control',\n opt: 'alt',\n option: 'alt',\n return: 'enter',\n right: 'arrowright',\n space: ' ',\n spacebar: ' ',\n up: 'arrowup',\n win: 'meta',\n windows: 'meta',\n}\n\nconst keyCodes: Record<string, number | undefined> = {\n 'backspace': 8,\n 'tab': 9,\n 'enter': 13,\n 'shift': 16,\n 'control': 17,\n 'alt': 18,\n 'pause': 19,\n 'capslock': 20,\n 'escape': 27,\n ' ': 32,\n 'pageup': 33,\n 'pagedown': 34,\n 'end': 35,\n 'home': 36,\n 'arrowleft': 37,\n 'arrowup': 38,\n 'arrowright': 39,\n 'arrowdown': 40,\n 'insert': 45,\n 'delete': 46,\n 'meta': 91,\n 'numlock': 144,\n 'scrolllock': 145,\n ';': 186,\n '=': 187,\n ',': 188,\n '-': 189,\n '.': 190,\n '/': 191,\n '`': 192,\n '[': 219,\n '\\\\': 220,\n ']': 221,\n \"'\": 222,\n 'f1': 112,\n 'f2': 113,\n 'f3': 114,\n 'f4': 115,\n 'f5': 116,\n 'f6': 117,\n 'f7': 118,\n 'f8': 119,\n 'f9': 120,\n 'f10': 121,\n 'f11': 122,\n 'f12': 123,\n 'f13': 124,\n 'f14': 125,\n 'f15': 126,\n 'f16': 127,\n 'f17': 128,\n 'f18': 129,\n 'f19': 130,\n 'f20': 131,\n}\n\nexport function isHotkey(hotkey: string, event: KeyboardEventLike): boolean {\n return compareHotkey(parseHotkey(hotkey), event)\n}\n\nfunction parseHotkey(hotkey: string): HotKey {\n // Ensure that all the modifiers are set to false unless the hotkey has them.\n const parsedHotkey: HotKey = {\n altKey: false,\n ctrlKey: false,\n metaKey: false,\n shiftKey: false,\n }\n\n // Special case to handle the `+` key since we use it as a separator.\n const hotkeySegments = hotkey.replace('++', '+add').split('+')\n\n for (const rawHotkeySegment of hotkeySegments) {\n const optional =\n rawHotkeySegment.endsWith('?') && rawHotkeySegment.length > 1\n const hotkeySegment = optional\n ? rawHotkeySegment.slice(0, -1)\n : rawHotkeySegment\n const keyName = toKeyName(hotkeySegment)\n const modifier = modifiers[keyName]\n const alias = aliases[hotkeySegment]\n const code = keyCodes[keyName]\n\n if (\n hotkeySegment.length > 1 &&\n modifier === undefined &&\n alias === undefined &&\n code === undefined\n ) {\n throw new TypeError(`Unknown modifier: \"${hotkeySegment}\"`)\n }\n\n if (hotkeySegments.length === 1 || modifier === undefined) {\n parsedHotkey.key = keyName\n parsedHotkey.keyCode = toKeyCode(hotkeySegment)\n }\n\n if (modifier !== undefined) {\n parsedHotkey[modifier] = optional ? null : true\n }\n }\n\n return parsedHotkey\n}\n\nfunction compareHotkey(\n parsedHotkey: HotKey,\n event: KeyboardEventLike,\n): boolean {\n const matchingModifiers =\n (parsedHotkey.altKey != null\n ? parsedHotkey.altKey === event.altKey\n : true) &&\n (parsedHotkey.ctrlKey != null\n ? parsedHotkey.ctrlKey === event.ctrlKey\n : true) &&\n (parsedHotkey.metaKey != null\n ? parsedHotkey.metaKey === event.metaKey\n : true) &&\n (parsedHotkey.shiftKey != null\n ? parsedHotkey.shiftKey === event.shiftKey\n : true)\n\n if (!matchingModifiers) {\n return false\n }\n\n if (parsedHotkey.keyCode !== undefined && event.keyCode !== undefined) {\n if (parsedHotkey.keyCode === 91 && event.keyCode === 93) {\n return true\n }\n\n return parsedHotkey.keyCode === event.keyCode\n }\n\n return (\n parsedHotkey.keyCode === event.keyCode ||\n parsedHotkey.key === event.key.toLowerCase()\n )\n}\n\nfunction toKeyCode(name: string): number {\n const keyName = toKeyName(name)\n const keyCode = keyCodes[keyName] ?? keyName.toUpperCase().charCodeAt(0)\n\n return keyCode\n}\n\nfunction toKeyName(name: string): string {\n const keyName = name.toLowerCase()\n\n return aliases[keyName] ?? keyName\n}\n","import type {EditorContext, EditorSnapshot} from '../editor/editor-snapshot'\nimport type {OmitFromUnion, 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 | SyntheticBehaviorEvent\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 raise(\n event: AbstractBehaviorEvent | SyntheticBehaviorEvent | CustomBehaviorEvent,\n): PickFromUnion<BehaviorAction, 'type', 'raise'> {\n return {type: 'raise', event}\n}\n\n/**\n * @beta\n */\nexport type BehaviorActionSet<TBehaviorEvent, TGuardResponse> = (\n payload: {\n /**\n * @deprecated\n * Use `snapshot` instead\n */\n context: EditorContext\n snapshot: EditorSnapshot\n event: TBehaviorEvent\n },\n guardResponse: TGuardResponse,\n) => Array<BehaviorAction>\n\nexport type InternalBehaviorAction = OmitFromUnion<\n BehaviorAction,\n 'type',\n 'raise'\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', selection: caretWordSelection}),\n raise({type: 'annotation.add', annotation: event.annotation}),\n ],\n ],\n})\n\nexport const coreAnnotationBehaviors = {\n addAnnotationOnCollapsedSelection,\n}\n","import {isPortableTextTextBlock} from '@sanity/types'\nimport {isHotkey} from '../internal-utils/is-hotkey'\nimport * as selectors from '../selectors'\nimport {isEmptyTextBlock} from '../utils/util.is-empty-text-block'\nimport {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 (!selectors.isSelectionCollapsed(snapshot)) {\n return false\n }\n\n const focusBlockObject = selectors.getFocusBlockObject(snapshot)\n const previousBlock = selectors.getPreviousBlock(snapshot)\n\n return (\n event.position.isEditor &&\n event.position.block === 'start' &&\n focusBlockObject &&\n !previousBlock\n )\n },\n actions: [\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 clickingBelowLonelyBlockObject = defineBehavior({\n on: 'mouse.click',\n guard: ({snapshot, event}) => {\n if (!selectors.isSelectionCollapsed(snapshot)) {\n return false\n }\n\n const focusBlockObject = selectors.getFocusBlockObject(snapshot)\n const nextBlock = selectors.getNextBlock(snapshot)\n\n return (\n event.position.isEditor &&\n event.position.block === 'end' &&\n focusBlockObject &&\n !nextBlock\n )\n },\n actions: [\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 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 selection: {\n anchor: {path: previousBlock.path, offset: 0},\n focus: {path: previousBlock.path, offset: 0},\n },\n }),\n ],\n ],\n})\n\nconst deletingEmptyTextBlockBeforeBlockObject = defineBehavior({\n on: 'delete.forward',\n guard: ({snapshot}) => {\n const focusTextBlock = selectors.getFocusTextBlock(snapshot)\n const selectionCollapsed = selectors.isSelectionCollapsed(snapshot)\n const nextBlock = selectors.getNextBlock(snapshot)\n\n if (!focusTextBlock || !selectionCollapsed || !nextBlock) {\n return false\n }\n\n if (\n isEmptyTextBlock(focusTextBlock.node) &&\n !isPortableTextTextBlock(nextBlock.node)\n ) {\n return {focusTextBlock, nextBlock}\n }\n\n return false\n },\n actions: [\n (_, {focusTextBlock, nextBlock}) => [\n raise({\n type: 'delete.block',\n at: focusTextBlock.path,\n }),\n raise({\n type: 'select',\n selection: {\n anchor: {path: nextBlock.path, offset: 0},\n focus: {path: nextBlock.path, offset: 0},\n },\n }),\n ],\n ],\n})\n\nexport const coreBlockObjectBehaviors = {\n arrowDownOnLonelyBlockObject,\n arrowUpOnLonelyBlockObject,\n breakingBlockObject,\n clickingAboveLonelyBlockObject,\n clickingBelowLonelyBlockObject,\n deletingEmptyTextBlockAfterBlockObject,\n deletingEmptyTextBlockBeforeBlockObject,\n}\n","import {isHotkey} from '../internal-utils/is-hotkey'\nimport {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.value === 'strong',\n ),\n actions: [() => [raise({type: 'decorator.toggle', decorator: 'strong'})]],\n }),\n emShortcut: defineBehavior({\n on: 'keyboard.keydown',\n guard: ({snapshot, event}) =>\n isHotkey('mod+i', event.originEvent) &&\n snapshot.context.schema.decorators.some(\n (decorator) => decorator.value === 'em',\n ),\n actions: [() => [raise({type: 'decorator.toggle', decorator: 'em'})]],\n }),\n underlineShortcut: defineBehavior({\n on: 'keyboard.keydown',\n guard: ({snapshot, event}) =>\n isHotkey('mod+u', event.originEvent) &&\n snapshot.context.schema.decorators.some(\n (decorator) => decorator.value === 'underline',\n ),\n actions: [\n () => [raise({type: 'decorator.toggle', decorator: 'underline'})],\n ],\n }),\n codeShortcut: defineBehavior({\n on: 'keyboard.keydown',\n guard: ({snapshot, event}) =>\n isHotkey(\"mod+'\", event.originEvent) &&\n snapshot.context.schema.decorators.some(\n (decorator) => decorator.value === 'code',\n ),\n actions: [() => [raise({type: 'decorator.toggle', decorator: 'code'})]],\n }),\n}\n","import * as selectors from '../selectors'\nimport {defineBehavior} 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]?.value,\n },\n placement: 'after',\n }),\n ],\n ],\n})\n\nconst breakingAtTheStartOfTextBlock = defineBehavior({\n on: 'insert.break',\n guard: ({snapshot}) => {\n const focusTextBlock = selectors.getFocusTextBlock(snapshot)\n const selectionCollapsed = selectors.isSelectionCollapsed(snapshot)\n\n if (!snapshot.context.selection || !focusTextBlock || !selectionCollapsed) {\n return false\n }\n\n const focusSpan = selectors.getFocusSpan(snapshot)\n\n const focusDecorators = focusSpan?.node.marks?.filter(\n (mark) =>\n snapshot.context.schema.decorators.some(\n (decorator) => decorator.value === mark,\n ) ?? [],\n )\n const focusAnnotations =\n focusSpan?.node.marks?.filter(\n (mark) =>\n !snapshot.context.schema.decorators.some(\n (decorator) => decorator.value === mark,\n ),\n ) ?? []\n const focusListItem = focusTextBlock.node.listItem\n const focusLevel = focusTextBlock.node.level\n\n const atTheStartOfBlock =\n selectors.isAtTheStartOfBlock(focusTextBlock)(snapshot)\n\n if (atTheStartOfBlock) {\n return {focusAnnotations, focusDecorators, focusListItem, focusLevel}\n }\n\n return false\n },\n actions: [\n (\n {snapshot},\n {focusAnnotations, focusDecorators, focusListItem, focusLevel},\n ) => [\n raise({\n type: 'insert.block',\n block: {\n _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]?.value,\n },\n placement: 'before',\n select: 'none',\n }),\n ],\n ],\n})\n\nexport const coreInsertBreakBehaviors = {\n breakingAtTheEndOfTextBlock,\n breakingAtTheStartOfTextBlock,\n}\n","import {createGuards} from '../behavior-actions/behavior.guards'\nimport {isHotkey} from '../internal-utils/is-hotkey'\nimport * as selectors from '../selectors'\nimport {isEmptyTextBlock} from '../utils/util.is-empty-text-block'\nimport {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":["IS_MAC","window","test","navigator","userAgent","modifiers","alt","control","meta","shift","aliases","add","break","cmd","command","ctl","ctrl","del","down","esc","ins","left","mod","opt","option","return","right","space","spacebar","up","win","windows","keyCodes","isHotkey","hotkey","event","compareHotkey","parseHotkey","parsedHotkey","altKey","ctrlKey","metaKey","shiftKey","hotkeySegments","replace","split","rawHotkeySegment","optional","endsWith","length","hotkeySegment","slice","keyName","toKeyName","modifier","alias","code","undefined","TypeError","key","keyCode","toKeyCode","toLowerCase","name","toUpperCase","charCodeAt","raise","type","defineBehavior","behavior","addAnnotationOnCollapsedSelection","on","guard","snapshot","selectors","caretWordSelection","context","selection","actions","annotation","coreAnnotationBehaviors","arrowDownOnLonelyBlockObject","originEvent","focusBlockObject","nextBlock","block","_type","schema","placement","arrowUpOnLonelyBlockObject","previousBlock","breakingBlockObject","clickingAboveLonelyBlockObject","position","isEditor","clickingBelowLonelyBlockObject","deletingEmptyTextBlockAfterBlockObject","focusTextBlock","selectionCollapsed","isEmptyTextBlock","node","isPortableTextTextBlock","_","at","path","anchor","offset","focus","deletingEmptyTextBlockBeforeBlockObject","coreBlockObjectBehaviors","coreDecoratorBehaviors","strongShortcut","decorators","some","decorator","value","emShortcut","underlineShortcut","codeShortcut","coreDndBehaviors","dragOrigin","beta","internalDrag","origin","breakingAtTheEndOfTextBlock","atTheEndOfBlock","focusListItem","listItem","focusLevel","level","children","span","text","marks","markDefs","style","styles","breakingAtTheStartOfTextBlock","focusSpan","focusDecorators","filter","mark","focusAnnotations","select","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.js","sources":["../../src/internal-utils/is-hotkey.ts","../../src/behaviors/behavior.types.action.ts","../../src/behaviors/behavior.types.behavior.ts","../../src/behaviors/behavior.core.annotations.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":["export interface KeyboardEventLike {\n key: string\n keyCode?: number\n altKey: boolean\n ctrlKey: boolean\n metaKey: boolean\n shiftKey: boolean\n}\n\ninterface HotKey {\n keyCode?: number | undefined\n key?: string | undefined\n altKey: boolean | null\n ctrlKey: boolean | null\n metaKey: boolean | null\n shiftKey: boolean | null\n}\n\nconst IS_MAC =\n typeof window !== 'undefined' &&\n /Mac|iPod|iPhone|iPad/.test(window.navigator.userAgent)\n\ntype Modifier = 'altKey' | 'ctrlKey' | 'metaKey' | 'shiftKey'\n\nconst modifiers: Record<string, Modifier | undefined> = {\n alt: 'altKey',\n control: 'ctrlKey',\n meta: 'metaKey',\n shift: 'shiftKey',\n}\n\nconst aliases: Record<string, string | undefined> = {\n add: '+',\n break: 'pause',\n cmd: 'meta',\n command: 'meta',\n ctl: 'control',\n ctrl: 'control',\n del: 'delete',\n down: 'arrowdown',\n esc: 'escape',\n ins: 'insert',\n left: 'arrowleft',\n mod: IS_MAC ? 'meta' : 'control',\n opt: 'alt',\n option: 'alt',\n return: 'enter',\n right: 'arrowright',\n space: ' ',\n spacebar: ' ',\n up: 'arrowup',\n win: 'meta',\n windows: 'meta',\n}\n\nconst keyCodes: Record<string, number | undefined> = {\n 'backspace': 8,\n 'tab': 9,\n 'enter': 13,\n 'shift': 16,\n 'control': 17,\n 'alt': 18,\n 'pause': 19,\n 'capslock': 20,\n 'escape': 27,\n ' ': 32,\n 'pageup': 33,\n 'pagedown': 34,\n 'end': 35,\n 'home': 36,\n 'arrowleft': 37,\n 'arrowup': 38,\n 'arrowright': 39,\n 'arrowdown': 40,\n 'insert': 45,\n 'delete': 46,\n 'meta': 91,\n 'numlock': 144,\n 'scrolllock': 145,\n ';': 186,\n '=': 187,\n ',': 188,\n '-': 189,\n '.': 190,\n '/': 191,\n '`': 192,\n '[': 219,\n '\\\\': 220,\n ']': 221,\n \"'\": 222,\n 'f1': 112,\n 'f2': 113,\n 'f3': 114,\n 'f4': 115,\n 'f5': 116,\n 'f6': 117,\n 'f7': 118,\n 'f8': 119,\n 'f9': 120,\n 'f10': 121,\n 'f11': 122,\n 'f12': 123,\n 'f13': 124,\n 'f14': 125,\n 'f15': 126,\n 'f16': 127,\n 'f17': 128,\n 'f18': 129,\n 'f19': 130,\n 'f20': 131,\n}\n\nexport function isHotkey(hotkey: string, event: KeyboardEventLike): boolean {\n return compareHotkey(parseHotkey(hotkey), event)\n}\n\nfunction parseHotkey(hotkey: string): HotKey {\n // Ensure that all the modifiers are set to false unless the hotkey has them.\n const parsedHotkey: HotKey = {\n altKey: false,\n ctrlKey: false,\n metaKey: false,\n shiftKey: false,\n }\n\n // Special case to handle the `+` key since we use it as a separator.\n const hotkeySegments = hotkey.replace('++', '+add').split('+')\n\n for (const rawHotkeySegment of hotkeySegments) {\n const optional =\n rawHotkeySegment.endsWith('?') && rawHotkeySegment.length > 1\n const hotkeySegment = optional\n ? rawHotkeySegment.slice(0, -1)\n : rawHotkeySegment\n const keyName = toKeyName(hotkeySegment)\n const modifier = modifiers[keyName]\n const alias = aliases[hotkeySegment]\n const code = keyCodes[keyName]\n\n if (\n hotkeySegment.length > 1 &&\n modifier === undefined &&\n alias === undefined &&\n code === undefined\n ) {\n throw new TypeError(`Unknown modifier: \"${hotkeySegment}\"`)\n }\n\n if (hotkeySegments.length === 1 || modifier === undefined) {\n parsedHotkey.key = keyName\n parsedHotkey.keyCode = toKeyCode(hotkeySegment)\n }\n\n if (modifier !== undefined) {\n parsedHotkey[modifier] = optional ? null : true\n }\n }\n\n return parsedHotkey\n}\n\nfunction compareHotkey(\n parsedHotkey: HotKey,\n event: KeyboardEventLike,\n): boolean {\n const matchingModifiers =\n (parsedHotkey.altKey != null\n ? parsedHotkey.altKey === event.altKey\n : true) &&\n (parsedHotkey.ctrlKey != null\n ? parsedHotkey.ctrlKey === event.ctrlKey\n : true) &&\n (parsedHotkey.metaKey != null\n ? parsedHotkey.metaKey === event.metaKey\n : true) &&\n (parsedHotkey.shiftKey != null\n ? parsedHotkey.shiftKey === event.shiftKey\n : true)\n\n if (!matchingModifiers) {\n return false\n }\n\n if (parsedHotkey.keyCode !== undefined && event.keyCode !== undefined) {\n if (parsedHotkey.keyCode === 91 && event.keyCode === 93) {\n return true\n }\n\n return parsedHotkey.keyCode === event.keyCode\n }\n\n return (\n parsedHotkey.keyCode === event.keyCode ||\n parsedHotkey.key === event.key.toLowerCase()\n )\n}\n\nfunction toKeyCode(name: string): number {\n const keyName = toKeyName(name)\n const keyCode = keyCodes[keyName] ?? keyName.toUpperCase().charCodeAt(0)\n\n return keyCode\n}\n\nfunction toKeyName(name: string): string {\n const keyName = name.toLowerCase()\n\n return aliases[keyName] ?? keyName\n}\n","import type {EditorContext, EditorSnapshot} from '../editor/editor-snapshot'\nimport type {OmitFromUnion, 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 | SyntheticBehaviorEvent\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 raise(\n event: AbstractBehaviorEvent | SyntheticBehaviorEvent | CustomBehaviorEvent,\n): PickFromUnion<BehaviorAction, 'type', 'raise'> {\n return {type: 'raise', event}\n}\n\n/**\n * @beta\n */\nexport type BehaviorActionSet<TBehaviorEvent, TGuardResponse> = (\n payload: {\n /**\n * @deprecated\n * Use `snapshot` instead\n */\n context: EditorContext\n snapshot: EditorSnapshot\n event: TBehaviorEvent\n },\n guardResponse: TGuardResponse,\n) => Array<BehaviorAction>\n\nexport type InternalBehaviorAction = OmitFromUnion<\n BehaviorAction,\n 'type',\n 'raise'\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', selection: caretWordSelection}),\n raise({type: 'annotation.add', annotation: event.annotation}),\n ],\n ],\n})\n\nexport const coreAnnotationBehaviors = {\n addAnnotationOnCollapsedSelection,\n}\n","import {isPortableTextTextBlock} from '@sanity/types'\nimport {isHotkey} from '../internal-utils/is-hotkey'\nimport * as selectors from '../selectors'\nimport {isEmptyTextBlock} from '../utils/util.is-empty-text-block'\nimport {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 selection: 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 selection: 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 selection: {\n anchor: {path: previousBlock.path, offset: 0},\n focus: {path: previousBlock.path, offset: 0},\n },\n }),\n ],\n ],\n})\n\nconst deletingEmptyTextBlockBeforeBlockObject = defineBehavior({\n on: 'delete.forward',\n guard: ({snapshot}) => {\n const focusTextBlock = selectors.getFocusTextBlock(snapshot)\n const selectionCollapsed = selectors.isSelectionCollapsed(snapshot)\n const nextBlock = selectors.getNextBlock(snapshot)\n\n if (!focusTextBlock || !selectionCollapsed || !nextBlock) {\n return false\n }\n\n if (\n isEmptyTextBlock(focusTextBlock.node) &&\n !isPortableTextTextBlock(nextBlock.node)\n ) {\n return {focusTextBlock, nextBlock}\n }\n\n return false\n },\n actions: [\n (_, {focusTextBlock, nextBlock}) => [\n raise({\n type: 'delete.block',\n at: focusTextBlock.path,\n }),\n raise({\n type: 'select',\n selection: {\n anchor: {path: nextBlock.path, offset: 0},\n focus: {path: nextBlock.path, offset: 0},\n },\n }),\n ],\n ],\n})\n\nexport const coreBlockObjectBehaviors = {\n arrowDownOnLonelyBlockObject,\n arrowUpOnLonelyBlockObject,\n breakingBlockObject,\n clickingAboveLonelyBlockObject,\n clickingBelowLonelyBlockObject,\n deletingEmptyTextBlockAfterBlockObject,\n deletingEmptyTextBlockBeforeBlockObject,\n}\n","import {isHotkey} from '../internal-utils/is-hotkey'\nimport {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.value === 'strong',\n ),\n actions: [() => [raise({type: 'decorator.toggle', decorator: 'strong'})]],\n }),\n emShortcut: defineBehavior({\n on: 'keyboard.keydown',\n guard: ({snapshot, event}) =>\n isHotkey('mod+i', event.originEvent) &&\n snapshot.context.schema.decorators.some(\n (decorator) => decorator.value === 'em',\n ),\n actions: [() => [raise({type: 'decorator.toggle', decorator: 'em'})]],\n }),\n underlineShortcut: defineBehavior({\n on: 'keyboard.keydown',\n guard: ({snapshot, event}) =>\n isHotkey('mod+u', event.originEvent) &&\n snapshot.context.schema.decorators.some(\n (decorator) => decorator.value === 'underline',\n ),\n actions: [\n () => [raise({type: 'decorator.toggle', decorator: 'underline'})],\n ],\n }),\n codeShortcut: defineBehavior({\n on: 'keyboard.keydown',\n guard: ({snapshot, event}) =>\n isHotkey(\"mod+'\", event.originEvent) &&\n snapshot.context.schema.decorators.some(\n (decorator) => decorator.value === 'code',\n ),\n actions: [() => [raise({type: 'decorator.toggle', decorator: 'code'})]],\n }),\n}\n","import * as selectors from '../selectors'\nimport {defineBehavior} 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]?.value,\n },\n placement: 'after',\n }),\n ],\n ],\n})\n\nconst breakingAtTheStartOfTextBlock = defineBehavior({\n on: 'insert.break',\n guard: ({snapshot}) => {\n const focusTextBlock = selectors.getFocusTextBlock(snapshot)\n const selectionCollapsed = selectors.isSelectionCollapsed(snapshot)\n\n if (!snapshot.context.selection || !focusTextBlock || !selectionCollapsed) {\n return false\n }\n\n const focusSpan = selectors.getFocusSpan(snapshot)\n\n const focusDecorators = focusSpan?.node.marks?.filter(\n (mark) =>\n snapshot.context.schema.decorators.some(\n (decorator) => decorator.value === mark,\n ) ?? [],\n )\n const focusAnnotations =\n focusSpan?.node.marks?.filter(\n (mark) =>\n !snapshot.context.schema.decorators.some(\n (decorator) => decorator.value === mark,\n ),\n ) ?? []\n const focusListItem = focusTextBlock.node.listItem\n const focusLevel = focusTextBlock.node.level\n\n const atTheStartOfBlock =\n selectors.isAtTheStartOfBlock(focusTextBlock)(snapshot)\n\n if (atTheStartOfBlock) {\n return {focusAnnotations, focusDecorators, focusListItem, focusLevel}\n }\n\n return false\n },\n actions: [\n (\n {snapshot},\n {focusAnnotations, focusDecorators, focusListItem, focusLevel},\n ) => [\n raise({\n type: 'insert.block',\n block: {\n _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]?.value,\n },\n placement: 'before',\n select: 'none',\n }),\n ],\n ],\n})\n\nexport const coreInsertBreakBehaviors = {\n breakingAtTheEndOfTextBlock,\n breakingAtTheStartOfTextBlock,\n}\n","import {createGuards} from '../behavior-actions/behavior.guards'\nimport {isHotkey} from '../internal-utils/is-hotkey'\nimport * as selectors from '../selectors'\nimport {isEmptyTextBlock} from '../utils/util.is-empty-text-block'\nimport {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":["IS_MAC","window","test","navigator","userAgent","modifiers","alt","control","meta","shift","aliases","add","break","cmd","command","ctl","ctrl","del","down","esc","ins","left","mod","opt","option","return","right","space","spacebar","up","win","windows","keyCodes","isHotkey","hotkey","event","compareHotkey","parseHotkey","parsedHotkey","altKey","ctrlKey","metaKey","shiftKey","hotkeySegments","replace","split","rawHotkeySegment","optional","endsWith","length","hotkeySegment","slice","keyName","toKeyName","modifier","alias","code","undefined","TypeError","key","keyCode","toKeyCode","toLowerCase","name","toUpperCase","charCodeAt","raise","type","defineBehavior","behavior","addAnnotationOnCollapsedSelection","on","guard","snapshot","selectors","caretWordSelection","context","selection","actions","annotation","coreAnnotationBehaviors","arrowDownOnLonelyBlockObject","originEvent","focusBlockObject","nextBlock","block","_type","schema","placement","arrowUpOnLonelyBlockObject","previousBlock","breakingBlockObject","clickingAboveLonelyBlockObject","readOnly","position","isEditor","select","clickingBelowLonelyBlockObject","deletingEmptyTextBlockAfterBlockObject","focusTextBlock","selectionCollapsed","isEmptyTextBlock","node","isPortableTextTextBlock","_","at","path","anchor","offset","focus","deletingEmptyTextBlockBeforeBlockObject","coreBlockObjectBehaviors","coreDecoratorBehaviors","strongShortcut","decorators","some","decorator","value","emShortcut","underlineShortcut","codeShortcut","coreDndBehaviors","dragOrigin","beta","internalDrag","origin","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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"}
@@ -6727,7 +6727,7 @@ const editorMachine = setup({
6727
6727
  actions: "handle behavior event",
6728
6728
  guard: ({
6729
6729
  event
6730
- }) => event.behaviorEvent.type === "clipboard.copy" || event.behaviorEvent.type === "serialize" || event.behaviorEvent.type === "serialization.failure" || event.behaviorEvent.type === "serialization.success" || event.behaviorEvent.type === "select"
6730
+ }) => event.behaviorEvent.type === "clipboard.copy" || event.behaviorEvent.type === "mouse.click" || event.behaviorEvent.type === "serialize" || event.behaviorEvent.type === "serialization.failure" || event.behaviorEvent.type === "serialization.success" || event.behaviorEvent.type === "select"
6731
6731
  }
6732
6732
  },
6733
6733
  states: {