@tiptap/core 2.1.0-rc.1 → 2.1.0-rc.11

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 (244) hide show
  1. package/dist/index.cjs +96 -31
  2. package/dist/index.cjs.map +1 -1
  3. package/dist/index.js +94 -32
  4. package/dist/index.js.map +1 -1
  5. package/dist/index.umd.js +96 -31
  6. package/dist/index.umd.js.map +1 -1
  7. package/dist/packages/core/src/CommandManager.d.ts +2 -2
  8. package/dist/packages/core/src/Editor.d.ts +8 -4
  9. package/dist/packages/core/src/Extension.d.ts +7 -7
  10. package/dist/packages/core/src/ExtensionManager.d.ts +2 -2
  11. package/dist/packages/core/src/InputRule.d.ts +2 -2
  12. package/dist/packages/core/src/Mark.d.ts +6 -6
  13. package/dist/packages/core/src/Node.d.ts +5 -5
  14. package/dist/packages/core/src/NodeView.d.ts +3 -3
  15. package/dist/packages/core/src/PasteRule.d.ts +2 -2
  16. package/dist/packages/core/src/commands/blur.d.ts +1 -1
  17. package/dist/packages/core/src/commands/clearContent.d.ts +1 -1
  18. package/dist/packages/core/src/commands/clearNodes.d.ts +1 -1
  19. package/dist/packages/core/src/commands/command.d.ts +1 -1
  20. package/dist/packages/core/src/commands/createParagraphNear.d.ts +1 -1
  21. package/dist/packages/core/src/commands/cut.d.ts +15 -0
  22. package/dist/packages/core/src/commands/deleteCurrentNode.d.ts +1 -1
  23. package/dist/packages/core/src/commands/deleteNode.d.ts +1 -1
  24. package/dist/packages/core/src/commands/deleteRange.d.ts +1 -1
  25. package/dist/packages/core/src/commands/deleteSelection.d.ts +1 -1
  26. package/dist/packages/core/src/commands/enter.d.ts +1 -1
  27. package/dist/packages/core/src/commands/exitCode.d.ts +1 -1
  28. package/dist/packages/core/src/commands/extendMarkRange.d.ts +1 -1
  29. package/dist/packages/core/src/commands/first.d.ts +1 -1
  30. package/dist/packages/core/src/commands/focus.d.ts +1 -1
  31. package/dist/packages/core/src/commands/forEach.d.ts +1 -1
  32. package/dist/packages/core/src/commands/index.d.ts +51 -50
  33. package/dist/packages/core/src/commands/insertContent.d.ts +1 -1
  34. package/dist/packages/core/src/commands/insertContentAt.d.ts +1 -1
  35. package/dist/packages/core/src/commands/join.d.ts +1 -1
  36. package/dist/packages/core/src/commands/keyboardShortcut.d.ts +1 -1
  37. package/dist/packages/core/src/commands/lift.d.ts +1 -1
  38. package/dist/packages/core/src/commands/liftEmptyBlock.d.ts +1 -1
  39. package/dist/packages/core/src/commands/liftListItem.d.ts +1 -1
  40. package/dist/packages/core/src/commands/newlineInCode.d.ts +1 -1
  41. package/dist/packages/core/src/commands/resetAttributes.d.ts +1 -1
  42. package/dist/packages/core/src/commands/scrollIntoView.d.ts +1 -1
  43. package/dist/packages/core/src/commands/selectAll.d.ts +1 -1
  44. package/dist/packages/core/src/commands/selectNodeBackward.d.ts +1 -1
  45. package/dist/packages/core/src/commands/selectNodeForward.d.ts +1 -1
  46. package/dist/packages/core/src/commands/selectParentNode.d.ts +1 -1
  47. package/dist/packages/core/src/commands/selectTextblockEnd.d.ts +1 -1
  48. package/dist/packages/core/src/commands/selectTextblockStart.d.ts +1 -1
  49. package/dist/packages/core/src/commands/setContent.d.ts +1 -1
  50. package/dist/packages/core/src/commands/setMark.d.ts +1 -1
  51. package/dist/packages/core/src/commands/setMeta.d.ts +1 -1
  52. package/dist/packages/core/src/commands/setNode.d.ts +1 -1
  53. package/dist/packages/core/src/commands/setNodeSelection.d.ts +1 -1
  54. package/dist/packages/core/src/commands/setTextSelection.d.ts +1 -1
  55. package/dist/packages/core/src/commands/sinkListItem.d.ts +1 -1
  56. package/dist/packages/core/src/commands/splitBlock.d.ts +1 -1
  57. package/dist/packages/core/src/commands/splitListItem.d.ts +1 -1
  58. package/dist/packages/core/src/commands/toggleList.d.ts +1 -1
  59. package/dist/packages/core/src/commands/toggleMark.d.ts +1 -1
  60. package/dist/packages/core/src/commands/toggleNode.d.ts +1 -1
  61. package/dist/packages/core/src/commands/toggleWrap.d.ts +1 -1
  62. package/dist/packages/core/src/commands/undoInputRule.d.ts +1 -1
  63. package/dist/packages/core/src/commands/unsetAllMarks.d.ts +1 -1
  64. package/dist/packages/core/src/commands/unsetMark.d.ts +1 -1
  65. package/dist/packages/core/src/commands/updateAttributes.d.ts +1 -1
  66. package/dist/packages/core/src/commands/wrapIn.d.ts +1 -1
  67. package/dist/packages/core/src/commands/wrapInList.d.ts +1 -1
  68. package/dist/packages/core/src/extensions/clipboardTextSerializer.d.ts +1 -1
  69. package/dist/packages/core/src/extensions/commands.d.ts +2 -2
  70. package/dist/packages/core/src/extensions/editable.d.ts +1 -1
  71. package/dist/packages/core/src/extensions/focusEvents.d.ts +1 -1
  72. package/dist/packages/core/src/extensions/index.d.ts +6 -6
  73. package/dist/packages/core/src/extensions/keymap.d.ts +1 -1
  74. package/dist/packages/core/src/extensions/tabindex.d.ts +1 -1
  75. package/dist/packages/core/src/helpers/createDocument.d.ts +1 -1
  76. package/dist/packages/core/src/helpers/createNodeFromContent.d.ts +1 -1
  77. package/dist/packages/core/src/helpers/findChildren.d.ts +1 -1
  78. package/dist/packages/core/src/helpers/findChildrenInRange.d.ts +1 -1
  79. package/dist/packages/core/src/helpers/findParentNode.d.ts +1 -1
  80. package/dist/packages/core/src/helpers/findParentNodeClosestToPos.d.ts +1 -1
  81. package/dist/packages/core/src/helpers/generateHTML.d.ts +1 -1
  82. package/dist/packages/core/src/helpers/generateJSON.d.ts +1 -1
  83. package/dist/packages/core/src/helpers/generateText.d.ts +1 -1
  84. package/dist/packages/core/src/helpers/getAttributesFromExtensions.d.ts +1 -1
  85. package/dist/packages/core/src/helpers/getChangedRanges.d.ts +1 -1
  86. package/dist/packages/core/src/helpers/getDebugJSON.d.ts +1 -1
  87. package/dist/packages/core/src/helpers/getExtensionField.d.ts +1 -1
  88. package/dist/packages/core/src/helpers/getMarkRange.d.ts +1 -1
  89. package/dist/packages/core/src/helpers/getMarksBetween.d.ts +1 -1
  90. package/dist/packages/core/src/helpers/getNodeAtPosition.d.ts +11 -0
  91. package/dist/packages/core/src/helpers/getRenderedAttributes.d.ts +1 -1
  92. package/dist/packages/core/src/helpers/getSchema.d.ts +2 -2
  93. package/dist/packages/core/src/helpers/getSchemaByResolvedExtensions.d.ts +2 -2
  94. package/dist/packages/core/src/helpers/getSplittedAttributes.d.ts +1 -1
  95. package/dist/packages/core/src/helpers/getText.d.ts +1 -1
  96. package/dist/packages/core/src/helpers/getTextBetween.d.ts +1 -1
  97. package/dist/packages/core/src/helpers/getTextSerializersFromSchema.d.ts +1 -1
  98. package/dist/packages/core/src/helpers/index.d.ts +50 -47
  99. package/dist/packages/core/src/helpers/injectExtensionAttributesToParseRule.d.ts +1 -1
  100. package/dist/packages/core/src/helpers/isAtEndOfNode.d.ts +2 -0
  101. package/dist/packages/core/src/helpers/isAtStartOfNode.d.ts +2 -0
  102. package/dist/packages/core/src/helpers/isExtensionRulesEnabled.d.ts +1 -1
  103. package/dist/packages/core/src/helpers/isList.d.ts +1 -1
  104. package/dist/packages/core/src/helpers/resolveFocusPosition.d.ts +1 -1
  105. package/dist/packages/core/src/helpers/splitExtensions.d.ts +4 -4
  106. package/dist/packages/core/src/index.d.ts +15 -15
  107. package/dist/packages/core/src/inputRules/index.d.ts +5 -5
  108. package/dist/packages/core/src/inputRules/markInputRule.d.ts +2 -2
  109. package/dist/packages/core/src/inputRules/nodeInputRule.d.ts +2 -2
  110. package/dist/packages/core/src/inputRules/textInputRule.d.ts +1 -1
  111. package/dist/packages/core/src/inputRules/textblockTypeInputRule.d.ts +2 -2
  112. package/dist/packages/core/src/inputRules/wrappingInputRule.d.ts +3 -3
  113. package/dist/packages/core/src/pasteRules/index.d.ts +3 -3
  114. package/dist/packages/core/src/pasteRules/markPasteRule.d.ts +2 -2
  115. package/dist/packages/core/src/pasteRules/nodePasteRule.d.ts +2 -2
  116. package/dist/packages/core/src/pasteRules/textPasteRule.d.ts +1 -1
  117. package/dist/packages/core/src/types.d.ts +5 -5
  118. package/dist/packages/core/src/utilities/callOrReturn.d.ts +1 -1
  119. package/dist/packages/core/src/utilities/index.d.ts +20 -20
  120. package/dist/packages/core/src/utilities/isAndroid.d.ts +1 -0
  121. package/package.json +2 -2
  122. package/src/CommandManager.ts +4 -8
  123. package/src/Editor.ts +24 -16
  124. package/src/Extension.ts +10 -10
  125. package/src/ExtensionManager.ts +15 -15
  126. package/src/InputRule.ts +6 -6
  127. package/src/Mark.ts +9 -9
  128. package/src/Node.ts +8 -8
  129. package/src/NodeView.ts +8 -6
  130. package/src/PasteRule.ts +6 -6
  131. package/src/commands/blur.ts +1 -1
  132. package/src/commands/clearContent.ts +1 -1
  133. package/src/commands/clearNodes.ts +1 -1
  134. package/src/commands/command.ts +1 -1
  135. package/src/commands/createParagraphNear.ts +1 -1
  136. package/src/commands/cut.ts +27 -0
  137. package/src/commands/deleteCurrentNode.ts +1 -1
  138. package/src/commands/deleteNode.ts +2 -2
  139. package/src/commands/deleteRange.ts +1 -1
  140. package/src/commands/deleteSelection.ts +1 -1
  141. package/src/commands/enter.ts +1 -1
  142. package/src/commands/exitCode.ts +1 -1
  143. package/src/commands/extendMarkRange.ts +3 -3
  144. package/src/commands/first.ts +1 -1
  145. package/src/commands/focus.ts +4 -4
  146. package/src/commands/forEach.ts +1 -1
  147. package/src/commands/index.ts +51 -50
  148. package/src/commands/insertContent.ts +1 -1
  149. package/src/commands/insertContentAt.ts +4 -4
  150. package/src/commands/join.ts +1 -1
  151. package/src/commands/keyboardShortcut.ts +3 -3
  152. package/src/commands/lift.ts +3 -3
  153. package/src/commands/liftEmptyBlock.ts +1 -1
  154. package/src/commands/liftListItem.ts +2 -2
  155. package/src/commands/newlineInCode.ts +1 -1
  156. package/src/commands/resetAttributes.ts +5 -5
  157. package/src/commands/scrollIntoView.ts +1 -1
  158. package/src/commands/selectAll.ts +1 -1
  159. package/src/commands/selectNodeBackward.ts +1 -1
  160. package/src/commands/selectNodeForward.ts +1 -1
  161. package/src/commands/selectParentNode.ts +1 -1
  162. package/src/commands/selectTextblockEnd.ts +1 -1
  163. package/src/commands/selectTextblockStart.ts +1 -1
  164. package/src/commands/setContent.ts +2 -2
  165. package/src/commands/setMark.ts +4 -4
  166. package/src/commands/setMeta.ts +1 -1
  167. package/src/commands/setNode.ts +2 -2
  168. package/src/commands/setNodeSelection.ts +2 -2
  169. package/src/commands/setTextSelection.ts +2 -2
  170. package/src/commands/sinkListItem.ts +2 -2
  171. package/src/commands/splitBlock.ts +3 -3
  172. package/src/commands/splitListItem.ts +3 -3
  173. package/src/commands/toggleList.ts +4 -4
  174. package/src/commands/toggleMark.ts +3 -3
  175. package/src/commands/toggleNode.ts +3 -3
  176. package/src/commands/toggleWrap.ts +3 -3
  177. package/src/commands/undoInputRule.ts +1 -1
  178. package/src/commands/unsetAllMarks.ts +1 -1
  179. package/src/commands/unsetMark.ts +3 -3
  180. package/src/commands/updateAttributes.ts +4 -4
  181. package/src/commands/wrapIn.ts +2 -2
  182. package/src/commands/wrapInList.ts +2 -2
  183. package/src/extensions/clipboardTextSerializer.ts +3 -3
  184. package/src/extensions/commands.ts +3 -3
  185. package/src/extensions/editable.ts +1 -1
  186. package/src/extensions/focusEvents.ts +1 -1
  187. package/src/extensions/index.ts +6 -6
  188. package/src/extensions/keymap.ts +5 -5
  189. package/src/extensions/tabindex.ts +1 -1
  190. package/src/helpers/createDocument.ts +2 -2
  191. package/src/helpers/createNodeFromContent.ts +2 -2
  192. package/src/helpers/findChildren.ts +1 -1
  193. package/src/helpers/findChildrenInRange.ts +1 -1
  194. package/src/helpers/findParentNode.ts +2 -2
  195. package/src/helpers/findParentNodeClosestToPos.ts +1 -1
  196. package/src/helpers/generateHTML.ts +3 -3
  197. package/src/helpers/generateJSON.ts +3 -3
  198. package/src/helpers/generateText.ts +4 -4
  199. package/src/helpers/getAttributes.ts +3 -3
  200. package/src/helpers/getAttributesFromExtensions.ts +4 -4
  201. package/src/helpers/getChangedRanges.ts +2 -2
  202. package/src/helpers/getDebugJSON.ts +1 -1
  203. package/src/helpers/getExtensionField.ts +1 -1
  204. package/src/helpers/getMarkAttributes.ts +1 -1
  205. package/src/helpers/getMarkRange.ts +2 -2
  206. package/src/helpers/getMarksBetween.ts +2 -2
  207. package/src/helpers/getNodeAtPosition.ts +29 -0
  208. package/src/helpers/getNodeAttributes.ts +1 -1
  209. package/src/helpers/getRenderedAttributes.ts +2 -2
  210. package/src/helpers/getSchema.ts +4 -4
  211. package/src/helpers/getSchemaByResolvedExtensions.ts +9 -9
  212. package/src/helpers/getSplittedAttributes.ts +1 -1
  213. package/src/helpers/getText.ts +2 -2
  214. package/src/helpers/getTextBetween.ts +1 -1
  215. package/src/helpers/getTextSerializersFromSchema.ts +1 -1
  216. package/src/helpers/index.ts +50 -47
  217. package/src/helpers/injectExtensionAttributesToParseRule.ts +2 -2
  218. package/src/helpers/isActive.ts +3 -3
  219. package/src/helpers/isAtEndOfNode.ts +11 -0
  220. package/src/helpers/isAtStartOfNode.ts +11 -0
  221. package/src/helpers/isExtensionRulesEnabled.ts +1 -1
  222. package/src/helpers/isList.ts +5 -5
  223. package/src/helpers/isMarkActive.ts +3 -3
  224. package/src/helpers/isNodeActive.ts +3 -3
  225. package/src/helpers/posToDOMRect.ts +1 -1
  226. package/src/helpers/resolveFocusPosition.ts +2 -2
  227. package/src/helpers/splitExtensions.ts +4 -4
  228. package/src/index.ts +15 -15
  229. package/src/inputRules/index.ts +5 -5
  230. package/src/inputRules/markInputRule.ts +5 -6
  231. package/src/inputRules/nodeInputRule.ts +3 -3
  232. package/src/inputRules/textInputRule.ts +1 -1
  233. package/src/inputRules/textblockTypeInputRule.ts +3 -3
  234. package/src/inputRules/wrappingInputRule.ts +4 -4
  235. package/src/pasteRules/index.ts +3 -3
  236. package/src/pasteRules/markPasteRule.ts +4 -4
  237. package/src/pasteRules/nodePasteRule.ts +3 -3
  238. package/src/pasteRules/textPasteRule.ts +1 -1
  239. package/src/types.ts +5 -5
  240. package/src/utilities/callOrReturn.ts +2 -2
  241. package/src/utilities/index.ts +20 -20
  242. package/src/utilities/isAndroid.ts +3 -0
  243. package/src/utilities/mergeDeep.ts +1 -1
  244. package/src/utilities/objectIncludes.ts +1 -1
package/dist/index.cjs CHANGED
@@ -121,9 +121,6 @@ class CommandManager {
121
121
  buildProps(tr, shouldDispatch = true) {
122
122
  const { rawCommands, editor, state } = this;
123
123
  const { view } = editor;
124
- if (state.storedMarks) {
125
- tr.setStoredMarks(state.storedMarks);
126
- }
127
124
  const props = {
128
125
  tr,
129
126
  editor,
@@ -133,7 +130,7 @@ class CommandManager {
133
130
  transaction: tr,
134
131
  }),
135
132
  dispatch: shouldDispatch ? () => undefined : undefined,
136
- chain: () => this.createChain(tr),
133
+ chain: () => this.createChain(tr, shouldDispatch),
137
134
  can: () => this.createCan(tr),
138
135
  get commands() {
139
136
  return Object.fromEntries(Object.entries(rawCommands).map(([name, command]) => {
@@ -1312,6 +1309,19 @@ const createParagraphNear = () => ({ state, dispatch }) => {
1312
1309
  return commands$1.createParagraphNear(state, dispatch);
1313
1310
  };
1314
1311
 
1312
+ const cut = (originRange, targetPos) => ({ editor }) => {
1313
+ const { state } = editor;
1314
+ const contentSlice = state.doc.slice(originRange.from, originRange.to);
1315
+ return editor
1316
+ .chain()
1317
+ .deleteRange(originRange)
1318
+ .command(({ commands, tr }) => {
1319
+ return commands.insertContentAt(tr.mapping.map(targetPos), contentSlice.content.toJSON());
1320
+ })
1321
+ .focus()
1322
+ .run();
1323
+ };
1324
+
1315
1325
  const deleteCurrentNode = () => ({ tr, dispatch }) => {
1316
1326
  const { selection } = tr;
1317
1327
  const currentNode = selection.$anchor.node();
@@ -1641,7 +1651,7 @@ const insertContentAt = (position, value, options) => ({ tr, dispatch, editor })
1641
1651
  if (content.toString() === '<>') {
1642
1652
  return true;
1643
1653
  }
1644
- let { from, to } = typeof position === 'number' ? { from: position, to: position } : position;
1654
+ let { from, to } = typeof position === 'number' ? { from: position, to: position } : { from: position.from, to: position.to };
1645
1655
  let isOnlyTextContent = true;
1646
1656
  let isOnlyBlockContent = true;
1647
1657
  const nodes = isFragment(content) ? content : [content];
@@ -1949,6 +1959,28 @@ const setContent = (content, emitUpdate = false, parseOptions = {}) => ({ tr, ed
1949
1959
  return true;
1950
1960
  };
1951
1961
 
1962
+ function getMarkAttributes(state, typeOrName) {
1963
+ const type = getMarkType(typeOrName, state.schema);
1964
+ const { from, to, empty } = state.selection;
1965
+ const marks = [];
1966
+ if (empty) {
1967
+ if (state.storedMarks) {
1968
+ marks.push(...state.storedMarks);
1969
+ }
1970
+ marks.push(...state.selection.$head.marks());
1971
+ }
1972
+ else {
1973
+ state.doc.nodesBetween(from, to, node => {
1974
+ marks.push(...node.marks);
1975
+ });
1976
+ }
1977
+ const mark = marks.find(markItem => markItem.type.name === type.name);
1978
+ if (!mark) {
1979
+ return {};
1980
+ }
1981
+ return { ...mark.attrs };
1982
+ }
1983
+
1952
1984
  /**
1953
1985
  * Returns a new `Transform` based on all steps of the passed transactions.
1954
1986
  */
@@ -2074,28 +2106,6 @@ function generateText(doc, extensions, options) {
2074
2106
  });
2075
2107
  }
2076
2108
 
2077
- function getMarkAttributes(state, typeOrName) {
2078
- const type = getMarkType(typeOrName, state.schema);
2079
- const { from, to, empty } = state.selection;
2080
- const marks = [];
2081
- if (empty) {
2082
- if (state.storedMarks) {
2083
- marks.push(...state.storedMarks);
2084
- }
2085
- marks.push(...state.selection.$head.marks());
2086
- }
2087
- else {
2088
- state.doc.nodesBetween(from, to, node => {
2089
- marks.push(...node.marks);
2090
- });
2091
- }
2092
- const mark = marks.find(markItem => markItem.type.name === type.name);
2093
- if (!mark) {
2094
- return {};
2095
- }
2096
- return { ...mark.attrs };
2097
- }
2098
-
2099
2109
  function getNodeAttributes(state, typeOrName) {
2100
2110
  const type = getNodeType(typeOrName, state.schema);
2101
2111
  const { from, to } = state.selection;
@@ -2267,6 +2277,30 @@ function getMarksBetween(from, to, doc) {
2267
2277
  return marks;
2268
2278
  }
2269
2279
 
2280
+ /**
2281
+ * Finds the first node of a given type or name in the current selection.
2282
+ * @param state The editor state.
2283
+ * @param typeOrName The node type or name.
2284
+ * @param pos The position to start searching from.
2285
+ * @param maxDepth The maximum depth to search.
2286
+ * @returns The node and the depth as an array.
2287
+ */
2288
+ const getNodeAtPosition = (state, typeOrName, pos, maxDepth = 20) => {
2289
+ const $pos = state.doc.resolve(pos);
2290
+ let currentDepth = maxDepth;
2291
+ let node = null;
2292
+ while (currentDepth > 0 && node === null) {
2293
+ const currentNode = $pos.node(currentDepth);
2294
+ if ((currentNode === null || currentNode === void 0 ? void 0 : currentNode.type.name) === typeOrName) {
2295
+ node = currentNode;
2296
+ }
2297
+ else {
2298
+ currentDepth -= 1;
2299
+ }
2300
+ }
2301
+ return [node, currentDepth];
2302
+ };
2303
+
2270
2304
  function getSplittedAttributes(extensionAttributes, typeName, attributes) {
2271
2305
  return Object.fromEntries(Object
2272
2306
  .entries(attributes)
@@ -2357,6 +2391,22 @@ function isActive(state, name, attributes = {}) {
2357
2391
  return false;
2358
2392
  }
2359
2393
 
2394
+ const istAtEndOfNode = (state) => {
2395
+ const { $from, $to } = state.selection;
2396
+ if ($to.parentOffset < $to.parent.nodeSize - 2 || $from.pos !== $to.pos) {
2397
+ return false;
2398
+ }
2399
+ return true;
2400
+ };
2401
+
2402
+ const isAtStartOfNode = (state) => {
2403
+ const { $from, $to } = state.selection;
2404
+ if ($from.parentOffset > 0 || $from.pos !== $to.pos) {
2405
+ return false;
2406
+ }
2407
+ return true;
2408
+ };
2409
+
2360
2410
  function isList(name, extensions) {
2361
2411
  const { nodeExtensions } = splitExtensions(extensions);
2362
2412
  const extension = nodeExtensions.find(item => item.name === name);
@@ -2964,6 +3014,7 @@ var commands = /*#__PURE__*/Object.freeze({
2964
3014
  clearNodes: clearNodes,
2965
3015
  command: command,
2966
3016
  createParagraphNear: createParagraphNear,
3017
+ cut: cut,
2967
3018
  deleteCurrentNode: deleteCurrentNode,
2968
3019
  deleteNode: deleteNode,
2969
3020
  deleteRange: deleteRange,
@@ -3497,6 +3548,7 @@ class Editor extends EventEmitter {
3497
3548
  });
3498
3549
  this.view.updateState(newState);
3499
3550
  this.createNodeViews();
3551
+ this.prependClass();
3500
3552
  // Let’s store the editor instance in the DOM element.
3501
3553
  // So we’ll have access to it for tests.
3502
3554
  const dom = this.view.dom;
@@ -3510,6 +3562,12 @@ class Editor extends EventEmitter {
3510
3562
  nodeViews: this.extensionManager.nodeViews,
3511
3563
  });
3512
3564
  }
3565
+ /**
3566
+ * Prepend class name to element.
3567
+ */
3568
+ prependClass() {
3569
+ this.view.dom.className = `tiptap ${this.view.dom.className}`;
3570
+ }
3513
3571
  captureTransaction(fn) {
3514
3572
  this.isCapturingTransaction = true;
3515
3573
  fn();
@@ -3660,7 +3718,6 @@ function markInputRule(config) {
3660
3718
  const { tr } = state;
3661
3719
  const captureGroup = match[match.length - 1];
3662
3720
  const fullMatch = match[0];
3663
- let markEnd = range.to;
3664
3721
  if (captureGroup) {
3665
3722
  const startSpaces = fullMatch.search(/\S/);
3666
3723
  const textStart = range.from + fullMatch.indexOf(captureGroup);
@@ -3681,7 +3738,7 @@ function markInputRule(config) {
3681
3738
  if (textStart > range.from) {
3682
3739
  tr.delete(range.from + startSpaces, textStart);
3683
3740
  }
3684
- markEnd = range.from + startSpaces + captureGroup.length;
3741
+ const markEnd = range.from + startSpaces + captureGroup.length;
3685
3742
  tr.addMark(range.from + startSpaces, markEnd, config.type.create(attributes || {}));
3686
3743
  tr.removeStoredMark(config.type);
3687
3744
  }
@@ -3969,6 +4026,10 @@ class Node {
3969
4026
  }
3970
4027
  }
3971
4028
 
4029
+ function isAndroid() {
4030
+ return navigator.platform === 'Android' || /android/i.test(navigator.userAgent);
4031
+ }
4032
+
3972
4033
  class NodeView {
3973
4034
  constructor(component, props, options) {
3974
4035
  this.isDragging = false;
@@ -4109,13 +4170,14 @@ class NodeView {
4109
4170
  if (mutation.type === 'selection') {
4110
4171
  return false;
4111
4172
  }
4112
- // try to prevent a bug on iOS that will break node views on enter
4173
+ // try to prevent a bug on iOS and Android that will break node views on enter
4113
4174
  // this is because ProseMirror can’t preventDispatch on enter
4114
4175
  // this will lead to a re-render of the node view on enter
4115
4176
  // see: https://github.com/ueberdosis/tiptap/issues/1214
4177
+ // see: https://github.com/ueberdosis/tiptap/issues/2534
4116
4178
  if (this.dom.contains(mutation.target)
4117
4179
  && mutation.type === 'childList'
4118
- && isiOS()
4180
+ && (isiOS() || isAndroid())
4119
4181
  && this.editor.isFocused) {
4120
4182
  const changedNodes = [
4121
4183
  ...Array.from(mutation.addedNodes),
@@ -4318,6 +4380,7 @@ exports.getMarkAttributes = getMarkAttributes;
4318
4380
  exports.getMarkRange = getMarkRange;
4319
4381
  exports.getMarkType = getMarkType;
4320
4382
  exports.getMarksBetween = getMarksBetween;
4383
+ exports.getNodeAtPosition = getNodeAtPosition;
4321
4384
  exports.getNodeAttributes = getNodeAttributes;
4322
4385
  exports.getNodeType = getNodeType;
4323
4386
  exports.getRenderedAttributes = getRenderedAttributes;
@@ -4333,6 +4396,7 @@ exports.getTextSerializersFromSchema = getTextSerializersFromSchema;
4333
4396
  exports.injectExtensionAttributesToParseRule = injectExtensionAttributesToParseRule;
4334
4397
  exports.inputRulesPlugin = inputRulesPlugin;
4335
4398
  exports.isActive = isActive;
4399
+ exports.isAtStartOfNode = isAtStartOfNode;
4336
4400
  exports.isEmptyObject = isEmptyObject;
4337
4401
  exports.isExtensionRulesEnabled = isExtensionRulesEnabled;
4338
4402
  exports.isFunction = isFunction;
@@ -4348,6 +4412,7 @@ exports.isRegExp = isRegExp;
4348
4412
  exports.isString = isString;
4349
4413
  exports.isTextSelection = isTextSelection;
4350
4414
  exports.isiOS = isiOS;
4415
+ exports.istAtEndOfNode = istAtEndOfNode;
4351
4416
  exports.markInputRule = markInputRule;
4352
4417
  exports.markPasteRule = markPasteRule;
4353
4418
  exports.mergeAttributes = mergeAttributes;