@tiptap/core 2.10.3 → 2.11.0

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.
@@ -1 +1 @@
1
- {"version":3,"file":"PasteRule.d.ts","sourceRoot":"","sources":["../src/PasteRule.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAGtD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAGpC,OAAO,EACL,WAAW,EACX,eAAe,EACf,wBAAwB,EACxB,KAAK,EACL,cAAc,EACf,MAAM,YAAY,CAAA;AAInB,MAAM,MAAM,cAAc,GAAG;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,gBAAgB,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,eAAe,GACvB,MAAM,GACN,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,cAAc,GAAG,IAAI,KAAK,cAAc,EAAE,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;AAE3F;;;GAGG;AACH,qBAAa,SAAS;IACpB,IAAI,EAAE,eAAe,CAAA;IAErB,OAAO,EAAE,CAAC,KAAK,EAAE;QACf,KAAK,EAAE,WAAW,CAAC;QACnB,KAAK,EAAE,KAAK,CAAC;QACb,KAAK,EAAE,wBAAwB,CAAC;QAChC,QAAQ,EAAE,cAAc,CAAC;QACzB,KAAK,EAAE,MAAM,eAAe,CAAC;QAC7B,GAAG,EAAE,MAAM,WAAW,CAAC;QACvB,UAAU,EAAE,cAAc,GAAG,IAAI,CAAC;QAClC,SAAS,EAAE,SAAS,GAAG,IAAI,CAAC;KAC7B,KAAK,IAAI,GAAG,IAAI,CAAA;gBAEL,MAAM,EAAE;QAClB,IAAI,EAAE,eAAe,CAAC;QACtB,OAAO,EAAE,CAAC,KAAK,EAAE;YACf,GAAG,EAAE,MAAM,WAAW,CAAC;YACvB,KAAK,EAAE,MAAM,eAAe,CAAC;YAC7B,QAAQ,EAAE,cAAc,CAAC;YACzB,SAAS,EAAE,SAAS,GAAG,IAAI,CAAC;YAC5B,KAAK,EAAE,wBAAwB,CAAC;YAChC,UAAU,EAAE,cAAc,GAAG,IAAI,CAAC;YAClC,KAAK,EAAE,KAAK,CAAC;YACb,KAAK,EAAE,WAAW,CAAC;SACpB,KAAK,IAAI,GAAG,IAAI,CAAC;KACnB;CAIF;AA+GD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,SAAS,EAAE,CAAA;CAAE,GAAG,MAAM,EAAE,CA6JxF"}
1
+ {"version":3,"file":"PasteRule.d.ts","sourceRoot":"","sources":["../src/PasteRule.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAGtD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAGpC,OAAO,EACL,WAAW,EACX,eAAe,EACf,wBAAwB,EACxB,KAAK,EACL,cAAc,EACf,MAAM,YAAY,CAAA;AAInB,MAAM,MAAM,cAAc,GAAG;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,gBAAgB,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,eAAe,GACvB,MAAM,GACN,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,cAAc,GAAG,IAAI,KAAK,cAAc,EAAE,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;AAE3F;;;GAGG;AACH,qBAAa,SAAS;IACpB,IAAI,EAAE,eAAe,CAAA;IAErB,OAAO,EAAE,CAAC,KAAK,EAAE;QACf,KAAK,EAAE,WAAW,CAAC;QACnB,KAAK,EAAE,KAAK,CAAC;QACb,KAAK,EAAE,wBAAwB,CAAC;QAChC,QAAQ,EAAE,cAAc,CAAC;QACzB,KAAK,EAAE,MAAM,eAAe,CAAC;QAC7B,GAAG,EAAE,MAAM,WAAW,CAAC;QACvB,UAAU,EAAE,cAAc,GAAG,IAAI,CAAC;QAClC,SAAS,EAAE,SAAS,GAAG,IAAI,CAAC;KAC7B,KAAK,IAAI,GAAG,IAAI,CAAA;gBAEL,MAAM,EAAE;QAClB,IAAI,EAAE,eAAe,CAAC;QACtB,OAAO,EAAE,CAAC,KAAK,EAAE;YACf,GAAG,EAAE,MAAM,WAAW,CAAC;YACvB,KAAK,EAAE,MAAM,eAAe,CAAC;YAC7B,QAAQ,EAAE,cAAc,CAAC;YACzB,SAAS,EAAE,SAAS,GAAG,IAAI,CAAC;YAC5B,KAAK,EAAE,wBAAwB,CAAC;YAChC,UAAU,EAAE,cAAc,GAAG,IAAI,CAAC;YAClC,KAAK,EAAE,KAAK,CAAC;YACb,KAAK,EAAE,WAAW,CAAC;SACpB,KAAK,IAAI,GAAG,IAAI,CAAC;KACnB;CAIF;AAkHD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,SAAS,EAAE,CAAA;CAAE,GAAG,MAAM,EAAE,CAuLxF"}
@@ -1 +1 @@
1
- {"version":3,"file":"focus.d.ts","sourceRoot":"","sources":["../../src/commands/focus.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAGxD,OAAO,QAAQ,cAAc,CAAC;IAC5B,UAAU,QAAQ,CAAC,UAAU;QAC3B,KAAK,EAAE;YACL;;;;;;eAMG;YACH,KAAK,EAAE;YACL;;eAEG;YACH,QAAQ,CAAC,EAAE,aAAa;YAExB;;;eAGG;YACH,OAAO,CAAC,EAAE;gBACR,cAAc,CAAC,EAAE,OAAO,CAAC;aAC1B,KACE,UAAU,CAAC;SACjB,CAAA;KACF;CACF;AAED,eAAO,MAAM,KAAK,EAAE,WAAW,CAAC,OAAO,CA6DtC,CAAA"}
1
+ {"version":3,"file":"focus.d.ts","sourceRoot":"","sources":["../../src/commands/focus.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAExD,OAAO,QAAQ,cAAc,CAAC;IAC5B,UAAU,QAAQ,CAAC,UAAU;QAC3B,KAAK,EAAE;YACL;;;;;;eAMG;YACH,KAAK,EAAE;YACL;;eAEG;YACH,QAAQ,CAAC,EAAE,aAAa;YAExB;;;eAGG;YACH,OAAO,CAAC,EAAE;gBACR,cAAc,CAAC,EAAE,OAAO,CAAC;aAC1B,KACE,UAAU,CAAC;SACjB,CAAA;KACF;CACF;AAED,eAAO,MAAM,KAAK,EAAE,WAAW,CAAC,OAAO,CAyDtC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"selectAll.d.ts","sourceRoot":"","sources":["../../src/commands/selectAll.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAEzC,OAAO,QAAQ,cAAc,CAAC;IAC5B,UAAU,QAAQ,CAAC,UAAU;QAC3B,SAAS,EAAE;YACT;;;eAGG;YACH,SAAS,EAAE,MAAM,UAAU,CAAC;SAC7B,CAAA;KACF;CACF;AAED,eAAO,MAAM,SAAS,EAAE,WAAW,CAAC,WAAW,CAK9C,CAAA"}
1
+ {"version":3,"file":"selectAll.d.ts","sourceRoot":"","sources":["../../src/commands/selectAll.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAEzC,OAAO,QAAQ,cAAc,CAAC;IAC5B,UAAU,QAAQ,CAAC,UAAU;QAC3B,SAAS,EAAE;YACT;;;eAGG;YACH,SAAS,EAAE,MAAM,UAAU,CAAC;SAC7B,CAAA;KACF;CACF;AAED,eAAO,MAAM,SAAS,EAAE,WAAW,CAAC,WAAW,CAQ9C,CAAA"}
@@ -46,6 +46,7 @@ export * from './isNodeSelection.js';
46
46
  export * from './isTextSelection.js';
47
47
  export * from './posToDOMRect.js';
48
48
  export * from './resolveFocusPosition.js';
49
+ export * from './rewriteUnknownContent.js';
49
50
  export * from './selectionToInsertionEnd.js';
50
51
  export * from './splitExtensions.js';
51
52
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/helpers/index.ts"],"names":[],"mappings":"AAAA,cAAc,8BAA8B,CAAA;AAC5C,cAAc,2BAA2B,CAAA;AACzC,cAAc,qBAAqB,CAAA;AACnC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,qBAAqB,CAAA;AACnC,cAAc,mBAAmB,CAAA;AACjC,cAAc,0BAA0B,CAAA;AACxC,cAAc,qBAAqB,CAAA;AACnC,cAAc,iCAAiC,CAAA;AAC/C,cAAc,mBAAmB,CAAA;AACjC,cAAc,mBAAmB,CAAA;AACjC,cAAc,mBAAmB,CAAA;AACjC,cAAc,oBAAoB,CAAA;AAClC,cAAc,kCAAkC,CAAA;AAChD,cAAc,uBAAuB,CAAA;AACrC,cAAc,mBAAmB,CAAA;AACjC,cAAc,wBAAwB,CAAA;AACtC,cAAc,0BAA0B,CAAA;AACxC,cAAc,wBAAwB,CAAA;AACtC,cAAc,mBAAmB,CAAA;AACjC,cAAc,sBAAsB,CAAA;AACpC,cAAc,kBAAkB,CAAA;AAChC,cAAc,wBAAwB,CAAA;AACtC,cAAc,wBAAwB,CAAA;AACtC,cAAc,kBAAkB,CAAA;AAChC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,gBAAgB,CAAA;AAC9B,cAAc,oCAAoC,CAAA;AAClD,cAAc,0BAA0B,CAAA;AACxC,cAAc,8BAA8B,CAAA;AAC5C,cAAc,4BAA4B,CAAA;AAC1C,cAAc,cAAc,CAAA;AAC5B,cAAc,qBAAqB,CAAA;AACnC,cAAc,8BAA8B,CAAA;AAC5C,cAAc,mCAAmC,CAAA;AACjD,cAAc,2CAA2C,CAAA;AACzD,cAAc,eAAe,CAAA;AAC7B,cAAc,oBAAoB,CAAA;AAClC,cAAc,sBAAsB,CAAA;AACpC,cAAc,8BAA8B,CAAA;AAC5C,cAAc,aAAa,CAAA;AAC3B,cAAc,mBAAmB,CAAA;AACjC,cAAc,mBAAmB,CAAA;AACjC,cAAc,kBAAkB,CAAA;AAChC,cAAc,sBAAsB,CAAA;AACpC,cAAc,sBAAsB,CAAA;AACpC,cAAc,mBAAmB,CAAA;AACjC,cAAc,2BAA2B,CAAA;AACzC,cAAc,8BAA8B,CAAA;AAC5C,cAAc,sBAAsB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/helpers/index.ts"],"names":[],"mappings":"AAAA,cAAc,8BAA8B,CAAA;AAC5C,cAAc,2BAA2B,CAAA;AACzC,cAAc,qBAAqB,CAAA;AACnC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,qBAAqB,CAAA;AACnC,cAAc,mBAAmB,CAAA;AACjC,cAAc,0BAA0B,CAAA;AACxC,cAAc,qBAAqB,CAAA;AACnC,cAAc,iCAAiC,CAAA;AAC/C,cAAc,mBAAmB,CAAA;AACjC,cAAc,mBAAmB,CAAA;AACjC,cAAc,mBAAmB,CAAA;AACjC,cAAc,oBAAoB,CAAA;AAClC,cAAc,kCAAkC,CAAA;AAChD,cAAc,uBAAuB,CAAA;AACrC,cAAc,mBAAmB,CAAA;AACjC,cAAc,wBAAwB,CAAA;AACtC,cAAc,0BAA0B,CAAA;AACxC,cAAc,wBAAwB,CAAA;AACtC,cAAc,mBAAmB,CAAA;AACjC,cAAc,sBAAsB,CAAA;AACpC,cAAc,kBAAkB,CAAA;AAChC,cAAc,wBAAwB,CAAA;AACtC,cAAc,wBAAwB,CAAA;AACtC,cAAc,kBAAkB,CAAA;AAChC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,gBAAgB,CAAA;AAC9B,cAAc,oCAAoC,CAAA;AAClD,cAAc,0BAA0B,CAAA;AACxC,cAAc,8BAA8B,CAAA;AAC5C,cAAc,4BAA4B,CAAA;AAC1C,cAAc,cAAc,CAAA;AAC5B,cAAc,qBAAqB,CAAA;AACnC,cAAc,8BAA8B,CAAA;AAC5C,cAAc,mCAAmC,CAAA;AACjD,cAAc,2CAA2C,CAAA;AACzD,cAAc,eAAe,CAAA;AAC7B,cAAc,oBAAoB,CAAA;AAClC,cAAc,sBAAsB,CAAA;AACpC,cAAc,8BAA8B,CAAA;AAC5C,cAAc,aAAa,CAAA;AAC3B,cAAc,mBAAmB,CAAA;AACjC,cAAc,mBAAmB,CAAA;AACjC,cAAc,kBAAkB,CAAA;AAChC,cAAc,sBAAsB,CAAA;AACpC,cAAc,sBAAsB,CAAA;AACpC,cAAc,mBAAmB,CAAA;AACjC,cAAc,2BAA2B,CAAA;AACzC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,8BAA8B,CAAA;AAC5C,cAAc,sBAAsB,CAAA"}
@@ -0,0 +1,46 @@
1
+ import type { Schema } from '@tiptap/pm/model';
2
+ import type { JSONContent } from '../types.js';
3
+ type RewriteUnknownContentOptions = {
4
+ /**
5
+ * If true, unknown nodes will be treated as paragraphs
6
+ * @default true
7
+ */
8
+ fallbackToParagraph?: boolean;
9
+ };
10
+ /**
11
+ * Rewrite unknown nodes and marks within JSON content
12
+ * Allowing for user within the editor
13
+ */
14
+ export declare function rewriteUnknownContent(
15
+ /**
16
+ * The JSON content to clean of unknown nodes and marks
17
+ */
18
+ json: JSONContent,
19
+ /**
20
+ * The schema to use for validation
21
+ */
22
+ schema: Schema,
23
+ /**
24
+ * Options for the cleaning process
25
+ */
26
+ options?: RewriteUnknownContentOptions): {
27
+ /**
28
+ * The cleaned JSON content
29
+ */
30
+ json: JSONContent | null;
31
+ /**
32
+ * The array of nodes and marks that were rewritten
33
+ */
34
+ rewrittenContent: {
35
+ /**
36
+ * The original JSON content that was rewritten
37
+ */
38
+ original: JSONContent;
39
+ /**
40
+ * The name of the node or mark that was unsupported
41
+ */
42
+ unsupported: string;
43
+ }[];
44
+ };
45
+ export {};
46
+ //# sourceMappingURL=rewriteUnknownContent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rewriteUnknownContent.d.ts","sourceRoot":"","sources":["../../src/helpers/rewriteUnknownContent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAE9C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAE9C,KAAK,4BAA4B,GAAG;IAClC;;;OAGG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B,CAAC;AA+FF;;;GAGG;AACH,wBAAgB,qBAAqB;AACnC;;GAEG;AACH,IAAI,EAAE,WAAW;AACjB;;GAEG;AACH,MAAM,EAAE,MAAM;AACd;;GAEG;AACH,OAAO,CAAC,EAAE,4BAA4B,GACrC;IACD;;OAEG;IACH,IAAI,EAAE,WAAW,GAAG,IAAI,CAAC;IACzB;;OAEG;IACH,gBAAgB,EAAE;QAChB;;WAEG;QACH,QAAQ,EAAE,WAAW,CAAC;QACtB;;WAEG;QACH,WAAW,EAAE,MAAM,CAAC;KACrB,EAAE,CAAC;CACL,CAOA"}
package/dist/index.cjs CHANGED
@@ -998,6 +998,8 @@ function run(config) {
998
998
  const success = handlers.every(handler => handler !== null);
999
999
  return success;
1000
1000
  }
1001
+ // When dragging across editors, must get another editor instance to delete selection content.
1002
+ let tiptapDragFromOtherEditor = null;
1001
1003
  const createClipboardPasteEvent = (text) => {
1002
1004
  var _a;
1003
1005
  const event = new ClipboardEvent('paste', {
@@ -1060,11 +1062,21 @@ function pasteRulesPlugin(props) {
1060
1062
  dragSourceElement = ((_a = view.dom.parentElement) === null || _a === void 0 ? void 0 : _a.contains(event.target))
1061
1063
  ? view.dom.parentElement
1062
1064
  : null;
1065
+ if (dragSourceElement) {
1066
+ tiptapDragFromOtherEditor = editor;
1067
+ }
1068
+ };
1069
+ const handleDragend = () => {
1070
+ if (tiptapDragFromOtherEditor) {
1071
+ tiptapDragFromOtherEditor = null;
1072
+ }
1063
1073
  };
1064
1074
  window.addEventListener('dragstart', handleDragstart);
1075
+ window.addEventListener('dragend', handleDragend);
1065
1076
  return {
1066
1077
  destroy() {
1067
1078
  window.removeEventListener('dragstart', handleDragstart);
1079
+ window.removeEventListener('dragend', handleDragend);
1068
1080
  },
1069
1081
  };
1070
1082
  },
@@ -1073,6 +1085,18 @@ function pasteRulesPlugin(props) {
1073
1085
  drop: (view, event) => {
1074
1086
  isDroppedFromProseMirror = dragSourceElement === view.dom.parentElement;
1075
1087
  dropEvent = event;
1088
+ if (!isDroppedFromProseMirror) {
1089
+ const dragFromOtherEditor = tiptapDragFromOtherEditor;
1090
+ if (dragFromOtherEditor) {
1091
+ // setTimeout to avoid the wrong content after drop, timeout arg can't be empty or 0
1092
+ setTimeout(() => {
1093
+ const selection = dragFromOtherEditor.state.selection;
1094
+ if (selection) {
1095
+ dragFromOtherEditor.commands.deleteRange({ from: selection.from, to: selection.to });
1096
+ }
1097
+ }, 10);
1098
+ }
1099
+ }
1076
1100
  return false;
1077
1101
  },
1078
1102
  paste: (_view, event) => {
@@ -1831,30 +1855,13 @@ function resolveFocusPosition(doc, position = null) {
1831
1855
  return state.TextSelection.create(doc, minMax(position, minPos, maxPos), minMax(position, minPos, maxPos));
1832
1856
  }
1833
1857
 
1834
- function isiOS() {
1835
- return [
1836
- 'iPad Simulator',
1837
- 'iPhone Simulator',
1838
- 'iPod Simulator',
1839
- 'iPad',
1840
- 'iPhone',
1841
- 'iPod',
1842
- ].includes(navigator.platform)
1843
- // iPad on iOS 13 detection
1844
- || (navigator.userAgent.includes('Mac') && 'ontouchend' in document);
1845
- }
1846
-
1847
1858
  const focus = (position = null, options = {}) => ({ editor, view, tr, dispatch, }) => {
1848
1859
  options = {
1849
1860
  scrollIntoView: true,
1850
1861
  ...options,
1851
1862
  };
1852
1863
  const delayedFocus = () => {
1853
- // focus within `requestAnimationFrame` breaks focus on iOS
1854
- // so we have to call this
1855
- if (isiOS()) {
1856
- view.dom.focus();
1857
- }
1864
+ view.dom.focus();
1858
1865
  // For React we have to focus asynchronously. Otherwise wild things happen.
1859
1866
  // see: https://github.com/ueberdosis/tiptap/issues/1520
1860
1867
  requestAnimationFrame(() => {
@@ -2185,6 +2192,19 @@ const joinTextblockForward = () => ({ state, dispatch }) => {
2185
2192
  return commands$1.joinTextblockForward(state, dispatch);
2186
2193
  };
2187
2194
 
2195
+ function isiOS() {
2196
+ return [
2197
+ 'iPad Simulator',
2198
+ 'iPhone Simulator',
2199
+ 'iPod Simulator',
2200
+ 'iPad',
2201
+ 'iPhone',
2202
+ 'iPod',
2203
+ ].includes(navigator.platform)
2204
+ // iPad on iOS 13 detection
2205
+ || (navigator.userAgent.includes('Mac') && 'ontouchend' in document);
2206
+ }
2207
+
2188
2208
  function isMacOS() {
2189
2209
  return typeof navigator !== 'undefined'
2190
2210
  ? /Mac/.test(navigator.platform)
@@ -2395,11 +2415,12 @@ const scrollIntoView = () => ({ tr, dispatch }) => {
2395
2415
  return true;
2396
2416
  };
2397
2417
 
2398
- const selectAll = () => ({ tr, commands }) => {
2399
- return commands.setTextSelection({
2400
- from: 0,
2401
- to: tr.doc.content.size,
2402
- });
2418
+ const selectAll = () => ({ tr, dispatch }) => {
2419
+ if (dispatch) {
2420
+ const selection = new state.AllSelection(tr.doc);
2421
+ tr.setSelection(selection);
2422
+ }
2423
+ return true;
2403
2424
  };
2404
2425
 
2405
2426
  const selectNodeBackward = () => ({ state, dispatch }) => {
@@ -3086,6 +3107,81 @@ function posToDOMRect(view, from, to) {
3086
3107
  };
3087
3108
  }
3088
3109
 
3110
+ /**
3111
+ * The actual implementation of the rewriteUnknownContent function
3112
+ */
3113
+ function rewriteUnknownContentInner({ json, validMarks, validNodes, options, rewrittenContent = [], }) {
3114
+ if (json.marks && Array.isArray(json.marks)) {
3115
+ json.marks = json.marks.filter(mark => {
3116
+ const name = typeof mark === 'string' ? mark : mark.type;
3117
+ if (validMarks.has(name)) {
3118
+ return true;
3119
+ }
3120
+ rewrittenContent.push({
3121
+ original: JSON.parse(JSON.stringify(mark)),
3122
+ unsupported: name,
3123
+ });
3124
+ // Just ignore any unknown marks
3125
+ return false;
3126
+ });
3127
+ }
3128
+ if (json.content && Array.isArray(json.content)) {
3129
+ json.content = json.content
3130
+ .map(value => rewriteUnknownContentInner({
3131
+ json: value,
3132
+ validMarks,
3133
+ validNodes,
3134
+ options,
3135
+ rewrittenContent,
3136
+ }).json)
3137
+ .filter(a => a !== null && a !== undefined);
3138
+ }
3139
+ if (json.type && !validNodes.has(json.type)) {
3140
+ rewrittenContent.push({
3141
+ original: JSON.parse(JSON.stringify(json)),
3142
+ unsupported: json.type,
3143
+ });
3144
+ if (json.content && Array.isArray(json.content) && ((options === null || options === void 0 ? void 0 : options.fallbackToParagraph) !== false)) {
3145
+ // Just treat it like a paragraph and hope for the best
3146
+ json.type = 'paragraph';
3147
+ return {
3148
+ json,
3149
+ rewrittenContent,
3150
+ };
3151
+ }
3152
+ // or just omit it entirely
3153
+ return {
3154
+ json: null,
3155
+ rewrittenContent,
3156
+ };
3157
+ }
3158
+ return { json, rewrittenContent };
3159
+ }
3160
+ /**
3161
+ * Rewrite unknown nodes and marks within JSON content
3162
+ * Allowing for user within the editor
3163
+ */
3164
+ function rewriteUnknownContent(
3165
+ /**
3166
+ * The JSON content to clean of unknown nodes and marks
3167
+ */
3168
+ json,
3169
+ /**
3170
+ * The schema to use for validation
3171
+ */
3172
+ schema,
3173
+ /**
3174
+ * Options for the cleaning process
3175
+ */
3176
+ options) {
3177
+ return rewriteUnknownContentInner({
3178
+ json,
3179
+ validNodes: new Set(Object.keys(schema.nodes)),
3180
+ validMarks: new Set(Object.keys(schema.marks)),
3181
+ options,
3182
+ });
3183
+ }
3184
+
3089
3185
  function canSetMark(state, tr, newMarkType) {
3090
3186
  var _a;
3091
3187
  const { selection } = tr;
@@ -5081,10 +5177,10 @@ class NodeView {
5081
5177
  // ProseMirror tries to drag selectable nodes
5082
5178
  // even if `draggable` is set to `false`
5083
5179
  // this fix prevents that
5084
- if (!isDraggable && isSelectable && isDragEvent) {
5180
+ if (!isDraggable && isSelectable && isDragEvent && event.target === this.dom) {
5085
5181
  event.preventDefault();
5086
5182
  }
5087
- if (isDraggable && isDragEvent && !isDragging) {
5183
+ if (isDraggable && isDragEvent && !isDragging && event.target === this.dom) {
5088
5184
  event.preventDefault();
5089
5185
  return false;
5090
5186
  }
@@ -5410,6 +5506,7 @@ exports.pasteRulesPlugin = pasteRulesPlugin;
5410
5506
  exports.posToDOMRect = posToDOMRect;
5411
5507
  exports.removeDuplicates = removeDuplicates;
5412
5508
  exports.resolveFocusPosition = resolveFocusPosition;
5509
+ exports.rewriteUnknownContent = rewriteUnknownContent;
5413
5510
  exports.selectionToInsertionEnd = selectionToInsertionEnd;
5414
5511
  exports.splitExtensions = splitExtensions;
5415
5512
  exports.textInputRule = textInputRule;