@portabletext/editor 1.33.3 → 1.33.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/_chunks-cjs/behavior.core.cjs +11 -204
- package/lib/_chunks-cjs/behavior.core.cjs.map +1 -1
- package/lib/_chunks-cjs/behavior.markdown.cjs +7 -7
- package/lib/_chunks-cjs/behavior.markdown.cjs.map +1 -1
- package/lib/_chunks-cjs/plugin.event-listener.cjs +196 -25
- package/lib/_chunks-cjs/plugin.event-listener.cjs.map +1 -1
- package/lib/_chunks-cjs/selector.get-text-before.cjs +3 -3
- package/lib/_chunks-cjs/selector.get-text-before.cjs.map +1 -1
- package/lib/_chunks-cjs/selector.is-active-style.cjs +246 -0
- package/lib/_chunks-cjs/selector.is-active-style.cjs.map +1 -0
- package/lib/_chunks-cjs/selector.is-at-the-start-of-block.cjs +23 -198
- 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 +3 -3
- package/lib/_chunks-cjs/util.block-offsets-to-selection.cjs.map +1 -1
- package/lib/_chunks-cjs/util.reverse-selection.cjs +0 -135
- package/lib/_chunks-cjs/util.reverse-selection.cjs.map +1 -1
- package/lib/_chunks-cjs/util.slice-blocks.cjs +138 -1
- package/lib/_chunks-cjs/util.slice-blocks.cjs.map +1 -1
- package/lib/_chunks-es/behavior.core.js +9 -202
- package/lib/_chunks-es/behavior.core.js.map +1 -1
- package/lib/_chunks-es/behavior.markdown.js +1 -1
- package/lib/_chunks-es/plugin.event-listener.js +193 -23
- package/lib/_chunks-es/plugin.event-listener.js.map +1 -1
- package/lib/_chunks-es/selector.get-text-before.js +2 -1
- package/lib/_chunks-es/selector.get-text-before.js.map +1 -1
- package/lib/_chunks-es/selector.is-active-style.js +249 -0
- package/lib/_chunks-es/selector.is-active-style.js.map +1 -0
- package/lib/_chunks-es/selector.is-at-the-start-of-block.js +12 -187
- 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 +1 -1
- package/lib/_chunks-es/util.reverse-selection.js +1 -136
- package/lib/_chunks-es/util.reverse-selection.js.map +1 -1
- package/lib/_chunks-es/util.slice-blocks.js +140 -3
- package/lib/_chunks-es/util.slice-blocks.js.map +1 -1
- package/lib/index.d.cts +1 -115
- package/lib/index.d.ts +1 -115
- package/lib/plugins/index.cjs +11 -11
- package/lib/plugins/index.cjs.map +1 -1
- package/lib/plugins/index.d.cts +1 -115
- package/lib/plugins/index.d.ts +1 -115
- package/lib/plugins/index.js +1 -1
- package/lib/selectors/index.cjs +16 -21
- package/lib/selectors/index.cjs.map +1 -1
- package/lib/selectors/index.js +7 -11
- package/lib/selectors/index.js.map +1 -1
- package/lib/utils/index.cjs +13 -13
- package/lib/utils/index.cjs.map +1 -1
- package/lib/utils/index.js +3 -3
- package/package.json +1 -1
- package/src/behaviors/behavior.core.annotations.ts +0 -24
- package/src/behaviors/behavior.core.decorators.ts +0 -19
- package/src/behaviors/behavior.core.insert-break.ts +4 -4
- package/src/behaviors/behavior.core.lists.ts +0 -30
- package/src/behaviors/behavior.core.ts +2 -17
- package/src/behaviors/behavior.default.ts +198 -0
- package/src/behaviors/behavior.foundational.ts +12 -12
- package/src/converters/converter.text-html.serialize.test.ts +1 -1
- package/src/editor/editor-machine.ts +8 -8
- package/src/selectors/selector.get-selection-text.ts +14 -89
- package/src/utils/util.slice-blocks.ts +12 -1
- package/lib/_chunks-cjs/selector.get-trimmed-selection.cjs +0 -97
- package/lib/_chunks-cjs/selector.get-trimmed-selection.cjs.map +0 -1
- package/lib/_chunks-es/selector.get-trimmed-selection.js +0 -100
- package/lib/_chunks-es/selector.get-trimmed-selection.js.map +0 -1
- package/src/behaviors/behavior.core.deserialize.ts +0 -60
- package/src/behaviors/behavior.core.serialize.ts +0 -44
- package/src/behaviors/behavior.core.style.ts +0 -19
package/lib/index.d.cts
CHANGED
|
@@ -65,12 +65,10 @@ import {
|
|
|
65
65
|
} from 'xstate'
|
|
66
66
|
import {GuardArgs} from 'xstate/guards'
|
|
67
67
|
import {
|
|
68
|
-
BehaviorEvent as BehaviorEvent_2,
|
|
69
68
|
BlockOffset as BlockOffset_2,
|
|
70
69
|
PortableTextMemberSchemaTypes as PortableTextMemberSchemaTypes_2,
|
|
71
70
|
} from '..'
|
|
72
71
|
import {MIMEType as MIMEType_2} from '../internal-utils/mime-type'
|
|
73
|
-
import {PickFromUnion as PickFromUnion_2} from '../type-utils'
|
|
74
72
|
|
|
75
73
|
/**
|
|
76
74
|
* @public
|
|
@@ -2139,119 +2137,7 @@ declare const editorMachine: StateMachine<
|
|
|
2139
2137
|
AnyEventObject
|
|
2140
2138
|
>
|
|
2141
2139
|
}) => {
|
|
2142
|
-
behaviors: Set<
|
|
2143
|
-
Behavior<
|
|
2144
|
-
| 'focus'
|
|
2145
|
-
| 'delete'
|
|
2146
|
-
| 'select'
|
|
2147
|
-
| 'serialize'
|
|
2148
|
-
| 'copy'
|
|
2149
|
-
| 'serialization.failure'
|
|
2150
|
-
| 'serialization.success'
|
|
2151
|
-
| 'deserialize'
|
|
2152
|
-
| 'deserialization.failure'
|
|
2153
|
-
| 'deserialization.success'
|
|
2154
|
-
| 'annotation.add'
|
|
2155
|
-
| 'annotation.remove'
|
|
2156
|
-
| 'annotation.toggle'
|
|
2157
|
-
| 'block.set'
|
|
2158
|
-
| 'block.unset'
|
|
2159
|
-
| 'blur'
|
|
2160
|
-
| 'data transfer.set'
|
|
2161
|
-
| 'decorator.add'
|
|
2162
|
-
| 'decorator.remove'
|
|
2163
|
-
| 'decorator.toggle'
|
|
2164
|
-
| 'delete.backward'
|
|
2165
|
-
| 'delete.block'
|
|
2166
|
-
| 'delete.forward'
|
|
2167
|
-
| 'delete.text'
|
|
2168
|
-
| 'history.redo'
|
|
2169
|
-
| 'history.undo'
|
|
2170
|
-
| 'insert.blocks'
|
|
2171
|
-
| 'insert.block object'
|
|
2172
|
-
| 'insert.inline object'
|
|
2173
|
-
| 'insert.break'
|
|
2174
|
-
| 'insert.soft break'
|
|
2175
|
-
| 'insert.block'
|
|
2176
|
-
| 'insert.span'
|
|
2177
|
-
| 'insert.text'
|
|
2178
|
-
| 'insert.text block'
|
|
2179
|
-
| 'list item.add'
|
|
2180
|
-
| 'list item.remove'
|
|
2181
|
-
| 'list item.toggle'
|
|
2182
|
-
| 'move.block'
|
|
2183
|
-
| 'move.block down'
|
|
2184
|
-
| 'move.block up'
|
|
2185
|
-
| 'select.previous block'
|
|
2186
|
-
| 'select.next block'
|
|
2187
|
-
| 'style.add'
|
|
2188
|
-
| 'style.remove'
|
|
2189
|
-
| 'style.toggle'
|
|
2190
|
-
| 'text block.set'
|
|
2191
|
-
| 'text block.unset'
|
|
2192
|
-
| 'key.down'
|
|
2193
|
-
| 'key.up'
|
|
2194
|
-
| 'paste'
|
|
2195
|
-
| `custom.${string}`,
|
|
2196
|
-
true,
|
|
2197
|
-
PickFromUnion_2<
|
|
2198
|
-
BehaviorEvent_2,
|
|
2199
|
-
'type',
|
|
2200
|
-
| 'focus'
|
|
2201
|
-
| 'delete'
|
|
2202
|
-
| 'select'
|
|
2203
|
-
| 'serialize'
|
|
2204
|
-
| 'copy'
|
|
2205
|
-
| 'serialization.failure'
|
|
2206
|
-
| 'serialization.success'
|
|
2207
|
-
| 'deserialize'
|
|
2208
|
-
| 'deserialization.failure'
|
|
2209
|
-
| 'deserialization.success'
|
|
2210
|
-
| 'annotation.add'
|
|
2211
|
-
| 'annotation.remove'
|
|
2212
|
-
| 'annotation.toggle'
|
|
2213
|
-
| 'block.set'
|
|
2214
|
-
| 'block.unset'
|
|
2215
|
-
| 'blur'
|
|
2216
|
-
| 'data transfer.set'
|
|
2217
|
-
| 'decorator.add'
|
|
2218
|
-
| 'decorator.remove'
|
|
2219
|
-
| 'decorator.toggle'
|
|
2220
|
-
| 'delete.backward'
|
|
2221
|
-
| 'delete.block'
|
|
2222
|
-
| 'delete.forward'
|
|
2223
|
-
| 'delete.text'
|
|
2224
|
-
| 'history.redo'
|
|
2225
|
-
| 'history.undo'
|
|
2226
|
-
| 'insert.blocks'
|
|
2227
|
-
| 'insert.block object'
|
|
2228
|
-
| 'insert.inline object'
|
|
2229
|
-
| 'insert.break'
|
|
2230
|
-
| 'insert.soft break'
|
|
2231
|
-
| 'insert.block'
|
|
2232
|
-
| 'insert.span'
|
|
2233
|
-
| 'insert.text'
|
|
2234
|
-
| 'insert.text block'
|
|
2235
|
-
| 'list item.add'
|
|
2236
|
-
| 'list item.remove'
|
|
2237
|
-
| 'list item.toggle'
|
|
2238
|
-
| 'move.block'
|
|
2239
|
-
| 'move.block down'
|
|
2240
|
-
| 'move.block up'
|
|
2241
|
-
| 'select.previous block'
|
|
2242
|
-
| 'select.next block'
|
|
2243
|
-
| 'style.add'
|
|
2244
|
-
| 'style.remove'
|
|
2245
|
-
| 'style.toggle'
|
|
2246
|
-
| 'text block.set'
|
|
2247
|
-
| 'text block.unset'
|
|
2248
|
-
| 'key.down'
|
|
2249
|
-
| 'key.up'
|
|
2250
|
-
| 'paste'
|
|
2251
|
-
| `custom.${string}`
|
|
2252
|
-
>
|
|
2253
|
-
>
|
|
2254
|
-
>
|
|
2140
|
+
behaviors: Set<Behavior>
|
|
2255
2141
|
converters: Set<Converter>
|
|
2256
2142
|
keyGenerator: () => string
|
|
2257
2143
|
pendingEvents: never[]
|
package/lib/index.d.ts
CHANGED
|
@@ -65,12 +65,10 @@ import {
|
|
|
65
65
|
} from 'xstate'
|
|
66
66
|
import {GuardArgs} from 'xstate/guards'
|
|
67
67
|
import {
|
|
68
|
-
BehaviorEvent as BehaviorEvent_2,
|
|
69
68
|
BlockOffset as BlockOffset_2,
|
|
70
69
|
PortableTextMemberSchemaTypes as PortableTextMemberSchemaTypes_2,
|
|
71
70
|
} from '..'
|
|
72
71
|
import {MIMEType as MIMEType_2} from '../internal-utils/mime-type'
|
|
73
|
-
import {PickFromUnion as PickFromUnion_2} from '../type-utils'
|
|
74
72
|
|
|
75
73
|
/**
|
|
76
74
|
* @public
|
|
@@ -2139,119 +2137,7 @@ declare const editorMachine: StateMachine<
|
|
|
2139
2137
|
AnyEventObject
|
|
2140
2138
|
>
|
|
2141
2139
|
}) => {
|
|
2142
|
-
behaviors: Set<
|
|
2143
|
-
Behavior<
|
|
2144
|
-
| 'focus'
|
|
2145
|
-
| 'delete'
|
|
2146
|
-
| 'select'
|
|
2147
|
-
| 'serialize'
|
|
2148
|
-
| 'copy'
|
|
2149
|
-
| 'serialization.failure'
|
|
2150
|
-
| 'serialization.success'
|
|
2151
|
-
| 'deserialize'
|
|
2152
|
-
| 'deserialization.failure'
|
|
2153
|
-
| 'deserialization.success'
|
|
2154
|
-
| 'annotation.add'
|
|
2155
|
-
| 'annotation.remove'
|
|
2156
|
-
| 'annotation.toggle'
|
|
2157
|
-
| 'block.set'
|
|
2158
|
-
| 'block.unset'
|
|
2159
|
-
| 'blur'
|
|
2160
|
-
| 'data transfer.set'
|
|
2161
|
-
| 'decorator.add'
|
|
2162
|
-
| 'decorator.remove'
|
|
2163
|
-
| 'decorator.toggle'
|
|
2164
|
-
| 'delete.backward'
|
|
2165
|
-
| 'delete.block'
|
|
2166
|
-
| 'delete.forward'
|
|
2167
|
-
| 'delete.text'
|
|
2168
|
-
| 'history.redo'
|
|
2169
|
-
| 'history.undo'
|
|
2170
|
-
| 'insert.blocks'
|
|
2171
|
-
| 'insert.block object'
|
|
2172
|
-
| 'insert.inline object'
|
|
2173
|
-
| 'insert.break'
|
|
2174
|
-
| 'insert.soft break'
|
|
2175
|
-
| 'insert.block'
|
|
2176
|
-
| 'insert.span'
|
|
2177
|
-
| 'insert.text'
|
|
2178
|
-
| 'insert.text block'
|
|
2179
|
-
| 'list item.add'
|
|
2180
|
-
| 'list item.remove'
|
|
2181
|
-
| 'list item.toggle'
|
|
2182
|
-
| 'move.block'
|
|
2183
|
-
| 'move.block down'
|
|
2184
|
-
| 'move.block up'
|
|
2185
|
-
| 'select.previous block'
|
|
2186
|
-
| 'select.next block'
|
|
2187
|
-
| 'style.add'
|
|
2188
|
-
| 'style.remove'
|
|
2189
|
-
| 'style.toggle'
|
|
2190
|
-
| 'text block.set'
|
|
2191
|
-
| 'text block.unset'
|
|
2192
|
-
| 'key.down'
|
|
2193
|
-
| 'key.up'
|
|
2194
|
-
| 'paste'
|
|
2195
|
-
| `custom.${string}`,
|
|
2196
|
-
true,
|
|
2197
|
-
PickFromUnion_2<
|
|
2198
|
-
BehaviorEvent_2,
|
|
2199
|
-
'type',
|
|
2200
|
-
| 'focus'
|
|
2201
|
-
| 'delete'
|
|
2202
|
-
| 'select'
|
|
2203
|
-
| 'serialize'
|
|
2204
|
-
| 'copy'
|
|
2205
|
-
| 'serialization.failure'
|
|
2206
|
-
| 'serialization.success'
|
|
2207
|
-
| 'deserialize'
|
|
2208
|
-
| 'deserialization.failure'
|
|
2209
|
-
| 'deserialization.success'
|
|
2210
|
-
| 'annotation.add'
|
|
2211
|
-
| 'annotation.remove'
|
|
2212
|
-
| 'annotation.toggle'
|
|
2213
|
-
| 'block.set'
|
|
2214
|
-
| 'block.unset'
|
|
2215
|
-
| 'blur'
|
|
2216
|
-
| 'data transfer.set'
|
|
2217
|
-
| 'decorator.add'
|
|
2218
|
-
| 'decorator.remove'
|
|
2219
|
-
| 'decorator.toggle'
|
|
2220
|
-
| 'delete.backward'
|
|
2221
|
-
| 'delete.block'
|
|
2222
|
-
| 'delete.forward'
|
|
2223
|
-
| 'delete.text'
|
|
2224
|
-
| 'history.redo'
|
|
2225
|
-
| 'history.undo'
|
|
2226
|
-
| 'insert.blocks'
|
|
2227
|
-
| 'insert.block object'
|
|
2228
|
-
| 'insert.inline object'
|
|
2229
|
-
| 'insert.break'
|
|
2230
|
-
| 'insert.soft break'
|
|
2231
|
-
| 'insert.block'
|
|
2232
|
-
| 'insert.span'
|
|
2233
|
-
| 'insert.text'
|
|
2234
|
-
| 'insert.text block'
|
|
2235
|
-
| 'list item.add'
|
|
2236
|
-
| 'list item.remove'
|
|
2237
|
-
| 'list item.toggle'
|
|
2238
|
-
| 'move.block'
|
|
2239
|
-
| 'move.block down'
|
|
2240
|
-
| 'move.block up'
|
|
2241
|
-
| 'select.previous block'
|
|
2242
|
-
| 'select.next block'
|
|
2243
|
-
| 'style.add'
|
|
2244
|
-
| 'style.remove'
|
|
2245
|
-
| 'style.toggle'
|
|
2246
|
-
| 'text block.set'
|
|
2247
|
-
| 'text block.unset'
|
|
2248
|
-
| 'key.down'
|
|
2249
|
-
| 'key.up'
|
|
2250
|
-
| 'paste'
|
|
2251
|
-
| `custom.${string}`
|
|
2252
|
-
>
|
|
2253
|
-
>
|
|
2254
|
-
>
|
|
2140
|
+
behaviors: Set<Behavior>
|
|
2255
2141
|
converters: Set<Converter>
|
|
2256
2142
|
keyGenerator: () => string
|
|
2257
2143
|
pendingEvents: never[]
|
package/lib/plugins/index.cjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: !0 });
|
|
3
|
-
var reactCompilerRuntime = require("react-compiler-runtime"), React = require("react"), plugin_eventListener = require("../_chunks-cjs/plugin.event-listener.cjs"), behavior_markdown = require("../_chunks-cjs/behavior.markdown.cjs"), react = require("@xstate/react"), isEqual = require("lodash/isEqual.js"), xstate = require("xstate"), selector_isAtTheStartOfBlock = require("../_chunks-cjs/selector.is-at-the-start-of-block.cjs"),
|
|
3
|
+
var reactCompilerRuntime = require("react-compiler-runtime"), React = require("react"), plugin_eventListener = require("../_chunks-cjs/plugin.event-listener.cjs"), behavior_markdown = require("../_chunks-cjs/behavior.markdown.cjs"), react = require("@xstate/react"), isEqual = require("lodash/isEqual.js"), xstate = require("xstate"), selector_isAtTheStartOfBlock = require("../_chunks-cjs/selector.is-at-the-start-of-block.cjs"), util_sliceBlocks = require("../_chunks-cjs/util.slice-blocks.cjs"), selector_getTextBefore = require("../_chunks-cjs/selector.get-text-before.cjs"), behavior_core = require("../_chunks-cjs/behavior.core.cjs"), jsxRuntime = require("react/jsx-runtime"), utils_index = require("../utils/index.cjs");
|
|
4
4
|
function _interopDefaultCompat(e) {
|
|
5
5
|
return e && typeof e == "object" && "default" in e ? e : { default: e };
|
|
6
6
|
}
|
|
@@ -69,7 +69,7 @@ const emphasisListener = ({
|
|
|
69
69
|
context
|
|
70
70
|
}), selectionStartPoint = selector_isAtTheStartOfBlock.getSelectionStartPoint({
|
|
71
71
|
context
|
|
72
|
-
}), selectionStartOffset = selectionStartPoint ?
|
|
72
|
+
}), selectionStartOffset = selectionStartPoint ? util_sliceBlocks.spanSelectionPointToBlockOffset({
|
|
73
73
|
value: context.value,
|
|
74
74
|
selectionPoint: selectionStartPoint
|
|
75
75
|
}) : void 0;
|
|
@@ -97,11 +97,11 @@ const emphasisListener = ({
|
|
|
97
97
|
path: focusTextBlock.path,
|
|
98
98
|
offset: selectionStartOffset.offset + 1
|
|
99
99
|
}
|
|
100
|
-
}, anchor =
|
|
100
|
+
}, anchor = util_sliceBlocks.blockOffsetToSpanSelectionPoint({
|
|
101
101
|
value: context.value,
|
|
102
102
|
blockOffset: prefixOffsets.focus,
|
|
103
103
|
direction: "backward"
|
|
104
|
-
}), focus =
|
|
104
|
+
}), focus = util_sliceBlocks.blockOffsetToSpanSelectionPoint({
|
|
105
105
|
value: context.value,
|
|
106
106
|
blockOffset: suffixOffsets.anchor,
|
|
107
107
|
direction: "forward"
|
|
@@ -136,11 +136,11 @@ const emphasisListener = ({
|
|
|
136
136
|
path: focusTextBlock.path,
|
|
137
137
|
offset: selectionStartOffset.offset + 1
|
|
138
138
|
}
|
|
139
|
-
}, anchor =
|
|
139
|
+
}, anchor = util_sliceBlocks.blockOffsetToSpanSelectionPoint({
|
|
140
140
|
value: context.value,
|
|
141
141
|
blockOffset: prefixOffsets.focus,
|
|
142
142
|
direction: "backward"
|
|
143
|
-
}), focus =
|
|
143
|
+
}), focus = util_sliceBlocks.blockOffsetToSpanSelectionPoint({
|
|
144
144
|
value: context.value,
|
|
145
145
|
blockOffset: suffixOffsets.anchor,
|
|
146
146
|
direction: "forward"
|
|
@@ -201,10 +201,10 @@ const emphasisListener = ({
|
|
|
201
201
|
return {
|
|
202
202
|
blockOffsets: void 0
|
|
203
203
|
};
|
|
204
|
-
const anchor =
|
|
204
|
+
const anchor = util_sliceBlocks.spanSelectionPointToBlockOffset({
|
|
205
205
|
value: context.value,
|
|
206
206
|
selectionPoint: event.selection.anchor
|
|
207
|
-
}), focus =
|
|
207
|
+
}), focus = util_sliceBlocks.spanSelectionPointToBlockOffset({
|
|
208
208
|
value: context.value,
|
|
209
209
|
selectionPoint: event.selection.focus
|
|
210
210
|
});
|
|
@@ -404,13 +404,13 @@ const oneLineBehaviors = [
|
|
|
404
404
|
});
|
|
405
405
|
if (!focusTextBlock || !utils_index.isTextBlock(context, event.block) || !selectionStartPoint || !selectionEndPoint)
|
|
406
406
|
return !1;
|
|
407
|
-
const blockStartPoint =
|
|
407
|
+
const blockStartPoint = util_sliceBlocks.getBlockStartPoint(focusTextBlock), blockEndPoint = util_sliceBlocks.getBlockEndPoint(focusTextBlock), newFocus = util_sliceBlocks.getBlockEndPoint({
|
|
408
408
|
node: event.block,
|
|
409
409
|
path: [{
|
|
410
410
|
_key: event.block._key
|
|
411
411
|
}]
|
|
412
412
|
});
|
|
413
|
-
return
|
|
413
|
+
return util_sliceBlocks.isEqualSelectionPoints(blockStartPoint, selectionStartPoint) && util_sliceBlocks.isEqualSelectionPoints(blockEndPoint, selectionEndPoint) ? {
|
|
414
414
|
focusTextBlock,
|
|
415
415
|
newFocus
|
|
416
416
|
} : !1;
|
|
@@ -469,7 +469,7 @@ const oneLineBehaviors = [
|
|
|
469
469
|
context,
|
|
470
470
|
targetBlock: blockBeforeStartPoint,
|
|
471
471
|
incomingBlock: event.block
|
|
472
|
-
}), newFocus =
|
|
472
|
+
}), newFocus = util_sliceBlocks.getBlockEndPoint({
|
|
473
473
|
node: targetBlock,
|
|
474
474
|
path: [{
|
|
475
475
|
_key: targetBlock._key
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../../src/plugins/plugin.behavior.tsx","../../src/plugins/plugin.editor-ref.tsx","../../src/internal-utils/get-text-to-emphasize.ts","../../src/behaviors/behavior.markdown-emphasis.ts","../../src/plugins/plugin.markdown.tsx","../../src/plugins/plugin.one-line.tsx"],"sourcesContent":["import {useEffect} from 'react'\nimport type {Behavior} from '../behaviors'\nimport {useEditor} from '../editor/editor-provider'\n\n/**\n * @beta\n */\nexport function BehaviorPlugin(props: {behaviors: Array<Behavior>}) {\n const editor = useEditor()\n\n useEffect(() => {\n const unregisterBehaviors = props.behaviors.map((behavior) =>\n editor.registerBehavior({behavior}),\n )\n\n return () => {\n unregisterBehaviors.forEach((unregister) => unregister())\n }\n }, [editor, props.behaviors])\n\n return null\n}\n","import React from 'react'\nimport type {Editor} from '../editor/create-editor'\nimport {useEditor} from '../editor/editor-provider'\n\n/**\n * @beta\n */\nexport const EditorRefPlugin = React.forwardRef<Editor | null>((_, ref) => {\n const editor = useEditor()\n\n const portableTextEditorRef = React.useRef(editor)\n\n React.useImperativeHandle(ref, () => portableTextEditorRef.current, [])\n\n return null\n})\nEditorRefPlugin.displayName = 'EditorRefPlugin'\n","const asteriskPairRegex = '(?<!\\\\*)\\\\*(?!\\\\s)([^*\\\\n]+?)(?<!\\\\s)\\\\*(?!\\\\*)'\nconst underscorePairRegex = '(?<!_)_(?!\\\\s)([^_\\\\n]+?)(?<!\\\\s)_(?!_)'\nconst italicRegex = new RegExp(`(${asteriskPairRegex}|${underscorePairRegex})$`)\n\nconst doubleAsteriskPairRegex =\n '(?<!\\\\*)\\\\*\\\\*(?!\\\\s)([^*\\\\n]+?)(?<!\\\\s)\\\\*\\\\*(?!\\\\*)'\nconst doubleUnderscorePairRegex = '(?<!_)__(?!\\\\s)([^_\\\\n]+?)(?<!\\\\s)__(?!_)'\nconst boldRegex = new RegExp(\n `(${doubleAsteriskPairRegex}|${doubleUnderscorePairRegex})$`,\n)\n\nexport function getTextToItalic(text: string) {\n return text.match(italicRegex)?.at(0)\n}\n\nexport function getTextToBold(text: string) {\n return text.match(boldRegex)?.at(0)\n}\n","import {useActorRef} from '@xstate/react'\nimport {isEqual} from 'lodash'\nimport {\n assign,\n fromCallback,\n setup,\n type AnyEventObject,\n type CallbackLogicFunction,\n} from 'xstate'\nimport type {Editor} from '../editor/create-editor'\nimport {useEditor} from '../editor/editor-provider'\nimport {\n getTextToBold,\n getTextToItalic,\n} from '../internal-utils/get-text-to-emphasize'\nimport type {EditorSchema} from '../selectors'\nimport * as selectors from '../selectors'\nimport * as utils from '../utils'\nimport {defineBehavior} from './behavior.types'\n\n/**\n * @beta\n */\nexport type MarkdownEmphasisBehaviorsConfig = {\n boldDecorator?: ({schema}: {schema: EditorSchema}) => string | undefined\n italicDecorator?: ({schema}: {schema: EditorSchema}) => string | undefined\n}\n\n/**\n * @beta\n */\nexport function useMarkdownEmphasisBehaviors(props: {\n config: MarkdownEmphasisBehaviorsConfig\n}) {\n const editor = useEditor()\n\n useActorRef(emphasisMachine, {\n input: {\n editor,\n boldDecorator: props.config.boldDecorator?.({\n schema: editor.getSnapshot().context.schema,\n }),\n italicDecorator: props.config.italicDecorator?.({\n schema: editor.getSnapshot().context.schema,\n }),\n },\n })\n}\n\ntype MarkdownEmphasisEvent =\n | {\n type: 'emphasis.add'\n blockOffset: utils.BlockOffset\n }\n | {\n type: 'selection'\n blockOffsets?: {\n anchor: utils.BlockOffset\n focus: utils.BlockOffset\n }\n }\n | {\n type: 'delete.backward'\n }\n\nconst emphasisListener: CallbackLogicFunction<\n AnyEventObject,\n MarkdownEmphasisEvent,\n {editor: Editor; boldDecorator?: string; italicDecorator?: string}\n> = ({sendBack, input}) => {\n const unregister = input.editor.registerBehavior({\n behavior: defineBehavior({\n on: 'insert.text',\n guard: ({context, event}) => {\n const boldDecorator = input.boldDecorator\n const italicDecorator = input.italicDecorator\n\n if (boldDecorator === undefined && italicDecorator === undefined) {\n return false\n }\n\n if (event.text !== '*' && event.text !== '_') {\n return false\n }\n\n const focusTextBlock = selectors.getFocusTextBlock({context})\n const selectionStartPoint = selectors.getSelectionStartPoint({context})\n const selectionStartOffset = selectionStartPoint\n ? utils.spanSelectionPointToBlockOffset({\n value: context.value,\n selectionPoint: selectionStartPoint,\n })\n : undefined\n\n if (!focusTextBlock || !selectionStartOffset) {\n return false\n }\n\n const textBefore = selectors.getBlockTextBefore({context})\n\n const textToItalic = getTextToItalic(`${textBefore}${event.text}`)\n\n if (textToItalic !== undefined && italicDecorator !== undefined) {\n const prefixOffsets = {\n anchor: {\n path: focusTextBlock.path,\n offset: textBefore.length - textToItalic.length + 1,\n },\n focus: {\n path: focusTextBlock.path,\n offset: textBefore.length - textToItalic.length + 1 + 1,\n },\n }\n const suffixOffsets = {\n anchor: {\n path: focusTextBlock.path,\n offset: selectionStartOffset.offset,\n },\n focus: {\n path: focusTextBlock.path,\n offset: selectionStartOffset.offset + 1,\n },\n }\n\n const anchor = utils.blockOffsetToSpanSelectionPoint({\n value: context.value,\n blockOffset: prefixOffsets.focus,\n direction: 'backward',\n })\n const focus = utils.blockOffsetToSpanSelectionPoint({\n value: context.value,\n blockOffset: suffixOffsets.anchor,\n direction: 'forward',\n })\n\n if (!anchor || !focus) {\n return false\n }\n\n return {\n prefixOffsets,\n suffixOffsets,\n decorator: italicDecorator,\n selection: {anchor, focus},\n }\n }\n\n const textToBold = getTextToBold(`${textBefore}${event.text}`)\n\n if (textToBold !== undefined && boldDecorator !== undefined) {\n const prefixOffsets = {\n anchor: {\n path: focusTextBlock.path,\n offset: textBefore.length - textToBold.length + 1,\n },\n focus: {\n path: focusTextBlock.path,\n offset: textBefore.length - textToBold.length + 1 + 2,\n },\n }\n const suffixOffsets = {\n anchor: {\n path: focusTextBlock.path,\n offset: selectionStartOffset.offset - 1,\n },\n focus: {\n path: focusTextBlock.path,\n offset: selectionStartOffset.offset + 1,\n },\n }\n const anchor = utils.blockOffsetToSpanSelectionPoint({\n value: context.value,\n blockOffset: prefixOffsets.focus,\n direction: 'backward',\n })\n const focus = utils.blockOffsetToSpanSelectionPoint({\n value: context.value,\n blockOffset: suffixOffsets.anchor,\n direction: 'forward',\n })\n\n if (!anchor || !focus) {\n return false\n }\n\n return {\n prefixOffsets,\n suffixOffsets,\n decorator: boldDecorator,\n selection: {anchor, focus},\n }\n }\n\n return false\n },\n actions: [\n ({event}) => [event],\n (_, {prefixOffsets, suffixOffsets, decorator, selection}) => [\n {\n type: 'decorator.add',\n decorator,\n selection,\n },\n {\n type: 'delete.text',\n ...suffixOffsets,\n },\n {\n type: 'delete.text',\n ...prefixOffsets,\n },\n {\n type: 'effect',\n effect: () => {\n sendBack({\n type: 'emphasis.add',\n blockOffset: {\n ...suffixOffsets.anchor,\n offset:\n suffixOffsets.anchor.offset -\n (prefixOffsets.focus.offset - prefixOffsets.anchor.offset),\n },\n })\n },\n },\n ],\n ],\n }),\n })\n\n return unregister\n}\n\nconst selectionListenerCallback: CallbackLogicFunction<\n AnyEventObject,\n MarkdownEmphasisEvent,\n {editor: Editor}\n> = ({sendBack, input}) => {\n const unregister = input.editor.registerBehavior({\n behavior: defineBehavior({\n on: 'select',\n guard: ({context, event}) => {\n if (!event.selection) {\n return {blockOffsets: undefined}\n }\n\n const anchor = utils.spanSelectionPointToBlockOffset({\n value: context.value,\n selectionPoint: event.selection.anchor,\n })\n const focus = utils.spanSelectionPointToBlockOffset({\n value: context.value,\n selectionPoint: event.selection.focus,\n })\n\n if (!anchor || !focus) {\n return {blockOffsets: undefined}\n }\n\n return {\n blockOffsets: {\n anchor,\n focus,\n },\n }\n },\n actions: [\n (_, {blockOffsets}) => [\n {\n type: 'effect',\n effect: () => {\n sendBack({type: 'selection', blockOffsets})\n },\n },\n ],\n ],\n }),\n })\n\n return unregister\n}\n\nconst deleteBackwardListenerCallback: CallbackLogicFunction<\n AnyEventObject,\n MarkdownEmphasisEvent,\n {editor: Editor}\n> = ({sendBack, input}) => {\n const unregister = input.editor.registerBehavior({\n behavior: defineBehavior({\n on: 'delete.backward',\n actions: [\n () => [\n {\n type: 'history.undo',\n },\n {\n type: 'effect',\n effect: () => {\n sendBack({type: 'delete.backward'})\n },\n },\n ],\n ],\n }),\n })\n\n return unregister\n}\n\nconst emphasisMachine = setup({\n types: {\n context: {} as {\n boldDecorator?: string\n italicDecorator?: string\n offsetAfterEmphasis?: utils.BlockOffset\n editor: Editor\n },\n input: {} as {\n boldDecorator?: string\n italicDecorator?: string\n editor: Editor\n },\n events: {} as MarkdownEmphasisEvent,\n },\n actors: {\n 'emphasis listener': fromCallback(emphasisListener),\n 'delete.backward listener': fromCallback(deleteBackwardListenerCallback),\n 'selection listener': fromCallback(selectionListenerCallback),\n },\n}).createMachine({\n id: 'emphasis',\n context: ({input}) => ({\n boldDecorator: input.boldDecorator,\n italicDecorator: input.italicDecorator,\n editor: input.editor,\n }),\n initial: 'idle',\n states: {\n 'idle': {\n invoke: [\n {\n src: 'emphasis listener',\n input: ({context}) => ({\n editor: context.editor,\n boldDecorator: context.boldDecorator,\n italicDecorator: context.italicDecorator,\n }),\n },\n ],\n on: {\n 'emphasis.add': {\n target: 'emphasis added',\n actions: assign({\n offsetAfterEmphasis: ({event}) => event.blockOffset,\n }),\n },\n },\n },\n 'emphasis added': {\n exit: [\n assign({\n offsetAfterEmphasis: undefined,\n }),\n ],\n invoke: [\n {\n src: 'selection listener',\n input: ({context}) => ({editor: context.editor}),\n },\n {\n src: 'delete.backward listener',\n input: ({context}) => ({editor: context.editor}),\n },\n ],\n on: {\n 'selection': {\n target: 'idle',\n guard: ({context, event}) => {\n const selectionChanged = !isEqual(\n {\n anchor: context.offsetAfterEmphasis,\n focus: context.offsetAfterEmphasis,\n },\n event.blockOffsets,\n )\n\n return selectionChanged\n },\n },\n 'delete.backward': {\n target: 'idle',\n },\n },\n },\n },\n})\n","import {useEffect} from 'react'\nimport {\n createMarkdownBehaviors,\n type MarkdownBehaviorsConfig,\n} from '../behaviors/behavior.markdown'\nimport {\n useMarkdownEmphasisBehaviors,\n type MarkdownEmphasisBehaviorsConfig,\n} from '../behaviors/behavior.markdown-emphasis'\nimport {useEditor} from '../editor/editor-provider'\n\n/**\n * @beta\n */\nexport type MarkdownPluginConfig = MarkdownBehaviorsConfig &\n MarkdownEmphasisBehaviorsConfig\n\n/**\n * @beta\n * Add 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 {MarkdownPlugin} from '@portabletext/editor/plugins'\n *\n * function App() {\n * return (\n * <EditorProvider>\n * <MarkdownPlugin\n * config={{\n * boldDecorator: ({schema}) =>\n * schema.decorators.find((decorator) => decorator.value === 'strong')?.value,\n * italicDecorator: ({schema}) =>\n * schema.decorators.find((decorator) => decorator.value === 'em')?.value,\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 * </EditorProvider>\n * )\n * }\n */\nexport function MarkdownPlugin(props: {config: MarkdownPluginConfig}) {\n const editor = useEditor()\n useMarkdownEmphasisBehaviors({config: props.config})\n\n useEffect(() => {\n const behaviors = createMarkdownBehaviors(props.config)\n\n const unregisterBehaviors = behaviors.map((behavior) =>\n editor.registerBehavior({behavior}),\n )\n\n return () => {\n for (const unregisterBehavior of unregisterBehaviors) {\n unregisterBehavior()\n }\n }\n }, [editor, props.config])\n\n return null\n}\n","import {defineBehavior, raise} from '../behaviors'\nimport * as selectors from '../selectors'\nimport * as utils from '../utils'\nimport {BehaviorPlugin} from './plugin.behavior'\n\nconst oneLineBehaviors = [\n /**\n * Hitting Enter on an expanded selection should just delete that selection\n * without causing a line break.\n */\n defineBehavior({\n on: 'insert.break',\n guard: ({context}) =>\n context.selection && selectors.isSelectionExpanded({context})\n ? {selection: context.selection}\n : false,\n actions: [(_, {selection}) => [{type: 'delete', selection}]],\n }),\n /**\n * All other cases of `insert.break` should be aborted.\n */\n defineBehavior({\n on: 'insert.break',\n actions: [() => [{type: 'noop'}]],\n }),\n /**\n * `insert.block` `before` or `after` is not allowed in a one-line editor.\n */\n defineBehavior({\n on: 'insert.block',\n guard: ({event}) =>\n event.placement === 'before' || event.placement === 'after',\n actions: [() => [{type: 'noop'}]],\n }),\n /**\n * Other cases of `insert.block` are allowed.\n *\n * If a text block is inserted and the focus block is fully selected, then\n * the focus block can be replaced with the inserted block.\n */\n defineBehavior({\n on: 'insert.block',\n guard: ({context, event}) => {\n const focusTextBlock = selectors.getFocusTextBlock({context})\n const selectionStartPoint = selectors.getSelectionStartPoint({context})\n const selectionEndPoint = selectors.getSelectionEndPoint({context})\n\n if (\n !focusTextBlock ||\n !utils.isTextBlock(context, event.block) ||\n !selectionStartPoint ||\n !selectionEndPoint\n ) {\n return false\n }\n\n const blockStartPoint = utils.getBlockStartPoint(focusTextBlock)\n const blockEndPoint = utils.getBlockEndPoint(focusTextBlock)\n const newFocus = utils.getBlockEndPoint({\n node: event.block,\n path: [{_key: event.block._key}],\n })\n\n if (\n utils.isEqualSelectionPoints(blockStartPoint, selectionStartPoint) &&\n utils.isEqualSelectionPoints(blockEndPoint, selectionEndPoint)\n ) {\n return {focusTextBlock, newFocus}\n }\n\n return false\n },\n actions: [\n ({event}, {focusTextBlock, newFocus}) => [\n {type: 'delete.block', blockPath: focusTextBlock.path},\n {type: 'insert.block', block: event.block, placement: 'auto'},\n {\n type: 'select',\n selection: {\n anchor: newFocus,\n focus: newFocus,\n },\n },\n ],\n ],\n }),\n /**\n * An ordinary `insert.block` is acceptable if it's a text block. In that\n * case it will get merged into the existing text block.\n */\n defineBehavior({\n on: 'insert.block',\n guard: ({context, event}) => {\n const focusTextBlock = selectors.getFocusTextBlock({context})\n const selectionStartPoint = selectors.getSelectionStartPoint({context})\n const selectionEndPoint = selectors.getSelectionEndPoint({context})\n\n if (\n !focusTextBlock ||\n !utils.isTextBlock(context, event.block) ||\n !selectionStartPoint ||\n !selectionEndPoint\n ) {\n return false\n }\n\n const blockBeforeStartPoint = utils.splitTextBlock({\n context,\n block: focusTextBlock.node,\n point: selectionStartPoint,\n })?.before\n const blockAfterEndPoint = utils.splitTextBlock({\n context,\n block: focusTextBlock.node,\n point: selectionEndPoint,\n })?.after\n\n if (!blockBeforeStartPoint || !blockAfterEndPoint) {\n return false\n }\n\n const targetBlock = utils.mergeTextBlocks({\n context,\n targetBlock: blockBeforeStartPoint,\n incomingBlock: event.block,\n })\n\n const newFocus = utils.getBlockEndPoint({\n node: targetBlock,\n path: [{_key: targetBlock._key}],\n })\n\n const mergedBlock = utils.mergeTextBlocks({\n context,\n targetBlock,\n incomingBlock: blockAfterEndPoint,\n })\n\n return {focusTextBlock, mergedBlock, newFocus}\n },\n actions: [\n (_, {focusTextBlock, mergedBlock, newFocus}) => [\n {type: 'delete.block', blockPath: focusTextBlock.path},\n {type: 'insert.block', block: mergedBlock, placement: 'auto'},\n {\n type: 'select',\n selection: {\n anchor: newFocus,\n focus: newFocus,\n },\n },\n ],\n ],\n }),\n /**\n * Fallback Behavior to avoid `insert.block` in case the Behaviors above all\n * end up with a falsy guard.\n */\n defineBehavior({\n on: 'insert.block',\n actions: [() => [{type: 'noop'}]],\n }),\n /**\n * If multiple blocks are inserted, then the non-text blocks are filtered out\n * and the text blocks are merged into one block\n */\n defineBehavior({\n on: 'insert.blocks',\n guard: ({context, event}) => {\n return event.blocks\n .filter((block) => utils.isTextBlock(context, block))\n .reduce((targetBlock, incomingBlock) => {\n return utils.mergeTextBlocks({\n context,\n targetBlock,\n incomingBlock,\n })\n })\n },\n actions: [\n // `insert.block` is raised so the Behavior above can handle the\n // insertion\n (_, block) => [raise({type: 'insert.block', block, placement: 'auto'})],\n ],\n }),\n /**\n * Block objects do not fit in a one-line editor\n */\n defineBehavior({\n on: 'insert.block object',\n actions: [() => [{type: 'noop'}]],\n }),\n /**\n * `insert.text block` is raised as an `insert.block` so it can be handled\n * by the Behaviors above.\n */\n defineBehavior({\n on: 'insert.text block',\n actions: [\n ({context, event}) => [\n raise({\n type: 'insert.block',\n block: {\n _key: context.keyGenerator(),\n _type: context.schema.block.name,\n children: event.textBlock?.children ?? [],\n },\n placement: event.placement,\n }),\n ],\n ],\n }),\n]\n\n/**\n * @beta\n * Restrict the editor to one line. The plugin takes care of blocking\n * `insert.break` events and smart handling of other `insert.*` events.\n *\n * Place it with as high priority as possible to make sure other plugins don't\n * overwrite `insert.*` events before this plugin gets a chance to do so.\n */\nexport function OneLinePlugin() {\n return <BehaviorPlugin behaviors={oneLineBehaviors} />\n}\n"],"names":["BehaviorPlugin","props","$","_c","editor","useEditor","t0","t1","behaviors","unregisterBehaviors","map","behavior","registerBehavior","forEach","_temp","useEffect","unregister","EditorRefPlugin","React","forwardRef","_","ref","portableTextEditorRef","useRef","Symbol","for","current","useImperativeHandle","displayName","asteriskPairRegex","underscorePairRegex","italicRegex","RegExp","doubleAsteriskPairRegex","doubleUnderscorePairRegex","boldRegex","getTextToItalic","text","match","at","getTextToBold","useMarkdownEmphasisBehaviors","config","boldDecorator","schema","getSnapshot","context","italicDecorator","t2","input","useActorRef","emphasisMachine","emphasisListener","sendBack","defineBehavior","on","guard","event","undefined","focusTextBlock","selectors","selectionStartPoint","selectionStartOffset","utils","value","selectionPoint","textBefore","textToItalic","prefixOffsets","anchor","path","offset","length","focus","suffixOffsets","blockOffset","direction","decorator","selection","textToBold","actions","type","effect","selectionListenerCallback","blockOffsets","deleteBackwardListenerCallback","setup","types","events","actors","fromCallback","createMachine","id","initial","states","invoke","src","target","assign","offsetAfterEmphasis","exit","isEqual","MarkdownPlugin","createMarkdownBehaviors","unregisterBehavior","oneLineBehaviors","placement","selectionEndPoint","block","blockStartPoint","blockEndPoint","newFocus","node","_key","blockPath","blockBeforeStartPoint","point","before","blockAfterEndPoint","after","targetBlock","incomingBlock","mergedBlock","blocks","filter","reduce","raise","keyGenerator","_type","name","children","textBlock","OneLinePlugin","jsx"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../src/plugins/plugin.behavior.tsx","../../src/plugins/plugin.editor-ref.tsx","../../src/internal-utils/get-text-to-emphasize.ts","../../src/behaviors/behavior.markdown-emphasis.ts","../../src/plugins/plugin.markdown.tsx","../../src/plugins/plugin.one-line.tsx"],"sourcesContent":["import {useEffect} from 'react'\nimport type {Behavior} from '../behaviors'\nimport {useEditor} from '../editor/editor-provider'\n\n/**\n * @beta\n */\nexport function BehaviorPlugin(props: {behaviors: Array<Behavior>}) {\n const editor = useEditor()\n\n useEffect(() => {\n const unregisterBehaviors = props.behaviors.map((behavior) =>\n editor.registerBehavior({behavior}),\n )\n\n return () => {\n unregisterBehaviors.forEach((unregister) => unregister())\n }\n }, [editor, props.behaviors])\n\n return null\n}\n","import React from 'react'\nimport type {Editor} from '../editor/create-editor'\nimport {useEditor} from '../editor/editor-provider'\n\n/**\n * @beta\n */\nexport const EditorRefPlugin = React.forwardRef<Editor | null>((_, ref) => {\n const editor = useEditor()\n\n const portableTextEditorRef = React.useRef(editor)\n\n React.useImperativeHandle(ref, () => portableTextEditorRef.current, [])\n\n return null\n})\nEditorRefPlugin.displayName = 'EditorRefPlugin'\n","const asteriskPairRegex = '(?<!\\\\*)\\\\*(?!\\\\s)([^*\\\\n]+?)(?<!\\\\s)\\\\*(?!\\\\*)'\nconst underscorePairRegex = '(?<!_)_(?!\\\\s)([^_\\\\n]+?)(?<!\\\\s)_(?!_)'\nconst italicRegex = new RegExp(`(${asteriskPairRegex}|${underscorePairRegex})$`)\n\nconst doubleAsteriskPairRegex =\n '(?<!\\\\*)\\\\*\\\\*(?!\\\\s)([^*\\\\n]+?)(?<!\\\\s)\\\\*\\\\*(?!\\\\*)'\nconst doubleUnderscorePairRegex = '(?<!_)__(?!\\\\s)([^_\\\\n]+?)(?<!\\\\s)__(?!_)'\nconst boldRegex = new RegExp(\n `(${doubleAsteriskPairRegex}|${doubleUnderscorePairRegex})$`,\n)\n\nexport function getTextToItalic(text: string) {\n return text.match(italicRegex)?.at(0)\n}\n\nexport function getTextToBold(text: string) {\n return text.match(boldRegex)?.at(0)\n}\n","import {useActorRef} from '@xstate/react'\nimport {isEqual} from 'lodash'\nimport {\n assign,\n fromCallback,\n setup,\n type AnyEventObject,\n type CallbackLogicFunction,\n} from 'xstate'\nimport type {Editor} from '../editor/create-editor'\nimport {useEditor} from '../editor/editor-provider'\nimport {\n getTextToBold,\n getTextToItalic,\n} from '../internal-utils/get-text-to-emphasize'\nimport type {EditorSchema} from '../selectors'\nimport * as selectors from '../selectors'\nimport * as utils from '../utils'\nimport {defineBehavior} from './behavior.types'\n\n/**\n * @beta\n */\nexport type MarkdownEmphasisBehaviorsConfig = {\n boldDecorator?: ({schema}: {schema: EditorSchema}) => string | undefined\n italicDecorator?: ({schema}: {schema: EditorSchema}) => string | undefined\n}\n\n/**\n * @beta\n */\nexport function useMarkdownEmphasisBehaviors(props: {\n config: MarkdownEmphasisBehaviorsConfig\n}) {\n const editor = useEditor()\n\n useActorRef(emphasisMachine, {\n input: {\n editor,\n boldDecorator: props.config.boldDecorator?.({\n schema: editor.getSnapshot().context.schema,\n }),\n italicDecorator: props.config.italicDecorator?.({\n schema: editor.getSnapshot().context.schema,\n }),\n },\n })\n}\n\ntype MarkdownEmphasisEvent =\n | {\n type: 'emphasis.add'\n blockOffset: utils.BlockOffset\n }\n | {\n type: 'selection'\n blockOffsets?: {\n anchor: utils.BlockOffset\n focus: utils.BlockOffset\n }\n }\n | {\n type: 'delete.backward'\n }\n\nconst emphasisListener: CallbackLogicFunction<\n AnyEventObject,\n MarkdownEmphasisEvent,\n {editor: Editor; boldDecorator?: string; italicDecorator?: string}\n> = ({sendBack, input}) => {\n const unregister = input.editor.registerBehavior({\n behavior: defineBehavior({\n on: 'insert.text',\n guard: ({context, event}) => {\n const boldDecorator = input.boldDecorator\n const italicDecorator = input.italicDecorator\n\n if (boldDecorator === undefined && italicDecorator === undefined) {\n return false\n }\n\n if (event.text !== '*' && event.text !== '_') {\n return false\n }\n\n const focusTextBlock = selectors.getFocusTextBlock({context})\n const selectionStartPoint = selectors.getSelectionStartPoint({context})\n const selectionStartOffset = selectionStartPoint\n ? utils.spanSelectionPointToBlockOffset({\n value: context.value,\n selectionPoint: selectionStartPoint,\n })\n : undefined\n\n if (!focusTextBlock || !selectionStartOffset) {\n return false\n }\n\n const textBefore = selectors.getBlockTextBefore({context})\n\n const textToItalic = getTextToItalic(`${textBefore}${event.text}`)\n\n if (textToItalic !== undefined && italicDecorator !== undefined) {\n const prefixOffsets = {\n anchor: {\n path: focusTextBlock.path,\n offset: textBefore.length - textToItalic.length + 1,\n },\n focus: {\n path: focusTextBlock.path,\n offset: textBefore.length - textToItalic.length + 1 + 1,\n },\n }\n const suffixOffsets = {\n anchor: {\n path: focusTextBlock.path,\n offset: selectionStartOffset.offset,\n },\n focus: {\n path: focusTextBlock.path,\n offset: selectionStartOffset.offset + 1,\n },\n }\n\n const anchor = utils.blockOffsetToSpanSelectionPoint({\n value: context.value,\n blockOffset: prefixOffsets.focus,\n direction: 'backward',\n })\n const focus = utils.blockOffsetToSpanSelectionPoint({\n value: context.value,\n blockOffset: suffixOffsets.anchor,\n direction: 'forward',\n })\n\n if (!anchor || !focus) {\n return false\n }\n\n return {\n prefixOffsets,\n suffixOffsets,\n decorator: italicDecorator,\n selection: {anchor, focus},\n }\n }\n\n const textToBold = getTextToBold(`${textBefore}${event.text}`)\n\n if (textToBold !== undefined && boldDecorator !== undefined) {\n const prefixOffsets = {\n anchor: {\n path: focusTextBlock.path,\n offset: textBefore.length - textToBold.length + 1,\n },\n focus: {\n path: focusTextBlock.path,\n offset: textBefore.length - textToBold.length + 1 + 2,\n },\n }\n const suffixOffsets = {\n anchor: {\n path: focusTextBlock.path,\n offset: selectionStartOffset.offset - 1,\n },\n focus: {\n path: focusTextBlock.path,\n offset: selectionStartOffset.offset + 1,\n },\n }\n const anchor = utils.blockOffsetToSpanSelectionPoint({\n value: context.value,\n blockOffset: prefixOffsets.focus,\n direction: 'backward',\n })\n const focus = utils.blockOffsetToSpanSelectionPoint({\n value: context.value,\n blockOffset: suffixOffsets.anchor,\n direction: 'forward',\n })\n\n if (!anchor || !focus) {\n return false\n }\n\n return {\n prefixOffsets,\n suffixOffsets,\n decorator: boldDecorator,\n selection: {anchor, focus},\n }\n }\n\n return false\n },\n actions: [\n ({event}) => [event],\n (_, {prefixOffsets, suffixOffsets, decorator, selection}) => [\n {\n type: 'decorator.add',\n decorator,\n selection,\n },\n {\n type: 'delete.text',\n ...suffixOffsets,\n },\n {\n type: 'delete.text',\n ...prefixOffsets,\n },\n {\n type: 'effect',\n effect: () => {\n sendBack({\n type: 'emphasis.add',\n blockOffset: {\n ...suffixOffsets.anchor,\n offset:\n suffixOffsets.anchor.offset -\n (prefixOffsets.focus.offset - prefixOffsets.anchor.offset),\n },\n })\n },\n },\n ],\n ],\n }),\n })\n\n return unregister\n}\n\nconst selectionListenerCallback: CallbackLogicFunction<\n AnyEventObject,\n MarkdownEmphasisEvent,\n {editor: Editor}\n> = ({sendBack, input}) => {\n const unregister = input.editor.registerBehavior({\n behavior: defineBehavior({\n on: 'select',\n guard: ({context, event}) => {\n if (!event.selection) {\n return {blockOffsets: undefined}\n }\n\n const anchor = utils.spanSelectionPointToBlockOffset({\n value: context.value,\n selectionPoint: event.selection.anchor,\n })\n const focus = utils.spanSelectionPointToBlockOffset({\n value: context.value,\n selectionPoint: event.selection.focus,\n })\n\n if (!anchor || !focus) {\n return {blockOffsets: undefined}\n }\n\n return {\n blockOffsets: {\n anchor,\n focus,\n },\n }\n },\n actions: [\n (_, {blockOffsets}) => [\n {\n type: 'effect',\n effect: () => {\n sendBack({type: 'selection', blockOffsets})\n },\n },\n ],\n ],\n }),\n })\n\n return unregister\n}\n\nconst deleteBackwardListenerCallback: CallbackLogicFunction<\n AnyEventObject,\n MarkdownEmphasisEvent,\n {editor: Editor}\n> = ({sendBack, input}) => {\n const unregister = input.editor.registerBehavior({\n behavior: defineBehavior({\n on: 'delete.backward',\n actions: [\n () => [\n {\n type: 'history.undo',\n },\n {\n type: 'effect',\n effect: () => {\n sendBack({type: 'delete.backward'})\n },\n },\n ],\n ],\n }),\n })\n\n return unregister\n}\n\nconst emphasisMachine = setup({\n types: {\n context: {} as {\n boldDecorator?: string\n italicDecorator?: string\n offsetAfterEmphasis?: utils.BlockOffset\n editor: Editor\n },\n input: {} as {\n boldDecorator?: string\n italicDecorator?: string\n editor: Editor\n },\n events: {} as MarkdownEmphasisEvent,\n },\n actors: {\n 'emphasis listener': fromCallback(emphasisListener),\n 'delete.backward listener': fromCallback(deleteBackwardListenerCallback),\n 'selection listener': fromCallback(selectionListenerCallback),\n },\n}).createMachine({\n id: 'emphasis',\n context: ({input}) => ({\n boldDecorator: input.boldDecorator,\n italicDecorator: input.italicDecorator,\n editor: input.editor,\n }),\n initial: 'idle',\n states: {\n 'idle': {\n invoke: [\n {\n src: 'emphasis listener',\n input: ({context}) => ({\n editor: context.editor,\n boldDecorator: context.boldDecorator,\n italicDecorator: context.italicDecorator,\n }),\n },\n ],\n on: {\n 'emphasis.add': {\n target: 'emphasis added',\n actions: assign({\n offsetAfterEmphasis: ({event}) => event.blockOffset,\n }),\n },\n },\n },\n 'emphasis added': {\n exit: [\n assign({\n offsetAfterEmphasis: undefined,\n }),\n ],\n invoke: [\n {\n src: 'selection listener',\n input: ({context}) => ({editor: context.editor}),\n },\n {\n src: 'delete.backward listener',\n input: ({context}) => ({editor: context.editor}),\n },\n ],\n on: {\n 'selection': {\n target: 'idle',\n guard: ({context, event}) => {\n const selectionChanged = !isEqual(\n {\n anchor: context.offsetAfterEmphasis,\n focus: context.offsetAfterEmphasis,\n },\n event.blockOffsets,\n )\n\n return selectionChanged\n },\n },\n 'delete.backward': {\n target: 'idle',\n },\n },\n },\n },\n})\n","import {useEffect} from 'react'\nimport {\n createMarkdownBehaviors,\n type MarkdownBehaviorsConfig,\n} from '../behaviors/behavior.markdown'\nimport {\n useMarkdownEmphasisBehaviors,\n type MarkdownEmphasisBehaviorsConfig,\n} from '../behaviors/behavior.markdown-emphasis'\nimport {useEditor} from '../editor/editor-provider'\n\n/**\n * @beta\n */\nexport type MarkdownPluginConfig = MarkdownBehaviorsConfig &\n MarkdownEmphasisBehaviorsConfig\n\n/**\n * @beta\n * Add 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 {MarkdownPlugin} from '@portabletext/editor/plugins'\n *\n * function App() {\n * return (\n * <EditorProvider>\n * <MarkdownPlugin\n * config={{\n * boldDecorator: ({schema}) =>\n * schema.decorators.find((decorator) => decorator.value === 'strong')?.value,\n * italicDecorator: ({schema}) =>\n * schema.decorators.find((decorator) => decorator.value === 'em')?.value,\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 * </EditorProvider>\n * )\n * }\n */\nexport function MarkdownPlugin(props: {config: MarkdownPluginConfig}) {\n const editor = useEditor()\n useMarkdownEmphasisBehaviors({config: props.config})\n\n useEffect(() => {\n const behaviors = createMarkdownBehaviors(props.config)\n\n const unregisterBehaviors = behaviors.map((behavior) =>\n editor.registerBehavior({behavior}),\n )\n\n return () => {\n for (const unregisterBehavior of unregisterBehaviors) {\n unregisterBehavior()\n }\n }\n }, [editor, props.config])\n\n return null\n}\n","import {defineBehavior, raise} from '../behaviors'\nimport * as selectors from '../selectors'\nimport * as utils from '../utils'\nimport {BehaviorPlugin} from './plugin.behavior'\n\nconst oneLineBehaviors = [\n /**\n * Hitting Enter on an expanded selection should just delete that selection\n * without causing a line break.\n */\n defineBehavior({\n on: 'insert.break',\n guard: ({context}) =>\n context.selection && selectors.isSelectionExpanded({context})\n ? {selection: context.selection}\n : false,\n actions: [(_, {selection}) => [{type: 'delete', selection}]],\n }),\n /**\n * All other cases of `insert.break` should be aborted.\n */\n defineBehavior({\n on: 'insert.break',\n actions: [() => [{type: 'noop'}]],\n }),\n /**\n * `insert.block` `before` or `after` is not allowed in a one-line editor.\n */\n defineBehavior({\n on: 'insert.block',\n guard: ({event}) =>\n event.placement === 'before' || event.placement === 'after',\n actions: [() => [{type: 'noop'}]],\n }),\n /**\n * Other cases of `insert.block` are allowed.\n *\n * If a text block is inserted and the focus block is fully selected, then\n * the focus block can be replaced with the inserted block.\n */\n defineBehavior({\n on: 'insert.block',\n guard: ({context, event}) => {\n const focusTextBlock = selectors.getFocusTextBlock({context})\n const selectionStartPoint = selectors.getSelectionStartPoint({context})\n const selectionEndPoint = selectors.getSelectionEndPoint({context})\n\n if (\n !focusTextBlock ||\n !utils.isTextBlock(context, event.block) ||\n !selectionStartPoint ||\n !selectionEndPoint\n ) {\n return false\n }\n\n const blockStartPoint = utils.getBlockStartPoint(focusTextBlock)\n const blockEndPoint = utils.getBlockEndPoint(focusTextBlock)\n const newFocus = utils.getBlockEndPoint({\n node: event.block,\n path: [{_key: event.block._key}],\n })\n\n if (\n utils.isEqualSelectionPoints(blockStartPoint, selectionStartPoint) &&\n utils.isEqualSelectionPoints(blockEndPoint, selectionEndPoint)\n ) {\n return {focusTextBlock, newFocus}\n }\n\n return false\n },\n actions: [\n ({event}, {focusTextBlock, newFocus}) => [\n {type: 'delete.block', blockPath: focusTextBlock.path},\n {type: 'insert.block', block: event.block, placement: 'auto'},\n {\n type: 'select',\n selection: {\n anchor: newFocus,\n focus: newFocus,\n },\n },\n ],\n ],\n }),\n /**\n * An ordinary `insert.block` is acceptable if it's a text block. In that\n * case it will get merged into the existing text block.\n */\n defineBehavior({\n on: 'insert.block',\n guard: ({context, event}) => {\n const focusTextBlock = selectors.getFocusTextBlock({context})\n const selectionStartPoint = selectors.getSelectionStartPoint({context})\n const selectionEndPoint = selectors.getSelectionEndPoint({context})\n\n if (\n !focusTextBlock ||\n !utils.isTextBlock(context, event.block) ||\n !selectionStartPoint ||\n !selectionEndPoint\n ) {\n return false\n }\n\n const blockBeforeStartPoint = utils.splitTextBlock({\n context,\n block: focusTextBlock.node,\n point: selectionStartPoint,\n })?.before\n const blockAfterEndPoint = utils.splitTextBlock({\n context,\n block: focusTextBlock.node,\n point: selectionEndPoint,\n })?.after\n\n if (!blockBeforeStartPoint || !blockAfterEndPoint) {\n return false\n }\n\n const targetBlock = utils.mergeTextBlocks({\n context,\n targetBlock: blockBeforeStartPoint,\n incomingBlock: event.block,\n })\n\n const newFocus = utils.getBlockEndPoint({\n node: targetBlock,\n path: [{_key: targetBlock._key}],\n })\n\n const mergedBlock = utils.mergeTextBlocks({\n context,\n targetBlock,\n incomingBlock: blockAfterEndPoint,\n })\n\n return {focusTextBlock, mergedBlock, newFocus}\n },\n actions: [\n (_, {focusTextBlock, mergedBlock, newFocus}) => [\n {type: 'delete.block', blockPath: focusTextBlock.path},\n {type: 'insert.block', block: mergedBlock, placement: 'auto'},\n {\n type: 'select',\n selection: {\n anchor: newFocus,\n focus: newFocus,\n },\n },\n ],\n ],\n }),\n /**\n * Fallback Behavior to avoid `insert.block` in case the Behaviors above all\n * end up with a falsy guard.\n */\n defineBehavior({\n on: 'insert.block',\n actions: [() => [{type: 'noop'}]],\n }),\n /**\n * If multiple blocks are inserted, then the non-text blocks are filtered out\n * and the text blocks are merged into one block\n */\n defineBehavior({\n on: 'insert.blocks',\n guard: ({context, event}) => {\n return event.blocks\n .filter((block) => utils.isTextBlock(context, block))\n .reduce((targetBlock, incomingBlock) => {\n return utils.mergeTextBlocks({\n context,\n targetBlock,\n incomingBlock,\n })\n })\n },\n actions: [\n // `insert.block` is raised so the Behavior above can handle the\n // insertion\n (_, block) => [raise({type: 'insert.block', block, placement: 'auto'})],\n ],\n }),\n /**\n * Block objects do not fit in a one-line editor\n */\n defineBehavior({\n on: 'insert.block object',\n actions: [() => [{type: 'noop'}]],\n }),\n /**\n * `insert.text block` is raised as an `insert.block` so it can be handled\n * by the Behaviors above.\n */\n defineBehavior({\n on: 'insert.text block',\n actions: [\n ({context, event}) => [\n raise({\n type: 'insert.block',\n block: {\n _key: context.keyGenerator(),\n _type: context.schema.block.name,\n children: event.textBlock?.children ?? [],\n },\n placement: event.placement,\n }),\n ],\n ],\n }),\n]\n\n/**\n * @beta\n * Restrict the editor to one line. The plugin takes care of blocking\n * `insert.break` events and smart handling of other `insert.*` events.\n *\n * Place it with as high priority as possible to make sure other plugins don't\n * overwrite `insert.*` events before this plugin gets a chance to do so.\n */\nexport function OneLinePlugin() {\n return <BehaviorPlugin behaviors={oneLineBehaviors} />\n}\n"],"names":["BehaviorPlugin","props","$","_c","editor","useEditor","t0","t1","behaviors","unregisterBehaviors","map","behavior","registerBehavior","forEach","_temp","useEffect","unregister","EditorRefPlugin","React","forwardRef","_","ref","portableTextEditorRef","useRef","Symbol","for","current","useImperativeHandle","displayName","asteriskPairRegex","underscorePairRegex","italicRegex","RegExp","doubleAsteriskPairRegex","doubleUnderscorePairRegex","boldRegex","getTextToItalic","text","match","at","getTextToBold","useMarkdownEmphasisBehaviors","config","boldDecorator","schema","getSnapshot","context","italicDecorator","t2","input","useActorRef","emphasisMachine","emphasisListener","sendBack","defineBehavior","on","guard","event","undefined","focusTextBlock","selectors","selectionStartPoint","selectionStartOffset","utils","value","selectionPoint","textBefore","textToItalic","prefixOffsets","anchor","path","offset","length","focus","suffixOffsets","blockOffset","direction","decorator","selection","textToBold","actions","type","effect","selectionListenerCallback","blockOffsets","deleteBackwardListenerCallback","setup","types","events","actors","fromCallback","createMachine","id","initial","states","invoke","src","target","assign","offsetAfterEmphasis","exit","isEqual","MarkdownPlugin","createMarkdownBehaviors","unregisterBehavior","oneLineBehaviors","placement","selectionEndPoint","block","blockStartPoint","blockEndPoint","newFocus","node","_key","blockPath","blockBeforeStartPoint","point","before","blockAfterEndPoint","after","targetBlock","incomingBlock","mergedBlock","blocks","filter","reduce","raise","keyGenerator","_type","name","children","textBlock","OneLinePlugin","jsx"],"mappings":"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"}
|