@portabletext/editor 1.15.2 → 1.15.3

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 (42) hide show
  1. package/lib/_chunks-cjs/behavior.core.cjs +5 -3
  2. package/lib/_chunks-cjs/behavior.core.cjs.map +1 -1
  3. package/lib/_chunks-cjs/selectors.cjs.map +1 -1
  4. package/lib/_chunks-es/behavior.core.js +5 -3
  5. package/lib/_chunks-es/behavior.core.js.map +1 -1
  6. package/lib/_chunks-es/selectors.js.map +1 -1
  7. package/lib/behaviors/index.cjs +12 -12
  8. package/lib/behaviors/index.cjs.map +1 -1
  9. package/lib/behaviors/index.d.cts +39 -45
  10. package/lib/behaviors/index.d.ts +39 -45
  11. package/lib/behaviors/index.js +12 -12
  12. package/lib/behaviors/index.js.map +1 -1
  13. package/lib/index.cjs +13 -27
  14. package/lib/index.cjs.map +1 -1
  15. package/lib/index.d.cts +129 -133
  16. package/lib/index.d.ts +129 -133
  17. package/lib/index.js +13 -27
  18. package/lib/index.js.map +1 -1
  19. package/lib/selectors/index.d.cts +8 -12
  20. package/lib/selectors/index.d.ts +8 -12
  21. package/package.json +2 -2
  22. package/src/behavior-actions/behavior.action-utils.insert-block.ts +3 -5
  23. package/src/behavior-actions/behavior.actions.ts +6 -6
  24. package/src/behavior-actions/behavior.guards.ts +2 -6
  25. package/src/behaviors/behavior.core.block-objects.ts +1 -1
  26. package/src/behaviors/behavior.core.lists.ts +2 -2
  27. package/src/behaviors/behavior.links.ts +2 -2
  28. package/src/behaviors/behavior.markdown.ts +11 -19
  29. package/src/behaviors/behavior.types.ts +7 -7
  30. package/src/behaviors/index.ts +1 -0
  31. package/src/editor/PortableTextEditor.tsx +2 -2
  32. package/src/{utils/getPortableTextMemberSchemaTypes.ts → editor/create-editor-schema.ts} +3 -3
  33. package/src/editor/create-editor.ts +2 -2
  34. package/src/editor/define-schema.ts +8 -3
  35. package/src/editor/editor-machine.ts +7 -24
  36. package/src/editor/editor-selector.ts +1 -13
  37. package/src/editor/editor-snapshot.ts +4 -6
  38. package/src/index.ts +3 -5
  39. package/src/selectors/index.ts +2 -4
  40. package/src/utils/__tests__/operationToPatches.test.ts +2 -2
  41. package/src/utils/__tests__/patchToOperations.test.ts +2 -2
  42. package/src/utils/__tests__/values.test.ts +2 -2
@@ -99,17 +99,17 @@ export declare type BehaviorActionIntend =
99
99
  effect: () => void
100
100
  }
101
101
  | {
102
- type: 'select'
103
- selection: EditorSelection
102
+ type: 'reselect'
104
103
  }
105
104
  | {
106
- type: 'select previous block'
105
+ type: 'select'
106
+ selection: EditorSelection
107
107
  }
108
108
  | {
109
- type: 'select next block'
109
+ type: 'select.previous block'
110
110
  }
111
111
  | {
112
- type: 'reselect'
112
+ type: 'select.next block'
113
113
  }
114
114
  | {
115
115
  type: 'style.add'
@@ -201,8 +201,8 @@ export declare const coreBehavior: {
201
201
  | 'focus'
202
202
  | 'insert.block object'
203
203
  | 'insert.inline object'
204
- | 'insert.soft break'
205
204
  | 'insert.break'
205
+ | 'insert.soft break'
206
206
  | 'insert.text'
207
207
  | 'list item.toggle'
208
208
  | 'style.toggle'
@@ -226,8 +226,8 @@ export declare const coreBehavior: {
226
226
  | 'focus'
227
227
  | 'insert.block object'
228
228
  | 'insert.inline object'
229
- | 'insert.soft break'
230
229
  | 'insert.break'
230
+ | 'insert.soft break'
231
231
  | 'insert.text'
232
232
  | 'list item.toggle'
233
233
  | 'style.toggle'
@@ -250,8 +250,8 @@ export declare const coreBehavior: {
250
250
  | 'focus'
251
251
  | 'insert.block object'
252
252
  | 'insert.inline object'
253
- | 'insert.soft break'
254
253
  | 'insert.break'
254
+ | 'insert.soft break'
255
255
  | 'insert.text'
256
256
  | 'list item.toggle'
257
257
  | 'style.toggle'
@@ -274,8 +274,8 @@ export declare const coreBehavior: {
274
274
  | 'focus'
275
275
  | 'insert.block object'
276
276
  | 'insert.inline object'
277
- | 'insert.soft break'
278
277
  | 'insert.break'
278
+ | 'insert.soft break'
279
279
  | 'insert.text'
280
280
  | 'list item.toggle'
281
281
  | 'style.toggle'
@@ -300,8 +300,8 @@ export declare const coreBehavior: {
300
300
  | 'focus'
301
301
  | 'insert.block object'
302
302
  | 'insert.inline object'
303
- | 'insert.soft break'
304
303
  | 'insert.break'
304
+ | 'insert.soft break'
305
305
  | 'insert.text'
306
306
  | 'list item.toggle'
307
307
  | 'style.toggle'
@@ -324,8 +324,8 @@ export declare const coreBehavior: {
324
324
  | 'focus'
325
325
  | 'insert.block object'
326
326
  | 'insert.inline object'
327
- | 'insert.soft break'
328
327
  | 'insert.break'
328
+ | 'insert.soft break'
329
329
  | 'insert.text'
330
330
  | 'list item.toggle'
331
331
  | 'style.toggle'
@@ -348,8 +348,8 @@ export declare const coreBehavior: {
348
348
  | 'focus'
349
349
  | 'insert.block object'
350
350
  | 'insert.inline object'
351
- | 'insert.soft break'
352
351
  | 'insert.break'
352
+ | 'insert.soft break'
353
353
  | 'insert.text'
354
354
  | 'list item.toggle'
355
355
  | 'style.toggle'
@@ -372,8 +372,8 @@ export declare const coreBehavior: {
372
372
  | 'focus'
373
373
  | 'insert.block object'
374
374
  | 'insert.inline object'
375
- | 'insert.soft break'
376
375
  | 'insert.break'
376
+ | 'insert.soft break'
377
377
  | 'insert.text'
378
378
  | 'list item.toggle'
379
379
  | 'style.toggle'
@@ -396,8 +396,8 @@ export declare const coreBehavior: {
396
396
  | 'focus'
397
397
  | 'insert.block object'
398
398
  | 'insert.inline object'
399
- | 'insert.soft break'
400
399
  | 'insert.break'
400
+ | 'insert.soft break'
401
401
  | 'insert.text'
402
402
  | 'list item.toggle'
403
403
  | 'style.toggle'
@@ -422,8 +422,8 @@ export declare const coreBehavior: {
422
422
  | 'focus'
423
423
  | 'insert.block object'
424
424
  | 'insert.inline object'
425
- | 'insert.soft break'
426
425
  | 'insert.break'
426
+ | 'insert.soft break'
427
427
  | 'insert.text'
428
428
  | 'list item.toggle'
429
429
  | 'style.toggle'
@@ -446,8 +446,8 @@ export declare const coreBehavior: {
446
446
  | 'focus'
447
447
  | 'insert.block object'
448
448
  | 'insert.inline object'
449
- | 'insert.soft break'
450
449
  | 'insert.break'
450
+ | 'insert.soft break'
451
451
  | 'insert.text'
452
452
  | 'list item.toggle'
453
453
  | 'style.toggle'
@@ -470,8 +470,8 @@ export declare const coreBehavior: {
470
470
  | 'focus'
471
471
  | 'insert.block object'
472
472
  | 'insert.inline object'
473
- | 'insert.soft break'
474
473
  | 'insert.break'
474
+ | 'insert.soft break'
475
475
  | 'insert.text'
476
476
  | 'list item.toggle'
477
477
  | 'style.toggle'
@@ -494,8 +494,8 @@ export declare const coreBehavior: {
494
494
  | 'focus'
495
495
  | 'insert.block object'
496
496
  | 'insert.inline object'
497
- | 'insert.soft break'
498
497
  | 'insert.break'
498
+ | 'insert.soft break'
499
499
  | 'insert.text'
500
500
  | 'list item.toggle'
501
501
  | 'style.toggle'
@@ -518,8 +518,8 @@ export declare const coreBehavior: {
518
518
  | 'focus'
519
519
  | 'insert.block object'
520
520
  | 'insert.inline object'
521
- | 'insert.soft break'
522
521
  | 'insert.break'
522
+ | 'insert.soft break'
523
523
  | 'insert.text'
524
524
  | 'list item.toggle'
525
525
  | 'style.toggle'
@@ -548,8 +548,8 @@ export declare const coreBehaviors: Behavior<
548
548
  | 'focus'
549
549
  | 'insert.block object'
550
550
  | 'insert.inline object'
551
- | 'insert.soft break'
552
551
  | 'insert.break'
552
+ | 'insert.soft break'
553
553
  | 'insert.text'
554
554
  | 'list item.toggle'
555
555
  | 'style.toggle'
@@ -578,8 +578,8 @@ export declare function createCodeEditorBehaviors(
578
578
  | 'focus'
579
579
  | 'insert.block object'
580
580
  | 'insert.inline object'
581
- | 'insert.soft break'
582
581
  | 'insert.break'
582
+ | 'insert.soft break'
583
583
  | 'insert.text'
584
584
  | 'list item.toggle'
585
585
  | 'style.toggle'
@@ -608,8 +608,8 @@ export declare function createLinkBehaviors(
608
608
  | 'focus'
609
609
  | 'insert.block object'
610
610
  | 'insert.inline object'
611
- | 'insert.soft break'
612
611
  | 'insert.break'
612
+ | 'insert.soft break'
613
613
  | 'insert.text'
614
614
  | 'list item.toggle'
615
615
  | 'style.toggle'
@@ -638,8 +638,8 @@ export declare function createMarkdownBehaviors(
638
638
  | 'focus'
639
639
  | 'insert.block object'
640
640
  | 'insert.inline object'
641
- | 'insert.soft break'
642
641
  | 'insert.break'
642
+ | 'insert.soft break'
643
643
  | 'insert.text'
644
644
  | 'list item.toggle'
645
645
  | 'style.toggle'
@@ -663,11 +663,16 @@ export declare function defineBehavior<
663
663
  */
664
664
  export declare type EditorContext = {
665
665
  keyGenerator: () => string
666
- schema: PortableTextMemberSchemaTypes
667
- selection: NonNullable<EditorSelection>
666
+ schema: EditorSchema
667
+ selection: EditorSelection
668
668
  value: Array<PortableTextBlock>
669
669
  }
670
670
 
671
+ /**
672
+ * @alpha
673
+ */
674
+ export declare type EditorSchema = PortableTextMemberSchemaTypes
675
+
671
676
  /** @beta */
672
677
  export declare type EditorSelection = {
673
678
  anchor: EditorSelectionPoint
@@ -685,10 +690,7 @@ export declare type EditorSelectionPoint = {
685
690
  * @alpha
686
691
  */
687
692
  export declare type LinkBehaviorsConfig = {
688
- linkAnnotation?: (context: {
689
- schema: PortableTextMemberSchemaTypes
690
- url: string
691
- }) =>
693
+ linkAnnotation?: (context: {schema: EditorSchema; url: string}) =>
692
694
  | {
693
695
  name: string
694
696
  value: {
@@ -702,7 +704,7 @@ export declare type LinkBehaviorsConfig = {
702
704
  * @alpha
703
705
  */
704
706
  export declare type MarkdownBehaviorsConfig = {
705
- horizontalRuleObject?: (context: {schema: PortableTextMemberSchemaTypes}) =>
707
+ horizontalRuleObject?: (context: {schema: EditorSchema}) =>
706
708
  | {
707
709
  name: string
708
710
  value?: {
@@ -710,22 +712,14 @@ export declare type MarkdownBehaviorsConfig = {
710
712
  }
711
713
  }
712
714
  | undefined
713
- defaultStyle?: (context: {
714
- schema: PortableTextMemberSchemaTypes
715
- }) => string | undefined
715
+ defaultStyle?: (context: {schema: EditorSchema}) => string | undefined
716
716
  headingStyle?: (context: {
717
- schema: PortableTextMemberSchemaTypes
717
+ schema: EditorSchema
718
718
  level: number
719
719
  }) => string | undefined
720
- blockquoteStyle?: (context: {
721
- schema: PortableTextMemberSchemaTypes
722
- }) => string | undefined
723
- unorderedListStyle?: (context: {
724
- schema: PortableTextMemberSchemaTypes
725
- }) => string | undefined
726
- orderedListStyle?: (context: {
727
- schema: PortableTextMemberSchemaTypes
728
- }) => string | undefined
720
+ blockquoteStyle?: (context: {schema: EditorSchema}) => string | undefined
721
+ unorderedListStyle?: (context: {schema: EditorSchema}) => string | undefined
722
+ orderedListStyle?: (context: {schema: EditorSchema}) => string | undefined
729
723
  }
730
724
 
731
725
  /**
@@ -853,10 +847,10 @@ export declare type SyntheticBehaviorEvent =
853
847
  }
854
848
  }
855
849
  | {
856
- type: 'insert.soft break'
850
+ type: 'insert.break'
857
851
  }
858
852
  | {
859
- type: 'insert.break'
853
+ type: 'insert.soft break'
860
854
  }
861
855
  | {
862
856
  type: 'insert.text'
@@ -132,7 +132,7 @@ function createMarkdownBehaviors(config) {
132
132
  context,
133
133
  event
134
134
  }) => {
135
- var _a;
135
+ var _a, _b, _c;
136
136
  if (event.text !== " ")
137
137
  return !1;
138
138
  const selectionCollapsed = selectionIsCollapsed({
@@ -152,12 +152,12 @@ function createMarkdownBehaviors(config) {
152
152
  }, "children", {
153
153
  _key: focusSpan.node._key
154
154
  }],
155
- offset: context.selection.focus.offset
155
+ offset: (_b = (_a = context.selection) == null ? void 0 : _a.focus.offset) != null ? _b : 0
156
156
  }
157
157
  });
158
158
  if (!blockOffset)
159
159
  return !1;
160
- const blockText = getTextBlockText(focusTextBlock.node), caretAtTheEndOfQuote = blockOffset.offset === 1, looksLikeMarkdownQuote = /^>/.test(blockText), blockquoteStyle = (_a = config.blockquoteStyle) == null ? void 0 : _a.call(config, context);
160
+ const blockText = getTextBlockText(focusTextBlock.node), caretAtTheEndOfQuote = blockOffset.offset === 1, looksLikeMarkdownQuote = /^>/.test(blockText), blockquoteStyle = (_c = config.blockquoteStyle) == null ? void 0 : _c.call(config, context);
161
161
  return caretAtTheEndOfQuote && looksLikeMarkdownQuote && blockquoteStyle !== void 0 ? {
162
162
  focusTextBlock,
163
163
  style: blockquoteStyle
@@ -287,7 +287,7 @@ function createMarkdownBehaviors(config) {
287
287
  context,
288
288
  event
289
289
  }) => {
290
- var _a;
290
+ var _a, _b, _c;
291
291
  if (event.text !== " ")
292
292
  return !1;
293
293
  const selectionCollapsed = selectionIsCollapsed({
@@ -307,7 +307,7 @@ function createMarkdownBehaviors(config) {
307
307
  }, "children", {
308
308
  _key: focusSpan.node._key
309
309
  }],
310
- offset: context.selection.focus.offset
310
+ offset: (_b = (_a = context.selection) == null ? void 0 : _a.focus.offset) != null ? _b : 0
311
311
  }
312
312
  });
313
313
  if (!blockOffset)
@@ -315,7 +315,7 @@ function createMarkdownBehaviors(config) {
315
315
  const blockText = getTextBlockText(focusTextBlock.node), markdownHeadingSearch = /^#+/.exec(blockText), level = markdownHeadingSearch ? markdownHeadingSearch[0].length : void 0;
316
316
  if (blockOffset.offset !== level)
317
317
  return !1;
318
- const style = level !== void 0 ? (_a = config.headingStyle) == null ? void 0 : _a.call(config, {
318
+ const style = level !== void 0 ? (_c = config.headingStyle) == null ? void 0 : _c.call(config, {
319
319
  schema: context.schema,
320
320
  level
321
321
  }) : void 0;
@@ -355,7 +355,7 @@ function createMarkdownBehaviors(config) {
355
355
  guard: ({
356
356
  context
357
357
  }) => {
358
- var _a;
358
+ var _a, _b;
359
359
  const selectionCollapsed = selectionIsCollapsed({
360
360
  context
361
361
  }), focusTextBlock = getFocusTextBlock({
@@ -365,7 +365,7 @@ function createMarkdownBehaviors(config) {
365
365
  });
366
366
  if (!selectionCollapsed || !focusTextBlock || !focusSpan)
367
367
  return !1;
368
- const atTheBeginningOfBLock = focusTextBlock.node.children[0]._key === focusSpan.node._key && context.selection.focus.offset === 0, defaultStyle = (_a = config.defaultStyle) == null ? void 0 : _a.call(config, context);
368
+ const atTheBeginningOfBLock = focusTextBlock.node.children[0]._key === focusSpan.node._key && ((_a = context.selection) == null ? void 0 : _a.focus.offset) === 0, defaultStyle = (_b = config.defaultStyle) == null ? void 0 : _b.call(config, context);
369
369
  return atTheBeginningOfBLock && defaultStyle && focusTextBlock.node.style !== defaultStyle ? {
370
370
  defaultStyle,
371
371
  focusTextBlock
@@ -385,7 +385,7 @@ function createMarkdownBehaviors(config) {
385
385
  context,
386
386
  event
387
387
  }) => {
388
- var _a, _b, _c;
388
+ var _a, _b, _c, _d, _e;
389
389
  if (event.text !== " ")
390
390
  return !1;
391
391
  const selectionCollapsed = selectionIsCollapsed({
@@ -405,12 +405,12 @@ function createMarkdownBehaviors(config) {
405
405
  }, "children", {
406
406
  _key: focusSpan.node._key
407
407
  }],
408
- offset: context.selection.focus.offset
408
+ offset: (_b = (_a = context.selection) == null ? void 0 : _a.focus.offset) != null ? _b : 0
409
409
  }
410
410
  });
411
411
  if (!blockOffset)
412
412
  return !1;
413
- const blockText = getTextBlockText(focusTextBlock.node), defaultStyle = (_a = config.defaultStyle) == null ? void 0 : _a.call(config, context), looksLikeUnorderedList = /^(-|\*)/.test(blockText), unorderedListStyle = (_b = config.unorderedListStyle) == null ? void 0 : _b.call(config, context), caretAtTheEndOfUnorderedList = blockOffset.offset === 1;
413
+ const blockText = getTextBlockText(focusTextBlock.node), defaultStyle = (_c = config.defaultStyle) == null ? void 0 : _c.call(config, context), looksLikeUnorderedList = /^(-|\*)/.test(blockText), unorderedListStyle = (_d = config.unorderedListStyle) == null ? void 0 : _d.call(config, context), caretAtTheEndOfUnorderedList = blockOffset.offset === 1;
414
414
  if (defaultStyle && caretAtTheEndOfUnorderedList && looksLikeUnorderedList && unorderedListStyle !== void 0)
415
415
  return {
416
416
  focusTextBlock,
@@ -418,7 +418,7 @@ function createMarkdownBehaviors(config) {
418
418
  listItemLength: 1,
419
419
  style: defaultStyle
420
420
  };
421
- const looksLikeOrderedList = /^1\./.test(blockText), orderedListStyle = (_c = config.orderedListStyle) == null ? void 0 : _c.call(config, context), caretAtTheEndOfOrderedList = blockOffset.offset === 2;
421
+ const looksLikeOrderedList = /^1\./.test(blockText), orderedListStyle = (_e = config.orderedListStyle) == null ? void 0 : _e.call(config, context), caretAtTheEndOfOrderedList = blockOffset.offset === 2;
422
422
  return defaultStyle && caretAtTheEndOfOrderedList && looksLikeOrderedList && orderedListStyle !== void 0 ? {
423
423
  focusTextBlock,
424
424
  listItem: orderedListStyle,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../src/behaviors/behavior.code-editor.ts","../../src/behaviors/behavior.links.ts","../../src/behaviors/behavior.markdown.ts"],"sourcesContent":["import {\n getFirstBlock,\n getLastBlock,\n getSelectedBlocks,\n} from '../selectors/selectors'\nimport {isHotkey} from '../utils/is-hotkey'\nimport {defineBehavior} from './behavior.types'\n\n/**\n * @alpha\n */\nexport type CodeEditorBehaviorsConfig = {\n moveBlockUpShortcut: string\n moveBlockDownShortcut: string\n}\n\n/**\n * @alpha\n */\nexport function createCodeEditorBehaviors(config: CodeEditorBehaviorsConfig) {\n return [\n defineBehavior({\n on: 'key.down',\n guard: ({context, event}) => {\n const isMoveUpShortcut = isHotkey(\n config.moveBlockUpShortcut,\n event.keyboardEvent,\n )\n const firstBlock = getFirstBlock({context})\n const selectedBlocks = getSelectedBlocks({context})\n const blocksAbove =\n firstBlock?.node._key !== selectedBlocks[0]?.node._key\n\n if (!isMoveUpShortcut || !blocksAbove) {\n return false\n }\n\n return {paths: selectedBlocks.map((block) => block.path)}\n },\n actions: [\n (_, {paths}) =>\n paths.map((at) => ({\n type: 'move.block up',\n at,\n })),\n ],\n }),\n defineBehavior({\n on: 'key.down',\n guard: ({context, event}) => {\n const isMoveDownShortcut = isHotkey(\n config.moveBlockDownShortcut,\n event.keyboardEvent,\n )\n const lastBlock = getLastBlock({context})\n const selectedBlocks = getSelectedBlocks({context})\n const blocksBelow =\n lastBlock?.node._key !==\n selectedBlocks[selectedBlocks.length - 1]?.node._key\n\n if (!isMoveDownShortcut || !blocksBelow) {\n return false\n }\n\n return {paths: selectedBlocks.map((block) => block.path).reverse()}\n },\n actions: [\n (_, {paths}) =>\n paths.map((at) => ({\n type: 'move.block down',\n at,\n })),\n ],\n }),\n ]\n}\n","import {getFocusSpan, selectionIsCollapsed} from '../selectors/selectors'\nimport type {PortableTextMemberSchemaTypes} from '../types/editor'\nimport {defineBehavior} from './behavior.types'\n\n/**\n * @alpha\n */\nexport type LinkBehaviorsConfig = {\n linkAnnotation?: (context: {\n schema: PortableTextMemberSchemaTypes\n url: string\n }) => {name: string; value: {[prop: string]: unknown}} | undefined\n}\n\n/**\n * @alpha\n */\nexport function createLinkBehaviors(config: LinkBehaviorsConfig) {\n const pasteLinkOnSelection = defineBehavior({\n on: 'paste',\n guard: ({context, event}) => {\n const selectionCollapsed = selectionIsCollapsed({context})\n const text = event.data.getData('text/plain')\n const url = looksLikeUrl(text) ? text : undefined\n const annotation =\n url !== undefined\n ? config.linkAnnotation?.({url, schema: context.schema})\n : undefined\n\n if (annotation && !selectionCollapsed) {\n return {annotation}\n }\n\n return false\n },\n actions: [\n (_, {annotation}) => [\n {\n type: 'annotation.add',\n annotation,\n },\n ],\n ],\n })\n const pasteLinkAtCaret = defineBehavior({\n on: 'paste',\n guard: ({context, event}) => {\n const focusSpan = getFocusSpan({context})\n const selectionCollapsed = selectionIsCollapsed({context})\n\n if (!focusSpan || !selectionCollapsed) {\n return false\n }\n\n const text = event.data.getData('text/plain')\n const url = looksLikeUrl(text) ? text : undefined\n const annotation =\n url !== undefined\n ? config.linkAnnotation?.({url, schema: context.schema})\n : undefined\n\n if (url && annotation && selectionCollapsed) {\n return {focusSpan, annotation, url}\n }\n\n return false\n },\n actions: [\n (_, {annotation, url}) => [\n {\n type: 'insert.span',\n text: url,\n annotations: [annotation],\n },\n ],\n ],\n })\n\n const linkBehaviors = [pasteLinkOnSelection, pasteLinkAtCaret]\n\n return linkBehaviors\n}\n\nfunction looksLikeUrl(text: string) {\n let looksLikeUrl = false\n try {\n new URL(text)\n looksLikeUrl = true\n } catch {}\n return looksLikeUrl\n}\n","import {isPortableTextTextBlock} from '@sanity/types'\nimport {getTextBlockText} from '../editor/utils/utils'\nimport {spanSelectionPointToBlockOffset} from '../editor/utils/utils.block-offset'\nimport {getBlockTextBefore} from '../selectors/selector.get-text-before'\nimport {\n getFocusBlock,\n getFocusSpan,\n getFocusTextBlock,\n selectionIsCollapsed,\n} from '../selectors/selectors'\nimport type {PortableTextMemberSchemaTypes} from '../types/editor'\nimport {defineBehavior} from './behavior.types'\n\n/**\n * @alpha\n */\nexport type MarkdownBehaviorsConfig = {\n horizontalRuleObject?: (context: {\n schema: PortableTextMemberSchemaTypes\n }) => {name: string; value?: {[prop: string]: unknown}} | undefined\n defaultStyle?: (context: {\n schema: PortableTextMemberSchemaTypes\n }) => string | undefined\n headingStyle?: (context: {\n schema: PortableTextMemberSchemaTypes\n level: number\n }) => string | undefined\n blockquoteStyle?: (context: {\n schema: PortableTextMemberSchemaTypes\n }) => string | undefined\n unorderedListStyle?: (context: {\n schema: PortableTextMemberSchemaTypes\n }) => string | undefined\n orderedListStyle?: (context: {\n schema: PortableTextMemberSchemaTypes\n }) => string | undefined\n}\n\n/**\n * @alpha\n */\nexport function createMarkdownBehaviors(config: MarkdownBehaviorsConfig) {\n const automaticBlockquoteOnSpace = defineBehavior({\n on: 'insert.text',\n guard: ({context, event}) => {\n const isSpace = event.text === ' '\n\n if (!isSpace) {\n return false\n }\n\n const selectionCollapsed = selectionIsCollapsed({context})\n const focusTextBlock = getFocusTextBlock({context})\n const focusSpan = getFocusSpan({context})\n\n if (!selectionCollapsed || !focusTextBlock || !focusSpan) {\n return false\n }\n\n const blockOffset = spanSelectionPointToBlockOffset({\n value: context.value,\n selectionPoint: {\n path: [\n {_key: focusTextBlock.node._key},\n 'children',\n {_key: focusSpan.node._key},\n ],\n offset: context.selection.focus.offset,\n },\n })\n\n if (!blockOffset) {\n return false\n }\n\n const blockText = getTextBlockText(focusTextBlock.node)\n const caretAtTheEndOfQuote = blockOffset.offset === 1\n const looksLikeMarkdownQuote = /^>/.test(blockText)\n const blockquoteStyle = config.blockquoteStyle?.(context)\n\n if (\n caretAtTheEndOfQuote &&\n looksLikeMarkdownQuote &&\n blockquoteStyle !== undefined\n ) {\n return {focusTextBlock, style: blockquoteStyle}\n }\n\n return false\n },\n actions: [\n () => [\n {\n type: 'insert.text',\n text: ' ',\n },\n ],\n (_, {focusTextBlock, style}) => [\n {\n type: 'text block.unset',\n props: ['listItem', 'level'],\n at: focusTextBlock.path,\n },\n {\n type: 'text block.set',\n style,\n at: focusTextBlock.path,\n },\n {\n type: 'delete.text',\n anchor: {\n path: focusTextBlock.path,\n offset: 0,\n },\n focus: {\n path: focusTextBlock.path,\n offset: 2,\n },\n },\n ],\n ],\n })\n const automaticHr = defineBehavior({\n on: 'insert.text',\n guard: ({context, event}) => {\n const hrCharacter =\n event.text === '-'\n ? '-'\n : event.text === '*'\n ? '*'\n : event.text === '_'\n ? '_'\n : undefined\n\n if (hrCharacter === undefined) {\n return false\n }\n\n const hrObject = config.horizontalRuleObject?.(context)\n const focusBlock = getFocusTextBlock({context})\n const selectionCollapsed = selectionIsCollapsed({context})\n\n if (!hrObject || !focusBlock || !selectionCollapsed) {\n return false\n }\n\n const textBefore = getBlockTextBefore({context})\n const hrBlockOffsets = {\n anchor: {\n path: focusBlock.path,\n offset: 0,\n },\n focus: {\n path: focusBlock.path,\n offset: 3,\n },\n }\n\n if (textBefore === `${hrCharacter}${hrCharacter}`) {\n return {hrObject, focusBlock, hrCharacter, hrBlockOffsets}\n }\n\n return false\n },\n actions: [\n (_, {hrCharacter}) => [\n {\n type: 'insert.text',\n text: hrCharacter,\n },\n ],\n (_, {hrObject, hrBlockOffsets}) => [\n {\n type: 'insert.block object',\n placement: 'before',\n blockObject: hrObject,\n },\n {\n type: 'delete.text',\n ...hrBlockOffsets,\n },\n ],\n ],\n })\n const automaticHrOnPaste = defineBehavior({\n on: 'paste',\n guard: ({context, event}) => {\n const text = event.data.getData('text/plain')\n const hrRegExp = /^(---)$|(___)$|(\\*\\*\\*)$/gm\n const hrCharacters = text.match(hrRegExp)?.[0]\n const hrObject = config.horizontalRuleObject?.(context)\n const focusBlock = getFocusBlock({context})\n\n if (!hrCharacters || !hrObject || !focusBlock) {\n return false\n }\n\n return {hrCharacters, hrObject, focusBlock}\n },\n actions: [\n (_, {hrCharacters}) => [\n {\n type: 'insert.text',\n text: hrCharacters,\n },\n ],\n (_, {hrObject, focusBlock}) =>\n isPortableTextTextBlock(focusBlock.node)\n ? [\n {\n type: 'insert.text block',\n textBlock: {children: focusBlock.node.children},\n placement: 'after',\n },\n {\n type: 'insert.block object',\n blockObject: hrObject,\n placement: 'after',\n },\n {type: 'delete.block', blockPath: focusBlock.path},\n ]\n : [\n {\n type: 'insert.block object',\n blockObject: hrObject,\n placement: 'after',\n },\n ],\n ],\n })\n const automaticHeadingOnSpace = defineBehavior({\n on: 'insert.text',\n guard: ({context, event}) => {\n const isSpace = event.text === ' '\n\n if (!isSpace) {\n return false\n }\n\n const selectionCollapsed = selectionIsCollapsed({context})\n const focusTextBlock = getFocusTextBlock({context})\n const focusSpan = getFocusSpan({context})\n\n if (!selectionCollapsed || !focusTextBlock || !focusSpan) {\n return false\n }\n\n const blockOffset = spanSelectionPointToBlockOffset({\n value: context.value,\n selectionPoint: {\n path: [\n {_key: focusTextBlock.node._key},\n 'children',\n {_key: focusSpan.node._key},\n ],\n offset: context.selection.focus.offset,\n },\n })\n\n if (!blockOffset) {\n return false\n }\n\n const blockText = getTextBlockText(focusTextBlock.node)\n const markdownHeadingSearch = /^#+/.exec(blockText)\n const level = markdownHeadingSearch\n ? markdownHeadingSearch[0].length\n : undefined\n const caretAtTheEndOfHeading = blockOffset.offset === level\n\n if (!caretAtTheEndOfHeading) {\n return false\n }\n\n const style =\n level !== undefined\n ? config.headingStyle?.({schema: context.schema, level})\n : undefined\n\n if (level !== undefined && style !== undefined) {\n return {\n focusTextBlock,\n style: style,\n level,\n }\n }\n\n return false\n },\n actions: [\n ({event}) => [event],\n (_, {focusTextBlock, style, level}) => [\n {\n type: 'text block.unset',\n props: ['listItem', 'level'],\n at: focusTextBlock.path,\n },\n {\n type: 'text block.set',\n style,\n at: focusTextBlock.path,\n },\n {\n type: 'delete.text',\n anchor: {\n path: focusTextBlock.path,\n offset: 0,\n },\n focus: {\n path: focusTextBlock.path,\n offset: level + 1,\n },\n },\n ],\n ],\n })\n const clearStyleOnBackspace = defineBehavior({\n on: 'delete.backward',\n guard: ({context}) => {\n const selectionCollapsed = selectionIsCollapsed({context})\n const focusTextBlock = getFocusTextBlock({context})\n const focusSpan = 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 const defaultStyle = config.defaultStyle?.(context)\n\n if (\n atTheBeginningOfBLock &&\n defaultStyle &&\n focusTextBlock.node.style !== defaultStyle\n ) {\n return {defaultStyle, focusTextBlock}\n }\n\n return false\n },\n actions: [\n (_, {defaultStyle, focusTextBlock}) => [\n {\n type: 'text block.set',\n style: defaultStyle,\n at: focusTextBlock.path,\n },\n ],\n ],\n })\n const automaticListOnSpace = defineBehavior({\n on: 'insert.text',\n guard: ({context, event}) => {\n const isSpace = event.text === ' '\n\n if (!isSpace) {\n return false\n }\n\n const selectionCollapsed = selectionIsCollapsed({context})\n const focusTextBlock = getFocusTextBlock({context})\n const focusSpan = getFocusSpan({context})\n\n if (!selectionCollapsed || !focusTextBlock || !focusSpan) {\n return false\n }\n\n const blockOffset = spanSelectionPointToBlockOffset({\n value: context.value,\n selectionPoint: {\n path: [\n {_key: focusTextBlock.node._key},\n 'children',\n {_key: focusSpan.node._key},\n ],\n offset: context.selection.focus.offset,\n },\n })\n\n if (!blockOffset) {\n return false\n }\n\n const blockText = getTextBlockText(focusTextBlock.node)\n const defaultStyle = config.defaultStyle?.(context)\n const looksLikeUnorderedList = /^(-|\\*)/.test(blockText)\n const unorderedListStyle = config.unorderedListStyle?.(context)\n const caretAtTheEndOfUnorderedList = blockOffset.offset === 1\n\n if (\n defaultStyle &&\n caretAtTheEndOfUnorderedList &&\n looksLikeUnorderedList &&\n unorderedListStyle !== undefined\n ) {\n return {\n focusTextBlock,\n listItem: unorderedListStyle,\n listItemLength: 1,\n style: defaultStyle,\n }\n }\n\n const looksLikeOrderedList = /^1\\./.test(blockText)\n const orderedListStyle = config.orderedListStyle?.(context)\n const caretAtTheEndOfOrderedList = blockOffset.offset === 2\n\n if (\n defaultStyle &&\n caretAtTheEndOfOrderedList &&\n looksLikeOrderedList &&\n orderedListStyle !== undefined\n ) {\n return {\n focusTextBlock,\n listItem: orderedListStyle,\n listItemLength: 2,\n style: defaultStyle,\n }\n }\n\n return false\n },\n actions: [\n ({event}) => [event],\n (_, {focusTextBlock, style, listItem, listItemLength}) => [\n {\n type: 'text block.set',\n listItem,\n level: 1,\n style,\n at: focusTextBlock.path,\n },\n {\n type: 'delete.text',\n anchor: {\n path: focusTextBlock.path,\n offset: 0,\n },\n focus: {\n path: focusTextBlock.path,\n offset: listItemLength + 1,\n },\n },\n ],\n ],\n })\n\n const markdownBehaviors = [\n automaticBlockquoteOnSpace,\n automaticHeadingOnSpace,\n automaticHr,\n automaticHrOnPaste,\n clearStyleOnBackspace,\n automaticListOnSpace,\n ]\n\n return markdownBehaviors\n}\n"],"names":["createCodeEditorBehaviors","config","defineBehavior","on","guard","context","event","isMoveUpShortcut","isHotkey","moveBlockUpShortcut","keyboardEvent","firstBlock","getFirstBlock","selectedBlocks","getSelectedBlocks","blocksAbove","node","_key","paths","map","block","path","actions","_","at","type","isMoveDownShortcut","moveBlockDownShortcut","lastBlock","getLastBlock","blocksBelow","length","reverse","createLinkBehaviors","pasteLinkOnSelection","selectionCollapsed","selectionIsCollapsed","text","data","getData","url","looksLikeUrl","undefined","annotation","linkAnnotation","schema","pasteLinkAtCaret","focusSpan","getFocusSpan","annotations","URL","createMarkdownBehaviors","automaticBlockquoteOnSpace","focusTextBlock","getFocusTextBlock","blockOffset","spanSelectionPointToBlockOffset","value","selectionPoint","offset","selection","focus","blockText","getTextBlockText","caretAtTheEndOfQuote","looksLikeMarkdownQuote","test","blockquoteStyle","style","props","anchor","automaticHr","hrCharacter","hrObject","horizontalRuleObject","focusBlock","textBefore","getBlockTextBefore","hrBlockOffsets","placement","blockObject","automaticHrOnPaste","hrRegExp","hrCharacters","match","getFocusBlock","isPortableTextTextBlock","textBlock","children","blockPath","automaticHeadingOnSpace","markdownHeadingSearch","exec","level","headingStyle","clearStyleOnBackspace","atTheBeginningOfBLock","defaultStyle","automaticListOnSpace","looksLikeUnorderedList","unorderedListStyle","caretAtTheEndOfUnorderedList","listItem","listItemLength","looksLikeOrderedList","orderedListStyle","caretAtTheEndOfOrderedList"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../src/behaviors/behavior.code-editor.ts","../../src/behaviors/behavior.links.ts","../../src/behaviors/behavior.markdown.ts"],"sourcesContent":["import {\n getFirstBlock,\n getLastBlock,\n getSelectedBlocks,\n} from '../selectors/selectors'\nimport {isHotkey} from '../utils/is-hotkey'\nimport {defineBehavior} from './behavior.types'\n\n/**\n * @alpha\n */\nexport type CodeEditorBehaviorsConfig = {\n moveBlockUpShortcut: string\n moveBlockDownShortcut: string\n}\n\n/**\n * @alpha\n */\nexport function createCodeEditorBehaviors(config: CodeEditorBehaviorsConfig) {\n return [\n defineBehavior({\n on: 'key.down',\n guard: ({context, event}) => {\n const isMoveUpShortcut = isHotkey(\n config.moveBlockUpShortcut,\n event.keyboardEvent,\n )\n const firstBlock = getFirstBlock({context})\n const selectedBlocks = getSelectedBlocks({context})\n const blocksAbove =\n firstBlock?.node._key !== selectedBlocks[0]?.node._key\n\n if (!isMoveUpShortcut || !blocksAbove) {\n return false\n }\n\n return {paths: selectedBlocks.map((block) => block.path)}\n },\n actions: [\n (_, {paths}) =>\n paths.map((at) => ({\n type: 'move.block up',\n at,\n })),\n ],\n }),\n defineBehavior({\n on: 'key.down',\n guard: ({context, event}) => {\n const isMoveDownShortcut = isHotkey(\n config.moveBlockDownShortcut,\n event.keyboardEvent,\n )\n const lastBlock = getLastBlock({context})\n const selectedBlocks = getSelectedBlocks({context})\n const blocksBelow =\n lastBlock?.node._key !==\n selectedBlocks[selectedBlocks.length - 1]?.node._key\n\n if (!isMoveDownShortcut || !blocksBelow) {\n return false\n }\n\n return {paths: selectedBlocks.map((block) => block.path).reverse()}\n },\n actions: [\n (_, {paths}) =>\n paths.map((at) => ({\n type: 'move.block down',\n at,\n })),\n ],\n }),\n ]\n}\n","import type {EditorSchema} from '../editor/define-schema'\nimport {getFocusSpan, selectionIsCollapsed} from '../selectors/selectors'\nimport {defineBehavior} from './behavior.types'\n\n/**\n * @alpha\n */\nexport type LinkBehaviorsConfig = {\n linkAnnotation?: (context: {\n schema: EditorSchema\n url: string\n }) => {name: string; value: {[prop: string]: unknown}} | undefined\n}\n\n/**\n * @alpha\n */\nexport function createLinkBehaviors(config: LinkBehaviorsConfig) {\n const pasteLinkOnSelection = defineBehavior({\n on: 'paste',\n guard: ({context, event}) => {\n const selectionCollapsed = selectionIsCollapsed({context})\n const text = event.data.getData('text/plain')\n const url = looksLikeUrl(text) ? text : undefined\n const annotation =\n url !== undefined\n ? config.linkAnnotation?.({url, schema: context.schema})\n : undefined\n\n if (annotation && !selectionCollapsed) {\n return {annotation}\n }\n\n return false\n },\n actions: [\n (_, {annotation}) => [\n {\n type: 'annotation.add',\n annotation,\n },\n ],\n ],\n })\n const pasteLinkAtCaret = defineBehavior({\n on: 'paste',\n guard: ({context, event}) => {\n const focusSpan = getFocusSpan({context})\n const selectionCollapsed = selectionIsCollapsed({context})\n\n if (!focusSpan || !selectionCollapsed) {\n return false\n }\n\n const text = event.data.getData('text/plain')\n const url = looksLikeUrl(text) ? text : undefined\n const annotation =\n url !== undefined\n ? config.linkAnnotation?.({url, schema: context.schema})\n : undefined\n\n if (url && annotation && selectionCollapsed) {\n return {focusSpan, annotation, url}\n }\n\n return false\n },\n actions: [\n (_, {annotation, url}) => [\n {\n type: 'insert.span',\n text: url,\n annotations: [annotation],\n },\n ],\n ],\n })\n\n const linkBehaviors = [pasteLinkOnSelection, pasteLinkAtCaret]\n\n return linkBehaviors\n}\n\nfunction looksLikeUrl(text: string) {\n let looksLikeUrl = false\n try {\n new URL(text)\n looksLikeUrl = true\n } catch {}\n return looksLikeUrl\n}\n","import {isPortableTextTextBlock} from '@sanity/types'\nimport type {EditorSchema} from '../editor/define-schema'\nimport {getTextBlockText} from '../editor/utils/utils'\nimport {spanSelectionPointToBlockOffset} from '../editor/utils/utils.block-offset'\nimport {getBlockTextBefore} from '../selectors/selector.get-text-before'\nimport {\n getFocusBlock,\n getFocusSpan,\n getFocusTextBlock,\n selectionIsCollapsed,\n} from '../selectors/selectors'\nimport {defineBehavior} from './behavior.types'\n\n/**\n * @alpha\n */\nexport type MarkdownBehaviorsConfig = {\n horizontalRuleObject?: (context: {\n schema: EditorSchema\n }) => {name: string; value?: {[prop: string]: unknown}} | undefined\n defaultStyle?: (context: {schema: EditorSchema}) => string | undefined\n headingStyle?: (context: {\n schema: EditorSchema\n level: number\n }) => string | undefined\n blockquoteStyle?: (context: {schema: EditorSchema}) => string | undefined\n unorderedListStyle?: (context: {schema: EditorSchema}) => string | undefined\n orderedListStyle?: (context: {schema: EditorSchema}) => string | undefined\n}\n\n/**\n * @alpha\n */\nexport function createMarkdownBehaviors(config: MarkdownBehaviorsConfig) {\n const automaticBlockquoteOnSpace = defineBehavior({\n on: 'insert.text',\n guard: ({context, event}) => {\n const isSpace = event.text === ' '\n\n if (!isSpace) {\n return false\n }\n\n const selectionCollapsed = selectionIsCollapsed({context})\n const focusTextBlock = getFocusTextBlock({context})\n const focusSpan = getFocusSpan({context})\n\n if (!selectionCollapsed || !focusTextBlock || !focusSpan) {\n return false\n }\n\n const blockOffset = spanSelectionPointToBlockOffset({\n value: context.value,\n selectionPoint: {\n path: [\n {_key: focusTextBlock.node._key},\n 'children',\n {_key: focusSpan.node._key},\n ],\n offset: context.selection?.focus.offset ?? 0,\n },\n })\n\n if (!blockOffset) {\n return false\n }\n\n const blockText = getTextBlockText(focusTextBlock.node)\n const caretAtTheEndOfQuote = blockOffset.offset === 1\n const looksLikeMarkdownQuote = /^>/.test(blockText)\n const blockquoteStyle = config.blockquoteStyle?.(context)\n\n if (\n caretAtTheEndOfQuote &&\n looksLikeMarkdownQuote &&\n blockquoteStyle !== undefined\n ) {\n return {focusTextBlock, style: blockquoteStyle}\n }\n\n return false\n },\n actions: [\n () => [\n {\n type: 'insert.text',\n text: ' ',\n },\n ],\n (_, {focusTextBlock, style}) => [\n {\n type: 'text block.unset',\n props: ['listItem', 'level'],\n at: focusTextBlock.path,\n },\n {\n type: 'text block.set',\n style,\n at: focusTextBlock.path,\n },\n {\n type: 'delete.text',\n anchor: {\n path: focusTextBlock.path,\n offset: 0,\n },\n focus: {\n path: focusTextBlock.path,\n offset: 2,\n },\n },\n ],\n ],\n })\n const automaticHr = defineBehavior({\n on: 'insert.text',\n guard: ({context, event}) => {\n const hrCharacter =\n event.text === '-'\n ? '-'\n : event.text === '*'\n ? '*'\n : event.text === '_'\n ? '_'\n : undefined\n\n if (hrCharacter === undefined) {\n return false\n }\n\n const hrObject = config.horizontalRuleObject?.(context)\n const focusBlock = getFocusTextBlock({context})\n const selectionCollapsed = selectionIsCollapsed({context})\n\n if (!hrObject || !focusBlock || !selectionCollapsed) {\n return false\n }\n\n const textBefore = getBlockTextBefore({context})\n const hrBlockOffsets = {\n anchor: {\n path: focusBlock.path,\n offset: 0,\n },\n focus: {\n path: focusBlock.path,\n offset: 3,\n },\n }\n\n if (textBefore === `${hrCharacter}${hrCharacter}`) {\n return {hrObject, focusBlock, hrCharacter, hrBlockOffsets}\n }\n\n return false\n },\n actions: [\n (_, {hrCharacter}) => [\n {\n type: 'insert.text',\n text: hrCharacter,\n },\n ],\n (_, {hrObject, hrBlockOffsets}) => [\n {\n type: 'insert.block object',\n placement: 'before',\n blockObject: hrObject,\n },\n {\n type: 'delete.text',\n ...hrBlockOffsets,\n },\n ],\n ],\n })\n const automaticHrOnPaste = defineBehavior({\n on: 'paste',\n guard: ({context, event}) => {\n const text = event.data.getData('text/plain')\n const hrRegExp = /^(---)$|(___)$|(\\*\\*\\*)$/gm\n const hrCharacters = text.match(hrRegExp)?.[0]\n const hrObject = config.horizontalRuleObject?.(context)\n const focusBlock = getFocusBlock({context})\n\n if (!hrCharacters || !hrObject || !focusBlock) {\n return false\n }\n\n return {hrCharacters, hrObject, focusBlock}\n },\n actions: [\n (_, {hrCharacters}) => [\n {\n type: 'insert.text',\n text: hrCharacters,\n },\n ],\n (_, {hrObject, focusBlock}) =>\n isPortableTextTextBlock(focusBlock.node)\n ? [\n {\n type: 'insert.text block',\n textBlock: {children: focusBlock.node.children},\n placement: 'after',\n },\n {\n type: 'insert.block object',\n blockObject: hrObject,\n placement: 'after',\n },\n {type: 'delete.block', blockPath: focusBlock.path},\n ]\n : [\n {\n type: 'insert.block object',\n blockObject: hrObject,\n placement: 'after',\n },\n ],\n ],\n })\n const automaticHeadingOnSpace = defineBehavior({\n on: 'insert.text',\n guard: ({context, event}) => {\n const isSpace = event.text === ' '\n\n if (!isSpace) {\n return false\n }\n\n const selectionCollapsed = selectionIsCollapsed({context})\n const focusTextBlock = getFocusTextBlock({context})\n const focusSpan = getFocusSpan({context})\n\n if (!selectionCollapsed || !focusTextBlock || !focusSpan) {\n return false\n }\n\n const blockOffset = spanSelectionPointToBlockOffset({\n value: context.value,\n selectionPoint: {\n path: [\n {_key: focusTextBlock.node._key},\n 'children',\n {_key: focusSpan.node._key},\n ],\n offset: context.selection?.focus.offset ?? 0,\n },\n })\n\n if (!blockOffset) {\n return false\n }\n\n const blockText = getTextBlockText(focusTextBlock.node)\n const markdownHeadingSearch = /^#+/.exec(blockText)\n const level = markdownHeadingSearch\n ? markdownHeadingSearch[0].length\n : undefined\n const caretAtTheEndOfHeading = blockOffset.offset === level\n\n if (!caretAtTheEndOfHeading) {\n return false\n }\n\n const style =\n level !== undefined\n ? config.headingStyle?.({schema: context.schema, level})\n : undefined\n\n if (level !== undefined && style !== undefined) {\n return {\n focusTextBlock,\n style: style,\n level,\n }\n }\n\n return false\n },\n actions: [\n ({event}) => [event],\n (_, {focusTextBlock, style, level}) => [\n {\n type: 'text block.unset',\n props: ['listItem', 'level'],\n at: focusTextBlock.path,\n },\n {\n type: 'text block.set',\n style,\n at: focusTextBlock.path,\n },\n {\n type: 'delete.text',\n anchor: {\n path: focusTextBlock.path,\n offset: 0,\n },\n focus: {\n path: focusTextBlock.path,\n offset: level + 1,\n },\n },\n ],\n ],\n })\n const clearStyleOnBackspace = defineBehavior({\n on: 'delete.backward',\n guard: ({context}) => {\n const selectionCollapsed = selectionIsCollapsed({context})\n const focusTextBlock = getFocusTextBlock({context})\n const focusSpan = 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 const defaultStyle = config.defaultStyle?.(context)\n\n if (\n atTheBeginningOfBLock &&\n defaultStyle &&\n focusTextBlock.node.style !== defaultStyle\n ) {\n return {defaultStyle, focusTextBlock}\n }\n\n return false\n },\n actions: [\n (_, {defaultStyle, focusTextBlock}) => [\n {\n type: 'text block.set',\n style: defaultStyle,\n at: focusTextBlock.path,\n },\n ],\n ],\n })\n const automaticListOnSpace = defineBehavior({\n on: 'insert.text',\n guard: ({context, event}) => {\n const isSpace = event.text === ' '\n\n if (!isSpace) {\n return false\n }\n\n const selectionCollapsed = selectionIsCollapsed({context})\n const focusTextBlock = getFocusTextBlock({context})\n const focusSpan = getFocusSpan({context})\n\n if (!selectionCollapsed || !focusTextBlock || !focusSpan) {\n return false\n }\n\n const blockOffset = spanSelectionPointToBlockOffset({\n value: context.value,\n selectionPoint: {\n path: [\n {_key: focusTextBlock.node._key},\n 'children',\n {_key: focusSpan.node._key},\n ],\n offset: context.selection?.focus.offset ?? 0,\n },\n })\n\n if (!blockOffset) {\n return false\n }\n\n const blockText = getTextBlockText(focusTextBlock.node)\n const defaultStyle = config.defaultStyle?.(context)\n const looksLikeUnorderedList = /^(-|\\*)/.test(blockText)\n const unorderedListStyle = config.unorderedListStyle?.(context)\n const caretAtTheEndOfUnorderedList = blockOffset.offset === 1\n\n if (\n defaultStyle &&\n caretAtTheEndOfUnorderedList &&\n looksLikeUnorderedList &&\n unorderedListStyle !== undefined\n ) {\n return {\n focusTextBlock,\n listItem: unorderedListStyle,\n listItemLength: 1,\n style: defaultStyle,\n }\n }\n\n const looksLikeOrderedList = /^1\\./.test(blockText)\n const orderedListStyle = config.orderedListStyle?.(context)\n const caretAtTheEndOfOrderedList = blockOffset.offset === 2\n\n if (\n defaultStyle &&\n caretAtTheEndOfOrderedList &&\n looksLikeOrderedList &&\n orderedListStyle !== undefined\n ) {\n return {\n focusTextBlock,\n listItem: orderedListStyle,\n listItemLength: 2,\n style: defaultStyle,\n }\n }\n\n return false\n },\n actions: [\n ({event}) => [event],\n (_, {focusTextBlock, style, listItem, listItemLength}) => [\n {\n type: 'text block.set',\n listItem,\n level: 1,\n style,\n at: focusTextBlock.path,\n },\n {\n type: 'delete.text',\n anchor: {\n path: focusTextBlock.path,\n offset: 0,\n },\n focus: {\n path: focusTextBlock.path,\n offset: listItemLength + 1,\n },\n },\n ],\n ],\n })\n\n const markdownBehaviors = [\n automaticBlockquoteOnSpace,\n automaticHeadingOnSpace,\n automaticHr,\n automaticHrOnPaste,\n clearStyleOnBackspace,\n automaticListOnSpace,\n ]\n\n return markdownBehaviors\n}\n"],"names":["createCodeEditorBehaviors","config","defineBehavior","on","guard","context","event","isMoveUpShortcut","isHotkey","moveBlockUpShortcut","keyboardEvent","firstBlock","getFirstBlock","selectedBlocks","getSelectedBlocks","blocksAbove","node","_key","paths","map","block","path","actions","_","at","type","isMoveDownShortcut","moveBlockDownShortcut","lastBlock","getLastBlock","blocksBelow","length","reverse","createLinkBehaviors","pasteLinkOnSelection","selectionCollapsed","selectionIsCollapsed","text","data","getData","url","looksLikeUrl","undefined","annotation","linkAnnotation","schema","pasteLinkAtCaret","focusSpan","getFocusSpan","annotations","URL","createMarkdownBehaviors","automaticBlockquoteOnSpace","focusTextBlock","getFocusTextBlock","blockOffset","spanSelectionPointToBlockOffset","value","selectionPoint","offset","selection","focus","blockText","getTextBlockText","caretAtTheEndOfQuote","looksLikeMarkdownQuote","test","blockquoteStyle","style","props","anchor","automaticHr","hrCharacter","hrObject","horizontalRuleObject","focusBlock","textBefore","getBlockTextBefore","hrBlockOffsets","placement","blockObject","automaticHrOnPaste","hrRegExp","hrCharacters","match","getFocusBlock","isPortableTextTextBlock","textBlock","children","blockPath","automaticHeadingOnSpace","markdownHeadingSearch","exec","level","headingStyle","clearStyleOnBackspace","atTheBeginningOfBLock","defaultStyle","automaticListOnSpace","looksLikeUnorderedList","unorderedListStyle","caretAtTheEndOfUnorderedList","listItem","listItemLength","looksLikeOrderedList","orderedListStyle","caretAtTheEndOfOrderedList"],"mappings":"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"}
package/lib/index.cjs CHANGED
@@ -16,7 +16,7 @@ function _interopDefaultCompat(e) {
16
16
  return e && typeof e == "object" && "default" in e ? e : { default: e };
17
17
  }
18
18
  var startCase__default = /* @__PURE__ */ _interopDefaultCompat(startCase), isEqual__default = /* @__PURE__ */ _interopDefaultCompat(isEqual), noop__default = /* @__PURE__ */ _interopDefaultCompat(noop), React__default = /* @__PURE__ */ _interopDefaultCompat(React), debug__default = /* @__PURE__ */ _interopDefaultCompat(debug$m), uniq__default = /* @__PURE__ */ _interopDefaultCompat(uniq), throttle__default = /* @__PURE__ */ _interopDefaultCompat(throttle), debounce__default = /* @__PURE__ */ _interopDefaultCompat(debounce), flatten__default = /* @__PURE__ */ _interopDefaultCompat(flatten), isPlainObject__default = /* @__PURE__ */ _interopDefaultCompat(isPlainObject), get__default = /* @__PURE__ */ _interopDefaultCompat(get), isUndefined__default = /* @__PURE__ */ _interopDefaultCompat(isUndefined), omitBy__default = /* @__PURE__ */ _interopDefaultCompat(omitBy), getRandomValues__default = /* @__PURE__ */ _interopDefaultCompat(getRandomValues);
19
- function getPortableTextMemberSchemaTypes(portableTextType) {
19
+ function createEditorSchema(portableTextType) {
20
20
  var _a, _b, _c;
21
21
  if (!portableTextType)
22
22
  throw new Error("Parameter 'portabletextType' missing (required)");
@@ -144,7 +144,7 @@ function compileSchemaDefinition(definition) {
144
144
  }]
145
145
  }), schema$1 = schema.Schema.compile({
146
146
  types: [portableTextSchema, ...blockObjects, ...inlineObjects]
147
- }).get("portable-text"), pteSchema = getPortableTextMemberSchemaTypes(schema$1);
147
+ }).get("portable-text"), pteSchema = createEditorSchema(schema$1);
148
148
  return __spreadProps$j(__spreadValues$p({}, pteSchema), {
149
149
  blockObjects: pteSchema.blockObjects.map((blockObject) => blockObject.name === "tmp-image" ? __spreadProps$j(__spreadValues$p({}, blockObject), {
150
150
  name: "image",
@@ -5315,7 +5315,7 @@ const behaviorActionImplementations = {
5315
5315
  const newSelection = toSlateRange(action.selection, action.editor);
5316
5316
  newSelection ? slate.Transforms.select(action.editor, newSelection) : slate.Transforms.deselect(action.editor);
5317
5317
  },
5318
- "select previous block": ({
5318
+ "select.previous block": ({
5319
5319
  action
5320
5320
  }) => {
5321
5321
  if (!action.editor.selection) {
@@ -5330,7 +5330,7 @@ const behaviorActionImplementations = {
5330
5330
  const previousBlockPath = slate.Path.previous(blockPath);
5331
5331
  slate.Transforms.select(action.editor, previousBlockPath);
5332
5332
  },
5333
- "select next block": ({
5333
+ "select.next block": ({
5334
5334
  action
5335
5335
  }) => {
5336
5336
  if (!action.editor.selection) {
@@ -5436,15 +5436,15 @@ function performAction({
5436
5436
  });
5437
5437
  break;
5438
5438
  }
5439
- case "select previous block": {
5440
- behaviorActionImplementations["select previous block"]({
5439
+ case "select.previous block": {
5440
+ behaviorActionImplementations["select.previous block"]({
5441
5441
  context,
5442
5442
  action
5443
5443
  });
5444
5444
  break;
5445
5445
  }
5446
- case "select next block": {
5447
- behaviorActionImplementations["select next block"]({
5446
+ case "select.next block": {
5447
+ behaviorActionImplementations["select.next block"]({
5448
5448
  context,
5449
5449
  action
5450
5450
  });
@@ -5684,18 +5684,7 @@ const editorMachine = xstate.setup({
5684
5684
  });
5685
5685
  return;
5686
5686
  }
5687
- const value = fromSlateValue(event.editor.children, context.schema.block.name, KEY_TO_VALUE_ELEMENT.get(event.editor)), selection = toPortableTextRange(value, event.editor.selection, context.schema);
5688
- if (!selection) {
5689
- if (console.warn(`Unable to handle event ${event.type} due to missing selection`), !defaultAction)
5690
- return;
5691
- enqueue.raise({
5692
- type: "behavior action intends",
5693
- editor: event.editor,
5694
- actionIntends: [defaultAction]
5695
- });
5696
- return;
5697
- }
5698
- const editorContext = {
5687
+ const value = fromSlateValue(event.editor.children, context.schema.block.name, KEY_TO_VALUE_ELEMENT.get(event.editor)), selection = toPortableTextRange(value, event.editor.selection, context.schema), editorContext = {
5699
5688
  keyGenerator: context.keyGenerator,
5700
5689
  schema: context.schema,
5701
5690
  selection,
@@ -5746,7 +5735,7 @@ const editorMachine = xstate.setup({
5746
5735
  keyGenerator: input.keyGenerator,
5747
5736
  pendingEvents: [],
5748
5737
  schema: input.schema,
5749
- selection: void 0,
5738
+ selection: null,
5750
5739
  readOnly: (_b = input.readOnly) != null ? _b : !1,
5751
5740
  maxBlocks: input.maxBlocks,
5752
5741
  value: input.value
@@ -5854,10 +5843,7 @@ const editorMachine = xstate.setup({
5854
5843
  actions: [xstate.assign({
5855
5844
  selection: ({
5856
5845
  event
5857
- }) => {
5858
- var _a;
5859
- return (_a = event.selection) != null ? _a : void 0;
5860
- }
5846
+ }) => event.selection
5861
5847
  }), xstate.emit(({
5862
5848
  event
5863
5849
  }) => event)]
@@ -6044,7 +6030,7 @@ function editorConfigToMachineInput(config) {
6044
6030
  keyGenerator: (_a = config.keyGenerator) != null ? _a : defaultKeyGenerator,
6045
6031
  maxBlocks: config.maxBlocks,
6046
6032
  readOnly: config.readOnly,
6047
- schema: config.schemaDefinition ? compileSchemaDefinition(config.schemaDefinition) : getPortableTextMemberSchemaTypes(config.schema.hasOwnProperty("jsonType") ? config.schema : compileType(config.schema)),
6033
+ schema: config.schemaDefinition ? compileSchemaDefinition(config.schemaDefinition) : createEditorSchema(config.schema.hasOwnProperty("jsonType") ? config.schema : compileType(config.schema)),
6048
6034
  value: config.initialValue
6049
6035
  };
6050
6036
  }
@@ -6123,7 +6109,7 @@ class PortableTextEditor extends React.Component {
6123
6109
  }), this.schemaTypes = this.editor._internal.editorActor.getSnapshot().context.schema, this.editable = this.editor._internal.editable;
6124
6110
  }
6125
6111
  componentDidUpdate(prevProps) {
6126
- !this.props.editor && !prevProps.editor && this.props.schemaType !== prevProps.schemaType && (this.schemaTypes = getPortableTextMemberSchemaTypes(this.props.schemaType.hasOwnProperty("jsonType") ? this.props.schemaType : compileType(this.props.schemaType)), this.editor._internal.editorActor.send({
6112
+ !this.props.editor && !prevProps.editor && this.props.schemaType !== prevProps.schemaType && (this.schemaTypes = createEditorSchema(this.props.schemaType.hasOwnProperty("jsonType") ? this.props.schemaType : compileType(this.props.schemaType)), this.editor._internal.editorActor.send({
6127
6113
  type: "update schema",
6128
6114
  schema: this.schemaTypes
6129
6115
  })), !this.props.editor && !prevProps.editor && (this.props.readOnly !== prevProps.readOnly && this.editor._internal.editorActor.send({