@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,4 +1,10 @@
1
+ import { Plugin, PluginKey, Selection } from '@tiptap/pm/state'
2
+
3
+ import { CommandManager } from '../CommandManager'
1
4
  import { Extension } from '../Extension'
5
+ import { createChainableState } from '../helpers/createChainableState'
6
+ import { isiOS } from '../utilities/isiOS'
7
+ import { isMacOS } from '../utilities/isMacOS'
2
8
 
3
9
  export const Keymap = Extension.create({
4
10
  name: 'keymap',
@@ -6,6 +12,19 @@ export const Keymap = Extension.create({
6
12
  addKeyboardShortcuts() {
7
13
  const handleBackspace = () => this.editor.commands.first(({ commands }) => [
8
14
  () => commands.undoInputRule(),
15
+ // maybe convert first text block node to default node
16
+ () => commands.command(({ tr }) => {
17
+ const { selection, doc } = tr
18
+ const { empty, $anchor } = selection
19
+ const { pos, parent } = $anchor
20
+ const isAtStart = Selection.atStart(doc).from === pos
21
+
22
+ if (!empty || !isAtStart || !parent.type.isTextblock || parent.textContent.length) {
23
+ return false
24
+ }
25
+
26
+ return commands.clearNodes()
27
+ }),
9
28
  () => commands.deleteSelection(),
10
29
  () => commands.joinBackward(),
11
30
  () => commands.selectNodeBackward(),
@@ -13,24 +32,98 @@ export const Keymap = Extension.create({
13
32
 
14
33
  const handleDelete = () => this.editor.commands.first(({ commands }) => [
15
34
  () => commands.deleteSelection(),
35
+ () => commands.deleteCurrentNode(),
16
36
  () => commands.joinForward(),
17
37
  () => commands.selectNodeForward(),
18
38
  ])
19
39
 
20
- return {
21
- Enter: () => this.editor.commands.first(({ commands }) => [
22
- () => commands.newlineInCode(),
23
- () => commands.createParagraphNear(),
24
- () => commands.liftEmptyBlock(),
25
- () => commands.splitBlock(),
26
- ]),
40
+ const handleEnter = () => this.editor.commands.first(({ commands }) => [
41
+ () => commands.newlineInCode(),
42
+ () => commands.createParagraphNear(),
43
+ () => commands.liftEmptyBlock(),
44
+ () => commands.splitBlock(),
45
+ ])
46
+
47
+ const baseKeymap = {
48
+ Enter: handleEnter,
27
49
  'Mod-Enter': () => this.editor.commands.exitCode(),
28
- Backspace: () => handleBackspace(),
29
- 'Mod-Backspace': () => handleBackspace(),
30
- Delete: () => handleDelete(),
31
- 'Mod-Delete': () => handleDelete(),
32
- // we don’t need a custom `selectAll` for now
33
- // 'Mod-a': () => this.editor.commands.selectAll(),
50
+ Backspace: handleBackspace,
51
+ 'Mod-Backspace': handleBackspace,
52
+ 'Shift-Backspace': handleBackspace,
53
+ Delete: handleDelete,
54
+ 'Mod-Delete': handleDelete,
55
+ 'Mod-a': () => this.editor.commands.selectAll(),
56
+ }
57
+
58
+ const pcKeymap = {
59
+ ...baseKeymap,
60
+ }
61
+
62
+ const macKeymap = {
63
+ ...baseKeymap,
64
+ 'Ctrl-h': handleBackspace,
65
+ 'Alt-Backspace': handleBackspace,
66
+ 'Ctrl-d': handleDelete,
67
+ 'Ctrl-Alt-Backspace': handleDelete,
68
+ 'Alt-Delete': handleDelete,
69
+ 'Alt-d': handleDelete,
70
+ 'Ctrl-a': () => this.editor.commands.selectTextblockStart(),
71
+ 'Ctrl-e': () => this.editor.commands.selectTextblockEnd(),
72
+ }
73
+
74
+ if (isiOS() || isMacOS()) {
75
+ return macKeymap
34
76
  }
77
+
78
+ return pcKeymap
79
+ },
80
+
81
+ addProseMirrorPlugins() {
82
+ return [
83
+ // With this plugin we check if the whole document was selected and deleted.
84
+ // In this case we will additionally call `clearNodes()` to convert e.g. a heading
85
+ // to a paragraph if necessary.
86
+ // This is an alternative to ProseMirror's `AllSelection`, which doesn’t work well
87
+ // with many other commands.
88
+ new Plugin({
89
+ key: new PluginKey('clearDocument'),
90
+ appendTransaction: (transactions, oldState, newState) => {
91
+ const docChanges = transactions.some(transaction => transaction.docChanged)
92
+ && !oldState.doc.eq(newState.doc)
93
+
94
+ if (!docChanges) {
95
+ return
96
+ }
97
+
98
+ const { empty, from, to } = oldState.selection
99
+ const allFrom = Selection.atStart(oldState.doc).from
100
+ const allEnd = Selection.atEnd(oldState.doc).to
101
+ const allWasSelected = from === allFrom && to === allEnd
102
+ const isEmpty = newState.doc.textBetween(0, newState.doc.content.size, ' ', ' ').length === 0
103
+
104
+ if (empty || !allWasSelected || !isEmpty) {
105
+ return
106
+ }
107
+
108
+ const tr = newState.tr
109
+ const state = createChainableState({
110
+ state: newState,
111
+ transaction: tr,
112
+ })
113
+ const { commands } = new CommandManager({
114
+ editor: this.editor,
115
+ state,
116
+ })
117
+
118
+ commands.clearNodes()
119
+
120
+ if (!tr.steps.length) {
121
+ return
122
+ }
123
+
124
+ return tr
125
+ },
126
+ }),
127
+ ]
35
128
  },
36
129
  })
@@ -0,0 +1,18 @@
1
+ import { Plugin, PluginKey } from '@tiptap/pm/state'
2
+
3
+ import { Extension } from '../Extension'
4
+
5
+ export const Tabindex = Extension.create({
6
+ name: 'tabindex',
7
+
8
+ addProseMirrorPlugins() {
9
+ return [
10
+ new Plugin({
11
+ key: new PluginKey('tabindex'),
12
+ props: {
13
+ attributes: this.editor.isEditable ? { tabindex: '0' } : {},
14
+ },
15
+ }),
16
+ ]
17
+ },
18
+ })
@@ -0,0 +1,21 @@
1
+ import { Node as ProseMirrorNode } from '@tiptap/pm/model'
2
+ import { Transaction } from '@tiptap/pm/state'
3
+ import { Transform } from '@tiptap/pm/transform'
4
+
5
+ /**
6
+ * Returns a new `Transform` based on all steps of the passed transactions.
7
+ */
8
+ export function combineTransactionSteps(
9
+ oldDoc: ProseMirrorNode,
10
+ transactions: Transaction[],
11
+ ): Transform {
12
+ const transform = new Transform(oldDoc)
13
+
14
+ transactions.forEach(transaction => {
15
+ transaction.steps.forEach(step => {
16
+ transform.step(step)
17
+ })
18
+ })
19
+
20
+ return transform
21
+ }
@@ -0,0 +1,38 @@
1
+ import { EditorState, Transaction } from '@tiptap/pm/state'
2
+
3
+ export function createChainableState(config: {
4
+ transaction: Transaction
5
+ state: EditorState
6
+ }): EditorState {
7
+ const { state, transaction } = config
8
+ let { selection } = transaction
9
+ let { doc } = transaction
10
+ let { storedMarks } = transaction
11
+
12
+ return {
13
+ ...state,
14
+ apply: state.apply.bind(state),
15
+ applyTransaction: state.applyTransaction.bind(state),
16
+ filterTransaction: state.filterTransaction,
17
+ plugins: state.plugins,
18
+ schema: state.schema,
19
+ reconfigure: state.reconfigure.bind(state),
20
+ toJSON: state.toJSON.bind(state),
21
+ get storedMarks() {
22
+ return storedMarks
23
+ },
24
+ get selection() {
25
+ return selection
26
+ },
27
+ get doc() {
28
+ return doc
29
+ },
30
+ get tr() {
31
+ selection = transaction.selection
32
+ doc = transaction.doc
33
+ storedMarks = transaction.storedMarks
34
+
35
+ return transaction
36
+ },
37
+ }
38
+ }
@@ -1,13 +1,12 @@
1
- import { Schema, Node as ProseMirrorNode } from 'prosemirror-model'
2
- import { AnyObject } from '../types'
3
- import createNodeFromContent from './createNodeFromContent'
1
+ import { Node as ProseMirrorNode, ParseOptions, Schema } from '@tiptap/pm/model'
4
2
 
5
- export type Content = string | JSON | null
3
+ import { Content } from '../types'
4
+ import { createNodeFromContent } from './createNodeFromContent'
6
5
 
7
- export default function createDocument(
6
+ export function createDocument(
8
7
  content: Content,
9
8
  schema: Schema,
10
- parseOptions: AnyObject = {},
9
+ parseOptions: ParseOptions = {},
11
10
  ): ProseMirrorNode {
12
11
  return createNodeFromContent(content, schema, { slice: false, parseOptions }) as ProseMirrorNode
13
12
  }
@@ -1,58 +1,50 @@
1
1
  import {
2
- Schema,
3
2
  DOMParser,
4
- Node as ProseMirrorNode,
5
3
  Fragment,
6
- } from 'prosemirror-model'
7
- import elementFromString from '../utilities/elementFromString'
8
- import { AnyObject } from '../types'
4
+ Node as ProseMirrorNode,
5
+ ParseOptions,
6
+ Schema,
7
+ } from '@tiptap/pm/model'
9
8
 
10
- export type Content = string | JSON | null
9
+ import { Content } from '../types'
10
+ import { elementFromString } from '../utilities/elementFromString'
11
11
 
12
12
  export type CreateNodeFromContentOptions = {
13
- slice?: boolean,
14
- parseOptions?: AnyObject,
13
+ slice?: boolean
14
+ parseOptions?: ParseOptions
15
15
  }
16
16
 
17
- export default function createNodeFromContent(
17
+ export function createNodeFromContent(
18
18
  content: Content,
19
19
  schema: Schema,
20
20
  options?: CreateNodeFromContentOptions,
21
- ): string | ProseMirrorNode | Fragment {
21
+ ): ProseMirrorNode | Fragment {
22
22
  options = {
23
23
  slice: true,
24
24
  parseOptions: {},
25
25
  ...options,
26
26
  }
27
27
 
28
- if (content && typeof content === 'object') {
28
+ if (typeof content === 'object' && content !== null) {
29
29
  try {
30
+ if (Array.isArray(content) && content.length > 0) {
31
+ return Fragment.fromArray(content.map(item => schema.nodeFromJSON(item)))
32
+ }
33
+
30
34
  return schema.nodeFromJSON(content)
31
35
  } catch (error) {
32
- console.warn(
33
- '[tiptap warn]: Invalid content.',
34
- 'Passed value:',
35
- content,
36
- 'Error:',
37
- error,
38
- )
36
+ console.warn('[tiptap warn]: Invalid content.', 'Passed value:', content, 'Error:', error)
39
37
 
40
38
  return createNodeFromContent('', schema, options)
41
39
  }
42
40
  }
43
41
 
44
42
  if (typeof content === 'string') {
45
- const isHTML = content.trim().startsWith('<') && content.trim().endsWith('>')
46
-
47
- if (isHTML || !options.slice) {
48
- const parser = DOMParser.fromSchema(schema)
49
-
50
- return options.slice
51
- ? parser.parseSlice(elementFromString(content), options.parseOptions).content
52
- : parser.parse(elementFromString(content), options.parseOptions)
53
- }
43
+ const parser = DOMParser.fromSchema(schema)
54
44
 
55
- return content
45
+ return options.slice
46
+ ? parser.parseSlice(elementFromString(content), options.parseOptions).content
47
+ : parser.parse(elementFromString(content), options.parseOptions)
56
48
  }
57
49
 
58
50
  return createNodeFromContent('', schema, options)
@@ -0,0 +1,13 @@
1
+ import { ContentMatch, NodeType } from '@tiptap/pm/model'
2
+
3
+ export function defaultBlockAt(match: ContentMatch): NodeType | null {
4
+ for (let i = 0; i < match.edgeCount; i += 1) {
5
+ const { type } = match.edge(i)
6
+
7
+ if (type.isTextblock && !type.hasRequiredAttrs()) {
8
+ return type
9
+ }
10
+ }
11
+
12
+ return null
13
+ }
@@ -1,12 +1,8 @@
1
- import { Node as ProseMirrorNode } from 'prosemirror-model'
2
- import { Predicate } from '../types'
1
+ import { Node as ProseMirrorNode } from '@tiptap/pm/model'
3
2
 
4
- type NodeWithPos = {
5
- node: ProseMirrorNode,
6
- pos: number,
7
- }
3
+ import { NodeWithPos, Predicate } from '../types'
8
4
 
9
- export default function findChildren(node: ProseMirrorNode, predicate: Predicate): NodeWithPos[] {
5
+ export function findChildren(node: ProseMirrorNode, predicate: Predicate): NodeWithPos[] {
10
6
  const nodesWithPos: NodeWithPos[] = []
11
7
 
12
8
  node.descendants((child, pos) => {
@@ -0,0 +1,36 @@
1
+ import { Node as ProseMirrorNode } from '@tiptap/pm/model'
2
+
3
+ import { NodeWithPos, Predicate, Range } from '../types'
4
+
5
+ /**
6
+ * Same as `findChildren` but searches only within a `range`.
7
+ */
8
+ export function findChildrenInRange(
9
+ node: ProseMirrorNode,
10
+ range: Range,
11
+ predicate: Predicate,
12
+ ): NodeWithPos[] {
13
+ const nodesWithPos: NodeWithPos[] = []
14
+
15
+ // if (range.from === range.to) {
16
+ // const nodeAt = node.nodeAt(range.from)
17
+
18
+ // if (nodeAt) {
19
+ // nodesWithPos.push({
20
+ // node: nodeAt,
21
+ // pos: range.from,
22
+ // })
23
+ // }
24
+ // }
25
+
26
+ node.nodesBetween(range.from, range.to, (child, pos) => {
27
+ if (predicate(child)) {
28
+ nodesWithPos.push({
29
+ node: child,
30
+ pos,
31
+ })
32
+ }
33
+ })
34
+
35
+ return nodesWithPos
36
+ }
@@ -1,7 +1,8 @@
1
- import { Selection } from 'prosemirror-state'
2
- import findParentNodeClosestToPos from './findParentNodeClosestToPos'
1
+ import { Selection } from '@tiptap/pm/state'
2
+
3
3
  import { Predicate } from '../types'
4
+ import { findParentNodeClosestToPos } from './findParentNodeClosestToPos'
4
5
 
5
- export default function findParentNode(predicate: Predicate) {
6
+ export function findParentNode(predicate: Predicate) {
6
7
  return (selection: Selection) => findParentNodeClosestToPos(selection.$from, predicate)
7
8
  }
@@ -1,12 +1,18 @@
1
- import { ResolvedPos, Node as ProseMirrorNode } from 'prosemirror-model'
1
+ import { Node as ProseMirrorNode, ResolvedPos } from '@tiptap/pm/model'
2
+
2
3
  import { Predicate } from '../types'
3
4
 
4
- export default function findParentNodeClosestToPos($pos: ResolvedPos, predicate: Predicate): ({
5
- pos: number,
6
- start: number,
7
- depth: number,
8
- node: ProseMirrorNode,
9
- } | undefined) {
5
+ export function findParentNodeClosestToPos(
6
+ $pos: ResolvedPos,
7
+ predicate: Predicate,
8
+ ):
9
+ | {
10
+ pos: number
11
+ start: number
12
+ depth: number
13
+ node: ProseMirrorNode
14
+ }
15
+ | undefined {
10
16
  for (let i = $pos.depth; i > 0; i -= 1) {
11
17
  const node = $pos.node(i)
12
18
 
@@ -1,11 +1,12 @@
1
- import { Node } from 'prosemirror-model'
2
- import getSchema from './getSchema'
3
- import getHTMLFromFragment from './getHTMLFromFragment'
4
- import { Extensions } from '../types'
1
+ import { Node } from '@tiptap/pm/model'
5
2
 
6
- export default function generateHTML(doc: object, extensions: Extensions): string {
3
+ import { Extensions, JSONContent } from '../types'
4
+ import { getHTMLFromFragment } from './getHTMLFromFragment'
5
+ import { getSchema } from './getSchema'
6
+
7
+ export function generateHTML(doc: JSONContent, extensions: Extensions): string {
7
8
  const schema = getSchema(extensions)
8
9
  const contentNode = Node.fromJSON(schema, doc)
9
10
 
10
- return getHTMLFromFragment(contentNode, schema)
11
+ return getHTMLFromFragment(contentNode.content, schema)
11
12
  }
@@ -0,0 +1,12 @@
1
+ import { DOMParser } from '@tiptap/pm/model'
2
+
3
+ import { Extensions } from '../types'
4
+ import { elementFromString } from '../utilities/elementFromString'
5
+ import { getSchema } from './getSchema'
6
+
7
+ export function generateJSON(html: string, extensions: Extensions): Record<string, any> {
8
+ const schema = getSchema(extensions)
9
+ const dom = elementFromString(html)
10
+
11
+ return DOMParser.fromSchema(schema).parse(dom).toJSON()
12
+ }
@@ -0,0 +1,27 @@
1
+ import { Node } from '@tiptap/pm/model'
2
+
3
+ import { Extensions, JSONContent, TextSerializer } from '../types'
4
+ import { getSchema } from './getSchema'
5
+ import { getText } from './getText'
6
+ import { getTextSerializersFromSchema } from './getTextSerializersFromSchema'
7
+
8
+ export function generateText(
9
+ doc: JSONContent,
10
+ extensions: Extensions,
11
+ options?: {
12
+ blockSeparator?: string
13
+ textSerializers?: Record<string, TextSerializer>
14
+ },
15
+ ): string {
16
+ const { blockSeparator = '\n\n', textSerializers = {} } = options || {}
17
+ const schema = getSchema(extensions)
18
+ const contentNode = Node.fromJSON(schema, doc)
19
+
20
+ return getText(contentNode, {
21
+ blockSeparator,
22
+ textSerializers: {
23
+ ...getTextSerializersFromSchema(schema),
24
+ ...textSerializers,
25
+ },
26
+ })
27
+ }
@@ -0,0 +1,26 @@
1
+ import { MarkType, NodeType } from '@tiptap/pm/model'
2
+ import { EditorState } from '@tiptap/pm/state'
3
+
4
+ import { getMarkAttributes } from './getMarkAttributes'
5
+ import { getNodeAttributes } from './getNodeAttributes'
6
+ import { getSchemaTypeNameByName } from './getSchemaTypeNameByName'
7
+
8
+ export function getAttributes(
9
+ state: EditorState,
10
+ typeOrName: string | NodeType | MarkType,
11
+ ): Record<string, any> {
12
+ const schemaType = getSchemaTypeNameByName(
13
+ typeof typeOrName === 'string' ? typeOrName : typeOrName.name,
14
+ state.schema,
15
+ )
16
+
17
+ if (schemaType === 'node') {
18
+ return getNodeAttributes(state, typeOrName as NodeType)
19
+ }
20
+
21
+ if (schemaType === 'mark') {
22
+ return getMarkAttributes(state, typeOrName as MarkType)
23
+ }
24
+
25
+ return {}
26
+ }
@@ -1,17 +1,20 @@
1
- import splitExtensions from './splitExtensions'
1
+ import { MarkConfig, NodeConfig } from '..'
2
2
  import {
3
- Extensions,
4
- GlobalAttributes,
5
- Attributes,
3
+ AnyConfig,
6
4
  Attribute,
5
+ Attributes,
7
6
  ExtensionAttribute,
7
+ Extensions,
8
+ GlobalAttributes,
8
9
  } from '../types'
10
+ import { getExtensionField } from './getExtensionField'
11
+ import { splitExtensions } from './splitExtensions'
9
12
 
10
13
  /**
11
14
  * Get a list of all extension attributes defined in `addAttribute` and `addGlobalAttribute`.
12
15
  * @param extensions List of extensions
13
16
  */
14
- export default function getAttributesFromExtensions(extensions: Extensions): ExtensionAttribute[] {
17
+ export function getAttributesFromExtensions(extensions: Extensions): ExtensionAttribute[] {
15
18
  const extensionAttributes: ExtensionAttribute[] = []
16
19
  const { nodeExtensions, markExtensions } = splitExtensions(extensions)
17
20
  const nodeAndMarkExtensions = [...nodeExtensions, ...markExtensions]
@@ -21,18 +24,28 @@ export default function getAttributesFromExtensions(extensions: Extensions): Ext
21
24
  renderHTML: null,
22
25
  parseHTML: null,
23
26
  keepOnSplit: true,
27
+ isRequired: false,
24
28
  }
25
29
 
26
30
  extensions.forEach(extension => {
27
31
  const context = {
32
+ name: extension.name,
28
33
  options: extension.options,
34
+ storage: extension.storage,
29
35
  }
30
36
 
31
- if (!extension.config.addGlobalAttributes) {
37
+ const addGlobalAttributes = getExtensionField<AnyConfig['addGlobalAttributes']>(
38
+ extension,
39
+ 'addGlobalAttributes',
40
+ context,
41
+ )
42
+
43
+ if (!addGlobalAttributes) {
32
44
  return
33
45
  }
34
46
 
35
- const globalAttributes = extension.config.addGlobalAttributes.bind(context)() as GlobalAttributes
47
+ // TODO: remove `as GlobalAttributes`
48
+ const globalAttributes = addGlobalAttributes() as GlobalAttributes
36
49
 
37
50
  globalAttributes.forEach(globalAttribute => {
38
51
  globalAttribute.types.forEach(type => {
@@ -54,25 +67,40 @@ export default function getAttributesFromExtensions(extensions: Extensions): Ext
54
67
 
55
68
  nodeAndMarkExtensions.forEach(extension => {
56
69
  const context = {
70
+ name: extension.name,
57
71
  options: extension.options,
72
+ storage: extension.storage,
58
73
  }
59
74
 
60
- if (!extension.config.addAttributes) {
75
+ const addAttributes = getExtensionField<NodeConfig['addAttributes'] | MarkConfig['addAttributes']>(
76
+ extension,
77
+ 'addAttributes',
78
+ context,
79
+ )
80
+
81
+ if (!addAttributes) {
61
82
  return
62
83
  }
63
84
 
64
- const attributes = extension.config.addAttributes.bind(context)() as Attributes
85
+ // TODO: remove `as Attributes`
86
+ const attributes = addAttributes() as Attributes
65
87
 
66
88
  Object
67
89
  .entries(attributes)
68
90
  .forEach(([name, attribute]) => {
91
+ const mergedAttr = {
92
+ ...defaultAttribute,
93
+ ...attribute,
94
+ }
95
+
96
+ if (attribute?.isRequired && attribute?.default === undefined) {
97
+ delete mergedAttr.default
98
+ }
99
+
69
100
  extensionAttributes.push({
70
- type: extension.config.name,
101
+ type: extension.name,
71
102
  name,
72
- attribute: {
73
- ...defaultAttribute,
74
- ...attribute,
75
- },
103
+ attribute: mergedAttr,
76
104
  })
77
105
  })
78
106
  })