@jvs-milkdown/prose 1.0.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/LICENSE +21 -0
- package/README.md +11 -0
- package/lib/changeset.d.ts +2 -0
- package/lib/changeset.d.ts.map +1 -0
- package/lib/changeset.js +2 -0
- package/lib/changeset.js.map +1 -0
- package/lib/commands.d.ts +2 -0
- package/lib/commands.d.ts.map +1 -0
- package/lib/commands.js +2 -0
- package/lib/commands.js.map +1 -0
- package/lib/dropcursor.d.ts +2 -0
- package/lib/dropcursor.d.ts.map +1 -0
- package/lib/dropcursor.js +2 -0
- package/lib/dropcursor.js.map +1 -0
- package/lib/gapcursor.d.ts +2 -0
- package/lib/gapcursor.d.ts.map +1 -0
- package/lib/gapcursor.js +2 -0
- package/lib/gapcursor.js.map +1 -0
- package/lib/history.d.ts +2 -0
- package/lib/history.d.ts.map +1 -0
- package/lib/history.js +2 -0
- package/lib/history.js.map +1 -0
- package/lib/index.d.ts +132 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +402 -0
- package/lib/index.js.map +1 -0
- package/lib/inputrules.d.ts +2 -0
- package/lib/inputrules.d.ts.map +1 -0
- package/lib/inputrules.js +2 -0
- package/lib/inputrules.js.map +1 -0
- package/lib/keymap.d.ts +2 -0
- package/lib/keymap.d.ts.map +1 -0
- package/lib/keymap.js +2 -0
- package/lib/keymap.js.map +1 -0
- package/lib/model.d.ts +2 -0
- package/lib/model.d.ts.map +1 -0
- package/lib/model.js +2 -0
- package/lib/model.js.map +1 -0
- package/lib/schema-list.d.ts +2 -0
- package/lib/schema-list.d.ts.map +1 -0
- package/lib/schema-list.js +2 -0
- package/lib/schema-list.js.map +1 -0
- package/lib/state.d.ts +2 -0
- package/lib/state.d.ts.map +1 -0
- package/lib/state.js +2 -0
- package/lib/state.js.map +1 -0
- package/lib/style/gapcursor.css +25 -0
- package/lib/style/prosemirror.css +54 -0
- package/lib/style/tables.css +48 -0
- package/lib/tables.d.ts +2 -0
- package/lib/tables.d.ts.map +1 -0
- package/lib/tables.js +2 -0
- package/lib/tables.js.map +1 -0
- package/lib/toolkit/browser.d.ts +17 -0
- package/lib/toolkit/browser.d.ts.map +1 -0
- package/lib/toolkit/index.d.ts +5 -0
- package/lib/toolkit/index.d.ts.map +1 -0
- package/lib/toolkit/input-rules/common.d.ts +20 -0
- package/lib/toolkit/input-rules/common.d.ts.map +1 -0
- package/lib/toolkit/input-rules/custom-input-rules.d.ts +7 -0
- package/lib/toolkit/input-rules/custom-input-rules.d.ts.map +1 -0
- package/lib/toolkit/input-rules/index.d.ts +5 -0
- package/lib/toolkit/input-rules/index.d.ts.map +1 -0
- package/lib/toolkit/input-rules/mark-rule.d.ts +5 -0
- package/lib/toolkit/input-rules/mark-rule.d.ts.map +1 -0
- package/lib/toolkit/input-rules/node-rule.d.ts +5 -0
- package/lib/toolkit/input-rules/node-rule.d.ts.map +1 -0
- package/lib/toolkit/position/index.d.ts +13 -0
- package/lib/toolkit/position/index.d.ts.map +1 -0
- package/lib/toolkit/prose/helper.d.ts +6 -0
- package/lib/toolkit/prose/helper.d.ts.map +1 -0
- package/lib/toolkit/prose/index.d.ts +5 -0
- package/lib/toolkit/prose/index.d.ts.map +1 -0
- package/lib/toolkit/prose/node.d.ts +17 -0
- package/lib/toolkit/prose/node.d.ts.map +1 -0
- package/lib/toolkit/prose/schema.d.ts +4 -0
- package/lib/toolkit/prose/schema.d.ts.map +1 -0
- package/lib/toolkit/prose/selection.d.ts +19 -0
- package/lib/toolkit/prose/selection.d.ts.map +1 -0
- package/lib/toolkit/prose/types.d.ts +3 -0
- package/lib/toolkit/prose/types.d.ts.map +1 -0
- package/lib/transform.d.ts +2 -0
- package/lib/transform.d.ts.map +1 -0
- package/lib/transform.js +2 -0
- package/lib/transform.js.map +1 -0
- package/lib/tsconfig.tsbuildinfo +1 -0
- package/lib/view.d.ts +2 -0
- package/lib/view.d.ts.map +1 -0
- package/lib/view.js +2 -0
- package/lib/view.js.map +1 -0
- package/package.json +141 -0
- package/src/changeset.ts +1 -0
- package/src/commands.ts +1 -0
- package/src/dropcursor.ts +1 -0
- package/src/gapcursor.ts +1 -0
- package/src/history.ts +1 -0
- package/src/index.ts +1 -0
- package/src/inputrules.ts +1 -0
- package/src/keymap.ts +1 -0
- package/src/model.ts +1 -0
- package/src/schema-list.ts +1 -0
- package/src/state.ts +1 -0
- package/src/tables.ts +1 -0
- package/src/toolkit/browser.ts +39 -0
- package/src/toolkit/index.ts +4 -0
- package/src/toolkit/input-rules/common.ts +25 -0
- package/src/toolkit/input-rules/custom-input-rules.ts +113 -0
- package/src/toolkit/input-rules/index.ts +4 -0
- package/src/toolkit/input-rules/mark-rule.ts +60 -0
- package/src/toolkit/input-rules/node-rule.ts +51 -0
- package/src/toolkit/position/index.ts +108 -0
- package/src/toolkit/prose/helper.ts +30 -0
- package/src/toolkit/prose/index.ts +4 -0
- package/src/toolkit/prose/node.ts +63 -0
- package/src/toolkit/prose/schema.ts +19 -0
- package/src/toolkit/prose/selection.ts +97 -0
- package/src/toolkit/prose/types.ts +3 -0
- package/src/transform.ts +1 -0
- package/src/view.ts +1 -0
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import type { MarkType, Node, NodeType, ResolvedPos } from '../../model'
|
|
2
|
+
import type { Predicate } from './types'
|
|
3
|
+
|
|
4
|
+
export interface NodeWithPos {
|
|
5
|
+
pos: number
|
|
6
|
+
node: Node
|
|
7
|
+
}
|
|
8
|
+
export interface NodeWithFromTo {
|
|
9
|
+
from: number
|
|
10
|
+
to: number
|
|
11
|
+
node: Node
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export function flatten(node: Node, descend = true): NodeWithPos[] {
|
|
15
|
+
const result: NodeWithPos[] = []
|
|
16
|
+
node.descendants((child, pos) => {
|
|
17
|
+
result.push({ node: child, pos })
|
|
18
|
+
if (!descend) return false
|
|
19
|
+
|
|
20
|
+
return undefined
|
|
21
|
+
})
|
|
22
|
+
return result
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export function findChildren(predicate: Predicate) {
|
|
26
|
+
return (node: Node, descend?: boolean): NodeWithPos[] =>
|
|
27
|
+
flatten(node, descend).filter((child) => predicate(child.node))
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export function findChildrenByMark(
|
|
31
|
+
node: Node,
|
|
32
|
+
markType: MarkType,
|
|
33
|
+
descend?: boolean
|
|
34
|
+
): NodeWithPos[] {
|
|
35
|
+
return findChildren((child) => Boolean(markType.isInSet(child.marks)))(
|
|
36
|
+
node,
|
|
37
|
+
descend
|
|
38
|
+
)
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export function findParent(predicate: Predicate) {
|
|
42
|
+
return ($pos: ResolvedPos): NodeWithFromTo | undefined => {
|
|
43
|
+
for (let depth = $pos.depth; depth > 0; depth -= 1) {
|
|
44
|
+
const node = $pos.node(depth)
|
|
45
|
+
|
|
46
|
+
if (predicate(node)) {
|
|
47
|
+
const from = $pos.before(depth)
|
|
48
|
+
const to = $pos.after(depth)
|
|
49
|
+
return {
|
|
50
|
+
from,
|
|
51
|
+
to,
|
|
52
|
+
node,
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
return undefined
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
export function findParentNodeType($pos: ResolvedPos, nodeType: NodeType) {
|
|
62
|
+
return findParent((node) => node.type === nodeType)($pos)
|
|
63
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { getAtomFromSchemaFail } from '@jvs-milkdown/exception'
|
|
2
|
+
|
|
3
|
+
import type { MarkType, NodeType, Schema } from '../../model'
|
|
4
|
+
|
|
5
|
+
export function getNodeFromSchema(type: string, schema: Schema): NodeType {
|
|
6
|
+
const target = schema.nodes[type]
|
|
7
|
+
|
|
8
|
+
if (!target) throw getAtomFromSchemaFail('node', type)
|
|
9
|
+
|
|
10
|
+
return target
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export function getMarkFromSchema(type: string, schema: Schema): MarkType {
|
|
14
|
+
const target = schema.marks[type]
|
|
15
|
+
|
|
16
|
+
if (!target) throw getAtomFromSchemaFail('mark', type)
|
|
17
|
+
|
|
18
|
+
return target
|
|
19
|
+
}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import type { NodeType, Node as ProseNode, ResolvedPos } from '../../model'
|
|
2
|
+
import type { EditorState, Selection } from '../../state'
|
|
3
|
+
import type { Predicate } from './types'
|
|
4
|
+
|
|
5
|
+
import { NodeSelection } from '../../state'
|
|
6
|
+
import { equalNodeType } from './helper'
|
|
7
|
+
|
|
8
|
+
export interface ContentNodeWithPos {
|
|
9
|
+
pos: number
|
|
10
|
+
start: number
|
|
11
|
+
depth: number
|
|
12
|
+
node: ProseNode
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export function findParentNodeClosestToPos(predicate: Predicate) {
|
|
16
|
+
return ($pos: ResolvedPos): ContentNodeWithPos | undefined => {
|
|
17
|
+
for (let i = $pos.depth; i > 0; i--) {
|
|
18
|
+
const node = $pos.node(i)
|
|
19
|
+
if (predicate(node)) {
|
|
20
|
+
return {
|
|
21
|
+
pos: $pos.before(i),
|
|
22
|
+
start: $pos.start(i),
|
|
23
|
+
depth: i,
|
|
24
|
+
node,
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
return undefined
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export function findParentNode(predicate: Predicate) {
|
|
34
|
+
return (selection: Selection): ContentNodeWithPos | undefined => {
|
|
35
|
+
return findParentNodeClosestToPos(predicate)(selection.$from)
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export function findSelectedNodeOfType(
|
|
40
|
+
selection: Selection,
|
|
41
|
+
nodeType: NodeType
|
|
42
|
+
): ContentNodeWithPos | undefined {
|
|
43
|
+
if (!(selection instanceof NodeSelection)) return
|
|
44
|
+
|
|
45
|
+
const { node, $from } = selection
|
|
46
|
+
if (equalNodeType(nodeType, node))
|
|
47
|
+
return {
|
|
48
|
+
node,
|
|
49
|
+
pos: $from.pos,
|
|
50
|
+
start: $from.start($from.depth),
|
|
51
|
+
depth: $from.depth,
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
return undefined
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
export type FindNodeInSelectionResult = {
|
|
58
|
+
hasNode: boolean
|
|
59
|
+
pos: number
|
|
60
|
+
target: ProseNode | null
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
export const findNodeInSelection = (
|
|
64
|
+
state: EditorState,
|
|
65
|
+
node: NodeType
|
|
66
|
+
): FindNodeInSelectionResult => {
|
|
67
|
+
const { selection, doc } = state
|
|
68
|
+
if (selection instanceof NodeSelection) {
|
|
69
|
+
return {
|
|
70
|
+
hasNode: selection.node.type === node,
|
|
71
|
+
pos: selection.from,
|
|
72
|
+
target: selection.node,
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
const { from, to } = selection
|
|
77
|
+
|
|
78
|
+
let hasNode = false
|
|
79
|
+
let pos = -1
|
|
80
|
+
let target: ProseNode | null = null
|
|
81
|
+
doc.nodesBetween(from, to, (n, p) => {
|
|
82
|
+
if (target) return false
|
|
83
|
+
if (n.type === node) {
|
|
84
|
+
hasNode = true
|
|
85
|
+
pos = p
|
|
86
|
+
target = n
|
|
87
|
+
return false
|
|
88
|
+
}
|
|
89
|
+
return true
|
|
90
|
+
})
|
|
91
|
+
|
|
92
|
+
return {
|
|
93
|
+
hasNode,
|
|
94
|
+
pos,
|
|
95
|
+
target,
|
|
96
|
+
}
|
|
97
|
+
}
|
package/src/transform.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from 'prosemirror-transform'
|
package/src/view.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from 'prosemirror-view'
|