@payloadcms/richtext-lexical 3.0.0-beta.64 → 3.0.0-beta.66

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (103) hide show
  1. package/dist/exports/client/Field-6VQ73D3D.js +2 -0
  2. package/dist/exports/client/Field-6VQ73D3D.js.map +7 -0
  3. package/dist/exports/client/RelationshipComponent-FFJCVTWM.js +2 -0
  4. package/dist/exports/client/RelationshipComponent-FFJCVTWM.js.map +7 -0
  5. package/dist/exports/client/bundled.css +1 -1
  6. package/dist/exports/client/chunk-EBB2CEB6.js +2 -0
  7. package/dist/exports/client/chunk-EBB2CEB6.js.map +7 -0
  8. package/dist/exports/client/{chunk-LGMNC5KQ.js → chunk-HO42U3IJ.js} +2 -2
  9. package/dist/exports/client/chunk-JELGBZLY.js +2 -0
  10. package/dist/exports/client/chunk-JELGBZLY.js.map +7 -0
  11. package/dist/exports/client/component-TYPMHBL7.js +2 -0
  12. package/dist/exports/client/component-TYPMHBL7.js.map +7 -0
  13. package/dist/exports/client/componentInline-FQNXWTOE.js +2 -0
  14. package/dist/exports/client/componentInline-FQNXWTOE.js.map +7 -0
  15. package/dist/exports/client/index.js +7 -7
  16. package/dist/exports/client/index.js.map +4 -4
  17. package/dist/features/blocks/component/BlockContent.d.ts +3 -2
  18. package/dist/features/blocks/component/BlockContent.d.ts.map +1 -1
  19. package/dist/features/blocks/component/BlockContent.js +5 -2
  20. package/dist/features/blocks/component/BlockContent.js.map +1 -1
  21. package/dist/features/blocks/component/index.d.ts +0 -4
  22. package/dist/features/blocks/component/index.d.ts.map +1 -1
  23. package/dist/features/blocks/component/index.js +6 -2
  24. package/dist/features/blocks/component/index.js.map +1 -1
  25. package/dist/features/blocks/componentInline/index.d.ts +10 -0
  26. package/dist/features/blocks/componentInline/index.d.ts.map +1 -0
  27. package/dist/features/blocks/componentInline/index.js +133 -0
  28. package/dist/features/blocks/componentInline/index.js.map +1 -0
  29. package/dist/features/blocks/feature.client.d.ts +6 -1
  30. package/dist/features/blocks/feature.client.d.ts.map +1 -1
  31. package/dist/features/blocks/feature.client.js +70 -8
  32. package/dist/features/blocks/feature.client.js.map +1 -1
  33. package/dist/features/blocks/feature.server.d.ts +2 -1
  34. package/dist/features/blocks/feature.server.d.ts.map +1 -1
  35. package/dist/features/blocks/feature.server.js +99 -34
  36. package/dist/features/blocks/feature.server.js.map +1 -1
  37. package/dist/features/blocks/graphQLPopulationPromise.d.ts +3 -2
  38. package/dist/features/blocks/graphQLPopulationPromise.d.ts.map +1 -1
  39. package/dist/features/blocks/graphQLPopulationPromise.js +2 -2
  40. package/dist/features/blocks/graphQLPopulationPromise.js.map +1 -1
  41. package/dist/features/blocks/i18n.d.ts.map +1 -1
  42. package/dist/features/blocks/i18n.js +192 -0
  43. package/dist/features/blocks/i18n.js.map +1 -1
  44. package/dist/features/blocks/nodes/BlocksNode.d.ts.map +1 -1
  45. package/dist/features/blocks/nodes/BlocksNode.js +0 -1
  46. package/dist/features/blocks/nodes/BlocksNode.js.map +1 -1
  47. package/dist/features/blocks/nodes/InlineBlocksNode.d.ts +39 -0
  48. package/dist/features/blocks/nodes/InlineBlocksNode.d.ts.map +1 -0
  49. package/dist/features/blocks/nodes/InlineBlocksNode.js +93 -0
  50. package/dist/features/blocks/nodes/InlineBlocksNode.js.map +1 -0
  51. package/dist/features/blocks/plugin/commands.d.ts +5 -0
  52. package/dist/features/blocks/plugin/commands.d.ts.map +1 -1
  53. package/dist/features/blocks/plugin/commands.js +2 -0
  54. package/dist/features/blocks/plugin/commands.js.map +1 -1
  55. package/dist/features/blocks/plugin/index.d.ts.map +1 -1
  56. package/dist/features/blocks/plugin/index.js +76 -7
  57. package/dist/features/blocks/plugin/index.js.map +1 -1
  58. package/dist/features/blocks/validate.d.ts +3 -2
  59. package/dist/features/blocks/validate.d.ts.map +1 -1
  60. package/dist/features/blocks/validate.js +2 -2
  61. package/dist/features/blocks/validate.js.map +1 -1
  62. package/dist/features/relationship/nodes/components/RelationshipComponent.d.ts +0 -1
  63. package/dist/features/relationship/nodes/components/RelationshipComponent.d.ts.map +1 -1
  64. package/dist/features/relationship/nodes/components/RelationshipComponent.js +2 -3
  65. package/dist/features/relationship/nodes/components/RelationshipComponent.js.map +1 -1
  66. package/dist/field/index.js +8 -8
  67. package/dist/index.d.ts.map +1 -1
  68. package/dist/index.js.map +1 -1
  69. package/dist/lexical/LexicalProvider.js +2 -2
  70. package/dist/lexical/LexicalProvider.js.map +1 -1
  71. package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/LexicalMenu.d.ts +4 -4
  72. package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/LexicalMenu.d.ts.map +1 -1
  73. package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/LexicalMenu.js.map +1 -1
  74. package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/index.d.ts +0 -1
  75. package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/index.d.ts.map +1 -1
  76. package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/index.js +1 -20
  77. package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/index.js.map +1 -1
  78. package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/types.d.ts +2 -2
  79. package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/types.d.ts.map +1 -1
  80. package/dist/lexical/plugins/SlashMenu/LexicalTypeaheadMenuPlugin/types.js.map +1 -1
  81. package/dist/lexical/plugins/SlashMenu/index.d.ts.map +1 -1
  82. package/dist/lexical/plugins/SlashMenu/index.js +43 -41
  83. package/dist/lexical/plugins/SlashMenu/index.js.map +1 -1
  84. package/dist/lexical/plugins/handles/DraggableBlockPlugin/index.js +1 -1
  85. package/dist/lexical/plugins/handles/DraggableBlockPlugin/index.js.map +1 -1
  86. package/dist/lexical/ui/icons/InlineBlocks/index.d.ts +3 -0
  87. package/dist/lexical/ui/icons/InlineBlocks/index.d.ts.map +1 -0
  88. package/dist/lexical/ui/icons/InlineBlocks/index.js +20 -0
  89. package/dist/lexical/ui/icons/InlineBlocks/index.js.map +1 -0
  90. package/package.json +9 -9
  91. package/dist/exports/client/Field-5KHQLTCU.js +0 -2
  92. package/dist/exports/client/Field-5KHQLTCU.js.map +0 -7
  93. package/dist/exports/client/RelationshipComponent-EJB6LBDR.js +0 -2
  94. package/dist/exports/client/RelationshipComponent-EJB6LBDR.js.map +0 -7
  95. package/dist/exports/client/chunk-SVDDFJRT.js +0 -2
  96. package/dist/exports/client/chunk-SVDDFJRT.js.map +0 -7
  97. package/dist/exports/client/component-Z5R2PHH3.js +0 -2
  98. package/dist/exports/client/component-Z5R2PHH3.js.map +0 -7
  99. package/dist/features/blocks/drawer/index.d.ts +0 -9
  100. package/dist/features/blocks/drawer/index.d.ts.map +0 -1
  101. package/dist/features/blocks/drawer/index.js +0 -78
  102. package/dist/features/blocks/drawer/index.js.map +0 -1
  103. /package/dist/exports/client/{chunk-LGMNC5KQ.js.map → chunk-HO42U3IJ.js.map} +0 -0
@@ -1,7 +1,8 @@
1
1
  import type { FormFieldBase } from '@payloadcms/ui';
2
- import type { FieldMap, ReducedBlock } from '@payloadcms/ui/utilities/buildComponentMap';
2
+ import type { FieldMap } from '@payloadcms/ui/utilities/buildComponentMap';
3
3
  import React from 'react';
4
4
  import type { SanitizedClientEditorConfig } from '../../../lexical/config/types.js';
5
+ import type { ClientBlock } from '../feature.client.js';
5
6
  import type { BlockFields } from '../nodes/BlocksNode.js';
6
7
  type Props = {
7
8
  baseClass: string;
@@ -14,7 +15,7 @@ type Props = {
14
15
  formSchema: FieldMap;
15
16
  nodeKey: string;
16
17
  path: string;
17
- reducedBlock: ReducedBlock;
18
+ reducedBlock: ClientBlock;
18
19
  schemaPath: string;
19
20
  };
20
21
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"BlockContent.d.ts","sourceRoot":"","sources":["../../../../src/features/blocks/component/BlockContent.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AACnD,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,4CAA4C,CAAA;AAkBxF,OAAO,KAAsB,MAAM,OAAO,CAAA;AAE1C,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAA;AACnF,OAAO,KAAK,EAAE,WAAW,EAAa,MAAM,wBAAwB,CAAA;AAIpE,KAAK,KAAK,GAAG;IACX,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE;QACL,YAAY,EAAE,2BAA2B,CAAA;QACzC,IAAI,EAAE,MAAM,CAAA;QACZ,oBAAoB,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,CAAA;KACnD,GAAG,aAAa,CAAA;IACjB,QAAQ,EAAE,WAAW,CAAA;IACrB,UAAU,EAAE,QAAQ,CAAA;IACpB,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,YAAY,EAAE,YAAY,CAAA;IAC1B,UAAU,EAAE,MAAM,CAAA;CACnB,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CA4MxC,CAAA"}
1
+ {"version":3,"file":"BlockContent.d.ts","sourceRoot":"","sources":["../../../../src/features/blocks/component/BlockContent.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AACnD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,4CAA4C,CAAA;AAkB1E,OAAO,KAAsB,MAAM,OAAO,CAAA;AAE1C,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAA;AACnF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AACvD,OAAO,KAAK,EAAE,WAAW,EAAa,MAAM,wBAAwB,CAAA;AAIpE,KAAK,KAAK,GAAG;IACX,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE;QACL,YAAY,EAAE,2BAA2B,CAAA;QACzC,IAAI,EAAE,MAAM,CAAA;QACZ,oBAAoB,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,CAAA;KACnD,GAAG,aAAa,CAAA;IACjB,QAAQ,EAAE,WAAW,CAAA;IACrB,UAAU,EAAE,QAAQ,CAAA;IACpB,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,YAAY,EAAE,WAAW,CAAA;IACzB,UAAU,EAAE,MAAM,CAAA;CACnB,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAgNxC,CAAA"}
@@ -11,7 +11,7 @@ import { FormSavePlugin } from './FormSavePlugin.js';
11
11
  * scoped to the block. All format operations in here are thus scoped to the block's form, and
12
12
  * not the whole document.
13
13
  */ export const BlockContent = (props)=>{
14
- const { baseClass, field, formData, formSchema, nodeKey, reducedBlock: { labels }, schemaPath } = props;
14
+ const { baseClass, field, formData, formSchema, nodeKey, reducedBlock: { LabelComponent, labels }, schemaPath } = props;
15
15
  const { i18n } = useTranslation();
16
16
  const [editor] = useLexicalComposerContext();
17
17
  // Used for saving collapsed to preferences (and gettin' it from there again)
@@ -132,7 +132,10 @@ import { FormSavePlugin } from './FormSavePlugin.js';
132
132
  /*#__PURE__*/ _jsx(Collapsible, {
133
133
  className: classNames,
134
134
  collapsibleStyle: fieldHasErrors ? 'error' : 'default',
135
- header: /*#__PURE__*/ _jsxs("div", {
135
+ header: LabelComponent ? /*#__PURE__*/ _jsx(LabelComponent, {
136
+ blockKind: 'lexicalBlock',
137
+ formData: formData
138
+ }) : /*#__PURE__*/ _jsxs("div", {
136
139
  className: `${baseClass}__block-header`,
137
140
  children: [
138
141
  /*#__PURE__*/ _jsxs("div", {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/features/blocks/component/BlockContent.tsx"],"sourcesContent":["import type { FormFieldBase } from '@payloadcms/ui'\nimport type { FieldMap, ReducedBlock } from '@payloadcms/ui/utilities/buildComponentMap'\nimport type { CollapsedPreferences, Data, FormState } from 'payload'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js'\nimport { getTranslation } from '@payloadcms/translations'\nimport {\n Button,\n Collapsible,\n ErrorPill,\n Pill,\n RenderFields,\n SectionTitle,\n useDocumentInfo,\n useFormSubmitted,\n useTranslation,\n} from '@payloadcms/ui'\nimport { dequal } from 'dequal/lite' // lite: no need for Map and Set support\nimport { $getNodeByKey } from 'lexical'\nimport React, { useCallback } from 'react'\n\nimport type { SanitizedClientEditorConfig } from '../../../lexical/config/types.js'\nimport type { BlockFields, BlockNode } from '../nodes/BlocksNode.js'\n\nimport { FormSavePlugin } from './FormSavePlugin.js'\n\ntype Props = {\n baseClass: string\n field: {\n editorConfig: SanitizedClientEditorConfig // With rendered features n stuff\n name: string\n richTextComponentMap: Map<string, React.ReactNode>\n } & FormFieldBase\n formData: BlockFields\n formSchema: FieldMap\n nodeKey: string\n path: string\n reducedBlock: ReducedBlock\n schemaPath: string\n}\n\n/**\n * The actual content of the Block. This should be INSIDE a Form component,\n * scoped to the block. All format operations in here are thus scoped to the block's form, and\n * not the whole document.\n */\nexport const BlockContent: React.FC<Props> = (props) => {\n const {\n baseClass,\n field,\n formData,\n formSchema,\n nodeKey,\n reducedBlock: { labels },\n schemaPath,\n } = props\n\n const { i18n } = useTranslation()\n const [editor] = useLexicalComposerContext()\n // Used for saving collapsed to preferences (and gettin' it from there again)\n // Remember, these preferences are scoped to the whole document, not just this form. This\n // is important to consider for the data path used in setDocFieldPreferences\n const { getDocPreferences, setDocFieldPreferences } = useDocumentInfo()\n\n const [isCollapsed, setIsCollapsed] = React.useState<boolean>(() => {\n let initialState = false\n\n void getDocPreferences().then((currentDocPreferences) => {\n const currentFieldPreferences = currentDocPreferences?.fields[field.name]\n\n const collapsedArray = currentFieldPreferences?.collapsed\n\n if (collapsedArray && collapsedArray.includes(formData.id)) {\n initialState = true\n setIsCollapsed(true)\n }\n })\n return initialState\n })\n\n const hasSubmitted = useFormSubmitted()\n\n const [errorCount, setErrorCount] = React.useState(0)\n\n const fieldHasErrors = hasSubmitted && errorCount > 0\n\n const classNames = [\n `${baseClass}__row`,\n fieldHasErrors ? `${baseClass}__row--has-errors` : `${baseClass}__row--no-errors`,\n ]\n .filter(Boolean)\n .join(' ')\n\n const onFormChange = useCallback(\n ({\n fullFieldsWithValues,\n newFormData,\n }: {\n fullFieldsWithValues: FormState\n newFormData: Data\n }) => {\n newFormData = {\n ...newFormData,\n id: formData.id,\n blockType: formData.blockType,\n }\n\n // Recursively remove all undefined values from even being present in formData, as they will\n // cause isDeepEqual to return false if, for example, formData has a key that fields.data\n // does not have, even if it's undefined.\n // Currently, this happens if a block has another sub-blocks field. Inside formData, that sub-blocks field has an undefined blockName property.\n // Inside of fields.data however, that sub-blocks blockName property does not exist at all.\n function removeUndefinedAndNullAndEmptyArraysRecursively(obj: object) {\n for (const key in obj) {\n const value = obj[key]\n if (Array.isArray(value) && !value?.length) {\n delete obj[key]\n } else if (value && typeof value === 'object') {\n removeUndefinedAndNullAndEmptyArraysRecursively(value)\n } else if (value === undefined || value === null) {\n delete obj[key]\n }\n }\n }\n removeUndefinedAndNullAndEmptyArraysRecursively(newFormData)\n\n removeUndefinedAndNullAndEmptyArraysRecursively(formData)\n\n // Only update if the data has actually changed. Otherwise, we may be triggering an unnecessary value change,\n // which would trigger the \"Leave without saving\" dialog unnecessarily\n if (!dequal(formData, newFormData)) {\n // Running this in the next tick in the meantime fixes this issue: https://github.com/payloadcms/payload/issues/4108\n // I don't know why. When this is called immediately, it might focus out of a nested lexical editor field if an update is made there.\n // My hypothesis is that the nested editor might not have fully finished its update cycle yet. By updating in the next tick, we\n // ensure that the nested editor has finished its update cycle before we update the block node.\n setTimeout(() => {\n editor.update(() => {\n const node: BlockNode = $getNodeByKey(nodeKey)\n if (node) {\n node.setFields(newFormData as BlockFields)\n }\n })\n }, 0)\n }\n\n // update error count\n if (hasSubmitted) {\n let rowErrorCount = 0\n for (const formField of Object.values(fullFieldsWithValues)) {\n if (formField?.valid === false) {\n rowErrorCount++\n }\n }\n setErrorCount(rowErrorCount)\n }\n },\n [editor, nodeKey, hasSubmitted, formData],\n )\n\n const onCollapsedChange = useCallback(\n (changedCollapsed: boolean) => {\n void getDocPreferences().then((currentDocPreferences) => {\n const currentFieldPreferences = currentDocPreferences?.fields[field.name]\n\n const collapsedArray = currentFieldPreferences?.collapsed\n\n const newCollapsed: CollapsedPreferences =\n collapsedArray && collapsedArray?.length ? collapsedArray : []\n\n if (changedCollapsed) {\n if (!newCollapsed.includes(formData.id)) {\n newCollapsed.push(formData.id)\n }\n } else {\n if (newCollapsed.includes(formData.id)) {\n newCollapsed.splice(newCollapsed.indexOf(formData.id), 1)\n }\n }\n\n setDocFieldPreferences(field.name, {\n collapsed: newCollapsed,\n hello: 'hi',\n })\n })\n },\n [getDocPreferences, field.name, setDocFieldPreferences, formData.id],\n )\n\n const removeBlock = useCallback(() => {\n editor.update(() => {\n $getNodeByKey(nodeKey).remove()\n })\n }, [editor, nodeKey])\n\n return (\n <React.Fragment>\n <Collapsible\n className={classNames}\n collapsibleStyle={fieldHasErrors ? 'error' : 'default'}\n header={\n <div className={`${baseClass}__block-header`}>\n <div>\n <Pill\n className={`${baseClass}__block-pill ${baseClass}__block-pill-${formData?.blockType}`}\n pillStyle=\"white\"\n >\n {typeof labels.singular === 'string'\n ? getTranslation(labels.singular, i18n)\n : '[Singular Label]'}\n </Pill>\n <SectionTitle path=\"blockName\" readOnly={field?.readOnly} />\n {fieldHasErrors && <ErrorPill count={errorCount} i18n={i18n} withMessage />}\n </div>\n {editor.isEditable() && (\n <Button\n buttonStyle=\"icon-label\"\n className={`${baseClass}__removeButton`}\n disabled={field?.readOnly}\n icon=\"x\"\n onClick={(e) => {\n e.preventDefault()\n removeBlock()\n }}\n round\n tooltip=\"Remove Block\"\n />\n )}\n </div>\n }\n isCollapsed={isCollapsed}\n key={0}\n onToggle={(incomingCollapsedState) => {\n onCollapsedChange(incomingCollapsedState)\n setIsCollapsed(incomingCollapsedState)\n }}\n >\n <RenderFields\n className={`${baseClass}__fields`}\n fieldMap={Array.isArray(formSchema) ? formSchema : []}\n forceRender\n margins=\"small\"\n path=\"\" // Leaving path empty makes it so field values are not prefixed / scoped by the entire schemaPath. e.g. we can access \"myField\" instead of \"someLexicalField.feature.blocks.someArrayB\" // TODO: Could there be any implications leaving path different than schemaPath?\n readOnly={false}\n schemaPath={schemaPath} // Having the correct schemaPath here allows sub-fields (like array > addRow) to run correct form-state calls and retrieve their needed form state from the server\n />\n </Collapsible>\n\n <FormSavePlugin onChange={onFormChange} />\n </React.Fragment>\n )\n}\n"],"names":["useLexicalComposerContext","getTranslation","Button","Collapsible","ErrorPill","Pill","RenderFields","SectionTitle","useDocumentInfo","useFormSubmitted","useTranslation","dequal","$getNodeByKey","React","useCallback","FormSavePlugin","BlockContent","props","baseClass","field","formData","formSchema","nodeKey","reducedBlock","labels","schemaPath","i18n","editor","getDocPreferences","setDocFieldPreferences","isCollapsed","setIsCollapsed","useState","initialState","then","currentDocPreferences","currentFieldPreferences","fields","name","collapsedArray","collapsed","includes","id","hasSubmitted","errorCount","setErrorCount","fieldHasErrors","classNames","filter","Boolean","join","onFormChange","fullFieldsWithValues","newFormData","blockType","removeUndefinedAndNullAndEmptyArraysRecursively","obj","key","value","Array","isArray","length","undefined","setTimeout","update","node","setFields","rowErrorCount","formField","Object","values","valid","onCollapsedChange","changedCollapsed","newCollapsed","push","splice","indexOf","hello","removeBlock","remove","Fragment","className","collapsibleStyle","header","div","pillStyle","singular","path","readOnly","count","withMessage","isEditable","buttonStyle","disabled","icon","onClick","e","preventDefault","round","tooltip","onToggle","incomingCollapsedState","fieldMap","forceRender","margins","onChange"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../src/features/blocks/component/BlockContent.tsx"],"sourcesContent":["import type { FormFieldBase } from '@payloadcms/ui'\nimport type { FieldMap } from '@payloadcms/ui/utilities/buildComponentMap'\nimport type { CollapsedPreferences, Data, FormState } from 'payload'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext.js'\nimport { getTranslation } from '@payloadcms/translations'\nimport {\n Button,\n Collapsible,\n ErrorPill,\n Pill,\n RenderFields,\n SectionTitle,\n useDocumentInfo,\n useFormSubmitted,\n useTranslation,\n} from '@payloadcms/ui'\nimport { dequal } from 'dequal/lite' // lite: no need for Map and Set support\nimport { $getNodeByKey } from 'lexical'\nimport React, { useCallback } from 'react'\n\nimport type { SanitizedClientEditorConfig } from '../../../lexical/config/types.js'\nimport type { ClientBlock } from '../feature.client.js'\nimport type { BlockFields, BlockNode } from '../nodes/BlocksNode.js'\n\nimport { FormSavePlugin } from './FormSavePlugin.js'\n\ntype Props = {\n baseClass: string\n field: {\n editorConfig: SanitizedClientEditorConfig // With rendered features n stuff\n name: string\n richTextComponentMap: Map<string, React.ReactNode>\n } & FormFieldBase\n formData: BlockFields\n formSchema: FieldMap\n nodeKey: string\n path: string\n reducedBlock: ClientBlock\n schemaPath: string\n}\n\n/**\n * The actual content of the Block. This should be INSIDE a Form component,\n * scoped to the block. All format operations in here are thus scoped to the block's form, and\n * not the whole document.\n */\nexport const BlockContent: React.FC<Props> = (props) => {\n const {\n baseClass,\n field,\n formData,\n formSchema,\n nodeKey,\n reducedBlock: { LabelComponent, labels },\n schemaPath,\n } = props\n\n const { i18n } = useTranslation()\n const [editor] = useLexicalComposerContext()\n // Used for saving collapsed to preferences (and gettin' it from there again)\n // Remember, these preferences are scoped to the whole document, not just this form. This\n // is important to consider for the data path used in setDocFieldPreferences\n const { getDocPreferences, setDocFieldPreferences } = useDocumentInfo()\n\n const [isCollapsed, setIsCollapsed] = React.useState<boolean>(() => {\n let initialState = false\n\n void getDocPreferences().then((currentDocPreferences) => {\n const currentFieldPreferences = currentDocPreferences?.fields[field.name]\n\n const collapsedArray = currentFieldPreferences?.collapsed\n\n if (collapsedArray && collapsedArray.includes(formData.id)) {\n initialState = true\n setIsCollapsed(true)\n }\n })\n return initialState\n })\n\n const hasSubmitted = useFormSubmitted()\n\n const [errorCount, setErrorCount] = React.useState(0)\n\n const fieldHasErrors = hasSubmitted && errorCount > 0\n\n const classNames = [\n `${baseClass}__row`,\n fieldHasErrors ? `${baseClass}__row--has-errors` : `${baseClass}__row--no-errors`,\n ]\n .filter(Boolean)\n .join(' ')\n\n const onFormChange = useCallback(\n ({\n fullFieldsWithValues,\n newFormData,\n }: {\n fullFieldsWithValues: FormState\n newFormData: Data\n }) => {\n newFormData = {\n ...newFormData,\n id: formData.id,\n blockType: formData.blockType,\n }\n\n // Recursively remove all undefined values from even being present in formData, as they will\n // cause isDeepEqual to return false if, for example, formData has a key that fields.data\n // does not have, even if it's undefined.\n // Currently, this happens if a block has another sub-blocks field. Inside formData, that sub-blocks field has an undefined blockName property.\n // Inside of fields.data however, that sub-blocks blockName property does not exist at all.\n function removeUndefinedAndNullAndEmptyArraysRecursively(obj: object) {\n for (const key in obj) {\n const value = obj[key]\n if (Array.isArray(value) && !value?.length) {\n delete obj[key]\n } else if (value && typeof value === 'object') {\n removeUndefinedAndNullAndEmptyArraysRecursively(value)\n } else if (value === undefined || value === null) {\n delete obj[key]\n }\n }\n }\n removeUndefinedAndNullAndEmptyArraysRecursively(newFormData)\n\n removeUndefinedAndNullAndEmptyArraysRecursively(formData)\n\n // Only update if the data has actually changed. Otherwise, we may be triggering an unnecessary value change,\n // which would trigger the \"Leave without saving\" dialog unnecessarily\n if (!dequal(formData, newFormData)) {\n // Running this in the next tick in the meantime fixes this issue: https://github.com/payloadcms/payload/issues/4108\n // I don't know why. When this is called immediately, it might focus out of a nested lexical editor field if an update is made there.\n // My hypothesis is that the nested editor might not have fully finished its update cycle yet. By updating in the next tick, we\n // ensure that the nested editor has finished its update cycle before we update the block node.\n setTimeout(() => {\n editor.update(() => {\n const node: BlockNode = $getNodeByKey(nodeKey)\n if (node) {\n node.setFields(newFormData as BlockFields)\n }\n })\n }, 0)\n }\n\n // update error count\n if (hasSubmitted) {\n let rowErrorCount = 0\n for (const formField of Object.values(fullFieldsWithValues)) {\n if (formField?.valid === false) {\n rowErrorCount++\n }\n }\n setErrorCount(rowErrorCount)\n }\n },\n [editor, nodeKey, hasSubmitted, formData],\n )\n\n const onCollapsedChange = useCallback(\n (changedCollapsed: boolean) => {\n void getDocPreferences().then((currentDocPreferences) => {\n const currentFieldPreferences = currentDocPreferences?.fields[field.name]\n\n const collapsedArray = currentFieldPreferences?.collapsed\n\n const newCollapsed: CollapsedPreferences =\n collapsedArray && collapsedArray?.length ? collapsedArray : []\n\n if (changedCollapsed) {\n if (!newCollapsed.includes(formData.id)) {\n newCollapsed.push(formData.id)\n }\n } else {\n if (newCollapsed.includes(formData.id)) {\n newCollapsed.splice(newCollapsed.indexOf(formData.id), 1)\n }\n }\n\n setDocFieldPreferences(field.name, {\n collapsed: newCollapsed,\n hello: 'hi',\n })\n })\n },\n [getDocPreferences, field.name, setDocFieldPreferences, formData.id],\n )\n\n const removeBlock = useCallback(() => {\n editor.update(() => {\n $getNodeByKey(nodeKey).remove()\n })\n }, [editor, nodeKey])\n\n return (\n <React.Fragment>\n <Collapsible\n className={classNames}\n collapsibleStyle={fieldHasErrors ? 'error' : 'default'}\n header={\n LabelComponent ? (\n <LabelComponent blockKind={'lexicalBlock'} formData={formData} />\n ) : (\n <div className={`${baseClass}__block-header`}>\n <div>\n <Pill\n className={`${baseClass}__block-pill ${baseClass}__block-pill-${formData?.blockType}`}\n pillStyle=\"white\"\n >\n {typeof labels.singular === 'string'\n ? getTranslation(labels.singular, i18n)\n : '[Singular Label]'}\n </Pill>\n <SectionTitle path=\"blockName\" readOnly={field?.readOnly} />\n {fieldHasErrors && <ErrorPill count={errorCount} i18n={i18n} withMessage />}\n </div>\n {editor.isEditable() && (\n <Button\n buttonStyle=\"icon-label\"\n className={`${baseClass}__removeButton`}\n disabled={field?.readOnly}\n icon=\"x\"\n onClick={(e) => {\n e.preventDefault()\n removeBlock()\n }}\n round\n tooltip=\"Remove Block\"\n />\n )}\n </div>\n )\n }\n isCollapsed={isCollapsed}\n key={0}\n onToggle={(incomingCollapsedState) => {\n onCollapsedChange(incomingCollapsedState)\n setIsCollapsed(incomingCollapsedState)\n }}\n >\n <RenderFields\n className={`${baseClass}__fields`}\n fieldMap={Array.isArray(formSchema) ? formSchema : []}\n forceRender\n margins=\"small\"\n path=\"\" // Leaving path empty makes it so field values are not prefixed / scoped by the entire schemaPath. e.g. we can access \"myField\" instead of \"someLexicalField.feature.blocks.someArrayB\" // TODO: Could there be any implications leaving path different than schemaPath?\n readOnly={false}\n schemaPath={schemaPath} // Having the correct schemaPath here allows sub-fields (like array > addRow) to run correct form-state calls and retrieve their needed form state from the server\n />\n </Collapsible>\n\n <FormSavePlugin onChange={onFormChange} />\n </React.Fragment>\n )\n}\n"],"names":["useLexicalComposerContext","getTranslation","Button","Collapsible","ErrorPill","Pill","RenderFields","SectionTitle","useDocumentInfo","useFormSubmitted","useTranslation","dequal","$getNodeByKey","React","useCallback","FormSavePlugin","BlockContent","props","baseClass","field","formData","formSchema","nodeKey","reducedBlock","LabelComponent","labels","schemaPath","i18n","editor","getDocPreferences","setDocFieldPreferences","isCollapsed","setIsCollapsed","useState","initialState","then","currentDocPreferences","currentFieldPreferences","fields","name","collapsedArray","collapsed","includes","id","hasSubmitted","errorCount","setErrorCount","fieldHasErrors","classNames","filter","Boolean","join","onFormChange","fullFieldsWithValues","newFormData","blockType","removeUndefinedAndNullAndEmptyArraysRecursively","obj","key","value","Array","isArray","length","undefined","setTimeout","update","node","setFields","rowErrorCount","formField","Object","values","valid","onCollapsedChange","changedCollapsed","newCollapsed","push","splice","indexOf","hello","removeBlock","remove","Fragment","className","collapsibleStyle","header","blockKind","div","pillStyle","singular","path","readOnly","count","withMessage","isEditable","buttonStyle","disabled","icon","onClick","e","preventDefault","round","tooltip","onToggle","incomingCollapsedState","fieldMap","forceRender","margins","onChange"],"mappings":";AAIA,SAASA,yBAAyB,QAAQ,2CAA0C;AACpF,SAASC,cAAc,QAAQ,2BAA0B;AACzD,SACEC,MAAM,EACNC,WAAW,EACXC,SAAS,EACTC,IAAI,EACJC,YAAY,EACZC,YAAY,EACZC,eAAe,EACfC,gBAAgB,EAChBC,cAAc,QACT,iBAAgB;AACvB,SAASC,MAAM,QAAQ,cAAa,CAAC,wCAAwC;AAC7E,SAASC,aAAa,QAAQ,UAAS;AACvC,OAAOC,SAASC,WAAW,QAAQ,QAAO;AAM1C,SAASC,cAAc,QAAQ,sBAAqB;AAiBpD;;;;CAIC,GACD,OAAO,MAAMC,eAAgC,CAACC;IAC5C,MAAM,EACJC,SAAS,EACTC,KAAK,EACLC,QAAQ,EACRC,UAAU,EACVC,OAAO,EACPC,cAAc,EAAEC,cAAc,EAAEC,MAAM,EAAE,EACxCC,UAAU,EACX,GAAGT;IAEJ,MAAM,EAAEU,IAAI,EAAE,GAAGjB;IACjB,MAAM,CAACkB,OAAO,GAAG5B;IACjB,6EAA6E;IAC7E,yFAAyF;IACzF,4EAA4E;IAC5E,MAAM,EAAE6B,iBAAiB,EAAEC,sBAAsB,EAAE,GAAGtB;IAEtD,MAAM,CAACuB,aAAaC,eAAe,GAAGnB,MAAMoB,QAAQ,CAAU;QAC5D,IAAIC,eAAe;QAEnB,KAAKL,oBAAoBM,IAAI,CAAC,CAACC;YAC7B,MAAMC,0BAA0BD,uBAAuBE,MAAM,CAACnB,MAAMoB,IAAI,CAAC;YAEzE,MAAMC,iBAAiBH,yBAAyBI;YAEhD,IAAID,kBAAkBA,eAAeE,QAAQ,CAACtB,SAASuB,EAAE,GAAG;gBAC1DT,eAAe;gBACfF,eAAe;YACjB;QACF;QACA,OAAOE;IACT;IAEA,MAAMU,eAAenC;IAErB,MAAM,CAACoC,YAAYC,cAAc,GAAGjC,MAAMoB,QAAQ,CAAC;IAEnD,MAAMc,iBAAiBH,gBAAgBC,aAAa;IAEpD,MAAMG,aAAa;QACjB,CAAC,EAAE9B,UAAU,KAAK,CAAC;QACnB6B,iBAAiB,CAAC,EAAE7B,UAAU,iBAAiB,CAAC,GAAG,CAAC,EAAEA,UAAU,gBAAgB,CAAC;KAClF,CACE+B,MAAM,CAACC,SACPC,IAAI,CAAC;IAER,MAAMC,eAAetC,YACnB,CAAC,EACCuC,oBAAoB,EACpBC,WAAW,EAIZ;QACCA,cAAc;YACZ,GAAGA,WAAW;YACdX,IAAIvB,SAASuB,EAAE;YACfY,WAAWnC,SAASmC,SAAS;QAC/B;QAEA,4FAA4F;QAC5F,yFAAyF;QACzF,yCAAyC;QACzC,+IAA+I;QAC/I,2FAA2F;QAC3F,SAASC,gDAAgDC,GAAW;YAClE,IAAK,MAAMC,OAAOD,IAAK;gBACrB,MAAME,QAAQF,GAAG,CAACC,IAAI;gBACtB,IAAIE,MAAMC,OAAO,CAACF,UAAU,CAACA,OAAOG,QAAQ;oBAC1C,OAAOL,GAAG,CAACC,IAAI;gBACjB,OAAO,IAAIC,SAAS,OAAOA,UAAU,UAAU;oBAC7CH,gDAAgDG;gBAClD,OAAO,IAAIA,UAAUI,aAAaJ,UAAU,MAAM;oBAChD,OAAOF,GAAG,CAACC,IAAI;gBACjB;YACF;QACF;QACAF,gDAAgDF;QAEhDE,gDAAgDpC;QAEhD,6GAA6G;QAC7G,sEAAsE;QACtE,IAAI,CAACT,OAAOS,UAAUkC,cAAc;YAClC,oHAAoH;YACpH,qIAAqI;YACrI,+HAA+H;YAC/H,+FAA+F;YAC/FU,WAAW;gBACTpC,OAAOqC,MAAM,CAAC;oBACZ,MAAMC,OAAkBtD,cAAcU;oBACtC,IAAI4C,MAAM;wBACRA,KAAKC,SAAS,CAACb;oBACjB;gBACF;YACF,GAAG;QACL;QAEA,qBAAqB;QACrB,IAAIV,cAAc;YAChB,IAAIwB,gBAAgB;YACpB,KAAK,MAAMC,aAAaC,OAAOC,MAAM,CAAClB,sBAAuB;gBAC3D,IAAIgB,WAAWG,UAAU,OAAO;oBAC9BJ;gBACF;YACF;YACAtB,cAAcsB;QAChB;IACF,GACA;QAACxC;QAAQN;QAASsB;QAAcxB;KAAS;IAG3C,MAAMqD,oBAAoB3D,YACxB,CAAC4D;QACC,KAAK7C,oBAAoBM,IAAI,CAAC,CAACC;YAC7B,MAAMC,0BAA0BD,uBAAuBE,MAAM,CAACnB,MAAMoB,IAAI,CAAC;YAEzE,MAAMC,iBAAiBH,yBAAyBI;YAEhD,MAAMkC,eACJnC,kBAAkBA,gBAAgBsB,SAAStB,iBAAiB,EAAE;YAEhE,IAAIkC,kBAAkB;gBACpB,IAAI,CAACC,aAAajC,QAAQ,CAACtB,SAASuB,EAAE,GAAG;oBACvCgC,aAAaC,IAAI,CAACxD,SAASuB,EAAE;gBAC/B;YACF,OAAO;gBACL,IAAIgC,aAAajC,QAAQ,CAACtB,SAASuB,EAAE,GAAG;oBACtCgC,aAAaE,MAAM,CAACF,aAAaG,OAAO,CAAC1D,SAASuB,EAAE,GAAG;gBACzD;YACF;YAEAb,uBAAuBX,MAAMoB,IAAI,EAAE;gBACjCE,WAAWkC;gBACXI,OAAO;YACT;QACF;IACF,GACA;QAAClD;QAAmBV,MAAMoB,IAAI;QAAET;QAAwBV,SAASuB,EAAE;KAAC;IAGtE,MAAMqC,cAAclE,YAAY;QAC9Bc,OAAOqC,MAAM,CAAC;YACZrD,cAAcU,SAAS2D,MAAM;QAC/B;IACF,GAAG;QAACrD;QAAQN;KAAQ;IAEpB,qBACE,MAACT,MAAMqE,QAAQ;;0BACb,KAAC/E;gBACCgF,WAAWnC;gBACXoC,kBAAkBrC,iBAAiB,UAAU;gBAC7CsC,QACE7D,+BACE,KAACA;oBAAe8D,WAAW;oBAAgBlE,UAAUA;mCAErD,MAACmE;oBAAIJ,WAAW,CAAC,EAAEjE,UAAU,cAAc,CAAC;;sCAC1C,MAACqE;;8CACC,KAAClF;oCACC8E,WAAW,CAAC,EAAEjE,UAAU,aAAa,EAAEA,UAAU,aAAa,EAAEE,UAAUmC,UAAU,CAAC;oCACrFiC,WAAU;8CAET,OAAO/D,OAAOgE,QAAQ,KAAK,WACxBxF,eAAewB,OAAOgE,QAAQ,EAAE9D,QAChC;;8CAEN,KAACpB;oCAAamF,MAAK;oCAAYC,UAAUxE,OAAOwE;;gCAC/C5C,gCAAkB,KAAC3C;oCAAUwF,OAAO/C;oCAAYlB,MAAMA;oCAAMkE,WAAW;;;;wBAEzEjE,OAAOkE,UAAU,oBAChB,KAAC5F;4BACC6F,aAAY;4BACZZ,WAAW,CAAC,EAAEjE,UAAU,cAAc,CAAC;4BACvC8E,UAAU7E,OAAOwE;4BACjBM,MAAK;4BACLC,SAAS,CAACC;gCACRA,EAAEC,cAAc;gCAChBpB;4BACF;4BACAqB,KAAK;4BACLC,SAAQ;;;;gBAMlBvE,aAAaA;gBAEbwE,UAAU,CAACC;oBACT/B,kBAAkB+B;oBAClBxE,eAAewE;gBACjB;0BAEA,cAAA,KAAClG;oBACC6E,WAAW,CAAC,EAAEjE,UAAU,QAAQ,CAAC;oBACjCuF,UAAU7C,MAAMC,OAAO,CAACxC,cAAcA,aAAa,EAAE;oBACrDqF,WAAW;oBACXC,SAAQ;oBACRjB,MAAK,GAAG,wQAAwQ;;oBAChRC,UAAU;oBACVjE,YAAYA;;eAbT;0BAiBP,KAACX;gBAAe6F,UAAUxD;;;;AAGhC,EAAC"}
@@ -5,10 +5,6 @@ type Props = {
5
5
  children?: React.ReactNode;
6
6
  formData: BlockFields;
7
7
  nodeKey?: string;
8
- /**
9
- * This transformedFormData already comes wrapped in blockFieldWrapperName
10
- */
11
- transformedFormData: BlockFields;
12
8
  };
13
9
  export declare const BlockComponent: React.FC<Props>;
14
10
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/features/blocks/component/index.tsx"],"names":[],"mappings":"AAgBA,OAAO,KAAoD,MAAM,OAAO,CAAA;AAExE,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,wBAAwB,CAAA;AAczD,OAAO,cAAc,CAAA;AAErB,KAAK,KAAK,GAAG;IACX,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAE1B,QAAQ,EAAE,WAAW,CAAA;IACrB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB;;OAEG;IACH,mBAAmB,EAAE,WAAW,CAAA;CACjC,CAAA;AAED,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAiJ1C,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/features/blocks/component/index.tsx"],"names":[],"mappings":"AAgBA,OAAO,KAAoD,MAAM,OAAO,CAAA;AAExE,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,wBAAwB,CAAA;AAazD,OAAO,cAAc,CAAA;AAErB,KAAK,KAAK,GAAG;IACX,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAC1B,QAAQ,EAAE,WAAW,CAAA;IACrB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB,CAAA;AAED,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAuJ1C,CAAA"}
@@ -88,6 +88,7 @@ export const BlockComponent = (props)=>{
88
88
  `${baseClass}__row`,
89
89
  `${baseClass}__row--no-errors`
90
90
  ].filter(Boolean).join(' ');
91
+ const LabelComponent = reducedBlock?.LabelComponent;
91
92
  // Memoized Form JSX
92
93
  const formContent = useMemo(()=>{
93
94
  return reducedBlock && initialState !== false ? /*#__PURE__*/ _jsx(Form, {
@@ -115,14 +116,17 @@ export const BlockComponent = (props)=>{
115
116
  }) : /*#__PURE__*/ _jsx(Collapsible, {
116
117
  className: classNames,
117
118
  collapsibleStyle: "default",
118
- header: /*#__PURE__*/ _jsx("div", {
119
+ header: LabelComponent ? /*#__PURE__*/ _jsx(LabelComponent, {
120
+ blockKind: 'lexicalBlock',
121
+ formData: formData
122
+ }) : /*#__PURE__*/ _jsx("div", {
119
123
  className: `${baseClass}__block-header`,
120
124
  children: /*#__PURE__*/ _jsxs("div", {
121
125
  children: [
122
126
  /*#__PURE__*/ _jsx(Pill, {
123
127
  className: `${baseClass}__block-pill ${baseClass}__block-pill-${formData?.blockType}`,
124
128
  pillStyle: "white",
125
- children: typeof reducedBlock.labels.singular === 'string' ? getTranslation(reducedBlock.labels.singular, i18n) : '[Singular Label]'
129
+ children: reducedBlock && typeof reducedBlock.labels.singular === 'string' ? getTranslation(reducedBlock.labels.singular, i18n) : '[Singular Label]'
126
130
  }),
127
131
  /*#__PURE__*/ _jsx(SectionTitle, {
128
132
  path: "blockName",
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/features/blocks/component/index.tsx"],"sourcesContent":["'use client'\n\nimport type { FormProps } from '@payloadcms/ui'\n\nimport {\n Collapsible,\n Form,\n Pill,\n SectionTitle,\n ShimmerEffect,\n useConfig,\n useDocumentInfo,\n useFieldProps,\n useFormSubmitted,\n useTranslation,\n} from '@payloadcms/ui'\nimport React, { useCallback, useEffect, useMemo, useState } from 'react'\n\nimport { type BlockFields } from '../nodes/BlocksNode.js'\nconst baseClass = 'lexical-block'\nimport type { ReducedBlock } from '@payloadcms/ui/utilities/buildComponentMap'\nimport type { FormState } from 'payload'\n\nimport { getTranslation } from '@payloadcms/translations'\nimport { getFormState } from '@payloadcms/ui/shared'\nimport { v4 as uuid } from 'uuid'\n\nimport type { ClientComponentProps } from '../../typesClient.js'\nimport type { BlocksFeatureClientProps } from '../feature.client.js'\n\nimport { useEditorConfigContext } from '../../../lexical/config/client/EditorConfigProvider.js'\nimport { BlockContent } from './BlockContent.js'\nimport './index.scss'\n\ntype Props = {\n children?: React.ReactNode\n\n formData: BlockFields\n nodeKey?: string\n /**\n * This transformedFormData already comes wrapped in blockFieldWrapperName\n */\n transformedFormData: BlockFields\n}\n\nexport const BlockComponent: React.FC<Props> = (props) => {\n const { formData, nodeKey } = props\n const config = useConfig()\n const submitted = useFormSubmitted()\n const { id } = useDocumentInfo()\n const { path, schemaPath } = useFieldProps()\n const { editorConfig, field: parentLexicalRichTextField } = useEditorConfigContext()\n\n const [initialState, setInitialState] = useState<FormState | false>(false)\n const {\n field: { richTextComponentMap },\n } = useEditorConfigContext()\n\n const componentMapRenderedFieldsPath = `lexical_internal_feature.blocks.fields.${formData?.blockType}`\n const schemaFieldsPath = `${schemaPath}.lexical_internal_feature.blocks.${formData?.blockType}`\n\n const reducedBlock: ReducedBlock = (\n editorConfig?.resolvedFeatureMap?.get('blocks')\n ?.sanitizedClientFeatureProps as ClientComponentProps<BlocksFeatureClientProps>\n )?.reducedBlocks?.find((block) => block.slug === formData?.blockType)\n\n const fieldMap = richTextComponentMap.get(componentMapRenderedFieldsPath)\n // Field Schema\n useEffect(() => {\n const awaitInitialState = async () => {\n const state = await getFormState({\n apiRoute: config.routes.api,\n body: {\n id,\n data: formData,\n operation: 'update',\n schemaPath: schemaFieldsPath,\n },\n serverURL: config.serverURL,\n }) // Form State\n\n if (state) {\n setInitialState({\n ...state,\n blockName: {\n initialValue: '',\n passesCondition: true,\n valid: true,\n value: formData.blockName,\n },\n })\n }\n }\n\n if (formData) {\n void awaitInitialState()\n }\n }, [config.routes.api, config.serverURL, schemaFieldsPath, id])\n\n const onChange: FormProps['onChange'][0] = useCallback(\n async ({ formState: prevFormState }) => {\n const formState = await getFormState({\n apiRoute: config.routes.api,\n body: {\n id,\n formState: prevFormState,\n operation: 'update',\n schemaPath: schemaFieldsPath,\n },\n serverURL: config.serverURL,\n })\n\n return {\n ...formState,\n blockName: {\n initialValue: '',\n passesCondition: true,\n valid: true,\n value: formData.blockName,\n },\n }\n },\n\n [config.routes.api, config.serverURL, schemaFieldsPath, id, formData.blockName],\n )\n const { i18n } = useTranslation()\n\n const classNames = [`${baseClass}__row`, `${baseClass}__row--no-errors`].filter(Boolean).join(' ')\n\n // Memoized Form JSX\n const formContent = useMemo(() => {\n return reducedBlock && initialState !== false ? (\n <Form\n beforeSubmit={[onChange]}\n // @ts-expect-error TODO: Fix this\n fields={fieldMap}\n initialState={initialState}\n onChange={[onChange]}\n submitted={submitted}\n uuid={uuid()}\n >\n <BlockContent\n baseClass={baseClass}\n field={parentLexicalRichTextField}\n formData={formData}\n formSchema={Array.isArray(fieldMap) ? fieldMap : []}\n nodeKey={nodeKey}\n path={`${path}.lexical_internal_feature.blocks.${formData.blockType}`}\n reducedBlock={reducedBlock}\n schemaPath={schemaFieldsPath}\n />\n </Form>\n ) : (\n <Collapsible\n className={classNames}\n collapsibleStyle=\"default\"\n header={\n <div className={`${baseClass}__block-header`}>\n <div>\n <Pill\n className={`${baseClass}__block-pill ${baseClass}__block-pill-${formData?.blockType}`}\n pillStyle=\"white\"\n >\n {typeof reducedBlock.labels.singular === 'string'\n ? getTranslation(reducedBlock.labels.singular, i18n)\n : '[Singular Label]'}\n </Pill>\n <SectionTitle path=\"blockName\" readOnly={parentLexicalRichTextField?.readOnly} />\n </div>\n </div>\n }\n key={0}\n >\n <ShimmerEffect height=\"35vh\" />\n </Collapsible>\n )\n }, [\n classNames,\n fieldMap,\n parentLexicalRichTextField,\n nodeKey,\n i18n,\n submitted,\n initialState,\n reducedBlock,\n onChange,\n schemaFieldsPath,\n path,\n ]) // Adding formData to the dependencies here might break it\n return <div className={baseClass + ' ' + baseClass + '-' + formData.blockType}>{formContent}</div>\n}\n"],"names":["Collapsible","Form","Pill","SectionTitle","ShimmerEffect","useConfig","useDocumentInfo","useFieldProps","useFormSubmitted","useTranslation","React","useCallback","useEffect","useMemo","useState","baseClass","getTranslation","getFormState","v4","uuid","useEditorConfigContext","BlockContent","BlockComponent","props","formData","nodeKey","config","submitted","id","path","schemaPath","editorConfig","field","parentLexicalRichTextField","initialState","setInitialState","richTextComponentMap","componentMapRenderedFieldsPath","blockType","schemaFieldsPath","reducedBlock","resolvedFeatureMap","get","sanitizedClientFeatureProps","reducedBlocks","find","block","slug","fieldMap","awaitInitialState","state","apiRoute","routes","api","body","data","operation","serverURL","blockName","initialValue","passesCondition","valid","value","onChange","formState","prevFormState","i18n","classNames","filter","Boolean","join","formContent","beforeSubmit","fields","formSchema","Array","isArray","className","collapsibleStyle","header","div","pillStyle","labels","singular","readOnly","height"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../src/features/blocks/component/index.tsx"],"sourcesContent":["'use client'\n\nimport type { FormProps } from '@payloadcms/ui'\n\nimport {\n Collapsible,\n Form,\n Pill,\n SectionTitle,\n ShimmerEffect,\n useConfig,\n useDocumentInfo,\n useFieldProps,\n useFormSubmitted,\n useTranslation,\n} from '@payloadcms/ui'\nimport React, { useCallback, useEffect, useMemo, useState } from 'react'\n\nimport { type BlockFields } from '../nodes/BlocksNode.js'\nconst baseClass = 'lexical-block'\nimport type { FormState } from 'payload'\n\nimport { getTranslation } from '@payloadcms/translations'\nimport { getFormState } from '@payloadcms/ui/shared'\nimport { v4 as uuid } from 'uuid'\n\nimport type { ClientComponentProps } from '../../typesClient.js'\nimport type { BlocksFeatureClientProps, ClientBlock } from '../feature.client.js'\n\nimport { useEditorConfigContext } from '../../../lexical/config/client/EditorConfigProvider.js'\nimport { BlockContent } from './BlockContent.js'\nimport './index.scss'\n\ntype Props = {\n children?: React.ReactNode\n formData: BlockFields\n nodeKey?: string\n}\n\nexport const BlockComponent: React.FC<Props> = (props) => {\n const { formData, nodeKey } = props\n const config = useConfig()\n const submitted = useFormSubmitted()\n const { id } = useDocumentInfo()\n const { path, schemaPath } = useFieldProps()\n const { editorConfig, field: parentLexicalRichTextField } = useEditorConfigContext()\n\n const [initialState, setInitialState] = useState<FormState | false>(false)\n const {\n field: { richTextComponentMap },\n } = useEditorConfigContext()\n\n const componentMapRenderedFieldsPath = `lexical_internal_feature.blocks.fields.${formData?.blockType}`\n const schemaFieldsPath = `${schemaPath}.lexical_internal_feature.blocks.${formData?.blockType}`\n\n const reducedBlock: ClientBlock = (\n editorConfig?.resolvedFeatureMap?.get('blocks')\n ?.sanitizedClientFeatureProps as ClientComponentProps<BlocksFeatureClientProps>\n )?.reducedBlocks?.find((block) => block.slug === formData?.blockType)\n\n const fieldMap = richTextComponentMap.get(componentMapRenderedFieldsPath)\n // Field Schema\n useEffect(() => {\n const awaitInitialState = async () => {\n const state = await getFormState({\n apiRoute: config.routes.api,\n body: {\n id,\n data: formData,\n operation: 'update',\n schemaPath: schemaFieldsPath,\n },\n serverURL: config.serverURL,\n }) // Form State\n\n if (state) {\n setInitialState({\n ...state,\n blockName: {\n initialValue: '',\n passesCondition: true,\n valid: true,\n value: formData.blockName,\n },\n })\n }\n }\n\n if (formData) {\n void awaitInitialState()\n }\n }, [config.routes.api, config.serverURL, schemaFieldsPath, id])\n\n const onChange: FormProps['onChange'][0] = useCallback(\n async ({ formState: prevFormState }) => {\n const formState = await getFormState({\n apiRoute: config.routes.api,\n body: {\n id,\n formState: prevFormState,\n operation: 'update',\n schemaPath: schemaFieldsPath,\n },\n serverURL: config.serverURL,\n })\n\n return {\n ...formState,\n blockName: {\n initialValue: '',\n passesCondition: true,\n valid: true,\n value: formData.blockName,\n },\n }\n },\n\n [config.routes.api, config.serverURL, schemaFieldsPath, id, formData.blockName],\n )\n const { i18n } = useTranslation()\n\n const classNames = [`${baseClass}__row`, `${baseClass}__row--no-errors`].filter(Boolean).join(' ')\n\n const LabelComponent = reducedBlock?.LabelComponent\n\n // Memoized Form JSX\n const formContent = useMemo(() => {\n return reducedBlock && initialState !== false ? (\n <Form\n beforeSubmit={[onChange]}\n // @ts-expect-error TODO: Fix this\n fields={fieldMap}\n initialState={initialState}\n onChange={[onChange]}\n submitted={submitted}\n uuid={uuid()}\n >\n <BlockContent\n baseClass={baseClass}\n field={parentLexicalRichTextField}\n formData={formData}\n formSchema={Array.isArray(fieldMap) ? fieldMap : []}\n nodeKey={nodeKey}\n path={`${path}.lexical_internal_feature.blocks.${formData.blockType}`}\n reducedBlock={reducedBlock}\n schemaPath={schemaFieldsPath}\n />\n </Form>\n ) : (\n <Collapsible\n className={classNames}\n collapsibleStyle=\"default\"\n header={\n LabelComponent ? (\n <LabelComponent blockKind={'lexicalBlock'} formData={formData} />\n ) : (\n <div className={`${baseClass}__block-header`}>\n <div>\n <Pill\n className={`${baseClass}__block-pill ${baseClass}__block-pill-${formData?.blockType}`}\n pillStyle=\"white\"\n >\n {reducedBlock && typeof reducedBlock.labels.singular === 'string'\n ? getTranslation(reducedBlock.labels.singular, i18n)\n : '[Singular Label]'}\n </Pill>\n <SectionTitle path=\"blockName\" readOnly={parentLexicalRichTextField?.readOnly} />\n </div>\n </div>\n )\n }\n key={0}\n >\n <ShimmerEffect height=\"35vh\" />\n </Collapsible>\n )\n }, [\n classNames,\n fieldMap,\n parentLexicalRichTextField,\n nodeKey,\n i18n,\n submitted,\n initialState,\n reducedBlock,\n onChange,\n schemaFieldsPath,\n path,\n ]) // Adding formData to the dependencies here might break it\n return <div className={baseClass + ' ' + baseClass + '-' + formData.blockType}>{formContent}</div>\n}\n"],"names":["Collapsible","Form","Pill","SectionTitle","ShimmerEffect","useConfig","useDocumentInfo","useFieldProps","useFormSubmitted","useTranslation","React","useCallback","useEffect","useMemo","useState","baseClass","getTranslation","getFormState","v4","uuid","useEditorConfigContext","BlockContent","BlockComponent","props","formData","nodeKey","config","submitted","id","path","schemaPath","editorConfig","field","parentLexicalRichTextField","initialState","setInitialState","richTextComponentMap","componentMapRenderedFieldsPath","blockType","schemaFieldsPath","reducedBlock","resolvedFeatureMap","get","sanitizedClientFeatureProps","reducedBlocks","find","block","slug","fieldMap","awaitInitialState","state","apiRoute","routes","api","body","data","operation","serverURL","blockName","initialValue","passesCondition","valid","value","onChange","formState","prevFormState","i18n","classNames","filter","Boolean","join","LabelComponent","formContent","beforeSubmit","fields","formSchema","Array","isArray","className","collapsibleStyle","header","blockKind","div","pillStyle","labels","singular","readOnly","height"],"mappings":"AAAA;;AAIA,SACEA,WAAW,EACXC,IAAI,EACJC,IAAI,EACJC,YAAY,EACZC,aAAa,EACbC,SAAS,EACTC,eAAe,EACfC,aAAa,EACbC,gBAAgB,EAChBC,cAAc,QACT,iBAAgB;AACvB,OAAOC,SAASC,WAAW,EAAEC,SAAS,EAAEC,OAAO,EAAEC,QAAQ,QAAQ,QAAO;AAGxE,MAAMC,YAAY;AAGlB,SAASC,cAAc,QAAQ,2BAA0B;AACzD,SAASC,YAAY,QAAQ,wBAAuB;AACpD,SAASC,MAAMC,IAAI,QAAQ,OAAM;AAKjC,SAASC,sBAAsB,QAAQ,yDAAwD;AAC/F,SAASC,YAAY,QAAQ,oBAAmB;AAShD,OAAO,MAAMC,iBAAkC,CAACC;IAC9C,MAAM,EAAEC,QAAQ,EAAEC,OAAO,EAAE,GAAGF;IAC9B,MAAMG,SAASrB;IACf,MAAMsB,YAAYnB;IAClB,MAAM,EAAEoB,EAAE,EAAE,GAAGtB;IACf,MAAM,EAAEuB,IAAI,EAAEC,UAAU,EAAE,GAAGvB;IAC7B,MAAM,EAAEwB,YAAY,EAAEC,OAAOC,0BAA0B,EAAE,GAAGb;IAE5D,MAAM,CAACc,cAAcC,gBAAgB,GAAGrB,SAA4B;IACpE,MAAM,EACJkB,OAAO,EAAEI,oBAAoB,EAAE,EAChC,GAAGhB;IAEJ,MAAMiB,iCAAiC,CAAC,uCAAuC,EAAEb,UAAUc,UAAU,CAAC;IACtG,MAAMC,mBAAmB,CAAC,EAAET,WAAW,iCAAiC,EAAEN,UAAUc,UAAU,CAAC;IAE/F,MAAME,eACJT,cAAcU,oBAAoBC,IAAI,WAClCC,6BACHC,eAAeC,KAAK,CAACC,QAAUA,MAAMC,IAAI,KAAKvB,UAAUc;IAE3D,MAAMU,WAAWZ,qBAAqBM,GAAG,CAACL;IAC1C,eAAe;IACfzB,UAAU;QACR,MAAMqC,oBAAoB;YACxB,MAAMC,QAAQ,MAAMjC,aAAa;gBAC/BkC,UAAUzB,OAAO0B,MAAM,CAACC,GAAG;gBAC3BC,MAAM;oBACJ1B;oBACA2B,MAAM/B;oBACNgC,WAAW;oBACX1B,YAAYS;gBACd;gBACAkB,WAAW/B,OAAO+B,SAAS;YAC7B,GAAG,aAAa;;YAEhB,IAAIP,OAAO;gBACTf,gBAAgB;oBACd,GAAGe,KAAK;oBACRQ,WAAW;wBACTC,cAAc;wBACdC,iBAAiB;wBACjBC,OAAO;wBACPC,OAAOtC,SAASkC,SAAS;oBAC3B;gBACF;YACF;QACF;QAEA,IAAIlC,UAAU;YACZ,KAAKyB;QACP;IACF,GAAG;QAACvB,OAAO0B,MAAM,CAACC,GAAG;QAAE3B,OAAO+B,SAAS;QAAElB;QAAkBX;KAAG;IAE9D,MAAMmC,WAAqCpD,YACzC,OAAO,EAAEqD,WAAWC,aAAa,EAAE;QACjC,MAAMD,YAAY,MAAM/C,aAAa;YACnCkC,UAAUzB,OAAO0B,MAAM,CAACC,GAAG;YAC3BC,MAAM;gBACJ1B;gBACAoC,WAAWC;gBACXT,WAAW;gBACX1B,YAAYS;YACd;YACAkB,WAAW/B,OAAO+B,SAAS;QAC7B;QAEA,OAAO;YACL,GAAGO,SAAS;YACZN,WAAW;gBACTC,cAAc;gBACdC,iBAAiB;gBACjBC,OAAO;gBACPC,OAAOtC,SAASkC,SAAS;YAC3B;QACF;IACF,GAEA;QAAChC,OAAO0B,MAAM,CAACC,GAAG;QAAE3B,OAAO+B,SAAS;QAAElB;QAAkBX;QAAIJ,SAASkC,SAAS;KAAC;IAEjF,MAAM,EAAEQ,IAAI,EAAE,GAAGzD;IAEjB,MAAM0D,aAAa;QAAC,CAAC,EAAEpD,UAAU,KAAK,CAAC;QAAE,CAAC,EAAEA,UAAU,gBAAgB,CAAC;KAAC,CAACqD,MAAM,CAACC,SAASC,IAAI,CAAC;IAE9F,MAAMC,iBAAiB/B,cAAc+B;IAErC,oBAAoB;IACpB,MAAMC,cAAc3D,QAAQ;QAC1B,OAAO2B,gBAAgBN,iBAAiB,sBACtC,KAACjC;YACCwE,cAAc;gBAACV;aAAS;YACxB,kCAAkC;YAClCW,QAAQ1B;YACRd,cAAcA;YACd6B,UAAU;gBAACA;aAAS;YACpBpC,WAAWA;YACXR,MAAMA;sBAEN,cAAA,KAACE;gBACCN,WAAWA;gBACXiB,OAAOC;gBACPT,UAAUA;gBACVmD,YAAYC,MAAMC,OAAO,CAAC7B,YAAYA,WAAW,EAAE;gBACnDvB,SAASA;gBACTI,MAAM,CAAC,EAAEA,KAAK,iCAAiC,EAAEL,SAASc,SAAS,CAAC,CAAC;gBACrEE,cAAcA;gBACdV,YAAYS;;2BAIhB,KAACvC;YACC8E,WAAWX;YACXY,kBAAiB;YACjBC,QACET,+BACE,KAACA;gBAAeU,WAAW;gBAAgBzD,UAAUA;+BAErD,KAAC0D;gBAAIJ,WAAW,CAAC,EAAE/D,UAAU,cAAc,CAAC;0BAC1C,cAAA,MAACmE;;sCACC,KAAChF;4BACC4E,WAAW,CAAC,EAAE/D,UAAU,aAAa,EAAEA,UAAU,aAAa,EAAES,UAAUc,UAAU,CAAC;4BACrF6C,WAAU;sCAET3C,gBAAgB,OAAOA,aAAa4C,MAAM,CAACC,QAAQ,KAAK,WACrDrE,eAAewB,aAAa4C,MAAM,CAACC,QAAQ,EAAEnB,QAC7C;;sCAEN,KAAC/D;4BAAa0B,MAAK;4BAAYyD,UAAUrD,4BAA4BqD;;;;;sBAO7E,cAAA,KAAClF;gBAAcmF,QAAO;;WAFjB;IAKX,GAAG;QACDpB;QACAnB;QACAf;QACAR;QACAyC;QACAvC;QACAO;QACAM;QACAuB;QACAxB;QACAV;KACD,EAAE,0DAA0D;;IAC7D,qBAAO,KAACqD;QAAIJ,WAAW/D,YAAY,MAAMA,YAAY,MAAMS,SAASc,SAAS;kBAAGkC;;AAClF,EAAC"}
@@ -0,0 +1,10 @@
1
+ import React from 'react';
2
+ import type { InlineBlockFields } from '../nodes/InlineBlocksNode.js';
3
+ import './index.scss';
4
+ type Props = {
5
+ readonly formData: InlineBlockFields;
6
+ readonly nodeKey?: string;
7
+ };
8
+ export declare const InlineBlockComponent: React.FC<Props>;
9
+ export {};
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/features/blocks/componentInline/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAyC,MAAM,OAAO,CAAA;AAoB7D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AAKrE,OAAO,cAAc,CAAA;AAErB,KAAK,KAAK,GAAG;IACX,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAA;IACpC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAC1B,CAAA;AAED,eAAO,MAAM,oBAAoB,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CA2HhD,CAAA"}
@@ -0,0 +1,133 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import React, { useCallback, useEffect, useRef } from 'react';
4
+ const baseClass = 'inline-block';
5
+ import { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext';
6
+ import { useLexicalNodeSelection } from '@lexical/react/useLexicalNodeSelection';
7
+ import { mergeRegister } from '@lexical/utils';
8
+ import { getTranslation } from '@payloadcms/translations';
9
+ import { Button, useTranslation } from '@payloadcms/ui';
10
+ import { $getNodeByKey, $getSelection, $isNodeSelection, CLICK_COMMAND, COMMAND_PRIORITY_LOW, KEY_BACKSPACE_COMMAND, KEY_DELETE_COMMAND } from 'lexical';
11
+ import { useEditorConfigContext } from '../../../lexical/config/client/EditorConfigProvider.js';
12
+ import { $isInlineBlockNode } from '../nodes/InlineBlocksNode.js';
13
+ import { OPEN_INLINE_BLOCK_DRAWER_COMMAND } from '../plugin/commands.js';
14
+ export const InlineBlockComponent = (props)=>{
15
+ const { formData, nodeKey } = props;
16
+ const [editor] = useLexicalComposerContext();
17
+ const { i18n, t } = useTranslation();
18
+ const { editorConfig, field } = useEditorConfigContext();
19
+ const inlineBlockElemElemRef = useRef(null);
20
+ const [isSelected, setSelected, clearSelection] = useLexicalNodeSelection(nodeKey);
21
+ const reducedBlock = editorConfig?.resolvedFeatureMap?.get('blocks')?.sanitizedClientFeatureProps?.reducedInlineBlocks?.find((block)=>block.slug === formData?.blockType);
22
+ const removeInlineBlock = useCallback(()=>{
23
+ editor.update(()=>{
24
+ $getNodeByKey(nodeKey).remove();
25
+ });
26
+ }, [
27
+ editor,
28
+ nodeKey
29
+ ]);
30
+ const $onDelete = useCallback((event)=>{
31
+ if (isSelected && $isNodeSelection($getSelection())) {
32
+ event.preventDefault();
33
+ const node = $getNodeByKey(nodeKey);
34
+ if ($isInlineBlockNode(node)) {
35
+ node.remove();
36
+ return true;
37
+ }
38
+ }
39
+ return false;
40
+ }, [
41
+ isSelected,
42
+ nodeKey
43
+ ]);
44
+ const onClick = useCallback((payload)=>{
45
+ const event = payload;
46
+ // Check if inlineBlockElemElemRef.target or anything WITHIN inlineBlockElemElemRef.target was clicked
47
+ if (event.target === inlineBlockElemElemRef.current || inlineBlockElemElemRef.current?.contains(event.target)) {
48
+ if (event.shiftKey) {
49
+ setSelected(!isSelected);
50
+ } else {
51
+ if (!isSelected) {
52
+ clearSelection();
53
+ setSelected(true);
54
+ }
55
+ }
56
+ return true;
57
+ }
58
+ return false;
59
+ }, [
60
+ isSelected,
61
+ setSelected,
62
+ clearSelection
63
+ ]);
64
+ useEffect(()=>{
65
+ return mergeRegister(editor.registerCommand(CLICK_COMMAND, onClick, COMMAND_PRIORITY_LOW), editor.registerCommand(KEY_DELETE_COMMAND, $onDelete, COMMAND_PRIORITY_LOW), editor.registerCommand(KEY_BACKSPACE_COMMAND, $onDelete, COMMAND_PRIORITY_LOW));
66
+ }, [
67
+ clearSelection,
68
+ editor,
69
+ isSelected,
70
+ nodeKey,
71
+ $onDelete,
72
+ setSelected,
73
+ onClick
74
+ ]);
75
+ const LabelComponent = reducedBlock?.LabelComponent;
76
+ const blockDisplayName = reducedBlock.labels.singular ? getTranslation(reducedBlock.labels.singular, i18n) : reducedBlock.slug;
77
+ return /*#__PURE__*/ _jsxs("div", {
78
+ className: [
79
+ baseClass,
80
+ baseClass + '-' + formData.blockType,
81
+ isSelected && `${baseClass}--selected`
82
+ ].filter(Boolean).join(' '),
83
+ ref: inlineBlockElemElemRef,
84
+ children: [
85
+ LabelComponent ? /*#__PURE__*/ _jsx(LabelComponent, {
86
+ blockKind: 'lexicalInlineBlock',
87
+ formData: formData
88
+ }) : /*#__PURE__*/ _jsx("div", {
89
+ children: getTranslation(reducedBlock.labels.singular, i18n)
90
+ }),
91
+ editor.isEditable() && /*#__PURE__*/ _jsxs("div", {
92
+ className: `${baseClass}__actions`,
93
+ children: [
94
+ /*#__PURE__*/ _jsx(Button, {
95
+ buttonStyle: "icon-label",
96
+ className: `${baseClass}__editButton`,
97
+ disabled: field?.readOnly,
98
+ el: "div",
99
+ icon: "edit",
100
+ onClick: ()=>{
101
+ editor.dispatchCommand(OPEN_INLINE_BLOCK_DRAWER_COMMAND, {
102
+ fields: formData,
103
+ nodeKey
104
+ });
105
+ },
106
+ round: true,
107
+ size: "small",
108
+ tooltip: t('lexical:blocks:inlineBlocks:edit', {
109
+ label: blockDisplayName
110
+ })
111
+ }),
112
+ /*#__PURE__*/ _jsx(Button, {
113
+ buttonStyle: "icon-label",
114
+ className: `${baseClass}__removeButton`,
115
+ disabled: field?.readOnly,
116
+ icon: "x",
117
+ onClick: (e)=>{
118
+ e.preventDefault();
119
+ removeInlineBlock();
120
+ },
121
+ round: true,
122
+ size: "small",
123
+ tooltip: t('lexical:blocks:inlineBlocks:remove', {
124
+ label: blockDisplayName
125
+ })
126
+ })
127
+ ]
128
+ })
129
+ ]
130
+ });
131
+ };
132
+
133
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/features/blocks/componentInline/index.tsx"],"sourcesContent":["'use client'\n\nimport React, { useCallback, useEffect, useRef } from 'react'\nconst baseClass = 'inline-block'\n\nimport { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext'\nimport { useLexicalNodeSelection } from '@lexical/react/useLexicalNodeSelection'\nimport { mergeRegister } from '@lexical/utils'\nimport { getTranslation } from '@payloadcms/translations'\nimport { Button, useTranslation } from '@payloadcms/ui'\nimport {\n $getNodeByKey,\n $getSelection,\n $isNodeSelection,\n CLICK_COMMAND,\n COMMAND_PRIORITY_LOW,\n KEY_BACKSPACE_COMMAND,\n KEY_DELETE_COMMAND,\n} from 'lexical'\n\nimport type { ClientComponentProps } from '../../typesClient.js'\nimport type { BlocksFeatureClientProps, ClientBlock } from '../feature.client.js'\nimport type { InlineBlockFields } from '../nodes/InlineBlocksNode.js'\n\nimport { useEditorConfigContext } from '../../../lexical/config/client/EditorConfigProvider.js'\nimport { $isInlineBlockNode } from '../nodes/InlineBlocksNode.js'\nimport { OPEN_INLINE_BLOCK_DRAWER_COMMAND } from '../plugin/commands.js'\nimport './index.scss'\n\ntype Props = {\n readonly formData: InlineBlockFields\n readonly nodeKey?: string\n}\n\nexport const InlineBlockComponent: React.FC<Props> = (props) => {\n const { formData, nodeKey } = props\n const [editor] = useLexicalComposerContext()\n const { i18n, t } = useTranslation<object, string>()\n const { editorConfig, field } = useEditorConfigContext()\n const inlineBlockElemElemRef = useRef<HTMLDivElement | null>(null)\n const [isSelected, setSelected, clearSelection] = useLexicalNodeSelection(nodeKey)\n\n const reducedBlock: ClientBlock = (\n editorConfig?.resolvedFeatureMap?.get('blocks')\n ?.sanitizedClientFeatureProps as ClientComponentProps<BlocksFeatureClientProps>\n )?.reducedInlineBlocks?.find((block) => block.slug === formData?.blockType)\n\n const removeInlineBlock = useCallback(() => {\n editor.update(() => {\n $getNodeByKey(nodeKey).remove()\n })\n }, [editor, nodeKey])\n\n const $onDelete = useCallback(\n (event: KeyboardEvent) => {\n if (isSelected && $isNodeSelection($getSelection())) {\n event.preventDefault()\n const node = $getNodeByKey(nodeKey)\n if ($isInlineBlockNode(node)) {\n node.remove()\n return true\n }\n }\n return false\n },\n [isSelected, nodeKey],\n )\n const onClick = useCallback(\n (payload: MouseEvent) => {\n const event = payload\n // Check if inlineBlockElemElemRef.target or anything WITHIN inlineBlockElemElemRef.target was clicked\n if (\n event.target === inlineBlockElemElemRef.current ||\n inlineBlockElemElemRef.current?.contains(event.target as Node)\n ) {\n if (event.shiftKey) {\n setSelected(!isSelected)\n } else {\n if (!isSelected) {\n clearSelection()\n setSelected(true)\n }\n }\n return true\n }\n\n return false\n },\n [isSelected, setSelected, clearSelection],\n )\n\n useEffect(() => {\n return mergeRegister(\n editor.registerCommand<MouseEvent>(CLICK_COMMAND, onClick, COMMAND_PRIORITY_LOW),\n\n editor.registerCommand(KEY_DELETE_COMMAND, $onDelete, COMMAND_PRIORITY_LOW),\n editor.registerCommand(KEY_BACKSPACE_COMMAND, $onDelete, COMMAND_PRIORITY_LOW),\n )\n }, [clearSelection, editor, isSelected, nodeKey, $onDelete, setSelected, onClick])\n\n const LabelComponent = reducedBlock?.LabelComponent\n\n const blockDisplayName = reducedBlock.labels.singular\n ? getTranslation(reducedBlock.labels.singular, i18n)\n : reducedBlock.slug\n\n return (\n <div\n className={[\n baseClass,\n baseClass + '-' + formData.blockType,\n isSelected && `${baseClass}--selected`,\n ]\n .filter(Boolean)\n .join(' ')}\n ref={inlineBlockElemElemRef}\n >\n {LabelComponent ? (\n <LabelComponent blockKind={'lexicalInlineBlock'} formData={formData} />\n ) : (\n <div>{getTranslation(reducedBlock.labels.singular, i18n)}</div>\n )}\n {editor.isEditable() && (\n <div className={`${baseClass}__actions`}>\n <Button\n buttonStyle=\"icon-label\"\n className={`${baseClass}__editButton`}\n disabled={field?.readOnly}\n el=\"div\"\n icon=\"edit\"\n onClick={() => {\n editor.dispatchCommand(OPEN_INLINE_BLOCK_DRAWER_COMMAND, {\n fields: formData,\n nodeKey,\n })\n }}\n round\n size=\"small\"\n tooltip={t('lexical:blocks:inlineBlocks:edit', { label: blockDisplayName })}\n />\n <Button\n buttonStyle=\"icon-label\"\n className={`${baseClass}__removeButton`}\n disabled={field?.readOnly}\n icon=\"x\"\n onClick={(e) => {\n e.preventDefault()\n removeInlineBlock()\n }}\n round\n size=\"small\"\n tooltip={t('lexical:blocks:inlineBlocks:remove', { label: blockDisplayName })}\n />\n </div>\n )}\n </div>\n )\n}\n"],"names":["React","useCallback","useEffect","useRef","baseClass","useLexicalComposerContext","useLexicalNodeSelection","mergeRegister","getTranslation","Button","useTranslation","$getNodeByKey","$getSelection","$isNodeSelection","CLICK_COMMAND","COMMAND_PRIORITY_LOW","KEY_BACKSPACE_COMMAND","KEY_DELETE_COMMAND","useEditorConfigContext","$isInlineBlockNode","OPEN_INLINE_BLOCK_DRAWER_COMMAND","InlineBlockComponent","props","formData","nodeKey","editor","i18n","t","editorConfig","field","inlineBlockElemElemRef","isSelected","setSelected","clearSelection","reducedBlock","resolvedFeatureMap","get","sanitizedClientFeatureProps","reducedInlineBlocks","find","block","slug","blockType","removeInlineBlock","update","remove","$onDelete","event","preventDefault","node","onClick","payload","target","current","contains","shiftKey","registerCommand","LabelComponent","blockDisplayName","labels","singular","div","className","filter","Boolean","join","ref","blockKind","isEditable","buttonStyle","disabled","readOnly","el","icon","dispatchCommand","fields","round","size","tooltip","label","e"],"mappings":"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"}
@@ -1,6 +1,11 @@
1
1
  import type { ReducedBlock } from '@payloadcms/ui/utilities/buildComponentMap';
2
+ import type { Block } from 'payload';
3
+ export type ClientBlock = {
4
+ LabelComponent?: Block['admin']['components']['Label'];
5
+ } & ReducedBlock;
2
6
  export type BlocksFeatureClientProps = {
3
- reducedBlocks: ReducedBlock[];
7
+ reducedBlocks: ClientBlock[];
8
+ reducedInlineBlocks: ClientBlock[];
4
9
  };
5
10
  export declare const BlocksFeatureClient: import("react").FC<{
6
11
  featureKey: string;
@@ -1 +1 @@
1
- {"version":3,"file":"feature.client.d.ts","sourceRoot":"","sources":["../../../src/features/blocks/feature.client.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4CAA4C,CAAA;AAU9E,MAAM,MAAM,wBAAwB,GAAG;IACrC,aAAa,EAAE,YAAY,EAAE,CAAA;CAC9B,CAAA;AAED,eAAO,MAAM,mBAAmB;;;6BAwE7B,CAAA"}
1
+ {"version":3,"file":"feature.client.d.ts","sourceRoot":"","sources":["../../../src/features/blocks/feature.client.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4CAA4C,CAAA;AAC9E,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAcpC,MAAM,MAAM,WAAW,GAAG;IACxB,cAAc,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,CAAA;CACvD,GAAG,YAAY,CAAA;AAEhB,MAAM,MAAM,wBAAwB,GAAG;IACrC,aAAa,EAAE,WAAW,EAAE,CAAA;IAC5B,mBAAmB,EAAE,WAAW,EAAE,CAAA;CACnC,CAAA;AAED,eAAO,MAAM,mBAAmB;;;6BAyI7B,CAAA"}
@@ -1,13 +1,16 @@
1
1
  'use client';
2
2
  import { getTranslation } from '@payloadcms/translations';
3
3
  import { BlockIcon } from '../../lexical/ui/icons/Block/index.js';
4
+ import { InlineBlocksIcon } from '../../lexical/ui/icons/InlineBlocks/index.js';
4
5
  import { createClientFeature } from '../../utilities/createClientFeature.js';
5
6
  import { BlockNode } from './nodes/BlocksNode.js';
6
- import { INSERT_BLOCK_COMMAND } from './plugin/commands.js';
7
+ import { InlineBlockNode } from './nodes/InlineBlocksNode.js';
8
+ import { INSERT_BLOCK_COMMAND, OPEN_INLINE_BLOCK_DRAWER_COMMAND } from './plugin/commands.js';
7
9
  import { BlocksPlugin } from './plugin/index.js';
8
10
  export const BlocksFeatureClient = createClientFeature(({ props })=>({
9
11
  nodes: [
10
- BlockNode
12
+ BlockNode,
13
+ InlineBlockNode
11
14
  ],
12
15
  plugins: [
13
16
  {
@@ -18,7 +21,7 @@ export const BlocksFeatureClient = createClientFeature(({ props })=>({
18
21
  sanitizedClientFeatureProps: props,
19
22
  slashMenu: {
20
23
  groups: [
21
- {
24
+ props.reducedBlocks?.length ? {
22
25
  items: props.reducedBlocks.map((block)=>{
23
26
  return {
24
27
  Icon: BlockIcon,
@@ -47,12 +50,44 @@ export const BlocksFeatureClient = createClientFeature(({ props })=>({
47
50
  label: ({ i18n })=>{
48
51
  return i18n.t('lexical:blocks:label');
49
52
  }
50
- }
51
- ]
53
+ } : null,
54
+ props.reducedInlineBlocks?.length ? {
55
+ items: props.reducedInlineBlocks.map((inlineBlock)=>{
56
+ return {
57
+ Icon: InlineBlocksIcon,
58
+ key: 'inlineBlocks-' + inlineBlock.slug,
59
+ keywords: [
60
+ 'inlineBlock',
61
+ 'inline block',
62
+ inlineBlock.slug
63
+ ],
64
+ label: ({ i18n })=>{
65
+ if (!inlineBlock.labels.singular) {
66
+ return inlineBlock.slug;
67
+ }
68
+ return getTranslation(inlineBlock.labels.singular, i18n);
69
+ },
70
+ onSelect: ({ editor })=>{
71
+ editor.dispatchCommand(OPEN_INLINE_BLOCK_DRAWER_COMMAND, {
72
+ fields: {
73
+ id: null,
74
+ blockName: '',
75
+ blockType: inlineBlock.slug
76
+ }
77
+ });
78
+ }
79
+ };
80
+ }),
81
+ key: 'inlineBlocks',
82
+ label: ({ i18n })=>{
83
+ return i18n.t('lexical:blocks:inlineBlocks:label');
84
+ }
85
+ } : null
86
+ ].filter(Boolean)
52
87
  },
53
88
  toolbarFixed: {
54
89
  groups: [
55
- {
90
+ props.reducedBlocks?.length ? {
56
91
  type: 'dropdown',
57
92
  ChildComponent: BlockIcon,
58
93
  items: props.reducedBlocks.map((block, index)=>{
@@ -78,8 +113,35 @@ export const BlocksFeatureClient = createClientFeature(({ props })=>({
78
113
  }),
79
114
  key: 'blocks',
80
115
  order: 20
81
- }
82
- ]
116
+ } : null,
117
+ props.reducedInlineBlocks?.length ? {
118
+ type: 'dropdown',
119
+ ChildComponent: InlineBlocksIcon,
120
+ items: props.reducedInlineBlocks.map((inlineBlock, index)=>{
121
+ return {
122
+ ChildComponent: InlineBlocksIcon,
123
+ isActive: undefined,
124
+ key: 'inlineBlock-' + inlineBlock.slug,
125
+ label: ({ i18n })=>{
126
+ if (!inlineBlock.labels.singular) {
127
+ return inlineBlock.slug;
128
+ }
129
+ return getTranslation(inlineBlock.labels.singular, i18n);
130
+ },
131
+ onSelect: ({ editor })=>{
132
+ editor.dispatchCommand(OPEN_INLINE_BLOCK_DRAWER_COMMAND, {
133
+ fields: {
134
+ blockType: inlineBlock.slug
135
+ }
136
+ });
137
+ },
138
+ order: index
139
+ };
140
+ }),
141
+ key: 'inlineBlocks',
142
+ order: 25
143
+ } : null
144
+ ].filter(Boolean)
83
145
  }
84
146
  }));
85
147
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/features/blocks/feature.client.tsx"],"sourcesContent":["'use client'\n\nimport type { ReducedBlock } from '@payloadcms/ui/utilities/buildComponentMap'\n\nimport { getTranslation } from '@payloadcms/translations'\n\nimport { BlockIcon } from '../../lexical/ui/icons/Block/index.js'\nimport { createClientFeature } from '../../utilities/createClientFeature.js'\nimport { BlockNode } from './nodes/BlocksNode.js'\nimport { INSERT_BLOCK_COMMAND } from './plugin/commands.js'\nimport { BlocksPlugin } from './plugin/index.js'\n\nexport type BlocksFeatureClientProps = {\n reducedBlocks: ReducedBlock[]\n}\n\nexport const BlocksFeatureClient = createClientFeature<BlocksFeatureClientProps>(({ props }) => ({\n nodes: [BlockNode],\n plugins: [\n {\n Component: BlocksPlugin,\n position: 'normal',\n },\n ],\n sanitizedClientFeatureProps: props,\n slashMenu: {\n groups: [\n {\n items: props.reducedBlocks.map((block) => {\n return {\n Icon: BlockIcon,\n key: 'block-' + block.slug,\n keywords: ['block', 'blocks', block.slug],\n label: ({ i18n }) => {\n if (!block.labels.singular) {\n return block.slug\n }\n\n return getTranslation(block.labels.singular, i18n)\n },\n onSelect: ({ editor }) => {\n editor.dispatchCommand(INSERT_BLOCK_COMMAND, {\n id: null,\n blockName: '',\n blockType: block.slug,\n })\n },\n }\n }),\n key: 'blocks',\n label: ({ i18n }) => {\n return i18n.t('lexical:blocks:label')\n },\n },\n ],\n },\n toolbarFixed: {\n groups: [\n {\n type: 'dropdown',\n ChildComponent: BlockIcon,\n items: props.reducedBlocks.map((block, index) => {\n return {\n ChildComponent: BlockIcon,\n isActive: undefined, // At this point, we would be inside a sub-richtext-editor. And at this point this will be run against the focused sub-editor, not the parent editor which has the actual block. Thus, no point in running this\n key: 'block-' + block.slug,\n label: ({ i18n }) => {\n if (!block.labels.singular) {\n return block.slug\n }\n\n return getTranslation(block.labels.singular, i18n)\n },\n onSelect: ({ editor }) => {\n editor.dispatchCommand(INSERT_BLOCK_COMMAND, {\n id: null,\n blockName: '',\n blockType: block.slug,\n })\n },\n order: index,\n }\n }),\n key: 'blocks',\n order: 20,\n },\n ],\n },\n}))\n"],"names":["getTranslation","BlockIcon","createClientFeature","BlockNode","INSERT_BLOCK_COMMAND","BlocksPlugin","BlocksFeatureClient","props","nodes","plugins","Component","position","sanitizedClientFeatureProps","slashMenu","groups","items","reducedBlocks","map","block","Icon","key","slug","keywords","label","i18n","labels","singular","onSelect","editor","dispatchCommand","id","blockName","blockType","t","toolbarFixed","type","ChildComponent","index","isActive","undefined","order"],"mappings":"AAAA;AAIA,SAASA,cAAc,QAAQ,2BAA0B;AAEzD,SAASC,SAAS,QAAQ,wCAAuC;AACjE,SAASC,mBAAmB,QAAQ,yCAAwC;AAC5E,SAASC,SAAS,QAAQ,wBAAuB;AACjD,SAASC,oBAAoB,QAAQ,uBAAsB;AAC3D,SAASC,YAAY,QAAQ,oBAAmB;AAMhD,OAAO,MAAMC,sBAAsBJ,oBAA8C,CAAC,EAAEK,KAAK,EAAE,GAAM,CAAA;QAC/FC,OAAO;YAACL;SAAU;QAClBM,SAAS;YACP;gBACEC,WAAWL;gBACXM,UAAU;YACZ;SACD;QACDC,6BAA6BL;QAC7BM,WAAW;YACTC,QAAQ;gBACN;oBACEC,OAAOR,MAAMS,aAAa,CAACC,GAAG,CAAC,CAACC;wBAC9B,OAAO;4BACLC,MAAMlB;4BACNmB,KAAK,WAAWF,MAAMG,IAAI;4BAC1BC,UAAU;gCAAC;gCAAS;gCAAUJ,MAAMG,IAAI;6BAAC;4BACzCE,OAAO,CAAC,EAAEC,IAAI,EAAE;gCACd,IAAI,CAACN,MAAMO,MAAM,CAACC,QAAQ,EAAE;oCAC1B,OAAOR,MAAMG,IAAI;gCACnB;gCAEA,OAAOrB,eAAekB,MAAMO,MAAM,CAACC,QAAQ,EAAEF;4BAC/C;4BACAG,UAAU,CAAC,EAAEC,MAAM,EAAE;gCACnBA,OAAOC,eAAe,CAACzB,sBAAsB;oCAC3C0B,IAAI;oCACJC,WAAW;oCACXC,WAAWd,MAAMG,IAAI;gCACvB;4BACF;wBACF;oBACF;oBACAD,KAAK;oBACLG,OAAO,CAAC,EAAEC,IAAI,EAAE;wBACd,OAAOA,KAAKS,CAAC,CAAC;oBAChB;gBACF;aACD;QACH;QACAC,cAAc;YACZpB,QAAQ;gBACN;oBACEqB,MAAM;oBACNC,gBAAgBnC;oBAChBc,OAAOR,MAAMS,aAAa,CAACC,GAAG,CAAC,CAACC,OAAOmB;wBACrC,OAAO;4BACLD,gBAAgBnC;4BAChBqC,UAAUC;4BACVnB,KAAK,WAAWF,MAAMG,IAAI;4BAC1BE,OAAO,CAAC,EAAEC,IAAI,EAAE;gCACd,IAAI,CAACN,MAAMO,MAAM,CAACC,QAAQ,EAAE;oCAC1B,OAAOR,MAAMG,IAAI;gCACnB;gCAEA,OAAOrB,eAAekB,MAAMO,MAAM,CAACC,QAAQ,EAAEF;4BAC/C;4BACAG,UAAU,CAAC,EAAEC,MAAM,EAAE;gCACnBA,OAAOC,eAAe,CAACzB,sBAAsB;oCAC3C0B,IAAI;oCACJC,WAAW;oCACXC,WAAWd,MAAMG,IAAI;gCACvB;4BACF;4BACAmB,OAAOH;wBACT;oBACF;oBACAjB,KAAK;oBACLoB,OAAO;gBACT;aACD;QACH;IACF,CAAA,GAAG"}
1
+ {"version":3,"sources":["../../../src/features/blocks/feature.client.tsx"],"sourcesContent":["'use client'\n\nimport type { ReducedBlock } from '@payloadcms/ui/utilities/buildComponentMap'\nimport type { Block } from 'payload'\n\nimport { getTranslation } from '@payloadcms/translations'\n\nimport type { ToolbarGroup } from '../toolbars/types.js'\n\nimport { BlockIcon } from '../../lexical/ui/icons/Block/index.js'\nimport { InlineBlocksIcon } from '../../lexical/ui/icons/InlineBlocks/index.js'\nimport { createClientFeature } from '../../utilities/createClientFeature.js'\nimport { BlockNode } from './nodes/BlocksNode.js'\nimport { InlineBlockNode } from './nodes/InlineBlocksNode.js'\nimport { INSERT_BLOCK_COMMAND, OPEN_INLINE_BLOCK_DRAWER_COMMAND } from './plugin/commands.js'\nimport { BlocksPlugin } from './plugin/index.js'\n\nexport type ClientBlock = {\n LabelComponent?: Block['admin']['components']['Label']\n} & ReducedBlock\n\nexport type BlocksFeatureClientProps = {\n reducedBlocks: ClientBlock[]\n reducedInlineBlocks: ClientBlock[]\n}\n\nexport const BlocksFeatureClient = createClientFeature<BlocksFeatureClientProps>(({ props }) => ({\n nodes: [BlockNode, InlineBlockNode],\n plugins: [\n {\n Component: BlocksPlugin,\n position: 'normal',\n },\n ],\n sanitizedClientFeatureProps: props,\n slashMenu: {\n groups: [\n props.reducedBlocks?.length\n ? {\n items: props.reducedBlocks.map((block) => {\n return {\n Icon: BlockIcon,\n key: 'block-' + block.slug,\n keywords: ['block', 'blocks', block.slug],\n label: ({ i18n }) => {\n if (!block.labels.singular) {\n return block.slug\n }\n\n return getTranslation(block.labels.singular, i18n)\n },\n onSelect: ({ editor }) => {\n editor.dispatchCommand(INSERT_BLOCK_COMMAND, {\n id: null,\n blockName: '',\n blockType: block.slug,\n })\n },\n }\n }),\n key: 'blocks',\n label: ({ i18n }) => {\n return i18n.t('lexical:blocks:label')\n },\n }\n : null,\n props.reducedInlineBlocks?.length\n ? {\n items: props.reducedInlineBlocks.map((inlineBlock) => {\n return {\n Icon: InlineBlocksIcon,\n key: 'inlineBlocks-' + inlineBlock.slug,\n keywords: ['inlineBlock', 'inline block', inlineBlock.slug],\n label: ({ i18n }) => {\n if (!inlineBlock.labels.singular) {\n return inlineBlock.slug\n }\n\n return getTranslation(inlineBlock.labels.singular, i18n)\n },\n onSelect: ({ editor }) => {\n editor.dispatchCommand(OPEN_INLINE_BLOCK_DRAWER_COMMAND, {\n fields: {\n id: null,\n blockName: '',\n blockType: inlineBlock.slug,\n },\n })\n },\n }\n }),\n key: 'inlineBlocks',\n label: ({ i18n }) => {\n return i18n.t('lexical:blocks:inlineBlocks:label')\n },\n }\n : null,\n ].filter(Boolean),\n },\n toolbarFixed: {\n groups: [\n props.reducedBlocks?.length\n ? {\n type: 'dropdown',\n ChildComponent: BlockIcon,\n items: props.reducedBlocks.map((block, index) => {\n return {\n ChildComponent: BlockIcon,\n isActive: undefined, // At this point, we would be inside a sub-richtext-editor. And at this point this will be run against the focused sub-editor, not the parent editor which has the actual block. Thus, no point in running this\n key: 'block-' + block.slug,\n label: ({ i18n }) => {\n if (!block.labels.singular) {\n return block.slug\n }\n\n return getTranslation(block.labels.singular, i18n)\n },\n onSelect: ({ editor }) => {\n editor.dispatchCommand(INSERT_BLOCK_COMMAND, {\n id: null,\n blockName: '',\n blockType: block.slug,\n })\n },\n order: index,\n }\n }),\n key: 'blocks',\n order: 20,\n }\n : null,\n props.reducedInlineBlocks?.length\n ? {\n type: 'dropdown',\n ChildComponent: InlineBlocksIcon,\n items: props.reducedInlineBlocks.map((inlineBlock, index) => {\n return {\n ChildComponent: InlineBlocksIcon,\n isActive: undefined,\n key: 'inlineBlock-' + inlineBlock.slug,\n label: ({ i18n }) => {\n if (!inlineBlock.labels.singular) {\n return inlineBlock.slug\n }\n\n return getTranslation(inlineBlock.labels.singular, i18n)\n },\n onSelect: ({ editor }) => {\n editor.dispatchCommand(OPEN_INLINE_BLOCK_DRAWER_COMMAND, {\n fields: {\n blockType: inlineBlock.slug,\n },\n })\n },\n order: index,\n }\n }),\n key: 'inlineBlocks',\n order: 25,\n }\n : null,\n ].filter(Boolean) as ToolbarGroup[],\n },\n}))\n"],"names":["getTranslation","BlockIcon","InlineBlocksIcon","createClientFeature","BlockNode","InlineBlockNode","INSERT_BLOCK_COMMAND","OPEN_INLINE_BLOCK_DRAWER_COMMAND","BlocksPlugin","BlocksFeatureClient","props","nodes","plugins","Component","position","sanitizedClientFeatureProps","slashMenu","groups","reducedBlocks","length","items","map","block","Icon","key","slug","keywords","label","i18n","labels","singular","onSelect","editor","dispatchCommand","id","blockName","blockType","t","reducedInlineBlocks","inlineBlock","fields","filter","Boolean","toolbarFixed","type","ChildComponent","index","isActive","undefined","order"],"mappings":"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"}
@@ -1,7 +1,8 @@
1
1
  import type { Block } from 'payload';
2
2
  import type { BlocksFeatureClientProps } from './feature.client.js';
3
3
  export type BlocksFeatureProps = {
4
- blocks: Block[];
4
+ blocks?: Block[];
5
+ inlineBlocks?: Block[];
5
6
  };
6
7
  export declare const BlocksFeature: import("../typesServer.js").FeatureProviderProviderServer<BlocksFeatureProps, BlocksFeatureProps, BlocksFeatureClientProps>;
7
8
  //# sourceMappingURL=feature.server.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"feature.server.d.ts","sourceRoot":"","sources":["../../../src/features/blocks/feature.server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAA6B,MAAM,SAAS,CAAA;AAI/D,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAA;AAWnE,MAAM,MAAM,kBAAkB,GAAG;IAC/B,MAAM,EAAE,KAAK,EAAE,CAAA;CAChB,CAAA;AAED,eAAO,MAAM,aAAa,6HAsGxB,CAAA"}
1
+ {"version":3,"file":"feature.server.d.ts","sourceRoot":"","sources":["../../../src/features/blocks/feature.server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAA6B,MAAM,SAAS,CAAA;AAI/D,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAA;AAYnE,MAAM,MAAM,kBAAkB,GAAG;IAC/B,MAAM,CAAC,EAAE,KAAK,EAAE,CAAA;IAChB,YAAY,CAAC,EAAE,KAAK,EAAE,CAAA;CACvB,CAAA;AAED,eAAO,MAAM,aAAa,6HAoKxB,CAAA"}