@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.
Files changed (119) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +11 -0
  3. package/lib/changeset.d.ts +2 -0
  4. package/lib/changeset.d.ts.map +1 -0
  5. package/lib/changeset.js +2 -0
  6. package/lib/changeset.js.map +1 -0
  7. package/lib/commands.d.ts +2 -0
  8. package/lib/commands.d.ts.map +1 -0
  9. package/lib/commands.js +2 -0
  10. package/lib/commands.js.map +1 -0
  11. package/lib/dropcursor.d.ts +2 -0
  12. package/lib/dropcursor.d.ts.map +1 -0
  13. package/lib/dropcursor.js +2 -0
  14. package/lib/dropcursor.js.map +1 -0
  15. package/lib/gapcursor.d.ts +2 -0
  16. package/lib/gapcursor.d.ts.map +1 -0
  17. package/lib/gapcursor.js +2 -0
  18. package/lib/gapcursor.js.map +1 -0
  19. package/lib/history.d.ts +2 -0
  20. package/lib/history.d.ts.map +1 -0
  21. package/lib/history.js +2 -0
  22. package/lib/history.js.map +1 -0
  23. package/lib/index.d.ts +132 -0
  24. package/lib/index.d.ts.map +1 -0
  25. package/lib/index.js +402 -0
  26. package/lib/index.js.map +1 -0
  27. package/lib/inputrules.d.ts +2 -0
  28. package/lib/inputrules.d.ts.map +1 -0
  29. package/lib/inputrules.js +2 -0
  30. package/lib/inputrules.js.map +1 -0
  31. package/lib/keymap.d.ts +2 -0
  32. package/lib/keymap.d.ts.map +1 -0
  33. package/lib/keymap.js +2 -0
  34. package/lib/keymap.js.map +1 -0
  35. package/lib/model.d.ts +2 -0
  36. package/lib/model.d.ts.map +1 -0
  37. package/lib/model.js +2 -0
  38. package/lib/model.js.map +1 -0
  39. package/lib/schema-list.d.ts +2 -0
  40. package/lib/schema-list.d.ts.map +1 -0
  41. package/lib/schema-list.js +2 -0
  42. package/lib/schema-list.js.map +1 -0
  43. package/lib/state.d.ts +2 -0
  44. package/lib/state.d.ts.map +1 -0
  45. package/lib/state.js +2 -0
  46. package/lib/state.js.map +1 -0
  47. package/lib/style/gapcursor.css +25 -0
  48. package/lib/style/prosemirror.css +54 -0
  49. package/lib/style/tables.css +48 -0
  50. package/lib/tables.d.ts +2 -0
  51. package/lib/tables.d.ts.map +1 -0
  52. package/lib/tables.js +2 -0
  53. package/lib/tables.js.map +1 -0
  54. package/lib/toolkit/browser.d.ts +17 -0
  55. package/lib/toolkit/browser.d.ts.map +1 -0
  56. package/lib/toolkit/index.d.ts +5 -0
  57. package/lib/toolkit/index.d.ts.map +1 -0
  58. package/lib/toolkit/input-rules/common.d.ts +20 -0
  59. package/lib/toolkit/input-rules/common.d.ts.map +1 -0
  60. package/lib/toolkit/input-rules/custom-input-rules.d.ts +7 -0
  61. package/lib/toolkit/input-rules/custom-input-rules.d.ts.map +1 -0
  62. package/lib/toolkit/input-rules/index.d.ts +5 -0
  63. package/lib/toolkit/input-rules/index.d.ts.map +1 -0
  64. package/lib/toolkit/input-rules/mark-rule.d.ts +5 -0
  65. package/lib/toolkit/input-rules/mark-rule.d.ts.map +1 -0
  66. package/lib/toolkit/input-rules/node-rule.d.ts +5 -0
  67. package/lib/toolkit/input-rules/node-rule.d.ts.map +1 -0
  68. package/lib/toolkit/position/index.d.ts +13 -0
  69. package/lib/toolkit/position/index.d.ts.map +1 -0
  70. package/lib/toolkit/prose/helper.d.ts +6 -0
  71. package/lib/toolkit/prose/helper.d.ts.map +1 -0
  72. package/lib/toolkit/prose/index.d.ts +5 -0
  73. package/lib/toolkit/prose/index.d.ts.map +1 -0
  74. package/lib/toolkit/prose/node.d.ts +17 -0
  75. package/lib/toolkit/prose/node.d.ts.map +1 -0
  76. package/lib/toolkit/prose/schema.d.ts +4 -0
  77. package/lib/toolkit/prose/schema.d.ts.map +1 -0
  78. package/lib/toolkit/prose/selection.d.ts +19 -0
  79. package/lib/toolkit/prose/selection.d.ts.map +1 -0
  80. package/lib/toolkit/prose/types.d.ts +3 -0
  81. package/lib/toolkit/prose/types.d.ts.map +1 -0
  82. package/lib/transform.d.ts +2 -0
  83. package/lib/transform.d.ts.map +1 -0
  84. package/lib/transform.js +2 -0
  85. package/lib/transform.js.map +1 -0
  86. package/lib/tsconfig.tsbuildinfo +1 -0
  87. package/lib/view.d.ts +2 -0
  88. package/lib/view.d.ts.map +1 -0
  89. package/lib/view.js +2 -0
  90. package/lib/view.js.map +1 -0
  91. package/package.json +141 -0
  92. package/src/changeset.ts +1 -0
  93. package/src/commands.ts +1 -0
  94. package/src/dropcursor.ts +1 -0
  95. package/src/gapcursor.ts +1 -0
  96. package/src/history.ts +1 -0
  97. package/src/index.ts +1 -0
  98. package/src/inputrules.ts +1 -0
  99. package/src/keymap.ts +1 -0
  100. package/src/model.ts +1 -0
  101. package/src/schema-list.ts +1 -0
  102. package/src/state.ts +1 -0
  103. package/src/tables.ts +1 -0
  104. package/src/toolkit/browser.ts +39 -0
  105. package/src/toolkit/index.ts +4 -0
  106. package/src/toolkit/input-rules/common.ts +25 -0
  107. package/src/toolkit/input-rules/custom-input-rules.ts +113 -0
  108. package/src/toolkit/input-rules/index.ts +4 -0
  109. package/src/toolkit/input-rules/mark-rule.ts +60 -0
  110. package/src/toolkit/input-rules/node-rule.ts +51 -0
  111. package/src/toolkit/position/index.ts +108 -0
  112. package/src/toolkit/prose/helper.ts +30 -0
  113. package/src/toolkit/prose/index.ts +4 -0
  114. package/src/toolkit/prose/node.ts +63 -0
  115. package/src/toolkit/prose/schema.ts +19 -0
  116. package/src/toolkit/prose/selection.ts +97 -0
  117. package/src/toolkit/prose/types.ts +3 -0
  118. package/src/transform.ts +1 -0
  119. 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
+ }
@@ -0,0 +1,3 @@
1
+ import type { Node } from '../../model'
2
+
3
+ export type Predicate = (node: Node) => boolean
@@ -0,0 +1 @@
1
+ export * from 'prosemirror-transform'
package/src/view.ts ADDED
@@ -0,0 +1 @@
1
+ export * from 'prosemirror-view'