@tiptap/core 2.0.0-beta.22 → 2.0.0-beta.220

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 (344) hide show
  1. package/README.md +2 -2
  2. package/dist/index.cjs +4354 -0
  3. package/dist/index.cjs.map +1 -0
  4. package/dist/index.js +4264 -0
  5. package/dist/index.js.map +1 -0
  6. package/dist/index.umd.js +4352 -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 +27 -22
  10. package/dist/packages/core/src/EventEmitter.d.ts +8 -4
  11. package/dist/packages/core/src/Extension.d.ts +93 -21
  12. package/dist/packages/core/src/ExtensionManager.d.ts +8 -14
  13. package/dist/packages/core/src/InputRule.d.ts +42 -0
  14. package/dist/packages/core/src/Mark.d.ts +132 -24
  15. package/dist/packages/core/src/Node.d.ts +150 -26
  16. package/dist/packages/core/src/NodeView.d.ts +11 -15
  17. package/dist/packages/core/src/PasteRule.d.ts +42 -0
  18. package/dist/packages/core/src/Tracker.d.ts +11 -0
  19. package/dist/packages/core/src/commands/blur.d.ts +3 -3
  20. package/dist/packages/core/src/commands/clearContent.d.ts +3 -3
  21. package/dist/packages/core/src/commands/clearNodes.d.ts +3 -3
  22. package/dist/packages/core/src/commands/command.d.ts +2 -2
  23. package/dist/packages/core/src/commands/createParagraphNear.d.ts +3 -3
  24. package/dist/packages/core/src/commands/deleteCurrentNode.d.ts +12 -0
  25. package/dist/packages/core/src/commands/deleteNode.d.ts +13 -0
  26. package/dist/packages/core/src/commands/deleteRange.d.ts +3 -3
  27. package/dist/packages/core/src/commands/deleteSelection.d.ts +3 -3
  28. package/dist/packages/core/src/commands/enter.d.ts +3 -3
  29. package/dist/packages/core/src/commands/exitCode.d.ts +3 -3
  30. package/dist/packages/core/src/commands/extendMarkRange.d.ts +4 -4
  31. package/dist/packages/core/src/commands/first.d.ts +3 -3
  32. package/dist/packages/core/src/commands/focus.d.ts +5 -3
  33. package/dist/packages/core/src/commands/forEach.d.ts +14 -0
  34. package/dist/packages/core/src/commands/index.d.ts +50 -0
  35. package/dist/packages/core/src/commands/insertContent.d.ts +7 -3
  36. package/dist/packages/core/src/commands/insertContentAt.d.ts +16 -0
  37. package/dist/packages/core/src/commands/join.d.ts +33 -0
  38. package/dist/packages/core/src/commands/keyboardShortcut.d.ts +3 -3
  39. package/dist/packages/core/src/commands/lift.d.ts +4 -4
  40. package/dist/packages/core/src/commands/liftEmptyBlock.d.ts +3 -3
  41. package/dist/packages/core/src/commands/liftListItem.d.ts +4 -4
  42. package/dist/packages/core/src/commands/newlineInCode.d.ts +3 -3
  43. package/dist/packages/core/src/commands/resetAttributes.d.ts +4 -4
  44. package/dist/packages/core/src/commands/scrollIntoView.d.ts +3 -3
  45. package/dist/packages/core/src/commands/selectAll.d.ts +3 -3
  46. package/dist/packages/core/src/commands/selectNodeBackward.d.ts +3 -3
  47. package/dist/packages/core/src/commands/selectNodeForward.d.ts +3 -3
  48. package/dist/packages/core/src/commands/selectParentNode.d.ts +3 -3
  49. package/dist/packages/core/src/commands/selectTextblockEnd.d.ts +12 -0
  50. package/dist/packages/core/src/commands/selectTextblockStart.d.ts +12 -0
  51. package/dist/packages/core/src/commands/setContent.d.ts +4 -3
  52. package/dist/packages/core/src/commands/setMark.d.ts +4 -4
  53. package/dist/packages/core/src/commands/setMeta.d.ts +12 -0
  54. package/dist/packages/core/src/commands/setNode.d.ts +4 -4
  55. package/dist/packages/core/src/commands/setNodeSelection.d.ts +12 -0
  56. package/dist/packages/core/src/commands/setTextSelection.d.ts +12 -0
  57. package/dist/packages/core/src/commands/sinkListItem.d.ts +4 -4
  58. package/dist/packages/core/src/commands/splitBlock.d.ts +3 -3
  59. package/dist/packages/core/src/commands/splitListItem.d.ts +4 -4
  60. package/dist/packages/core/src/commands/toggleList.d.ts +4 -4
  61. package/dist/packages/core/src/commands/toggleMark.d.ts +9 -4
  62. package/dist/packages/core/src/commands/toggleNode.d.ts +4 -4
  63. package/dist/packages/core/src/commands/toggleWrap.d.ts +4 -4
  64. package/dist/packages/core/src/commands/undoInputRule.d.ts +3 -3
  65. package/dist/packages/core/src/commands/unsetAllMarks.d.ts +3 -3
  66. package/dist/packages/core/src/commands/unsetMark.d.ts +9 -4
  67. package/dist/packages/core/src/commands/updateAttributes.d.ts +4 -4
  68. package/dist/packages/core/src/commands/wrapIn.d.ts +4 -4
  69. package/dist/packages/core/src/commands/wrapInList.d.ts +4 -4
  70. package/dist/packages/core/src/extensions/clipboardTextSerializer.d.ts +1 -1
  71. package/dist/packages/core/src/extensions/commands.d.ts +2 -99
  72. package/dist/packages/core/src/extensions/editable.d.ts +1 -1
  73. package/dist/packages/core/src/extensions/focusEvents.d.ts +1 -1
  74. package/dist/packages/core/src/extensions/index.d.ts +1 -0
  75. package/dist/packages/core/src/extensions/keymap.d.ts +1 -1
  76. package/dist/packages/core/src/extensions/tabindex.d.ts +2 -0
  77. package/dist/packages/core/src/helpers/combineTransactionSteps.d.ts +7 -0
  78. package/dist/packages/core/src/helpers/createChainableState.d.ts +5 -0
  79. package/dist/packages/core/src/helpers/createDocument.d.ts +3 -4
  80. package/dist/packages/core/src/helpers/createNodeFromContent.d.ts +4 -5
  81. package/dist/packages/core/src/helpers/defaultBlockAt.d.ts +2 -0
  82. package/dist/packages/core/src/helpers/findChildren.d.ts +3 -8
  83. package/dist/packages/core/src/helpers/findChildrenInRange.d.ts +6 -0
  84. package/dist/packages/core/src/helpers/findParentNode.d.ts +3 -4
  85. package/dist/packages/core/src/helpers/findParentNodeClosestToPos.d.ts +3 -3
  86. package/dist/packages/core/src/helpers/generateHTML.d.ts +2 -2
  87. package/dist/packages/core/src/helpers/generateJSON.d.ts +2 -0
  88. package/dist/packages/core/src/helpers/generateText.d.ts +5 -0
  89. package/dist/packages/core/src/helpers/getAttributes.d.ts +3 -0
  90. package/dist/packages/core/src/helpers/getAttributesFromExtensions.d.ts +2 -2
  91. package/dist/packages/core/src/helpers/getChangedRanges.d.ts +11 -0
  92. package/dist/packages/core/src/helpers/getDebugJSON.d.ts +8 -0
  93. package/dist/packages/core/src/helpers/getExtensionField.d.ts +2 -0
  94. package/dist/packages/core/src/helpers/getHTMLFromFragment.d.ts +2 -2
  95. package/dist/packages/core/src/helpers/getMarkAttributes.d.ts +3 -4
  96. package/dist/packages/core/src/helpers/getMarkRange.d.ts +2 -2
  97. package/dist/packages/core/src/helpers/getMarkType.d.ts +2 -2
  98. package/dist/packages/core/src/helpers/getMarksBetween.d.ts +2 -2
  99. package/dist/packages/core/src/helpers/getNodeAttributes.d.ts +3 -4
  100. package/dist/packages/core/src/helpers/getNodeType.d.ts +2 -2
  101. package/dist/packages/core/src/helpers/getRenderedAttributes.d.ts +3 -3
  102. package/dist/packages/core/src/helpers/getSchema.d.ts +2 -2
  103. package/dist/packages/core/src/helpers/getSchemaByResolvedExtensions.d.ts +3 -0
  104. package/dist/packages/core/src/helpers/getSchemaTypeByName.d.ts +2 -2
  105. package/dist/packages/core/src/helpers/getSchemaTypeNameByName.d.ts +2 -2
  106. package/dist/packages/core/src/helpers/getSplittedAttributes.d.ts +2 -2
  107. package/dist/packages/core/src/helpers/getText.d.ts +6 -0
  108. package/dist/packages/core/src/helpers/getTextBetween.d.ts +6 -0
  109. package/dist/packages/core/src/helpers/getTextContentFromNodes.d.ts +2 -0
  110. package/dist/packages/core/src/helpers/getTextSerializersFromSchema.d.ts +3 -0
  111. package/dist/packages/core/src/helpers/index.d.ts +47 -0
  112. package/dist/packages/core/src/helpers/injectExtensionAttributesToParseRule.d.ts +2 -2
  113. package/dist/packages/core/src/helpers/isActive.d.ts +2 -3
  114. package/dist/packages/core/src/helpers/isExtensionRulesEnabled.d.ts +2 -0
  115. package/dist/packages/core/src/helpers/isList.d.ts +1 -1
  116. package/dist/packages/core/src/helpers/isMarkActive.d.ts +3 -4
  117. package/dist/packages/core/src/helpers/isNodeActive.d.ts +3 -4
  118. package/dist/packages/core/src/helpers/isNodeEmpty.d.ts +2 -2
  119. package/dist/packages/core/src/helpers/isNodeSelection.d.ts +2 -2
  120. package/dist/packages/core/src/helpers/isTextSelection.d.ts +2 -2
  121. package/dist/packages/core/src/helpers/posToDOMRect.d.ts +2 -0
  122. package/dist/packages/core/src/helpers/resolveFocusPosition.d.ts +4 -0
  123. package/dist/packages/core/src/helpers/selectionToInsertionEnd.d.ts +2 -2
  124. package/dist/packages/core/src/helpers/splitExtensions.d.ts +6 -6
  125. package/dist/packages/core/src/index.d.ts +14 -23
  126. package/dist/packages/core/src/inputRules/index.d.ts +5 -0
  127. package/dist/packages/core/src/inputRules/markInputRule.d.ts +12 -3
  128. package/dist/packages/core/src/inputRules/nodeInputRule.d.ts +12 -3
  129. package/dist/packages/core/src/inputRules/textInputRule.d.ts +9 -0
  130. package/dist/packages/core/src/inputRules/textblockTypeInputRule.d.ts +14 -0
  131. package/dist/packages/core/src/inputRules/wrappingInputRule.d.ts +27 -0
  132. package/dist/packages/core/src/pasteRules/index.d.ts +3 -0
  133. package/dist/packages/core/src/pasteRules/markPasteRule.d.ts +12 -3
  134. package/dist/packages/core/src/pasteRules/nodePasteRule.d.ts +12 -0
  135. package/dist/packages/core/src/pasteRules/textPasteRule.d.ts +9 -0
  136. package/dist/packages/core/src/style.d.ts +1 -2
  137. package/dist/packages/core/src/types.d.ts +122 -62
  138. package/dist/packages/core/src/utilities/callOrReturn.d.ts +2 -1
  139. package/dist/packages/core/src/utilities/createStyleTag.d.ts +1 -1
  140. package/dist/packages/core/src/utilities/deleteProps.d.ts +1 -2
  141. package/dist/packages/core/src/utilities/elementFromString.d.ts +1 -1
  142. package/dist/packages/core/src/utilities/escapeForRegEx.d.ts +1 -0
  143. package/dist/packages/core/src/utilities/findDuplicates.d.ts +1 -0
  144. package/dist/packages/core/src/utilities/fromString.d.ts +1 -1
  145. package/dist/packages/core/src/utilities/index.d.ts +20 -0
  146. package/dist/packages/core/src/utilities/isEmptyObject.d.ts +1 -1
  147. package/dist/packages/core/src/utilities/isFunction.d.ts +1 -0
  148. package/dist/packages/core/src/utilities/isMacOS.d.ts +1 -0
  149. package/dist/packages/core/src/utilities/isNumber.d.ts +1 -0
  150. package/dist/packages/core/src/utilities/isPlainObject.d.ts +1 -1
  151. package/dist/packages/core/src/utilities/isRegExp.d.ts +1 -0
  152. package/dist/packages/core/src/utilities/isString.d.ts +1 -0
  153. package/dist/packages/core/src/utilities/isiOS.d.ts +1 -0
  154. package/dist/packages/core/src/utilities/mergeAttributes.d.ts +1 -2
  155. package/dist/packages/core/src/utilities/mergeDeep.d.ts +1 -2
  156. package/dist/packages/core/src/utilities/minMax.d.ts +1 -1
  157. package/dist/packages/core/src/utilities/objectIncludes.d.ts +3 -2
  158. package/dist/packages/core/src/utilities/removeDuplicates.d.ts +8 -0
  159. package/package.json +29 -24
  160. package/src/CommandManager.ts +76 -86
  161. package/src/Editor.ts +121 -79
  162. package/src/EventEmitter.ts +14 -4
  163. package/src/Extension.ts +276 -112
  164. package/src/ExtensionManager.ts +252 -110
  165. package/src/InputRule.ts +260 -0
  166. package/src/Mark.ts +394 -152
  167. package/src/Node.ts +433 -176
  168. package/src/NodeView.ts +144 -67
  169. package/src/PasteRule.ts +240 -0
  170. package/src/Tracker.ts +38 -0
  171. package/src/commands/blur.ts +12 -6
  172. package/src/commands/clearContent.ts +3 -3
  173. package/src/commands/clearNodes.ts +31 -19
  174. package/src/commands/command.ts +2 -2
  175. package/src/commands/createParagraphNear.ts +5 -4
  176. package/src/commands/deleteCurrentNode.ts +41 -0
  177. package/src/commands/deleteNode.ts +37 -0
  178. package/src/commands/deleteRange.ts +3 -3
  179. package/src/commands/deleteSelection.ts +5 -4
  180. package/src/commands/enter.ts +3 -3
  181. package/src/commands/exitCode.ts +5 -4
  182. package/src/commands/extendMarkRange.ts +16 -12
  183. package/src/commands/first.ts +3 -3
  184. package/src/commands/focus.ts +47 -44
  185. package/src/commands/forEach.ts +24 -0
  186. package/src/commands/index.ts +50 -0
  187. package/src/commands/insertContent.ts +17 -24
  188. package/src/commands/insertContentAt.ts +102 -0
  189. package/src/commands/join.ts +53 -0
  190. package/src/commands/keyboardShortcut.ts +6 -6
  191. package/src/commands/lift.ts +8 -7
  192. package/src/commands/liftEmptyBlock.ts +5 -4
  193. package/src/commands/liftListItem.ts +7 -6
  194. package/src/commands/newlineInCode.ts +5 -4
  195. package/src/commands/resetAttributes.ts +18 -12
  196. package/src/commands/scrollIntoView.ts +3 -3
  197. package/src/commands/selectAll.ts +8 -6
  198. package/src/commands/selectNodeBackward.ts +5 -4
  199. package/src/commands/selectNodeForward.ts +5 -4
  200. package/src/commands/selectParentNode.ts +5 -4
  201. package/src/commands/selectTextblockEnd.ts +20 -0
  202. package/src/commands/selectTextblockStart.ts +20 -0
  203. package/src/commands/setContent.ts +9 -16
  204. package/src/commands/setMark.ts +90 -14
  205. package/src/commands/setMeta.ts +18 -0
  206. package/src/commands/setNode.ts +32 -8
  207. package/src/commands/setNodeSelection.ts +27 -0
  208. package/src/commands/setTextSelection.ts +31 -0
  209. package/src/commands/sinkListItem.ts +7 -6
  210. package/src/commands/splitBlock.ts +31 -41
  211. package/src/commands/splitListItem.ts +58 -29
  212. package/src/commands/toggleList.ts +109 -20
  213. package/src/commands/toggleMark.ts +19 -8
  214. package/src/commands/toggleNode.ts +11 -6
  215. package/src/commands/toggleWrap.ts +10 -10
  216. package/src/commands/undoInputRule.ts +34 -5
  217. package/src/commands/unsetAllMarks.ts +7 -11
  218. package/src/commands/unsetMark.ts +36 -23
  219. package/src/commands/updateAttributes.ts +27 -15
  220. package/src/commands/wrapIn.ts +7 -12
  221. package/src/commands/wrapInList.ts +7 -6
  222. package/src/extensions/clipboardTextSerializer.ts +15 -36
  223. package/src/extensions/commands.ts +3 -147
  224. package/src/extensions/editable.ts +2 -1
  225. package/src/extensions/focusEvents.ts +4 -6
  226. package/src/extensions/index.ts +1 -0
  227. package/src/extensions/keymap.ts +106 -13
  228. package/src/extensions/tabindex.ts +18 -0
  229. package/src/helpers/combineTransactionSteps.ts +21 -0
  230. package/src/helpers/createChainableState.ts +38 -0
  231. package/src/helpers/createDocument.ts +5 -6
  232. package/src/helpers/createNodeFromContent.ts +20 -28
  233. package/src/helpers/defaultBlockAt.ts +13 -0
  234. package/src/helpers/findChildren.ts +3 -7
  235. package/src/helpers/findChildrenInRange.ts +36 -0
  236. package/src/helpers/findParentNode.ts +4 -3
  237. package/src/helpers/findParentNodeClosestToPos.ts +13 -7
  238. package/src/helpers/generateHTML.ts +7 -6
  239. package/src/helpers/generateJSON.ts +12 -0
  240. package/src/helpers/generateText.ts +27 -0
  241. package/src/helpers/getAttributes.ts +26 -0
  242. package/src/helpers/getAttributesFromExtensions.ts +42 -14
  243. package/src/helpers/getChangedRanges.ts +83 -0
  244. package/src/helpers/getDebugJSON.ts +54 -0
  245. package/src/helpers/getExtensionField.ts +25 -0
  246. package/src/helpers/getHTMLFromFragment.ts +5 -6
  247. package/src/helpers/getMarkAttributes.ts +18 -11
  248. package/src/helpers/getMarkRange.ts +41 -8
  249. package/src/helpers/getMarkType.ts +8 -2
  250. package/src/helpers/getMarksBetween.ts +34 -10
  251. package/src/helpers/getNodeAttributes.ts +14 -13
  252. package/src/helpers/getNodeType.ts +8 -2
  253. package/src/helpers/getRenderedAttributes.ts +9 -7
  254. package/src/helpers/getSchema.ts +7 -133
  255. package/src/helpers/getSchemaByResolvedExtensions.ts +192 -0
  256. package/src/helpers/getSchemaTypeByName.ts +3 -11
  257. package/src/helpers/getSchemaTypeNameByName.ts +2 -2
  258. package/src/helpers/getSplittedAttributes.ts +4 -4
  259. package/src/helpers/getText.ts +19 -0
  260. package/src/helpers/getTextBetween.ts +46 -0
  261. package/src/helpers/getTextContentFromNodes.ts +26 -0
  262. package/src/helpers/getTextSerializersFromSchema.ts +11 -0
  263. package/src/helpers/index.ts +47 -0
  264. package/src/helpers/injectExtensionAttributesToParseRule.ts +22 -23
  265. package/src/helpers/isActive.ts +10 -6
  266. package/src/helpers/isExtensionRulesEnabled.ts +15 -0
  267. package/src/helpers/isList.ts +14 -7
  268. package/src/helpers/isMarkActive.ts +49 -27
  269. package/src/helpers/isNodeActive.ts +29 -39
  270. package/src/helpers/isNodeEmpty.ts +2 -2
  271. package/src/helpers/isNodeSelection.ts +3 -4
  272. package/src/helpers/isTextSelection.ts +3 -4
  273. package/src/helpers/posToDOMRect.ts +35 -0
  274. package/src/helpers/resolveFocusPosition.ts +42 -0
  275. package/src/helpers/selectionToInsertionEnd.ts +3 -3
  276. package/src/helpers/splitExtensions.ts +3 -3
  277. package/src/index.ts +15 -26
  278. package/src/inputRules/index.ts +5 -0
  279. package/src/inputRules/markInputRule.ts +59 -40
  280. package/src/inputRules/nodeInputRule.ts +45 -12
  281. package/src/inputRules/textInputRule.ts +35 -0
  282. package/src/inputRules/textblockTypeInputRule.ts +37 -0
  283. package/src/inputRules/wrappingInputRule.ts +84 -0
  284. package/src/pasteRules/index.ts +3 -0
  285. package/src/pasteRules/markPasteRule.ts +61 -53
  286. package/src/pasteRules/nodePasteRule.ts +37 -0
  287. package/src/pasteRules/textPasteRule.ts +35 -0
  288. package/src/style.ts +16 -3
  289. package/src/types.ts +175 -97
  290. package/src/utilities/callOrReturn.ts +6 -3
  291. package/src/utilities/createStyleTag.ts +12 -1
  292. package/src/utilities/deleteProps.ts +2 -4
  293. package/src/utilities/elementFromString.ts +4 -5
  294. package/src/utilities/escapeForRegEx.ts +4 -0
  295. package/src/utilities/findDuplicates.ts +5 -0
  296. package/src/utilities/fromString.ts +2 -2
  297. package/src/utilities/index.ts +20 -0
  298. package/src/utilities/isEmptyObject.ts +2 -2
  299. package/src/utilities/isFunction.ts +3 -0
  300. package/src/utilities/isMacOS.ts +5 -0
  301. package/src/utilities/isNumber.ts +3 -0
  302. package/src/utilities/isPlainObject.ts +8 -5
  303. package/src/utilities/isRegExp.ts +3 -0
  304. package/src/utilities/isString.ts +3 -0
  305. package/src/utilities/isiOS.ts +12 -0
  306. package/src/utilities/mergeAttributes.ts +2 -3
  307. package/src/utilities/mergeDeep.ts +2 -3
  308. package/src/utilities/minMax.ts +1 -1
  309. package/src/utilities/objectIncludes.ts +17 -5
  310. package/src/utilities/removeDuplicates.ts +15 -0
  311. package/CHANGELOG.md +0 -373
  312. package/LICENSE.md +0 -21
  313. package/dist/packages/core/src/commands/insertHTML.d.ts +0 -12
  314. package/dist/packages/core/src/commands/insertNode.d.ts +0 -13
  315. package/dist/packages/core/src/commands/insertText.d.ts +0 -12
  316. package/dist/packages/core/src/commands/joinBackward.d.ts +0 -12
  317. package/dist/packages/core/src/commands/joinForward.d.ts +0 -12
  318. package/dist/packages/core/src/commands/replace.d.ts +0 -13
  319. package/dist/packages/core/src/commands/replaceRange.d.ts +0 -13
  320. package/dist/packages/core/src/commands/resetNodeAttributes.d.ts +0 -13
  321. package/dist/packages/core/src/commands/updateNodeAttributes.d.ts +0 -13
  322. package/dist/packages/core/src/utilities/isClass.d.ts +0 -1
  323. package/dist/packages/core/src/utilities/isObject.d.ts +0 -1
  324. package/dist/packages/core/src/utilities/removeElement.d.ts +0 -1
  325. package/dist/tiptap-core.bundle.umd.min.js +0 -17
  326. package/dist/tiptap-core.bundle.umd.min.js.map +0 -1
  327. package/dist/tiptap-core.cjs.js +0 -3048
  328. package/dist/tiptap-core.cjs.js.map +0 -1
  329. package/dist/tiptap-core.esm.js +0 -3021
  330. package/dist/tiptap-core.esm.js.map +0 -1
  331. package/dist/tiptap-core.umd.js +0 -3045
  332. package/dist/tiptap-core.umd.js.map +0 -1
  333. package/src/commands/insertHTML.ts +0 -30
  334. package/src/commands/insertNode.ts +0 -33
  335. package/src/commands/insertText.ts +0 -22
  336. package/src/commands/joinBackward.ts +0 -17
  337. package/src/commands/joinForward.ts +0 -17
  338. package/src/commands/replace.ts +0 -20
  339. package/src/commands/replaceRange.ts +0 -36
  340. package/src/commands/resetNodeAttributes.ts +0 -33
  341. package/src/commands/updateNodeAttributes.ts +0 -35
  342. package/src/utilities/isClass.ts +0 -7
  343. package/src/utilities/isObject.ts +0 -10
  344. package/src/utilities/removeElement.ts +0 -5
@@ -1,49 +1,37 @@
1
- import { EditorState } from 'prosemirror-state'
2
- import { NodeType } from 'prosemirror-model'
3
- import objectIncludes from '../utilities/objectIncludes'
4
- import getNodeType from './getNodeType'
5
- import { AnyObject, NodeRange } from '../types'
1
+ import { NodeType } from '@tiptap/pm/model'
2
+ import { EditorState } from '@tiptap/pm/state'
6
3
 
7
- export default function isNodeActive(
4
+ import { NodeRange } from '../types'
5
+ import { objectIncludes } from '../utilities/objectIncludes'
6
+ import { getNodeType } from './getNodeType'
7
+
8
+ export function isNodeActive(
8
9
  state: EditorState,
9
10
  typeOrName: NodeType | string | null,
10
- attributes: AnyObject = {},
11
+ attributes: Record<string, any> = {},
11
12
  ): boolean {
12
13
  const { from, to, empty } = state.selection
13
- const type = typeOrName
14
- ? getNodeType(typeOrName, state.schema)
15
- : null
14
+ const type = typeOrName ? getNodeType(typeOrName, state.schema) : null
16
15
 
17
- let nodeRanges: NodeRange[] = []
16
+ const nodeRanges: NodeRange[] = []
18
17
 
19
18
  state.doc.nodesBetween(from, to, (node, pos) => {
20
- if (!node.isText) {
21
- const relativeFrom = Math.max(from, pos)
22
- const relativeTo = Math.min(to, pos + node.nodeSize)
23
-
24
- nodeRanges = [...nodeRanges, {
25
- node,
26
- from: relativeFrom,
27
- to: relativeTo,
28
- }]
19
+ if (node.isText) {
20
+ return
29
21
  }
30
- })
31
22
 
32
- if (empty) {
33
- return !!nodeRanges
34
- .filter(nodeRange => {
35
- if (!type) {
36
- return true
37
- }
38
-
39
- return type.name === nodeRange.node.type.name
40
- })
41
- .find(nodeRange => objectIncludes(nodeRange.node.attrs, attributes))
42
- }
23
+ const relativeFrom = Math.max(from, pos)
24
+ const relativeTo = Math.min(to, pos + node.nodeSize)
43
25
 
44
- const selectionRange = to - from
26
+ nodeRanges.push({
27
+ node,
28
+ from: relativeFrom,
29
+ to: relativeTo,
30
+ })
31
+ })
45
32
 
46
- const range = nodeRanges
33
+ const selectionRange = to - from
34
+ const matchedNodeRanges = nodeRanges
47
35
  .filter(nodeRange => {
48
36
  if (!type) {
49
37
  return true
@@ -51,11 +39,13 @@ export default function isNodeActive(
51
39
 
52
40
  return type.name === nodeRange.node.type.name
53
41
  })
54
- .filter(nodeRange => objectIncludes(nodeRange.node.attrs, attributes))
55
- .reduce((sum, nodeRange) => {
56
- const size = nodeRange.to - nodeRange.from
57
- return sum + size
58
- }, 0)
42
+ .filter(nodeRange => objectIncludes(nodeRange.node.attrs, attributes, { strict: false }))
43
+
44
+ if (empty) {
45
+ return !!matchedNodeRanges.length
46
+ }
47
+
48
+ const range = matchedNodeRanges.reduce((sum, nodeRange) => sum + nodeRange.to - nodeRange.from, 0)
59
49
 
60
50
  return range >= selectionRange
61
51
  }
@@ -1,6 +1,6 @@
1
- import { Node as ProseMirrorNode } from 'prosemirror-model'
1
+ import { Node as ProseMirrorNode } from '@tiptap/pm/model'
2
2
 
3
- export default function isNodeEmpty(node: ProseMirrorNode): boolean {
3
+ export function isNodeEmpty(node: ProseMirrorNode): boolean {
4
4
  const defaultContent = node.type.createAndFill()?.toJSON()
5
5
  const content = node.toJSON()
6
6
 
@@ -1,6 +1,5 @@
1
- import { NodeSelection } from 'prosemirror-state'
2
- import isObject from '../utilities/isObject'
1
+ import { NodeSelection } from '@tiptap/pm/state'
3
2
 
4
- export default function isNodeSelection(value: unknown): value is NodeSelection {
5
- return isObject(value) && value instanceof NodeSelection
3
+ export function isNodeSelection(value: unknown): value is NodeSelection {
4
+ return value instanceof NodeSelection
6
5
  }
@@ -1,6 +1,5 @@
1
- import { TextSelection } from 'prosemirror-state'
2
- import isObject from '../utilities/isObject'
1
+ import { TextSelection } from '@tiptap/pm/state'
3
2
 
4
- export default function isTextSelection(value: unknown): value is TextSelection {
5
- return isObject(value) && value instanceof TextSelection
3
+ export function isTextSelection(value: unknown): value is TextSelection {
4
+ return value instanceof TextSelection
6
5
  }
@@ -0,0 +1,35 @@
1
+ import { EditorView } from '@tiptap/pm/view'
2
+
3
+ import { minMax } from '../utilities/minMax'
4
+
5
+ export function posToDOMRect(view: EditorView, from: number, to: number): DOMRect {
6
+ const minPos = 0
7
+ const maxPos = view.state.doc.content.size
8
+ const resolvedFrom = minMax(from, minPos, maxPos)
9
+ const resolvedEnd = minMax(to, minPos, maxPos)
10
+ const start = view.coordsAtPos(resolvedFrom)
11
+ const end = view.coordsAtPos(resolvedEnd, -1)
12
+ const top = Math.min(start.top, end.top)
13
+ const bottom = Math.max(start.bottom, end.bottom)
14
+ const left = Math.min(start.left, end.left)
15
+ const right = Math.max(start.right, end.right)
16
+ const width = right - left
17
+ const height = bottom - top
18
+ const x = left
19
+ const y = top
20
+ const data = {
21
+ top,
22
+ bottom,
23
+ left,
24
+ right,
25
+ width,
26
+ height,
27
+ x,
28
+ y,
29
+ }
30
+
31
+ return {
32
+ ...data,
33
+ toJSON: () => data,
34
+ }
35
+ }
@@ -0,0 +1,42 @@
1
+ import { Node as ProseMirrorNode } from '@tiptap/pm/model'
2
+ import { Selection, TextSelection } from '@tiptap/pm/state'
3
+
4
+ import { FocusPosition } from '../types'
5
+ import { minMax } from '../utilities/minMax'
6
+
7
+ export function resolveFocusPosition(
8
+ doc: ProseMirrorNode,
9
+ position: FocusPosition = null,
10
+ ): Selection | null {
11
+ if (!position) {
12
+ return null
13
+ }
14
+
15
+ const selectionAtStart = Selection.atStart(doc)
16
+ const selectionAtEnd = Selection.atEnd(doc)
17
+
18
+ if (position === 'start' || position === true) {
19
+ return selectionAtStart
20
+ }
21
+
22
+ if (position === 'end') {
23
+ return selectionAtEnd
24
+ }
25
+
26
+ const minPos = selectionAtStart.from
27
+ const maxPos = selectionAtEnd.to
28
+
29
+ if (position === 'all') {
30
+ return TextSelection.create(
31
+ doc,
32
+ minMax(0, minPos, maxPos),
33
+ minMax(doc.content.size, minPos, maxPos),
34
+ )
35
+ }
36
+
37
+ return TextSelection.create(
38
+ doc,
39
+ minMax(position, minPos, maxPos),
40
+ minMax(position, minPos, maxPos),
41
+ )
42
+ }
@@ -1,8 +1,8 @@
1
- import { Selection, Transaction } from 'prosemirror-state'
2
- import { ReplaceStep, ReplaceAroundStep } from 'prosemirror-transform'
1
+ import { Selection, Transaction } from '@tiptap/pm/state'
2
+ import { ReplaceAroundStep, ReplaceStep } from '@tiptap/pm/transform'
3
3
 
4
4
  // source: https://github.com/ProseMirror/prosemirror-state/blob/master/src/selection.js#L466
5
- export default function selectionToInsertionEnd(tr: Transaction, startLen: number, bias: number) {
5
+ export function selectionToInsertionEnd(tr: Transaction, startLen: number, bias: number) {
6
6
  const last = tr.steps.length - 1
7
7
 
8
8
  if (last < startLen) {
@@ -1,9 +1,9 @@
1
- import { Extensions } from '../types'
2
1
  import { Extension } from '../Extension'
3
- import { Node } from '../Node'
4
2
  import { Mark } from '../Mark'
3
+ import { Node } from '../Node'
4
+ import { Extensions } from '../types'
5
5
 
6
- export default function splitExtensions(extensions: Extensions) {
6
+ export function splitExtensions(extensions: Extensions) {
7
7
  const baseExtensions = extensions.filter(extension => extension.type === 'extension') as Extension[]
8
8
  const nodeExtensions = extensions.filter(extension => extension.type === 'node') as Node[]
9
9
  const markExtensions = extensions.filter(extension => extension.type === 'mark') as Mark[]
package/src/index.ts CHANGED
@@ -1,38 +1,27 @@
1
+ export * from './CommandManager'
1
2
  export * from './Editor'
2
3
  export * from './Extension'
3
- export * from './Node'
4
+ export * as extensions from './extensions'
5
+ export * from './helpers'
6
+ export * from './InputRule'
7
+ export * from './inputRules'
4
8
  export * from './Mark'
9
+ export * from './Node'
5
10
  export * from './NodeView'
11
+ export * from './PasteRule'
12
+ export * from './pasteRules'
13
+ export * from './Tracker'
6
14
  export * from './types'
15
+ export * from './utilities'
7
16
 
8
- export { default as nodeInputRule } from './inputRules/nodeInputRule'
9
- export { default as markInputRule } from './inputRules/markInputRule'
10
- export { default as markPasteRule } from './pasteRules/markPasteRule'
11
-
12
- export { default as callOrReturn } from './utilities/callOrReturn'
13
- export { default as mergeAttributes } from './utilities/mergeAttributes'
14
-
15
- export { default as findChildren } from './helpers/findChildren'
16
- export { default as findParentNode } from './helpers/findParentNode'
17
- export { default as findParentNodeClosestToPos } from './helpers/findParentNodeClosestToPos'
18
- export { default as generateHTML } from './helpers/generateHTML'
19
- export { default as getSchema } from './helpers/getSchema'
20
- export { default as getHTMLFromFragment } from './helpers/getHTMLFromFragment'
21
- export { default as getMarkAttributes } from './helpers/getMarkAttributes'
22
- export { default as isActive } from './helpers/isActive'
23
- export { default as isMarkActive } from './helpers/isMarkActive'
24
- export { default as isNodeActive } from './helpers/isNodeActive'
25
- export { default as isNodeEmpty } from './helpers/isNodeEmpty'
26
- export { default as isNodeSelection } from './helpers/isNodeSelection'
27
- export { default as isTextSelection } from './helpers/isTextSelection'
28
-
29
- export interface Commands {}
17
+ // eslint-disable-next-line
18
+ export interface Commands<ReturnType = any> {}
30
19
 
31
20
  // eslint-disable-next-line
32
- export interface ExtensionConfig<Options = any> {}
21
+ export interface ExtensionConfig<Options = any, Storage = any> {}
33
22
 
34
23
  // eslint-disable-next-line
35
- export interface NodeConfig<Options = any> {}
24
+ export interface NodeConfig<Options = any, Storage = any> {}
36
25
 
37
26
  // eslint-disable-next-line
38
- export interface MarkConfig<Options = any> {}
27
+ export interface MarkConfig<Options = any, Storage = any> {}
@@ -0,0 +1,5 @@
1
+ export * from './markInputRule'
2
+ export * from './nodeInputRule'
3
+ export * from './textblockTypeInputRule'
4
+ export * from './textInputRule'
5
+ export * from './wrappingInputRule'
@@ -1,50 +1,69 @@
1
- import { InputRule } from 'prosemirror-inputrules'
2
- import { MarkType } from 'prosemirror-model'
3
- import getMarksBetween from '../helpers/getMarksBetween'
4
-
5
- export default function (regexp: RegExp, markType: MarkType, getAttributes?: Function): InputRule {
6
- return new InputRule(regexp, (state, match, start, end) => {
7
- const attributes = getAttributes instanceof Function
8
- ? getAttributes(match)
9
- : getAttributes
10
- const { tr } = state
11
- const captureGroup = match[match.length - 1]
12
- const fullMatch = match[0]
13
- let markEnd = end
14
-
15
- if (captureGroup) {
16
- const startSpaces = fullMatch.search(/\S/)
17
- const textStart = start + fullMatch.indexOf(captureGroup)
18
- const textEnd = textStart + captureGroup.length
19
-
20
- const excludedMarks = getMarksBetween(start, end, state)
21
- .filter(item => {
22
- // TODO: PR to add excluded to MarkType
23
- // @ts-ignore
24
- const { excluded } = item.mark.type
25
- return excluded.find((type: MarkType) => type.name === markType.name)
26
- })
27
- .filter(item => item.to > textStart)
28
-
29
- if (excludedMarks.length) {
1
+ import { MarkType } from '@tiptap/pm/model'
2
+
3
+ import { getMarksBetween } from '../helpers/getMarksBetween'
4
+ import { InputRule, InputRuleFinder } from '../InputRule'
5
+ import { ExtendedRegExpMatchArray } from '../types'
6
+ import { callOrReturn } from '../utilities/callOrReturn'
7
+
8
+ /**
9
+ * Build an input rule that adds a mark when the
10
+ * matched text is typed into it.
11
+ */
12
+ export function markInputRule(config: {
13
+ find: InputRuleFinder
14
+ type: MarkType
15
+ getAttributes?:
16
+ | Record<string, any>
17
+ | ((match: ExtendedRegExpMatchArray) => Record<string, any>)
18
+ | false
19
+ | null
20
+ }) {
21
+ return new InputRule({
22
+ find: config.find,
23
+ handler: ({ state, range, match }) => {
24
+ const attributes = callOrReturn(config.getAttributes, undefined, match)
25
+
26
+ if (attributes === false || attributes === null) {
30
27
  return null
31
28
  }
32
29
 
33
- if (textEnd < end) {
34
- tr.delete(textEnd, end)
35
- }
30
+ const { tr } = state
31
+ const captureGroup = match[match.length - 1]
32
+ const fullMatch = match[0]
33
+ let markEnd = range.to
36
34
 
37
- if (textStart > start) {
38
- tr.delete(start + startSpaces, textStart)
39
- }
35
+ if (captureGroup) {
36
+ const startSpaces = fullMatch.search(/\S/)
37
+ const textStart = range.from + fullMatch.indexOf(captureGroup)
38
+ const textEnd = textStart + captureGroup.length
40
39
 
41
- markEnd = start + startSpaces + captureGroup.length
40
+ const excludedMarks = getMarksBetween(range.from, range.to, state.doc)
41
+ .filter(item => {
42
+ // @ts-ignore
43
+ const excluded = item.mark.type.excluded as MarkType[]
42
44
 
43
- tr.addMark(start + startSpaces, markEnd, markType.create(attributes))
45
+ return excluded.find(type => type === config.type && type !== item.mark.type)
46
+ })
47
+ .filter(item => item.to > textStart)
44
48
 
45
- tr.removeStoredMark(markType)
46
- }
49
+ if (excludedMarks.length) {
50
+ return null
51
+ }
47
52
 
48
- return tr
53
+ if (textEnd < range.to) {
54
+ tr.delete(textEnd, range.to)
55
+ }
56
+
57
+ if (textStart > range.from) {
58
+ tr.delete(range.from + startSpaces, textStart)
59
+ }
60
+
61
+ markEnd = range.from + startSpaces + captureGroup.length
62
+
63
+ tr.addMark(range.from + startSpaces, markEnd, config.type.create(attributes || {}))
64
+
65
+ tr.removeStoredMark(config.type)
66
+ }
67
+ },
49
68
  })
50
69
  }
@@ -1,17 +1,50 @@
1
- import { InputRule } from 'prosemirror-inputrules'
2
- import { NodeType } from 'prosemirror-model'
1
+ import { NodeType } from '@tiptap/pm/model'
3
2
 
4
- export default function (regexp: RegExp, type: NodeType, getAttributes?: (match: any) => any): InputRule {
5
- return new InputRule(regexp, (state, match, start, end) => {
6
- const attributes = getAttributes instanceof Function
7
- ? getAttributes(match)
8
- : getAttributes
9
- const { tr } = state
3
+ import { InputRule, InputRuleFinder } from '../InputRule'
4
+ import { ExtendedRegExpMatchArray } from '../types'
5
+ import { callOrReturn } from '../utilities/callOrReturn'
10
6
 
11
- if (match[0]) {
12
- tr.replaceWith(start - 1, end, type.create(attributes))
13
- }
7
+ /**
8
+ * Build an input rule that adds a node when the
9
+ * matched text is typed into it.
10
+ */
11
+ export function nodeInputRule(config: {
12
+ find: InputRuleFinder
13
+ type: NodeType
14
+ getAttributes?:
15
+ | Record<string, any>
16
+ | ((match: ExtendedRegExpMatchArray) => Record<string, any>)
17
+ | false
18
+ | null
19
+ }) {
20
+ return new InputRule({
21
+ find: config.find,
22
+ handler: ({ state, range, match }) => {
23
+ const attributes = callOrReturn(config.getAttributes, undefined, match) || {}
24
+ const { tr } = state
25
+ const start = range.from
26
+ let end = range.to
14
27
 
15
- return tr
28
+ if (match[1]) {
29
+ const offset = match[0].lastIndexOf(match[1])
30
+ let matchStart = start + offset
31
+
32
+ if (matchStart > end) {
33
+ matchStart = end
34
+ } else {
35
+ end = matchStart + match[1].length
36
+ }
37
+
38
+ // insert last typed character
39
+ const lastChar = match[0][match[0].length - 1]
40
+
41
+ tr.insertText(lastChar, start + match[0].length - 1)
42
+
43
+ // insert node from input rule
44
+ tr.replaceWith(matchStart, end, config.type.create(attributes))
45
+ } else if (match[0]) {
46
+ tr.replaceWith(start, end, config.type.create(attributes))
47
+ }
48
+ },
16
49
  })
17
50
  }
@@ -0,0 +1,35 @@
1
+ import { InputRule, InputRuleFinder } from '../InputRule'
2
+
3
+ /**
4
+ * Build an input rule that replaces text when the
5
+ * matched text is typed into it.
6
+ */
7
+ export function textInputRule(config: {
8
+ find: InputRuleFinder,
9
+ replace: string,
10
+ }) {
11
+ return new InputRule({
12
+ find: config.find,
13
+ handler: ({ state, range, match }) => {
14
+ let insert = config.replace
15
+ let start = range.from
16
+ const end = range.to
17
+
18
+ if (match[1]) {
19
+ const offset = match[0].lastIndexOf(match[1])
20
+
21
+ insert += match[0].slice(offset + match[1].length)
22
+ start += offset
23
+
24
+ const cutOff = start - end
25
+
26
+ if (cutOff > 0) {
27
+ insert = match[0].slice(offset - cutOff, offset) + insert
28
+ start = end
29
+ }
30
+ }
31
+
32
+ state.tr.insertText(insert, start, end)
33
+ },
34
+ })
35
+ }
@@ -0,0 +1,37 @@
1
+ import { NodeType } from '@tiptap/pm/model'
2
+
3
+ import { InputRule, InputRuleFinder } from '../InputRule'
4
+ import { ExtendedRegExpMatchArray } from '../types'
5
+ import { callOrReturn } from '../utilities/callOrReturn'
6
+
7
+ /**
8
+ * Build an input rule that changes the type of a textblock when the
9
+ * matched text is typed into it. When using a regular expresion you’ll
10
+ * probably want the regexp to start with `^`, so that the pattern can
11
+ * only occur at the start of a textblock.
12
+ */
13
+ export function textblockTypeInputRule(config: {
14
+ find: InputRuleFinder
15
+ type: NodeType
16
+ getAttributes?:
17
+ | Record<string, any>
18
+ | ((match: ExtendedRegExpMatchArray) => Record<string, any>)
19
+ | false
20
+ | null
21
+ }) {
22
+ return new InputRule({
23
+ find: config.find,
24
+ handler: ({ state, range, match }) => {
25
+ const $start = state.doc.resolve(range.from)
26
+ const attributes = callOrReturn(config.getAttributes, undefined, match) || {}
27
+
28
+ if (!$start.node(-1).canReplaceWith($start.index(-1), $start.indexAfter(-1), config.type)) {
29
+ return null
30
+ }
31
+
32
+ state.tr
33
+ .delete(range.from, range.to)
34
+ .setBlockType(range.from, range.from, config.type, attributes)
35
+ },
36
+ })
37
+ }
@@ -0,0 +1,84 @@
1
+ import { Node as ProseMirrorNode, NodeType } from '@tiptap/pm/model'
2
+ import { canJoin, findWrapping } from '@tiptap/pm/transform'
3
+
4
+ import { Editor } from '../Editor'
5
+ import { InputRule, InputRuleFinder } from '../InputRule'
6
+ import { ExtendedRegExpMatchArray } from '../types'
7
+ import { callOrReturn } from '../utilities/callOrReturn'
8
+
9
+ /**
10
+ * Build an input rule for automatically wrapping a textblock when a
11
+ * given string is typed. When using a regular expresion you’ll
12
+ * probably want the regexp to start with `^`, so that the pattern can
13
+ * only occur at the start of a textblock.
14
+ *
15
+ * `type` is the type of node to wrap in.
16
+ *
17
+ * By default, if there’s a node with the same type above the newly
18
+ * wrapped node, the rule will try to join those
19
+ * two nodes. You can pass a join predicate, which takes a regular
20
+ * expression match and the node before the wrapped node, and can
21
+ * return a boolean to indicate whether a join should happen.
22
+ */
23
+ export function wrappingInputRule(config: {
24
+ find: InputRuleFinder,
25
+ type: NodeType,
26
+ keepMarks?: boolean,
27
+ keepAttributes?: boolean,
28
+ editor?: Editor
29
+ getAttributes?:
30
+ | Record<string, any>
31
+ | ((match: ExtendedRegExpMatchArray) => Record<string, any>)
32
+ | false
33
+ | null
34
+ ,
35
+ joinPredicate?: (match: ExtendedRegExpMatchArray, node: ProseMirrorNode) => boolean,
36
+ }) {
37
+ return new InputRule({
38
+ find: config.find,
39
+ handler: ({
40
+ state, range, match, chain,
41
+ }) => {
42
+ const attributes = callOrReturn(config.getAttributes, undefined, match) || {}
43
+ const tr = state.tr.delete(range.from, range.to)
44
+ const $start = tr.doc.resolve(range.from)
45
+ const blockRange = $start.blockRange()
46
+ const wrapping = blockRange && findWrapping(blockRange, config.type, attributes)
47
+
48
+ if (!wrapping) {
49
+ return null
50
+ }
51
+
52
+ tr.wrap(blockRange, wrapping)
53
+
54
+ if (config.keepMarks && config.editor) {
55
+ const { selection, storedMarks } = state
56
+ const { splittableMarks } = config.editor.extensionManager
57
+ const marks = storedMarks || (selection.$to.parentOffset && selection.$from.marks())
58
+
59
+ if (marks) {
60
+ const filteredMarks = marks.filter(mark => splittableMarks.includes(mark.type.name))
61
+
62
+ tr.ensureMarks(filteredMarks)
63
+ }
64
+ }
65
+ if (config.keepAttributes) {
66
+ /** If the nodeType is `bulletList` or `orderedList` set the `nodeType` as `listItem` */
67
+ const nodeType = config.type.name === 'bulletList' || config.type.name === 'orderedList' ? 'listItem' : 'taskList'
68
+
69
+ chain().updateAttributes(nodeType, attributes).run()
70
+ }
71
+
72
+ const before = tr.doc.resolve(range.from - 1).nodeBefore
73
+
74
+ if (
75
+ before
76
+ && before.type === config.type
77
+ && canJoin(tr.doc, range.from - 1)
78
+ && (!config.joinPredicate || config.joinPredicate(match, before))
79
+ ) {
80
+ tr.join(range.from - 1)
81
+ }
82
+ },
83
+ })
84
+ }
@@ -0,0 +1,3 @@
1
+ export * from './markPasteRule'
2
+ export * from './nodePasteRule'
3
+ export * from './textPasteRule'