@portabletext/editor 1.28.0 → 1.30.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/lib/_chunks-cjs/behavior.core.cjs +40 -37
  2. package/lib/_chunks-cjs/behavior.core.cjs.map +1 -1
  3. package/lib/_chunks-cjs/parse-blocks.cjs +79 -0
  4. package/lib/_chunks-cjs/parse-blocks.cjs.map +1 -0
  5. package/lib/_chunks-cjs/plugin.event-listener.cjs +55 -97
  6. package/lib/_chunks-cjs/plugin.event-listener.cjs.map +1 -1
  7. package/lib/_chunks-cjs/selector.get-selection-start-point.cjs +15 -0
  8. package/lib/_chunks-cjs/selector.get-selection-start-point.cjs.map +1 -0
  9. package/lib/_chunks-es/behavior.core.js +40 -37
  10. package/lib/_chunks-es/behavior.core.js.map +1 -1
  11. package/lib/_chunks-es/parse-blocks.js +80 -0
  12. package/lib/_chunks-es/parse-blocks.js.map +1 -0
  13. package/lib/_chunks-es/plugin.event-listener.js +57 -98
  14. package/lib/_chunks-es/plugin.event-listener.js.map +1 -1
  15. package/lib/_chunks-es/selector.get-selection-start-point.js +16 -0
  16. package/lib/_chunks-es/selector.get-selection-start-point.js.map +1 -0
  17. package/lib/behaviors/index.d.cts +196 -124
  18. package/lib/behaviors/index.d.ts +196 -124
  19. package/lib/index.d.cts +248 -0
  20. package/lib/index.d.ts +248 -0
  21. package/lib/plugins/index.cjs +249 -1
  22. package/lib/plugins/index.cjs.map +1 -1
  23. package/lib/plugins/index.d.cts +246 -1
  24. package/lib/plugins/index.d.ts +246 -1
  25. package/lib/plugins/index.js +257 -3
  26. package/lib/plugins/index.js.map +1 -1
  27. package/lib/selectors/index.cjs +28 -1
  28. package/lib/selectors/index.cjs.map +1 -1
  29. package/lib/selectors/index.d.cts +21 -0
  30. package/lib/selectors/index.d.ts +21 -0
  31. package/lib/selectors/index.js +28 -0
  32. package/lib/selectors/index.js.map +1 -1
  33. package/lib/utils/index.cjs +70 -1
  34. package/lib/utils/index.cjs.map +1 -1
  35. package/lib/utils/index.d.cts +168 -2
  36. package/lib/utils/index.d.ts +168 -2
  37. package/lib/utils/index.js +71 -1
  38. package/lib/utils/index.js.map +1 -1
  39. package/package.json +2 -2
  40. package/src/behavior-actions/behavior.action.delete.ts +18 -0
  41. package/src/behavior-actions/behavior.action.insert-break.ts +3 -8
  42. package/src/behavior-actions/behavior.actions.ts +9 -0
  43. package/src/behaviors/_exports/index.ts +1 -0
  44. package/src/behaviors/behavior.core.deserialize.ts +52 -38
  45. package/src/behaviors/behavior.core.ts +4 -11
  46. package/src/behaviors/behavior.types.ts +4 -0
  47. package/src/editor/PortableTextEditor.tsx +20 -0
  48. package/src/internal-utils/__tests__/patchToOperations.test.ts +19 -21
  49. package/src/internal-utils/applyPatch.ts +11 -3
  50. package/src/plugins/index.ts +2 -0
  51. package/src/plugins/plugin.behavior.tsx +22 -0
  52. package/src/plugins/plugin.one-line.tsx +225 -0
  53. package/src/selectors/index.ts +3 -0
  54. package/src/selectors/selector.get-selection-end-point.ts +17 -0
  55. package/src/selectors/selector.get-selection-start-point.ts +17 -0
  56. package/src/selectors/selector.is-overlapping-selection.ts +46 -0
  57. package/src/utils/index.ts +4 -0
  58. package/src/utils/util.is-span.ts +12 -0
  59. package/src/utils/util.is-text-block.ts +12 -0
  60. package/src/utils/util.merge-text-blocks.ts +36 -0
  61. package/src/utils/util.split-text-block.ts +55 -0
@@ -360,34 +360,45 @@ const arrowDownOnLonelyBlockObject = {
360
360
  decorator: "code"
361
361
  })]]
362
362
  }
363
- }, coreDeserializeBehavior = {
364
- on: "deserialize",
365
- guard: ({
366
- context,
367
- event
368
- }) => {
369
- const deserializeEvents = context.converters.flatMap((converter) => {
370
- const data = event.dataTransfer.getData(converter.mimeType);
371
- return data ? [converter.deserialize({
372
- context,
373
- event: {
374
- type: "deserialize",
375
- data
376
- }
377
- })] : [];
378
- });
379
- return deserializeEvents.find((deserializeEvent) => deserializeEvent.type === "deserialization.success") || {
380
- type: "deserialization.failure",
381
- mimeType: "*/*",
382
- reason: deserializeEvents.map((deserializeEvent) => deserializeEvent.type === "deserialization.failure" ? deserializeEvent.reason : "").join(", ")
383
- };
363
+ }, coreDeserializeBehaviors = {
364
+ deserialize: {
365
+ on: "deserialize",
366
+ guard: ({
367
+ context,
368
+ event
369
+ }) => {
370
+ const deserializeEvents = context.converters.flatMap((converter) => {
371
+ const data = event.dataTransfer.getData(converter.mimeType);
372
+ return data ? [converter.deserialize({
373
+ context,
374
+ event: {
375
+ type: "deserialize",
376
+ data
377
+ }
378
+ })] : [];
379
+ });
380
+ return deserializeEvents.find((deserializeEvent) => deserializeEvent.type === "deserialization.success") || {
381
+ type: "deserialization.failure",
382
+ mimeType: "*/*",
383
+ reason: deserializeEvents.map((deserializeEvent) => deserializeEvent.type === "deserialization.failure" ? deserializeEvent.reason : "").join(", ")
384
+ };
385
+ },
386
+ actions: [({
387
+ event
388
+ }, deserializeEvent) => [raise({
389
+ ...deserializeEvent,
390
+ dataTransfer: event.dataTransfer
391
+ })]]
384
392
  },
385
- actions: [({
386
- event
387
- }, deserializeEvent) => [raise({
388
- ...deserializeEvent,
389
- dataTransfer: event.dataTransfer
390
- })]]
393
+ "deserialization.success": {
394
+ on: "deserialization.success",
395
+ actions: [({
396
+ event
397
+ }) => [raise({
398
+ type: "insert.blocks",
399
+ blocks: event.data
400
+ })]]
401
+ }
391
402
  }, atTheEndOfTextBlock = {
392
403
  on: "insert.break",
393
404
  guard: ({
@@ -701,18 +712,10 @@ const arrowDownOnLonelyBlockObject = {
701
712
  }, coreStyleBehaviors = {
702
713
  toggleStyleOff,
703
714
  toggleStyleOn
704
- }, softReturn = {
705
- on: "insert.soft break",
706
- actions: [() => [raise({
707
- type: "insert.text",
708
- text: `
709
- `
710
- })]]
711
- }, coreBehaviors = [softReturn, coreAnnotationBehaviors.toggleAnnotationOff, coreAnnotationBehaviors.toggleAnnotationOn, coreDecoratorBehaviors.toggleDecoratorOff, coreDecoratorBehaviors.toggleDecoratorOn, coreDecoratorBehaviors.strongShortcut, coreDecoratorBehaviors.emShortcut, coreDecoratorBehaviors.underlineShortcut, coreDecoratorBehaviors.codeShortcut, coreDeserializeBehavior, coreBlockObjectBehaviors.arrowDownOnLonelyBlockObject, coreBlockObjectBehaviors.arrowUpOnLonelyBlockObject, coreBlockObjectBehaviors.breakingBlockObject, coreBlockObjectBehaviors.deletingEmptyTextBlockAfterBlockObject, coreBlockObjectBehaviors.deletingEmptyTextBlockBeforeBlockObject, coreListBehaviors.toggleListItemOff, coreListBehaviors.toggleListItemOn, coreListBehaviors.clearListOnBackspace, coreListBehaviors.unindentListOnBackspace, coreListBehaviors.clearListOnEnter, coreListBehaviors.indentListOnTab, coreListBehaviors.unindentListOnShiftTab, coreInsertBreakBehaviors.atTheEndOfTextBlock, coreInsertBreakBehaviors.atTheStartOfTextBlock, coreSerializeBehaviors.serialize, coreSerializeBehaviors["serialization.success"], coreStyleBehaviors.toggleStyleOff, coreStyleBehaviors.toggleStyleOn], coreBehavior = {
712
- softReturn,
715
+ }, coreBehaviors = [coreAnnotationBehaviors.toggleAnnotationOff, coreAnnotationBehaviors.toggleAnnotationOn, coreDecoratorBehaviors.toggleDecoratorOff, coreDecoratorBehaviors.toggleDecoratorOn, coreDecoratorBehaviors.strongShortcut, coreDecoratorBehaviors.emShortcut, coreDecoratorBehaviors.underlineShortcut, coreDecoratorBehaviors.codeShortcut, coreDeserializeBehaviors.deserialize, coreDeserializeBehaviors["deserialization.success"], coreBlockObjectBehaviors.arrowDownOnLonelyBlockObject, coreBlockObjectBehaviors.arrowUpOnLonelyBlockObject, coreBlockObjectBehaviors.breakingBlockObject, coreBlockObjectBehaviors.deletingEmptyTextBlockAfterBlockObject, coreBlockObjectBehaviors.deletingEmptyTextBlockBeforeBlockObject, coreListBehaviors.toggleListItemOff, coreListBehaviors.toggleListItemOn, coreListBehaviors.clearListOnBackspace, coreListBehaviors.unindentListOnBackspace, coreListBehaviors.clearListOnEnter, coreListBehaviors.indentListOnTab, coreListBehaviors.unindentListOnShiftTab, coreInsertBreakBehaviors.atTheEndOfTextBlock, coreInsertBreakBehaviors.atTheStartOfTextBlock, coreSerializeBehaviors.serialize, coreSerializeBehaviors["serialization.success"], coreStyleBehaviors.toggleStyleOff, coreStyleBehaviors.toggleStyleOn], coreBehavior = {
713
716
  annotation: coreAnnotationBehaviors,
714
717
  decorators: coreDecoratorBehaviors,
715
- deserialize: coreDeserializeBehavior,
718
+ deserialize: coreDeserializeBehaviors,
716
719
  blockObjects: coreBlockObjectBehaviors,
717
720
  insertBreak: coreInsertBreakBehaviors,
718
721
  lists: coreListBehaviors,
@@ -1 +1 @@
1
- {"version":3,"file":"behavior.core.cjs","sources":["../../src/behaviors/behavior.types.ts","../../src/behaviors/behavior.core.annotations.ts","../../src/internal-utils/is-hotkey.ts","../../src/behaviors/behavior.core.block-objects.ts","../../src/behaviors/behavior.core.decorators.ts","../../src/behaviors/behavior.core.deserialize.ts","../../src/behaviors/behavior.core.insert-break.ts","../../src/behaviors/behavior.core.lists.ts","../../src/behaviors/behavior.core.serialize.ts","../../src/behaviors/behavior.core.style.ts","../../src/behaviors/behavior.core.ts"],"sourcesContent":["import type {\n KeyedSegment,\n PortableTextBlock,\n PortableTextTextBlock,\n} from '@sanity/types'\nimport type {TextUnit} from 'slate'\nimport type {TextInsertTextOptions} from 'slate/dist/interfaces/transforms/text'\nimport type {ConverterEvent} from '../converters/converter.types'\nimport type {EditorContext} from '../editor/editor-snapshot'\nimport type {MIMEType} from '../internal-utils/mime-type'\nimport type {OmitFromUnion, PickFromUnion} from '../type-utils'\nimport type {EditorSelection, PortableTextSlateEditor} from '../types/editor'\n\n/**\n * @beta\n */\nexport type SyntheticBehaviorEvent =\n | {\n type: 'annotation.add'\n annotation: {\n name: string\n value: {[prop: string]: unknown}\n }\n }\n | {\n type: 'annotation.remove'\n annotation: {\n name: string\n }\n }\n | {\n type: 'annotation.toggle'\n annotation: {\n name: string\n value: {[prop: string]: unknown}\n }\n }\n | {\n type: 'block.set'\n at: [KeyedSegment]\n [props: string]: unknown\n }\n | {\n type: 'block.unset'\n at: [KeyedSegment]\n props: Array<string>\n }\n | {\n type: 'blur'\n }\n | {\n type: 'data transfer.set'\n data: string\n dataTransfer: DataTransfer\n mimeType: MIMEType\n }\n | {\n type: 'decorator.add'\n decorator: string\n }\n | {\n type: 'decorator.remove'\n decorator: string\n }\n | {\n type: 'decorator.toggle'\n decorator: string\n }\n | {\n type: 'delete.backward'\n unit: TextUnit\n }\n | {\n type: 'delete.block'\n blockPath: [KeyedSegment]\n }\n | {\n type: 'delete.forward'\n unit: TextUnit\n }\n | {\n type: 'delete.text'\n anchor: BlockOffset\n focus: BlockOffset\n }\n | {\n type: 'focus'\n }\n | {\n type: 'insert.blocks'\n blocks: Array<PortableTextBlock>\n }\n | {\n type: 'insert.block object'\n placement: 'auto' | 'after' | 'before'\n blockObject: {\n name: string\n value?: {[prop: string]: unknown}\n }\n }\n | {\n type: 'insert.inline object'\n inlineObject: {\n name: string\n value?: {[prop: string]: unknown}\n }\n }\n | {\n type: 'insert.break'\n }\n | {\n type: 'insert.soft break'\n }\n | {\n type: 'insert.block'\n block: PortableTextBlock\n placement: 'auto' | 'after' | 'before'\n }\n | {\n type: 'insert.span'\n text: string\n annotations?: Array<{\n name: string\n value: {[prop: string]: unknown}\n }>\n decorators?: Array<string>\n }\n | {\n type: 'insert.text'\n text: string\n options?: TextInsertTextOptions\n }\n | {\n type: 'insert.text block'\n placement: 'auto' | 'after' | 'before'\n textBlock?: {\n children?: PortableTextTextBlock['children']\n }\n }\n | {\n type: 'list item.add'\n listItem: string\n }\n | {\n type: 'list item.remove'\n listItem: string\n }\n | {\n type: 'list item.toggle'\n listItem: string\n }\n | {\n type: 'move.block'\n at: [KeyedSegment]\n to: [KeyedSegment]\n }\n | {\n type: 'move.block down'\n at: [KeyedSegment]\n }\n | {\n type: 'move.block up'\n at: [KeyedSegment]\n }\n | {\n type: 'select'\n selection: EditorSelection\n }\n | {\n type: 'select.previous block'\n }\n | {\n type: 'select.next block'\n }\n | {\n type: 'style.add'\n style: string\n }\n | {\n type: 'style.remove'\n style: string\n }\n | {\n type: 'style.toggle'\n style: string\n }\n | {\n type: 'text block.set'\n at: [KeyedSegment]\n level?: number\n listItem?: string\n style?: string\n }\n | {\n type: 'text block.unset'\n at: [KeyedSegment]\n props: Array<'level' | 'listItem' | 'style'>\n }\n | (PickFromUnion<\n ConverterEvent,\n 'type',\n | 'deserialization.failure'\n | 'deserialization.success'\n | 'serialization.failure'\n | 'serialization.success'\n > & {dataTransfer: DataTransfer})\n\n/**\n * @beta\n */\nexport type NativeBehaviorEvent =\n | {\n type: 'copy'\n data: DataTransfer\n }\n | {\n type: 'deserialize'\n dataTransfer: DataTransfer\n }\n | {\n type: 'key.down'\n keyboardEvent: Pick<\n KeyboardEvent,\n 'key' | 'code' | 'altKey' | 'ctrlKey' | 'metaKey' | 'shiftKey'\n >\n }\n | {\n type: 'key.up'\n keyboardEvent: Pick<\n KeyboardEvent,\n 'key' | 'code' | 'altKey' | 'ctrlKey' | 'metaKey' | 'shiftKey'\n >\n }\n | {\n type: 'paste'\n data: DataTransfer\n }\n | {\n type: 'serialize'\n originEvent: 'copy' | 'cut' | 'unknown'\n dataTransfer: DataTransfer\n }\n\n/**\n * @beta\n */\nexport type CustomBehaviorEvent<\n TPayload extends Record<string, unknown> = Record<string, unknown>,\n TType extends string = string,\n TInternalType extends `custom.${TType}` = `custom.${TType}`,\n> = {\n type: TInternalType\n} & TPayload\n\nexport function isCustomBehaviorEvent(\n event: BehaviorEvent,\n): event is CustomBehaviorEvent {\n return event.type.startsWith('custom.')\n}\n\n/**\n * @beta\n */\nexport type BehaviorActionIntend =\n | SyntheticBehaviorEvent\n | {\n type: 'raise'\n event: SyntheticBehaviorEvent | CustomBehaviorEvent\n }\n | {\n type: 'noop'\n }\n | {\n type: 'effect'\n effect: () => void\n }\n\n/**\n * @beta\n */\nexport type BehaviorAction = OmitFromUnion<\n BehaviorActionIntend,\n 'type',\n 'raise'\n> & {\n editor: PortableTextSlateEditor\n}\n\n/**\n * @beta\n */\nexport function raise(\n event: SyntheticBehaviorEvent | CustomBehaviorEvent,\n): PickFromUnion<BehaviorActionIntend, 'type', 'raise'> {\n return {type: 'raise', event}\n}\n\n/**\n * @beta\n */\nexport type BehaviorEvent =\n | SyntheticBehaviorEvent\n | NativeBehaviorEvent\n | CustomBehaviorEvent\n\n/**\n * @beta\n */\nexport type Behavior<\n TBehaviorEventType extends BehaviorEvent['type'] = BehaviorEvent['type'],\n TGuardResponse = true,\n TBehaviorEvent extends BehaviorEvent = PickFromUnion<\n BehaviorEvent,\n 'type',\n TBehaviorEventType\n >,\n> = {\n /**\n * The internal editor event that triggers this behavior.\n */\n on: TBehaviorEventType\n /**\n * Predicate function that determines if the behavior should be executed.\n * Returning a non-nullable value from the guard will pass the value to the\n * actions and execute them.\n */\n guard?: BehaviorGuard<TBehaviorEvent, TGuardResponse>\n /**\n * Array of behavior action sets.\n */\n actions: Array<BehaviorActionIntendSet<TBehaviorEvent, TGuardResponse>>\n}\n\n/**\n * @beta\n */\nexport type BehaviorGuard<TBehaviorEvent, TGuardResponse> = ({\n context,\n event,\n}: {\n context: EditorContext\n event: TBehaviorEvent\n}) => TGuardResponse | false\n\n/**\n * @beta\n */\nexport type BehaviorActionIntendSet<TBehaviorEvent, TGuardResponse> = (\n {\n context,\n event,\n }: {\n context: EditorContext\n event: TBehaviorEvent\n },\n guardResponse: TGuardResponse,\n) => Array<BehaviorActionIntend>\n\n/**\n * @beta\n *\n * @example\n *\n * ```tsx\n * const noLowerCaseA = defineBehavior({\n * on: 'insert.text',\n * guard: ({event, context}) => event.text === 'a',\n * actions: [({event, context}) => [{type: 'insert.text', text: 'A'}]],\n * })\n * ```\n *\n *\n *\n *\n *\n */\nexport function defineBehavior<\n TPayload extends Record<string, unknown>,\n TBehaviorEventType extends\n BehaviorEvent['type'] = CustomBehaviorEvent['type'],\n TGuardResponse = true,\n>(\n behavior: Behavior<\n TBehaviorEventType,\n TGuardResponse,\n TBehaviorEventType extends `custom.${infer TType}`\n ? CustomBehaviorEvent<TPayload, TType>\n : PickFromUnion<BehaviorEvent, 'type', TBehaviorEventType>\n >,\n): Behavior\nexport function defineBehavior<\n TPayload extends never = never,\n TBehaviorEventType extends BehaviorEvent['type'] = BehaviorEvent['type'],\n TGuardResponse = true,\n TBehaviorEvent extends\n BehaviorEvent = TBehaviorEventType extends `custom.${infer TType}`\n ? CustomBehaviorEvent<TPayload, TType>\n : PickFromUnion<BehaviorEvent, 'type', TBehaviorEventType>,\n>(\n behavior: Behavior<TBehaviorEventType, TGuardResponse, TBehaviorEvent>,\n): Behavior {\n return behavior as unknown as Behavior\n}\n\n/**\n * @beta\n */\nexport type BlockOffset = {\n path: [KeyedSegment]\n offset: number\n}\n","import * as selectors from '../selectors'\nimport {defineBehavior, raise} from './behavior.types'\n\nconst toggleAnnotationOff = defineBehavior({\n on: 'annotation.toggle',\n guard: ({context, event}) =>\n selectors.isActiveAnnotation(event.annotation.name)({context}),\n actions: [\n ({event}) => [\n raise({type: 'annotation.remove', annotation: event.annotation}),\n ],\n ],\n})\n\nconst toggleAnnotationOn = defineBehavior({\n on: 'annotation.toggle',\n guard: ({context, event}) =>\n !selectors.isActiveAnnotation(event.annotation.name)({context}),\n actions: [\n ({event}) => [\n raise({type: 'annotation.add', annotation: event.annotation}),\n ],\n ],\n})\n\nexport const coreAnnotationBehaviors = {\n toggleAnnotationOff,\n toggleAnnotationOn,\n}\n","export interface KeyboardEventLike {\n key: string\n keyCode?: number\n altKey: boolean\n ctrlKey: boolean\n metaKey: boolean\n shiftKey: boolean\n}\n\ninterface HotKey {\n keyCode?: number | undefined\n key?: string | undefined\n altKey: boolean | null\n ctrlKey: boolean | null\n metaKey: boolean | null\n shiftKey: boolean | null\n}\n\nconst IS_MAC =\n typeof window !== 'undefined' &&\n /Mac|iPod|iPhone|iPad/.test(window.navigator.userAgent)\n\ntype Modifier = 'altKey' | 'ctrlKey' | 'metaKey' | 'shiftKey'\n\nconst modifiers: Record<string, Modifier | undefined> = {\n alt: 'altKey',\n control: 'ctrlKey',\n meta: 'metaKey',\n shift: 'shiftKey',\n}\n\nconst aliases: Record<string, string | undefined> = {\n add: '+',\n break: 'pause',\n cmd: 'meta',\n command: 'meta',\n ctl: 'control',\n ctrl: 'control',\n del: 'delete',\n down: 'arrowdown',\n esc: 'escape',\n ins: 'insert',\n left: 'arrowleft',\n mod: IS_MAC ? 'meta' : 'control',\n opt: 'alt',\n option: 'alt',\n return: 'enter',\n right: 'arrowright',\n space: ' ',\n spacebar: ' ',\n up: 'arrowup',\n win: 'meta',\n windows: 'meta',\n}\n\nconst keyCodes: Record<string, number | undefined> = {\n 'backspace': 8,\n 'tab': 9,\n 'enter': 13,\n 'shift': 16,\n 'control': 17,\n 'alt': 18,\n 'pause': 19,\n 'capslock': 20,\n 'escape': 27,\n ' ': 32,\n 'pageup': 33,\n 'pagedown': 34,\n 'end': 35,\n 'home': 36,\n 'arrowleft': 37,\n 'arrowup': 38,\n 'arrowright': 39,\n 'arrowdown': 40,\n 'insert': 45,\n 'delete': 46,\n 'meta': 91,\n 'numlock': 144,\n 'scrolllock': 145,\n ';': 186,\n '=': 187,\n ',': 188,\n '-': 189,\n '.': 190,\n '/': 191,\n '`': 192,\n '[': 219,\n '\\\\': 220,\n ']': 221,\n \"'\": 222,\n 'f1': 112,\n 'f2': 113,\n 'f3': 114,\n 'f4': 115,\n 'f5': 116,\n 'f6': 117,\n 'f7': 118,\n 'f8': 119,\n 'f9': 120,\n 'f10': 121,\n 'f11': 122,\n 'f12': 123,\n 'f13': 124,\n 'f14': 125,\n 'f15': 126,\n 'f16': 127,\n 'f17': 128,\n 'f18': 129,\n 'f19': 130,\n 'f20': 131,\n}\n\nexport function isHotkey(hotkey: string, event: KeyboardEventLike): boolean {\n return compareHotkey(parseHotkey(hotkey), event)\n}\n\nfunction parseHotkey(hotkey: string): HotKey {\n // Ensure that all the modifiers are set to false unless the hotkey has them.\n const parsedHotkey: HotKey = {\n altKey: false,\n ctrlKey: false,\n metaKey: false,\n shiftKey: false,\n }\n\n // Special case to handle the `+` key since we use it as a separator.\n const hotkeySegments = hotkey.replace('++', '+add').split('+')\n\n for (const rawHotkeySegment of hotkeySegments) {\n const optional =\n rawHotkeySegment.endsWith('?') && rawHotkeySegment.length > 1\n const hotkeySegment = optional\n ? rawHotkeySegment.slice(0, -1)\n : rawHotkeySegment\n const keyName = toKeyName(hotkeySegment)\n const modifier = modifiers[keyName]\n const alias = aliases[hotkeySegment]\n const code = keyCodes[keyName]\n\n if (\n hotkeySegment.length > 1 &&\n modifier === undefined &&\n alias === undefined &&\n code === undefined\n ) {\n throw new TypeError(`Unknown modifier: \"${hotkeySegment}\"`)\n }\n\n if (hotkeySegments.length === 1 || modifier === undefined) {\n parsedHotkey.key = keyName\n parsedHotkey.keyCode = toKeyCode(hotkeySegment)\n }\n\n if (modifier !== undefined) {\n parsedHotkey[modifier] = optional ? null : true\n }\n }\n\n return parsedHotkey\n}\n\nfunction compareHotkey(\n parsedHotkey: HotKey,\n event: KeyboardEventLike,\n): boolean {\n const matchingModifiers =\n (parsedHotkey.altKey != null\n ? parsedHotkey.altKey === event.altKey\n : true) &&\n (parsedHotkey.ctrlKey != null\n ? parsedHotkey.ctrlKey === event.ctrlKey\n : true) &&\n (parsedHotkey.metaKey != null\n ? parsedHotkey.metaKey === event.metaKey\n : true) &&\n (parsedHotkey.shiftKey != null\n ? parsedHotkey.shiftKey === event.shiftKey\n : true)\n\n if (!matchingModifiers) {\n return false\n }\n\n if (parsedHotkey.keyCode !== undefined && event.keyCode !== undefined) {\n if (parsedHotkey.keyCode === 91 && event.keyCode === 93) {\n return true\n }\n\n return parsedHotkey.keyCode === event.keyCode\n }\n\n return (\n parsedHotkey.keyCode === event.keyCode ||\n parsedHotkey.key === event.key.toLowerCase()\n )\n}\n\nfunction toKeyCode(name: string): number {\n const keyName = toKeyName(name)\n const keyCode = keyCodes[keyName] ?? keyName.toUpperCase().charCodeAt(0)\n\n return keyCode\n}\n\nfunction toKeyName(name: string): string {\n const keyName = name.toLowerCase()\n\n return aliases[keyName] ?? keyName\n}\n","import {isPortableTextTextBlock} from '@sanity/types'\nimport {isHotkey} from '../internal-utils/is-hotkey'\nimport * as selectors from '../selectors'\nimport {isEmptyTextBlock} from '../utils/util.is-empty-text-block'\nimport {defineBehavior, raise} from './behavior.types'\n\nconst arrowDownOnLonelyBlockObject = defineBehavior({\n on: 'key.down',\n guard: ({context, event}) => {\n const isArrowDown = isHotkey('ArrowDown', event.keyboardEvent)\n const focusBlockObject = selectors.getFocusBlockObject({context})\n const nextBlock = selectors.getNextBlock({context})\n\n return isArrowDown && focusBlockObject && !nextBlock\n },\n actions: [() => [raise({type: 'insert.text block', placement: 'after'})]],\n})\n\nconst arrowUpOnLonelyBlockObject = defineBehavior({\n on: 'key.down',\n guard: ({context, event}) => {\n const isArrowUp = isHotkey('ArrowUp', event.keyboardEvent)\n const focusBlockObject = selectors.getFocusBlockObject({context})\n const previousBlock = selectors.getPreviousBlock({context})\n\n return isArrowUp && focusBlockObject && !previousBlock\n },\n actions: [\n () => [\n raise({type: 'insert.text block', placement: 'before'}),\n raise({type: 'select.previous block'}),\n ],\n ],\n})\n\nconst breakingBlockObject = defineBehavior({\n on: 'insert.break',\n guard: ({context}) => {\n const focusBlockObject = selectors.getFocusBlockObject({context})\n const collapsedSelection = selectors.isSelectionCollapsed({context})\n\n return collapsedSelection && focusBlockObject !== undefined\n },\n actions: [() => [raise({type: 'insert.text block', placement: 'after'})]],\n})\n\nconst deletingEmptyTextBlockAfterBlockObject = defineBehavior({\n on: 'delete.backward',\n guard: ({context}) => {\n const focusTextBlock = selectors.getFocusTextBlock({context})\n const selectionCollapsed = selectors.isSelectionCollapsed({context})\n const previousBlock = selectors.getPreviousBlock({context})\n\n if (!focusTextBlock || !selectionCollapsed || !previousBlock) {\n return false\n }\n\n if (\n isEmptyTextBlock(focusTextBlock.node) &&\n !isPortableTextTextBlock(previousBlock.node)\n ) {\n return {focusTextBlock, previousBlock}\n }\n\n return false\n },\n actions: [\n (_, {focusTextBlock, previousBlock}) => [\n raise({\n type: 'delete.block',\n blockPath: focusTextBlock.path,\n }),\n raise({\n type: 'select',\n selection: {\n anchor: {path: previousBlock.path, offset: 0},\n focus: {path: previousBlock.path, offset: 0},\n },\n }),\n ],\n ],\n})\n\nconst deletingEmptyTextBlockBeforeBlockObject = defineBehavior({\n on: 'delete.forward',\n guard: ({context}) => {\n const focusTextBlock = selectors.getFocusTextBlock({context})\n const selectionCollapsed = selectors.isSelectionCollapsed({context})\n const nextBlock = selectors.getNextBlock({context})\n\n if (!focusTextBlock || !selectionCollapsed || !nextBlock) {\n return false\n }\n\n if (\n isEmptyTextBlock(focusTextBlock.node) &&\n !isPortableTextTextBlock(nextBlock.node)\n ) {\n return {focusTextBlock, nextBlock}\n }\n\n return false\n },\n actions: [\n (_, {focusTextBlock, nextBlock}) => [\n raise({\n type: 'delete.block',\n blockPath: focusTextBlock.path,\n }),\n raise({\n type: 'select',\n selection: {\n anchor: {path: nextBlock.path, offset: 0},\n focus: {path: nextBlock.path, offset: 0},\n },\n }),\n ],\n ],\n})\n\nexport const coreBlockObjectBehaviors = {\n arrowDownOnLonelyBlockObject,\n arrowUpOnLonelyBlockObject,\n breakingBlockObject,\n deletingEmptyTextBlockAfterBlockObject,\n deletingEmptyTextBlockBeforeBlockObject,\n}\n","import {isHotkey} from '../internal-utils/is-hotkey'\nimport * as selectors from '../selectors'\nimport {defineBehavior, raise} from './behavior.types'\n\nexport const coreDecoratorBehaviors = {\n toggleDecoratorOff: defineBehavior({\n on: 'decorator.toggle',\n guard: ({context, event}) =>\n selectors.isActiveDecorator(event.decorator)({context}),\n actions: [\n ({event}) => [\n raise({type: 'decorator.remove', decorator: event.decorator}),\n ],\n ],\n }),\n toggleDecoratorOn: defineBehavior({\n on: 'decorator.toggle',\n guard: ({context, event}) =>\n !selectors.isActiveDecorator(event.decorator)({context}),\n actions: [\n ({event}) => [raise({type: 'decorator.add', decorator: event.decorator})],\n ],\n }),\n strongShortcut: defineBehavior({\n on: 'key.down',\n guard: ({context, event}) =>\n isHotkey('mod+b', event.keyboardEvent) &&\n context.schema.decorators.some(\n (decorator) => decorator.value === 'strong',\n ),\n actions: [() => [raise({type: 'decorator.toggle', decorator: 'strong'})]],\n }),\n emShortcut: defineBehavior({\n on: 'key.down',\n guard: ({context, event}) =>\n isHotkey('mod+i', event.keyboardEvent) &&\n context.schema.decorators.some((decorator) => decorator.value === 'em'),\n actions: [() => [raise({type: 'decorator.toggle', decorator: 'em'})]],\n }),\n underlineShortcut: defineBehavior({\n on: 'key.down',\n guard: ({context, event}) =>\n isHotkey('mod+u', event.keyboardEvent) &&\n 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: 'key.down',\n guard: ({context, event}) =>\n isHotkey(\"mod+'\", event.keyboardEvent) &&\n context.schema.decorators.some((decorator) => decorator.value === 'code'),\n actions: [() => [raise({type: 'decorator.toggle', decorator: 'code'})]],\n }),\n}\n","import {defineBehavior, raise} from './behavior.types'\n\nexport const coreDeserializeBehavior = defineBehavior({\n on: 'deserialize',\n guard: ({context, event}) => {\n const deserializeEvents = context.converters.flatMap((converter) => {\n const data = event.dataTransfer.getData(converter.mimeType)\n\n if (!data) {\n return []\n }\n\n return [\n converter.deserialize({context, event: {type: 'deserialize', data}}),\n ]\n })\n\n const firstSuccess = deserializeEvents.find(\n (deserializeEvent) => deserializeEvent.type === 'deserialization.success',\n )\n\n if (!firstSuccess) {\n return {\n type: 'deserialization.failure',\n mimeType: '*/*',\n reason: deserializeEvents\n .map((deserializeEvent) =>\n deserializeEvent.type === 'deserialization.failure'\n ? deserializeEvent.reason\n : '',\n )\n .join(', '),\n } as const\n }\n\n return firstSuccess\n },\n actions: [\n ({event}, deserializeEvent) => [\n raise({\n ...deserializeEvent,\n dataTransfer: event.dataTransfer,\n }),\n ],\n ],\n})\n","import * as selectors from '../selectors'\nimport {defineBehavior, raise} from './behavior.types'\n\nconst atTheEndOfTextBlock = defineBehavior({\n on: 'insert.break',\n guard: ({context}) => {\n const focusTextBlock = selectors.getFocusTextBlock({context})\n const selectionCollapsed = selectors.isSelectionCollapsed({context})\n\n if (!context.selection || !focusTextBlock || !selectionCollapsed) {\n return false\n }\n\n const atTheEndOfBlock = selectors.isAtTheEndOfBlock(focusTextBlock)({\n context,\n })\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 ({context}, {focusListItem, focusLevel}) => [\n raise({\n type: 'insert.block',\n block: {\n _type: context.schema.block.name,\n _key: context.keyGenerator(),\n children: [\n {\n _key: context.keyGenerator(),\n _type: context.schema.span.name,\n text: '',\n marks: [],\n },\n ],\n markDefs: [],\n listItem: focusListItem,\n level: focusLevel,\n style: context.schema.styles[0]?.value,\n },\n placement: 'after',\n }),\n ],\n ],\n})\n\nconst atTheStartOfTextBlock = defineBehavior({\n on: 'insert.break',\n guard: ({context}) => {\n const focusTextBlock = selectors.getFocusTextBlock({context})\n const selectionCollapsed = selectors.isSelectionCollapsed({context})\n\n if (!context.selection || !focusTextBlock || !selectionCollapsed) {\n return false\n }\n\n const focusSpan = selectors.getFocusSpan({context})\n\n const focusDecorators = focusSpan?.node.marks?.filter(\n (mark) =>\n context.schema.decorators.some(\n (decorator) => decorator.value === mark,\n ) ?? [],\n )\n const focusAnnotations =\n focusSpan?.node.marks?.filter(\n (mark) =>\n !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 = selectors.isAtTheStartOfBlock(focusTextBlock)({\n context,\n })\n\n if (atTheStartOfBlock) {\n return {focusAnnotations, focusDecorators, focusListItem, focusLevel}\n }\n\n return false\n },\n actions: [\n (\n {context},\n {focusAnnotations, focusDecorators, focusListItem, focusLevel},\n ) => [\n raise({\n type: 'insert.block',\n block: {\n _key: context.keyGenerator(),\n _type: context.schema.block.name,\n children: [\n {\n _key: context.keyGenerator(),\n _type: context.schema.span.name,\n marks: focusAnnotations.length === 0 ? focusDecorators : [],\n text: '',\n },\n ],\n listItem: focusListItem,\n level: focusLevel,\n style: context.schema.styles[0]?.value,\n },\n placement: 'before',\n }),\n ],\n ],\n})\n\nexport const coreInsertBreakBehaviors = {\n atTheEndOfTextBlock,\n atTheStartOfTextBlock,\n}\n","import {createGuards} from '../behavior-actions/behavior.guards'\nimport {isHotkey} from '../internal-utils/is-hotkey'\nimport * as selectors from '../selectors'\nimport {isEmptyTextBlock} from '../utils/util.is-empty-text-block'\nimport {defineBehavior, raise} from './behavior.types'\n\nconst MAX_LIST_LEVEL = 10\n\nconst toggleListItemOff = defineBehavior({\n on: 'list item.toggle',\n guard: ({context, event}) =>\n selectors.isActiveListItem(event.listItem)({context}),\n actions: [\n ({event}) => [\n raise({\n type: 'list item.remove',\n listItem: event.listItem,\n }),\n ],\n ],\n})\n\nconst toggleListItemOn = defineBehavior({\n on: 'list item.toggle',\n guard: ({context, event}) =>\n !selectors.isActiveListItem(event.listItem)({context}),\n actions: [\n ({event}) => [\n raise({\n type: 'list item.add',\n listItem: event.listItem,\n }),\n ],\n ],\n})\n\nconst clearListOnBackspace = defineBehavior({\n on: 'delete.backward',\n guard: ({context}) => {\n const selectionCollapsed = selectors.isSelectionCollapsed({context})\n const focusTextBlock = selectors.getFocusTextBlock({context})\n const focusSpan = selectors.getFocusSpan({context})\n\n if (!selectionCollapsed || !focusTextBlock || !focusSpan) {\n return false\n }\n\n const atTheBeginningOfBLock =\n focusTextBlock.node.children[0]._key === focusSpan.node._key &&\n 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: 'text block.unset',\n props: ['listItem', 'level'],\n at: focusTextBlock.path,\n }),\n ],\n ],\n})\n\nconst unindentListOnBackspace = defineBehavior({\n on: 'delete.backward',\n guard: ({context}) => {\n const selectionCollapsed = selectors.isSelectionCollapsed({context})\n const focusTextBlock = selectors.getFocusTextBlock({context})\n const focusSpan = selectors.getFocusSpan({context})\n\n if (!selectionCollapsed || !focusTextBlock || !focusSpan) {\n return false\n }\n\n const atTheBeginningOfBLock =\n focusTextBlock.node.children[0]._key === focusSpan.node._key &&\n 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: 'text block.set',\n level,\n at: focusTextBlock.path,\n }),\n ],\n ],\n})\n\nconst clearListOnEnter = defineBehavior({\n on: 'insert.break',\n guard: ({context}) => {\n const selectionCollapsed = selectors.isSelectionCollapsed({context})\n const focusListBlock = selectors.getFocusListBlock({context})\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: 'text block.unset',\n props: ['listItem', 'level'],\n at: focusListBlock.path,\n }),\n ],\n ],\n})\n\nconst indentListOnTab = defineBehavior({\n on: 'key.down',\n guard: ({context, event}) => {\n const isTab = isHotkey('Tab', event.keyboardEvent)\n\n if (!isTab) {\n return false\n }\n\n const selectedBlocks = selectors.getSelectedBlocks({context})\n const guards = createGuards(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: 'text block.set',\n level: Math.min(\n MAX_LIST_LEVEL,\n Math.max(1, selectedListBlock.node.level + 1),\n ),\n at: selectedListBlock.path,\n }),\n ),\n ],\n})\n\nconst unindentListOnShiftTab = defineBehavior({\n on: 'key.down',\n guard: ({context, event}) => {\n const isShiftTab = isHotkey('Shift+Tab', event.keyboardEvent)\n\n if (!isShiftTab) {\n return false\n }\n\n const selectedBlocks = selectors.getSelectedBlocks({context})\n const guards = createGuards(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: 'text block.set',\n level: Math.min(\n MAX_LIST_LEVEL,\n Math.max(1, selectedListBlock.node.level - 1),\n ),\n at: selectedListBlock.path,\n }),\n ),\n ],\n})\n\nexport const coreListBehaviors = {\n toggleListItemOff,\n toggleListItemOn,\n clearListOnBackspace,\n unindentListOnBackspace,\n clearListOnEnter,\n indentListOnTab,\n unindentListOnShiftTab,\n}\n","import {defineBehavior, raise} from './behavior.types'\n\nexport const coreSerializeBehaviors = {\n 'serialize': defineBehavior({\n on: 'serialize',\n guard: ({context, event}) => {\n if (context.converters.length === 0) {\n return false\n }\n\n const serializeEvents = context.converters.map((converter) =>\n converter.serialize({context, event}),\n )\n\n if (serializeEvents.length === 0) {\n return false\n }\n\n return serializeEvents\n },\n actions: [\n ({event}, serializeEvents) =>\n serializeEvents.map((serializeEvent) =>\n raise({\n ...serializeEvent,\n dataTransfer: event.dataTransfer,\n }),\n ),\n ],\n }),\n 'serialization.success': defineBehavior({\n on: 'serialization.success',\n actions: [\n ({event}) => [\n raise({\n type: 'data transfer.set',\n data: event.data,\n dataTransfer: event.dataTransfer,\n mimeType: event.mimeType,\n }),\n ],\n ],\n }),\n}\n","import * as selectors from '../selectors'\nimport {defineBehavior, raise} from './behavior.types'\n\nconst toggleStyleOff = defineBehavior({\n on: 'style.toggle',\n guard: ({context, event}) => selectors.isActiveStyle(event.style)({context}),\n actions: [({event}) => [raise({type: 'style.remove', style: event.style})]],\n})\n\nconst toggleStyleOn = defineBehavior({\n on: 'style.toggle',\n guard: ({context, event}) => !selectors.isActiveStyle(event.style)({context}),\n actions: [({event}) => [raise({type: 'style.add', style: event.style})]],\n})\n\nexport const coreStyleBehaviors = {\n toggleStyleOff,\n toggleStyleOn,\n}\n","import {coreAnnotationBehaviors} from './behavior.core.annotations'\nimport {coreBlockObjectBehaviors} from './behavior.core.block-objects'\nimport {coreDecoratorBehaviors} from './behavior.core.decorators'\nimport {coreDeserializeBehavior} from './behavior.core.deserialize'\nimport {coreInsertBreakBehaviors} from './behavior.core.insert-break'\nimport {coreListBehaviors} from './behavior.core.lists'\nimport {coreSerializeBehaviors} from './behavior.core.serialize'\nimport {coreStyleBehaviors} from './behavior.core.style'\nimport {defineBehavior, raise} from './behavior.types'\n\nconst softReturn = defineBehavior({\n on: 'insert.soft break',\n actions: [() => [raise({type: 'insert.text', text: '\\n'})]],\n})\n\n/**\n * @beta\n */\nexport const coreBehaviors = [\n softReturn,\n coreAnnotationBehaviors.toggleAnnotationOff,\n coreAnnotationBehaviors.toggleAnnotationOn,\n coreDecoratorBehaviors.toggleDecoratorOff,\n coreDecoratorBehaviors.toggleDecoratorOn,\n coreDecoratorBehaviors.strongShortcut,\n coreDecoratorBehaviors.emShortcut,\n coreDecoratorBehaviors.underlineShortcut,\n coreDecoratorBehaviors.codeShortcut,\n coreDeserializeBehavior,\n coreBlockObjectBehaviors.arrowDownOnLonelyBlockObject,\n coreBlockObjectBehaviors.arrowUpOnLonelyBlockObject,\n coreBlockObjectBehaviors.breakingBlockObject,\n coreBlockObjectBehaviors.deletingEmptyTextBlockAfterBlockObject,\n coreBlockObjectBehaviors.deletingEmptyTextBlockBeforeBlockObject,\n coreListBehaviors.toggleListItemOff,\n coreListBehaviors.toggleListItemOn,\n coreListBehaviors.clearListOnBackspace,\n coreListBehaviors.unindentListOnBackspace,\n coreListBehaviors.clearListOnEnter,\n coreListBehaviors.indentListOnTab,\n coreListBehaviors.unindentListOnShiftTab,\n coreInsertBreakBehaviors.atTheEndOfTextBlock,\n coreInsertBreakBehaviors.atTheStartOfTextBlock,\n coreSerializeBehaviors.serialize,\n coreSerializeBehaviors['serialization.success'],\n coreStyleBehaviors.toggleStyleOff,\n coreStyleBehaviors.toggleStyleOn,\n]\n\n/**\n * @beta\n */\nexport const coreBehavior = {\n softReturn,\n annotation: coreAnnotationBehaviors,\n decorators: coreDecoratorBehaviors,\n deserialize: coreDeserializeBehavior,\n blockObjects: coreBlockObjectBehaviors,\n insertBreak: coreInsertBreakBehaviors,\n lists: coreListBehaviors,\n ...coreSerializeBehaviors,\n style: coreSerializeBehaviors,\n}\n"],"names":["isCustomBehaviorEvent","event","type","startsWith","raise","defineBehavior","behavior","toggleAnnotationOff","on","guard","context","selectors","annotation","name","actions","toggleAnnotationOn","coreAnnotationBehaviors","IS_MAC","window","test","navigator","userAgent","modifiers","alt","control","meta","shift","aliases","add","break","cmd","command","ctl","ctrl","del","down","esc","ins","left","mod","opt","option","return","right","space","spacebar","up","win","windows","keyCodes","isHotkey","hotkey","compareHotkey","parseHotkey","parsedHotkey","altKey","ctrlKey","metaKey","shiftKey","hotkeySegments","replace","split","rawHotkeySegment","optional","endsWith","length","hotkeySegment","slice","keyName","toKeyName","modifier","alias","code","undefined","TypeError","key","keyCode","toKeyCode","toLowerCase","toUpperCase","charCodeAt","arrowDownOnLonelyBlockObject","isArrowDown","keyboardEvent","focusBlockObject","nextBlock","placement","arrowUpOnLonelyBlockObject","isArrowUp","previousBlock","breakingBlockObject","deletingEmptyTextBlockAfterBlockObject","focusTextBlock","selectionCollapsed","isEmptyTextBlock","node","isPortableTextTextBlock","_","blockPath","path","selection","anchor","offset","focus","deletingEmptyTextBlockBeforeBlockObject","coreBlockObjectBehaviors","coreDecoratorBehaviors","toggleDecoratorOff","decorator","toggleDecoratorOn","strongShortcut","schema","decorators","some","value","emShortcut","underlineShortcut","codeShortcut","coreDeserializeBehavior","deserializeEvents","converters","flatMap","converter","data","dataTransfer","getData","mimeType","deserialize","find","deserializeEvent","reason","map","join","atTheEndOfTextBlock","atTheEndOfBlock","focusListItem","listItem","focusLevel","level","block","_type","_key","keyGenerator","children","span","text","marks","markDefs","style","styles","atTheStartOfTextBlock","focusSpan","focusDecorators","filter","mark","focusAnnotations","coreInsertBreakBehaviors","MAX_LIST_LEVEL","toggleListItemOff","toggleListItemOn","clearListOnBackspace","props","at","unindentListOnBackspace","clearListOnEnter","focusListBlock","indentListOnTab","selectedBlocks","guards","createGuards","selectedListBlocks","isListBlock","selectedListBlock","Math","min","max","unindentListOnShiftTab","coreListBehaviors","coreSerializeBehaviors","serializeEvents","serialize","serializeEvent","toggleStyleOff","toggleStyleOn","coreStyleBehaviors","softReturn","coreBehaviors","coreBehavior","blockObjects","insertBreak","lists"],"mappings":"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"}
1
+ {"version":3,"file":"behavior.core.cjs","sources":["../../src/behaviors/behavior.types.ts","../../src/behaviors/behavior.core.annotations.ts","../../src/internal-utils/is-hotkey.ts","../../src/behaviors/behavior.core.block-objects.ts","../../src/behaviors/behavior.core.decorators.ts","../../src/behaviors/behavior.core.deserialize.ts","../../src/behaviors/behavior.core.insert-break.ts","../../src/behaviors/behavior.core.lists.ts","../../src/behaviors/behavior.core.serialize.ts","../../src/behaviors/behavior.core.style.ts","../../src/behaviors/behavior.core.ts"],"sourcesContent":["import type {\n KeyedSegment,\n PortableTextBlock,\n PortableTextTextBlock,\n} from '@sanity/types'\nimport type {TextUnit} from 'slate'\nimport type {TextInsertTextOptions} from 'slate/dist/interfaces/transforms/text'\nimport type {ConverterEvent} from '../converters/converter.types'\nimport type {EditorContext} from '../editor/editor-snapshot'\nimport type {MIMEType} from '../internal-utils/mime-type'\nimport type {OmitFromUnion, PickFromUnion} from '../type-utils'\nimport type {EditorSelection, PortableTextSlateEditor} from '../types/editor'\n\n/**\n * @beta\n */\nexport type SyntheticBehaviorEvent =\n | {\n type: 'annotation.add'\n annotation: {\n name: string\n value: {[prop: string]: unknown}\n }\n }\n | {\n type: 'annotation.remove'\n annotation: {\n name: string\n }\n }\n | {\n type: 'annotation.toggle'\n annotation: {\n name: string\n value: {[prop: string]: unknown}\n }\n }\n | {\n type: 'block.set'\n at: [KeyedSegment]\n [props: string]: unknown\n }\n | {\n type: 'block.unset'\n at: [KeyedSegment]\n props: Array<string>\n }\n | {\n type: 'blur'\n }\n | {\n type: 'data transfer.set'\n data: string\n dataTransfer: DataTransfer\n mimeType: MIMEType\n }\n | {\n type: 'decorator.add'\n decorator: string\n }\n | {\n type: 'decorator.remove'\n decorator: string\n }\n | {\n type: 'decorator.toggle'\n decorator: string\n }\n | {\n type: 'delete'\n selection: NonNullable<EditorSelection>\n }\n | {\n type: 'delete.backward'\n unit: TextUnit\n }\n | {\n type: 'delete.block'\n blockPath: [KeyedSegment]\n }\n | {\n type: 'delete.forward'\n unit: TextUnit\n }\n | {\n type: 'delete.text'\n anchor: BlockOffset\n focus: BlockOffset\n }\n | {\n type: 'focus'\n }\n | {\n type: 'insert.blocks'\n blocks: Array<PortableTextBlock>\n }\n | {\n type: 'insert.block object'\n placement: 'auto' | 'after' | 'before'\n blockObject: {\n name: string\n value?: {[prop: string]: unknown}\n }\n }\n | {\n type: 'insert.inline object'\n inlineObject: {\n name: string\n value?: {[prop: string]: unknown}\n }\n }\n | {\n type: 'insert.break'\n }\n | {\n type: 'insert.soft break'\n }\n | {\n type: 'insert.block'\n block: PortableTextBlock\n placement: 'auto' | 'after' | 'before'\n }\n | {\n type: 'insert.span'\n text: string\n annotations?: Array<{\n name: string\n value: {[prop: string]: unknown}\n }>\n decorators?: Array<string>\n }\n | {\n type: 'insert.text'\n text: string\n options?: TextInsertTextOptions\n }\n | {\n type: 'insert.text block'\n placement: 'auto' | 'after' | 'before'\n textBlock?: {\n children?: PortableTextTextBlock['children']\n }\n }\n | {\n type: 'list item.add'\n listItem: string\n }\n | {\n type: 'list item.remove'\n listItem: string\n }\n | {\n type: 'list item.toggle'\n listItem: string\n }\n | {\n type: 'move.block'\n at: [KeyedSegment]\n to: [KeyedSegment]\n }\n | {\n type: 'move.block down'\n at: [KeyedSegment]\n }\n | {\n type: 'move.block up'\n at: [KeyedSegment]\n }\n | {\n type: 'select'\n selection: EditorSelection\n }\n | {\n type: 'select.previous block'\n }\n | {\n type: 'select.next block'\n }\n | {\n type: 'style.add'\n style: string\n }\n | {\n type: 'style.remove'\n style: string\n }\n | {\n type: 'style.toggle'\n style: string\n }\n | {\n type: 'text block.set'\n at: [KeyedSegment]\n level?: number\n listItem?: string\n style?: string\n }\n | {\n type: 'text block.unset'\n at: [KeyedSegment]\n props: Array<'level' | 'listItem' | 'style'>\n }\n | (PickFromUnion<\n ConverterEvent,\n 'type',\n | 'deserialization.failure'\n | 'deserialization.success'\n | 'serialization.failure'\n | 'serialization.success'\n > & {dataTransfer: DataTransfer})\n\n/**\n * @beta\n */\nexport type NativeBehaviorEvent =\n | {\n type: 'copy'\n data: DataTransfer\n }\n | {\n type: 'deserialize'\n dataTransfer: DataTransfer\n }\n | {\n type: 'key.down'\n keyboardEvent: Pick<\n KeyboardEvent,\n 'key' | 'code' | 'altKey' | 'ctrlKey' | 'metaKey' | 'shiftKey'\n >\n }\n | {\n type: 'key.up'\n keyboardEvent: Pick<\n KeyboardEvent,\n 'key' | 'code' | 'altKey' | 'ctrlKey' | 'metaKey' | 'shiftKey'\n >\n }\n | {\n type: 'paste'\n data: DataTransfer\n }\n | {\n type: 'serialize'\n originEvent: 'copy' | 'cut' | 'unknown'\n dataTransfer: DataTransfer\n }\n\n/**\n * @beta\n */\nexport type CustomBehaviorEvent<\n TPayload extends Record<string, unknown> = Record<string, unknown>,\n TType extends string = string,\n TInternalType extends `custom.${TType}` = `custom.${TType}`,\n> = {\n type: TInternalType\n} & TPayload\n\nexport function isCustomBehaviorEvent(\n event: BehaviorEvent,\n): event is CustomBehaviorEvent {\n return event.type.startsWith('custom.')\n}\n\n/**\n * @beta\n */\nexport type BehaviorActionIntend =\n | SyntheticBehaviorEvent\n | {\n type: 'raise'\n event: SyntheticBehaviorEvent | CustomBehaviorEvent\n }\n | {\n type: 'noop'\n }\n | {\n type: 'effect'\n effect: () => void\n }\n\n/**\n * @beta\n */\nexport type BehaviorAction = OmitFromUnion<\n BehaviorActionIntend,\n 'type',\n 'raise'\n> & {\n editor: PortableTextSlateEditor\n}\n\n/**\n * @beta\n */\nexport function raise(\n event: SyntheticBehaviorEvent | CustomBehaviorEvent,\n): PickFromUnion<BehaviorActionIntend, 'type', 'raise'> {\n return {type: 'raise', event}\n}\n\n/**\n * @beta\n */\nexport type BehaviorEvent =\n | SyntheticBehaviorEvent\n | NativeBehaviorEvent\n | CustomBehaviorEvent\n\n/**\n * @beta\n */\nexport type Behavior<\n TBehaviorEventType extends BehaviorEvent['type'] = BehaviorEvent['type'],\n TGuardResponse = true,\n TBehaviorEvent extends BehaviorEvent = PickFromUnion<\n BehaviorEvent,\n 'type',\n TBehaviorEventType\n >,\n> = {\n /**\n * The internal editor event that triggers this behavior.\n */\n on: TBehaviorEventType\n /**\n * Predicate function that determines if the behavior should be executed.\n * Returning a non-nullable value from the guard will pass the value to the\n * actions and execute them.\n */\n guard?: BehaviorGuard<TBehaviorEvent, TGuardResponse>\n /**\n * Array of behavior action sets.\n */\n actions: Array<BehaviorActionIntendSet<TBehaviorEvent, TGuardResponse>>\n}\n\n/**\n * @beta\n */\nexport type BehaviorGuard<TBehaviorEvent, TGuardResponse> = ({\n context,\n event,\n}: {\n context: EditorContext\n event: TBehaviorEvent\n}) => TGuardResponse | false\n\n/**\n * @beta\n */\nexport type BehaviorActionIntendSet<TBehaviorEvent, TGuardResponse> = (\n {\n context,\n event,\n }: {\n context: EditorContext\n event: TBehaviorEvent\n },\n guardResponse: TGuardResponse,\n) => Array<BehaviorActionIntend>\n\n/**\n * @beta\n *\n * @example\n *\n * ```tsx\n * const noLowerCaseA = defineBehavior({\n * on: 'insert.text',\n * guard: ({event, context}) => event.text === 'a',\n * actions: [({event, context}) => [{type: 'insert.text', text: 'A'}]],\n * })\n * ```\n *\n *\n *\n *\n *\n */\nexport function defineBehavior<\n TPayload extends Record<string, unknown>,\n TBehaviorEventType extends\n BehaviorEvent['type'] = CustomBehaviorEvent['type'],\n TGuardResponse = true,\n>(\n behavior: Behavior<\n TBehaviorEventType,\n TGuardResponse,\n TBehaviorEventType extends `custom.${infer TType}`\n ? CustomBehaviorEvent<TPayload, TType>\n : PickFromUnion<BehaviorEvent, 'type', TBehaviorEventType>\n >,\n): Behavior\nexport function defineBehavior<\n TPayload extends never = never,\n TBehaviorEventType extends BehaviorEvent['type'] = BehaviorEvent['type'],\n TGuardResponse = true,\n TBehaviorEvent extends\n BehaviorEvent = TBehaviorEventType extends `custom.${infer TType}`\n ? CustomBehaviorEvent<TPayload, TType>\n : PickFromUnion<BehaviorEvent, 'type', TBehaviorEventType>,\n>(\n behavior: Behavior<TBehaviorEventType, TGuardResponse, TBehaviorEvent>,\n): Behavior {\n return behavior as unknown as Behavior\n}\n\n/**\n * @beta\n */\nexport type BlockOffset = {\n path: [KeyedSegment]\n offset: number\n}\n","import * as selectors from '../selectors'\nimport {defineBehavior, raise} from './behavior.types'\n\nconst toggleAnnotationOff = defineBehavior({\n on: 'annotation.toggle',\n guard: ({context, event}) =>\n selectors.isActiveAnnotation(event.annotation.name)({context}),\n actions: [\n ({event}) => [\n raise({type: 'annotation.remove', annotation: event.annotation}),\n ],\n ],\n})\n\nconst toggleAnnotationOn = defineBehavior({\n on: 'annotation.toggle',\n guard: ({context, event}) =>\n !selectors.isActiveAnnotation(event.annotation.name)({context}),\n actions: [\n ({event}) => [\n raise({type: 'annotation.add', annotation: event.annotation}),\n ],\n ],\n})\n\nexport const coreAnnotationBehaviors = {\n toggleAnnotationOff,\n toggleAnnotationOn,\n}\n","export interface KeyboardEventLike {\n key: string\n keyCode?: number\n altKey: boolean\n ctrlKey: boolean\n metaKey: boolean\n shiftKey: boolean\n}\n\ninterface HotKey {\n keyCode?: number | undefined\n key?: string | undefined\n altKey: boolean | null\n ctrlKey: boolean | null\n metaKey: boolean | null\n shiftKey: boolean | null\n}\n\nconst IS_MAC =\n typeof window !== 'undefined' &&\n /Mac|iPod|iPhone|iPad/.test(window.navigator.userAgent)\n\ntype Modifier = 'altKey' | 'ctrlKey' | 'metaKey' | 'shiftKey'\n\nconst modifiers: Record<string, Modifier | undefined> = {\n alt: 'altKey',\n control: 'ctrlKey',\n meta: 'metaKey',\n shift: 'shiftKey',\n}\n\nconst aliases: Record<string, string | undefined> = {\n add: '+',\n break: 'pause',\n cmd: 'meta',\n command: 'meta',\n ctl: 'control',\n ctrl: 'control',\n del: 'delete',\n down: 'arrowdown',\n esc: 'escape',\n ins: 'insert',\n left: 'arrowleft',\n mod: IS_MAC ? 'meta' : 'control',\n opt: 'alt',\n option: 'alt',\n return: 'enter',\n right: 'arrowright',\n space: ' ',\n spacebar: ' ',\n up: 'arrowup',\n win: 'meta',\n windows: 'meta',\n}\n\nconst keyCodes: Record<string, number | undefined> = {\n 'backspace': 8,\n 'tab': 9,\n 'enter': 13,\n 'shift': 16,\n 'control': 17,\n 'alt': 18,\n 'pause': 19,\n 'capslock': 20,\n 'escape': 27,\n ' ': 32,\n 'pageup': 33,\n 'pagedown': 34,\n 'end': 35,\n 'home': 36,\n 'arrowleft': 37,\n 'arrowup': 38,\n 'arrowright': 39,\n 'arrowdown': 40,\n 'insert': 45,\n 'delete': 46,\n 'meta': 91,\n 'numlock': 144,\n 'scrolllock': 145,\n ';': 186,\n '=': 187,\n ',': 188,\n '-': 189,\n '.': 190,\n '/': 191,\n '`': 192,\n '[': 219,\n '\\\\': 220,\n ']': 221,\n \"'\": 222,\n 'f1': 112,\n 'f2': 113,\n 'f3': 114,\n 'f4': 115,\n 'f5': 116,\n 'f6': 117,\n 'f7': 118,\n 'f8': 119,\n 'f9': 120,\n 'f10': 121,\n 'f11': 122,\n 'f12': 123,\n 'f13': 124,\n 'f14': 125,\n 'f15': 126,\n 'f16': 127,\n 'f17': 128,\n 'f18': 129,\n 'f19': 130,\n 'f20': 131,\n}\n\nexport function isHotkey(hotkey: string, event: KeyboardEventLike): boolean {\n return compareHotkey(parseHotkey(hotkey), event)\n}\n\nfunction parseHotkey(hotkey: string): HotKey {\n // Ensure that all the modifiers are set to false unless the hotkey has them.\n const parsedHotkey: HotKey = {\n altKey: false,\n ctrlKey: false,\n metaKey: false,\n shiftKey: false,\n }\n\n // Special case to handle the `+` key since we use it as a separator.\n const hotkeySegments = hotkey.replace('++', '+add').split('+')\n\n for (const rawHotkeySegment of hotkeySegments) {\n const optional =\n rawHotkeySegment.endsWith('?') && rawHotkeySegment.length > 1\n const hotkeySegment = optional\n ? rawHotkeySegment.slice(0, -1)\n : rawHotkeySegment\n const keyName = toKeyName(hotkeySegment)\n const modifier = modifiers[keyName]\n const alias = aliases[hotkeySegment]\n const code = keyCodes[keyName]\n\n if (\n hotkeySegment.length > 1 &&\n modifier === undefined &&\n alias === undefined &&\n code === undefined\n ) {\n throw new TypeError(`Unknown modifier: \"${hotkeySegment}\"`)\n }\n\n if (hotkeySegments.length === 1 || modifier === undefined) {\n parsedHotkey.key = keyName\n parsedHotkey.keyCode = toKeyCode(hotkeySegment)\n }\n\n if (modifier !== undefined) {\n parsedHotkey[modifier] = optional ? null : true\n }\n }\n\n return parsedHotkey\n}\n\nfunction compareHotkey(\n parsedHotkey: HotKey,\n event: KeyboardEventLike,\n): boolean {\n const matchingModifiers =\n (parsedHotkey.altKey != null\n ? parsedHotkey.altKey === event.altKey\n : true) &&\n (parsedHotkey.ctrlKey != null\n ? parsedHotkey.ctrlKey === event.ctrlKey\n : true) &&\n (parsedHotkey.metaKey != null\n ? parsedHotkey.metaKey === event.metaKey\n : true) &&\n (parsedHotkey.shiftKey != null\n ? parsedHotkey.shiftKey === event.shiftKey\n : true)\n\n if (!matchingModifiers) {\n return false\n }\n\n if (parsedHotkey.keyCode !== undefined && event.keyCode !== undefined) {\n if (parsedHotkey.keyCode === 91 && event.keyCode === 93) {\n return true\n }\n\n return parsedHotkey.keyCode === event.keyCode\n }\n\n return (\n parsedHotkey.keyCode === event.keyCode ||\n parsedHotkey.key === event.key.toLowerCase()\n )\n}\n\nfunction toKeyCode(name: string): number {\n const keyName = toKeyName(name)\n const keyCode = keyCodes[keyName] ?? keyName.toUpperCase().charCodeAt(0)\n\n return keyCode\n}\n\nfunction toKeyName(name: string): string {\n const keyName = name.toLowerCase()\n\n return aliases[keyName] ?? keyName\n}\n","import {isPortableTextTextBlock} from '@sanity/types'\nimport {isHotkey} from '../internal-utils/is-hotkey'\nimport * as selectors from '../selectors'\nimport {isEmptyTextBlock} from '../utils/util.is-empty-text-block'\nimport {defineBehavior, raise} from './behavior.types'\n\nconst arrowDownOnLonelyBlockObject = defineBehavior({\n on: 'key.down',\n guard: ({context, event}) => {\n const isArrowDown = isHotkey('ArrowDown', event.keyboardEvent)\n const focusBlockObject = selectors.getFocusBlockObject({context})\n const nextBlock = selectors.getNextBlock({context})\n\n return isArrowDown && focusBlockObject && !nextBlock\n },\n actions: [() => [raise({type: 'insert.text block', placement: 'after'})]],\n})\n\nconst arrowUpOnLonelyBlockObject = defineBehavior({\n on: 'key.down',\n guard: ({context, event}) => {\n const isArrowUp = isHotkey('ArrowUp', event.keyboardEvent)\n const focusBlockObject = selectors.getFocusBlockObject({context})\n const previousBlock = selectors.getPreviousBlock({context})\n\n return isArrowUp && focusBlockObject && !previousBlock\n },\n actions: [\n () => [\n raise({type: 'insert.text block', placement: 'before'}),\n raise({type: 'select.previous block'}),\n ],\n ],\n})\n\nconst breakingBlockObject = defineBehavior({\n on: 'insert.break',\n guard: ({context}) => {\n const focusBlockObject = selectors.getFocusBlockObject({context})\n const collapsedSelection = selectors.isSelectionCollapsed({context})\n\n return collapsedSelection && focusBlockObject !== undefined\n },\n actions: [() => [raise({type: 'insert.text block', placement: 'after'})]],\n})\n\nconst deletingEmptyTextBlockAfterBlockObject = defineBehavior({\n on: 'delete.backward',\n guard: ({context}) => {\n const focusTextBlock = selectors.getFocusTextBlock({context})\n const selectionCollapsed = selectors.isSelectionCollapsed({context})\n const previousBlock = selectors.getPreviousBlock({context})\n\n if (!focusTextBlock || !selectionCollapsed || !previousBlock) {\n return false\n }\n\n if (\n isEmptyTextBlock(focusTextBlock.node) &&\n !isPortableTextTextBlock(previousBlock.node)\n ) {\n return {focusTextBlock, previousBlock}\n }\n\n return false\n },\n actions: [\n (_, {focusTextBlock, previousBlock}) => [\n raise({\n type: 'delete.block',\n blockPath: focusTextBlock.path,\n }),\n raise({\n type: 'select',\n selection: {\n anchor: {path: previousBlock.path, offset: 0},\n focus: {path: previousBlock.path, offset: 0},\n },\n }),\n ],\n ],\n})\n\nconst deletingEmptyTextBlockBeforeBlockObject = defineBehavior({\n on: 'delete.forward',\n guard: ({context}) => {\n const focusTextBlock = selectors.getFocusTextBlock({context})\n const selectionCollapsed = selectors.isSelectionCollapsed({context})\n const nextBlock = selectors.getNextBlock({context})\n\n if (!focusTextBlock || !selectionCollapsed || !nextBlock) {\n return false\n }\n\n if (\n isEmptyTextBlock(focusTextBlock.node) &&\n !isPortableTextTextBlock(nextBlock.node)\n ) {\n return {focusTextBlock, nextBlock}\n }\n\n return false\n },\n actions: [\n (_, {focusTextBlock, nextBlock}) => [\n raise({\n type: 'delete.block',\n blockPath: focusTextBlock.path,\n }),\n raise({\n type: 'select',\n selection: {\n anchor: {path: nextBlock.path, offset: 0},\n focus: {path: nextBlock.path, offset: 0},\n },\n }),\n ],\n ],\n})\n\nexport const coreBlockObjectBehaviors = {\n arrowDownOnLonelyBlockObject,\n arrowUpOnLonelyBlockObject,\n breakingBlockObject,\n deletingEmptyTextBlockAfterBlockObject,\n deletingEmptyTextBlockBeforeBlockObject,\n}\n","import {isHotkey} from '../internal-utils/is-hotkey'\nimport * as selectors from '../selectors'\nimport {defineBehavior, raise} from './behavior.types'\n\nexport const coreDecoratorBehaviors = {\n toggleDecoratorOff: defineBehavior({\n on: 'decorator.toggle',\n guard: ({context, event}) =>\n selectors.isActiveDecorator(event.decorator)({context}),\n actions: [\n ({event}) => [\n raise({type: 'decorator.remove', decorator: event.decorator}),\n ],\n ],\n }),\n toggleDecoratorOn: defineBehavior({\n on: 'decorator.toggle',\n guard: ({context, event}) =>\n !selectors.isActiveDecorator(event.decorator)({context}),\n actions: [\n ({event}) => [raise({type: 'decorator.add', decorator: event.decorator})],\n ],\n }),\n strongShortcut: defineBehavior({\n on: 'key.down',\n guard: ({context, event}) =>\n isHotkey('mod+b', event.keyboardEvent) &&\n context.schema.decorators.some(\n (decorator) => decorator.value === 'strong',\n ),\n actions: [() => [raise({type: 'decorator.toggle', decorator: 'strong'})]],\n }),\n emShortcut: defineBehavior({\n on: 'key.down',\n guard: ({context, event}) =>\n isHotkey('mod+i', event.keyboardEvent) &&\n context.schema.decorators.some((decorator) => decorator.value === 'em'),\n actions: [() => [raise({type: 'decorator.toggle', decorator: 'em'})]],\n }),\n underlineShortcut: defineBehavior({\n on: 'key.down',\n guard: ({context, event}) =>\n isHotkey('mod+u', event.keyboardEvent) &&\n 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: 'key.down',\n guard: ({context, event}) =>\n isHotkey(\"mod+'\", event.keyboardEvent) &&\n context.schema.decorators.some((decorator) => decorator.value === 'code'),\n actions: [() => [raise({type: 'decorator.toggle', decorator: 'code'})]],\n }),\n}\n","import {defineBehavior, raise} from './behavior.types'\n\nexport const coreDeserializeBehaviors = {\n 'deserialize': defineBehavior({\n on: 'deserialize',\n guard: ({context, event}) => {\n const deserializeEvents = context.converters.flatMap((converter) => {\n const data = event.dataTransfer.getData(converter.mimeType)\n\n if (!data) {\n return []\n }\n\n return [\n converter.deserialize({context, event: {type: 'deserialize', data}}),\n ]\n })\n\n const firstSuccess = deserializeEvents.find(\n (deserializeEvent) =>\n deserializeEvent.type === 'deserialization.success',\n )\n\n if (!firstSuccess) {\n return {\n type: 'deserialization.failure',\n mimeType: '*/*',\n reason: deserializeEvents\n .map((deserializeEvent) =>\n deserializeEvent.type === 'deserialization.failure'\n ? deserializeEvent.reason\n : '',\n )\n .join(', '),\n } as const\n }\n\n return firstSuccess\n },\n actions: [\n ({event}, deserializeEvent) => [\n raise({\n ...deserializeEvent,\n dataTransfer: event.dataTransfer,\n }),\n ],\n ],\n }),\n 'deserialization.success': defineBehavior({\n on: 'deserialization.success',\n actions: [\n ({event}) => [\n raise({\n type: 'insert.blocks',\n blocks: event.data,\n }),\n ],\n ],\n }),\n}\n","import * as selectors from '../selectors'\nimport {defineBehavior, raise} from './behavior.types'\n\nconst atTheEndOfTextBlock = defineBehavior({\n on: 'insert.break',\n guard: ({context}) => {\n const focusTextBlock = selectors.getFocusTextBlock({context})\n const selectionCollapsed = selectors.isSelectionCollapsed({context})\n\n if (!context.selection || !focusTextBlock || !selectionCollapsed) {\n return false\n }\n\n const atTheEndOfBlock = selectors.isAtTheEndOfBlock(focusTextBlock)({\n context,\n })\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 ({context}, {focusListItem, focusLevel}) => [\n raise({\n type: 'insert.block',\n block: {\n _type: context.schema.block.name,\n _key: context.keyGenerator(),\n children: [\n {\n _key: context.keyGenerator(),\n _type: context.schema.span.name,\n text: '',\n marks: [],\n },\n ],\n markDefs: [],\n listItem: focusListItem,\n level: focusLevel,\n style: context.schema.styles[0]?.value,\n },\n placement: 'after',\n }),\n ],\n ],\n})\n\nconst atTheStartOfTextBlock = defineBehavior({\n on: 'insert.break',\n guard: ({context}) => {\n const focusTextBlock = selectors.getFocusTextBlock({context})\n const selectionCollapsed = selectors.isSelectionCollapsed({context})\n\n if (!context.selection || !focusTextBlock || !selectionCollapsed) {\n return false\n }\n\n const focusSpan = selectors.getFocusSpan({context})\n\n const focusDecorators = focusSpan?.node.marks?.filter(\n (mark) =>\n context.schema.decorators.some(\n (decorator) => decorator.value === mark,\n ) ?? [],\n )\n const focusAnnotations =\n focusSpan?.node.marks?.filter(\n (mark) =>\n !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 = selectors.isAtTheStartOfBlock(focusTextBlock)({\n context,\n })\n\n if (atTheStartOfBlock) {\n return {focusAnnotations, focusDecorators, focusListItem, focusLevel}\n }\n\n return false\n },\n actions: [\n (\n {context},\n {focusAnnotations, focusDecorators, focusListItem, focusLevel},\n ) => [\n raise({\n type: 'insert.block',\n block: {\n _key: context.keyGenerator(),\n _type: context.schema.block.name,\n children: [\n {\n _key: context.keyGenerator(),\n _type: context.schema.span.name,\n marks: focusAnnotations.length === 0 ? focusDecorators : [],\n text: '',\n },\n ],\n listItem: focusListItem,\n level: focusLevel,\n style: context.schema.styles[0]?.value,\n },\n placement: 'before',\n }),\n ],\n ],\n})\n\nexport const coreInsertBreakBehaviors = {\n atTheEndOfTextBlock,\n atTheStartOfTextBlock,\n}\n","import {createGuards} from '../behavior-actions/behavior.guards'\nimport {isHotkey} from '../internal-utils/is-hotkey'\nimport * as selectors from '../selectors'\nimport {isEmptyTextBlock} from '../utils/util.is-empty-text-block'\nimport {defineBehavior, raise} from './behavior.types'\n\nconst MAX_LIST_LEVEL = 10\n\nconst toggleListItemOff = defineBehavior({\n on: 'list item.toggle',\n guard: ({context, event}) =>\n selectors.isActiveListItem(event.listItem)({context}),\n actions: [\n ({event}) => [\n raise({\n type: 'list item.remove',\n listItem: event.listItem,\n }),\n ],\n ],\n})\n\nconst toggleListItemOn = defineBehavior({\n on: 'list item.toggle',\n guard: ({context, event}) =>\n !selectors.isActiveListItem(event.listItem)({context}),\n actions: [\n ({event}) => [\n raise({\n type: 'list item.add',\n listItem: event.listItem,\n }),\n ],\n ],\n})\n\nconst clearListOnBackspace = defineBehavior({\n on: 'delete.backward',\n guard: ({context}) => {\n const selectionCollapsed = selectors.isSelectionCollapsed({context})\n const focusTextBlock = selectors.getFocusTextBlock({context})\n const focusSpan = selectors.getFocusSpan({context})\n\n if (!selectionCollapsed || !focusTextBlock || !focusSpan) {\n return false\n }\n\n const atTheBeginningOfBLock =\n focusTextBlock.node.children[0]._key === focusSpan.node._key &&\n 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: 'text block.unset',\n props: ['listItem', 'level'],\n at: focusTextBlock.path,\n }),\n ],\n ],\n})\n\nconst unindentListOnBackspace = defineBehavior({\n on: 'delete.backward',\n guard: ({context}) => {\n const selectionCollapsed = selectors.isSelectionCollapsed({context})\n const focusTextBlock = selectors.getFocusTextBlock({context})\n const focusSpan = selectors.getFocusSpan({context})\n\n if (!selectionCollapsed || !focusTextBlock || !focusSpan) {\n return false\n }\n\n const atTheBeginningOfBLock =\n focusTextBlock.node.children[0]._key === focusSpan.node._key &&\n 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: 'text block.set',\n level,\n at: focusTextBlock.path,\n }),\n ],\n ],\n})\n\nconst clearListOnEnter = defineBehavior({\n on: 'insert.break',\n guard: ({context}) => {\n const selectionCollapsed = selectors.isSelectionCollapsed({context})\n const focusListBlock = selectors.getFocusListBlock({context})\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: 'text block.unset',\n props: ['listItem', 'level'],\n at: focusListBlock.path,\n }),\n ],\n ],\n})\n\nconst indentListOnTab = defineBehavior({\n on: 'key.down',\n guard: ({context, event}) => {\n const isTab = isHotkey('Tab', event.keyboardEvent)\n\n if (!isTab) {\n return false\n }\n\n const selectedBlocks = selectors.getSelectedBlocks({context})\n const guards = createGuards(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: 'text block.set',\n level: Math.min(\n MAX_LIST_LEVEL,\n Math.max(1, selectedListBlock.node.level + 1),\n ),\n at: selectedListBlock.path,\n }),\n ),\n ],\n})\n\nconst unindentListOnShiftTab = defineBehavior({\n on: 'key.down',\n guard: ({context, event}) => {\n const isShiftTab = isHotkey('Shift+Tab', event.keyboardEvent)\n\n if (!isShiftTab) {\n return false\n }\n\n const selectedBlocks = selectors.getSelectedBlocks({context})\n const guards = createGuards(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: 'text block.set',\n level: Math.min(\n MAX_LIST_LEVEL,\n Math.max(1, selectedListBlock.node.level - 1),\n ),\n at: selectedListBlock.path,\n }),\n ),\n ],\n})\n\nexport const coreListBehaviors = {\n toggleListItemOff,\n toggleListItemOn,\n clearListOnBackspace,\n unindentListOnBackspace,\n clearListOnEnter,\n indentListOnTab,\n unindentListOnShiftTab,\n}\n","import {defineBehavior, raise} from './behavior.types'\n\nexport const coreSerializeBehaviors = {\n 'serialize': defineBehavior({\n on: 'serialize',\n guard: ({context, event}) => {\n if (context.converters.length === 0) {\n return false\n }\n\n const serializeEvents = context.converters.map((converter) =>\n converter.serialize({context, event}),\n )\n\n if (serializeEvents.length === 0) {\n return false\n }\n\n return serializeEvents\n },\n actions: [\n ({event}, serializeEvents) =>\n serializeEvents.map((serializeEvent) =>\n raise({\n ...serializeEvent,\n dataTransfer: event.dataTransfer,\n }),\n ),\n ],\n }),\n 'serialization.success': defineBehavior({\n on: 'serialization.success',\n actions: [\n ({event}) => [\n raise({\n type: 'data transfer.set',\n data: event.data,\n dataTransfer: event.dataTransfer,\n mimeType: event.mimeType,\n }),\n ],\n ],\n }),\n}\n","import * as selectors from '../selectors'\nimport {defineBehavior, raise} from './behavior.types'\n\nconst toggleStyleOff = defineBehavior({\n on: 'style.toggle',\n guard: ({context, event}) => selectors.isActiveStyle(event.style)({context}),\n actions: [({event}) => [raise({type: 'style.remove', style: event.style})]],\n})\n\nconst toggleStyleOn = defineBehavior({\n on: 'style.toggle',\n guard: ({context, event}) => !selectors.isActiveStyle(event.style)({context}),\n actions: [({event}) => [raise({type: 'style.add', style: event.style})]],\n})\n\nexport const coreStyleBehaviors = {\n toggleStyleOff,\n toggleStyleOn,\n}\n","import {coreAnnotationBehaviors} from './behavior.core.annotations'\nimport {coreBlockObjectBehaviors} from './behavior.core.block-objects'\nimport {coreDecoratorBehaviors} from './behavior.core.decorators'\nimport {coreDeserializeBehaviors} from './behavior.core.deserialize'\nimport {coreInsertBreakBehaviors} from './behavior.core.insert-break'\nimport {coreListBehaviors} from './behavior.core.lists'\nimport {coreSerializeBehaviors} from './behavior.core.serialize'\nimport {coreStyleBehaviors} from './behavior.core.style'\n\n/**\n * @beta\n */\nexport const coreBehaviors = [\n coreAnnotationBehaviors.toggleAnnotationOff,\n coreAnnotationBehaviors.toggleAnnotationOn,\n coreDecoratorBehaviors.toggleDecoratorOff,\n coreDecoratorBehaviors.toggleDecoratorOn,\n coreDecoratorBehaviors.strongShortcut,\n coreDecoratorBehaviors.emShortcut,\n coreDecoratorBehaviors.underlineShortcut,\n coreDecoratorBehaviors.codeShortcut,\n coreDeserializeBehaviors.deserialize,\n coreDeserializeBehaviors['deserialization.success'],\n coreBlockObjectBehaviors.arrowDownOnLonelyBlockObject,\n coreBlockObjectBehaviors.arrowUpOnLonelyBlockObject,\n coreBlockObjectBehaviors.breakingBlockObject,\n coreBlockObjectBehaviors.deletingEmptyTextBlockAfterBlockObject,\n coreBlockObjectBehaviors.deletingEmptyTextBlockBeforeBlockObject,\n coreListBehaviors.toggleListItemOff,\n coreListBehaviors.toggleListItemOn,\n coreListBehaviors.clearListOnBackspace,\n coreListBehaviors.unindentListOnBackspace,\n coreListBehaviors.clearListOnEnter,\n coreListBehaviors.indentListOnTab,\n coreListBehaviors.unindentListOnShiftTab,\n coreInsertBreakBehaviors.atTheEndOfTextBlock,\n coreInsertBreakBehaviors.atTheStartOfTextBlock,\n coreSerializeBehaviors.serialize,\n coreSerializeBehaviors['serialization.success'],\n coreStyleBehaviors.toggleStyleOff,\n coreStyleBehaviors.toggleStyleOn,\n]\n\n/**\n * @beta\n */\nexport const coreBehavior = {\n annotation: coreAnnotationBehaviors,\n decorators: coreDecoratorBehaviors,\n deserialize: coreDeserializeBehaviors,\n blockObjects: coreBlockObjectBehaviors,\n insertBreak: coreInsertBreakBehaviors,\n lists: coreListBehaviors,\n ...coreSerializeBehaviors,\n style: coreSerializeBehaviors,\n}\n"],"names":["isCustomBehaviorEvent","event","type","startsWith","raise","defineBehavior","behavior","toggleAnnotationOff","on","guard","context","selectors","annotation","name","actions","toggleAnnotationOn","coreAnnotationBehaviors","IS_MAC","window","test","navigator","userAgent","modifiers","alt","control","meta","shift","aliases","add","break","cmd","command","ctl","ctrl","del","down","esc","ins","left","mod","opt","option","return","right","space","spacebar","up","win","windows","keyCodes","isHotkey","hotkey","compareHotkey","parseHotkey","parsedHotkey","altKey","ctrlKey","metaKey","shiftKey","hotkeySegments","replace","split","rawHotkeySegment","optional","endsWith","length","hotkeySegment","slice","keyName","toKeyName","modifier","alias","code","undefined","TypeError","key","keyCode","toKeyCode","toLowerCase","toUpperCase","charCodeAt","arrowDownOnLonelyBlockObject","isArrowDown","keyboardEvent","focusBlockObject","nextBlock","placement","arrowUpOnLonelyBlockObject","isArrowUp","previousBlock","breakingBlockObject","deletingEmptyTextBlockAfterBlockObject","focusTextBlock","selectionCollapsed","isEmptyTextBlock","node","isPortableTextTextBlock","_","blockPath","path","selection","anchor","offset","focus","deletingEmptyTextBlockBeforeBlockObject","coreBlockObjectBehaviors","coreDecoratorBehaviors","toggleDecoratorOff","decorator","toggleDecoratorOn","strongShortcut","schema","decorators","some","value","emShortcut","underlineShortcut","codeShortcut","coreDeserializeBehaviors","deserializeEvents","converters","flatMap","converter","data","dataTransfer","getData","mimeType","deserialize","find","deserializeEvent","reason","map","join","blocks","atTheEndOfTextBlock","atTheEndOfBlock","focusListItem","listItem","focusLevel","level","block","_type","_key","keyGenerator","children","span","text","marks","markDefs","style","styles","atTheStartOfTextBlock","focusSpan","focusDecorators","filter","mark","focusAnnotations","coreInsertBreakBehaviors","MAX_LIST_LEVEL","toggleListItemOff","toggleListItemOn","clearListOnBackspace","props","at","unindentListOnBackspace","clearListOnEnter","focusListBlock","indentListOnTab","selectedBlocks","guards","createGuards","selectedListBlocks","isListBlock","selectedListBlock","Math","min","max","unindentListOnShiftTab","coreListBehaviors","coreSerializeBehaviors","serializeEvents","serialize","serializeEvent","toggleStyleOff","toggleStyleOn","coreStyleBehaviors","coreBehaviors","coreBehavior","blockObjects","insertBreak","lists"],"mappings":"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"}
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+ var types = require("@sanity/types");
3
+ function isTypedObject(object) {
4
+ return isRecord(object) && typeof object._type == "string";
5
+ }
6
+ function isRecord(value) {
7
+ return !!value && (typeof value == "object" || typeof value == "function");
8
+ }
9
+ function parseBlock({
10
+ context,
11
+ block,
12
+ options
13
+ }) {
14
+ if (!isTypedObject(block) || block._type !== context.schema.block.name && !context.schema.blockObjects.some((blockObject) => blockObject.name === block._type))
15
+ return;
16
+ if (block._type !== context.schema.block.name) {
17
+ const _key = options.refreshKeys ? context.keyGenerator() : typeof block._key == "string" ? block._key : context.keyGenerator();
18
+ return {
19
+ ...block,
20
+ _key
21
+ };
22
+ }
23
+ if (!types.isPortableTextTextBlock(block))
24
+ return {
25
+ _type: context.schema.block.name,
26
+ _key: options.refreshKeys ? context.keyGenerator() : typeof block._key == "string" ? block._key : context.keyGenerator(),
27
+ children: [{
28
+ _key: context.keyGenerator(),
29
+ _type: context.schema.span.name,
30
+ text: "",
31
+ marks: []
32
+ }],
33
+ markDefs: [],
34
+ style: context.schema.styles[0].value
35
+ };
36
+ const markDefKeyMap = /* @__PURE__ */ new Map(), markDefs = (block.markDefs ?? []).flatMap((markDef) => {
37
+ if (context.schema.annotations.some((annotation) => annotation.name === markDef._type)) {
38
+ const _key = options.refreshKeys ? context.keyGenerator() : markDef._key;
39
+ return markDefKeyMap.set(markDef._key, _key), [{
40
+ ...markDef,
41
+ _key
42
+ }];
43
+ }
44
+ return [];
45
+ }), children = block.children.flatMap((child) => {
46
+ if (!isTypedObject(child))
47
+ return [];
48
+ if (child._type !== context.schema.span.name && !context.schema.inlineObjects.some((inlineObject) => inlineObject.name === child._type))
49
+ return [];
50
+ if (!types.isPortableTextSpan(child))
51
+ return [{
52
+ ...child,
53
+ _key: options.refreshKeys ? context.keyGenerator() : child._key
54
+ }];
55
+ const marks = (child.marks ?? []).flatMap((mark) => markDefKeyMap.has(mark) ? [markDefKeyMap.get(mark)] : context.schema.decorators.some((decorator) => decorator.value === mark) ? [mark] : []);
56
+ return [{
57
+ ...child,
58
+ _key: options.refreshKeys ? context.keyGenerator() : child._key,
59
+ marks
60
+ }];
61
+ }), parsedBlock = {
62
+ ...block,
63
+ _key: options.refreshKeys ? context.keyGenerator() : block._key,
64
+ children: children.length > 0 ? children : [{
65
+ _key: context.keyGenerator(),
66
+ _type: context.schema.span.name,
67
+ text: "",
68
+ marks: []
69
+ }],
70
+ markDefs
71
+ };
72
+ if (!context.schema.styles.find((style) => style.value === block.style)) {
73
+ const defaultStyle = context.schema.styles[0].value;
74
+ defaultStyle !== void 0 ? parsedBlock.style = defaultStyle : delete parsedBlock.style;
75
+ }
76
+ return context.schema.lists.find((list) => list.value === block.listItem) || (delete parsedBlock.listItem, delete parsedBlock.level), parsedBlock;
77
+ }
78
+ exports.parseBlock = parseBlock;
79
+ //# sourceMappingURL=parse-blocks.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-blocks.cjs","sources":["../../src/internal-utils/asserters.ts","../../src/internal-utils/parse-blocks.ts"],"sourcesContent":["import type {TypedObject} from '@sanity/types'\n\nexport function isTypedObject(object: unknown): object is TypedObject {\n return isRecord(object) && typeof object._type === 'string'\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return !!value && (typeof value === 'object' || typeof value === 'function')\n}\n","import {\n isPortableTextSpan,\n isPortableTextTextBlock,\n type PortableTextBlock,\n} from '@sanity/types'\nimport type {EditorContext} from '../editor/editor-snapshot'\nimport {isTypedObject} from './asserters'\n\nexport function parseBlock({\n context,\n block,\n options,\n}: {\n context: Pick<EditorContext, 'keyGenerator' | 'schema'>\n block: unknown\n options: {\n refreshKeys: boolean\n }\n}): PortableTextBlock | undefined {\n if (!isTypedObject(block)) {\n return undefined\n }\n\n if (\n block._type !== context.schema.block.name &&\n !context.schema.blockObjects.some(\n (blockObject) => blockObject.name === block._type,\n )\n ) {\n return undefined\n }\n\n if (block._type !== context.schema.block.name) {\n const _key = options.refreshKeys\n ? context.keyGenerator()\n : typeof block._key === 'string'\n ? block._key\n : context.keyGenerator()\n return {\n ...block,\n _key,\n }\n }\n\n if (!isPortableTextTextBlock(block)) {\n return {\n _type: context.schema.block.name,\n _key: options.refreshKeys\n ? context.keyGenerator()\n : typeof block._key === 'string'\n ? block._key\n : context.keyGenerator(),\n children: [\n {\n _key: context.keyGenerator(),\n _type: context.schema.span.name,\n text: '',\n marks: [],\n },\n ],\n markDefs: [],\n style: context.schema.styles[0].value,\n }\n }\n\n const markDefKeyMap = new Map<string, string>()\n const markDefs = (block.markDefs ?? []).flatMap((markDef) => {\n if (\n context.schema.annotations.some(\n (annotation) => annotation.name === markDef._type,\n )\n ) {\n const _key = options.refreshKeys ? context.keyGenerator() : markDef._key\n markDefKeyMap.set(markDef._key, _key)\n\n return [\n {\n ...markDef,\n _key,\n },\n ]\n }\n\n return []\n })\n\n const children = block.children.flatMap((child) => {\n if (!isTypedObject(child)) {\n return []\n }\n\n if (\n child._type !== context.schema.span.name &&\n !context.schema.inlineObjects.some(\n (inlineObject) => inlineObject.name === child._type,\n )\n ) {\n return []\n }\n\n if (!isPortableTextSpan(child)) {\n return [\n {\n ...child,\n _key: options.refreshKeys ? context.keyGenerator() : child._key,\n },\n ]\n }\n\n const marks = (child.marks ?? []).flatMap((mark) => {\n if (markDefKeyMap.has(mark)) {\n return [markDefKeyMap.get(mark)]\n }\n\n if (\n context.schema.decorators.some((decorator) => decorator.value === mark)\n ) {\n return [mark]\n }\n\n return []\n })\n\n return [\n {\n ...child,\n _key: options.refreshKeys ? context.keyGenerator() : child._key,\n marks,\n },\n ]\n })\n\n const parsedBlock = {\n ...block,\n _key: options.refreshKeys ? context.keyGenerator() : block._key,\n children:\n children.length > 0\n ? children\n : [\n {\n _key: context.keyGenerator(),\n _type: context.schema.span.name,\n text: '',\n marks: [],\n },\n ],\n markDefs,\n }\n\n if (!context.schema.styles.find((style) => style.value === block.style)) {\n const defaultStyle = context.schema.styles[0].value\n\n if (defaultStyle !== undefined) {\n parsedBlock.style = defaultStyle\n } else {\n delete parsedBlock.style\n }\n }\n\n if (!context.schema.lists.find((list) => list.value === block.listItem)) {\n delete parsedBlock.listItem\n delete parsedBlock.level\n }\n\n return parsedBlock\n}\n"],"names":["isTypedObject","object","isRecord","_type","value","parseBlock","context","block","options","schema","name","blockObjects","some","blockObject","_key","refreshKeys","keyGenerator","isPortableTextTextBlock","children","span","text","marks","markDefs","style","styles","markDefKeyMap","Map","flatMap","markDef","annotations","annotation","set","child","inlineObjects","inlineObject","isPortableTextSpan","mark","has","get","decorators","decorator","parsedBlock","length","find","defaultStyle","undefined","lists","list","listItem","level"],"mappings":"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"}