@payloadcms/richtext-lexical 4.0.0-internal.cc18726 → 4.0.0-internal.cd47d20

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 (191) hide show
  1. package/dist/exports/client/Field-BPLEYPXV.js +2 -0
  2. package/dist/exports/client/Field-BPLEYPXV.js.map +7 -0
  3. package/dist/exports/client/bundled.css +1 -1
  4. package/dist/exports/client/index.js +27 -27
  5. package/dist/exports/client/index.js.map +4 -4
  6. package/dist/features/blocks/client/component/BlockReordering/index.d.ts +11 -0
  7. package/dist/features/blocks/client/component/BlockReordering/index.d.ts.map +1 -0
  8. package/dist/features/blocks/client/component/BlockReordering/index.js +18 -0
  9. package/dist/features/blocks/client/component/BlockReordering/index.js.map +1 -0
  10. package/dist/features/blocks/client/component/index.d.ts +0 -6
  11. package/dist/features/blocks/client/component/index.d.ts.map +1 -1
  12. package/dist/features/blocks/client/component/index.js +126 -69
  13. package/dist/features/blocks/client/component/index.js.map +1 -1
  14. package/dist/features/blocks/client/component/useBlockReordering.d.ts +16 -0
  15. package/dist/features/blocks/client/component/useBlockReordering.d.ts.map +1 -0
  16. package/dist/features/blocks/client/component/useBlockReordering.js +178 -0
  17. package/dist/features/blocks/client/component/useBlockReordering.js.map +1 -0
  18. package/dist/features/converters/lexicalToHtml/async/converters/heading.js +1 -1
  19. package/dist/features/converters/lexicalToHtml/async/converters/heading.js.map +1 -1
  20. package/dist/features/converters/lexicalToHtml/async/converters/list.d.ts.map +1 -1
  21. package/dist/features/converters/lexicalToHtml/async/converters/list.js +4 -3
  22. package/dist/features/converters/lexicalToHtml/async/converters/list.js.map +1 -1
  23. package/dist/features/converters/lexicalToHtml/sync/converters/heading.js +1 -1
  24. package/dist/features/converters/lexicalToHtml/sync/converters/heading.js.map +1 -1
  25. package/dist/features/converters/lexicalToHtml/sync/converters/list.d.ts.map +1 -1
  26. package/dist/features/converters/lexicalToHtml/sync/converters/list.js +4 -3
  27. package/dist/features/converters/lexicalToHtml/sync/converters/list.js.map +1 -1
  28. package/dist/features/converters/lexicalToJSX/converter/converters/heading.d.ts.map +1 -1
  29. package/dist/features/converters/lexicalToJSX/converter/converters/heading.js +2 -1
  30. package/dist/features/converters/lexicalToJSX/converter/converters/heading.js.map +1 -1
  31. package/dist/features/converters/lexicalToJSX/converter/converters/list.d.ts.map +1 -1
  32. package/dist/features/converters/lexicalToJSX/converter/converters/list.js +2 -1
  33. package/dist/features/converters/lexicalToJSX/converter/converters/list.js.map +1 -1
  34. package/dist/features/converters/utilities/payloadPopulateFn.d.ts.map +1 -1
  35. package/dist/features/converters/utilities/payloadPopulateFn.js +4 -2
  36. package/dist/features/converters/utilities/payloadPopulateFn.js.map +1 -1
  37. package/dist/features/heading/constants.d.ts +2 -0
  38. package/dist/features/heading/constants.d.ts.map +1 -0
  39. package/dist/features/heading/constants.js +2 -0
  40. package/dist/features/heading/constants.js.map +1 -0
  41. package/dist/features/heading/server/index.d.ts.map +1 -1
  42. package/dist/features/heading/server/index.js +5 -1
  43. package/dist/features/heading/server/index.js.map +1 -1
  44. package/dist/features/heading/server/validate.d.ts +6 -0
  45. package/dist/features/heading/server/validate.d.ts.map +1 -0
  46. package/dist/features/heading/server/validate.js +15 -0
  47. package/dist/features/heading/server/validate.js.map +1 -0
  48. package/dist/features/link/client/plugins/floatingLinkEditor/LinkEditor/index.js +1 -0
  49. package/dist/features/link/client/plugins/floatingLinkEditor/LinkEditor/index.js.map +1 -1
  50. package/dist/features/lists/checklist/server/index.d.ts.map +1 -1
  51. package/dist/features/lists/checklist/server/index.js +5 -2
  52. package/dist/features/lists/checklist/server/index.js.map +1 -1
  53. package/dist/features/lists/orderedList/server/index.d.ts.map +1 -1
  54. package/dist/features/lists/orderedList/server/index.js +5 -2
  55. package/dist/features/lists/orderedList/server/index.js.map +1 -1
  56. package/dist/features/lists/shared/constants.d.ts +2 -0
  57. package/dist/features/lists/shared/constants.d.ts.map +1 -0
  58. package/dist/features/lists/shared/constants.js +2 -0
  59. package/dist/features/lists/shared/constants.js.map +1 -0
  60. package/dist/features/lists/shared/validate.d.ts +5 -0
  61. package/dist/features/lists/shared/validate.d.ts.map +1 -0
  62. package/dist/features/lists/shared/validate.js +15 -0
  63. package/dist/features/lists/shared/validate.js.map +1 -0
  64. package/dist/features/lists/unorderedList/server/index.d.ts.map +1 -1
  65. package/dist/features/lists/unorderedList/server/index.js +5 -2
  66. package/dist/features/lists/unorderedList/server/index.js.map +1 -1
  67. package/dist/features/relationship/client/index.d.ts +2 -2
  68. package/dist/features/relationship/client/index.d.ts.map +1 -1
  69. package/dist/features/relationship/client/index.js.map +1 -1
  70. package/dist/features/relationship/client/plugins/index.d.ts +2 -2
  71. package/dist/features/relationship/client/plugins/index.d.ts.map +1 -1
  72. package/dist/features/relationship/client/plugins/index.js +27 -31
  73. package/dist/features/relationship/client/plugins/index.js.map +1 -1
  74. package/dist/features/relationship/client/utils/useEnabledRelationships.d.ts +2 -4
  75. package/dist/features/relationship/client/utils/useEnabledRelationships.d.ts.map +1 -1
  76. package/dist/features/relationship/client/utils/useEnabledRelationships.js +53 -20
  77. package/dist/features/relationship/client/utils/useEnabledRelationships.js.map +1 -1
  78. package/dist/features/relationship/server/graphQLPopulationPromise.d.ts +2 -2
  79. package/dist/features/relationship/server/graphQLPopulationPromise.d.ts.map +1 -1
  80. package/dist/features/relationship/server/graphQLPopulationPromise.js +2 -2
  81. package/dist/features/relationship/server/graphQLPopulationPromise.js.map +1 -1
  82. package/dist/features/relationship/server/index.d.ts +8 -1
  83. package/dist/features/relationship/server/index.d.ts.map +1 -1
  84. package/dist/features/relationship/server/index.js +28 -11
  85. package/dist/features/relationship/server/index.js.map +1 -1
  86. package/dist/features/relationship/server/schema.d.ts +2 -2
  87. package/dist/features/relationship/server/schema.d.ts.map +1 -1
  88. package/dist/features/relationship/server/schema.js +5 -10
  89. package/dist/features/relationship/server/schema.js.map +1 -1
  90. package/dist/features/relationship/shared/filterEnabledRelationshipCollections.d.ts +1 -6
  91. package/dist/features/relationship/shared/filterEnabledRelationshipCollections.d.ts.map +1 -1
  92. package/dist/features/relationship/shared/filterEnabledRelationshipCollections.js +1 -5
  93. package/dist/features/relationship/shared/filterEnabledRelationshipCollections.js.map +1 -1
  94. package/dist/features/table/client/plugins/TableActionMenuPlugin/computeSelectionCount.d.ts +8 -0
  95. package/dist/features/table/client/plugins/TableActionMenuPlugin/computeSelectionCount.d.ts.map +1 -0
  96. package/dist/features/table/client/plugins/TableActionMenuPlugin/computeSelectionCount.js +19 -0
  97. package/dist/features/table/client/plugins/TableActionMenuPlugin/computeSelectionCount.js.map +1 -0
  98. package/dist/features/table/client/plugins/TableActionMenuPlugin/index.d.ts.map +1 -1
  99. package/dist/features/table/client/plugins/TableActionMenuPlugin/index.js +17 -44
  100. package/dist/features/table/client/plugins/TableActionMenuPlugin/index.js.map +1 -1
  101. package/dist/features/table/client/plugins/TableCellResizerPlugin/index.d.ts.map +1 -1
  102. package/dist/features/table/client/plugins/TableCellResizerPlugin/index.js +41 -18
  103. package/dist/features/table/client/plugins/TableCellResizerPlugin/index.js.map +1 -1
  104. package/dist/features/toolbars/shared/ToolbarButton/index.d.ts.map +1 -1
  105. package/dist/features/toolbars/shared/ToolbarButton/index.js +1 -0
  106. package/dist/features/toolbars/shared/ToolbarButton/index.js.map +1 -1
  107. package/dist/features/toolbars/shared/ToolbarDropdown/DropDown.d.ts.map +1 -1
  108. package/dist/features/toolbars/shared/ToolbarDropdown/DropDown.js +85 -32
  109. package/dist/features/toolbars/shared/ToolbarDropdown/DropDown.js.map +1 -1
  110. package/dist/features/toolbars/shared/ToolbarDropdown/index.css +16 -11
  111. package/dist/features/upload/client/index.d.ts +3 -2
  112. package/dist/features/upload/client/index.d.ts.map +1 -1
  113. package/dist/features/upload/client/index.js.map +1 -1
  114. package/dist/features/upload/client/plugin/index.d.ts.map +1 -1
  115. package/dist/features/upload/client/plugin/index.js +47 -52
  116. package/dist/features/upload/client/plugin/index.js.map +1 -1
  117. package/dist/features/upload/server/graphQLPopulationPromise.d.ts +2 -2
  118. package/dist/features/upload/server/graphQLPopulationPromise.d.ts.map +1 -1
  119. package/dist/features/upload/server/graphQLPopulationPromise.js +1 -1
  120. package/dist/features/upload/server/graphQLPopulationPromise.js.map +1 -1
  121. package/dist/features/upload/server/index.d.ts +6 -2
  122. package/dist/features/upload/server/index.d.ts.map +1 -1
  123. package/dist/features/upload/server/index.js +18 -14
  124. package/dist/features/upload/server/index.js.map +1 -1
  125. package/dist/features/upload/server/schema.d.ts +2 -2
  126. package/dist/features/upload/server/schema.d.ts.map +1 -1
  127. package/dist/features/upload/server/schema.js +4 -8
  128. package/dist/features/upload/server/schema.js.map +1 -1
  129. package/dist/features/upload/server/validate.d.ts +2 -2
  130. package/dist/features/upload/server/validate.d.ts.map +1 -1
  131. package/dist/features/upload/server/validate.js +3 -0
  132. package/dist/features/upload/server/validate.js.map +1 -1
  133. package/dist/field/Diff/converters/listitem/index.d.ts.map +1 -1
  134. package/dist/field/Diff/converters/listitem/index.js +2 -1
  135. package/dist/field/Diff/converters/listitem/index.js.map +1 -1
  136. package/dist/field/Diff/index.d.ts +3 -2
  137. package/dist/field/Diff/index.d.ts.map +1 -1
  138. package/dist/field/Diff/index.js +1 -0
  139. package/dist/field/Diff/index.js.map +1 -1
  140. package/dist/field/RenderLexical/index.d.ts +3 -1
  141. package/dist/field/RenderLexical/index.d.ts.map +1 -1
  142. package/dist/field/RenderLexical/index.js +23 -23
  143. package/dist/field/RenderLexical/index.js.map +1 -1
  144. package/dist/field/ViewSelector.d.ts.map +1 -1
  145. package/dist/field/ViewSelector.js +1 -0
  146. package/dist/field/ViewSelector.js.map +1 -1
  147. package/dist/field/bundled.css +1 -1
  148. package/dist/index.d.ts +1 -1
  149. package/dist/index.js +1 -1
  150. package/dist/index.js.map +1 -1
  151. package/dist/lexical/LexicalEditor.js.map +1 -1
  152. package/dist/lexical/plugins/handles/DraggableBlockPlugin/index.d.ts.map +1 -1
  153. package/dist/lexical/plugins/handles/DraggableBlockPlugin/index.js +16 -2
  154. package/dist/lexical/plugins/handles/DraggableBlockPlugin/index.js.map +1 -1
  155. package/dist/lexical/plugins/handles/DraggableBlockPlugin/useKeyboardReordering.d.ts +7 -0
  156. package/dist/lexical/plugins/handles/DraggableBlockPlugin/useKeyboardReordering.d.ts.map +1 -0
  157. package/dist/lexical/plugins/handles/DraggableBlockPlugin/useKeyboardReordering.js +65 -0
  158. package/dist/lexical/plugins/handles/DraggableBlockPlugin/useKeyboardReordering.js.map +1 -0
  159. package/dist/lexical/ui/icons/H3/index.d.ts.map +1 -1
  160. package/dist/lexical/ui/icons/H3/index.js +13 -6
  161. package/dist/lexical/ui/icons/H3/index.js.map +1 -1
  162. package/dist/lexical/ui/icons/H4/index.d.ts.map +1 -1
  163. package/dist/lexical/ui/icons/H4/index.js +13 -6
  164. package/dist/lexical/ui/icons/H4/index.js.map +1 -1
  165. package/dist/lexical/ui/icons/H5/index.d.ts.map +1 -1
  166. package/dist/lexical/ui/icons/H5/index.js +13 -6
  167. package/dist/lexical/ui/icons/H5/index.js.map +1 -1
  168. package/dist/lexical/ui/icons/H6/index.d.ts.map +1 -1
  169. package/dist/lexical/ui/icons/H6/index.js +13 -6
  170. package/dist/lexical/ui/icons/H6/index.js.map +1 -1
  171. package/dist/utilities/upgradeLexicalData/index.js +6 -3
  172. package/dist/utilities/upgradeLexicalData/index.js.map +1 -1
  173. package/package.json +21 -21
  174. package/dist/dependencyChecker.spec.js +0 -16
  175. package/dist/dependencyChecker.spec.js.map +0 -1
  176. package/dist/exports/client/Field-F22V5L4V.js +0 -2
  177. package/dist/exports/client/Field-F22V5L4V.js.map +0 -7
  178. package/dist/features/converters/lexicalToHtml/sync/alignment.spec.js +0 -92
  179. package/dist/features/converters/lexicalToHtml/sync/alignment.spec.js.map +0 -1
  180. package/dist/features/converters/lexicalToPlaintext/convertLexicalToPlaintext.spec.js +0 -180
  181. package/dist/features/converters/lexicalToPlaintext/convertLexicalToPlaintext.spec.js.map +0 -1
  182. package/dist/features/link/markdownTransformer.spec.js +0 -195
  183. package/dist/features/link/markdownTransformer.spec.js.map +0 -1
  184. package/dist/features/toolbars/fixed/client/Toolbar/horizontalWheelScroll.spec.js +0 -65
  185. package/dist/features/toolbars/fixed/client/Toolbar/horizontalWheelScroll.spec.js.map +0 -1
  186. package/dist/lexical/utils/markdown/convertFromMarkdownString.spec.js +0 -88
  187. package/dist/lexical/utils/markdown/convertFromMarkdownString.spec.js.map +0 -1
  188. package/dist/lexical/utils/url.spec.js +0 -114
  189. package/dist/lexical/utils/url.spec.js.map +0 -1
  190. package/dist/utilities/jsx/jsx.spec.js +0 -178
  191. package/dist/utilities/jsx/jsx.spec.js.map +0 -1
@@ -0,0 +1,178 @@
1
+ import { $getNodeByKey, COMMAND_PRIORITY_HIGH, KEY_ENTER_COMMAND, SKIP_DOM_SELECTION_TAG } from 'lexical';
2
+ import { useCallback, useEffect, useLayoutEffect, useRef, useState } from 'react';
3
+ export function useBlockReordering({
4
+ editor,
5
+ nodeKey
6
+ }) {
7
+ const [targetIndex, setTargetIndex] = useState(null);
8
+ const targetRef = useRef(null);
9
+ const isPointerDownRef = useRef(false);
10
+ const cancelAfterPointerRef = useRef(false);
11
+ const isReordering = targetIndex !== null;
12
+ useEffect(() => editor.registerCommand(KEY_ENTER_COMMAND, event => {
13
+ const target = event?.target;
14
+ // Leave Enter to the menu controls instead of editing the retained text selection.
15
+ return target instanceof HTMLElement && Boolean(editor.getElementByKey(nodeKey)?.contains(target)) && Boolean(target.closest('.collapsible__actions button'));
16
+ }, COMMAND_PRIORITY_HIGH), [editor, nodeKey]);
17
+ useEffect(() => {
18
+ if (!isReordering) {
19
+ return;
20
+ }
21
+ let cancelTimer;
22
+ const onPointerDown = () => {
23
+ isPointerDownRef.current = true;
24
+ };
25
+ const onPointerUp = () => {
26
+ isPointerDownRef.current = false;
27
+ if (cancelAfterPointerRef.current) {
28
+ // Let the click fire before restoring the preview's original positions.
29
+ cancelTimer = setTimeout(() => {
30
+ targetRef.current = null;
31
+ setTargetIndex(null);
32
+ }, 0);
33
+ }
34
+ };
35
+ document.addEventListener('pointerdown', onPointerDown, true);
36
+ document.addEventListener('pointerup', onPointerUp, true);
37
+ document.addEventListener('pointercancel', onPointerUp, true);
38
+ return () => {
39
+ document.removeEventListener('pointerdown', onPointerDown, true);
40
+ document.removeEventListener('pointerup', onPointerUp, true);
41
+ document.removeEventListener('pointercancel', onPointerUp, true);
42
+ clearTimeout(cancelTimer);
43
+ isPointerDownRef.current = false;
44
+ cancelAfterPointerRef.current = false;
45
+ };
46
+ }, [isReordering]);
47
+ useLayoutEffect(() => {
48
+ if (targetIndex === null) {
49
+ return;
50
+ }
51
+ const restore = [];
52
+ editor.getEditorState().read(() => {
53
+ const node = $getNodeByKey(nodeKey);
54
+ const siblings = node?.getParent()?.getChildren();
55
+ const currentIndex = node?.getIndexWithinParent();
56
+ if (!siblings || currentIndex === undefined || currentIndex === targetIndex) {
57
+ return;
58
+ }
59
+ const elements = siblings.map(sibling => editor.getElementByKey(sibling.getKey()));
60
+ const source = elements[currentIndex];
61
+ const target = elements[targetIndex];
62
+ const adjacent = elements[currentIndex + (targetIndex > currentIndex ? 1 : -1)];
63
+ if (!source || !target || !adjacent) {
64
+ return;
65
+ }
66
+ const sourceRect = source.getBoundingClientRect();
67
+ const targetRect = target.getBoundingClientRect();
68
+ const adjacentRect = adjacent.getBoundingClientRect();
69
+ const isMovingDown = targetIndex > currentIndex;
70
+ const sourceOffset = isMovingDown ? targetRect.bottom - sourceRect.bottom : targetRect.top - sourceRect.top;
71
+ const siblingOffset = isMovingDown ? sourceRect.top - adjacentRect.top : sourceRect.bottom - adjacentRect.bottom;
72
+ // Preview the pending order without committing an editor change until drop.
73
+ for (let index = Math.min(currentIndex, targetIndex); index <= Math.max(currentIndex, targetIndex); index++) {
74
+ const element = elements[index];
75
+ if (element) {
76
+ const translate = element.style.translate;
77
+ restore.push(() => {
78
+ element.style.translate = translate;
79
+ });
80
+ element.style.translate = `0 ${index === currentIndex ? sourceOffset : siblingOffset}px`;
81
+ }
82
+ }
83
+ source.querySelector('.collapsible__drag')?.scrollIntoView({
84
+ block: 'nearest'
85
+ });
86
+ });
87
+ return () => restore.forEach(reset => reset());
88
+ }, [editor, nodeKey, targetIndex]);
89
+ const move = useCallback(({
90
+ direction,
91
+ index
92
+ }) => {
93
+ if (!editor.isEditable()) {
94
+ return;
95
+ }
96
+ editor.update(() => {
97
+ const node = $getNodeByKey(nodeKey);
98
+ const siblings = node?.getParent()?.getChildren();
99
+ if (!node || !siblings) {
100
+ return;
101
+ }
102
+ const currentIndex = node.getIndexWithinParent();
103
+ const destination = index ?? currentIndex + (direction ?? 0);
104
+ const target = siblings[destination];
105
+ if (target && target !== node) {
106
+ if (destination < currentIndex) {
107
+ target.insertBefore(node);
108
+ } else {
109
+ target.insertAfter(node);
110
+ }
111
+ }
112
+ }, {
113
+ onUpdate: () => {
114
+ // The block header is recreated when its row number changes.
115
+ requestAnimationFrame(() => {
116
+ const header = editor.getElementByKey(nodeKey)?.querySelector('.collapsible__toggle-wrap');
117
+ const focusTarget = header?.querySelector('.collapsible__drag') ?? header?.querySelector('.LexicalEditorTheme__block__actions-button');
118
+ focusTarget?.focus();
119
+ });
120
+ },
121
+ tag: SKIP_DOM_SELECTION_TAG
122
+ });
123
+ }, [editor, nodeKey]);
124
+ const onKeyDown = useCallback(event => {
125
+ if (!editor.isEditable()) {
126
+ return;
127
+ }
128
+ if (event.key === ' ' || event.key === 'Enter') {
129
+ event.preventDefault();
130
+ event.stopPropagation();
131
+ if (targetRef.current === null) {
132
+ editor.getEditorState().read(() => {
133
+ targetRef.current = $getNodeByKey(nodeKey)?.getIndexWithinParent() ?? null;
134
+ });
135
+ setTargetIndex(targetRef.current);
136
+ } else {
137
+ move({
138
+ index: targetRef.current
139
+ });
140
+ targetRef.current = null;
141
+ setTargetIndex(null);
142
+ }
143
+ } else if (targetRef.current !== null) {
144
+ if (event.key === 'Escape' || event.key === 'Tab') {
145
+ targetRef.current = null;
146
+ setTargetIndex(null);
147
+ if (event.key === 'Escape') {
148
+ event.preventDefault();
149
+ event.stopPropagation();
150
+ }
151
+ } else if (event.key === 'ArrowUp' || event.key === 'ArrowDown') {
152
+ event.preventDefault();
153
+ event.stopPropagation();
154
+ editor.getEditorState().read(() => {
155
+ const count = $getNodeByKey(nodeKey)?.getParent()?.getChildrenSize() ?? 0;
156
+ targetRef.current = Math.max(0, Math.min(count - 1, (targetRef.current ?? 0) + (event.key === 'ArrowDown' ? 1 : -1)));
157
+ });
158
+ setTargetIndex(targetRef.current);
159
+ }
160
+ }
161
+ }, [editor, move, nodeKey]);
162
+ const onBlur = useCallback(() => {
163
+ if (isPointerDownRef.current) {
164
+ cancelAfterPointerRef.current = true;
165
+ return;
166
+ }
167
+ targetRef.current = null;
168
+ setTargetIndex(null);
169
+ }, []);
170
+ return {
171
+ isReordering,
172
+ move,
173
+ onBlur,
174
+ onKeyDown,
175
+ targetIndex
176
+ };
177
+ }
178
+ //# sourceMappingURL=useBlockReordering.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useBlockReordering.js","names":["$getNodeByKey","COMMAND_PRIORITY_HIGH","KEY_ENTER_COMMAND","SKIP_DOM_SELECTION_TAG","useCallback","useEffect","useLayoutEffect","useRef","useState","useBlockReordering","editor","nodeKey","targetIndex","setTargetIndex","targetRef","isPointerDownRef","cancelAfterPointerRef","isReordering","registerCommand","event","target","HTMLElement","Boolean","getElementByKey","contains","closest","cancelTimer","onPointerDown","current","onPointerUp","setTimeout","document","addEventListener","removeEventListener","clearTimeout","restore","getEditorState","read","node","siblings","getParent","getChildren","currentIndex","getIndexWithinParent","undefined","elements","map","sibling","getKey","source","adjacent","sourceRect","getBoundingClientRect","targetRect","adjacentRect","isMovingDown","sourceOffset","bottom","top","siblingOffset","index","Math","min","max","element","translate","style","push","querySelector","scrollIntoView","block","forEach","reset","move","direction","isEditable","update","destination","insertBefore","insertAfter","onUpdate","requestAnimationFrame","header","focusTarget","focus","tag","onKeyDown","key","preventDefault","stopPropagation","count","getChildrenSize","onBlur"],"sources":["../../../../../src/features/blocks/client/component/useBlockReordering.ts"],"sourcesContent":["import type { LexicalEditor } from 'lexical'\nimport type { KeyboardEvent } from 'react'\n\nimport {\n $getNodeByKey,\n COMMAND_PRIORITY_HIGH,\n KEY_ENTER_COMMAND,\n SKIP_DOM_SELECTION_TAG,\n} from 'lexical'\nimport { useCallback, useEffect, useLayoutEffect, useRef, useState } from 'react'\n\nexport function useBlockReordering({\n editor,\n nodeKey,\n}: {\n editor: LexicalEditor\n nodeKey: string\n}) {\n const [targetIndex, setTargetIndex] = useState<null | number>(null)\n const targetRef = useRef<null | number>(null)\n const isPointerDownRef = useRef(false)\n const cancelAfterPointerRef = useRef(false)\n const isReordering = targetIndex !== null\n\n useEffect(\n () =>\n editor.registerCommand(\n KEY_ENTER_COMMAND,\n (event) => {\n const target = event?.target\n\n // Leave Enter to the menu controls instead of editing the retained text selection.\n return (\n target instanceof HTMLElement &&\n Boolean(editor.getElementByKey(nodeKey)?.contains(target)) &&\n Boolean(target.closest('.collapsible__actions button'))\n )\n },\n COMMAND_PRIORITY_HIGH,\n ),\n [editor, nodeKey],\n )\n\n useEffect(() => {\n if (!isReordering) {\n return\n }\n let cancelTimer: ReturnType<typeof setTimeout> | undefined\n const onPointerDown = () => {\n isPointerDownRef.current = true\n }\n const onPointerUp = () => {\n isPointerDownRef.current = false\n if (cancelAfterPointerRef.current) {\n // Let the click fire before restoring the preview's original positions.\n cancelTimer = setTimeout(() => {\n targetRef.current = null\n setTargetIndex(null)\n }, 0)\n }\n }\n\n document.addEventListener('pointerdown', onPointerDown, true)\n document.addEventListener('pointerup', onPointerUp, true)\n document.addEventListener('pointercancel', onPointerUp, true)\n return () => {\n document.removeEventListener('pointerdown', onPointerDown, true)\n document.removeEventListener('pointerup', onPointerUp, true)\n document.removeEventListener('pointercancel', onPointerUp, true)\n clearTimeout(cancelTimer)\n isPointerDownRef.current = false\n cancelAfterPointerRef.current = false\n }\n }, [isReordering])\n\n useLayoutEffect(() => {\n if (targetIndex === null) {\n return\n }\n const restore: (() => void)[] = []\n\n editor.getEditorState().read(() => {\n const node = $getNodeByKey(nodeKey)\n const siblings = node?.getParent()?.getChildren()\n const currentIndex = node?.getIndexWithinParent()\n\n if (!siblings || currentIndex === undefined || currentIndex === targetIndex) {\n return\n }\n const elements = siblings.map((sibling) => editor.getElementByKey(sibling.getKey()))\n const source = elements[currentIndex]\n const target = elements[targetIndex]\n const adjacent = elements[currentIndex + (targetIndex > currentIndex ? 1 : -1)]\n\n if (!source || !target || !adjacent) {\n return\n }\n const sourceRect = source.getBoundingClientRect()\n const targetRect = target.getBoundingClientRect()\n const adjacentRect = adjacent.getBoundingClientRect()\n const isMovingDown = targetIndex > currentIndex\n const sourceOffset = isMovingDown\n ? targetRect.bottom - sourceRect.bottom\n : targetRect.top - sourceRect.top\n const siblingOffset = isMovingDown\n ? sourceRect.top - adjacentRect.top\n : sourceRect.bottom - adjacentRect.bottom\n\n // Preview the pending order without committing an editor change until drop.\n for (\n let index = Math.min(currentIndex, targetIndex);\n index <= Math.max(currentIndex, targetIndex);\n index++\n ) {\n const element = elements[index]\n\n if (element) {\n const translate = element.style.translate\n\n restore.push(() => {\n element.style.translate = translate\n })\n element.style.translate = `0 ${index === currentIndex ? sourceOffset : siblingOffset}px`\n }\n }\n source.querySelector('.collapsible__drag')?.scrollIntoView({ block: 'nearest' })\n })\n\n return () => restore.forEach((reset) => reset())\n }, [editor, nodeKey, targetIndex])\n\n const move = useCallback(\n ({ direction, index }: { direction?: -1 | 1; index?: number }) => {\n if (!editor.isEditable()) {\n return\n }\n editor.update(\n () => {\n const node = $getNodeByKey(nodeKey)\n const siblings = node?.getParent()?.getChildren()\n\n if (!node || !siblings) {\n return\n }\n const currentIndex = node.getIndexWithinParent()\n const destination = index ?? currentIndex + (direction ?? 0)\n const target = siblings[destination]\n\n if (target && target !== node) {\n if (destination < currentIndex) {\n target.insertBefore(node)\n } else {\n target.insertAfter(node)\n }\n }\n },\n {\n onUpdate: () => {\n // The block header is recreated when its row number changes.\n requestAnimationFrame(() => {\n const header = editor\n .getElementByKey(nodeKey)\n ?.querySelector('.collapsible__toggle-wrap')\n const focusTarget =\n header?.querySelector<HTMLElement>('.collapsible__drag') ??\n header?.querySelector<HTMLElement>('.LexicalEditorTheme__block__actions-button')\n\n focusTarget?.focus()\n })\n },\n tag: SKIP_DOM_SELECTION_TAG,\n },\n )\n },\n [editor, nodeKey],\n )\n\n const onKeyDown = useCallback(\n (event: KeyboardEvent) => {\n if (!editor.isEditable()) {\n return\n }\n if (event.key === ' ' || event.key === 'Enter') {\n event.preventDefault()\n event.stopPropagation()\n if (targetRef.current === null) {\n editor.getEditorState().read(() => {\n targetRef.current = $getNodeByKey(nodeKey)?.getIndexWithinParent() ?? null\n })\n setTargetIndex(targetRef.current)\n } else {\n move({ index: targetRef.current })\n targetRef.current = null\n setTargetIndex(null)\n }\n } else if (targetRef.current !== null) {\n if (event.key === 'Escape' || event.key === 'Tab') {\n targetRef.current = null\n setTargetIndex(null)\n if (event.key === 'Escape') {\n event.preventDefault()\n event.stopPropagation()\n }\n } else if (event.key === 'ArrowUp' || event.key === 'ArrowDown') {\n event.preventDefault()\n event.stopPropagation()\n editor.getEditorState().read(() => {\n const count = $getNodeByKey(nodeKey)?.getParent()?.getChildrenSize() ?? 0\n targetRef.current = Math.max(\n 0,\n Math.min(count - 1, (targetRef.current ?? 0) + (event.key === 'ArrowDown' ? 1 : -1)),\n )\n })\n setTargetIndex(targetRef.current)\n }\n }\n },\n [editor, move, nodeKey],\n )\n\n const onBlur = useCallback(() => {\n if (isPointerDownRef.current) {\n cancelAfterPointerRef.current = true\n return\n }\n targetRef.current = null\n setTargetIndex(null)\n }, [])\n\n return { isReordering, move, onBlur, onKeyDown, targetIndex }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1,4 +1,4 @@
1
- const ALLOWED_HEADING_TAGS = new Set(['h1', 'h2', 'h3', 'h4', 'h5', 'h6']);
1
+ import { ALLOWED_HEADING_TAGS } from '../../../../heading/constants.js';
2
2
  export const HeadingHTMLConverterAsync = {
3
3
  heading: async ({
4
4
  node,
@@ -1 +1 @@
1
- {"version":3,"file":"heading.js","names":["ALLOWED_HEADING_TAGS","Set","HeadingHTMLConverterAsync","heading","node","nodesToHTML","providedStyleTag","children","nodes","join","tag","has"],"sources":["../../../../../../src/features/converters/lexicalToHtml/async/converters/heading.ts"],"sourcesContent":["import type { SerializedHeadingNode } from '../../../../../types/nodeTypes.js'\nimport type { HTMLConvertersAsync } from '../types.js'\n\nconst ALLOWED_HEADING_TAGS = new Set(['h1', 'h2', 'h3', 'h4', 'h5', 'h6'])\n\nexport const HeadingHTMLConverterAsync: HTMLConvertersAsync<SerializedHeadingNode> = {\n heading: async ({ node, nodesToHTML, providedStyleTag }) => {\n const children = (\n await nodesToHTML({\n nodes: node.children,\n })\n ).join('')\n\n const tag = ALLOWED_HEADING_TAGS.has(node.tag) ? node.tag : 'h1'\n\n return `<${tag}${providedStyleTag}>${children}</${tag}>`\n },\n}\n"],"mappings":"AAGA,MAAMA,oBAAA,GAAuB,IAAIC,GAAA,CAAI,CAAC,MAAM,MAAM,MAAM,MAAM,MAAM,KAAK;AAEzE,OAAO,MAAMC,yBAAA,GAAwE;EACnFC,OAAA,EAAS,MAAAA,CAAO;IAAEC,IAAI;IAAEC,WAAW;IAAEC;EAAgB,CAAE;IACrD,MAAMC,QAAA,GAAW,CACf,MAAMF,WAAA,CAAY;MAChBG,KAAA,EAAOJ,IAAA,CAAKG;IACd,EAAC,EACDE,IAAI,CAAC;IAEP,MAAMC,GAAA,GAAMV,oBAAA,CAAqBW,GAAG,CAACP,IAAA,CAAKM,GAAG,IAAIN,IAAA,CAAKM,GAAG,GAAG;IAE5D,OAAO,IAAIA,GAAA,GAAMJ,gBAAA,IAAoBC,QAAA,KAAaG,GAAA,GAAM;EAC1D;AACF","ignoreList":[]}
1
+ {"version":3,"file":"heading.js","names":["ALLOWED_HEADING_TAGS","HeadingHTMLConverterAsync","heading","node","nodesToHTML","providedStyleTag","children","nodes","join","tag","has"],"sources":["../../../../../../src/features/converters/lexicalToHtml/async/converters/heading.ts"],"sourcesContent":["import type { SerializedHeadingNode } from '../../../../../types/nodeTypes.js'\nimport type { HTMLConvertersAsync } from '../types.js'\n\nimport { ALLOWED_HEADING_TAGS } from '../../../../heading/constants.js'\n\nexport const HeadingHTMLConverterAsync: HTMLConvertersAsync<SerializedHeadingNode> = {\n heading: async ({ node, nodesToHTML, providedStyleTag }) => {\n const children = (\n await nodesToHTML({\n nodes: node.children,\n })\n ).join('')\n\n const tag = ALLOWED_HEADING_TAGS.has(node.tag) ? node.tag : 'h1'\n\n return `<${tag}${providedStyleTag}>${children}</${tag}>`\n },\n}\n"],"mappings":"AAGA,SAASA,oBAAoB,QAAQ;AAErC,OAAO,MAAMC,yBAAA,GAAwE;EACnFC,OAAA,EAAS,MAAAA,CAAO;IAAEC,IAAI;IAAEC,WAAW;IAAEC;EAAgB,CAAE;IACrD,MAAMC,QAAA,GAAW,CACf,MAAMF,WAAA,CAAY;MAChBG,KAAA,EAAOJ,IAAA,CAAKG;IACd,EAAC,EACDE,IAAI,CAAC;IAEP,MAAMC,GAAA,GAAMT,oBAAA,CAAqBU,GAAG,CAACP,IAAA,CAAKM,GAAG,IAAIN,IAAA,CAAKM,GAAG,GAAG;IAE5D,OAAO,IAAIA,GAAA,GAAMJ,gBAAA,IAAoBC,QAAA,KAAaG,GAAA,GAAM;EAC1D;AACF","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../../../../src/features/converters/lexicalToHtml/async/converters/list.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAA;AACnG,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAKtD,eAAO,MAAM,sBAAsB,EAAE,mBAAmB,CACtD,sBAAsB,GAAG,kBAAkB,CAiD5C,CAAA"}
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../../../../src/features/converters/lexicalToHtml/async/converters/list.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAA;AACnG,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAMtD,eAAO,MAAM,sBAAsB,EAAE,mBAAmB,CACtD,sBAAsB,GAAG,kBAAkB,CAiD5C,CAAA"}
@@ -1,5 +1,6 @@
1
+ import escapeHTML from 'escape-html';
1
2
  import { v4 as uuidv4 } from 'uuid';
2
- const ALLOWED_LIST_TAGS = new Set(['ol', 'ul']);
3
+ import { ALLOWED_LIST_TAGS } from '../../../../lists/shared/constants.js';
3
4
  const ALLOWED_LIST_TYPES = new Set(['bullet', 'check', 'number']);
4
5
  export const ListHTMLConverterAsync = {
5
6
  list: async ({
@@ -32,7 +33,7 @@ export const ListHTMLConverterAsync = {
32
33
  role="checkbox"
33
34
  style="list-style-type: none;${providedCSSString}"
34
35
  tabIndex="-1"
35
- value="${node.value}"
36
+ value="${escapeHTML(String(node.value))}"
36
37
  >
37
38
  ${hasSubLists ? children : `<input${node.checked ? ' checked' : ''} id="${uuid}" readOnly="true" type="checkbox" />
38
39
  <label htmlFor="${uuid}">${children}</label>
@@ -42,7 +43,7 @@ export const ListHTMLConverterAsync = {
42
43
  return `<li
43
44
  class="${hasSubLists ? 'nestedListItem' : ''}"
44
45
  style="${hasSubLists ? `list-style-type: none;${providedCSSString}` : providedCSSString}"
45
- value="${node.value}"
46
+ value="${escapeHTML(String(node.value))}"
46
47
  >${children}</li>`;
47
48
  }
48
49
  }
@@ -1 +1 @@
1
- {"version":3,"file":"list.js","names":["v4","uuidv4","ALLOWED_LIST_TAGS","Set","ALLOWED_LIST_TYPES","ListHTMLConverterAsync","list","node","nodesToHTML","providedStyleTag","children","nodes","join","tag","has","listType","listitem","parent","providedCSSString","hasSubLists","some","child","type","uuid","checked","value"],"sources":["../../../../../../src/features/converters/lexicalToHtml/async/converters/list.ts"],"sourcesContent":["import { v4 as uuidv4 } from 'uuid'\n\nimport type { SerializedListItemNode, SerializedListNode } from '../../../../../types/nodeTypes.js'\nimport type { HTMLConvertersAsync } from '../types.js'\n\nconst ALLOWED_LIST_TAGS = new Set(['ol', 'ul'])\nconst ALLOWED_LIST_TYPES = new Set(['bullet', 'check', 'number'])\n\nexport const ListHTMLConverterAsync: HTMLConvertersAsync<\n SerializedListItemNode | SerializedListNode\n> = {\n list: async ({ node, nodesToHTML, providedStyleTag }) => {\n const children = (\n await nodesToHTML({\n nodes: node.children,\n })\n ).join('')\n\n const tag = ALLOWED_LIST_TAGS.has(node.tag) ? node.tag : 'ul'\n const listType = ALLOWED_LIST_TYPES.has(node.listType) ? node.listType : 'bullet'\n\n return `<${tag}${providedStyleTag} class=\"list-${listType}\">${children}</${tag}>`\n },\n listitem: async ({ node, nodesToHTML, parent, providedCSSString }) => {\n const hasSubLists = node.children.some((child) => child.type === 'list')\n\n const children = (\n await nodesToHTML({\n nodes: node.children,\n })\n ).join('')\n\n if ('listType' in parent && parent?.listType === 'check') {\n const uuid = uuidv4()\n return `<li\n aria-checked=\"${node.checked ? 'true' : 'false'}\"\n class=\"list-item-checkbox${node.checked ? ' list-item-checkbox-checked' : ' list-item-checkbox-unchecked'}${hasSubLists ? ' nestedListItem' : ''}\"\n role=\"checkbox\"\n style=\"list-style-type: none;${providedCSSString}\"\n tabIndex=\"-1\"\n value=\"${node.value}\"\n >\n ${\n hasSubLists\n ? children\n : `<input${node.checked ? ' checked' : ''} id=\"${uuid}\" readOnly=\"true\" type=\"checkbox\" />\n <label htmlFor=\"${uuid}\">${children}</label>\n <br />`\n }\n </li>`\n } else {\n return `<li\n class=\"${hasSubLists ? 'nestedListItem' : ''}\"\n style=\"${hasSubLists ? `list-style-type: none;${providedCSSString}` : providedCSSString}\"\n value=\"${node.value}\"\n >${children}</li>`\n }\n },\n}\n"],"mappings":"AAAA,SAASA,EAAA,IAAMC,MAAM,QAAQ;AAK7B,MAAMC,iBAAA,GAAoB,IAAIC,GAAA,CAAI,CAAC,MAAM,KAAK;AAC9C,MAAMC,kBAAA,GAAqB,IAAID,GAAA,CAAI,CAAC,UAAU,SAAS,SAAS;AAEhE,OAAO,MAAME,sBAAA,GAET;EACFC,IAAA,EAAM,MAAAA,CAAO;IAAEC,IAAI;IAAEC,WAAW;IAAEC;EAAgB,CAAE;IAClD,MAAMC,QAAA,GAAW,CACf,MAAMF,WAAA,CAAY;MAChBG,KAAA,EAAOJ,IAAA,CAAKG;IACd,EAAC,EACDE,IAAI,CAAC;IAEP,MAAMC,GAAA,GAAMX,iBAAA,CAAkBY,GAAG,CAACP,IAAA,CAAKM,GAAG,IAAIN,IAAA,CAAKM,GAAG,GAAG;IACzD,MAAME,QAAA,GAAWX,kBAAA,CAAmBU,GAAG,CAACP,IAAA,CAAKQ,QAAQ,IAAIR,IAAA,CAAKQ,QAAQ,GAAG;IAEzE,OAAO,IAAIF,GAAA,GAAMJ,gBAAA,gBAAgCM,QAAA,KAAaL,QAAA,KAAaG,GAAA,GAAM;EACnF;EACAG,QAAA,EAAU,MAAAA,CAAO;IAAET,IAAI;IAAEC,WAAW;IAAES,MAAM;IAAEC;EAAiB,CAAE;IAC/D,MAAMC,WAAA,GAAcZ,IAAA,CAAKG,QAAQ,CAACU,IAAI,CAAEC,KAAA,IAAUA,KAAA,CAAMC,IAAI,KAAK;IAEjE,MAAMZ,QAAA,GAAW,CACf,MAAMF,WAAA,CAAY;MAChBG,KAAA,EAAOJ,IAAA,CAAKG;IACd,EAAC,EACDE,IAAI,CAAC;IAEP,IAAI,cAAcK,MAAA,IAAUA,MAAA,EAAQF,QAAA,KAAa,SAAS;MACxD,MAAMQ,IAAA,GAAOtB,MAAA;MACb,OAAO;0BACaM,IAAA,CAAKiB,OAAO,GAAG,SAAS;qCACbjB,IAAA,CAAKiB,OAAO,GAAG,gCAAgC,kCAAkCL,WAAA,GAAc,oBAAoB;;yCAE/GD,iBAAA;;mBAEtBX,IAAA,CAAKkB,KAAK;;YAGjBN,WAAA,GACIT,QAAA,GACA,SAASH,IAAA,CAAKiB,OAAO,GAAG,aAAa,UAAUD,IAAA;8BACjCA,IAAA,KAASb,QAAA;mBACpB;cAEL;IACV,OAAO;MACL,OAAO;mBACMS,WAAA,GAAc,mBAAmB;mBACjCA,WAAA,GAAc,yBAAyBD,iBAAA,EAAmB,GAAGA,iBAAA;mBAC7DX,IAAA,CAAKkB,KAAK;WAClBf,QAAA,OAAe;IACtB;EACF;AACF","ignoreList":[]}
1
+ {"version":3,"file":"list.js","names":["escapeHTML","v4","uuidv4","ALLOWED_LIST_TAGS","ALLOWED_LIST_TYPES","Set","ListHTMLConverterAsync","list","node","nodesToHTML","providedStyleTag","children","nodes","join","tag","has","listType","listitem","parent","providedCSSString","hasSubLists","some","child","type","uuid","checked","String","value"],"sources":["../../../../../../src/features/converters/lexicalToHtml/async/converters/list.ts"],"sourcesContent":["import escapeHTML from 'escape-html'\nimport { v4 as uuidv4 } from 'uuid'\n\nimport type { SerializedListItemNode, SerializedListNode } from '../../../../../types/nodeTypes.js'\nimport type { HTMLConvertersAsync } from '../types.js'\n\nimport { ALLOWED_LIST_TAGS } from '../../../../lists/shared/constants.js'\n\nconst ALLOWED_LIST_TYPES = new Set(['bullet', 'check', 'number'])\n\nexport const ListHTMLConverterAsync: HTMLConvertersAsync<\n SerializedListItemNode | SerializedListNode\n> = {\n list: async ({ node, nodesToHTML, providedStyleTag }) => {\n const children = (\n await nodesToHTML({\n nodes: node.children,\n })\n ).join('')\n\n const tag = ALLOWED_LIST_TAGS.has(node.tag) ? node.tag : 'ul'\n const listType = ALLOWED_LIST_TYPES.has(node.listType) ? node.listType : 'bullet'\n\n return `<${tag}${providedStyleTag} class=\"list-${listType}\">${children}</${tag}>`\n },\n listitem: async ({ node, nodesToHTML, parent, providedCSSString }) => {\n const hasSubLists = node.children.some((child) => child.type === 'list')\n\n const children = (\n await nodesToHTML({\n nodes: node.children,\n })\n ).join('')\n\n if ('listType' in parent && parent?.listType === 'check') {\n const uuid = uuidv4()\n return `<li\n aria-checked=\"${node.checked ? 'true' : 'false'}\"\n class=\"list-item-checkbox${node.checked ? ' list-item-checkbox-checked' : ' list-item-checkbox-unchecked'}${hasSubLists ? ' nestedListItem' : ''}\"\n role=\"checkbox\"\n style=\"list-style-type: none;${providedCSSString}\"\n tabIndex=\"-1\"\n value=\"${escapeHTML(String(node.value))}\"\n >\n ${\n hasSubLists\n ? children\n : `<input${node.checked ? ' checked' : ''} id=\"${uuid}\" readOnly=\"true\" type=\"checkbox\" />\n <label htmlFor=\"${uuid}\">${children}</label>\n <br />`\n }\n </li>`\n } else {\n return `<li\n class=\"${hasSubLists ? 'nestedListItem' : ''}\"\n style=\"${hasSubLists ? `list-style-type: none;${providedCSSString}` : providedCSSString}\"\n value=\"${escapeHTML(String(node.value))}\"\n >${children}</li>`\n }\n },\n}\n"],"mappings":"AAAA,OAAOA,UAAA,MAAgB;AACvB,SAASC,EAAA,IAAMC,MAAM,QAAQ;AAK7B,SAASC,iBAAiB,QAAQ;AAElC,MAAMC,kBAAA,GAAqB,IAAIC,GAAA,CAAI,CAAC,UAAU,SAAS,SAAS;AAEhE,OAAO,MAAMC,sBAAA,GAET;EACFC,IAAA,EAAM,MAAAA,CAAO;IAAEC,IAAI;IAAEC,WAAW;IAAEC;EAAgB,CAAE;IAClD,MAAMC,QAAA,GAAW,CACf,MAAMF,WAAA,CAAY;MAChBG,KAAA,EAAOJ,IAAA,CAAKG;IACd,EAAC,EACDE,IAAI,CAAC;IAEP,MAAMC,GAAA,GAAMX,iBAAA,CAAkBY,GAAG,CAACP,IAAA,CAAKM,GAAG,IAAIN,IAAA,CAAKM,GAAG,GAAG;IACzD,MAAME,QAAA,GAAWZ,kBAAA,CAAmBW,GAAG,CAACP,IAAA,CAAKQ,QAAQ,IAAIR,IAAA,CAAKQ,QAAQ,GAAG;IAEzE,OAAO,IAAIF,GAAA,GAAMJ,gBAAA,gBAAgCM,QAAA,KAAaL,QAAA,KAAaG,GAAA,GAAM;EACnF;EACAG,QAAA,EAAU,MAAAA,CAAO;IAAET,IAAI;IAAEC,WAAW;IAAES,MAAM;IAAEC;EAAiB,CAAE;IAC/D,MAAMC,WAAA,GAAcZ,IAAA,CAAKG,QAAQ,CAACU,IAAI,CAAEC,KAAA,IAAUA,KAAA,CAAMC,IAAI,KAAK;IAEjE,MAAMZ,QAAA,GAAW,CACf,MAAMF,WAAA,CAAY;MAChBG,KAAA,EAAOJ,IAAA,CAAKG;IACd,EAAC,EACDE,IAAI,CAAC;IAEP,IAAI,cAAcK,MAAA,IAAUA,MAAA,EAAQF,QAAA,KAAa,SAAS;MACxD,MAAMQ,IAAA,GAAOtB,MAAA;MACb,OAAO;0BACaM,IAAA,CAAKiB,OAAO,GAAG,SAAS;qCACbjB,IAAA,CAAKiB,OAAO,GAAG,gCAAgC,kCAAkCL,WAAA,GAAc,oBAAoB;;yCAE/GD,iBAAA;;mBAEtBnB,UAAA,CAAW0B,MAAA,CAAOlB,IAAA,CAAKmB,KAAK;;YAGnCP,WAAA,GACIT,QAAA,GACA,SAASH,IAAA,CAAKiB,OAAO,GAAG,aAAa,UAAUD,IAAA;8BACjCA,IAAA,KAASb,QAAA;mBACpB;cAEL;IACV,OAAO;MACL,OAAO;mBACMS,WAAA,GAAc,mBAAmB;mBACjCA,WAAA,GAAc,yBAAyBD,iBAAA,EAAmB,GAAGA,iBAAA;mBAC7DnB,UAAA,CAAW0B,MAAA,CAAOlB,IAAA,CAAKmB,KAAK;WACpChB,QAAA,OAAe;IACtB;EACF;AACF","ignoreList":[]}
@@ -1,4 +1,4 @@
1
- const ALLOWED_HEADING_TAGS = new Set(['h1', 'h2', 'h3', 'h4', 'h5', 'h6']);
1
+ import { ALLOWED_HEADING_TAGS } from '../../../../heading/constants.js';
2
2
  export const HeadingHTMLConverter = {
3
3
  heading: ({
4
4
  node,
@@ -1 +1 @@
1
- {"version":3,"file":"heading.js","names":["ALLOWED_HEADING_TAGS","Set","HeadingHTMLConverter","heading","node","nodesToHTML","providedStyleTag","children","nodes","join","tag","has"],"sources":["../../../../../../src/features/converters/lexicalToHtml/sync/converters/heading.ts"],"sourcesContent":["import type { SerializedHeadingNode } from '../../../../../types/nodeTypes.js'\nimport type { HTMLConverters } from '../types.js'\n\nconst ALLOWED_HEADING_TAGS = new Set(['h1', 'h2', 'h3', 'h4', 'h5', 'h6'])\n\nexport const HeadingHTMLConverter: HTMLConverters<SerializedHeadingNode> = {\n heading: ({ node, nodesToHTML, providedStyleTag }) => {\n const children = nodesToHTML({\n nodes: node.children,\n }).join('')\n\n const tag = ALLOWED_HEADING_TAGS.has(node.tag) ? node.tag : 'h1'\n\n return `<${tag}${providedStyleTag}>${children}</${tag}>`\n },\n}\n"],"mappings":"AAGA,MAAMA,oBAAA,GAAuB,IAAIC,GAAA,CAAI,CAAC,MAAM,MAAM,MAAM,MAAM,MAAM,KAAK;AAEzE,OAAO,MAAMC,oBAAA,GAA8D;EACzEC,OAAA,EAASA,CAAC;IAAEC,IAAI;IAAEC,WAAW;IAAEC;EAAgB,CAAE;IAC/C,MAAMC,QAAA,GAAWF,WAAA,CAAY;MAC3BG,KAAA,EAAOJ,IAAA,CAAKG;IACd,GAAGE,IAAI,CAAC;IAER,MAAMC,GAAA,GAAMV,oBAAA,CAAqBW,GAAG,CAACP,IAAA,CAAKM,GAAG,IAAIN,IAAA,CAAKM,GAAG,GAAG;IAE5D,OAAO,IAAIA,GAAA,GAAMJ,gBAAA,IAAoBC,QAAA,KAAaG,GAAA,GAAM;EAC1D;AACF","ignoreList":[]}
1
+ {"version":3,"file":"heading.js","names":["ALLOWED_HEADING_TAGS","HeadingHTMLConverter","heading","node","nodesToHTML","providedStyleTag","children","nodes","join","tag","has"],"sources":["../../../../../../src/features/converters/lexicalToHtml/sync/converters/heading.ts"],"sourcesContent":["import type { SerializedHeadingNode } from '../../../../../types/nodeTypes.js'\nimport type { HTMLConverters } from '../types.js'\n\nimport { ALLOWED_HEADING_TAGS } from '../../../../heading/constants.js'\n\nexport const HeadingHTMLConverter: HTMLConverters<SerializedHeadingNode> = {\n heading: ({ node, nodesToHTML, providedStyleTag }) => {\n const children = nodesToHTML({\n nodes: node.children,\n }).join('')\n\n const tag = ALLOWED_HEADING_TAGS.has(node.tag) ? node.tag : 'h1'\n\n return `<${tag}${providedStyleTag}>${children}</${tag}>`\n },\n}\n"],"mappings":"AAGA,SAASA,oBAAoB,QAAQ;AAErC,OAAO,MAAMC,oBAAA,GAA8D;EACzEC,OAAA,EAASA,CAAC;IAAEC,IAAI;IAAEC,WAAW;IAAEC;EAAgB,CAAE;IAC/C,MAAMC,QAAA,GAAWF,WAAA,CAAY;MAC3BG,KAAA,EAAOJ,IAAA,CAAKG;IACd,GAAGE,IAAI,CAAC;IAER,MAAMC,GAAA,GAAMT,oBAAA,CAAqBU,GAAG,CAACP,IAAA,CAAKM,GAAG,IAAIN,IAAA,CAAKM,GAAG,GAAG;IAE5D,OAAO,IAAIA,GAAA,GAAMJ,gBAAA,IAAoBC,QAAA,KAAaG,GAAA,GAAM;EAC1D;AACF","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../../../../src/features/converters/lexicalToHtml/sync/converters/list.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAA;AACnG,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAKjD,eAAO,MAAM,iBAAiB,EAAE,cAAc,CAAC,sBAAsB,GAAG,kBAAkB,CA4CzF,CAAA"}
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../../../../src/features/converters/lexicalToHtml/sync/converters/list.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAA;AACnG,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAMjD,eAAO,MAAM,iBAAiB,EAAE,cAAc,CAAC,sBAAsB,GAAG,kBAAkB,CA4CzF,CAAA"}
@@ -1,5 +1,6 @@
1
+ import escapeHTML from 'escape-html';
1
2
  import { v4 as uuidv4 } from 'uuid';
2
- const ALLOWED_LIST_TAGS = new Set(['ol', 'ul']);
3
+ import { ALLOWED_LIST_TAGS } from '../../../../lists/shared/constants.js';
3
4
  const ALLOWED_LIST_TYPES = new Set(['bullet', 'check', 'number']);
4
5
  export const ListHTMLConverter = {
5
6
  list: ({
@@ -32,7 +33,7 @@ export const ListHTMLConverter = {
32
33
  role="checkbox"
33
34
  style="list-style-type: none;${providedCSSString}"
34
35
  tabIndex="-1"
35
- value="${node.value}"
36
+ value="${escapeHTML(String(node.value))}"
36
37
  >
37
38
  ${hasSubLists ? children : `<input${node.checked ? ' checked' : ''} id="${uuid}" readOnly="true" type="checkbox" />
38
39
  <label htmlFor="${uuid}">${children}</label>
@@ -42,7 +43,7 @@ export const ListHTMLConverter = {
42
43
  return `<li
43
44
  class="${hasSubLists ? 'nestedListItem' : ''}"
44
45
  style="${hasSubLists ? `list-style-type: none;${providedCSSString}` : providedCSSString}"
45
- value="${node.value}"
46
+ value="${escapeHTML(String(node.value))}"
46
47
  >${children}</li>`;
47
48
  }
48
49
  }
@@ -1 +1 @@
1
- {"version":3,"file":"list.js","names":["v4","uuidv4","ALLOWED_LIST_TAGS","Set","ALLOWED_LIST_TYPES","ListHTMLConverter","list","node","nodesToHTML","providedStyleTag","children","nodes","join","tag","has","listType","listitem","parent","providedCSSString","hasSubLists","some","child","type","uuid","checked","value"],"sources":["../../../../../../src/features/converters/lexicalToHtml/sync/converters/list.ts"],"sourcesContent":["import { v4 as uuidv4 } from 'uuid'\n\nimport type { SerializedListItemNode, SerializedListNode } from '../../../../../types/nodeTypes.js'\nimport type { HTMLConverters } from '../types.js'\n\nconst ALLOWED_LIST_TAGS = new Set(['ol', 'ul'])\nconst ALLOWED_LIST_TYPES = new Set(['bullet', 'check', 'number'])\n\nexport const ListHTMLConverter: HTMLConverters<SerializedListItemNode | SerializedListNode> = {\n list: ({ node, nodesToHTML, providedStyleTag }) => {\n const children = nodesToHTML({\n nodes: node.children,\n }).join('')\n\n const tag = ALLOWED_LIST_TAGS.has(node.tag) ? node.tag : 'ul'\n const listType = ALLOWED_LIST_TYPES.has(node.listType) ? node.listType : 'bullet'\n\n return `<${tag}${providedStyleTag} class=\"list-${listType}\">${children}</${tag}>`\n },\n listitem: ({ node, nodesToHTML, parent, providedCSSString }) => {\n const hasSubLists = node.children.some((child) => child.type === 'list')\n\n const children = nodesToHTML({\n nodes: node.children,\n }).join('')\n\n if ('listType' in parent && parent?.listType === 'check') {\n const uuid = uuidv4()\n return `<li\n aria-checked=\"${node.checked ? 'true' : 'false'}\"\n class=\"list-item-checkbox${node.checked ? ' list-item-checkbox-checked' : ' list-item-checkbox-unchecked'}${hasSubLists ? ' nestedListItem' : ''}\"\n role=\"checkbox\"\n style=\"list-style-type: none;${providedCSSString}\"\n tabIndex=\"-1\"\n value=\"${node.value}\"\n >\n ${\n hasSubLists\n ? children\n : `<input${node.checked ? ' checked' : ''} id=\"${uuid}\" readOnly=\"true\" type=\"checkbox\" />\n <label htmlFor=\"${uuid}\">${children}</label>\n <br />`\n }\n </li>`\n } else {\n return `<li\n class=\"${hasSubLists ? 'nestedListItem' : ''}\"\n style=\"${hasSubLists ? `list-style-type: none;${providedCSSString}` : providedCSSString}\"\n value=\"${node.value}\"\n >${children}</li>`\n }\n },\n}\n"],"mappings":"AAAA,SAASA,EAAA,IAAMC,MAAM,QAAQ;AAK7B,MAAMC,iBAAA,GAAoB,IAAIC,GAAA,CAAI,CAAC,MAAM,KAAK;AAC9C,MAAMC,kBAAA,GAAqB,IAAID,GAAA,CAAI,CAAC,UAAU,SAAS,SAAS;AAEhE,OAAO,MAAME,iBAAA,GAAiF;EAC5FC,IAAA,EAAMA,CAAC;IAAEC,IAAI;IAAEC,WAAW;IAAEC;EAAgB,CAAE;IAC5C,MAAMC,QAAA,GAAWF,WAAA,CAAY;MAC3BG,KAAA,EAAOJ,IAAA,CAAKG;IACd,GAAGE,IAAI,CAAC;IAER,MAAMC,GAAA,GAAMX,iBAAA,CAAkBY,GAAG,CAACP,IAAA,CAAKM,GAAG,IAAIN,IAAA,CAAKM,GAAG,GAAG;IACzD,MAAME,QAAA,GAAWX,kBAAA,CAAmBU,GAAG,CAACP,IAAA,CAAKQ,QAAQ,IAAIR,IAAA,CAAKQ,QAAQ,GAAG;IAEzE,OAAO,IAAIF,GAAA,GAAMJ,gBAAA,gBAAgCM,QAAA,KAAaL,QAAA,KAAaG,GAAA,GAAM;EACnF;EACAG,QAAA,EAAUA,CAAC;IAAET,IAAI;IAAEC,WAAW;IAAES,MAAM;IAAEC;EAAiB,CAAE;IACzD,MAAMC,WAAA,GAAcZ,IAAA,CAAKG,QAAQ,CAACU,IAAI,CAAEC,KAAA,IAAUA,KAAA,CAAMC,IAAI,KAAK;IAEjE,MAAMZ,QAAA,GAAWF,WAAA,CAAY;MAC3BG,KAAA,EAAOJ,IAAA,CAAKG;IACd,GAAGE,IAAI,CAAC;IAER,IAAI,cAAcK,MAAA,IAAUA,MAAA,EAAQF,QAAA,KAAa,SAAS;MACxD,MAAMQ,IAAA,GAAOtB,MAAA;MACb,OAAO;0BACaM,IAAA,CAAKiB,OAAO,GAAG,SAAS;qCACbjB,IAAA,CAAKiB,OAAO,GAAG,gCAAgC,kCAAkCL,WAAA,GAAc,oBAAoB;;yCAE/GD,iBAAA;;mBAEtBX,IAAA,CAAKkB,KAAK;;YAGjBN,WAAA,GACIT,QAAA,GACA,SAASH,IAAA,CAAKiB,OAAO,GAAG,aAAa,UAAUD,IAAA;8BACjCA,IAAA,KAASb,QAAA;mBACpB;cAEL;IACV,OAAO;MACL,OAAO;mBACMS,WAAA,GAAc,mBAAmB;mBACjCA,WAAA,GAAc,yBAAyBD,iBAAA,EAAmB,GAAGA,iBAAA;mBAC7DX,IAAA,CAAKkB,KAAK;WAClBf,QAAA,OAAe;IACtB;EACF;AACF","ignoreList":[]}
1
+ {"version":3,"file":"list.js","names":["escapeHTML","v4","uuidv4","ALLOWED_LIST_TAGS","ALLOWED_LIST_TYPES","Set","ListHTMLConverter","list","node","nodesToHTML","providedStyleTag","children","nodes","join","tag","has","listType","listitem","parent","providedCSSString","hasSubLists","some","child","type","uuid","checked","String","value"],"sources":["../../../../../../src/features/converters/lexicalToHtml/sync/converters/list.ts"],"sourcesContent":["import escapeHTML from 'escape-html'\nimport { v4 as uuidv4 } from 'uuid'\n\nimport type { SerializedListItemNode, SerializedListNode } from '../../../../../types/nodeTypes.js'\nimport type { HTMLConverters } from '../types.js'\n\nimport { ALLOWED_LIST_TAGS } from '../../../../lists/shared/constants.js'\n\nconst ALLOWED_LIST_TYPES = new Set(['bullet', 'check', 'number'])\n\nexport const ListHTMLConverter: HTMLConverters<SerializedListItemNode | SerializedListNode> = {\n list: ({ node, nodesToHTML, providedStyleTag }) => {\n const children = nodesToHTML({\n nodes: node.children,\n }).join('')\n\n const tag = ALLOWED_LIST_TAGS.has(node.tag) ? node.tag : 'ul'\n const listType = ALLOWED_LIST_TYPES.has(node.listType) ? node.listType : 'bullet'\n\n return `<${tag}${providedStyleTag} class=\"list-${listType}\">${children}</${tag}>`\n },\n listitem: ({ node, nodesToHTML, parent, providedCSSString }) => {\n const hasSubLists = node.children.some((child) => child.type === 'list')\n\n const children = nodesToHTML({\n nodes: node.children,\n }).join('')\n\n if ('listType' in parent && parent?.listType === 'check') {\n const uuid = uuidv4()\n return `<li\n aria-checked=\"${node.checked ? 'true' : 'false'}\"\n class=\"list-item-checkbox${node.checked ? ' list-item-checkbox-checked' : ' list-item-checkbox-unchecked'}${hasSubLists ? ' nestedListItem' : ''}\"\n role=\"checkbox\"\n style=\"list-style-type: none;${providedCSSString}\"\n tabIndex=\"-1\"\n value=\"${escapeHTML(String(node.value))}\"\n >\n ${\n hasSubLists\n ? children\n : `<input${node.checked ? ' checked' : ''} id=\"${uuid}\" readOnly=\"true\" type=\"checkbox\" />\n <label htmlFor=\"${uuid}\">${children}</label>\n <br />`\n }\n </li>`\n } else {\n return `<li\n class=\"${hasSubLists ? 'nestedListItem' : ''}\"\n style=\"${hasSubLists ? `list-style-type: none;${providedCSSString}` : providedCSSString}\"\n value=\"${escapeHTML(String(node.value))}\"\n >${children}</li>`\n }\n },\n}\n"],"mappings":"AAAA,OAAOA,UAAA,MAAgB;AACvB,SAASC,EAAA,IAAMC,MAAM,QAAQ;AAK7B,SAASC,iBAAiB,QAAQ;AAElC,MAAMC,kBAAA,GAAqB,IAAIC,GAAA,CAAI,CAAC,UAAU,SAAS,SAAS;AAEhE,OAAO,MAAMC,iBAAA,GAAiF;EAC5FC,IAAA,EAAMA,CAAC;IAAEC,IAAI;IAAEC,WAAW;IAAEC;EAAgB,CAAE;IAC5C,MAAMC,QAAA,GAAWF,WAAA,CAAY;MAC3BG,KAAA,EAAOJ,IAAA,CAAKG;IACd,GAAGE,IAAI,CAAC;IAER,MAAMC,GAAA,GAAMX,iBAAA,CAAkBY,GAAG,CAACP,IAAA,CAAKM,GAAG,IAAIN,IAAA,CAAKM,GAAG,GAAG;IACzD,MAAME,QAAA,GAAWZ,kBAAA,CAAmBW,GAAG,CAACP,IAAA,CAAKQ,QAAQ,IAAIR,IAAA,CAAKQ,QAAQ,GAAG;IAEzE,OAAO,IAAIF,GAAA,GAAMJ,gBAAA,gBAAgCM,QAAA,KAAaL,QAAA,KAAaG,GAAA,GAAM;EACnF;EACAG,QAAA,EAAUA,CAAC;IAAET,IAAI;IAAEC,WAAW;IAAES,MAAM;IAAEC;EAAiB,CAAE;IACzD,MAAMC,WAAA,GAAcZ,IAAA,CAAKG,QAAQ,CAACU,IAAI,CAAEC,KAAA,IAAUA,KAAA,CAAMC,IAAI,KAAK;IAEjE,MAAMZ,QAAA,GAAWF,WAAA,CAAY;MAC3BG,KAAA,EAAOJ,IAAA,CAAKG;IACd,GAAGE,IAAI,CAAC;IAER,IAAI,cAAcK,MAAA,IAAUA,MAAA,EAAQF,QAAA,KAAa,SAAS;MACxD,MAAMQ,IAAA,GAAOtB,MAAA;MACb,OAAO;0BACaM,IAAA,CAAKiB,OAAO,GAAG,SAAS;qCACbjB,IAAA,CAAKiB,OAAO,GAAG,gCAAgC,kCAAkCL,WAAA,GAAc,oBAAoB;;yCAE/GD,iBAAA;;mBAEtBnB,UAAA,CAAW0B,MAAA,CAAOlB,IAAA,CAAKmB,KAAK;;YAGnCP,WAAA,GACIT,QAAA,GACA,SAASH,IAAA,CAAKiB,OAAO,GAAG,aAAa,UAAUD,IAAA;8BACjCA,IAAA,KAASb,QAAA;mBACpB;cAEL;IACV,OAAO;MACL,OAAO;mBACMS,WAAA,GAAc,mBAAmB;mBACjCA,WAAA,GAAc,yBAAyBD,iBAAA,EAAmB,GAAGA,iBAAA;mBAC7DnB,UAAA,CAAW0B,MAAA,CAAOlB,IAAA,CAAKmB,KAAK;WACpChB,QAAA,OAAe;IACtB;EACF;AACF","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"heading.d.ts","sourceRoot":"","sources":["../../../../../../src/features/converters/lexicalToJSX/converter/converters/heading.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAA;AAC9E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAEhD,eAAO,MAAM,mBAAmB,EAAE,aAAa,CAAC,qBAAqB,CAUpE,CAAA"}
1
+ {"version":3,"file":"heading.d.ts","sourceRoot":"","sources":["../../../../../../src/features/converters/lexicalToJSX/converter/converters/heading.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAA;AAC9E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAIhD,eAAO,MAAM,mBAAmB,EAAE,aAAa,CAAC,qBAAqB,CAUpE,CAAA"}
@@ -1,4 +1,5 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { ALLOWED_HEADING_TAGS } from '../../../../heading/constants.js';
2
3
  export const HeadingJSXConverter = {
3
4
  heading: ({
4
5
  node,
@@ -7,7 +8,7 @@ export const HeadingJSXConverter = {
7
8
  const children = nodesToJSX({
8
9
  nodes: node.children
9
10
  });
10
- const NodeTag = node.tag;
11
+ const NodeTag = ALLOWED_HEADING_TAGS.has(node.tag) ? node.tag : 'h1';
11
12
  return /*#__PURE__*/_jsx(NodeTag, {
12
13
  children: children
13
14
  });
@@ -1 +1 @@
1
- {"version":3,"file":"heading.js","names":["HeadingJSXConverter","heading","node","nodesToJSX","children","nodes","NodeTag","tag","_jsx"],"sources":["../../../../../../src/features/converters/lexicalToJSX/converter/converters/heading.tsx"],"sourcesContent":["import type { SerializedHeadingNode } from '../../../../../types/nodeTypes.js'\nimport type { JSXConverters } from '../types.js'\n\nexport const HeadingJSXConverter: JSXConverters<SerializedHeadingNode> = {\n heading: ({ node, nodesToJSX }) => {\n const children = nodesToJSX({\n nodes: node.children,\n })\n\n const NodeTag = node.tag\n\n return <NodeTag>{children}</NodeTag>\n },\n}\n"],"mappings":";AAGA,OAAO,MAAMA,mBAAA,GAA4D;EACvEC,OAAA,EAASA,CAAC;IAAEC,IAAI;IAAEC;EAAU,CAAE;IAC5B,MAAMC,QAAA,GAAWD,UAAA,CAAW;MAC1BE,KAAA,EAAOH,IAAA,CAAKE;IACd;IAEA,MAAME,OAAA,GAAUJ,IAAA,CAAKK,GAAG;IAExB,oBAAOC,IAAA,CAACF,OAAA;gBAASF;;EACnB;AACF","ignoreList":[]}
1
+ {"version":3,"file":"heading.js","names":["ALLOWED_HEADING_TAGS","HeadingJSXConverter","heading","node","nodesToJSX","children","nodes","NodeTag","has","tag","_jsx"],"sources":["../../../../../../src/features/converters/lexicalToJSX/converter/converters/heading.tsx"],"sourcesContent":["import type { SerializedHeadingNode } from '../../../../../types/nodeTypes.js'\nimport type { JSXConverters } from '../types.js'\n\nimport { ALLOWED_HEADING_TAGS } from '../../../../heading/constants.js'\n\nexport const HeadingJSXConverter: JSXConverters<SerializedHeadingNode> = {\n heading: ({ node, nodesToJSX }) => {\n const children = nodesToJSX({\n nodes: node.children,\n })\n\n const NodeTag = ALLOWED_HEADING_TAGS.has(node.tag) ? node.tag : 'h1'\n\n return <NodeTag>{children}</NodeTag>\n },\n}\n"],"mappings":";AAGA,SAASA,oBAAoB,QAAQ;AAErC,OAAO,MAAMC,mBAAA,GAA4D;EACvEC,OAAA,EAASA,CAAC;IAAEC,IAAI;IAAEC;EAAU,CAAE;IAC5B,MAAMC,QAAA,GAAWD,UAAA,CAAW;MAC1BE,KAAA,EAAOH,IAAA,CAAKE;IACd;IAEA,MAAME,OAAA,GAAUP,oBAAA,CAAqBQ,GAAG,CAACL,IAAA,CAAKM,GAAG,IAAIN,IAAA,CAAKM,GAAG,GAAG;IAEhE,oBAAOC,IAAA,CAACH,OAAA;gBAASF;;EACnB;AACF","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../../../../src/features/converters/lexicalToJSX/converter/converters/list.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAA;AACnG,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAEhD,eAAO,MAAM,gBAAgB,EAAE,aAAa,CAAC,sBAAsB,GAAG,kBAAkB,CAqDvF,CAAA"}
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../../../../src/features/converters/lexicalToJSX/converter/converters/list.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAA;AACnG,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAIhD,eAAO,MAAM,gBAAgB,EAAE,aAAa,CAAC,sBAAsB,GAAG,kBAAkB,CAqDvF,CAAA"}
@@ -1,5 +1,6 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
2
  import { v4 as uuidv4 } from 'uuid';
3
+ import { ALLOWED_LIST_TAGS } from '../../../../lists/shared/constants.js';
3
4
  export const ListJSXConverter = {
4
5
  list: ({
5
6
  node,
@@ -8,7 +9,7 @@ export const ListJSXConverter = {
8
9
  const children = nodesToJSX({
9
10
  nodes: node.children
10
11
  });
11
- const NodeTag = node.tag;
12
+ const NodeTag = ALLOWED_LIST_TAGS.has(node.tag) ? node.tag : 'ul';
12
13
  return /*#__PURE__*/_jsx(NodeTag, {
13
14
  className: `list-${node?.listType}`,
14
15
  children: children
@@ -1 +1 @@
1
- {"version":3,"file":"list.js","names":["v4","uuidv4","ListJSXConverter","list","node","nodesToJSX","children","nodes","NodeTag","tag","_jsx","className","listType","listitem","parent","hasSubLists","some","child","type","uuid","checked","role","style","listStyleType","tabIndex","value","_jsxs","_Fragment","id","readOnly","htmlFor","undefined"],"sources":["../../../../../../src/features/converters/lexicalToJSX/converter/converters/list.tsx"],"sourcesContent":["import { v4 as uuidv4 } from 'uuid'\n\nimport type { SerializedListItemNode, SerializedListNode } from '../../../../../types/nodeTypes.js'\nimport type { JSXConverters } from '../types.js'\n\nexport const ListJSXConverter: JSXConverters<SerializedListItemNode | SerializedListNode> = {\n list: ({ node, nodesToJSX }) => {\n const children = nodesToJSX({\n nodes: node.children,\n })\n\n const NodeTag = node.tag\n\n return <NodeTag className={`list-${node?.listType}`}>{children}</NodeTag>\n },\n listitem: ({ node, nodesToJSX, parent }) => {\n const hasSubLists = node.children.some((child) => child.type === 'list')\n\n const children = nodesToJSX({\n nodes: node.children,\n })\n\n if ('listType' in parent && parent?.listType === 'check') {\n const uuid = uuidv4()\n\n return (\n <li\n aria-checked={node.checked ? 'true' : 'false'}\n className={`list-item-checkbox${node.checked ? ' list-item-checkbox-checked' : ' list-item-checkbox-unchecked'}${hasSubLists ? ' nestedListItem' : ''}`}\n // eslint-disable-next-line jsx-a11y/no-noninteractive-element-to-interactive-role\n role=\"checkbox\"\n style={{ listStyleType: 'none' }}\n tabIndex={-1}\n value={node?.value}\n >\n {hasSubLists ? (\n children\n ) : (\n <>\n <input checked={node.checked} id={uuid} readOnly={true} type=\"checkbox\" />\n <label htmlFor={uuid}>{children}</label>\n <br />\n </>\n )}\n </li>\n )\n } else {\n return (\n <li\n className={`${hasSubLists ? 'nestedListItem' : ''}`}\n style={hasSubLists ? { listStyleType: 'none' } : undefined}\n value={node?.value}\n >\n {children}\n </li>\n )\n }\n },\n}\n"],"mappings":";AAAA,SAASA,EAAA,IAAMC,MAAM,QAAQ;AAK7B,OAAO,MAAMC,gBAAA,GAA+E;EAC1FC,IAAA,EAAMA,CAAC;IAAEC,IAAI;IAAEC;EAAU,CAAE;IACzB,MAAMC,QAAA,GAAWD,UAAA,CAAW;MAC1BE,KAAA,EAAOH,IAAA,CAAKE;IACd;IAEA,MAAME,OAAA,GAAUJ,IAAA,CAAKK,GAAG;IAExB,oBAAOC,IAAA,CAACF,OAAA;MAAQG,SAAA,EAAW,QAAQP,IAAA,EAAMQ,QAAA,EAAU;gBAAGN;;EACxD;EACAO,QAAA,EAAUA,CAAC;IAAET,IAAI;IAAEC,UAAU;IAAES;EAAM,CAAE;IACrC,MAAMC,WAAA,GAAcX,IAAA,CAAKE,QAAQ,CAACU,IAAI,CAAEC,KAAA,IAAUA,KAAA,CAAMC,IAAI,KAAK;IAEjE,MAAMZ,QAAA,GAAWD,UAAA,CAAW;MAC1BE,KAAA,EAAOH,IAAA,CAAKE;IACd;IAEA,IAAI,cAAcQ,MAAA,IAAUA,MAAA,EAAQF,QAAA,KAAa,SAAS;MACxD,MAAMO,IAAA,GAAOlB,MAAA;MAEb,oBACES,IAAA,CAAC;QACC,gBAAcN,IAAA,CAAKgB,OAAO,GAAG,SAAS;QACtCT,SAAA,EAAW,qBAAqBP,IAAA,CAAKgB,OAAO,GAAG,gCAAgC,kCAAkCL,WAAA,GAAc,oBAAoB,IAAI;QACvJ;QACAM,IAAA,EAAK;QACLC,KAAA,EAAO;UAAEC,aAAA,EAAe;QAAO;QAC/BC,QAAA,EAAU,CAAC;QACXC,KAAA,EAAOrB,IAAA,EAAMqB,KAAA;kBAEZV,WAAA,GACCT,QAAA,gBAEAoB,KAAA,CAAAC,SAAA;kCACEjB,IAAA,CAAC;YAAMU,OAAA,EAAShB,IAAA,CAAKgB,OAAO;YAAEQ,EAAA,EAAIT,IAAA;YAAMU,QAAA,EAAU;YAAMX,IAAA,EAAK;2BAC7DR,IAAA,CAAC;YAAMoB,OAAA,EAASX,IAAA;sBAAOb;2BACvBI,IAAA,CAAC;;;IAKX,OAAO;MACL,oBACEA,IAAA,CAAC;QACCC,SAAA,EAAW,GAAGI,WAAA,GAAc,mBAAmB,IAAI;QACnDO,KAAA,EAAOP,WAAA,GAAc;UAAEQ,aAAA,EAAe;QAAO,IAAIQ,SAAA;QACjDN,KAAA,EAAOrB,IAAA,EAAMqB,KAAA;kBAEZnB;;IAGP;EACF;AACF","ignoreList":[]}
1
+ {"version":3,"file":"list.js","names":["v4","uuidv4","ALLOWED_LIST_TAGS","ListJSXConverter","list","node","nodesToJSX","children","nodes","NodeTag","has","tag","_jsx","className","listType","listitem","parent","hasSubLists","some","child","type","uuid","checked","role","style","listStyleType","tabIndex","value","_jsxs","_Fragment","id","readOnly","htmlFor","undefined"],"sources":["../../../../../../src/features/converters/lexicalToJSX/converter/converters/list.tsx"],"sourcesContent":["import { v4 as uuidv4 } from 'uuid'\n\nimport type { SerializedListItemNode, SerializedListNode } from '../../../../../types/nodeTypes.js'\nimport type { JSXConverters } from '../types.js'\n\nimport { ALLOWED_LIST_TAGS } from '../../../../lists/shared/constants.js'\n\nexport const ListJSXConverter: JSXConverters<SerializedListItemNode | SerializedListNode> = {\n list: ({ node, nodesToJSX }) => {\n const children = nodesToJSX({\n nodes: node.children,\n })\n\n const NodeTag = ALLOWED_LIST_TAGS.has(node.tag) ? node.tag : 'ul'\n\n return <NodeTag className={`list-${node?.listType}`}>{children}</NodeTag>\n },\n listitem: ({ node, nodesToJSX, parent }) => {\n const hasSubLists = node.children.some((child) => child.type === 'list')\n\n const children = nodesToJSX({\n nodes: node.children,\n })\n\n if ('listType' in parent && parent?.listType === 'check') {\n const uuid = uuidv4()\n\n return (\n <li\n aria-checked={node.checked ? 'true' : 'false'}\n className={`list-item-checkbox${node.checked ? ' list-item-checkbox-checked' : ' list-item-checkbox-unchecked'}${hasSubLists ? ' nestedListItem' : ''}`}\n // eslint-disable-next-line jsx-a11y/no-noninteractive-element-to-interactive-role\n role=\"checkbox\"\n style={{ listStyleType: 'none' }}\n tabIndex={-1}\n value={node?.value}\n >\n {hasSubLists ? (\n children\n ) : (\n <>\n <input checked={node.checked} id={uuid} readOnly={true} type=\"checkbox\" />\n <label htmlFor={uuid}>{children}</label>\n <br />\n </>\n )}\n </li>\n )\n } else {\n return (\n <li\n className={`${hasSubLists ? 'nestedListItem' : ''}`}\n style={hasSubLists ? { listStyleType: 'none' } : undefined}\n value={node?.value}\n >\n {children}\n </li>\n )\n }\n },\n}\n"],"mappings":";AAAA,SAASA,EAAA,IAAMC,MAAM,QAAQ;AAK7B,SAASC,iBAAiB,QAAQ;AAElC,OAAO,MAAMC,gBAAA,GAA+E;EAC1FC,IAAA,EAAMA,CAAC;IAAEC,IAAI;IAAEC;EAAU,CAAE;IACzB,MAAMC,QAAA,GAAWD,UAAA,CAAW;MAC1BE,KAAA,EAAOH,IAAA,CAAKE;IACd;IAEA,MAAME,OAAA,GAAUP,iBAAA,CAAkBQ,GAAG,CAACL,IAAA,CAAKM,GAAG,IAAIN,IAAA,CAAKM,GAAG,GAAG;IAE7D,oBAAOC,IAAA,CAACH,OAAA;MAAQI,SAAA,EAAW,QAAQR,IAAA,EAAMS,QAAA,EAAU;gBAAGP;;EACxD;EACAQ,QAAA,EAAUA,CAAC;IAAEV,IAAI;IAAEC,UAAU;IAAEU;EAAM,CAAE;IACrC,MAAMC,WAAA,GAAcZ,IAAA,CAAKE,QAAQ,CAACW,IAAI,CAAEC,KAAA,IAAUA,KAAA,CAAMC,IAAI,KAAK;IAEjE,MAAMb,QAAA,GAAWD,UAAA,CAAW;MAC1BE,KAAA,EAAOH,IAAA,CAAKE;IACd;IAEA,IAAI,cAAcS,MAAA,IAAUA,MAAA,EAAQF,QAAA,KAAa,SAAS;MACxD,MAAMO,IAAA,GAAOpB,MAAA;MAEb,oBACEW,IAAA,CAAC;QACC,gBAAcP,IAAA,CAAKiB,OAAO,GAAG,SAAS;QACtCT,SAAA,EAAW,qBAAqBR,IAAA,CAAKiB,OAAO,GAAG,gCAAgC,kCAAkCL,WAAA,GAAc,oBAAoB,IAAI;QACvJ;QACAM,IAAA,EAAK;QACLC,KAAA,EAAO;UAAEC,aAAA,EAAe;QAAO;QAC/BC,QAAA,EAAU,CAAC;QACXC,KAAA,EAAOtB,IAAA,EAAMsB,KAAA;kBAEZV,WAAA,GACCV,QAAA,gBAEAqB,KAAA,CAAAC,SAAA;kCACEjB,IAAA,CAAC;YAAMU,OAAA,EAASjB,IAAA,CAAKiB,OAAO;YAAEQ,EAAA,EAAIT,IAAA;YAAMU,QAAA,EAAU;YAAMX,IAAA,EAAK;2BAC7DR,IAAA,CAAC;YAAMoB,OAAA,EAASX,IAAA;sBAAOd;2BACvBK,IAAA,CAAC;;;IAKX,OAAO;MACL,oBACEA,IAAA,CAAC;QACCC,SAAA,EAAW,GAAGI,WAAA,GAAc,mBAAmB,IAAI;QACnDO,KAAA,EAAOP,WAAA,GAAc;UAAEQ,aAAA,EAAe;QAAO,IAAIQ,SAAA;QACjDN,KAAA,EAAOtB,IAAA,EAAMsB,KAAA;kBAEZpB;;IAGP;EACF;AACF","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"payloadPopulateFn.d.ts","sourceRoot":"","sources":["../../../../src/features/converters/utilities/payloadPopulateFn.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,KAAK,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,WAAW,EAAE,MAAM,SAAS,CAAA;AAE7F,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAA;AAIrE,eAAO,MAAM,oBAAoB,EAAE,CACjC,IAAI,EAAE;IACJ,YAAY,EAAE,MAAM,CAAA;IACpB,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,MAAM,CAAC,EAAE,WAAW,CAAA;IAEpB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAC3B,GAAG,CACA;IACE;;OAEG;IACH,OAAO,EAAE,OAAO,CAAA;IAChB;;;OAGG;IACH,GAAG,CAAC,EAAE,KAAK,CAAA;CACZ,GACD;IACE;;OAEG;IACH,OAAO,CAAC,EAAE,KAAK,CAAA;IACf;;;OAGG;IACH,GAAG,EAAE,cAAc,CAAA;CACpB,CACJ,KACE,OAAO,CAAC,cAAc,CAyC1B,CAAA"}
1
+ {"version":3,"file":"payloadPopulateFn.d.ts","sourceRoot":"","sources":["../../../../src/features/converters/utilities/payloadPopulateFn.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,KAAK,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,WAAW,EAAE,MAAM,SAAS,CAAA;AAEnG,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAA;AAIrE,eAAO,MAAM,oBAAoB,EAAE,CACjC,IAAI,EAAE;IACJ,YAAY,EAAE,MAAM,CAAA;IACpB,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,MAAM,CAAC,EAAE,WAAW,CAAA;IAEpB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAC3B,GAAG,CACA;IACE;;OAEG;IACH,OAAO,EAAE,OAAO,CAAA;IAChB;;;OAGG;IACH,GAAG,CAAC,EAAE,KAAK,CAAA;CACZ,GACD;IACE;;OAEG;IACH,OAAO,CAAC,EAAE,KAAK,CAAA;IACf;;;OAGG;IACH,GAAG,EAAE,cAAc,CAAA;CACpB,CACJ,KACE,OAAO,CAAC,cAAc,CAyC1B,CAAA"}
@@ -1,4 +1,4 @@
1
- import { createLocalReq } from 'payload';
1
+ import { createPayloadRequest } from 'payload';
2
2
  import { populate } from '../../../populateGraphQL/populate.js';
3
3
  export const getPayloadPopulateFn = async ({
4
4
  currentDepth,
@@ -11,7 +11,9 @@ export const getPayloadPopulateFn = async ({
11
11
  }) => {
12
12
  let reqToUse = req;
13
13
  if (req === undefined && payload) {
14
- reqToUse = await createLocalReq({}, payload);
14
+ reqToUse = await createPayloadRequest({
15
+ payload
16
+ });
15
17
  }
16
18
  if (!reqToUse) {
17
19
  throw new Error('No req or payload provided');
@@ -1 +1 @@
1
- {"version":3,"file":"payloadPopulateFn.js","names":["createLocalReq","populate","getPayloadPopulateFn","currentDepth","depth","draft","overrideAccess","payload","req","showHiddenFields","reqToUse","undefined","Error","populateFn","id","collectionSlug","select","dataContainer","data","key","value"],"sources":["../../../../src/features/converters/utilities/payloadPopulateFn.ts"],"sourcesContent":["import { createLocalReq, type Payload, type PayloadRequest, type TypedLocale } from 'payload'\n\nimport type { HTMLPopulateFn } from '../lexicalToHtml/async/types.js'\n\nimport { populate } from '../../../populateGraphQL/populate.js'\n\nexport const getPayloadPopulateFn: (\n args: {\n currentDepth: number\n depth: number\n draft?: boolean\n locale?: TypedLocale\n\n overrideAccess?: boolean\n showHiddenFields?: boolean\n } & (\n | {\n /**\n * This payload property will only be used if req is undefined. If localization is enabled, you must pass `req` instead.\n */\n payload: Payload\n /**\n * When the converter is called, req CAN be passed in depending on where it's run.\n * If this is undefined and config is passed through, lexical will create a new req object for you.\n */\n req?: never\n }\n | {\n /**\n * This payload property will only be used if req is undefined. If localization is enabled, you must pass `req` instead.\n */\n payload?: never\n /**\n * When the converter is called, req CAN be passed in depending on where it's run.\n * If this is undefined and config is passed through, lexical will create a new req object for you.\n */\n req: PayloadRequest\n }\n ),\n) => Promise<HTMLPopulateFn> = async ({\n currentDepth,\n depth,\n draft,\n overrideAccess,\n payload,\n req,\n showHiddenFields,\n}) => {\n let reqToUse: PayloadRequest | undefined = req\n if (req === undefined && payload) {\n reqToUse = await createLocalReq({}, payload)\n }\n\n if (!reqToUse) {\n throw new Error('No req or payload provided')\n }\n\n const populateFn: HTMLPopulateFn = async ({ id, collectionSlug, select }) => {\n const dataContainer: {\n value?: any\n } = {}\n\n await populate({\n id,\n collectionSlug,\n currentDepth,\n data: dataContainer,\n depth,\n draft: draft ?? false,\n key: 'value',\n overrideAccess: overrideAccess ?? true,\n req: reqToUse,\n select,\n showHiddenFields: showHiddenFields ?? false,\n })\n\n return dataContainer.value\n }\n\n return populateFn\n}\n"],"mappings":"AAAA,SAASA,cAAc,QAA6D;AAIpF,SAASC,QAAQ,QAAQ;AAEzB,OAAO,MAAMC,oBAAA,GAiCkB,MAAAA,CAAO;EACpCC,YAAY;EACZC,KAAK;EACLC,KAAK;EACLC,cAAc;EACdC,OAAO;EACPC,GAAG;EACHC;AAAgB,CACjB;EACC,IAAIC,QAAA,GAAuCF,GAAA;EAC3C,IAAIA,GAAA,KAAQG,SAAA,IAAaJ,OAAA,EAAS;IAChCG,QAAA,GAAW,MAAMV,cAAA,CAAe,CAAC,GAAGO,OAAA;EACtC;EAEA,IAAI,CAACG,QAAA,EAAU;IACb,MAAM,IAAIE,KAAA,CAAM;EAClB;EAEA,MAAMC,UAAA,GAA6B,MAAAA,CAAO;IAAEC,EAAE;IAAEC,cAAc;IAAEC;EAAM,CAAE;IACtE,MAAMC,aAAA,GAEF,CAAC;IAEL,MAAMhB,QAAA,CAAS;MACba,EAAA;MACAC,cAAA;MACAZ,YAAA;MACAe,IAAA,EAAMD,aAAA;MACNb,KAAA;MACAC,KAAA,EAAOA,KAAA,IAAS;MAChBc,GAAA,EAAK;MACLb,cAAA,EAAgBA,cAAA,IAAkB;MAClCE,GAAA,EAAKE,QAAA;MACLM,MAAA;MACAP,gBAAA,EAAkBA,gBAAA,IAAoB;IACxC;IAEA,OAAOQ,aAAA,CAAcG,KAAK;EAC5B;EAEA,OAAOP,UAAA;AACT","ignoreList":[]}
1
+ {"version":3,"file":"payloadPopulateFn.js","names":["createPayloadRequest","populate","getPayloadPopulateFn","currentDepth","depth","draft","overrideAccess","payload","req","showHiddenFields","reqToUse","undefined","Error","populateFn","id","collectionSlug","select","dataContainer","data","key","value"],"sources":["../../../../src/features/converters/utilities/payloadPopulateFn.ts"],"sourcesContent":["import { createPayloadRequest, type Payload, type PayloadRequest, type TypedLocale } from 'payload'\n\nimport type { HTMLPopulateFn } from '../lexicalToHtml/async/types.js'\n\nimport { populate } from '../../../populateGraphQL/populate.js'\n\nexport const getPayloadPopulateFn: (\n args: {\n currentDepth: number\n depth: number\n draft?: boolean\n locale?: TypedLocale\n\n overrideAccess?: boolean\n showHiddenFields?: boolean\n } & (\n | {\n /**\n * This payload property will only be used if req is undefined. If localization is enabled, you must pass `req` instead.\n */\n payload: Payload\n /**\n * When the converter is called, req CAN be passed in depending on where it's run.\n * If this is undefined and config is passed through, lexical will create a new req object for you.\n */\n req?: never\n }\n | {\n /**\n * This payload property will only be used if req is undefined. If localization is enabled, you must pass `req` instead.\n */\n payload?: never\n /**\n * When the converter is called, req CAN be passed in depending on where it's run.\n * If this is undefined and config is passed through, lexical will create a new req object for you.\n */\n req: PayloadRequest\n }\n ),\n) => Promise<HTMLPopulateFn> = async ({\n currentDepth,\n depth,\n draft,\n overrideAccess,\n payload,\n req,\n showHiddenFields,\n}) => {\n let reqToUse: PayloadRequest | undefined = req\n if (req === undefined && payload) {\n reqToUse = await createPayloadRequest({ payload })\n }\n\n if (!reqToUse) {\n throw new Error('No req or payload provided')\n }\n\n const populateFn: HTMLPopulateFn = async ({ id, collectionSlug, select }) => {\n const dataContainer: {\n value?: any\n } = {}\n\n await populate({\n id,\n collectionSlug,\n currentDepth,\n data: dataContainer,\n depth,\n draft: draft ?? false,\n key: 'value',\n overrideAccess: overrideAccess ?? true,\n req: reqToUse,\n select,\n showHiddenFields: showHiddenFields ?? false,\n })\n\n return dataContainer.value\n }\n\n return populateFn\n}\n"],"mappings":"AAAA,SAASA,oBAAoB,QAA6D;AAI1F,SAASC,QAAQ,QAAQ;AAEzB,OAAO,MAAMC,oBAAA,GAiCkB,MAAAA,CAAO;EACpCC,YAAY;EACZC,KAAK;EACLC,KAAK;EACLC,cAAc;EACdC,OAAO;EACPC,GAAG;EACHC;AAAgB,CACjB;EACC,IAAIC,QAAA,GAAuCF,GAAA;EAC3C,IAAIA,GAAA,KAAQG,SAAA,IAAaJ,OAAA,EAAS;IAChCG,QAAA,GAAW,MAAMV,oBAAA,CAAqB;MAAEO;IAAQ;EAClD;EAEA,IAAI,CAACG,QAAA,EAAU;IACb,MAAM,IAAIE,KAAA,CAAM;EAClB;EAEA,MAAMC,UAAA,GAA6B,MAAAA,CAAO;IAAEC,EAAE;IAAEC,cAAc;IAAEC;EAAM,CAAE;IACtE,MAAMC,aAAA,GAEF,CAAC;IAEL,MAAMhB,QAAA,CAAS;MACba,EAAA;MACAC,cAAA;MACAZ,YAAA;MACAe,IAAA,EAAMD,aAAA;MACNb,KAAA;MACAC,KAAA,EAAOA,KAAA,IAAS;MAChBc,GAAA,EAAK;MACLb,cAAA,EAAgBA,cAAA,IAAkB;MAClCE,GAAA,EAAKE,QAAA;MACLM,MAAA;MACAP,gBAAA,EAAkBA,gBAAA,IAAoB;IACxC;IAEA,OAAOQ,aAAA,CAAcG,KAAK;EAC5B;EAEA,OAAOP,UAAA;AACT","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ export declare const ALLOWED_HEADING_TAGS: Set<string>;
2
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/features/heading/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,oBAAoB,aAAgD,CAAA"}
@@ -0,0 +1,2 @@
1
+ export const ALLOWED_HEADING_TAGS = new Set(['h1', 'h2', 'h3', 'h4', 'h5', 'h6']);
2
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","names":["ALLOWED_HEADING_TAGS","Set"],"sources":["../../../src/features/heading/constants.ts"],"sourcesContent":["export const ALLOWED_HEADING_TAGS = new Set(['h1', 'h2', 'h3', 'h4', 'h5', 'h6'])\n"],"mappings":"AAAA,OAAO,MAAMA,oBAAA,GAAuB,IAAIC,GAAA,CAAI,CAAC,MAAM,MAAM,MAAM,MAAM,MAAM,KAAK","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/features/heading/server/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAUxD,YAAY,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAA;AAExD,MAAM,MAAM,mBAAmB,GAAG;IAChC,mBAAmB,CAAC,EAAE,cAAc,EAAE,CAAA;CACvC,CAAA;AAED,eAAO,MAAM,cAAc,6HA8BzB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/features/heading/server/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAWxD,YAAY,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAA;AAExD,MAAM,MAAM,mBAAmB,GAAG;IAChC,mBAAmB,CAAC,EAAE,cAAc,EAAE,CAAA;CACvC,CAAA;AAED,eAAO,MAAM,cAAc,6HA+BzB,CAAA"}
@@ -4,6 +4,7 @@ import { createNode } from '../../typeUtilities.js';
4
4
  import { PAYLOAD_HEADING } from '../markdownTransformer.js';
5
5
  import { i18n } from './i18n.js';
6
6
  import { createHeadingJSONSchema } from './schema.js';
7
+ import { headingValidation } from './validate.js';
7
8
  export const HeadingFeature = createServerFeature({
8
9
  feature: ({
9
10
  props
@@ -22,7 +23,10 @@ export const HeadingFeature = createServerFeature({
22
23
  markdownTransformers: enabledHeadingSizes.length > 0 ? [PAYLOAD_HEADING(enabledHeadingSizes)] : [],
23
24
  nodes: [createNode({
24
25
  jsonSchema: createHeadingJSONSchema(enabledHeadingSizes),
25
- node: HeadingNode
26
+ node: HeadingNode,
27
+ validations: [headingValidation({
28
+ enabledHeadingSizes
29
+ })]
26
30
  })],
27
31
  sanitizedServerFeatureProps: props
28
32
  };
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["HeadingNode","createServerFeature","createNode","PAYLOAD_HEADING","i18n","createHeadingJSONSchema","HeadingFeature","feature","props","enabledHeadingSizes","sort","ClientFeature","clientFeatureProps","markdownTransformers","length","nodes","jsonSchema","node","sanitizedServerFeatureProps","key"],"sources":["../../../../src/features/heading/server/index.ts"],"sourcesContent":["import type { HeadingTagType } from '@lexical/rich-text'\n\nimport { HeadingNode } from '@lexical/rich-text'\n\nimport { createServerFeature } from '../../../utilities/createServerFeature.js'\nimport { createNode } from '../../typeUtilities.js'\nimport { PAYLOAD_HEADING } from '../markdownTransformer.js'\nimport { i18n } from './i18n.js'\nimport { createHeadingJSONSchema } from './schema.js'\n\nexport type { SerializedHeadingNode } from './schema.js'\n\nexport type HeadingFeatureProps = {\n enabledHeadingSizes?: HeadingTagType[]\n}\n\nexport const HeadingFeature = createServerFeature<\n HeadingFeatureProps,\n HeadingFeatureProps,\n HeadingFeatureProps\n>({\n feature: ({ props }) => {\n if (!props) {\n props = {}\n }\n\n const { enabledHeadingSizes = ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'] } = props\n\n enabledHeadingSizes.sort()\n\n return {\n ClientFeature: '@payloadcms/richtext-lexical/client#HeadingFeatureClient',\n clientFeatureProps: props,\n i18n,\n markdownTransformers:\n enabledHeadingSizes.length > 0 ? [PAYLOAD_HEADING(enabledHeadingSizes)] : [],\n nodes: [\n createNode({\n jsonSchema: createHeadingJSONSchema(enabledHeadingSizes),\n node: HeadingNode,\n }),\n ],\n sanitizedServerFeatureProps: props,\n }\n },\n key: 'heading',\n})\n"],"mappings":"AAEA,SAASA,WAAW,QAAQ;AAE5B,SAASC,mBAAmB,QAAQ;AACpC,SAASC,UAAU,QAAQ;AAC3B,SAASC,eAAe,QAAQ;AAChC,SAASC,IAAI,QAAQ;AACrB,SAASC,uBAAuB,QAAQ;AAQxC,OAAO,MAAMC,cAAA,GAAiBL,mBAAA,CAI5B;EACAM,OAAA,EAASA,CAAC;IAAEC;EAAK,CAAE;IACjB,IAAI,CAACA,KAAA,EAAO;MACVA,KAAA,GAAQ,CAAC;IACX;IAEA,MAAM;MAAEC,mBAAA,GAAsB,CAAC,MAAM,MAAM,MAAM,MAAM,MAAM;IAAK,CAAE,GAAGD,KAAA;IAEvEC,mBAAA,CAAoBC,IAAI;IAExB,OAAO;MACLC,aAAA,EAAe;MACfC,kBAAA,EAAoBJ,KAAA;MACpBJ,IAAA;MACAS,oBAAA,EACEJ,mBAAA,CAAoBK,MAAM,GAAG,IAAI,CAACX,eAAA,CAAgBM,mBAAA,EAAqB,GAAG,EAAE;MAC9EM,KAAA,EAAO,CACLb,UAAA,CAAW;QACTc,UAAA,EAAYX,uBAAA,CAAwBI,mBAAA;QACpCQ,IAAA,EAAMjB;MACR,GACD;MACDkB,2BAAA,EAA6BV;IAC/B;EACF;EACAW,GAAA,EAAK;AACP","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["HeadingNode","createServerFeature","createNode","PAYLOAD_HEADING","i18n","createHeadingJSONSchema","headingValidation","HeadingFeature","feature","props","enabledHeadingSizes","sort","ClientFeature","clientFeatureProps","markdownTransformers","length","nodes","jsonSchema","node","validations","sanitizedServerFeatureProps","key"],"sources":["../../../../src/features/heading/server/index.ts"],"sourcesContent":["import type { HeadingTagType } from '@lexical/rich-text'\n\nimport { HeadingNode } from '@lexical/rich-text'\n\nimport { createServerFeature } from '../../../utilities/createServerFeature.js'\nimport { createNode } from '../../typeUtilities.js'\nimport { PAYLOAD_HEADING } from '../markdownTransformer.js'\nimport { i18n } from './i18n.js'\nimport { createHeadingJSONSchema } from './schema.js'\nimport { headingValidation } from './validate.js'\n\nexport type { SerializedHeadingNode } from './schema.js'\n\nexport type HeadingFeatureProps = {\n enabledHeadingSizes?: HeadingTagType[]\n}\n\nexport const HeadingFeature = createServerFeature<\n HeadingFeatureProps,\n HeadingFeatureProps,\n HeadingFeatureProps\n>({\n feature: ({ props }) => {\n if (!props) {\n props = {}\n }\n\n const { enabledHeadingSizes = ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'] } = props\n\n enabledHeadingSizes.sort()\n\n return {\n ClientFeature: '@payloadcms/richtext-lexical/client#HeadingFeatureClient',\n clientFeatureProps: props,\n i18n,\n markdownTransformers:\n enabledHeadingSizes.length > 0 ? [PAYLOAD_HEADING(enabledHeadingSizes)] : [],\n nodes: [\n createNode({\n jsonSchema: createHeadingJSONSchema(enabledHeadingSizes),\n node: HeadingNode,\n validations: [headingValidation({ enabledHeadingSizes })],\n }),\n ],\n sanitizedServerFeatureProps: props,\n }\n },\n key: 'heading',\n})\n"],"mappings":"AAEA,SAASA,WAAW,QAAQ;AAE5B,SAASC,mBAAmB,QAAQ;AACpC,SAASC,UAAU,QAAQ;AAC3B,SAASC,eAAe,QAAQ;AAChC,SAASC,IAAI,QAAQ;AACrB,SAASC,uBAAuB,QAAQ;AACxC,SAASC,iBAAiB,QAAQ;AAQlC,OAAO,MAAMC,cAAA,GAAiBN,mBAAA,CAI5B;EACAO,OAAA,EAASA,CAAC;IAAEC;EAAK,CAAE;IACjB,IAAI,CAACA,KAAA,EAAO;MACVA,KAAA,GAAQ,CAAC;IACX;IAEA,MAAM;MAAEC,mBAAA,GAAsB,CAAC,MAAM,MAAM,MAAM,MAAM,MAAM;IAAK,CAAE,GAAGD,KAAA;IAEvEC,mBAAA,CAAoBC,IAAI;IAExB,OAAO;MACLC,aAAA,EAAe;MACfC,kBAAA,EAAoBJ,KAAA;MACpBL,IAAA;MACAU,oBAAA,EACEJ,mBAAA,CAAoBK,MAAM,GAAG,IAAI,CAACZ,eAAA,CAAgBO,mBAAA,EAAqB,GAAG,EAAE;MAC9EM,KAAA,EAAO,CACLd,UAAA,CAAW;QACTe,UAAA,EAAYZ,uBAAA,CAAwBK,mBAAA;QACpCQ,IAAA,EAAMlB,WAAA;QACNmB,WAAA,EAAa,CAACb,iBAAA,CAAkB;UAAEI;QAAoB;MACxD,GACD;MACDU,2BAAA,EAA6BX;IAC/B;EACF;EACAY,GAAA,EAAK;AACP","ignoreList":[]}
@@ -0,0 +1,6 @@
1
+ import type { HeadingTagType, SerializedHeadingNode } from '@lexical/rich-text';
2
+ import type { NodeValidation } from '../../typesServer.js';
3
+ export declare const headingValidation: ({ enabledHeadingSizes, }: {
4
+ enabledHeadingSizes: HeadingTagType[];
5
+ }) => NodeValidation<SerializedHeadingNode>;
6
+ //# sourceMappingURL=validate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../../../src/features/heading/server/validate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAA;AAE/E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAI1D,eAAO,MAAM,iBAAiB,6BAE3B;IACD,mBAAmB,EAAE,cAAc,EAAE,CAAA;CACtC,KAAG,cAAc,CAAC,qBAAqB,CAcvC,CAAA"}
@@ -0,0 +1,15 @@
1
+ import { ALLOWED_HEADING_TAGS } from '../constants.js';
2
+ export const headingValidation = ({
3
+ enabledHeadingSizes
4
+ }) => {
5
+ const allowedHeadingTags = new Set(enabledHeadingSizes.filter(tag => ALLOWED_HEADING_TAGS.has(tag)));
6
+ return ({
7
+ node
8
+ }) => {
9
+ if (allowedHeadingTags.has(node.tag)) {
10
+ return true;
11
+ }
12
+ return allowedHeadingTags.size > 0 ? `Heading tag must be one of ${Array.from(allowedHeadingTags).join(', ')}.` : 'Headings are not enabled.';
13
+ };
14
+ };
15
+ //# sourceMappingURL=validate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.js","names":["ALLOWED_HEADING_TAGS","headingValidation","enabledHeadingSizes","allowedHeadingTags","Set","filter","tag","has","node","size","Array","from","join"],"sources":["../../../../src/features/heading/server/validate.ts"],"sourcesContent":["import type { HeadingTagType, SerializedHeadingNode } from '@lexical/rich-text'\n\nimport type { NodeValidation } from '../../typesServer.js'\n\nimport { ALLOWED_HEADING_TAGS } from '../constants.js'\n\nexport const headingValidation = ({\n enabledHeadingSizes,\n}: {\n enabledHeadingSizes: HeadingTagType[]\n}): NodeValidation<SerializedHeadingNode> => {\n const allowedHeadingTags = new Set(\n enabledHeadingSizes.filter((tag) => ALLOWED_HEADING_TAGS.has(tag)),\n )\n\n return ({ node }) => {\n if (allowedHeadingTags.has(node.tag)) {\n return true\n }\n\n return allowedHeadingTags.size > 0\n ? `Heading tag must be one of ${Array.from(allowedHeadingTags).join(', ')}.`\n : 'Headings are not enabled.'\n }\n}\n"],"mappings":"AAIA,SAASA,oBAAoB,QAAQ;AAErC,OAAO,MAAMC,iBAAA,GAAoBA,CAAC;EAChCC;AAAmB,CAGpB;EACC,MAAMC,kBAAA,GAAqB,IAAIC,GAAA,CAC7BF,mBAAA,CAAoBG,MAAM,CAAEC,GAAA,IAAQN,oBAAA,CAAqBO,GAAG,CAACD,GAAA;EAG/D,OAAO,CAAC;IAAEE;EAAI,CAAE;IACd,IAAIL,kBAAA,CAAmBI,GAAG,CAACC,IAAA,CAAKF,GAAG,GAAG;MACpC,OAAO;IACT;IAEA,OAAOH,kBAAA,CAAmBM,IAAI,GAAG,IAC7B,8BAA8BC,KAAA,CAAMC,IAAI,CAACR,kBAAA,EAAoBS,IAAI,CAAC,QAAQ,GAC1E;EACN;AACF","ignoreList":[]}
@@ -258,6 +258,7 @@ export function LinkEditor({
258
258
  children: [/*#__PURE__*/_jsx("div", {
259
259
  className: "link-editor",
260
260
  "data-theme": "dark",
261
+ hidden: !isLink,
261
262
  ref: editorRef,
262
263
  children: /*#__PURE__*/_jsxs("div", {
263
264
  className: "link-input",