@tiptap/core 2.0.0-beta.99 → 2.0.0-rc.2

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 (297) hide show
  1. package/README.md +3 -3
  2. package/dist/index.cjs +4360 -0
  3. package/dist/index.cjs.map +1 -0
  4. package/dist/{tiptap-core.esm.js → index.js} +2349 -1447
  5. package/dist/index.js.map +1 -0
  6. package/dist/index.umd.js +4358 -0
  7. package/dist/index.umd.js.map +1 -0
  8. package/dist/packages/core/src/CommandManager.d.ts +14 -7
  9. package/dist/packages/core/src/Editor.d.ts +25 -11
  10. package/dist/packages/core/src/EventEmitter.d.ts +8 -4
  11. package/dist/packages/core/src/Extension.d.ts +63 -29
  12. package/dist/packages/core/src/ExtensionManager.d.ts +3 -4
  13. package/dist/packages/core/src/InputRule.d.ts +42 -0
  14. package/dist/packages/core/src/Mark.d.ts +94 -36
  15. package/dist/packages/core/src/Node.d.ts +104 -45
  16. package/dist/packages/core/src/NodeView.d.ts +8 -8
  17. package/dist/packages/core/src/PasteRule.d.ts +42 -0
  18. package/dist/packages/core/src/Tracker.d.ts +1 -1
  19. package/dist/packages/core/src/commands/deleteCurrentNode.d.ts +12 -0
  20. package/dist/packages/core/src/commands/deleteNode.d.ts +1 -1
  21. package/dist/packages/core/src/commands/deleteRange.d.ts +1 -1
  22. package/dist/packages/core/src/commands/extendMarkRange.d.ts +1 -1
  23. package/dist/packages/core/src/commands/focus.d.ts +4 -2
  24. package/dist/packages/core/src/commands/index.d.ts +50 -0
  25. package/dist/packages/core/src/commands/insertContent.d.ts +6 -3
  26. package/dist/packages/core/src/commands/insertContentAt.d.ts +6 -3
  27. package/dist/packages/core/src/commands/join.d.ts +33 -0
  28. package/dist/packages/core/src/commands/lift.d.ts +1 -1
  29. package/dist/packages/core/src/commands/liftListItem.d.ts +1 -1
  30. package/dist/packages/core/src/commands/resetAttributes.d.ts +1 -1
  31. package/dist/packages/core/src/commands/selectTextblockEnd.d.ts +12 -0
  32. package/dist/packages/core/src/commands/selectTextblockStart.d.ts +12 -0
  33. package/dist/packages/core/src/commands/setContent.d.ts +2 -2
  34. package/dist/packages/core/src/commands/setMark.d.ts +1 -1
  35. package/dist/packages/core/src/commands/setNode.d.ts +1 -1
  36. package/dist/packages/core/src/commands/setTextSelection.d.ts +1 -1
  37. package/dist/packages/core/src/commands/sinkListItem.d.ts +1 -1
  38. package/dist/packages/core/src/commands/splitListItem.d.ts +1 -1
  39. package/dist/packages/core/src/commands/toggleList.d.ts +2 -2
  40. package/dist/packages/core/src/commands/toggleMark.d.ts +7 -2
  41. package/dist/packages/core/src/commands/toggleNode.d.ts +1 -1
  42. package/dist/packages/core/src/commands/toggleWrap.d.ts +1 -1
  43. package/dist/packages/core/src/commands/unsetMark.d.ts +7 -2
  44. package/dist/packages/core/src/commands/updateAttributes.d.ts +1 -1
  45. package/dist/packages/core/src/commands/wrapIn.d.ts +1 -1
  46. package/dist/packages/core/src/commands/wrapInList.d.ts +1 -1
  47. package/dist/packages/core/src/extensions/clipboardTextSerializer.d.ts +1 -1
  48. package/dist/packages/core/src/extensions/commands.d.ts +2 -97
  49. package/dist/packages/core/src/extensions/editable.d.ts +1 -1
  50. package/dist/packages/core/src/extensions/focusEvents.d.ts +1 -1
  51. package/dist/packages/core/src/extensions/index.d.ts +1 -0
  52. package/dist/packages/core/src/extensions/keymap.d.ts +1 -1
  53. package/dist/packages/core/src/extensions/tabindex.d.ts +2 -0
  54. package/dist/packages/core/src/helpers/combineTransactionSteps.d.ts +7 -0
  55. package/dist/packages/core/src/helpers/createChainableState.d.ts +5 -0
  56. package/dist/packages/core/src/helpers/createDocument.d.ts +2 -2
  57. package/dist/packages/core/src/helpers/createNodeFromContent.d.ts +2 -2
  58. package/dist/packages/core/src/helpers/defaultBlockAt.d.ts +2 -0
  59. package/dist/packages/core/src/helpers/findChildren.d.ts +3 -3
  60. package/dist/packages/core/src/helpers/findChildrenInRange.d.ts +3 -3
  61. package/dist/packages/core/src/helpers/findParentNode.d.ts +3 -4
  62. package/dist/packages/core/src/helpers/findParentNodeClosestToPos.d.ts +3 -3
  63. package/dist/packages/core/src/helpers/generateHTML.d.ts +1 -1
  64. package/dist/packages/core/src/helpers/generateJSON.d.ts +1 -1
  65. package/dist/packages/core/src/helpers/generateText.d.ts +5 -0
  66. package/dist/packages/core/src/helpers/getAttributes.d.ts +3 -3
  67. package/dist/packages/core/src/helpers/getAttributesFromExtensions.d.ts +2 -2
  68. package/dist/packages/core/src/helpers/getChangedRanges.d.ts +11 -0
  69. package/dist/packages/core/src/helpers/getDebugJSON.d.ts +2 -5
  70. package/dist/packages/core/src/helpers/getExtensionField.d.ts +2 -2
  71. package/dist/packages/core/src/helpers/getHTMLFromFragment.d.ts +2 -2
  72. package/dist/packages/core/src/helpers/getMarkAttributes.d.ts +3 -3
  73. package/dist/packages/core/src/helpers/getMarkRange.d.ts +2 -2
  74. package/dist/packages/core/src/helpers/getMarkType.d.ts +2 -2
  75. package/dist/packages/core/src/helpers/getMarksBetween.d.ts +2 -2
  76. package/dist/packages/core/src/helpers/getNodeAttributes.d.ts +3 -3
  77. package/dist/packages/core/src/helpers/getNodeType.d.ts +2 -2
  78. package/dist/packages/core/src/helpers/getRenderedAttributes.d.ts +2 -2
  79. package/dist/packages/core/src/helpers/getSchema.d.ts +2 -2
  80. package/dist/packages/core/src/helpers/getSchemaByResolvedExtensions.d.ts +2 -2
  81. package/dist/packages/core/src/helpers/getSchemaTypeByName.d.ts +2 -2
  82. package/dist/packages/core/src/helpers/getSchemaTypeNameByName.d.ts +2 -2
  83. package/dist/packages/core/src/helpers/getSplittedAttributes.d.ts +1 -1
  84. package/dist/packages/core/src/helpers/getText.d.ts +6 -0
  85. package/dist/packages/core/src/helpers/getTextBetween.d.ts +6 -0
  86. package/dist/packages/core/src/helpers/getTextContentFromNodes.d.ts +2 -0
  87. package/dist/packages/core/src/helpers/getTextSerializersFromSchema.d.ts +3 -0
  88. package/dist/packages/core/src/helpers/index.d.ts +47 -0
  89. package/dist/packages/core/src/helpers/injectExtensionAttributesToParseRule.d.ts +2 -2
  90. package/dist/packages/core/src/helpers/isActive.d.ts +2 -2
  91. package/dist/packages/core/src/helpers/isExtensionRulesEnabled.d.ts +2 -0
  92. package/dist/packages/core/src/helpers/isList.d.ts +1 -1
  93. package/dist/packages/core/src/helpers/isMarkActive.d.ts +3 -3
  94. package/dist/packages/core/src/helpers/isNodeActive.d.ts +3 -3
  95. package/dist/packages/core/src/helpers/isNodeEmpty.d.ts +2 -2
  96. package/dist/packages/core/src/helpers/isNodeSelection.d.ts +2 -2
  97. package/dist/packages/core/src/helpers/isTextSelection.d.ts +2 -2
  98. package/dist/packages/core/src/helpers/posToDOMRect.d.ts +2 -2
  99. package/dist/packages/core/src/helpers/resolveFocusPosition.d.ts +4 -0
  100. package/dist/packages/core/src/helpers/selectionToInsertionEnd.d.ts +2 -2
  101. package/dist/packages/core/src/helpers/splitExtensions.d.ts +6 -6
  102. package/dist/packages/core/src/index.d.ts +12 -34
  103. package/dist/packages/core/src/inputRules/index.d.ts +5 -0
  104. package/dist/packages/core/src/inputRules/markInputRule.d.ts +12 -3
  105. package/dist/packages/core/src/inputRules/nodeInputRule.d.ts +12 -3
  106. package/dist/packages/core/src/inputRules/textInputRule.d.ts +9 -0
  107. package/dist/packages/core/src/inputRules/textblockTypeInputRule.d.ts +14 -0
  108. package/dist/packages/core/src/inputRules/wrappingInputRule.d.ts +27 -0
  109. package/dist/packages/core/src/pasteRules/index.d.ts +3 -0
  110. package/dist/packages/core/src/pasteRules/markPasteRule.d.ts +12 -3
  111. package/dist/packages/core/src/pasteRules/nodePasteRule.d.ts +12 -0
  112. package/dist/packages/core/src/pasteRules/textPasteRule.d.ts +9 -0
  113. package/dist/packages/core/src/style.d.ts +1 -2
  114. package/dist/packages/core/src/types.d.ts +70 -40
  115. package/dist/packages/core/src/utilities/callOrReturn.d.ts +1 -1
  116. package/dist/packages/core/src/utilities/createStyleTag.d.ts +1 -1
  117. package/dist/packages/core/src/utilities/deleteProps.d.ts +1 -1
  118. package/dist/packages/core/src/utilities/elementFromString.d.ts +1 -1
  119. package/dist/packages/core/src/utilities/escapeForRegEx.d.ts +1 -0
  120. package/dist/packages/core/src/utilities/findDuplicates.d.ts +1 -0
  121. package/dist/packages/core/src/utilities/fromString.d.ts +1 -1
  122. package/dist/packages/core/src/utilities/index.d.ts +20 -0
  123. package/dist/packages/core/src/utilities/isEmptyObject.d.ts +1 -1
  124. package/dist/packages/core/src/utilities/isFunction.d.ts +1 -0
  125. package/dist/packages/core/src/utilities/isMacOS.d.ts +1 -0
  126. package/dist/packages/core/src/utilities/isNumber.d.ts +1 -0
  127. package/dist/packages/core/src/utilities/isPlainObject.d.ts +1 -1
  128. package/dist/packages/core/src/utilities/isRegExp.d.ts +1 -0
  129. package/dist/packages/core/src/utilities/isString.d.ts +1 -0
  130. package/dist/packages/core/src/utilities/isiOS.d.ts +1 -1
  131. package/dist/packages/core/src/utilities/mergeAttributes.d.ts +1 -1
  132. package/dist/packages/core/src/utilities/mergeDeep.d.ts +1 -1
  133. package/dist/packages/core/src/utilities/minMax.d.ts +1 -1
  134. package/dist/packages/core/src/utilities/objectIncludes.d.ts +3 -1
  135. package/dist/packages/core/src/utilities/removeDuplicates.d.ts +8 -0
  136. package/package.json +25 -24
  137. package/src/CommandManager.ts +73 -83
  138. package/src/Editor.ts +101 -53
  139. package/src/EventEmitter.ts +14 -4
  140. package/src/Extension.ts +244 -138
  141. package/src/ExtensionManager.ts +153 -152
  142. package/src/InputRule.ts +260 -0
  143. package/src/Mark.ts +365 -204
  144. package/src/Node.ts +406 -253
  145. package/src/NodeView.ts +59 -38
  146. package/src/PasteRule.ts +240 -0
  147. package/src/Tracker.ts +4 -8
  148. package/src/commands/blur.ts +4 -0
  149. package/src/commands/clearNodes.ts +15 -9
  150. package/src/commands/createParagraphNear.ts +3 -2
  151. package/src/commands/deleteCurrentNode.ts +41 -0
  152. package/src/commands/deleteNode.ts +3 -2
  153. package/src/commands/deleteRange.ts +1 -1
  154. package/src/commands/deleteSelection.ts +3 -2
  155. package/src/commands/exitCode.ts +3 -2
  156. package/src/commands/extendMarkRange.ts +9 -5
  157. package/src/commands/focus.ts +31 -42
  158. package/src/commands/index.ts +50 -0
  159. package/src/commands/insertContent.ts +15 -4
  160. package/src/commands/insertContentAt.ts +71 -14
  161. package/src/commands/join.ts +53 -0
  162. package/src/commands/keyboardShortcut.ts +3 -3
  163. package/src/commands/lift.ts +6 -5
  164. package/src/commands/liftEmptyBlock.ts +2 -1
  165. package/src/commands/liftListItem.ts +5 -4
  166. package/src/commands/newlineInCode.ts +3 -2
  167. package/src/commands/resetAttributes.ts +16 -10
  168. package/src/commands/selectAll.ts +5 -3
  169. package/src/commands/selectNodeBackward.ts +3 -2
  170. package/src/commands/selectNodeForward.ts +3 -2
  171. package/src/commands/selectParentNode.ts +3 -2
  172. package/src/commands/selectTextblockEnd.ts +20 -0
  173. package/src/commands/selectTextblockStart.ts +20 -0
  174. package/src/commands/setContent.ts +6 -9
  175. package/src/commands/setMark.ts +66 -13
  176. package/src/commands/setNode.ts +30 -6
  177. package/src/commands/setNodeSelection.ts +6 -7
  178. package/src/commands/setTextSelection.ts +8 -9
  179. package/src/commands/sinkListItem.ts +5 -4
  180. package/src/commands/splitBlock.ts +23 -38
  181. package/src/commands/splitListItem.ts +30 -27
  182. package/src/commands/toggleList.ts +108 -19
  183. package/src/commands/toggleMark.ts +17 -6
  184. package/src/commands/toggleNode.ts +9 -4
  185. package/src/commands/toggleWrap.ts +8 -8
  186. package/src/commands/undoInputRule.ts +31 -2
  187. package/src/commands/unsetAllMarks.ts +4 -8
  188. package/src/commands/unsetMark.ts +34 -21
  189. package/src/commands/updateAttributes.ts +18 -12
  190. package/src/commands/wrapIn.ts +5 -10
  191. package/src/commands/wrapInList.ts +5 -4
  192. package/src/extensions/clipboardTextSerializer.ts +15 -36
  193. package/src/extensions/commands.ts +3 -144
  194. package/src/extensions/editable.ts +2 -1
  195. package/src/extensions/focusEvents.ts +4 -6
  196. package/src/extensions/index.ts +1 -0
  197. package/src/extensions/keymap.ts +111 -13
  198. package/src/extensions/tabindex.ts +18 -0
  199. package/src/helpers/combineTransactionSteps.ts +21 -0
  200. package/src/helpers/createChainableState.ts +38 -0
  201. package/src/helpers/createDocument.ts +4 -3
  202. package/src/helpers/createNodeFromContent.ts +10 -15
  203. package/src/helpers/defaultBlockAt.ts +13 -0
  204. package/src/helpers/findChildren.ts +4 -3
  205. package/src/helpers/findChildrenInRange.ts +8 -3
  206. package/src/helpers/findParentNode.ts +4 -3
  207. package/src/helpers/findParentNodeClosestToPos.ts +13 -7
  208. package/src/helpers/generateHTML.ts +6 -5
  209. package/src/helpers/generateJSON.ts +6 -7
  210. package/src/helpers/generateText.ts +27 -0
  211. package/src/helpers/getAttributes.ts +8 -9
  212. package/src/helpers/getAttributesFromExtensions.ts +25 -12
  213. package/src/helpers/getChangedRanges.ts +83 -0
  214. package/src/helpers/getDebugJSON.ts +42 -38
  215. package/src/helpers/getExtensionField.ts +3 -3
  216. package/src/helpers/getHTMLFromFragment.ts +5 -6
  217. package/src/helpers/getMarkAttributes.ts +18 -10
  218. package/src/helpers/getMarkRange.ts +13 -8
  219. package/src/helpers/getMarkType.ts +5 -3
  220. package/src/helpers/getMarksBetween.ts +34 -10
  221. package/src/helpers/getNodeAttributes.ts +14 -12
  222. package/src/helpers/getNodeType.ts +5 -3
  223. package/src/helpers/getRenderedAttributes.ts +8 -6
  224. package/src/helpers/getSchema.ts +5 -4
  225. package/src/helpers/getSchemaByResolvedExtensions.ts +165 -111
  226. package/src/helpers/getSchemaTypeByName.ts +3 -11
  227. package/src/helpers/getSchemaTypeNameByName.ts +2 -2
  228. package/src/helpers/getSplittedAttributes.ts +1 -1
  229. package/src/helpers/getText.ts +19 -0
  230. package/src/helpers/getTextBetween.ts +46 -0
  231. package/src/helpers/getTextContentFromNodes.ts +26 -0
  232. package/src/helpers/getTextSerializersFromSchema.ts +11 -0
  233. package/src/helpers/index.ts +47 -0
  234. package/src/helpers/injectExtensionAttributesToParseRule.ts +22 -23
  235. package/src/helpers/isActive.ts +10 -5
  236. package/src/helpers/isExtensionRulesEnabled.ts +15 -0
  237. package/src/helpers/isList.ts +6 -5
  238. package/src/helpers/isMarkActive.ts +32 -35
  239. package/src/helpers/isNodeActive.ts +27 -37
  240. package/src/helpers/isNodeEmpty.ts +2 -2
  241. package/src/helpers/isNodeSelection.ts +3 -4
  242. package/src/helpers/isTextSelection.ts +3 -4
  243. package/src/helpers/posToDOMRect.ts +10 -4
  244. package/src/helpers/resolveFocusPosition.ts +42 -0
  245. package/src/helpers/selectionToInsertionEnd.ts +3 -3
  246. package/src/helpers/splitExtensions.ts +3 -3
  247. package/src/index.ts +12 -37
  248. package/src/inputRules/index.ts +5 -0
  249. package/src/inputRules/markInputRule.ts +59 -40
  250. package/src/inputRules/nodeInputRule.ts +45 -12
  251. package/src/inputRules/textInputRule.ts +35 -0
  252. package/src/inputRules/textblockTypeInputRule.ts +37 -0
  253. package/src/inputRules/wrappingInputRule.ts +84 -0
  254. package/src/pasteRules/index.ts +3 -0
  255. package/src/pasteRules/markPasteRule.ts +49 -56
  256. package/src/pasteRules/nodePasteRule.ts +37 -0
  257. package/src/pasteRules/textPasteRule.ts +35 -0
  258. package/src/style.ts +12 -3
  259. package/src/types.ts +140 -106
  260. package/src/utilities/callOrReturn.ts +3 -2
  261. package/src/utilities/createStyleTag.ts +8 -4
  262. package/src/utilities/deleteProps.ts +1 -1
  263. package/src/utilities/elementFromString.ts +1 -1
  264. package/src/utilities/escapeForRegEx.ts +4 -0
  265. package/src/utilities/findDuplicates.ts +5 -0
  266. package/src/utilities/fromString.ts +2 -2
  267. package/src/utilities/index.ts +20 -0
  268. package/src/utilities/isEmptyObject.ts +2 -2
  269. package/src/utilities/isFunction.ts +3 -0
  270. package/src/utilities/isMacOS.ts +5 -0
  271. package/src/utilities/isNumber.ts +3 -0
  272. package/src/utilities/isPlainObject.ts +8 -5
  273. package/src/utilities/isRegExp.ts +3 -0
  274. package/src/utilities/isString.ts +3 -0
  275. package/src/utilities/isiOS.ts +1 -1
  276. package/src/utilities/mergeAttributes.ts +2 -1
  277. package/src/utilities/mergeDeep.ts +2 -2
  278. package/src/utilities/minMax.ts +1 -1
  279. package/src/utilities/objectIncludes.ts +18 -4
  280. package/src/utilities/removeDuplicates.ts +15 -0
  281. package/CHANGELOG.md +0 -1190
  282. package/LICENSE.md +0 -21
  283. package/dist/packages/core/src/commands/joinBackward.d.ts +0 -12
  284. package/dist/packages/core/src/commands/joinForward.d.ts +0 -12
  285. package/dist/packages/core/src/utilities/isClass.d.ts +0 -1
  286. package/dist/packages/core/src/utilities/isObject.d.ts +0 -1
  287. package/dist/packages/core/src/utilities/removeElement.d.ts +0 -1
  288. package/dist/tiptap-core.cjs.js +0 -3408
  289. package/dist/tiptap-core.cjs.js.map +0 -1
  290. package/dist/tiptap-core.esm.js.map +0 -1
  291. package/dist/tiptap-core.umd.js +0 -3405
  292. package/dist/tiptap-core.umd.js.map +0 -1
  293. package/src/commands/joinBackward.ts +0 -17
  294. package/src/commands/joinForward.ts +0 -17
  295. package/src/utilities/isClass.ts +0 -7
  296. package/src/utilities/isObject.ts +0 -10
  297. package/src/utilities/removeElement.ts +0 -5
@@ -1,50 +1,54 @@
1
- import { Node as ProseMirrorNode } from 'prosemirror-model'
1
+ import { Node as ProseMirrorNode } from '@tiptap/pm/model'
2
+
2
3
  import { JSONContent } from '../types'
3
4
 
4
5
  interface DebugJSONContent extends JSONContent {
5
- from: number,
6
- to: number,
6
+ from: number
7
+ to: number
7
8
  }
8
9
 
9
- /**
10
- * Returns a node tree with node positions.
11
- */
12
- export default function getDebugJSON(node: ProseMirrorNode, startOffset = 0) {
13
- const nodes: DebugJSONContent[] = []
14
-
15
- node.forEach((n, offset) => {
16
- const from = startOffset + offset
17
- const to = from + n.nodeSize
18
- const marks = n.marks.map(mark => ({
10
+ export function getDebugJSON(node: ProseMirrorNode, startOffset = 0): DebugJSONContent {
11
+ const isTopNode = node.type === node.type.schema.topNodeType
12
+ const increment = isTopNode ? 0 : 1
13
+ const from = startOffset
14
+ const to = from + node.nodeSize
15
+ const marks = node.marks.map(mark => {
16
+ const output: { type: string; attrs?: Record<string, any> } = {
19
17
  type: mark.type.name,
20
- attrs: { ...mark.attrs },
21
- }))
22
- const attrs = { ...n.attrs }
23
- const content = getDebugJSON(n, from + 1)
24
- const output: DebugJSONContent = {
25
- type: n.type.name,
26
- from,
27
- to,
28
18
  }
29
19
 
30
- if (Object.keys(attrs).length) {
31
- output.attrs = attrs
20
+ if (Object.keys(mark.attrs).length) {
21
+ output.attrs = { ...mark.attrs }
32
22
  }
33
23
 
34
- if (marks.length) {
35
- output.marks = marks
36
- }
37
-
38
- if (content.length) {
39
- output.content = content
40
- }
41
-
42
- if (n.text) {
43
- output.text = n.text
44
- }
45
-
46
- nodes.push(output)
24
+ return output
47
25
  })
48
-
49
- return nodes
26
+ const attrs = { ...node.attrs }
27
+ const output: DebugJSONContent = {
28
+ type: node.type.name,
29
+ from,
30
+ to,
31
+ }
32
+
33
+ if (Object.keys(attrs).length) {
34
+ output.attrs = attrs
35
+ }
36
+
37
+ if (marks.length) {
38
+ output.marks = marks
39
+ }
40
+
41
+ if (node.content.childCount) {
42
+ output.content = []
43
+
44
+ node.forEach((child, offset) => {
45
+ output.content?.push(getDebugJSON(child, startOffset + offset + increment))
46
+ })
47
+ }
48
+
49
+ if (node.text) {
50
+ output.text = node.text
51
+ }
52
+
53
+ return output
50
54
  }
@@ -1,9 +1,9 @@
1
- import { AnyExtension, RemoveThis } from '../types'
1
+ import { AnyExtension, MaybeThisParameterType, RemoveThis } from '../types'
2
2
 
3
- export default function getExtensionField<T = any>(
3
+ export function getExtensionField<T = any>(
4
4
  extension: AnyExtension,
5
5
  field: string,
6
- context: Record<string, any> = {},
6
+ context?: Omit<MaybeThisParameterType<T>, 'parent'>,
7
7
  ): RemoveThis<T> {
8
8
 
9
9
  if (extension.config[field] === undefined && extension.parent) {
@@ -1,13 +1,12 @@
1
- import { Node, DOMSerializer, Schema } from 'prosemirror-model'
1
+ import { DOMSerializer, Fragment, Schema } from '@tiptap/pm/model'
2
2
 
3
- export default function getHTMLFromFragment(doc: Node, schema: Schema): string {
4
- const fragment = DOMSerializer
5
- .fromSchema(schema)
6
- .serializeFragment(doc.content)
3
+ export function getHTMLFromFragment(fragment: Fragment, schema: Schema): string {
4
+ const documentFragment = DOMSerializer.fromSchema(schema).serializeFragment(fragment)
7
5
 
8
6
  const temporaryDocument = document.implementation.createHTMLDocument()
9
7
  const container = temporaryDocument.createElement('div')
10
- container.appendChild(fragment)
8
+
9
+ container.appendChild(documentFragment)
11
10
 
12
11
  return container.innerHTML
13
12
  }
@@ -1,25 +1,33 @@
1
- import { EditorState } from 'prosemirror-state'
2
- import { Mark, MarkType } from 'prosemirror-model'
3
- import getMarkType from './getMarkType'
1
+ import { Mark, MarkType } from '@tiptap/pm/model'
2
+ import { EditorState } from '@tiptap/pm/state'
4
3
 
5
- export default function getMarkAttributes(state: EditorState, typeOrName: string | MarkType): Record<string, any> {
4
+ import { getMarkType } from './getMarkType'
5
+
6
+ export function getMarkAttributes(
7
+ state: EditorState,
8
+ typeOrName: string | MarkType,
9
+ ): Record<string, any> {
6
10
  const type = getMarkType(typeOrName, state.schema)
7
11
  const { from, to, empty } = state.selection
8
- let marks: Mark[] = []
12
+ const marks: Mark[] = []
9
13
 
10
14
  if (empty) {
11
- marks = state.selection.$head.marks()
15
+ if (state.storedMarks) {
16
+ marks.push(...state.storedMarks)
17
+ }
18
+
19
+ marks.push(...state.selection.$head.marks())
12
20
  } else {
13
21
  state.doc.nodesBetween(from, to, node => {
14
- marks = [...marks, ...node.marks]
22
+ marks.push(...node.marks)
15
23
  })
16
24
  }
17
25
 
18
26
  const mark = marks.find(markItem => markItem.type.name === type.name)
19
27
 
20
- if (mark) {
21
- return { ...mark.attrs }
28
+ if (!mark) {
29
+ return {}
22
30
  }
23
31
 
24
- return {}
32
+ return { ...mark.attrs }
25
33
  }
@@ -1,6 +1,7 @@
1
- import { Mark as ProseMirrorMark, MarkType, ResolvedPos } from 'prosemirror-model'
2
- import objectIncludes from '../utilities/objectIncludes'
1
+ import { Mark as ProseMirrorMark, MarkType, ResolvedPos } from '@tiptap/pm/model'
2
+
3
3
  import { Range } from '../types'
4
+ import { objectIncludes } from '../utilities/objectIncludes'
4
5
 
5
6
  function findMarkInSet(
6
7
  marks: ProseMirrorMark[],
@@ -20,7 +21,7 @@ function isMarkInSet(
20
21
  return !!findMarkInSet(marks, type, attributes)
21
22
  }
22
23
 
23
- export default function getMarkRange(
24
+ export function getMarkRange(
24
25
  $pos: ResolvedPos,
25
26
  type: MarkType,
26
27
  attributes: Record<string, any> = {},
@@ -29,24 +30,28 @@ export default function getMarkRange(
29
30
  return
30
31
  }
31
32
 
32
- const start = $pos.parent.childAfter($pos.parentOffset)
33
+ let start = $pos.parent.childAfter($pos.parentOffset)
34
+
35
+ if ($pos.parentOffset === start.offset && start.offset !== 0) {
36
+ start = $pos.parent.childBefore($pos.parentOffset)
37
+ }
33
38
 
34
39
  if (!start.node) {
35
40
  return
36
41
  }
37
42
 
38
- const mark = findMarkInSet(start.node.marks, type, attributes)
43
+ const mark = findMarkInSet([...start.node.marks], type, attributes)
39
44
 
40
45
  if (!mark) {
41
46
  return
42
47
  }
43
48
 
44
- let startIndex = $pos.index()
49
+ let startIndex = start.index
45
50
  let startPos = $pos.start() + start.offset
46
51
  let endIndex = startIndex + 1
47
52
  let endPos = startPos + start.node.nodeSize
48
53
 
49
- findMarkInSet(start.node.marks, type, attributes)
54
+ findMarkInSet([...start.node.marks], type, attributes)
50
55
 
51
56
  while (startIndex > 0 && mark.isInSet($pos.parent.child(startIndex - 1).marks)) {
52
57
  startIndex -= 1
@@ -55,7 +60,7 @@ export default function getMarkRange(
55
60
 
56
61
  while (
57
62
  endIndex < $pos.parent.childCount
58
- && isMarkInSet($pos.parent.child(endIndex).marks, type, attributes)
63
+ && isMarkInSet([...$pos.parent.child(endIndex).marks], type, attributes)
59
64
  ) {
60
65
  endPos += $pos.parent.child(endIndex).nodeSize
61
66
  endIndex += 1
@@ -1,9 +1,11 @@
1
- import { MarkType, Schema } from 'prosemirror-model'
1
+ import { MarkType, Schema } from '@tiptap/pm/model'
2
2
 
3
- export default function getMarkType(nameOrType: string | MarkType, schema: Schema): MarkType {
3
+ export function getMarkType(nameOrType: string | MarkType, schema: Schema): MarkType {
4
4
  if (typeof nameOrType === 'string') {
5
5
  if (!schema.marks[nameOrType]) {
6
- throw Error(`There is no mark type named '${nameOrType}'. Maybe you forgot to add the extension?`)
6
+ throw Error(
7
+ `There is no mark type named '${nameOrType}'. Maybe you forgot to add the extension?`,
8
+ )
7
9
  }
8
10
 
9
11
  return schema.marks[nameOrType]
@@ -1,16 +1,40 @@
1
- import { EditorState } from 'prosemirror-state'
1
+ import { Node as ProseMirrorNode } from '@tiptap/pm/model'
2
+
2
3
  import { MarkRange } from '../types'
4
+ import { getMarkRange } from './getMarkRange'
5
+
6
+ export function getMarksBetween(from: number, to: number, doc: ProseMirrorNode): MarkRange[] {
7
+ const marks: MarkRange[] = []
8
+
9
+ // get all inclusive marks on empty selection
10
+ if (from === to) {
11
+ doc
12
+ .resolve(from)
13
+ .marks()
14
+ .forEach(mark => {
15
+ const $pos = doc.resolve(from - 1)
16
+ const range = getMarkRange($pos, mark.type)
3
17
 
4
- export default function getMarksBetween(from: number, to: number, state: EditorState): MarkRange[] {
5
- let marks: MarkRange[] = []
18
+ if (!range) {
19
+ return
20
+ }
6
21
 
7
- state.doc.nodesBetween(from, to, (node, pos) => {
8
- marks = [...marks, ...node.marks.map(mark => ({
9
- from: pos,
10
- to: pos + node.nodeSize,
11
- mark,
12
- }))]
13
- })
22
+ marks.push({
23
+ mark,
24
+ ...range,
25
+ })
26
+ })
27
+ } else {
28
+ doc.nodesBetween(from, to, (node, pos) => {
29
+ marks.push(
30
+ ...node.marks.map(mark => ({
31
+ from: pos,
32
+ to: pos + node.nodeSize,
33
+ mark,
34
+ })),
35
+ )
36
+ })
37
+ }
14
38
 
15
39
  return marks
16
40
  }
@@ -1,23 +1,25 @@
1
- import { EditorState } from 'prosemirror-state'
2
- import { Node, NodeType } from 'prosemirror-model'
3
- import getNodeType from './getNodeType'
1
+ import { Node, NodeType } from '@tiptap/pm/model'
2
+ import { EditorState } from '@tiptap/pm/state'
4
3
 
5
- export default function getNodeAttributes(state: EditorState, typeOrName: string | NodeType): Record<string, any> {
4
+ import { getNodeType } from './getNodeType'
5
+
6
+ export function getNodeAttributes(
7
+ state: EditorState,
8
+ typeOrName: string | NodeType,
9
+ ): Record<string, any> {
6
10
  const type = getNodeType(typeOrName, state.schema)
7
11
  const { from, to } = state.selection
8
- let nodes: Node[] = []
12
+ const nodes: Node[] = []
9
13
 
10
14
  state.doc.nodesBetween(from, to, node => {
11
- nodes = [...nodes, node]
15
+ nodes.push(node)
12
16
  })
13
17
 
14
- const node = nodes
15
- .reverse()
16
- .find(nodeItem => nodeItem.type.name === type.name)
18
+ const node = nodes.reverse().find(nodeItem => nodeItem.type.name === type.name)
17
19
 
18
- if (node) {
19
- return { ...node.attrs }
20
+ if (!node) {
21
+ return {}
20
22
  }
21
23
 
22
- return {}
24
+ return { ...node.attrs }
23
25
  }
@@ -1,9 +1,11 @@
1
- import { NodeType, Schema } from 'prosemirror-model'
1
+ import { NodeType, Schema } from '@tiptap/pm/model'
2
2
 
3
- export default function getNodeType(nameOrType: string | NodeType, schema: Schema): NodeType {
3
+ export function getNodeType(nameOrType: string | NodeType, schema: Schema): NodeType {
4
4
  if (typeof nameOrType === 'string') {
5
5
  if (!schema.nodes[nameOrType]) {
6
- throw Error(`There is no node type named '${nameOrType}'. Maybe you forgot to add the extension?`)
6
+ throw Error(
7
+ `There is no node type named '${nameOrType}'. Maybe you forgot to add the extension?`,
8
+ )
7
9
  }
8
10
 
9
11
  return schema.nodes[nameOrType]
@@ -1,8 +1,12 @@
1
- import { Node, Mark } from 'prosemirror-model'
1
+ import { Mark, Node } from '@tiptap/pm/model'
2
+
2
3
  import { ExtensionAttribute } from '../types'
3
- import mergeAttributes from '../utilities/mergeAttributes'
4
+ import { mergeAttributes } from '../utilities/mergeAttributes'
4
5
 
5
- export default function getRenderedAttributes(nodeOrMark: Node | Mark, extensionAttributes: ExtensionAttribute[]): Record<string, any> {
6
+ export function getRenderedAttributes(
7
+ nodeOrMark: Node | Mark,
8
+ extensionAttributes: ExtensionAttribute[],
9
+ ): Record<string, any> {
6
10
  return extensionAttributes
7
11
  .filter(item => item.attribute.rendered)
8
12
  .map(item => {
@@ -14,7 +18,5 @@ export default function getRenderedAttributes(nodeOrMark: Node | Mark, extension
14
18
 
15
19
  return item.attribute.renderHTML(nodeOrMark.attrs) || {}
16
20
  })
17
- .reduce((attributes, attribute) => {
18
- return mergeAttributes(attributes, attribute)
19
- }, {})
21
+ .reduce((attributes, attribute) => mergeAttributes(attributes, attribute), {})
20
22
  }
@@ -1,9 +1,10 @@
1
- import { Schema } from 'prosemirror-model'
2
- import getSchemaByResolvedExtensions from './getSchemaByResolvedExtensions'
3
- import ExtensionManager from '../ExtensionManager'
1
+ import { Schema } from '@tiptap/pm/model'
2
+
3
+ import { ExtensionManager } from '../ExtensionManager'
4
4
  import { Extensions } from '../types'
5
+ import { getSchemaByResolvedExtensions } from './getSchemaByResolvedExtensions'
5
6
 
6
- export default function getSchema(extensions: Extensions): Schema {
7
+ export function getSchema(extensions: Extensions): Schema {
7
8
  const resolvedExtensions = ExtensionManager.resolve(extensions)
8
9
 
9
10
  return getSchemaByResolvedExtensions(resolvedExtensions)