@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.
- package/lib/_chunks-cjs/behavior.core.cjs +5 -3
- package/lib/_chunks-cjs/behavior.core.cjs.map +1 -1
- package/lib/_chunks-cjs/selectors.cjs.map +1 -1
- package/lib/_chunks-es/behavior.core.js +5 -3
- package/lib/_chunks-es/behavior.core.js.map +1 -1
- package/lib/_chunks-es/selectors.js.map +1 -1
- package/lib/behaviors/index.cjs +12 -12
- package/lib/behaviors/index.cjs.map +1 -1
- package/lib/behaviors/index.d.cts +39 -45
- package/lib/behaviors/index.d.ts +39 -45
- package/lib/behaviors/index.js +12 -12
- package/lib/behaviors/index.js.map +1 -1
- package/lib/index.cjs +13 -27
- package/lib/index.cjs.map +1 -1
- package/lib/index.d.cts +129 -133
- package/lib/index.d.ts +129 -133
- package/lib/index.js +13 -27
- package/lib/index.js.map +1 -1
- package/lib/selectors/index.d.cts +8 -12
- package/lib/selectors/index.d.ts +8 -12
- package/package.json +2 -2
- package/src/behavior-actions/behavior.action-utils.insert-block.ts +3 -5
- package/src/behavior-actions/behavior.actions.ts +6 -6
- package/src/behavior-actions/behavior.guards.ts +2 -6
- package/src/behaviors/behavior.core.block-objects.ts +1 -1
- package/src/behaviors/behavior.core.lists.ts +2 -2
- package/src/behaviors/behavior.links.ts +2 -2
- package/src/behaviors/behavior.markdown.ts +11 -19
- package/src/behaviors/behavior.types.ts +7 -7
- package/src/behaviors/index.ts +1 -0
- package/src/editor/PortableTextEditor.tsx +2 -2
- package/src/{utils/getPortableTextMemberSchemaTypes.ts → editor/create-editor-schema.ts} +3 -3
- package/src/editor/create-editor.ts +2 -2
- package/src/editor/define-schema.ts +8 -3
- package/src/editor/editor-machine.ts +7 -24
- package/src/editor/editor-selector.ts +1 -13
- package/src/editor/editor-snapshot.ts +4 -6
- package/src/index.ts +3 -5
- package/src/selectors/index.ts +2 -4
- package/src/utils/__tests__/operationToPatches.test.ts +2 -2
- package/src/utils/__tests__/patchToOperations.test.ts +2 -2
- package/src/utils/__tests__/values.test.ts +2 -2
package/lib/behaviors/index.d.ts
CHANGED
|
@@ -99,17 +99,17 @@ export declare type BehaviorActionIntend =
|
|
|
99
99
|
effect: () => void
|
|
100
100
|
}
|
|
101
101
|
| {
|
|
102
|
-
type: '
|
|
103
|
-
selection: EditorSelection
|
|
102
|
+
type: 'reselect'
|
|
104
103
|
}
|
|
105
104
|
| {
|
|
106
|
-
type: 'select
|
|
105
|
+
type: 'select'
|
|
106
|
+
selection: EditorSelection
|
|
107
107
|
}
|
|
108
108
|
| {
|
|
109
|
-
type: 'select
|
|
109
|
+
type: 'select.previous block'
|
|
110
110
|
}
|
|
111
111
|
| {
|
|
112
|
-
type: '
|
|
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:
|
|
667
|
-
selection:
|
|
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:
|
|
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:
|
|
717
|
+
schema: EditorSchema
|
|
718
718
|
level: number
|
|
719
719
|
}) => string | undefined
|
|
720
|
-
blockquoteStyle?: (context: {
|
|
721
|
-
|
|
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.
|
|
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'
|
package/lib/behaviors/index.js
CHANGED
|
@@ -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 = (
|
|
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 ? (
|
|
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 = (
|
|
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 = (
|
|
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 = (
|
|
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
|
|
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 =
|
|
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
|
|
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
|
|
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
|
|
5440
|
-
behaviorActionImplementations["select
|
|
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
|
|
5447
|
-
behaviorActionImplementations["select
|
|
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:
|
|
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) :
|
|
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 =
|
|
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({
|