@portabletext/editor 1.44.11 → 1.44.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -214,19 +214,34 @@ const addAnnotationOnCollapsedSelection = {
214
214
  snapshot,
215
215
  event
216
216
  }) => {
217
- if (!selector_isOverlappingSelection.isSelectionCollapsed(snapshot))
217
+ if (snapshot.context.readOnly || snapshot.context.selection && !selector_isOverlappingSelection.isSelectionCollapsed(snapshot))
218
218
  return !1;
219
- const focusBlockObject = selector_isOverlappingSelection.getFocusBlockObject(snapshot), previousBlock = selector_isOverlappingSelection.getPreviousBlock(snapshot);
219
+ const focusBlockObject = selector_isOverlappingSelection.getFocusBlockObject({
220
+ context: {
221
+ ...snapshot.context,
222
+ selection: event.position.selection
223
+ }
224
+ }), previousBlock = selector_isOverlappingSelection.getPreviousBlock({
225
+ context: {
226
+ ...snapshot.context,
227
+ selection: event.position.selection
228
+ }
229
+ });
220
230
  return event.position.isEditor && event.position.block === "start" && focusBlockObject && !previousBlock;
221
231
  },
222
232
  actions: [({
223
- snapshot
233
+ snapshot,
234
+ event
224
235
  }) => [raise({
236
+ type: "select",
237
+ selection: event.position.selection
238
+ }), raise({
225
239
  type: "insert.block",
226
240
  block: {
227
241
  _type: snapshot.context.schema.block.name
228
242
  },
229
- placement: "before"
243
+ placement: "before",
244
+ select: "start"
230
245
  })]]
231
246
  }, clickingBelowLonelyBlockObject = {
232
247
  on: "mouse.click",
@@ -234,19 +249,34 @@ const addAnnotationOnCollapsedSelection = {
234
249
  snapshot,
235
250
  event
236
251
  }) => {
237
- if (!selector_isOverlappingSelection.isSelectionCollapsed(snapshot))
252
+ if (snapshot.context.readOnly || snapshot.context.selection && !selector_isOverlappingSelection.isSelectionCollapsed(snapshot))
238
253
  return !1;
239
- const focusBlockObject = selector_isOverlappingSelection.getFocusBlockObject(snapshot), nextBlock = selector_isOverlappingSelection.getNextBlock(snapshot);
254
+ const focusBlockObject = selector_isOverlappingSelection.getFocusBlockObject({
255
+ context: {
256
+ ...snapshot.context,
257
+ selection: event.position.selection
258
+ }
259
+ }), nextBlock = selector_isOverlappingSelection.getNextBlock({
260
+ context: {
261
+ ...snapshot.context,
262
+ selection: event.position.selection
263
+ }
264
+ });
240
265
  return event.position.isEditor && event.position.block === "end" && focusBlockObject && !nextBlock;
241
266
  },
242
267
  actions: [({
243
- snapshot
268
+ snapshot,
269
+ event
244
270
  }) => [raise({
271
+ type: "select",
272
+ selection: event.position.selection
273
+ }), raise({
245
274
  type: "insert.block",
246
275
  block: {
247
276
  _type: snapshot.context.schema.block.name
248
277
  },
249
- placement: "after"
278
+ placement: "after",
279
+ select: "start"
250
280
  })]]
251
281
  }, deletingEmptyTextBlockAfterBlockObject = {
252
282
  on: "delete.backward",
@@ -1 +1 @@
1
- {"version":3,"file":"behavior.core.cjs","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","isSelectionCollapsed","caretWordSelection","getCaretWordSelection","context","selection","actions","annotation","coreAnnotationBehaviors","arrowDownOnLonelyBlockObject","originEvent","focusBlockObject","nextBlock","block","_type","schema","placement","arrowUpOnLonelyBlockObject","previousBlock","breakingBlockObject","getFocusBlockObject","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","isOverlappingSelection","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.cjs","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","isSelectionCollapsed","caretWordSelection","getCaretWordSelection","context","selection","actions","annotation","coreAnnotationBehaviors","arrowDownOnLonelyBlockObject","originEvent","focusBlockObject","nextBlock","block","_type","schema","placement","arrowUpOnLonelyBlockObject","previousBlock","breakingBlockObject","getFocusBlockObject","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","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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"}
@@ -56,21 +56,58 @@ function resolveEnabledListItems(blockType) {
56
56
  function findBlockType(type) {
57
57
  return type.type ? findBlockType(type.type) : type.name === "block" ? type : null;
58
58
  }
59
+ const defaultKeyGenerator = () => randomKey(12), getByteHexTable = /* @__PURE__ */ (() => {
60
+ let table;
61
+ return () => {
62
+ if (table)
63
+ return table;
64
+ table = [];
65
+ for (let i = 0; i < 256; ++i)
66
+ table[i] = (i + 256).toString(16).slice(1);
67
+ return table;
68
+ };
69
+ })();
70
+ function whatwgRNG(length = 16) {
71
+ const rnds8 = new Uint8Array(length);
72
+ return getRandomValues__default.default(rnds8), rnds8;
73
+ }
74
+ function randomKey(length) {
75
+ const table = getByteHexTable();
76
+ return whatwgRNG(length).reduce((str, n) => str + table[n], "").slice(0, length);
77
+ }
59
78
  function defineSchema(definition) {
60
79
  return definition;
61
80
  }
81
+ const temporaryImageName = `tmp-${defaultKeyGenerator()}-image`, temporaryUrlName = `tmp-${defaultKeyGenerator()}-url`, temporaryObjectNames = {
82
+ image: temporaryImageName,
83
+ url: temporaryUrlName
84
+ }, objectNames = {
85
+ [temporaryImageName]: "image",
86
+ [temporaryUrlName]: "url"
87
+ }, defaultObjectTitles = {
88
+ image: "Image",
89
+ url: "URL"
90
+ };
62
91
  function compileSchemaDefinition(definition) {
63
92
  const blockObjects = definition?.blockObjects?.map((blockObject) => types.defineType({
64
93
  type: "object",
65
94
  // Very naive way to work around `SanitySchema.compile` adding default
66
- // fields to objects with the name `image`
67
- name: blockObject.name === "image" ? "tmp-image" : blockObject.name,
68
- title: blockObject.name === "image" && blockObject.title === void 0 ? "Image" : blockObject.title,
95
+ // fields to objects with certain names.
96
+ name: temporaryObjectNames[blockObject.name] ?? blockObject.name,
97
+ title: blockObject.title === void 0 ? (
98
+ // This avoids the default title which is a title case of the object name
99
+ defaultObjectTitles[blockObject.name]
100
+ ) : blockObject.title,
69
101
  fields: []
70
102
  })) ?? [], inlineObjects = definition?.inlineObjects?.map((inlineObject) => types.defineType({
71
103
  type: "object",
72
- name: inlineObject.name,
73
- title: inlineObject.title,
104
+ // Very naive way to work around `SanitySchema.compile` adding default
105
+ // fields to objects with certain names.
106
+ name: temporaryObjectNames[inlineObject.name] ?? inlineObject.name,
107
+ title: inlineObject.title === void 0 ? (
108
+ // This avoids the default title which is a title case of the object name
109
+ defaultObjectTitles[inlineObject.name]
110
+ ) : inlineObject.title,
74
111
  fields: []
75
112
  })) ?? [], portableTextSchema = types.defineField({
76
113
  type: "array",
@@ -108,14 +145,18 @@ function compileSchemaDefinition(definition) {
108
145
  }).get("portable-text"), pteSchema = createEditorSchema(schema$1);
109
146
  return {
110
147
  ...pteSchema,
111
- blockObjects: pteSchema.blockObjects.map((blockObject) => blockObject.name === "tmp-image" ? {
148
+ blockObjects: pteSchema.blockObjects.map((blockObject) => objectNames[blockObject.name] !== void 0 ? {
112
149
  ...blockObject,
113
- name: "image",
150
+ name: objectNames[blockObject.name],
114
151
  type: {
115
152
  ...blockObject.type,
116
- name: "image"
153
+ name: objectNames[blockObject.name]
117
154
  }
118
- } : blockObject)
155
+ } : blockObject),
156
+ inlineObjects: pteSchema.inlineObjects.map((inlineObject) => objectNames[inlineObject.name] !== void 0 ? {
157
+ ...inlineObject,
158
+ name: objectNames[inlineObject.name]
159
+ } : inlineObject)
119
160
  };
120
161
  }
121
162
  const rootName = "sanity-pte:";
@@ -1627,25 +1668,6 @@ function isRedoing(editor) {
1627
1668
  function setIsRedoing(editor, isRedoing2) {
1628
1669
  IS_REDOING.set(editor, isRedoing2);
1629
1670
  }
1630
- const defaultKeyGenerator = () => randomKey(12), getByteHexTable = /* @__PURE__ */ (() => {
1631
- let table;
1632
- return () => {
1633
- if (table)
1634
- return table;
1635
- table = [];
1636
- for (let i = 0; i < 256; ++i)
1637
- table[i] = (i + 256).toString(16).slice(1);
1638
- return table;
1639
- };
1640
- })();
1641
- function whatwgRNG(length = 16) {
1642
- const rnds8 = new Uint8Array(length);
1643
- return getRandomValues__default.default(rnds8), rnds8;
1644
- }
1645
- function randomKey(length) {
1646
- const table = getByteHexTable();
1647
- return whatwgRNG(length).reduce((str, n) => str + table[n], "").slice(0, length);
1648
- }
1649
1671
  const CURRENT_ACTION_ID = /* @__PURE__ */ new WeakMap();
1650
1672
  function withApplyingBehaviorActions(editor, fn) {
1651
1673
  CURRENT_ACTION_ID.set(editor, defaultKeyGenerator()), slate.Editor.withoutNormalizing(editor, fn), CURRENT_ACTION_ID.set(editor, void 0);
@@ -6701,7 +6723,7 @@ const editorMachine = xstate.setup({
6701
6723
  actions: "handle behavior event",
6702
6724
  guard: ({
6703
6725
  event
6704
- }) => event.behaviorEvent.type === "clipboard.copy" || event.behaviorEvent.type === "serialize" || event.behaviorEvent.type === "serialization.failure" || event.behaviorEvent.type === "serialization.success" || event.behaviorEvent.type === "select"
6726
+ }) => 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"
6705
6727
  }
6706
6728
  },
6707
6729
  states: {