@prosekit/extensions 0.11.5 → 0.11.7
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/dist/drop-indicator-E7nCfdnR.js +58 -0
- package/dist/drop-indicator-E7nCfdnR.js.map +1 -0
- package/dist/{enter-rule-RdhEA900.js → enter-rule-5tkoU2Ir.js} +2 -3
- package/dist/enter-rule-5tkoU2Ir.js.map +1 -0
- package/dist/file-nRyo7PMB.js +132 -0
- package/dist/file-nRyo7PMB.js.map +1 -0
- package/dist/index-DY6lIIYV.d.ts +134 -0
- package/dist/index-DY6lIIYV.d.ts.map +1 -0
- package/dist/{input-rule-B17tpW4m.js → input-rule-DO_iy2aT.js} +4 -7
- package/dist/input-rule-DO_iy2aT.js.map +1 -0
- package/dist/{mark-rule-BCqIZMDu.js → mark-rule-CGmswjQ_.js} +1 -1
- package/dist/{mark-rule-BCqIZMDu.js.map → mark-rule-CGmswjQ_.js.map} +1 -1
- package/dist/{paste-rule-DIEJKIje.js → paste-rule-Brej6cWi.js} +2 -3
- package/dist/{paste-rule-DIEJKIje.js.map → paste-rule-Brej6cWi.js.map} +1 -1
- package/dist/prosekit-extensions-autocomplete.js +1 -2
- package/dist/prosekit-extensions-autocomplete.js.map +1 -1
- package/dist/prosekit-extensions-blockquote.js +1 -1
- package/dist/prosekit-extensions-bold.js +1 -1
- package/dist/prosekit-extensions-code-block.d.ts +1 -1
- package/dist/prosekit-extensions-code-block.js +4 -5
- package/dist/prosekit-extensions-code-block.js.map +1 -1
- package/dist/prosekit-extensions-code.js +1 -1
- package/dist/prosekit-extensions-commit.js +2 -4
- package/dist/prosekit-extensions-commit.js.map +1 -1
- package/dist/prosekit-extensions-drop-indicator.d.ts +3 -106
- package/dist/prosekit-extensions-drop-indicator.d.ts.map +1 -1
- package/dist/prosekit-extensions-drop-indicator.js +1 -1
- package/dist/prosekit-extensions-enter-rule.js +1 -1
- package/dist/prosekit-extensions-file.d.ts +2 -126
- package/dist/prosekit-extensions-file.js +2 -128
- package/dist/prosekit-extensions-hard-break.d.ts +0 -4
- package/dist/prosekit-extensions-hard-break.d.ts.map +1 -1
- package/dist/prosekit-extensions-heading.js +1 -1
- package/dist/prosekit-extensions-horizontal-rule.js +1 -1
- package/dist/prosekit-extensions-image.d.ts +135 -3
- package/dist/prosekit-extensions-image.d.ts.map +1 -1
- package/dist/prosekit-extensions-image.js +129 -8
- package/dist/prosekit-extensions-image.js.map +1 -1
- package/dist/prosekit-extensions-input-rule.js +1 -1
- package/dist/prosekit-extensions-italic.js +1 -1
- package/dist/prosekit-extensions-link.js +4 -4
- package/dist/prosekit-extensions-list.js +5 -7
- package/dist/prosekit-extensions-list.js.map +1 -1
- package/dist/prosekit-extensions-mark-rule.js +1 -1
- package/dist/prosekit-extensions-paragraph.d.ts +0 -4
- package/dist/prosekit-extensions-paragraph.d.ts.map +1 -1
- package/dist/prosekit-extensions-paste-rule.js +1 -1
- package/dist/prosekit-extensions-placeholder.js +3 -4
- package/dist/prosekit-extensions-placeholder.js.map +1 -1
- package/dist/prosekit-extensions-search.js +1 -2
- package/dist/prosekit-extensions-search.js.map +1 -1
- package/dist/prosekit-extensions-strike.js +1 -1
- package/dist/prosekit-extensions-table.js +2 -2
- package/dist/prosekit-extensions.d.ts +1 -1
- package/dist/{shiki-highlighter-chunk-DSPM0T27.d.ts → shiki-highlighter-chunk-Cwu1Jr9o.d.ts} +1 -1
- package/dist/{shiki-highlighter-chunk-DSPM0T27.d.ts.map → shiki-highlighter-chunk-Cwu1Jr9o.d.ts.map} +1 -1
- package/dist/shiki-highlighter-chunk.d.ts +1 -1
- package/dist/{table-Bi7WsMI3.js → table-DND_1127.js} +10 -19
- package/dist/{table-Bi7WsMI3.js.map → table-DND_1127.js.map} +1 -1
- package/package.json +8 -7
- package/src/drop-indicator/drop-indicator-facet.ts +6 -28
- package/src/drop-indicator/drop-indicator.ts +3 -5
- package/src/drop-indicator/index.ts +6 -6
- package/src/file/file-upload.ts +19 -6
- package/src/image/image-commands/insert-image.ts +14 -0
- package/src/image/image-commands/upload-image.ts +137 -0
- package/src/image/image-commands.ts +8 -4
- package/src/image/image-upload-handler.ts +96 -0
- package/src/image/index.ts +14 -0
- package/dist/drop-indicator-D1eHOhSi.js +0 -267
- package/dist/drop-indicator-D1eHOhSi.js.map +0 -1
- package/dist/enter-rule-RdhEA900.js.map +0 -1
- package/dist/input-rule-B17tpW4m.js.map +0 -1
- package/dist/prosekit-extensions-file.d.ts.map +0 -1
- package/dist/prosekit-extensions-file.js.map +0 -1
- package/src/drop-indicator/drop-indicator-plugin.ts +0 -147
- package/src/drop-indicator/drop-target.ts +0 -168
- package/src/drop-indicator/types.ts +0 -90
|
@@ -1,147 +0,0 @@
|
|
|
1
|
-
import type { ResolvedPos } from '@prosekit/pm/model'
|
|
2
|
-
import {
|
|
3
|
-
NodeSelection,
|
|
4
|
-
Plugin,
|
|
5
|
-
PluginKey,
|
|
6
|
-
TextSelection,
|
|
7
|
-
type PluginView,
|
|
8
|
-
} from '@prosekit/pm/state'
|
|
9
|
-
import type { EditorView } from '@prosekit/pm/view'
|
|
10
|
-
|
|
11
|
-
import {
|
|
12
|
-
buildGetTarget,
|
|
13
|
-
type GetTarget,
|
|
14
|
-
} from './drop-target'
|
|
15
|
-
import type {
|
|
16
|
-
DragEventHandler,
|
|
17
|
-
ShowHandler,
|
|
18
|
-
ViewDragging,
|
|
19
|
-
} from './types'
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* @internal
|
|
23
|
-
*/
|
|
24
|
-
interface DropIndicatorPluginOptions {
|
|
25
|
-
onDrag: DragEventHandler
|
|
26
|
-
onShow: ShowHandler
|
|
27
|
-
onHide: VoidFunction
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
/**
|
|
31
|
-
* @internal
|
|
32
|
-
*/
|
|
33
|
-
export function createDropIndicatorPlugin(options: DropIndicatorPluginOptions): Plugin {
|
|
34
|
-
let getTarget: GetTarget | undefined
|
|
35
|
-
|
|
36
|
-
return new Plugin({
|
|
37
|
-
key: new PluginKey('prosekit-drop-indicator'),
|
|
38
|
-
view: (view) => {
|
|
39
|
-
getTarget = buildGetTarget(view, options.onDrag)
|
|
40
|
-
return createDropIndicatorView(view, getTarget, options)
|
|
41
|
-
},
|
|
42
|
-
props: {
|
|
43
|
-
handleDrop(view, event, slice, move): boolean {
|
|
44
|
-
if (!getTarget) return false
|
|
45
|
-
|
|
46
|
-
const target = getTarget([event.clientX, event.clientY], event)
|
|
47
|
-
|
|
48
|
-
if (!target) return false
|
|
49
|
-
|
|
50
|
-
event.preventDefault()
|
|
51
|
-
let insertPos = target[0]
|
|
52
|
-
|
|
53
|
-
let tr = view.state.tr
|
|
54
|
-
if (move) {
|
|
55
|
-
let { node } = (view.dragging as ViewDragging | null) || {}
|
|
56
|
-
if (node) node.replace(tr)
|
|
57
|
-
else tr.deleteSelection()
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
let pos = tr.mapping.map(insertPos)
|
|
61
|
-
let isNode = slice.openStart == 0 && slice.openEnd == 0 && slice.content.childCount == 1
|
|
62
|
-
let beforeInsert = tr.doc
|
|
63
|
-
if (isNode) tr.replaceRangeWith(pos, pos, slice.content.firstChild!)
|
|
64
|
-
else tr.replaceRange(pos, pos, slice)
|
|
65
|
-
if (tr.doc.eq(beforeInsert)) {
|
|
66
|
-
return true
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
let $pos = tr.doc.resolve(pos)
|
|
70
|
-
if (
|
|
71
|
-
isNode && NodeSelection.isSelectable(slice.content.firstChild!)
|
|
72
|
-
&& $pos.nodeAfter && $pos.nodeAfter.sameMarkup(slice.content.firstChild!)
|
|
73
|
-
) {
|
|
74
|
-
tr.setSelection(new NodeSelection($pos))
|
|
75
|
-
} else {
|
|
76
|
-
let end = tr.mapping.map(insertPos)
|
|
77
|
-
tr.mapping.maps[tr.mapping.maps.length - 1].forEach((_from, _to, _newFrom, newTo) => end = newTo)
|
|
78
|
-
tr.setSelection(selectionBetween(view, $pos, tr.doc.resolve(end)))
|
|
79
|
-
}
|
|
80
|
-
view.focus()
|
|
81
|
-
view.dispatch(tr.setMeta('uiEvent', 'drop'))
|
|
82
|
-
return true
|
|
83
|
-
},
|
|
84
|
-
},
|
|
85
|
-
})
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
function selectionBetween(view: EditorView, $anchor: ResolvedPos, $head: ResolvedPos, bias?: number) {
|
|
89
|
-
return view.someProp('createSelectionBetween', f => f(view, $anchor, $head))
|
|
90
|
-
|| TextSelection.between($anchor, $head, bias)
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
function createDropIndicatorView(view: EditorView, getTarget: GetTarget, options: DropIndicatorPluginOptions): PluginView {
|
|
94
|
-
let dom = view.dom
|
|
95
|
-
let hideId: ReturnType<typeof setTimeout> | undefined
|
|
96
|
-
let prevX: number | undefined
|
|
97
|
-
let prevY: number | undefined
|
|
98
|
-
let hasDragOverEvent: boolean = false
|
|
99
|
-
|
|
100
|
-
const scheduleHide = () => {
|
|
101
|
-
if (hideId) {
|
|
102
|
-
clearTimeout(hideId)
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
hasDragOverEvent = false
|
|
106
|
-
hideId = setTimeout(() => {
|
|
107
|
-
if (hasDragOverEvent) return
|
|
108
|
-
options.onHide()
|
|
109
|
-
}, 30)
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
const handleDragOver = (event: DragEvent): void => {
|
|
113
|
-
hasDragOverEvent = true
|
|
114
|
-
|
|
115
|
-
const { clientX, clientY } = event
|
|
116
|
-
if (prevX === clientX && prevY === clientY) {
|
|
117
|
-
return
|
|
118
|
-
}
|
|
119
|
-
prevX = clientX
|
|
120
|
-
prevY = clientY
|
|
121
|
-
|
|
122
|
-
let target = getTarget([clientX, clientY], event)
|
|
123
|
-
|
|
124
|
-
if (!target) {
|
|
125
|
-
scheduleHide()
|
|
126
|
-
return
|
|
127
|
-
} else {
|
|
128
|
-
const [pos, [x1, y1, x2, y2]] = target
|
|
129
|
-
const line = { p1: { x: x1, y: y1 }, p2: { x: x2, y: y2 } }
|
|
130
|
-
options.onShow({ view, pos, line })
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
dom.addEventListener('dragover', handleDragOver)
|
|
135
|
-
dom.addEventListener('dragend', scheduleHide)
|
|
136
|
-
dom.addEventListener('drop', scheduleHide)
|
|
137
|
-
dom.addEventListener('dragleave', scheduleHide)
|
|
138
|
-
|
|
139
|
-
const destroy = () => {
|
|
140
|
-
dom.removeEventListener('dragover', handleDragOver)
|
|
141
|
-
dom.removeEventListener('dragend', scheduleHide)
|
|
142
|
-
dom.removeEventListener('drop', scheduleHide)
|
|
143
|
-
dom.removeEventListener('dragleave', scheduleHide)
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
return { destroy }
|
|
147
|
-
}
|
|
@@ -1,168 +0,0 @@
|
|
|
1
|
-
import { isHTMLElement } from '@ocavue/utils'
|
|
2
|
-
import { isNodeSelection } from '@prosekit/core'
|
|
3
|
-
import type { ProseMirrorNode } from '@prosekit/pm/model'
|
|
4
|
-
import type { EditorView } from '@prosekit/pm/view'
|
|
5
|
-
|
|
6
|
-
import type { DragEventHandler } from './types'
|
|
7
|
-
|
|
8
|
-
type Point = readonly [x: number, y: number]
|
|
9
|
-
|
|
10
|
-
type Line = readonly [x1: number, y1: number, x2: number, y2: number]
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
* @internal
|
|
14
|
-
*/
|
|
15
|
-
type DropTarget = readonly [pos: number, line: Line]
|
|
16
|
-
|
|
17
|
-
function getTargetsByView(view: EditorView): DropTarget[] {
|
|
18
|
-
type StackItem = [pos: number, node: ProseMirrorNode]
|
|
19
|
-
let stack: StackItem[] = [[-1, view.state.doc]]
|
|
20
|
-
let targets: DropTarget[] = []
|
|
21
|
-
|
|
22
|
-
while (stack.length > 0) {
|
|
23
|
-
const [pos, node] = stack.pop()!
|
|
24
|
-
if (pos >= 0) {
|
|
25
|
-
let dom = view.nodeDOM(pos)
|
|
26
|
-
if (dom && isHTMLElement(dom)) {
|
|
27
|
-
let rect = dom.getBoundingClientRect()
|
|
28
|
-
let { top, bottom, left: x1, right: x2 } = rect
|
|
29
|
-
targets.push(
|
|
30
|
-
[pos, [x1, top, x2, top]],
|
|
31
|
-
[pos + node.nodeSize, [x1, bottom, x2, bottom]],
|
|
32
|
-
)
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
if (node.isBlock && !node.isTextblock) {
|
|
36
|
-
let childPos = pos + 1
|
|
37
|
-
for (let child of node.children) {
|
|
38
|
-
stack.push([childPos, child])
|
|
39
|
-
childPos += child.nodeSize
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
return targets
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
/**
|
|
48
|
-
* @internal
|
|
49
|
-
*/
|
|
50
|
-
export type GetTarget = (point: Point, event: DragEvent) => DropTarget | undefined
|
|
51
|
-
|
|
52
|
-
/**
|
|
53
|
-
* @internal
|
|
54
|
-
*/
|
|
55
|
-
export function buildGetTarget(
|
|
56
|
-
view: EditorView,
|
|
57
|
-
onDrag: DragEventHandler,
|
|
58
|
-
): GetTarget {
|
|
59
|
-
let prevTargets: DropTarget[] = []
|
|
60
|
-
let prevDoc: ProseMirrorNode | undefined
|
|
61
|
-
let prevRect: DOMRect | undefined
|
|
62
|
-
|
|
63
|
-
const getTargets = (): DropTarget[] => {
|
|
64
|
-
const rect = view.dom.getBoundingClientRect()
|
|
65
|
-
const doc = view.state.doc
|
|
66
|
-
|
|
67
|
-
if (
|
|
68
|
-
prevTargets && prevDoc && prevRect
|
|
69
|
-
&& rect.width === prevRect.width
|
|
70
|
-
&& rect.height === prevRect.height
|
|
71
|
-
&& rect.x === prevRect.x
|
|
72
|
-
&& rect.y === prevRect.y
|
|
73
|
-
&& prevDoc.eq(doc)
|
|
74
|
-
) {
|
|
75
|
-
return prevTargets
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
prevRect = rect
|
|
79
|
-
prevDoc = doc
|
|
80
|
-
prevTargets = getTargetsByView(view)
|
|
81
|
-
return prevTargets
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
const getTargetImpl: GetTarget = (point, event) => {
|
|
85
|
-
if (!view.editable || view.isDestroyed) {
|
|
86
|
-
return
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
const compare = (p1: DropTarget, p2: DropTarget): number => {
|
|
90
|
-
const [pos1, line1] = p1
|
|
91
|
-
const [pos2, line2] = p2
|
|
92
|
-
const p1Distance = pointLineDistance(point, line1)
|
|
93
|
-
const p2Distance = pointLineDistance(point, line2)
|
|
94
|
-
|
|
95
|
-
return (p1Distance - p2Distance) || (pos1 - pos2)
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
let targets = getTargets()
|
|
99
|
-
targets.sort(compare)
|
|
100
|
-
|
|
101
|
-
// Only consider the first few targets for performance reasons.
|
|
102
|
-
targets = targets.slice(0, 8)
|
|
103
|
-
|
|
104
|
-
// Find the closest valid target.
|
|
105
|
-
const target = targets.find(target => onDrag({ view, pos: target[0], event }) !== false)
|
|
106
|
-
|
|
107
|
-
// If the dragging node is already at the target position, we ignore this
|
|
108
|
-
// target. Notice that we don't pick the second better target here.
|
|
109
|
-
if (target && isDraggingToItself(view, target[0])) {
|
|
110
|
-
return undefined
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
return target
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
let prevPoint: Point | undefined
|
|
117
|
-
let prevTarget: DropTarget | undefined
|
|
118
|
-
|
|
119
|
-
const getTargetCached: GetTarget = (point, event) => {
|
|
120
|
-
if (prevPoint && pointEqual(prevPoint, point)) {
|
|
121
|
-
return prevTarget
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
prevPoint = point
|
|
125
|
-
prevTarget = getTargetImpl(point, event)
|
|
126
|
-
return prevTarget
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
return getTargetCached
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
function pointEqual(a: Point, b: Point) {
|
|
133
|
-
return a[0] === b[0] && a[1] === b[1]
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
function pointPointDistance(a: Point, b: Point) {
|
|
137
|
-
// Manhattan distance
|
|
138
|
-
return Math.abs(a[0] - b[0]) + Math.abs(a[1] - b[1])
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
function pointLineDistance(point: Point, line: Line) {
|
|
142
|
-
// Notice that we are actually not calculating the distance between the point
|
|
143
|
-
// and the line. Instead, we are calculating the distance between the point
|
|
144
|
-
// and the two endpoints of the line.
|
|
145
|
-
return Math.min(
|
|
146
|
-
pointPointDistance(point, [line[0], line[1]]),
|
|
147
|
-
pointPointDistance(point, [line[2], line[3]]),
|
|
148
|
-
)
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
/**
|
|
152
|
-
* Whether the dragging node is being dragged to the same position. For example,
|
|
153
|
-
* dragging a list node into a new position that is just below the list node, or
|
|
154
|
-
* dragging a nested quoteblock into itself.
|
|
155
|
-
*/
|
|
156
|
-
function isDraggingToItself(view: EditorView, pos: number) {
|
|
157
|
-
const dragging = view.dragging
|
|
158
|
-
if (!dragging) return
|
|
159
|
-
|
|
160
|
-
const { move } = dragging
|
|
161
|
-
if (!move) return
|
|
162
|
-
|
|
163
|
-
const selection = view.state.selection
|
|
164
|
-
if (!isNodeSelection(selection)) return
|
|
165
|
-
|
|
166
|
-
const { from, to } = selection
|
|
167
|
-
return from <= pos && pos <= to
|
|
168
|
-
}
|
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
import type { Slice } from '@prosekit/pm/model'
|
|
2
|
-
import type { NodeSelection } from '@prosekit/pm/state'
|
|
3
|
-
import type { EditorView } from '@prosekit/pm/view'
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* A function that will be called when the `dragover` event is fired. You can
|
|
7
|
-
* return `false` to disable the current drop point and thus hide the drop
|
|
8
|
-
* indicator.
|
|
9
|
-
*
|
|
10
|
-
* @public
|
|
11
|
-
*/
|
|
12
|
-
export type DragEventHandler = (options: DragEventHandlerOptions) => boolean
|
|
13
|
-
|
|
14
|
-
/**
|
|
15
|
-
* Options for {@link DragEventHandler}.
|
|
16
|
-
*
|
|
17
|
-
* @public
|
|
18
|
-
*/
|
|
19
|
-
export interface DragEventHandlerOptions {
|
|
20
|
-
/**
|
|
21
|
-
* The editor's view.
|
|
22
|
-
*/
|
|
23
|
-
view: EditorView
|
|
24
|
-
/**
|
|
25
|
-
* The drop position in current document.
|
|
26
|
-
*/
|
|
27
|
-
pos: number
|
|
28
|
-
/**
|
|
29
|
-
* The `dragover` event.
|
|
30
|
-
*/
|
|
31
|
-
event: DragEvent
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
/**
|
|
35
|
-
* A function that will be called when the drop indicator should be shown.
|
|
36
|
-
*
|
|
37
|
-
* @public
|
|
38
|
-
*/
|
|
39
|
-
export type ShowHandler = (options: ShowHandlerOptions) => void
|
|
40
|
-
|
|
41
|
-
/**
|
|
42
|
-
* Options for {@link ShowHandler}.
|
|
43
|
-
*
|
|
44
|
-
* @public
|
|
45
|
-
*/
|
|
46
|
-
export interface ShowHandlerOptions {
|
|
47
|
-
/**
|
|
48
|
-
* The editor's view.
|
|
49
|
-
*/
|
|
50
|
-
view: EditorView
|
|
51
|
-
|
|
52
|
-
/**
|
|
53
|
-
* The ProseMirror position that the drop indicator should be shown at.
|
|
54
|
-
*/
|
|
55
|
-
pos: number
|
|
56
|
-
|
|
57
|
-
/**
|
|
58
|
-
* The line that the drop indicator should be shown at.
|
|
59
|
-
*/
|
|
60
|
-
line: Line
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
/**
|
|
64
|
-
* @internal
|
|
65
|
-
*/
|
|
66
|
-
export interface Point {
|
|
67
|
-
readonly x: number
|
|
68
|
-
readonly y: number
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
/**
|
|
72
|
-
* @internal
|
|
73
|
-
*/
|
|
74
|
-
export interface Line {
|
|
75
|
-
readonly p1: Point
|
|
76
|
-
readonly p2: Point
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
/**
|
|
80
|
-
* An interface matching the internal ProseMirror implementation.
|
|
81
|
-
*
|
|
82
|
-
* See https://github.com/ProseMirror/prosemirror-view/blob/1.38.1/src/input.ts#L657
|
|
83
|
-
*
|
|
84
|
-
* @internal
|
|
85
|
-
*/
|
|
86
|
-
export interface ViewDragging {
|
|
87
|
-
readonly slice: Slice
|
|
88
|
-
readonly move: boolean
|
|
89
|
-
readonly node?: NodeSelection
|
|
90
|
-
}
|