@portabletext/editor 1.34.0 → 1.35.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/_chunks-cjs/behavior.core.cjs +57 -118
- package/lib/_chunks-cjs/behavior.core.cjs.map +1 -1
- package/lib/_chunks-cjs/behavior.markdown.cjs +27 -67
- package/lib/_chunks-cjs/behavior.markdown.cjs.map +1 -1
- package/lib/_chunks-cjs/plugin.event-listener.cjs +53 -71
- package/lib/_chunks-cjs/plugin.event-listener.cjs.map +1 -1
- package/lib/_chunks-cjs/selector.get-text-before.cjs +5 -7
- package/lib/_chunks-cjs/selector.get-text-before.cjs.map +1 -1
- package/lib/_chunks-cjs/selector.is-active-style.cjs +22 -36
- package/lib/_chunks-cjs/selector.is-active-style.cjs.map +1 -1
- package/lib/_chunks-cjs/selector.is-at-the-start-of-block.cjs +68 -153
- package/lib/_chunks-cjs/selector.is-at-the-start-of-block.cjs.map +1 -1
- package/lib/_chunks-cjs/util.block-offsets-to-selection.cjs.map +1 -1
- package/lib/_chunks-cjs/util.slice-blocks.cjs.map +1 -1
- package/lib/_chunks-es/behavior.core.js +57 -118
- package/lib/_chunks-es/behavior.core.js.map +1 -1
- package/lib/_chunks-es/behavior.markdown.js +27 -67
- package/lib/_chunks-es/behavior.markdown.js.map +1 -1
- package/lib/_chunks-es/plugin.event-listener.js +53 -71
- package/lib/_chunks-es/plugin.event-listener.js.map +1 -1
- package/lib/_chunks-es/selector.get-text-before.js +5 -7
- package/lib/_chunks-es/selector.get-text-before.js.map +1 -1
- package/lib/_chunks-es/selector.is-active-style.js +22 -36
- package/lib/_chunks-es/selector.is-active-style.js.map +1 -1
- package/lib/_chunks-es/selector.is-at-the-start-of-block.js +68 -153
- package/lib/_chunks-es/selector.is-at-the-start-of-block.js.map +1 -1
- package/lib/_chunks-es/util.block-offsets-to-selection.js.map +1 -1
- package/lib/_chunks-es/util.slice-blocks.js.map +1 -1
- package/lib/behaviors/index.cjs +18 -48
- package/lib/behaviors/index.cjs.map +1 -1
- package/lib/behaviors/index.d.cts +28 -16
- package/lib/behaviors/index.d.ts +28 -16
- package/lib/behaviors/index.js +18 -48
- package/lib/behaviors/index.js.map +1 -1
- package/lib/index.d.cts +132 -71
- package/lib/index.d.ts +132 -71
- package/lib/plugins/index.cjs +182 -186
- package/lib/plugins/index.cjs.map +1 -1
- package/lib/plugins/index.d.cts +147 -82
- package/lib/plugins/index.d.ts +147 -82
- package/lib/plugins/index.js +182 -186
- package/lib/plugins/index.js.map +1 -1
- package/lib/selectors/index.cjs +22 -50
- package/lib/selectors/index.cjs.map +1 -1
- package/lib/selectors/index.d.cts +9 -200
- package/lib/selectors/index.d.ts +9 -200
- package/lib/selectors/index.js +22 -50
- package/lib/selectors/index.js.map +1 -1
- package/lib/utils/index.cjs.map +1 -1
- package/lib/utils/index.d.cts +15 -7
- package/lib/utils/index.d.ts +15 -7
- package/lib/utils/index.js.map +1 -1
- package/package.json +6 -6
- package/src/behaviors/behavior.code-editor.ts +6 -6
- package/src/behaviors/behavior.core.annotations.ts +5 -4
- package/src/behaviors/behavior.core.block-objects.ts +17 -17
- package/src/behaviors/behavior.core.decorators.ts +12 -8
- package/src/behaviors/behavior.core.insert-break.ts +27 -29
- package/src/behaviors/behavior.core.lists.ts +19 -19
- package/src/behaviors/behavior.decorator-pair.ts +200 -0
- package/src/behaviors/behavior.default.ts +35 -30
- package/src/behaviors/behavior.emoji-picker.ts +12 -12
- package/src/behaviors/behavior.links.ts +7 -7
- package/src/behaviors/behavior.markdown.ts +41 -42
- package/src/behaviors/behavior.types.ts +15 -18
- package/src/behaviors/index.ts +0 -1
- package/src/converters/converter.json.ts +6 -6
- package/src/converters/converter.portable-text.deserialize.test.ts +28 -26
- package/src/converters/converter.portable-text.ts +6 -6
- package/src/converters/converter.text-html.deserialize.test.ts +17 -15
- package/src/converters/converter.text-html.serialize.test.ts +57 -53
- package/src/converters/converter.text-html.ts +14 -10
- package/src/converters/converter.text-plain.test.ts +17 -15
- package/src/converters/converter.text-plain.ts +15 -11
- package/src/converters/converter.types.ts +8 -7
- package/src/editor/editor-machine.ts +6 -1
- package/src/editor/plugins/create-with-event-listeners.ts +0 -5
- package/src/index.ts +3 -3
- package/src/internal-utils/get-text-to-emphasize.ts +29 -7
- package/src/plugins/plugin.decorator-shortcut.ts +235 -0
- package/src/plugins/plugin.markdown.tsx +56 -8
- package/src/plugins/plugin.one-line.tsx +17 -17
- package/src/selectors/selector.get-active-list-item.ts +4 -4
- package/src/selectors/selector.get-active-style.ts +6 -6
- package/src/selectors/selector.get-anchor-block.ts +5 -5
- package/src/selectors/selector.get-anchor-child.ts +5 -5
- package/src/selectors/selector.get-anchor-span.ts +2 -2
- package/src/selectors/selector.get-anchor-text-block.ts +2 -2
- package/src/selectors/selector.get-block-offsets.ts +8 -7
- package/src/selectors/selector.get-caret-word-selection.ts +19 -16
- package/src/selectors/selector.get-next-inline-object.ts +4 -4
- package/src/selectors/selector.get-previous-inline-object.ts +4 -4
- package/src/selectors/selector.get-selected-slice.ts +7 -4
- package/src/selectors/selector.get-selected-spans.ts +9 -9
- package/src/selectors/selector.get-selection-end-point.ts +5 -5
- package/src/selectors/selector.get-selection-start-point.ts +5 -5
- package/src/selectors/selector.get-selection-text.ts +2 -2
- package/src/selectors/selector.get-selection.ts +2 -2
- package/src/selectors/selector.get-text-before.ts +8 -8
- package/src/selectors/selector.get-trimmed-selection.ts +15 -13
- package/src/selectors/selector.get-value.ts +4 -4
- package/src/selectors/selector.is-at-the-end-of-block.ts +6 -3
- package/src/selectors/selector.is-at-the-start-of-block.ts +3 -3
- package/src/selectors/selector.is-overlapping-selection.ts +8 -6
- package/src/selectors/selector.is-selection-collapsed.ts +6 -5
- package/src/selectors/selector.is-selection-expanded.ts +2 -2
- package/src/selectors/selectors.ts +59 -59
- package/src/types/block-offset.ts +9 -0
- package/src/utils/index.ts +0 -1
- package/src/utils/util.block-offset.ts +1 -1
- package/src/utils/util.block-offsets-to-selection.ts +1 -1
- package/src/utils/util.child-selection-point-to-block-offset.ts +1 -1
- package/src/behaviors/behavior.markdown-emphasis.ts +0 -437
|
@@ -4,36 +4,28 @@ function createMarkdownBehaviors(config) {
|
|
|
4
4
|
const automaticBlockquoteOnSpace = behavior_core.defineBehavior({
|
|
5
5
|
on: "insert.text",
|
|
6
6
|
guard: ({
|
|
7
|
-
|
|
7
|
+
snapshot,
|
|
8
8
|
event
|
|
9
9
|
}) => {
|
|
10
10
|
if (event.text !== " ")
|
|
11
11
|
return !1;
|
|
12
|
-
const selectionCollapsed = selector_isAtTheStartOfBlock.isSelectionCollapsed(
|
|
13
|
-
context
|
|
14
|
-
}), focusTextBlock = selector_isAtTheStartOfBlock.getFocusTextBlock({
|
|
15
|
-
context
|
|
16
|
-
}), focusSpan = selector_isAtTheStartOfBlock.getFocusSpan({
|
|
17
|
-
context
|
|
18
|
-
});
|
|
12
|
+
const selectionCollapsed = selector_isAtTheStartOfBlock.isSelectionCollapsed(snapshot), focusTextBlock = selector_isAtTheStartOfBlock.getFocusTextBlock(snapshot), focusSpan = selector_isAtTheStartOfBlock.getFocusSpan(snapshot);
|
|
19
13
|
if (!selectionCollapsed || !focusTextBlock || !focusSpan)
|
|
20
14
|
return !1;
|
|
21
|
-
const previousInlineObject = selector_isAtTheStartOfBlock.getPreviousInlineObject({
|
|
22
|
-
context
|
|
23
|
-
}), blockOffset = util_sliceBlocks.spanSelectionPointToBlockOffset({
|
|
24
|
-
value: context.value,
|
|
15
|
+
const previousInlineObject = selector_isAtTheStartOfBlock.getPreviousInlineObject(snapshot), blockOffset = util_sliceBlocks.spanSelectionPointToBlockOffset({
|
|
16
|
+
value: snapshot.context.value,
|
|
25
17
|
selectionPoint: {
|
|
26
18
|
path: [{
|
|
27
19
|
_key: focusTextBlock.node._key
|
|
28
20
|
}, "children", {
|
|
29
21
|
_key: focusSpan.node._key
|
|
30
22
|
}],
|
|
31
|
-
offset: context.selection?.focus.offset ?? 0
|
|
23
|
+
offset: snapshot.context.selection?.focus.offset ?? 0
|
|
32
24
|
}
|
|
33
25
|
});
|
|
34
26
|
if (previousInlineObject || !blockOffset)
|
|
35
27
|
return !1;
|
|
36
|
-
const blockText = util_sliceBlocks.getTextBlockText(focusTextBlock.node), caretAtTheEndOfQuote = blockOffset.offset === 1, looksLikeMarkdownQuote = /^>/.test(blockText), blockquoteStyle = config.blockquoteStyle?.(context);
|
|
28
|
+
const blockText = util_sliceBlocks.getTextBlockText(focusTextBlock.node), caretAtTheEndOfQuote = blockOffset.offset === 1, looksLikeMarkdownQuote = /^>/.test(blockText), blockquoteStyle = config.blockquoteStyle?.(snapshot.context);
|
|
37
29
|
return caretAtTheEndOfQuote && looksLikeMarkdownQuote && blockquoteStyle !== void 0 ? {
|
|
38
30
|
focusTextBlock,
|
|
39
31
|
style: blockquoteStyle
|
|
@@ -69,24 +61,16 @@ function createMarkdownBehaviors(config) {
|
|
|
69
61
|
}), automaticHr = behavior_core.defineBehavior({
|
|
70
62
|
on: "insert.text",
|
|
71
63
|
guard: ({
|
|
72
|
-
|
|
64
|
+
snapshot,
|
|
73
65
|
event
|
|
74
66
|
}) => {
|
|
75
67
|
const hrCharacter = event.text === "-" ? "-" : event.text === "*" ? "*" : event.text === "_" ? "_" : void 0;
|
|
76
68
|
if (hrCharacter === void 0)
|
|
77
69
|
return !1;
|
|
78
|
-
const hrObject = config.horizontalRuleObject?.(context), focusBlock = selector_isAtTheStartOfBlock.getFocusTextBlock(
|
|
79
|
-
context
|
|
80
|
-
}), selectionCollapsed = selector_isAtTheStartOfBlock.isSelectionCollapsed({
|
|
81
|
-
context
|
|
82
|
-
});
|
|
70
|
+
const hrObject = config.horizontalRuleObject?.(snapshot.context), focusBlock = selector_isAtTheStartOfBlock.getFocusTextBlock(snapshot), selectionCollapsed = selector_isAtTheStartOfBlock.isSelectionCollapsed(snapshot);
|
|
83
71
|
if (!hrObject || !focusBlock || !selectionCollapsed)
|
|
84
72
|
return !1;
|
|
85
|
-
const previousInlineObject = selector_isAtTheStartOfBlock.getPreviousInlineObject({
|
|
86
|
-
context
|
|
87
|
-
}), textBefore = selector_getTextBefore.getBlockTextBefore({
|
|
88
|
-
context
|
|
89
|
-
}), hrBlockOffsets = {
|
|
73
|
+
const previousInlineObject = selector_isAtTheStartOfBlock.getPreviousInlineObject(snapshot), textBefore = selector_getTextBefore.getBlockTextBefore(snapshot), hrBlockOffsets = {
|
|
90
74
|
anchor: {
|
|
91
75
|
path: focusBlock.path,
|
|
92
76
|
offset: 0
|
|
@@ -122,12 +106,10 @@ function createMarkdownBehaviors(config) {
|
|
|
122
106
|
}), automaticHrOnPaste = behavior_core.defineBehavior({
|
|
123
107
|
on: "paste",
|
|
124
108
|
guard: ({
|
|
125
|
-
|
|
109
|
+
snapshot,
|
|
126
110
|
event
|
|
127
111
|
}) => {
|
|
128
|
-
const text = event.data.getData("text/plain"), hrRegExp = /^(---)$|(___)$|(\*\*\*)$/gm, hrCharacters = text.match(hrRegExp)?.[0], hrObject = config.horizontalRuleObject?.(context), focusBlock = selector_isAtTheStartOfBlock.getFocusBlock(
|
|
129
|
-
context
|
|
130
|
-
});
|
|
112
|
+
const text = event.data.getData("text/plain"), hrRegExp = /^(---)$|(___)$|(\*\*\*)$/gm, hrCharacters = text.match(hrRegExp)?.[0], hrObject = config.horizontalRuleObject?.(snapshot.context), focusBlock = selector_isAtTheStartOfBlock.getFocusBlock(snapshot);
|
|
131
113
|
return !hrCharacters || !hrObject || !focusBlock ? !1 : {
|
|
132
114
|
hrCharacters,
|
|
133
115
|
hrObject,
|
|
@@ -163,40 +145,32 @@ function createMarkdownBehaviors(config) {
|
|
|
163
145
|
}), automaticHeadingOnSpace = behavior_core.defineBehavior({
|
|
164
146
|
on: "insert.text",
|
|
165
147
|
guard: ({
|
|
166
|
-
|
|
148
|
+
snapshot,
|
|
167
149
|
event
|
|
168
150
|
}) => {
|
|
169
151
|
if (event.text !== " ")
|
|
170
152
|
return !1;
|
|
171
|
-
const selectionCollapsed = selector_isAtTheStartOfBlock.isSelectionCollapsed(
|
|
172
|
-
context
|
|
173
|
-
}), focusTextBlock = selector_isAtTheStartOfBlock.getFocusTextBlock({
|
|
174
|
-
context
|
|
175
|
-
}), focusSpan = selector_isAtTheStartOfBlock.getFocusSpan({
|
|
176
|
-
context
|
|
177
|
-
});
|
|
153
|
+
const selectionCollapsed = selector_isAtTheStartOfBlock.isSelectionCollapsed(snapshot), focusTextBlock = selector_isAtTheStartOfBlock.getFocusTextBlock(snapshot), focusSpan = selector_isAtTheStartOfBlock.getFocusSpan(snapshot);
|
|
178
154
|
if (!selectionCollapsed || !focusTextBlock || !focusSpan)
|
|
179
155
|
return !1;
|
|
180
156
|
const blockOffset = util_sliceBlocks.spanSelectionPointToBlockOffset({
|
|
181
|
-
value: context.value,
|
|
157
|
+
value: snapshot.context.value,
|
|
182
158
|
selectionPoint: {
|
|
183
159
|
path: [{
|
|
184
160
|
_key: focusTextBlock.node._key
|
|
185
161
|
}, "children", {
|
|
186
162
|
_key: focusSpan.node._key
|
|
187
163
|
}],
|
|
188
|
-
offset: context.selection?.focus.offset ?? 0
|
|
164
|
+
offset: snapshot.context.selection?.focus.offset ?? 0
|
|
189
165
|
}
|
|
190
166
|
});
|
|
191
167
|
if (!blockOffset)
|
|
192
168
|
return !1;
|
|
193
|
-
const previousInlineObject = selector_isAtTheStartOfBlock.getPreviousInlineObject(
|
|
194
|
-
context
|
|
195
|
-
}), blockText = util_sliceBlocks.getTextBlockText(focusTextBlock.node), markdownHeadingSearch = /^#+/.exec(blockText), level = markdownHeadingSearch ? markdownHeadingSearch[0].length : void 0, caretAtTheEndOfHeading = blockOffset.offset === level;
|
|
169
|
+
const previousInlineObject = selector_isAtTheStartOfBlock.getPreviousInlineObject(snapshot), blockText = util_sliceBlocks.getTextBlockText(focusTextBlock.node), markdownHeadingSearch = /^#+/.exec(blockText), level = markdownHeadingSearch ? markdownHeadingSearch[0].length : void 0, caretAtTheEndOfHeading = blockOffset.offset === level;
|
|
196
170
|
if (previousInlineObject || !caretAtTheEndOfHeading)
|
|
197
171
|
return !1;
|
|
198
172
|
const style = level !== void 0 ? config.headingStyle?.({
|
|
199
|
-
schema: context.schema,
|
|
173
|
+
schema: snapshot.context.schema,
|
|
200
174
|
level
|
|
201
175
|
}) : void 0;
|
|
202
176
|
return level !== void 0 && style !== void 0 ? {
|
|
@@ -235,18 +209,12 @@ function createMarkdownBehaviors(config) {
|
|
|
235
209
|
}), clearStyleOnBackspace = behavior_core.defineBehavior({
|
|
236
210
|
on: "delete.backward",
|
|
237
211
|
guard: ({
|
|
238
|
-
|
|
212
|
+
snapshot
|
|
239
213
|
}) => {
|
|
240
|
-
const selectionCollapsed = selector_isAtTheStartOfBlock.isSelectionCollapsed(
|
|
241
|
-
context
|
|
242
|
-
}), focusTextBlock = selector_isAtTheStartOfBlock.getFocusTextBlock({
|
|
243
|
-
context
|
|
244
|
-
}), focusSpan = selector_isAtTheStartOfBlock.getFocusSpan({
|
|
245
|
-
context
|
|
246
|
-
});
|
|
214
|
+
const selectionCollapsed = selector_isAtTheStartOfBlock.isSelectionCollapsed(snapshot), focusTextBlock = selector_isAtTheStartOfBlock.getFocusTextBlock(snapshot), focusSpan = selector_isAtTheStartOfBlock.getFocusSpan(snapshot);
|
|
247
215
|
if (!selectionCollapsed || !focusTextBlock || !focusSpan)
|
|
248
216
|
return !1;
|
|
249
|
-
const atTheBeginningOfBLock = focusTextBlock.node.children[0]._key === focusSpan.node._key && context.selection?.focus.offset === 0, defaultStyle = config.defaultStyle?.(context);
|
|
217
|
+
const atTheBeginningOfBLock = focusTextBlock.node.children[0]._key === focusSpan.node._key && snapshot.context.selection?.focus.offset === 0, defaultStyle = config.defaultStyle?.(snapshot.context);
|
|
250
218
|
return atTheBeginningOfBLock && defaultStyle && focusTextBlock.node.style !== defaultStyle ? {
|
|
251
219
|
defaultStyle,
|
|
252
220
|
focusTextBlock
|
|
@@ -265,36 +233,28 @@ function createMarkdownBehaviors(config) {
|
|
|
265
233
|
}), automaticListOnSpace = behavior_core.defineBehavior({
|
|
266
234
|
on: "insert.text",
|
|
267
235
|
guard: ({
|
|
268
|
-
|
|
236
|
+
snapshot,
|
|
269
237
|
event
|
|
270
238
|
}) => {
|
|
271
239
|
if (event.text !== " ")
|
|
272
240
|
return !1;
|
|
273
|
-
const selectionCollapsed = selector_isAtTheStartOfBlock.isSelectionCollapsed(
|
|
274
|
-
context
|
|
275
|
-
}), focusTextBlock = selector_isAtTheStartOfBlock.getFocusTextBlock({
|
|
276
|
-
context
|
|
277
|
-
}), focusSpan = selector_isAtTheStartOfBlock.getFocusSpan({
|
|
278
|
-
context
|
|
279
|
-
});
|
|
241
|
+
const selectionCollapsed = selector_isAtTheStartOfBlock.isSelectionCollapsed(snapshot), focusTextBlock = selector_isAtTheStartOfBlock.getFocusTextBlock(snapshot), focusSpan = selector_isAtTheStartOfBlock.getFocusSpan(snapshot);
|
|
280
242
|
if (!selectionCollapsed || !focusTextBlock || !focusSpan)
|
|
281
243
|
return !1;
|
|
282
|
-
const previousInlineObject = selector_isAtTheStartOfBlock.getPreviousInlineObject({
|
|
283
|
-
context
|
|
284
|
-
}), blockOffset = util_sliceBlocks.spanSelectionPointToBlockOffset({
|
|
285
|
-
value: context.value,
|
|
244
|
+
const previousInlineObject = selector_isAtTheStartOfBlock.getPreviousInlineObject(snapshot), blockOffset = util_sliceBlocks.spanSelectionPointToBlockOffset({
|
|
245
|
+
value: snapshot.context.value,
|
|
286
246
|
selectionPoint: {
|
|
287
247
|
path: [{
|
|
288
248
|
_key: focusTextBlock.node._key
|
|
289
249
|
}, "children", {
|
|
290
250
|
_key: focusSpan.node._key
|
|
291
251
|
}],
|
|
292
|
-
offset: context.selection?.focus.offset ?? 0
|
|
252
|
+
offset: snapshot.context.selection?.focus.offset ?? 0
|
|
293
253
|
}
|
|
294
254
|
});
|
|
295
255
|
if (previousInlineObject || !blockOffset)
|
|
296
256
|
return !1;
|
|
297
|
-
const blockText = util_sliceBlocks.getTextBlockText(focusTextBlock.node), defaultStyle = config.defaultStyle?.(context), looksLikeUnorderedList = /^(-|\*)/.test(blockText), unorderedListStyle = config.unorderedListStyle?.(context), caretAtTheEndOfUnorderedList = blockOffset.offset === 1;
|
|
257
|
+
const blockText = util_sliceBlocks.getTextBlockText(focusTextBlock.node), defaultStyle = config.defaultStyle?.(snapshot.context), looksLikeUnorderedList = /^(-|\*)/.test(blockText), unorderedListStyle = config.unorderedListStyle?.(snapshot.context), caretAtTheEndOfUnorderedList = blockOffset.offset === 1;
|
|
298
258
|
if (defaultStyle && caretAtTheEndOfUnorderedList && looksLikeUnorderedList && unorderedListStyle !== void 0)
|
|
299
259
|
return {
|
|
300
260
|
focusTextBlock,
|
|
@@ -302,7 +262,7 @@ function createMarkdownBehaviors(config) {
|
|
|
302
262
|
listItemLength: 1,
|
|
303
263
|
style: defaultStyle
|
|
304
264
|
};
|
|
305
|
-
const looksLikeOrderedList = /^1\./.test(blockText), orderedListStyle = config.orderedListStyle?.(context), caretAtTheEndOfOrderedList = blockOffset.offset === 2;
|
|
265
|
+
const looksLikeOrderedList = /^1\./.test(blockText), orderedListStyle = config.orderedListStyle?.(snapshot.context), caretAtTheEndOfOrderedList = blockOffset.offset === 2;
|
|
306
266
|
return defaultStyle && caretAtTheEndOfOrderedList && looksLikeOrderedList && orderedListStyle !== void 0 ? {
|
|
307
267
|
focusTextBlock,
|
|
308
268
|
listItem: orderedListStyle,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"behavior.markdown.cjs","sources":["../../src/behaviors/behavior.markdown.ts"],"sourcesContent":["import {isPortableTextTextBlock} from '@sanity/types'\nimport type {EditorSchema} from '../editor/define-schema'\nimport * as selectors from '../selectors'\nimport {getBlockTextBefore} from '../selectors/selector.get-text-before'\nimport {spanSelectionPointToBlockOffset} from '../utils/util.block-offset'\nimport {getTextBlockText} from '../utils/util.get-text-block-text'\nimport {defineBehavior} from './behavior.types'\n\n/**\n * @beta\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 * @beta\n * Create markdown behaviors for common markdown actions such as converting ### to headings, --- to HRs, and more.\n *\n * @example\n * Configure the bundled markdown behaviors\n * ```ts\n * import {EditorProvider} from '@portabletext/editor'\n * import {createMarkdownBehaviors, coreBehaviors} from '@portabletext/editor/behaviors'\n *\n * function App() {\n * return (\n * <EditorProvider\n * initialConfig={{\n * behaviors: [\n * ...coreBehaviors,\n * ...createMarkdownBehaviors({\n * horizontalRuleObject: ({schema}) => {\n * const name = schema.blockObjects.find(\n * (object) => object.name === 'break',\n * )?.name\n * return name ? {name} : undefined\n * },\n * defaultStyle: ({schema}) => schema.styles[0].value,\n * headingStyle: ({schema, level}) =>\n * schema.styles.find((style) => style.value === `h${level}`)\n * ?.value,\n * blockquoteStyle: ({schema}) =>\n * schema.styles.find((style) => style.value === 'blockquote')\n * ?.value,\n * unorderedListStyle: ({schema}) =>\n * schema.lists.find((list) => list.value === 'bullet')?.value,\n * orderedListStyle: ({schema}) =>\n * schema.lists.find((list) => list.value === 'number')?.value,\n * }),\n * ]\n * }}\n * >\n * {...}\n * </EditorProvider>\n * )\n * }\n * ```\n *\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 = selectors.isSelectionCollapsed({context})\n const focusTextBlock = selectors.getFocusTextBlock({context})\n const focusSpan = selectors.getFocusSpan({context})\n\n if (!selectionCollapsed || !focusTextBlock || !focusSpan) {\n return false\n }\n\n const previousInlineObject = selectors.getPreviousInlineObject({context})\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 (previousInlineObject || !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: 'block.unset',\n props: ['listItem', 'level'],\n at: focusTextBlock.path,\n },\n {\n type: 'block.set',\n props: {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 = selectors.getFocusTextBlock({context})\n const selectionCollapsed = selectors.isSelectionCollapsed({context})\n\n if (!hrObject || !focusBlock || !selectionCollapsed) {\n return false\n }\n\n const previousInlineObject = selectors.getPreviousInlineObject({context})\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 (\n !previousInlineObject &&\n textBefore === `${hrCharacter}${hrCharacter}`\n ) {\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 = selectors.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 = selectors.isSelectionCollapsed({context})\n const focusTextBlock = selectors.getFocusTextBlock({context})\n const focusSpan = selectors.getFocusSpan({context})\n\n if (!selectionCollapsed || !focusTextBlock || !focusSpan) {\n return false\n }\n\n const 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 previousInlineObject = selectors.getPreviousInlineObject({context})\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 (previousInlineObject || !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: 'block.unset',\n props: ['listItem', 'level'],\n at: focusTextBlock.path,\n },\n {\n type: 'block.set',\n props: {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 = selectors.isSelectionCollapsed({context})\n const focusTextBlock = selectors.getFocusTextBlock({context})\n const focusSpan = selectors.getFocusSpan({context})\n\n if (!selectionCollapsed || !focusTextBlock || !focusSpan) {\n return false\n }\n\n const atTheBeginningOfBLock =\n focusTextBlock.node.children[0]._key === focusSpan.node._key &&\n context.selection?.focus.offset === 0\n\n 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: 'block.set',\n props: {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 = selectors.isSelectionCollapsed({context})\n const focusTextBlock = selectors.getFocusTextBlock({context})\n const focusSpan = selectors.getFocusSpan({context})\n\n if (!selectionCollapsed || !focusTextBlock || !focusSpan) {\n return false\n }\n\n const previousInlineObject = selectors.getPreviousInlineObject({context})\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 (previousInlineObject || !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: 'block.set',\n props: {\n listItem,\n level: 1,\n style,\n },\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":["createMarkdownBehaviors","config","automaticBlockquoteOnSpace","defineBehavior","on","guard","context","event","text","selectionCollapsed","selectors","focusTextBlock","focusSpan","previousInlineObject","blockOffset","spanSelectionPointToBlockOffset","value","selectionPoint","path","_key","node","offset","selection","focus","blockText","getTextBlockText","caretAtTheEndOfQuote","looksLikeMarkdownQuote","test","blockquoteStyle","undefined","style","actions","type","_","props","at","anchor","automaticHr","hrCharacter","hrObject","horizontalRuleObject","focusBlock","textBefore","getBlockTextBefore","hrBlockOffsets","placement","blockObject","automaticHrOnPaste","data","getData","hrRegExp","hrCharacters","match","isPortableTextTextBlock","textBlock","children","blockPath","automaticHeadingOnSpace","markdownHeadingSearch","exec","level","length","caretAtTheEndOfHeading","headingStyle","schema","clearStyleOnBackspace","atTheBeginningOfBLock","defaultStyle","automaticListOnSpace","looksLikeUnorderedList","unorderedListStyle","caretAtTheEndOfUnorderedList","listItem","listItemLength","looksLikeOrderedList","orderedListStyle","caretAtTheEndOfOrderedList"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"behavior.markdown.cjs","sources":["../../src/behaviors/behavior.markdown.ts"],"sourcesContent":["import {isPortableTextTextBlock} from '@sanity/types'\nimport type {EditorSchema} from '../editor/define-schema'\nimport * as selectors from '../selectors'\nimport {spanSelectionPointToBlockOffset} from '../utils/util.block-offset'\nimport {getTextBlockText} from '../utils/util.get-text-block-text'\nimport {defineBehavior} from './behavior.types'\n\n/**\n * @beta\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 * @beta\n * Create markdown behaviors for common markdown actions such as converting ### to headings, --- to HRs, and more.\n *\n * @example\n * Configure the bundled markdown behaviors\n * ```ts\n * import {EditorProvider} from '@portabletext/editor'\n * import {createMarkdownBehaviors, coreBehaviors} from '@portabletext/editor/behaviors'\n *\n * function App() {\n * return (\n * <EditorProvider\n * initialConfig={{\n * behaviors: [\n * ...coreBehaviors,\n * ...createMarkdownBehaviors({\n * horizontalRuleObject: ({schema}) => {\n * const name = schema.blockObjects.find(\n * (object) => object.name === 'break',\n * )?.name\n * return name ? {name} : undefined\n * },\n * defaultStyle: ({schema}) => schema.styles[0].value,\n * headingStyle: ({schema, level}) =>\n * schema.styles.find((style) => style.value === `h${level}`)\n * ?.value,\n * blockquoteStyle: ({schema}) =>\n * schema.styles.find((style) => style.value === 'blockquote')\n * ?.value,\n * unorderedListStyle: ({schema}) =>\n * schema.lists.find((list) => list.value === 'bullet')?.value,\n * orderedListStyle: ({schema}) =>\n * schema.lists.find((list) => list.value === 'number')?.value,\n * }),\n * ]\n * }}\n * >\n * {...}\n * </EditorProvider>\n * )\n * }\n * ```\n *\n */\nexport function createMarkdownBehaviors(config: MarkdownBehaviorsConfig) {\n const automaticBlockquoteOnSpace = defineBehavior({\n on: 'insert.text',\n guard: ({snapshot, event}) => {\n const isSpace = event.text === ' '\n\n if (!isSpace) {\n return false\n }\n\n const selectionCollapsed = selectors.isSelectionCollapsed(snapshot)\n const focusTextBlock = selectors.getFocusTextBlock(snapshot)\n const focusSpan = selectors.getFocusSpan(snapshot)\n\n if (!selectionCollapsed || !focusTextBlock || !focusSpan) {\n return false\n }\n\n const previousInlineObject = selectors.getPreviousInlineObject(snapshot)\n const blockOffset = spanSelectionPointToBlockOffset({\n value: snapshot.context.value,\n selectionPoint: {\n path: [\n {_key: focusTextBlock.node._key},\n 'children',\n {_key: focusSpan.node._key},\n ],\n offset: snapshot.context.selection?.focus.offset ?? 0,\n },\n })\n\n if (previousInlineObject || !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?.(snapshot.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: 'block.unset',\n props: ['listItem', 'level'],\n at: focusTextBlock.path,\n },\n {\n type: 'block.set',\n props: {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: ({snapshot, 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?.(snapshot.context)\n const focusBlock = selectors.getFocusTextBlock(snapshot)\n const selectionCollapsed = selectors.isSelectionCollapsed(snapshot)\n\n if (!hrObject || !focusBlock || !selectionCollapsed) {\n return false\n }\n\n const previousInlineObject = selectors.getPreviousInlineObject(snapshot)\n const textBefore = selectors.getBlockTextBefore(snapshot)\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 (\n !previousInlineObject &&\n textBefore === `${hrCharacter}${hrCharacter}`\n ) {\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: ({snapshot, 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?.(snapshot.context)\n const focusBlock = selectors.getFocusBlock(snapshot)\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: ({snapshot, event}) => {\n const isSpace = event.text === ' '\n\n if (!isSpace) {\n return false\n }\n\n const selectionCollapsed = selectors.isSelectionCollapsed(snapshot)\n const focusTextBlock = selectors.getFocusTextBlock(snapshot)\n const focusSpan = selectors.getFocusSpan(snapshot)\n\n if (!selectionCollapsed || !focusTextBlock || !focusSpan) {\n return false\n }\n\n const blockOffset = spanSelectionPointToBlockOffset({\n value: snapshot.context.value,\n selectionPoint: {\n path: [\n {_key: focusTextBlock.node._key},\n 'children',\n {_key: focusSpan.node._key},\n ],\n offset: snapshot.context.selection?.focus.offset ?? 0,\n },\n })\n\n if (!blockOffset) {\n return false\n }\n\n const previousInlineObject = selectors.getPreviousInlineObject(snapshot)\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 (previousInlineObject || !caretAtTheEndOfHeading) {\n return false\n }\n\n const style =\n level !== undefined\n ? config.headingStyle?.({schema: snapshot.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: 'block.unset',\n props: ['listItem', 'level'],\n at: focusTextBlock.path,\n },\n {\n type: 'block.set',\n props: {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: ({snapshot}) => {\n const selectionCollapsed = selectors.isSelectionCollapsed(snapshot)\n const focusTextBlock = selectors.getFocusTextBlock(snapshot)\n const focusSpan = selectors.getFocusSpan(snapshot)\n\n if (!selectionCollapsed || !focusTextBlock || !focusSpan) {\n return false\n }\n\n const atTheBeginningOfBLock =\n focusTextBlock.node.children[0]._key === focusSpan.node._key &&\n snapshot.context.selection?.focus.offset === 0\n\n const defaultStyle = config.defaultStyle?.(snapshot.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: 'block.set',\n props: {style: defaultStyle},\n at: focusTextBlock.path,\n },\n ],\n ],\n })\n const automaticListOnSpace = defineBehavior({\n on: 'insert.text',\n guard: ({snapshot, event}) => {\n const isSpace = event.text === ' '\n\n if (!isSpace) {\n return false\n }\n\n const selectionCollapsed = selectors.isSelectionCollapsed(snapshot)\n const focusTextBlock = selectors.getFocusTextBlock(snapshot)\n const focusSpan = selectors.getFocusSpan(snapshot)\n\n if (!selectionCollapsed || !focusTextBlock || !focusSpan) {\n return false\n }\n\n const previousInlineObject = selectors.getPreviousInlineObject(snapshot)\n const blockOffset = spanSelectionPointToBlockOffset({\n value: snapshot.context.value,\n selectionPoint: {\n path: [\n {_key: focusTextBlock.node._key},\n 'children',\n {_key: focusSpan.node._key},\n ],\n offset: snapshot.context.selection?.focus.offset ?? 0,\n },\n })\n\n if (previousInlineObject || !blockOffset) {\n return false\n }\n\n const blockText = getTextBlockText(focusTextBlock.node)\n const defaultStyle = config.defaultStyle?.(snapshot.context)\n const looksLikeUnorderedList = /^(-|\\*)/.test(blockText)\n const unorderedListStyle = config.unorderedListStyle?.(snapshot.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?.(snapshot.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: 'block.set',\n props: {\n listItem,\n level: 1,\n style,\n },\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":["createMarkdownBehaviors","config","automaticBlockquoteOnSpace","defineBehavior","on","guard","snapshot","event","text","selectionCollapsed","selectors","focusTextBlock","focusSpan","previousInlineObject","getPreviousInlineObject","blockOffset","spanSelectionPointToBlockOffset","value","context","selectionPoint","path","_key","node","offset","selection","focus","blockText","getTextBlockText","caretAtTheEndOfQuote","looksLikeMarkdownQuote","test","blockquoteStyle","undefined","style","actions","type","_","props","at","anchor","automaticHr","hrCharacter","hrObject","horizontalRuleObject","focusBlock","textBefore","hrBlockOffsets","placement","blockObject","automaticHrOnPaste","data","getData","hrRegExp","hrCharacters","match","getFocusBlock","isPortableTextTextBlock","textBlock","children","blockPath","automaticHeadingOnSpace","markdownHeadingSearch","exec","level","length","caretAtTheEndOfHeading","headingStyle","schema","clearStyleOnBackspace","atTheBeginningOfBLock","defaultStyle","automaticListOnSpace","looksLikeUnorderedList","unorderedListStyle","caretAtTheEndOfUnorderedList","listItem","listItemLength","looksLikeOrderedList","orderedListStyle","caretAtTheEndOfOrderedList"],"mappings":"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"}
|
|
@@ -2255,13 +2255,13 @@ Synchronizer.displayName = "Synchronizer";
|
|
|
2255
2255
|
const converterJson = {
|
|
2256
2256
|
mimeType: "application/json",
|
|
2257
2257
|
serialize: ({
|
|
2258
|
-
|
|
2258
|
+
snapshot,
|
|
2259
2259
|
event
|
|
2260
2260
|
}) => {
|
|
2261
|
-
const portableTextConverter = context.converters.find((converter) => converter.mimeType === "application/x-portable-text");
|
|
2261
|
+
const portableTextConverter = snapshot.context.converters.find((converter) => converter.mimeType === "application/x-portable-text");
|
|
2262
2262
|
return portableTextConverter ? {
|
|
2263
2263
|
...portableTextConverter.serialize({
|
|
2264
|
-
|
|
2264
|
+
snapshot,
|
|
2265
2265
|
event
|
|
2266
2266
|
}),
|
|
2267
2267
|
mimeType: "application/json",
|
|
@@ -2274,13 +2274,13 @@ const converterJson = {
|
|
|
2274
2274
|
};
|
|
2275
2275
|
},
|
|
2276
2276
|
deserialize: ({
|
|
2277
|
-
|
|
2277
|
+
snapshot,
|
|
2278
2278
|
event
|
|
2279
2279
|
}) => {
|
|
2280
|
-
const portableTextConverter = context.converters.find((converter) => converter.mimeType === "application/x-portable-text");
|
|
2280
|
+
const portableTextConverter = snapshot.context.converters.find((converter) => converter.mimeType === "application/x-portable-text");
|
|
2281
2281
|
return portableTextConverter ? {
|
|
2282
2282
|
...portableTextConverter.deserialize({
|
|
2283
|
-
|
|
2283
|
+
snapshot,
|
|
2284
2284
|
event
|
|
2285
2285
|
}),
|
|
2286
2286
|
mimeType: "application/json"
|
|
@@ -2293,10 +2293,10 @@ const converterJson = {
|
|
|
2293
2293
|
}, converterPortableText = {
|
|
2294
2294
|
mimeType: "application/x-portable-text",
|
|
2295
2295
|
serialize: ({
|
|
2296
|
-
|
|
2296
|
+
snapshot,
|
|
2297
2297
|
event
|
|
2298
2298
|
}) => {
|
|
2299
|
-
if (!context.selection)
|
|
2299
|
+
if (!snapshot.context.selection)
|
|
2300
2300
|
return {
|
|
2301
2301
|
type: "serialization.failure",
|
|
2302
2302
|
mimeType: "application/x-portable-text",
|
|
@@ -2304,8 +2304,8 @@ const converterJson = {
|
|
|
2304
2304
|
reason: "No selection"
|
|
2305
2305
|
};
|
|
2306
2306
|
const blocks = util_sliceBlocks.sliceBlocks({
|
|
2307
|
-
blocks: context.value,
|
|
2308
|
-
selection: context.selection
|
|
2307
|
+
blocks: snapshot.context.value,
|
|
2308
|
+
selection: snapshot.context.selection
|
|
2309
2309
|
});
|
|
2310
2310
|
return {
|
|
2311
2311
|
type: "serialization.success",
|
|
@@ -2315,7 +2315,7 @@ const converterJson = {
|
|
|
2315
2315
|
};
|
|
2316
2316
|
},
|
|
2317
2317
|
deserialize: ({
|
|
2318
|
-
|
|
2318
|
+
snapshot,
|
|
2319
2319
|
event
|
|
2320
2320
|
}) => {
|
|
2321
2321
|
const blocks = JSON.parse(event.data);
|
|
@@ -2327,7 +2327,7 @@ const converterJson = {
|
|
|
2327
2327
|
};
|
|
2328
2328
|
const parsedBlocks = blocks.flatMap((block) => {
|
|
2329
2329
|
const parsedBlock = util_blockOffsetsToSelection.parseBlock({
|
|
2330
|
-
context,
|
|
2330
|
+
context: snapshot.context,
|
|
2331
2331
|
block,
|
|
2332
2332
|
options: {
|
|
2333
2333
|
refreshKeys: !0
|
|
@@ -2348,10 +2348,10 @@ const converterJson = {
|
|
|
2348
2348
|
}, converterTextHtml = {
|
|
2349
2349
|
mimeType: "text/html",
|
|
2350
2350
|
serialize: ({
|
|
2351
|
-
|
|
2351
|
+
snapshot,
|
|
2352
2352
|
event
|
|
2353
2353
|
}) => {
|
|
2354
|
-
if (!context.selection)
|
|
2354
|
+
if (!snapshot.context.selection)
|
|
2355
2355
|
return {
|
|
2356
2356
|
type: "serialization.failure",
|
|
2357
2357
|
mimeType: "text/html",
|
|
@@ -2359,8 +2359,8 @@ const converterJson = {
|
|
|
2359
2359
|
reason: "No selection"
|
|
2360
2360
|
};
|
|
2361
2361
|
const blocks = util_sliceBlocks.sliceBlocks({
|
|
2362
|
-
blocks: context.value,
|
|
2363
|
-
selection: context.selection
|
|
2362
|
+
blocks: snapshot.context.value,
|
|
2363
|
+
selection: snapshot.context.selection
|
|
2364
2364
|
}), html = toHtml.toHTML(blocks, {
|
|
2365
2365
|
onMissingComponent: !1,
|
|
2366
2366
|
components: {
|
|
@@ -2382,27 +2382,27 @@ const converterJson = {
|
|
|
2382
2382
|
};
|
|
2383
2383
|
},
|
|
2384
2384
|
deserialize: ({
|
|
2385
|
-
|
|
2385
|
+
snapshot,
|
|
2386
2386
|
event
|
|
2387
2387
|
}) => ({
|
|
2388
2388
|
type: "deserialization.success",
|
|
2389
|
-
data: blockTools.htmlToBlocks(event.data, context.schema.portableText, {
|
|
2390
|
-
keyGenerator: context.keyGenerator,
|
|
2391
|
-
unstable_whitespaceOnPasteMode: context.schema.block.options.unstable_whitespaceOnPasteMode
|
|
2389
|
+
data: blockTools.htmlToBlocks(event.data, snapshot.context.schema.portableText, {
|
|
2390
|
+
keyGenerator: snapshot.context.keyGenerator,
|
|
2391
|
+
unstable_whitespaceOnPasteMode: snapshot.context.schema.block.options.unstable_whitespaceOnPasteMode
|
|
2392
2392
|
}),
|
|
2393
2393
|
mimeType: "text/html"
|
|
2394
2394
|
})
|
|
2395
2395
|
}, converterTextPlain = {
|
|
2396
2396
|
mimeType: "text/plain",
|
|
2397
2397
|
serialize: ({
|
|
2398
|
-
|
|
2398
|
+
snapshot,
|
|
2399
2399
|
event
|
|
2400
|
-
}) => context.selection ? {
|
|
2400
|
+
}) => snapshot.context.selection ? {
|
|
2401
2401
|
type: "serialization.success",
|
|
2402
2402
|
data: util_sliceBlocks.sliceBlocks({
|
|
2403
|
-
blocks: context.value,
|
|
2404
|
-
selection: context.selection
|
|
2405
|
-
}).map((block) => types.isPortableTextTextBlock(block) ? block.children.map((child) => child._type === context.schema.span.name ? child.text : `[${context.schema.inlineObjects.find((inlineObjectType) => inlineObjectType.name === child._type)?.title ?? "Object"}]`).join("") : `[${context.schema.blockObjects.find((blockObjectType) => blockObjectType.name === block._type)?.title ?? "Object"}]`).join(`
|
|
2403
|
+
blocks: snapshot.context.value,
|
|
2404
|
+
selection: snapshot.context.selection
|
|
2405
|
+
}).map((block) => types.isPortableTextTextBlock(block) ? block.children.map((child) => child._type === snapshot.context.schema.span.name ? child.text : `[${snapshot.context.schema.inlineObjects.find((inlineObjectType) => inlineObjectType.name === child._type)?.title ?? "Object"}]`).join("") : `[${snapshot.context.schema.blockObjects.find((blockObjectType) => blockObjectType.name === block._type)?.title ?? "Object"}]`).join(`
|
|
2406
2406
|
|
|
2407
2407
|
`),
|
|
2408
2408
|
mimeType: "text/plain",
|
|
@@ -2414,14 +2414,14 @@ const converterJson = {
|
|
|
2414
2414
|
reason: "No selection"
|
|
2415
2415
|
},
|
|
2416
2416
|
deserialize: ({
|
|
2417
|
-
|
|
2417
|
+
snapshot,
|
|
2418
2418
|
event
|
|
2419
2419
|
}) => {
|
|
2420
2420
|
const textToHtml = `<html><body>${escapeHtml(event.data).split(/\n{2,}/).map((line) => line ? `<p>${line.replace(/(?:\r\n|\r|\n)/g, "<br/>")}</p>` : "<p></p>").join("")}</body></html>`;
|
|
2421
2421
|
return {
|
|
2422
2422
|
type: "deserialization.success",
|
|
2423
|
-
data: blockTools.htmlToBlocks(textToHtml, context.schema.portableText, {
|
|
2424
|
-
keyGenerator: context.keyGenerator
|
|
2423
|
+
data: blockTools.htmlToBlocks(textToHtml, snapshot.context.schema.portableText, {
|
|
2424
|
+
keyGenerator: snapshot.context.keyGenerator
|
|
2425
2425
|
}),
|
|
2426
2426
|
mimeType: "text/plain"
|
|
2427
2427
|
};
|
|
@@ -4996,10 +4996,6 @@ function createWithEventListeners(editorActor, subscriptions) {
|
|
|
4996
4996
|
}
|
|
4997
4997
|
});
|
|
4998
4998
|
}, editor.setFragmentData = (dataTransfer, originEvent) => {
|
|
4999
|
-
if (originEvent === "drag") {
|
|
5000
|
-
setFragmentData(dataTransfer);
|
|
5001
|
-
return;
|
|
5002
|
-
}
|
|
5003
4999
|
if (isApplyingBehaviorActions(editor)) {
|
|
5004
5000
|
setFragmentData(dataTransfer);
|
|
5005
5001
|
return;
|
|
@@ -5711,11 +5707,9 @@ function createSlateEditor(config) {
|
|
|
5711
5707
|
const toggleAnnotationOff = behavior_core.defineBehavior({
|
|
5712
5708
|
on: "annotation.toggle",
|
|
5713
5709
|
guard: ({
|
|
5714
|
-
|
|
5710
|
+
snapshot,
|
|
5715
5711
|
event
|
|
5716
|
-
}) => selector_isActiveStyle.isActiveAnnotation(event.annotation.name)(
|
|
5717
|
-
context
|
|
5718
|
-
}),
|
|
5712
|
+
}) => selector_isActiveStyle.isActiveAnnotation(event.annotation.name)(snapshot),
|
|
5719
5713
|
actions: [({
|
|
5720
5714
|
event
|
|
5721
5715
|
}) => [behavior_core.raise({
|
|
@@ -5725,11 +5719,9 @@ const toggleAnnotationOff = behavior_core.defineBehavior({
|
|
|
5725
5719
|
}), toggleAnnotationOn = behavior_core.defineBehavior({
|
|
5726
5720
|
on: "annotation.toggle",
|
|
5727
5721
|
guard: ({
|
|
5728
|
-
|
|
5722
|
+
snapshot,
|
|
5729
5723
|
event
|
|
5730
|
-
}) => !selector_isActiveStyle.isActiveAnnotation(event.annotation.name)(
|
|
5731
|
-
context
|
|
5732
|
-
}),
|
|
5724
|
+
}) => !selector_isActiveStyle.isActiveAnnotation(event.annotation.name)(snapshot),
|
|
5733
5725
|
actions: [({
|
|
5734
5726
|
event
|
|
5735
5727
|
}) => [behavior_core.raise({
|
|
@@ -5739,11 +5731,9 @@ const toggleAnnotationOff = behavior_core.defineBehavior({
|
|
|
5739
5731
|
}), toggleDecoratorOff = behavior_core.defineBehavior({
|
|
5740
5732
|
on: "decorator.toggle",
|
|
5741
5733
|
guard: ({
|
|
5742
|
-
|
|
5734
|
+
snapshot,
|
|
5743
5735
|
event
|
|
5744
|
-
}) => selector_isActiveStyle.isActiveDecorator(event.decorator)(
|
|
5745
|
-
context
|
|
5746
|
-
}),
|
|
5736
|
+
}) => selector_isActiveStyle.isActiveDecorator(event.decorator)(snapshot),
|
|
5747
5737
|
actions: [({
|
|
5748
5738
|
event
|
|
5749
5739
|
}) => [behavior_core.raise({
|
|
@@ -5753,11 +5743,9 @@ const toggleAnnotationOff = behavior_core.defineBehavior({
|
|
|
5753
5743
|
}), toggleDecoratorOn = behavior_core.defineBehavior({
|
|
5754
5744
|
on: "decorator.toggle",
|
|
5755
5745
|
guard: ({
|
|
5756
|
-
|
|
5746
|
+
snapshot,
|
|
5757
5747
|
event
|
|
5758
|
-
}) => !selector_isActiveStyle.isActiveDecorator(event.decorator)(
|
|
5759
|
-
context
|
|
5760
|
-
}),
|
|
5748
|
+
}) => !selector_isActiveStyle.isActiveDecorator(event.decorator)(snapshot),
|
|
5761
5749
|
actions: [({
|
|
5762
5750
|
event
|
|
5763
5751
|
}) => [behavior_core.raise({
|
|
@@ -5767,11 +5755,9 @@ const toggleAnnotationOff = behavior_core.defineBehavior({
|
|
|
5767
5755
|
}), toggleListItemOff = behavior_core.defineBehavior({
|
|
5768
5756
|
on: "list item.toggle",
|
|
5769
5757
|
guard: ({
|
|
5770
|
-
|
|
5758
|
+
snapshot,
|
|
5771
5759
|
event
|
|
5772
|
-
}) => selector_isActiveStyle.isActiveListItem(event.listItem)(
|
|
5773
|
-
context
|
|
5774
|
-
}),
|
|
5760
|
+
}) => selector_isActiveStyle.isActiveListItem(event.listItem)(snapshot),
|
|
5775
5761
|
actions: [({
|
|
5776
5762
|
event
|
|
5777
5763
|
}) => [behavior_core.raise({
|
|
@@ -5781,11 +5767,9 @@ const toggleAnnotationOff = behavior_core.defineBehavior({
|
|
|
5781
5767
|
}), toggleListItemOn = behavior_core.defineBehavior({
|
|
5782
5768
|
on: "list item.toggle",
|
|
5783
5769
|
guard: ({
|
|
5784
|
-
|
|
5770
|
+
snapshot,
|
|
5785
5771
|
event
|
|
5786
|
-
}) => !selector_isActiveStyle.isActiveListItem(event.listItem)(
|
|
5787
|
-
context
|
|
5788
|
-
}),
|
|
5772
|
+
}) => !selector_isActiveStyle.isActiveListItem(event.listItem)(snapshot),
|
|
5789
5773
|
actions: [({
|
|
5790
5774
|
event
|
|
5791
5775
|
}) => [behavior_core.raise({
|
|
@@ -5795,11 +5779,9 @@ const toggleAnnotationOff = behavior_core.defineBehavior({
|
|
|
5795
5779
|
}), toggleStyleOff = behavior_core.defineBehavior({
|
|
5796
5780
|
on: "style.toggle",
|
|
5797
5781
|
guard: ({
|
|
5798
|
-
|
|
5782
|
+
snapshot,
|
|
5799
5783
|
event
|
|
5800
|
-
}) => selector_isActiveStyle.isActiveStyle(event.style)(
|
|
5801
|
-
context
|
|
5802
|
-
}),
|
|
5784
|
+
}) => selector_isActiveStyle.isActiveStyle(event.style)(snapshot),
|
|
5803
5785
|
actions: [({
|
|
5804
5786
|
event
|
|
5805
5787
|
}) => [behavior_core.raise({
|
|
@@ -5809,11 +5791,9 @@ const toggleAnnotationOff = behavior_core.defineBehavior({
|
|
|
5809
5791
|
}), toggleStyleOn = behavior_core.defineBehavior({
|
|
5810
5792
|
on: "style.toggle",
|
|
5811
5793
|
guard: ({
|
|
5812
|
-
|
|
5794
|
+
snapshot,
|
|
5813
5795
|
event
|
|
5814
|
-
}) => !selector_isActiveStyle.isActiveStyle(event.style)(
|
|
5815
|
-
context
|
|
5816
|
-
}),
|
|
5796
|
+
}) => !selector_isActiveStyle.isActiveStyle(event.style)(snapshot),
|
|
5817
5797
|
actions: [({
|
|
5818
5798
|
event
|
|
5819
5799
|
}) => [behavior_core.raise({
|
|
@@ -5823,13 +5803,13 @@ const toggleAnnotationOff = behavior_core.defineBehavior({
|
|
|
5823
5803
|
}), raiseDeserializationSuccessOrFailure = behavior_core.defineBehavior({
|
|
5824
5804
|
on: "deserialize",
|
|
5825
5805
|
guard: ({
|
|
5826
|
-
|
|
5806
|
+
snapshot,
|
|
5827
5807
|
event
|
|
5828
5808
|
}) => {
|
|
5829
|
-
const deserializeEvents = context.converters.flatMap((converter) => {
|
|
5809
|
+
const deserializeEvents = snapshot.context.converters.flatMap((converter) => {
|
|
5830
5810
|
const data = event.dataTransfer.getData(converter.mimeType);
|
|
5831
5811
|
return data ? [converter.deserialize({
|
|
5832
|
-
|
|
5812
|
+
snapshot,
|
|
5833
5813
|
event: {
|
|
5834
5814
|
type: "deserialize",
|
|
5835
5815
|
data
|
|
@@ -5859,13 +5839,13 @@ const toggleAnnotationOff = behavior_core.defineBehavior({
|
|
|
5859
5839
|
}), raiseSerializationSuccessOrFailure = behavior_core.defineBehavior({
|
|
5860
5840
|
on: "serialize",
|
|
5861
5841
|
guard: ({
|
|
5862
|
-
|
|
5842
|
+
snapshot,
|
|
5863
5843
|
event
|
|
5864
5844
|
}) => {
|
|
5865
|
-
if (context.converters.length === 0)
|
|
5845
|
+
if (snapshot.context.converters.length === 0)
|
|
5866
5846
|
return !1;
|
|
5867
|
-
const serializeEvents = context.converters.map((converter) => converter.serialize({
|
|
5868
|
-
|
|
5847
|
+
const serializeEvents = snapshot.context.converters.map((converter) => converter.serialize({
|
|
5848
|
+
snapshot,
|
|
5869
5849
|
event
|
|
5870
5850
|
}));
|
|
5871
5851
|
return serializeEvents.length === 0 ? !1 : serializeEvents;
|
|
@@ -6033,12 +6013,14 @@ const editorMachine = xstate.setup({
|
|
|
6033
6013
|
for (const eventBehavior of eventBehaviors) {
|
|
6034
6014
|
const shouldRun = eventBehavior.guard === void 0 || eventBehavior.guard({
|
|
6035
6015
|
context: editorSnapshot.context,
|
|
6016
|
+
snapshot: editorSnapshot,
|
|
6036
6017
|
event: event.behaviorEvent
|
|
6037
6018
|
});
|
|
6038
6019
|
if (!shouldRun)
|
|
6039
6020
|
continue;
|
|
6040
6021
|
const actionIntendSets = eventBehavior.actions.map((actionSet) => actionSet({
|
|
6041
6022
|
context: editorSnapshot.context,
|
|
6023
|
+
snapshot: editorSnapshot,
|
|
6042
6024
|
event: event.behaviorEvent
|
|
6043
6025
|
}, shouldRun));
|
|
6044
6026
|
for (const actionIntends of actionIntendSets)
|