@tiptap/core 3.0.0-next.3 → 3.0.0-next.5

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 (146) hide show
  1. package/LICENSE.md +21 -0
  2. package/README.md +5 -1
  3. package/dist/index.cjs +2627 -2651
  4. package/dist/index.cjs.map +1 -1
  5. package/dist/index.d.cts +2423 -2688
  6. package/dist/index.d.ts +2423 -2688
  7. package/dist/index.js +2639 -2684
  8. package/dist/index.js.map +1 -1
  9. package/dist/jsx-runtime/jsx-runtime.cjs +56 -0
  10. package/dist/jsx-runtime/jsx-runtime.cjs.map +1 -0
  11. package/dist/jsx-runtime/jsx-runtime.d.cts +22 -0
  12. package/dist/jsx-runtime/jsx-runtime.d.ts +22 -0
  13. package/dist/jsx-runtime/jsx-runtime.js +26 -0
  14. package/dist/jsx-runtime/jsx-runtime.js.map +1 -0
  15. package/jsx-runtime/index.cjs +1 -0
  16. package/jsx-runtime/index.d.cts +1 -0
  17. package/jsx-runtime/index.d.ts +1 -0
  18. package/jsx-runtime/index.js +1 -0
  19. package/package.json +27 -6
  20. package/src/CommandManager.ts +2 -9
  21. package/src/Editor.ts +191 -94
  22. package/src/EventEmitter.ts +7 -10
  23. package/src/Extendable.ts +483 -0
  24. package/src/Extension.ts +5 -496
  25. package/src/ExtensionManager.ts +81 -135
  26. package/src/InputRule.ts +35 -48
  27. package/src/Mark.ts +135 -623
  28. package/src/MarkView.ts +66 -0
  29. package/src/Node.ts +325 -829
  30. package/src/NodePos.ts +1 -3
  31. package/src/NodeView.ts +10 -20
  32. package/src/PasteRule.ts +43 -55
  33. package/src/Tracker.ts +7 -9
  34. package/src/commands/blur.ts +14 -12
  35. package/src/commands/clearContent.ts +12 -5
  36. package/src/commands/clearNodes.ts +32 -30
  37. package/src/commands/command.ts +1 -1
  38. package/src/commands/createParagraphNear.ts +5 -3
  39. package/src/commands/cut.ts +12 -10
  40. package/src/commands/deleteCurrentNode.ts +23 -21
  41. package/src/commands/deleteNode.ts +18 -16
  42. package/src/commands/deleteRange.ts +10 -8
  43. package/src/commands/deleteSelection.ts +5 -3
  44. package/src/commands/enter.ts +6 -4
  45. package/src/commands/exitCode.ts +5 -3
  46. package/src/commands/extendMarkRange.ts +14 -12
  47. package/src/commands/first.ts +2 -4
  48. package/src/commands/focus.ts +51 -48
  49. package/src/commands/forEach.ts +2 -2
  50. package/src/commands/insertContent.ts +12 -14
  51. package/src/commands/insertContentAt.ts +105 -98
  52. package/src/commands/join.ts +20 -12
  53. package/src/commands/joinItemBackward.ts +16 -18
  54. package/src/commands/joinItemForward.ts +16 -18
  55. package/src/commands/joinTextblockBackward.ts +5 -3
  56. package/src/commands/joinTextblockForward.ts +5 -3
  57. package/src/commands/keyboardShortcut.ts +29 -34
  58. package/src/commands/lift.ts +10 -8
  59. package/src/commands/liftEmptyBlock.ts +6 -4
  60. package/src/commands/liftListItem.ts +6 -4
  61. package/src/commands/newlineInCode.ts +5 -3
  62. package/src/commands/resetAttributes.ts +36 -41
  63. package/src/commands/scrollIntoView.ts +9 -7
  64. package/src/commands/selectAll.ts +10 -8
  65. package/src/commands/selectNodeBackward.ts +5 -3
  66. package/src/commands/selectNodeForward.ts +5 -3
  67. package/src/commands/selectParentNode.ts +5 -3
  68. package/src/commands/selectTextblockEnd.ts +5 -3
  69. package/src/commands/selectTextblockStart.ts +5 -3
  70. package/src/commands/setContent.ts +37 -36
  71. package/src/commands/setMark.ts +55 -57
  72. package/src/commands/setMeta.ts +7 -5
  73. package/src/commands/setNode.ts +32 -30
  74. package/src/commands/setNodeSelection.ts +11 -9
  75. package/src/commands/setTextSelection.ts +15 -13
  76. package/src/commands/sinkListItem.ts +6 -4
  77. package/src/commands/splitBlock.ts +67 -76
  78. package/src/commands/splitListItem.ts +93 -106
  79. package/src/commands/toggleList.ts +73 -71
  80. package/src/commands/toggleMark.ts +11 -9
  81. package/src/commands/toggleNode.ts +18 -16
  82. package/src/commands/toggleWrap.ts +10 -8
  83. package/src/commands/undoInputRule.ts +31 -29
  84. package/src/commands/unsetAllMarks.ts +16 -14
  85. package/src/commands/unsetMark.ts +27 -25
  86. package/src/commands/updateAttributes.ts +92 -100
  87. package/src/commands/wrapIn.ts +6 -4
  88. package/src/commands/wrapInList.ts +6 -4
  89. package/src/extensions/clipboardTextSerializer.ts +2 -4
  90. package/src/extensions/delete.ts +89 -0
  91. package/src/extensions/focusEvents.ts +2 -6
  92. package/src/extensions/index.ts +1 -0
  93. package/src/extensions/keymap.ts +58 -50
  94. package/src/extensions/paste.ts +0 -1
  95. package/src/extensions/tabindex.ts +1 -1
  96. package/src/helpers/combineTransactionSteps.ts +1 -4
  97. package/src/helpers/createChainableState.ts +1 -4
  98. package/src/helpers/createDocument.ts +1 -3
  99. package/src/helpers/createNodeFromContent.ts +4 -10
  100. package/src/helpers/findChildrenInRange.ts +1 -5
  101. package/src/helpers/findParentNode.ts +3 -1
  102. package/src/helpers/flattenExtensions.ts +30 -0
  103. package/src/helpers/getAttributes.ts +1 -4
  104. package/src/helpers/getAttributesFromExtensions.ts +28 -37
  105. package/src/helpers/getChangedRanges.ts +13 -11
  106. package/src/helpers/getExtensionField.ts +11 -11
  107. package/src/helpers/getMarkAttributes.ts +1 -4
  108. package/src/helpers/getMarkRange.ts +5 -15
  109. package/src/helpers/getMarkType.ts +1 -3
  110. package/src/helpers/getNodeAttributes.ts +1 -4
  111. package/src/helpers/getNodeType.ts +1 -3
  112. package/src/helpers/getRenderedAttributes.ts +1 -3
  113. package/src/helpers/getSchema.ts +2 -2
  114. package/src/helpers/getSchemaByResolvedExtensions.ts +45 -77
  115. package/src/helpers/getSplittedAttributes.ts +4 -4
  116. package/src/helpers/getTextContentFromNodes.ts +8 -11
  117. package/src/helpers/index.ts +4 -0
  118. package/src/helpers/injectExtensionAttributesToParseRule.ts +1 -1
  119. package/src/helpers/isActive.ts +1 -5
  120. package/src/helpers/isExtensionRulesEnabled.ts +1 -3
  121. package/src/helpers/isNodeEmpty.ts +2 -2
  122. package/src/helpers/resolveExtensions.ts +25 -0
  123. package/src/helpers/resolveFocusPosition.ts +3 -14
  124. package/src/helpers/rewriteUnknownContent.ts +149 -0
  125. package/src/helpers/sortExtensions.ts +26 -0
  126. package/src/index.ts +3 -7
  127. package/src/inputRules/markInputRule.ts +1 -5
  128. package/src/inputRules/nodeInputRule.ts +2 -9
  129. package/src/inputRules/textInputRule.ts +1 -4
  130. package/src/inputRules/textblockTypeInputRule.ts +2 -8
  131. package/src/inputRules/wrappingInputRule.ts +13 -19
  132. package/src/jsx-runtime.ts +64 -0
  133. package/src/pasteRules/markPasteRule.ts +1 -3
  134. package/src/pasteRules/nodePasteRule.ts +2 -8
  135. package/src/pasteRules/textPasteRule.ts +1 -4
  136. package/src/types.ts +529 -174
  137. package/src/utilities/createStyleTag.ts +3 -1
  138. package/src/utilities/deleteProps.ts +7 -11
  139. package/src/utilities/elementFromString.ts +3 -0
  140. package/src/utilities/findDuplicates.ts +4 -1
  141. package/src/utilities/index.ts +1 -0
  142. package/src/utilities/isFunction.ts +1 -0
  143. package/src/utilities/isMacOS.ts +1 -3
  144. package/src/utilities/isiOS.ts +5 -10
  145. package/src/utilities/mergeAttributes.ts +17 -7
  146. package/src/utilities/removeDuplicates.ts +1 -3
@@ -1,5 +1,7 @@
1
1
  export function createStyleTag(style: string, nonce?: string, suffix?: string): HTMLStyleElement {
2
- const tiptapStyleTag = (<HTMLStyleElement>document.querySelector(`style[data-tiptap-style${suffix ? `-${suffix}` : ''}]`))
2
+ const tiptapStyleTag = <HTMLStyleElement>(
3
+ document.querySelector(`style[data-tiptap-style${suffix ? `-${suffix}` : ''}]`)
4
+ )
3
5
 
4
6
  if (tiptapStyleTag !== null) {
5
7
  return tiptapStyleTag
@@ -4,17 +4,13 @@
4
4
  * @param key Key to remove
5
5
  */
6
6
  export function deleteProps(obj: Record<string, any>, propOrProps: string | string[]): Record<string, any> {
7
- const props = typeof propOrProps === 'string'
8
- ? [propOrProps]
9
- : propOrProps
7
+ const props = typeof propOrProps === 'string' ? [propOrProps] : propOrProps
10
8
 
11
- return Object
12
- .keys(obj)
13
- .reduce((newObj: Record<string, any>, prop) => {
14
- if (!props.includes(prop)) {
15
- newObj[prop] = obj[prop]
16
- }
9
+ return Object.keys(obj).reduce((newObj: Record<string, any>, prop) => {
10
+ if (!props.includes(prop)) {
11
+ newObj[prop] = obj[prop]
12
+ }
17
13
 
18
- return newObj
19
- }, {})
14
+ return newObj
15
+ }, {})
20
16
  }
@@ -15,6 +15,9 @@ const removeWhitespaces = (node: HTMLElement) => {
15
15
  }
16
16
 
17
17
  export function elementFromString(value: string): HTMLElement {
18
+ if (typeof window === 'undefined') {
19
+ throw new Error('[tiptap error]: there is no window object available, so this function cannot be used')
20
+ }
18
21
  // add a wrapper to preserve leading and trailing whitespace
19
22
  const wrappedValue = `<body>${value}</body>`
20
23
 
@@ -1,4 +1,7 @@
1
- export function findDuplicates(items: any[]): any[] {
1
+ /**
2
+ * Find duplicates in an array.
3
+ */
4
+ export function findDuplicates<T>(items: T[]): T[] {
2
5
  const filtered = items.filter((el, index) => items.indexOf(el) !== index)
3
6
 
4
7
  return Array.from(new Set(filtered))
@@ -5,6 +5,7 @@ export * from './elementFromString.js'
5
5
  export * from './escapeForRegEx.js'
6
6
  export * from './findDuplicates.js'
7
7
  export * from './fromString.js'
8
+ export * from './isAndroid.js'
8
9
  export * from './isEmptyObject.js'
9
10
  export * from './isFunction.js'
10
11
  export * from './isiOS.js'
@@ -1,3 +1,4 @@
1
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type
1
2
  export function isFunction(value: any): value is Function {
2
3
  return typeof value === 'function'
3
4
  }
@@ -1,5 +1,3 @@
1
1
  export function isMacOS(): boolean {
2
- return typeof navigator !== 'undefined'
3
- ? /Mac/.test(navigator.platform)
4
- : false
2
+ return typeof navigator !== 'undefined' ? /Mac/.test(navigator.platform) : false
5
3
  }
@@ -1,12 +1,7 @@
1
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)
2
+ return (
3
+ ['iPad Simulator', 'iPhone Simulator', 'iPod Simulator', 'iPad', 'iPhone', 'iPod'].includes(navigator.platform) ||
4
+ // iPad on iOS 13 detection
5
+ (navigator.userAgent.includes('Mac') && 'ontouchend' in document)
6
+ )
12
7
  }
@@ -14,17 +14,25 @@ export function mergeAttributes(...objects: Record<string, any>[]): Record<strin
14
14
  }
15
15
 
16
16
  if (key === 'class') {
17
- const valueClasses: string[] = value ? value.split(' ') : []
17
+ const valueClasses: string[] = value ? String(value).split(' ') : []
18
18
  const existingClasses: string[] = mergedAttributes[key] ? mergedAttributes[key].split(' ') : []
19
19
 
20
- const insertClasses = valueClasses.filter(
21
- valueClass => !existingClasses.includes(valueClass),
22
- )
20
+ const insertClasses = valueClasses.filter(valueClass => !existingClasses.includes(valueClass))
23
21
 
24
22
  mergedAttributes[key] = [...existingClasses, ...insertClasses].join(' ')
25
23
  } else if (key === 'style') {
26
- const newStyles: string[] = value ? value.split(';').map((style: string) => style.trim()).filter(Boolean) : []
27
- const existingStyles: string[] = mergedAttributes[key] ? mergedAttributes[key].split(';').map((style: string) => style.trim()).filter(Boolean) : []
24
+ const newStyles: string[] = value
25
+ ? value
26
+ .split(';')
27
+ .map((style: string) => style.trim())
28
+ .filter(Boolean)
29
+ : []
30
+ const existingStyles: string[] = mergedAttributes[key]
31
+ ? mergedAttributes[key]
32
+ .split(';')
33
+ .map((style: string) => style.trim())
34
+ .filter(Boolean)
35
+ : []
28
36
 
29
37
  const styleMap = new Map<string, string>()
30
38
 
@@ -40,7 +48,9 @@ export function mergeAttributes(...objects: Record<string, any>[]): Record<strin
40
48
  styleMap.set(property, val)
41
49
  })
42
50
 
43
- mergedAttributes[key] = Array.from(styleMap.entries()).map(([property, val]) => `${property}: ${val}`).join('; ')
51
+ mergedAttributes[key] = Array.from(styleMap.entries())
52
+ .map(([property, val]) => `${property}: ${val}`)
53
+ .join('; ')
44
54
  } else {
45
55
  mergedAttributes[key] = value
46
56
  }
@@ -8,8 +8,6 @@ export function removeDuplicates<T>(array: T[], by = JSON.stringify): T[] {
8
8
  return array.filter(item => {
9
9
  const key = by(item)
10
10
 
11
- return Object.prototype.hasOwnProperty.call(seen, key)
12
- ? false
13
- : (seen[key] = true)
11
+ return Object.prototype.hasOwnProperty.call(seen, key) ? false : (seen[key] = true)
14
12
  })
15
13
  }