@payloadcms/richtext-lexical 3.59.0-internal.8435f3c → 3.59.0-internal.cb85185

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 (163) hide show
  1. package/dist/exports/client/Field-RQHCQRLV.js +2 -0
  2. package/dist/exports/client/Field-RQHCQRLV.js.map +7 -0
  3. package/dist/exports/client/RelationshipComponent-TSIENULZ.js +2 -0
  4. package/dist/exports/client/RelationshipComponent-TSIENULZ.js.map +7 -0
  5. package/dist/exports/client/bundled.css +1 -1
  6. package/dist/exports/client/chunk-BQCXN3B4.js +2 -0
  7. package/dist/exports/client/chunk-BQCXN3B4.js.map +7 -0
  8. package/dist/exports/client/{chunk-2Y72RT72.js → chunk-TLQLXR6Q.js} +2 -2
  9. package/dist/exports/client/chunk-XNERFY6G.js +2 -0
  10. package/dist/exports/client/chunk-XNERFY6G.js.map +7 -0
  11. package/dist/exports/client/component-CYFKY3IL.js +2 -0
  12. package/dist/exports/client/component-CYFKY3IL.js.map +7 -0
  13. package/dist/exports/client/componentInline-NGTRUSGB.js +2 -0
  14. package/dist/exports/client/index.d.ts +3 -0
  15. package/dist/exports/client/index.d.ts.map +1 -1
  16. package/dist/exports/client/index.js +35 -10
  17. package/dist/exports/client/index.js.map +4 -4
  18. package/dist/features/blocks/client/component/BlockContent.d.ts +52 -27
  19. package/dist/features/blocks/client/component/BlockContent.d.ts.map +1 -1
  20. package/dist/features/blocks/client/component/BlockContent.js +48 -51
  21. package/dist/features/blocks/client/component/BlockContent.js.map +1 -1
  22. package/dist/features/blocks/client/component/components/BlockCollapsible.d.ts +2 -9
  23. package/dist/features/blocks/client/component/components/BlockCollapsible.d.ts.map +1 -1
  24. package/dist/features/blocks/client/component/components/BlockCollapsible.js +7 -25
  25. package/dist/features/blocks/client/component/components/BlockCollapsible.js.map +1 -1
  26. package/dist/features/blocks/client/component/index.d.ts.map +1 -1
  27. package/dist/features/blocks/client/component/index.js +71 -56
  28. package/dist/features/blocks/client/component/index.js.map +1 -1
  29. package/dist/features/blocks/client/componentInline/index.d.ts.map +1 -1
  30. package/dist/features/blocks/client/componentInline/index.js +13 -11
  31. package/dist/features/blocks/client/componentInline/index.js.map +1 -1
  32. package/dist/features/blocks/client/index.d.ts.map +1 -1
  33. package/dist/features/blocks/client/index.js +5 -0
  34. package/dist/features/blocks/client/index.js.map +1 -1
  35. package/dist/features/blocks/client/markdown/getLexicalToMarkdown.d.ts +6 -0
  36. package/dist/features/blocks/client/markdown/getLexicalToMarkdown.d.ts.map +1 -0
  37. package/dist/features/blocks/client/markdown/getLexicalToMarkdown.js +24 -0
  38. package/dist/features/blocks/client/markdown/getLexicalToMarkdown.js.map +1 -0
  39. package/dist/features/blocks/client/markdown/getMarkdownToLexical.d.ts +6 -0
  40. package/dist/features/blocks/client/markdown/getMarkdownToLexical.d.ts.map +1 -0
  41. package/dist/features/blocks/client/markdown/getMarkdownToLexical.js +20 -0
  42. package/dist/features/blocks/client/markdown/getMarkdownToLexical.js.map +1 -0
  43. package/dist/features/blocks/client/markdown/markdownTransformer.d.ts +12 -0
  44. package/dist/features/blocks/client/markdown/markdownTransformer.d.ts.map +1 -0
  45. package/dist/features/blocks/client/markdown/markdownTransformer.js +348 -0
  46. package/dist/features/blocks/client/markdown/markdownTransformer.js.map +1 -0
  47. package/dist/features/blocks/premade/CodeBlock/Component/Block.d.ts +5 -0
  48. package/dist/features/blocks/premade/CodeBlock/Component/Block.d.ts.map +1 -0
  49. package/dist/features/blocks/premade/CodeBlock/Component/Block.js +156 -0
  50. package/dist/features/blocks/premade/CodeBlock/Component/Block.js.map +1 -0
  51. package/dist/features/blocks/premade/CodeBlock/Component/Code.d.ts +61 -0
  52. package/dist/features/blocks/premade/CodeBlock/Component/Code.d.ts.map +1 -0
  53. package/dist/features/blocks/premade/CodeBlock/Component/Code.js +99 -0
  54. package/dist/features/blocks/premade/CodeBlock/Component/Code.js.map +1 -0
  55. package/dist/features/blocks/premade/CodeBlock/Component/Collapse/index.d.ts +4 -0
  56. package/dist/features/blocks/premade/CodeBlock/Component/Collapse/index.d.ts.map +1 -0
  57. package/dist/features/blocks/premade/CodeBlock/Component/Collapse/index.js +17 -0
  58. package/dist/features/blocks/premade/CodeBlock/Component/Collapse/index.js.map +1 -0
  59. package/dist/features/blocks/premade/CodeBlock/Component/FloatingCollapse/index.d.ts +4 -0
  60. package/dist/features/blocks/premade/CodeBlock/Component/FloatingCollapse/index.d.ts.map +1 -0
  61. package/dist/features/blocks/premade/CodeBlock/Component/FloatingCollapse/index.js +26 -0
  62. package/dist/features/blocks/premade/CodeBlock/Component/FloatingCollapse/index.js.map +1 -0
  63. package/dist/features/blocks/premade/CodeBlock/converter.d.ts +7 -0
  64. package/dist/features/blocks/premade/CodeBlock/converter.d.ts.map +1 -0
  65. package/dist/features/blocks/premade/CodeBlock/converter.js +46 -0
  66. package/dist/features/blocks/premade/CodeBlock/converter.js.map +1 -0
  67. package/dist/features/blocks/premade/CodeBlock/converterClient.d.ts +2 -0
  68. package/dist/features/blocks/premade/CodeBlock/converterClient.d.ts.map +1 -0
  69. package/dist/features/blocks/premade/CodeBlock/converterClient.js +4 -0
  70. package/dist/features/blocks/premade/CodeBlock/converterClient.js.map +1 -0
  71. package/dist/features/blocks/premade/CodeBlock/index.d.ts +7 -0
  72. package/dist/features/blocks/premade/CodeBlock/index.d.ts.map +1 -0
  73. package/dist/features/blocks/premade/CodeBlock/index.js +52 -0
  74. package/dist/features/blocks/premade/CodeBlock/index.js.map +1 -0
  75. package/dist/features/blocks/server/index.js +1 -1
  76. package/dist/features/blocks/server/index.js.map +1 -1
  77. package/dist/features/blocks/server/markdown/getLexicalToMarkdown.d.ts +6 -0
  78. package/dist/features/blocks/server/markdown/getLexicalToMarkdown.d.ts.map +1 -0
  79. package/dist/features/blocks/server/markdown/getLexicalToMarkdown.js +27 -0
  80. package/dist/features/blocks/server/markdown/getLexicalToMarkdown.js.map +1 -0
  81. package/dist/features/blocks/server/markdown/getMarkdownToLexical.d.ts +7 -0
  82. package/dist/features/blocks/server/markdown/getMarkdownToLexical.d.ts.map +1 -0
  83. package/dist/features/blocks/server/markdown/getMarkdownToLexical.js +22 -0
  84. package/dist/features/blocks/server/markdown/getMarkdownToLexical.js.map +1 -0
  85. package/dist/features/blocks/server/markdown/linesFromMatchToContentAndPropsString.d.ts.map +1 -0
  86. package/dist/features/blocks/server/markdown/linesFromMatchToContentAndPropsString.js.map +1 -0
  87. package/dist/features/blocks/server/markdown/markdownTransformer.d.ts +15 -0
  88. package/dist/features/blocks/server/markdown/markdownTransformer.d.ts.map +1 -0
  89. package/dist/features/blocks/server/{markdownTransformer.js → markdown/markdownTransformer.js} +6 -48
  90. package/dist/features/blocks/server/markdown/markdownTransformer.js.map +1 -0
  91. package/dist/features/experimental_table/client/plugins/TableHoverActionsPlugin/index.d.ts.map +1 -1
  92. package/dist/features/experimental_table/client/plugins/TableHoverActionsPlugin/index.js +5 -3
  93. package/dist/features/experimental_table/client/plugins/TableHoverActionsPlugin/index.js.map +1 -1
  94. package/dist/features/link/client/plugins/floatingLinkEditor/LinkEditor/index.d.ts.map +1 -1
  95. package/dist/features/link/client/plugins/floatingLinkEditor/LinkEditor/index.js +3 -1
  96. package/dist/features/link/client/plugins/floatingLinkEditor/LinkEditor/index.js.map +1 -1
  97. package/dist/features/relationship/client/components/RelationshipComponent.d.ts.map +1 -1
  98. package/dist/features/relationship/client/components/RelationshipComponent.js +5 -9
  99. package/dist/features/relationship/client/components/RelationshipComponent.js.map +1 -1
  100. package/dist/features/toolbars/fixed/client/Toolbar/index.d.ts.map +1 -1
  101. package/dist/features/toolbars/fixed/client/Toolbar/index.js +7 -1
  102. package/dist/features/toolbars/fixed/client/Toolbar/index.js.map +1 -1
  103. package/dist/features/toolbars/inline/client/Toolbar/index.d.ts.map +1 -1
  104. package/dist/features/toolbars/inline/client/Toolbar/index.js +3 -1
  105. package/dist/features/toolbars/inline/client/Toolbar/index.js.map +1 -1
  106. package/dist/features/upload/client/component/index.d.ts.map +1 -1
  107. package/dist/features/upload/client/component/index.js +6 -5
  108. package/dist/features/upload/client/component/index.js.map +1 -1
  109. package/dist/field/RenderLexical/index.d.ts.map +1 -1
  110. package/dist/field/RenderLexical/index.js +1 -0
  111. package/dist/field/RenderLexical/index.js.map +1 -1
  112. package/dist/field/bundled.css +1 -1
  113. package/dist/field/rscEntry.d.ts.map +1 -1
  114. package/dist/field/rscEntry.js +2 -0
  115. package/dist/field/rscEntry.js.map +1 -1
  116. package/dist/index.d.ts +1 -0
  117. package/dist/index.d.ts.map +1 -1
  118. package/dist/index.js +1 -0
  119. package/dist/index.js.map +1 -1
  120. package/dist/lexical/LexicalEditor.d.ts.map +1 -1
  121. package/dist/lexical/LexicalEditor.js +10 -8
  122. package/dist/lexical/LexicalEditor.js.map +1 -1
  123. package/dist/lexical/ui/icons/CodeBlock/index.d.ts.map +1 -1
  124. package/dist/lexical/ui/icons/CodeBlock/index.js +10 -15
  125. package/dist/lexical/ui/icons/CodeBlock/index.js.map +1 -1
  126. package/dist/lexical/ui/icons/Collapse/index.d.ts +3 -0
  127. package/dist/lexical/ui/icons/Collapse/index.d.ts.map +1 -0
  128. package/dist/lexical/ui/icons/Collapse/index.js +18 -0
  129. package/dist/lexical/ui/icons/Collapse/index.js.map +1 -0
  130. package/dist/utilities/buildInitialState.d.ts +1 -0
  131. package/dist/utilities/buildInitialState.d.ts.map +1 -1
  132. package/dist/utilities/buildInitialState.js +1 -0
  133. package/dist/utilities/buildInitialState.js.map +1 -1
  134. package/dist/utilities/fieldsDrawer/DrawerContent.d.ts.map +1 -1
  135. package/dist/utilities/fieldsDrawer/DrawerContent.js +7 -3
  136. package/dist/utilities/fieldsDrawer/DrawerContent.js.map +1 -1
  137. package/dist/utilities/jsx/collectTopLevelJSXInLines.js +2 -2
  138. package/dist/utilities/jsx/collectTopLevelJSXInLines.js.map +1 -1
  139. package/package.json +6 -6
  140. package/dist/exports/client/Field-EHRBYNHO.js +0 -2
  141. package/dist/exports/client/Field-EHRBYNHO.js.map +0 -7
  142. package/dist/exports/client/RelationshipComponent-APF3CN47.js +0 -2
  143. package/dist/exports/client/RelationshipComponent-APF3CN47.js.map +0 -7
  144. package/dist/exports/client/chunk-3BY5IZJD.js +0 -2
  145. package/dist/exports/client/chunk-3BY5IZJD.js.map +0 -7
  146. package/dist/exports/client/chunk-CYLMY5ZJ.js +0 -2
  147. package/dist/exports/client/chunk-CYLMY5ZJ.js.map +0 -7
  148. package/dist/exports/client/component-VDJI45F2.js +0 -2
  149. package/dist/exports/client/component-VDJI45F2.js.map +0 -7
  150. package/dist/exports/client/componentInline-7TPI7ZBC.js +0 -2
  151. package/dist/features/blocks/client/markdownTransformer.d.ts +0 -17
  152. package/dist/features/blocks/client/markdownTransformer.d.ts.map +0 -1
  153. package/dist/features/blocks/client/markdownTransformer.js +0 -144
  154. package/dist/features/blocks/client/markdownTransformer.js.map +0 -1
  155. package/dist/features/blocks/server/linesFromMatchToContentAndPropsString.d.ts.map +0 -1
  156. package/dist/features/blocks/server/linesFromMatchToContentAndPropsString.js.map +0 -1
  157. package/dist/features/blocks/server/markdownTransformer.d.ts +0 -22
  158. package/dist/features/blocks/server/markdownTransformer.d.ts.map +0 -1
  159. package/dist/features/blocks/server/markdownTransformer.js.map +0 -1
  160. /package/dist/exports/client/{chunk-2Y72RT72.js.map → chunk-TLQLXR6Q.js.map} +0 -0
  161. /package/dist/exports/client/{componentInline-7TPI7ZBC.js.map → componentInline-NGTRUSGB.js.map} +0 -0
  162. /package/dist/features/blocks/server/{linesFromMatchToContentAndPropsString.d.ts → markdown/linesFromMatchToContentAndPropsString.d.ts} +0 -0
  163. /package/dist/features/blocks/server/{linesFromMatchToContentAndPropsString.js → markdown/linesFromMatchToContentAndPropsString.js} +0 -0
@@ -0,0 +1,20 @@
1
+ import { createHeadlessEditor } from '@lexical/headless';
2
+ import { $convertFromMarkdownString } from '../../../../packages/@lexical/markdown/index.js';
3
+ export function getMarkdownToLexical(allNodes, allTransformers) {
4
+ const markdownToLexical = ({
5
+ markdown
6
+ }) => {
7
+ const headlessEditor = createHeadlessEditor({
8
+ nodes: allNodes
9
+ });
10
+ headlessEditor.update(() => {
11
+ $convertFromMarkdownString(markdown, allTransformers);
12
+ }, {
13
+ discrete: true
14
+ });
15
+ const editorJSON = headlessEditor.getEditorState().toJSON();
16
+ return editorJSON;
17
+ };
18
+ return markdownToLexical;
19
+ }
20
+ //# sourceMappingURL=getMarkdownToLexical.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getMarkdownToLexical.js","names":["createHeadlessEditor","$convertFromMarkdownString","getMarkdownToLexical","allNodes","allTransformers","markdownToLexical","markdown","headlessEditor","nodes","update","discrete","editorJSON","getEditorState","toJSON"],"sources":["../../../../../src/features/blocks/client/markdown/getMarkdownToLexical.ts"],"sourcesContent":["import type { Klass, LexicalNode, LexicalNodeReplacement, SerializedEditorState } from 'lexical'\n\nimport { createHeadlessEditor } from '@lexical/headless'\n\nimport {\n $convertFromMarkdownString,\n type Transformer,\n} from '../../../../packages/@lexical/markdown/index.js'\n\nexport function getMarkdownToLexical(\n allNodes: Array<Klass<LexicalNode> | LexicalNodeReplacement>,\n allTransformers: Transformer[],\n): (args: { markdown: string }) => SerializedEditorState {\n const markdownToLexical = ({ markdown }: { markdown: string }): SerializedEditorState => {\n const headlessEditor = createHeadlessEditor({\n nodes: allNodes,\n })\n\n headlessEditor.update(\n () => {\n $convertFromMarkdownString(markdown, allTransformers)\n },\n { discrete: true },\n )\n\n const editorJSON = headlessEditor.getEditorState().toJSON()\n\n return editorJSON\n }\n return markdownToLexical\n}\n"],"mappings":"AAEA,SAASA,oBAAoB,QAAQ;AAErC,SACEC,0BAA0B,QAErB;AAEP,OAAO,SAASC,qBACdC,QAA4D,EAC5DC,eAA8B;EAE9B,MAAMC,iBAAA,GAAoBA,CAAC;IAAEC;EAAQ,CAAwB;IAC3D,MAAMC,cAAA,GAAiBP,oBAAA,CAAqB;MAC1CQ,KAAA,EAAOL;IACT;IAEAI,cAAA,CAAeE,MAAM,CACnB;MACER,0BAAA,CAA2BK,QAAA,EAAUF,eAAA;IACvC,GACA;MAAEM,QAAA,EAAU;IAAK;IAGnB,MAAMC,UAAA,GAAaJ,cAAA,CAAeK,cAAc,GAAGC,MAAM;IAEzD,OAAOF,UAAA;EACT;EACA,OAAON,iBAAA;AACT","ignoreList":[]}
@@ -0,0 +1,12 @@
1
+ import type { ClientBlock } from 'payload';
2
+ import { type Klass, type LexicalNode, type LexicalNodeReplacement } from 'lexical';
3
+ import type { Transformer } from '../../../../packages/@lexical/markdown/index.js';
4
+ import type { MultilineElementTransformer, TextMatchTransformer } from '../../../../packages/@lexical/markdown/MarkdownTransformers.js';
5
+ export declare const getBlockMarkdownTransformers: ({ blocks, inlineBlocks, }: {
6
+ blocks: ClientBlock[];
7
+ inlineBlocks: ClientBlock[];
8
+ }) => ((props: {
9
+ allNodes: Array<Klass<LexicalNode> | LexicalNodeReplacement>;
10
+ allTransformers: Transformer[];
11
+ }) => MultilineElementTransformer | TextMatchTransformer)[];
12
+ //# sourceMappingURL=markdownTransformer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdownTransformer.d.ts","sourceRoot":"","sources":["../../../../../src/features/blocks/client/markdown/markdownTransformer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAE1C,OAAO,EAGL,KAAK,KAAK,EACV,KAAK,WAAW,EAChB,KAAK,sBAAsB,EAE5B,MAAM,SAAS,CAAA;AAEhB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iDAAiD,CAAA;AAClF,OAAO,KAAK,EACV,2BAA2B,EAC3B,oBAAoB,EACrB,MAAM,gEAAgE,CAAA;AAqBvE,eAAO,MAAM,4BAA4B,8BAGtC;IACD,MAAM,EAAE,WAAW,EAAE,CAAA;IACrB,YAAY,EAAE,WAAW,EAAE,CAAA;CAC5B,KAAG,CAAC,CAAC,KAAK,EAAE;IACX,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,sBAAsB,CAAC,CAAA;IAC5D,eAAe,EAAE,WAAW,EAAE,CAAA;CAC/B,KAAK,2BAA2B,GAAG,oBAAoB,CAAC,EA8BxD,CAAA"}
@@ -0,0 +1,348 @@
1
+ import { $parseSerializedNode } from 'lexical';
2
+ import { extractPropsFromJSXPropsString } from '../../../../utilities/jsx/extractPropsFromJSXPropsString.js';
3
+ import { propsToJSXString } from '../../../../utilities/jsx/jsx.js';
4
+ import { linesFromStartToContentAndPropsString } from '../../server/markdown/linesFromMatchToContentAndPropsString.js';
5
+ import { $createBlockNode, $isBlockNode, BlockNode } from '../nodes/BlocksNode.js';
6
+ import { $createInlineBlockNode, $isInlineBlockNode, InlineBlockNode } from '../nodes/InlineBlocksNode.js';
7
+ import { getLexicalToMarkdown } from './getLexicalToMarkdown.js';
8
+ import { getMarkdownToLexical } from './getMarkdownToLexical.js';
9
+ function createTagRegexes(tagName) {
10
+ const escapedTagName = tagName.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
11
+ return {
12
+ regExpEnd: new RegExp(`</(${escapedTagName})\\s*>|<${escapedTagName}[^>]*?/>`, 'i'),
13
+ regExpStart: new RegExp(`<(${escapedTagName})([^>]*?)\\s*(/?)>`, 'i')
14
+ };
15
+ }
16
+ export const getBlockMarkdownTransformers = ({
17
+ blocks,
18
+ inlineBlocks
19
+ }) => {
20
+ if (!blocks?.length && !inlineBlocks?.length) {
21
+ return [];
22
+ }
23
+ let transformers = [];
24
+ if (blocks?.length) {
25
+ for (const block of blocks) {
26
+ const transformer = getMarkdownTransformerForBlock(block, false);
27
+ if (transformer) {
28
+ transformers = transformers.concat(transformer);
29
+ }
30
+ }
31
+ }
32
+ if (inlineBlocks?.length) {
33
+ for (const block of inlineBlocks) {
34
+ const transformer = getMarkdownTransformerForBlock(block, true);
35
+ if (transformer) {
36
+ transformers = transformers.concat(transformer);
37
+ }
38
+ }
39
+ }
40
+ return transformers;
41
+ };
42
+ function getMarkdownTransformerForBlock(block, isInlineBlock) {
43
+ if (!block.jsx) {
44
+ return null;
45
+ }
46
+ const regex = createTagRegexes(block.slug);
47
+ const toReturn = [];
48
+ if (isInlineBlock) {
49
+ toReturn.push(({
50
+ allNodes,
51
+ allTransformers
52
+ }) => ({
53
+ type: 'text-match',
54
+ dependencies: [InlineBlockNode],
55
+ export: node => {
56
+ if (!$isInlineBlockNode(node)) {
57
+ return null;
58
+ }
59
+ if (node.getFields()?.blockType?.toLowerCase() !== block.slug.toLowerCase()) {
60
+ return null;
61
+ }
62
+ const nodeFields = node.getFields();
63
+ const lexicalToMarkdown = getLexicalToMarkdown(allNodes, allTransformers);
64
+ const exportResult = block.jsx.export({
65
+ fields: nodeFields,
66
+ lexicalToMarkdown
67
+ });
68
+ if (exportResult === false) {
69
+ return null;
70
+ }
71
+ if (typeof exportResult === 'string') {
72
+ return exportResult;
73
+ }
74
+ const hasProps = exportResult.props && Object.keys(exportResult.props)?.length > 0;
75
+ const props = exportResult.props ?? {};
76
+ if (exportResult?.children?.length) {
77
+ return `<${nodeFields.blockType}${hasProps ? ' ' + propsToJSXString({
78
+ props
79
+ }) : ''}>${exportResult.children}</${nodeFields.blockType}>`;
80
+ }
81
+ return `<${nodeFields.blockType}${hasProps ? ' ' + propsToJSXString({
82
+ props
83
+ }) : ''}/>`;
84
+ },
85
+ getEndIndex: (node, match) => {
86
+ const {
87
+ endlineLastCharIndex
88
+ } = linesFromStartToContentAndPropsString({
89
+ isEndOptional: false,
90
+ lines: [node.getTextContent()],
91
+ regexpEndRegex: regex.regExpEnd,
92
+ startLineIndex: 0,
93
+ startMatch: match,
94
+ trimChildren: false
95
+ });
96
+ return endlineLastCharIndex;
97
+ },
98
+ importRegExp: block.jsx?.customStartRegex ?? regex.regExpStart,
99
+ regExp: /___ignoreignoreignore___/g,
100
+ replace(node, match) {
101
+ const {
102
+ content,
103
+ propsString
104
+ } = linesFromStartToContentAndPropsString({
105
+ isEndOptional: false,
106
+ lines: [node.getTextContent()],
107
+ regexpEndRegex: regex.regExpEnd,
108
+ startLineIndex: 0,
109
+ startMatch: {
110
+ ...match,
111
+ index: 0
112
+ },
113
+ trimChildren: false
114
+ });
115
+ if (!block?.jsx?.import) {
116
+ // No multiline transformer handled this line successfully
117
+ return;
118
+ }
119
+ const markdownToLexical = getMarkdownToLexical(allNodes, allTransformers);
120
+ const blockFields = block.jsx.import({
121
+ children: content,
122
+ closeMatch: null,
123
+ htmlToLexical: null,
124
+ markdownToLexical,
125
+ openMatch: match,
126
+ props: propsString ? extractPropsFromJSXPropsString({
127
+ propsString
128
+ }) : {}
129
+ });
130
+ if (blockFields === false) {
131
+ return;
132
+ }
133
+ const inlineBlockNode = $createInlineBlockNode({
134
+ blockType: block.slug,
135
+ ...blockFields
136
+ });
137
+ node.replace(inlineBlockNode);
138
+ }
139
+ }));
140
+ return toReturn;
141
+ }
142
+ toReturn.push(({
143
+ allNodes,
144
+ allTransformers
145
+ }) => ({
146
+ dependencies: [BlockNode],
147
+ export: node => {
148
+ if (!$isBlockNode(node)) {
149
+ return null;
150
+ }
151
+ if (node.getFields()?.blockType?.toLowerCase() !== block.slug.toLowerCase()) {
152
+ return null;
153
+ }
154
+ const nodeFields = node.getFields();
155
+ const lexicalToMarkdown = getLexicalToMarkdown(allNodes, allTransformers);
156
+ const exportResult = block.jsx.export({
157
+ fields: nodeFields,
158
+ lexicalToMarkdown
159
+ });
160
+ if (exportResult === false) {
161
+ return null;
162
+ }
163
+ if (typeof exportResult === 'string') {
164
+ return exportResult;
165
+ }
166
+ const hasProps = exportResult.props && Object.keys(exportResult.props)?.length > 0;
167
+ const props = exportResult.props ?? {};
168
+ if (exportResult?.children?.length) {
169
+ const children = exportResult.children;
170
+ let sanitizedChildren = '';
171
+ // Ensure it has a leftpad of at least 2 spaces. The data is saved without those spaces, so we can just blindly add it to every child
172
+ if (children.includes('\n')) {
173
+ for (const child of children.split('\n')) {
174
+ let sanitizedChild = '';
175
+ if (!block?.jsx?.doNotTrimChildren && child !== '') {
176
+ sanitizedChild = ' ';
177
+ }
178
+ sanitizedChild += child + '\n';
179
+ sanitizedChildren += sanitizedChild;
180
+ }
181
+ } else {
182
+ sanitizedChildren = (block?.jsx?.doNotTrimChildren ? '' : ' ') + children + '\n';
183
+ }
184
+ return `<${nodeFields.blockType}${hasProps ? ' ' + propsToJSXString({
185
+ props
186
+ }) : ''}>\n${sanitizedChildren}</${nodeFields.blockType}>`;
187
+ }
188
+ return `<${nodeFields.blockType}${hasProps ? ' ' + propsToJSXString({
189
+ props
190
+ }) : ''}/>`;
191
+ },
192
+ handleImportAfterStartMatch: block.jsx?.customEndRegex ? undefined : ({
193
+ lines,
194
+ rootNode,
195
+ startLineIndex,
196
+ startMatch,
197
+ transformer
198
+ }) => {
199
+ const regexpEndRegex = typeof transformer.regExpEnd === 'object' && 'regExp' in transformer.regExpEnd ? transformer.regExpEnd.regExp : transformer.regExpEnd;
200
+ const isEndOptional = transformer.regExpEnd && typeof transformer.regExpEnd === 'object' && 'optional' in transformer.regExpEnd ? transformer.regExpEnd.optional : !transformer.regExpEnd;
201
+ const {
202
+ afterEndLine,
203
+ beforeStartLine,
204
+ content: unsanitizedContent,
205
+ endLineIndex,
206
+ propsString
207
+ } = linesFromStartToContentAndPropsString({
208
+ isEndOptional,
209
+ lines,
210
+ regexpEndRegex,
211
+ startLineIndex,
212
+ startMatch,
213
+ trimChildren: false
214
+ });
215
+ let content = '';
216
+ if (block?.jsx?.doNotTrimChildren) {
217
+ content = unsanitizedContent.endsWith('\n') ? unsanitizedContent.slice(0, -1) : unsanitizedContent;
218
+ } else {
219
+ // Ensure it has a leftpad of at least 2 spaces. The data is saved without those spaces, so we can just blindly add it to every child
220
+ if (unsanitizedContent.includes('\n')) {
221
+ const split = unsanitizedContent.split('\n');
222
+ let index = 0;
223
+ for (const child of split) {
224
+ index++;
225
+ if (child.startsWith(' ')) {
226
+ content += child.slice(2);
227
+ } else {
228
+ // If one child is misaligned, skip aligning completely, unless it's just empty
229
+ if (child === '') {
230
+ content += child;
231
+ } else {
232
+ content = unsanitizedContent.endsWith('\n') ? unsanitizedContent.slice(0, -1) : unsanitizedContent;
233
+ break;
234
+ }
235
+ }
236
+ content += index === split.length ? '' : '\n';
237
+ }
238
+ } else {
239
+ content = (!unsanitizedContent.startsWith(' ') ? unsanitizedContent : unsanitizedContent.slice(2)) + '\n';
240
+ }
241
+ }
242
+ if (!block?.jsx?.import) {
243
+ // No multiline transformer handled this line successfully
244
+ return [false, startLineIndex];
245
+ }
246
+ const markdownToLexical = getMarkdownToLexical(allNodes, allTransformers);
247
+ const blockFields = block.jsx.import({
248
+ children: content,
249
+ closeMatch: null,
250
+ htmlToLexical: null,
251
+ markdownToLexical,
252
+ openMatch: startMatch,
253
+ props: propsString ? extractPropsFromJSXPropsString({
254
+ propsString
255
+ }) : {}
256
+ });
257
+ if (blockFields === false) {
258
+ return [false, startLineIndex];
259
+ }
260
+ const node = $createBlockNode({
261
+ blockType: block.slug,
262
+ ...blockFields
263
+ });
264
+ if (node) {
265
+ // Now handle beforeStartLine and afterEndLine. If those are not empty, we need to add them as text nodes before and after the block node.
266
+ // However, those themselves can contain other markdown matches, so we need to parse them as well.
267
+ // Example where this is needed: "Hello <InlineCode>inline code</InlineCode> test."
268
+ let prevNodes = null;
269
+ let nextNodes = null;
270
+ // TODO: Might not need this prevNodes and nextNodes handling if inline nodes are handled by textmatch transformers
271
+ if (beforeStartLine?.length) {
272
+ prevNodes = markdownToLexical({
273
+ markdown: beforeStartLine
274
+ })?.root?.children ?? [];
275
+ const firstPrevNode = prevNodes?.[0];
276
+ if (firstPrevNode) {
277
+ rootNode.append($parseSerializedNode(firstPrevNode));
278
+ }
279
+ }
280
+ rootNode.append(node);
281
+ if (afterEndLine?.length) {
282
+ nextNodes = markdownToLexical({
283
+ markdown: afterEndLine
284
+ })?.root?.children;
285
+ const lastChild = rootNode.getChildren()[rootNode.getChildren().length - 1];
286
+ const children = $parseSerializedNode(nextNodes[0])?.getChildren();
287
+ if (children?.length) {
288
+ for (const child of children) {
289
+ lastChild.append(child);
290
+ }
291
+ }
292
+ }
293
+ }
294
+ return [true, endLineIndex];
295
+ },
296
+ regExpEnd: block.jsx?.customEndRegex ?? regex.regExpEnd,
297
+ regExpStart: block.jsx?.customStartRegex ?? regex.regExpStart,
298
+ // This replace is ONLY run for ``` code blocks (so any blocks with custom start and end regexes). For others, we use the special JSX handling above:
299
+ type: 'multiline-element',
300
+ replace: (rootNode, children, openMatch, closeMatch, linesInBetween) => {
301
+ if (block?.jsx?.import) {
302
+ if (!linesInBetween) {
303
+ // convert children to linesInBetween
304
+ let line = '';
305
+ if (children) {
306
+ for (const child of children) {
307
+ line += child.getTextContent();
308
+ }
309
+ }
310
+ linesInBetween = [line];
311
+ }
312
+ let childrenString = '';
313
+ if (block?.jsx?.doNotTrimChildren) {
314
+ childrenString = linesInBetween.join('\n');
315
+ } else {
316
+ childrenString = linesInBetween.join('\n').trim();
317
+ }
318
+ const propsString = openMatch[1]?.trim();
319
+ const markdownToLexical = getMarkdownToLexical(allNodes, allTransformers);
320
+ const blockFields = block.jsx.import({
321
+ children: childrenString,
322
+ closeMatch: closeMatch,
323
+ htmlToLexical: null,
324
+ markdownToLexical,
325
+ openMatch: openMatch,
326
+ props: propsString ? extractPropsFromJSXPropsString({
327
+ propsString
328
+ }) : {}
329
+ });
330
+ if (blockFields === false) {
331
+ return false;
332
+ }
333
+ const node = $createBlockNode({
334
+ blockType: block.slug,
335
+ ...blockFields
336
+ });
337
+ if (node) {
338
+ rootNode.append(node);
339
+ }
340
+ return;
341
+ }
342
+ return false // Run next transformer
343
+ ;
344
+ }
345
+ }));
346
+ return toReturn;
347
+ }
348
+ //# sourceMappingURL=markdownTransformer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdownTransformer.js","names":["$parseSerializedNode","extractPropsFromJSXPropsString","propsToJSXString","linesFromStartToContentAndPropsString","$createBlockNode","$isBlockNode","BlockNode","$createInlineBlockNode","$isInlineBlockNode","InlineBlockNode","getLexicalToMarkdown","getMarkdownToLexical","createTagRegexes","tagName","escapedTagName","replace","regExpEnd","RegExp","regExpStart","getBlockMarkdownTransformers","blocks","inlineBlocks","length","transformers","block","transformer","getMarkdownTransformerForBlock","concat","isInlineBlock","jsx","regex","slug","toReturn","push","allNodes","allTransformers","type","dependencies","export","node","getFields","blockType","toLowerCase","nodeFields","lexicalToMarkdown","exportResult","fields","hasProps","props","Object","keys","children","getEndIndex","match","endlineLastCharIndex","isEndOptional","lines","getTextContent","regexpEndRegex","startLineIndex","startMatch","trimChildren","importRegExp","customStartRegex","regExp","content","propsString","index","import","markdownToLexical","blockFields","closeMatch","htmlToLexical","openMatch","inlineBlockNode","sanitizedChildren","includes","child","split","sanitizedChild","doNotTrimChildren","handleImportAfterStartMatch","customEndRegex","undefined","rootNode","optional","afterEndLine","beforeStartLine","unsanitizedContent","endLineIndex","endsWith","slice","startsWith","prevNodes","nextNodes","markdown","root","firstPrevNode","append","lastChild","getChildren","linesInBetween","line","childrenString","join","trim"],"sources":["../../../../../src/features/blocks/client/markdown/markdownTransformer.ts"],"sourcesContent":["import type { ClientBlock } from 'payload'\n\nimport {\n $parseSerializedNode,\n type ElementNode,\n type Klass,\n type LexicalNode,\n type LexicalNodeReplacement,\n type SerializedLexicalNode,\n} from 'lexical'\n\nimport type { Transformer } from '../../../../packages/@lexical/markdown/index.js'\nimport type {\n MultilineElementTransformer,\n TextMatchTransformer,\n} from '../../../../packages/@lexical/markdown/MarkdownTransformers.js'\n\nimport { extractPropsFromJSXPropsString } from '../../../../utilities/jsx/extractPropsFromJSXPropsString.js'\nimport { propsToJSXString } from '../../../../utilities/jsx/jsx.js'\nimport { linesFromStartToContentAndPropsString } from '../../server/markdown/linesFromMatchToContentAndPropsString.js'\nimport { $createBlockNode, $isBlockNode, BlockNode } from '../nodes/BlocksNode.js'\nimport {\n $createInlineBlockNode,\n $isInlineBlockNode,\n InlineBlockNode,\n} from '../nodes/InlineBlocksNode.js'\nimport { getLexicalToMarkdown } from './getLexicalToMarkdown.js'\nimport { getMarkdownToLexical } from './getMarkdownToLexical.js'\n\nfunction createTagRegexes(tagName: string) {\n const escapedTagName = tagName.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')\n return {\n regExpEnd: new RegExp(`</(${escapedTagName})\\\\s*>|<${escapedTagName}[^>]*?/>`, 'i'),\n regExpStart: new RegExp(`<(${escapedTagName})([^>]*?)\\\\s*(/?)>`, 'i'),\n }\n}\nexport const getBlockMarkdownTransformers = ({\n blocks,\n inlineBlocks,\n}: {\n blocks: ClientBlock[]\n inlineBlocks: ClientBlock[]\n}): ((props: {\n allNodes: Array<Klass<LexicalNode> | LexicalNodeReplacement>\n allTransformers: Transformer[]\n}) => MultilineElementTransformer | TextMatchTransformer)[] => {\n if (!blocks?.length && !inlineBlocks?.length) {\n return []\n }\n let transformers: ((props: {\n allNodes: Array<Klass<LexicalNode> | LexicalNodeReplacement>\n allTransformers: Transformer[]\n }) => MultilineElementTransformer | TextMatchTransformer)[] = []\n\n if (blocks?.length) {\n for (const block of blocks) {\n const transformer = getMarkdownTransformerForBlock(block, false)\n\n if (transformer) {\n transformers = transformers.concat(transformer)\n }\n }\n }\n\n if (inlineBlocks?.length) {\n for (const block of inlineBlocks) {\n const transformer = getMarkdownTransformerForBlock(block, true)\n\n if (transformer) {\n transformers = transformers.concat(transformer)\n }\n }\n }\n\n return transformers\n}\n\nfunction getMarkdownTransformerForBlock(\n block: ClientBlock,\n isInlineBlock: boolean,\n): Array<\n (props: {\n allNodes: Array<Klass<LexicalNode> | LexicalNodeReplacement>\n allTransformers: Transformer[]\n }) => MultilineElementTransformer | TextMatchTransformer\n> | null {\n if (!block.jsx) {\n return null\n }\n const regex = createTagRegexes(block.slug)\n const toReturn: Array<\n (props: {\n allNodes: Array<Klass<LexicalNode> | LexicalNodeReplacement>\n allTransformers: Transformer[]\n }) => MultilineElementTransformer | TextMatchTransformer\n > = []\n\n if (isInlineBlock) {\n toReturn.push(({ allNodes, allTransformers }) => ({\n type: 'text-match',\n dependencies: [InlineBlockNode],\n export: (node) => {\n if (!$isInlineBlockNode(node)) {\n return null\n }\n\n if (node.getFields()?.blockType?.toLowerCase() !== block.slug.toLowerCase()) {\n return null\n }\n\n const nodeFields = node.getFields()\n const lexicalToMarkdown = getLexicalToMarkdown(allNodes, allTransformers)\n\n const exportResult = block.jsx!.export({\n fields: nodeFields,\n lexicalToMarkdown,\n })\n if (exportResult === false) {\n return null\n }\n if (typeof exportResult === 'string') {\n return exportResult\n }\n\n const hasProps = exportResult.props && Object.keys(exportResult.props)?.length > 0\n const props = exportResult.props ?? {}\n\n if (exportResult?.children?.length) {\n return `<${nodeFields.blockType}${hasProps ? ' ' + propsToJSXString({ props }) : ''}>${exportResult.children}</${nodeFields.blockType}>`\n }\n\n return `<${nodeFields.blockType}${hasProps ? ' ' + propsToJSXString({ props }) : ''}/>`\n },\n getEndIndex: (node, match) => {\n const { endlineLastCharIndex } = linesFromStartToContentAndPropsString({\n isEndOptional: false,\n lines: [node.getTextContent()],\n regexpEndRegex: regex.regExpEnd,\n startLineIndex: 0,\n startMatch: match,\n trimChildren: false,\n })\n\n return endlineLastCharIndex\n },\n importRegExp: block.jsx?.customStartRegex ?? regex.regExpStart,\n regExp: /___ignoreignoreignore___/g,\n replace(node, match) {\n const { content, propsString } = linesFromStartToContentAndPropsString({\n isEndOptional: false,\n lines: [node.getTextContent()],\n regexpEndRegex: regex.regExpEnd,\n startLineIndex: 0,\n startMatch: {\n ...match,\n index: 0,\n },\n trimChildren: false,\n })\n\n if (!block?.jsx?.import) {\n // No multiline transformer handled this line successfully\n return\n }\n\n const markdownToLexical = getMarkdownToLexical(allNodes, allTransformers)\n\n const blockFields = block.jsx.import({\n children: content,\n closeMatch: null,\n htmlToLexical: null, // TODO\n markdownToLexical,\n openMatch: match,\n props: propsString\n ? extractPropsFromJSXPropsString({\n propsString,\n })\n : {},\n })\n if (blockFields === false) {\n return\n }\n\n const inlineBlockNode = $createInlineBlockNode({\n blockType: block.slug,\n ...(blockFields as any),\n })\n\n node.replace(inlineBlockNode)\n },\n }))\n\n return toReturn\n }\n\n toReturn.push(({ allNodes, allTransformers }) => ({\n dependencies: [BlockNode],\n export: (node) => {\n if (!$isBlockNode(node)) {\n return null\n }\n\n if (node.getFields()?.blockType?.toLowerCase() !== block.slug.toLowerCase()) {\n return null\n }\n\n const nodeFields = node.getFields()\n const lexicalToMarkdown = getLexicalToMarkdown(allNodes, allTransformers)\n\n const exportResult = block.jsx!.export({\n fields: nodeFields,\n lexicalToMarkdown,\n })\n if (exportResult === false) {\n return null\n }\n if (typeof exportResult === 'string') {\n return exportResult\n }\n\n const hasProps = exportResult.props && Object.keys(exportResult.props)?.length > 0\n const props = exportResult.props ?? {}\n\n if (exportResult?.children?.length) {\n const children = exportResult.children\n let sanitizedChildren = ''\n\n // Ensure it has a leftpad of at least 2 spaces. The data is saved without those spaces, so we can just blindly add it to every child\n if (children.includes('\\n')) {\n for (const child of children.split('\\n')) {\n let sanitizedChild = ''\n if (!block?.jsx?.doNotTrimChildren && child !== '') {\n sanitizedChild = ' '\n }\n sanitizedChild += child + '\\n'\n\n sanitizedChildren += sanitizedChild\n }\n } else {\n sanitizedChildren = (block?.jsx?.doNotTrimChildren ? '' : ' ') + children + '\\n'\n }\n\n return `<${nodeFields.blockType}${hasProps ? ' ' + propsToJSXString({ props }) : ''}>\\n${sanitizedChildren}</${nodeFields.blockType}>`\n }\n\n return `<${nodeFields.blockType}${hasProps ? ' ' + propsToJSXString({ props }) : ''}/>`\n },\n handleImportAfterStartMatch: block.jsx?.customEndRegex\n ? undefined\n : ({ lines, rootNode, startLineIndex, startMatch, transformer }) => {\n const regexpEndRegex: RegExp | undefined =\n typeof transformer.regExpEnd === 'object' && 'regExp' in transformer.regExpEnd\n ? transformer.regExpEnd.regExp\n : transformer.regExpEnd\n\n const isEndOptional =\n transformer.regExpEnd &&\n typeof transformer.regExpEnd === 'object' &&\n 'optional' in transformer.regExpEnd\n ? transformer.regExpEnd.optional\n : !transformer.regExpEnd\n\n const {\n afterEndLine,\n beforeStartLine,\n content: unsanitizedContent,\n endLineIndex,\n propsString,\n } = linesFromStartToContentAndPropsString({\n isEndOptional,\n lines,\n regexpEndRegex,\n startLineIndex,\n startMatch,\n trimChildren: false,\n })\n\n let content = ''\n\n if (block?.jsx?.doNotTrimChildren) {\n content = unsanitizedContent.endsWith('\\n')\n ? unsanitizedContent.slice(0, -1)\n : unsanitizedContent\n } else {\n // Ensure it has a leftpad of at least 2 spaces. The data is saved without those spaces, so we can just blindly add it to every child\n if (unsanitizedContent.includes('\\n')) {\n const split = unsanitizedContent.split('\\n')\n let index = 0\n for (const child of split) {\n index++\n\n if (child.startsWith(' ')) {\n content += child.slice(2)\n } else {\n // If one child is misaligned, skip aligning completely, unless it's just empty\n if (child === '') {\n content += child\n } else {\n content = unsanitizedContent.endsWith('\\n')\n ? unsanitizedContent.slice(0, -1)\n : unsanitizedContent\n break\n }\n }\n\n content += index === split.length ? '' : '\\n'\n }\n } else {\n content =\n (!unsanitizedContent.startsWith(' ')\n ? unsanitizedContent\n : unsanitizedContent.slice(2)) + '\\n'\n }\n }\n\n if (!block?.jsx?.import) {\n // No multiline transformer handled this line successfully\n return [false, startLineIndex]\n }\n\n const markdownToLexical = getMarkdownToLexical(allNodes, allTransformers)\n\n const blockFields = block.jsx.import({\n children: content,\n closeMatch: null,\n htmlToLexical: null, // TODO\n markdownToLexical,\n openMatch: startMatch,\n props: propsString\n ? extractPropsFromJSXPropsString({\n propsString,\n })\n : {},\n })\n if (blockFields === false) {\n return [false, startLineIndex]\n }\n\n const node = $createBlockNode({\n blockType: block.slug,\n ...blockFields,\n } as any)\n\n if (node) {\n // Now handle beforeStartLine and afterEndLine. If those are not empty, we need to add them as text nodes before and after the block node.\n // However, those themselves can contain other markdown matches, so we need to parse them as well.\n // Example where this is needed: \"Hello <InlineCode>inline code</InlineCode> test.\"\n let prevNodes: null | SerializedLexicalNode[] = null\n let nextNodes: null | SerializedLexicalNode[] = null\n // TODO: Might not need this prevNodes and nextNodes handling if inline nodes are handled by textmatch transformers\n\n if (beforeStartLine?.length) {\n prevNodes = markdownToLexical({ markdown: beforeStartLine })?.root?.children ?? []\n\n const firstPrevNode = prevNodes?.[0]\n if (firstPrevNode) {\n rootNode.append($parseSerializedNode(firstPrevNode))\n }\n }\n\n rootNode.append(node)\n\n if (afterEndLine?.length) {\n nextNodes = markdownToLexical({ markdown: afterEndLine })?.root?.children\n const lastChild = rootNode.getChildren()[rootNode.getChildren().length - 1]\n\n const children = ($parseSerializedNode(nextNodes[0]!) as ElementNode)?.getChildren()\n if (children?.length) {\n for (const child of children) {\n ;(lastChild as ElementNode).append(child)\n }\n }\n }\n }\n\n return [true, endLineIndex]\n },\n regExpEnd: block.jsx?.customEndRegex ?? regex.regExpEnd,\n regExpStart: block.jsx?.customStartRegex ?? regex.regExpStart,\n // This replace is ONLY run for ``` code blocks (so any blocks with custom start and end regexes). For others, we use the special JSX handling above:\n type: 'multiline-element',\n replace: (rootNode, children, openMatch, closeMatch, linesInBetween) => {\n if (block?.jsx?.import) {\n if (!linesInBetween) {\n // convert children to linesInBetween\n let line = ''\n if (children) {\n for (const child of children) {\n line += child.getTextContent()\n }\n }\n\n linesInBetween = [line]\n }\n\n let childrenString = ''\n if (block?.jsx?.doNotTrimChildren) {\n childrenString = linesInBetween.join('\\n')\n } else {\n childrenString = linesInBetween.join('\\n').trim()\n }\n\n const propsString = openMatch[1]?.trim()\n\n const markdownToLexical = getMarkdownToLexical(allNodes, allTransformers)\n\n const blockFields = block.jsx.import({\n children: childrenString,\n closeMatch: closeMatch as RegExpMatchArray,\n htmlToLexical: null, // TODO\n markdownToLexical,\n openMatch: openMatch as RegExpMatchArray,\n props: propsString\n ? extractPropsFromJSXPropsString({\n propsString,\n })\n : {},\n })\n if (blockFields === false) {\n return false\n }\n\n const node = $createBlockNode({\n blockType: block.slug,\n ...blockFields,\n } as any)\n\n if (node) {\n rootNode.append(node)\n }\n\n return\n }\n return false // Run next transformer\n },\n }))\n\n return toReturn\n}\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,5 @@
1
+ import './index.scss';
2
+ import React from 'react';
3
+ import type { AdditionalCodeComponentProps } from './Code.js';
4
+ export declare const CodeBlockBlockComponent: React.FC<Required<Pick<AdditionalCodeComponentProps, 'languages'>>>;
5
+ //# sourceMappingURL=Block.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Block.d.ts","sourceRoot":"","sources":["../../../../../../src/features/blocks/premade/CodeBlock/Component/Block.tsx"],"names":[],"mappings":"AAKA,OAAO,cAAc,CAAA;AAWrB,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,WAAW,CAAA;AAQ7D,eAAO,MAAM,uBAAuB,EAAE,KAAK,CAAC,EAAE,CAC5C,QAAQ,CAAC,IAAI,CAAC,4BAA4B,EAAE,WAAW,CAAC,CAAC,CAmG1D,CAAA"}
@@ -0,0 +1,156 @@
1
+ 'use client';
2
+
3
+ import { c as _c } from "react/compiler-runtime";
4
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
5
+ import { useLexicalEditable } from '@lexical/react/useLexicalEditable';
6
+ import { ChevronIcon, CopyToClipboard, Popup, PopupList, RenderFields, useForm, useFormFields } from '@payloadcms/ui';
7
+ import React from 'react';
8
+ import { CodeBlockIcon } from '../../../../../lexical/ui/icons/CodeBlock/index.js';
9
+ import { useBlockComponentContext } from '../../../client/component/BlockContent.js';
10
+ import { Collapse } from './Collapse/index.js';
11
+ import { FloatingCollapse } from './FloatingCollapse/index.js';
12
+ const baseClass = 'payload-richtext-code-block';
13
+ export const CodeBlockBlockComponent = args => {
14
+ const $ = _c(15);
15
+ const {
16
+ languages
17
+ } = args;
18
+ const {
19
+ BlockCollapsible,
20
+ formSchema,
21
+ RemoveButton
22
+ } = useBlockComponentContext();
23
+ const {
24
+ setModified
25
+ } = useForm();
26
+ const {
27
+ codeField
28
+ } = useFormFields(_temp);
29
+ let t0;
30
+ if ($[0] !== setModified) {
31
+ t0 = t1 => {
32
+ const [fields_0, dispatch] = t1;
33
+ return {
34
+ selectedLanguageField: fields_0?.language,
35
+ setSelectedLanguage: language => {
36
+ dispatch({
37
+ type: "UPDATE",
38
+ path: "language",
39
+ value: language
40
+ });
41
+ setModified(true);
42
+ }
43
+ };
44
+ };
45
+ $[0] = setModified;
46
+ $[1] = t0;
47
+ } else {
48
+ t0 = $[1];
49
+ }
50
+ const {
51
+ selectedLanguageField,
52
+ setSelectedLanguage
53
+ } = useFormFields(t0);
54
+ const selectedLanguageLabel = languages[selectedLanguageField?.value];
55
+ const isEditable = useLexicalEditable();
56
+ const t1 = selectedLanguageField?.value;
57
+ let t2;
58
+ if ($[2] !== BlockCollapsible || $[3] !== RemoveButton || $[4] !== codeField?.value || $[5] !== formSchema || $[6] !== isEditable || $[7] !== languages || $[8] !== selectedLanguageLabel || $[9] !== setSelectedLanguage || $[10] !== t1) {
59
+ let t3;
60
+ if ($[12] !== languages || $[13] !== setSelectedLanguage) {
61
+ t3 = t4 => {
62
+ const {
63
+ close
64
+ } = t4;
65
+ return _jsx(PopupList.ButtonGroup, {
66
+ children: Object.entries(languages).map(t5 => {
67
+ const [languageCode, languageLabel] = t5;
68
+ return _jsx(PopupList.Button, {
69
+ active: false,
70
+ disabled: false,
71
+ onClick: () => {
72
+ setSelectedLanguage(languageCode);
73
+ close();
74
+ },
75
+ children: _jsx("span", {
76
+ className: `${baseClass}__language-code`,
77
+ "data-language": languageCode,
78
+ children: languageLabel
79
+ })
80
+ }, languageCode);
81
+ })
82
+ });
83
+ };
84
+ $[12] = languages;
85
+ $[13] = setSelectedLanguage;
86
+ $[14] = t3;
87
+ } else {
88
+ t3 = $[14];
89
+ }
90
+ t2 = _jsx(BlockCollapsible, {
91
+ Actions: _jsxs("div", {
92
+ className: `${baseClass}__actions`,
93
+ children: [_jsx(Popup, {
94
+ button: _jsxs("div", {
95
+ className: `${baseClass}__language-selector-button`,
96
+ "data-selected-language": t1,
97
+ children: [_jsx("span", {
98
+ children: selectedLanguageLabel
99
+ }), _jsx(ChevronIcon, {
100
+ className: `${baseClass}__chevron`
101
+ })]
102
+ }),
103
+ className: `${baseClass}__language-selector`,
104
+ disabled: !isEditable,
105
+ horizontalAlign: "right",
106
+ render: t3,
107
+ showScrollbar: true,
108
+ size: "large"
109
+ }), _jsx(CopyToClipboard, {
110
+ value: codeField?.value ?? ""
111
+ }), _jsx(Collapse, {}), isEditable && _jsx(RemoveButton, {})]
112
+ }),
113
+ className: baseClass,
114
+ collapsibleProps: {
115
+ AfterCollapsible: _jsx(FloatingCollapse, {}),
116
+ disableHeaderToggle: true,
117
+ disableToggleIndicator: true
118
+ },
119
+ Pill: _jsx("div", {
120
+ className: `${baseClass}__pill`,
121
+ children: _jsx(CodeBlockIcon, {})
122
+ }),
123
+ children: _jsx(_Fragment, {
124
+ children: _jsx(RenderFields, {
125
+ fields: formSchema,
126
+ forceRender: true,
127
+ parentIndexPath: "",
128
+ parentPath: "",
129
+ parentSchemaPath: "",
130
+ permissions: true,
131
+ readOnly: !isEditable
132
+ })
133
+ })
134
+ });
135
+ $[2] = BlockCollapsible;
136
+ $[3] = RemoveButton;
137
+ $[4] = codeField?.value;
138
+ $[5] = formSchema;
139
+ $[6] = isEditable;
140
+ $[7] = languages;
141
+ $[8] = selectedLanguageLabel;
142
+ $[9] = setSelectedLanguage;
143
+ $[10] = t1;
144
+ $[11] = t2;
145
+ } else {
146
+ t2 = $[11];
147
+ }
148
+ return t2;
149
+ };
150
+ function _temp(t0) {
151
+ const [fields] = t0;
152
+ return {
153
+ codeField: fields?.code
154
+ };
155
+ }
156
+ //# sourceMappingURL=Block.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Block.js","names":["c","_c","useLexicalEditable","ChevronIcon","CopyToClipboard","Popup","PopupList","RenderFields","useForm","useFormFields","React","CodeBlockIcon","useBlockComponentContext","Collapse","FloatingCollapse","baseClass","CodeBlockBlockComponent","args","$","languages","BlockCollapsible","formSchema","RemoveButton","setModified","codeField","_temp","t0","t1","fields_0","dispatch","selectedLanguageField","fields","language","setSelectedLanguage","type","path","value","selectedLanguageLabel","isEditable","t2","t3","t4","close","_jsx","ButtonGroup","children","Object","entries","map","t5","languageCode","languageLabel","Button","active","disabled","onClick","className","Actions","_jsxs","button","horizontalAlign","render","disableHeaderToggle","disableToggleIndicator","Pill","_Fragment","forceRender","parentIndexPath","parentPath","parentSchemaPath","permissions","readOnly","code"],"sources":["../../../../../../src/features/blocks/premade/CodeBlock/Component/Block.tsx"],"sourcesContent":["'use client'\nimport type {} from 'payload'\n\nimport { useLexicalEditable } from '@lexical/react/useLexicalEditable'\n\nimport './index.scss'\n\nimport {\n ChevronIcon,\n CopyToClipboard,\n Popup,\n PopupList,\n RenderFields,\n useForm,\n useFormFields,\n} from '@payloadcms/ui'\nimport React from 'react'\n\nimport type { AdditionalCodeComponentProps } from './Code.js'\n\nimport { CodeBlockIcon } from '../../../../../lexical/ui/icons/CodeBlock/index.js'\nimport { useBlockComponentContext } from '../../../client/component/BlockContent.js'\nimport { Collapse } from './Collapse/index.js'\nimport { FloatingCollapse } from './FloatingCollapse/index.js'\n\nconst baseClass = 'payload-richtext-code-block'\nexport const CodeBlockBlockComponent: React.FC<\n Required<Pick<AdditionalCodeComponentProps, 'languages'>>\n> = (args) => {\n const { languages } = args\n const { BlockCollapsible, formSchema, RemoveButton } = useBlockComponentContext()\n const { setModified } = useForm()\n\n const { codeField } = useFormFields(([fields]) => ({\n codeField: fields?.code,\n }))\n\n const { selectedLanguageField, setSelectedLanguage } = useFormFields(([fields, dispatch]) => ({\n selectedLanguageField: fields?.language,\n setSelectedLanguage: (language: string) => {\n dispatch({\n type: 'UPDATE',\n path: 'language',\n value: language,\n })\n setModified(true)\n },\n }))\n\n const selectedLanguageLabel = languages[selectedLanguageField?.value as keyof typeof languages]\n\n const isEditable = useLexicalEditable()\n\n return (\n <BlockCollapsible\n Actions={\n <div className={`${baseClass}__actions`}>\n <Popup\n button={\n <div\n className={`${baseClass}__language-selector-button`}\n data-selected-language={selectedLanguageField?.value}\n >\n <span>{selectedLanguageLabel}</span>\n <ChevronIcon className={`${baseClass}__chevron`} />\n </div>\n }\n className={`${baseClass}__language-selector`}\n disabled={!isEditable}\n horizontalAlign=\"right\"\n render={({ close }) => (\n <PopupList.ButtonGroup>\n {Object.entries(languages).map(([languageCode, languageLabel]) => {\n return (\n <PopupList.Button\n active={false}\n disabled={false}\n key={languageCode}\n onClick={() => {\n setSelectedLanguage(languageCode)\n close()\n }}\n >\n <span className={`${baseClass}__language-code`} data-language={languageCode}>\n {languageLabel}\n </span>\n </PopupList.Button>\n )\n })}\n </PopupList.ButtonGroup>\n )}\n showScrollbar\n size=\"large\"\n />\n <CopyToClipboard value={(codeField?.value as string) ?? ''} />\n\n <Collapse />\n\n {isEditable && <RemoveButton />}\n </div>\n }\n className={baseClass}\n collapsibleProps={{\n AfterCollapsible: <FloatingCollapse />,\n disableHeaderToggle: true,\n disableToggleIndicator: true,\n }}\n Pill={\n <div className={`${baseClass}__pill`}>\n <CodeBlockIcon />\n </div>\n }\n >\n <>\n <RenderFields\n fields={formSchema}\n forceRender={true}\n parentIndexPath=\"\"\n parentPath={''}\n parentSchemaPath=\"\"\n permissions={true}\n readOnly={!isEditable}\n />\n </>\n </BlockCollapsible>\n )\n}\n"],"mappings":"AAAA;;AAAA,SAAAA,CAAA,IAAAC,EAAA;;AAGA,SAASC,kBAAkB,QAAQ;AAInC,SACEC,WAAW,EACXC,eAAe,EACfC,KAAK,EACLC,SAAS,EACTC,YAAY,EACZC,OAAO,EACPC,aAAa,QACR;AACP,OAAOC,KAAA,MAAW;AAIlB,SAASC,aAAa,QAAQ;AAC9B,SAASC,wBAAwB,QAAQ;AACzC,SAASC,QAAQ,QAAQ;AACzB,SAASC,gBAAgB,QAAQ;AAEjC,MAAMC,SAAA,GAAY;AAClB,OAAO,MAAMC,uBAAA,GAETC,IAAA;EAAA,MAAAC,CAAA,GAAAjB,EAAA;EACF;IAAAkB;EAAA,IAAsBF,IAAA;EACtB;IAAAG,gBAAA;IAAAC,UAAA;IAAAC;EAAA,IAAuDV,wBAAA;EACvD;IAAAW;EAAA,IAAwBf,OAAA;EAExB;IAAAgB;EAAA,IAAsBf,aAAA,CAAAgB,KAEtB;EAAA,IAAAC,EAAA;EAAA,IAAAR,CAAA,QAAAK,WAAA;IAEqEG,EAAA,GAAAC,EAAA;MAAC,OAAAC,QAAA,EAAAC,QAAA,IAAAF,EAAkB;MAAA;QAAAG,qBAAA,EAC/DC,QAAA,EAAAC,QAAA;QAAAC,mBAAA,EAAAD,QAAA;UAErBH,QAAA;YAAAK,IAAA,EACQ;YAAAC,IAAA,EACA;YAAAC,KAAA,EACCJ;UAAA,CACT;UACAT,WAAA,KAAY;QAAA;MAAA;IAAA;IAEhBL,CAAA,MAAAK,WAAA;IAAAL,CAAA,MAAAQ,EAAA;EAAA;IAAAA,EAAA,GAAAR,CAAA;EAAA;EAVA;IAAAY,qBAAA;IAAAG;EAAA,IAAuDxB,aAAA,CAAciB,EAUrE;EAEA,MAAAW,qBAAA,GAA8BlB,SAAS,CAACW,qBAAA,EAAAM,KAAA;EAExC,MAAAE,UAAA,GAAmBpC,kBAAA;EAUmB,MAAAyB,EAAA,GAAAG,qBAAA,EAAAM,KAAA;EAAuB,IAAAG,EAAA;EAAA,IAAArB,CAAA,QAAAE,gBAAA,IAAAF,CAAA,QAAAI,YAAA,IAAAJ,CAAA,QAAAM,SAAA,EAAAY,KAAA,IAAAlB,CAAA,QAAAG,UAAA,IAAAH,CAAA,QAAAoB,UAAA,IAAApB,CAAA,QAAAC,SAAA,IAAAD,CAAA,QAAAmB,qBAAA,IAAAnB,CAAA,QAAAe,mBAAA,IAAAf,CAAA,SAAAS,EAAA;IAAA,IAAAa,EAAA;IAAA,IAAAtB,CAAA,SAAAC,SAAA,IAAAD,CAAA,SAAAe,mBAAA;MAS3CO,EAAA,GAAAC,EAAA;QAAC;UAAAC;QAAA,IAAAD,EAAS;QAAA,OAChBE,IAAA,CAAArC,SAAA,CAAAsC,WAAA;UAAAC,QAAA,EACGC,MAAA,CAAAC,OAAA,CAAe5B,SAAA,EAAA6B,GAAA,CAAAC,EAAA;YAAgB,OAAAC,YAAA,EAAAC,aAAA,IAAAF,EAA6B;YAAA,OAEzDN,IAAA,CAAArC,SAAA,CAAA8C,MAAA;cAAAC,MAAA;cAAAC,QAAA;cAAAC,OAAA,EAAAA,CAAA;gBAKItB,mBAAA,CAAoBiB,YAAA;gBACpBR,KAAA;cAAA;cAAAG,QAAA,EAGFF,IAAA,CAAC;gBAAAa,SAAA,EAAgB,GAAAzC,SAAA,iBAA6B;gBAAA,iBAAiBmC,YAAA;gBAAAL,QAAA,EAC5DM;cAAA,C;eAPED,YAAA;UAAA,CAWX;QAAA,C;;;;;;;;IAlCZX,EAAA,GAAAI,IAAA,CAACvB,gBAAA;MAAAqC,OAAA,EAEGC,KAAA,CAAC;QAAAF,SAAA,EAAe,GAAAzC,SAAA,WAAuB;QAAA8B,QAAA,GACrCF,IAAA,CAAAtC,KAAA;UAAAsD,MAAA,EAEID,KAAA,CAAC;YAAAF,SAAA,EACY,GAAAzC,SAAA,4BAAwC;YAAA,0BAC3BY,EAAuB;YAAAkB,QAAA,GAE/CF,IAAA,CAAC;cAAAE,QAAA,EAAMR;YAAA,C,GACPM,IAAA,CAAAxC,WAAA;cAAAqD,SAAA,EAAwB,GAAAzC,SAAA;YAAuB,C;;qBAGxC,GAAAA,SAAA,qBAAiC;UAAAuC,QAAA,GACjChB,UAAA;UAAAsB,eAAA,EACK;UAAAC,MAAA,EACRrB,E;;gBAsBH;QAAA,C,GAEPG,IAAA,CAAAvC,eAAA;UAAAgC,KAAA,EAAwBZ,SAAC,EAAAY,KAAA,IAA+B;QAAA,C,GAExDO,IAAA,CAAA9B,QAAA,IAAC,GAEAyB,UAAA,IAAcK,IAAA,CAACrB,YAAA;MAAA,C;;;0BAKAqB,IAAA,CAAA7B,gBAAA,IAAC;QAAAgD,mBAAA;QAAAC,sBAAA;MAAA;MAAAC,IAAA,EAKnBrB,IAAA,CAAC;QAAAa,SAAA,EAAe,GAAAzC,SAAA,QAAoB;QAAA8B,QAAA,EAClCF,IAAA,CAAAhC,aAAA,IAAC;MAAA,C;gBAILgC,IAAA,CAAAsB,SAAA;QAAApB,QAAA,EACEF,IAAA,CAAApC,YAAA;UAAAwB,MAAA,EACUV,UAAA;UAAA6C,WAAA;UAAAC,eAAA,EAEQ;UAAAC,UAAA,EACJ;UAAAC,gBAAA,EACK;UAAAC,WAAA;UAAAC,QAAA,GAENjC;QAAA,C;;;;;;;;;;;;;;;;SAnEjBC,E;CAwEJ;AAlGI,SAAAd,MAAAC,EAAA;EAKmC,OAAAK,MAAA,IAAAL,EAAQ;EAAA;IAAAF,SAAA,EAChCO,MAAA,EAAAyC;EAAA;AAAA","ignoreList":[]}