@portabletext/editor 1.33.2 → 1.33.4

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 (81) hide show
  1. package/lib/_chunks-cjs/behavior.core.cjs +11 -204
  2. package/lib/_chunks-cjs/behavior.core.cjs.map +1 -1
  3. package/lib/_chunks-cjs/behavior.markdown.cjs +7 -7
  4. package/lib/_chunks-cjs/behavior.markdown.cjs.map +1 -1
  5. package/lib/_chunks-cjs/plugin.event-listener.cjs +208 -33
  6. package/lib/_chunks-cjs/plugin.event-listener.cjs.map +1 -1
  7. package/lib/_chunks-cjs/selector.get-text-before.cjs +3 -3
  8. package/lib/_chunks-cjs/selector.get-text-before.cjs.map +1 -1
  9. package/lib/_chunks-cjs/selector.is-active-style.cjs +246 -0
  10. package/lib/_chunks-cjs/selector.is-active-style.cjs.map +1 -0
  11. package/lib/_chunks-cjs/selector.is-at-the-start-of-block.cjs +31 -200
  12. package/lib/_chunks-cjs/selector.is-at-the-start-of-block.cjs.map +1 -1
  13. package/lib/_chunks-cjs/util.block-offsets-to-selection.cjs +7 -5
  14. package/lib/_chunks-cjs/util.block-offsets-to-selection.cjs.map +1 -1
  15. package/lib/_chunks-cjs/util.reverse-selection.cjs +0 -116
  16. package/lib/_chunks-cjs/util.reverse-selection.cjs.map +1 -1
  17. package/lib/_chunks-cjs/util.slice-blocks.cjs +138 -1
  18. package/lib/_chunks-cjs/util.slice-blocks.cjs.map +1 -1
  19. package/lib/_chunks-es/behavior.core.js +9 -202
  20. package/lib/_chunks-es/behavior.core.js.map +1 -1
  21. package/lib/_chunks-es/behavior.markdown.js +1 -1
  22. package/lib/_chunks-es/plugin.event-listener.js +205 -31
  23. package/lib/_chunks-es/plugin.event-listener.js.map +1 -1
  24. package/lib/_chunks-es/selector.get-text-before.js +2 -1
  25. package/lib/_chunks-es/selector.get-text-before.js.map +1 -1
  26. package/lib/_chunks-es/selector.is-active-style.js +249 -0
  27. package/lib/_chunks-es/selector.is-active-style.js.map +1 -0
  28. package/lib/_chunks-es/selector.is-at-the-start-of-block.js +20 -189
  29. package/lib/_chunks-es/selector.is-at-the-start-of-block.js.map +1 -1
  30. package/lib/_chunks-es/util.block-offsets-to-selection.js +5 -3
  31. package/lib/_chunks-es/util.block-offsets-to-selection.js.map +1 -1
  32. package/lib/_chunks-es/util.reverse-selection.js +1 -117
  33. package/lib/_chunks-es/util.reverse-selection.js.map +1 -1
  34. package/lib/_chunks-es/util.slice-blocks.js +140 -3
  35. package/lib/_chunks-es/util.slice-blocks.js.map +1 -1
  36. package/lib/index.d.cts +1 -115
  37. package/lib/index.d.ts +1 -115
  38. package/lib/plugins/index.cjs +19 -15
  39. package/lib/plugins/index.cjs.map +1 -1
  40. package/lib/plugins/index.d.cts +1 -115
  41. package/lib/plugins/index.d.ts +1 -115
  42. package/lib/plugins/index.js +9 -5
  43. package/lib/plugins/index.js.map +1 -1
  44. package/lib/selectors/index.cjs +16 -21
  45. package/lib/selectors/index.cjs.map +1 -1
  46. package/lib/selectors/index.d.cts +2 -0
  47. package/lib/selectors/index.d.ts +2 -0
  48. package/lib/selectors/index.js +7 -11
  49. package/lib/selectors/index.js.map +1 -1
  50. package/lib/utils/index.cjs +13 -13
  51. package/lib/utils/index.cjs.map +1 -1
  52. package/lib/utils/index.d.cts +2 -0
  53. package/lib/utils/index.d.ts +2 -0
  54. package/lib/utils/index.js +3 -3
  55. package/package.json +2 -2
  56. package/src/behaviors/behavior.core.annotations.ts +0 -24
  57. package/src/behaviors/behavior.core.decorators.ts +0 -19
  58. package/src/behaviors/behavior.core.insert-break.ts +4 -4
  59. package/src/behaviors/behavior.core.lists.ts +0 -30
  60. package/src/behaviors/behavior.core.ts +2 -17
  61. package/src/behaviors/behavior.default.ts +198 -0
  62. package/src/behaviors/behavior.foundational.ts +12 -12
  63. package/src/behaviors/behavior.markdown-emphasis.ts +4 -0
  64. package/src/converters/converter.text-html.serialize.test.ts +1 -1
  65. package/src/editor/PortableTextEditor.tsx +1 -1
  66. package/src/editor/editor-machine.ts +8 -8
  67. package/src/plugins/plugin.event-listener.tsx +1 -1
  68. package/src/selectors/selector.get-caret-word-selection.ts +9 -0
  69. package/src/selectors/selector.get-selection-text.test.ts +383 -36
  70. package/src/selectors/selector.get-selection-text.ts +13 -73
  71. package/src/utils/util.block-offset.test.ts +312 -0
  72. package/src/utils/util.block-offset.ts +39 -7
  73. package/src/utils/util.block-offsets-to-selection.ts +2 -0
  74. package/src/utils/util.slice-blocks.ts +12 -1
  75. package/lib/_chunks-cjs/selector.get-trimmed-selection.cjs +0 -97
  76. package/lib/_chunks-cjs/selector.get-trimmed-selection.cjs.map +0 -1
  77. package/lib/_chunks-es/selector.get-trimmed-selection.js +0 -100
  78. package/lib/_chunks-es/selector.get-trimmed-selection.js.map +0 -1
  79. package/src/behaviors/behavior.core.deserialize.ts +0 -60
  80. package/src/behaviors/behavior.core.serialize.ts +0 -44
  81. package/src/behaviors/behavior.core.style.ts +0 -19
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
- var selector_isAtTheStartOfBlock = require("./selector.is-at-the-start-of-block.cjs"), types = require("@sanity/types"), util_reverseSelection = require("./util.reverse-selection.cjs");
2
+ var selector_isAtTheStartOfBlock = require("./selector.is-at-the-start-of-block.cjs"), types = require("@sanity/types"), util_sliceBlocks = require("./util.slice-blocks.cjs");
3
3
  function isCustomBehaviorEvent(event) {
4
4
  return event.type.startsWith("custom.");
5
5
  }
@@ -12,35 +12,7 @@ function raise(event) {
12
12
  function defineBehavior(behavior) {
13
13
  return behavior;
14
14
  }
15
- const toggleAnnotationOff = {
16
- on: "annotation.toggle",
17
- guard: ({
18
- context,
19
- event
20
- }) => selector_isAtTheStartOfBlock.isActiveAnnotation(event.annotation.name)({
21
- context
22
- }),
23
- actions: [({
24
- event
25
- }) => [raise({
26
- type: "annotation.remove",
27
- annotation: event.annotation
28
- })]]
29
- }, toggleAnnotationOn = {
30
- on: "annotation.toggle",
31
- guard: ({
32
- context,
33
- event
34
- }) => !selector_isAtTheStartOfBlock.isActiveAnnotation(event.annotation.name)({
35
- context
36
- }),
37
- actions: [({
38
- event
39
- }) => [raise({
40
- type: "annotation.add",
41
- annotation: event.annotation
42
- })]]
43
- }, addAnnotationOnCollapsedSelection = {
15
+ const addAnnotationOnCollapsedSelection = {
44
16
  on: "annotation.add",
45
17
  guard: ({
46
18
  context
@@ -73,8 +45,6 @@ const toggleAnnotationOff = {
73
45
  annotation: event.annotation
74
46
  })]]
75
47
  }, coreAnnotationBehaviors = {
76
- toggleAnnotationOff,
77
- toggleAnnotationOn,
78
48
  addAnnotationOnCollapsedSelection
79
49
  }, IS_MAC = typeof window < "u" && /Mac|iPod|iPhone|iPad/.test(window.navigator.userAgent), modifiers = {
80
50
  alt: "altKey",
@@ -252,7 +222,7 @@ const arrowDownOnLonelyBlockObject = {
252
222
  }), previousBlock = selector_isAtTheStartOfBlock.getPreviousBlock({
253
223
  context
254
224
  });
255
- return !focusTextBlock || !selectionCollapsed || !previousBlock ? !1 : util_reverseSelection.isEmptyTextBlock(focusTextBlock.node) && !types.isPortableTextTextBlock(previousBlock.node) ? {
225
+ return !focusTextBlock || !selectionCollapsed || !previousBlock ? !1 : util_sliceBlocks.isEmptyTextBlock(focusTextBlock.node) && !types.isPortableTextTextBlock(previousBlock.node) ? {
256
226
  focusTextBlock,
257
227
  previousBlock
258
228
  } : !1;
@@ -288,7 +258,7 @@ const arrowDownOnLonelyBlockObject = {
288
258
  }), nextBlock = selector_isAtTheStartOfBlock.getNextBlock({
289
259
  context
290
260
  });
291
- return !focusTextBlock || !selectionCollapsed || !nextBlock ? !1 : util_reverseSelection.isEmptyTextBlock(focusTextBlock.node) && !types.isPortableTextTextBlock(nextBlock.node) ? {
261
+ return !focusTextBlock || !selectionCollapsed || !nextBlock ? !1 : util_sliceBlocks.isEmptyTextBlock(focusTextBlock.node) && !types.isPortableTextTextBlock(nextBlock.node) ? {
292
262
  focusTextBlock,
293
263
  nextBlock
294
264
  } : !1;
@@ -319,36 +289,6 @@ const arrowDownOnLonelyBlockObject = {
319
289
  deletingEmptyTextBlockAfterBlockObject,
320
290
  deletingEmptyTextBlockBeforeBlockObject
321
291
  }, coreDecoratorBehaviors = {
322
- toggleDecoratorOff: {
323
- on: "decorator.toggle",
324
- guard: ({
325
- context,
326
- event
327
- }) => selector_isAtTheStartOfBlock.isActiveDecorator(event.decorator)({
328
- context
329
- }),
330
- actions: [({
331
- event
332
- }) => [raise({
333
- type: "decorator.remove",
334
- decorator: event.decorator
335
- })]]
336
- },
337
- toggleDecoratorOn: {
338
- on: "decorator.toggle",
339
- guard: ({
340
- context,
341
- event
342
- }) => !selector_isAtTheStartOfBlock.isActiveDecorator(event.decorator)({
343
- context
344
- }),
345
- actions: [({
346
- event
347
- }) => [raise({
348
- type: "decorator.add",
349
- decorator: event.decorator
350
- })]]
351
- },
352
292
  strongShortcut: {
353
293
  on: "key.down",
354
294
  guard: ({
@@ -393,46 +333,7 @@ const arrowDownOnLonelyBlockObject = {
393
333
  decorator: "code"
394
334
  })]]
395
335
  }
396
- }, coreDeserializeBehaviors = {
397
- deserialize: {
398
- on: "deserialize",
399
- guard: ({
400
- context,
401
- event
402
- }) => {
403
- const deserializeEvents = context.converters.flatMap((converter) => {
404
- const data = event.dataTransfer.getData(converter.mimeType);
405
- return data ? [converter.deserialize({
406
- context,
407
- event: {
408
- type: "deserialize",
409
- data
410
- }
411
- })] : [];
412
- });
413
- return deserializeEvents.find((deserializeEvent) => deserializeEvent.type === "deserialization.success") || {
414
- type: "deserialization.failure",
415
- mimeType: "*/*",
416
- reason: deserializeEvents.map((deserializeEvent) => deserializeEvent.type === "deserialization.failure" ? deserializeEvent.reason : "").join(", ")
417
- };
418
- },
419
- actions: [({
420
- event
421
- }, deserializeEvent) => [raise({
422
- ...deserializeEvent,
423
- dataTransfer: event.dataTransfer
424
- })]]
425
- },
426
- "deserialization.success": {
427
- on: "deserialization.success",
428
- actions: [({
429
- event
430
- }) => [raise({
431
- type: "insert.blocks",
432
- blocks: event.data
433
- })]]
434
- }
435
- }, atTheEndOfTextBlock = {
336
+ }, breakingAtTheEndOfTextBlock = {
436
337
  on: "insert.break",
437
338
  guard: ({
438
339
  context
@@ -475,7 +376,7 @@ const arrowDownOnLonelyBlockObject = {
475
376
  },
476
377
  placement: "after"
477
378
  })]]
478
- }, atTheStartOfTextBlock = {
379
+ }, breakingAtTheStartOfTextBlock = {
479
380
  on: "insert.break",
480
381
  guard: ({
481
382
  context
@@ -524,37 +425,9 @@ const arrowDownOnLonelyBlockObject = {
524
425
  placement: "before"
525
426
  })]]
526
427
  }, coreInsertBreakBehaviors = {
527
- atTheEndOfTextBlock,
528
- atTheStartOfTextBlock
529
- }, MAX_LIST_LEVEL = 10, toggleListItemOff = {
530
- on: "list item.toggle",
531
- guard: ({
532
- context,
533
- event
534
- }) => selector_isAtTheStartOfBlock.isActiveListItem(event.listItem)({
535
- context
536
- }),
537
- actions: [({
538
- event
539
- }) => [raise({
540
- type: "list item.remove",
541
- listItem: event.listItem
542
- })]]
543
- }, toggleListItemOn = {
544
- on: "list item.toggle",
545
- guard: ({
546
- context,
547
- event
548
- }) => !selector_isAtTheStartOfBlock.isActiveListItem(event.listItem)({
549
- context
550
- }),
551
- actions: [({
552
- event
553
- }) => [raise({
554
- type: "list item.add",
555
- listItem: event.listItem
556
- })]]
557
- }, clearListOnBackspace = {
428
+ breakingAtTheEndOfTextBlock,
429
+ breakingAtTheStartOfTextBlock
430
+ }, MAX_LIST_LEVEL = 10, clearListOnBackspace = {
558
431
  on: "delete.backward",
559
432
  guard: ({
560
433
  context
@@ -612,7 +485,7 @@ const arrowDownOnLonelyBlockObject = {
612
485
  }), focusListBlock = selector_isAtTheStartOfBlock.getFocusListBlock({
613
486
  context
614
487
  });
615
- return !selectionCollapsed || !focusListBlock || !util_reverseSelection.isEmptyTextBlock(focusListBlock.node) ? !1 : {
488
+ return !selectionCollapsed || !focusListBlock || !util_sliceBlocks.isEmptyTextBlock(focusListBlock.node) ? !1 : {
616
489
  focusListBlock
617
490
  };
618
491
  },
@@ -674,78 +547,12 @@ const arrowDownOnLonelyBlockObject = {
674
547
  at: selectedListBlock.path
675
548
  }))]
676
549
  }, coreListBehaviors = {
677
- toggleListItemOff,
678
- toggleListItemOn,
679
550
  clearListOnBackspace,
680
551
  unindentListOnBackspace,
681
552
  clearListOnEnter,
682
553
  indentListOnTab,
683
554
  unindentListOnShiftTab
684
- }, coreSerializeBehaviors = {
685
- serialize: {
686
- on: "serialize",
687
- guard: ({
688
- context,
689
- event
690
- }) => {
691
- if (context.converters.length === 0)
692
- return !1;
693
- const serializeEvents = context.converters.map((converter) => converter.serialize({
694
- context,
695
- event
696
- }));
697
- return serializeEvents.length === 0 ? !1 : serializeEvents;
698
- },
699
- actions: [({
700
- event
701
- }, serializeEvents) => serializeEvents.map((serializeEvent) => raise({
702
- ...serializeEvent,
703
- dataTransfer: event.dataTransfer
704
- }))]
705
- },
706
- "serialization.success": {
707
- on: "serialization.success",
708
- actions: [({
709
- event
710
- }) => [raise({
711
- type: "data transfer.set",
712
- data: event.data,
713
- dataTransfer: event.dataTransfer,
714
- mimeType: event.mimeType
715
- })]]
716
- }
717
- }, toggleStyleOff = {
718
- on: "style.toggle",
719
- guard: ({
720
- context,
721
- event
722
- }) => selector_isAtTheStartOfBlock.isActiveStyle(event.style)({
723
- context
724
- }),
725
- actions: [({
726
- event
727
- }) => [raise({
728
- type: "style.remove",
729
- style: event.style
730
- })]]
731
- }, toggleStyleOn = {
732
- on: "style.toggle",
733
- guard: ({
734
- context,
735
- event
736
- }) => !selector_isAtTheStartOfBlock.isActiveStyle(event.style)({
737
- context
738
- }),
739
- actions: [({
740
- event
741
- }) => [raise({
742
- type: "style.add",
743
- style: event.style
744
- })]]
745
- }, coreStyleBehaviors = {
746
- toggleStyleOff,
747
- toggleStyleOn
748
- }, coreBehaviors = [coreAnnotationBehaviors.toggleAnnotationOff, coreAnnotationBehaviors.toggleAnnotationOn, coreAnnotationBehaviors.addAnnotationOnCollapsedSelection, 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];
555
+ }, coreBehaviors = [coreAnnotationBehaviors.addAnnotationOnCollapsedSelection, coreDecoratorBehaviors.strongShortcut, coreDecoratorBehaviors.emShortcut, coreDecoratorBehaviors.underlineShortcut, coreDecoratorBehaviors.codeShortcut, coreBlockObjectBehaviors.arrowDownOnLonelyBlockObject, coreBlockObjectBehaviors.arrowUpOnLonelyBlockObject, coreBlockObjectBehaviors.breakingBlockObject, coreBlockObjectBehaviors.deletingEmptyTextBlockAfterBlockObject, coreBlockObjectBehaviors.deletingEmptyTextBlockBeforeBlockObject, coreListBehaviors.clearListOnBackspace, coreListBehaviors.unindentListOnBackspace, coreListBehaviors.clearListOnEnter, coreListBehaviors.indentListOnTab, coreListBehaviors.unindentListOnShiftTab, coreInsertBreakBehaviors.breakingAtTheEndOfTextBlock, coreInsertBreakBehaviors.breakingAtTheStartOfTextBlock];
749
556
  exports.coreBehaviors = coreBehaviors;
750
557
  exports.defineBehavior = defineBehavior;
751
558
  exports.isCustomBehaviorEvent = isCustomBehaviorEvent;
@@ -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 selection?: NonNullable<EditorSelection>\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: 'history.redo'\n }\n | {\n type: 'history.undo'\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\nconst addAnnotationOnCollapsedSelection = defineBehavior({\n on: 'annotation.add',\n guard: ({context}) => {\n if (!selectors.isSelectionCollapsed({context})) {\n return false\n }\n\n const caretWordSelection = selectors.getCaretWordSelection({context})\n\n if (\n !caretWordSelection ||\n !selectors.isSelectionExpanded({\n context: {\n ...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 toggleAnnotationOff,\n toggleAnnotationOn,\n addAnnotationOnCollapsedSelection,\n}\n","export interface KeyboardEventLike {\n key: string\n keyCode?: number\n altKey: boolean\n ctrlKey: boolean\n metaKey: boolean\n shiftKey: boolean\n}\n\ninterface HotKey {\n keyCode?: number | undefined\n key?: string | undefined\n altKey: boolean | null\n ctrlKey: boolean | null\n metaKey: boolean | null\n shiftKey: boolean | null\n}\n\nconst IS_MAC =\n typeof window !== 'undefined' &&\n /Mac|iPod|iPhone|iPad/.test(window.navigator.userAgent)\n\ntype Modifier = 'altKey' | 'ctrlKey' | 'metaKey' | 'shiftKey'\n\nconst modifiers: Record<string, Modifier | undefined> = {\n alt: 'altKey',\n control: 'ctrlKey',\n meta: 'metaKey',\n shift: 'shiftKey',\n}\n\nconst aliases: Record<string, string | undefined> = {\n add: '+',\n break: 'pause',\n cmd: 'meta',\n command: 'meta',\n ctl: 'control',\n ctrl: 'control',\n del: 'delete',\n down: 'arrowdown',\n esc: 'escape',\n ins: 'insert',\n left: 'arrowleft',\n mod: IS_MAC ? 'meta' : 'control',\n opt: 'alt',\n option: 'alt',\n return: 'enter',\n right: 'arrowright',\n space: ' ',\n spacebar: ' ',\n up: 'arrowup',\n win: 'meta',\n windows: 'meta',\n}\n\nconst keyCodes: Record<string, number | undefined> = {\n 'backspace': 8,\n 'tab': 9,\n 'enter': 13,\n 'shift': 16,\n 'control': 17,\n 'alt': 18,\n 'pause': 19,\n 'capslock': 20,\n 'escape': 27,\n ' ': 32,\n 'pageup': 33,\n 'pagedown': 34,\n 'end': 35,\n 'home': 36,\n 'arrowleft': 37,\n 'arrowup': 38,\n 'arrowright': 39,\n 'arrowdown': 40,\n 'insert': 45,\n 'delete': 46,\n 'meta': 91,\n 'numlock': 144,\n 'scrolllock': 145,\n ';': 186,\n '=': 187,\n ',': 188,\n '-': 189,\n '.': 190,\n '/': 191,\n '`': 192,\n '[': 219,\n '\\\\': 220,\n ']': 221,\n \"'\": 222,\n 'f1': 112,\n 'f2': 113,\n 'f3': 114,\n 'f4': 115,\n 'f5': 116,\n 'f6': 117,\n 'f7': 118,\n 'f8': 119,\n 'f9': 120,\n 'f10': 121,\n 'f11': 122,\n 'f12': 123,\n 'f13': 124,\n 'f14': 125,\n 'f15': 126,\n 'f16': 127,\n 'f17': 128,\n 'f18': 129,\n 'f19': 130,\n 'f20': 131,\n}\n\nexport function isHotkey(hotkey: string, event: KeyboardEventLike): boolean {\n return compareHotkey(parseHotkey(hotkey), event)\n}\n\nfunction parseHotkey(hotkey: string): HotKey {\n // Ensure that all the modifiers are set to false unless the hotkey has them.\n const parsedHotkey: HotKey = {\n altKey: false,\n ctrlKey: false,\n metaKey: false,\n shiftKey: false,\n }\n\n // Special case to handle the `+` key since we use it as a separator.\n const hotkeySegments = hotkey.replace('++', '+add').split('+')\n\n for (const rawHotkeySegment of hotkeySegments) {\n const optional =\n rawHotkeySegment.endsWith('?') && rawHotkeySegment.length > 1\n const hotkeySegment = optional\n ? rawHotkeySegment.slice(0, -1)\n : rawHotkeySegment\n const keyName = toKeyName(hotkeySegment)\n const modifier = modifiers[keyName]\n const alias = aliases[hotkeySegment]\n const code = keyCodes[keyName]\n\n if (\n hotkeySegment.length > 1 &&\n modifier === undefined &&\n alias === undefined &&\n code === undefined\n ) {\n throw new TypeError(`Unknown modifier: \"${hotkeySegment}\"`)\n }\n\n if (hotkeySegments.length === 1 || modifier === undefined) {\n parsedHotkey.key = keyName\n parsedHotkey.keyCode = toKeyCode(hotkeySegment)\n }\n\n if (modifier !== undefined) {\n parsedHotkey[modifier] = optional ? null : true\n }\n }\n\n return parsedHotkey\n}\n\nfunction compareHotkey(\n parsedHotkey: HotKey,\n event: KeyboardEventLike,\n): boolean {\n const matchingModifiers =\n (parsedHotkey.altKey != null\n ? parsedHotkey.altKey === event.altKey\n : true) &&\n (parsedHotkey.ctrlKey != null\n ? parsedHotkey.ctrlKey === event.ctrlKey\n : true) &&\n (parsedHotkey.metaKey != null\n ? parsedHotkey.metaKey === event.metaKey\n : true) &&\n (parsedHotkey.shiftKey != null\n ? parsedHotkey.shiftKey === event.shiftKey\n : true)\n\n if (!matchingModifiers) {\n return false\n }\n\n if (parsedHotkey.keyCode !== undefined && event.keyCode !== undefined) {\n if (parsedHotkey.keyCode === 91 && event.keyCode === 93) {\n return true\n }\n\n return parsedHotkey.keyCode === event.keyCode\n }\n\n return (\n parsedHotkey.keyCode === event.keyCode ||\n parsedHotkey.key === event.key.toLowerCase()\n )\n}\n\nfunction toKeyCode(name: string): number {\n const keyName = toKeyName(name)\n const keyCode = keyCodes[keyName] ?? keyName.toUpperCase().charCodeAt(0)\n\n return keyCode\n}\n\nfunction toKeyName(name: string): string {\n const keyName = name.toLowerCase()\n\n return aliases[keyName] ?? keyName\n}\n","import {isPortableTextTextBlock} from '@sanity/types'\nimport {isHotkey} from '../internal-utils/is-hotkey'\nimport * as selectors from '../selectors'\nimport {isEmptyTextBlock} from '../utils/util.is-empty-text-block'\nimport {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 coreAnnotationBehaviors.addAnnotationOnCollapsedSelection,\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"],"names":["isCustomBehaviorEvent","event","type","startsWith","raise","defineBehavior","behavior","toggleAnnotationOff","on","guard","context","selectors","annotation","name","actions","toggleAnnotationOn","addAnnotationOnCollapsedSelection","caretWordSelection","selection","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","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"],"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.insert-break.ts","../../src/behaviors/behavior.core.lists.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 selection?: NonNullable<EditorSelection>\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: 'history.redo'\n }\n | {\n type: 'history.undo'\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 addAnnotationOnCollapsedSelection = defineBehavior({\n on: 'annotation.add',\n guard: ({context}) => {\n if (!selectors.isSelectionCollapsed({context})) {\n return false\n }\n\n const caretWordSelection = selectors.getCaretWordSelection({context})\n\n if (\n !caretWordSelection ||\n !selectors.isSelectionExpanded({\n context: {\n ...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","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 {defineBehavior, raise} from './behavior.types'\n\nexport const coreDecoratorBehaviors = {\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 * as selectors from '../selectors'\nimport {defineBehavior, raise} from './behavior.types'\n\nconst breakingAtTheEndOfTextBlock = 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 breakingAtTheStartOfTextBlock = 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 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 {defineBehavior, raise} from './behavior.types'\n\nconst MAX_LIST_LEVEL = 10\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 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 {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 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":["isCustomBehaviorEvent","event","type","startsWith","raise","defineBehavior","behavior","addAnnotationOnCollapsedSelection","on","guard","context","selectors","caretWordSelection","selection","actions","annotation","coreAnnotationBehaviors","IS_MAC","window","test","navigator","userAgent","modifiers","alt","control","meta","shift","aliases","add","break","cmd","command","ctl","ctrl","del","down","esc","ins","left","mod","opt","option","return","right","space","spacebar","up","win","windows","keyCodes","isHotkey","hotkey","compareHotkey","parseHotkey","parsedHotkey","altKey","ctrlKey","metaKey","shiftKey","hotkeySegments","replace","split","rawHotkeySegment","optional","endsWith","length","hotkeySegment","slice","keyName","toKeyName","modifier","alias","code","undefined","TypeError","key","keyCode","toKeyCode","toLowerCase","name","toUpperCase","charCodeAt","arrowDownOnLonelyBlockObject","isArrowDown","keyboardEvent","focusBlockObject","nextBlock","placement","arrowUpOnLonelyBlockObject","isArrowUp","previousBlock","breakingBlockObject","deletingEmptyTextBlockAfterBlockObject","focusTextBlock","selectionCollapsed","isEmptyTextBlock","node","isPortableTextTextBlock","_","blockPath","path","anchor","offset","focus","deletingEmptyTextBlockBeforeBlockObject","coreBlockObjectBehaviors","coreDecoratorBehaviors","strongShortcut","schema","decorators","some","decorator","value","emShortcut","underlineShortcut","codeShortcut","breakingAtTheEndOfTextBlock","atTheEndOfBlock","focusListItem","listItem","focusLevel","level","block","_type","_key","keyGenerator","children","span","text","marks","markDefs","style","styles","breakingAtTheStartOfTextBlock","focusSpan","focusDecorators","filter","mark","focusAnnotations","coreInsertBreakBehaviors","MAX_LIST_LEVEL","clearListOnBackspace","props","at","unindentListOnBackspace","clearListOnEnter","focusListBlock","indentListOnTab","selectedBlocks","guards","createGuards","selectedListBlocks","flatMap","isListBlock","map","selectedListBlock","Math","min","max","unindentListOnShiftTab","coreListBehaviors","coreBehaviors"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
- var types = require("@sanity/types"), selector_isAtTheStartOfBlock = require("./selector.is-at-the-start-of-block.cjs"), util_reverseSelection = require("./util.reverse-selection.cjs"), selector_getTextBefore = require("./selector.get-text-before.cjs"), behavior_core = require("./behavior.core.cjs");
2
+ var types = require("@sanity/types"), selector_isAtTheStartOfBlock = require("./selector.is-at-the-start-of-block.cjs"), util_sliceBlocks = require("./util.slice-blocks.cjs"), selector_getTextBefore = require("./selector.get-text-before.cjs"), behavior_core = require("./behavior.core.cjs");
3
3
  function createMarkdownBehaviors(config) {
4
4
  const automaticBlockquoteOnSpace = behavior_core.defineBehavior({
5
5
  on: "insert.text",
@@ -20,7 +20,7 @@ function createMarkdownBehaviors(config) {
20
20
  return !1;
21
21
  const previousInlineObject = selector_isAtTheStartOfBlock.getPreviousInlineObject({
22
22
  context
23
- }), blockOffset = util_reverseSelection.spanSelectionPointToBlockOffset({
23
+ }), blockOffset = util_sliceBlocks.spanSelectionPointToBlockOffset({
24
24
  value: context.value,
25
25
  selectionPoint: {
26
26
  path: [{
@@ -33,7 +33,7 @@ function createMarkdownBehaviors(config) {
33
33
  });
34
34
  if (previousInlineObject || !blockOffset)
35
35
  return !1;
36
- const blockText = util_reverseSelection.getTextBlockText(focusTextBlock.node), caretAtTheEndOfQuote = blockOffset.offset === 1, looksLikeMarkdownQuote = /^>/.test(blockText), blockquoteStyle = config.blockquoteStyle?.(context);
36
+ const blockText = util_sliceBlocks.getTextBlockText(focusTextBlock.node), caretAtTheEndOfQuote = blockOffset.offset === 1, looksLikeMarkdownQuote = /^>/.test(blockText), blockquoteStyle = config.blockquoteStyle?.(context);
37
37
  return caretAtTheEndOfQuote && looksLikeMarkdownQuote && blockquoteStyle !== void 0 ? {
38
38
  focusTextBlock,
39
39
  style: blockquoteStyle
@@ -175,7 +175,7 @@ function createMarkdownBehaviors(config) {
175
175
  });
176
176
  if (!selectionCollapsed || !focusTextBlock || !focusSpan)
177
177
  return !1;
178
- const blockOffset = util_reverseSelection.spanSelectionPointToBlockOffset({
178
+ const blockOffset = util_sliceBlocks.spanSelectionPointToBlockOffset({
179
179
  value: context.value,
180
180
  selectionPoint: {
181
181
  path: [{
@@ -190,7 +190,7 @@ function createMarkdownBehaviors(config) {
190
190
  return !1;
191
191
  const previousInlineObject = selector_isAtTheStartOfBlock.getPreviousInlineObject({
192
192
  context
193
- }), blockText = util_reverseSelection.getTextBlockText(focusTextBlock.node), markdownHeadingSearch = /^#+/.exec(blockText), level = markdownHeadingSearch ? markdownHeadingSearch[0].length : void 0, caretAtTheEndOfHeading = blockOffset.offset === level;
193
+ }), blockText = util_sliceBlocks.getTextBlockText(focusTextBlock.node), markdownHeadingSearch = /^#+/.exec(blockText), level = markdownHeadingSearch ? markdownHeadingSearch[0].length : void 0, caretAtTheEndOfHeading = blockOffset.offset === level;
194
194
  if (previousInlineObject || !caretAtTheEndOfHeading)
195
195
  return !1;
196
196
  const style = level !== void 0 ? config.headingStyle?.({
@@ -275,7 +275,7 @@ function createMarkdownBehaviors(config) {
275
275
  return !1;
276
276
  const previousInlineObject = selector_isAtTheStartOfBlock.getPreviousInlineObject({
277
277
  context
278
- }), blockOffset = util_reverseSelection.spanSelectionPointToBlockOffset({
278
+ }), blockOffset = util_sliceBlocks.spanSelectionPointToBlockOffset({
279
279
  value: context.value,
280
280
  selectionPoint: {
281
281
  path: [{
@@ -288,7 +288,7 @@ function createMarkdownBehaviors(config) {
288
288
  });
289
289
  if (previousInlineObject || !blockOffset)
290
290
  return !1;
291
- const blockText = util_reverseSelection.getTextBlockText(focusTextBlock.node), defaultStyle = config.defaultStyle?.(context), looksLikeUnorderedList = /^(-|\*)/.test(blockText), unorderedListStyle = config.unorderedListStyle?.(context), caretAtTheEndOfUnorderedList = blockOffset.offset === 1;
291
+ const blockText = util_sliceBlocks.getTextBlockText(focusTextBlock.node), defaultStyle = config.defaultStyle?.(context), looksLikeUnorderedList = /^(-|\*)/.test(blockText), unorderedListStyle = config.unorderedListStyle?.(context), caretAtTheEndOfUnorderedList = blockOffset.offset === 1;
292
292
  if (defaultStyle && caretAtTheEndOfUnorderedList && looksLikeUnorderedList && unorderedListStyle !== void 0)
293
293
  return {
294
294
  focusTextBlock,