@portabletext/editor 1.37.0 → 1.38.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 +84 -49
- package/lib/_chunks-cjs/behavior.core.cjs.map +1 -1
- package/lib/_chunks-cjs/editor-provider.cjs +868 -534
- package/lib/_chunks-cjs/editor-provider.cjs.map +1 -1
- package/lib/_chunks-cjs/{util.block-offsets-to-selection.cjs → parse-blocks.cjs} +36 -21
- package/lib/_chunks-cjs/parse-blocks.cjs.map +1 -0
- package/lib/_chunks-cjs/selector.get-text-before.cjs +2 -2
- package/lib/_chunks-cjs/selector.get-text-before.cjs.map +1 -1
- package/lib/_chunks-cjs/{selector.is-active-style.cjs → selector.is-overlapping-selection.cjs} +144 -3
- package/lib/_chunks-cjs/selector.is-overlapping-selection.cjs.map +1 -0
- package/lib/_chunks-cjs/util.slice-blocks.cjs +12 -0
- package/lib/_chunks-cjs/util.slice-blocks.cjs.map +1 -1
- package/lib/_chunks-es/behavior.core.js +84 -49
- package/lib/_chunks-es/behavior.core.js.map +1 -1
- package/lib/_chunks-es/editor-provider.js +858 -523
- package/lib/_chunks-es/editor-provider.js.map +1 -1
- package/lib/_chunks-es/{util.block-offsets-to-selection.js → parse-blocks.js} +37 -22
- package/lib/_chunks-es/parse-blocks.js.map +1 -0
- package/lib/_chunks-es/selector.get-text-before.js +1 -2
- package/lib/_chunks-es/selector.get-text-before.js.map +1 -1
- package/lib/_chunks-es/{selector.is-active-style.js → selector.is-overlapping-selection.js} +146 -5
- package/lib/_chunks-es/selector.is-overlapping-selection.js.map +1 -0
- package/lib/_chunks-es/util.slice-blocks.js +12 -0
- package/lib/_chunks-es/util.slice-blocks.js.map +1 -1
- package/lib/behaviors/index.d.cts +10534 -4689
- package/lib/behaviors/index.d.ts +10534 -4689
- package/lib/index.cjs +582 -209
- package/lib/index.cjs.map +1 -1
- package/lib/index.d.cts +5296 -1178
- package/lib/index.d.ts +5296 -1178
- package/lib/index.js +591 -213
- package/lib/index.js.map +1 -1
- package/lib/plugins/index.cjs +2 -2
- package/lib/plugins/index.cjs.map +1 -1
- package/lib/plugins/index.d.cts +5296 -1178
- package/lib/plugins/index.d.ts +5296 -1178
- package/lib/plugins/index.js +1 -1
- package/lib/selectors/index.cjs +15 -152
- package/lib/selectors/index.cjs.map +1 -1
- package/lib/selectors/index.d.cts +5296 -1178
- package/lib/selectors/index.d.ts +5296 -1178
- package/lib/selectors/index.js +7 -145
- package/lib/selectors/index.js.map +1 -1
- package/lib/utils/index.cjs +4 -4
- package/lib/utils/index.cjs.map +1 -1
- package/lib/utils/index.d.cts +5296 -1178
- package/lib/utils/index.d.ts +5296 -1178
- package/lib/utils/index.js +3 -4
- package/lib/utils/index.js.map +1 -1
- package/package.json +16 -15
- package/src/behavior-actions/behavior.action.blur.ts +8 -0
- package/src/behavior-actions/behavior.action.decorator.add.ts +1 -1
- package/src/behavior-actions/behavior.action.delete.backward.ts +7 -0
- package/src/behavior-actions/behavior.action.delete.block.ts +24 -0
- package/src/behavior-actions/behavior.action.delete.forward.ts +7 -0
- package/src/behavior-actions/behavior.action.delete.text.ts +1 -1
- package/src/behavior-actions/behavior.action.deserialization.failure.ts +9 -0
- package/src/behavior-actions/behavior.action.deserialization.success.ts +16 -0
- package/src/behavior-actions/behavior.action.effect.ts +7 -0
- package/src/behavior-actions/behavior.action.focus.ts +8 -0
- package/src/behavior-actions/behavior.action.insert-blocks.ts +118 -139
- package/src/behavior-actions/behavior.action.insert-break.ts +1 -0
- package/src/behavior-actions/{behavior.action.insert-block-object.ts → behavior.action.insert.block-object.ts} +9 -14
- package/src/behavior-actions/behavior.action.insert.block.ts +247 -2
- package/src/behavior-actions/behavior.action.insert.text-block.ts +33 -0
- package/src/behavior-actions/behavior.action.insert.text.ts +7 -0
- package/src/behavior-actions/behavior.action.move.block-down.ts +48 -0
- package/src/behavior-actions/behavior.action.move.block-up.ts +53 -0
- package/src/behavior-actions/behavior.action.move.block.ts +16 -0
- package/src/behavior-actions/behavior.action.noop.ts +5 -0
- package/src/behavior-actions/behavior.action.select.next-block.ts +44 -0
- package/src/behavior-actions/behavior.action.select.previous-block.ts +48 -0
- package/src/behavior-actions/behavior.action.select.ts +15 -0
- package/src/behavior-actions/behavior.action.serialization.failure.ts +9 -0
- package/src/behavior-actions/behavior.action.serialization.success.ts +14 -0
- package/src/behavior-actions/behavior.actions.ts +54 -212
- package/src/behaviors/behavior.core.block-objects.ts +35 -6
- package/src/behaviors/behavior.core.insert-break.ts +1 -0
- package/src/behaviors/behavior.core.ts +2 -0
- package/src/behaviors/behavior.default.ts +241 -33
- package/src/behaviors/behavior.types.ts +138 -20
- package/src/converters/converter.portable-text.ts +5 -2
- package/src/converters/converter.text-html.serialize.test.ts +4 -4
- package/src/converters/converter.text-html.ts +5 -2
- package/src/converters/converter.text-plain.test.ts +6 -6
- package/src/converters/converter.text-plain.ts +5 -2
- package/src/converters/converter.types.ts +3 -3
- package/src/editor/Editable.tsx +403 -48
- package/src/editor/components/Element.tsx +133 -18
- package/src/editor/components/use-draggable.ts +34 -102
- package/src/editor/editor-machine.ts +50 -7
- package/src/editor/editor-selector.ts +1 -0
- package/src/editor/editor-snapshot.ts +13 -0
- package/src/editor/plugins/create-with-event-listeners.ts +6 -40
- package/src/internal-utils/create-test-snapshot.ts +1 -0
- package/src/internal-utils/event-position.ts +210 -0
- package/src/internal-utils/slate-utils.ts +56 -0
- package/src/internal-utils/weakMaps.ts +1 -15
- package/lib/_chunks-cjs/selector.is-active-style.cjs.map +0 -1
- package/lib/_chunks-cjs/util.block-offsets-to-selection.cjs.map +0 -1
- package/lib/_chunks-cjs/util.reverse-selection.cjs +0 -14
- package/lib/_chunks-cjs/util.reverse-selection.cjs.map +0 -1
- package/lib/_chunks-es/selector.is-active-style.js.map +0 -1
- package/lib/_chunks-es/util.block-offsets-to-selection.js.map +0 -1
- package/lib/_chunks-es/util.reverse-selection.js +0 -15
- package/lib/_chunks-es/util.reverse-selection.js.map +0 -1
- package/src/behavior-actions/behavior.action-utils.insert-block.ts +0 -61
- package/src/editor/__tests__/handleClick.test.tsx +0 -277
- package/src/editor/components/use-droppable.ts +0 -135
package/lib/index.cjs
CHANGED
|
@@ -1,10 +1,116 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: !0 });
|
|
3
|
-
var editorProvider = require("./_chunks-cjs/editor-provider.cjs"), jsxRuntime = require("react/jsx-runtime"), react = require("@xstate/react"), isEqual = require("lodash/isEqual.js"), noop = require("lodash/noop.js"), React = require("react"), slate = require("slate"), slateReact = require("slate-react"),
|
|
3
|
+
var editorProvider = require("./_chunks-cjs/editor-provider.cjs"), jsxRuntime = require("react/jsx-runtime"), react = require("@xstate/react"), isEqual = require("lodash/isEqual.js"), noop = require("lodash/noop.js"), React = require("react"), slate = require("slate"), slateReact = require("slate-react"), slateDom = require("slate-dom"), util_sliceBlocks = require("./_chunks-cjs/util.slice-blocks.cjs"), selector_isAtTheStartOfBlock = require("./_chunks-cjs/selector.is-at-the-start-of-block.cjs"), parseBlocks = require("./_chunks-cjs/parse-blocks.cjs"), selector_isOverlappingSelection = require("./_chunks-cjs/selector.is-overlapping-selection.cjs"), behavior_core = require("./_chunks-cjs/behavior.core.cjs"), reactCompilerRuntime = require("react-compiler-runtime"), uniq = require("lodash/uniq.js"), useEffectEvent = require("use-effect-event");
|
|
4
4
|
function _interopDefaultCompat(e) {
|
|
5
5
|
return e && typeof e == "object" && "default" in e ? e : { default: e };
|
|
6
6
|
}
|
|
7
7
|
var isEqual__default = /* @__PURE__ */ _interopDefaultCompat(isEqual), noop__default = /* @__PURE__ */ _interopDefaultCompat(noop), uniq__default = /* @__PURE__ */ _interopDefaultCompat(uniq);
|
|
8
|
+
function getEventPosition({
|
|
9
|
+
snapshot,
|
|
10
|
+
slateEditor,
|
|
11
|
+
event
|
|
12
|
+
}) {
|
|
13
|
+
if (!slateDom.DOMEditor.hasTarget(slateEditor, event.target))
|
|
14
|
+
return;
|
|
15
|
+
const node = slateDom.DOMEditor.toSlateNode(slateEditor, event.target);
|
|
16
|
+
if (isClipboardEvent(event)) {
|
|
17
|
+
const selection2 = snapshot.context.selection;
|
|
18
|
+
return selection2 ? {
|
|
19
|
+
block: "end",
|
|
20
|
+
isEditor: slate.Editor.isEditor(node),
|
|
21
|
+
selection: selection2
|
|
22
|
+
} : void 0;
|
|
23
|
+
}
|
|
24
|
+
const block = getEventPositionBlock({
|
|
25
|
+
slateEditor,
|
|
26
|
+
event
|
|
27
|
+
}), selection = getEventPositionSelection({
|
|
28
|
+
snapshot,
|
|
29
|
+
slateEditor,
|
|
30
|
+
event
|
|
31
|
+
});
|
|
32
|
+
if (!(!block || !selection))
|
|
33
|
+
return {
|
|
34
|
+
block,
|
|
35
|
+
isEditor: slate.Editor.isEditor(node),
|
|
36
|
+
selection
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
function getEventPositionBlock({
|
|
40
|
+
slateEditor,
|
|
41
|
+
event
|
|
42
|
+
}) {
|
|
43
|
+
if (!slateReact.ReactEditor.hasTarget(slateEditor, event.target))
|
|
44
|
+
return;
|
|
45
|
+
const node = slateReact.ReactEditor.toSlateNode(slateEditor, event.target), elementRect = slateReact.ReactEditor.toDOMNode(slateEditor, node).getBoundingClientRect(), top = elementRect.top, height = elementRect.height;
|
|
46
|
+
return Math.abs(top - event.pageY) < height / 2 ? "start" : "end";
|
|
47
|
+
}
|
|
48
|
+
function getEventPositionSelection({
|
|
49
|
+
snapshot,
|
|
50
|
+
slateEditor,
|
|
51
|
+
event
|
|
52
|
+
}) {
|
|
53
|
+
const range = getSlateRangeFromEvent(slateEditor, event), selection = range ? editorProvider.toPortableTextRange(snapshot.context.value, range, snapshot.context.schema) : null;
|
|
54
|
+
if (!selection)
|
|
55
|
+
return selection;
|
|
56
|
+
const collapsedSelection = selector_isAtTheStartOfBlock.isSelectionCollapsed({
|
|
57
|
+
...snapshot,
|
|
58
|
+
context: {
|
|
59
|
+
...snapshot.context,
|
|
60
|
+
selection
|
|
61
|
+
}
|
|
62
|
+
}), focusTextBlock = selector_isAtTheStartOfBlock.getFocusTextBlock({
|
|
63
|
+
...snapshot,
|
|
64
|
+
context: {
|
|
65
|
+
...snapshot.context,
|
|
66
|
+
selection
|
|
67
|
+
}
|
|
68
|
+
}), focusSpan = selector_isAtTheStartOfBlock.getFocusSpan({
|
|
69
|
+
...snapshot,
|
|
70
|
+
context: {
|
|
71
|
+
...snapshot.context,
|
|
72
|
+
selection
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
if (event.type === "dragstart" && collapsedSelection && focusTextBlock && focusSpan) {
|
|
76
|
+
const blockStartPoint = util_sliceBlocks.getBlockStartPoint(focusTextBlock), blockEndPoint = util_sliceBlocks.getBlockEndPoint(focusTextBlock);
|
|
77
|
+
return {
|
|
78
|
+
anchor: blockStartPoint,
|
|
79
|
+
focus: blockEndPoint
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
return selection;
|
|
83
|
+
}
|
|
84
|
+
function getSlateRangeFromEvent(editor, event) {
|
|
85
|
+
if (!event.target || !slateDom.isDOMNode(event.target))
|
|
86
|
+
return;
|
|
87
|
+
const window2 = slateDom.DOMEditor.getWindow(editor);
|
|
88
|
+
let domRange;
|
|
89
|
+
if (window2.document.caretPositionFromPoint !== void 0) {
|
|
90
|
+
const position = window2.document.caretPositionFromPoint(event.clientX, event.clientY);
|
|
91
|
+
position && (domRange = window2.document.createRange(), domRange.setStart(position.offsetNode, position.offset), domRange.setEnd(position.offsetNode, position.offset));
|
|
92
|
+
} else if (window2.document.caretRangeFromPoint !== void 0)
|
|
93
|
+
domRange = window2.document.caretRangeFromPoint(event.clientX, event.clientY) ?? void 0;
|
|
94
|
+
else {
|
|
95
|
+
console.warn("Neither caretPositionFromPoint nor caretRangeFromPoint is supported");
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
if (!domRange)
|
|
99
|
+
return;
|
|
100
|
+
let range;
|
|
101
|
+
try {
|
|
102
|
+
range = slateDom.DOMEditor.toSlateRange(editor, domRange, {
|
|
103
|
+
exactMatch: !1,
|
|
104
|
+
// It can still throw even with this option set to true
|
|
105
|
+
suppressThrow: !1
|
|
106
|
+
});
|
|
107
|
+
} catch {
|
|
108
|
+
}
|
|
109
|
+
return range;
|
|
110
|
+
}
|
|
111
|
+
function isClipboardEvent(event) {
|
|
112
|
+
return event.type === "copy" || event.type === "cut" || event.type === "paste";
|
|
113
|
+
}
|
|
8
114
|
function normalizePoint(point, value) {
|
|
9
115
|
if (!point || !value)
|
|
10
116
|
return null;
|
|
@@ -92,146 +198,69 @@ function DropIndicator() {
|
|
|
92
198
|
zIndex: 5
|
|
93
199
|
} }), $[0] = t0) : t0 = $[0], t0;
|
|
94
200
|
}
|
|
95
|
-
const debug$4 = editorProvider.debugWithName("useDraggable");
|
|
96
201
|
function useDraggable(props) {
|
|
97
|
-
const $ = reactCompilerRuntime.c(
|
|
202
|
+
const $ = reactCompilerRuntime.c(15), editorActor = React.useContext(editorProvider.EditorActorContext), editor = slateReact.useSlateStatic(), [blockElement, setBlockElement] = React.useState(null);
|
|
98
203
|
let t0, t1;
|
|
99
204
|
$[0] !== editor || $[1] !== props.blockRef || $[2] !== props.element ? (t0 = () => setBlockElement(props.blockRef ? props.blockRef.current : slateReact.ReactEditor.toDOMNode(editor, props.element)), t1 = [editor, props.element, props.blockRef], $[0] = editor, $[1] = props.blockRef, $[2] = props.element, $[3] = t0, $[4] = t1) : (t0 = $[3], t1 = $[4]), React.useEffect(t0, t1);
|
|
100
205
|
let t2;
|
|
101
|
-
$[5] !==
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
editorProvider.IS_DRAGGING_BLOCK_TARGET_POSITION.delete(editor);
|
|
107
|
-
let targetPath = slateReact.ReactEditor.findPath(editor, targetBlock);
|
|
108
|
-
const myPath = slateReact.ReactEditor.findPath(editor, props.element), isBefore = slate.Path.isBefore(myPath, targetPath);
|
|
109
|
-
if (dragPosition === "bottom" && !isBefore) {
|
|
110
|
-
if (targetPath[0] >= editor.children.length - 1) {
|
|
111
|
-
debug$4("target is already at the bottom, not moving");
|
|
112
|
-
return;
|
|
113
|
-
}
|
|
114
|
-
const originalPath = targetPath;
|
|
115
|
-
targetPath = slate.Path.next(targetPath), debug$4(`Adjusting targetPath from ${JSON.stringify(originalPath)} to ${JSON.stringify(targetPath)}`);
|
|
116
|
-
}
|
|
117
|
-
if (dragPosition === "top" && isBefore && targetPath[0] !== editor.children.length - 1) {
|
|
118
|
-
const originalPath_0 = targetPath;
|
|
119
|
-
targetPath = slate.Path.previous(targetPath), debug$4(`Adjusting targetPath from ${JSON.stringify(originalPath_0)} to ${JSON.stringify(targetPath)}`);
|
|
120
|
-
}
|
|
121
|
-
if (slate.Path.equals(targetPath, myPath)) {
|
|
122
|
-
event.preventDefault(), debug$4("targetPath and myPath is the same, not moving");
|
|
123
|
-
return;
|
|
124
|
-
}
|
|
125
|
-
debug$4(`Moving element ${props.element._key} from path ${JSON.stringify(myPath)} to ${JSON.stringify(targetPath)} (${dragPosition})`), slate.Transforms.moveNodes(editor, {
|
|
126
|
-
at: myPath,
|
|
127
|
-
to: targetPath
|
|
128
|
-
}), editor.onChange();
|
|
129
|
-
return;
|
|
130
|
-
}
|
|
131
|
-
debug$4("No target element, not doing anything");
|
|
132
|
-
}, $[5] = editor, $[6] = props.element, $[7] = t2) : t2 = $[7];
|
|
206
|
+
$[5] !== editorActor ? (t2 = () => {
|
|
207
|
+
editorActor.send({
|
|
208
|
+
type: "dragend"
|
|
209
|
+
});
|
|
210
|
+
}, $[5] = editorActor, $[6] = t2) : t2 = $[6];
|
|
133
211
|
const handleDragEnd = t2;
|
|
134
212
|
let t3;
|
|
135
|
-
$[8] !== editor || $[9] !==
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
213
|
+
$[7] !== blockElement || $[8] !== editor || $[9] !== editorActor ? (t3 = (event) => {
|
|
214
|
+
const position = getEventPosition({
|
|
215
|
+
snapshot: editorProvider.getEditorSnapshot({
|
|
216
|
+
editorActorSnapshot: editorActor.getSnapshot(),
|
|
217
|
+
slateEditorInstance: editor
|
|
218
|
+
}),
|
|
219
|
+
slateEditor: editor,
|
|
220
|
+
event: event.nativeEvent
|
|
221
|
+
});
|
|
222
|
+
if (!position) {
|
|
223
|
+
console.error("Could not find position for dragstart event");
|
|
224
|
+
return;
|
|
225
|
+
}
|
|
226
|
+
if (blockElement && blockElement instanceof HTMLElement) {
|
|
144
227
|
let dragGhost = blockElement.cloneNode(!0);
|
|
145
228
|
const customGhost = dragGhost.querySelector("[data-pt-drag-ghost-element]");
|
|
146
229
|
if (customGhost && (dragGhost = customGhost), dragGhost.setAttribute("data-dragged", ""), document.body) {
|
|
147
|
-
|
|
148
|
-
const rect = blockElement.getBoundingClientRect(), x =
|
|
149
|
-
dragGhost.style.width = `${rect.width}px`, dragGhost.style.height = `${rect.height}px`,
|
|
230
|
+
dragGhost.style.position = "absolute", dragGhost.style.left = "-99999px", dragGhost.style.boxSizing = "border-box", document.body.appendChild(dragGhost);
|
|
231
|
+
const rect = blockElement.getBoundingClientRect(), x = event.clientX - rect.left, y = event.clientY - rect.top;
|
|
232
|
+
dragGhost.style.width = `${rect.width}px`, dragGhost.style.height = `${rect.height}px`, event.dataTransfer.setDragImage(dragGhost, x, y), editorActor.send({
|
|
233
|
+
type: "dragstart",
|
|
234
|
+
origin: position,
|
|
235
|
+
ghost: dragGhost
|
|
236
|
+
});
|
|
237
|
+
return;
|
|
150
238
|
}
|
|
239
|
+
editorActor.send({
|
|
240
|
+
type: "dragstart",
|
|
241
|
+
origin: position
|
|
242
|
+
});
|
|
151
243
|
}
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
const handleDragStart = t4;
|
|
244
|
+
}, $[7] = blockElement, $[8] = editor, $[9] = editorActor, $[10] = t3) : t3 = $[10];
|
|
245
|
+
const handleDragStart = t3;
|
|
155
246
|
if (props.readOnly) {
|
|
156
|
-
let
|
|
157
|
-
return $[
|
|
247
|
+
let t42;
|
|
248
|
+
return $[11] === Symbol.for("react.memo_cache_sentinel") ? (t42 = {
|
|
158
249
|
draggableProps: {
|
|
159
250
|
draggable: !1,
|
|
160
251
|
onDragStart: void 0,
|
|
161
|
-
onDrag: void 0,
|
|
162
252
|
onDragEnd: void 0
|
|
163
253
|
}
|
|
164
|
-
}, $[
|
|
254
|
+
}, $[11] = t42) : t42 = $[11], t42;
|
|
165
255
|
}
|
|
166
|
-
let
|
|
167
|
-
return $[
|
|
256
|
+
let t4;
|
|
257
|
+
return $[12] !== handleDragEnd || $[13] !== handleDragStart ? (t4 = {
|
|
168
258
|
draggableProps: {
|
|
169
259
|
draggable: !0,
|
|
170
260
|
onDragStart: handleDragStart,
|
|
171
|
-
onDrag: handleDrag,
|
|
172
261
|
onDragEnd: handleDragEnd
|
|
173
262
|
}
|
|
174
|
-
}, $[
|
|
175
|
-
}
|
|
176
|
-
const debug$3 = editorProvider.debugWithName("useDroppable");
|
|
177
|
-
function useDroppable(props) {
|
|
178
|
-
const $ = reactCompilerRuntime.c(27), editor = slateReact.useSlateStatic(), [isDragOver, setIsDragOver] = React.useState(!1), [blockElement, setBlockElement] = React.useState(null);
|
|
179
|
-
let t0, t1;
|
|
180
|
-
$[0] !== editor || $[1] !== props.blockRef || $[2] !== props.element ? (t0 = () => setBlockElement(props.blockRef ? props.blockRef.current : slateReact.ReactEditor.toDOMNode(editor, props.element)), t1 = [editor, props.element, props.blockRef], $[0] = editor, $[1] = props.blockRef, $[2] = props.element, $[3] = t0, $[4] = t1) : (t0 = $[3], t1 = $[4]), React.useEffect(t0, t1);
|
|
181
|
-
let t2;
|
|
182
|
-
$[5] !== blockElement || $[6] !== editor || $[7] !== props.element ? (t2 = (event) => {
|
|
183
|
-
const isMyDragOver = editorProvider.IS_DRAGGING_BLOCK_ELEMENT.get(editor);
|
|
184
|
-
if (!isMyDragOver || !blockElement)
|
|
185
|
-
return;
|
|
186
|
-
event.preventDefault(), event.dataTransfer.dropEffect = "move", editorProvider.IS_DRAGGING_ELEMENT_TARGET.set(editor, props.element);
|
|
187
|
-
const elementRect = blockElement.getBoundingClientRect(), offset = elementRect.top, height = elementRect.height, Y = event.pageY, loc = Math.abs(offset - Y);
|
|
188
|
-
if (props.element === editor.children[0] || (loc < height / 2 ? editorProvider.IS_DRAGGING_BLOCK_TARGET_POSITION.set(editor, "top") : editorProvider.IS_DRAGGING_BLOCK_TARGET_POSITION.set(editor, "bottom")), isMyDragOver === props.element) {
|
|
189
|
-
event.dataTransfer.dropEffect = "none";
|
|
190
|
-
return;
|
|
191
|
-
}
|
|
192
|
-
setIsDragOver(!0);
|
|
193
|
-
}, $[5] = blockElement, $[6] = editor, $[7] = props.element, $[8] = t2) : t2 = $[8];
|
|
194
|
-
const handleDragOver = t2;
|
|
195
|
-
let t3;
|
|
196
|
-
$[9] === Symbol.for("react.memo_cache_sentinel") ? (t3 = () => {
|
|
197
|
-
setIsDragOver(!1);
|
|
198
|
-
}, $[9] = t3) : t3 = $[9];
|
|
199
|
-
const handleDragLeave = t3;
|
|
200
|
-
let t4;
|
|
201
|
-
$[10] !== editor || $[11] !== props.element ? (t4 = (event_0) => {
|
|
202
|
-
editorProvider.IS_DRAGGING_BLOCK_ELEMENT.get(editor) && (debug$3("On drop (prevented)", props.element), event_0.preventDefault(), event_0.stopPropagation(), setIsDragOver(!1));
|
|
203
|
-
}, $[10] = editor, $[11] = props.element, $[12] = t4) : t4 = $[12];
|
|
204
|
-
const handleDrop = t4;
|
|
205
|
-
let t5;
|
|
206
|
-
$[13] !== editor || $[14] !== isDragOver ? (t5 = isDragOver && editor.children[0] === editorProvider.IS_DRAGGING_ELEMENT_TARGET.get(editor), $[13] = editor, $[14] = isDragOver, $[15] = t5) : t5 = $[15];
|
|
207
|
-
const isDraggingOverFirstBlock = t5;
|
|
208
|
-
let t6;
|
|
209
|
-
$[16] !== editor || $[17] !== isDragOver ? (t6 = isDragOver && editor.children[editor.children.length - 1] === editorProvider.IS_DRAGGING_ELEMENT_TARGET.get(editor), $[16] = editor, $[17] = isDragOver, $[18] = t6) : t6 = $[18];
|
|
210
|
-
const isDraggingOverLastBlock = t6, dragPosition = editorProvider.IS_DRAGGING_BLOCK_TARGET_POSITION.get(editor), isDraggingOverTop = isDraggingOverFirstBlock || isDragOver && !isDraggingOverFirstBlock && !isDraggingOverLastBlock && dragPosition === "top", isDraggingOverBottom = isDraggingOverLastBlock || isDragOver && !isDraggingOverFirstBlock && !isDraggingOverLastBlock && dragPosition === "bottom";
|
|
211
|
-
if (props.readOnly) {
|
|
212
|
-
let t72;
|
|
213
|
-
return $[19] === Symbol.for("react.memo_cache_sentinel") ? (t72 = {
|
|
214
|
-
droppableProps: {
|
|
215
|
-
onDragOver: void 0,
|
|
216
|
-
onDragLeave: void 0,
|
|
217
|
-
onDrop: void 0
|
|
218
|
-
},
|
|
219
|
-
isDraggingOverTop: !1,
|
|
220
|
-
isDraggingOverBottom: !1
|
|
221
|
-
}, $[19] = t72) : t72 = $[19], t72;
|
|
222
|
-
}
|
|
223
|
-
let t7;
|
|
224
|
-
$[20] !== handleDragOver || $[21] !== handleDrop ? (t7 = {
|
|
225
|
-
onDragOver: handleDragOver,
|
|
226
|
-
onDragLeave: handleDragLeave,
|
|
227
|
-
onDrop: handleDrop
|
|
228
|
-
}, $[20] = handleDragOver, $[21] = handleDrop, $[22] = t7) : t7 = $[22];
|
|
229
|
-
let t8;
|
|
230
|
-
return $[23] !== isDraggingOverBottom || $[24] !== isDraggingOverTop || $[25] !== t7 ? (t8 = {
|
|
231
|
-
droppableProps: t7,
|
|
232
|
-
isDraggingOverTop,
|
|
233
|
-
isDraggingOverBottom
|
|
234
|
-
}, $[23] = isDraggingOverBottom, $[24] = isDraggingOverTop, $[25] = t7, $[26] = t8) : t8 = $[26], t8;
|
|
263
|
+
}, $[12] = handleDragEnd, $[13] = handleDragStart, $[14] = t4) : t4 = $[14], t4;
|
|
235
264
|
}
|
|
236
265
|
editorProvider.debugWithName("components:Element");
|
|
237
266
|
const EMPTY_ANNOTATIONS = [], inlineBlockStyle = {
|
|
@@ -248,15 +277,86 @@ const EMPTY_ANNOTATIONS = [], inlineBlockStyle = {
|
|
|
248
277
|
renderStyle,
|
|
249
278
|
spellCheck
|
|
250
279
|
}) => {
|
|
251
|
-
const
|
|
280
|
+
const editorActor = React.useContext(editorProvider.EditorActorContext), slateEditor = slateReact.useSlateStatic(), selected = slateReact.useSelected(), blockRef = React.useRef(null), inlineBlockObjectRef = React.useRef(null), focused = selected && slateEditor.selection && slate.Range.isCollapsed(slateEditor.selection) || !1, [dragPositionBlock, setDragPositionBlock] = React.useState(), draggable = useDraggable({
|
|
252
281
|
element,
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
})
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
282
|
+
readOnly,
|
|
283
|
+
blockRef
|
|
284
|
+
});
|
|
285
|
+
React.useEffect(() => {
|
|
286
|
+
const behavior = behavior_core.defineBehavior({
|
|
287
|
+
on: "drag.dragover",
|
|
288
|
+
guard: ({
|
|
289
|
+
snapshot,
|
|
290
|
+
event
|
|
291
|
+
}) => {
|
|
292
|
+
const dropFocusBlock = selector_isAtTheStartOfBlock.getFocusBlock({
|
|
293
|
+
...snapshot,
|
|
294
|
+
context: {
|
|
295
|
+
...snapshot.context,
|
|
296
|
+
selection: event.position.selection
|
|
297
|
+
}
|
|
298
|
+
});
|
|
299
|
+
if (!dropFocusBlock || dropFocusBlock.node._key !== element._key)
|
|
300
|
+
return !1;
|
|
301
|
+
const dragOrigin = snapshot.beta.internalDrag?.origin;
|
|
302
|
+
return !dragOrigin || selector_isAtTheStartOfBlock.getSelectedBlocks({
|
|
303
|
+
...snapshot,
|
|
304
|
+
context: {
|
|
305
|
+
...snapshot.context,
|
|
306
|
+
selection: dragOrigin.selection
|
|
307
|
+
}
|
|
308
|
+
}).some((draggedBlock) => draggedBlock.node._key === element._key) ? !1 : selector_isOverlappingSelection.isSelectingEntireBlocks({
|
|
309
|
+
...snapshot,
|
|
310
|
+
context: {
|
|
311
|
+
...snapshot.context,
|
|
312
|
+
selection: dragOrigin.selection
|
|
313
|
+
}
|
|
314
|
+
});
|
|
315
|
+
},
|
|
316
|
+
actions: [({
|
|
317
|
+
event: event_0
|
|
318
|
+
}) => [{
|
|
319
|
+
type: "effect",
|
|
320
|
+
effect: () => {
|
|
321
|
+
setDragPositionBlock(event_0.position.block);
|
|
322
|
+
}
|
|
323
|
+
}, {
|
|
324
|
+
type: "noop"
|
|
325
|
+
}]]
|
|
326
|
+
});
|
|
327
|
+
return editorActor.send({
|
|
328
|
+
type: "add behavior",
|
|
329
|
+
behavior
|
|
330
|
+
}), () => {
|
|
331
|
+
editorActor.send({
|
|
332
|
+
type: "remove behavior",
|
|
333
|
+
behavior
|
|
334
|
+
});
|
|
335
|
+
};
|
|
336
|
+
}, [editorActor, element._key]), React.useEffect(() => {
|
|
337
|
+
const behavior_0 = behavior_core.defineBehavior({
|
|
338
|
+
on: "drag.*",
|
|
339
|
+
guard: ({
|
|
340
|
+
event: event_1
|
|
341
|
+
}) => event_1.type !== "drag.dragover",
|
|
342
|
+
actions: [() => [{
|
|
343
|
+
type: "effect",
|
|
344
|
+
effect: () => {
|
|
345
|
+
setDragPositionBlock(void 0);
|
|
346
|
+
}
|
|
347
|
+
}]]
|
|
348
|
+
});
|
|
349
|
+
return editorActor.send({
|
|
350
|
+
type: "add behavior",
|
|
351
|
+
behavior: behavior_0
|
|
352
|
+
}), () => {
|
|
353
|
+
editorActor.send({
|
|
354
|
+
type: "remove behavior",
|
|
355
|
+
behavior: behavior_0
|
|
356
|
+
});
|
|
357
|
+
};
|
|
358
|
+
}, [editorActor]);
|
|
359
|
+
const value = React.useMemo(() => editorProvider.fromSlateValue([element], schemaTypes.block.name, editorProvider.KEY_TO_VALUE_ELEMENT.get(slateEditor))[0], [slateEditor, element, schemaTypes.block.name]);
|
|
260
360
|
let renderedBlock = children, className;
|
|
261
361
|
const blockPath = React.useMemo(() => [{
|
|
262
362
|
_key: element._key
|
|
@@ -265,8 +365,8 @@ const EMPTY_ANNOTATIONS = [], inlineBlockStyle = {
|
|
|
265
365
|
throw new Error("Expected element to have a _type property");
|
|
266
366
|
if (typeof element._key != "string")
|
|
267
367
|
throw new Error("Expected element to have a _key property");
|
|
268
|
-
if (
|
|
269
|
-
const path = slateReact.ReactEditor.findPath(
|
|
368
|
+
if (slateEditor.isInline(element)) {
|
|
369
|
+
const path = slateReact.ReactEditor.findPath(slateEditor, element), [block] = slate.Editor.node(slateEditor, path, {
|
|
270
370
|
depth: 1
|
|
271
371
|
}), schemaType = schemaTypes.inlineObjects.find((_type) => _type.name === element._type);
|
|
272
372
|
if (!schemaType)
|
|
@@ -314,7 +414,7 @@ const EMPTY_ANNOTATIONS = [], inlineBlockStyle = {
|
|
|
314
414
|
editorElementRef: blockRef
|
|
315
415
|
}));
|
|
316
416
|
let level;
|
|
317
|
-
if (isListItem && (typeof element.level == "number" && (level = element.level), className += ` pt-list-item pt-list-item-${element.listItem} pt-list-item-level-${level || 1}`),
|
|
417
|
+
if (isListItem && (typeof element.level == "number" && (level = element.level), className += ` pt-list-item pt-list-item-${element.listItem} pt-list-item-level-${level || 1}`), slateEditor.isListBlock(value) && isListItem && element.listItem) {
|
|
318
418
|
const listType = schemaTypes.lists.find((item_0) => item_0.value === element.listItem);
|
|
319
419
|
renderListItem && listType && (renderedBlock = renderListItem({
|
|
320
420
|
block: value,
|
|
@@ -345,17 +445,17 @@ const EMPTY_ANNOTATIONS = [], inlineBlockStyle = {
|
|
|
345
445
|
return console.warn("Property 'type' is deprecated, use 'schemaType' instead."), schemaTypes.block;
|
|
346
446
|
}
|
|
347
447
|
}), propsOrDefaultRendered = renderBlock ? renderBlock(renderProps) : children;
|
|
348
|
-
return /* @__PURE__ */ jsxRuntime.jsxs("div", { ...attributes, className, spellCheck,
|
|
349
|
-
|
|
448
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { ...attributes, className, spellCheck, children: [
|
|
449
|
+
dragPositionBlock === "start" ? /* @__PURE__ */ jsxRuntime.jsx(DropIndicator, {}) : null,
|
|
350
450
|
/* @__PURE__ */ jsxRuntime.jsx("div", { ref: blockRef, children: propsOrDefaultRendered }),
|
|
351
|
-
|
|
451
|
+
dragPositionBlock === "end" ? /* @__PURE__ */ jsxRuntime.jsx(DropIndicator, {}) : null
|
|
352
452
|
] }, element._key);
|
|
353
453
|
}
|
|
354
454
|
const schemaType_0 = schemaTypes.blockObjects.find((_type_0) => _type_0.name === element._type);
|
|
355
455
|
if (!schemaType_0)
|
|
356
456
|
throw new Error(`Could not find schema type for block element of _type ${element._type}`);
|
|
357
457
|
className = "pt-block pt-object-block";
|
|
358
|
-
const block_0 = editorProvider.fromSlateValue([element], schemaTypes.block.name, editorProvider.KEY_TO_VALUE_ELEMENT.get(
|
|
458
|
+
const block_0 = editorProvider.fromSlateValue([element], schemaTypes.block.name, editorProvider.KEY_TO_VALUE_ELEMENT.get(slateEditor))[0];
|
|
359
459
|
let renderedBlockFromProps;
|
|
360
460
|
if (renderBlock) {
|
|
361
461
|
const _props = Object.defineProperty({
|
|
@@ -374,11 +474,11 @@ const EMPTY_ANNOTATIONS = [], inlineBlockStyle = {
|
|
|
374
474
|
});
|
|
375
475
|
renderedBlockFromProps = renderBlock(_props);
|
|
376
476
|
}
|
|
377
|
-
return /* @__PURE__ */ jsxRuntime.jsxs("div", { ...attributes, className, ...
|
|
378
|
-
|
|
477
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { ...attributes, className, ...draggable.draggableProps, children: [
|
|
478
|
+
dragPositionBlock === "start" ? /* @__PURE__ */ jsxRuntime.jsx(DropIndicator, {}) : null,
|
|
379
479
|
children,
|
|
380
480
|
/* @__PURE__ */ jsxRuntime.jsx("div", { ref: blockRef, contentEditable: !1, children: renderedBlockFromProps || /* @__PURE__ */ jsxRuntime.jsx(DefaultBlockObject, { value }) }),
|
|
381
|
-
|
|
481
|
+
dragPositionBlock === "end" ? /* @__PURE__ */ jsxRuntime.jsx(DropIndicator, {}) : null
|
|
382
482
|
] }, element._key);
|
|
383
483
|
};
|
|
384
484
|
Element.displayName = "Element";
|
|
@@ -576,7 +676,15 @@ const debug = editorProvider.debugWithName("component:Editable"), PLACEHOLDER_ST
|
|
|
576
676
|
onBeforeInput,
|
|
577
677
|
onPaste,
|
|
578
678
|
onCopy,
|
|
679
|
+
onCut,
|
|
579
680
|
onClick,
|
|
681
|
+
onDragStart,
|
|
682
|
+
onDrag,
|
|
683
|
+
onDragEnd,
|
|
684
|
+
onDragEnter,
|
|
685
|
+
onDragOver,
|
|
686
|
+
onDrop,
|
|
687
|
+
onDragLeave,
|
|
580
688
|
rangeDecorations,
|
|
581
689
|
renderAnnotation,
|
|
582
690
|
renderBlock,
|
|
@@ -688,47 +796,151 @@ const debug = editorProvider.debugWithName("component:Editable"), PLACEHOLDER_ST
|
|
|
688
796
|
return () => teardown();
|
|
689
797
|
}, [editorActor, slateEditor, syncRangeDecorations]);
|
|
690
798
|
const handleCopy = React.useCallback((event) => {
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
799
|
+
if (onCopy)
|
|
800
|
+
onCopy(event) !== void 0 && event.preventDefault();
|
|
801
|
+
else if (event.nativeEvent.clipboardData) {
|
|
802
|
+
event.stopPropagation(), event.preventDefault();
|
|
803
|
+
const position = getEventPosition({
|
|
804
|
+
snapshot: editorProvider.getEditorSnapshot({
|
|
805
|
+
editorActorSnapshot: editorActor.getSnapshot(),
|
|
806
|
+
slateEditorInstance: slateEditor
|
|
807
|
+
}),
|
|
808
|
+
slateEditor,
|
|
809
|
+
event: event.nativeEvent
|
|
810
|
+
});
|
|
811
|
+
if (!position) {
|
|
812
|
+
console.warn("Could not find position for copy event");
|
|
813
|
+
return;
|
|
814
|
+
}
|
|
815
|
+
editorActor.send({
|
|
816
|
+
type: "behavior event",
|
|
817
|
+
behaviorEvent: {
|
|
818
|
+
type: "copy",
|
|
819
|
+
data: event.nativeEvent.clipboardData,
|
|
820
|
+
position
|
|
821
|
+
},
|
|
822
|
+
editor: slateEditor,
|
|
823
|
+
nativeEvent: event
|
|
824
|
+
});
|
|
825
|
+
}
|
|
826
|
+
}, [onCopy, editorActor, slateEditor]), handleCut = React.useCallback((event_0) => {
|
|
827
|
+
if (onCut)
|
|
828
|
+
onCut(event_0) !== void 0 && event_0.preventDefault();
|
|
829
|
+
else if (event_0.nativeEvent.clipboardData) {
|
|
830
|
+
event_0.stopPropagation(), event_0.preventDefault();
|
|
831
|
+
const position_0 = getEventPosition({
|
|
832
|
+
snapshot: editorProvider.getEditorSnapshot({
|
|
833
|
+
editorActorSnapshot: editorActor.getSnapshot(),
|
|
834
|
+
slateEditorInstance: slateEditor
|
|
835
|
+
}),
|
|
836
|
+
slateEditor,
|
|
837
|
+
event: event_0.nativeEvent
|
|
838
|
+
});
|
|
839
|
+
if (!position_0) {
|
|
840
|
+
console.warn("Could not find position for cut event");
|
|
841
|
+
return;
|
|
842
|
+
}
|
|
843
|
+
editorActor.send({
|
|
844
|
+
type: "behavior event",
|
|
845
|
+
behaviorEvent: {
|
|
846
|
+
type: "cut",
|
|
847
|
+
dataTransfer: event_0.nativeEvent.clipboardData,
|
|
848
|
+
position: position_0
|
|
849
|
+
},
|
|
850
|
+
editor: slateEditor,
|
|
851
|
+
nativeEvent: event_0
|
|
852
|
+
});
|
|
853
|
+
}
|
|
854
|
+
}, [onCut, editorActor, slateEditor]), handlePaste = React.useCallback((event_1) => {
|
|
701
855
|
const value_0 = editorProvider.PortableTextEditor.getValue(portableTextEditor), path = editorProvider.toPortableTextRange(value_0, slateEditor.selection, schemaTypes)?.focus.path || [], onPasteResult = onPaste?.({
|
|
702
|
-
event:
|
|
856
|
+
event: event_1,
|
|
703
857
|
value: value_0,
|
|
704
858
|
path,
|
|
705
859
|
schemaTypes
|
|
706
860
|
});
|
|
707
|
-
onPasteResult || !slateEditor.selection
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
861
|
+
if (onPasteResult || !slateEditor.selection)
|
|
862
|
+
event_1.preventDefault(), editorActor.send({
|
|
863
|
+
type: "notify.loading"
|
|
864
|
+
}), Promise.resolve(onPasteResult).then((result_1) => {
|
|
865
|
+
if (debug("Custom paste function from client resolved", result_1), !result_1 || !result_1.insert) {
|
|
866
|
+
debug("No result from custom paste handler, pasting normally");
|
|
867
|
+
const position_1 = getEventPosition({
|
|
868
|
+
snapshot: editorProvider.getEditorSnapshot({
|
|
869
|
+
editorActorSnapshot: editorActor.getSnapshot(),
|
|
870
|
+
slateEditorInstance: slateEditor
|
|
871
|
+
}),
|
|
872
|
+
slateEditor,
|
|
873
|
+
event: event_1.nativeEvent
|
|
874
|
+
});
|
|
875
|
+
if (!position_1) {
|
|
876
|
+
console.warn("Could not find position for paste event");
|
|
877
|
+
return;
|
|
878
|
+
}
|
|
879
|
+
editorActor.send({
|
|
880
|
+
type: "behavior event",
|
|
881
|
+
behaviorEvent: {
|
|
882
|
+
type: "paste",
|
|
883
|
+
data: event_1.clipboardData,
|
|
884
|
+
position: position_1
|
|
885
|
+
},
|
|
886
|
+
editor: slateEditor,
|
|
887
|
+
nativeEvent: event_1
|
|
888
|
+
});
|
|
889
|
+
} else result_1.insert ? editorActor.send({
|
|
890
|
+
type: "behavior event",
|
|
891
|
+
behaviorEvent: {
|
|
892
|
+
type: "insert.blocks",
|
|
893
|
+
blocks: parseBlocks.parseBlocks({
|
|
894
|
+
context: {
|
|
895
|
+
keyGenerator: editorActor.getSnapshot().context.keyGenerator,
|
|
896
|
+
schema: editorActor.getSnapshot().context.schema
|
|
897
|
+
},
|
|
898
|
+
blocks: result_1.insert,
|
|
899
|
+
options: {
|
|
900
|
+
refreshKeys: !0
|
|
901
|
+
}
|
|
902
|
+
}),
|
|
903
|
+
placement: "auto"
|
|
904
|
+
},
|
|
905
|
+
editor: slateEditor
|
|
906
|
+
}) : console.warn("Your onPaste function returned something unexpected:", result_1);
|
|
907
|
+
}).catch((error) => (console.warn(error), error)).finally(() => {
|
|
908
|
+
editorActor.send({
|
|
909
|
+
type: "notify.done loading"
|
|
910
|
+
});
|
|
911
|
+
});
|
|
912
|
+
else if (event_1.nativeEvent.clipboardData) {
|
|
913
|
+
event_1.preventDefault(), event_1.stopPropagation();
|
|
914
|
+
const position_2 = getEventPosition({
|
|
915
|
+
snapshot: editorProvider.getEditorSnapshot({
|
|
916
|
+
editorActorSnapshot: editorActor.getSnapshot(),
|
|
917
|
+
slateEditorInstance: slateEditor
|
|
918
|
+
}),
|
|
919
|
+
slateEditor,
|
|
920
|
+
event: event_1.nativeEvent
|
|
921
|
+
});
|
|
922
|
+
if (!position_2) {
|
|
923
|
+
console.warn("Could not find position for paste event");
|
|
924
|
+
return;
|
|
925
|
+
}
|
|
714
926
|
editorActor.send({
|
|
715
|
-
type: "
|
|
927
|
+
type: "behavior event",
|
|
928
|
+
behaviorEvent: {
|
|
929
|
+
type: "paste",
|
|
930
|
+
data: event_1.nativeEvent.clipboardData,
|
|
931
|
+
position: position_2
|
|
932
|
+
},
|
|
933
|
+
editor: slateEditor,
|
|
934
|
+
nativeEvent: event_1
|
|
716
935
|
});
|
|
717
|
-
}
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
data: event_0.nativeEvent.clipboardData
|
|
722
|
-
},
|
|
723
|
-
editor: slateEditor,
|
|
724
|
-
nativeEvent: event_0
|
|
725
|
-
}), debug("No result from custom paste handler, pasting normally");
|
|
726
|
-
}, [editorActor, onPaste, portableTextEditor, schemaTypes, slateEditor]), handleOnFocus = React.useCallback((event_1) => {
|
|
727
|
-
if (onFocus && onFocus(event_1), !event_1.isDefaultPrevented()) {
|
|
936
|
+
}
|
|
937
|
+
debug("No result from custom paste handler, pasting normally");
|
|
938
|
+
}, [editorActor, onPaste, portableTextEditor, schemaTypes, slateEditor]), handleOnFocus = React.useCallback((event_2) => {
|
|
939
|
+
if (onFocus && onFocus(event_2), !event_2.isDefaultPrevented()) {
|
|
728
940
|
const selection = editorProvider.PortableTextEditor.getSelection(portableTextEditor);
|
|
729
941
|
selection === null && (slate.Transforms.select(slateEditor, slate.Editor.start(slateEditor, [])), slateEditor.onChange()), editorActor.send({
|
|
730
942
|
type: "notify.focused",
|
|
731
|
-
event:
|
|
943
|
+
event: event_2
|
|
732
944
|
});
|
|
733
945
|
const newSelection = editorProvider.PortableTextEditor.getSelection(portableTextEditor);
|
|
734
946
|
selection === newSelection && editorActor.send({
|
|
@@ -736,19 +948,37 @@ const debug = editorProvider.debugWithName("component:Editable"), PLACEHOLDER_ST
|
|
|
736
948
|
selection
|
|
737
949
|
});
|
|
738
950
|
}
|
|
739
|
-
}, [editorActor, onFocus, portableTextEditor, slateEditor]), handleClick = React.useCallback((
|
|
740
|
-
onClick && onClick(
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
951
|
+
}, [editorActor, onFocus, portableTextEditor, slateEditor]), handleClick = React.useCallback((event_3) => {
|
|
952
|
+
if (onClick && onClick(event_3), event_3.isDefaultPrevented() || event_3.isPropagationStopped())
|
|
953
|
+
return;
|
|
954
|
+
const position_3 = getEventPosition({
|
|
955
|
+
snapshot: editorProvider.getEditorSnapshot({
|
|
956
|
+
editorActorSnapshot: editorActor.getSnapshot(),
|
|
957
|
+
slateEditorInstance: slateEditor
|
|
958
|
+
}),
|
|
959
|
+
slateEditor,
|
|
960
|
+
event: event_3.nativeEvent
|
|
961
|
+
});
|
|
962
|
+
if (!position_3) {
|
|
963
|
+
console.warn("Could not find EventPosition for MouseEvent");
|
|
964
|
+
return;
|
|
965
|
+
}
|
|
966
|
+
editorActor.send({
|
|
967
|
+
type: "behavior event",
|
|
968
|
+
behaviorEvent: {
|
|
969
|
+
type: "mouse.click",
|
|
970
|
+
position: position_3
|
|
971
|
+
},
|
|
972
|
+
editor: slateEditor,
|
|
973
|
+
nativeEvent: event_3
|
|
974
|
+
});
|
|
975
|
+
}, [onClick, editorActor, slateEditor]), handleOnBlur = React.useCallback((event_4) => {
|
|
976
|
+
onBlur && onBlur(event_4), event_4.isPropagationStopped() || editorActor.send({
|
|
747
977
|
type: "notify.blurred",
|
|
748
|
-
event:
|
|
978
|
+
event: event_4
|
|
749
979
|
});
|
|
750
|
-
}, [editorActor, onBlur]), handleOnBeforeInput = React.useCallback((
|
|
751
|
-
onBeforeInput && onBeforeInput(
|
|
980
|
+
}, [editorActor, onBlur]), handleOnBeforeInput = React.useCallback((event_5) => {
|
|
981
|
+
onBeforeInput && onBeforeInput(event_5);
|
|
752
982
|
}, [onBeforeInput]), validateSelection = React.useCallback(() => {
|
|
753
983
|
if (!slateEditor.selection)
|
|
754
984
|
return;
|
|
@@ -782,39 +1012,39 @@ const debug = editorProvider.debugWithName("component:Editable"), PLACEHOLDER_ST
|
|
|
782
1012
|
};
|
|
783
1013
|
}
|
|
784
1014
|
}, [validateSelection, editableElement]);
|
|
785
|
-
const handleKeyDown = React.useCallback((
|
|
786
|
-
props.onKeyDown && props.onKeyDown(
|
|
1015
|
+
const handleKeyDown = React.useCallback((event_6) => {
|
|
1016
|
+
props.onKeyDown && props.onKeyDown(event_6), event_6.isDefaultPrevented() || slateEditor.pteWithHotKeys(event_6), event_6.isDefaultPrevented() || editorActor.send({
|
|
787
1017
|
type: "behavior event",
|
|
788
1018
|
behaviorEvent: {
|
|
789
1019
|
type: "key.down",
|
|
790
1020
|
keyboardEvent: {
|
|
791
|
-
key:
|
|
792
|
-
code:
|
|
793
|
-
altKey:
|
|
794
|
-
ctrlKey:
|
|
795
|
-
metaKey:
|
|
796
|
-
shiftKey:
|
|
1021
|
+
key: event_6.key,
|
|
1022
|
+
code: event_6.code,
|
|
1023
|
+
altKey: event_6.altKey,
|
|
1024
|
+
ctrlKey: event_6.ctrlKey,
|
|
1025
|
+
metaKey: event_6.metaKey,
|
|
1026
|
+
shiftKey: event_6.shiftKey
|
|
797
1027
|
}
|
|
798
1028
|
},
|
|
799
1029
|
editor: slateEditor,
|
|
800
|
-
nativeEvent:
|
|
1030
|
+
nativeEvent: event_6
|
|
801
1031
|
});
|
|
802
|
-
}, [props, editorActor, slateEditor]), handleKeyUp = React.useCallback((
|
|
803
|
-
props.onKeyUp && props.onKeyUp(
|
|
1032
|
+
}, [props, editorActor, slateEditor]), handleKeyUp = React.useCallback((event_7) => {
|
|
1033
|
+
props.onKeyUp && props.onKeyUp(event_7), event_7.isDefaultPrevented() || editorActor.send({
|
|
804
1034
|
type: "behavior event",
|
|
805
1035
|
behaviorEvent: {
|
|
806
1036
|
type: "key.up",
|
|
807
1037
|
keyboardEvent: {
|
|
808
|
-
key:
|
|
809
|
-
code:
|
|
810
|
-
altKey:
|
|
811
|
-
ctrlKey:
|
|
812
|
-
metaKey:
|
|
813
|
-
shiftKey:
|
|
1038
|
+
key: event_7.key,
|
|
1039
|
+
code: event_7.code,
|
|
1040
|
+
altKey: event_7.altKey,
|
|
1041
|
+
ctrlKey: event_7.ctrlKey,
|
|
1042
|
+
metaKey: event_7.metaKey,
|
|
1043
|
+
shiftKey: event_7.shiftKey
|
|
814
1044
|
}
|
|
815
1045
|
},
|
|
816
1046
|
editor: slateEditor,
|
|
817
|
-
nativeEvent:
|
|
1047
|
+
nativeEvent: event_7
|
|
818
1048
|
});
|
|
819
1049
|
}, [props, editorActor, slateEditor]), scrollSelectionIntoViewToSlate = React.useMemo(() => {
|
|
820
1050
|
if (scrollSelectionIntoView !== void 0)
|
|
@@ -836,7 +1066,7 @@ const debug = editorProvider.debugWithName("component:Editable"), PLACEHOLDER_ST
|
|
|
836
1066
|
}];
|
|
837
1067
|
if (path_0.length === 0)
|
|
838
1068
|
return [];
|
|
839
|
-
const
|
|
1069
|
+
const result_2 = rangeDecorationState.filter((item) => slate.Range.isCollapsed(item) ? path_0.length !== 2 ? !1 : slate.Path.equals(item.focus.path, path_0) && slate.Path.equals(item.anchor.path, path_0) : slate.Range.intersection(item, {
|
|
840
1070
|
anchor: {
|
|
841
1071
|
path: path_0,
|
|
842
1072
|
offset: 0
|
|
@@ -846,24 +1076,164 @@ const debug = editorProvider.debugWithName("component:Editable"), PLACEHOLDER_ST
|
|
|
846
1076
|
offset: 0
|
|
847
1077
|
}
|
|
848
1078
|
}) || slate.Range.includes(item, path_0));
|
|
849
|
-
return
|
|
1079
|
+
return result_2.length > 0 ? result_2 : [];
|
|
850
1080
|
}, [slateEditor, schemaTypes, rangeDecorationState]);
|
|
851
|
-
|
|
1081
|
+
React.useEffect(() => {
|
|
852
1082
|
ref.current = slateReact.ReactEditor.toDOMNode(slateEditor, slateEditor), setEditableElement(ref.current);
|
|
853
1083
|
}, [slateEditor, ref]), React.useEffect(() => {
|
|
854
|
-
const window_0 = slateReact.ReactEditor.getWindow(slateEditor),
|
|
1084
|
+
const window_0 = slateReact.ReactEditor.getWindow(slateEditor), onDragEnd_0 = () => {
|
|
855
1085
|
editorActor.send({
|
|
856
1086
|
type: "dragend"
|
|
857
1087
|
});
|
|
858
|
-
},
|
|
1088
|
+
}, onDrop_0 = () => {
|
|
859
1089
|
editorActor.send({
|
|
860
1090
|
type: "drop"
|
|
861
1091
|
});
|
|
862
1092
|
};
|
|
863
|
-
return window_0.document.addEventListener("dragend",
|
|
864
|
-
window_0.document.removeEventListener("dragend",
|
|
1093
|
+
return window_0.document.addEventListener("dragend", onDragEnd_0), window_0.document.addEventListener("drop", onDrop_0), () => {
|
|
1094
|
+
window_0.document.removeEventListener("dragend", onDragEnd_0), window_0.document.removeEventListener("drop", onDrop_0);
|
|
865
1095
|
};
|
|
866
|
-
}, [slateEditor, editorActor])
|
|
1096
|
+
}, [slateEditor, editorActor]);
|
|
1097
|
+
const handleDragStart = React.useCallback((event_8) => {
|
|
1098
|
+
if (onDragStart?.(event_8), !event_8.isDefaultPrevented() && !event_8.isPropagationStopped()) {
|
|
1099
|
+
const position_4 = getEventPosition({
|
|
1100
|
+
snapshot: editorProvider.getEditorSnapshot({
|
|
1101
|
+
editorActorSnapshot: editorActor.getSnapshot(),
|
|
1102
|
+
slateEditorInstance: slateEditor
|
|
1103
|
+
}),
|
|
1104
|
+
slateEditor,
|
|
1105
|
+
event: event_8.nativeEvent
|
|
1106
|
+
});
|
|
1107
|
+
if (!position_4) {
|
|
1108
|
+
console.warn("Could not find position for dragstart event");
|
|
1109
|
+
return;
|
|
1110
|
+
}
|
|
1111
|
+
if (slateReact.ReactEditor.hasTarget(slateEditor, event_8.target)) {
|
|
1112
|
+
const node = slateReact.ReactEditor.toSlateNode(slateEditor, event_8.target), path_1 = slateReact.ReactEditor.findPath(slateEditor, node);
|
|
1113
|
+
if (slate.Element.isElement(node) && slate.Editor.isVoid(slateEditor, node) || slate.Editor.void(slateEditor, {
|
|
1114
|
+
at: path_1,
|
|
1115
|
+
voids: !0
|
|
1116
|
+
})) {
|
|
1117
|
+
const range = slate.Editor.range(slateEditor, path_1);
|
|
1118
|
+
slate.Transforms.select(slateEditor, range);
|
|
1119
|
+
}
|
|
1120
|
+
}
|
|
1121
|
+
editorActor.send({
|
|
1122
|
+
type: "dragstart",
|
|
1123
|
+
origin: position_4
|
|
1124
|
+
}), editorActor.send({
|
|
1125
|
+
type: "behavior event",
|
|
1126
|
+
behaviorEvent: {
|
|
1127
|
+
type: "drag.dragstart",
|
|
1128
|
+
dataTransfer: event_8.dataTransfer,
|
|
1129
|
+
position: position_4
|
|
1130
|
+
},
|
|
1131
|
+
editor: slateEditor
|
|
1132
|
+
}), event_8.stopPropagation();
|
|
1133
|
+
}
|
|
1134
|
+
}, [onDragStart, editorActor, slateEditor]), handleDrag = React.useCallback((event_9) => {
|
|
1135
|
+
onDrag?.(event_9), !event_9.isDefaultPrevented() && !event_9.isPropagationStopped() && (editorActor.send({
|
|
1136
|
+
type: "behavior event",
|
|
1137
|
+
behaviorEvent: {
|
|
1138
|
+
type: "drag.drag",
|
|
1139
|
+
dataTransfer: event_9.dataTransfer
|
|
1140
|
+
},
|
|
1141
|
+
editor: slateEditor
|
|
1142
|
+
}), event_9.stopPropagation());
|
|
1143
|
+
}, [onDrag, editorActor, slateEditor]), handleDragEnd = React.useCallback((event_10) => {
|
|
1144
|
+
onDragEnd?.(event_10), !event_10.isDefaultPrevented() && !event_10.isPropagationStopped() && (editorActor.send({
|
|
1145
|
+
type: "behavior event",
|
|
1146
|
+
behaviorEvent: {
|
|
1147
|
+
type: "drag.dragend",
|
|
1148
|
+
dataTransfer: event_10.dataTransfer
|
|
1149
|
+
},
|
|
1150
|
+
editor: slateEditor
|
|
1151
|
+
}), event_10.stopPropagation());
|
|
1152
|
+
}, [onDragEnd, editorActor, slateEditor]), handleDragEnter = React.useCallback((event_11) => {
|
|
1153
|
+
if (onDragEnter?.(event_11), !event_11.isDefaultPrevented() && !event_11.isPropagationStopped()) {
|
|
1154
|
+
const position_5 = getEventPosition({
|
|
1155
|
+
snapshot: editorProvider.getEditorSnapshot({
|
|
1156
|
+
editorActorSnapshot: editorActor.getSnapshot(),
|
|
1157
|
+
slateEditorInstance: slateEditor
|
|
1158
|
+
}),
|
|
1159
|
+
slateEditor,
|
|
1160
|
+
event: event_11.nativeEvent
|
|
1161
|
+
});
|
|
1162
|
+
if (!position_5) {
|
|
1163
|
+
console.warn("Could not find position for dragenter event");
|
|
1164
|
+
return;
|
|
1165
|
+
}
|
|
1166
|
+
editorActor.send({
|
|
1167
|
+
type: "behavior event",
|
|
1168
|
+
behaviorEvent: {
|
|
1169
|
+
type: "drag.dragenter",
|
|
1170
|
+
dataTransfer: event_11.dataTransfer,
|
|
1171
|
+
position: position_5
|
|
1172
|
+
},
|
|
1173
|
+
editor: slateEditor
|
|
1174
|
+
}), event_11.stopPropagation();
|
|
1175
|
+
}
|
|
1176
|
+
}, [onDragEnter, editorActor, slateEditor]), handleDragOver = React.useCallback((event_12) => {
|
|
1177
|
+
if (onDragOver?.(event_12), !event_12.isDefaultPrevented() && !event_12.isPropagationStopped()) {
|
|
1178
|
+
const position_6 = getEventPosition({
|
|
1179
|
+
snapshot: editorProvider.getEditorSnapshot({
|
|
1180
|
+
editorActorSnapshot: editorActor.getSnapshot(),
|
|
1181
|
+
slateEditorInstance: slateEditor
|
|
1182
|
+
}),
|
|
1183
|
+
slateEditor,
|
|
1184
|
+
event: event_12.nativeEvent
|
|
1185
|
+
});
|
|
1186
|
+
if (!position_6) {
|
|
1187
|
+
console.warn("Could not find position for dragover event");
|
|
1188
|
+
return;
|
|
1189
|
+
}
|
|
1190
|
+
editorActor.send({
|
|
1191
|
+
type: "behavior event",
|
|
1192
|
+
behaviorEvent: {
|
|
1193
|
+
type: "drag.dragover",
|
|
1194
|
+
dataTransfer: event_12.dataTransfer,
|
|
1195
|
+
position: position_6
|
|
1196
|
+
},
|
|
1197
|
+
editor: slateEditor,
|
|
1198
|
+
nativeEvent: event_12
|
|
1199
|
+
}), event_12.stopPropagation();
|
|
1200
|
+
}
|
|
1201
|
+
}, [onDragOver, editorActor, slateEditor]), handleDrop = React.useCallback((event_13) => {
|
|
1202
|
+
if (onDrop?.(event_13), !event_13.isDefaultPrevented() && !event_13.isPropagationStopped()) {
|
|
1203
|
+
const position_7 = getEventPosition({
|
|
1204
|
+
snapshot: editorProvider.getEditorSnapshot({
|
|
1205
|
+
editorActorSnapshot: editorActor.getSnapshot(),
|
|
1206
|
+
slateEditorInstance: slateEditor
|
|
1207
|
+
}),
|
|
1208
|
+
slateEditor,
|
|
1209
|
+
event: event_13.nativeEvent
|
|
1210
|
+
});
|
|
1211
|
+
if (!position_7) {
|
|
1212
|
+
console.warn("Could not find position for drop event");
|
|
1213
|
+
return;
|
|
1214
|
+
}
|
|
1215
|
+
const range_0 = slateReact.ReactEditor.findEventRange(slateEditor, event_13);
|
|
1216
|
+
slateEditor.select(range_0), editorActor.send({
|
|
1217
|
+
type: "behavior event",
|
|
1218
|
+
behaviorEvent: {
|
|
1219
|
+
type: "drag.drop",
|
|
1220
|
+
dataTransfer: event_13.dataTransfer,
|
|
1221
|
+
position: position_7
|
|
1222
|
+
},
|
|
1223
|
+
editor: slateEditor
|
|
1224
|
+
}), event_13.preventDefault();
|
|
1225
|
+
}
|
|
1226
|
+
}, [onDrop, editorActor, slateEditor]), handleDragLeave = React.useCallback((event_14) => {
|
|
1227
|
+
onDragLeave?.(event_14), !event_14.isDefaultPrevented() && !event_14.isPropagationStopped() && editorActor.send({
|
|
1228
|
+
type: "behavior event",
|
|
1229
|
+
behaviorEvent: {
|
|
1230
|
+
type: "drag.dragleave",
|
|
1231
|
+
dataTransfer: event_14.dataTransfer
|
|
1232
|
+
},
|
|
1233
|
+
editor: slateEditor
|
|
1234
|
+
});
|
|
1235
|
+
}, [onDragLeave, editorActor, slateEditor]);
|
|
1236
|
+
return portableTextEditor ? hasInvalidValue ? null : /* @__PURE__ */ jsxRuntime.jsx(
|
|
867
1237
|
slateReact.Editable,
|
|
868
1238
|
{
|
|
869
1239
|
...restProps,
|
|
@@ -872,13 +1242,16 @@ const debug = editorProvider.debugWithName("component:Editable"), PLACEHOLDER_ST
|
|
|
872
1242
|
decorate,
|
|
873
1243
|
onBlur: handleOnBlur,
|
|
874
1244
|
onCopy: handleCopy,
|
|
1245
|
+
onCut: handleCut,
|
|
875
1246
|
onClick: handleClick,
|
|
876
1247
|
onDOMBeforeInput: handleOnBeforeInput,
|
|
877
|
-
onDragStart:
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
1248
|
+
onDragStart: handleDragStart,
|
|
1249
|
+
onDrag: handleDrag,
|
|
1250
|
+
onDragEnd: handleDragEnd,
|
|
1251
|
+
onDragEnter: handleDragEnter,
|
|
1252
|
+
onDragOver: handleDragOver,
|
|
1253
|
+
onDrop: handleDrop,
|
|
1254
|
+
onDragLeave: handleDragLeave,
|
|
882
1255
|
onFocus: handleOnFocus,
|
|
883
1256
|
onKeyDown: handleKeyDown,
|
|
884
1257
|
onKeyUp: handleKeyUp,
|