@tiptap/core 2.0.0-beta.175 → 2.0.0-beta.176
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.
- package/dist/packages/core/src/helpers/getTextSerializersFromSchema.d.ts +3 -0
- package/dist/packages/core/src/index.d.ts +1 -0
- package/dist/packages/core/src/types.d.ts +2 -0
- package/dist/packages/core/src/utilities/createStyleTag.d.ts +1 -1
- package/dist/tiptap-core.cjs.js +24 -12
- package/dist/tiptap-core.cjs.js.map +1 -1
- package/dist/tiptap-core.esm.js +24 -13
- package/dist/tiptap-core.esm.js.map +1 -1
- package/dist/tiptap-core.umd.js +24 -12
- package/dist/tiptap-core.umd.js.map +1 -1
- package/package.json +2 -2
- package/src/Editor.ts +4 -3
- package/src/NodeView.ts +6 -2
- package/src/extensions/clipboardTextSerializer.ts +2 -2
- package/src/helpers/generateText.ts +2 -2
- package/src/helpers/getMarkRange.ts +6 -2
- package/src/helpers/getTextBetween.ts +1 -0
- package/src/helpers/{getTextSeralizersFromSchema.ts → getTextSerializersFromSchema.ts} +1 -1
- package/src/index.ts +1 -0
- package/src/types.ts +2 -0
- package/src/utilities/createStyleTag.ts +5 -1
- package/dist/packages/core/src/helpers/getTextSeralizersFromSchema.d.ts +0 -3
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tiptap/core",
|
|
3
3
|
"description": "headless rich text editor",
|
|
4
|
-
"version": "2.0.0-beta.
|
|
4
|
+
"version": "2.0.0-beta.176",
|
|
5
5
|
"homepage": "https://tiptap.dev",
|
|
6
6
|
"keywords": [
|
|
7
7
|
"tiptap",
|
|
@@ -45,5 +45,5 @@
|
|
|
45
45
|
"directory": "packages/core"
|
|
46
46
|
},
|
|
47
47
|
"sideEffects": false,
|
|
48
|
-
"gitHead": "
|
|
48
|
+
"gitHead": "1789af864fe36086df487cf8cd3e578b10de1564"
|
|
49
49
|
}
|
package/src/Editor.ts
CHANGED
|
@@ -13,7 +13,7 @@ import { getHTMLFromFragment } from './helpers/getHTMLFromFragment'
|
|
|
13
13
|
import { getText } from './helpers/getText'
|
|
14
14
|
import { isNodeEmpty } from './helpers/isNodeEmpty'
|
|
15
15
|
import { resolveFocusPosition } from './helpers/resolveFocusPosition'
|
|
16
|
-
import {
|
|
16
|
+
import { getTextSerializersFromSchema } from './helpers/getTextSerializersFromSchema'
|
|
17
17
|
import { createStyleTag } from './utilities/createStyleTag'
|
|
18
18
|
import { isFunction } from './utilities/isFunction'
|
|
19
19
|
import { CommandManager } from './CommandManager'
|
|
@@ -57,6 +57,7 @@ export class Editor extends EventEmitter<EditorEvents> {
|
|
|
57
57
|
element: document.createElement('div'),
|
|
58
58
|
content: '',
|
|
59
59
|
injectCSS: true,
|
|
60
|
+
injectNonce: undefined,
|
|
60
61
|
extensions: [],
|
|
61
62
|
autofocus: false,
|
|
62
63
|
editable: true,
|
|
@@ -136,7 +137,7 @@ export class Editor extends EventEmitter<EditorEvents> {
|
|
|
136
137
|
*/
|
|
137
138
|
private injectCSS(): void {
|
|
138
139
|
if (this.options.injectCSS && document) {
|
|
139
|
-
this.css = createStyleTag(style)
|
|
140
|
+
this.css = createStyleTag(style, this.options.injectNonce)
|
|
140
141
|
}
|
|
141
142
|
}
|
|
142
143
|
|
|
@@ -435,7 +436,7 @@ export class Editor extends EventEmitter<EditorEvents> {
|
|
|
435
436
|
blockSeparator,
|
|
436
437
|
textSerializers: {
|
|
437
438
|
...textSerializers,
|
|
438
|
-
...
|
|
439
|
+
...getTextSerializersFromSchema(this.schema),
|
|
439
440
|
},
|
|
440
441
|
})
|
|
441
442
|
}
|
package/src/NodeView.ts
CHANGED
|
@@ -82,8 +82,12 @@ export class NodeView<
|
|
|
82
82
|
const domBox = this.dom.getBoundingClientRect()
|
|
83
83
|
const handleBox = dragHandle.getBoundingClientRect()
|
|
84
84
|
|
|
85
|
-
|
|
86
|
-
|
|
85
|
+
// In React, we have to go through nativeEvent to reach offsetX/offsetY.
|
|
86
|
+
const offsetX = event.offsetX ?? (event as any).nativeEvent?.offsetX
|
|
87
|
+
const offsetY = event.offsetY ?? (event as any).nativeEvent?.offsetY
|
|
88
|
+
|
|
89
|
+
x = handleBox.x - domBox.x + offsetX
|
|
90
|
+
y = handleBox.y - domBox.y + offsetY
|
|
87
91
|
}
|
|
88
92
|
|
|
89
93
|
event.dataTransfer?.setDragImage(this.dom, x, y)
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Plugin, PluginKey } from 'prosemirror-state'
|
|
2
2
|
import { Extension } from '../Extension'
|
|
3
3
|
import { getTextBetween } from '../helpers/getTextBetween'
|
|
4
|
-
import {
|
|
4
|
+
import { getTextSerializersFromSchema } from '../helpers/getTextSerializersFromSchema'
|
|
5
5
|
|
|
6
6
|
export const ClipboardTextSerializer = Extension.create({
|
|
7
7
|
name: 'clipboardTextSerializer',
|
|
@@ -18,7 +18,7 @@ export const ClipboardTextSerializer = Extension.create({
|
|
|
18
18
|
const { ranges } = selection
|
|
19
19
|
const from = Math.min(...ranges.map(range => range.$from.pos))
|
|
20
20
|
const to = Math.max(...ranges.map(range => range.$to.pos))
|
|
21
|
-
const textSerializers =
|
|
21
|
+
const textSerializers = getTextSerializersFromSchema(schema)
|
|
22
22
|
const range = { from, to }
|
|
23
23
|
|
|
24
24
|
return getTextBetween(doc, range, {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Node } from 'prosemirror-model'
|
|
2
2
|
import { getSchema } from './getSchema'
|
|
3
3
|
import { Extensions, JSONContent, TextSerializer } from '../types'
|
|
4
|
-
import {
|
|
4
|
+
import { getTextSerializersFromSchema } from './getTextSerializersFromSchema'
|
|
5
5
|
import { getText } from './getText'
|
|
6
6
|
|
|
7
7
|
export function generateText(
|
|
@@ -23,7 +23,7 @@ export function generateText(
|
|
|
23
23
|
blockSeparator,
|
|
24
24
|
textSerializers: {
|
|
25
25
|
...textSerializers,
|
|
26
|
-
...
|
|
26
|
+
...getTextSerializersFromSchema(schema),
|
|
27
27
|
},
|
|
28
28
|
})
|
|
29
29
|
}
|
|
@@ -29,7 +29,11 @@ export function getMarkRange(
|
|
|
29
29
|
return
|
|
30
30
|
}
|
|
31
31
|
|
|
32
|
-
|
|
32
|
+
let start = $pos.parent.childAfter($pos.parentOffset)
|
|
33
|
+
|
|
34
|
+
if ($pos.parentOffset === start.offset && start.offset !== 0) {
|
|
35
|
+
start = $pos.parent.childBefore($pos.parentOffset)
|
|
36
|
+
}
|
|
33
37
|
|
|
34
38
|
if (!start.node) {
|
|
35
39
|
return
|
|
@@ -41,7 +45,7 @@ export function getMarkRange(
|
|
|
41
45
|
return
|
|
42
46
|
}
|
|
43
47
|
|
|
44
|
-
let startIndex =
|
|
48
|
+
let startIndex = start.index
|
|
45
49
|
let startPos = $pos.start() + start.offset
|
|
46
50
|
let endIndex = startIndex + 1
|
|
47
51
|
let endPos = startPos + start.node.nodeSize
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Schema } from 'prosemirror-model'
|
|
2
2
|
import { TextSerializer } from '../types'
|
|
3
3
|
|
|
4
|
-
export function
|
|
4
|
+
export function getTextSerializersFromSchema(schema: Schema): Record<string, TextSerializer> {
|
|
5
5
|
return Object.fromEntries(Object
|
|
6
6
|
.entries(schema.nodes)
|
|
7
7
|
.filter(([, node]) => node.spec.toText)
|
package/src/index.ts
CHANGED
|
@@ -47,6 +47,7 @@ export * from './helpers/getNodeAttributes'
|
|
|
47
47
|
export * from './helpers/getNodeType'
|
|
48
48
|
export * from './helpers/getText'
|
|
49
49
|
export * from './helpers/getTextBetween'
|
|
50
|
+
export * from './helpers/getTextSerializersFromSchema'
|
|
50
51
|
export * from './helpers/isActive'
|
|
51
52
|
export * from './helpers/isList'
|
|
52
53
|
export * from './helpers/isMarkActive'
|
package/src/types.ts
CHANGED
|
@@ -70,6 +70,7 @@ export interface EditorOptions {
|
|
|
70
70
|
content: Content,
|
|
71
71
|
extensions: Extensions,
|
|
72
72
|
injectCSS: boolean,
|
|
73
|
+
injectNonce: string | undefined,
|
|
73
74
|
autofocus: FocusPosition,
|
|
74
75
|
editable: boolean,
|
|
75
76
|
editorProps: EditorProps,
|
|
@@ -243,6 +244,7 @@ export type TextSerializer = (props: {
|
|
|
243
244
|
pos: number,
|
|
244
245
|
parent: ProseMirrorNode,
|
|
245
246
|
index: number,
|
|
247
|
+
range: Range,
|
|
246
248
|
}) => string
|
|
247
249
|
|
|
248
250
|
export type ExtendedRegExpMatchArray = RegExpMatchArray & {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export function createStyleTag(style: string): HTMLStyleElement {
|
|
1
|
+
export function createStyleTag(style: string, nonce?: string): HTMLStyleElement {
|
|
2
2
|
const tipTapStyleTag = (<HTMLStyleElement>document.querySelector('style[data-tiptap-style]'))
|
|
3
3
|
|
|
4
4
|
if (tipTapStyleTag !== null) {
|
|
@@ -7,6 +7,10 @@ export function createStyleTag(style: string): HTMLStyleElement {
|
|
|
7
7
|
|
|
8
8
|
const styleNode = document.createElement('style')
|
|
9
9
|
|
|
10
|
+
if (nonce) {
|
|
11
|
+
styleNode.setAttribute('nonce', nonce)
|
|
12
|
+
}
|
|
13
|
+
|
|
10
14
|
styleNode.setAttribute('data-tiptap-style', '')
|
|
11
15
|
styleNode.innerHTML = style
|
|
12
16
|
document.getElementsByTagName('head')[0].appendChild(styleNode)
|