@ni/nimble-components 20.15.0 → 20.16.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.
- package/dist/all-components-bundle.js +12525 -11724
- package/dist/all-components-bundle.js.map +1 -1
- package/dist/all-components-bundle.min.js +2993 -2857
- package/dist/all-components-bundle.min.js.map +1 -1
- package/dist/esm/label-provider/table/index.d.ts +6 -0
- package/dist/esm/label-provider/table/index.js +9 -1
- package/dist/esm/label-provider/table/index.js.map +1 -1
- package/dist/esm/label-provider/table/label-token-defaults.js +2 -0
- package/dist/esm/label-provider/table/label-token-defaults.js.map +1 -1
- package/dist/esm/label-provider/table/label-tokens.d.ts +2 -0
- package/dist/esm/label-provider/table/label-tokens.js +8 -0
- package/dist/esm/label-provider/table/label-tokens.js.map +1 -1
- package/dist/esm/patterns/expand-collapse/styles.d.ts +1 -0
- package/dist/esm/patterns/expand-collapse/styles.js +27 -0
- package/dist/esm/patterns/expand-collapse/styles.js.map +1 -0
- package/dist/esm/rich-text/base/index.d.ts +36 -0
- package/dist/esm/rich-text/base/index.js +73 -0
- package/dist/esm/rich-text/base/index.js.map +1 -0
- package/dist/esm/rich-text/editor/index.d.ts +25 -27
- package/dist/esm/rich-text/editor/index.js +95 -173
- package/dist/esm/rich-text/editor/index.js.map +1 -1
- package/dist/esm/rich-text/editor/models/create-tiptap-editor.d.ts +3 -0
- package/dist/esm/rich-text/editor/models/create-tiptap-editor.js +228 -0
- package/dist/esm/rich-text/editor/models/create-tiptap-editor.js.map +1 -0
- package/dist/esm/rich-text/editor/styles.js +9 -1
- package/dist/esm/rich-text/editor/styles.js.map +1 -1
- package/dist/esm/rich-text/editor/template.js +2 -2
- package/dist/esm/rich-text/editor/template.js.map +1 -1
- package/dist/esm/rich-text/editor/testing/rich-text-editor.pageobject.d.ts +4 -0
- package/dist/esm/rich-text/editor/testing/rich-text-editor.pageobject.js +24 -4
- package/dist/esm/rich-text/editor/testing/rich-text-editor.pageobject.js.map +1 -1
- package/dist/esm/rich-text/editor/testing/types.d.ts +15 -0
- package/dist/esm/rich-text/editor/testing/types.js.map +1 -1
- package/dist/esm/rich-text/editor/types.d.ts +1 -0
- package/dist/esm/rich-text/editor/types.js +1 -0
- package/dist/esm/rich-text/editor/types.js.map +1 -1
- package/dist/esm/rich-text/models/configuration.d.ts +10 -0
- package/dist/esm/rich-text/models/configuration.js +15 -0
- package/dist/esm/rich-text/models/configuration.js.map +1 -0
- package/dist/esm/rich-text/models/editor-configuration.d.ts +10 -0
- package/dist/esm/rich-text/models/editor-configuration.js +14 -0
- package/dist/esm/rich-text/models/editor-configuration.js.map +1 -0
- package/dist/esm/rich-text/models/markdown-parser-mention-configuration.d.ts +2 -2
- package/dist/esm/rich-text/models/markdown-parser-mention-configuration.js +5 -1
- package/dist/esm/rich-text/models/markdown-parser-mention-configuration.js.map +1 -1
- package/dist/esm/rich-text/models/markdown-parser.d.ts +8 -1
- package/dist/esm/rich-text/models/markdown-parser.js +20 -4
- package/dist/esm/rich-text/models/markdown-parser.js.map +1 -1
- package/dist/esm/rich-text/models/markdown-serializer.d.ts +4 -3
- package/dist/esm/rich-text/models/markdown-serializer.js +16 -5
- package/dist/esm/rich-text/models/markdown-serializer.js.map +1 -1
- package/dist/esm/rich-text/models/mention-extension-configuration.d.ts +15 -0
- package/dist/esm/rich-text/models/mention-extension-configuration.js +18 -0
- package/dist/esm/rich-text/models/mention-extension-configuration.js.map +1 -0
- package/dist/esm/rich-text/viewer/index.d.ts +5 -23
- package/dist/esm/rich-text/viewer/index.js +13 -61
- package/dist/esm/rich-text/viewer/index.js.map +1 -1
- package/dist/esm/rich-text/viewer/styles.js +2 -1
- package/dist/esm/rich-text/viewer/styles.js.map +1 -1
- package/dist/esm/rich-text-mention/base/index.d.ts +17 -16
- package/dist/esm/rich-text-mention/base/index.js +34 -20
- package/dist/esm/rich-text-mention/base/index.js.map +1 -1
- package/dist/esm/rich-text-mention/base/models/mention-internals.d.ts +9 -4
- package/dist/esm/rich-text-mention/base/models/mention-internals.js +6 -2
- package/dist/esm/rich-text-mention/base/models/mention-internals.js.map +1 -1
- package/dist/esm/rich-text-mention/base/models/mention-validator.d.ts +3 -5
- package/dist/esm/rich-text-mention/base/models/mention-validator.js +6 -10
- package/dist/esm/rich-text-mention/base/models/mention-validator.js.map +1 -1
- package/dist/esm/rich-text-mention/base/template.d.ts +1 -1
- package/dist/esm/rich-text-mention/base/template.js +1 -1
- package/dist/esm/rich-text-mention/base/template.js.map +1 -1
- package/dist/esm/rich-text-mention/base/types.d.ts +10 -0
- package/dist/esm/rich-text-mention/base/types.js +2 -0
- package/dist/esm/rich-text-mention/base/types.js.map +1 -0
- package/dist/esm/rich-text-mention/users/index.d.ts +2 -3
- package/dist/esm/rich-text-mention/users/index.js +1 -6
- package/dist/esm/rich-text-mention/users/index.js.map +1 -1
- package/dist/esm/rich-text-mention/{base → users}/models/mapping-user-config.d.ts +1 -1
- package/dist/esm/rich-text-mention/{base → users}/models/mapping-user-config.js +1 -1
- package/dist/esm/rich-text-mention/users/models/mapping-user-config.js.map +1 -0
- package/dist/esm/rich-text-mention/users/models/rich-text-mention-users-validator.d.ts +4 -2
- package/dist/esm/rich-text-mention/users/models/rich-text-mention-users-validator.js +11 -2
- package/dist/esm/rich-text-mention/users/models/rich-text-mention-users-validator.js.map +1 -1
- package/dist/esm/rich-text-mention/users/view/styles.js +8 -3
- package/dist/esm/rich-text-mention/users/view/styles.js.map +1 -1
- package/dist/esm/table/components/cell/styles.js +2 -2
- package/dist/esm/table/components/cell/styles.js.map +1 -1
- package/dist/esm/table/components/group-row/styles.js +3 -22
- package/dist/esm/table/components/group-row/styles.js.map +1 -1
- package/dist/esm/table/components/group-row/template.js +2 -1
- package/dist/esm/table/components/group-row/template.js.map +1 -1
- package/dist/esm/table/components/row/index.d.ts +12 -0
- package/dist/esm/table/components/row/index.js +37 -4
- package/dist/esm/table/components/row/index.js.map +1 -1
- package/dist/esm/table/components/row/styles.js +20 -1
- package/dist/esm/table/components/row/styles.js.map +1 -1
- package/dist/esm/table/components/row/template.js +28 -7
- package/dist/esm/table/components/row/template.js.map +1 -1
- package/dist/esm/table/index.js +4 -3
- package/dist/esm/table/index.js.map +1 -1
- package/dist/esm/table/types.d.ts +8 -0
- package/package.json +3 -1
- package/dist/esm/rich-text-mention/base/models/mapping-user-config.js.map +0 -1
|
@@ -1,31 +1,20 @@
|
|
|
1
1
|
import { __decorate } from "tslib";
|
|
2
2
|
import { observable, attr, DOM } from '@microsoft/fast-element';
|
|
3
|
-
import { applyMixins, ARIAGlobalStatesAndProperties, DesignSystem
|
|
3
|
+
import { applyMixins, ARIAGlobalStatesAndProperties, DesignSystem } from '@microsoft/fast-foundation';
|
|
4
4
|
import { keyEnter, keySpace } from '@microsoft/fast-web-utilities';
|
|
5
|
-
import {
|
|
6
|
-
import Bold from '@tiptap/extension-bold';
|
|
7
|
-
import BulletList from '@tiptap/extension-bullet-list';
|
|
8
|
-
import Document from '@tiptap/extension-document';
|
|
9
|
-
import History from '@tiptap/extension-history';
|
|
10
|
-
import Italic from '@tiptap/extension-italic';
|
|
11
|
-
import Link from '@tiptap/extension-link';
|
|
12
|
-
import ListItem from '@tiptap/extension-list-item';
|
|
13
|
-
import OrderedList from '@tiptap/extension-ordered-list';
|
|
14
|
-
import Paragraph from '@tiptap/extension-paragraph';
|
|
15
|
-
import Placeholder from '@tiptap/extension-placeholder';
|
|
16
|
-
import Text from '@tiptap/extension-text';
|
|
17
|
-
import HardBreak from '@tiptap/extension-hard-break';
|
|
18
|
-
import { Slice, Fragment } from 'prosemirror-model';
|
|
5
|
+
import { findParentNode, isList } from '@tiptap/core';
|
|
19
6
|
import { template } from './template';
|
|
20
7
|
import { styles } from './styles';
|
|
21
|
-
import { TipTapNodeName } from './types';
|
|
8
|
+
import { TipTapNodeName, mentionPluginPrefix } from './types';
|
|
22
9
|
import { RichTextMarkdownParser } from '../models/markdown-parser';
|
|
23
10
|
import { RichTextMarkdownSerializer } from '../models/markdown-serializer';
|
|
24
|
-
import {
|
|
11
|
+
import { RichText } from '../base';
|
|
12
|
+
import { createTiptapEditor } from './models/create-tiptap-editor';
|
|
13
|
+
import { EditorConfiguration } from '../models/editor-configuration';
|
|
25
14
|
/**
|
|
26
15
|
* A nimble styled rich text editor
|
|
27
16
|
*/
|
|
28
|
-
export class RichTextEditor extends
|
|
17
|
+
export class RichTextEditor extends RichText {
|
|
29
18
|
constructor() {
|
|
30
19
|
super(...arguments);
|
|
31
20
|
/**
|
|
@@ -35,7 +24,15 @@ export class RichTextEditor extends FoundationElement {
|
|
|
35
24
|
/**
|
|
36
25
|
* @internal
|
|
37
26
|
*/
|
|
38
|
-
this.tiptapEditor = this.
|
|
27
|
+
this.tiptapEditor = createTiptapEditor(this.editor, [], this.placeholder);
|
|
28
|
+
/**
|
|
29
|
+
* @internal
|
|
30
|
+
*/
|
|
31
|
+
this.xmlSerializer = new XMLSerializer();
|
|
32
|
+
/**
|
|
33
|
+
* @internal
|
|
34
|
+
*/
|
|
35
|
+
this.richTextMarkdownSerializer = new RichTextMarkdownSerializer([]);
|
|
39
36
|
/**
|
|
40
37
|
* Whether to disable user from editing and interacting with toolbar buttons
|
|
41
38
|
*
|
|
@@ -63,47 +60,6 @@ export class RichTextEditor extends FoundationElement {
|
|
|
63
60
|
*/
|
|
64
61
|
this.scrollbarWidth = -1;
|
|
65
62
|
this.updateScrollbarWidthQueued = false;
|
|
66
|
-
this.xmlSerializer = new XMLSerializer();
|
|
67
|
-
this.validAbsoluteLinkRegex = /^https?:\/\//i;
|
|
68
|
-
/**
|
|
69
|
-
* This method finds the Link mark in the pasted content and update its Text node.
|
|
70
|
-
* If there is no text node, pass the node's fragment recursively and updates only node containing Link mark.
|
|
71
|
-
* If the Text node does not contains Link mark, push the same node to `updatedNodes`.
|
|
72
|
-
*
|
|
73
|
-
* @param fragment Fragment containing the pasted content. [Fragment](https://prosemirror.net/docs/ref/#model.Fragment)
|
|
74
|
-
* @returns modified fragment from the `updatedNode` after updating the valid link text with its href value.
|
|
75
|
-
*/
|
|
76
|
-
this.updateLinkNodes = (fragment) => {
|
|
77
|
-
const updatedNodes = [];
|
|
78
|
-
fragment.forEach(node => {
|
|
79
|
-
if (node.isText && node.marks.length > 0) {
|
|
80
|
-
const linkMark = node.marks.find(mark => mark.type.name === 'link' && mark.attrs);
|
|
81
|
-
if (linkMark) {
|
|
82
|
-
// Checks if the link is valid link or not
|
|
83
|
-
// Needing to separately validate the link on paste is a workaround for a tiptap issue
|
|
84
|
-
// See: https://github.com/ni/nimble/issues/1527
|
|
85
|
-
if (this.validAbsoluteLinkRegex.test(linkMark.attrs.href)) {
|
|
86
|
-
// The below lines of code is responsible for updating the text content with its href value and creates a new updated text node.
|
|
87
|
-
// This code needs an update when the hyperlink support is added.
|
|
88
|
-
// See: https://github.com/ni/nimble/issues/1527
|
|
89
|
-
updatedNodes.push(this.tiptapEditor.schema.text(linkMark.attrs.href, node.marks));
|
|
90
|
-
}
|
|
91
|
-
else {
|
|
92
|
-
// If it is a invalid link, creates a new Text node with the same text content and without a Link mark.
|
|
93
|
-
updatedNodes.push(this.tiptapEditor.schema.text(node.textContent, linkMark.removeFromSet(node.marks)));
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
else {
|
|
97
|
-
updatedNodes.push(node);
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
else {
|
|
101
|
-
const updatedContent = this.updateLinkNodes(node.content);
|
|
102
|
-
updatedNodes.push(node.copy(updatedContent));
|
|
103
|
-
}
|
|
104
|
-
});
|
|
105
|
-
return Fragment.fromArray(updatedNodes);
|
|
106
|
-
};
|
|
107
63
|
}
|
|
108
64
|
/**
|
|
109
65
|
* True if the editor is empty or contains only whitespace, false otherwise.
|
|
@@ -112,9 +68,20 @@ export class RichTextEditor extends FoundationElement {
|
|
|
112
68
|
*/
|
|
113
69
|
get empty() {
|
|
114
70
|
// Tiptap [isEmpty](https://tiptap.dev/api/editor#is-empty) returns false even if the editor has only whitespace.
|
|
115
|
-
//
|
|
116
|
-
//
|
|
117
|
-
|
|
71
|
+
// Get the prose mirror textContent of all the nodes with whitespace trimmed to see if it is empty
|
|
72
|
+
// Mention nodes are formatted as empty text content, so if empty make sure there are no mention nodes remaining
|
|
73
|
+
if (this.tiptapEditor.state.doc.textContent.trim() === '') {
|
|
74
|
+
let hasMention = false;
|
|
75
|
+
this.tiptapEditor.state.doc.descendants(node => {
|
|
76
|
+
if (node.type.name.startsWith(mentionPluginPrefix)) {
|
|
77
|
+
hasMention = true;
|
|
78
|
+
}
|
|
79
|
+
const continueDescent = hasMention === false;
|
|
80
|
+
return continueDescent;
|
|
81
|
+
});
|
|
82
|
+
return !hasMention;
|
|
83
|
+
}
|
|
84
|
+
return false;
|
|
118
85
|
}
|
|
119
86
|
/**
|
|
120
87
|
* @internal
|
|
@@ -144,15 +111,13 @@ export class RichTextEditor extends FoundationElement {
|
|
|
144
111
|
* @internal
|
|
145
112
|
*/
|
|
146
113
|
disabledChanged() {
|
|
147
|
-
this.
|
|
148
|
-
this.setEditorTabIndex();
|
|
149
|
-
this.editor.setAttribute('aria-disabled', this.disabled ? 'true' : 'false');
|
|
114
|
+
this.disableEditor();
|
|
150
115
|
}
|
|
151
116
|
/**
|
|
152
117
|
* Update the placeholder text and view of the editor.
|
|
153
118
|
* @internal
|
|
154
119
|
*/
|
|
155
|
-
placeholderChanged() {
|
|
120
|
+
placeholderChanged(_prev, _next) {
|
|
156
121
|
const placeholderExtension = this.getTipTapExtension('placeholder');
|
|
157
122
|
placeholderExtension.options.placeholder = this.placeholder ?? '';
|
|
158
123
|
this.tiptapEditor.view.dispatch(this.tiptapEditor.state.tr);
|
|
@@ -161,7 +126,7 @@ export class RichTextEditor extends FoundationElement {
|
|
|
161
126
|
/**
|
|
162
127
|
* @internal
|
|
163
128
|
*/
|
|
164
|
-
ariaLabelChanged() {
|
|
129
|
+
ariaLabelChanged(_prev, _next) {
|
|
165
130
|
if (this.ariaLabel !== null && this.ariaLabel !== undefined) {
|
|
166
131
|
this.editor.setAttribute('aria-label', this.ariaLabel);
|
|
167
132
|
}
|
|
@@ -169,6 +134,22 @@ export class RichTextEditor extends FoundationElement {
|
|
|
169
134
|
this.editor.removeAttribute('aria-label');
|
|
170
135
|
}
|
|
171
136
|
}
|
|
137
|
+
/**
|
|
138
|
+
* @internal
|
|
139
|
+
*/
|
|
140
|
+
configurationChanged(prev, next) {
|
|
141
|
+
if (this.isMentionExtensionConfigUnchanged(prev, next)) {
|
|
142
|
+
this.setMarkdown(this.getMarkdown());
|
|
143
|
+
}
|
|
144
|
+
else {
|
|
145
|
+
const currentStateMarkdown = this.getMarkdown();
|
|
146
|
+
this.richTextMarkdownSerializer = new RichTextMarkdownSerializer(this.configuration instanceof EditorConfiguration
|
|
147
|
+
? this.configuration.mentionExtensionConfig.map(config => config.name)
|
|
148
|
+
: []);
|
|
149
|
+
this.initializeEditor();
|
|
150
|
+
this.setMarkdown(currentStateMarkdown);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
172
153
|
/**
|
|
173
154
|
* Toggle the bold mark and focus back to the editor
|
|
174
155
|
* @internal
|
|
@@ -254,7 +235,7 @@ export class RichTextEditor extends FoundationElement {
|
|
|
254
235
|
* @public
|
|
255
236
|
*/
|
|
256
237
|
getMarkdown() {
|
|
257
|
-
return
|
|
238
|
+
return this.richTextMarkdownSerializer.serializeDOMToMarkdown(this.tiptapEditor.state.doc);
|
|
258
239
|
}
|
|
259
240
|
/**
|
|
260
241
|
* @internal
|
|
@@ -265,6 +246,29 @@ export class RichTextEditor extends FoundationElement {
|
|
|
265
246
|
event.stopPropagation();
|
|
266
247
|
return false;
|
|
267
248
|
}
|
|
249
|
+
getMentionedHrefs() {
|
|
250
|
+
const mentionedHrefs = new Set();
|
|
251
|
+
this.tiptapEditor.state.doc.descendants(node => {
|
|
252
|
+
if (node.type.name.startsWith(mentionPluginPrefix)) {
|
|
253
|
+
mentionedHrefs.add(node.attrs.href);
|
|
254
|
+
}
|
|
255
|
+
});
|
|
256
|
+
return Array.from(mentionedHrefs);
|
|
257
|
+
}
|
|
258
|
+
createConfig() {
|
|
259
|
+
return new EditorConfiguration(this.mentionElements);
|
|
260
|
+
}
|
|
261
|
+
isMentionExtensionConfigUnchanged(prev, next) {
|
|
262
|
+
const prevConfigCharacters = prev?.mentionExtensionConfig
|
|
263
|
+
.map(config => config.character)
|
|
264
|
+
.sort((a, b) => a.localeCompare(b))
|
|
265
|
+
.toString();
|
|
266
|
+
const nextConfigCharacters = next.mentionExtensionConfig
|
|
267
|
+
.map(config => config.character)
|
|
268
|
+
.sort((a, b) => a.localeCompare(b))
|
|
269
|
+
.toString();
|
|
270
|
+
return prevConfigCharacters === nextConfigCharacters;
|
|
271
|
+
}
|
|
268
272
|
createEditor() {
|
|
269
273
|
const editor = document.createElement('div');
|
|
270
274
|
editor.className = 'editor';
|
|
@@ -273,115 +277,25 @@ export class RichTextEditor extends FoundationElement {
|
|
|
273
277
|
editor.setAttribute('aria-disabled', 'false');
|
|
274
278
|
return editor;
|
|
275
279
|
}
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
* Tiptap marks: https://tiptap.dev/api/marks
|
|
289
|
-
* Tiptap nodes: https://tiptap.dev/api/nodes
|
|
290
|
-
*/
|
|
291
|
-
return new Editor({
|
|
292
|
-
element: this.editor,
|
|
293
|
-
// The editor will detect markdown syntax for an input only for these items
|
|
294
|
-
// https://tiptap.dev/api/editor#enable-input-rules
|
|
295
|
-
enableInputRules: [BulletList, OrderedList],
|
|
296
|
-
// The editor will not detect markdown syntax when pasting content in any supported items
|
|
297
|
-
// Lists do not have any default paste rules, they have only input rules, so disabled paste rules
|
|
298
|
-
// https://tiptap.dev/api/editor#enable-paste-rules
|
|
299
|
-
enablePasteRules: false,
|
|
300
|
-
editorProps: {
|
|
301
|
-
// Validating whether the links in the pasted content belongs to the supported scheme (HTTPS/HTTP),
|
|
302
|
-
// and rendering it as a link in the editor. If not, rendering it as a plain text.
|
|
303
|
-
// Also, updating the link text content with its href as we support only the absolute link.
|
|
304
|
-
// `transformPasted` can be updated/removed when hyperlink support added
|
|
305
|
-
// See: https://github.com/ni/nimble/issues/1527
|
|
306
|
-
transformPasted
|
|
307
|
-
},
|
|
308
|
-
extensions: [
|
|
309
|
-
Document,
|
|
310
|
-
Paragraph,
|
|
311
|
-
Text,
|
|
312
|
-
BulletList,
|
|
313
|
-
OrderedList,
|
|
314
|
-
ListItem,
|
|
315
|
-
Bold,
|
|
316
|
-
Italic,
|
|
317
|
-
History,
|
|
318
|
-
Placeholder.configure({
|
|
319
|
-
placeholder: '',
|
|
320
|
-
showOnlyWhenEditable: false
|
|
321
|
-
}),
|
|
322
|
-
HardBreak,
|
|
323
|
-
customLink.configure({
|
|
324
|
-
// HTMLAttribute cannot be in camelCase as we want to match it with the name in Tiptap
|
|
325
|
-
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
326
|
-
HTMLAttributes: {
|
|
327
|
-
rel: 'noopener noreferrer',
|
|
328
|
-
target: null
|
|
329
|
-
},
|
|
330
|
-
autolink: true,
|
|
331
|
-
openOnClick: false,
|
|
332
|
-
// linkOnPaste can be enabled when hyperlink support added
|
|
333
|
-
// See: https://github.com/ni/nimble/issues/1527
|
|
334
|
-
linkOnPaste: false,
|
|
335
|
-
validate: href => this.validAbsoluteLinkRegex.test(href)
|
|
336
|
-
})
|
|
337
|
-
]
|
|
338
|
-
});
|
|
339
|
-
}
|
|
340
|
-
/**
|
|
341
|
-
* Extending the default link mark schema defined in the TipTap.
|
|
342
|
-
*
|
|
343
|
-
* "excludes": https://prosemirror.net/docs/ref/#model.MarkSpec.excludes
|
|
344
|
-
* "inclusive": https://prosemirror.net/docs/ref/#model.MarkSpec.inclusive
|
|
345
|
-
* "parseHTML": https://tiptap.dev/guide/custom-extensions#parse-html
|
|
346
|
-
* "renderHTML": https://tiptap.dev/guide/custom-extensions/#render-html
|
|
347
|
-
*/
|
|
348
|
-
getCustomLinkExtension() {
|
|
349
|
-
return Link.extend({
|
|
350
|
-
// Excludes can be removed/enabled when hyperlink support added
|
|
351
|
-
// See: https://github.com/ni/nimble/issues/1527
|
|
352
|
-
excludes: '_',
|
|
353
|
-
// Inclusive can be updated when hyperlink support added
|
|
354
|
-
// See: https://github.com/ni/nimble/issues/1527
|
|
355
|
-
inclusive: false,
|
|
356
|
-
parseHTML() {
|
|
357
|
-
return [
|
|
358
|
-
// To load the `nimble-anchor` from the HTML parsed content by markdown-parser as links in the Tiptap editor, the `parseHTML`
|
|
359
|
-
// of Link extension should return nimble `anchorTag`.
|
|
360
|
-
// This is because the link mark schema in `markdown-parser.ts` file uses `<nimble-anchor>` as anchor tag and not `<a>`.
|
|
361
|
-
{
|
|
362
|
-
tag: anchorTag
|
|
363
|
-
},
|
|
364
|
-
// `<a>` tag is added here to support when pasting a link from external source.
|
|
365
|
-
{
|
|
366
|
-
tag: 'a'
|
|
367
|
-
}
|
|
368
|
-
];
|
|
369
|
-
},
|
|
370
|
-
// HTMLAttribute cannot be in camelCase as we want to match it with the name in Tiptap
|
|
371
|
-
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
372
|
-
renderHTML({ HTMLAttributes }) {
|
|
373
|
-
// The below 'a' tag should be replaced with 'nimble-anchor' once the below issue is fixed.
|
|
374
|
-
// https://github.com/ni/nimble/issues/1516
|
|
375
|
-
return ['a', HTMLAttributes];
|
|
376
|
-
}
|
|
377
|
-
});
|
|
280
|
+
initializeEditor() {
|
|
281
|
+
this.unbindEditorTransactionEvent();
|
|
282
|
+
this.unbindEditorUpdateEvent();
|
|
283
|
+
this.unbindNativeInputEvent();
|
|
284
|
+
this.tiptapEditor?.destroy();
|
|
285
|
+
this.tiptapEditor = createTiptapEditor(this.editor, this.configuration instanceof EditorConfiguration
|
|
286
|
+
? this.configuration.mentionExtensionConfig
|
|
287
|
+
: [], this.placeholder);
|
|
288
|
+
this.disableEditor();
|
|
289
|
+
this.bindEditorTransactionEvent();
|
|
290
|
+
this.bindEditorUpdateEvent();
|
|
291
|
+
this.stopNativeInputEventPropagation();
|
|
378
292
|
}
|
|
379
293
|
/**
|
|
380
294
|
* This function takes the Fragment from parseMarkdownToDOM function and return the serialized string using XMLSerializer
|
|
381
295
|
*/
|
|
382
296
|
getHtmlContent(markdown) {
|
|
383
|
-
const
|
|
384
|
-
return this.xmlSerializer.serializeToString(
|
|
297
|
+
const parseResult = RichTextMarkdownParser.parseMarkdownToDOM(markdown, this.configuration?.parserMentionConfig);
|
|
298
|
+
return this.xmlSerializer.serializeToString(parseResult.fragment);
|
|
385
299
|
}
|
|
386
300
|
/**
|
|
387
301
|
* Binding the "transaction" event to the editor allows continuous monitoring the events and updating the button state in response to
|
|
@@ -397,6 +311,9 @@ export class RichTextEditor extends FoundationElement {
|
|
|
397
311
|
this.tiptapEditor.off('transaction');
|
|
398
312
|
}
|
|
399
313
|
updateEditorButtonsState() {
|
|
314
|
+
if (!this.$fastController.isConnected) {
|
|
315
|
+
return;
|
|
316
|
+
}
|
|
400
317
|
const { extensionManager, state } = this.tiptapEditor;
|
|
401
318
|
const { extensions } = extensionManager;
|
|
402
319
|
const { selection } = state;
|
|
@@ -429,6 +346,11 @@ export class RichTextEditor extends FoundationElement {
|
|
|
429
346
|
this.queueUpdateScrollbarWidth();
|
|
430
347
|
});
|
|
431
348
|
}
|
|
349
|
+
disableEditor() {
|
|
350
|
+
this.tiptapEditor.setEditable(!this.disabled);
|
|
351
|
+
this.setEditorTabIndex();
|
|
352
|
+
this.editor.setAttribute('aria-disabled', this.disabled ? 'true' : 'false');
|
|
353
|
+
}
|
|
432
354
|
/**
|
|
433
355
|
* Stopping the native input event propagation emitted by the contenteditable element in the Tiptap
|
|
434
356
|
* since there is an issue (linked below) in ProseMirror where selecting the text and removing it
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/rich-text/editor/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/rich-text/editor/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { Editor } from '@tiptap/core';
|
|
2
|
+
import type { MentionExtensionConfiguration } from '../../models/mention-extension-configuration';
|
|
3
|
+
export declare function createTiptapEditor(editor: HTMLDivElement, mentionExtensionConfig: MentionExtensionConfiguration[], placeholder?: string): Editor;
|
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
import { Editor, mergeAttributes } from '@tiptap/core';
|
|
2
|
+
import Bold from '@tiptap/extension-bold';
|
|
3
|
+
import BulletList from '@tiptap/extension-bullet-list';
|
|
4
|
+
import Document from '@tiptap/extension-document';
|
|
5
|
+
import History from '@tiptap/extension-history';
|
|
6
|
+
import Italic from '@tiptap/extension-italic';
|
|
7
|
+
import Link from '@tiptap/extension-link';
|
|
8
|
+
import ListItem from '@tiptap/extension-list-item';
|
|
9
|
+
import OrderedList from '@tiptap/extension-ordered-list';
|
|
10
|
+
import Paragraph from '@tiptap/extension-paragraph';
|
|
11
|
+
import Placeholder from '@tiptap/extension-placeholder';
|
|
12
|
+
import Text from '@tiptap/extension-text';
|
|
13
|
+
import Mention from '@tiptap/extension-mention';
|
|
14
|
+
import HardBreak from '@tiptap/extension-hard-break';
|
|
15
|
+
import { Slice, Fragment } from 'prosemirror-model';
|
|
16
|
+
import { PluginKey } from 'prosemirror-state';
|
|
17
|
+
import { mentionPluginPrefix } from '../types';
|
|
18
|
+
import { anchorTag } from '../../../anchor';
|
|
19
|
+
const validAbsoluteLinkRegex = /^https?:\/\//i;
|
|
20
|
+
export function createTiptapEditor(editor, mentionExtensionConfig, placeholder) {
|
|
21
|
+
const customLink = createCustomLinkExtension();
|
|
22
|
+
const mentionExtensions = mentionExtensionConfig.map(config => createCustomMentionExtension(config));
|
|
23
|
+
/**
|
|
24
|
+
* For more information on the extensions for the supported formatting options, refer to the links below.
|
|
25
|
+
* Tiptap marks: https://tiptap.dev/api/marks
|
|
26
|
+
* Tiptap nodes: https://tiptap.dev/api/nodes
|
|
27
|
+
*/
|
|
28
|
+
const tipTapEditor = new Editor({
|
|
29
|
+
element: editor,
|
|
30
|
+
// The editor will detect markdown syntax for an input only for these items
|
|
31
|
+
// https://tiptap.dev/api/editor#enable-input-rules
|
|
32
|
+
enableInputRules: [BulletList, OrderedList],
|
|
33
|
+
// The editor will not detect markdown syntax when pasting content in any supported items
|
|
34
|
+
// Lists do not have any default paste rules, they have only input rules, so disabled paste rules
|
|
35
|
+
// https://tiptap.dev/api/editor#enable-paste-rules
|
|
36
|
+
enablePasteRules: false,
|
|
37
|
+
editorProps: {
|
|
38
|
+
// Validating whether the links in the pasted content belongs to the supported scheme (HTTPS/HTTP),
|
|
39
|
+
// and rendering it as a link in the editor. If not, rendering it as a plain text.
|
|
40
|
+
// Also, updating the link text content with its href as we support only the absolute link.
|
|
41
|
+
// `transformPasted` can be updated/removed when hyperlink support added
|
|
42
|
+
// See: https://github.com/ni/nimble/issues/1527
|
|
43
|
+
transformPasted
|
|
44
|
+
},
|
|
45
|
+
extensions: [
|
|
46
|
+
Document,
|
|
47
|
+
Paragraph,
|
|
48
|
+
Text,
|
|
49
|
+
BulletList,
|
|
50
|
+
OrderedList,
|
|
51
|
+
ListItem,
|
|
52
|
+
Bold,
|
|
53
|
+
Italic,
|
|
54
|
+
History,
|
|
55
|
+
Placeholder.configure({
|
|
56
|
+
placeholder,
|
|
57
|
+
showOnlyWhenEditable: false
|
|
58
|
+
}),
|
|
59
|
+
HardBreak,
|
|
60
|
+
customLink,
|
|
61
|
+
...mentionExtensions
|
|
62
|
+
]
|
|
63
|
+
});
|
|
64
|
+
/**
|
|
65
|
+
* @param slice contains the Fragment of the copied content. If the content is a link, the slice contains Text node with Link mark.
|
|
66
|
+
* ProseMirror reference for `transformPasted`: https://prosemirror.net/docs/ref/#view.EditorProps.transformPasted
|
|
67
|
+
*/
|
|
68
|
+
function transformPasted(slice) {
|
|
69
|
+
const modifiedFragment = updateLinkAndMentionNodes(tipTapEditor, slice.content);
|
|
70
|
+
return new Slice(modifiedFragment, slice.openStart, slice.openEnd);
|
|
71
|
+
}
|
|
72
|
+
return tipTapEditor;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Extending the default link mark schema defined in the TipTap.
|
|
76
|
+
*
|
|
77
|
+
* "excludes": https://prosemirror.net/docs/ref/#model.MarkSpec.excludes
|
|
78
|
+
* "inclusive": https://prosemirror.net/docs/ref/#model.MarkSpec.inclusive
|
|
79
|
+
* "parseHTML": https://tiptap.dev/guide/custom-extensions#parse-html
|
|
80
|
+
* "renderHTML": https://tiptap.dev/guide/custom-extensions/#render-html
|
|
81
|
+
*/
|
|
82
|
+
function createCustomLinkExtension() {
|
|
83
|
+
return Link.extend({
|
|
84
|
+
// Excludes can be removed/enabled when hyperlink support added
|
|
85
|
+
// See: https://github.com/ni/nimble/issues/1527
|
|
86
|
+
excludes: '_',
|
|
87
|
+
// Inclusive can be updated when hyperlink support added
|
|
88
|
+
// See: https://github.com/ni/nimble/issues/1527
|
|
89
|
+
inclusive: false,
|
|
90
|
+
parseHTML() {
|
|
91
|
+
return [
|
|
92
|
+
// To load the `nimble-anchor` from the HTML parsed content by markdown-parser as links in the Tiptap editor, the `parseHTML`
|
|
93
|
+
// of Link extension should return nimble `anchorTag`.
|
|
94
|
+
// This is because the link mark schema in `markdown-parser.ts` file uses `<nimble-anchor>` as anchor tag and not `<a>`.
|
|
95
|
+
{
|
|
96
|
+
tag: anchorTag
|
|
97
|
+
},
|
|
98
|
+
// `<a>` tag is added here to support when pasting a link from external source.
|
|
99
|
+
{
|
|
100
|
+
tag: 'a'
|
|
101
|
+
}
|
|
102
|
+
];
|
|
103
|
+
},
|
|
104
|
+
// HTMLAttribute cannot be in camelCase as we want to match it with the name in Tiptap
|
|
105
|
+
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
106
|
+
renderHTML({ HTMLAttributes }) {
|
|
107
|
+
// The below 'a' tag should be replaced with 'nimble-anchor' once the below issue is fixed.
|
|
108
|
+
// https://github.com/ni/nimble/issues/1516
|
|
109
|
+
return ['a', HTMLAttributes];
|
|
110
|
+
}
|
|
111
|
+
}).configure({
|
|
112
|
+
// HTMLAttribute cannot be in camelCase as we want to match it with the name in Tiptap
|
|
113
|
+
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
114
|
+
HTMLAttributes: {
|
|
115
|
+
rel: 'noopener noreferrer',
|
|
116
|
+
target: null
|
|
117
|
+
},
|
|
118
|
+
autolink: true,
|
|
119
|
+
openOnClick: false,
|
|
120
|
+
// linkOnPaste can be enabled when hyperlink support added
|
|
121
|
+
// See: https://github.com/ni/nimble/issues/1527
|
|
122
|
+
linkOnPaste: false,
|
|
123
|
+
validate: href => validAbsoluteLinkRegex.test(href)
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
function createCustomMentionExtension(config) {
|
|
127
|
+
return Mention.extend({
|
|
128
|
+
name: config.name,
|
|
129
|
+
parseHTML() {
|
|
130
|
+
return [
|
|
131
|
+
{
|
|
132
|
+
tag: config.viewElement
|
|
133
|
+
}
|
|
134
|
+
];
|
|
135
|
+
},
|
|
136
|
+
addAttributes() {
|
|
137
|
+
return {
|
|
138
|
+
href: {
|
|
139
|
+
default: null,
|
|
140
|
+
parseHTML: element => element.getAttribute('mention-href'),
|
|
141
|
+
renderHTML: attributes => {
|
|
142
|
+
return {
|
|
143
|
+
'mention-href': attributes.href
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
},
|
|
147
|
+
label: {
|
|
148
|
+
default: null,
|
|
149
|
+
parseHTML: element => element.getAttribute('mention-label'),
|
|
150
|
+
renderHTML: attributes => {
|
|
151
|
+
return {
|
|
152
|
+
'mention-label': attributes.label
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
};
|
|
157
|
+
},
|
|
158
|
+
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
159
|
+
renderHTML({ HTMLAttributes }) {
|
|
160
|
+
return [
|
|
161
|
+
config.viewElement,
|
|
162
|
+
mergeAttributes(this.options.HTMLAttributes, HTMLAttributes,
|
|
163
|
+
// disable-editing is a boolean attribute
|
|
164
|
+
{ 'disable-editing': '' })
|
|
165
|
+
];
|
|
166
|
+
}
|
|
167
|
+
}).configure({
|
|
168
|
+
suggestion: {
|
|
169
|
+
char: config.character,
|
|
170
|
+
decorationTag: config.viewElement,
|
|
171
|
+
pluginKey: new PluginKey(config.key),
|
|
172
|
+
allowSpaces: true,
|
|
173
|
+
render: () => {
|
|
174
|
+
return {
|
|
175
|
+
onStart: (props) => {
|
|
176
|
+
config.mentionUpdateEmitter(props.query);
|
|
177
|
+
},
|
|
178
|
+
onUpdate: (props) => {
|
|
179
|
+
config.mentionUpdateEmitter(props.query);
|
|
180
|
+
}
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* This method finds the Link mark in the pasted content and update its Text node.
|
|
188
|
+
* If there is no text node, pass the node's fragment recursively and updates only node containing Link mark.
|
|
189
|
+
* If the Text node does not contains Link mark, push the same node to `updatedNodes`.
|
|
190
|
+
*
|
|
191
|
+
* @param fragment Fragment containing the pasted content. [Fragment](https://prosemirror.net/docs/ref/#model.Fragment)
|
|
192
|
+
* @returns modified fragment from the `updatedNode` after updating the valid link text with its href value.
|
|
193
|
+
*/
|
|
194
|
+
function updateLinkAndMentionNodes(tiptapEditor, fragment) {
|
|
195
|
+
const updatedNodes = [];
|
|
196
|
+
fragment.forEach(node => {
|
|
197
|
+
if (node.isText && node.marks.length > 0) {
|
|
198
|
+
const linkMark = node.marks.find(mark => mark.type.name === 'link' && mark.attrs);
|
|
199
|
+
if (linkMark) {
|
|
200
|
+
// Checks if the link is valid link or not
|
|
201
|
+
// Needing to separately validate the link on paste is a workaround for a tiptap issue
|
|
202
|
+
// See: https://github.com/ni/nimble/issues/1527
|
|
203
|
+
if (validAbsoluteLinkRegex.test(linkMark.attrs.href)) {
|
|
204
|
+
// The below lines of code is responsible for updating the text content with its href value and creates a new updated text node.
|
|
205
|
+
// This code needs an update when the hyperlink support is added.
|
|
206
|
+
// See: https://github.com/ni/nimble/issues/1527
|
|
207
|
+
updatedNodes.push(tiptapEditor.schema.text(linkMark.attrs.href, node.marks));
|
|
208
|
+
}
|
|
209
|
+
else {
|
|
210
|
+
// If it is a invalid link, creates a new Text node with the same text content and without a Link mark.
|
|
211
|
+
updatedNodes.push(tiptapEditor.schema.text(node.textContent, linkMark.removeFromSet(node.marks)));
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
else {
|
|
215
|
+
updatedNodes.push(node);
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
else if (node.type.name.startsWith(mentionPluginPrefix)) {
|
|
219
|
+
updatedNodes.push(tiptapEditor.schema.text(node.attrs.label));
|
|
220
|
+
}
|
|
221
|
+
else {
|
|
222
|
+
const updatedContent = updateLinkAndMentionNodes(tiptapEditor, node.content);
|
|
223
|
+
updatedNodes.push(node.copy(updatedContent));
|
|
224
|
+
}
|
|
225
|
+
});
|
|
226
|
+
return Fragment.fromArray(updatedNodes);
|
|
227
|
+
}
|
|
228
|
+
//# sourceMappingURL=create-tiptap-editor.js.map
|