@tiptap/core 2.1.0-rc.0 → 2.1.0-rc.10

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 +94 -31
  2. package/dist/index.cjs.map +1 -1
  3. package/dist/index.js +92 -32
  4. package/dist/index.js.map +1 -1
  5. package/dist/index.umd.js +94 -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 +25 -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,17 @@ 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
+ .insertContentAt(targetPos, contentSlice.content.toJSON())
1319
+ .focus()
1320
+ .run();
1321
+ };
1322
+
1315
1323
  const deleteCurrentNode = () => ({ tr, dispatch }) => {
1316
1324
  const { selection } = tr;
1317
1325
  const currentNode = selection.$anchor.node();
@@ -1641,7 +1649,7 @@ const insertContentAt = (position, value, options) => ({ tr, dispatch, editor })
1641
1649
  if (content.toString() === '<>') {
1642
1650
  return true;
1643
1651
  }
1644
- let { from, to } = typeof position === 'number' ? { from: position, to: position } : position;
1652
+ let { from, to } = typeof position === 'number' ? { from: tr.mapping.map(position), to: tr.mapping.map(position) } : { from: tr.mapping.map(position.from), to: tr.mapping.map(position.to) };
1645
1653
  let isOnlyTextContent = true;
1646
1654
  let isOnlyBlockContent = true;
1647
1655
  const nodes = isFragment(content) ? content : [content];
@@ -1949,6 +1957,28 @@ const setContent = (content, emitUpdate = false, parseOptions = {}) => ({ tr, ed
1949
1957
  return true;
1950
1958
  };
1951
1959
 
1960
+ function getMarkAttributes(state, typeOrName) {
1961
+ const type = getMarkType(typeOrName, state.schema);
1962
+ const { from, to, empty } = state.selection;
1963
+ const marks = [];
1964
+ if (empty) {
1965
+ if (state.storedMarks) {
1966
+ marks.push(...state.storedMarks);
1967
+ }
1968
+ marks.push(...state.selection.$head.marks());
1969
+ }
1970
+ else {
1971
+ state.doc.nodesBetween(from, to, node => {
1972
+ marks.push(...node.marks);
1973
+ });
1974
+ }
1975
+ const mark = marks.find(markItem => markItem.type.name === type.name);
1976
+ if (!mark) {
1977
+ return {};
1978
+ }
1979
+ return { ...mark.attrs };
1980
+ }
1981
+
1952
1982
  /**
1953
1983
  * Returns a new `Transform` based on all steps of the passed transactions.
1954
1984
  */
@@ -2074,28 +2104,6 @@ function generateText(doc, extensions, options) {
2074
2104
  });
2075
2105
  }
2076
2106
 
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
2107
  function getNodeAttributes(state, typeOrName) {
2100
2108
  const type = getNodeType(typeOrName, state.schema);
2101
2109
  const { from, to } = state.selection;
@@ -2267,6 +2275,30 @@ function getMarksBetween(from, to, doc) {
2267
2275
  return marks;
2268
2276
  }
2269
2277
 
2278
+ /**
2279
+ * Finds the first node of a given type or name in the current selection.
2280
+ * @param state The editor state.
2281
+ * @param typeOrName The node type or name.
2282
+ * @param pos The position to start searching from.
2283
+ * @param maxDepth The maximum depth to search.
2284
+ * @returns The node and the depth as an array.
2285
+ */
2286
+ const getNodeAtPosition = (state, typeOrName, pos, maxDepth = 20) => {
2287
+ const $pos = state.doc.resolve(pos);
2288
+ let currentDepth = maxDepth;
2289
+ let node = null;
2290
+ while (currentDepth > 0 && node === null) {
2291
+ const currentNode = $pos.node(currentDepth);
2292
+ if ((currentNode === null || currentNode === void 0 ? void 0 : currentNode.type.name) === typeOrName) {
2293
+ node = currentNode;
2294
+ }
2295
+ else {
2296
+ currentDepth -= 1;
2297
+ }
2298
+ }
2299
+ return [node, currentDepth];
2300
+ };
2301
+
2270
2302
  function getSplittedAttributes(extensionAttributes, typeName, attributes) {
2271
2303
  return Object.fromEntries(Object
2272
2304
  .entries(attributes)
@@ -2357,6 +2389,22 @@ function isActive(state, name, attributes = {}) {
2357
2389
  return false;
2358
2390
  }
2359
2391
 
2392
+ const istAtEndOfNode = (state) => {
2393
+ const { $from, $to } = state.selection;
2394
+ if ($to.parentOffset < $to.parent.nodeSize - 2 || $from.pos !== $to.pos) {
2395
+ return false;
2396
+ }
2397
+ return true;
2398
+ };
2399
+
2400
+ const isAtStartOfNode = (state) => {
2401
+ const { $from, $to } = state.selection;
2402
+ if ($from.parentOffset > 0 || $from.pos !== $to.pos) {
2403
+ return false;
2404
+ }
2405
+ return true;
2406
+ };
2407
+
2360
2408
  function isList(name, extensions) {
2361
2409
  const { nodeExtensions } = splitExtensions(extensions);
2362
2410
  const extension = nodeExtensions.find(item => item.name === name);
@@ -2964,6 +3012,7 @@ var commands = /*#__PURE__*/Object.freeze({
2964
3012
  clearNodes: clearNodes,
2965
3013
  command: command,
2966
3014
  createParagraphNear: createParagraphNear,
3015
+ cut: cut,
2967
3016
  deleteCurrentNode: deleteCurrentNode,
2968
3017
  deleteNode: deleteNode,
2969
3018
  deleteRange: deleteRange,
@@ -3497,6 +3546,7 @@ class Editor extends EventEmitter {
3497
3546
  });
3498
3547
  this.view.updateState(newState);
3499
3548
  this.createNodeViews();
3549
+ this.prependClass();
3500
3550
  // Let’s store the editor instance in the DOM element.
3501
3551
  // So we’ll have access to it for tests.
3502
3552
  const dom = this.view.dom;
@@ -3510,6 +3560,12 @@ class Editor extends EventEmitter {
3510
3560
  nodeViews: this.extensionManager.nodeViews,
3511
3561
  });
3512
3562
  }
3563
+ /**
3564
+ * Prepend class name to element.
3565
+ */
3566
+ prependClass() {
3567
+ this.view.dom.className = `tiptap ${this.view.dom.className}`;
3568
+ }
3513
3569
  captureTransaction(fn) {
3514
3570
  this.isCapturingTransaction = true;
3515
3571
  fn();
@@ -3660,7 +3716,6 @@ function markInputRule(config) {
3660
3716
  const { tr } = state;
3661
3717
  const captureGroup = match[match.length - 1];
3662
3718
  const fullMatch = match[0];
3663
- let markEnd = range.to;
3664
3719
  if (captureGroup) {
3665
3720
  const startSpaces = fullMatch.search(/\S/);
3666
3721
  const textStart = range.from + fullMatch.indexOf(captureGroup);
@@ -3681,7 +3736,7 @@ function markInputRule(config) {
3681
3736
  if (textStart > range.from) {
3682
3737
  tr.delete(range.from + startSpaces, textStart);
3683
3738
  }
3684
- markEnd = range.from + startSpaces + captureGroup.length;
3739
+ const markEnd = range.from + startSpaces + captureGroup.length;
3685
3740
  tr.addMark(range.from + startSpaces, markEnd, config.type.create(attributes || {}));
3686
3741
  tr.removeStoredMark(config.type);
3687
3742
  }
@@ -3969,6 +4024,10 @@ class Node {
3969
4024
  }
3970
4025
  }
3971
4026
 
4027
+ function isAndroid() {
4028
+ return navigator.platform === 'Android' || /android/i.test(navigator.userAgent);
4029
+ }
4030
+
3972
4031
  class NodeView {
3973
4032
  constructor(component, props, options) {
3974
4033
  this.isDragging = false;
@@ -4109,13 +4168,14 @@ class NodeView {
4109
4168
  if (mutation.type === 'selection') {
4110
4169
  return false;
4111
4170
  }
4112
- // try to prevent a bug on iOS that will break node views on enter
4171
+ // try to prevent a bug on iOS and Android that will break node views on enter
4113
4172
  // this is because ProseMirror can’t preventDispatch on enter
4114
4173
  // this will lead to a re-render of the node view on enter
4115
4174
  // see: https://github.com/ueberdosis/tiptap/issues/1214
4175
+ // see: https://github.com/ueberdosis/tiptap/issues/2534
4116
4176
  if (this.dom.contains(mutation.target)
4117
4177
  && mutation.type === 'childList'
4118
- && isiOS()
4178
+ && (isiOS() || isAndroid())
4119
4179
  && this.editor.isFocused) {
4120
4180
  const changedNodes = [
4121
4181
  ...Array.from(mutation.addedNodes),
@@ -4318,6 +4378,7 @@ exports.getMarkAttributes = getMarkAttributes;
4318
4378
  exports.getMarkRange = getMarkRange;
4319
4379
  exports.getMarkType = getMarkType;
4320
4380
  exports.getMarksBetween = getMarksBetween;
4381
+ exports.getNodeAtPosition = getNodeAtPosition;
4321
4382
  exports.getNodeAttributes = getNodeAttributes;
4322
4383
  exports.getNodeType = getNodeType;
4323
4384
  exports.getRenderedAttributes = getRenderedAttributes;
@@ -4333,6 +4394,7 @@ exports.getTextSerializersFromSchema = getTextSerializersFromSchema;
4333
4394
  exports.injectExtensionAttributesToParseRule = injectExtensionAttributesToParseRule;
4334
4395
  exports.inputRulesPlugin = inputRulesPlugin;
4335
4396
  exports.isActive = isActive;
4397
+ exports.isAtStartOfNode = isAtStartOfNode;
4336
4398
  exports.isEmptyObject = isEmptyObject;
4337
4399
  exports.isExtensionRulesEnabled = isExtensionRulesEnabled;
4338
4400
  exports.isFunction = isFunction;
@@ -4348,6 +4410,7 @@ exports.isRegExp = isRegExp;
4348
4410
  exports.isString = isString;
4349
4411
  exports.isTextSelection = isTextSelection;
4350
4412
  exports.isiOS = isiOS;
4413
+ exports.istAtEndOfNode = istAtEndOfNode;
4351
4414
  exports.markInputRule = markInputRule;
4352
4415
  exports.markPasteRule = markPasteRule;
4353
4416
  exports.mergeAttributes = mergeAttributes;