@webiny/lexical-nodes 6.0.0-beta.0 → 6.0.0-rc.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 (83) hide show
  1. package/FontColorNode.d.ts +24 -22
  2. package/FontColorNode.js +114 -103
  3. package/FontColorNode.js.map +1 -1
  4. package/HeadingNode.d.ts +30 -20
  5. package/HeadingNode.js +185 -176
  6. package/HeadingNode.js.map +1 -1
  7. package/ImageNode.d.ts +2 -12
  8. package/ImageNode.js +119 -193
  9. package/ImageNode.js.map +1 -1
  10. package/LinkNode.d.ts +6 -6
  11. package/LinkNode.js +249 -347
  12. package/LinkNode.js.map +1 -1
  13. package/ListItemNode.d.ts +6 -5
  14. package/ListItemNode.js +275 -352
  15. package/ListItemNode.js.map +1 -1
  16. package/ListNode.d.ts +32 -19
  17. package/ListNode.js +170 -210
  18. package/ListNode.js.map +1 -1
  19. package/ParagraphNode.d.ts +30 -20
  20. package/ParagraphNode.js +144 -201
  21. package/ParagraphNode.js.map +1 -1
  22. package/QuoteNode.d.ts +27 -20
  23. package/QuoteNode.js +102 -208
  24. package/QuoteNode.js.map +1 -1
  25. package/README.md +9 -4
  26. package/components/ImageNode/ImageComponent.d.ts +2 -7
  27. package/components/ImageNode/ImageComponent.js +72 -166
  28. package/components/ImageNode/ImageComponent.js.map +1 -1
  29. package/components/ImageNode/ImageResizer.d.ts +1 -8
  30. package/components/ImageNode/ImageResizer.js +80 -95
  31. package/components/ImageNode/ImageResizer.js.map +1 -1
  32. package/generateInitialLexicalValue.d.ts +4 -0
  33. package/generateInitialLexicalValue.js +27 -0
  34. package/generateInitialLexicalValue.js.map +1 -0
  35. package/index.d.ts +19 -23
  36. package/index.js +50 -233
  37. package/index.js.map +1 -1
  38. package/package.json +22 -19
  39. package/prepareLexicalState.d.ts +2 -0
  40. package/prepareLexicalState.js +53 -0
  41. package/prepareLexicalState.js.map +1 -0
  42. package/types.d.ts +5 -9
  43. package/types.js +1 -5
  44. package/types.js.map +1 -1
  45. package/utils/clearNodeFormating.d.ts +2 -2
  46. package/utils/clearNodeFormating.js +12 -18
  47. package/utils/clearNodeFormating.js.map +1 -1
  48. package/utils/formatList.d.ts +4 -4
  49. package/utils/formatList.js +171 -208
  50. package/utils/formatList.js.map +1 -1
  51. package/utils/formatToHeading.d.ts +2 -2
  52. package/utils/formatToHeading.js +8 -15
  53. package/utils/formatToHeading.js.map +1 -1
  54. package/utils/formatToParagraph.d.ts +1 -1
  55. package/utils/formatToParagraph.js +8 -16
  56. package/utils/formatToParagraph.js.map +1 -1
  57. package/utils/formatToQuote.d.ts +1 -1
  58. package/utils/formatToQuote.js +10 -17
  59. package/utils/formatToQuote.js.map +1 -1
  60. package/utils/getStyleId.d.ts +11 -0
  61. package/utils/getStyleId.js +14 -0
  62. package/utils/getStyleId.js.map +1 -0
  63. package/utils/listNode.d.ts +14 -4
  64. package/utils/listNode.js +43 -49
  65. package/utils/listNode.js.map +1 -1
  66. package/utils/toggleLink.d.ts +1 -1
  67. package/utils/toggleLink.js +41 -45
  68. package/utils/toggleLink.js.map +1 -1
  69. package/TypographyNode.d.ts +0 -39
  70. package/TypographyNode.js +0 -147
  71. package/TypographyNode.js.map +0 -1
  72. package/components/ImageNode/ContentEditable.css +0 -22
  73. package/components/ImageNode/ContentEditable.d.ts +0 -12
  74. package/components/ImageNode/ContentEditable.js +0 -26
  75. package/components/ImageNode/ContentEditable.js.map +0 -1
  76. package/components/ImageNode/ImageComponent.css +0 -43
  77. package/components/ImageNode/Placeholder.css +0 -20
  78. package/components/ImageNode/Placeholder.d.ts +0 -15
  79. package/components/ImageNode/Placeholder.js +0 -30
  80. package/components/ImageNode/Placeholder.js.map +0 -1
  81. package/components/ImageNode/SharedHistoryContext.d.ts +0 -10
  82. package/components/ImageNode/SharedHistoryContext.js +0 -27
  83. package/components/ImageNode/SharedHistoryContext.js.map +0 -1
package/ListNode.js CHANGED
@@ -1,205 +1,163 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
- Object.defineProperty(exports, "__esModule", {
5
- value: true
6
- });
7
- exports.$createListNode = $createListNode;
8
- exports.$isListNode = $isListNode;
9
- exports.ListNode = void 0;
10
- var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
11
- var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
12
- var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
13
- var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
14
- var _callSuper2 = _interopRequireDefault(require("@babel/runtime/helpers/callSuper"));
15
- var _get2 = _interopRequireDefault(require("@babel/runtime/helpers/get"));
16
- var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
17
- var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
18
- var _lexical = require("lexical");
19
- var _lexicalTheme = require("@webiny/lexical-theme");
20
- var _utils = require("@lexical/utils");
21
- var _listNode = require("./utils/listNode");
22
- var _ListItemNode = require("./ListItemNode");
23
- var TypographyStyleAttrName = "data-theme-list-style-id";
24
- var ListNode = exports.ListNode = /*#__PURE__*/function (_ElementNode) {
1
+ import { ElementNode, addClassNamesToElement, removeClassNamesFromElement } from "lexical";
2
+ import { Theme } from "@webiny/lexical-theme";
3
+ import { $getListDepth, wrapInListItem } from "./utils/listNode.js";
4
+ import { $isListItemNode } from "./ListItemNode.js";
5
+ export class ListNode extends ElementNode {
25
6
  /** @internal */
26
7
 
27
8
  /** @internal */
28
9
 
29
10
  /** @internal */
30
11
 
31
- function ListNode(listType, themeStyleId, start, key) {
32
- var _this;
33
- (0, _classCallCheck2.default)(this, ListNode);
34
- _this = (0, _callSuper2.default)(this, ListNode, [key]);
35
- _this.__themeStyleId = themeStyleId || "";
36
- var _listType = TAG_TO_WEBINY_LIST_TYPE[listType] || listType;
37
- _this.__listType = _listType;
38
- _this.__tag = _listType === "number" ? "ol" : "ul";
39
- _this.__start = start || 1;
40
- return _this;
12
+ constructor(listType, options = {}) {
13
+ const {
14
+ styleId,
15
+ key,
16
+ className,
17
+ start
18
+ } = options;
19
+ super(key);
20
+ this.__styleId = styleId ?? "";
21
+ this.__className = className;
22
+ const _listType = TAG_TO_WEBINY_LIST_TYPE[listType] || listType;
23
+ this.__listType = _listType;
24
+ this.__tag = _listType === "number" ? "ol" : "ul";
25
+ this.__start = start || 1;
41
26
  }
42
- (0, _inherits2.default)(ListNode, _ElementNode);
43
- return (0, _createClass2.default)(ListNode, [{
44
- key: "isStyleExistInTheme",
45
- value: function isStyleExistInTheme(theme) {
46
- return theme?.emotionMap ? !!theme?.emotionMap[this.__themeStyleId] : false;
47
- }
48
- }, {
49
- key: "createDOM",
50
- value: function createDOM(config) {
51
- var tag = this.__tag;
52
- var dom = document.createElement(tag);
53
- var wTheme = config.theme;
54
- if (this.__start !== 1) {
55
- dom.setAttribute("start", String(this.__start));
56
- }
57
-
58
- // If styleId is not set or user removed from theme, set default style
59
- if (!this.hasThemeStyle() || !this.isStyleExistInTheme(wTheme)) {
60
- this.setDefaultThemeListStyleByTag(this.__tag, wTheme);
61
- }
62
-
63
- // @ts-expect-error Internal field.
64
- dom.__lexicalListType = this.__listType;
65
- var theme = config.theme;
66
- setListThemeClassNames(dom, theme, this, this.__themeStyleId);
67
- dom.setAttribute(TypographyStyleAttrName, this.__themeStyleId);
68
- return dom;
69
- }
70
- }, {
71
- key: "getTag",
72
- value: function getTag() {
73
- return this.__tag;
74
- }
75
- }, {
76
- key: "getListType",
77
- value: function getListType() {
78
- return this.__listType;
79
- }
80
- }, {
81
- key: "getStart",
82
- value: function getStart() {
83
- return this.__start;
84
- }
85
- }, {
86
- key: "getStyleId",
87
- value: function getStyleId() {
88
- return this.__themeStyleId;
89
- }
90
- }, {
91
- key: "exportJSON",
92
- value: function exportJSON() {
93
- return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, (0, _get2.default)((0, _getPrototypeOf2.default)(ListNode.prototype), "exportJSON", this).call(this)), {}, {
94
- themeStyleId: this.__themeStyleId ?? "",
95
- listType: this.getListType(),
96
- start: this.getStart(),
97
- tag: this.getTag(),
98
- type: "webiny-list",
99
- version: 1
100
- });
101
- }
102
- }, {
103
- key: "setDefaultThemeListStyleByTag",
104
- value:
105
- /*
106
- * Set default styleId from first style that is found in the theme that contains current ul or ol tag
107
- */
108
- function setDefaultThemeListStyleByTag(tag, theme) {
109
- if (!tag) {
110
- return;
111
- }
112
- var themeEmotionMap = theme?.emotionMap;
113
- if (!themeEmotionMap) {
114
- return;
115
- }
116
- var style = (0, _lexicalTheme.findTypographyStyleByHtmlTag)(tag, themeEmotionMap);
117
- if (style) {
118
- this.__themeStyleId = style.id;
119
- }
120
- }
121
- }, {
122
- key: "hasThemeStyle",
123
- value: function hasThemeStyle() {
124
- return !!this.__themeStyleId;
27
+ static getType() {
28
+ return "wby-list";
29
+ }
30
+ createDOM(config) {
31
+ const tag = this.__tag;
32
+ const element = document.createElement(tag);
33
+ if (this.__start !== 1) {
34
+ element.setAttribute("start", String(this.__start));
125
35
  }
126
- }, {
127
- key: "updateDOM",
128
- value: function updateDOM(prevNode, dom, config) {
129
- var wTheme = config.theme;
130
- if (prevNode.__tag !== this.__tag) {
131
- return true;
132
- }
36
+ this.updateElementWithThemeClasses(element, Theme.from(config.theme));
133
37
 
134
- // if styleId is not set or user removed from theme, set default style.
135
- if (!this.hasThemeStyle() || !this.isStyleExistInTheme(wTheme)) {
136
- this.setDefaultThemeListStyleByTag(this.__tag, wTheme);
38
+ // @ts-expect-error Internal field.
39
+ element.__lexicalListType = this.__listType;
40
+ const theme = Theme.from(config.theme);
41
+ setListThemeClassNames(element, theme, this, this.__styleId);
42
+ return element;
43
+ }
44
+ exportDOM(editor) {
45
+ const base = super.exportDOM(editor);
46
+ const element = base.element;
47
+ if (element && this.__className) {
48
+ element.classList.add(this.__className);
49
+ }
50
+ return {
51
+ ...base,
52
+ element
53
+ };
54
+ }
55
+ static clone(node) {
56
+ return new ListNode(node.getListType(), {
57
+ className: node.getClassName(),
58
+ styleId: node.getStyleId(),
59
+ start: node.getStart(),
60
+ key: node.getKey()
61
+ });
62
+ }
63
+ getStyleId() {
64
+ return this.__styleId;
65
+ }
66
+ setStyleId(styleId) {
67
+ this.__styleId = styleId ?? "";
68
+ }
69
+ setClassName(className) {
70
+ this.__className = className;
71
+ }
72
+ getClassName() {
73
+ return this.__className;
74
+ }
75
+ static importJSON(serializedNode) {
76
+ const node = $createListNode(serializedNode.listType,
77
+ // `styleId` is for backwards compatibility
78
+ serializedNode.styleId ?? serializedNode.styleId, serializedNode.start);
79
+ node.setFormat(serializedNode.format);
80
+ node.setIndent(serializedNode.indent);
81
+ node.setDirection(serializedNode.direction);
82
+ node.setClassName(serializedNode.className);
83
+ return node;
84
+ }
85
+ exportJSON() {
86
+ return {
87
+ ...super.exportJSON(),
88
+ styleId: this.__styleId,
89
+ className: this.__className,
90
+ listType: this.getListType(),
91
+ start: this.getStart(),
92
+ tag: this.getTag(),
93
+ type: "wby-list"
94
+ };
95
+ }
96
+ static importDomConversionMap() {
97
+ return {
98
+ conversion: convertListNode,
99
+ priority: 0
100
+ };
101
+ }
102
+ static importDOM() {
103
+ return {
104
+ ol: () => {
105
+ return this.importDomConversionMap();
106
+ },
107
+ ul: () => {
108
+ return this.importDomConversionMap();
137
109
  }
138
- setListThemeClassNames(dom, config.theme, this, this.__themeStyleId);
139
- dom.setAttribute(TypographyStyleAttrName, this.__themeStyleId);
140
- return false;
141
- }
142
- }, {
143
- key: "extractWithChild",
144
- value: function extractWithChild(child) {
145
- return (0, _ListItemNode.$isListItemNode)(child);
146
- }
147
- }], [{
148
- key: "getType",
149
- value: function getType() {
150
- return "webiny-list";
151
- }
152
- }, {
153
- key: "clone",
154
- value: function clone(node) {
155
- return new ListNode(node.getListType(), node.getStyleId(), node.getStart(), node.__key);
110
+ };
111
+ }
112
+ updateDOM(prevNode, dom, config) {
113
+ if (prevNode.__tag !== this.__tag) {
114
+ return true;
156
115
  }
157
- }, {
158
- key: "importJSON",
159
- value: function importJSON(serializedNode) {
160
- var node = $createListNode(serializedNode.listType, serializedNode.themeStyleId, serializedNode.start);
161
- node.setFormat(serializedNode.format);
162
- node.setIndent(serializedNode.indent);
163
- node.setDirection(serializedNode.direction);
164
- return node;
116
+ setListThemeClassNames(dom, Theme.from(config.theme), this, this.__styleId);
117
+ return false;
118
+ }
119
+ extractWithChild(child) {
120
+ return $isListItemNode(child);
121
+ }
122
+ getListType() {
123
+ return this.__listType;
124
+ }
125
+ getStart() {
126
+ return this.__start;
127
+ }
128
+ getTag() {
129
+ return this.__tag;
130
+ }
131
+ updateElementWithThemeClasses(element, theme) {
132
+ if (!this.__styleId || !this.__className) {
133
+ this.setDefaultTypography(theme);
165
134
  }
166
- }, {
167
- key: "importDomConversionMap",
168
- value: function importDomConversionMap() {
169
- return {
170
- conversion: convertListNode,
171
- priority: 0
172
- };
135
+ if (this.__className) {
136
+ addClassNamesToElement(element, this.__className);
173
137
  }
174
- }, {
175
- key: "importDOM",
176
- value: function importDOM() {
177
- var _this2 = this;
178
- return {
179
- ol: function ol() {
180
- return _this2.importDomConversionMap();
181
- },
182
- ul: function ul() {
183
- return _this2.importDomConversionMap();
184
- }
185
- };
138
+ return element;
139
+ }
140
+ setDefaultTypography(theme) {
141
+ const typographyStyle = theme.getTypographyByTag(this.getTag());
142
+ if (typographyStyle) {
143
+ this.__styleId = typographyStyle.id;
144
+ this.__className = typographyStyle.className;
186
145
  }
187
- }]);
188
- }(_lexical.ElementNode);
189
- function setListThemeClassNames(dom, editorTheme, node, themeStyleId) {
190
- var editorThemeClasses = editorTheme;
191
- var classesToAdd = [];
192
- var classesToRemove = [];
193
- var listTheme = editorThemeClasses.list;
194
- var emotionMap = editorTheme?.emotionMap || {};
146
+ }
147
+ }
148
+ function setListThemeClassNames(dom, theme, node, styleId) {
149
+ const classesToAdd = [];
150
+ const classesToRemove = [];
151
+ const listTheme = theme.tokens.list;
195
152
  if (listTheme !== undefined) {
196
- var listLevelsClassNames = listTheme["".concat(node.__tag, "Depth")] || [];
197
- var listDepth = (0, _listNode.$getListDepth)(node) - 1;
198
- var normalizedListDepth = listDepth % listLevelsClassNames.length;
199
- var listLevelClassName = listLevelsClassNames[normalizedListDepth];
200
- var listClassName = "".concat(listTheme[node.__tag], " ").concat(emotionMap[themeStyleId]?.className ?? "");
201
- var nestedListClassName;
202
- var nestedListTheme = listTheme.nested;
153
+ const listTypography = theme.getTypographyById(styleId);
154
+ const listLevelsClassNames = listTheme[`${node.__tag}Depth`] || [];
155
+ const listDepth = $getListDepth(node) - 1;
156
+ const normalizedListDepth = listDepth % listLevelsClassNames.length;
157
+ const listLevelClassName = listLevelsClassNames[normalizedListDepth];
158
+ const listClassName = `${listTheme[node.__tag]} ${listTypography?.className ?? ""}`;
159
+ let nestedListClassName;
160
+ const nestedListTheme = listTheme.nested;
203
161
  if (nestedListTheme !== undefined && nestedListTheme.list) {
204
162
  nestedListClassName = nestedListTheme.list;
205
163
  }
@@ -207,28 +165,28 @@ function setListThemeClassNames(dom, editorTheme, node, themeStyleId) {
207
165
  classesToAdd.push(listClassName);
208
166
  }
209
167
  if (listLevelClassName !== undefined) {
210
- var listItemClasses = listLevelClassName.split(" ");
211
- classesToAdd.push.apply(classesToAdd, (0, _toConsumableArray2.default)(listItemClasses));
212
- for (var i = 0; i < listLevelsClassNames.length; i++) {
168
+ const listItemClasses = listLevelClassName.split(" ");
169
+ classesToAdd.push(...listItemClasses);
170
+ for (let i = 0; i < listLevelsClassNames.length; i++) {
213
171
  if (i !== normalizedListDepth) {
214
172
  classesToRemove.push(node.__tag + i);
215
173
  }
216
174
  }
217
175
  }
218
176
  if (nestedListClassName !== undefined) {
219
- var nestedListItemClasses = nestedListClassName.split(" ");
177
+ const nestedListItemClasses = nestedListClassName.split(" ");
220
178
  if (listDepth > 1) {
221
- classesToAdd.push.apply(classesToAdd, (0, _toConsumableArray2.default)(nestedListItemClasses));
179
+ classesToAdd.push(...nestedListItemClasses);
222
180
  } else {
223
- classesToRemove.push.apply(classesToRemove, (0, _toConsumableArray2.default)(nestedListItemClasses));
181
+ classesToRemove.push(...nestedListItemClasses);
224
182
  }
225
183
  }
226
184
  }
227
185
  if (classesToRemove.length > 0) {
228
- _utils.removeClassNamesFromElement.apply(void 0, [dom].concat(classesToRemove));
186
+ removeClassNamesFromElement(dom, ...classesToRemove);
229
187
  }
230
188
  if (classesToAdd.length > 0) {
231
- _utils.addClassNamesToElement.apply(void 0, [dom].concat(classesToAdd));
189
+ addClassNamesToElement(dom, ...classesToAdd);
232
190
  }
233
191
  }
234
192
 
@@ -238,25 +196,25 @@ function setListThemeClassNames(dom, editorTheme, node, themeStyleId) {
238
196
  * or some other inline content.
239
197
  */
240
198
  function normalizeChildren(nodes) {
241
- var normalizedListItems = [];
242
- for (var i = 0; i < nodes.length; i++) {
243
- var node = nodes[i];
244
- if ((0, _ListItemNode.$isListItemNode)(node)) {
199
+ const normalizedListItems = [];
200
+ for (let i = 0; i < nodes.length; i++) {
201
+ const node = nodes[i];
202
+ if ($isListItemNode(node)) {
245
203
  normalizedListItems.push(node);
246
- node.getChildren().forEach(function (child) {
204
+ node.getChildren().forEach(child => {
247
205
  if ($isListNode(child)) {
248
- normalizedListItems.push((0, _listNode.wrapInListItem)(child));
206
+ normalizedListItems.push(wrapInListItem(child));
249
207
  }
250
208
  });
251
209
  } else {
252
- normalizedListItems.push((0, _listNode.wrapInListItem)(node));
210
+ normalizedListItems.push(wrapInListItem(node));
253
211
  }
254
212
  }
255
213
  return normalizedListItems;
256
214
  }
257
215
  function convertListNode(domNode) {
258
- var nodeName = domNode.nodeName.toLowerCase();
259
- var node = null;
216
+ const nodeName = domNode.nodeName.toLowerCase();
217
+ let node = null;
260
218
  if (nodeName === "ol") {
261
219
  node = $createListNode("number");
262
220
  } else if (nodeName === "ul") {
@@ -265,18 +223,20 @@ function convertListNode(domNode) {
265
223
  return {
266
224
  // @ts-expect-error
267
225
  after: normalizeChildren,
268
- node: node
226
+ node
269
227
  };
270
228
  }
271
- var TAG_TO_WEBINY_LIST_TYPE = {
229
+ const TAG_TO_WEBINY_LIST_TYPE = {
272
230
  ol: "number",
273
231
  ul: "bullet"
274
232
  };
275
- function $createListNode(listType, themeStyleId) {
276
- var start = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;
277
- return new ListNode(listType, themeStyleId, start);
233
+ export function $createListNode(listType, styleId, start = 1) {
234
+ return new ListNode(listType, {
235
+ start,
236
+ styleId
237
+ });
278
238
  }
279
- function $isListNode(node) {
239
+ export function $isListNode(node) {
280
240
  return node instanceof ListNode;
281
241
  }
282
242
 
package/ListNode.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"names":["_lexical","require","_lexicalTheme","_utils","_listNode","_ListItemNode","TypographyStyleAttrName","ListNode","exports","_ElementNode","listType","themeStyleId","start","key","_this","_classCallCheck2","default","_callSuper2","__themeStyleId","_listType","TAG_TO_WEBINY_LIST_TYPE","__listType","__tag","__start","_inherits2","_createClass2","value","isStyleExistInTheme","theme","emotionMap","createDOM","config","tag","dom","document","createElement","wTheme","setAttribute","String","hasThemeStyle","setDefaultThemeListStyleByTag","__lexicalListType","setListThemeClassNames","getTag","getListType","getStart","getStyleId","exportJSON","_objectSpread2","_get2","_getPrototypeOf2","prototype","call","type","version","themeEmotionMap","style","findTypographyStyleByHtmlTag","id","updateDOM","prevNode","extractWithChild","child","$isListItemNode","getType","clone","node","__key","importJSON","serializedNode","$createListNode","setFormat","format","setIndent","indent","setDirection","direction","importDomConversionMap","conversion","convertListNode","priority","importDOM","_this2","ol","ul","ElementNode","editorTheme","editorThemeClasses","classesToAdd","classesToRemove","listTheme","list","undefined","listLevelsClassNames","concat","listDepth","$getListDepth","normalizedListDepth","length","listLevelClassName","listClassName","className","nestedListClassName","nestedListTheme","nested","push","listItemClasses","split","apply","_toConsumableArray2","i","nestedListItemClasses","removeClassNamesFromElement","addClassNamesToElement","normalizeChildren","nodes","normalizedListItems","getChildren","forEach","$isListNode","wrapInListItem","domNode","nodeName","toLowerCase","after","arguments"],"sources":["ListNode.ts"],"sourcesContent":["import {\n DOMConversion,\n DOMConversionMap,\n DOMConversionOutput,\n EditorConfig,\n ElementNode,\n LexicalNode,\n NodeKey,\n SerializedElementNode,\n Spread\n} from \"lexical\";\nimport { EditorTheme, WebinyTheme, findTypographyStyleByHtmlTag } from \"@webiny/lexical-theme\";\nimport { addClassNamesToElement, removeClassNamesFromElement } from \"@lexical/utils\";\nimport { ListNodeTagType } from \"@lexical/list/LexicalListNode\";\nimport { $getListDepth, wrapInListItem } from \"~/utils/listNode\";\nimport { $isListItemNode, ListItemNode } from \"./ListItemNode\";\nimport { ListType } from \"@lexical/list\";\n\nconst TypographyStyleAttrName = \"data-theme-list-style-id\";\n\nexport type SerializedWebinyListNode = Spread<\n {\n themeStyleId: string;\n listType: ListType;\n start: number;\n tag: ListNodeTagType;\n type: \"webiny-list\";\n version: 1;\n },\n SerializedElementNode\n>;\n\nexport class ListNode extends ElementNode {\n /** @internal */\n __tag: ListNodeTagType;\n /** @internal */\n __start: number;\n /** @internal */\n __listType: ListType;\n\n __themeStyleId: string;\n\n constructor(listType: ListType, themeStyleId?: string, start?: number, key?: NodeKey) {\n super(key);\n this.__themeStyleId = themeStyleId || \"\";\n const _listType = TAG_TO_WEBINY_LIST_TYPE[listType] || listType;\n this.__listType = _listType;\n this.__tag = _listType === \"number\" ? \"ol\" : \"ul\";\n this.__start = start || 1;\n }\n\n static override getType() {\n return \"webiny-list\";\n }\n\n isStyleExistInTheme(theme: WebinyTheme): boolean {\n return theme?.emotionMap ? !!theme?.emotionMap[this.__themeStyleId] : false;\n }\n\n override createDOM(config: EditorConfig): HTMLElement {\n const tag = this.__tag;\n const dom = document.createElement(tag);\n const wTheme = config.theme as WebinyTheme;\n\n if (this.__start !== 1) {\n dom.setAttribute(\"start\", String(this.__start));\n }\n\n // If styleId is not set or user removed from theme, set default style\n if (!this.hasThemeStyle() || !this.isStyleExistInTheme(wTheme)) {\n this.setDefaultThemeListStyleByTag(this.__tag, wTheme);\n }\n\n // @ts-expect-error Internal field.\n dom.__lexicalListType = this.__listType;\n const theme = config.theme as EditorTheme;\n setListThemeClassNames(dom, theme, this, this.__themeStyleId);\n dom.setAttribute(TypographyStyleAttrName, this.__themeStyleId);\n return dom;\n }\n\n static override clone(node: ListNode): ListNode {\n return new ListNode(node.getListType(), node.getStyleId(), node.getStart(), node.__key);\n }\n\n getTag(): ListNodeTagType {\n return this.__tag;\n }\n\n getListType(): ListType {\n return this.__listType;\n }\n\n getStart(): number {\n return this.__start;\n }\n\n getStyleId(): string {\n return this.__themeStyleId;\n }\n\n static override importJSON(serializedNode: SerializedWebinyListNode): ListNode {\n const node = $createListNode(\n serializedNode.listType,\n serializedNode.themeStyleId,\n serializedNode.start\n );\n node.setFormat(serializedNode.format);\n node.setIndent(serializedNode.indent);\n node.setDirection(serializedNode.direction);\n return node;\n }\n\n override exportJSON(): SerializedWebinyListNode {\n return {\n ...super.exportJSON(),\n themeStyleId: this.__themeStyleId ?? \"\",\n listType: this.getListType(),\n start: this.getStart(),\n tag: this.getTag(),\n type: \"webiny-list\",\n version: 1\n };\n }\n\n static importDomConversionMap(): DOMConversion<HTMLElement> | null {\n return {\n conversion: convertListNode,\n priority: 0\n };\n }\n\n static importDOM(): DOMConversionMap | null {\n return {\n ol: () => {\n return this.importDomConversionMap();\n },\n ul: () => {\n return this.importDomConversionMap();\n }\n };\n }\n\n /*\n * Set default styleId from first style that is found in the theme that contains current ul or ol tag\n */\n setDefaultThemeListStyleByTag(tag: string, theme: WebinyTheme) {\n if (!tag) {\n return;\n }\n\n const themeEmotionMap = theme?.emotionMap;\n if (!themeEmotionMap) {\n return;\n }\n\n const style = findTypographyStyleByHtmlTag(tag, themeEmotionMap);\n\n if (style) {\n this.__themeStyleId = style.id;\n }\n }\n\n hasThemeStyle(): boolean {\n return !!this.__themeStyleId;\n }\n\n override updateDOM(prevNode: ListNode, dom: HTMLElement, config: EditorConfig): boolean {\n const wTheme = config.theme as WebinyTheme;\n\n if (prevNode.__tag !== this.__tag) {\n return true;\n }\n\n // if styleId is not set or user removed from theme, set default style.\n if (!this.hasThemeStyle() || !this.isStyleExistInTheme(wTheme)) {\n this.setDefaultThemeListStyleByTag(this.__tag, wTheme);\n }\n\n setListThemeClassNames(dom, config.theme, this, this.__themeStyleId);\n dom.setAttribute(TypographyStyleAttrName, this.__themeStyleId);\n return false;\n }\n\n override extractWithChild(child: LexicalNode): boolean {\n return $isListItemNode(child);\n }\n}\n\nfunction setListThemeClassNames(\n dom: HTMLElement,\n editorTheme: EditorTheme,\n node: ListNode,\n themeStyleId: string\n): void {\n const editorThemeClasses = editorTheme;\n const classesToAdd = [];\n const classesToRemove = [];\n const listTheme = editorThemeClasses.list;\n const emotionMap = editorTheme?.emotionMap || {};\n if (listTheme !== undefined) {\n const listLevelsClassNames = listTheme[`${node.__tag}Depth`] || [];\n const listDepth = $getListDepth(node) - 1;\n const normalizedListDepth = listDepth % listLevelsClassNames.length;\n const listLevelClassName = listLevelsClassNames[normalizedListDepth];\n const listClassName = `${listTheme[node.__tag]} ${\n emotionMap[themeStyleId]?.className ?? \"\"\n }`;\n let nestedListClassName;\n const nestedListTheme = listTheme.nested;\n\n if (nestedListTheme !== undefined && nestedListTheme.list) {\n nestedListClassName = nestedListTheme.list;\n }\n\n if (listClassName) {\n classesToAdd.push(listClassName);\n }\n\n if (listLevelClassName !== undefined) {\n const listItemClasses = listLevelClassName.split(\" \");\n classesToAdd.push(...listItemClasses);\n for (let i = 0; i < listLevelsClassNames.length; i++) {\n if (i !== normalizedListDepth) {\n classesToRemove.push(node.__tag + i);\n }\n }\n }\n\n if (nestedListClassName !== undefined) {\n const nestedListItemClasses = nestedListClassName.split(\" \");\n\n if (listDepth > 1) {\n classesToAdd.push(...nestedListItemClasses);\n } else {\n classesToRemove.push(...nestedListItemClasses);\n }\n }\n }\n\n if (classesToRemove.length > 0) {\n removeClassNamesFromElement(dom, ...classesToRemove);\n }\n\n if (classesToAdd.length > 0) {\n addClassNamesToElement(dom, ...classesToAdd);\n }\n}\n\n/*\n * This function normalizes the children of a ListNode after the conversion from HTML,\n * ensuring that they are all ListItemNodes and contain either a single nested ListNode\n * or some other inline content.\n */\nfunction normalizeChildren(nodes: Array<ListNode>): Array<ListItemNode> {\n const normalizedListItems: Array<ListItemNode> = [];\n for (let i = 0; i < nodes.length; i++) {\n const node = nodes[i];\n if ($isListItemNode(node)) {\n normalizedListItems.push(node);\n node.getChildren().forEach(child => {\n if ($isListNode(child)) {\n normalizedListItems.push(wrapInListItem(child));\n }\n });\n } else {\n normalizedListItems.push(wrapInListItem(node));\n }\n }\n return normalizedListItems;\n}\n\nfunction convertListNode(domNode: Node): DOMConversionOutput {\n const nodeName = domNode.nodeName.toLowerCase();\n let node = null;\n\n if (nodeName === \"ol\") {\n node = $createListNode(\"number\");\n } else if (nodeName === \"ul\") {\n node = $createListNode(\"bullet\");\n }\n\n return {\n // @ts-expect-error\n after: normalizeChildren,\n node\n };\n}\n\nconst TAG_TO_WEBINY_LIST_TYPE: Record<string, ListType> = {\n ol: \"number\",\n ul: \"bullet\"\n};\n\nexport function $createListNode(listType: ListType, themeStyleId?: string, start = 1): ListNode {\n return new ListNode(listType, themeStyleId, start);\n}\n\nexport function $isListNode(node: LexicalNode | null | undefined): node is ListNode {\n return node instanceof ListNode;\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["ElementNode","addClassNamesToElement","removeClassNamesFromElement","Theme","$getListDepth","wrapInListItem","$isListItemNode","ListNode","constructor","listType","options","styleId","key","className","start","__styleId","__className","_listType","TAG_TO_WEBINY_LIST_TYPE","__listType","__tag","__start","getType","createDOM","config","tag","element","document","createElement","setAttribute","String","updateElementWithThemeClasses","from","theme","__lexicalListType","setListThemeClassNames","exportDOM","editor","base","classList","add","clone","node","getListType","getClassName","getStyleId","getStart","getKey","setStyleId","setClassName","importJSON","serializedNode","$createListNode","setFormat","format","setIndent","indent","setDirection","direction","exportJSON","getTag","type","importDomConversionMap","conversion","convertListNode","priority","importDOM","ol","ul","updateDOM","prevNode","dom","extractWithChild","child","setDefaultTypography","typographyStyle","getTypographyByTag","id","classesToAdd","classesToRemove","listTheme","tokens","list","undefined","listTypography","getTypographyById","listLevelsClassNames","listDepth","normalizedListDepth","length","listLevelClassName","listClassName","nestedListClassName","nestedListTheme","nested","push","listItemClasses","split","i","nestedListItemClasses","normalizeChildren","nodes","normalizedListItems","getChildren","forEach","$isListNode","domNode","nodeName","toLowerCase","after"],"sources":["ListNode.ts"],"sourcesContent":["import type {\n DOMConversion,\n DOMConversionMap,\n DOMConversionOutput,\n DOMExportOutput,\n EditorConfig,\n LexicalEditor,\n LexicalNode,\n NodeKey,\n SerializedElementNode,\n Spread\n} from \"lexical\";\nimport { ElementNode, addClassNamesToElement, removeClassNamesFromElement } from \"lexical\";\nimport { Theme } from \"@webiny/lexical-theme\";\nimport type { ListNodeTagType } from \"@lexical/list\";\nimport { $getListDepth, wrapInListItem } from \"~/utils/listNode.js\";\nimport type { ListItemNode } from \"./ListItemNode.js\";\nimport { $isListItemNode } from \"./ListItemNode.js\";\nimport type { ListType } from \"@lexical/list\";\nimport type { TypographyStylesNode } from \"~/types.js\";\n\nexport type SerializedWebinyListNode = Spread<\n {\n styleId?: string;\n className?: string;\n listType: ListType;\n start: number;\n tag: ListNodeTagType;\n type: \"wby-list\";\n },\n SerializedElementNode\n>;\n\ntype ListNodeOptions = {\n styleId?: string;\n className?: string;\n start?: number;\n key?: NodeKey;\n};\n\nexport class ListNode extends ElementNode implements TypographyStylesNode {\n /** @internal */\n __tag: ListNodeTagType;\n /** @internal */\n __start: number;\n /** @internal */\n __listType: ListType;\n\n private __styleId: string;\n private __className: string | undefined;\n\n constructor(listType: ListType, options: ListNodeOptions = {}) {\n const { styleId, key, className, start } = options;\n super(key);\n this.__styleId = styleId ?? \"\";\n this.__className = className;\n const _listType = TAG_TO_WEBINY_LIST_TYPE[listType] || listType;\n this.__listType = _listType;\n this.__tag = _listType === \"number\" ? \"ol\" : \"ul\";\n this.__start = start || 1;\n }\n\n static override getType() {\n return \"wby-list\";\n }\n\n override createDOM(config: EditorConfig): HTMLElement {\n const tag = this.__tag;\n const element = document.createElement(tag);\n\n if (this.__start !== 1) {\n element.setAttribute(\"start\", String(this.__start));\n }\n\n this.updateElementWithThemeClasses(element, Theme.from(config.theme));\n\n // @ts-expect-error Internal field.\n element.__lexicalListType = this.__listType;\n const theme = Theme.from(config.theme);\n setListThemeClassNames(element, theme, this, this.__styleId);\n return element;\n }\n\n override exportDOM(editor: LexicalEditor): DOMExportOutput {\n const base = super.exportDOM(editor);\n\n const element = base.element as HTMLElement;\n if (element && this.__className) {\n element.classList.add(this.__className);\n }\n\n return { ...base, element };\n }\n\n static override clone(node: ListNode): ListNode {\n return new ListNode(node.getListType(), {\n className: node.getClassName(),\n styleId: node.getStyleId(),\n start: node.getStart(),\n key: node.getKey()\n });\n }\n\n getStyleId(): string | undefined {\n return this.__styleId;\n }\n\n setStyleId(styleId: string | undefined) {\n this.__styleId = styleId ?? \"\";\n }\n\n setClassName(className: string | undefined) {\n this.__className = className;\n }\n\n getClassName(): string | undefined {\n return this.__className;\n }\n\n static override importJSON(serializedNode: SerializedWebinyListNode): ListNode {\n const node = $createListNode(\n serializedNode.listType,\n // `styleId` is for backwards compatibility\n serializedNode.styleId ?? serializedNode.styleId,\n serializedNode.start\n );\n node.setFormat(serializedNode.format);\n node.setIndent(serializedNode.indent);\n node.setDirection(serializedNode.direction);\n\n node.setClassName(serializedNode.className);\n\n return node;\n }\n\n override exportJSON(): SerializedWebinyListNode {\n return {\n ...super.exportJSON(),\n styleId: this.__styleId,\n className: this.__className,\n listType: this.getListType(),\n start: this.getStart(),\n tag: this.getTag(),\n type: \"wby-list\"\n };\n }\n\n static importDomConversionMap(): DOMConversion<HTMLElement> | null {\n return {\n conversion: convertListNode,\n priority: 0\n };\n }\n\n static override importDOM(): DOMConversionMap | null {\n return {\n ol: () => {\n return this.importDomConversionMap();\n },\n ul: () => {\n return this.importDomConversionMap();\n }\n };\n }\n\n override updateDOM(prevNode: ListNode, dom: HTMLElement, config: EditorConfig): boolean {\n if (prevNode.__tag !== this.__tag) {\n return true;\n }\n\n setListThemeClassNames(dom, Theme.from(config.theme), this, this.__styleId);\n return false;\n }\n\n override extractWithChild(child: LexicalNode): boolean {\n return $isListItemNode(child);\n }\n\n public getListType(): ListType {\n return this.__listType;\n }\n\n public getStart(): number {\n return this.__start;\n }\n\n private getTag(): ListNodeTagType {\n return this.__tag;\n }\n\n protected updateElementWithThemeClasses(element: HTMLElement, theme: Theme): HTMLElement {\n if (!this.__styleId || !this.__className) {\n this.setDefaultTypography(theme);\n }\n\n if (this.__className) {\n addClassNamesToElement(element, this.__className);\n }\n\n return element;\n }\n\n private setDefaultTypography(theme: Theme) {\n const typographyStyle = theme.getTypographyByTag(this.getTag());\n if (typographyStyle) {\n this.__styleId = typographyStyle.id;\n this.__className = typographyStyle.className;\n }\n }\n}\n\nfunction setListThemeClassNames(\n dom: HTMLElement,\n theme: Theme,\n node: ListNode,\n styleId: string\n): void {\n const classesToAdd = [];\n const classesToRemove = [];\n const listTheme = theme.tokens.list;\n if (listTheme !== undefined) {\n const listTypography = theme.getTypographyById(styleId);\n const listLevelsClassNames = listTheme[`${node.__tag}Depth`] || [];\n const listDepth = $getListDepth(node) - 1;\n const normalizedListDepth = listDepth % listLevelsClassNames.length;\n const listLevelClassName = listLevelsClassNames[normalizedListDepth];\n const listClassName = `${listTheme[node.__tag]} ${listTypography?.className ?? \"\"}`;\n let nestedListClassName;\n const nestedListTheme = listTheme.nested;\n\n if (nestedListTheme !== undefined && nestedListTheme.list) {\n nestedListClassName = nestedListTheme.list;\n }\n\n if (listClassName) {\n classesToAdd.push(listClassName);\n }\n\n if (listLevelClassName !== undefined) {\n const listItemClasses = listLevelClassName.split(\" \");\n classesToAdd.push(...listItemClasses);\n for (let i = 0; i < listLevelsClassNames.length; i++) {\n if (i !== normalizedListDepth) {\n classesToRemove.push(node.__tag + i);\n }\n }\n }\n\n if (nestedListClassName !== undefined) {\n const nestedListItemClasses = nestedListClassName.split(\" \");\n\n if (listDepth > 1) {\n classesToAdd.push(...nestedListItemClasses);\n } else {\n classesToRemove.push(...nestedListItemClasses);\n }\n }\n }\n\n if (classesToRemove.length > 0) {\n removeClassNamesFromElement(dom, ...classesToRemove);\n }\n\n if (classesToAdd.length > 0) {\n addClassNamesToElement(dom, ...classesToAdd);\n }\n}\n\n/*\n * This function normalizes the children of a ListNode after the conversion from HTML,\n * ensuring that they are all ListItemNodes and contain either a single nested ListNode\n * or some other inline content.\n */\nfunction normalizeChildren(nodes: Array<ListNode>): Array<ListItemNode> {\n const normalizedListItems: Array<ListItemNode> = [];\n for (let i = 0; i < nodes.length; i++) {\n const node = nodes[i];\n if ($isListItemNode(node)) {\n normalizedListItems.push(node);\n node.getChildren().forEach(child => {\n if ($isListNode(child)) {\n normalizedListItems.push(wrapInListItem(child));\n }\n });\n } else {\n normalizedListItems.push(wrapInListItem(node));\n }\n }\n return normalizedListItems;\n}\n\nfunction convertListNode(domNode: Node): DOMConversionOutput {\n const nodeName = domNode.nodeName.toLowerCase();\n let node = null;\n\n if (nodeName === \"ol\") {\n node = $createListNode(\"number\");\n } else if (nodeName === \"ul\") {\n node = $createListNode(\"bullet\");\n }\n\n return {\n // @ts-expect-error\n after: normalizeChildren,\n node\n };\n}\n\nconst TAG_TO_WEBINY_LIST_TYPE: Record<string, ListType> = {\n ol: \"number\",\n ul: \"bullet\"\n};\n\nexport function $createListNode(listType: ListType, styleId?: string, start = 1): ListNode {\n return new ListNode(listType, {\n start,\n styleId\n });\n}\n\nexport function $isListNode(node: LexicalNode | null | undefined): node is ListNode {\n return node instanceof ListNode;\n}\n"],"mappings":"AAYA,SAASA,WAAW,EAAEC,sBAAsB,EAAEC,2BAA2B,QAAQ,SAAS;AAC1F,SAASC,KAAK,QAAQ,uBAAuB;AAE7C,SAASC,aAAa,EAAEC,cAAc;AAEtC,SAASC,eAAe;AAuBxB,OAAO,MAAMC,QAAQ,SAASP,WAAW,CAAiC;EACtE;;EAEA;;EAEA;;EAMAQ,WAAWA,CAACC,QAAkB,EAAEC,OAAwB,GAAG,CAAC,CAAC,EAAE;IAC3D,MAAM;MAAEC,OAAO;MAAEC,GAAG;MAAEC,SAAS;MAAEC;IAAM,CAAC,GAAGJ,OAAO;IAClD,KAAK,CAACE,GAAG,CAAC;IACV,IAAI,CAACG,SAAS,GAAGJ,OAAO,IAAI,EAAE;IAC9B,IAAI,CAACK,WAAW,GAAGH,SAAS;IAC5B,MAAMI,SAAS,GAAGC,uBAAuB,CAACT,QAAQ,CAAC,IAAIA,QAAQ;IAC/D,IAAI,CAACU,UAAU,GAAGF,SAAS;IAC3B,IAAI,CAACG,KAAK,GAAGH,SAAS,KAAK,QAAQ,GAAG,IAAI,GAAG,IAAI;IACjD,IAAI,CAACI,OAAO,GAAGP,KAAK,IAAI,CAAC;EAC7B;EAEA,OAAgBQ,OAAOA,CAAA,EAAG;IACtB,OAAO,UAAU;EACrB;EAESC,SAASA,CAACC,MAAoB,EAAe;IAClD,MAAMC,GAAG,GAAG,IAAI,CAACL,KAAK;IACtB,MAAMM,OAAO,GAAGC,QAAQ,CAACC,aAAa,CAACH,GAAG,CAAC;IAE3C,IAAI,IAAI,CAACJ,OAAO,KAAK,CAAC,EAAE;MACpBK,OAAO,CAACG,YAAY,CAAC,OAAO,EAAEC,MAAM,CAAC,IAAI,CAACT,OAAO,CAAC,CAAC;IACvD;IAEA,IAAI,CAACU,6BAA6B,CAACL,OAAO,EAAEvB,KAAK,CAAC6B,IAAI,CAACR,MAAM,CAACS,KAAK,CAAC,CAAC;;IAErE;IACAP,OAAO,CAACQ,iBAAiB,GAAG,IAAI,CAACf,UAAU;IAC3C,MAAMc,KAAK,GAAG9B,KAAK,CAAC6B,IAAI,CAACR,MAAM,CAACS,KAAK,CAAC;IACtCE,sBAAsB,CAACT,OAAO,EAAEO,KAAK,EAAE,IAAI,EAAE,IAAI,CAAClB,SAAS,CAAC;IAC5D,OAAOW,OAAO;EAClB;EAESU,SAASA,CAACC,MAAqB,EAAmB;IACvD,MAAMC,IAAI,GAAG,KAAK,CAACF,SAAS,CAACC,MAAM,CAAC;IAEpC,MAAMX,OAAO,GAAGY,IAAI,CAACZ,OAAsB;IAC3C,IAAIA,OAAO,IAAI,IAAI,CAACV,WAAW,EAAE;MAC7BU,OAAO,CAACa,SAAS,CAACC,GAAG,CAAC,IAAI,CAACxB,WAAW,CAAC;IAC3C;IAEA,OAAO;MAAE,GAAGsB,IAAI;MAAEZ;IAAQ,CAAC;EAC/B;EAEA,OAAgBe,KAAKA,CAACC,IAAc,EAAY;IAC5C,OAAO,IAAInC,QAAQ,CAACmC,IAAI,CAACC,WAAW,CAAC,CAAC,EAAE;MACpC9B,SAAS,EAAE6B,IAAI,CAACE,YAAY,CAAC,CAAC;MAC9BjC,OAAO,EAAE+B,IAAI,CAACG,UAAU,CAAC,CAAC;MAC1B/B,KAAK,EAAE4B,IAAI,CAACI,QAAQ,CAAC,CAAC;MACtBlC,GAAG,EAAE8B,IAAI,CAACK,MAAM,CAAC;IACrB,CAAC,CAAC;EACN;EAEAF,UAAUA,CAAA,EAAuB;IAC7B,OAAO,IAAI,CAAC9B,SAAS;EACzB;EAEAiC,UAAUA,CAACrC,OAA2B,EAAE;IACpC,IAAI,CAACI,SAAS,GAAGJ,OAAO,IAAI,EAAE;EAClC;EAEAsC,YAAYA,CAACpC,SAA6B,EAAE;IACxC,IAAI,CAACG,WAAW,GAAGH,SAAS;EAChC;EAEA+B,YAAYA,CAAA,EAAuB;IAC/B,OAAO,IAAI,CAAC5B,WAAW;EAC3B;EAEA,OAAgBkC,UAAUA,CAACC,cAAwC,EAAY;IAC3E,MAAMT,IAAI,GAAGU,eAAe,CACxBD,cAAc,CAAC1C,QAAQ;IACvB;IACA0C,cAAc,CAACxC,OAAO,IAAIwC,cAAc,CAACxC,OAAO,EAChDwC,cAAc,CAACrC,KACnB,CAAC;IACD4B,IAAI,CAACW,SAAS,CAACF,cAAc,CAACG,MAAM,CAAC;IACrCZ,IAAI,CAACa,SAAS,CAACJ,cAAc,CAACK,MAAM,CAAC;IACrCd,IAAI,CAACe,YAAY,CAACN,cAAc,CAACO,SAAS,CAAC;IAE3ChB,IAAI,CAACO,YAAY,CAACE,cAAc,CAACtC,SAAS,CAAC;IAE3C,OAAO6B,IAAI;EACf;EAESiB,UAAUA,CAAA,EAA6B;IAC5C,OAAO;MACH,GAAG,KAAK,CAACA,UAAU,CAAC,CAAC;MACrBhD,OAAO,EAAE,IAAI,CAACI,SAAS;MACvBF,SAAS,EAAE,IAAI,CAACG,WAAW;MAC3BP,QAAQ,EAAE,IAAI,CAACkC,WAAW,CAAC,CAAC;MAC5B7B,KAAK,EAAE,IAAI,CAACgC,QAAQ,CAAC,CAAC;MACtBrB,GAAG,EAAE,IAAI,CAACmC,MAAM,CAAC,CAAC;MAClBC,IAAI,EAAE;IACV,CAAC;EACL;EAEA,OAAOC,sBAAsBA,CAAA,EAAsC;IAC/D,OAAO;MACHC,UAAU,EAAEC,eAAe;MAC3BC,QAAQ,EAAE;IACd,CAAC;EACL;EAEA,OAAgBC,SAASA,CAAA,EAA4B;IACjD,OAAO;MACHC,EAAE,EAAEA,CAAA,KAAM;QACN,OAAO,IAAI,CAACL,sBAAsB,CAAC,CAAC;MACxC,CAAC;MACDM,EAAE,EAAEA,CAAA,KAAM;QACN,OAAO,IAAI,CAACN,sBAAsB,CAAC,CAAC;MACxC;IACJ,CAAC;EACL;EAESO,SAASA,CAACC,QAAkB,EAAEC,GAAgB,EAAE/C,MAAoB,EAAW;IACpF,IAAI8C,QAAQ,CAAClD,KAAK,KAAK,IAAI,CAACA,KAAK,EAAE;MAC/B,OAAO,IAAI;IACf;IAEAe,sBAAsB,CAACoC,GAAG,EAAEpE,KAAK,CAAC6B,IAAI,CAACR,MAAM,CAACS,KAAK,CAAC,EAAE,IAAI,EAAE,IAAI,CAAClB,SAAS,CAAC;IAC3E,OAAO,KAAK;EAChB;EAESyD,gBAAgBA,CAACC,KAAkB,EAAW;IACnD,OAAOnE,eAAe,CAACmE,KAAK,CAAC;EACjC;EAEO9B,WAAWA,CAAA,EAAa;IAC3B,OAAO,IAAI,CAACxB,UAAU;EAC1B;EAEO2B,QAAQA,CAAA,EAAW;IACtB,OAAO,IAAI,CAACzB,OAAO;EACvB;EAEQuC,MAAMA,CAAA,EAAoB;IAC9B,OAAO,IAAI,CAACxC,KAAK;EACrB;EAEUW,6BAA6BA,CAACL,OAAoB,EAAEO,KAAY,EAAe;IACrF,IAAI,CAAC,IAAI,CAAClB,SAAS,IAAI,CAAC,IAAI,CAACC,WAAW,EAAE;MACtC,IAAI,CAAC0D,oBAAoB,CAACzC,KAAK,CAAC;IACpC;IAEA,IAAI,IAAI,CAACjB,WAAW,EAAE;MAClBf,sBAAsB,CAACyB,OAAO,EAAE,IAAI,CAACV,WAAW,CAAC;IACrD;IAEA,OAAOU,OAAO;EAClB;EAEQgD,oBAAoBA,CAACzC,KAAY,EAAE;IACvC,MAAM0C,eAAe,GAAG1C,KAAK,CAAC2C,kBAAkB,CAAC,IAAI,CAAChB,MAAM,CAAC,CAAC,CAAC;IAC/D,IAAIe,eAAe,EAAE;MACjB,IAAI,CAAC5D,SAAS,GAAG4D,eAAe,CAACE,EAAE;MACnC,IAAI,CAAC7D,WAAW,GAAG2D,eAAe,CAAC9D,SAAS;IAChD;EACJ;AACJ;AAEA,SAASsB,sBAAsBA,CAC3BoC,GAAgB,EAChBtC,KAAY,EACZS,IAAc,EACd/B,OAAe,EACX;EACJ,MAAMmE,YAAY,GAAG,EAAE;EACvB,MAAMC,eAAe,GAAG,EAAE;EAC1B,MAAMC,SAAS,GAAG/C,KAAK,CAACgD,MAAM,CAACC,IAAI;EACnC,IAAIF,SAAS,KAAKG,SAAS,EAAE;IACzB,MAAMC,cAAc,GAAGnD,KAAK,CAACoD,iBAAiB,CAAC1E,OAAO,CAAC;IACvD,MAAM2E,oBAAoB,GAAGN,SAAS,CAAC,GAAGtC,IAAI,CAACtB,KAAK,OAAO,CAAC,IAAI,EAAE;IAClE,MAAMmE,SAAS,GAAGnF,aAAa,CAACsC,IAAI,CAAC,GAAG,CAAC;IACzC,MAAM8C,mBAAmB,GAAGD,SAAS,GAAGD,oBAAoB,CAACG,MAAM;IACnE,MAAMC,kBAAkB,GAAGJ,oBAAoB,CAACE,mBAAmB,CAAC;IACpE,MAAMG,aAAa,GAAG,GAAGX,SAAS,CAACtC,IAAI,CAACtB,KAAK,CAAC,IAAIgE,cAAc,EAAEvE,SAAS,IAAI,EAAE,EAAE;IACnF,IAAI+E,mBAAmB;IACvB,MAAMC,eAAe,GAAGb,SAAS,CAACc,MAAM;IAExC,IAAID,eAAe,KAAKV,SAAS,IAAIU,eAAe,CAACX,IAAI,EAAE;MACvDU,mBAAmB,GAAGC,eAAe,CAACX,IAAI;IAC9C;IAEA,IAAIS,aAAa,EAAE;MACfb,YAAY,CAACiB,IAAI,CAACJ,aAAa,CAAC;IACpC;IAEA,IAAID,kBAAkB,KAAKP,SAAS,EAAE;MAClC,MAAMa,eAAe,GAAGN,kBAAkB,CAACO,KAAK,CAAC,GAAG,CAAC;MACrDnB,YAAY,CAACiB,IAAI,CAAC,GAAGC,eAAe,CAAC;MACrC,KAAK,IAAIE,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGZ,oBAAoB,CAACG,MAAM,EAAES,CAAC,EAAE,EAAE;QAClD,IAAIA,CAAC,KAAKV,mBAAmB,EAAE;UAC3BT,eAAe,CAACgB,IAAI,CAACrD,IAAI,CAACtB,KAAK,GAAG8E,CAAC,CAAC;QACxC;MACJ;IACJ;IAEA,IAAIN,mBAAmB,KAAKT,SAAS,EAAE;MACnC,MAAMgB,qBAAqB,GAAGP,mBAAmB,CAACK,KAAK,CAAC,GAAG,CAAC;MAE5D,IAAIV,SAAS,GAAG,CAAC,EAAE;QACfT,YAAY,CAACiB,IAAI,CAAC,GAAGI,qBAAqB,CAAC;MAC/C,CAAC,MAAM;QACHpB,eAAe,CAACgB,IAAI,CAAC,GAAGI,qBAAqB,CAAC;MAClD;IACJ;EACJ;EAEA,IAAIpB,eAAe,CAACU,MAAM,GAAG,CAAC,EAAE;IAC5BvF,2BAA2B,CAACqE,GAAG,EAAE,GAAGQ,eAAe,CAAC;EACxD;EAEA,IAAID,YAAY,CAACW,MAAM,GAAG,CAAC,EAAE;IACzBxF,sBAAsB,CAACsE,GAAG,EAAE,GAAGO,YAAY,CAAC;EAChD;AACJ;;AAEA;AACA;AACA;AACA;AACA;AACA,SAASsB,iBAAiBA,CAACC,KAAsB,EAAuB;EACpE,MAAMC,mBAAwC,GAAG,EAAE;EACnD,KAAK,IAAIJ,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGG,KAAK,CAACZ,MAAM,EAAES,CAAC,EAAE,EAAE;IACnC,MAAMxD,IAAI,GAAG2D,KAAK,CAACH,CAAC,CAAC;IACrB,IAAI5F,eAAe,CAACoC,IAAI,CAAC,EAAE;MACvB4D,mBAAmB,CAACP,IAAI,CAACrD,IAAI,CAAC;MAC9BA,IAAI,CAAC6D,WAAW,CAAC,CAAC,CAACC,OAAO,CAAC/B,KAAK,IAAI;QAChC,IAAIgC,WAAW,CAAChC,KAAK,CAAC,EAAE;UACpB6B,mBAAmB,CAACP,IAAI,CAAC1F,cAAc,CAACoE,KAAK,CAAC,CAAC;QACnD;MACJ,CAAC,CAAC;IACN,CAAC,MAAM;MACH6B,mBAAmB,CAACP,IAAI,CAAC1F,cAAc,CAACqC,IAAI,CAAC,CAAC;IAClD;EACJ;EACA,OAAO4D,mBAAmB;AAC9B;AAEA,SAAStC,eAAeA,CAAC0C,OAAa,EAAuB;EACzD,MAAMC,QAAQ,GAAGD,OAAO,CAACC,QAAQ,CAACC,WAAW,CAAC,CAAC;EAC/C,IAAIlE,IAAI,GAAG,IAAI;EAEf,IAAIiE,QAAQ,KAAK,IAAI,EAAE;IACnBjE,IAAI,GAAGU,eAAe,CAAC,QAAQ,CAAC;EACpC,CAAC,MAAM,IAAIuD,QAAQ,KAAK,IAAI,EAAE;IAC1BjE,IAAI,GAAGU,eAAe,CAAC,QAAQ,CAAC;EACpC;EAEA,OAAO;IACH;IACAyD,KAAK,EAAET,iBAAiB;IACxB1D;EACJ,CAAC;AACL;AAEA,MAAMxB,uBAAiD,GAAG;EACtDiD,EAAE,EAAE,QAAQ;EACZC,EAAE,EAAE;AACR,CAAC;AAED,OAAO,SAAShB,eAAeA,CAAC3C,QAAkB,EAAEE,OAAgB,EAAEG,KAAK,GAAG,CAAC,EAAY;EACvF,OAAO,IAAIP,QAAQ,CAACE,QAAQ,EAAE;IAC1BK,KAAK;IACLH;EACJ,CAAC,CAAC;AACN;AAEA,OAAO,SAAS8F,WAAWA,CAAC/D,IAAoC,EAAoB;EAChF,OAAOA,IAAI,YAAYnC,QAAQ;AACnC","ignoreList":[]}
@@ -1,29 +1,39 @@
1
- import { DOMConversionMap, LexicalNode, NodeKey, ParagraphNode as BaseParagraphNode, SerializedParagraphNode as SerializedBaseParagraphNode, Spread } from "lexical";
2
- import { EditorConfig } from "lexical";
3
- import { WebinyTheme, ThemeEmotionMap } from "@webiny/lexical-theme";
4
- import { TypographyStylesNode, ThemeStyleValue, TextNodeThemeStyles } from "./types";
5
- export declare type SerializeParagraphNode = Spread<{
6
- styles: ThemeStyleValue[];
7
- type: "paragraph-element";
1
+ import type { DOMConversionMap, LexicalNode, NodeKey, SerializedParagraphNode as SerializedBaseParagraphNode, Spread, LexicalEditor, DOMExportOutput, RangeSelection } from "lexical";
2
+ import { ParagraphNode as BaseParagraphNode } from "lexical";
3
+ import type { EditorConfig } from "lexical";
4
+ import { Theme } from "@webiny/lexical-theme";
5
+ import type { TypographyStylesNode, ThemeStyleValue } from "./types.js";
6
+ export type SerializeParagraphNode = Spread<{
7
+ styles?: ThemeStyleValue[];
8
+ styleId?: string;
9
+ className?: string;
10
+ type: "wby-paragraph";
8
11
  }, SerializedBaseParagraphNode>;
9
- export declare class ParagraphNode extends BaseParagraphNode implements TextNodeThemeStyles, TypographyStylesNode {
10
- __styles: ThemeStyleValue[];
11
- constructor(typographyStyleId?: string, key?: NodeKey);
12
- protected setDefaultTypography(themeEmotionMap: ThemeEmotionMap): void;
13
- setTypography(typographyStyleId: string): this;
14
- getTypographyStyleId(): string | undefined;
15
- clearTypographyStyle(): this;
16
- hasTypographyStyle(): boolean;
17
- getThemeStyles(): ThemeStyleValue[];
18
- setThemeStyles(styles: ThemeStyleValue[]): this;
12
+ interface ParagraphNodeOptions {
13
+ className?: string;
14
+ styleId?: string;
15
+ key?: NodeKey;
16
+ }
17
+ export declare class ParagraphNode extends BaseParagraphNode implements TypographyStylesNode {
18
+ private __styleId;
19
+ private __className;
20
+ constructor(options?: ParagraphNodeOptions);
21
+ getStyleId(): string | undefined;
22
+ setStyleId(styleId: string | undefined): void;
23
+ setClassName(className: string | undefined): void;
24
+ getClassName(): string | undefined;
19
25
  static getType(): string;
20
26
  static clone(node: ParagraphNode): ParagraphNode;
21
- protected updateElementWithThemeClasses(element: HTMLElement, theme: WebinyTheme): HTMLElement;
27
+ insertNewAfter(rangeSelection: RangeSelection, restoreSelection: boolean): ParagraphNode;
22
28
  createDOM(config: EditorConfig): HTMLElement;
23
- updateDOM(prevNode: BaseParagraphNode, dom: HTMLElement, config: EditorConfig): boolean;
29
+ exportDOM(editor: LexicalEditor): DOMExportOutput;
30
+ updateDOM(prevNode: ParagraphNode, dom: HTMLElement, config: EditorConfig): boolean;
24
31
  static importDOM(): DOMConversionMap | null;
25
32
  static importJSON(serializedNode: SerializeParagraphNode): BaseParagraphNode;
26
33
  exportJSON(): SerializeParagraphNode;
34
+ protected updateElementWithThemeClasses(element: HTMLElement, theme: Theme): HTMLElement;
35
+ private setDefaultTypography;
27
36
  }
28
- export declare function $createParagraphNode(typographyStyleId?: string): ParagraphNode;
37
+ export declare function $createParagraphNode(styleId?: string): ParagraphNode;
29
38
  export declare function $isParagraphNode(node: LexicalNode | null | undefined): node is ParagraphNode;
39
+ export {};