@payloadcms/richtext-lexical 3.0.0-beta.104 → 3.0.0-beta.106
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/cell/index.d.ts.map +1 -1
- package/dist/cell/index.js +35 -2
- package/dist/cell/index.js.map +1 -1
- package/dist/exports/client/Field-EL5TNVZW.js +2 -0
- package/dist/exports/client/Field-EL5TNVZW.js.map +7 -0
- package/dist/exports/client/bundled.css +1 -1
- package/dist/exports/client/index.js +7 -7
- package/dist/exports/client/index.js.map +3 -3
- package/dist/features/toolbars/fixed/client/Toolbar/index.d.ts.map +1 -1
- package/dist/features/toolbars/fixed/client/Toolbar/index.js.map +1 -1
- package/dist/features/toolbars/inline/client/Toolbar/index.d.ts.map +1 -1
- package/dist/features/toolbars/inline/client/Toolbar/index.js.map +1 -1
- package/dist/features/toolbars/shared/ToolbarDropdown/index.d.ts.map +1 -1
- package/dist/features/toolbars/shared/ToolbarDropdown/index.js +64 -82
- package/dist/features/toolbars/shared/ToolbarDropdown/index.js.map +1 -1
- package/dist/features/typesServer.d.ts +0 -1
- package/dist/features/typesServer.d.ts.map +1 -1
- package/dist/features/typesServer.js.map +1 -1
- package/dist/field/Field.d.ts.map +1 -1
- package/dist/field/Field.js +0 -3
- package/dist/field/Field.js.map +1 -1
- package/dist/field/bundled.css +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -4
- package/dist/index.js.map +1 -1
- package/package.json +8 -8
- package/dist/exports/client/Field-WN5O3VIW.js +0 -2
- package/dist/exports/client/Field-WN5O3VIW.js.map +0 -7
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EACV,YAAY,EACZ,kBAAkB,EAElB,8BAA8B,EAC/B,MAAM,YAAY,CAAA;AAiBnB,wBAAgB,aAAa,CAAC,KAAK,CAAC,EAAE,kBAAkB,GAAG,8BAA8B,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -346,7 +346,6 @@ export function lexicalEditor(props) {
|
|
|
346
346
|
const {
|
|
347
347
|
collection,
|
|
348
348
|
context: _context,
|
|
349
|
-
duplicate,
|
|
350
349
|
errors,
|
|
351
350
|
field,
|
|
352
351
|
global,
|
|
@@ -401,7 +400,6 @@ export function lexicalEditor(props) {
|
|
|
401
400
|
}
|
|
402
401
|
node = await hook({
|
|
403
402
|
context,
|
|
404
|
-
duplicate,
|
|
405
403
|
errors,
|
|
406
404
|
mergeLocaleActions,
|
|
407
405
|
node,
|
|
@@ -442,7 +440,6 @@ export function lexicalEditor(props) {
|
|
|
442
440
|
data,
|
|
443
441
|
doc: originalData,
|
|
444
442
|
docWithLocales: originalDataWithLocales ?? {},
|
|
445
|
-
duplicate,
|
|
446
443
|
errors,
|
|
447
444
|
fields: subFields,
|
|
448
445
|
global,
|
|
@@ -527,7 +524,6 @@ export function lexicalEditor(props) {
|
|
|
527
524
|
* - afterChange
|
|
528
525
|
* - beforeChange
|
|
529
526
|
* - beforeValidate
|
|
530
|
-
* - beforeDuplicate
|
|
531
527
|
*
|
|
532
528
|
* Other hooks are handled by the flattenedNodes. All nodes in the nodeIDMap are part of flattenedNodes.
|
|
533
529
|
*/
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["afterChangeTraverseFields","afterReadTraverseFields","beforeChangeTraverseFields","beforeValidateTraverseFields","checkDependencies","deepCopyObject","deepCopyObjectSimple","withNullableJSONSchemaType","i18n","defaultEditorConfig","defaultEditorFeatures","loadFeatures","sanitizeServerEditorConfig","sanitizeServerFeatures","populateLexicalPopulationPromises","getGenerateImportMap","getGenerateSchemaMap","recurseNodeTree","richTextValidateHOC","defaultSanitizedServerEditorConfig","lexicalEditor","props","config","isRoot","parentIsLocalized","process","env","NODE_ENV","PAYLOAD_DISABLE_DEPENDENCY_CHECKER","dependencyGroups","name","dependencies","targetVersion","features","resolvedFeatureMap","finalSanitizedEditorConfig","lexical","rootEditor","editor","rootEditorFeatures","defaultFeatures","rootFeatures","unSanitizedEditorConfig","featureI18n","lang","general","CellComponent","clientProps","admin","lexicalEditorConfig","path","editorConfig","FieldComponent","generateComponentMap","serverProps","generateImportMap","generateSchemaMap","graphQLPopulationPromises","context","currentDepth","depth","draft","field","fieldPromises","findMany","flattenLocales","overrideAccess","populationPromises","req","showHiddenFields","siblingDoc","size","editorPopulationPromises","hooks","afterChange","args","collection","_context","global","operation","schemaPath","value","length","hook","nodeHooks","getSubFields","nodeIDMap","originalNodeIDMap","internal","richText","join","Object","keys","nodes","root","children","id","node","entries","afterChangeHooks","has","type","get","console","warn","originalNode","parentRichTextFieldPath","parentRichTextFieldSchemaPath","subFieldFn","subFieldDataFn","getSubFieldsData","subFields","data","originalData","doc","fields","previousDoc","previousSiblingDoc","siblingData","afterRead","fallbackLocale","locale","triggerAccessControl","triggerHooks","flattenedNodes","afterReadHooks","beforeChange","duplicate","errors","mergeLocaleActions","siblingDocWithLocales","skipValidation","originalNodeWithLocalesIDMap","beforeChangeHooks","originalNodeWithLocales","originalDataWithLocales","docWithLocales","newOriginalNodeIDMap","previousValue","beforeValidate","beforeValidateHooks","outputSchema","collectionIDFieldTypes","interfaceNameDefinitions","isRequired","properties","additionalProperties","items","version","required","direction","oneOf","enum","format","indent","modifyOutputSchema","generatedTypes","modifyOutputSchemas","currentSchema","validate","AlignFeature","BlockquoteFeature","BlocksFeature","LinebreakHTMLConverter","ParagraphHTMLConverter","TextHTMLConverter","defaultHTMLConverters","convertLexicalNodesToHTML","convertLexicalToHTML","consolidateHTMLConverters","lexicalHTML","HTMLConverterFeature","TestRecorderFeature","TreeViewFeature","EXPERIMENTAL_TableFeature","BoldFeature","InlineCodeFeature","ItalicFeature","StrikethroughFeature","SubscriptFeature","SuperscriptFeature","UnderlineFeature","HeadingFeature","HorizontalRuleFeature","IndentFeature","AutoLinkNode","LinkNode","LinkFeature","ChecklistFeature","OrderedListFeature","UnorderedListFeature","ParagraphFeature","RelationshipFeature","RelationshipServerNode","FixedToolbarFeature","InlineToolbarFeature","createNode","UploadFeature","UploadServerNode","defaultEditorLexicalConfig","sortFeaturesForOptimalLoading","getEnabledNodes","DETAIL_TYPE_TO_DETAIL","DOUBLE_LINE_BREAK","ELEMENT_FORMAT_TO_TYPE","ELEMENT_TYPE_TO_FORMAT","IS_ALL_FORMATTING","LTR_REGEX","NodeFormat","NON_BREAKING_SPACE","RTL_REGEX","TEXT_MODE_TO_TYPE","TEXT_TYPE_TO_FORMAT","TEXT_TYPE_TO_MODE","sanitizeUrl","validateUrl","defaultRichTextValue","populate","createServerFeature","upgradeLexicalData"],"sources":["../src/index.ts"],"sourcesContent":["import type { JSONSchema4 } from 'json-schema'\nimport type {\n EditorConfig as LexicalEditorConfig,\n SerializedEditorState,\n SerializedLexicalNode,\n} from 'lexical'\n\nimport {\n afterChangeTraverseFields,\n afterReadTraverseFields,\n beforeChangeTraverseFields,\n beforeValidateTraverseFields,\n checkDependencies,\n deepCopyObject,\n deepCopyObjectSimple,\n withNullableJSONSchemaType,\n} from 'payload'\n\nimport type { FeatureProviderServer, ResolvedServerFeatureMap } from './features/typesServer.js'\nimport type { SanitizedServerEditorConfig } from './lexical/config/types.js'\nimport type {\n AdapterProps,\n LexicalEditorProps,\n LexicalRichTextAdapter,\n LexicalRichTextAdapterProvider,\n} from './types.js'\n\nimport { i18n } from './i18n.js'\nimport { defaultEditorConfig, defaultEditorFeatures } from './lexical/config/server/default.js'\nimport { loadFeatures } from './lexical/config/server/loader.js'\nimport {\n sanitizeServerEditorConfig,\n sanitizeServerFeatures,\n} from './lexical/config/server/sanitize.js'\nimport { populateLexicalPopulationPromises } from './populateGraphQL/populateLexicalPopulationPromises.js'\nimport { getGenerateImportMap } from './utilities/generateImportMap.js'\nimport { getGenerateSchemaMap } from './utilities/generateSchemaMap.js'\nimport { recurseNodeTree } from './utilities/recurseNodeTree.js'\nimport { richTextValidateHOC } from './validate/index.js'\n\nlet defaultSanitizedServerEditorConfig: SanitizedServerEditorConfig = null\n\nexport function lexicalEditor(props?: LexicalEditorProps): LexicalRichTextAdapterProvider {\n return async ({ config, isRoot, parentIsLocalized }) => {\n if (\n process.env.NODE_ENV !== 'production' &&\n process.env.PAYLOAD_DISABLE_DEPENDENCY_CHECKER !== 'true'\n ) {\n await checkDependencies({\n dependencyGroups: [\n {\n name: 'lexical',\n dependencies: [\n 'lexical',\n '@lexical/headless',\n '@lexical/link',\n '@lexical/list',\n '@lexical/mark',\n '@lexical/markdown',\n '@lexical/react',\n '@lexical/rich-text',\n '@lexical/selection',\n '@lexical/utils',\n ],\n targetVersion: '0.17.0',\n },\n ],\n })\n }\n\n let features: FeatureProviderServer<any, any, any>[] = []\n let resolvedFeatureMap: ResolvedServerFeatureMap\n\n let finalSanitizedEditorConfig: SanitizedServerEditorConfig // For server only\n if (!props || (!props.features && !props.lexical)) {\n if (!defaultSanitizedServerEditorConfig) {\n defaultSanitizedServerEditorConfig = await sanitizeServerEditorConfig(\n defaultEditorConfig,\n config,\n parentIsLocalized,\n )\n features = deepCopyObject(defaultEditorFeatures)\n }\n\n finalSanitizedEditorConfig = deepCopyObject(defaultSanitizedServerEditorConfig)\n\n resolvedFeatureMap = finalSanitizedEditorConfig.resolvedFeatureMap\n } else {\n const rootEditor = config.editor\n let rootEditorFeatures: FeatureProviderServer<unknown, unknown, unknown>[] = []\n if (typeof rootEditor === 'object' && 'features' in rootEditor) {\n rootEditorFeatures = (rootEditor as LexicalRichTextAdapter).features\n }\n\n features =\n props.features && typeof props.features === 'function'\n ? props.features({\n defaultFeatures: deepCopyObject(defaultEditorFeatures),\n rootFeatures: rootEditorFeatures,\n })\n : (props.features as FeatureProviderServer<unknown, unknown, unknown>[])\n if (!features) {\n features = deepCopyObject(defaultEditorFeatures)\n }\n\n const lexical: LexicalEditorConfig =\n props.lexical ?? deepCopyObjectSimple(defaultEditorConfig.lexical)\n\n resolvedFeatureMap = await loadFeatures({\n config,\n isRoot,\n parentIsLocalized,\n unSanitizedEditorConfig: {\n features,\n lexical,\n },\n })\n\n finalSanitizedEditorConfig = {\n features: sanitizeServerFeatures(resolvedFeatureMap),\n lexical,\n resolvedFeatureMap,\n }\n }\n\n const featureI18n = finalSanitizedEditorConfig.features.i18n\n for (const lang in i18n) {\n if (!featureI18n[lang]) {\n featureI18n[lang] = {\n lexical: {},\n }\n }\n\n featureI18n[lang].lexical.general = i18n[lang]\n }\n\n return {\n CellComponent: {\n clientProps: {\n admin: props?.admin,\n lexicalEditorConfig: finalSanitizedEditorConfig.lexical,\n },\n path: '@payloadcms/richtext-lexical/client#RichTextCell',\n },\n editorConfig: finalSanitizedEditorConfig,\n features,\n FieldComponent: {\n clientProps: {\n admin: props?.admin,\n lexicalEditorConfig: finalSanitizedEditorConfig.lexical,\n },\n path: '@payloadcms/richtext-lexical/client#RichTextField',\n },\n generateComponentMap: {\n path: '@payloadcms/richtext-lexical/generateComponentMap#getGenerateComponentMap',\n serverProps: {\n resolvedFeatureMap,\n },\n },\n generateImportMap: getGenerateImportMap({\n resolvedFeatureMap,\n }),\n generateSchemaMap: getGenerateSchemaMap({\n resolvedFeatureMap,\n }),\n graphQLPopulationPromises({\n context,\n currentDepth,\n depth,\n draft,\n field,\n fieldPromises,\n findMany,\n flattenLocales,\n overrideAccess,\n populationPromises,\n req,\n showHiddenFields,\n siblingDoc,\n }) {\n // check if there are any features with nodes which have populationPromises for this field\n if (finalSanitizedEditorConfig?.features?.graphQLPopulationPromises?.size) {\n populateLexicalPopulationPromises({\n context,\n currentDepth: currentDepth ?? 0,\n depth,\n draft,\n editorPopulationPromises: finalSanitizedEditorConfig.features.graphQLPopulationPromises,\n field,\n fieldPromises,\n findMany,\n flattenLocales,\n overrideAccess,\n populationPromises,\n req,\n showHiddenFields,\n siblingDoc,\n })\n }\n },\n hooks: {\n afterChange: [\n async (args) => {\n const { collection, context: _context, global, operation, path, req, schemaPath } = args\n let { value } = args\n if (finalSanitizedEditorConfig?.features?.hooks?.afterChange?.length) {\n for (const hook of finalSanitizedEditorConfig.features.hooks.afterChange) {\n value = await hook(args)\n }\n }\n if (\n !finalSanitizedEditorConfig.features.nodeHooks.afterChange.size &&\n !finalSanitizedEditorConfig.features.getSubFields.size\n ) {\n return value\n }\n const context: any = _context\n const nodeIDMap: {\n [key: string]: SerializedLexicalNode\n } = {}\n\n /**\n * Get the originalNodeIDMap from the beforeValidate hook, which is always run before this hook.\n */\n const originalNodeIDMap: {\n [key: string]: SerializedLexicalNode\n } = context?.internal?.richText?.[path.join('.')]?.originalNodeIDMap\n\n if (!originalNodeIDMap || !Object.keys(originalNodeIDMap).length || !value) {\n return value\n }\n\n recurseNodeTree({\n nodeIDMap,\n nodes: (value as SerializedEditorState)?.root?.children ?? [],\n })\n\n // eslint-disable-next-line prefer-const\n for (let [id, node] of Object.entries(nodeIDMap)) {\n const afterChangeHooks = finalSanitizedEditorConfig.features.nodeHooks.afterChange\n if (afterChangeHooks?.has(node.type)) {\n for (const hook of afterChangeHooks.get(node.type)) {\n if (!originalNodeIDMap[id]) {\n console.warn(\n '(afterChange) No original node found for node with id',\n id,\n 'node:',\n node,\n 'path',\n path.join('.'),\n )\n continue\n }\n node = await hook({\n context,\n node,\n operation,\n originalNode: originalNodeIDMap[id],\n parentRichTextFieldPath: path,\n parentRichTextFieldSchemaPath: schemaPath,\n req,\n })\n }\n }\n const subFieldFn = finalSanitizedEditorConfig.features.getSubFields.get(node.type)\n const subFieldDataFn = finalSanitizedEditorConfig.features.getSubFieldsData.get(\n node.type,\n )\n\n if (subFieldFn) {\n const subFields = subFieldFn({ node, req })\n const data = subFieldDataFn({ node, req }) ?? {}\n const originalData = subFieldDataFn({ node: originalNodeIDMap[id], req }) ?? {}\n\n if (subFields?.length) {\n await afterChangeTraverseFields({\n collection,\n context,\n data: originalData,\n doc: data,\n fields: subFields,\n global,\n operation,\n path,\n previousDoc: data,\n previousSiblingDoc: { ...data },\n req,\n schemaPath,\n siblingData: originalData || {},\n siblingDoc: { ...data },\n })\n }\n }\n }\n return value\n },\n ],\n afterRead: [\n /**\n * afterRead hooks do not receive the originalNode. Thus, they can run on all nodes, not just nodes with an ID.\n */\n async (args) => {\n const {\n collection,\n context: context,\n currentDepth,\n depth,\n draft,\n fallbackLocale,\n fieldPromises,\n findMany,\n flattenLocales,\n global,\n locale,\n overrideAccess,\n path,\n populationPromises,\n req,\n schemaPath,\n showHiddenFields,\n triggerAccessControl,\n triggerHooks,\n } = args\n let { value } = args\n\n if (finalSanitizedEditorConfig?.features?.hooks?.afterRead?.length) {\n for (const hook of finalSanitizedEditorConfig.features.hooks.afterRead) {\n value = await hook(args)\n }\n }\n\n if (\n !finalSanitizedEditorConfig.features.nodeHooks.afterRead.size &&\n !finalSanitizedEditorConfig.features.getSubFields.size\n ) {\n return value\n }\n const flattenedNodes: SerializedLexicalNode[] = []\n\n recurseNodeTree({\n flattenedNodes,\n nodes: (value as SerializedEditorState)?.root?.children ?? [],\n })\n\n for (let node of flattenedNodes) {\n const afterReadHooks = finalSanitizedEditorConfig.features.nodeHooks.afterRead\n if (afterReadHooks?.has(node.type)) {\n for (const hook of afterReadHooks.get(node.type)) {\n node = await hook({\n context,\n currentDepth,\n depth,\n draft,\n fallbackLocale,\n fieldPromises,\n findMany,\n flattenLocales,\n locale,\n node,\n overrideAccess,\n parentRichTextFieldPath: path,\n parentRichTextFieldSchemaPath: schemaPath,\n populationPromises,\n req,\n showHiddenFields,\n triggerAccessControl,\n triggerHooks,\n })\n }\n }\n const subFieldFn = finalSanitizedEditorConfig.features.getSubFields.get(node.type)\n const subFieldDataFn = finalSanitizedEditorConfig.features.getSubFieldsData.get(\n node.type,\n )\n\n if (subFieldFn) {\n const subFields = subFieldFn({ node, req })\n const data = subFieldDataFn({ node, req }) ?? {}\n\n if (subFields?.length) {\n afterReadTraverseFields({\n collection,\n context,\n currentDepth,\n depth,\n doc: data,\n draft,\n fallbackLocale,\n fieldPromises,\n fields: subFields,\n findMany,\n flattenLocales,\n global,\n locale,\n overrideAccess,\n path,\n populationPromises,\n req,\n schemaPath,\n showHiddenFields,\n siblingDoc: data,\n triggerAccessControl,\n triggerHooks,\n })\n }\n }\n }\n\n return value\n },\n ],\n beforeChange: [\n async (args) => {\n const {\n collection,\n context: _context,\n duplicate,\n errors,\n field,\n global,\n mergeLocaleActions,\n operation,\n path,\n req,\n schemaPath,\n siblingData,\n siblingDocWithLocales,\n skipValidation,\n } = args\n let { value } = args\n\n if (finalSanitizedEditorConfig?.features?.hooks?.beforeChange?.length) {\n for (const hook of finalSanitizedEditorConfig.features.hooks.beforeChange) {\n value = await hook(args)\n }\n }\n\n if (\n !finalSanitizedEditorConfig.features.nodeHooks.beforeChange.size &&\n !finalSanitizedEditorConfig.features.getSubFields.size\n ) {\n return value\n }\n\n const context: any = _context\n const nodeIDMap: {\n [key: string]: SerializedLexicalNode\n } = {}\n\n /**\n * Get the originalNodeIDMap from the beforeValidate hook, which is always run before this hook.\n */\n const originalNodeIDMap: {\n [key: string]: SerializedLexicalNode\n } = context?.internal?.richText?.[path.join('.')]?.originalNodeIDMap\n\n if (!originalNodeIDMap || !Object.keys(originalNodeIDMap).length || !value) {\n return value\n }\n\n const originalNodeWithLocalesIDMap: {\n [key: string]: SerializedLexicalNode\n } = {}\n\n recurseNodeTree({\n nodeIDMap,\n nodes: (value as SerializedEditorState)?.root?.children ?? [],\n })\n\n if (siblingDocWithLocales?.[field.name]) {\n recurseNodeTree({\n nodeIDMap: originalNodeWithLocalesIDMap,\n nodes:\n (siblingDocWithLocales[field.name] as SerializedEditorState)?.root?.children ??\n [],\n })\n }\n\n // eslint-disable-next-line prefer-const\n for (let [id, node] of Object.entries(nodeIDMap)) {\n const beforeChangeHooks = finalSanitizedEditorConfig.features.nodeHooks.beforeChange\n if (beforeChangeHooks?.has(node.type)) {\n for (const hook of beforeChangeHooks.get(node.type)) {\n if (!originalNodeIDMap[id]) {\n console.warn(\n '(beforeChange) No original node found for node with id',\n id,\n 'node:',\n node,\n 'path',\n path.join('.'),\n )\n continue\n }\n node = await hook({\n context,\n duplicate,\n errors,\n mergeLocaleActions,\n node,\n operation,\n originalNode: originalNodeIDMap[id],\n originalNodeWithLocales: originalNodeWithLocalesIDMap[id],\n parentRichTextFieldPath: path,\n parentRichTextFieldSchemaPath: schemaPath,\n req,\n skipValidation,\n })\n }\n }\n\n const subFieldFn = finalSanitizedEditorConfig.features.getSubFields.get(node.type)\n const subFieldDataFn = finalSanitizedEditorConfig.features.getSubFieldsData.get(\n node.type,\n )\n\n if (subFieldFn) {\n const subFields = subFieldFn({ node, req })\n const data = subFieldDataFn({ node, req }) ?? {}\n const originalData = subFieldDataFn({ node: originalNodeIDMap[id], req }) ?? {}\n const originalDataWithLocales =\n subFieldDataFn({\n node: originalNodeWithLocalesIDMap[id],\n req,\n }) ?? {}\n\n if (subFields?.length) {\n await beforeChangeTraverseFields({\n id,\n collection,\n context,\n data,\n doc: originalData,\n docWithLocales: originalDataWithLocales ?? {},\n duplicate,\n errors,\n fields: subFields,\n global,\n mergeLocaleActions,\n operation,\n path,\n req,\n schemaPath,\n siblingData: data,\n siblingDoc: originalData,\n siblingDocWithLocales: originalDataWithLocales ?? {},\n skipValidation,\n })\n }\n }\n }\n\n /**\n * within the beforeChange hook, id's may be re-generated.\n * Example:\n * 1. Seed data contains IDs for block feature blocks.\n * 2. Those are used in beforeValidate\n * 3. in beforeChange, those IDs are regenerated, because you cannot provide IDs during document creation. See baseIDField beforeChange hook for reasoning\n * 4. Thus, in order for all post-beforeChange hooks to receive the correct ID, we need to update the originalNodeIDMap with the new ID's, by regenerating the nodeIDMap.\n * The reason this is not generated for every hook, is to save on performance. We know we only really have to generate it in beforeValidate, which is the first hook,\n * and in beforeChange, which is where modifications to the provided IDs can occur.\n */\n const newOriginalNodeIDMap: {\n [key: string]: SerializedLexicalNode\n } = {}\n\n const previousValue = siblingData[field.name]\n\n recurseNodeTree({\n nodeIDMap: newOriginalNodeIDMap,\n nodes: (previousValue as SerializedEditorState)?.root?.children ?? [],\n })\n\n if (!context.internal) {\n // Add to context, for other hooks to use\n context.internal = {}\n }\n if (!context.internal.richText) {\n context.internal.richText = {}\n }\n context.internal.richText[path.join('.')] = {\n originalNodeIDMap: newOriginalNodeIDMap,\n }\n\n return value\n },\n ],\n beforeValidate: [\n async (args) => {\n const {\n collection,\n context,\n global,\n operation,\n overrideAccess,\n path,\n previousValue,\n req,\n schemaPath,\n } = args\n let { value } = args\n if (finalSanitizedEditorConfig?.features?.hooks?.beforeValidate?.length) {\n for (const hook of finalSanitizedEditorConfig.features.hooks.beforeValidate) {\n value = await hook(args)\n }\n }\n\n // return value if there are NO hooks\n if (\n !finalSanitizedEditorConfig.features.nodeHooks.beforeValidate.size &&\n !finalSanitizedEditorConfig.features.nodeHooks.afterChange.size &&\n !finalSanitizedEditorConfig.features.nodeHooks.beforeChange.size &&\n !finalSanitizedEditorConfig.features.getSubFields.size\n ) {\n return value\n }\n\n /**\n * beforeValidate is the first field hook which runs. This is where we can create the node map, which can then be used in the other hooks.\n *\n */\n\n /**\n * flattenedNodes contains all nodes in the editor, in the order they appear in the editor. They will be used for the following hooks:\n * - afterRead\n *\n * The other hooks require nodes to have IDs, which is why those are ran only from the nodeIDMap. They require IDs because they have both doc/siblingDoc and data/siblingData, and\n * thus require a reliable way to match new node data to old node data. Given that node positions can change in between hooks, this is only reliably possible for nodes which are saved with\n * an ID.\n */\n //const flattenedNodes: SerializedLexicalNode[] = []\n\n /**\n * Only nodes with id's (so, nodes with hooks added to them) will be added to the nodeIDMap. They will be used for the following hooks:\n * - afterChange\n * - beforeChange\n * - beforeValidate\n * - beforeDuplicate\n *\n * Other hooks are handled by the flattenedNodes. All nodes in the nodeIDMap are part of flattenedNodes.\n */\n\n const originalNodeIDMap: {\n [key: string]: SerializedLexicalNode\n } = {}\n\n recurseNodeTree({\n nodeIDMap: originalNodeIDMap,\n nodes: (previousValue as SerializedEditorState)?.root?.children ?? [],\n })\n\n if (!context.internal) {\n // Add to context, for other hooks to use\n context.internal = {}\n }\n if (!(context as any).internal.richText) {\n ;(context as any).internal.richText = {}\n }\n ;(context as any).internal.richText[path.join('.')] = {\n originalNodeIDMap,\n }\n\n /**\n * Now that the maps for all hooks are set up, we can run the validate hook\n */\n if (!finalSanitizedEditorConfig.features.nodeHooks.beforeValidate.size) {\n return value\n }\n const nodeIDMap: {\n [key: string]: SerializedLexicalNode\n } = {}\n recurseNodeTree({\n //flattenedNodes,\n nodeIDMap,\n nodes: (value as SerializedEditorState)?.root?.children ?? [],\n })\n\n // eslint-disable-next-line prefer-const\n for (let [id, node] of Object.entries(nodeIDMap)) {\n const beforeValidateHooks =\n finalSanitizedEditorConfig.features.nodeHooks.beforeValidate\n if (beforeValidateHooks?.has(node.type)) {\n for (const hook of beforeValidateHooks.get(node.type)) {\n if (!originalNodeIDMap[id]) {\n console.warn(\n '(beforeValidate) No original node found for node with id',\n id,\n 'node:',\n node,\n 'path',\n path.join('.'),\n )\n continue\n }\n node = await hook({\n context,\n node,\n operation,\n originalNode: originalNodeIDMap[id],\n overrideAccess,\n parentRichTextFieldPath: path,\n parentRichTextFieldSchemaPath: schemaPath,\n req,\n })\n }\n }\n const subFieldFn = finalSanitizedEditorConfig.features.getSubFields.get(node.type)\n const subFieldDataFn = finalSanitizedEditorConfig.features.getSubFieldsData.get(\n node.type,\n )\n\n if (subFieldFn) {\n const subFields = subFieldFn({ node, req })\n const data = subFieldDataFn({ node, req }) ?? {}\n const originalData = subFieldDataFn({ node: originalNodeIDMap[id], req }) ?? {}\n\n if (subFields?.length) {\n await beforeValidateTraverseFields({\n id,\n collection,\n context,\n data,\n doc: originalData,\n fields: subFields,\n global,\n operation,\n overrideAccess,\n path,\n req,\n schemaPath,\n siblingData: data,\n siblingDoc: originalData,\n })\n }\n }\n }\n\n return value\n },\n ],\n },\n i18n: featureI18n,\n outputSchema: ({\n collectionIDFieldTypes,\n config,\n field,\n interfaceNameDefinitions,\n isRequired,\n }) => {\n let outputSchema: JSONSchema4 = {\n // This schema matches the SerializedEditorState type so far, that it's possible to cast SerializedEditorState to this schema without any errors.\n // In the future, we should\n // 1) allow recursive children\n // 2) Pass in all the different types for every node added to the editorconfig. This can be done with refs in the schema.\n type: withNullableJSONSchemaType('object', isRequired),\n properties: {\n root: {\n type: 'object',\n additionalProperties: false,\n properties: {\n type: {\n type: 'string',\n },\n children: {\n type: 'array',\n items: {\n type: 'object',\n additionalProperties: true,\n properties: {\n type: {\n type: 'string',\n },\n version: {\n type: 'integer',\n },\n },\n required: ['type', 'version'],\n },\n },\n direction: {\n oneOf: [\n {\n enum: ['ltr', 'rtl'],\n },\n {\n type: 'null',\n },\n ],\n },\n format: {\n type: 'string',\n enum: ['left', 'start', 'center', 'right', 'end', 'justify', ''], // ElementFormatType, since the root node is an element\n },\n indent: {\n type: 'integer',\n },\n version: {\n type: 'integer',\n },\n },\n required: ['children', 'direction', 'format', 'indent', 'type', 'version'],\n },\n },\n required: ['root'],\n }\n for (const modifyOutputSchema of finalSanitizedEditorConfig.features.generatedTypes\n .modifyOutputSchemas) {\n outputSchema = modifyOutputSchema({\n collectionIDFieldTypes,\n config,\n currentSchema: outputSchema,\n field,\n interfaceNameDefinitions,\n isRequired,\n })\n }\n\n return outputSchema\n },\n validate: richTextValidateHOC({\n editorConfig: finalSanitizedEditorConfig,\n }),\n }\n }\n}\n\nexport { AlignFeature } from './features/align/server/index.js'\nexport { BlockquoteFeature } from './features/blockquote/server/index.js'\nexport { BlocksFeature, type BlocksFeatureProps } from './features/blocks/server/index.js'\nexport { type BlockFields } from './features/blocks/server/nodes/BlocksNode.js'\n\nexport { LinebreakHTMLConverter } from './features/converters/html/converter/converters/linebreak.js'\nexport { ParagraphHTMLConverter } from './features/converters/html/converter/converters/paragraph.js'\n\nexport { TextHTMLConverter } from './features/converters/html/converter/converters/text.js'\nexport { defaultHTMLConverters } from './features/converters/html/converter/defaultConverters.js'\nexport {\n convertLexicalNodesToHTML,\n convertLexicalToHTML,\n} from './features/converters/html/converter/index.js'\n\nexport type { HTMLConverter } from './features/converters/html/converter/types.js'\nexport { consolidateHTMLConverters, lexicalHTML } from './features/converters/html/field/index.js'\nexport {\n HTMLConverterFeature,\n type HTMLConverterFeatureProps,\n} from './features/converters/html/index.js'\nexport { TestRecorderFeature } from './features/debug/testRecorder/server/index.js'\nexport { TreeViewFeature } from './features/debug/treeView/server/index.js'\nexport { EXPERIMENTAL_TableFeature } from './features/experimental_table/server/index.js'\nexport { BoldFeature } from './features/format/bold/feature.server.js'\nexport { InlineCodeFeature } from './features/format/inlineCode/feature.server.js'\nexport { ItalicFeature } from './features/format/italic/feature.server.js'\n\nexport { StrikethroughFeature } from './features/format/strikethrough/feature.server.js'\nexport { SubscriptFeature } from './features/format/subscript/feature.server.js'\nexport { SuperscriptFeature } from './features/format/superscript/feature.server.js'\nexport { UnderlineFeature } from './features/format/underline/feature.server.js'\nexport { HeadingFeature, type HeadingFeatureProps } from './features/heading/server/index.js'\nexport { HorizontalRuleFeature } from './features/horizontalRule/server/index.js'\nexport { IndentFeature } from './features/indent/server/index.js'\n\nexport { AutoLinkNode } from './features/link/nodes/AutoLinkNode.js'\n\nexport { LinkNode } from './features/link/nodes/LinkNode.js'\nexport type { LinkFields } from './features/link/nodes/types.js'\nexport { LinkFeature, type LinkFeatureServerProps } from './features/link/server/index.js'\nexport { ChecklistFeature } from './features/lists/checklist/server/index.js'\nexport { OrderedListFeature } from './features/lists/orderedList/server/index.js'\nexport { UnorderedListFeature } from './features/lists/unorderedList/server/index.js'\n\nexport type {\n SlateNode,\n SlateNodeConverter,\n} from './features/migrations/slateToLexical/converter/types.js'\n\nexport { ParagraphFeature } from './features/paragraph/server/index.js'\nexport {\n RelationshipFeature,\n type RelationshipFeatureProps,\n} from './features/relationship/server/index.js'\nexport {\n type RelationshipData,\n RelationshipServerNode,\n} from './features/relationship/server/nodes/RelationshipNode.js'\n\nexport { FixedToolbarFeature } from './features/toolbars/fixed/server/index.js'\nexport { InlineToolbarFeature } from './features/toolbars/inline/server/index.js'\n\nexport type { ToolbarGroup, ToolbarGroupItem } from './features/toolbars/types.js'\nexport type {\n BaseClientFeatureProps,\n ClientFeature,\n ClientFeatureProviderMap,\n FeatureProviderClient,\n FeatureProviderProviderClient,\n PluginComponent,\n PluginComponentWithAnchor,\n ResolvedClientFeature,\n ResolvedClientFeatureMap,\n SanitizedClientFeatures,\n SanitizedPlugin,\n} from './features/typesClient.js'\nexport type {\n AfterChangeNodeHook,\n AfterChangeNodeHookArgs,\n AfterReadNodeHook,\n AfterReadNodeHookArgs,\n BaseNodeHookArgs,\n BeforeChangeNodeHook,\n BeforeChangeNodeHookArgs,\n BeforeValidateNodeHook,\n BeforeValidateNodeHookArgs,\n FeatureProviderProviderServer,\n FeatureProviderServer,\n NodeValidation,\n NodeWithHooks,\n PopulationPromise,\n ResolvedServerFeature,\n ResolvedServerFeatureMap,\n SanitizedServerFeatures,\n ServerFeature,\n ServerFeatureProviderMap,\n} from './features/typesServer.js'\n\nexport { createNode } from './features/typeUtilities.js' // Only useful in feature.server.ts\n\nexport { UploadFeature } from './features/upload/server/feature.server.js'\n\nexport type { UploadFeatureProps } from './features/upload/server/feature.server.js'\nexport { type UploadData, UploadServerNode } from './features/upload/server/nodes/UploadNode.js'\n\nexport type { EditorConfigContextType } from './lexical/config/client/EditorConfigProvider.js'\nexport {\n defaultEditorConfig,\n defaultEditorFeatures,\n defaultEditorLexicalConfig,\n} from './lexical/config/server/default.js'\n\nexport { loadFeatures, sortFeaturesForOptimalLoading } from './lexical/config/server/loader.js'\nexport {\n sanitizeServerEditorConfig,\n sanitizeServerFeatures,\n} from './lexical/config/server/sanitize.js'\n\nexport type {\n ClientEditorConfig,\n SanitizedClientEditorConfig,\n SanitizedServerEditorConfig,\n ServerEditorConfig,\n} from './lexical/config/types.js'\nexport { getEnabledNodes } from './lexical/nodes/index.js'\nexport type { AdapterProps }\n\nexport type {\n SlashMenuGroup,\n SlashMenuItem,\n} from './lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/types.js'\n\nexport {\n DETAIL_TYPE_TO_DETAIL,\n DOUBLE_LINE_BREAK,\n ELEMENT_FORMAT_TO_TYPE,\n ELEMENT_TYPE_TO_FORMAT,\n IS_ALL_FORMATTING,\n LTR_REGEX,\n NodeFormat,\n NON_BREAKING_SPACE,\n RTL_REGEX,\n TEXT_MODE_TO_TYPE,\n TEXT_TYPE_TO_FORMAT,\n TEXT_TYPE_TO_MODE,\n} from './lexical/utils/nodeFormat.js'\nexport { sanitizeUrl, validateUrl } from './lexical/utils/url.js'\n\nexport type * from './nodeTypes.js'\n\nexport { defaultRichTextValue } from './populateGraphQL/defaultValue.js'\n\nexport { populate } from './populateGraphQL/populate.js'\nexport type { LexicalEditorProps, LexicalRichTextAdapter } from './types.js'\nexport { createServerFeature } from './utilities/createServerFeature.js'\n\nexport type { FieldsDrawerProps } from './utilities/fieldsDrawer/Drawer.js'\nexport { upgradeLexicalData } from './utilities/upgradeLexicalData/index.js'\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"index.js","names":["afterChangeTraverseFields","afterReadTraverseFields","beforeChangeTraverseFields","beforeValidateTraverseFields","checkDependencies","deepCopyObject","deepCopyObjectSimple","withNullableJSONSchemaType","i18n","defaultEditorConfig","defaultEditorFeatures","loadFeatures","sanitizeServerEditorConfig","sanitizeServerFeatures","populateLexicalPopulationPromises","getGenerateImportMap","getGenerateSchemaMap","recurseNodeTree","richTextValidateHOC","defaultSanitizedServerEditorConfig","lexicalEditor","props","config","isRoot","parentIsLocalized","process","env","NODE_ENV","PAYLOAD_DISABLE_DEPENDENCY_CHECKER","dependencyGroups","name","dependencies","targetVersion","features","resolvedFeatureMap","finalSanitizedEditorConfig","lexical","rootEditor","editor","rootEditorFeatures","defaultFeatures","rootFeatures","unSanitizedEditorConfig","featureI18n","lang","general","CellComponent","clientProps","admin","lexicalEditorConfig","path","editorConfig","FieldComponent","generateComponentMap","serverProps","generateImportMap","generateSchemaMap","graphQLPopulationPromises","context","currentDepth","depth","draft","field","fieldPromises","findMany","flattenLocales","overrideAccess","populationPromises","req","showHiddenFields","siblingDoc","size","editorPopulationPromises","hooks","afterChange","args","collection","_context","global","operation","schemaPath","value","length","hook","nodeHooks","getSubFields","nodeIDMap","originalNodeIDMap","internal","richText","join","Object","keys","nodes","root","children","id","node","entries","afterChangeHooks","has","type","get","console","warn","originalNode","parentRichTextFieldPath","parentRichTextFieldSchemaPath","subFieldFn","subFieldDataFn","getSubFieldsData","subFields","data","originalData","doc","fields","previousDoc","previousSiblingDoc","siblingData","afterRead","fallbackLocale","locale","triggerAccessControl","triggerHooks","flattenedNodes","afterReadHooks","beforeChange","errors","mergeLocaleActions","siblingDocWithLocales","skipValidation","originalNodeWithLocalesIDMap","beforeChangeHooks","originalNodeWithLocales","originalDataWithLocales","docWithLocales","newOriginalNodeIDMap","previousValue","beforeValidate","beforeValidateHooks","outputSchema","collectionIDFieldTypes","interfaceNameDefinitions","isRequired","properties","additionalProperties","items","version","required","direction","oneOf","enum","format","indent","modifyOutputSchema","generatedTypes","modifyOutputSchemas","currentSchema","validate","AlignFeature","BlockquoteFeature","BlocksFeature","LinebreakHTMLConverter","ParagraphHTMLConverter","TextHTMLConverter","defaultHTMLConverters","convertLexicalNodesToHTML","convertLexicalToHTML","consolidateHTMLConverters","lexicalHTML","HTMLConverterFeature","TestRecorderFeature","TreeViewFeature","EXPERIMENTAL_TableFeature","BoldFeature","InlineCodeFeature","ItalicFeature","StrikethroughFeature","SubscriptFeature","SuperscriptFeature","UnderlineFeature","HeadingFeature","HorizontalRuleFeature","IndentFeature","AutoLinkNode","LinkNode","LinkFeature","ChecklistFeature","OrderedListFeature","UnorderedListFeature","ParagraphFeature","RelationshipFeature","RelationshipServerNode","FixedToolbarFeature","InlineToolbarFeature","createNode","UploadFeature","UploadServerNode","defaultEditorLexicalConfig","sortFeaturesForOptimalLoading","getEnabledNodes","DETAIL_TYPE_TO_DETAIL","DOUBLE_LINE_BREAK","ELEMENT_FORMAT_TO_TYPE","ELEMENT_TYPE_TO_FORMAT","IS_ALL_FORMATTING","LTR_REGEX","NodeFormat","NON_BREAKING_SPACE","RTL_REGEX","TEXT_MODE_TO_TYPE","TEXT_TYPE_TO_FORMAT","TEXT_TYPE_TO_MODE","sanitizeUrl","validateUrl","defaultRichTextValue","populate","createServerFeature","upgradeLexicalData"],"sources":["../src/index.ts"],"sourcesContent":["import type { JSONSchema4 } from 'json-schema'\nimport type {\n EditorConfig as LexicalEditorConfig,\n SerializedEditorState,\n SerializedLexicalNode,\n} from 'lexical'\n\nimport {\n afterChangeTraverseFields,\n afterReadTraverseFields,\n beforeChangeTraverseFields,\n beforeValidateTraverseFields,\n checkDependencies,\n deepCopyObject,\n deepCopyObjectSimple,\n withNullableJSONSchemaType,\n} from 'payload'\n\nimport type { FeatureProviderServer, ResolvedServerFeatureMap } from './features/typesServer.js'\nimport type { SanitizedServerEditorConfig } from './lexical/config/types.js'\nimport type {\n AdapterProps,\n LexicalEditorProps,\n LexicalRichTextAdapter,\n LexicalRichTextAdapterProvider,\n} from './types.js'\n\nimport { i18n } from './i18n.js'\nimport { defaultEditorConfig, defaultEditorFeatures } from './lexical/config/server/default.js'\nimport { loadFeatures } from './lexical/config/server/loader.js'\nimport {\n sanitizeServerEditorConfig,\n sanitizeServerFeatures,\n} from './lexical/config/server/sanitize.js'\nimport { populateLexicalPopulationPromises } from './populateGraphQL/populateLexicalPopulationPromises.js'\nimport { getGenerateImportMap } from './utilities/generateImportMap.js'\nimport { getGenerateSchemaMap } from './utilities/generateSchemaMap.js'\nimport { recurseNodeTree } from './utilities/recurseNodeTree.js'\nimport { richTextValidateHOC } from './validate/index.js'\n\nlet defaultSanitizedServerEditorConfig: SanitizedServerEditorConfig = null\n\nexport function lexicalEditor(props?: LexicalEditorProps): LexicalRichTextAdapterProvider {\n return async ({ config, isRoot, parentIsLocalized }) => {\n if (\n process.env.NODE_ENV !== 'production' &&\n process.env.PAYLOAD_DISABLE_DEPENDENCY_CHECKER !== 'true'\n ) {\n await checkDependencies({\n dependencyGroups: [\n {\n name: 'lexical',\n dependencies: [\n 'lexical',\n '@lexical/headless',\n '@lexical/link',\n '@lexical/list',\n '@lexical/mark',\n '@lexical/markdown',\n '@lexical/react',\n '@lexical/rich-text',\n '@lexical/selection',\n '@lexical/utils',\n ],\n targetVersion: '0.17.0',\n },\n ],\n })\n }\n\n let features: FeatureProviderServer<any, any, any>[] = []\n let resolvedFeatureMap: ResolvedServerFeatureMap\n\n let finalSanitizedEditorConfig: SanitizedServerEditorConfig // For server only\n if (!props || (!props.features && !props.lexical)) {\n if (!defaultSanitizedServerEditorConfig) {\n defaultSanitizedServerEditorConfig = await sanitizeServerEditorConfig(\n defaultEditorConfig,\n config,\n parentIsLocalized,\n )\n features = deepCopyObject(defaultEditorFeatures)\n }\n\n finalSanitizedEditorConfig = deepCopyObject(defaultSanitizedServerEditorConfig)\n\n resolvedFeatureMap = finalSanitizedEditorConfig.resolvedFeatureMap\n } else {\n const rootEditor = config.editor\n let rootEditorFeatures: FeatureProviderServer<unknown, unknown, unknown>[] = []\n if (typeof rootEditor === 'object' && 'features' in rootEditor) {\n rootEditorFeatures = (rootEditor as LexicalRichTextAdapter).features\n }\n\n features =\n props.features && typeof props.features === 'function'\n ? props.features({\n defaultFeatures: deepCopyObject(defaultEditorFeatures),\n rootFeatures: rootEditorFeatures,\n })\n : (props.features as FeatureProviderServer<unknown, unknown, unknown>[])\n if (!features) {\n features = deepCopyObject(defaultEditorFeatures)\n }\n\n const lexical: LexicalEditorConfig =\n props.lexical ?? deepCopyObjectSimple(defaultEditorConfig.lexical)\n\n resolvedFeatureMap = await loadFeatures({\n config,\n isRoot,\n parentIsLocalized,\n unSanitizedEditorConfig: {\n features,\n lexical,\n },\n })\n\n finalSanitizedEditorConfig = {\n features: sanitizeServerFeatures(resolvedFeatureMap),\n lexical,\n resolvedFeatureMap,\n }\n }\n\n const featureI18n = finalSanitizedEditorConfig.features.i18n\n for (const lang in i18n) {\n if (!featureI18n[lang]) {\n featureI18n[lang] = {\n lexical: {},\n }\n }\n\n featureI18n[lang].lexical.general = i18n[lang]\n }\n\n return {\n CellComponent: {\n clientProps: {\n admin: props?.admin,\n lexicalEditorConfig: finalSanitizedEditorConfig.lexical,\n },\n path: '@payloadcms/richtext-lexical/client#RichTextCell',\n },\n editorConfig: finalSanitizedEditorConfig,\n features,\n FieldComponent: {\n clientProps: {\n admin: props?.admin,\n lexicalEditorConfig: finalSanitizedEditorConfig.lexical,\n },\n path: '@payloadcms/richtext-lexical/client#RichTextField',\n },\n generateComponentMap: {\n path: '@payloadcms/richtext-lexical/generateComponentMap#getGenerateComponentMap',\n serverProps: {\n resolvedFeatureMap,\n },\n },\n generateImportMap: getGenerateImportMap({\n resolvedFeatureMap,\n }),\n generateSchemaMap: getGenerateSchemaMap({\n resolvedFeatureMap,\n }),\n graphQLPopulationPromises({\n context,\n currentDepth,\n depth,\n draft,\n field,\n fieldPromises,\n findMany,\n flattenLocales,\n overrideAccess,\n populationPromises,\n req,\n showHiddenFields,\n siblingDoc,\n }) {\n // check if there are any features with nodes which have populationPromises for this field\n if (finalSanitizedEditorConfig?.features?.graphQLPopulationPromises?.size) {\n populateLexicalPopulationPromises({\n context,\n currentDepth: currentDepth ?? 0,\n depth,\n draft,\n editorPopulationPromises: finalSanitizedEditorConfig.features.graphQLPopulationPromises,\n field,\n fieldPromises,\n findMany,\n flattenLocales,\n overrideAccess,\n populationPromises,\n req,\n showHiddenFields,\n siblingDoc,\n })\n }\n },\n hooks: {\n afterChange: [\n async (args) => {\n const { collection, context: _context, global, operation, path, req, schemaPath } = args\n let { value } = args\n if (finalSanitizedEditorConfig?.features?.hooks?.afterChange?.length) {\n for (const hook of finalSanitizedEditorConfig.features.hooks.afterChange) {\n value = await hook(args)\n }\n }\n if (\n !finalSanitizedEditorConfig.features.nodeHooks.afterChange.size &&\n !finalSanitizedEditorConfig.features.getSubFields.size\n ) {\n return value\n }\n const context: any = _context\n const nodeIDMap: {\n [key: string]: SerializedLexicalNode\n } = {}\n\n /**\n * Get the originalNodeIDMap from the beforeValidate hook, which is always run before this hook.\n */\n const originalNodeIDMap: {\n [key: string]: SerializedLexicalNode\n } = context?.internal?.richText?.[path.join('.')]?.originalNodeIDMap\n\n if (!originalNodeIDMap || !Object.keys(originalNodeIDMap).length || !value) {\n return value\n }\n\n recurseNodeTree({\n nodeIDMap,\n nodes: (value as SerializedEditorState)?.root?.children ?? [],\n })\n\n // eslint-disable-next-line prefer-const\n for (let [id, node] of Object.entries(nodeIDMap)) {\n const afterChangeHooks = finalSanitizedEditorConfig.features.nodeHooks.afterChange\n if (afterChangeHooks?.has(node.type)) {\n for (const hook of afterChangeHooks.get(node.type)) {\n if (!originalNodeIDMap[id]) {\n console.warn(\n '(afterChange) No original node found for node with id',\n id,\n 'node:',\n node,\n 'path',\n path.join('.'),\n )\n continue\n }\n node = await hook({\n context,\n node,\n operation,\n originalNode: originalNodeIDMap[id],\n parentRichTextFieldPath: path,\n parentRichTextFieldSchemaPath: schemaPath,\n req,\n })\n }\n }\n const subFieldFn = finalSanitizedEditorConfig.features.getSubFields.get(node.type)\n const subFieldDataFn = finalSanitizedEditorConfig.features.getSubFieldsData.get(\n node.type,\n )\n\n if (subFieldFn) {\n const subFields = subFieldFn({ node, req })\n const data = subFieldDataFn({ node, req }) ?? {}\n const originalData = subFieldDataFn({ node: originalNodeIDMap[id], req }) ?? {}\n\n if (subFields?.length) {\n await afterChangeTraverseFields({\n collection,\n context,\n data: originalData,\n doc: data,\n fields: subFields,\n global,\n operation,\n path,\n previousDoc: data,\n previousSiblingDoc: { ...data },\n req,\n schemaPath,\n siblingData: originalData || {},\n siblingDoc: { ...data },\n })\n }\n }\n }\n return value\n },\n ],\n afterRead: [\n /**\n * afterRead hooks do not receive the originalNode. Thus, they can run on all nodes, not just nodes with an ID.\n */\n async (args) => {\n const {\n collection,\n context: context,\n currentDepth,\n depth,\n draft,\n fallbackLocale,\n fieldPromises,\n findMany,\n flattenLocales,\n global,\n locale,\n overrideAccess,\n path,\n populationPromises,\n req,\n schemaPath,\n showHiddenFields,\n triggerAccessControl,\n triggerHooks,\n } = args\n let { value } = args\n\n if (finalSanitizedEditorConfig?.features?.hooks?.afterRead?.length) {\n for (const hook of finalSanitizedEditorConfig.features.hooks.afterRead) {\n value = await hook(args)\n }\n }\n\n if (\n !finalSanitizedEditorConfig.features.nodeHooks.afterRead.size &&\n !finalSanitizedEditorConfig.features.getSubFields.size\n ) {\n return value\n }\n const flattenedNodes: SerializedLexicalNode[] = []\n\n recurseNodeTree({\n flattenedNodes,\n nodes: (value as SerializedEditorState)?.root?.children ?? [],\n })\n\n for (let node of flattenedNodes) {\n const afterReadHooks = finalSanitizedEditorConfig.features.nodeHooks.afterRead\n if (afterReadHooks?.has(node.type)) {\n for (const hook of afterReadHooks.get(node.type)) {\n node = await hook({\n context,\n currentDepth,\n depth,\n draft,\n fallbackLocale,\n fieldPromises,\n findMany,\n flattenLocales,\n locale,\n node,\n overrideAccess,\n parentRichTextFieldPath: path,\n parentRichTextFieldSchemaPath: schemaPath,\n populationPromises,\n req,\n showHiddenFields,\n triggerAccessControl,\n triggerHooks,\n })\n }\n }\n const subFieldFn = finalSanitizedEditorConfig.features.getSubFields.get(node.type)\n const subFieldDataFn = finalSanitizedEditorConfig.features.getSubFieldsData.get(\n node.type,\n )\n\n if (subFieldFn) {\n const subFields = subFieldFn({ node, req })\n const data = subFieldDataFn({ node, req }) ?? {}\n\n if (subFields?.length) {\n afterReadTraverseFields({\n collection,\n context,\n currentDepth,\n depth,\n doc: data,\n draft,\n fallbackLocale,\n fieldPromises,\n fields: subFields,\n findMany,\n flattenLocales,\n global,\n locale,\n overrideAccess,\n path,\n populationPromises,\n req,\n schemaPath,\n showHiddenFields,\n siblingDoc: data,\n triggerAccessControl,\n triggerHooks,\n })\n }\n }\n }\n\n return value\n },\n ],\n beforeChange: [\n async (args) => {\n const {\n collection,\n context: _context,\n errors,\n field,\n global,\n mergeLocaleActions,\n operation,\n path,\n req,\n schemaPath,\n siblingData,\n siblingDocWithLocales,\n skipValidation,\n } = args\n let { value } = args\n\n if (finalSanitizedEditorConfig?.features?.hooks?.beforeChange?.length) {\n for (const hook of finalSanitizedEditorConfig.features.hooks.beforeChange) {\n value = await hook(args)\n }\n }\n\n if (\n !finalSanitizedEditorConfig.features.nodeHooks.beforeChange.size &&\n !finalSanitizedEditorConfig.features.getSubFields.size\n ) {\n return value\n }\n\n const context: any = _context\n const nodeIDMap: {\n [key: string]: SerializedLexicalNode\n } = {}\n\n /**\n * Get the originalNodeIDMap from the beforeValidate hook, which is always run before this hook.\n */\n const originalNodeIDMap: {\n [key: string]: SerializedLexicalNode\n } = context?.internal?.richText?.[path.join('.')]?.originalNodeIDMap\n\n if (!originalNodeIDMap || !Object.keys(originalNodeIDMap).length || !value) {\n return value\n }\n\n const originalNodeWithLocalesIDMap: {\n [key: string]: SerializedLexicalNode\n } = {}\n\n recurseNodeTree({\n nodeIDMap,\n nodes: (value as SerializedEditorState)?.root?.children ?? [],\n })\n\n if (siblingDocWithLocales?.[field.name]) {\n recurseNodeTree({\n nodeIDMap: originalNodeWithLocalesIDMap,\n nodes:\n (siblingDocWithLocales[field.name] as SerializedEditorState)?.root?.children ??\n [],\n })\n }\n\n // eslint-disable-next-line prefer-const\n for (let [id, node] of Object.entries(nodeIDMap)) {\n const beforeChangeHooks = finalSanitizedEditorConfig.features.nodeHooks.beforeChange\n if (beforeChangeHooks?.has(node.type)) {\n for (const hook of beforeChangeHooks.get(node.type)) {\n if (!originalNodeIDMap[id]) {\n console.warn(\n '(beforeChange) No original node found for node with id',\n id,\n 'node:',\n node,\n 'path',\n path.join('.'),\n )\n continue\n }\n node = await hook({\n context,\n errors,\n mergeLocaleActions,\n node,\n operation,\n originalNode: originalNodeIDMap[id],\n originalNodeWithLocales: originalNodeWithLocalesIDMap[id],\n parentRichTextFieldPath: path,\n parentRichTextFieldSchemaPath: schemaPath,\n req,\n skipValidation,\n })\n }\n }\n\n const subFieldFn = finalSanitizedEditorConfig.features.getSubFields.get(node.type)\n const subFieldDataFn = finalSanitizedEditorConfig.features.getSubFieldsData.get(\n node.type,\n )\n\n if (subFieldFn) {\n const subFields = subFieldFn({ node, req })\n const data = subFieldDataFn({ node, req }) ?? {}\n const originalData = subFieldDataFn({ node: originalNodeIDMap[id], req }) ?? {}\n const originalDataWithLocales =\n subFieldDataFn({\n node: originalNodeWithLocalesIDMap[id],\n req,\n }) ?? {}\n\n if (subFields?.length) {\n await beforeChangeTraverseFields({\n id,\n collection,\n context,\n data,\n doc: originalData,\n docWithLocales: originalDataWithLocales ?? {},\n errors,\n fields: subFields,\n global,\n mergeLocaleActions,\n operation,\n path,\n req,\n schemaPath,\n siblingData: data,\n siblingDoc: originalData,\n siblingDocWithLocales: originalDataWithLocales ?? {},\n skipValidation,\n })\n }\n }\n }\n\n /**\n * within the beforeChange hook, id's may be re-generated.\n * Example:\n * 1. Seed data contains IDs for block feature blocks.\n * 2. Those are used in beforeValidate\n * 3. in beforeChange, those IDs are regenerated, because you cannot provide IDs during document creation. See baseIDField beforeChange hook for reasoning\n * 4. Thus, in order for all post-beforeChange hooks to receive the correct ID, we need to update the originalNodeIDMap with the new ID's, by regenerating the nodeIDMap.\n * The reason this is not generated for every hook, is to save on performance. We know we only really have to generate it in beforeValidate, which is the first hook,\n * and in beforeChange, which is where modifications to the provided IDs can occur.\n */\n const newOriginalNodeIDMap: {\n [key: string]: SerializedLexicalNode\n } = {}\n\n const previousValue = siblingData[field.name]\n\n recurseNodeTree({\n nodeIDMap: newOriginalNodeIDMap,\n nodes: (previousValue as SerializedEditorState)?.root?.children ?? [],\n })\n\n if (!context.internal) {\n // Add to context, for other hooks to use\n context.internal = {}\n }\n if (!context.internal.richText) {\n context.internal.richText = {}\n }\n context.internal.richText[path.join('.')] = {\n originalNodeIDMap: newOriginalNodeIDMap,\n }\n\n return value\n },\n ],\n beforeValidate: [\n async (args) => {\n const {\n collection,\n context,\n global,\n operation,\n overrideAccess,\n path,\n previousValue,\n req,\n schemaPath,\n } = args\n let { value } = args\n if (finalSanitizedEditorConfig?.features?.hooks?.beforeValidate?.length) {\n for (const hook of finalSanitizedEditorConfig.features.hooks.beforeValidate) {\n value = await hook(args)\n }\n }\n\n // return value if there are NO hooks\n if (\n !finalSanitizedEditorConfig.features.nodeHooks.beforeValidate.size &&\n !finalSanitizedEditorConfig.features.nodeHooks.afterChange.size &&\n !finalSanitizedEditorConfig.features.nodeHooks.beforeChange.size &&\n !finalSanitizedEditorConfig.features.getSubFields.size\n ) {\n return value\n }\n\n /**\n * beforeValidate is the first field hook which runs. This is where we can create the node map, which can then be used in the other hooks.\n *\n */\n\n /**\n * flattenedNodes contains all nodes in the editor, in the order they appear in the editor. They will be used for the following hooks:\n * - afterRead\n *\n * The other hooks require nodes to have IDs, which is why those are ran only from the nodeIDMap. They require IDs because they have both doc/siblingDoc and data/siblingData, and\n * thus require a reliable way to match new node data to old node data. Given that node positions can change in between hooks, this is only reliably possible for nodes which are saved with\n * an ID.\n */\n //const flattenedNodes: SerializedLexicalNode[] = []\n\n /**\n * Only nodes with id's (so, nodes with hooks added to them) will be added to the nodeIDMap. They will be used for the following hooks:\n * - afterChange\n * - beforeChange\n * - beforeValidate\n *\n * Other hooks are handled by the flattenedNodes. All nodes in the nodeIDMap are part of flattenedNodes.\n */\n\n const originalNodeIDMap: {\n [key: string]: SerializedLexicalNode\n } = {}\n\n recurseNodeTree({\n nodeIDMap: originalNodeIDMap,\n nodes: (previousValue as SerializedEditorState)?.root?.children ?? [],\n })\n\n if (!context.internal) {\n // Add to context, for other hooks to use\n context.internal = {}\n }\n if (!(context as any).internal.richText) {\n ;(context as any).internal.richText = {}\n }\n ;(context as any).internal.richText[path.join('.')] = {\n originalNodeIDMap,\n }\n\n /**\n * Now that the maps for all hooks are set up, we can run the validate hook\n */\n if (!finalSanitizedEditorConfig.features.nodeHooks.beforeValidate.size) {\n return value\n }\n const nodeIDMap: {\n [key: string]: SerializedLexicalNode\n } = {}\n recurseNodeTree({\n //flattenedNodes,\n nodeIDMap,\n nodes: (value as SerializedEditorState)?.root?.children ?? [],\n })\n\n // eslint-disable-next-line prefer-const\n for (let [id, node] of Object.entries(nodeIDMap)) {\n const beforeValidateHooks =\n finalSanitizedEditorConfig.features.nodeHooks.beforeValidate\n if (beforeValidateHooks?.has(node.type)) {\n for (const hook of beforeValidateHooks.get(node.type)) {\n if (!originalNodeIDMap[id]) {\n console.warn(\n '(beforeValidate) No original node found for node with id',\n id,\n 'node:',\n node,\n 'path',\n path.join('.'),\n )\n continue\n }\n node = await hook({\n context,\n node,\n operation,\n originalNode: originalNodeIDMap[id],\n overrideAccess,\n parentRichTextFieldPath: path,\n parentRichTextFieldSchemaPath: schemaPath,\n req,\n })\n }\n }\n const subFieldFn = finalSanitizedEditorConfig.features.getSubFields.get(node.type)\n const subFieldDataFn = finalSanitizedEditorConfig.features.getSubFieldsData.get(\n node.type,\n )\n\n if (subFieldFn) {\n const subFields = subFieldFn({ node, req })\n const data = subFieldDataFn({ node, req }) ?? {}\n const originalData = subFieldDataFn({ node: originalNodeIDMap[id], req }) ?? {}\n\n if (subFields?.length) {\n await beforeValidateTraverseFields({\n id,\n collection,\n context,\n data,\n doc: originalData,\n fields: subFields,\n global,\n operation,\n overrideAccess,\n path,\n req,\n schemaPath,\n siblingData: data,\n siblingDoc: originalData,\n })\n }\n }\n }\n\n return value\n },\n ],\n },\n i18n: featureI18n,\n outputSchema: ({\n collectionIDFieldTypes,\n config,\n field,\n interfaceNameDefinitions,\n isRequired,\n }) => {\n let outputSchema: JSONSchema4 = {\n // This schema matches the SerializedEditorState type so far, that it's possible to cast SerializedEditorState to this schema without any errors.\n // In the future, we should\n // 1) allow recursive children\n // 2) Pass in all the different types for every node added to the editorconfig. This can be done with refs in the schema.\n type: withNullableJSONSchemaType('object', isRequired),\n properties: {\n root: {\n type: 'object',\n additionalProperties: false,\n properties: {\n type: {\n type: 'string',\n },\n children: {\n type: 'array',\n items: {\n type: 'object',\n additionalProperties: true,\n properties: {\n type: {\n type: 'string',\n },\n version: {\n type: 'integer',\n },\n },\n required: ['type', 'version'],\n },\n },\n direction: {\n oneOf: [\n {\n enum: ['ltr', 'rtl'],\n },\n {\n type: 'null',\n },\n ],\n },\n format: {\n type: 'string',\n enum: ['left', 'start', 'center', 'right', 'end', 'justify', ''], // ElementFormatType, since the root node is an element\n },\n indent: {\n type: 'integer',\n },\n version: {\n type: 'integer',\n },\n },\n required: ['children', 'direction', 'format', 'indent', 'type', 'version'],\n },\n },\n required: ['root'],\n }\n for (const modifyOutputSchema of finalSanitizedEditorConfig.features.generatedTypes\n .modifyOutputSchemas) {\n outputSchema = modifyOutputSchema({\n collectionIDFieldTypes,\n config,\n currentSchema: outputSchema,\n field,\n interfaceNameDefinitions,\n isRequired,\n })\n }\n\n return outputSchema\n },\n validate: richTextValidateHOC({\n editorConfig: finalSanitizedEditorConfig,\n }),\n }\n }\n}\n\nexport { AlignFeature } from './features/align/server/index.js'\nexport { BlockquoteFeature } from './features/blockquote/server/index.js'\nexport { BlocksFeature, type BlocksFeatureProps } from './features/blocks/server/index.js'\nexport { type BlockFields } from './features/blocks/server/nodes/BlocksNode.js'\n\nexport { LinebreakHTMLConverter } from './features/converters/html/converter/converters/linebreak.js'\nexport { ParagraphHTMLConverter } from './features/converters/html/converter/converters/paragraph.js'\n\nexport { TextHTMLConverter } from './features/converters/html/converter/converters/text.js'\nexport { defaultHTMLConverters } from './features/converters/html/converter/defaultConverters.js'\nexport {\n convertLexicalNodesToHTML,\n convertLexicalToHTML,\n} from './features/converters/html/converter/index.js'\n\nexport type { HTMLConverter } from './features/converters/html/converter/types.js'\nexport { consolidateHTMLConverters, lexicalHTML } from './features/converters/html/field/index.js'\nexport {\n HTMLConverterFeature,\n type HTMLConverterFeatureProps,\n} from './features/converters/html/index.js'\nexport { TestRecorderFeature } from './features/debug/testRecorder/server/index.js'\nexport { TreeViewFeature } from './features/debug/treeView/server/index.js'\nexport { EXPERIMENTAL_TableFeature } from './features/experimental_table/server/index.js'\nexport { BoldFeature } from './features/format/bold/feature.server.js'\nexport { InlineCodeFeature } from './features/format/inlineCode/feature.server.js'\nexport { ItalicFeature } from './features/format/italic/feature.server.js'\n\nexport { StrikethroughFeature } from './features/format/strikethrough/feature.server.js'\nexport { SubscriptFeature } from './features/format/subscript/feature.server.js'\nexport { SuperscriptFeature } from './features/format/superscript/feature.server.js'\nexport { UnderlineFeature } from './features/format/underline/feature.server.js'\nexport { HeadingFeature, type HeadingFeatureProps } from './features/heading/server/index.js'\nexport { HorizontalRuleFeature } from './features/horizontalRule/server/index.js'\nexport { IndentFeature } from './features/indent/server/index.js'\n\nexport { AutoLinkNode } from './features/link/nodes/AutoLinkNode.js'\n\nexport { LinkNode } from './features/link/nodes/LinkNode.js'\nexport type { LinkFields } from './features/link/nodes/types.js'\nexport { LinkFeature, type LinkFeatureServerProps } from './features/link/server/index.js'\nexport { ChecklistFeature } from './features/lists/checklist/server/index.js'\nexport { OrderedListFeature } from './features/lists/orderedList/server/index.js'\nexport { UnorderedListFeature } from './features/lists/unorderedList/server/index.js'\n\nexport type {\n SlateNode,\n SlateNodeConverter,\n} from './features/migrations/slateToLexical/converter/types.js'\n\nexport { ParagraphFeature } from './features/paragraph/server/index.js'\nexport {\n RelationshipFeature,\n type RelationshipFeatureProps,\n} from './features/relationship/server/index.js'\nexport {\n type RelationshipData,\n RelationshipServerNode,\n} from './features/relationship/server/nodes/RelationshipNode.js'\n\nexport { FixedToolbarFeature } from './features/toolbars/fixed/server/index.js'\nexport { InlineToolbarFeature } from './features/toolbars/inline/server/index.js'\n\nexport type { ToolbarGroup, ToolbarGroupItem } from './features/toolbars/types.js'\nexport type {\n BaseClientFeatureProps,\n ClientFeature,\n ClientFeatureProviderMap,\n FeatureProviderClient,\n FeatureProviderProviderClient,\n PluginComponent,\n PluginComponentWithAnchor,\n ResolvedClientFeature,\n ResolvedClientFeatureMap,\n SanitizedClientFeatures,\n SanitizedPlugin,\n} from './features/typesClient.js'\nexport type {\n AfterChangeNodeHook,\n AfterChangeNodeHookArgs,\n AfterReadNodeHook,\n AfterReadNodeHookArgs,\n BaseNodeHookArgs,\n BeforeChangeNodeHook,\n BeforeChangeNodeHookArgs,\n BeforeValidateNodeHook,\n BeforeValidateNodeHookArgs,\n FeatureProviderProviderServer,\n FeatureProviderServer,\n NodeValidation,\n NodeWithHooks,\n PopulationPromise,\n ResolvedServerFeature,\n ResolvedServerFeatureMap,\n SanitizedServerFeatures,\n ServerFeature,\n ServerFeatureProviderMap,\n} from './features/typesServer.js'\n\nexport { createNode } from './features/typeUtilities.js' // Only useful in feature.server.ts\n\nexport { UploadFeature } from './features/upload/server/feature.server.js'\n\nexport type { UploadFeatureProps } from './features/upload/server/feature.server.js'\nexport { type UploadData, UploadServerNode } from './features/upload/server/nodes/UploadNode.js'\n\nexport type { EditorConfigContextType } from './lexical/config/client/EditorConfigProvider.js'\nexport {\n defaultEditorConfig,\n defaultEditorFeatures,\n defaultEditorLexicalConfig,\n} from './lexical/config/server/default.js'\n\nexport { loadFeatures, sortFeaturesForOptimalLoading } from './lexical/config/server/loader.js'\nexport {\n sanitizeServerEditorConfig,\n sanitizeServerFeatures,\n} from './lexical/config/server/sanitize.js'\n\nexport type {\n ClientEditorConfig,\n SanitizedClientEditorConfig,\n SanitizedServerEditorConfig,\n ServerEditorConfig,\n} from './lexical/config/types.js'\nexport { getEnabledNodes } from './lexical/nodes/index.js'\nexport type { AdapterProps }\n\nexport type {\n SlashMenuGroup,\n SlashMenuItem,\n} from './lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/types.js'\n\nexport {\n DETAIL_TYPE_TO_DETAIL,\n DOUBLE_LINE_BREAK,\n ELEMENT_FORMAT_TO_TYPE,\n ELEMENT_TYPE_TO_FORMAT,\n IS_ALL_FORMATTING,\n LTR_REGEX,\n NodeFormat,\n NON_BREAKING_SPACE,\n RTL_REGEX,\n TEXT_MODE_TO_TYPE,\n TEXT_TYPE_TO_FORMAT,\n TEXT_TYPE_TO_MODE,\n} from './lexical/utils/nodeFormat.js'\nexport { sanitizeUrl, validateUrl } from './lexical/utils/url.js'\n\nexport type * from './nodeTypes.js'\n\nexport { defaultRichTextValue } from './populateGraphQL/defaultValue.js'\n\nexport { populate } from './populateGraphQL/populate.js'\nexport type { LexicalEditorProps, LexicalRichTextAdapter } from './types.js'\nexport { createServerFeature } from './utilities/createServerFeature.js'\n\nexport type { FieldsDrawerProps } from './utilities/fieldsDrawer/Drawer.js'\nexport { upgradeLexicalData } from './utilities/upgradeLexicalData/index.js'\n"],"mappings":"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","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@payloadcms/richtext-lexical",
|
|
3
|
-
"version": "3.0.0-beta.
|
|
3
|
+
"version": "3.0.0-beta.106",
|
|
4
4
|
"description": "The officially supported Lexical richtext adapter for Payload",
|
|
5
5
|
"homepage": "https://payloadcms.com",
|
|
6
6
|
"repository": {
|
|
@@ -56,8 +56,8 @@
|
|
|
56
56
|
"lexical": "0.17.0",
|
|
57
57
|
"react-error-boundary": "4.0.13",
|
|
58
58
|
"uuid": "10.0.0",
|
|
59
|
-
"@payloadcms/translations": "3.0.0-beta.
|
|
60
|
-
"@payloadcms/ui": "3.0.0-beta.
|
|
59
|
+
"@payloadcms/translations": "3.0.0-beta.106",
|
|
60
|
+
"@payloadcms/ui": "3.0.0-beta.106"
|
|
61
61
|
},
|
|
62
62
|
"devDependencies": {
|
|
63
63
|
"@babel/cli": "^7.24.5",
|
|
@@ -68,7 +68,7 @@
|
|
|
68
68
|
"@lexical/eslint-plugin": "0.17.0",
|
|
69
69
|
"@types/escape-html": "1.0.4",
|
|
70
70
|
"@types/json-schema": "7.0.15",
|
|
71
|
-
"@types/node": "
|
|
71
|
+
"@types/node": "22.5.4",
|
|
72
72
|
"@types/react": "npm:types-react@19.0.0-rc.0",
|
|
73
73
|
"@types/react-dom": "npm:types-react-dom@19.0.0-rc.0",
|
|
74
74
|
"babel-plugin-react-compiler": "0.0.0-experimental-48eb8f4-20240822",
|
|
@@ -77,8 +77,8 @@
|
|
|
77
77
|
"esbuild-sass-plugin": "3.3.1",
|
|
78
78
|
"eslint-plugin-react-compiler": "0.0.0-experimental-72f06b2-20240822",
|
|
79
79
|
"swc-plugin-transform-remove-imports": "1.15.0",
|
|
80
|
-
"
|
|
81
|
-
"
|
|
80
|
+
"@payloadcms/eslint-config": "3.0.0-beta.97",
|
|
81
|
+
"payload": "3.0.0-beta.106"
|
|
82
82
|
},
|
|
83
83
|
"peerDependencies": {
|
|
84
84
|
"@faceless-ui/modal": "3.0.0-beta.2",
|
|
@@ -96,8 +96,8 @@
|
|
|
96
96
|
"lexical": "0.17.0",
|
|
97
97
|
"react": "^19.0.0 || ^19.0.0-rc-06d0b89e-20240801",
|
|
98
98
|
"react-dom": "^19.0.0 || ^19.0.0-rc-06d0b89e-20240801",
|
|
99
|
-
"@payloadcms/next": "3.0.0-beta.
|
|
100
|
-
"payload": "3.0.0-beta.
|
|
99
|
+
"@payloadcms/next": "3.0.0-beta.106",
|
|
100
|
+
"payload": "3.0.0-beta.106"
|
|
101
101
|
},
|
|
102
102
|
"engines": {
|
|
103
103
|
"node": "^18.20.2 || >=20.9.0"
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use client";import{a as ue,b as z,c as I,e as pe,f as ge,g as he,h as ye}from"./chunk-GK7ZKYHL.js";import{a as fe,b as T}from"./chunk-TXEIKM77.js";import{jsx as j,jsxs as me}from"react/jsx-runtime";import{FieldDescription as Yt,FieldError as Ut,FieldLabel as Vt,useField as qt,useFieldProps as Jt,withCondition as Qt}from"@payloadcms/ui";import{useCallback as Xt}from"react";import{ErrorBoundary as Zt}from"react-error-boundary";import{jsx as A}from"react/jsx-runtime";import{LexicalComposer as Wt}from"@lexical/react/LexicalComposer.js";import*as qe from"react";import{useMemo as Ve}from"react";import{c as Mt}from"react/compiler-runtime";import{jsx as P,jsxs as J}from"react/jsx-runtime";import{useLexicalComposerContext as Bt}from"@lexical/react/LexicalComposerContext.js";import{LexicalErrorBoundary as It}from"@lexical/react/LexicalErrorBoundary.js";import{HistoryPlugin as At}from"@lexical/react/LexicalHistoryPlugin.js";import{OnChangePlugin as Ft}from"@lexical/react/LexicalOnChangePlugin.js";import{RichTextPlugin as Dt}from"@lexical/react/LexicalRichTextPlugin.js";import{TabIndentationPlugin as Ot}from"@lexical/react/LexicalTabIndentationPlugin.js";import{BLUR_COMMAND as _t,COMMAND_PRIORITY_LOW as Ge,FOCUS_COMMAND as Ht}from"lexical";import*as U from"react";import{useEffect as We,useState as Ye}from"react";import{jsx as xe}from"react/jsx-runtime";import"react";var _=({anchorElem:t,clientProps:e,plugin:o})=>o.position==="floatingAnchorElem"?o.Component&&xe(o.Component,{anchorElem:t,clientProps:e}):o.Component&&xe(o.Component,{clientProps:e});import{jsx as ce}from"react/jsx-runtime";import{useLexicalComposerContext as nt}from"@lexical/react/LexicalComposerContext.js";import{$createParagraphNode as rt}from"lexical";import*as Ne from"react";import{useCallback as it,useEffect as Ce,useRef as st,useState as lt}from"react";import{createPortal as at}from"react-dom";var K=(t,e,o,l,r=50,m=25)=>{let p=0;if(t&&!t.contains(l)){let{bottom:a,left:u,right:g,top:E}=t.getBoundingClientRect(),d=E+window.scrollY,s=a+window.scrollY;if(o<d-m||o>s+m||e<u-r||e>g+r)return-1;(e<u||e>g)&&(p=e<u?e-u:e-g)}return p};import{$getNodeByKey as Z}from"lexical";function G(t){let e=t.getBoundingClientRect(),o=getComputedStyle(t).getPropertyValue("transform");if(!o||o==="none")return e;let l=o.split(",").pop();return e.y=e.y-Number(l.replace(")","")),e}function X(t){let e=(u,g)=>u?parseFloat(window.getComputedStyle(u)[g]):0,{marginBottom:o,marginTop:l}=window.getComputedStyle(t),r=e(t.previousElementSibling,"marginBottom"),m=e(t.nextElementSibling,"marginTop"),p=Math.max(parseFloat(l),r);return{marginBottom:Math.max(parseFloat(o),m),marginTop:p}}import{$getRoot as Xe}from"lexical";function H(t){return t.getEditorState().read(()=>Xe().getChildrenKeys())}var Ze=1,et=-1,Ee=0,L={props:null,result:null};function tt(t,e,o=20){let l=t.x-e.x,r=t.y-e.y;return l*l+r*r<=o*o}function W(t){let{anchorElem:e,cache_threshold:o=20,editor:l,fuzzy:r=!1,horizontalOffset:m=0,point:{x:p,y:a},startIndex:u=0,useEdgeAsDefault:g=!1,verbose:E=!1}=t;if(o>0&&L.props&&L.result&&L.props.fuzzy===t.fuzzy&&L.props.horizontalOffset===t.horizontalOffset&&L.props.useEdgeAsDefault===t.useEdgeAsDefault&&tt(L.props.point,t.point,o))return L.result;let d=e.getBoundingClientRect(),s=H(l),n={blockElem:null,blockNode:null,distance:1/0,foundAtIndex:-1,isFoundNodeEmptyParagraph:!1};return l.getEditorState().read(()=>{if(g){let[c,f]=[l.getElementByKey(s[0]),l.getElementByKey(s[s.length-1])],[i,x]=[G(c),G(f)];if(i&&x&&(a<i.top?(n.blockElem=c,n.distance=i.top-a,n.blockNode=Z(s[0]),n.foundAtIndex=0):a>x.bottom&&(n.distance=a-x.bottom,n.blockNode=Z(s[s.length-1]),n.blockElem=f,n.foundAtIndex=s.length-1),n?.blockElem))return{blockElem:null,isFoundNodeEmptyParagraph:!1}}let y=u,h=Ee;for(;y>=0&&y<s.length;){let c=s[y],f=l.getElementByKey(c);if(f===null)break;let i=new I(p+m,a),x=ye.fromDOMRect(G(f)),{marginBottom:b,marginTop:C}=X(f),w=x.generateNewRect({bottom:x.bottom+b,left:d.left,right:d.right,top:x.top-C}),{distance:R,isOnBottomSide:N,isOnTopSide:F}=w.distanceFromPoint(i);if(R===0){n.blockElem=f,n.blockNode=Z(c),n.foundAtIndex=y,n.distance=R,n.blockNode&&n.blockNode.getType()==="paragraph"&&n.blockNode.getTextContent()===""&&(!r&&!t.returnEmptyParagraphs&&(n.blockElem=null,n.blockNode=null),n.isFoundNodeEmptyParagraph=!0);break}else r&&R<n.distance&&(n.blockElem=f,n.blockNode=Z(c),n.distance=R,n.foundAtIndex=y);h===Ee&&(F?h=et:N?h=Ze:h=1/0),y+=h}}),L.props=t,L.result={blockElem:n.blockElem,blockNode:n.blockNode,foundAtIndex:n.foundAtIndex,isFoundNodeEmptyParagraph:n.isFoundNodeEmptyParagraph},{blockElem:n.blockElem,blockNode:n.blockNode,foundAtIndex:n.foundAtIndex,isFoundNodeEmptyParagraph:n.isFoundNodeEmptyParagraph}}function ee(t,e){return!!t.closest(`.${e}`)}var ot=["IMG","INPUT","TEXTAREA","SELECT","BUTTON","VIDEO","OBJECT","EMBED","IFRAME","HR"];function be(t){if(!t||ot.includes(t.tagName)||t.offsetHeight===0||t.offsetWidth===0)return!1;let e=window.getComputedStyle(t);return!(e.display==="table-cell"||e.position==="absolute"||e.visibility==="hidden"||e.opacity==="0")}function te(t,e,o,l=0){if(!t){e.style.opacity="0",e.style.transform="translate(-10000px, -10000px)";return}let r=t.getBoundingClientRect(),m=window.getComputedStyle(t),p=e.getBoundingClientRect(),a=o.getBoundingClientRect(),u;if(["lexical-block","lexical-upload","lexical-relationship"].some(d=>t.firstElementChild?.classList.contains(d)))u=r.top+8-a.top;else{let d=be(t)?parseInt(m.lineHeight,10):0;u=r.top+(d-p.height)/2-a.top}let E=l;e.style.opacity="1",e.style.transform=`translate(${E}px, ${u}px)`}var ct="add-block-menu",oe=1/0;function dt(t){return t===0?1/0:oe>=0&&oe<t?oe:Math.floor(t/2)}function mt(t,e,o){let l=e.parentElement,{editorConfig:r}=T(),m=r?.admin?.hideGutter?-24:12,p=st(null),[a,u]=lt(null);Ce(()=>{function E(d){let s=d.target;if(!z(s))return;let n=K(l,d.pageX,d.pageY,s);if(n===-1){u(null);return}if(ee(s,ct))return;let y=H(t),{blockElem:h,blockNode:c,foundAtIndex:f}=W({anchorElem:e,cache_threshold:0,editor:t,horizontalOffset:-n,point:new I(d.x,d.y),returnEmptyParagraphs:!0,startIndex:dt(y.length),useEdgeAsDefault:!1});oe=f,h&&(a?.node!==c||a?.elem!==h)&&u({elem:h,node:c})}return document?.addEventListener("mousemove",E),()=>{document?.removeEventListener("mousemove",E)}},[l,e,t,a]),Ce(()=>{p.current&&a?.node&&te(a?.elem,p.current,e,m)},[e,a,m]);let g=it(E=>{let d=a;d?.node&&(t.update(()=>{let s=!0;if((d.node.getType()!=="paragraph"||d.node.getTextContent()!=="")&&(s=!1),!s){let n=rt();d.node.insertAfter(n),setTimeout(()=>{d={elem:t.getElementByKey(n.getKey()),node:n},u(d)},0)}}),setTimeout(()=>{t.update(()=>{t.focus(),d.node&&"select"in d.node&&typeof d.node.select=="function"&&d.node.select()})},1),setTimeout(()=>{t.dispatchCommand(ge,{node:d.node})},2),E.stopPropagation(),E.preventDefault())},[t,a]);return at(ce(Ne.Fragment,{children:ce("button",{className:"icon add-block-menu",onClick:E=>{g(E)},ref:p,type:"button",children:ce("div",{className:o?"icon":""})})}),e)}function Pe({anchorElem:t=document.body}){let[e]=nt();return mt(e,t,e._editable)}import{jsx as ne,jsxs as ft}from"react/jsx-runtime";import{useLexicalComposerContext as pt}from"@lexical/react/LexicalComposerContext.js";import{eventFiles as Re}from"@lexical/rich-text";import{$getNearestNodeFromDOMNode as Te,$getNodeByKey as gt}from"lexical";import*as Be from"react";import{useEffect as de,useRef as re,useState as Se}from"react";import{createPortal as ht}from"react-dom";var we=0,ut=-24;var $=0;function ke(t,e,o,l,r,m,p,a,u,g=!1){let{height:E,top:d}=l.getBoundingClientRect(),{top:s,width:n}=p.getBoundingClientRect(),{marginBottom:y,marginTop:h}=X(l),c=d,f=m>=d+E/2+window.scrollY,i=!1;if(r?.elem)if(l!==r?.elem)(f&&r?.elem&&r?.elem===l.nextElementSibling||!f&&r?.elem&&r?.elem===l.previousElementSibling)&&($++,$<200&&(i=!0));else{$++;let w=r?.boundingBox?.y,R=l.getBoundingClientRect().y;(f===r?.isBelow&&w===R||$<200)&&(i=!1)}if(i)return{isBelow:f,willStayInSamePosition:i};g?c+=E/2:f?c+=E+y/2:c-=h/2;let x=0;g||(f?x=-we:x=we);let b=c-s+x,C=ut-e;return o.style.width=`calc(${n}px - ${t})`,o.style.opacity=".8",o.style.transform=`translate(${C}px, calc(${b}px - 2px))`,r?.elem&&(r.elem.style.opacity="",r?.elem===l?f?r.elem.style.marginTop="":r.elem.style.marginBottom="":(r.elem.style.marginBottom="",r.elem.style.marginTop="")),$=0,{isBelow:f,willStayInSamePosition:i}}var yt="draggable-block-menu",ve="application/x-lexical-drag-block",q=1/0;function Le(t){return t===0?1/0:q>=0&&q<t?q:Math.floor(t/2)}function xt(t,e){let{transform:o}=e.style;t.setDragImage(e,0,0),setTimeout(()=>{e.style.transform=o})}function Me(t,e){t&&(t.style.opacity="0"),e&&(e.style.opacity="",e.style.marginBottom="",e.style.marginTop="")}function Et(t,e,o){let l=e.parentElement,r=re(null),m=re(null),p=re(null),a=re(!1),[u,g]=Se(null),[E,d]=Se(null),{editorConfig:s}=T(),n=s?.admin?.hideGutter?-44:-8;de(()=>{function c(f){let i=f.target;if(!z(i))return;let x=K(l,f.pageX,f.pageY,i);if(x===-1){g(null);return}if(ee(i,yt))return;let b=H(t),{blockElem:C,foundAtIndex:w,isFoundNodeEmptyParagraph:R}=W({anchorElem:e,cache_threshold:0,editor:t,horizontalOffset:-x,point:new I(f.x,f.y),startIndex:Le(b.length),useEdgeAsDefault:!1,verbose:!1});q=w,!(!C&&!R)&&u!==C&&g(C)}return document?.addEventListener("mousemove",c),()=>{document?.removeEventListener("mousemove",c)}},[l,e,t,u]),de(()=>{r.current&&te(u,r.current,e,n)},[e,u,n]),de(()=>{function c(i){if(!a.current)return!1;let[x]=Re(i);if(x)return!1;let{pageY:b,target:C}=i;if(!z(C))return!1;let w=K(l,i.pageX,i.pageY,C,100,50),R=H(t),{blockElem:N,foundAtIndex:F,isFoundNodeEmptyParagraph:D}=W({anchorElem:e,editor:t,fuzzy:!0,horizontalOffset:-w,point:new I(i.x,i.y),startIndex:Le(R.length),useEdgeAsDefault:!0,verbose:!0});q=F;let S=m.current;if(N===null||S===null)return!1;if(u!==N){let{isBelow:v,willStayInSamePosition:V}=ke(s?.admin?.hideGutter?"0px":"3rem",n+(s?.admin?.hideGutter?r?.current?.getBoundingClientRect()?.width??0:-(r?.current?.getBoundingClientRect()?.width??0)),S,N,E,b,e,i,p,D);i.preventDefault(),V||d({boundingBox:N.getBoundingClientRect(),elem:N,isBelow:v})}else Me(S,E?.elem),d({boundingBox:N.getBoundingClientRect(),elem:N,isBelow:!1});return!0}function f(i){if(!a.current)return!1;let[x]=Re(i);if(x)return!1;let{dataTransfer:b,pageY:C,target:w}=i,R=b?.getData(ve)||"";return t.update(()=>{let N=gt(R);if(!N||!z(w))return!1;let F=K(l,i.pageX,i.pageY,w,100,50),{blockElem:D,isFoundNodeEmptyParagraph:S}=W({anchorElem:e,editor:t,fuzzy:!0,horizontalOffset:-F,point:new I(i.x,i.y),useEdgeAsDefault:!0});if(!D)return!1;let v=Te(D);if(!v)return!1;if(v===N)return!0;let{height:V,top:se}=G(D),ae=C>=se+V/2+window.scrollY;S?(v.insertBefore(N),v.remove()):ae?v.insertAfter(N):v.insertBefore(N),u!==null&&g(null),document.querySelectorAll(".lexical-block-highlighter").forEach(B=>{B.remove()});let O=t.getElementByKey(N.getKey());setTimeout(()=>{let B=O.getBoundingClientRect(),k=document.createElement("div");k.className="lexical-block-highlighter",k.style.backgroundColor="var(--theme-elevation-1000",k.style.transition="opacity 0.5s ease-in-out",k.style.zIndex="1",k.style.pointerEvents="none",k.style.boxSizing="border-box",k.style.borderRadius="4px",k.style.position="absolute",document.body.appendChild(k),k.style.opacity="0.1",k.style.height=`${B.height+8}px`,k.style.width=`${B.width+8}px`,k.style.top=`${B.top+window.scrollY-4}px`,k.style.left=`${B.left-4}px`,setTimeout(()=>{k.style.opacity="0",setTimeout(()=>{k.remove()},500)},1e3)},120)}),!0}return document.addEventListener("dragover",c),document.addEventListener("drop",f),()=>{document.removeEventListener("dragover",c),document.removeEventListener("drop",f)}},[l,n,e,t,E,u,s?.admin?.hideGutter]);function y(c){let f=c.dataTransfer;if(!f||!u)return;xt(f,u);let i="";t.update(()=>{let x=Te(u);x&&(i=x.getKey())}),a.current=!0,f.setData(ve,i)}function h(){a.current=!1,Me(m.current,E?.elem)}return ht(ft(Be.Fragment,{children:[ne("div",{className:"icon draggable-block-menu",draggable:!0,onDragEnd:h,onDragStart:y,ref:r,children:ne("div",{className:o?"icon":""})}),ne("div",{className:"draggable-block-target-line",ref:m}),ne("div",{className:"debug-highlight",ref:p})]}),e)}function Ie({anchorElem:t=document.body}){let[e]=pt();return Et(e,t,e._editable)}import{c as bt}from"react/compiler-runtime";import{jsx as Ct}from"react/jsx-runtime";import{MarkdownShortcutPlugin as Nt}from"@lexical/react/LexicalMarkdownShortcutPlugin.js";import"react";var Ae=()=>{let t=bt(2),{editorConfig:e}=T(),o;return t[0]!==e.features.markdownTransformers?(o=Ct(Nt,{transformers:e.features.markdownTransformers}),t[0]=e.features.markdownTransformers,t[1]=o):o=t[1],o};import{jsx as Y,jsxs as Oe}from"react/jsx-runtime";import{useLexicalComposerContext as wt}from"@lexical/react/LexicalComposerContext.js";import{useFieldProps as _e,useTranslation as He}from"@payloadcms/ui";import{useCallback as De,useMemo as kt,useState as Rt}from"react";import"react";import*as $e from"react-dom";import{c as Pt}from"react/compiler-runtime";import"react";function Fe(t,e){let o=Pt(4),{maxLength:l,minLength:r}=e,m=l===void 0?75:l,p=r===void 0?1:r,a;return o[0]!==t||o[1]!==m||o[2]!==p?(a=u=>{let{query:g}=u,E="[^"+t+pe+"\\s]",s=new RegExp("(^|\\s|\\()(["+t+"]((?:"+E+"){0,"+m+"}))$").exec(g);if(s!==null){let n=s[1],y=s[3];if(y.length>=p)return{leadOffset:s.index+n.length,matchingString:y,replaceableString:s[2]}}return null},o[0]=t,o[1]=m,o[2]=p,o[3]=a):a=o[3],a}var M="slash-menu-popup";function Tt({isSelected:t,item:e,onClick:o,onMouseEnter:l}){let{field:{richTextComponentMap:r}}=T(),{schemaPath:m}=_e(),{i18n:p}=He(),a=`${M}__item ${M}__item-${e.key}`;t&&(a+=` ${M}__item--selected`);let u=e.key;return e.label&&(u=typeof e.label=="function"?e.label({i18n:p,richTextComponentMap:r,schemaPath:m}):e.label),u.length>25&&(u=u.substring(0,25)+"..."),Oe("button",{"aria-selected":t,className:a,id:M+"__item-"+e.key,onClick:o,onMouseEnter:l,ref:g=>{e.ref={current:g}},role:"option",tabIndex:-1,type:"button",children:[e?.Icon&&Y(e.Icon,{}),Y("span",{className:`${M}__item-text`,children:u})]},e.key)}function je({anchorElem:t=document.body}){let[e]=wt(),[o,l]=Rt(null),{editorConfig:r}=T(),{i18n:m}=He(),{field:{richTextComponentMap:p}}=T(),{schemaPath:a}=_e(),u=Fe("/",{minLength:0}),g=De(()=>{let s=[];for(let n of r.features.slashMenu.dynamicGroups){let y=n({editor:e,queryString:o});s=s.concat(y)}return s},[e,o,r?.features]),E=kt(()=>{let s=[];for(let n of r?.features.slashMenu.groups??[])s.push(n);if(o){s=s.map(y=>{let h=y.items.filter(c=>{let f=c.key;return c.label&&(f=typeof c.label=="function"?c.label({i18n:m,richTextComponentMap:p,schemaPath:a}):c.label),new RegExp(o,"gi").exec(f)?!0:c.keywords!=null?c.keywords.some(i=>new RegExp(o,"gi").exec(i)):!1});return h.length?{...y,items:h}:null}),s=s.filter(y=>y!=null);let n=g();for(let y of n){let h=s.find(c=>c.key===y.key);h?s=s.filter(c=>c.key!==y.key):h={...y,items:[]},h?.items?.length&&(h.items=h.items.concat(h.items)),s.push(h)}}return s},[g,o,r?.features,m]),d=De((s,n,y,h)=>{n&&e.update(()=>{n.remove()}),s.onSelect({editor:e,queryString:h}),y()},[e]);return Y(he,{anchorElem:t,groups:E,menuRenderFn:(s,{selectedItemKey:n,selectItemAndCleanUp:y,setSelectedItemKey:h})=>s.current&&E.length?$e.createPortal(Y("div",{className:M,children:E.map(c=>{let f=c.key;return c.label&&(f=typeof c.label=="function"?c.label({i18n:m,richTextComponentMap:p,schemaPath:a}):c.label),Oe("div",{className:`${M}__group ${M}__group-${c.key}`,children:[Y("div",{className:`${M}__group-title`,children:f}),c.items.map((i,x)=>Y(Tt,{index:x,isSelected:n===i.key,item:i,onClick:()=>{h(i.key),y(i)},onMouseEnter:()=>{h(i.key)}},i.key))]},c.key)})}),s.current):null,onQueryChange:l,onSelectItem:d,triggerFn:u})}import{c as St}from"react/compiler-runtime";import{jsx as ze}from"react/jsx-runtime";import{ContentEditable as vt}from"@lexical/react/LexicalContentEditable.js";import{useTranslation as Lt}from"@payloadcms/ui";import"react";function Ke(t){let e=St(3),{className:o}=t,{t:l}=Lt(),r;return e[0]!==l||e[1]!==o?(r=ze(vt,{"aria-placeholder":l("lexical:general:placeholder"),className:o??"ContentEditable__root",placeholder:ze("p",{className:"editor-placeholder",children:l("lexical:general:placeholder")})}),e[0]=l,e[1]=o,e[2]=r):r=e[2],r}var Ue=t=>{let e=Mt(22),{editorConfig:o,editorContainerRef:l,onChange:r}=t,m=T(),[p]=Bt(),[a,u]=Ye(null),g;e[0]===Symbol.for("react.memo_cache_sentinel")?(g=i=>{i!==null&&u(i)},e[0]=g):g=e[0];let E=g,d,s;e[1]!==m||e[2]!==p?(d=()=>{if(!m?.uuid){console.error("Lexical Editor must be used within an EditorConfigProvider");return}m?.parentEditor?.uuid&&m.parentEditor?.registerChild(m.uuid,m);let i=()=>{m.focusEditor(m)},x=()=>{m.blurEditor(m)},b=p.registerCommand(Ht,()=>(i(),!0),Ge),C=p.registerCommand(_t,()=>(x(),!0),Ge);return()=>{b(),C(),m.parentEditor?.unregisterChild?.(m.uuid)}},s=[p,m],e[1]=m,e[2]=p,e[3]=d,e[4]=s):(d=e[3],s=e[4]),We(d,s);let[n,y]=Ye(!1),h,c;e[5]!==n?(h=()=>{let i=()=>{let x=window.matchMedia("(max-width: 768px)").matches;x!==n&&y(x)};return i(),window.addEventListener("resize",i),()=>{window.removeEventListener("resize",i)}},c=[n],e[5]=n,e[6]=h,e[7]=c):(h=e[6],c=e[7]),We(h,c);let f;if(e[8]!==o.features||e[9]!==r||e[10]!==a||e[11]!==n||e[12]!==p||e[13]!==l){let i;e[15]!==r?(i=(b,C,w)=>{(!w.has("focus")||w.size>1)&&r?.(b,C,w)},e[15]=r,e[16]=i):i=e[16];let x;e[17]!==a||e[18]!==n||e[19]!==p||e[20]!==o?(x=a&&J(U.Fragment,{children:[!n&&p.isEditable()&&J(U.Fragment,{children:[P(Ie,{anchorElem:a}),P(Pe,{anchorElem:a})]}),o.features.plugins.map(b=>{if(b.position==="floatingAnchorElem"&&!(b.desktopOnly===!0&&n))return P(_,{anchorElem:a,clientProps:b.clientProps,plugin:b},b.key)}),p.isEditable()&&P(U.Fragment,{children:P(je,{anchorElem:a})})]}),e[17]=a,e[18]=n,e[19]=p,e[20]=o,e[21]=x):x=e[21],f=J(U.Fragment,{children:[o.features.plugins.map($t),J("div",{className:"editor-container",ref:l,children:[o.features.plugins.map(jt),P(Dt,{contentEditable:P("div",{className:"editor-scroller",children:P("div",{className:"editor",ref:E,children:P(Ke,{})})}),ErrorBoundary:It}),P(Ft,{ignoreSelectionChange:!0,onChange:i}),x,p.isEditable()&&J(U.Fragment,{children:[P(At,{}),o?.features?.markdownTransformers?.length>0&&P(Ae,{})]}),P(Ot,{}),o.features.plugins.map(zt),o.features.plugins.map(Kt)]}),o.features.plugins.map(Gt)]}),e[8]=o.features,e[9]=r,e[10]=a,e[11]=n,e[12]=p,e[13]=l,e[14]=f}else f=e[14];return f};function $t(t){if(t.position==="aboveContainer")return P(_,{clientProps:t.clientProps,plugin:t},t.key)}function jt(t){if(t.position==="top")return P(_,{clientProps:t.clientProps,plugin:t},t.key)}function zt(t){if(t.position==="normal")return P(_,{clientProps:t.clientProps,plugin:t},t.key)}function Kt(t){if(t.position==="bottom")return P(_,{clientProps:t.clientProps,plugin:t},t.key)}function Gt(t){if(t.position==="belowContainer")return P(_,{clientProps:t.clientProps,plugin:t},t.key)}var Je=({children:t,providers:e})=>{if(!e?.length)return t;let o=e[0];return e.length>1?A(o,{children:A(Je,{providers:e.slice(1),children:t})}):A(o,{children:t})},Qe=t=>{let{editorConfig:e,field:o,onChange:l,path:r,readOnly:m,value:p}=t,a=T(),u=qe.useRef(null),g=Ve(()=>{let d=p;return e?.features?.hooks?.load?.length&&e.features.hooks.load.forEach(s=>{d=s({incomingEditorState:d})}),d},[e,p]),E=Ve(()=>{if(g&&typeof g!="object")throw new Error("The value passed to the Lexical editor is not an object. This is not supported. Please remove the data from the field and start again. This is the value that was passed in: "+JSON.stringify(g));if(g&&Array.isArray(g)&&!("root"in g))throw new Error("You have tried to pass in data from the old Slate editor to the new Lexical editor. The data structure is different, thus you will have to migrate your data. We offer a one-line migration script which migrates all your rich text fields: https://payloadcms.com/docs/beta/lexical/migration#migration-via-migration-script-recommended");if(g&&"jsonContent"in g)throw new Error("You have tried to pass in data from payload-plugin-lexical. The data structure is different, thus you will have to migrate your data. Migration guide: https://payloadcms.com/docs/beta/lexical/migration#migrating-from-payload-plugin-lexical");return{editable:m!==!0,editorState:g!=null?JSON.stringify(g):void 0,namespace:e.lexical.namespace,nodes:[...ue({editorConfig:e})],onError:d=>{throw d},theme:e.lexical.theme}},[e,g,m]);return E?A(Wt,{initialConfig:E,children:A(fe,{editorConfig:e,editorContainerRef:u,field:o,parentContext:a,children:A(Je,{providers:e.features.providers,children:A(Ue,{editorConfig:e,editorContainerRef:u,onChange:l})})})},r):A("p",{children:"Loading..."})};import"./bundled.css";var ie="rich-text-lexical",eo=t=>{let{descriptionProps:e,editorConfig:o,errorProps:l,field:{name:r,_path:m,admin:{className:p,components:{Description:a,Error:u,Label:g},readOnly:E,style:d,width:s}={},label:n,required:y},field:h,labelProps:c,readOnly:f,validate:i}=t,x=f||E,b=Xt((Q,O)=>{if(typeof i=="function")return i(Q,{...O,props:t,required:y})},[i,y]),{path:C,readOnly:w}=Jt(),R=qt({path:C??m??r,validate:b}),{formInitializing:N,formProcessing:F,initialValue:D,path:S,setValue:v,showError:V,value:se}=R,le=x||w||F||N,ae=[ie,"field-type",p,V&&"error",le&&`${ie}--read-only`,o?.admin?.hideGutter!==!0?`${ie}--show-gutter`:null].filter(Boolean).join(" ");return me("div",{className:ae,style:{...d,width:s},children:[j(Ut,{CustomError:u,field:h,path:S,...l||{},alignCaret:"left"}),j(Vt,{field:h,Label:g,label:n,required:y,...c||{}}),me("div",{className:`${ie}__wrap`,children:[j(Zt,{fallbackRender:to,onReset:()=>{},children:j(Qe,{editorConfig:o,field:h,onChange:Q=>{let O=Q.toJSON();o?.features?.hooks?.save?.length&&o.features.hooks.save.forEach(B=>{O=B({incomingEditorState:O})}),v(O)},path:S,readOnly:le,value:se},JSON.stringify({initialValue:D,path:S}))}),j(Yt,{Description:a,field:h,...e||{}})]})]},S)};function to({error:t}){return me("div",{className:"errorBoundary",role:"alert",children:[j("p",{children:"Something went wrong:"}),j("pre",{style:{color:"red"},children:t.message})]})}var ar=Qt(eo);export{ar as RichText};
|
|
2
|
-
//# sourceMappingURL=Field-WN5O3VIW.js.map
|