@payloadcms/richtext-lexical 3.57.0-internal.266049e → 3.57.0-internal.2988185
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.
- package/dist/exports/client/{Field-BJACUMFU.js → Field-PKJPWZJL.js} +2 -2
- package/dist/exports/client/Field-PKJPWZJL.js.map +7 -0
- package/dist/exports/client/bundled.css +1 -1
- package/dist/exports/client/{chunk-SEPPJCZ6.js → chunk-YCH4JNUH.js} +2 -2
- package/dist/exports/client/component-3PENNOM3.js +2 -0
- package/dist/exports/client/component-3PENNOM3.js.map +7 -0
- package/dist/exports/client/index.d.ts +0 -2
- package/dist/exports/client/index.d.ts.map +1 -1
- package/dist/exports/client/index.js +10 -35
- package/dist/exports/client/index.js.map +4 -4
- package/dist/features/align/server/i18n.d.ts.map +1 -1
- package/dist/features/align/server/i18n.js +0 -6
- package/dist/features/align/server/i18n.js.map +1 -1
- package/dist/features/blockquote/server/i18n.d.ts.map +1 -1
- package/dist/features/blockquote/server/i18n.js +0 -3
- package/dist/features/blockquote/server/i18n.js.map +1 -1
- package/dist/features/blocks/client/index.d.ts.map +1 -1
- package/dist/features/blocks/client/index.js +0 -5
- package/dist/features/blocks/client/index.js.map +1 -1
- package/dist/features/blocks/client/markdownTransformer.d.ts +17 -0
- package/dist/features/blocks/client/markdownTransformer.d.ts.map +1 -0
- package/dist/features/blocks/client/markdownTransformer.js +144 -0
- package/dist/features/blocks/client/markdownTransformer.js.map +1 -0
- package/dist/features/blocks/server/i18n.d.ts.map +1 -1
- package/dist/features/blocks/server/i18n.js +0 -9
- package/dist/features/blocks/server/i18n.js.map +1 -1
- package/dist/features/blocks/server/index.js +1 -1
- package/dist/features/blocks/server/index.js.map +1 -1
- package/dist/features/blocks/server/linesFromMatchToContentAndPropsString.d.ts.map +1 -0
- package/dist/features/blocks/server/linesFromMatchToContentAndPropsString.js.map +1 -0
- package/dist/features/blocks/server/markdownTransformer.d.ts +22 -0
- package/dist/features/blocks/server/markdownTransformer.d.ts.map +1 -0
- package/dist/features/blocks/server/{markdown/markdownTransformer.js → markdownTransformer.js} +48 -6
- package/dist/features/blocks/server/markdownTransformer.js.map +1 -0
- package/dist/features/heading/server/i18n.d.ts.map +1 -1
- package/dist/features/heading/server/i18n.js +0 -3
- package/dist/features/heading/server/i18n.js.map +1 -1
- package/dist/features/horizontalRule/server/i18n.d.ts.map +1 -1
- package/dist/features/horizontalRule/server/i18n.js +0 -3
- package/dist/features/horizontalRule/server/i18n.js.map +1 -1
- package/dist/features/indent/server/i18n.d.ts.map +1 -1
- package/dist/features/indent/server/i18n.js +0 -4
- package/dist/features/indent/server/i18n.js.map +1 -1
- package/dist/features/link/server/i18n.d.ts.map +1 -1
- package/dist/features/link/server/i18n.js +0 -4
- package/dist/features/link/server/i18n.js.map +1 -1
- package/dist/features/lists/checklist/server/i18n.d.ts.map +1 -1
- package/dist/features/lists/checklist/server/i18n.js +0 -3
- package/dist/features/lists/checklist/server/i18n.js.map +1 -1
- package/dist/features/lists/orderedList/server/i18n.d.ts.map +1 -1
- package/dist/features/lists/orderedList/server/i18n.js +0 -3
- package/dist/features/lists/orderedList/server/i18n.js.map +1 -1
- package/dist/features/lists/unorderedList/server/i18n.d.ts.map +1 -1
- package/dist/features/lists/unorderedList/server/i18n.js +0 -3
- package/dist/features/lists/unorderedList/server/i18n.js.map +1 -1
- package/dist/features/paragraph/server/i18n.d.ts.map +1 -1
- package/dist/features/paragraph/server/i18n.js +0 -4
- package/dist/features/paragraph/server/i18n.js.map +1 -1
- package/dist/features/relationship/server/i18n.d.ts.map +1 -1
- package/dist/features/relationship/server/i18n.js +0 -3
- package/dist/features/relationship/server/i18n.js.map +1 -1
- package/dist/features/textState/i18n.d.ts.map +1 -1
- package/dist/features/textState/i18n.js +0 -3
- package/dist/features/textState/i18n.js.map +1 -1
- package/dist/features/upload/client/component/index.d.ts +0 -2
- package/dist/features/upload/client/component/index.d.ts.map +1 -1
- package/dist/features/upload/client/component/index.js +24 -28
- package/dist/features/upload/client/component/index.js.map +1 -1
- package/dist/features/upload/client/nodes/UploadNode.d.ts +7 -2
- package/dist/features/upload/client/nodes/UploadNode.d.ts.map +1 -1
- package/dist/features/upload/client/nodes/UploadNode.js +27 -9
- package/dist/features/upload/client/nodes/UploadNode.js.map +1 -1
- package/dist/features/upload/client/plugin/index.d.ts +0 -6
- package/dist/features/upload/client/plugin/index.d.ts.map +1 -1
- package/dist/features/upload/client/plugin/index.js +23 -306
- package/dist/features/upload/client/plugin/index.js.map +1 -1
- package/dist/features/upload/server/i18n.d.ts.map +1 -1
- package/dist/features/upload/server/i18n.js +0 -3
- package/dist/features/upload/server/i18n.js.map +1 -1
- package/dist/features/upload/server/nodes/UploadNode.d.ts +1 -16
- package/dist/features/upload/server/nodes/UploadNode.d.ts.map +1 -1
- package/dist/features/upload/server/nodes/UploadNode.js +39 -12
- package/dist/features/upload/server/nodes/UploadNode.js.map +1 -1
- package/dist/field/Field.d.ts.map +1 -1
- package/dist/field/Field.js +1 -1
- package/dist/field/Field.js.map +1 -1
- package/dist/field/bundled.css +1 -1
- package/dist/i18n.d.ts.map +1 -1
- package/dist/i18n.js +0 -6
- package/dist/i18n.js.map +1 -1
- package/dist/index.d.ts +0 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -1
- package/dist/index.js.map +1 -1
- package/dist/utilities/jsx/collectTopLevelJSXInLines.js +2 -2
- package/dist/utilities/jsx/collectTopLevelJSXInLines.js.map +1 -1
- package/package.json +6 -6
- package/dist/exports/client/Field-BJACUMFU.js.map +0 -7
- package/dist/exports/client/component-VDJI45F2.js +0 -2
- package/dist/exports/client/component-VDJI45F2.js.map +0 -7
- package/dist/features/blocks/client/markdown/getLexicalToMarkdown.d.ts +0 -6
- package/dist/features/blocks/client/markdown/getLexicalToMarkdown.d.ts.map +0 -1
- package/dist/features/blocks/client/markdown/getLexicalToMarkdown.js +0 -24
- package/dist/features/blocks/client/markdown/getLexicalToMarkdown.js.map +0 -1
- package/dist/features/blocks/client/markdown/getMarkdownToLexical.d.ts +0 -6
- package/dist/features/blocks/client/markdown/getMarkdownToLexical.d.ts.map +0 -1
- package/dist/features/blocks/client/markdown/getMarkdownToLexical.js +0 -20
- package/dist/features/blocks/client/markdown/getMarkdownToLexical.js.map +0 -1
- package/dist/features/blocks/client/markdown/markdownTransformer.d.ts +0 -12
- package/dist/features/blocks/client/markdown/markdownTransformer.d.ts.map +0 -1
- package/dist/features/blocks/client/markdown/markdownTransformer.js +0 -348
- package/dist/features/blocks/client/markdown/markdownTransformer.js.map +0 -1
- package/dist/features/blocks/premade/CodeBlock/Component.d.ts +0 -53
- package/dist/features/blocks/premade/CodeBlock/Component.d.ts.map +0 -1
- package/dist/features/blocks/premade/CodeBlock/Component.js +0 -68
- package/dist/features/blocks/premade/CodeBlock/Component.js.map +0 -1
- package/dist/features/blocks/premade/CodeBlock/converter.d.ts +0 -7
- package/dist/features/blocks/premade/CodeBlock/converter.d.ts.map +0 -1
- package/dist/features/blocks/premade/CodeBlock/converter.js +0 -46
- package/dist/features/blocks/premade/CodeBlock/converter.js.map +0 -1
- package/dist/features/blocks/premade/CodeBlock/converterClient.d.ts +0 -2
- package/dist/features/blocks/premade/CodeBlock/converterClient.d.ts.map +0 -1
- package/dist/features/blocks/premade/CodeBlock/converterClient.js +0 -4
- package/dist/features/blocks/premade/CodeBlock/converterClient.js.map +0 -1
- package/dist/features/blocks/premade/CodeBlock/index.d.ts +0 -7
- package/dist/features/blocks/premade/CodeBlock/index.d.ts.map +0 -1
- package/dist/features/blocks/premade/CodeBlock/index.js +0 -39
- package/dist/features/blocks/premade/CodeBlock/index.js.map +0 -1
- package/dist/features/blocks/server/markdown/getLexicalToMarkdown.d.ts +0 -6
- package/dist/features/blocks/server/markdown/getLexicalToMarkdown.d.ts.map +0 -1
- package/dist/features/blocks/server/markdown/getLexicalToMarkdown.js +0 -27
- package/dist/features/blocks/server/markdown/getLexicalToMarkdown.js.map +0 -1
- package/dist/features/blocks/server/markdown/getMarkdownToLexical.d.ts +0 -7
- package/dist/features/blocks/server/markdown/getMarkdownToLexical.d.ts.map +0 -1
- package/dist/features/blocks/server/markdown/getMarkdownToLexical.js +0 -22
- package/dist/features/blocks/server/markdown/getMarkdownToLexical.js.map +0 -1
- package/dist/features/blocks/server/markdown/linesFromMatchToContentAndPropsString.d.ts.map +0 -1
- package/dist/features/blocks/server/markdown/linesFromMatchToContentAndPropsString.js.map +0 -1
- package/dist/features/blocks/server/markdown/markdownTransformer.d.ts +0 -15
- package/dist/features/blocks/server/markdown/markdownTransformer.d.ts.map +0 -1
- package/dist/features/blocks/server/markdown/markdownTransformer.js.map +0 -1
- package/dist/features/upload/client/component/pending/index.d.ts +0 -3
- package/dist/features/upload/client/component/pending/index.d.ts.map +0 -1
- package/dist/features/upload/client/component/pending/index.js +0 -14
- package/dist/features/upload/client/component/pending/index.js.map +0 -1
- package/dist/features/upload/server/nodes/conversions.d.ts +0 -6
- package/dist/features/upload/server/nodes/conversions.d.ts.map +0 -1
- package/dist/features/upload/server/nodes/conversions.js +0 -53
- package/dist/features/upload/server/nodes/conversions.js.map +0 -1
- /package/dist/exports/client/{chunk-SEPPJCZ6.js.map → chunk-YCH4JNUH.js.map} +0 -0
- /package/dist/features/blocks/server/{markdown/linesFromMatchToContentAndPropsString.d.ts → linesFromMatchToContentAndPropsString.d.ts} +0 -0
- /package/dist/features/blocks/server/{markdown/linesFromMatchToContentAndPropsString.js → linesFromMatchToContentAndPropsString.js} +0 -0
|
@@ -1,348 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
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":[]}
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
import type { CodeFieldClientProps } from 'payload';
|
|
2
|
-
import React from 'react';
|
|
3
|
-
export type AdditionalCodeComponentProps = {
|
|
4
|
-
/**
|
|
5
|
-
* @default first key of the `languages` prop
|
|
6
|
-
*/
|
|
7
|
-
defaultLanguage?: string;
|
|
8
|
-
/**
|
|
9
|
-
* @default
|
|
10
|
-
* {
|
|
11
|
-
* js: 'JavaScript',
|
|
12
|
-
* plaintext: 'Plain Text',
|
|
13
|
-
* ts: 'TypeScript',
|
|
14
|
-
* }
|
|
15
|
-
*/
|
|
16
|
-
languages?: Record<string, string>;
|
|
17
|
-
/**
|
|
18
|
-
* Override the name of the block.
|
|
19
|
-
*
|
|
20
|
-
* @default 'Code'
|
|
21
|
-
*/
|
|
22
|
-
slug?: string;
|
|
23
|
-
/**
|
|
24
|
-
* Configure typescript settings for the editor
|
|
25
|
-
*/
|
|
26
|
-
typescript?: {
|
|
27
|
-
/**
|
|
28
|
-
* Additional types to fetch and include in the editor for autocompletion.
|
|
29
|
-
*
|
|
30
|
-
* For example, to include types for payload, you would set this to
|
|
31
|
-
*
|
|
32
|
-
* [{ url: 'https://unpkg.com/payload@latest/dist/index.d.ts', filePath: 'file:///node_modules/payload/index.d.ts' }]
|
|
33
|
-
*/
|
|
34
|
-
fetchTypes?: Array<{
|
|
35
|
-
filePath: string;
|
|
36
|
-
url: string;
|
|
37
|
-
}>;
|
|
38
|
-
/**
|
|
39
|
-
* @default undefined
|
|
40
|
-
*/
|
|
41
|
-
paths?: Record<string, string[]>;
|
|
42
|
-
/**
|
|
43
|
-
* @default "ESNext"
|
|
44
|
-
*/
|
|
45
|
-
target?: string;
|
|
46
|
-
/**
|
|
47
|
-
* @default ['node_modules/@types']
|
|
48
|
-
*/
|
|
49
|
-
typeRoots?: string[];
|
|
50
|
-
};
|
|
51
|
-
};
|
|
52
|
-
export declare const CodeComponent: React.FC<AdditionalCodeComponentProps & CodeFieldClientProps>;
|
|
53
|
-
//# sourceMappingURL=Component.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Component.d.ts","sourceRoot":"","sources":["../../../../../src/features/blocks/premade/CodeBlock/Component.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAmB,oBAAoB,EAAE,MAAM,SAAS,CAAA;AAGpE,OAAO,KAAkB,MAAM,OAAO,CAAA;AAEtC,MAAM,MAAM,4BAA4B,GAAG;IACzC;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB;;;;;;;OAOG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAClC;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;IACb;;OAEG;IACH,UAAU,CAAC,EAAE;QACX;;;;;;WAMG;QACH,UAAU,CAAC,EAAE,KAAK,CAAC;YACjB,QAAQ,EAAE,MAAM,CAAA;YAChB,GAAG,EAAE,MAAM,CAAA;SACZ,CAAC,CAAA;QACF;;WAEG;QACH,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA;QAChC;;WAEG;QACH,MAAM,CAAC,EAAE,MAAM,CAAA;QACf;;WAEG;QACH,SAAS,CAAC,EAAE,MAAM,EAAE,CAAA;KACrB,CAAA;CACF,CAAA;AAED,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC,4BAA4B,GAAG,oBAAoB,CAsFvF,CAAA"}
|
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
|
|
3
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
4
|
-
import { CodeField, useFormFields } from '@payloadcms/ui';
|
|
5
|
-
import React, { useMemo } from 'react';
|
|
6
|
-
export const CodeComponent = ({
|
|
7
|
-
autoComplete,
|
|
8
|
-
field,
|
|
9
|
-
forceRender,
|
|
10
|
-
languages = {
|
|
11
|
-
js: 'JavaScript',
|
|
12
|
-
plaintext: 'Plain Text',
|
|
13
|
-
ts: 'TypeScript'
|
|
14
|
-
},
|
|
15
|
-
path,
|
|
16
|
-
permissions,
|
|
17
|
-
readOnly,
|
|
18
|
-
renderedBlocks,
|
|
19
|
-
schemaPath,
|
|
20
|
-
typescript,
|
|
21
|
-
validate
|
|
22
|
-
}) => {
|
|
23
|
-
const languageField = useFormFields(([fields]) => fields['language']);
|
|
24
|
-
const language = languageField?.value || languageField?.initialValue || 'typescript';
|
|
25
|
-
const label = languages[language];
|
|
26
|
-
const props = useMemo(() => ({
|
|
27
|
-
...field,
|
|
28
|
-
type: 'code',
|
|
29
|
-
admin: {
|
|
30
|
-
...field.admin,
|
|
31
|
-
editorOptions: {},
|
|
32
|
-
language
|
|
33
|
-
}
|
|
34
|
-
}), [field, language]);
|
|
35
|
-
const key = `${field.name}-${language}-${label}`;
|
|
36
|
-
return props && /*#__PURE__*/_jsx(CodeField, {
|
|
37
|
-
autoComplete: autoComplete,
|
|
38
|
-
field: props,
|
|
39
|
-
forceRender: forceRender,
|
|
40
|
-
onMount: (_editor, monaco) => {
|
|
41
|
-
monaco.languages.typescript.typescriptDefaults.setCompilerOptions({
|
|
42
|
-
allowNonTsExtensions: true,
|
|
43
|
-
// Set module resolution to NodeJs to enable autocompletion
|
|
44
|
-
moduleResolution: monaco.languages.typescript.ModuleResolutionKind.NodeJs,
|
|
45
|
-
paths: typescript?.paths,
|
|
46
|
-
target: monaco.languages.typescript.ScriptTarget[typescript?.target ?? 'ESNext'],
|
|
47
|
-
typeRoots: typescript?.typeRoots ?? ['node_modules/@types']
|
|
48
|
-
});
|
|
49
|
-
const run = async () => {
|
|
50
|
-
if (typescript?.fetchTypes && Array.isArray(typescript.fetchTypes) && typescript.fetchTypes.length > 0) {
|
|
51
|
-
await Promise.all(typescript.fetchTypes.map(async type => {
|
|
52
|
-
const types = await fetch(type.url);
|
|
53
|
-
const typesText = await types.text();
|
|
54
|
-
monaco.languages.typescript.typescriptDefaults.addExtraLib(typesText, type.filePath);
|
|
55
|
-
}));
|
|
56
|
-
}
|
|
57
|
-
};
|
|
58
|
-
void run();
|
|
59
|
-
},
|
|
60
|
-
path: path,
|
|
61
|
-
permissions: permissions,
|
|
62
|
-
readOnly: readOnly,
|
|
63
|
-
renderedBlocks: renderedBlocks,
|
|
64
|
-
schemaPath: schemaPath,
|
|
65
|
-
validate: validate
|
|
66
|
-
}, key);
|
|
67
|
-
};
|
|
68
|
-
//# sourceMappingURL=Component.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Component.js","names":["CodeField","useFormFields","React","useMemo","CodeComponent","autoComplete","field","forceRender","languages","js","plaintext","ts","path","permissions","readOnly","renderedBlocks","schemaPath","typescript","validate","languageField","fields","language","value","initialValue","label","props","type","admin","editorOptions","key","name","_jsx","onMount","_editor","monaco","typescriptDefaults","setCompilerOptions","allowNonTsExtensions","moduleResolution","ModuleResolutionKind","NodeJs","paths","target","ScriptTarget","typeRoots","run","fetchTypes","Array","isArray","length","Promise","all","map","types","fetch","url","typesText","text","addExtraLib","filePath"],"sources":["../../../../../src/features/blocks/premade/CodeBlock/Component.tsx"],"sourcesContent":["'use client'\n\nimport type { CodeFieldClient, CodeFieldClientProps } from 'payload'\n\nimport { CodeField, useFormFields } from '@payloadcms/ui'\nimport React, { useMemo } from 'react'\n\nexport type AdditionalCodeComponentProps = {\n /**\n * @default first key of the `languages` prop\n */\n defaultLanguage?: string\n /**\n * @default\n * {\n * js: 'JavaScript',\n * plaintext: 'Plain Text',\n * ts: 'TypeScript',\n * }\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 * 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 = {\n js: 'JavaScript',\n plaintext: 'Plain Text',\n ts: 'TypeScript',\n },\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 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 language,\n },\n }),\n [field, language],\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.languages.typescript.typescriptDefaults.setCompilerOptions({\n allowNonTsExtensions: true,\n // Set module resolution to NodeJs to enable autocompletion\n moduleResolution: monaco.languages.typescript.ModuleResolutionKind.NodeJs,\n paths: typescript?.paths,\n target: monaco.languages.typescript.ScriptTarget[\n typescript?.target ?? ('ESNext' as any)\n ] as any,\n typeRoots: typescript?.typeRoots ?? ['node_modules/@types'],\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":"AAAA;;;AAIA,SAASA,SAAS,EAAEC,aAAa,QAAQ;AACzC,OAAOC,KAAA,IAASC,OAAO,QAAQ;AAoD/B,OAAO,MAAMC,aAAA,GAA+EA,CAAC;EAC3FC,YAAY;EACZC,KAAK;EACLC,WAAW;EACXC,SAAA,GAAY;IACVC,EAAA,EAAI;IACJC,SAAA,EAAW;IACXC,EAAA,EAAI;EACN,CAAC;EACDC,IAAI;EACJC,WAAW;EACXC,QAAQ;EACRC,cAAc;EACdC,UAAU;EACVC,UAAU;EACVC;AAAQ,CACT;EACC,MAAMC,aAAA,GAAgBlB,aAAA,CAAc,CAAC,CAACmB,MAAA,CAAO,KAAKA,MAAM,CAAC,WAAW;EAEpE,MAAMC,QAAA,GACJF,aAAC,EAAeG,KAAA,IAAqBH,aAAA,EAAeI,YAAA,IAA2B;EAEjF,MAAMC,KAAA,GAAQhB,SAAS,CAACa,QAAA,CAAS;EAEjC,MAAMI,KAAA,GAAyBtB,OAAA,CAC7B,OAAO;IACL,GAAGG,KAAK;IACRoB,IAAA,EAAM;IACNC,KAAA,EAAO;MACL,GAAGrB,KAAA,CAAMqB,KAAK;MACdC,aAAA,EAAe,CAAC;MAChBP;IACF;EACF,IACA,CAACf,KAAA,EAAOe,QAAA,CAAS;EAGnB,MAAMQ,GAAA,GAAM,GAAGvB,KAAA,CAAMwB,IAAI,IAAIT,QAAA,IAAYG,KAAA,EAAO;EAEhD,OACEC,KAAA,iBACEM,IAAA,CAAC/B,SAAA;IACCK,YAAA,EAAcA,YAAA;IACdC,KAAA,EAAOmB,KAAA;IACPlB,WAAA,EAAaA,WAAA;IAEbyB,OAAA,EAASA,CAACC,OAAA,EAASC,MAAA;MACjBA,MAAA,CAAO1B,SAAS,CAACS,UAAU,CAACkB,kBAAkB,CAACC,kBAAkB,CAAC;QAChEC,oBAAA,EAAsB;QACtB;QACAC,gBAAA,EAAkBJ,MAAA,CAAO1B,SAAS,CAACS,UAAU,CAACsB,oBAAoB,CAACC,MAAM;QACzEC,KAAA,EAAOxB,UAAA,EAAYwB,KAAA;QACnBC,MAAA,EAAQR,MAAA,CAAO1B,SAAS,CAACS,UAAU,CAAC0B,YAAY,CAC9C1B,UAAA,EAAYyB,MAAA,IAAW,SACxB;QACDE,SAAA,EAAW3B,UAAA,EAAY2B,SAAA,IAAa,CAAC;MACvC;MACA,MAAMC,GAAA,GAAM,MAAAA,CAAA;QACV,IACE5B,UAAA,EAAY6B,UAAA,IACZC,KAAA,CAAMC,OAAO,CAAC/B,UAAA,CAAW6B,UAAU,KACnC7B,UAAA,CAAW6B,UAAU,CAACG,MAAM,GAAG,GAC/B;UACA,MAAMC,OAAA,CAAQC,GAAG,CACflC,UAAA,CAAW6B,UAAU,CAACM,GAAG,CAAC,MAAO1B,IAAA;YAC/B,MAAM2B,KAAA,GAAQ,MAAMC,KAAA,CAAM5B,IAAA,CAAK6B,GAAG;YAClC,MAAMC,SAAA,GAAY,MAAMH,KAAA,CAAMI,IAAI;YAClCvB,MAAA,CAAO1B,SAAS,CAACS,UAAU,CAACkB,kBAAkB,CAACuB,WAAW,CACxDF,SAAA,EACA9B,IAAA,CAAKiC,QAAQ;UAEjB;QAEJ;MACF;MACA,KAAKd,GAAA;IACP;IACAjC,IAAA,EAAMA,IAAA;IACNC,WAAA,EAAaA,WAAA;IACbC,QAAA,EAAUA,QAAA;IACVC,cAAA,EAAgBA,cAAA;IAChBC,UAAA,EAAYA,UAAA;IACZE,QAAA,EAAUA;KArCLW,GAAA;AAyCb","ignoreList":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"converter.d.ts","sourceRoot":"","sources":["../../../../../src/features/blocks/premade/CodeBlock/converter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAEvC;;;GAGG;AACH,eAAO,MAAM,aAAa,EAAE,QAyC3B,CAAA"}
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @internal
|
|
3
|
-
* @experimental - API may change in minor releases
|
|
4
|
-
*/export const codeConverter = {
|
|
5
|
-
customEndRegex: {
|
|
6
|
-
optional: true,
|
|
7
|
-
regExp: /[ \t]*```$/
|
|
8
|
-
},
|
|
9
|
-
customStartRegex: /^[ \t]*```(\w+)?/,
|
|
10
|
-
doNotTrimChildren: true,
|
|
11
|
-
export: ({
|
|
12
|
-
fields
|
|
13
|
-
}) => {
|
|
14
|
-
const isSingleLine = !fields.code.includes('\n') && !fields.language?.length;
|
|
15
|
-
if (isSingleLine) {
|
|
16
|
-
return '```' + fields.code + '```';
|
|
17
|
-
}
|
|
18
|
-
return '```' + (fields.language || '') + (fields.code ? '\n' + fields.code : '') + '\n' + '```';
|
|
19
|
-
},
|
|
20
|
-
import: ({
|
|
21
|
-
children,
|
|
22
|
-
closeMatch,
|
|
23
|
-
openMatch
|
|
24
|
-
}) => {
|
|
25
|
-
const language = openMatch?.[1];
|
|
26
|
-
// Removed first and last \n from children if present
|
|
27
|
-
if (children.startsWith('\n')) {
|
|
28
|
-
children = children.slice(1);
|
|
29
|
-
}
|
|
30
|
-
if (children.endsWith('\n')) {
|
|
31
|
-
children = children.slice(0, -1);
|
|
32
|
-
}
|
|
33
|
-
const isSingleLineAndComplete = !!closeMatch && !children.includes('\n') && openMatch?.input?.trim() !== '```' + language;
|
|
34
|
-
if (isSingleLineAndComplete) {
|
|
35
|
-
return {
|
|
36
|
-
code: language + (children?.length ? children : ''),
|
|
37
|
-
language: ''
|
|
38
|
-
};
|
|
39
|
-
}
|
|
40
|
-
return {
|
|
41
|
-
code: children,
|
|
42
|
-
language
|
|
43
|
-
};
|
|
44
|
-
}
|
|
45
|
-
};
|
|
46
|
-
//# sourceMappingURL=converter.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"converter.js","names":["codeConverter","customEndRegex","optional","regExp","customStartRegex","doNotTrimChildren","export","fields","isSingleLine","code","includes","language","length","import","children","closeMatch","openMatch","startsWith","slice","endsWith","isSingleLineAndComplete","input","trim"],"sources":["../../../../../src/features/blocks/premade/CodeBlock/converter.ts"],"sourcesContent":["import type { BlockJSX } from 'payload'\n\n/**\n * @internal\n * @experimental - API may change in minor releases\n */\nexport const codeConverter: BlockJSX = {\n customEndRegex: {\n optional: true,\n regExp: /[ \\t]*```$/,\n },\n customStartRegex: /^[ \\t]*```(\\w+)?/,\n doNotTrimChildren: true,\n export: ({ fields }) => {\n const isSingleLine = !fields.code.includes('\\n') && !fields.language?.length\n if (isSingleLine) {\n return '```' + fields.code + '```'\n }\n\n return '```' + (fields.language || '') + (fields.code ? '\\n' + fields.code : '') + '\\n' + '```'\n },\n import: ({ children, closeMatch, openMatch }) => {\n const language = openMatch?.[1]\n\n // Removed first and last \\n from children if present\n if (children.startsWith('\\n')) {\n children = children.slice(1)\n }\n if (children.endsWith('\\n')) {\n children = children.slice(0, -1)\n }\n\n const isSingleLineAndComplete =\n !!closeMatch && !children.includes('\\n') && openMatch?.input?.trim() !== '```' + language\n\n if (isSingleLineAndComplete) {\n return {\n code: language + (children?.length ? children : ''), // No need to add space to children as they are not trimmed\n language: '',\n }\n }\n\n return {\n code: children,\n language,\n }\n },\n}\n"],"mappings":"AAEA;;;GAIA,OAAO,MAAMA,aAAA,GAA0B;EACrCC,cAAA,EAAgB;IACdC,QAAA,EAAU;IACVC,MAAA,EAAQ;EACV;EACAC,gBAAA,EAAkB;EAClBC,iBAAA,EAAmB;EACnBC,MAAA,EAAQA,CAAC;IAAEC;EAAM,CAAE;IACjB,MAAMC,YAAA,GAAe,CAACD,MAAA,CAAOE,IAAI,CAACC,QAAQ,CAAC,SAAS,CAACH,MAAA,CAAOI,QAAQ,EAAEC,MAAA;IACtE,IAAIJ,YAAA,EAAc;MAChB,OAAO,QAAQD,MAAA,CAAOE,IAAI,GAAG;IAC/B;IAEA,OAAO,SAASF,MAAA,CAAOI,QAAQ,IAAI,EAAC,KAAMJ,MAAA,CAAOE,IAAI,GAAG,OAAOF,MAAA,CAAOE,IAAI,GAAG,EAAC,IAAK,OAAO;EAC5F;EACAI,MAAA,EAAQA,CAAC;IAAEC,QAAQ;IAAEC,UAAU;IAAEC;EAAS,CAAE;IAC1C,MAAML,QAAA,GAAWK,SAAA,GAAY,EAAE;IAE/B;IACA,IAAIF,QAAA,CAASG,UAAU,CAAC,OAAO;MAC7BH,QAAA,GAAWA,QAAA,CAASI,KAAK,CAAC;IAC5B;IACA,IAAIJ,QAAA,CAASK,QAAQ,CAAC,OAAO;MAC3BL,QAAA,GAAWA,QAAA,CAASI,KAAK,CAAC,GAAG,CAAC;IAChC;IAEA,MAAME,uBAAA,GACJ,CAAC,CAACL,UAAA,IAAc,CAACD,QAAA,CAASJ,QAAQ,CAAC,SAASM,SAAA,EAAWK,KAAA,EAAOC,IAAA,OAAW,QAAQX,QAAA;IAEnF,IAAIS,uBAAA,EAAyB;MAC3B,OAAO;QACLX,IAAA,EAAME,QAAA,IAAYG,QAAA,EAAUF,MAAA,GAASE,QAAA,GAAW,EAAC;QACjDH,QAAA,EAAU;MACZ;IACF;IAEA,OAAO;MACLF,IAAA,EAAMK,QAAA;MACNH;IACF;EACF;AACF","ignoreList":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"converterClient.d.ts","sourceRoot":"","sources":["../../../../../src/features/blocks/premade/CodeBlock/converterClient.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,IAAI,mBAAmB,EAAE,MAAM,gBAAgB,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"converterClient.js","names":["codeConverter","codeConverterClient"],"sources":["../../../../../src/features/blocks/premade/CodeBlock/converterClient.ts"],"sourcesContent":["'use client'\n\nexport { codeConverter as codeConverterClient } from './converter.js'\n"],"mappings":"AAAA;;AAEA,SAASA,aAAA,IAAiBC,mBAAmB,QAAQ","ignoreList":[]}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import type { Block } from 'payload';
|
|
2
|
-
import type { AdditionalCodeComponentProps } from './Component.js';
|
|
3
|
-
/**
|
|
4
|
-
* @experimental - this API may change in future, minor releases
|
|
5
|
-
*/
|
|
6
|
-
export declare const CodeBlock: (args?: AdditionalCodeComponentProps) => Block;
|
|
7
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/features/blocks/premade/CodeBlock/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAEpC,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,gBAAgB,CAAA;AAIlE;;GAEG;AACH,eAAO,MAAM,SAAS,EAAE,CAAC,IAAI,CAAC,EAAE,4BAA4B,KAAK,KAqChE,CAAA"}
|