@payloadcms/richtext-lexical 4.0.0-internal.934870d → 4.0.0-internal.94ef095

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 (197) hide show
  1. package/dist/exports/client/Field-334JNLRF.js +2 -0
  2. package/dist/exports/client/Field-334JNLRF.js.map +7 -0
  3. package/dist/exports/client/{RelationshipComponent-YCPAKOL7.js → RelationshipComponent-TVK6I4W4.js} +2 -2
  4. package/dist/exports/client/chunk-3V7KW5XF.js +2 -0
  5. package/dist/exports/client/chunk-3V7KW5XF.js.map +7 -0
  6. package/dist/exports/client/chunk-A7DZCL6D.js +2 -0
  7. package/dist/exports/client/chunk-A7DZCL6D.js.map +7 -0
  8. package/dist/exports/client/{chunk-WSAPGI3Z.js → chunk-EA5BHQ2T.js} +1 -1
  9. package/dist/exports/client/{chunk-WSAPGI3Z.js.map → chunk-EA5BHQ2T.js.map} +1 -1
  10. package/dist/exports/client/chunk-FAJJXXCW.js +2 -0
  11. package/dist/exports/client/{chunk-3LRZDIIG.js.map → chunk-FAJJXXCW.js.map} +2 -2
  12. package/dist/exports/client/{chunk-5VIL27GI.js → chunk-IYBYNEKX.js} +1 -1
  13. package/dist/exports/client/{chunk-5VIL27GI.js.map → chunk-IYBYNEKX.js.map} +1 -1
  14. package/dist/exports/client/{component-6DQLENIE.js → component-FCCSBBZG.js} +2 -2
  15. package/dist/exports/client/componentInline-7FQV2X7Z.js +2 -0
  16. package/dist/exports/client/index.js +27 -27
  17. package/dist/exports/client/index.js.map +3 -3
  18. package/dist/features/align/client/index.js.map +1 -1
  19. package/dist/features/blocks/client/component/BlockContent.js.map +1 -1
  20. package/dist/features/blocks/client/component/components/BlockCollapsible.js.map +1 -1
  21. package/dist/features/blocks/client/component/components/BlockEditButton.js.map +1 -1
  22. package/dist/features/blocks/client/component/components/BlockRemoveButton.js.map +1 -1
  23. package/dist/features/blocks/client/component/index.d.ts.map +1 -1
  24. package/dist/features/blocks/client/component/index.js +62 -85
  25. package/dist/features/blocks/client/component/index.js.map +1 -1
  26. package/dist/features/blocks/client/componentInline/components/InlineBlockContainer.js.map +1 -1
  27. package/dist/features/blocks/client/componentInline/components/InlineBlockEditButton.js.map +1 -1
  28. package/dist/features/blocks/client/componentInline/components/InlineBlockLabel.js.map +1 -1
  29. package/dist/features/blocks/client/componentInline/components/InlineBlockRemoveButton.js.map +1 -1
  30. package/dist/features/blocks/client/componentInline/index.d.ts.map +1 -1
  31. package/dist/features/blocks/client/componentInline/index.js +22 -69
  32. package/dist/features/blocks/client/componentInline/index.js.map +1 -1
  33. package/dist/features/blocks/client/getCachedFormStateIfDataMatches.d.ts +0 -1
  34. package/dist/features/blocks/client/getCachedFormStateIfDataMatches.d.ts.map +1 -1
  35. package/dist/features/blocks/client/getCachedFormStateIfDataMatches.js +7 -30
  36. package/dist/features/blocks/client/getCachedFormStateIfDataMatches.js.map +1 -1
  37. package/dist/features/blocks/client/plugin/index.js.map +1 -1
  38. package/dist/features/blocks/premade/CodeBlock/Component/Block.js +121 -78
  39. package/dist/features/blocks/premade/CodeBlock/Component/Block.js.map +1 -1
  40. package/dist/features/blocks/premade/CodeBlock/Component/Code.js +142 -87
  41. package/dist/features/blocks/premade/CodeBlock/Component/Code.js.map +1 -1
  42. package/dist/features/converters/lexicalToHtml/async/converters/table.d.ts.map +1 -1
  43. package/dist/features/converters/lexicalToHtml/async/converters/table.js +6 -4
  44. package/dist/features/converters/lexicalToHtml/async/converters/table.js.map +1 -1
  45. package/dist/features/converters/lexicalToHtml/async/converters/upload.d.ts.map +1 -1
  46. package/dist/features/converters/lexicalToHtml/async/converters/upload.js +2 -1
  47. package/dist/features/converters/lexicalToHtml/async/converters/upload.js.map +1 -1
  48. package/dist/features/converters/lexicalToHtml/sync/converters/table.d.ts.map +1 -1
  49. package/dist/features/converters/lexicalToHtml/sync/converters/table.js +6 -4
  50. package/dist/features/converters/lexicalToHtml/sync/converters/table.js.map +1 -1
  51. package/dist/features/converters/lexicalToHtml/sync/converters/upload.d.ts.map +1 -1
  52. package/dist/features/converters/lexicalToHtml/sync/converters/upload.js +2 -1
  53. package/dist/features/converters/lexicalToHtml/sync/converters/upload.js.map +1 -1
  54. package/dist/features/converters/lexicalToHtml/sync/types.d.ts.map +1 -1
  55. package/dist/features/converters/lexicalToHtml/sync/types.js.map +1 -1
  56. package/dist/features/converters/lexicalToJSX/converter/converters/table.d.ts.map +1 -1
  57. package/dist/features/converters/lexicalToJSX/converter/converters/table.js +3 -2
  58. package/dist/features/converters/lexicalToJSX/converter/converters/table.js.map +1 -1
  59. package/dist/features/debug/jsxConverter/client/plugin/index.js.map +1 -1
  60. package/dist/features/debug/testRecorder/client/plugin/index.js.map +1 -1
  61. package/dist/features/debug/treeView/client/plugin/index.js.map +1 -1
  62. package/dist/features/heading/client/index.js.map +1 -1
  63. package/dist/features/horizontalRule/client/plugin/index.js.map +1 -1
  64. package/dist/features/indent/client/index.d.ts.map +1 -1
  65. package/dist/features/indent/client/index.js +0 -2
  66. package/dist/features/indent/client/index.js.map +1 -1
  67. package/dist/features/indent/server/i18n.d.ts.map +1 -1
  68. package/dist/features/indent/server/i18n.js.map +1 -1
  69. package/dist/features/link/client/plugins/autoLink/index.js.map +1 -1
  70. package/dist/features/link/client/plugins/floatingLinkEditor/LinkEditor/index.d.ts.map +1 -1
  71. package/dist/features/link/client/plugins/floatingLinkEditor/LinkEditor/index.js +12 -4
  72. package/dist/features/link/client/plugins/floatingLinkEditor/LinkEditor/index.js.map +1 -1
  73. package/dist/features/link/client/plugins/link/index.js.map +1 -1
  74. package/dist/features/link/markdownTransformer.js +2 -2
  75. package/dist/features/link/markdownTransformer.js.map +1 -1
  76. package/dist/features/link/server/baseFields.js.map +1 -1
  77. package/dist/features/lists/shared/schema.d.ts.map +1 -1
  78. package/dist/features/lists/shared/schema.js.map +1 -1
  79. package/dist/features/relationship/client/drawer/index.js.map +1 -1
  80. package/dist/features/relationship/client/plugins/index.js.map +1 -1
  81. package/dist/features/relationship/client/utils/useEnabledRelationships.js.map +1 -1
  82. package/dist/features/table/client/plugins/TableActionMenuPlugin/index.css +1 -1
  83. package/dist/features/table/client/plugins/TableActionMenuPlugin/index.js.map +1 -1
  84. package/dist/features/table/client/plugins/TableCellResizerPlugin/index.js +7 -7
  85. package/dist/features/table/client/plugins/TableCellResizerPlugin/index.js.map +1 -1
  86. package/dist/features/table/client/plugins/TableHoverActionsPlugin/index.js.map +1 -1
  87. package/dist/features/table/client/plugins/TablePlugin/index.js +54 -18
  88. package/dist/features/table/client/plugins/TablePlugin/index.js.map +1 -1
  89. package/dist/features/table/client/utils/useDebounce.js.map +1 -1
  90. package/dist/features/table/server/index.d.ts.map +1 -1
  91. package/dist/features/table/server/index.js +3 -1
  92. package/dist/features/table/server/index.js.map +1 -1
  93. package/dist/features/table/server/validate.d.ts +4 -0
  94. package/dist/features/table/server/validate.d.ts.map +1 -0
  95. package/dist/features/table/server/validate.js +15 -0
  96. package/dist/features/table/server/validate.js.map +1 -0
  97. package/dist/features/textState/defaultColors.js +1 -1
  98. package/dist/features/textState/defaultColors.js.map +1 -1
  99. package/dist/features/toolbars/fixed/client/Toolbar/horizontalWheelScroll.js.map +1 -1
  100. package/dist/features/toolbars/fixed/client/Toolbar/index.js +126 -70
  101. package/dist/features/toolbars/fixed/client/Toolbar/index.js.map +1 -1
  102. package/dist/features/toolbars/inline/client/Toolbar/index.js +67 -35
  103. package/dist/features/toolbars/inline/client/Toolbar/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 +26 -2
  106. package/dist/features/toolbars/shared/ToolbarButton/index.js.map +1 -1
  107. package/dist/features/toolbars/shared/ToolbarDropdown/DropDown.js +137 -72
  108. package/dist/features/toolbars/shared/ToolbarDropdown/DropDown.js.map +1 -1
  109. package/dist/features/toolbars/shared/ToolbarDropdown/index.d.ts.map +1 -1
  110. package/dist/features/toolbars/shared/ToolbarDropdown/index.js +22 -6
  111. package/dist/features/toolbars/shared/ToolbarDropdown/index.js.map +1 -1
  112. package/dist/features/toolbars/shared/useToolbarKeyboardNavigation.js +100 -70
  113. package/dist/features/toolbars/shared/useToolbarKeyboardNavigation.js.map +1 -1
  114. package/dist/features/upload/client/drawer/index.js.map +1 -1
  115. package/dist/features/upload/client/plugin/index.js.map +1 -1
  116. package/dist/field/Diff/converters/upload/index.d.ts.map +1 -1
  117. package/dist/field/Diff/converters/upload/index.js +8 -7
  118. package/dist/field/Diff/converters/upload/index.js.map +1 -1
  119. package/dist/field/Diff/index.d.ts.map +1 -1
  120. package/dist/field/Diff/index.js +1 -0
  121. package/dist/field/Diff/index.js.map +1 -1
  122. package/dist/field/RenderLexical/index.js.map +1 -1
  123. package/dist/field/ViewSelector.js +12 -4
  124. package/dist/field/ViewSelector.js.map +1 -1
  125. package/dist/field/bundled.css +1 -1
  126. package/dist/field/index.js.map +1 -1
  127. package/dist/i18n.d.ts.map +1 -1
  128. package/dist/i18n.js +44 -0
  129. package/dist/i18n.js.map +1 -1
  130. package/dist/index.d.ts +1 -1
  131. package/dist/index.js +1 -1
  132. package/dist/index.js.map +1 -1
  133. package/dist/lexical/LexicalEditor.js.map +1 -1
  134. package/dist/lexical/plugins/ClipboardPlugin/index.js.map +1 -1
  135. package/dist/lexical/plugins/DecoratorPlugin/index.js.map +1 -1
  136. package/dist/lexical/plugins/InsertParagraphAtEnd/index.js.map +1 -1
  137. package/dist/lexical/plugins/MarkdownShortcut/index.js.map +1 -1
  138. package/dist/lexical/plugins/NodeViewOverridePlugin/index.js.map +1 -1
  139. package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/LexicalMenu.js +234 -87
  140. package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/LexicalMenu.js.map +1 -1
  141. package/dist/lexical/plugins/SlashMenu/useMenuTriggerMatch.js.map +1 -1
  142. package/dist/lexical/plugins/TextPlugin/index.js.map +1 -1
  143. package/dist/lexical/plugins/handles/AddBlockHandlePlugin/index.js.map +1 -1
  144. package/dist/lexical/plugins/handles/DraggableBlockPlugin/index.css +16 -0
  145. package/dist/lexical/plugins/handles/DraggableBlockPlugin/index.d.ts.map +1 -1
  146. package/dist/lexical/plugins/handles/DraggableBlockPlugin/index.js +126 -38
  147. package/dist/lexical/plugins/handles/DraggableBlockPlugin/index.js.map +1 -1
  148. package/dist/lexical/plugins/handles/DraggableBlockPlugin/moveBlock.d.ts +7 -0
  149. package/dist/lexical/plugins/handles/DraggableBlockPlugin/moveBlock.d.ts.map +1 -0
  150. package/dist/lexical/plugins/handles/DraggableBlockPlugin/moveBlock.js +15 -0
  151. package/dist/lexical/plugins/handles/DraggableBlockPlugin/moveBlock.js.map +1 -0
  152. package/dist/lexical/plugins/handles/DraggableBlockPlugin/useKeyboardReordering.d.ts.map +1 -1
  153. package/dist/lexical/plugins/handles/DraggableBlockPlugin/useKeyboardReordering.js +9 -12
  154. package/dist/lexical/plugins/handles/DraggableBlockPlugin/useKeyboardReordering.js.map +1 -1
  155. package/dist/lexical/ui/ContentEditable.d.ts.map +1 -1
  156. package/dist/lexical/ui/ContentEditable.js +16 -9
  157. package/dist/lexical/ui/ContentEditable.js.map +1 -1
  158. package/dist/lexical/utils/nodeFormat.d.ts.map +1 -1
  159. package/dist/lexical/utils/nodeFormat.js +0 -2
  160. package/dist/lexical/utils/nodeFormat.js.map +1 -1
  161. package/dist/lexical/utils/url.d.ts.map +1 -1
  162. package/dist/lexical/utils/url.js +1 -1
  163. package/dist/lexical/utils/url.js.map +1 -1
  164. package/dist/populateGraphQL/populate.d.ts.map +1 -1
  165. package/dist/populateGraphQL/populate.js +4 -1
  166. package/dist/populateGraphQL/populate.js.map +1 -1
  167. package/dist/types/index.d.ts.map +1 -1
  168. package/dist/types/index.js.map +1 -1
  169. package/dist/utilities/buildEditorState.d.ts.map +1 -1
  170. package/dist/utilities/buildEditorState.js.map +1 -1
  171. package/dist/utilities/fieldsDrawer/Drawer.js +36 -36
  172. package/dist/utilities/fieldsDrawer/Drawer.js.map +1 -1
  173. package/dist/utilities/fieldsDrawer/DrawerContent.d.ts.map +1 -1
  174. package/dist/utilities/fieldsDrawer/DrawerContent.js +127 -107
  175. package/dist/utilities/fieldsDrawer/DrawerContent.js.map +1 -1
  176. package/dist/utilities/fieldsDrawer/useDrawerSubmit.js.map +1 -1
  177. package/dist/utilities/fieldsDrawer/useLexicalDocumentDrawer.js.map +1 -1
  178. package/dist/utilities/fieldsDrawer/useLexicalDrawer.js.map +1 -1
  179. package/dist/utilities/fieldsDrawer/useLexicalListDrawer.js.map +1 -1
  180. package/dist/utilities/initLexicalFeatures.d.ts.map +1 -1
  181. package/dist/utilities/initLexicalFeatures.js +38 -4
  182. package/dist/utilities/initLexicalFeatures.js.map +1 -1
  183. package/dist/utilities/useLexicalFeature.js +15 -6
  184. package/dist/utilities/useLexicalFeature.js.map +1 -1
  185. package/dist/utilities/useRunDeprioritized.js.map +1 -1
  186. package/package.json +47 -50
  187. package/dist/exports/client/Field-MT4FK3IP.js +0 -2
  188. package/dist/exports/client/Field-MT4FK3IP.js.map +0 -7
  189. package/dist/exports/client/chunk-3LRZDIIG.js +0 -2
  190. package/dist/exports/client/chunk-E6LSRRP2.js +0 -2
  191. package/dist/exports/client/chunk-E6LSRRP2.js.map +0 -7
  192. package/dist/exports/client/chunk-ZQX5HXUL.js +0 -2
  193. package/dist/exports/client/chunk-ZQX5HXUL.js.map +0 -7
  194. package/dist/exports/client/componentInline-HNE5G4TE.js +0 -2
  195. /package/dist/exports/client/{RelationshipComponent-YCPAKOL7.js.map → RelationshipComponent-TVK6I4W4.js.map} +0 -0
  196. /package/dist/exports/client/{component-6DQLENIE.js.map → component-FCCSBBZG.js.map} +0 -0
  197. /package/dist/exports/client/{componentInline-HNE5G4TE.js.map → componentInline-7FQV2X7Z.js.map} +0 -0
@@ -1,100 +1,155 @@
1
1
  'use client';
2
2
 
3
+ import { c as _c } from "react/compiler-runtime";
3
4
  import { jsx as _jsx } from "react/jsx-runtime";
4
5
  import { CodeField, useFormFields } from '@payloadcms/ui';
5
6
  import React, { useId, useMemo } from 'react';
6
7
  import { defaultLanguages } from './defaultLanguages.js';
7
- export const CodeComponent = ({
8
- autoComplete,
9
- field,
10
- forceRender,
11
- languages = defaultLanguages,
12
- path,
13
- permissions,
14
- readOnly,
15
- renderedBlocks,
16
- schemaPath,
17
- typescript,
18
- validate
19
- }) => {
20
- const languageField = useFormFields(([fields]) => fields['language']);
21
- const language = languageField?.value || languageField?.initialValue || 'typescript';
22
- // unique id per component instance to ensure Monaco creates a distinct model
23
- // for each TypeScript code block. Using React's useId is SSR-safe and builtin.
8
+ export const CodeComponent = t0 => {
9
+ const $ = _c(22);
10
+ const {
11
+ autoComplete,
12
+ field,
13
+ forceRender,
14
+ languages: t1,
15
+ path,
16
+ permissions,
17
+ readOnly,
18
+ renderedBlocks,
19
+ schemaPath,
20
+ typescript,
21
+ validate
22
+ } = t0;
23
+ const languages = t1 === undefined ? defaultLanguages : t1;
24
+ const languageField = useFormFields(_temp);
25
+ const language = languageField?.value || languageField?.initialValue || "typescript";
24
26
  const instanceId = useId();
25
27
  const label = languages[language];
26
- const props = useMemo(() => ({
27
- ...field,
28
- type: 'code',
29
- admin: {
28
+ let t2;
29
+ if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
30
+ t2 = {};
31
+ $[0] = t2;
32
+ } else {
33
+ t2 = $[0];
34
+ }
35
+ const t3 = language === "ts" ? `file-${field.name}-${instanceId}.tsx` : undefined;
36
+ let t4;
37
+ if ($[1] !== t3) {
38
+ t4 = {
39
+ defaultPath: t3
40
+ };
41
+ $[1] = t3;
42
+ $[2] = t4;
43
+ } else {
44
+ t4 = $[2];
45
+ }
46
+ let t5;
47
+ if ($[3] !== field.admin || $[4] !== language || $[5] !== t4) {
48
+ t5 = {
30
49
  ...field.admin,
31
- editorOptions: {},
32
- editorProps: {
33
- // If typescript is set, @monaco-editor/react needs to set the URI to a .ts or .tsx file when it calls createModel().
34
- // Provide a unique defaultPath per instance so Monaco doesn't reuse the same model
35
- // across multiple code block instances. We use field.name + instanceId for debugability.
36
- defaultPath: language === 'ts' ? `file-${field.name}-${instanceId}.tsx` : undefined
37
- },
50
+ editorOptions: t2,
51
+ editorProps: t4,
38
52
  language
39
- }
40
- }), [field, language, instanceId]);
53
+ };
54
+ $[3] = field.admin;
55
+ $[4] = language;
56
+ $[5] = t4;
57
+ $[6] = t5;
58
+ } else {
59
+ t5 = $[6];
60
+ }
61
+ let t6;
62
+ if ($[7] !== field || $[8] !== t5) {
63
+ t6 = {
64
+ ...field,
65
+ type: "code",
66
+ admin: t5
67
+ };
68
+ $[7] = field;
69
+ $[8] = t5;
70
+ $[9] = t6;
71
+ } else {
72
+ t6 = $[9];
73
+ }
74
+ const props = t6;
41
75
  const key = `${field.name}-${language}-${label}`;
42
- return props && /*#__PURE__*/_jsx(CodeField, {
43
- autoComplete: autoComplete,
44
- field: props,
45
- forceRender: forceRender,
46
- onMount: (_editor, monaco) => {
47
- monaco.editor.defineTheme('vs-dark', {
48
- base: 'vs-dark',
49
- colors: {
50
- 'editor.background': '#222222'
51
- },
52
- inherit: true,
53
- rules: []
54
- });
55
- monaco.editor.defineTheme('vs', {
56
- base: 'vs',
57
- colors: {
58
- 'editor.background': '#f5f5f5'
59
- },
60
- inherit: true,
61
- rules: []
62
- });
63
- monaco.languages.typescript.typescriptDefaults.setCompilerOptions({
64
- allowNonTsExtensions: true,
65
- // Set module resolution to NodeJs to enable autocompletion
66
- allowJs: true,
67
- allowSyntheticDefaultImports: true,
68
- esModuleInterop: true,
69
- jsx: monaco.languages.typescript.JsxEmit.React,
70
- moduleResolution: monaco.languages.typescript.ModuleResolutionKind.NodeJs,
71
- noEmit: true,
72
- paths: typescript?.paths,
73
- reactNamespace: 'React',
74
- target: monaco.languages.typescript.ScriptTarget[typescript?.target ?? 'ESNext'],
75
- typeRoots: typescript?.typeRoots ?? ['node_modules/@types']
76
- });
77
- monaco.languages.typescript.typescriptDefaults.setDiagnosticsOptions({
78
- noSemanticValidation: typescript?.enableSemanticValidation ? false : true,
79
- noSyntaxValidation: false
80
- });
81
- const run = async () => {
82
- if (typescript?.fetchTypes && Array.isArray(typescript.fetchTypes) && typescript.fetchTypes.length > 0) {
83
- await Promise.all(typescript.fetchTypes.map(async type => {
84
- const types = await fetch(type.url);
85
- const typesText = await types.text();
86
- monaco.languages.typescript.typescriptDefaults.addExtraLib(typesText, type.filePath);
87
- }));
88
- }
89
- };
90
- void run();
91
- },
92
- path: path,
93
- permissions: permissions,
94
- readOnly: readOnly,
95
- renderedBlocks: renderedBlocks,
96
- schemaPath: schemaPath,
97
- validate: validate
98
- }, key);
76
+ let t7;
77
+ if ($[10] !== autoComplete || $[11] !== forceRender || $[12] !== key || $[13] !== path || $[14] !== permissions || $[15] !== props || $[16] !== readOnly || $[17] !== renderedBlocks || $[18] !== schemaPath || $[19] !== typescript || $[20] !== validate) {
78
+ t7 = props && _jsx(CodeField, {
79
+ autoComplete,
80
+ field: props,
81
+ forceRender,
82
+ onMount: (_editor, monaco) => {
83
+ monaco.editor.defineTheme("vs-dark", {
84
+ base: "vs-dark",
85
+ colors: {
86
+ "editor.background": "#222222"
87
+ },
88
+ inherit: true,
89
+ rules: []
90
+ });
91
+ monaco.editor.defineTheme("vs", {
92
+ base: "vs",
93
+ colors: {
94
+ "editor.background": "#f5f5f5"
95
+ },
96
+ inherit: true,
97
+ rules: []
98
+ });
99
+ monaco.languages.typescript.typescriptDefaults.setCompilerOptions({
100
+ allowNonTsExtensions: true,
101
+ allowJs: true,
102
+ allowSyntheticDefaultImports: true,
103
+ esModuleInterop: true,
104
+ jsx: monaco.languages.typescript.JsxEmit.React,
105
+ moduleResolution: monaco.languages.typescript.ModuleResolutionKind.NodeJs,
106
+ noEmit: true,
107
+ paths: typescript?.paths,
108
+ reactNamespace: "React",
109
+ target: monaco.languages.typescript.ScriptTarget[typescript?.target ?? "ESNext"],
110
+ typeRoots: typescript?.typeRoots ?? ["node_modules/@types"]
111
+ });
112
+ monaco.languages.typescript.typescriptDefaults.setDiagnosticsOptions({
113
+ noSemanticValidation: typescript?.enableSemanticValidation ? false : true,
114
+ noSyntaxValidation: false
115
+ });
116
+ const run = async () => {
117
+ if (typescript?.fetchTypes && Array.isArray(typescript.fetchTypes) && typescript.fetchTypes.length > 0) {
118
+ await Promise.all(typescript.fetchTypes.map(async type => {
119
+ const types = await fetch(type.url);
120
+ const typesText = await types.text();
121
+ monaco.languages.typescript.typescriptDefaults.addExtraLib(typesText, type.filePath);
122
+ }));
123
+ }
124
+ };
125
+ run();
126
+ },
127
+ path,
128
+ permissions,
129
+ readOnly,
130
+ renderedBlocks,
131
+ schemaPath,
132
+ validate
133
+ }, key);
134
+ $[10] = autoComplete;
135
+ $[11] = forceRender;
136
+ $[12] = key;
137
+ $[13] = path;
138
+ $[14] = permissions;
139
+ $[15] = props;
140
+ $[16] = readOnly;
141
+ $[17] = renderedBlocks;
142
+ $[18] = schemaPath;
143
+ $[19] = typescript;
144
+ $[20] = validate;
145
+ $[21] = t7;
146
+ } else {
147
+ t7 = $[21];
148
+ }
149
+ return t7;
99
150
  };
151
+ function _temp(t0) {
152
+ const [fields] = t0;
153
+ return fields.language;
154
+ }
100
155
  //# sourceMappingURL=Code.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Code.js","names":["CodeField","useFormFields","React","useId","useMemo","defaultLanguages","CodeComponent","autoComplete","field","forceRender","languages","path","permissions","readOnly","renderedBlocks","schemaPath","typescript","validate","languageField","fields","language","value","initialValue","instanceId","label","props","type","admin","editorOptions","editorProps","defaultPath","name","undefined","key","_jsx","onMount","_editor","monaco","editor","defineTheme","base","colors","inherit","rules","typescriptDefaults","setCompilerOptions","allowNonTsExtensions","allowJs","allowSyntheticDefaultImports","esModuleInterop","jsx","JsxEmit","moduleResolution","ModuleResolutionKind","NodeJs","noEmit","paths","reactNamespace","target","ScriptTarget","typeRoots","setDiagnosticsOptions","noSemanticValidation","enableSemanticValidation","noSyntaxValidation","run","fetchTypes","Array","isArray","length","Promise","all","map","types","fetch","url","typesText","text","addExtraLib","filePath"],"sources":["../../../../../../src/features/blocks/premade/CodeBlock/Component/Code.tsx"],"sourcesContent":["'use client'\n\nimport type { CodeFieldClient, CodeFieldClientProps } from 'payload'\n\nimport { CodeField, useFormFields } from '@payloadcms/ui'\nimport React, { useId, useMemo } from 'react'\n\nimport { defaultLanguages } from './defaultLanguages.js'\n\nexport type AdditionalCodeComponentProps = {\n /**\n * @default first key of the `languages` prop\n */\n defaultLanguage?: string\n /**\n * @default all languages supported by Monaco Editor\n */\n languages?: Record<string, string>\n /**\n * Override the name of the block.\n *\n * @default 'Code'\n */\n slug?: string\n /**\n * Configure typescript settings for the editor\n */\n typescript?: {\n /**\n * By default, the editor will not perform semantic validation. This means that\n * while syntax errors will be highlighted, other issues like missing imports or incorrect\n * types will not be.\n *\n * @default false\n */\n enableSemanticValidation?: boolean\n /**\n * Additional types to fetch and include in the editor for autocompletion.\n *\n * For example, to include types for payload, you would set this to\n *\n * [{ url: 'https://unpkg.com/payload@latest/dist/index.d.ts', filePath: 'file:///node_modules/payload/index.d.ts' }]\n */\n fetchTypes?: Array<{\n filePath: string\n url: string\n }>\n /**\n * @default undefined\n */\n paths?: Record<string, string[]>\n /**\n * @default \"ESNext\"\n */\n target?: string\n /**\n * @default ['node_modules/@types']\n */\n typeRoots?: string[]\n }\n}\n\nexport const CodeComponent: React.FC<AdditionalCodeComponentProps & CodeFieldClientProps> = ({\n autoComplete,\n field,\n forceRender,\n languages = defaultLanguages,\n path,\n permissions,\n readOnly,\n renderedBlocks,\n schemaPath,\n typescript,\n validate,\n}) => {\n const languageField = useFormFields(([fields]) => fields['language'])\n\n const language: string =\n (languageField?.value as string) || (languageField?.initialValue as string) || 'typescript'\n\n // unique id per component instance to ensure Monaco creates a distinct model\n // for each TypeScript code block. Using React's useId is SSR-safe and builtin.\n const instanceId = useId()\n\n const label = languages[language]\n\n const props: CodeFieldClient = useMemo<CodeFieldClient>(\n () => ({\n ...field,\n type: 'code',\n admin: {\n ...field.admin,\n editorOptions: {},\n editorProps: {\n // If typescript is set, @monaco-editor/react needs to set the URI to a .ts or .tsx file when it calls createModel().\n // Provide a unique defaultPath per instance so Monaco doesn't reuse the same model\n // across multiple code block instances. We use field.name + instanceId for debugability.\n defaultPath: language === 'ts' ? `file-${field.name}-${instanceId}.tsx` : undefined,\n },\n language,\n },\n }),\n [field, language, instanceId],\n )\n\n const key = `${field.name}-${language}-${label}`\n\n return (\n props && (\n <CodeField\n autoComplete={autoComplete}\n field={props}\n forceRender={forceRender}\n key={key}\n onMount={(_editor, monaco) => {\n monaco.editor.defineTheme('vs-dark', {\n base: 'vs-dark',\n colors: {\n 'editor.background': '#222222',\n },\n inherit: true,\n rules: [],\n })\n\n monaco.editor.defineTheme('vs', {\n base: 'vs',\n colors: {\n 'editor.background': '#f5f5f5',\n },\n inherit: true,\n rules: [],\n })\n monaco.languages.typescript.typescriptDefaults.setCompilerOptions({\n allowNonTsExtensions: true,\n // Set module resolution to NodeJs to enable autocompletion\n allowJs: true,\n allowSyntheticDefaultImports: true,\n esModuleInterop: true,\n jsx: monaco.languages.typescript.JsxEmit.React,\n moduleResolution: monaco.languages.typescript.ModuleResolutionKind.NodeJs,\n noEmit: true,\n paths: typescript?.paths,\n reactNamespace: 'React',\n target: monaco.languages.typescript.ScriptTarget[\n typescript?.target ?? ('ESNext' as any)\n ] as any,\n typeRoots: typescript?.typeRoots ?? ['node_modules/@types'],\n })\n\n monaco.languages.typescript.typescriptDefaults.setDiagnosticsOptions({\n noSemanticValidation: typescript?.enableSemanticValidation ? false : true,\n noSyntaxValidation: false,\n })\n\n const run = async () => {\n if (\n typescript?.fetchTypes &&\n Array.isArray(typescript.fetchTypes) &&\n typescript.fetchTypes.length > 0\n ) {\n await Promise.all(\n typescript.fetchTypes.map(async (type) => {\n const types = await fetch(type.url)\n const typesText = await types.text()\n monaco.languages.typescript.typescriptDefaults.addExtraLib(\n typesText,\n type.filePath,\n )\n }),\n )\n }\n }\n void run()\n }}\n path={path}\n permissions={permissions}\n readOnly={readOnly}\n renderedBlocks={renderedBlocks}\n schemaPath={schemaPath}\n validate={validate}\n />\n )\n )\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"Code.js","names":["c","_c","CodeField","useFormFields","React","useId","useMemo","defaultLanguages","CodeComponent","t0","$","autoComplete","field","forceRender","languages","t1","path","permissions","readOnly","renderedBlocks","schemaPath","typescript","validate","undefined","languageField","_temp","language","value","initialValue","instanceId","label","t2","Symbol","for","t3","name","t4","defaultPath","t5","admin","editorOptions","editorProps","t6","type","props","key","t7","_jsx","onMount","_editor","monaco","editor","defineTheme","base","colors","inherit","rules","typescriptDefaults","setCompilerOptions","allowNonTsExtensions","allowJs","allowSyntheticDefaultImports","esModuleInterop","jsx","JsxEmit","moduleResolution","ModuleResolutionKind","NodeJs","noEmit","paths","reactNamespace","target","ScriptTarget","typeRoots","setDiagnosticsOptions","noSemanticValidation","enableSemanticValidation","noSyntaxValidation","run","fetchTypes","Array","isArray","length","Promise","all","map","types","fetch","url","typesText","text","addExtraLib","filePath","fields"],"sources":["../../../../../../src/features/blocks/premade/CodeBlock/Component/Code.tsx"],"sourcesContent":["'use client'\n\nimport type { CodeFieldClient, CodeFieldClientProps } from 'payload'\n\nimport { CodeField, useFormFields } from '@payloadcms/ui'\nimport React, { useId, useMemo } from 'react'\n\nimport { defaultLanguages } from './defaultLanguages.js'\n\nexport type AdditionalCodeComponentProps = {\n /**\n * @default first key of the `languages` prop\n */\n defaultLanguage?: string\n /**\n * @default all languages supported by Monaco Editor\n */\n languages?: Record<string, string>\n /**\n * Override the name of the block.\n *\n * @default 'Code'\n */\n slug?: string\n /**\n * Configure typescript settings for the editor\n */\n typescript?: {\n /**\n * By default, the editor will not perform semantic validation. This means that\n * while syntax errors will be highlighted, other issues like missing imports or incorrect\n * types will not be.\n *\n * @default false\n */\n enableSemanticValidation?: boolean\n /**\n * Additional types to fetch and include in the editor for autocompletion.\n *\n * For example, to include types for payload, you would set this to\n *\n * [{ url: 'https://unpkg.com/payload@latest/dist/index.d.ts', filePath: 'file:///node_modules/payload/index.d.ts' }]\n */\n fetchTypes?: Array<{\n filePath: string\n url: string\n }>\n /**\n * @default undefined\n */\n paths?: Record<string, string[]>\n /**\n * @default \"ESNext\"\n */\n target?: string\n /**\n * @default ['node_modules/@types']\n */\n typeRoots?: string[]\n }\n}\n\nexport const CodeComponent: React.FC<AdditionalCodeComponentProps & CodeFieldClientProps> = ({\n autoComplete,\n field,\n forceRender,\n languages = defaultLanguages,\n path,\n permissions,\n readOnly,\n renderedBlocks,\n schemaPath,\n typescript,\n validate,\n}) => {\n const languageField = useFormFields(([fields]) => fields['language'])\n\n const language: string =\n (languageField?.value as string) || (languageField?.initialValue as string) || 'typescript'\n\n // unique id per component instance to ensure Monaco creates a distinct model\n // for each TypeScript code block. Using React's useId is SSR-safe and builtin.\n const instanceId = useId()\n\n const label = languages[language]\n\n const props: CodeFieldClient = useMemo<CodeFieldClient>(\n () => ({\n ...field,\n type: 'code',\n admin: {\n ...field.admin,\n editorOptions: {},\n editorProps: {\n // If typescript is set, @monaco-editor/react needs to set the URI to a .ts or .tsx file when it calls createModel().\n // Provide a unique defaultPath per instance so Monaco doesn't reuse the same model\n // across multiple code block instances. We use field.name + instanceId for debugability.\n defaultPath: language === 'ts' ? `file-${field.name}-${instanceId}.tsx` : undefined,\n },\n language,\n },\n }),\n [field, language, instanceId],\n )\n\n const key = `${field.name}-${language}-${label}`\n\n return (\n props && (\n <CodeField\n autoComplete={autoComplete}\n field={props}\n forceRender={forceRender}\n key={key}\n onMount={(_editor, monaco) => {\n monaco.editor.defineTheme('vs-dark', {\n base: 'vs-dark',\n colors: {\n 'editor.background': '#222222',\n },\n inherit: true,\n rules: [],\n })\n\n monaco.editor.defineTheme('vs', {\n base: 'vs',\n colors: {\n 'editor.background': '#f5f5f5',\n },\n inherit: true,\n rules: [],\n })\n monaco.languages.typescript.typescriptDefaults.setCompilerOptions({\n allowNonTsExtensions: true,\n // Set module resolution to NodeJs to enable autocompletion\n allowJs: true,\n allowSyntheticDefaultImports: true,\n esModuleInterop: true,\n jsx: monaco.languages.typescript.JsxEmit.React,\n moduleResolution: monaco.languages.typescript.ModuleResolutionKind.NodeJs,\n noEmit: true,\n paths: typescript?.paths,\n reactNamespace: 'React',\n target: monaco.languages.typescript.ScriptTarget[\n typescript?.target ?? ('ESNext' as any)\n ] as any,\n typeRoots: typescript?.typeRoots ?? ['node_modules/@types'],\n })\n\n monaco.languages.typescript.typescriptDefaults.setDiagnosticsOptions({\n noSemanticValidation: typescript?.enableSemanticValidation ? false : true,\n noSyntaxValidation: false,\n })\n\n const run = async () => {\n if (\n typescript?.fetchTypes &&\n Array.isArray(typescript.fetchTypes) &&\n typescript.fetchTypes.length > 0\n ) {\n await Promise.all(\n typescript.fetchTypes.map(async (type) => {\n const types = await fetch(type.url)\n const typesText = await types.text()\n monaco.languages.typescript.typescriptDefaults.addExtraLib(\n typesText,\n type.filePath,\n )\n }),\n )\n }\n }\n void run()\n }}\n path={path}\n permissions={permissions}\n readOnly={readOnly}\n renderedBlocks={renderedBlocks}\n schemaPath={schemaPath}\n validate={validate}\n />\n )\n )\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"table.d.ts","sourceRoot":"","sources":["../../../../../../src/features/converters/lexicalToHtml/async/converters/table.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,uBAAuB,EACvB,mBAAmB,EACnB,sBAAsB,EACvB,MAAM,mCAAmC,CAAA;AAC1C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAItD,eAAO,MAAM,uBAAuB,EAAE,mBAAmB,CACvD,uBAAuB,GAAG,mBAAmB,GAAG,sBAAsB,CAwDvE,CAAA"}
1
+ {"version":3,"file":"table.d.ts","sourceRoot":"","sources":["../../../../../../src/features/converters/lexicalToHtml/async/converters/table.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,uBAAuB,EACvB,mBAAmB,EACnB,sBAAsB,EACvB,MAAM,mCAAmC,CAAA;AAC1C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAItD,eAAO,MAAM,uBAAuB,EAAE,mBAAmB,CACvD,uBAAuB,GAAG,mBAAmB,GAAG,sBAAsB,CA4DvE,CAAA"}
@@ -22,14 +22,16 @@ export const TableHTMLConverterAsync = {
22
22
  const children = (await nodesToHTML({
23
23
  nodes: node.children
24
24
  })).join('');
25
- const TagName = node.headerState > 0 ? 'th' : 'td';
26
- const headerStateClass = `lexical-table-cell-header-${node.headerState}`;
25
+ // Stored JSON is not type-checked, so only numbers may be interpolated into attributes
26
+ const headerState = typeof node.headerState === 'number' ? node.headerState : 0;
27
+ const TagName = headerState > 0 ? 'th' : 'td';
28
+ const headerStateClass = `lexical-table-cell-header-${headerState}`;
27
29
  let style = 'border: var(--stroke-width-small) solid #ccc; padding: 8px;' + providedCSSString;
28
30
  if (node.backgroundColor && isSafeCssColor(node.backgroundColor)) {
29
31
  style += ` background-color: ${node.backgroundColor};`;
30
32
  }
31
- const colSpanAttr = node.colSpan && node.colSpan > 1 ? ` colspan="${node.colSpan}"` : '';
32
- const rowSpanAttr = node.rowSpan && node.rowSpan > 1 ? ` rowspan="${node.rowSpan}"` : '';
33
+ const colSpanAttr = typeof node.colSpan === 'number' && node.colSpan > 1 ? ` colspan="${node.colSpan}"` : '';
34
+ const rowSpanAttr = typeof node.rowSpan === 'number' && node.rowSpan > 1 ? ` rowspan="${node.rowSpan}"` : '';
33
35
  return `<${TagName}
34
36
  class="lexical-table-cell ${headerStateClass}"
35
37
  ${colSpanAttr}
@@ -1 +1 @@
1
- {"version":3,"file":"table.js","names":["isSafeCssColor","TableHTMLConverterAsync","table","node","nodesToHTML","providedStyleTag","children","nodes","join","tablecell","providedCSSString","TagName","headerState","headerStateClass","style","backgroundColor","colSpanAttr","colSpan","rowSpanAttr","rowSpan","tablerow"],"sources":["../../../../../../src/features/converters/lexicalToHtml/async/converters/table.ts"],"sourcesContent":["import type {\n SerializedTableCellNode,\n SerializedTableNode,\n SerializedTableRowNode,\n} from '../../../../../types/nodeTypes.js'\nimport type { HTMLConvertersAsync } from '../types.js'\n\nimport { isSafeCssColor } from '../../shared/cssColors.js'\n\nexport const TableHTMLConverterAsync: HTMLConvertersAsync<\n SerializedTableCellNode | SerializedTableNode | SerializedTableRowNode\n> = {\n table: async ({ node, nodesToHTML, providedStyleTag }) => {\n const children = (\n await nodesToHTML({\n nodes: node.children,\n })\n ).join('')\n\n return `<div${providedStyleTag} class=\"lexical-table-container\">\n <table class=\"lexical-table\" style=\"border-collapse: collapse;\">\n <tbody>${children}</tbody>\n </table>\n </div>`\n },\n\n tablecell: async ({ node, nodesToHTML, providedCSSString }) => {\n const children = (\n await nodesToHTML({\n nodes: node.children,\n })\n ).join('')\n\n const TagName = node.headerState > 0 ? 'th' : 'td'\n const headerStateClass = `lexical-table-cell-header-${node.headerState}`\n\n let style = 'border: var(--stroke-width-small) solid #ccc; padding: 8px;' + providedCSSString\n if (node.backgroundColor && isSafeCssColor(node.backgroundColor)) {\n style += ` background-color: ${node.backgroundColor};`\n }\n\n const colSpanAttr = node.colSpan && node.colSpan > 1 ? ` colspan=\"${node.colSpan}\"` : ''\n const rowSpanAttr = node.rowSpan && node.rowSpan > 1 ? ` rowspan=\"${node.rowSpan}\"` : ''\n\n return `<${TagName}\n class=\"lexical-table-cell ${headerStateClass}\"\n ${colSpanAttr}\n ${rowSpanAttr}\n style=\"${style}\"\n >\n ${children}\n </${TagName}>\n `\n },\n\n tablerow: async ({ node, nodesToHTML, providedStyleTag }) => {\n const children = (\n await nodesToHTML({\n nodes: node.children,\n })\n ).join('')\n\n return `<tr${providedStyleTag} class=\"lexical-table-row\">\n ${children}\n </tr>`\n },\n}\n"],"mappings":"AAOA,SAASA,cAAc,QAAQ;AAE/B,OAAO,MAAMC,uBAAA,GAET;EACFC,KAAA,EAAO,MAAAA,CAAO;IAAEC,IAAI;IAAEC,WAAW;IAAEC;EAAgB,CAAE;IACnD,MAAMC,QAAA,GAAW,CACf,MAAMF,WAAA,CAAY;MAChBG,KAAA,EAAOJ,IAAA,CAAKG;IACd,EAAC,EACDE,IAAI,CAAC;IAEP,OAAO,OAAOH,gBAAA;;mBAECC,QAAA;;aAEN;EACX;EAEAG,SAAA,EAAW,MAAAA,CAAO;IAAEN,IAAI;IAAEC,WAAW;IAAEM;EAAiB,CAAE;IACxD,MAAMJ,QAAA,GAAW,CACf,MAAMF,WAAA,CAAY;MAChBG,KAAA,EAAOJ,IAAA,CAAKG;IACd,EAAC,EACDE,IAAI,CAAC;IAEP,MAAMG,OAAA,GAAUR,IAAA,CAAKS,WAAW,GAAG,IAAI,OAAO;IAC9C,MAAMC,gBAAA,GAAmB,6BAA6BV,IAAA,CAAKS,WAAW,EAAE;IAExE,IAAIE,KAAA,GAAQ,gEAAgEJ,iBAAA;IAC5E,IAAIP,IAAA,CAAKY,eAAe,IAAIf,cAAA,CAAeG,IAAA,CAAKY,eAAe,GAAG;MAChED,KAAA,IAAS,sBAAsBX,IAAA,CAAKY,eAAe,GAAG;IACxD;IAEA,MAAMC,WAAA,GAAcb,IAAA,CAAKc,OAAO,IAAId,IAAA,CAAKc,OAAO,GAAG,IAAI,aAAad,IAAA,CAAKc,OAAO,GAAG,GAAG;IACtF,MAAMC,WAAA,GAAcf,IAAA,CAAKgB,OAAO,IAAIhB,IAAA,CAAKgB,OAAO,GAAG,IAAI,aAAahB,IAAA,CAAKgB,OAAO,GAAG,GAAG;IAEtF,OAAO,IAAIR,OAAA;oCACqBE,gBAAA;UAC1BG,WAAA;UACAE,WAAA;iBACOJ,KAAA;;UAEPR,QAAA;UACAK,OAAA;KACL;EACH;EAEAS,QAAA,EAAU,MAAAA,CAAO;IAAEjB,IAAI;IAAEC,WAAW;IAAEC;EAAgB,CAAE;IACtD,MAAMC,QAAA,GAAW,CACf,MAAMF,WAAA,CAAY;MAChBG,KAAA,EAAOJ,IAAA,CAAKG;IACd,EAAC,EACDE,IAAI,CAAC;IAEP,OAAO,MAAMH,gBAAA;UACPC,QAAA;YACE;EACV;AACF","ignoreList":[]}
1
+ {"version":3,"file":"table.js","names":["isSafeCssColor","TableHTMLConverterAsync","table","node","nodesToHTML","providedStyleTag","children","nodes","join","tablecell","providedCSSString","headerState","TagName","headerStateClass","style","backgroundColor","colSpanAttr","colSpan","rowSpanAttr","rowSpan","tablerow"],"sources":["../../../../../../src/features/converters/lexicalToHtml/async/converters/table.ts"],"sourcesContent":["import type {\n SerializedTableCellNode,\n SerializedTableNode,\n SerializedTableRowNode,\n} from '../../../../../types/nodeTypes.js'\nimport type { HTMLConvertersAsync } from '../types.js'\n\nimport { isSafeCssColor } from '../../shared/cssColors.js'\n\nexport const TableHTMLConverterAsync: HTMLConvertersAsync<\n SerializedTableCellNode | SerializedTableNode | SerializedTableRowNode\n> = {\n table: async ({ node, nodesToHTML, providedStyleTag }) => {\n const children = (\n await nodesToHTML({\n nodes: node.children,\n })\n ).join('')\n\n return `<div${providedStyleTag} class=\"lexical-table-container\">\n <table class=\"lexical-table\" style=\"border-collapse: collapse;\">\n <tbody>${children}</tbody>\n </table>\n </div>`\n },\n\n tablecell: async ({ node, nodesToHTML, providedCSSString }) => {\n const children = (\n await nodesToHTML({\n nodes: node.children,\n })\n ).join('')\n\n // Stored JSON is not type-checked, so only numbers may be interpolated into attributes\n const headerState = typeof node.headerState === 'number' ? node.headerState : 0\n const TagName = headerState > 0 ? 'th' : 'td'\n const headerStateClass = `lexical-table-cell-header-${headerState}`\n\n let style = 'border: var(--stroke-width-small) solid #ccc; padding: 8px;' + providedCSSString\n if (node.backgroundColor && isSafeCssColor(node.backgroundColor)) {\n style += ` background-color: ${node.backgroundColor};`\n }\n\n const colSpanAttr =\n typeof node.colSpan === 'number' && node.colSpan > 1 ? ` colspan=\"${node.colSpan}\"` : ''\n const rowSpanAttr =\n typeof node.rowSpan === 'number' && node.rowSpan > 1 ? ` rowspan=\"${node.rowSpan}\"` : ''\n\n return `<${TagName}\n class=\"lexical-table-cell ${headerStateClass}\"\n ${colSpanAttr}\n ${rowSpanAttr}\n style=\"${style}\"\n >\n ${children}\n </${TagName}>\n `\n },\n\n tablerow: async ({ node, nodesToHTML, providedStyleTag }) => {\n const children = (\n await nodesToHTML({\n nodes: node.children,\n })\n ).join('')\n\n return `<tr${providedStyleTag} class=\"lexical-table-row\">\n ${children}\n </tr>`\n },\n}\n"],"mappings":"AAOA,SAASA,cAAc,QAAQ;AAE/B,OAAO,MAAMC,uBAAA,GAET;EACFC,KAAA,EAAO,MAAAA,CAAO;IAAEC,IAAI;IAAEC,WAAW;IAAEC;EAAgB,CAAE;IACnD,MAAMC,QAAA,GAAW,CACf,MAAMF,WAAA,CAAY;MAChBG,KAAA,EAAOJ,IAAA,CAAKG;IACd,EAAC,EACDE,IAAI,CAAC;IAEP,OAAO,OAAOH,gBAAA;;mBAECC,QAAA;;aAEN;EACX;EAEAG,SAAA,EAAW,MAAAA,CAAO;IAAEN,IAAI;IAAEC,WAAW;IAAEM;EAAiB,CAAE;IACxD,MAAMJ,QAAA,GAAW,CACf,MAAMF,WAAA,CAAY;MAChBG,KAAA,EAAOJ,IAAA,CAAKG;IACd,EAAC,EACDE,IAAI,CAAC;IAEP;IACA,MAAMG,WAAA,GAAc,OAAOR,IAAA,CAAKQ,WAAW,KAAK,WAAWR,IAAA,CAAKQ,WAAW,GAAG;IAC9E,MAAMC,OAAA,GAAUD,WAAA,GAAc,IAAI,OAAO;IACzC,MAAME,gBAAA,GAAmB,6BAA6BF,WAAA,EAAa;IAEnE,IAAIG,KAAA,GAAQ,gEAAgEJ,iBAAA;IAC5E,IAAIP,IAAA,CAAKY,eAAe,IAAIf,cAAA,CAAeG,IAAA,CAAKY,eAAe,GAAG;MAChED,KAAA,IAAS,sBAAsBX,IAAA,CAAKY,eAAe,GAAG;IACxD;IAEA,MAAMC,WAAA,GACJ,OAAOb,IAAA,CAAKc,OAAO,KAAK,YAAYd,IAAA,CAAKc,OAAO,GAAG,IAAI,aAAad,IAAA,CAAKc,OAAO,GAAG,GAAG;IACxF,MAAMC,WAAA,GACJ,OAAOf,IAAA,CAAKgB,OAAO,KAAK,YAAYhB,IAAA,CAAKgB,OAAO,GAAG,IAAI,aAAahB,IAAA,CAAKgB,OAAO,GAAG,GAAG;IAExF,OAAO,IAAIP,OAAA;oCACqBC,gBAAA;UAC1BG,WAAA;UACAE,WAAA;iBACOJ,KAAA;;UAEPR,QAAA;UACAM,OAAA;KACL;EACH;EAEAQ,QAAA,EAAU,MAAAA,CAAO;IAAEjB,IAAI;IAAEC,WAAW;IAAEC;EAAgB,CAAE;IACtD,MAAMC,QAAA,GAAW,CACf,MAAMF,WAAA,CAAY;MAChBG,KAAA,EAAOJ,IAAA,CAAKG;IACd,EAAC,EACDE,IAAI,CAAC;IAEP,OAAO,MAAMH,gBAAA;UACPC,QAAA;YACE;EACV;AACF","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"upload.d.ts","sourceRoot":"","sources":["../../../../../../src/features/converters/lexicalToHtml/async/converters/upload.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAA;AAE7E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAEtD,eAAO,MAAM,wBAAwB,EAAE,mBAAmB,CAAC,oBAAoB,CAoF9E,CAAA"}
1
+ {"version":3,"file":"upload.d.ts","sourceRoot":"","sources":["../../../../../../src/features/converters/lexicalToHtml/async/converters/upload.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAA;AAE7E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAEtD,eAAO,MAAM,wBAAwB,EAAE,mBAAmB,CAAC,oBAAoB,CAoF9E,CAAA"}
@@ -1,4 +1,5 @@
1
1
  import escapeHTML from 'escape-html';
2
+ import { sanitizeUrl } from 'payload/shared';
2
3
  export const UploadHTMLConverterAsync = {
3
4
  upload: async ({
4
5
  node,
@@ -23,7 +24,7 @@ export const UploadHTMLConverterAsync = {
23
24
  return '';
24
25
  }
25
26
  const alt = escapeHTML(node.fields?.alt || uploadDoc?.alt || '');
26
- const url = escapeHTML(uploadDoc.url ?? '');
27
+ const url = escapeHTML(sanitizeUrl(uploadDoc.url ?? ''));
27
28
  // 1) If upload is NOT an image, return a link
28
29
  if (!uploadDoc.mimeType.startsWith('image')) {
29
30
  return `<a${providedStyleTag} href="${url}" rel="noopener noreferrer">${escapeHTML(uploadDoc.filename ?? '')}</a>`;
@@ -1 +1 @@
1
- {"version":3,"file":"upload.js","names":["escapeHTML","UploadHTMLConverterAsync","upload","node","populate","providedStyleTag","uploadNode","uploadDoc","undefined","value","id","collectionSlug","relationTo","alt","fields","url","mimeType","startsWith","filename","variants","Object","keys","length","String","height","width","pictureHTML","size","imageSize","filesize"],"sources":["../../../../../../src/features/converters/lexicalToHtml/async/converters/upload.ts"],"sourcesContent":["import type { FileData, FileSize, TypeWithID } from 'payload'\n\nimport escapeHTML from 'escape-html'\n\nimport type { SerializedUploadNode } from '../../../../../types/nodeTypes.js'\nimport type { UploadData } from '../../../../upload/server/schema.js'\nimport type { HTMLConvertersAsync } from '../types.js'\n\nexport const UploadHTMLConverterAsync: HTMLConvertersAsync<SerializedUploadNode> = {\n upload: async ({ node, populate, providedStyleTag }) => {\n const uploadNode = node as UploadData\n\n let uploadDoc: (FileData & TypeWithID) | undefined = undefined\n\n // If there's no valid upload data, populate return an empty string\n if (typeof uploadNode.value !== 'object') {\n if (!populate) {\n return ''\n }\n uploadDoc = await populate<FileData & TypeWithID>({\n id: uploadNode.value,\n collectionSlug: uploadNode.relationTo,\n })\n } else {\n uploadDoc = uploadNode.value as unknown as FileData & TypeWithID\n }\n\n if (!uploadDoc) {\n return ''\n }\n\n const alt = escapeHTML(\n (node.fields?.alt as string) || (uploadDoc as { alt?: string })?.alt || '',\n )\n\n const url = escapeHTML(uploadDoc.url ?? '')\n\n // 1) If upload is NOT an image, return a link\n if (!uploadDoc.mimeType.startsWith('image')) {\n return `<a${providedStyleTag} href=\"${url}\" rel=\"noopener noreferrer\">${escapeHTML(uploadDoc.filename ?? '')}</a>`\n }\n\n // 2) If image has no different sizes, return a simple <img />\n if (!uploadDoc.variants || !Object.keys(uploadDoc.variants).length) {\n return `\n <img${providedStyleTag}\n alt=\"${alt}\"\n height=\"${escapeHTML(String(uploadDoc.height ?? ''))}\"\n src=\"${url}\"\n width=\"${escapeHTML(String(uploadDoc.width ?? ''))}\"\n />\n `\n }\n\n // 3) If image has different sizes, build a <picture> element with <source> tags\n let pictureHTML = ''\n\n for (const size in uploadDoc.variants) {\n const imageSize = uploadDoc.variants[size] as FileSize\n\n if (\n !imageSize ||\n !imageSize.width ||\n !imageSize.height ||\n !imageSize.mimeType ||\n !imageSize.filesize ||\n !imageSize.filename ||\n !imageSize.url\n ) {\n continue\n }\n\n pictureHTML += `\n <source\n media=\"(max-width: ${escapeHTML(String(imageSize.width))}px)\"\n srcset=\"${escapeHTML(imageSize.url)}\"\n type=\"${escapeHTML(imageSize.mimeType)}\"\n />\n `\n }\n\n pictureHTML += `\n <img\n alt=\"${alt}\"\n height=\"${escapeHTML(String(uploadDoc.height ?? ''))}\"\n src=\"${url}\"\n width=\"${escapeHTML(String(uploadDoc.width ?? ''))}\"\n />\n `\n\n return `<picture${providedStyleTag}>${pictureHTML}</picture>`\n },\n}\n"],"mappings":"AAEA,OAAOA,UAAA,MAAgB;AAMvB,OAAO,MAAMC,wBAAA,GAAsE;EACjFC,MAAA,EAAQ,MAAAA,CAAO;IAAEC,IAAI;IAAEC,QAAQ;IAAEC;EAAgB,CAAE;IACjD,MAAMC,UAAA,GAAaH,IAAA;IAEnB,IAAII,SAAA,GAAiDC,SAAA;IAErD;IACA,IAAI,OAAOF,UAAA,CAAWG,KAAK,KAAK,UAAU;MACxC,IAAI,CAACL,QAAA,EAAU;QACb,OAAO;MACT;MACAG,SAAA,GAAY,MAAMH,QAAA,CAAgC;QAChDM,EAAA,EAAIJ,UAAA,CAAWG,KAAK;QACpBE,cAAA,EAAgBL,UAAA,CAAWM;MAC7B;IACF,OAAO;MACLL,SAAA,GAAYD,UAAA,CAAWG,KAAK;IAC9B;IAEA,IAAI,CAACF,SAAA,EAAW;MACd,OAAO;IACT;IAEA,MAAMM,GAAA,GAAMb,UAAA,CACVG,IAAC,CAAKW,MAAM,EAAED,GAAA,IAAmBN,SAAA,EAAgCM,GAAA,IAAO;IAG1E,MAAME,GAAA,GAAMf,UAAA,CAAWO,SAAA,CAAUQ,GAAG,IAAI;IAExC;IACA,IAAI,CAACR,SAAA,CAAUS,QAAQ,CAACC,UAAU,CAAC,UAAU;MAC3C,OAAO,KAAKZ,gBAAA,UAA0BU,GAAA,+BAAkCf,UAAA,CAAWO,SAAA,CAAUW,QAAQ,IAAI,SAAS;IACpH;IAEA;IACA,IAAI,CAACX,SAAA,CAAUY,QAAQ,IAAI,CAACC,MAAA,CAAOC,IAAI,CAACd,SAAA,CAAUY,QAAQ,EAAEG,MAAM,EAAE;MAClE,OAAO;cACCjB,gBAAA;iBACGQ,GAAA;oBACGb,UAAA,CAAWuB,MAAA,CAAOhB,SAAA,CAAUiB,MAAM,IAAI;iBACzCT,GAAA;mBACEf,UAAA,CAAWuB,MAAA,CAAOhB,SAAA,CAAUkB,KAAK,IAAI;;OAEjD;IACH;IAEA;IACA,IAAIC,WAAA,GAAc;IAElB,KAAK,MAAMC,IAAA,IAAQpB,SAAA,CAAUY,QAAQ,EAAE;MACrC,MAAMS,SAAA,GAAYrB,SAAA,CAAUY,QAAQ,CAACQ,IAAA,CAAK;MAE1C,IACE,CAACC,SAAA,IACD,CAACA,SAAA,CAAUH,KAAK,IAChB,CAACG,SAAA,CAAUJ,MAAM,IACjB,CAACI,SAAA,CAAUZ,QAAQ,IACnB,CAACY,SAAA,CAAUC,QAAQ,IACnB,CAACD,SAAA,CAAUV,QAAQ,IACnB,CAACU,SAAA,CAAUb,GAAG,EACd;QACA;MACF;MAEAW,WAAA,IAAe;;+BAEU1B,UAAA,CAAWuB,MAAA,CAAOK,SAAA,CAAUH,KAAK;oBAC5CzB,UAAA,CAAW4B,SAAA,CAAUb,GAAG;kBAC1Bf,UAAA,CAAW4B,SAAA,CAAUZ,QAAQ;;OAExC;IACH;IAEAU,WAAA,IAAe;;eAEJb,GAAA;kBACGb,UAAA,CAAWuB,MAAA,CAAOhB,SAAA,CAAUiB,MAAM,IAAI;eACzCT,GAAA;iBACEf,UAAA,CAAWuB,MAAA,CAAOhB,SAAA,CAAUkB,KAAK,IAAI;;KAEjD;IAED,OAAO,WAAWpB,gBAAA,IAAoBqB,WAAA,YAAuB;EAC/D;AACF","ignoreList":[]}
1
+ {"version":3,"file":"upload.js","names":["escapeHTML","sanitizeUrl","UploadHTMLConverterAsync","upload","node","populate","providedStyleTag","uploadNode","uploadDoc","undefined","value","id","collectionSlug","relationTo","alt","fields","url","mimeType","startsWith","filename","variants","Object","keys","length","String","height","width","pictureHTML","size","imageSize","filesize"],"sources":["../../../../../../src/features/converters/lexicalToHtml/async/converters/upload.ts"],"sourcesContent":["import type { FileData, FileSize, TypeWithID } from 'payload'\n\nimport escapeHTML from 'escape-html'\nimport { sanitizeUrl } from 'payload/shared'\n\nimport type { SerializedUploadNode } from '../../../../../types/nodeTypes.js'\nimport type { UploadData } from '../../../../upload/server/schema.js'\nimport type { HTMLConvertersAsync } from '../types.js'\n\nexport const UploadHTMLConverterAsync: HTMLConvertersAsync<SerializedUploadNode> = {\n upload: async ({ node, populate, providedStyleTag }) => {\n const uploadNode = node as UploadData\n\n let uploadDoc: (FileData & TypeWithID) | undefined = undefined\n\n // If there's no valid upload data, populate return an empty string\n if (typeof uploadNode.value !== 'object') {\n if (!populate) {\n return ''\n }\n uploadDoc = await populate<FileData & TypeWithID>({\n id: uploadNode.value,\n collectionSlug: uploadNode.relationTo,\n })\n } else {\n uploadDoc = uploadNode.value as unknown as FileData & TypeWithID\n }\n\n if (!uploadDoc) {\n return ''\n }\n\n const alt = escapeHTML(\n (node.fields?.alt as string) || (uploadDoc as { alt?: string })?.alt || '',\n )\n\n const url = escapeHTML(sanitizeUrl(uploadDoc.url ?? ''))\n\n // 1) If upload is NOT an image, return a link\n if (!uploadDoc.mimeType.startsWith('image')) {\n return `<a${providedStyleTag} href=\"${url}\" rel=\"noopener noreferrer\">${escapeHTML(uploadDoc.filename ?? '')}</a>`\n }\n\n // 2) If image has no different sizes, return a simple <img />\n if (!uploadDoc.variants || !Object.keys(uploadDoc.variants).length) {\n return `\n <img${providedStyleTag}\n alt=\"${alt}\"\n height=\"${escapeHTML(String(uploadDoc.height ?? ''))}\"\n src=\"${url}\"\n width=\"${escapeHTML(String(uploadDoc.width ?? ''))}\"\n />\n `\n }\n\n // 3) If image has different sizes, build a <picture> element with <source> tags\n let pictureHTML = ''\n\n for (const size in uploadDoc.variants) {\n const imageSize = uploadDoc.variants[size] as FileSize\n\n if (\n !imageSize ||\n !imageSize.width ||\n !imageSize.height ||\n !imageSize.mimeType ||\n !imageSize.filesize ||\n !imageSize.filename ||\n !imageSize.url\n ) {\n continue\n }\n\n pictureHTML += `\n <source\n media=\"(max-width: ${escapeHTML(String(imageSize.width))}px)\"\n srcset=\"${escapeHTML(imageSize.url)}\"\n type=\"${escapeHTML(imageSize.mimeType)}\"\n />\n `\n }\n\n pictureHTML += `\n <img\n alt=\"${alt}\"\n height=\"${escapeHTML(String(uploadDoc.height ?? ''))}\"\n src=\"${url}\"\n width=\"${escapeHTML(String(uploadDoc.width ?? ''))}\"\n />\n `\n\n return `<picture${providedStyleTag}>${pictureHTML}</picture>`\n },\n}\n"],"mappings":"AAEA,OAAOA,UAAA,MAAgB;AACvB,SAASC,WAAW,QAAQ;AAM5B,OAAO,MAAMC,wBAAA,GAAsE;EACjFC,MAAA,EAAQ,MAAAA,CAAO;IAAEC,IAAI;IAAEC,QAAQ;IAAEC;EAAgB,CAAE;IACjD,MAAMC,UAAA,GAAaH,IAAA;IAEnB,IAAII,SAAA,GAAiDC,SAAA;IAErD;IACA,IAAI,OAAOF,UAAA,CAAWG,KAAK,KAAK,UAAU;MACxC,IAAI,CAACL,QAAA,EAAU;QACb,OAAO;MACT;MACAG,SAAA,GAAY,MAAMH,QAAA,CAAgC;QAChDM,EAAA,EAAIJ,UAAA,CAAWG,KAAK;QACpBE,cAAA,EAAgBL,UAAA,CAAWM;MAC7B;IACF,OAAO;MACLL,SAAA,GAAYD,UAAA,CAAWG,KAAK;IAC9B;IAEA,IAAI,CAACF,SAAA,EAAW;MACd,OAAO;IACT;IAEA,MAAMM,GAAA,GAAMd,UAAA,CACVI,IAAC,CAAKW,MAAM,EAAED,GAAA,IAAmBN,SAAA,EAAgCM,GAAA,IAAO;IAG1E,MAAME,GAAA,GAAMhB,UAAA,CAAWC,WAAA,CAAYO,SAAA,CAAUQ,GAAG,IAAI;IAEpD;IACA,IAAI,CAACR,SAAA,CAAUS,QAAQ,CAACC,UAAU,CAAC,UAAU;MAC3C,OAAO,KAAKZ,gBAAA,UAA0BU,GAAA,+BAAkChB,UAAA,CAAWQ,SAAA,CAAUW,QAAQ,IAAI,SAAS;IACpH;IAEA;IACA,IAAI,CAACX,SAAA,CAAUY,QAAQ,IAAI,CAACC,MAAA,CAAOC,IAAI,CAACd,SAAA,CAAUY,QAAQ,EAAEG,MAAM,EAAE;MAClE,OAAO;cACCjB,gBAAA;iBACGQ,GAAA;oBACGd,UAAA,CAAWwB,MAAA,CAAOhB,SAAA,CAAUiB,MAAM,IAAI;iBACzCT,GAAA;mBACEhB,UAAA,CAAWwB,MAAA,CAAOhB,SAAA,CAAUkB,KAAK,IAAI;;OAEjD;IACH;IAEA;IACA,IAAIC,WAAA,GAAc;IAElB,KAAK,MAAMC,IAAA,IAAQpB,SAAA,CAAUY,QAAQ,EAAE;MACrC,MAAMS,SAAA,GAAYrB,SAAA,CAAUY,QAAQ,CAACQ,IAAA,CAAK;MAE1C,IACE,CAACC,SAAA,IACD,CAACA,SAAA,CAAUH,KAAK,IAChB,CAACG,SAAA,CAAUJ,MAAM,IACjB,CAACI,SAAA,CAAUZ,QAAQ,IACnB,CAACY,SAAA,CAAUC,QAAQ,IACnB,CAACD,SAAA,CAAUV,QAAQ,IACnB,CAACU,SAAA,CAAUb,GAAG,EACd;QACA;MACF;MAEAW,WAAA,IAAe;;+BAEU3B,UAAA,CAAWwB,MAAA,CAAOK,SAAA,CAAUH,KAAK;oBAC5C1B,UAAA,CAAW6B,SAAA,CAAUb,GAAG;kBAC1BhB,UAAA,CAAW6B,SAAA,CAAUZ,QAAQ;;OAExC;IACH;IAEAU,WAAA,IAAe;;eAEJb,GAAA;kBACGd,UAAA,CAAWwB,MAAA,CAAOhB,SAAA,CAAUiB,MAAM,IAAI;eACzCT,GAAA;iBACEhB,UAAA,CAAWwB,MAAA,CAAOhB,SAAA,CAAUkB,KAAK,IAAI;;KAEjD;IAED,OAAO,WAAWpB,gBAAA,IAAoBqB,WAAA,YAAuB;EAC/D;AACF","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"table.d.ts","sourceRoot":"","sources":["../../../../../../src/features/converters/lexicalToHtml/sync/converters/table.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,uBAAuB,EACvB,mBAAmB,EACnB,sBAAsB,EACvB,MAAM,mCAAmC,CAAA;AAC1C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAIjD,eAAO,MAAM,kBAAkB,EAAE,cAAc,CAC7C,uBAAuB,GAAG,mBAAmB,GAAG,sBAAsB,CAkDvE,CAAA"}
1
+ {"version":3,"file":"table.d.ts","sourceRoot":"","sources":["../../../../../../src/features/converters/lexicalToHtml/sync/converters/table.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,uBAAuB,EACvB,mBAAmB,EACnB,sBAAsB,EACvB,MAAM,mCAAmC,CAAA;AAC1C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAIjD,eAAO,MAAM,kBAAkB,EAAE,cAAc,CAC7C,uBAAuB,GAAG,mBAAmB,GAAG,sBAAsB,CAsDvE,CAAA"}
@@ -22,14 +22,16 @@ export const TableHTMLConverter = {
22
22
  const children = nodesToHTML({
23
23
  nodes: node.children
24
24
  }).join('');
25
- const TagName = node.headerState > 0 ? 'th' : 'td';
26
- const headerStateClass = `lexical-table-cell-header-${node.headerState}`;
25
+ // Stored JSON is not type-checked, so only numbers may be interpolated into attributes
26
+ const headerState = typeof node.headerState === 'number' ? node.headerState : 0;
27
+ const TagName = headerState > 0 ? 'th' : 'td';
28
+ const headerStateClass = `lexical-table-cell-header-${headerState}`;
27
29
  let style = 'border: var(--stroke-width-small) solid #ccc; padding: 8px;' + providedCSSString;
28
30
  if (node.backgroundColor && isSafeCssColor(node.backgroundColor)) {
29
31
  style += ` background-color: ${node.backgroundColor};`;
30
32
  }
31
- const colSpanAttr = node.colSpan && node.colSpan > 1 ? ` colspan="${node.colSpan}"` : '';
32
- const rowSpanAttr = node.rowSpan && node.rowSpan > 1 ? ` rowspan="${node.rowSpan}"` : '';
33
+ const colSpanAttr = typeof node.colSpan === 'number' && node.colSpan > 1 ? ` colspan="${node.colSpan}"` : '';
34
+ const rowSpanAttr = typeof node.rowSpan === 'number' && node.rowSpan > 1 ? ` rowspan="${node.rowSpan}"` : '';
33
35
  return `<${TagName}
34
36
  class="lexical-table-cell ${headerStateClass}"
35
37
  ${colSpanAttr}
@@ -1 +1 @@
1
- {"version":3,"file":"table.js","names":["isSafeCssColor","TableHTMLConverter","table","node","nodesToHTML","providedStyleTag","children","nodes","join","tablecell","providedCSSString","TagName","headerState","headerStateClass","style","backgroundColor","colSpanAttr","colSpan","rowSpanAttr","rowSpan","tablerow"],"sources":["../../../../../../src/features/converters/lexicalToHtml/sync/converters/table.ts"],"sourcesContent":["import type {\n SerializedTableCellNode,\n SerializedTableNode,\n SerializedTableRowNode,\n} from '../../../../../types/nodeTypes.js'\nimport type { HTMLConverters } from '../types.js'\n\nimport { isSafeCssColor } from '../../shared/cssColors.js'\n\nexport const TableHTMLConverter: HTMLConverters<\n SerializedTableCellNode | SerializedTableNode | SerializedTableRowNode\n> = {\n table: ({ node, nodesToHTML, providedStyleTag }) => {\n const children = nodesToHTML({\n nodes: node.children,\n }).join('')\n\n return `<div${providedStyleTag} class=\"lexical-table-container\">\n <table class=\"lexical-table\" style=\"border-collapse: collapse;\">\n <tbody>${children}</tbody>\n </table>\n </div>`\n },\n\n tablecell: ({ node, nodesToHTML, providedCSSString }) => {\n const children = nodesToHTML({\n nodes: node.children,\n }).join('')\n\n const TagName = node.headerState > 0 ? 'th' : 'td'\n const headerStateClass = `lexical-table-cell-header-${node.headerState}`\n\n let style = 'border: var(--stroke-width-small) solid #ccc; padding: 8px;' + providedCSSString\n if (node.backgroundColor && isSafeCssColor(node.backgroundColor)) {\n style += ` background-color: ${node.backgroundColor};`\n }\n\n const colSpanAttr = node.colSpan && node.colSpan > 1 ? ` colspan=\"${node.colSpan}\"` : ''\n const rowSpanAttr = node.rowSpan && node.rowSpan > 1 ? ` rowspan=\"${node.rowSpan}\"` : ''\n\n return `<${TagName}\n class=\"lexical-table-cell ${headerStateClass}\"\n ${colSpanAttr}\n ${rowSpanAttr}\n style=\"${style}\"\n >\n ${children}\n </${TagName}>\n `\n },\n\n tablerow: ({ node, nodesToHTML, providedStyleTag }) => {\n const children = nodesToHTML({\n nodes: node.children,\n }).join('')\n\n return `<tr${providedStyleTag} class=\"lexical-table-row\">\n ${children}\n </tr>`\n },\n}\n"],"mappings":"AAOA,SAASA,cAAc,QAAQ;AAE/B,OAAO,MAAMC,kBAAA,GAET;EACFC,KAAA,EAAOA,CAAC;IAAEC,IAAI;IAAEC,WAAW;IAAEC;EAAgB,CAAE;IAC7C,MAAMC,QAAA,GAAWF,WAAA,CAAY;MAC3BG,KAAA,EAAOJ,IAAA,CAAKG;IACd,GAAGE,IAAI,CAAC;IAER,OAAO,OAAOH,gBAAA;;mBAECC,QAAA;;aAEN;EACX;EAEAG,SAAA,EAAWA,CAAC;IAAEN,IAAI;IAAEC,WAAW;IAAEM;EAAiB,CAAE;IAClD,MAAMJ,QAAA,GAAWF,WAAA,CAAY;MAC3BG,KAAA,EAAOJ,IAAA,CAAKG;IACd,GAAGE,IAAI,CAAC;IAER,MAAMG,OAAA,GAAUR,IAAA,CAAKS,WAAW,GAAG,IAAI,OAAO;IAC9C,MAAMC,gBAAA,GAAmB,6BAA6BV,IAAA,CAAKS,WAAW,EAAE;IAExE,IAAIE,KAAA,GAAQ,gEAAgEJ,iBAAA;IAC5E,IAAIP,IAAA,CAAKY,eAAe,IAAIf,cAAA,CAAeG,IAAA,CAAKY,eAAe,GAAG;MAChED,KAAA,IAAS,sBAAsBX,IAAA,CAAKY,eAAe,GAAG;IACxD;IAEA,MAAMC,WAAA,GAAcb,IAAA,CAAKc,OAAO,IAAId,IAAA,CAAKc,OAAO,GAAG,IAAI,aAAad,IAAA,CAAKc,OAAO,GAAG,GAAG;IACtF,MAAMC,WAAA,GAAcf,IAAA,CAAKgB,OAAO,IAAIhB,IAAA,CAAKgB,OAAO,GAAG,IAAI,aAAahB,IAAA,CAAKgB,OAAO,GAAG,GAAG;IAEtF,OAAO,IAAIR,OAAA;oCACqBE,gBAAA;UAC1BG,WAAA;UACAE,WAAA;iBACOJ,KAAA;;UAEPR,QAAA;UACAK,OAAA;KACL;EACH;EAEAS,QAAA,EAAUA,CAAC;IAAEjB,IAAI;IAAEC,WAAW;IAAEC;EAAgB,CAAE;IAChD,MAAMC,QAAA,GAAWF,WAAA,CAAY;MAC3BG,KAAA,EAAOJ,IAAA,CAAKG;IACd,GAAGE,IAAI,CAAC;IAER,OAAO,MAAMH,gBAAA;UACPC,QAAA;YACE;EACV;AACF","ignoreList":[]}
1
+ {"version":3,"file":"table.js","names":["isSafeCssColor","TableHTMLConverter","table","node","nodesToHTML","providedStyleTag","children","nodes","join","tablecell","providedCSSString","headerState","TagName","headerStateClass","style","backgroundColor","colSpanAttr","colSpan","rowSpanAttr","rowSpan","tablerow"],"sources":["../../../../../../src/features/converters/lexicalToHtml/sync/converters/table.ts"],"sourcesContent":["import type {\n SerializedTableCellNode,\n SerializedTableNode,\n SerializedTableRowNode,\n} from '../../../../../types/nodeTypes.js'\nimport type { HTMLConverters } from '../types.js'\n\nimport { isSafeCssColor } from '../../shared/cssColors.js'\n\nexport const TableHTMLConverter: HTMLConverters<\n SerializedTableCellNode | SerializedTableNode | SerializedTableRowNode\n> = {\n table: ({ node, nodesToHTML, providedStyleTag }) => {\n const children = nodesToHTML({\n nodes: node.children,\n }).join('')\n\n return `<div${providedStyleTag} class=\"lexical-table-container\">\n <table class=\"lexical-table\" style=\"border-collapse: collapse;\">\n <tbody>${children}</tbody>\n </table>\n </div>`\n },\n\n tablecell: ({ node, nodesToHTML, providedCSSString }) => {\n const children = nodesToHTML({\n nodes: node.children,\n }).join('')\n\n // Stored JSON is not type-checked, so only numbers may be interpolated into attributes\n const headerState = typeof node.headerState === 'number' ? node.headerState : 0\n const TagName = headerState > 0 ? 'th' : 'td'\n const headerStateClass = `lexical-table-cell-header-${headerState}`\n\n let style = 'border: var(--stroke-width-small) solid #ccc; padding: 8px;' + providedCSSString\n if (node.backgroundColor && isSafeCssColor(node.backgroundColor)) {\n style += ` background-color: ${node.backgroundColor};`\n }\n\n const colSpanAttr =\n typeof node.colSpan === 'number' && node.colSpan > 1 ? ` colspan=\"${node.colSpan}\"` : ''\n const rowSpanAttr =\n typeof node.rowSpan === 'number' && node.rowSpan > 1 ? ` rowspan=\"${node.rowSpan}\"` : ''\n\n return `<${TagName}\n class=\"lexical-table-cell ${headerStateClass}\"\n ${colSpanAttr}\n ${rowSpanAttr}\n style=\"${style}\"\n >\n ${children}\n </${TagName}>\n `\n },\n\n tablerow: ({ node, nodesToHTML, providedStyleTag }) => {\n const children = nodesToHTML({\n nodes: node.children,\n }).join('')\n\n return `<tr${providedStyleTag} class=\"lexical-table-row\">\n ${children}\n </tr>`\n },\n}\n"],"mappings":"AAOA,SAASA,cAAc,QAAQ;AAE/B,OAAO,MAAMC,kBAAA,GAET;EACFC,KAAA,EAAOA,CAAC;IAAEC,IAAI;IAAEC,WAAW;IAAEC;EAAgB,CAAE;IAC7C,MAAMC,QAAA,GAAWF,WAAA,CAAY;MAC3BG,KAAA,EAAOJ,IAAA,CAAKG;IACd,GAAGE,IAAI,CAAC;IAER,OAAO,OAAOH,gBAAA;;mBAECC,QAAA;;aAEN;EACX;EAEAG,SAAA,EAAWA,CAAC;IAAEN,IAAI;IAAEC,WAAW;IAAEM;EAAiB,CAAE;IAClD,MAAMJ,QAAA,GAAWF,WAAA,CAAY;MAC3BG,KAAA,EAAOJ,IAAA,CAAKG;IACd,GAAGE,IAAI,CAAC;IAER;IACA,MAAMG,WAAA,GAAc,OAAOR,IAAA,CAAKQ,WAAW,KAAK,WAAWR,IAAA,CAAKQ,WAAW,GAAG;IAC9E,MAAMC,OAAA,GAAUD,WAAA,GAAc,IAAI,OAAO;IACzC,MAAME,gBAAA,GAAmB,6BAA6BF,WAAA,EAAa;IAEnE,IAAIG,KAAA,GAAQ,gEAAgEJ,iBAAA;IAC5E,IAAIP,IAAA,CAAKY,eAAe,IAAIf,cAAA,CAAeG,IAAA,CAAKY,eAAe,GAAG;MAChED,KAAA,IAAS,sBAAsBX,IAAA,CAAKY,eAAe,GAAG;IACxD;IAEA,MAAMC,WAAA,GACJ,OAAOb,IAAA,CAAKc,OAAO,KAAK,YAAYd,IAAA,CAAKc,OAAO,GAAG,IAAI,aAAad,IAAA,CAAKc,OAAO,GAAG,GAAG;IACxF,MAAMC,WAAA,GACJ,OAAOf,IAAA,CAAKgB,OAAO,KAAK,YAAYhB,IAAA,CAAKgB,OAAO,GAAG,IAAI,aAAahB,IAAA,CAAKgB,OAAO,GAAG,GAAG;IAExF,OAAO,IAAIP,OAAA;oCACqBC,gBAAA;UAC1BG,WAAA;UACAE,WAAA;iBACOJ,KAAA;;UAEPR,QAAA;UACAM,OAAA;KACL;EACH;EAEAQ,QAAA,EAAUA,CAAC;IAAEjB,IAAI;IAAEC,WAAW;IAAEC;EAAgB,CAAE;IAChD,MAAMC,QAAA,GAAWF,WAAA,CAAY;MAC3BG,KAAA,EAAOJ,IAAA,CAAKG;IACd,GAAGE,IAAI,CAAC;IAER,OAAO,MAAMH,gBAAA;UACPC,QAAA;YACE;EACV;AACF","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"upload.d.ts","sourceRoot":"","sources":["../../../../../../src/features/converters/lexicalToHtml/sync/converters/upload.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAA;AAE7E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAEjD,eAAO,MAAM,mBAAmB,EAAE,cAAc,CAAC,oBAAoB,CA8EpE,CAAA"}
1
+ {"version":3,"file":"upload.d.ts","sourceRoot":"","sources":["../../../../../../src/features/converters/lexicalToHtml/sync/converters/upload.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAA;AAE7E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAEjD,eAAO,MAAM,mBAAmB,EAAE,cAAc,CAAC,oBAAoB,CA8EpE,CAAA"}
@@ -1,4 +1,5 @@
1
1
  import escapeHTML from 'escape-html';
2
+ import { sanitizeUrl } from 'payload/shared';
2
3
  export const UploadHTMLConverter = {
3
4
  upload: ({
4
5
  node,
@@ -16,7 +17,7 @@ export const UploadHTMLConverter = {
16
17
  return '';
17
18
  }
18
19
  const alt = escapeHTML(node.fields?.alt || uploadDoc?.alt || '');
19
- const url = escapeHTML(uploadDoc.url ?? '');
20
+ const url = escapeHTML(sanitizeUrl(uploadDoc.url ?? ''));
20
21
  // 1) If upload is NOT an image, return a link
21
22
  if (!uploadDoc.mimeType.startsWith('image')) {
22
23
  return `<a${providedStyleTag} href="${url}" rel="noopener noreferrer">${escapeHTML(uploadDoc.filename ?? '')}</a>`;
@@ -1 +1 @@
1
- {"version":3,"file":"upload.js","names":["escapeHTML","UploadHTMLConverter","upload","node","providedStyleTag","uploadNode","uploadDoc","undefined","value","alt","fields","url","mimeType","startsWith","filename","variants","Object","keys","length","String","height","width","pictureHTML","size","imageSize","filesize"],"sources":["../../../../../../src/features/converters/lexicalToHtml/sync/converters/upload.ts"],"sourcesContent":["import type { FileData, FileSize, TypeWithID } from 'payload'\n\nimport escapeHTML from 'escape-html'\n\nimport type { SerializedUploadNode } from '../../../../../types/nodeTypes.js'\nimport type { UploadData } from '../../../../upload/server/schema.js'\nimport type { HTMLConverters } from '../types.js'\n\nexport const UploadHTMLConverter: HTMLConverters<SerializedUploadNode> = {\n upload: ({ node, providedStyleTag }) => {\n const uploadNode = node as UploadData\n\n let uploadDoc: (FileData & TypeWithID) | undefined = undefined\n\n // If there's no valid upload data, populate return an empty string\n if (typeof uploadNode.value !== 'object') {\n return ''\n } else {\n uploadDoc = uploadNode.value as unknown as FileData & TypeWithID\n }\n\n if (!uploadDoc) {\n return ''\n }\n\n const alt = escapeHTML(\n (node.fields?.alt as string) || (uploadDoc as { alt?: string })?.alt || '',\n )\n\n const url = escapeHTML(uploadDoc.url ?? '')\n\n // 1) If upload is NOT an image, return a link\n if (!uploadDoc.mimeType.startsWith('image')) {\n return `<a${providedStyleTag} href=\"${url}\" rel=\"noopener noreferrer\">${escapeHTML(uploadDoc.filename ?? '')}</a>`\n }\n\n // 2) If image has no different sizes, return a simple <img />\n if (!uploadDoc.variants || !Object.keys(uploadDoc.variants).length) {\n return `\n <img${providedStyleTag}\n alt=\"${alt}\"\n height=\"${escapeHTML(String(uploadDoc.height ?? ''))}\"\n src=\"${url}\"\n width=\"${escapeHTML(String(uploadDoc.width ?? ''))}\"\n />\n `\n }\n\n // 3) If image has different sizes, build a <picture> element with <source> tags\n let pictureHTML = ''\n\n for (const size in uploadDoc.variants) {\n const imageSize = uploadDoc.variants[size] as FileSize\n\n if (\n !imageSize ||\n !imageSize.width ||\n !imageSize.height ||\n !imageSize.mimeType ||\n !imageSize.filesize ||\n !imageSize.filename ||\n !imageSize.url\n ) {\n continue\n }\n\n pictureHTML += `\n <source\n media=\"(max-width: ${escapeHTML(String(imageSize.width))}px)\"\n srcset=\"${escapeHTML(imageSize.url)}\"\n type=\"${escapeHTML(imageSize.mimeType)}\"\n />\n `\n }\n\n pictureHTML += `\n <img\n alt=\"${alt}\"\n height=\"${escapeHTML(String(uploadDoc.height ?? ''))}\"\n src=\"${url}\"\n width=\"${escapeHTML(String(uploadDoc.width ?? ''))}\"\n />\n `\n\n return `<picture${providedStyleTag}>${pictureHTML}</picture>`\n },\n}\n"],"mappings":"AAEA,OAAOA,UAAA,MAAgB;AAMvB,OAAO,MAAMC,mBAAA,GAA4D;EACvEC,MAAA,EAAQA,CAAC;IAAEC,IAAI;IAAEC;EAAgB,CAAE;IACjC,MAAMC,UAAA,GAAaF,IAAA;IAEnB,IAAIG,SAAA,GAAiDC,SAAA;IAErD;IACA,IAAI,OAAOF,UAAA,CAAWG,KAAK,KAAK,UAAU;MACxC,OAAO;IACT,OAAO;MACLF,SAAA,GAAYD,UAAA,CAAWG,KAAK;IAC9B;IAEA,IAAI,CAACF,SAAA,EAAW;MACd,OAAO;IACT;IAEA,MAAMG,GAAA,GAAMT,UAAA,CACVG,IAAC,CAAKO,MAAM,EAAED,GAAA,IAAmBH,SAAA,EAAgCG,GAAA,IAAO;IAG1E,MAAME,GAAA,GAAMX,UAAA,CAAWM,SAAA,CAAUK,GAAG,IAAI;IAExC;IACA,IAAI,CAACL,SAAA,CAAUM,QAAQ,CAACC,UAAU,CAAC,UAAU;MAC3C,OAAO,KAAKT,gBAAA,UAA0BO,GAAA,+BAAkCX,UAAA,CAAWM,SAAA,CAAUQ,QAAQ,IAAI,SAAS;IACpH;IAEA;IACA,IAAI,CAACR,SAAA,CAAUS,QAAQ,IAAI,CAACC,MAAA,CAAOC,IAAI,CAACX,SAAA,CAAUS,QAAQ,EAAEG,MAAM,EAAE;MAClE,OAAO;cACCd,gBAAA;iBACGK,GAAA;oBACGT,UAAA,CAAWmB,MAAA,CAAOb,SAAA,CAAUc,MAAM,IAAI;iBACzCT,GAAA;mBACEX,UAAA,CAAWmB,MAAA,CAAOb,SAAA,CAAUe,KAAK,IAAI;;OAEjD;IACH;IAEA;IACA,IAAIC,WAAA,GAAc;IAElB,KAAK,MAAMC,IAAA,IAAQjB,SAAA,CAAUS,QAAQ,EAAE;MACrC,MAAMS,SAAA,GAAYlB,SAAA,CAAUS,QAAQ,CAACQ,IAAA,CAAK;MAE1C,IACE,CAACC,SAAA,IACD,CAACA,SAAA,CAAUH,KAAK,IAChB,CAACG,SAAA,CAAUJ,MAAM,IACjB,CAACI,SAAA,CAAUZ,QAAQ,IACnB,CAACY,SAAA,CAAUC,QAAQ,IACnB,CAACD,SAAA,CAAUV,QAAQ,IACnB,CAACU,SAAA,CAAUb,GAAG,EACd;QACA;MACF;MAEAW,WAAA,IAAe;;+BAEUtB,UAAA,CAAWmB,MAAA,CAAOK,SAAA,CAAUH,KAAK;oBAC5CrB,UAAA,CAAWwB,SAAA,CAAUb,GAAG;kBAC1BX,UAAA,CAAWwB,SAAA,CAAUZ,QAAQ;;OAExC;IACH;IAEAU,WAAA,IAAe;;eAEJb,GAAA;kBACGT,UAAA,CAAWmB,MAAA,CAAOb,SAAA,CAAUc,MAAM,IAAI;eACzCT,GAAA;iBACEX,UAAA,CAAWmB,MAAA,CAAOb,SAAA,CAAUe,KAAK,IAAI;;KAEjD;IAED,OAAO,WAAWjB,gBAAA,IAAoBkB,WAAA,YAAuB;EAC/D;AACF","ignoreList":[]}
1
+ {"version":3,"file":"upload.js","names":["escapeHTML","sanitizeUrl","UploadHTMLConverter","upload","node","providedStyleTag","uploadNode","uploadDoc","undefined","value","alt","fields","url","mimeType","startsWith","filename","variants","Object","keys","length","String","height","width","pictureHTML","size","imageSize","filesize"],"sources":["../../../../../../src/features/converters/lexicalToHtml/sync/converters/upload.ts"],"sourcesContent":["import type { FileData, FileSize, TypeWithID } from 'payload'\n\nimport escapeHTML from 'escape-html'\nimport { sanitizeUrl } from 'payload/shared'\n\nimport type { SerializedUploadNode } from '../../../../../types/nodeTypes.js'\nimport type { UploadData } from '../../../../upload/server/schema.js'\nimport type { HTMLConverters } from '../types.js'\n\nexport const UploadHTMLConverter: HTMLConverters<SerializedUploadNode> = {\n upload: ({ node, providedStyleTag }) => {\n const uploadNode = node as UploadData\n\n let uploadDoc: (FileData & TypeWithID) | undefined = undefined\n\n // If there's no valid upload data, populate return an empty string\n if (typeof uploadNode.value !== 'object') {\n return ''\n } else {\n uploadDoc = uploadNode.value as unknown as FileData & TypeWithID\n }\n\n if (!uploadDoc) {\n return ''\n }\n\n const alt = escapeHTML(\n (node.fields?.alt as string) || (uploadDoc as { alt?: string })?.alt || '',\n )\n\n const url = escapeHTML(sanitizeUrl(uploadDoc.url ?? ''))\n\n // 1) If upload is NOT an image, return a link\n if (!uploadDoc.mimeType.startsWith('image')) {\n return `<a${providedStyleTag} href=\"${url}\" rel=\"noopener noreferrer\">${escapeHTML(uploadDoc.filename ?? '')}</a>`\n }\n\n // 2) If image has no different sizes, return a simple <img />\n if (!uploadDoc.variants || !Object.keys(uploadDoc.variants).length) {\n return `\n <img${providedStyleTag}\n alt=\"${alt}\"\n height=\"${escapeHTML(String(uploadDoc.height ?? ''))}\"\n src=\"${url}\"\n width=\"${escapeHTML(String(uploadDoc.width ?? ''))}\"\n />\n `\n }\n\n // 3) If image has different sizes, build a <picture> element with <source> tags\n let pictureHTML = ''\n\n for (const size in uploadDoc.variants) {\n const imageSize = uploadDoc.variants[size] as FileSize\n\n if (\n !imageSize ||\n !imageSize.width ||\n !imageSize.height ||\n !imageSize.mimeType ||\n !imageSize.filesize ||\n !imageSize.filename ||\n !imageSize.url\n ) {\n continue\n }\n\n pictureHTML += `\n <source\n media=\"(max-width: ${escapeHTML(String(imageSize.width))}px)\"\n srcset=\"${escapeHTML(imageSize.url)}\"\n type=\"${escapeHTML(imageSize.mimeType)}\"\n />\n `\n }\n\n pictureHTML += `\n <img\n alt=\"${alt}\"\n height=\"${escapeHTML(String(uploadDoc.height ?? ''))}\"\n src=\"${url}\"\n width=\"${escapeHTML(String(uploadDoc.width ?? ''))}\"\n />\n `\n\n return `<picture${providedStyleTag}>${pictureHTML}</picture>`\n },\n}\n"],"mappings":"AAEA,OAAOA,UAAA,MAAgB;AACvB,SAASC,WAAW,QAAQ;AAM5B,OAAO,MAAMC,mBAAA,GAA4D;EACvEC,MAAA,EAAQA,CAAC;IAAEC,IAAI;IAAEC;EAAgB,CAAE;IACjC,MAAMC,UAAA,GAAaF,IAAA;IAEnB,IAAIG,SAAA,GAAiDC,SAAA;IAErD;IACA,IAAI,OAAOF,UAAA,CAAWG,KAAK,KAAK,UAAU;MACxC,OAAO;IACT,OAAO;MACLF,SAAA,GAAYD,UAAA,CAAWG,KAAK;IAC9B;IAEA,IAAI,CAACF,SAAA,EAAW;MACd,OAAO;IACT;IAEA,MAAMG,GAAA,GAAMV,UAAA,CACVI,IAAC,CAAKO,MAAM,EAAED,GAAA,IAAmBH,SAAA,EAAgCG,GAAA,IAAO;IAG1E,MAAME,GAAA,GAAMZ,UAAA,CAAWC,WAAA,CAAYM,SAAA,CAAUK,GAAG,IAAI;IAEpD;IACA,IAAI,CAACL,SAAA,CAAUM,QAAQ,CAACC,UAAU,CAAC,UAAU;MAC3C,OAAO,KAAKT,gBAAA,UAA0BO,GAAA,+BAAkCZ,UAAA,CAAWO,SAAA,CAAUQ,QAAQ,IAAI,SAAS;IACpH;IAEA;IACA,IAAI,CAACR,SAAA,CAAUS,QAAQ,IAAI,CAACC,MAAA,CAAOC,IAAI,CAACX,SAAA,CAAUS,QAAQ,EAAEG,MAAM,EAAE;MAClE,OAAO;cACCd,gBAAA;iBACGK,GAAA;oBACGV,UAAA,CAAWoB,MAAA,CAAOb,SAAA,CAAUc,MAAM,IAAI;iBACzCT,GAAA;mBACEZ,UAAA,CAAWoB,MAAA,CAAOb,SAAA,CAAUe,KAAK,IAAI;;OAEjD;IACH;IAEA;IACA,IAAIC,WAAA,GAAc;IAElB,KAAK,MAAMC,IAAA,IAAQjB,SAAA,CAAUS,QAAQ,EAAE;MACrC,MAAMS,SAAA,GAAYlB,SAAA,CAAUS,QAAQ,CAACQ,IAAA,CAAK;MAE1C,IACE,CAACC,SAAA,IACD,CAACA,SAAA,CAAUH,KAAK,IAChB,CAACG,SAAA,CAAUJ,MAAM,IACjB,CAACI,SAAA,CAAUZ,QAAQ,IACnB,CAACY,SAAA,CAAUC,QAAQ,IACnB,CAACD,SAAA,CAAUV,QAAQ,IACnB,CAACU,SAAA,CAAUb,GAAG,EACd;QACA;MACF;MAEAW,WAAA,IAAe;;+BAEUvB,UAAA,CAAWoB,MAAA,CAAOK,SAAA,CAAUH,KAAK;oBAC5CtB,UAAA,CAAWyB,SAAA,CAAUb,GAAG;kBAC1BZ,UAAA,CAAWyB,SAAA,CAAUZ,QAAQ;;OAExC;IACH;IAEAU,WAAA,IAAe;;eAEJb,GAAA;kBACGV,UAAA,CAAWoB,MAAA,CAAOb,SAAA,CAAUc,MAAM,IAAI;eACzCT,GAAA;iBACEZ,UAAA,CAAWoB,MAAA,CAAOb,SAAA,CAAUe,KAAK,IAAI;;KAEjD;IAED,OAAO,WAAWjB,gBAAA,IAAoBkB,WAAA,YAAuB;EAC/D;AACF","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/features/converters/lexicalToHtml/sync/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/features/converters/lexicalToHtml/sync/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","names":[],"sources":["../../../../../src/features/converters/lexicalToHtml/sync/types.ts"],"sourcesContent":["import type { SerializedLexicalNode } from 'lexical'\n\nimport type {\n DefaultNodeTypes,\n SerializedBlockNode,\n SerializedInlineBlockNode,\n} from '../../../../types/nodeTypes.js'\nimport type { SerializedLexicalNodeWithParent } from '../shared/types.js'\n\nexport type HTMLConverter<T extends { [key: string]: any; type?: string } = SerializedLexicalNode> =\n\n | ((args: {\n childIndex: number\n converters: HTMLConverters\n node: T\n nodesToHTML: (args: {\n converters?: HTMLConverters\n disableIndent?: boolean | string[]\n disableTextAlign?: boolean | string[]\n nodes: SerializedLexicalNode[]\n parent?: SerializedLexicalNodeWithParent\n }) => string[]\n parent: SerializedLexicalNodeWithParent\n providedCSSString: string\n providedStyleTag: string\n }) => string)\n | string\n\nexport type HTMLConverters<\n T extends { [key: string]: any; type?: string } =\n | DefaultNodeTypes\n | SerializedBlockNode<{ blockName?: null | string; blockType: string }> // need these to ensure types for blocks and inlineBlocks work if no generics are provided\n | SerializedInlineBlockNode<{ blockName?: null | string; blockType: string }>, // need these to ensure types for blocks and inlineBlocks work if no generics are provided\n> = {\n [key: string]:\n | {\n [blockSlug: string]: HTMLConverter<any>\n }\n | HTMLConverter<any>\n | undefined\n} & {\n [nodeType in Exclude<NonNullable<T['type']>, 'block' | 'inlineBlock'>]?: HTMLConverter<\n Extract<T, { type: nodeType }>\n >\n} & {\n blocks?: {\n [K in Extract<T, { type: 'block' }>['fields']['blockType']]?: HTMLConverter<\n Extract<T, { fields: { blockType: K }; type: 'block' }>\n >\n }\n inlineBlocks?: {\n [K in Extract<T, { type: 'inlineBlock' }>['fields']['blockType']]?: HTMLConverter<\n Extract<T, { fields: { blockType: K }; type: 'inlineBlock' }>\n >\n }\n unknown?: HTMLConverter<SerializedLexicalNode>\n}\n\nexport type HTMLConvertersFunction<\n T extends { [key: string]: any; type?: string } =\n | DefaultNodeTypes\n | SerializedBlockNode<{ blockName?: null | string; blockType: string }>\n | SerializedInlineBlockNode<{ blockName?: null | string; blockType: string }>,\n> = (args: { defaultConverters: HTMLConverters<T> }) => HTMLConverters<T>\n"],"mappings":"AA0DA","ignoreList":[]}
1
+ {"version":3,"file":"types.js","names":[],"sources":["../../../../../src/features/converters/lexicalToHtml/sync/types.ts"],"sourcesContent":["import type { SerializedLexicalNode } from 'lexical'\n\nimport type {\n DefaultNodeTypes,\n SerializedBlockNode,\n SerializedInlineBlockNode,\n} from '../../../../types/nodeTypes.js'\nimport type { SerializedLexicalNodeWithParent } from '../shared/types.js'\n\nexport type HTMLConverter<\n T extends { [key: string]: any; type?: string } = SerializedLexicalNode,\n> =\n | ((args: {\n childIndex: number\n converters: HTMLConverters\n node: T\n nodesToHTML: (args: {\n converters?: HTMLConverters\n disableIndent?: boolean | string[]\n disableTextAlign?: boolean | string[]\n nodes: SerializedLexicalNode[]\n parent?: SerializedLexicalNodeWithParent\n }) => string[]\n parent: SerializedLexicalNodeWithParent\n providedCSSString: string\n providedStyleTag: string\n }) => string)\n | string\n\nexport type HTMLConverters<\n T extends { [key: string]: any; type?: string } =\n | DefaultNodeTypes\n | SerializedBlockNode<{ blockName?: null | string; blockType: string }> // need these to ensure types for blocks and inlineBlocks work if no generics are provided\n | SerializedInlineBlockNode<{ blockName?: null | string; blockType: string }>, // need these to ensure types for blocks and inlineBlocks work if no generics are provided\n> = {\n [key: string]:\n | {\n [blockSlug: string]: HTMLConverter<any>\n }\n | HTMLConverter<any>\n | undefined\n} & {\n [nodeType in Exclude<NonNullable<T['type']>, 'block' | 'inlineBlock'>]?: HTMLConverter<\n Extract<T, { type: nodeType }>\n >\n} & {\n blocks?: {\n [K in Extract<T, { type: 'block' }>['fields']['blockType']]?: HTMLConverter<\n Extract<T, { fields: { blockType: K }; type: 'block' }>\n >\n }\n inlineBlocks?: {\n [K in Extract<T, { type: 'inlineBlock' }>['fields']['blockType']]?: HTMLConverter<\n Extract<T, { fields: { blockType: K }; type: 'inlineBlock' }>\n >\n }\n unknown?: HTMLConverter<SerializedLexicalNode>\n}\n\nexport type HTMLConvertersFunction<\n T extends { [key: string]: any; type?: string } =\n | DefaultNodeTypes\n | SerializedBlockNode<{ blockName?: null | string; blockType: string }>\n | SerializedInlineBlockNode<{ blockName?: null | string; blockType: string }>,\n> = (args: { defaultConverters: HTMLConverters<T> }) => HTMLConverters<T>\n"],"mappings":"AA2DA","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"table.d.ts","sourceRoot":"","sources":["../../../../../../src/features/converters/lexicalToJSX/converter/converters/table.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,uBAAuB,EACvB,mBAAmB,EACnB,sBAAsB,EACvB,MAAM,mCAAmC,CAAA;AAC1C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAEhD,eAAO,MAAM,iBAAiB,EAAE,aAAa,CAC3C,uBAAuB,GAAG,mBAAmB,GAAG,sBAAsB,CAgDvE,CAAA"}
1
+ {"version":3,"file":"table.d.ts","sourceRoot":"","sources":["../../../../../../src/features/converters/lexicalToJSX/converter/converters/table.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,uBAAuB,EACvB,mBAAmB,EACnB,sBAAsB,EACvB,MAAM,mCAAmC,CAAA;AAC1C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAEhD,eAAO,MAAM,iBAAiB,EAAE,aAAa,CAC3C,uBAAuB,GAAG,mBAAmB,GAAG,sBAAsB,CAiDvE,CAAA"}
@@ -27,9 +27,10 @@ export const TableJSXConverter = {
27
27
  const children = nodesToJSX({
28
28
  nodes: node.children
29
29
  });
30
- const TagName = node.headerState > 0 ? 'th' : 'td' // Use capital letter to denote a component
30
+ const headerState = typeof node.headerState === 'number' ? node.headerState : 0;
31
+ const TagName = headerState > 0 ? 'th' : 'td' // Use capital letter to denote a component
31
32
  ;
32
- const headerStateClass = `lexical-table-cell-header-${node.headerState}`;
33
+ const headerStateClass = `lexical-table-cell-header-${headerState}`;
33
34
  const style = {
34
35
  backgroundColor: node.backgroundColor || undefined,
35
36
  border: '1px solid #ccc',
@@ -1 +1 @@
1
- {"version":3,"file":"table.js","names":["TableJSXConverter","table","node","nodesToJSX","children","nodes","_jsx","className","style","borderCollapse","tablecell","TagName","headerState","headerStateClass","backgroundColor","undefined","border","padding","colSpan","rowSpan","tablerow"],"sources":["../../../../../../src/features/converters/lexicalToJSX/converter/converters/table.tsx"],"sourcesContent":["import type {\n SerializedTableCellNode,\n SerializedTableNode,\n SerializedTableRowNode,\n} from '../../../../../types/nodeTypes.js'\nimport type { JSXConverters } from '../types.js'\n\nexport const TableJSXConverter: JSXConverters<\n SerializedTableCellNode | SerializedTableNode | SerializedTableRowNode\n> = {\n table: ({ node, nodesToJSX }) => {\n const children = nodesToJSX({\n nodes: node.children,\n })\n return (\n <div className=\"lexical-table-container\">\n <table className=\"lexical-table\" style={{ borderCollapse: 'collapse' }}>\n <tbody>{children}</tbody>\n </table>\n </div>\n )\n },\n tablecell: ({ node, nodesToJSX }) => {\n const children = nodesToJSX({\n nodes: node.children,\n })\n\n const TagName = node.headerState > 0 ? 'th' : 'td' // Use capital letter to denote a component\n const headerStateClass = `lexical-table-cell-header-${node.headerState}`\n const style = {\n backgroundColor: node.backgroundColor || undefined, // Use undefined to avoid setting the style property if not needed\n border: '1px solid #ccc',\n padding: '8px',\n }\n\n // Note: JSX does not support setting attributes directly as strings, so you must convert the colSpan and rowSpan to numbers\n const colSpan = node.colSpan && node.colSpan > 1 ? node.colSpan : undefined\n const rowSpan = node.rowSpan && node.rowSpan > 1 ? node.rowSpan : undefined\n\n return (\n <TagName\n className={`lexical-table-cell ${headerStateClass}`}\n colSpan={colSpan} // colSpan and rowSpan will only be added if they are not null\n rowSpan={rowSpan}\n style={style}\n >\n {children}\n </TagName>\n )\n },\n tablerow: ({ node, nodesToJSX }) => {\n const children = nodesToJSX({\n nodes: node.children,\n })\n return <tr className=\"lexical-table-row\">{children}</tr>\n },\n}\n"],"mappings":";AAOA,OAAO,MAAMA,iBAAA,GAET;EACFC,KAAA,EAAOA,CAAC;IAAEC,IAAI;IAAEC;EAAU,CAAE;IAC1B,MAAMC,QAAA,GAAWD,UAAA,CAAW;MAC1BE,KAAA,EAAOH,IAAA,CAAKE;IACd;IACA,oBACEE,IAAA,CAAC;MAAIC,SAAA,EAAU;gBACb,aAAAD,IAAA,CAAC;QAAMC,SAAA,EAAU;QAAgBC,KAAA,EAAO;UAAEC,cAAA,EAAgB;QAAW;kBACnE,aAAAH,IAAA,CAAC;oBAAOF;;;;EAIhB;EACAM,SAAA,EAAWA,CAAC;IAAER,IAAI;IAAEC;EAAU,CAAE;IAC9B,MAAMC,QAAA,GAAWD,UAAA,CAAW;MAC1BE,KAAA,EAAOH,IAAA,CAAKE;IACd;IAEA,MAAMO,OAAA,GAAUT,IAAA,CAAKU,WAAW,GAAG,IAAI,OAAO,KAAK;AAAA;IACnD,MAAMC,gBAAA,GAAmB,6BAA6BX,IAAA,CAAKU,WAAW,EAAE;IACxE,MAAMJ,KAAA,GAAQ;MACZM,eAAA,EAAiBZ,IAAA,CAAKY,eAAe,IAAIC,SAAA;MACzCC,MAAA,EAAQ;MACRC,OAAA,EAAS;IACX;IAEA;IACA,MAAMC,OAAA,GAAUhB,IAAA,CAAKgB,OAAO,IAAIhB,IAAA,CAAKgB,OAAO,GAAG,IAAIhB,IAAA,CAAKgB,OAAO,GAAGH,SAAA;IAClE,MAAMI,OAAA,GAAUjB,IAAA,CAAKiB,OAAO,IAAIjB,IAAA,CAAKiB,OAAO,GAAG,IAAIjB,IAAA,CAAKiB,OAAO,GAAGJ,SAAA;IAElE,oBACET,IAAA,CAACK,OAAA;MACCJ,SAAA,EAAW,sBAAsBM,gBAAA,EAAkB;MACnDK,OAAA,EAASA,OAAA;MACTC,OAAA,EAASA,OAAA;MACTX,KAAA,EAAOA,KAAA;gBAENJ;;EAGP;EACAgB,QAAA,EAAUA,CAAC;IAAElB,IAAI;IAAEC;EAAU,CAAE;IAC7B,MAAMC,QAAA,GAAWD,UAAA,CAAW;MAC1BE,KAAA,EAAOH,IAAA,CAAKE;IACd;IACA,oBAAOE,IAAA,CAAC;MAAGC,SAAA,EAAU;gBAAqBH;;EAC5C;AACF","ignoreList":[]}
1
+ {"version":3,"file":"table.js","names":["TableJSXConverter","table","node","nodesToJSX","children","nodes","_jsx","className","style","borderCollapse","tablecell","headerState","TagName","headerStateClass","backgroundColor","undefined","border","padding","colSpan","rowSpan","tablerow"],"sources":["../../../../../../src/features/converters/lexicalToJSX/converter/converters/table.tsx"],"sourcesContent":["import type {\n SerializedTableCellNode,\n SerializedTableNode,\n SerializedTableRowNode,\n} from '../../../../../types/nodeTypes.js'\nimport type { JSXConverters } from '../types.js'\n\nexport const TableJSXConverter: JSXConverters<\n SerializedTableCellNode | SerializedTableNode | SerializedTableRowNode\n> = {\n table: ({ node, nodesToJSX }) => {\n const children = nodesToJSX({\n nodes: node.children,\n })\n return (\n <div className=\"lexical-table-container\">\n <table className=\"lexical-table\" style={{ borderCollapse: 'collapse' }}>\n <tbody>{children}</tbody>\n </table>\n </div>\n )\n },\n tablecell: ({ node, nodesToJSX }) => {\n const children = nodesToJSX({\n nodes: node.children,\n })\n\n const headerState = typeof node.headerState === 'number' ? node.headerState : 0\n const TagName = headerState > 0 ? 'th' : 'td' // Use capital letter to denote a component\n const headerStateClass = `lexical-table-cell-header-${headerState}`\n const style = {\n backgroundColor: node.backgroundColor || undefined, // Use undefined to avoid setting the style property if not needed\n border: '1px solid #ccc',\n padding: '8px',\n }\n\n // Note: JSX does not support setting attributes directly as strings, so you must convert the colSpan and rowSpan to numbers\n const colSpan = node.colSpan && node.colSpan > 1 ? node.colSpan : undefined\n const rowSpan = node.rowSpan && node.rowSpan > 1 ? node.rowSpan : undefined\n\n return (\n <TagName\n className={`lexical-table-cell ${headerStateClass}`}\n colSpan={colSpan} // colSpan and rowSpan will only be added if they are not null\n rowSpan={rowSpan}\n style={style}\n >\n {children}\n </TagName>\n )\n },\n tablerow: ({ node, nodesToJSX }) => {\n const children = nodesToJSX({\n nodes: node.children,\n })\n return <tr className=\"lexical-table-row\">{children}</tr>\n },\n}\n"],"mappings":";AAOA,OAAO,MAAMA,iBAAA,GAET;EACFC,KAAA,EAAOA,CAAC;IAAEC,IAAI;IAAEC;EAAU,CAAE;IAC1B,MAAMC,QAAA,GAAWD,UAAA,CAAW;MAC1BE,KAAA,EAAOH,IAAA,CAAKE;IACd;IACA,oBACEE,IAAA,CAAC;MAAIC,SAAA,EAAU;gBACb,aAAAD,IAAA,CAAC;QAAMC,SAAA,EAAU;QAAgBC,KAAA,EAAO;UAAEC,cAAA,EAAgB;QAAW;kBACnE,aAAAH,IAAA,CAAC;oBAAOF;;;;EAIhB;EACAM,SAAA,EAAWA,CAAC;IAAER,IAAI;IAAEC;EAAU,CAAE;IAC9B,MAAMC,QAAA,GAAWD,UAAA,CAAW;MAC1BE,KAAA,EAAOH,IAAA,CAAKE;IACd;IAEA,MAAMO,WAAA,GAAc,OAAOT,IAAA,CAAKS,WAAW,KAAK,WAAWT,IAAA,CAAKS,WAAW,GAAG;IAC9E,MAAMC,OAAA,GAAUD,WAAA,GAAc,IAAI,OAAO,KAAK;AAAA;IAC9C,MAAME,gBAAA,GAAmB,6BAA6BF,WAAA,EAAa;IACnE,MAAMH,KAAA,GAAQ;MACZM,eAAA,EAAiBZ,IAAA,CAAKY,eAAe,IAAIC,SAAA;MACzCC,MAAA,EAAQ;MACRC,OAAA,EAAS;IACX;IAEA;IACA,MAAMC,OAAA,GAAUhB,IAAA,CAAKgB,OAAO,IAAIhB,IAAA,CAAKgB,OAAO,GAAG,IAAIhB,IAAA,CAAKgB,OAAO,GAAGH,SAAA;IAClE,MAAMI,OAAA,GAAUjB,IAAA,CAAKiB,OAAO,IAAIjB,IAAA,CAAKiB,OAAO,GAAG,IAAIjB,IAAA,CAAKiB,OAAO,GAAGJ,SAAA;IAElE,oBACET,IAAA,CAACM,OAAA;MACCL,SAAA,EAAW,sBAAsBM,gBAAA,EAAkB;MACnDK,OAAA,EAASA,OAAA;MACTC,OAAA,EAASA,OAAA;MACTX,KAAA,EAAOA,KAAA;gBAENJ;;EAGP;EACAgB,QAAA,EAAUA,CAAC;IAAElB,IAAI;IAAEC;EAAU,CAAE;IAC7B,MAAMC,QAAA,GAAWD,UAAA,CAAW;MAC1BE,KAAA,EAAOH,IAAA,CAAKE;IACd;IACA,oBAAOE,IAAA,CAAC;MAAGC,SAAA,EAAU;gBAAqBH;;EAC5C;AACF","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["c","_c","useLexicalComposerContext","useEffect","useState","defaultJSXConverters","RichText","RichTextPlugin","$","editor","t0","getEditorState","toJSON","editorState","setEditorState","t1","t2","registerUpdateListener","t3","editorState_0","_jsx","className","children","converters","data"],"sources":["../../../../../../src/features/debug/jsxConverter/client/plugin/index.tsx"],"sourcesContent":["'use client'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext'\nimport { useEffect, useState } from 'react'\n\n// eslint-disable-next-line payload/no-imports-from-exports-dir\nimport { defaultJSXConverters, RichText } from '../../../../../exports/react/index.js'\nimport './style.css'\n\nexport function RichTextPlugin() {\n const [editor] = useLexicalComposerContext()\n const [editorState, setEditorState] = useState(() => editor.getEditorState().toJSON())\n\n useEffect(() => {\n return editor.registerUpdateListener(({ editorState }) => {\n setEditorState(editorState.toJSON())\n })\n }, [editor])\n\n return (\n <div className=\"debug-jsx-converter\">\n <RichText converters={defaultJSXConverters} data={editorState} />\n </div>\n )\n}\n"],"mappings":"AAAA;;AAAA,SAAAA,CAAA,IAAAC,EAAA;;AAEA,SAASC,yBAAyB,QAAQ;AAC1C,SAASC,SAAS,EAAEC,QAAQ,QAAQ;AAEpC;AACA,SAASC,oBAAoB,EAAEC,QAAQ,QAAQ;AAC/C,OAAO;AAEP,OAAO,SAAAC,eAAA;EAAA,MAAAC,CAAA,GAAAP,EAAA;EACL,OAAAQ,MAAA,IAAiBP,yBAAA;EAAA,IAAAQ,EAAA;EAAA,IAAAF,CAAA,QAAAC,MAAA;IAC8BC,EAAA,GAAAA,CAAA,KAAMD,MAAA,CAAAE,cAAA,CAAqB,EAAAC,MAAA,CAAS;IAAAJ,CAAA,MAAAC,MAAA;IAAAD,CAAA,MAAAE,EAAA;EAAA;IAAAA,EAAA,GAAAF,CAAA;EAAA;EAAnF,OAAAK,WAAA,EAAAC,cAAA,IAAsCV,QAAA,CAASM,EAAoC;EAAA,IAAAK,EAAA;EAAA,IAAAC,EAAA;EAAA,IAAAR,CAAA,QAAAC,MAAA;IAEzEM,EAAA,GAAAA,CAAA,KACDN,MAAA,CAAAQ,sBAAA,CAAAC,EAAA;MAA+B;QAAAL,WAAA,EAAAM;MAAA,IAAAD,EAAe;MACnDJ,cAAA,CAAeD,aAAA,CAAAD,MAAA,CAAkB;IAAA,CACnC;IACCI,EAAA,IAACP,MAAA;IAAOD,CAAA,MAAAC,MAAA;IAAAD,CAAA,MAAAO,EAAA;IAAAP,CAAA,MAAAQ,EAAA;EAAA;IAAAD,EAAA,GAAAP,CAAA;IAAAQ,EAAA,GAAAR,CAAA;EAAA;EAJXL,SAAA,CAAUY,EAIV,EAAGC,EAAQ;EAAA,IAAAE,EAAA;EAAA,IAAAV,CAAA,QAAAK,WAAA;IAGTK,EAAA,GAAAE,IAAA,CAAC;MAAAC,SAAA,EAAc;MAAAC,QAAA,EACbF,IAAA,CAAAd,QAAA;QAAAiB,UAAA,EAAAlB,oBAAA;QAAAmB,IAAA,EAAkDX;MAAA,C;;;;;;;SADpDK,E","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["c","_c","useLexicalComposerContext","useEffect","useState","defaultJSXConverters","RichText","RichTextPlugin","$","editor","t0","getEditorState","toJSON","editorState","setEditorState","t1","t2","registerUpdateListener","t3","editorState_0","_jsx","className","children","converters","data"],"sources":["../../../../../../src/features/debug/jsxConverter/client/plugin/index.tsx"],"sourcesContent":["'use client'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext'\nimport { useEffect, useState } from 'react'\n\n// eslint-disable-next-line payload/no-imports-from-exports-dir\nimport { defaultJSXConverters, RichText } from '../../../../../exports/react/index.js'\nimport './style.css'\n\nexport function RichTextPlugin() {\n const [editor] = useLexicalComposerContext()\n const [editorState, setEditorState] = useState(() => editor.getEditorState().toJSON())\n\n useEffect(() => {\n return editor.registerUpdateListener(({ editorState }) => {\n setEditorState(editorState.toJSON())\n })\n }, [editor])\n\n return (\n <div className=\"debug-jsx-converter\">\n <RichText converters={defaultJSXConverters} data={editorState} />\n </div>\n )\n}\n"],"mappings":"AAAA;;AAAA,SAAAA,CAAA,IAAAC,EAAA;;AAEA,SAASC,yBAAyB,QAAQ;AAC1C,SAASC,SAAS,EAAEC,QAAQ,QAAQ;AAEpC;AACA,SAASC,oBAAoB,EAAEC,QAAQ,QAAQ;AAC/C,OAAO;AAEP,OAAO,SAAAC,eAAA;EAAA,MAAAC,CAAA,GAAAP,EAAA;EACL,OAAAQ,MAAA,IAAiBP,yBAAA;EAAA,IAAAQ,EAAA;EAAA,IAAAF,CAAA,QAAAC,MAAA;IAC8BC,EAAA,GAAAA,CAAA,KAAMD,MAAA,CAAAE,cAAqB,GAAAC,MAAS;IAAAJ,CAAA,MAAAC,MAAA;IAAAD,CAAA,MAAAE,EAAA;EAAA;IAAAA,EAAA,GAAAF,CAAA;EAAA;EAAnF,OAAAK,WAAA,EAAAC,cAAA,IAAsCV,QAAA,CAASM,EAAoC;EAAA,IAAAK,EAAA;EAAA,IAAAC,EAAA;EAAA,IAAAR,CAAA,QAAAC,MAAA;IAEzEM,EAAA,GAAAA,CAAA,KACDN,MAAA,CAAAQ,sBAA6B,CAACC,EAAA;MAAC;QAAAL,WAAA,EAAAM;MAAA,IAAAD,EAAe;MACnDJ,cAAA,CAAeD,aAAA,CAAAD,MAAkB;IAAA,CACnC,CACF;IAAGI,EAAA,IAACP,MAAA,CAAO;IAAAD,CAAA,MAAAC,MAAA;IAAAD,CAAA,MAAAO,EAAA;IAAAP,CAAA,MAAAQ,EAAA;EAAA;IAAAD,EAAA,GAAAP,CAAA;IAAAQ,EAAA,GAAAR,CAAA;EAAA;EAJXL,SAAA,CAAUY,EAIV,EAAGC,EAAQ;EAAA,IAAAE,EAAA;EAAA,IAAAV,CAAA,QAAAK,WAAA;IAGTK,EAAA,GAAAE,IAAA,CAAC;MAAAC,SAAA,EAAc;MAAAC,QAAA,EACbF,IAAA,CAACd,QAAA;QAAAiB,UAAA,EAAqBlB,oBAAA;QAAAmB,IAAA,EAA4BX;;;;;;;;SADpDK,E","ignoreList":[]}