@tiptap/core 2.0.0-beta.17 → 2.0.0-beta.170

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 (318) hide show
  1. package/LICENSE.md +1 -1
  2. package/README.md +2 -2
  3. package/dist/packages/core/src/CommandManager.d.ts +13 -6
  4. package/dist/packages/core/src/Editor.d.ts +23 -18
  5. package/dist/packages/core/src/EventEmitter.d.ts +8 -4
  6. package/dist/packages/core/src/Extension.d.ts +102 -26
  7. package/dist/packages/core/src/ExtensionManager.d.ts +7 -12
  8. package/dist/packages/core/src/InputRule.d.ts +42 -0
  9. package/dist/packages/core/src/Mark.d.ts +134 -30
  10. package/dist/packages/core/src/Node.d.ts +160 -32
  11. package/dist/packages/core/src/NodeView.d.ts +5 -9
  12. package/dist/packages/core/src/PasteRule.d.ts +42 -0
  13. package/dist/packages/core/src/Tracker.d.ts +11 -0
  14. package/dist/packages/core/src/commands/blur.d.ts +3 -3
  15. package/dist/packages/core/src/commands/clearContent.d.ts +3 -3
  16. package/dist/packages/core/src/commands/clearNodes.d.ts +3 -3
  17. package/dist/packages/core/src/commands/command.d.ts +2 -2
  18. package/dist/packages/core/src/commands/createParagraphNear.d.ts +3 -3
  19. package/dist/packages/core/src/commands/deleteNode.d.ts +13 -0
  20. package/dist/packages/core/src/commands/deleteRange.d.ts +3 -3
  21. package/dist/packages/core/src/commands/deleteSelection.d.ts +3 -3
  22. package/dist/packages/core/src/commands/enter.d.ts +3 -3
  23. package/dist/packages/core/src/commands/exitCode.d.ts +3 -3
  24. package/dist/packages/core/src/commands/extendMarkRange.d.ts +3 -3
  25. package/dist/packages/core/src/commands/first.d.ts +3 -3
  26. package/dist/packages/core/src/commands/focus.d.ts +5 -3
  27. package/dist/packages/core/src/commands/forEach.d.ts +14 -0
  28. package/dist/packages/core/src/commands/insertContent.d.ts +7 -3
  29. package/dist/packages/core/src/commands/insertContentAt.d.ts +16 -0
  30. package/dist/packages/core/src/commands/joinBackward.d.ts +3 -3
  31. package/dist/packages/core/src/commands/joinForward.d.ts +3 -3
  32. package/dist/packages/core/src/commands/keyboardShortcut.d.ts +3 -3
  33. package/dist/packages/core/src/commands/lift.d.ts +3 -3
  34. package/dist/packages/core/src/commands/liftEmptyBlock.d.ts +3 -3
  35. package/dist/packages/core/src/commands/liftListItem.d.ts +3 -3
  36. package/dist/packages/core/src/commands/newlineInCode.d.ts +3 -3
  37. package/dist/packages/core/src/commands/resetAttributes.d.ts +13 -0
  38. package/dist/packages/core/src/commands/scrollIntoView.d.ts +3 -3
  39. package/dist/packages/core/src/commands/selectAll.d.ts +3 -3
  40. package/dist/packages/core/src/commands/selectNodeBackward.d.ts +3 -3
  41. package/dist/packages/core/src/commands/selectNodeForward.d.ts +3 -3
  42. package/dist/packages/core/src/commands/selectParentNode.d.ts +3 -3
  43. package/dist/packages/core/src/commands/selectTextblockEnd.d.ts +12 -0
  44. package/dist/packages/core/src/commands/selectTextblockStart.d.ts +12 -0
  45. package/dist/packages/core/src/commands/setContent.d.ts +4 -3
  46. package/dist/packages/core/src/commands/setMark.d.ts +3 -3
  47. package/dist/packages/core/src/commands/setMeta.d.ts +12 -0
  48. package/dist/packages/core/src/commands/setNode.d.ts +3 -3
  49. package/dist/packages/core/src/commands/setNodeSelection.d.ts +12 -0
  50. package/dist/packages/core/src/commands/setTextSelection.d.ts +12 -0
  51. package/dist/packages/core/src/commands/sinkListItem.d.ts +3 -3
  52. package/dist/packages/core/src/commands/splitBlock.d.ts +3 -3
  53. package/dist/packages/core/src/commands/splitListItem.d.ts +3 -3
  54. package/dist/packages/core/src/commands/toggleList.d.ts +3 -3
  55. package/dist/packages/core/src/commands/toggleMark.d.ts +8 -3
  56. package/dist/packages/core/src/commands/toggleNode.d.ts +3 -3
  57. package/dist/packages/core/src/commands/toggleWrap.d.ts +3 -3
  58. package/dist/packages/core/src/commands/undoInputRule.d.ts +3 -3
  59. package/dist/packages/core/src/commands/unsetAllMarks.d.ts +3 -3
  60. package/dist/packages/core/src/commands/unsetMark.d.ts +8 -3
  61. package/dist/packages/core/src/commands/updateAttributes.d.ts +13 -0
  62. package/dist/packages/core/src/commands/wrapIn.d.ts +3 -3
  63. package/dist/packages/core/src/commands/wrapInList.d.ts +3 -3
  64. package/dist/packages/core/src/extensions/clipboardTextSerializer.d.ts +1 -1
  65. package/dist/packages/core/src/extensions/commands.d.ts +21 -15
  66. package/dist/packages/core/src/extensions/editable.d.ts +1 -1
  67. package/dist/packages/core/src/extensions/focusEvents.d.ts +1 -1
  68. package/dist/packages/core/src/extensions/index.d.ts +1 -0
  69. package/dist/packages/core/src/extensions/keymap.d.ts +1 -1
  70. package/dist/packages/core/src/extensions/tabindex.d.ts +2 -0
  71. package/dist/packages/core/src/helpers/combineTransactionSteps.d.ts +7 -0
  72. package/dist/packages/core/src/helpers/createChainableState.d.ts +5 -0
  73. package/dist/packages/core/src/helpers/createDocument.d.ts +3 -4
  74. package/dist/packages/core/src/helpers/createNodeFromContent.d.ts +4 -5
  75. package/dist/packages/core/src/helpers/defaultBlockAt.d.ts +2 -0
  76. package/dist/packages/core/src/helpers/findChildren.d.ts +3 -0
  77. package/dist/packages/core/src/helpers/findChildrenInRange.d.ts +6 -0
  78. package/dist/packages/core/src/helpers/findParentNode.d.ts +1 -1
  79. package/dist/packages/core/src/helpers/findParentNodeClosestToPos.d.ts +1 -1
  80. package/dist/packages/core/src/helpers/generateHTML.d.ts +2 -2
  81. package/dist/packages/core/src/helpers/generateJSON.d.ts +2 -0
  82. package/dist/packages/core/src/helpers/generateText.d.ts +5 -0
  83. package/dist/packages/core/src/helpers/getAttributes.d.ts +3 -0
  84. package/dist/packages/core/src/helpers/getAttributesFromExtensions.d.ts +1 -1
  85. package/dist/packages/core/src/helpers/getChangedRanges.d.ts +11 -0
  86. package/dist/packages/core/src/helpers/getDebugJSON.d.ts +8 -0
  87. package/dist/packages/core/src/helpers/getExtensionField.d.ts +2 -0
  88. package/dist/packages/core/src/helpers/getHTMLFromFragment.d.ts +2 -2
  89. package/dist/packages/core/src/helpers/getMarkAttributes.d.ts +1 -2
  90. package/dist/packages/core/src/helpers/getMarkRange.d.ts +1 -1
  91. package/dist/packages/core/src/helpers/getMarkType.d.ts +1 -1
  92. package/dist/packages/core/src/helpers/getMarksBetween.d.ts +2 -2
  93. package/dist/packages/core/src/helpers/getNodeAttributes.d.ts +1 -2
  94. package/dist/packages/core/src/helpers/getNodeType.d.ts +1 -1
  95. package/dist/packages/core/src/helpers/getRenderedAttributes.d.ts +2 -2
  96. package/dist/packages/core/src/helpers/getSchema.d.ts +1 -1
  97. package/dist/packages/core/src/helpers/getSchemaByResolvedExtensions.d.ts +3 -0
  98. package/dist/packages/core/src/helpers/getSchemaTypeByName.d.ts +1 -1
  99. package/dist/packages/core/src/helpers/getSchemaTypeNameByName.d.ts +1 -1
  100. package/dist/packages/core/src/helpers/getSplittedAttributes.d.ts +2 -2
  101. package/dist/packages/core/src/helpers/getText.d.ts +6 -0
  102. package/dist/packages/core/src/helpers/getTextBetween.d.ts +6 -0
  103. package/dist/packages/core/src/helpers/getTextSeralizersFromSchema.d.ts +3 -0
  104. package/dist/packages/core/src/helpers/injectExtensionAttributesToParseRule.d.ts +1 -1
  105. package/dist/packages/core/src/helpers/isActive.d.ts +1 -2
  106. package/dist/packages/core/src/helpers/isExtensionRulesEnabled.d.ts +2 -0
  107. package/dist/packages/core/src/helpers/isList.d.ts +1 -1
  108. package/dist/packages/core/src/helpers/isMarkActive.d.ts +1 -2
  109. package/dist/packages/core/src/helpers/isNodeActive.d.ts +1 -2
  110. package/dist/packages/core/src/helpers/isNodeEmpty.d.ts +1 -1
  111. package/dist/packages/core/src/helpers/isNodeSelection.d.ts +1 -1
  112. package/dist/packages/core/src/helpers/isTextSelection.d.ts +1 -1
  113. package/dist/packages/core/src/helpers/posToDOMRect.d.ts +2 -0
  114. package/dist/packages/core/src/helpers/resolveFocusPosition.d.ts +4 -0
  115. package/dist/packages/core/src/helpers/selectionToInsertionEnd.d.ts +1 -1
  116. package/dist/packages/core/src/helpers/splitExtensions.d.ts +4 -4
  117. package/dist/packages/core/src/index.d.ts +51 -20
  118. package/dist/packages/core/src/inputRules/markInputRule.d.ts +11 -2
  119. package/dist/packages/core/src/inputRules/nodeInputRule.d.ts +11 -2
  120. package/dist/packages/core/src/inputRules/textInputRule.d.ts +9 -0
  121. package/dist/packages/core/src/inputRules/textblockTypeInputRule.d.ts +14 -0
  122. package/dist/packages/core/src/inputRules/wrappingInputRule.d.ts +23 -0
  123. package/dist/packages/core/src/pasteRules/markPasteRule.d.ts +11 -2
  124. package/dist/packages/core/src/pasteRules/textPasteRule.d.ts +9 -0
  125. package/dist/packages/core/src/style.d.ts +1 -2
  126. package/dist/packages/core/src/types.d.ts +105 -52
  127. package/dist/packages/core/src/utilities/callOrReturn.d.ts +2 -1
  128. package/dist/packages/core/src/utilities/createStyleTag.d.ts +1 -1
  129. package/dist/packages/core/src/utilities/deleteProps.d.ts +1 -2
  130. package/dist/packages/core/src/utilities/elementFromString.d.ts +1 -1
  131. package/dist/packages/core/src/utilities/escapeForRegEx.d.ts +1 -0
  132. package/dist/packages/core/src/utilities/findDuplicates.d.ts +1 -0
  133. package/dist/packages/core/src/utilities/fromString.d.ts +1 -1
  134. package/dist/packages/core/src/utilities/isClass.d.ts +1 -1
  135. package/dist/packages/core/src/utilities/isEmptyObject.d.ts +1 -1
  136. package/dist/packages/core/src/utilities/isFunction.d.ts +1 -0
  137. package/dist/packages/core/src/utilities/isMacOS.d.ts +1 -0
  138. package/dist/packages/core/src/utilities/isNumber.d.ts +1 -0
  139. package/dist/packages/core/src/utilities/isObject.d.ts +1 -1
  140. package/dist/packages/core/src/utilities/isPlainObject.d.ts +1 -1
  141. package/dist/packages/core/src/utilities/isRegExp.d.ts +1 -0
  142. package/dist/packages/core/src/utilities/isiOS.d.ts +1 -0
  143. package/dist/packages/core/src/utilities/mergeAttributes.d.ts +1 -2
  144. package/dist/packages/core/src/utilities/mergeDeep.d.ts +1 -2
  145. package/dist/packages/core/src/utilities/minMax.d.ts +1 -1
  146. package/dist/packages/core/src/utilities/objectIncludes.d.ts +3 -2
  147. package/dist/packages/core/src/utilities/removeDuplicates.d.ts +8 -0
  148. package/dist/tiptap-core.cjs.js +3572 -2041
  149. package/dist/tiptap-core.cjs.js.map +1 -1
  150. package/dist/tiptap-core.esm.js +3544 -2044
  151. package/dist/tiptap-core.esm.js.map +1 -1
  152. package/dist/tiptap-core.umd.js +3430 -1898
  153. package/dist/tiptap-core.umd.js.map +1 -1
  154. package/package.json +20 -16
  155. package/src/CommandManager.ts +60 -62
  156. package/src/Editor.ts +109 -74
  157. package/src/EventEmitter.ts +14 -4
  158. package/src/Extension.ts +196 -41
  159. package/src/ExtensionManager.ts +242 -78
  160. package/src/InputRule.ts +268 -0
  161. package/src/Mark.ts +242 -47
  162. package/src/Node.ts +279 -52
  163. package/src/NodeView.ts +105 -42
  164. package/src/PasteRule.ts +246 -0
  165. package/src/Tracker.ts +42 -0
  166. package/src/commands/blur.ts +12 -6
  167. package/src/commands/clearContent.ts +3 -3
  168. package/src/commands/clearNodes.ts +29 -18
  169. package/src/commands/command.ts +2 -2
  170. package/src/commands/createParagraphNear.ts +3 -3
  171. package/src/commands/deleteNode.ts +36 -0
  172. package/src/commands/deleteRange.ts +3 -3
  173. package/src/commands/deleteSelection.ts +3 -3
  174. package/src/commands/enter.ts +3 -3
  175. package/src/commands/exitCode.ts +3 -3
  176. package/src/commands/extendMarkRange.ts +10 -10
  177. package/src/commands/first.ts +3 -3
  178. package/src/commands/focus.ts +45 -44
  179. package/src/commands/forEach.ts +24 -0
  180. package/src/commands/insertContent.ts +12 -24
  181. package/src/commands/insertContentAt.ts +107 -0
  182. package/src/commands/joinBackward.ts +3 -3
  183. package/src/commands/joinForward.ts +3 -3
  184. package/src/commands/keyboardShortcut.ts +6 -6
  185. package/src/commands/lift.ts +5 -5
  186. package/src/commands/liftEmptyBlock.ts +3 -3
  187. package/src/commands/liftListItem.ts +4 -4
  188. package/src/commands/newlineInCode.ts +3 -3
  189. package/src/commands/resetAttributes.ts +61 -0
  190. package/src/commands/scrollIntoView.ts +3 -3
  191. package/src/commands/selectAll.ts +8 -6
  192. package/src/commands/selectNodeBackward.ts +3 -3
  193. package/src/commands/selectNodeForward.ts +3 -3
  194. package/src/commands/selectParentNode.ts +3 -3
  195. package/src/commands/selectTextblockEnd.ts +19 -0
  196. package/src/commands/selectTextblockStart.ts +19 -0
  197. package/src/commands/setContent.ts +7 -11
  198. package/src/commands/setMark.ts +35 -12
  199. package/src/commands/setMeta.ts +18 -0
  200. package/src/commands/setNode.ts +27 -6
  201. package/src/commands/setNodeSelection.ts +28 -0
  202. package/src/commands/setTextSelection.ts +32 -0
  203. package/src/commands/sinkListItem.ts +4 -4
  204. package/src/commands/splitBlock.ts +14 -9
  205. package/src/commands/splitListItem.ts +41 -15
  206. package/src/commands/toggleList.ts +82 -18
  207. package/src/commands/toggleMark.ts +17 -7
  208. package/src/commands/toggleNode.ts +5 -5
  209. package/src/commands/toggleWrap.ts +8 -9
  210. package/src/commands/undoInputRule.ts +34 -5
  211. package/src/commands/unsetAllMarks.ts +7 -11
  212. package/src/commands/unsetMark.ts +34 -22
  213. package/src/commands/updateAttributes.ts +72 -0
  214. package/src/commands/wrapIn.ts +4 -10
  215. package/src/commands/wrapInList.ts +4 -4
  216. package/src/extensions/clipboardTextSerializer.ts +13 -35
  217. package/src/extensions/commands.ts +30 -21
  218. package/src/extensions/focusEvents.ts +0 -3
  219. package/src/extensions/index.ts +1 -0
  220. package/src/extensions/keymap.ts +111 -13
  221. package/src/extensions/tabindex.ts +19 -0
  222. package/src/helpers/combineTransactionSteps.ts +18 -0
  223. package/src/helpers/createChainableState.ts +37 -0
  224. package/src/helpers/createDocument.ts +5 -7
  225. package/src/helpers/createNodeFromContent.ts +15 -18
  226. package/src/helpers/defaultBlockAt.ts +13 -0
  227. package/src/helpers/findChildren.ts +17 -0
  228. package/src/helpers/findChildrenInRange.ts +31 -0
  229. package/src/helpers/findParentNode.ts +2 -2
  230. package/src/helpers/findParentNodeClosestToPos.ts +1 -1
  231. package/src/helpers/generateHTML.ts +5 -5
  232. package/src/helpers/generateJSON.ts +13 -0
  233. package/src/helpers/generateText.ts +29 -0
  234. package/src/helpers/getAttributes.ts +27 -0
  235. package/src/helpers/getAttributesFromExtensions.ts +28 -7
  236. package/src/helpers/getChangedRanges.ts +82 -0
  237. package/src/helpers/getDebugJSON.ts +53 -0
  238. package/src/helpers/getExtensionField.ts +25 -0
  239. package/src/helpers/getHTMLFromFragment.ts +6 -5
  240. package/src/helpers/getMarkAttributes.ts +12 -9
  241. package/src/helpers/getMarkRange.ts +34 -6
  242. package/src/helpers/getMarkType.ts +5 -1
  243. package/src/helpers/getMarksBetween.ts +31 -10
  244. package/src/helpers/getNodeAttributes.ts +7 -8
  245. package/src/helpers/getNodeType.ts +5 -1
  246. package/src/helpers/getRenderedAttributes.ts +4 -6
  247. package/src/helpers/getSchema.ts +6 -133
  248. package/src/helpers/getSchemaByResolvedExtensions.ts +147 -0
  249. package/src/helpers/getSchemaTypeByName.ts +2 -10
  250. package/src/helpers/getSchemaTypeNameByName.ts +1 -1
  251. package/src/helpers/getSplittedAttributes.ts +4 -4
  252. package/src/helpers/getText.ts +18 -0
  253. package/src/helpers/getTextBetween.ts +45 -0
  254. package/src/helpers/getTextSeralizersFromSchema.ts +9 -0
  255. package/src/helpers/injectExtensionAttributesToParseRule.ts +15 -17
  256. package/src/helpers/isActive.ts +4 -5
  257. package/src/helpers/isExtensionRulesEnabled.ts +15 -0
  258. package/src/helpers/isList.ts +14 -7
  259. package/src/helpers/isMarkActive.ts +43 -19
  260. package/src/helpers/isNodeActive.ts +26 -34
  261. package/src/helpers/isNodeEmpty.ts +1 -1
  262. package/src/helpers/isNodeSelection.ts +2 -2
  263. package/src/helpers/isTextSelection.ts +2 -2
  264. package/src/helpers/posToDOMRect.ts +34 -0
  265. package/src/helpers/resolveFocusPosition.ts +34 -0
  266. package/src/helpers/selectionToInsertionEnd.ts +1 -1
  267. package/src/helpers/splitExtensions.ts +1 -1
  268. package/src/index.ts +53 -20
  269. package/src/inputRules/markInputRule.ts +58 -39
  270. package/src/inputRules/nodeInputRule.ts +44 -11
  271. package/src/inputRules/textInputRule.ts +35 -0
  272. package/src/inputRules/textblockTypeInputRule.ts +37 -0
  273. package/src/inputRules/wrappingInputRule.ts +59 -0
  274. package/src/pasteRules/markPasteRule.ts +61 -53
  275. package/src/pasteRules/textPasteRule.ts +35 -0
  276. package/src/style.ts +16 -3
  277. package/src/types.ts +119 -37
  278. package/src/utilities/callOrReturn.ts +6 -3
  279. package/src/utilities/createStyleTag.ts +8 -1
  280. package/src/utilities/deleteProps.ts +2 -4
  281. package/src/utilities/elementFromString.ts +4 -5
  282. package/src/utilities/escapeForRegEx.ts +4 -0
  283. package/src/utilities/findDuplicates.ts +5 -0
  284. package/src/utilities/fromString.ts +2 -2
  285. package/src/utilities/isClass.ts +2 -2
  286. package/src/utilities/isEmptyObject.ts +2 -2
  287. package/src/utilities/isFunction.ts +3 -0
  288. package/src/utilities/isMacOS.ts +5 -0
  289. package/src/utilities/isNumber.ts +3 -0
  290. package/src/utilities/isObject.ts +6 -6
  291. package/src/utilities/isPlainObject.ts +8 -5
  292. package/src/utilities/isRegExp.ts +3 -0
  293. package/src/utilities/isString.ts +3 -0
  294. package/src/utilities/isiOS.ts +12 -0
  295. package/src/utilities/mergeAttributes.ts +2 -3
  296. package/src/utilities/mergeDeep.ts +2 -3
  297. package/src/utilities/minMax.ts +1 -1
  298. package/src/utilities/objectIncludes.ts +17 -5
  299. package/src/utilities/removeDuplicates.ts +15 -0
  300. package/CHANGELOG.md +0 -324
  301. package/dist/packages/core/src/commands/insertHTML.d.ts +0 -12
  302. package/dist/packages/core/src/commands/insertNode.d.ts +0 -13
  303. package/dist/packages/core/src/commands/insertText.d.ts +0 -12
  304. package/dist/packages/core/src/commands/replace.d.ts +0 -13
  305. package/dist/packages/core/src/commands/replaceRange.d.ts +0 -13
  306. package/dist/packages/core/src/commands/resetNodeAttributes.d.ts +0 -13
  307. package/dist/packages/core/src/commands/updateNodeAttributes.d.ts +0 -13
  308. package/dist/packages/core/src/utilities/removeElement.d.ts +0 -1
  309. package/dist/tiptap-core.bundle.umd.min.js +0 -17
  310. package/dist/tiptap-core.bundle.umd.min.js.map +0 -1
  311. package/src/commands/insertHTML.ts +0 -30
  312. package/src/commands/insertNode.ts +0 -33
  313. package/src/commands/insertText.ts +0 -22
  314. package/src/commands/replace.ts +0 -20
  315. package/src/commands/replaceRange.ts +0 -36
  316. package/src/commands/resetNodeAttributes.ts +0 -31
  317. package/src/commands/updateNodeAttributes.ts +0 -33
  318. package/src/utilities/removeElement.ts +0 -5
package/src/types.ts CHANGED
@@ -14,9 +14,56 @@ import { Extension } from './Extension'
14
14
  import { Node } from './Node'
15
15
  import { Mark } from './Mark'
16
16
  import { Editor } from './Editor'
17
- import { Commands } from '.'
17
+ import {
18
+ Commands,
19
+ ExtensionConfig,
20
+ NodeConfig,
21
+ MarkConfig,
22
+ } from '.'
23
+
24
+ export type AnyConfig = ExtensionConfig | NodeConfig | MarkConfig
25
+ export type AnyExtension = Extension | Node | Mark
26
+ export type Extensions = AnyExtension[]
27
+
28
+ export type ParentConfig<T> = Partial<{
29
+ [P in keyof T]: Required<T>[P] extends (...args: any) => any
30
+ ? (...args: Parameters<Required<T>[P]>) => ReturnType<Required<T>[P]>
31
+ : T[P]
32
+ }>
33
+
34
+ export type Primitive =
35
+ | null
36
+ | undefined
37
+ | string
38
+ | number
39
+ | boolean
40
+ | symbol
41
+ | bigint
42
+
43
+ export type RemoveThis<T> = T extends (...args: any) => any
44
+ ? (...args: Parameters<T>) => ReturnType<T>
45
+ : T
46
+
47
+ export type MaybeReturnType<T> = T extends (...args: any) => any
48
+ ? ReturnType<T>
49
+ : T
50
+
51
+ export type MaybeThisParameterType<T> = Exclude<T, Primitive> extends (...args: any) => any
52
+ ? ThisParameterType<Exclude<T, Primitive>>
53
+ : any
54
+
55
+ export interface EditorEvents {
56
+ beforeCreate: { editor: Editor },
57
+ create: { editor: Editor },
58
+ update: { editor: Editor, transaction: Transaction },
59
+ selectionUpdate: { editor: Editor, transaction: Transaction },
60
+ transaction: { editor: Editor, transaction: Transaction },
61
+ focus: { editor: Editor, event: FocusEvent, transaction: Transaction },
62
+ blur: { editor: Editor, event: FocusEvent, transaction: Transaction },
63
+ destroy: void,
64
+ }
18
65
 
19
- export type Extensions = (Extension | Node | Mark)[]
66
+ export type EnableRules = (AnyExtension | string)[] | boolean
20
67
 
21
68
  export interface EditorOptions {
22
69
  element: Element,
@@ -27,20 +74,35 @@ export interface EditorOptions {
27
74
  editable: boolean,
28
75
  editorProps: EditorProps,
29
76
  parseOptions: ParseOptions,
30
- enableInputRules: boolean,
31
- enablePasteRules: boolean,
32
- onCreate: (props: { editor: Editor }) => void,
33
- onUpdate: (props: { editor: Editor }) => void,
34
- onViewUpdate: (props: { editor: Editor }) => void,
35
- onSelectionUpdate: (props: { editor: Editor }) => void,
36
- onTransaction: (props: { editor: Editor, transaction: Transaction }) => void,
37
- onFocus: (props: { editor: Editor, event: FocusEvent }) => void,
38
- onBlur: (props: { editor: Editor, event: FocusEvent }) => void,
39
- onResize: (props: { editor: Editor }) => void,
40
- onDestroy: () => void,
77
+ enableInputRules: EnableRules,
78
+ enablePasteRules: EnableRules,
79
+ enableCoreExtensions: boolean,
80
+ onBeforeCreate: (props: EditorEvents['beforeCreate']) => void,
81
+ onCreate: (props: EditorEvents['create']) => void,
82
+ onUpdate: (props: EditorEvents['update']) => void,
83
+ onSelectionUpdate: (props: EditorEvents['selectionUpdate']) => void,
84
+ onTransaction: (props: EditorEvents['transaction']) => void,
85
+ onFocus: (props: EditorEvents['focus']) => void,
86
+ onBlur: (props: EditorEvents['blur']) => void,
87
+ onDestroy: (props: EditorEvents['destroy']) => void,
41
88
  }
42
89
 
43
- export type Content = string | JSON | null
90
+ export type HTMLContent = string
91
+
92
+ export type JSONContent = {
93
+ type?: string,
94
+ attrs?: Record<string, any>,
95
+ content?: JSONContent[],
96
+ marks?: {
97
+ type: string,
98
+ attrs?: Record<string, any>,
99
+ [key: string]: any,
100
+ }[],
101
+ text?: string,
102
+ [key: string]: any,
103
+ }
104
+
105
+ export type Content = HTMLContent | JSONContent | JSONContent[] | null
44
106
 
45
107
  export type CommandProps = {
46
108
  editor: Editor,
@@ -57,11 +119,13 @@ export type Command = (props: CommandProps) => boolean
57
119
 
58
120
  export type CommandSpec = (...args: any[]) => Command
59
121
 
122
+ export type KeyboardShortcutCommand = (props: { editor: Editor }) => boolean
123
+
60
124
  export type Attribute = {
61
125
  default: any,
62
126
  rendered?: boolean,
63
- renderHTML?: ((attributes: { [key: string]: any }) => { [key: string]: any } | null) | null,
64
- parseHTML?: ((element: HTMLElement) => { [key: string]: any } | null) | null,
127
+ renderHTML?: ((attributes: Record<string, any>) => Record<string, any> | null) | null,
128
+ parseHTML?: ((element: HTMLElement) => any | null) | null,
65
129
  keepOnSplit: boolean,
66
130
  }
67
131
 
@@ -84,22 +148,18 @@ export type GlobalAttributes = {
84
148
 
85
149
  export type PickValue<T, K extends keyof T> = T[K]
86
150
 
87
- export type UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends ((k: infer I)=>void)
151
+ export type UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends ((k: infer I) => void)
88
152
  ? I
89
153
  : never
90
154
 
91
155
  export type Diff<T extends keyof any, U extends keyof any> =
92
156
  ({ [P in T]: P } & { [P in U]: never } & { [x: string]: never })[T]
93
157
 
94
- export type Overwrite<T, U> = Pick<T, Diff<keyof T, keyof U>> & U;
158
+ export type Overwrite<T, U> = Pick<T, Diff<keyof T, keyof U>> & U
95
159
 
96
- export type AnyObject = {
97
- [key: string]: any
98
- }
99
-
100
- export type ValuesOf<T> = T[keyof T];
160
+ export type ValuesOf<T> = T[keyof T]
101
161
 
102
- export type KeysWithTypeOf<T, Type> = ({[P in keyof T]: T[P] extends Type ? P : never })[keyof T]
162
+ export type KeysWithTypeOf<T, Type> = ({ [P in keyof T]: T[P] extends Type ? P : never })[keyof T]
103
163
 
104
164
  export type NodeViewProps = {
105
165
  editor: Editor,
@@ -108,45 +168,51 @@ export type NodeViewProps = {
108
168
  selected: boolean,
109
169
  extension: Node,
110
170
  getPos: () => number,
111
- updateAttributes: (attributes: AnyObject) => void,
171
+ updateAttributes: (attributes: Record<string, any>) => void,
172
+ deleteNode: () => void,
173
+ }
174
+
175
+ export interface NodeViewRendererOptions {
176
+ stopEvent: ((props: {
177
+ event: Event
178
+ }) => boolean) | null,
179
+ ignoreMutation: ((props: {
180
+ mutation: MutationRecord | { type: 'selection', target: Element }
181
+ }) => boolean) | null,
112
182
  }
113
183
 
114
184
  export type NodeViewRendererProps = {
115
185
  editor: Editor,
116
186
  node: ProseMirrorNode,
117
187
  getPos: (() => number) | boolean,
118
- HTMLAttributes: { [key: string]: any },
188
+ HTMLAttributes: Record<string, any>,
119
189
  decorations: Decoration[],
120
190
  extension: Node,
121
191
  }
122
192
 
123
193
  export type NodeViewRenderer = (props: NodeViewRendererProps) => (NodeView | {})
124
194
 
125
- export type UnionCommands = UnionToIntersection<ValuesOf<Pick<Commands, KeysWithTypeOf<Commands, {}>>>>
195
+ export type AnyCommands = Record<string, (...args: any[]) => Command>
196
+
197
+ export type UnionCommands<T = Command> = UnionToIntersection<ValuesOf<Pick<Commands<T>, KeysWithTypeOf<Commands<T>, {}>>>>
126
198
 
127
199
  export type RawCommands = {
128
- [Item in keyof UnionCommands]: UnionCommands[Item] extends (...args: any[]) => any
129
- ? (...args: Parameters<UnionCommands[Item]>) => Command
130
- : never
200
+ [Item in keyof UnionCommands]: UnionCommands<Command>[Item]
131
201
  }
132
202
 
133
203
  export type SingleCommands = {
134
- [Item in keyof RawCommands]: RawCommands[Item] extends (...args: any[]) => any
135
- ? (...args: Parameters<RawCommands[Item]>) => boolean
136
- : never
204
+ [Item in keyof UnionCommands]: UnionCommands<boolean>[Item]
137
205
  }
138
206
 
139
207
  export type ChainedCommands = {
140
- [Item in keyof RawCommands]: RawCommands[Item] extends (...args: any[]) => any
141
- ? (...args: Parameters<RawCommands[Item]>) => ChainedCommands
142
- : never
208
+ [Item in keyof UnionCommands]: UnionCommands<ChainedCommands>[Item]
143
209
  } & {
144
210
  run: () => boolean
145
211
  }
146
212
 
147
213
  export type CanCommands = SingleCommands & { chain: () => ChainedCommands }
148
214
 
149
- export type FocusPosition = 'start' | 'end' | number | boolean | null
215
+ export type FocusPosition = 'start' | 'end' | 'all' | number | boolean | null
150
216
 
151
217
  export type Range = {
152
218
  from: number,
@@ -166,3 +232,19 @@ export type MarkRange = {
166
232
  }
167
233
 
168
234
  export type Predicate = (node: ProseMirrorNode) => boolean
235
+
236
+ export type NodeWithPos = {
237
+ node: ProseMirrorNode,
238
+ pos: number,
239
+ }
240
+
241
+ export type TextSerializer = (props: {
242
+ node: ProseMirrorNode,
243
+ pos: number,
244
+ parent: ProseMirrorNode,
245
+ index: number,
246
+ }) => string
247
+
248
+ export type ExtendedRegExpMatchArray = RegExpMatchArray & {
249
+ data?: Record<string, any>,
250
+ }
@@ -1,3 +1,6 @@
1
+ import { MaybeReturnType } from '../types'
2
+ import { isFunction } from './isFunction'
3
+
1
4
  /**
2
5
  * Optionally calls `value` as a function.
3
6
  * Otherwise it is returned directly.
@@ -5,8 +8,8 @@
5
8
  * @param context Optional context to bind to function.
6
9
  * @param props Optional props to pass to function.
7
10
  */
8
- export default function callOrReturn(value: any, context: any = undefined, ...props: any[]): any {
9
- if (typeof value === 'function') {
11
+ export function callOrReturn<T>(value: T, context: any = undefined, ...props: any[]): MaybeReturnType<T> {
12
+ if (isFunction(value)) {
10
13
  if (context) {
11
14
  return value.bind(context)(...props)
12
15
  }
@@ -14,5 +17,5 @@ export default function callOrReturn(value: any, context: any = undefined, ...pr
14
17
  return value(...props)
15
18
  }
16
19
 
17
- return value
20
+ return value as MaybeReturnType<T>
18
21
  }
@@ -1,6 +1,13 @@
1
- export default function createStyleTag(style: string): HTMLStyleElement {
1
+ export function createStyleTag(style: string): HTMLStyleElement {
2
+ const tipTapStyleTag = (<HTMLStyleElement>document.querySelector('style[data-tiptap-style]'))
3
+
4
+ if (tipTapStyleTag !== null) {
5
+ return tipTapStyleTag
6
+ }
7
+
2
8
  const styleNode = document.createElement('style')
3
9
 
10
+ styleNode.setAttribute('data-tiptap-style', '')
4
11
  styleNode.innerHTML = style
5
12
  document.getElementsByTagName('head')[0].appendChild(styleNode)
6
13
 
@@ -1,18 +1,16 @@
1
- import { AnyObject } from '../types'
2
-
3
1
  /**
4
2
  * Remove a property or an array of properties from an object
5
3
  * @param obj Object
6
4
  * @param key Key to remove
7
5
  */
8
- export default function deleteProps(obj: AnyObject, propOrProps: string | string[]): AnyObject {
6
+ export function deleteProps(obj: Record<string, any>, propOrProps: string | string[]): Record<string, any> {
9
7
  const props = typeof propOrProps === 'string'
10
8
  ? [propOrProps]
11
9
  : propOrProps
12
10
 
13
11
  return Object
14
12
  .keys(obj)
15
- .reduce((newObj: AnyObject, prop) => {
13
+ .reduce((newObj: Record<string, any>, prop) => {
16
14
  if (!props.includes(prop)) {
17
15
  newObj[prop] = obj[prop]
18
16
  }
@@ -1,7 +1,6 @@
1
- export default function elementFromString(value: string): HTMLElement {
2
- const htmlString = `<div>${value}</div>`
3
- const parser = new window.DOMParser()
4
- const element = parser.parseFromString(htmlString, 'text/html').body
1
+ export function elementFromString(value: string): HTMLElement {
2
+ // add a wrapper to preserve leading and trailing whitespace
3
+ const wrappedValue = `<body>${value}</body>`
5
4
 
6
- return element
5
+ return new window.DOMParser().parseFromString(wrappedValue, 'text/html').body
7
6
  }
@@ -0,0 +1,4 @@
1
+ // source: https://stackoverflow.com/a/6969486
2
+ export function escapeForRegEx(string: string): string {
3
+ return string.replace(/[-/\\^$*+?.()|[\]{}]/g, '\\$&')
4
+ }
@@ -0,0 +1,5 @@
1
+ export function findDuplicates(items: any[]): any[] {
2
+ const filtered = items.filter((el, index) => items.indexOf(el) !== index)
3
+
4
+ return [...new Set(filtered)]
5
+ }
@@ -1,9 +1,9 @@
1
- export default function fromString(value: any): any {
1
+ export function fromString(value: any): any {
2
2
  if (typeof value !== 'string') {
3
3
  return value
4
4
  }
5
5
 
6
- if (value.match(/^\d*(\.\d+)?$/)) {
6
+ if (value.match(/^[+-]?(?:\d*\.)?\d+$/)) {
7
7
  return Number(value)
8
8
  }
9
9
 
@@ -1,5 +1,5 @@
1
- export default function isClass(item: any): boolean {
2
- if (item.constructor?.toString().substring(0, 5) !== 'class') {
1
+ export function isClass(value: any): boolean {
2
+ if (value.constructor?.toString().substring(0, 5) !== 'class') {
3
3
  return false
4
4
  }
5
5
 
@@ -1,3 +1,3 @@
1
- export default function isEmptyObject(object = {}): boolean {
2
- return Object.keys(object).length === 0 && object.constructor === Object
1
+ export function isEmptyObject(value = {}): boolean {
2
+ return Object.keys(value).length === 0 && value.constructor === Object
3
3
  }
@@ -0,0 +1,3 @@
1
+ export function isFunction(value: any): value is Function {
2
+ return typeof value === 'function'
3
+ }
@@ -0,0 +1,5 @@
1
+ export function isMacOS(): boolean {
2
+ return typeof navigator !== 'undefined'
3
+ ? /Mac/.test(navigator.platform)
4
+ : false
5
+ }
@@ -0,0 +1,3 @@
1
+ export function isNumber(value: any): value is number {
2
+ return typeof value === 'number'
3
+ }
@@ -1,10 +1,10 @@
1
- import isClass from './isClass'
1
+ import { isClass } from './isClass'
2
2
 
3
- export default function isObject(item: any): boolean {
3
+ export function isObject(value: any): boolean {
4
4
  return (
5
- item
6
- && typeof item === 'object'
7
- && !Array.isArray(item)
8
- && !isClass(item)
5
+ value
6
+ && typeof value === 'object'
7
+ && !Array.isArray(value)
8
+ && !isClass(value)
9
9
  )
10
10
  }
@@ -1,10 +1,13 @@
1
1
  // see: https://github.com/mesqueeb/is-what/blob/88d6e4ca92fb2baab6003c54e02eedf4e729e5ab/src/index.ts
2
2
 
3
- function getType(payload: any): string {
4
- return Object.prototype.toString.call(payload).slice(8, -1)
3
+ function getType(value: any): string {
4
+ return Object.prototype.toString.call(value).slice(8, -1)
5
5
  }
6
6
 
7
- export default function isPlainObject(payload: any): payload is Record<string, any> {
8
- if (getType(payload) !== 'Object') return false
9
- return payload.constructor === Object && Object.getPrototypeOf(payload) === Object.prototype
7
+ export function isPlainObject(value: any): value is Record<string, any> {
8
+ if (getType(value) !== 'Object') {
9
+ return false
10
+ }
11
+
12
+ return value.constructor === Object && Object.getPrototypeOf(value) === Object.prototype
10
13
  }
@@ -0,0 +1,3 @@
1
+ export function isRegExp(value: any): value is RegExp {
2
+ return Object.prototype.toString.call(value) === '[object RegExp]'
3
+ }
@@ -0,0 +1,3 @@
1
+ export function isString(value: any): value is string {
2
+ return typeof value === 'string'
3
+ }
@@ -0,0 +1,12 @@
1
+ export function isiOS(): boolean {
2
+ return [
3
+ 'iPad Simulator',
4
+ 'iPhone Simulator',
5
+ 'iPod Simulator',
6
+ 'iPad',
7
+ 'iPhone',
8
+ 'iPod',
9
+ ].includes(navigator.platform)
10
+ // iPad on iOS 13 detection
11
+ || (navigator.userAgent.includes('Mac') && 'ontouchend' in document)
12
+ }
@@ -1,6 +1,4 @@
1
- import { AnyObject } from '../types'
2
-
3
- export default function mergeAttributes(...objects: AnyObject[]): AnyObject {
1
+ export function mergeAttributes(...objects: Record<string, any>[]): Record<string, any> {
4
2
  return objects
5
3
  .filter(item => !!item)
6
4
  .reduce((items, item) => {
@@ -11,6 +9,7 @@ export default function mergeAttributes(...objects: AnyObject[]): AnyObject {
11
9
 
12
10
  if (!exists) {
13
11
  mergedAttributes[key] = value
12
+
14
13
  return
15
14
  }
16
15
 
@@ -1,7 +1,6 @@
1
- import { AnyObject } from '../types'
2
- import isPlainObject from './isPlainObject'
1
+ import { isPlainObject } from './isPlainObject'
3
2
 
4
- export default function mergeDeep(target: AnyObject, source: AnyObject): AnyObject {
3
+ export function mergeDeep(target: Record<string, any>, source: Record<string, any>): Record<string, any> {
5
4
  const output = { ...target }
6
5
 
7
6
  if (isPlainObject(target) && isPlainObject(source)) {
@@ -1,3 +1,3 @@
1
- export default function minMax(value = 0, min = 0, max = 0): number {
1
+ export function minMax(value = 0, min = 0, max = 0): number {
2
2
  return Math.min(Math.max(value, min), max)
3
3
  }
@@ -1,18 +1,30 @@
1
- import { AnyObject } from '../types'
1
+ import { isRegExp } from './isRegExp'
2
2
 
3
3
  /**
4
4
  * Check if object1 includes object2
5
5
  * @param object1 Object
6
6
  * @param object2 Object
7
7
  */
8
- export default function objectIncludes(object1: AnyObject, object2: AnyObject): boolean {
8
+ export function objectIncludes(
9
+ object1: Record<string, any>,
10
+ object2: Record<string, any>,
11
+ options: { strict: boolean } = { strict: true },
12
+ ): boolean {
9
13
  const keys = Object.keys(object2)
10
14
 
11
15
  if (!keys.length) {
12
16
  return true
13
17
  }
14
18
 
15
- return !!keys
16
- .filter(key => object2[key] === object1[key])
17
- .length
19
+ return keys.every(key => {
20
+ if (options.strict) {
21
+ return object2[key] === object1[key]
22
+ }
23
+
24
+ if (isRegExp(object2[key])) {
25
+ return object2[key].test(object1[key])
26
+ }
27
+
28
+ return object2[key] === object1[key]
29
+ })
18
30
  }
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Removes duplicated values within an array.
3
+ * Supports numbers, strings and objects.
4
+ */
5
+ export function removeDuplicates<T>(array: T[], by = JSON.stringify): T[] {
6
+ const seen: Record<any, any> = {}
7
+
8
+ return array.filter(item => {
9
+ const key = by(item)
10
+
11
+ return Object.prototype.hasOwnProperty.call(seen, key)
12
+ ? false
13
+ : (seen[key] = true)
14
+ })
15
+ }