@webiny/lexical-nodes 5.38.0-beta.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.
Files changed (72) hide show
  1. package/FontColorNode.d.ts +43 -0
  2. package/FontColorNode.js +125 -0
  3. package/FontColorNode.js.map +1 -0
  4. package/HeadingNode.d.ts +32 -0
  5. package/HeadingNode.js +193 -0
  6. package/HeadingNode.js.map +1 -0
  7. package/ImageNode.d.ts +58 -0
  8. package/ImageNode.js +217 -0
  9. package/ImageNode.js.map +1 -0
  10. package/LICENSE +21 -0
  11. package/LinkNode.d.ts +106 -0
  12. package/LinkNode.js +531 -0
  13. package/LinkNode.js.map +1 -0
  14. package/ListItemNode.d.ts +44 -0
  15. package/ListItemNode.js +442 -0
  16. package/ListItemNode.js.map +1 -0
  17. package/ListNode.d.ts +42 -0
  18. package/ListNode.js +290 -0
  19. package/ListNode.js.map +1 -0
  20. package/ParagraphNode.d.ts +31 -0
  21. package/ParagraphNode.js +220 -0
  22. package/ParagraphNode.js.map +1 -0
  23. package/QuoteNode.d.ts +33 -0
  24. package/QuoteNode.js +227 -0
  25. package/QuoteNode.js.map +1 -0
  26. package/README.md +6 -0
  27. package/TypographyNode.d.ts +41 -0
  28. package/TypographyNode.js +153 -0
  29. package/TypographyNode.js.map +1 -0
  30. package/components/ImageNode/ContentEditable.css +22 -0
  31. package/components/ImageNode/ContentEditable.d.ts +12 -0
  32. package/components/ImageNode/ContentEditable.js +26 -0
  33. package/components/ImageNode/ContentEditable.js.map +1 -0
  34. package/components/ImageNode/ImageComponent.css +43 -0
  35. package/components/ImageNode/ImageComponent.d.ts +16 -0
  36. package/components/ImageNode/ImageComponent.js +254 -0
  37. package/components/ImageNode/ImageComponent.js.map +1 -0
  38. package/components/ImageNode/ImageResizer.d.ts +26 -0
  39. package/components/ImageNode/ImageResizer.js +215 -0
  40. package/components/ImageNode/ImageResizer.js.map +1 -0
  41. package/components/ImageNode/Placeholder.css +20 -0
  42. package/components/ImageNode/Placeholder.d.ts +15 -0
  43. package/components/ImageNode/Placeholder.js +30 -0
  44. package/components/ImageNode/Placeholder.js.map +1 -0
  45. package/components/ImageNode/SharedHistoryContext.d.ts +11 -0
  46. package/components/ImageNode/SharedHistoryContext.js +28 -0
  47. package/components/ImageNode/SharedHistoryContext.js.map +1 -0
  48. package/index.d.ts +22 -0
  49. package/index.js +226 -0
  50. package/index.js.map +1 -0
  51. package/package.json +32 -0
  52. package/types.d.ts +15 -0
  53. package/types.js +7 -0
  54. package/types.js.map +1 -0
  55. package/utils/clearNodeFormating.d.ts +2 -0
  56. package/utils/clearNodeFormating.js +30 -0
  57. package/utils/clearNodeFormating.js.map +1 -0
  58. package/utils/formatList.d.ts +19 -0
  59. package/utils/formatList.js +449 -0
  60. package/utils/formatList.js.map +1 -0
  61. package/utils/formatToHeading.d.ts +3 -0
  62. package/utils/formatToHeading.js +27 -0
  63. package/utils/formatToHeading.js.map +1 -0
  64. package/utils/formatToParagraph.d.ts +2 -0
  65. package/utils/formatToParagraph.js +22 -0
  66. package/utils/formatToParagraph.js.map +1 -0
  67. package/utils/formatToQuote.d.ts +2 -0
  68. package/utils/formatToQuote.js +27 -0
  69. package/utils/formatToQuote.js.map +1 -0
  70. package/utils/listNode.d.ts +11 -0
  71. package/utils/listNode.js +109 -0
  72. package/utils/listNode.js.map +1 -0
package/LinkNode.js ADDED
@@ -0,0 +1,531 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.$createAutoLinkNode = $createAutoLinkNode;
8
+ exports.$createLinkNode = $createLinkNode;
9
+ exports.$isAutoLinkNode = $isAutoLinkNode;
10
+ exports.$isLinkNode = $isLinkNode;
11
+ exports.TOGGLE_LINK_COMMAND = exports.LinkNode = exports.AutoLinkNode = void 0;
12
+ exports.toggleLink = toggleLink;
13
+ var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
14
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
15
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
16
+ var _get2 = _interopRequireDefault(require("@babel/runtime/helpers/get"));
17
+ var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
18
+ var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
19
+ var _createSuper2 = _interopRequireDefault(require("@babel/runtime/helpers/createSuper"));
20
+ var _utils = require("@lexical/utils");
21
+ var _lexical = require("lexical");
22
+ /** @module @lexical/link */
23
+ /**
24
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
25
+ *
26
+ * This source code is licensed under the MIT license found in the
27
+ * LICENSE file in the root directory of this source tree.
28
+ *
29
+ */
30
+
31
+ var SUPPORTED_URL_PROTOCOLS = new Set(["http:", "https:", "mailto:", "sms:", "tel:"]);
32
+
33
+ /** @noInheritDoc */
34
+ var LinkNode = /*#__PURE__*/function (_ElementNode) {
35
+ (0, _inherits2.default)(LinkNode, _ElementNode);
36
+ var _super = (0, _createSuper2.default)(LinkNode);
37
+ function LinkNode(url) {
38
+ var _this;
39
+ var attributes = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
40
+ var key = arguments.length > 2 ? arguments[2] : undefined;
41
+ (0, _classCallCheck2.default)(this, LinkNode);
42
+ _this = _super.call(this, key);
43
+ var _attributes$target = attributes.target,
44
+ target = _attributes$target === void 0 ? null : _attributes$target,
45
+ _attributes$rel = attributes.rel,
46
+ rel = _attributes$rel === void 0 ? null : _attributes$rel,
47
+ _attributes$title = attributes.title,
48
+ title = _attributes$title === void 0 ? null : _attributes$title,
49
+ _attributes$alt = attributes.alt,
50
+ alt = _attributes$alt === void 0 ? null : _attributes$alt;
51
+ _this.__url = url;
52
+ _this.__target = target;
53
+ _this.__rel = rel;
54
+ _this.__title = title;
55
+ _this.__alt = alt;
56
+ return _this;
57
+ }
58
+ (0, _createClass2.default)(LinkNode, [{
59
+ key: "createDOM",
60
+ value: function createDOM(config) {
61
+ var element = document.createElement("a");
62
+ element.href = this.sanitizeUrl(this.__url);
63
+ if (this.__target !== null) {
64
+ element.target = this.__target;
65
+ }
66
+ if (this.__rel !== null) {
67
+ element.rel = this.__rel;
68
+ }
69
+ if (this.__title !== null) {
70
+ element.title = this.__title;
71
+ }
72
+ if (this.__alt !== null) {
73
+ element.alt = this.__alt;
74
+ }
75
+ (0, _utils.addClassNamesToElement)(element, config.theme.link);
76
+ return element;
77
+ }
78
+ }, {
79
+ key: "updateDOM",
80
+ value: function updateDOM(prevNode, anchor) {
81
+ var url = this.__url;
82
+ var target = this.__target;
83
+ var rel = this.__rel;
84
+ var title = this.__title;
85
+ var alt = this.__alt;
86
+ if (url !== prevNode.__url) {
87
+ anchor.href = url;
88
+ }
89
+ if (target !== prevNode.__target) {
90
+ if (target) {
91
+ anchor.target = target;
92
+ } else {
93
+ anchor.removeAttribute("target");
94
+ }
95
+ }
96
+ if (rel !== prevNode.__rel) {
97
+ if (rel) {
98
+ anchor.rel = rel;
99
+ } else {
100
+ anchor.removeAttribute("rel");
101
+ }
102
+ }
103
+ if (title !== prevNode.__title) {
104
+ if (title) {
105
+ anchor.title = title;
106
+ } else {
107
+ anchor.removeAttribute("title");
108
+ }
109
+ }
110
+ if (alt !== prevNode.__alt) {
111
+ if (alt) {
112
+ anchor.alt = alt;
113
+ } else {
114
+ anchor.removeAttribute("alt");
115
+ }
116
+ }
117
+ return false;
118
+ }
119
+ }, {
120
+ key: "sanitizeUrl",
121
+ value: function sanitizeUrl(url) {
122
+ try {
123
+ var parsedUrl = new URL(url);
124
+ // eslint-disable-next-line no-script-url
125
+ if (!SUPPORTED_URL_PROTOCOLS.has(parsedUrl.protocol)) {
126
+ return "about:blank";
127
+ }
128
+ } catch (_unused) {
129
+ return url;
130
+ }
131
+ return url;
132
+ }
133
+ }, {
134
+ key: "exportJSON",
135
+ value: function exportJSON() {
136
+ return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, (0, _get2.default)((0, _getPrototypeOf2.default)(LinkNode.prototype), "exportJSON", this).call(this)), {}, {
137
+ rel: this.getRel(),
138
+ target: this.getTarget(),
139
+ title: this.getTitle(),
140
+ type: "link",
141
+ url: this.getURL(),
142
+ version: 1
143
+ });
144
+ }
145
+ }, {
146
+ key: "getURL",
147
+ value: function getURL() {
148
+ return this.getLatest().__url;
149
+ }
150
+ }, {
151
+ key: "setURL",
152
+ value: function setURL(url) {
153
+ var writable = this.getWritable();
154
+ writable.__url = url;
155
+ }
156
+ }, {
157
+ key: "getTarget",
158
+ value: function getTarget() {
159
+ return this.getLatest().__target;
160
+ }
161
+ }, {
162
+ key: "setTarget",
163
+ value: function setTarget(target) {
164
+ var writable = this.getWritable();
165
+ writable.__target = target;
166
+ }
167
+ }, {
168
+ key: "getRel",
169
+ value: function getRel() {
170
+ return this.getLatest().__rel;
171
+ }
172
+ }, {
173
+ key: "setRel",
174
+ value: function setRel(rel) {
175
+ var writable = this.getWritable();
176
+ writable.__rel = rel;
177
+ }
178
+ }, {
179
+ key: "getTitle",
180
+ value: function getTitle() {
181
+ return this.getLatest().__title;
182
+ }
183
+ }, {
184
+ key: "setTitle",
185
+ value: function setTitle(title) {
186
+ var writable = this.getWritable();
187
+ writable.__title = title;
188
+ }
189
+ }, {
190
+ key: "insertNewAfter",
191
+ value: function insertNewAfter(selection) {
192
+ var restoreSelection = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
193
+ var element = this.getParentOrThrow().insertNewAfter(selection, restoreSelection);
194
+ if ((0, _lexical.$isElementNode)(element)) {
195
+ var linkNode = $createLinkNode(this.__url, {
196
+ rel: this.__rel,
197
+ target: this.__target,
198
+ title: this.__title
199
+ });
200
+ element.append(linkNode);
201
+ return linkNode;
202
+ }
203
+ return null;
204
+ }
205
+ }, {
206
+ key: "canInsertTextBefore",
207
+ value: function canInsertTextBefore() {
208
+ return false;
209
+ }
210
+ }, {
211
+ key: "canInsertTextAfter",
212
+ value: function canInsertTextAfter() {
213
+ return false;
214
+ }
215
+ }, {
216
+ key: "canBeEmpty",
217
+ value: function canBeEmpty() {
218
+ return false;
219
+ }
220
+ }, {
221
+ key: "isInline",
222
+ value: function isInline() {
223
+ return true;
224
+ }
225
+ }, {
226
+ key: "extractWithChild",
227
+ value: function extractWithChild(_, selection) {
228
+ if (!(0, _lexical.$isRangeSelection)(selection)) {
229
+ return false;
230
+ }
231
+ var anchorNode = selection.anchor.getNode();
232
+ var focusNode = selection.focus.getNode();
233
+ return this.isParentOf(anchorNode) && this.isParentOf(focusNode) && selection.getTextContent().length > 0;
234
+ }
235
+ }], [{
236
+ key: "getType",
237
+ value: /** @internal */
238
+
239
+ /** @internal */
240
+
241
+ /** @internal */
242
+
243
+ /** @internal */
244
+
245
+ /** @internal */
246
+
247
+ function getType() {
248
+ return "link";
249
+ }
250
+ }, {
251
+ key: "clone",
252
+ value: function clone(node) {
253
+ return new LinkNode(node.__url, {
254
+ rel: node.__rel,
255
+ target: node.__target,
256
+ title: node.__title,
257
+ alt: node.__alt
258
+ }, node.__key);
259
+ }
260
+ }, {
261
+ key: "importDOM",
262
+ value: function importDOM() {
263
+ return {
264
+ a: function a() {
265
+ return {
266
+ conversion: convertAnchorElement,
267
+ priority: 1
268
+ };
269
+ }
270
+ };
271
+ }
272
+ }, {
273
+ key: "importJSON",
274
+ value: function importJSON(serializedNode) {
275
+ var node = $createLinkNode(serializedNode.url, {
276
+ rel: serializedNode.rel,
277
+ target: serializedNode.target,
278
+ title: serializedNode.title
279
+ });
280
+ node.setFormat(serializedNode.format);
281
+ node.setIndent(serializedNode.indent);
282
+ node.setDirection(serializedNode.direction);
283
+ return node;
284
+ }
285
+ }]);
286
+ return LinkNode;
287
+ }(_lexical.ElementNode);
288
+ exports.LinkNode = LinkNode;
289
+ function convertAnchorElement(domNode) {
290
+ var node = null;
291
+ if ((0, _utils.isHTMLAnchorElement)(domNode)) {
292
+ var content = domNode.textContent;
293
+ if (content !== null && content !== "" || domNode.children.length > 0) {
294
+ node = $createLinkNode(domNode.getAttribute("href") || "", {
295
+ rel: domNode.getAttribute("rel"),
296
+ target: domNode.getAttribute("target"),
297
+ title: domNode.getAttribute("title"),
298
+ alt: domNode.getAttribute("alt")
299
+ });
300
+ }
301
+ }
302
+ return {
303
+ node: node
304
+ };
305
+ }
306
+
307
+ /**
308
+ * Takes a URL and creates a LinkNode.
309
+ * @param url - The URL the LinkNode should direct to.
310
+ * @param attributes - Optional HTML a tag attributes { target, rel, title }
311
+ * @returns The LinkNode.
312
+ */
313
+ function $createLinkNode(url, attributes) {
314
+ return (0, _lexical.$applyNodeReplacement)(new LinkNode(url, attributes));
315
+ }
316
+
317
+ /**
318
+ * Determines if node is a LinkNode.
319
+ * @param node - The node to be checked.
320
+ * @returns true if node is a LinkNode, false otherwise.
321
+ */
322
+ function $isLinkNode(node) {
323
+ return node instanceof LinkNode;
324
+ }
325
+ // Custom node type to override `canInsertTextAfter` that will
326
+ // allow typing within the link
327
+ var AutoLinkNode = /*#__PURE__*/function (_LinkNode) {
328
+ (0, _inherits2.default)(AutoLinkNode, _LinkNode);
329
+ var _super2 = (0, _createSuper2.default)(AutoLinkNode);
330
+ function AutoLinkNode() {
331
+ (0, _classCallCheck2.default)(this, AutoLinkNode);
332
+ return _super2.apply(this, arguments);
333
+ }
334
+ (0, _createClass2.default)(AutoLinkNode, [{
335
+ key: "exportJSON",
336
+ value: function exportJSON() {
337
+ return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, (0, _get2.default)((0, _getPrototypeOf2.default)(AutoLinkNode.prototype), "exportJSON", this).call(this)), {}, {
338
+ type: "autolink",
339
+ version: 1
340
+ });
341
+ }
342
+ }, {
343
+ key: "insertNewAfter",
344
+ value: function insertNewAfter(selection) {
345
+ var restoreSelection = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
346
+ var element = this.getParentOrThrow().insertNewAfter(selection, restoreSelection);
347
+ if ((0, _lexical.$isElementNode)(element)) {
348
+ var linkNode = $createAutoLinkNode(this.__url, {
349
+ rel: this._rel,
350
+ target: this.__target,
351
+ title: this.__title
352
+ });
353
+ element.append(linkNode);
354
+ return linkNode;
355
+ }
356
+ return null;
357
+ }
358
+ }], [{
359
+ key: "getType",
360
+ value: function getType() {
361
+ return "autolink";
362
+ }
363
+ }, {
364
+ key: "clone",
365
+ value: function clone(node) {
366
+ return new AutoLinkNode(node.__url, {
367
+ rel: node.__rel,
368
+ target: node.__target,
369
+ title: node.__title
370
+ }, node.__key);
371
+ }
372
+ }, {
373
+ key: "importJSON",
374
+ value: function importJSON(serializedNode) {
375
+ var node = $createAutoLinkNode(serializedNode.url, {
376
+ rel: serializedNode.rel,
377
+ target: serializedNode.target,
378
+ title: serializedNode.title
379
+ });
380
+ node.setFormat(serializedNode.format);
381
+ node.setIndent(serializedNode.indent);
382
+ node.setDirection(serializedNode.direction);
383
+ return node;
384
+ }
385
+ }, {
386
+ key: "importDOM",
387
+ value: function importDOM() {
388
+ // TODO: Should link node should handle the import over autolink?
389
+ return null;
390
+ }
391
+ }]);
392
+ return AutoLinkNode;
393
+ }(LinkNode);
394
+ /**
395
+ * Takes a URL and creates an AutoLinkNode. AutoLinkNodes are generally automatically generated
396
+ * during typing, which is especially useful when a button to generate a LinkNode is not practical.
397
+ * @param url - The URL the LinkNode should direct to.
398
+ * @param attributes - Optional HTML a tag attributes. { target, rel, title }
399
+ * @returns The LinkNode.
400
+ */
401
+ exports.AutoLinkNode = AutoLinkNode;
402
+ function $createAutoLinkNode(url, attributes) {
403
+ return (0, _lexical.$applyNodeReplacement)(new AutoLinkNode(url, attributes));
404
+ }
405
+
406
+ /**
407
+ * Determines if node is an AutoLinkNode.
408
+ * @param node - The node to be checked.
409
+ * @returns true if node is an AutoLinkNode, false otherwise.
410
+ */
411
+ function $isAutoLinkNode(node) {
412
+ return node instanceof AutoLinkNode;
413
+ }
414
+ var TOGGLE_LINK_COMMAND = (0, _lexical.createCommand)("TOGGLE_LINK_COMMAND");
415
+
416
+ /**
417
+ * Generates or updates a LinkNode. It can also delete a LinkNode if the URL is null,
418
+ * but saves any children and brings them up to the parent node.
419
+ * @param url - The URL the link directs to.
420
+ * @param attributes - Optional HTML a tag attributes. { target, rel, title }
421
+ */
422
+ exports.TOGGLE_LINK_COMMAND = TOGGLE_LINK_COMMAND;
423
+ function toggleLink(url) {
424
+ var attributes = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
425
+ var target = attributes.target,
426
+ title = attributes.title;
427
+ var rel = attributes.rel === undefined ? "noreferrer" : attributes.rel;
428
+ var selection = (0, _lexical.$getSelection)();
429
+ if (!(0, _lexical.$isRangeSelection)(selection)) {
430
+ return;
431
+ }
432
+ var nodes = selection.extract();
433
+ if (url === null) {
434
+ // Remove LinkNodes
435
+ nodes.forEach(function (node) {
436
+ var parent = node.getParent();
437
+ if ($isLinkNode(parent)) {
438
+ var children = parent.getChildren();
439
+ for (var i = 0; i < children.length; i++) {
440
+ parent.insertBefore(children[i]);
441
+ }
442
+ parent.remove();
443
+ }
444
+ });
445
+ } else {
446
+ // Add or merge LinkNodes
447
+ if (nodes.length === 1) {
448
+ var firstNode = nodes[0];
449
+ // if the first node is a LinkNode or if its
450
+ // parent is a LinkNode, we update the URL, target and rel.
451
+ var _linkNode = $isLinkNode(firstNode) ? firstNode : $getLinkAncestor(firstNode);
452
+ if (_linkNode !== null) {
453
+ _linkNode.setURL(url);
454
+ if (target !== undefined) {
455
+ _linkNode.setTarget(target);
456
+ }
457
+ if (rel !== null) {
458
+ _linkNode.setRel(rel);
459
+ }
460
+ if (title !== undefined) {
461
+ _linkNode.setTitle(title);
462
+ }
463
+ return;
464
+ }
465
+ }
466
+ var prevParent = null;
467
+ var linkNode = null;
468
+ nodes.forEach(function (node) {
469
+ var parent = node.getParent();
470
+ if (parent === linkNode || parent === null || (0, _lexical.$isElementNode)(node) && !node.isInline()) {
471
+ return;
472
+ }
473
+ if ($isLinkNode(parent)) {
474
+ linkNode = parent;
475
+ parent.setURL(url);
476
+ if (target !== undefined) {
477
+ parent.setTarget(target);
478
+ }
479
+ if (rel !== null) {
480
+ linkNode.setRel(rel);
481
+ }
482
+ if (title !== undefined) {
483
+ linkNode.setTitle(title);
484
+ }
485
+ return;
486
+ }
487
+ if (!parent.is(prevParent)) {
488
+ prevParent = parent;
489
+ linkNode = $createLinkNode(url, {
490
+ rel: rel,
491
+ target: target
492
+ });
493
+ if ($isLinkNode(parent)) {
494
+ if (node.getPreviousSibling() === null) {
495
+ parent.insertBefore(linkNode);
496
+ } else {
497
+ parent.insertAfter(linkNode);
498
+ }
499
+ } else {
500
+ node.insertBefore(linkNode);
501
+ }
502
+ }
503
+ if ($isLinkNode(node)) {
504
+ if (node.is(linkNode)) {
505
+ return;
506
+ }
507
+ if (linkNode !== null) {
508
+ var children = node.getChildren();
509
+ for (var i = 0; i < children.length; i++) {
510
+ linkNode.append(children[i]);
511
+ }
512
+ }
513
+ node.remove();
514
+ return;
515
+ }
516
+ if (linkNode !== null) {
517
+ linkNode.append(node);
518
+ }
519
+ });
520
+ }
521
+ }
522
+ function $getLinkAncestor(node) {
523
+ return $getAncestor(node, $isLinkNode);
524
+ }
525
+ function $getAncestor(node, predicate) {
526
+ var parent = node;
527
+ while (parent !== null && (parent = parent.getParent()) !== null && !predicate(parent)) {}
528
+ return parent;
529
+ }
530
+
531
+ //# sourceMappingURL=LinkNode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_utils","require","_lexical","SUPPORTED_URL_PROTOCOLS","Set","LinkNode","_ElementNode","_inherits2","default","_super","_createSuper2","url","_this","attributes","arguments","length","undefined","key","_classCallCheck2","call","_attributes$target","target","_attributes$rel","rel","_attributes$title","title","_attributes$alt","alt","__url","__target","__rel","__title","__alt","_createClass2","value","createDOM","config","element","document","createElement","href","sanitizeUrl","addClassNamesToElement","theme","link","updateDOM","prevNode","anchor","removeAttribute","parsedUrl","URL","has","protocol","_unused","exportJSON","_objectSpread2","_get2","_getPrototypeOf2","prototype","getRel","getTarget","getTitle","type","getURL","version","getLatest","setURL","writable","getWritable","setTarget","setRel","setTitle","insertNewAfter","selection","restoreSelection","getParentOrThrow","$isElementNode","linkNode","$createLinkNode","append","canInsertTextBefore","canInsertTextAfter","canBeEmpty","isInline","extractWithChild","_","$isRangeSelection","anchorNode","getNode","focusNode","focus","isParentOf","getTextContent","getType","clone","node","__key","importDOM","a","conversion","convertAnchorElement","priority","importJSON","serializedNode","setFormat","format","setIndent","indent","setDirection","direction","ElementNode","exports","domNode","isHTMLAnchorElement","content","textContent","children","getAttribute","$applyNodeReplacement","$isLinkNode","AutoLinkNode","_LinkNode","_super2","apply","$createAutoLinkNode","_rel","$isAutoLinkNode","TOGGLE_LINK_COMMAND","createCommand","toggleLink","$getSelection","nodes","extract","forEach","parent","getParent","getChildren","i","insertBefore","remove","firstNode","$getLinkAncestor","prevParent","is","getPreviousSibling","insertAfter","$getAncestor","predicate"],"sources":["LinkNode.ts"],"sourcesContent":["/** @module @lexical/link */\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\nimport type {\n DOMConversionMap,\n DOMConversionOutput,\n EditorConfig,\n GridSelection,\n LexicalCommand,\n LexicalNode,\n NodeKey,\n NodeSelection,\n RangeSelection,\n SerializedElementNode\n} from \"lexical\";\n\nimport { addClassNamesToElement, isHTMLAnchorElement } from \"@lexical/utils\";\nimport {\n $applyNodeReplacement,\n $getSelection,\n $isElementNode,\n $isRangeSelection,\n createCommand,\n ElementNode,\n Spread\n} from \"lexical\";\n\nexport type LinkAttributes = {\n rel?: null | string;\n target?: null | string;\n title?: null | string;\n alt?: null | string;\n};\n\ndeclare global {\n interface HTMLAnchorElement {\n alt?: string;\n }\n}\n\nexport type SerializedLinkNode = Spread<\n {\n url: string;\n },\n Spread<LinkAttributes, SerializedElementNode>\n>;\n\nconst SUPPORTED_URL_PROTOCOLS = new Set([\"http:\", \"https:\", \"mailto:\", \"sms:\", \"tel:\"]);\n\n/** @noInheritDoc */\nexport class LinkNode extends ElementNode {\n /** @internal */\n __url: string;\n /** @internal */\n __target: null | string;\n /** @internal */\n __rel: null | string;\n /** @internal */\n __title: null | string;\n /** @internal */\n __alt: null | string;\n\n static override getType(): string {\n return \"link\";\n }\n\n static override clone(node: LinkNode): LinkNode {\n return new LinkNode(\n node.__url,\n { rel: node.__rel, target: node.__target, title: node.__title, alt: node.__alt },\n node.__key\n );\n }\n\n constructor(url: string, attributes: LinkAttributes = {}, key?: NodeKey) {\n super(key);\n const { target = null, rel = null, title = null, alt = null } = attributes;\n this.__url = url;\n this.__target = target;\n this.__rel = rel;\n this.__title = title;\n this.__alt = alt;\n }\n\n override createDOM(config: EditorConfig): HTMLAnchorElement {\n const element = document.createElement(\"a\") as HTMLAnchorElement;\n element.href = this.sanitizeUrl(this.__url);\n if (this.__target !== null) {\n element.target = this.__target;\n }\n if (this.__rel !== null) {\n element.rel = this.__rel;\n }\n if (this.__title !== null) {\n element.title = this.__title;\n }\n if (this.__alt !== null) {\n element.alt = this.__alt;\n }\n addClassNamesToElement(element, config.theme.link);\n return element;\n }\n\n override updateDOM(prevNode: LinkNode, anchor: HTMLAnchorElement): boolean {\n const url = this.__url;\n const target = this.__target;\n const rel = this.__rel;\n const title = this.__title;\n const alt = this.__alt;\n\n if (url !== prevNode.__url) {\n anchor.href = url;\n }\n\n if (target !== prevNode.__target) {\n if (target) {\n anchor.target = target;\n } else {\n anchor.removeAttribute(\"target\");\n }\n }\n\n if (rel !== prevNode.__rel) {\n if (rel) {\n anchor.rel = rel;\n } else {\n anchor.removeAttribute(\"rel\");\n }\n }\n\n if (title !== prevNode.__title) {\n if (title) {\n anchor.title = title;\n } else {\n anchor.removeAttribute(\"title\");\n }\n }\n\n if (alt !== prevNode.__alt) {\n if (alt) {\n anchor.alt = alt;\n } else {\n anchor.removeAttribute(\"alt\");\n }\n }\n\n return false;\n }\n\n static importDOM(): DOMConversionMap | null {\n return {\n a: () => ({\n conversion: convertAnchorElement,\n priority: 1\n })\n };\n }\n\n static override importJSON(\n serializedNode: SerializedLinkNode | SerializedAutoLinkNode\n ): LinkNode {\n const node = $createLinkNode(serializedNode.url, {\n rel: serializedNode.rel,\n target: serializedNode.target,\n title: serializedNode.title\n });\n node.setFormat(serializedNode.format);\n node.setIndent(serializedNode.indent);\n node.setDirection(serializedNode.direction);\n return node;\n }\n\n sanitizeUrl(url: string): string {\n try {\n const parsedUrl = new URL(url);\n // eslint-disable-next-line no-script-url\n if (!SUPPORTED_URL_PROTOCOLS.has(parsedUrl.protocol)) {\n return \"about:blank\";\n }\n } catch {\n return url;\n }\n return url;\n }\n\n override exportJSON(): SerializedLinkNode | SerializedAutoLinkNode {\n return {\n ...super.exportJSON(),\n rel: this.getRel(),\n target: this.getTarget(),\n title: this.getTitle(),\n type: \"link\",\n url: this.getURL(),\n version: 1\n };\n }\n\n getURL(): string {\n return this.getLatest().__url;\n }\n\n setURL(url: string): void {\n const writable = this.getWritable();\n writable.__url = url;\n }\n\n getTarget(): null | string {\n return this.getLatest().__target;\n }\n\n setTarget(target: null | string): void {\n const writable = this.getWritable();\n writable.__target = target;\n }\n\n getRel(): null | string {\n return this.getLatest().__rel;\n }\n\n setRel(rel: null | string): void {\n const writable = this.getWritable();\n writable.__rel = rel;\n }\n\n getTitle(): null | string {\n return this.getLatest().__title;\n }\n\n setTitle(title: null | string): void {\n const writable = this.getWritable();\n writable.__title = title;\n }\n\n override insertNewAfter(\n selection: RangeSelection,\n restoreSelection = true\n ): null | ElementNode {\n const element = this.getParentOrThrow().insertNewAfter(selection, restoreSelection);\n if ($isElementNode(element)) {\n const linkNode = $createLinkNode(this.__url, {\n rel: this.__rel,\n target: this.__target,\n title: this.__title\n });\n element.append(linkNode);\n return linkNode;\n }\n return null;\n }\n\n override canInsertTextBefore(): false {\n return false;\n }\n\n override canInsertTextAfter(): false {\n return false;\n }\n\n override canBeEmpty(): false {\n return false;\n }\n\n override isInline(): true {\n return true;\n }\n\n override extractWithChild(\n _: LexicalNode,\n selection: RangeSelection | NodeSelection | GridSelection\n ): boolean {\n if (!$isRangeSelection(selection)) {\n return false;\n }\n\n const anchorNode = selection.anchor.getNode();\n const focusNode = selection.focus.getNode();\n\n return (\n this.isParentOf(anchorNode) &&\n this.isParentOf(focusNode) &&\n selection.getTextContent().length > 0\n );\n }\n}\n\nfunction convertAnchorElement(domNode: Node): DOMConversionOutput {\n let node = null;\n if (isHTMLAnchorElement(domNode)) {\n const content = domNode.textContent;\n if ((content !== null && content !== \"\") || domNode.children.length > 0) {\n node = $createLinkNode(domNode.getAttribute(\"href\") || \"\", {\n rel: domNode.getAttribute(\"rel\"),\n target: domNode.getAttribute(\"target\"),\n title: domNode.getAttribute(\"title\"),\n alt: domNode.getAttribute(\"alt\")\n });\n }\n }\n return { node };\n}\n\n/**\n * Takes a URL and creates a LinkNode.\n * @param url - The URL the LinkNode should direct to.\n * @param attributes - Optional HTML a tag attributes { target, rel, title }\n * @returns The LinkNode.\n */\nexport function $createLinkNode(url: string, attributes?: LinkAttributes): LinkNode {\n return $applyNodeReplacement(new LinkNode(url, attributes));\n}\n\n/**\n * Determines if node is a LinkNode.\n * @param node - The node to be checked.\n * @returns true if node is a LinkNode, false otherwise.\n */\nexport function $isLinkNode(node: LexicalNode | null | undefined): node is LinkNode {\n return node instanceof LinkNode;\n}\n\nexport type SerializedAutoLinkNode = SerializedLinkNode;\n\n// Custom node type to override `canInsertTextAfter` that will\n// allow typing within the link\nexport class AutoLinkNode extends LinkNode {\n static override getType(): string {\n return \"autolink\";\n }\n\n static override clone(node: AutoLinkNode): AutoLinkNode {\n return new AutoLinkNode(\n node.__url,\n { rel: node.__rel, target: node.__target, title: node.__title },\n node.__key\n );\n }\n\n static override importJSON(serializedNode: SerializedAutoLinkNode): AutoLinkNode {\n const node = $createAutoLinkNode(serializedNode.url, {\n rel: serializedNode.rel,\n target: serializedNode.target,\n title: serializedNode.title\n });\n node.setFormat(serializedNode.format);\n node.setIndent(serializedNode.indent);\n node.setDirection(serializedNode.direction);\n return node;\n }\n\n static override importDOM(): null {\n // TODO: Should link node should handle the import over autolink?\n return null;\n }\n\n override exportJSON(): SerializedAutoLinkNode {\n return {\n ...super.exportJSON(),\n type: \"autolink\",\n version: 1\n };\n }\n\n override insertNewAfter(\n selection: RangeSelection,\n restoreSelection = true\n ): null | ElementNode {\n const element = this.getParentOrThrow().insertNewAfter(selection, restoreSelection);\n if ($isElementNode(element)) {\n const linkNode = $createAutoLinkNode(this.__url, {\n rel: this._rel,\n target: this.__target,\n title: this.__title\n });\n element.append(linkNode);\n return linkNode;\n }\n return null;\n }\n}\n\n/**\n * Takes a URL and creates an AutoLinkNode. AutoLinkNodes are generally automatically generated\n * during typing, which is especially useful when a button to generate a LinkNode is not practical.\n * @param url - The URL the LinkNode should direct to.\n * @param attributes - Optional HTML a tag attributes. { target, rel, title }\n * @returns The LinkNode.\n */\nexport function $createAutoLinkNode(url: string, attributes?: LinkAttributes): AutoLinkNode {\n return $applyNodeReplacement(new AutoLinkNode(url, attributes));\n}\n\n/**\n * Determines if node is an AutoLinkNode.\n * @param node - The node to be checked.\n * @returns true if node is an AutoLinkNode, false otherwise.\n */\nexport function $isAutoLinkNode(node: LexicalNode | null | undefined): node is AutoLinkNode {\n return node instanceof AutoLinkNode;\n}\n\nexport const TOGGLE_LINK_COMMAND: LexicalCommand<\n string | ({ url: string } & LinkAttributes) | null\n> = createCommand(\"TOGGLE_LINK_COMMAND\");\n\n/**\n * Generates or updates a LinkNode. It can also delete a LinkNode if the URL is null,\n * but saves any children and brings them up to the parent node.\n * @param url - The URL the link directs to.\n * @param attributes - Optional HTML a tag attributes. { target, rel, title }\n */\nexport function toggleLink(url: null | string, attributes: LinkAttributes = {}): void {\n const { target, title } = attributes;\n const rel = attributes.rel === undefined ? \"noreferrer\" : attributes.rel;\n const selection = $getSelection();\n\n if (!$isRangeSelection(selection)) {\n return;\n }\n const nodes = selection.extract();\n\n if (url === null) {\n // Remove LinkNodes\n nodes.forEach(node => {\n const parent = node.getParent();\n\n if ($isLinkNode(parent)) {\n const children = parent.getChildren();\n\n for (let i = 0; i < children.length; i++) {\n parent.insertBefore(children[i]);\n }\n\n parent.remove();\n }\n });\n } else {\n // Add or merge LinkNodes\n if (nodes.length === 1) {\n const firstNode = nodes[0];\n // if the first node is a LinkNode or if its\n // parent is a LinkNode, we update the URL, target and rel.\n const linkNode = $isLinkNode(firstNode) ? firstNode : $getLinkAncestor(firstNode);\n if (linkNode !== null) {\n linkNode.setURL(url);\n if (target !== undefined) {\n linkNode.setTarget(target);\n }\n if (rel !== null) {\n linkNode.setRel(rel);\n }\n if (title !== undefined) {\n linkNode.setTitle(title);\n }\n return;\n }\n }\n\n let prevParent: ElementNode | LinkNode | null = null;\n let linkNode: LinkNode | null = null;\n\n nodes.forEach(node => {\n const parent = node.getParent();\n\n if (\n parent === linkNode ||\n parent === null ||\n ($isElementNode(node) && !node.isInline())\n ) {\n return;\n }\n\n if ($isLinkNode(parent)) {\n linkNode = parent;\n parent.setURL(url);\n if (target !== undefined) {\n parent.setTarget(target);\n }\n if (rel !== null) {\n linkNode.setRel(rel);\n }\n if (title !== undefined) {\n linkNode.setTitle(title);\n }\n return;\n }\n\n if (!parent.is(prevParent)) {\n prevParent = parent;\n linkNode = $createLinkNode(url, { rel, target });\n\n if ($isLinkNode(parent)) {\n if (node.getPreviousSibling() === null) {\n parent.insertBefore(linkNode);\n } else {\n parent.insertAfter(linkNode);\n }\n } else {\n node.insertBefore(linkNode);\n }\n }\n\n if ($isLinkNode(node)) {\n if (node.is(linkNode)) {\n return;\n }\n if (linkNode !== null) {\n const children = node.getChildren();\n\n for (let i = 0; i < children.length; i++) {\n linkNode.append(children[i]);\n }\n }\n\n node.remove();\n return;\n }\n\n if (linkNode !== null) {\n linkNode.append(node);\n }\n });\n }\n}\n\nfunction $getLinkAncestor(node: LexicalNode): null | LexicalNode {\n return $getAncestor(node, $isLinkNode);\n}\n\nfunction $getAncestor<NodeType extends LexicalNode = LexicalNode>(\n node: LexicalNode,\n predicate: (ancestor: LexicalNode) => ancestor is NodeType\n): null | LexicalNode {\n let parent: null | LexicalNode = node;\n while (parent !== null && (parent = parent.getParent()) !== null && !predicate(parent)) {}\n return parent;\n}\n"],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ /// <reference types="react" />
2
+ /// <reference types="web" />
3
+ import { DOMConversionMap, EditorConfig, ElementNode, GridSelection, LexicalNode, NodeKey, NodeSelection, ParagraphNode, RangeSelection, SerializedElementNode, Spread } from "lexical";
4
+ export declare type SerializedWebinyListItemNode = Spread<{
5
+ checked: boolean | undefined;
6
+ type: "webiny-listitem";
7
+ value: number;
8
+ version: 1;
9
+ }, SerializedElementNode>;
10
+ /** @noInheritDoc */
11
+ export declare class ListItemNode extends ElementNode {
12
+ /** @internal */
13
+ __value: number;
14
+ /** @internal */
15
+ __checked?: boolean;
16
+ static getType(): string;
17
+ static clone(node: ListItemNode): ListItemNode;
18
+ constructor(value?: number, checked?: boolean, key?: NodeKey);
19
+ createDOM(config: EditorConfig): HTMLElement;
20
+ updateDOM(prevNode: ListItemNode, dom: HTMLElement, config: EditorConfig): boolean;
21
+ static importDOM(): DOMConversionMap | null;
22
+ static importJSON(serializedNode: SerializedWebinyListItemNode): ListItemNode;
23
+ exportJSON(): SerializedWebinyListItemNode;
24
+ append(...nodes: LexicalNode[]): this;
25
+ replace<N extends LexicalNode>(replaceWithNode: N, includeChildren?: boolean): N;
26
+ insertAfter(node: LexicalNode): LexicalNode;
27
+ remove(preserveEmptyParent?: boolean): void;
28
+ insertNewAfter(): ListItemNode | ParagraphNode;
29
+ collapseAtStart(selection: RangeSelection): true;
30
+ getValue(): number;
31
+ setValue(value: number): void;
32
+ getChecked(): boolean | undefined;
33
+ setChecked(checked?: boolean): void;
34
+ getIndent(): number;
35
+ setIndent(indent: number): this;
36
+ canIndent(): false;
37
+ insertBefore(nodeToInsert: LexicalNode): LexicalNode;
38
+ canInsertAfter(node: LexicalNode): boolean;
39
+ canReplaceWith(replacement: LexicalNode): boolean;
40
+ canMergeWith(node: LexicalNode): boolean;
41
+ extractWithChild(child: LexicalNode, selection: RangeSelection | NodeSelection | GridSelection): boolean;
42
+ }
43
+ export declare function $createListItemNode(checked?: boolean): ListItemNode;
44
+ export declare function $isListItemNode(node: LexicalNode | null | undefined): node is ListItemNode;